diff --git a/.gitattributes b/.gitattributes index 1ff0c423..1b136160 100644 --- a/.gitattributes +++ b/.gitattributes @@ -61,3 +61,7 @@ #*.PDF diff=astextplain #*.rtf diff=astextplain #*.RTF diff=astextplain + +# Access database files are binary. +*.accdb binary +*.mdb binary diff --git a/.github/actions/exclude-defender/action.yml b/.github/actions/exclude-defender/action.yml new file mode 100644 index 00000000..b38f04bc --- /dev/null +++ b/.github/actions/exclude-defender/action.yml @@ -0,0 +1,39 @@ +name: 'Exclude test files from Defender' +description: >- + Excludes the workspace and temp directories from Windows Defender real-time scanning. A no-op off Windows, + so it is safe to call unconditionally from a cross-platform matrix job. + +# Why: these suites spend their time creating and writing .accdb files, and Defender scans every one. +# +# NOT PROVEN, and don't repeat the 41% figure. On EFCore.LibRed.FunctionalTests (~37,800 tests) the Windows +# leg ran 14m01 before this and 8m18 immediately after, against ubuntu's 9m30 and macOS's 10m22 - but a later +# run of the same code came back at 13m. GitHub's runners are VMs on shared hardware, so a single before/after +# pair cannot separate the change from whoever else was on that host. The honest position is that the +# exclusion plausibly helps and demonstrably costs nothing; establishing it would need several runs each way, +# and the windows:ubuntu ratio across them rather than one absolute number. +# +# On the Jet side BuildAndTest moved by a couple of minutes out of ~30 (2010/x86/ODBC 29m16, OLE DB 33m32), +# which is also inside the noise band, so treat it the same way: kept because it is free, not because it is +# shown to work. Those suites run sequentially anyway (MaxParallelThreads = 1, since the ACE provider crashes +# concurrently), and that serialisation - not I/O overhead - is what their ~30 minutes actually is. +# +# Call it immediately after checkout so that restore, build and any engine install are covered too, not just +# the test run. Failure is tolerated: a policy-managed Defender logs and carries on rather than failing the +# job, since this is a speed measure and never a correctness one. +runs: + using: composite + steps: + - name: Exclude test files from Defender + if: runner.os == 'Windows' + shell: pwsh + run: | + try + { + Add-MpPreference -ExclusionPath $env:GITHUB_WORKSPACE, $env:TEMP, $env:RUNNER_TEMP -ErrorAction Stop + Add-MpPreference -ExclusionExtension 'accdb', 'mdb', 'mdw' -ErrorAction Stop + echo 'Defender exclusions applied.' + } + catch + { + echo "Defender exclusions not applied (continuing): $_" + } diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 4894c9aa..bd130a30 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -56,9 +56,83 @@ jobs: $lastCommitCreatedBeforeSeconds = [int]((Get-Date) - $headCommitDateTime).TotalSeconds echo "lastCommitCreatedBeforeSeconds=$lastCommitCreatedBeforeSeconds" >> $env:GITHUB_OUTPUT echo "lastCommitCreatedBeforeSeconds: = $lastCommitCreatedBeforeSeconds" + Changes: + runs-on: ubuntu-latest + outputs: + jet: ${{ steps.Decide.outputs.jet }} + libred: ${{ steps.Decide.outputs.libred }} + steps: + - name: Checkout + uses: actions/checkout@v5 + with: + fetch-depth: 0 + - name: 'Filter Changed Paths' + id: Filter + uses: dorny/paths-filter@v4 + with: + filters: | + # Anything here rebuilds the world, so it belongs to both sides. + shared: &shared + - '.github/workflows/**' + - 'Directory.Build.props' + - 'Version.props' + - 'global.json' + - 'nuget.config' + - 'NuGet.config' + - 'Key.snk' + - 'EFCore.Jet.sln' + - 'src/Directory.Build.props' + - 'test/Directory.Build.props' + - 'test/Shared/**' + jet: + - *shared + - 'src/Shared/**' + - 'src/EFCore.Jet/**' + - 'src/EFCore.Jet.Data/**' + - 'src/EFCore.Jet.Odbc/**' + - 'src/EFCore.Jet.OleDb/**' + - 'test/EFCore.Jet.Data.Tests/**' + - 'test/EFCore.Jet.FunctionalTests/**' + - 'test/EFCore.Jet.IntegrationTests/**' + - 'test/EFCore.Jet.Tests/**' + - 'test/JetProviderExceptionTests/**' + libred: + - *shared + - 'src/LibRed/**' + - 'test/LibRed.Ado.Tests/**' + - 'test/LibRed.Core.Tests/**' + - 'test/LibRed.EFCore.Tests/**' + - 'test/LibRed.Engine.Tests/**' + - 'test/EFCore.LibRed.FunctionalTests/**' + # LibRed.Ado references EFCore.Jet.Data and LibRed.EFCore references EFCore.Jet, so a + # change on the Jet side has to re-run LibRed. The reverse is not true: nothing under + # src/LibRed is referenced by the Jet provider. + - 'src/EFCore.Jet/**' + - 'src/EFCore.Jet.Data/**' + # Northwind.accdb lives here and every LibRed suite links to it as its fixture. + - 'test/JetProviderExceptionTests/**' + - name: 'Decide What To Run' + id: Decide + shell: pwsh + run: | + # A published release (or any event that isn't a push/PR) has no meaningful diff to filter + # against, so it runs everything. + $runEverything = '${{ github.event_name }}' -notin @('push', 'pull_request') + + $jet = $runEverything -or ('${{ steps.Filter.outputs.jet }}' -eq 'true') + $libred = $runEverything -or ('${{ steps.Filter.outputs.libred }}' -eq 'true') + + echo "jet=$($jet.ToString().ToLowerInvariant())" >> $env:GITHUB_OUTPUT + echo "libred=$($libred.ToString().ToLowerInvariant())" >> $env:GITHUB_OUTPUT + + echo "runEverything: $runEverything" + echo "jet: $jet" + echo "libred: $libred" BuildAndTest: - needs: Preconditions - if: needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300 + needs: + - Preconditions + - Changes + if: (needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300) && needs.Changes.outputs.jet == 'true' strategy: fail-fast: false matrix: @@ -77,6 +151,9 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + # Defender scans every .accdb these suites write; see the action for the measurement. + - name: Exclude test files from Defender + uses: ./.github/actions/exclude-defender - name: Set additional variables shell: pwsh run: | @@ -222,13 +299,18 @@ jobs: shell: pwsh run: | $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Data.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m + # No --verbosity detailed: it dumps every test's captured output (EF logs the compiled shaper + # expression tree per query under the Query category), which ran to ~62,000 lines in 43s per shard + # and got truncated by GitHub anyway. Nothing consumes it - the green-tests extraction parses the + # trx, and crash detection looks for Sequence_* blame dumps - so it cost console I/O for a log too + # big to read. On these sequential suites those writes sit directly on the critical path. + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Data.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m - name: 'Run Tests: EFCore.Jet.Tests' if: always() && env.skipTests != 'true' shell: pwsh run: | $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m - name: 'Run Tests: EFCore.Jet.FunctionalTests (Shard 1 - Query Core)' if: always() && env.skipTests != 'true' shell: pwsh @@ -241,7 +323,7 @@ jobs: } $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName~.FunctionalTests.Query.&FullyQualifiedName!~.FunctionalTests.Query.Associations.&FullyQualifiedName!~.FunctionalTests.Query.Translations." + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName~.FunctionalTests.Query.&FullyQualifiedName!~.FunctionalTests.Query.Associations.&FullyQualifiedName!~.FunctionalTests.Query.Translations." # # Check for test runner crashes: @@ -286,7 +368,7 @@ jobs: } $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName~.FunctionalTests.Query.Associations.|FullyQualifiedName~.FunctionalTests.Query.Translations." + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName~.FunctionalTests.Query.Associations.|FullyQualifiedName~.FunctionalTests.Query.Translations." # # Check for test runner crashes: @@ -331,7 +413,7 @@ jobs: } $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName!~.FunctionalTests.Query." + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName!~.FunctionalTests.Query." # # Check for test runner crashes: @@ -435,6 +517,124 @@ jobs: with: name: green-tests_${{ env.matrixId }} path: ${{ env.commitGreenTestsFile }} + LibRed: + needs: + - Preconditions + - Changes + if: (needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300) && needs.Changes.outputs.libred == 'true' + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - windows-latest + - macos-latest + runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v5 + # Defender scans every .accdb these suites write; see the action for the measurement. + - name: Exclude test files from Defender + uses: ./.github/actions/exclude-defender + - name: Install .NET SDK + uses: actions/setup-dotnet@v5 + with: + global-json-file: global.json + - name: .NET Information + run: dotnet --info + - name: 'Run Tests: LibRed.Engine.Tests' + if: env.skipTests != 'true' + run: dotnet test ./test/LibRed.Engine.Tests --configuration ${{ env.buildConfiguration }} -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 3m + + # The rest of the LibRed suites cross-check LibRed's output against the real engine over OLE DB, + # so unlike the job above they do need Windows with ACE installed. + LibRedAccess: + needs: + - Preconditions + - Changes + if: (needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300) && needs.Changes.outputs.libred == 'true' + strategy: + fail-fast: false + matrix: + aceVersion: + - 2016 + runs-on: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v5 + # Defender scans every .accdb these suites write; see the action for the measurement. + - name: Exclude test files from Defender + uses: ./.github/actions/exclude-defender + - name: Install .NET SDK + uses: actions/setup-dotnet@v5 + with: + global-json-file: global.json + - name: Install Access Database Engine + shell: pwsh + run: | + $setupFileName = 'AccessDatabaseEngine_${{ matrix.aceVersion }}_x64.exe' + Invoke-WebRequest "https://cirrusredorg.github.io/EntityFrameworkCore.Jet/$setupFileName" -OutFile $setupFileName + & ".\$setupFileName" /passive /quiet /norestart REBOOT=ReallySuppress | Out-Default + - name: 'ACE Information' + shell: pwsh + run: | + foreach ($provider in [System.Data.OleDb.OleDbEnumerator]::GetRootEnumerator()) + { + $v = New-Object PSObject + for ($i = 0; $i -lt $provider.FieldCount; $i++) + { + Add-Member -in $v NoteProperty $provider.GetName($i) $provider.GetValue($i) + } + $v + } + - name: 'Run Tests: LibRed.Core.Tests' + if: env.skipTests != 'true' + shell: pwsh + run: dotnet test .\test\LibRed.Core.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 5m + - name: 'Run Tests: LibRed.Ado.Tests' + if: always() && env.skipTests != 'true' + shell: pwsh + run: dotnet test .\test\LibRed.Ado.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 5m + - name: 'Run Tests: LibRed.EFCore.Tests' + if: always() && env.skipTests != 'true' + shell: pwsh + run: dotnet test .\test\LibRed.EFCore.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 5m + + LibRedFunctional: + needs: + - Preconditions + - Changes + # Non-blocking for now: the suite sits at ~278 failures out of ~36,000 run, so it would be red on + # every push and quickly learn to be ignored. It still runs on every push and the log is there to + # read. Drop this line once the remaining failures are fixed or skipped. + continue-on-error: true + if: (needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300) && needs.Changes.outputs.libred == 'true' + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - windows-latest + - macos-latest + runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v5 + # Defender scans every .accdb these suites write; see the action for the measurement. + - name: Exclude test files from Defender + uses: ./.github/actions/exclude-defender + - name: Install .NET SDK + uses: actions/setup-dotnet@v5 + with: + global-json-file: global.json + # No Access engine on ANY leg now. Windows used to install ACE as a control, on the reasoning that a + # test failing only off Windows would be a real cross-platform gap - but all three legs have since + # agreed exactly (35,578 passed / 179 failed / 2,016 skipped), so nothing here needs ACE and the + # control has served its purpose. LibRedAccess still installs it, which is where the cross-checks + # against the real engine belong. + - name: 'Run Tests: EFCore.LibRed.FunctionalTests' + if: env.skipTests != 'true' + run: dotnet test test/EFCore.LibRed.FunctionalTests --configuration ${{ env.buildConfiguration }} -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 10m MergeArtifacts: needs: BuildAndTest if: always() diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index ecad2fd2..3295213b 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -58,9 +58,89 @@ jobs: $lastCommitCreatedBeforeSeconds = [int]((Get-Date) - $headCommitDateTime).TotalSeconds echo "lastCommitCreatedBeforeSeconds=$lastCommitCreatedBeforeSeconds" >> $env:GITHUB_OUTPUT echo "lastCommitCreatedBeforeSeconds: = $lastCommitCreatedBeforeSeconds" + Changes: + runs-on: ubuntu-latest + outputs: + jet: ${{ steps.Decide.outputs.jet }} + libred: ${{ steps.Decide.outputs.libred }} + steps: + - name: Checkout + uses: actions/checkout@v5 + with: + fetch-depth: 0 + - name: 'Filter Changed Paths' + id: Filter + uses: dorny/paths-filter@v4 + with: + # Diff only THIS push's commits. Without a base, paths-filter defaults a non-default-branch push to + # the merge-base with the default branch (master), which on a long-lived branch like `libred` means + # every push is compared against the whole ~869-file divergence — so every filter always matched. The + # push's own delta (before..after) is what "did this push touch Jet/LibRed" actually means. On the + # first push to a branch `before` is all-zeros; paths-filter treats that as "everything changed". + base: ${{ github.event.before }} + filters: | + # Anything here rebuilds the world, so it belongs to both sides. + shared: &shared + - '.github/workflows/**' + - 'Directory.Build.props' + - 'Version.props' + - 'global.json' + - 'nuget.config' + - 'NuGet.config' + - 'Key.snk' + - 'EFCore.Jet.sln' + - 'src/Directory.Build.props' + - 'test/Directory.Build.props' + - 'test/Shared/**' + jet: + - *shared + - 'src/Shared/**' + - 'src/EFCore.Jet/**' + - 'src/EFCore.Jet.Data/**' + - 'src/EFCore.Jet.Odbc/**' + - 'src/EFCore.Jet.OleDb/**' + - 'test/EFCore.Jet.Data.Tests/**' + - 'test/EFCore.Jet.FunctionalTests/**' + - 'test/EFCore.Jet.IntegrationTests/**' + - 'test/EFCore.Jet.Tests/**' + - 'test/JetProviderExceptionTests/**' + libred: + - *shared + - 'src/LibRed/**' + - 'test/LibRed.Ado.Tests/**' + - 'test/LibRed.Core.Tests/**' + - 'test/LibRed.EFCore.Tests/**' + - 'test/LibRed.Engine.Tests/**' + - 'test/EFCore.LibRed.FunctionalTests/**' + # LibRed.Ado references EFCore.Jet.Data and LibRed.EFCore references EFCore.Jet, so a + # change on the Jet side has to re-run LibRed. The reverse is not true: nothing under + # src/LibRed is referenced by the Jet provider. + - 'src/EFCore.Jet/**' + - 'src/EFCore.Jet.Data/**' + # Northwind.accdb lives here and every LibRed suite links to it as its fixture. + - 'test/JetProviderExceptionTests/**' + - name: 'Decide What To Run' + id: Decide + shell: pwsh + run: | + # A published release (or any event that isn't a push/PR) has no meaningful diff to filter + # against, so it runs everything. + $runEverything = '${{ github.event_name }}' -notin @('push', 'pull_request') + + $jet = $runEverything -or ('${{ steps.Filter.outputs.jet }}' -eq 'true') + $libred = $runEverything -or ('${{ steps.Filter.outputs.libred }}' -eq 'true') + + echo "jet=$($jet.ToString().ToLowerInvariant())" >> $env:GITHUB_OUTPUT + echo "libred=$($libred.ToString().ToLowerInvariant())" >> $env:GITHUB_OUTPUT + + echo "runEverything: $runEverything" + echo "jet: $jet" + echo "libred: $libred" BuildAndTest: - needs: Preconditions - if: needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300 + needs: + - Preconditions + - Changes + if: (needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300) && needs.Changes.outputs.jet == 'true' strategy: fail-fast: false matrix: @@ -79,6 +159,9 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + # Defender scans every .accdb these suites write; see the action for the measurement. + - name: Exclude test files from Defender + uses: ./.github/actions/exclude-defender - name: Set additional variables shell: pwsh run: | @@ -224,13 +307,18 @@ jobs: shell: pwsh run: | $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Data.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m + # No --verbosity detailed: it dumps every test's captured output (EF logs the compiled shaper + # expression tree per query under the Query category), which ran to ~62,000 lines in 43s per shard + # and got truncated by GitHub anyway. Nothing consumes it - the green-tests extraction parses the + # trx, and crash detection looks for Sequence_* blame dumps - so it cost console I/O for a log too + # big to read. On these sequential suites those writes sit directly on the critical path. + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Data.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m - name: 'Run Tests: EFCore.Jet.Tests' if: always() && env.skipTests != 'true' shell: pwsh run: | $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m - name: 'Run Tests: EFCore.Jet.FunctionalTests (Shard 1 - Query Core)' if: always() && env.skipTests != 'true' shell: pwsh @@ -243,7 +331,7 @@ jobs: } $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName~.FunctionalTests.Query.&FullyQualifiedName!~.FunctionalTests.Query.Associations.&FullyQualifiedName!~.FunctionalTests.Query.Translations." + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName~.FunctionalTests.Query.&FullyQualifiedName!~.FunctionalTests.Query.Associations.&FullyQualifiedName!~.FunctionalTests.Query.Translations." # # Check for test runner crashes: @@ -288,7 +376,7 @@ jobs: } $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName~.FunctionalTests.Query.Associations.|FullyQualifiedName~.FunctionalTests.Query.Translations." + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName~.FunctionalTests.Query.Associations.|FullyQualifiedName~.FunctionalTests.Query.Translations." # # Check for test runner crashes: @@ -333,7 +421,7 @@ jobs: } $env:EFCoreJet_DefaultConnection = '${{ env.defaultConnection }}' - & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --verbosity detailed --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName!~.FunctionalTests.Query." + & '${{ env.dotnetExecutable }}' test .\test\EFCore.Jet.FunctionalTests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --logger trx --blame-hang-timeout 3m --results-directory $shardDir --filter "FullyQualifiedName!~.FunctionalTests.Query." # # Check for test runner crashes: @@ -437,6 +525,124 @@ jobs: with: name: green-tests_${{ env.matrixId }} path: ${{ env.commitGreenTestsFile }} + LibRed: + needs: + - Preconditions + - Changes + if: (needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300) && needs.Changes.outputs.libred == 'true' + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - windows-latest + - macos-latest + runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v5 + # Defender scans every .accdb these suites write; see the action for the measurement. + - name: Exclude test files from Defender + uses: ./.github/actions/exclude-defender + - name: Install .NET SDK + uses: actions/setup-dotnet@v5 + with: + global-json-file: global.json + - name: .NET Information + run: dotnet --info + - name: 'Run Tests: LibRed.Engine.Tests' + if: env.skipTests != 'true' + run: dotnet test ./test/LibRed.Engine.Tests --configuration ${{ env.buildConfiguration }} -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 3m + + # The rest of the LibRed suites cross-check LibRed's output against the real engine over OLE DB, + # so unlike the job above they do need Windows with ACE installed. + LibRedAccess: + needs: + - Preconditions + - Changes + if: (needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300) && needs.Changes.outputs.libred == 'true' + strategy: + fail-fast: false + matrix: + aceVersion: + - 2016 + runs-on: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v5 + # Defender scans every .accdb these suites write; see the action for the measurement. + - name: Exclude test files from Defender + uses: ./.github/actions/exclude-defender + - name: Install .NET SDK + uses: actions/setup-dotnet@v5 + with: + global-json-file: global.json + - name: Install Access Database Engine + shell: pwsh + run: | + $setupFileName = 'AccessDatabaseEngine_${{ matrix.aceVersion }}_x64.exe' + Invoke-WebRequest "https://cirrusredorg.github.io/EntityFrameworkCore.Jet/$setupFileName" -OutFile $setupFileName + & ".\$setupFileName" /passive /quiet /norestart REBOOT=ReallySuppress | Out-Default + - name: 'ACE Information' + shell: pwsh + run: | + foreach ($provider in [System.Data.OleDb.OleDbEnumerator]::GetRootEnumerator()) + { + $v = New-Object PSObject + for ($i = 0; $i -lt $provider.FieldCount; $i++) + { + Add-Member -in $v NoteProperty $provider.GetName($i) $provider.GetValue($i) + } + $v + } + - name: 'Run Tests: LibRed.Core.Tests' + if: env.skipTests != 'true' + shell: pwsh + run: dotnet test .\test\LibRed.Core.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 5m + - name: 'Run Tests: LibRed.Ado.Tests' + if: always() && env.skipTests != 'true' + shell: pwsh + run: dotnet test .\test\LibRed.Ado.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 5m + - name: 'Run Tests: LibRed.EFCore.Tests' + if: always() && env.skipTests != 'true' + shell: pwsh + run: dotnet test .\test\LibRed.EFCore.Tests --configuration '${{ env.buildConfiguration }}' -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 5m + + LibRedFunctional: + needs: + - Preconditions + - Changes + # Non-blocking for now: the suite sits at ~278 failures out of ~36,000 run, so it would be red on + # every push and quickly learn to be ignored. It still runs on every push and the log is there to + # read. Drop this line once the remaining failures are fixed or skipped. + continue-on-error: true + if: (needs.Preconditions.outputs.lastCommitIsAutoCommit != 'true' || needs.Preconditions.outputs.lastCommitCreatedBeforeSeconds > 300) && needs.Changes.outputs.libred == 'true' + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - windows-latest + - macos-latest + runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v5 + # Defender scans every .accdb these suites write; see the action for the measurement. + - name: Exclude test files from Defender + uses: ./.github/actions/exclude-defender + - name: Install .NET SDK + uses: actions/setup-dotnet@v5 + with: + global-json-file: global.json + # No Access engine on ANY leg now. Windows used to install ACE as a control, on the reasoning that a + # test failing only off Windows would be a real cross-platform gap - but all three legs have since + # agreed exactly (35,578 passed / 179 failed / 2,016 skipped), so nothing here needs ACE and the + # control has served its purpose. LibRedAccess still installs it, which is where the cross-checks + # against the real engine belong. + - name: 'Run Tests: EFCore.LibRed.FunctionalTests' + if: env.skipTests != 'true' + run: dotnet test test/EFCore.LibRed.FunctionalTests --configuration ${{ env.buildConfiguration }} -p:FixedTestOrder=${{ env.deterministicTests }} --blame-hang-timeout 10m MergeArtifacts: needs: BuildAndTest if: always() diff --git a/.github/workflows/test_results.yml b/.github/workflows/test_results.yml index 7a7f13db..16502476 100644 --- a/.github/workflows/test_results.yml +++ b/.github/workflows/test_results.yml @@ -35,12 +35,10 @@ jobs: which node node --version - - name: Checkout - uses: actions/checkout@v5 - with: - repository: ${{ github.event.workflow_run.head_repository.full_name }} - ref: ${{ github.event.workflow_run.head_branch }} - fetch-depth: 1 + # No checkout: nothing here reads a repository file. The artifact is fetched through the API and written + # to the workspace, which exists anyway. Checking out the HEAD repo/ref also broke on fork PRs, where + # actions/checkout refuses to place a fork's code in a workflow_run context holding the base repo's token + # and secrets - and opting into that ("pwn request") to obtain files nothing uses would be a bad trade. # Download the artifact manually and feed it to dorny/test-reporter as local files. - name: 'Download Test Results' id: DownloadTestResults diff --git a/.gitignore b/.gitignore index 48a23c71..49efde18 100644 --- a/.gitignore +++ b/.gitignore @@ -110,7 +110,11 @@ csx AppPackages/ # Others -sql/ +# Anchored to the repo root: an unanchored `sql/` also matches the source directory +# src/EFCore.Jet/Query/Sql/ on a case-insensitive (Windows) filesystem, which made git +# warn about (and refuse to `git add`) tracked files there. Root anchor keeps the +# original intent — ignore a top-level sql/ output folder — without the false match. +/sql/ *.Cache ClientBin/ [Ss]tyle[Cc]op.* @@ -167,4 +171,7 @@ $RECYCLE.BIN/ /.dotnet* /.run-local .idea -Development.props \ No newline at end of file +Development.props +# Access lock files (transient) +*.laccdb +*.ldb diff --git a/AGENTS.md b/AGENTS.md index 5282c5de..cb5b05db 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -45,9 +45,16 @@ dotnet test test\EFCore.Jet.FunctionalTests\EFCore.Jet.FunctionalTests.csproj -- dotnet test test\EFCore.Jet.FunctionalTests\EFCore.Jet.FunctionalTests.csproj --filter "FullyQualifiedName=EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryJetTest.Where_simple" ``` +**When running a suite, capture the failing test *names* in the same run** — don't +reduce the output to just the `Passed!/Failed!` count line and then re-run the whole +suite to find which failed. Grep a pattern that catches both, e.g. +`grep -iE "Passed!|Failed!|\[FAIL\]|error CS"` (xUnit prints `… [FAIL]` and +`Failed ` lines as it goes), or tee the full output to a file and +inspect it. Only re-run after changing something. + Tests run in **fixed order by default** (`FIXED_TEST_ORDER` compile constant). All tests lock culture to `en-US` via a module initializer. -Tests that require features Jet doesn't support are marked `[Fact(Skip = "Unsupported by JET: ...")]` — see `SkipMessages.txt` for the catalog of known unsupported patterns. +Tests that require features Jet doesn't support are skipped with a reason on the test. ## Project Structure @@ -60,6 +67,8 @@ src/ EFCore.Jet.Odbc/ Provider factory for ODBC data access EFCore.Jet.OleDb/ Provider factory for OLE DB data access Shared/ Shared source files compiled into multiple src projects + LibRed/ Native, fully-managed Jet/ACE engine (cross-platform) — + see "LibRed" section below and src/LibRed/README.md test/ EFCore.Jet.Data.Tests/ Unit tests for the ADO.NET driver layer @@ -100,6 +109,63 @@ These shape much of the query pipeline complexity: - `GUID` support is indirect - No `rowversion`, no `DateTimeOffset`, no nullable `BIT` +## LibRed — Native Managed Engine (`libred` branch) + +A from-scratch, **fully managed and cross-platform** reimplementation of the Jet/ACE +engine under `src/LibRed/`. It reads and writes the `.mdb`/`.accdb` file format +**directly** — no ODBC, OLE DB, DAO, or ADOX — so it removes the Windows-only and +driver-bitness constraints that the rest of the repo lives with. Eventually it +subsumes the COM-based database creators (DAO/ADOX) and the OLE DB/ODBC quirk handling +in `EFCore.Jet.Data`. + +**Five projects, clean dependency DAG** (`EFCore → Ado → Engine → Sql`, and `Engine → Core`): + +``` +src/LibRed/ + LibRed.Core/ File format: IO (PageChannel/PageBuffer), Formats (version offsets), + Pages, Catalog (MSysObjects → TableDef/ColumnDef/IndexDef), Storage + (Table/TableCursor/RowDecoder/UsageMap), Crypto; JetDatabase entry point + LibRed.Sql/ SQL front end: ANTLR grammar (AccessSql.g4), AST, parser, binder. + NO Jet dependency — binds via the ISchemaProvider abstraction + LibRed.Engine/ Logical Plan nodes, QueryPlanner, CatalogSchemaProvider (bridges the + catalog to the binder), QueryExecutor, QueryEngine facade + LibRed.Ado/ ADO.NET surface: DbConnection/Command/DataReader/Parameter/Transaction/Factory + LibRed.EFCore/ EF Core provider over LibRed.Ado: AddEntityFrameworkLibRed/UseLibRed, + connection, database creator, database-first scaffolding (query round-trips + + scaffolding pass; IQuerySqlGeneratorFactory override still planned) +``` + +**Build configuration:** `src/LibRed/Directory.Build.props` deliberately bypasses +`src/Directory.Build.props` (it imports the repo-root props directly) so these assemblies +are **not** stamped `[SupportedOSPlatform("windows")]`. Strong-naming is preserved. + +**SQL pipeline** (always run end-to-end, even for trivial queries, so new features add +node types rather than rewrites): +`text → ISqlParser → AST → Binder(ISchemaProvider) → BoundStatement → QueryPlanner → PlanNode → QueryExecutor → ResultSet` + +**Format spec:** `src/LibRed/docs/format/` is LibRed's own verified reference for the on-disk +Jet 4 / ACE format, **split one file per page type** (plus cross-cutting topics). Start at +`format/README.md` — it maps every page type and the original §-numbers to their file, and links +the `appendix-structures.md` bare field-layout reference. It is the source of truth — keep it +updated as the format understanding grows. (`docs/jet-ace-file-format.md` is now just a redirect +stub to that folder.) + +> **Rule — spec sync on every `LibRed.Core` change.** Whenever you touch the actual on-disk +> read/write code in `src/LibRed/LibRed.Core/` (page/row/index/TDEF/usage-map parsing or +> writing, type codecs, key encoding), you **must** check whether the relevant file under +> `src/LibRed/docs/format/` needs updating in the same change, and update it if so — structure/field +> changes in the matching `page-0X-*.md` (and the `appendix-structures.md` table). New offsets, +> structures, type behaviours, or write mechanics go in the spec; only record facts **verified** +> against real files (or Access's own engine) — mark anything assumed as such. If a `LibRed.Core` +> change genuinely needs no spec edit, that's fine — but the check is not optional. + +Reference implementations for the binary layouts: **mdbtools** (its `HACKING.md` documents the +on-disk structures) and **Jackcess** — neither is vendored in this repo; consult them upstream. +The project detail and current status live in `src/LibRed/README.md`. ANTLR **is** the active SQL +parser: the lexer/parser are pre-generated and committed under `LibRed.Sql/Grammar/Generated/` +(managed `Antlr4.Runtime.Standard` runtime only, no build-time codegen), regenerated via +`LibRed.Sql/Grammar/generate.ps1` after editing `AccessSql.g4`. + ## Versioning `Version.props` owns `VersionPrefix` and `PreReleaseVersionLabel`. Bump `VersionPrefix` after each release. Valid labels: `alpha`, `beta`, `silver`, `preview`, `rc`, `rtm`, `servicing`. CI sets `OfficialVersion`, `ContinuousIntegrationTimestamp`, and `BuildSha` automatically. diff --git a/CLAUDE.md b/CLAUDE.md index 0718af3d..7ed6521f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -45,9 +45,11 @@ dotnet test test\EFCore.Jet.FunctionalTests\EFCore.Jet.FunctionalTests.csproj -- dotnet test test\EFCore.Jet.FunctionalTests\EFCore.Jet.FunctionalTests.csproj --filter "FullyQualifiedName=EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryJetTest.Where_simple" ``` +**When running a suite, capture the failing test *names* in the same run** — don't reduce the output to just the `Passed!/Failed!` count line and then re-run the whole suite to find which failed. Grep a pattern that catches both, e.g. `grep -iE "Passed!|Failed!|\[FAIL\]|error CS"` (xUnit prints `… [FAIL]` and `Failed ` lines as it goes), or tee the full output to a file and inspect it. Only re-run after changing something. + Tests run in **fixed order by default** (`FIXED_TEST_ORDER` compile constant). All tests lock culture to `en-US` via a module initializer. -Tests that require features Jet doesn't support are marked `[Fact(Skip = "Unsupported by JET: ...")]` — see `SkipMessages.txt` for the catalog of known unsupported patterns. +Tests that require features Jet doesn't support are skipped with a reason on the test. ## Project Structure @@ -60,6 +62,8 @@ src/ EFCore.Jet.Odbc/ Provider factory for ODBC data access EFCore.Jet.OleDb/ Provider factory for OLE DB data access Shared/ Shared source files compiled into multiple src projects + LibRed/ Native, fully-managed Jet/ACE engine (cross-platform) — + see "LibRed" section below and src/LibRed/README.md test/ EFCore.Jet.Data.Tests/ Unit tests for the ADO.NET driver layer @@ -100,6 +104,63 @@ These shape much of the query pipeline complexity: - `GUID` support is indirect - No `rowversion`, no `DateTimeOffset`, no nullable `BIT` +## LibRed — Native Managed Engine (`libred` branch) + +A from-scratch, **fully managed and cross-platform** reimplementation of the Jet/ACE +engine under `src/LibRed/`. It reads and writes the `.mdb`/`.accdb` file format +**directly** — no ODBC, OLE DB, DAO, or ADOX — so it removes the Windows-only and +driver-bitness constraints that the rest of the repo lives with. Eventually it +subsumes the COM-based database creators (DAO/ADOX) and the OLE DB/ODBC quirk handling +in `EFCore.Jet.Data`. + +**Five projects, clean dependency DAG** (`EFCore → Ado → Engine → Sql`, and `Engine → Core`): + +``` +src/LibRed/ + LibRed.Core/ File format: IO (PageChannel/PageBuffer), Formats (version offsets), + Pages, Catalog (MSysObjects → TableDef/ColumnDef/IndexDef), Storage + (Table/TableCursor/RowDecoder/UsageMap), Crypto; JetDatabase entry point + LibRed.Sql/ SQL front end: ANTLR grammar (AccessSql.g4), AST, parser, binder. + NO Jet dependency — binds via the ISchemaProvider abstraction + LibRed.Engine/ Logical Plan nodes, QueryPlanner, CatalogSchemaProvider (bridges the + catalog to the binder), QueryExecutor, QueryEngine facade + LibRed.Ado/ ADO.NET surface: DbConnection/Command/DataReader/Parameter/Transaction/Factory + LibRed.EFCore/ EF Core provider over LibRed.Ado: AddEntityFrameworkLibRed/UseLibRed, + connection, database creator, database-first scaffolding (query round-trips + + scaffolding pass; IQuerySqlGeneratorFactory override still planned) +``` + +**Build configuration:** `src/LibRed/Directory.Build.props` deliberately bypasses +`src/Directory.Build.props` (it imports the repo-root props directly) so these assemblies +are **not** stamped `[SupportedOSPlatform("windows")]`. Strong-naming is preserved. + +**SQL pipeline** (always run end-to-end, even for trivial queries, so new features add +node types rather than rewrites): +`text → ISqlParser → AST → Binder(ISchemaProvider) → BoundStatement → QueryPlanner → PlanNode → QueryExecutor → ResultSet` + +**Format spec:** `src/LibRed/docs/format/` is LibRed's own verified reference for the on-disk +Jet 4 / ACE format, **split one file per page type** (plus cross-cutting topics). Start at +`format/README.md` — it maps every page type and the original §-numbers to their file, and links +the `appendix-structures.md` bare field-layout reference. It is the source of truth — keep it +updated as the format understanding grows. (`docs/jet-ace-file-format.md` is now just a redirect +stub to that folder.) + +> **Rule — spec sync on every `LibRed.Core` change.** Whenever you touch the actual on-disk +> read/write code in `src/LibRed/LibRed.Core/` (page/row/index/TDEF/usage-map parsing or +> writing, type codecs, key encoding), you **must** check whether the relevant file under +> `src/LibRed/docs/format/` needs updating in the same change, and update it if so — structure/field +> changes in the matching `page-0X-*.md` (and the `appendix-structures.md` table). New offsets, +> structures, type behaviours, or write mechanics go in the spec; only record facts **verified** +> against real files (or Access's own engine) — mark anything assumed as such. If a `LibRed.Core` +> change genuinely needs no spec edit, that's fine — but the check is not optional. + +Reference implementations for the binary layouts: **mdbtools** (its `HACKING.md` documents the +on-disk structures) and **Jackcess** — neither is vendored in this repo; consult them upstream. +The project detail and current status live in `src/LibRed/README.md`. ANTLR **is** the active SQL +parser: the lexer/parser are pre-generated and committed under `LibRed.Sql/Grammar/Generated/` +(managed `Antlr4.Runtime.Standard` runtime only, no build-time codegen), regenerated via +`LibRed.Sql/Grammar/generate.ps1` after editing `AccessSql.g4`. + ## Versioning `Version.props` owns `VersionPrefix` and `PreReleaseVersionLabel`. Bump `VersionPrefix` after each release. Valid labels: `alpha`, `beta`, `silver`, `preview`, `rc`, `rtm`, `servicing`. CI sets `OfficialVersion`, `ContinuousIntegrationTimestamp`, and `BuildSha` automatically. diff --git a/EFCore.Jet.sln b/EFCore.Jet.sln index 6a9117a6..5ac6422c 100644 --- a/EFCore.Jet.sln +++ b/EFCore.Jet.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.4.32916.344 +# Visual Studio Version 18 +VisualStudioVersion = 18.9.12009.208 insiders MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F68095EE-6CD1-43A2-B498-6CA72CE2A0CB}" ProjectSection(SolutionItems) = preProject @@ -56,6 +56,30 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EFCore.Jet.Odbc", "src\EFCo EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EFCore.Jet.OleDb", "src\EFCore.Jet.OleDb\EFCore.Jet.OleDb.csproj", "{FFC89A2D-F68F-47E3-BA00-47E9C0BEDB71}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LibRed", "LibRed", "{53AEDF4E-744F-DCCC-ECB4-9EF88FC7B191}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRed.Core", "src\LibRed\LibRed.Core\LibRed.Core.csproj", "{BBC79324-A79E-4D04-85F9-254DD6FA0645}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRed.Sql", "src\LibRed\LibRed.Sql\LibRed.Sql.csproj", "{ABC12950-142D-4C22-B2C5-362FA4728C20}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRed.Engine", "src\LibRed\LibRed.Engine\LibRed.Engine.csproj", "{8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRed.Ado", "src\LibRed\LibRed.Ado\LibRed.Ado.csproj", "{0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRed.EFCore", "src\LibRed\LibRed.EFCore\LibRed.EFCore.csproj", "{4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRed.Core.Tests", "test\LibRed.Core.Tests\LibRed.Core.Tests.csproj", "{0624D868-C3E5-411D-A533-6E57F8F79F01}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRed.Engine.Tests", "test\LibRed.Engine.Tests\LibRed.Engine.Tests.csproj", "{7D554ADF-EDD4-4880-8B37-C6D700A98612}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRed.Ado.Tests", "test\LibRed.Ado.Tests\LibRed.Ado.Tests.csproj", "{57CC4C87-942E-4A7E-8B97-987BA2244988}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LibRed", "LibRed", "{89543E81-CC99-3390-B338-A5598885003A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibRed.EFCore.Tests", "test\LibRed.EFCore.Tests\LibRed.EFCore.Tests.csproj", "{CADF8601-1CF1-421B-AACF-EE2C16AC610B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EFCore.LibRed.FunctionalTests", "test\EFCore.LibRed.FunctionalTests\EFCore.LibRed.FunctionalTests.csproj", "{0F741500-BC61-44FA-9642-3B3326F7C90E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -108,8 +132,8 @@ Global {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Debug|x64.Build.0 = Debug|x64 {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Debug|x86.ActiveCfg = Debug|x86 {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Debug|x86.Build.0 = Debug|x86 - {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Release|Any CPU.Build.0 = Release|Any CPU + {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Release|Any CPU.ActiveCfg = Release|x86 + {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Release|Any CPU.Build.0 = Release|x86 {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Release|x64.ActiveCfg = Release|x64 {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Release|x64.Build.0 = Release|x64 {50CA2970-B995-4D28-9F6C-F7CA4940F23A}.Release|x86.ActiveCfg = Release|x86 @@ -120,8 +144,8 @@ Global {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Debug|x64.Build.0 = Debug|x64 {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Debug|x86.ActiveCfg = Debug|x86 {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Debug|x86.Build.0 = Debug|x86 - {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Release|Any CPU.Build.0 = Release|Any CPU + {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Release|Any CPU.ActiveCfg = Release|x86 + {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Release|Any CPU.Build.0 = Release|x86 {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Release|x64.ActiveCfg = Release|x64 {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Release|x64.Build.0 = Release|x64 {3C88D49A-7EF2-42BA-A8D7-9DF7D358FD24}.Release|x86.ActiveCfg = Release|x86 @@ -174,6 +198,126 @@ Global {FFC89A2D-F68F-47E3-BA00-47E9C0BEDB71}.Release|x64.Build.0 = Release|Any CPU {FFC89A2D-F68F-47E3-BA00-47E9C0BEDB71}.Release|x86.ActiveCfg = Release|Any CPU {FFC89A2D-F68F-47E3-BA00-47E9C0BEDB71}.Release|x86.Build.0 = Release|Any CPU + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Debug|x64.ActiveCfg = Debug|x64 + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Debug|x64.Build.0 = Debug|x64 + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Debug|x86.ActiveCfg = Debug|x86 + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Debug|x86.Build.0 = Debug|x86 + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Release|Any CPU.Build.0 = Release|Any CPU + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Release|x64.ActiveCfg = Release|x64 + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Release|x64.Build.0 = Release|x64 + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Release|x86.ActiveCfg = Release|x86 + {BBC79324-A79E-4D04-85F9-254DD6FA0645}.Release|x86.Build.0 = Release|x86 + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Debug|x64.ActiveCfg = Debug|x64 + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Debug|x64.Build.0 = Debug|x64 + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Debug|x86.ActiveCfg = Debug|x86 + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Debug|x86.Build.0 = Debug|x86 + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Release|Any CPU.Build.0 = Release|Any CPU + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Release|x64.ActiveCfg = Release|x64 + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Release|x64.Build.0 = Release|x64 + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Release|x86.ActiveCfg = Release|x86 + {ABC12950-142D-4C22-B2C5-362FA4728C20}.Release|x86.Build.0 = Release|x86 + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Debug|x64.ActiveCfg = Debug|x64 + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Debug|x64.Build.0 = Debug|x64 + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Debug|x86.ActiveCfg = Debug|x86 + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Debug|x86.Build.0 = Debug|x86 + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Release|Any CPU.Build.0 = Release|Any CPU + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Release|x64.ActiveCfg = Release|x64 + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Release|x64.Build.0 = Release|x64 + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Release|x86.ActiveCfg = Release|x86 + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54}.Release|x86.Build.0 = Release|x86 + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Debug|x64.ActiveCfg = Debug|x64 + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Debug|x64.Build.0 = Debug|x64 + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Debug|x86.ActiveCfg = Debug|x86 + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Debug|x86.Build.0 = Debug|x86 + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Release|Any CPU.Build.0 = Release|Any CPU + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Release|x64.ActiveCfg = Release|x64 + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Release|x64.Build.0 = Release|x64 + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Release|x86.ActiveCfg = Release|x86 + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63}.Release|x86.Build.0 = Release|x86 + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Debug|x64.ActiveCfg = Debug|x64 + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Debug|x64.Build.0 = Debug|x64 + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Debug|x86.ActiveCfg = Debug|x86 + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Debug|x86.Build.0 = Debug|x86 + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Release|Any CPU.Build.0 = Release|Any CPU + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Release|x64.ActiveCfg = Release|x64 + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Release|x64.Build.0 = Release|x64 + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Release|x86.ActiveCfg = Release|x86 + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71}.Release|x86.Build.0 = Release|x86 + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Debug|x64.ActiveCfg = Debug|x64 + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Debug|x64.Build.0 = Debug|x64 + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Debug|x86.ActiveCfg = Debug|x86 + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Debug|x86.Build.0 = Debug|x86 + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Release|Any CPU.Build.0 = Release|Any CPU + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Release|x64.ActiveCfg = Release|x64 + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Release|x64.Build.0 = Release|x64 + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Release|x86.ActiveCfg = Release|x86 + {0624D868-C3E5-411D-A533-6E57F8F79F01}.Release|x86.Build.0 = Release|x86 + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Debug|x64.ActiveCfg = Debug|x64 + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Debug|x64.Build.0 = Debug|x64 + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Debug|x86.ActiveCfg = Debug|x86 + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Debug|x86.Build.0 = Debug|x86 + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Release|Any CPU.Build.0 = Release|Any CPU + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Release|x64.ActiveCfg = Release|x64 + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Release|x64.Build.0 = Release|x64 + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Release|x86.ActiveCfg = Release|x86 + {7D554ADF-EDD4-4880-8B37-C6D700A98612}.Release|x86.Build.0 = Release|x86 + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Debug|x64.ActiveCfg = Debug|x64 + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Debug|x64.Build.0 = Debug|x64 + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Debug|x86.ActiveCfg = Debug|x86 + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Debug|x86.Build.0 = Debug|x86 + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Release|Any CPU.Build.0 = Release|Any CPU + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Release|x64.ActiveCfg = Release|x64 + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Release|x64.Build.0 = Release|x64 + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Release|x86.ActiveCfg = Release|x86 + {57CC4C87-942E-4A7E-8B97-987BA2244988}.Release|x86.Build.0 = Release|x86 + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Debug|x64.ActiveCfg = Debug|x64 + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Debug|x64.Build.0 = Debug|x64 + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Debug|x86.ActiveCfg = Debug|x86 + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Debug|x86.Build.0 = Debug|x86 + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Release|Any CPU.Build.0 = Release|Any CPU + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Release|x64.ActiveCfg = Release|x64 + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Release|x64.Build.0 = Release|x64 + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Release|x86.ActiveCfg = Release|x86 + {CADF8601-1CF1-421B-AACF-EE2C16AC610B}.Release|x86.Build.0 = Release|x86 + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Debug|x64.ActiveCfg = Debug|x64 + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Debug|x64.Build.0 = Debug|x64 + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Debug|x86.ActiveCfg = Debug|x86 + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Debug|x86.Build.0 = Debug|x86 + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Release|Any CPU.Build.0 = Release|Any CPU + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Release|x64.ActiveCfg = Release|x64 + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Release|x64.Build.0 = Release|x64 + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Release|x86.ActiveCfg = Release|x86 + {0F741500-BC61-44FA-9642-3B3326F7C90E}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -188,6 +332,17 @@ Global {5CD8B47D-E32C-480A-8331-55549EC8E12E} = {6A8DE399-1804-4113-A408-F23B7F5C9CAC} {1E0729DA-B861-46EA-B1F1-3AE20EA1E00A} = {F68095EE-6CD1-43A2-B498-6CA72CE2A0CB} {FFC89A2D-F68F-47E3-BA00-47E9C0BEDB71} = {F68095EE-6CD1-43A2-B498-6CA72CE2A0CB} + {BBC79324-A79E-4D04-85F9-254DD6FA0645} = {53AEDF4E-744F-DCCC-ECB4-9EF88FC7B191} + {ABC12950-142D-4C22-B2C5-362FA4728C20} = {53AEDF4E-744F-DCCC-ECB4-9EF88FC7B191} + {8FF045CF-5CDA-4C1B-8C67-2C0DAEDA6A54} = {53AEDF4E-744F-DCCC-ECB4-9EF88FC7B191} + {0932994D-79FA-48B5-8EB1-6EC9F8A0CE63} = {53AEDF4E-744F-DCCC-ECB4-9EF88FC7B191} + {4B82F36F-FC75-4F0D-B19C-C605FBCA7B71} = {53AEDF4E-744F-DCCC-ECB4-9EF88FC7B191} + {0624D868-C3E5-411D-A533-6E57F8F79F01} = {53AEDF4E-744F-DCCC-ECB4-9EF88FC7B191} + {7D554ADF-EDD4-4880-8B37-C6D700A98612} = {53AEDF4E-744F-DCCC-ECB4-9EF88FC7B191} + {57CC4C87-942E-4A7E-8B97-987BA2244988} = {6A8DE399-1804-4113-A408-F23B7F5C9CAC} + {89543E81-CC99-3390-B338-A5598885003A} = {F68095EE-6CD1-43A2-B498-6CA72CE2A0CB} + {CADF8601-1CF1-421B-AACF-EE2C16AC610B} = {6A8DE399-1804-4113-A408-F23B7F5C9CAC} + {0F741500-BC61-44FA-9642-3B3326F7C90E} = {6A8DE399-1804-4113-A408-F23B7F5C9CAC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9359773D-6399-447E-9814-6CB41C2FB664} diff --git a/LIBRED_AUDIT_REPORT.md b/LIBRED_AUDIT_REPORT.md new file mode 100644 index 00000000..540aa313 --- /dev/null +++ b/LIBRED_AUDIT_REPORT.md @@ -0,0 +1,524 @@ +# LibRed production-code audit + +Date: 2026-07-18 + +## Executive summary + +The five LibRed production projects are promising but should still be treated as an +early-stage database engine when opening files or executing SQL supplied by a less +trusted party. The audit found no native-memory-safety defect and no Critical or High +security vulnerability after deployment-aware calibration. Managed span/array checks +usually turn malformed binary structures into exceptions rather than memory corruption. +The main risks are instead process availability, persistent database integrity, and +incomplete ADO.NET/EF Core semantics. + +Twenty-six focused fixes have been implemented from the audit and its verification: + +- an open `LibRedConnection` now rejects `ConnectionString` changes; +- `LibRedDataReader.GetBytes/GetChars` now validate ranges, return zero past the end, + and `GetChars` no longer allocates a full `char[]` for every chunk; +- `JetFormatBase.Detect` now restores the caller's stream position in a `finally`; +- connection strings now use the framework parser, preserving quoted semicolons and + applying explicit `Data Source` > `DataSource` > `DBQ` precedence; +- a failed `JetDatabase.Open` now disposes its acquired channel and cache lease; +- `HasTablesAsync` now honors an already-cancelled token before doing synchronous work; +- standalone catalog expressions now require EOF, so CHECK/default expression prefixes + cannot silently ignore trailing tokens; +- every `ALTER COLUMN` type/length path now rejects both sides of a relationship before + any descriptor, row, or index mutation; +- declared result types now flow from catalog/schema and expression planning into the + ADO.NET reader, including empty results, first-row nulls, derived tables, and aggregates; +- native database creation now atomically refuses an existing path instead of truncating it; +- page-0 detection now rejects identifier/version mismatches and unsupported Jet 3 layouts; +- the verified `0x2000` delete-set-null relationship flag is synchronized into both format references; +- Office Standard descriptors now require supported exact key, salt, and verifier-hash sizes and compare the + complete verifier in constant time; +- Agile discovery now obeys the page-0 descriptor frame and rejects anything outside the exact verified Access + AES-256/SHA-512 profile before allocation, KDF, or cipher work; +- SQL DDL now rejects zero/negative Text/Binary sizes and invalid Decimal precision/scale before table creation; +- TDEF readers and writers now preflight count-derived geometry and narrowing fields before allocation or parsing; +- reference usage maps now require the exact 69-byte shape and validated in-file type-`0x05` bitmap targets; +- all active TDEF continuation consumers now share a declared-length-bounded, cycle-safe, page-validated reader; +- TDEF variable regions now use the declared-length boundary and validate names, column identities/types, + variable indexes, and the complete terminated long-value usage-map list before publishing metadata; +- data-page slots and row trailers now have shared checked boundaries, and fixed-width scalar decoding + rejects incorrect widths before primitive codecs are reached; +- all row-relocation consumers now share an exact-width, in-file, same-owner resolver that validates + the hidden target's row and flag shape while retaining zero-copy index seeks; +- active index descent, leaf following, full-tree enumeration, and final page mutations now share checked + page/entry geometry and owner/type validation; traversal detects cycles and the full cursor is iterative. +- long-value descriptors and chains now require exact framing, owned LVAL pages, progress, unique nodes, + and strict declared-length completion before reads or reclamation; +- property blobs now use one exact checked representation for read/add/remove and preflight every narrowed + serializer field while preserving unknown raw values; +- TDEF writing now uses exact encoded sizing and preflights verified name, index, and long-value-map domains; +- global allocation and LVAL append/reclamation validate physical targets, page roles, map geometry, and + column ownership before mutation, while preserving ACE's contiguous next-page growth convention. + +The highest-value next work is not 49 independent patches. It is five coherent efforts: + +1. introduce checked, reusable parsers/traversers for TDEF, data-page, index, LVAL, + usage-map, row, and property structures; +2. make statement and schema mutations atomic; +3. impose explicit budgets on SQL parsing/evaluation, view expansion, recursion, + cancellation, and crypto descriptors; +4. repair query/DML correctness gaps, especially RIGHT JOIN, cascade cycles, and + parameter lowering; +5. define cross-platform path identity and connection/file ownership semantics. + +## Scope and method + +The audit read every non-test source file in: + +- `src/LibRed/LibRed.Core` +- `src/LibRed/LibRed.Engine` +- `src/LibRed/LibRed.Sql` +- `src/LibRed/LibRed.Ado` +- `src/LibRed/LibRed.EFCore` + +Coverage was **134/134 files**: 45 files in audit group A, 45 in group B, and 44 in +group C. All receipts state full-file reads through EOF. Tests were excluded from the +review scope, but selected existing tests were inspected or run as supporting evidence. +Generated ANTLR sources were included; shard 0026 regenerated and compared them rather +than treating generated volume as unreviewed code. + +The work combined full-file static review, cross-layer source-to-sink tracing, duplicate +reconciliation, format checks against `src/LibRed/docs/format/`, and attack-path severity +calibration for an embeddable library. It did **not** fuzz all binary structures, execute +malicious stack/OOM payloads, or dynamically reproduce findings unless explicitly stated. + +Security discovery produced 53 raw candidates and 49 deduplicated candidates. Final +attack-path policy classified 42 as reportable, 2 as deferred, and 5 as ignored. These +are mostly sibling instances of fewer architectural root causes. Raw evidence remains in: + +- `.codex-security-work/synthesis-a.md` +- `.codex-security-work/synthesis-b.md` +- `.codex-security-work/synthesis-c.md` +- `.codex-security-work/dedupe-report.md` +- the scan artifact `artifacts/05_findings/attack_path_analysis_report.md` + +## Changes already implemented + +| Change | Location | Result | Spec impact | +|---|---|---|---| +| Reject changing connection identity while open | `src/LibRed/LibRed.Ado/LibRedConnection.cs:24` | Prevents reported/live target divergence | None; API contract only | +| Safe chunked binary/text reads | `src/LibRed/LibRed.Ado/LibRedDataReader.cs:147-186` | Correct past-end/range behavior; removes repeated `ToCharArray()` allocation | None; ADO.NET contract only | +| Exception-safe stream-position restoration | `src/LibRed/LibRed.Core/Formats/JetFormatBase.cs:250-261` | `Detect` restores position even when header reading throws | Checked: no format-document edit is needed because no offset/layout/codec fact changed | +| Framework connection-string parsing | `src/LibRed/LibRed.Ado/LibRedConnection.cs:197-224` | Correctly handles quoted semicolons and gives aliases deterministic precedence | None; ADO.NET parsing only | +| Failed-open ownership cleanup | `src/LibRed/LibRed.Core/JetDatabase.cs:72-88` | Releases the file handle and shared cache lease when database initialization fails | Checked: lifecycle only; no format-document edit needed | +| Pre-cancellation for table discovery | `src/LibRed/LibRed.EFCore/Storage/Internal/LibRedDatabaseCreator.cs:54-59` | Avoids opening/scanning the database after cancellation was requested | None; EF Core async contract only | +| Complete standalone-expression parsing | `src/LibRed/LibRed.Sql/Grammar/AccessSql.g4`; `Parsing/AntlrSqlParser.cs` | DEFAULT/CHECK/validation text must be consumed completely; trailing tokens now raise `SqlParseException` | None; SQL parsing/enforcement only | +| Central relationship-column ALTER guard | `src/LibRed/LibRed.Core/Storage/TableCreator.cs` | Child FK and referenced-parent columns are rejected before specialized in-place or rebuild paths | Updated `docs/format/page-02b-columns.md`; no appendix change because layout is unchanged | +| Stable declared result metadata | `LibRed.Engine/Execution/ResultSet.cs`, `QueryExecutor.cs`, `StatementExecutor.cs`; `LibRed.Ado/LibRedDataReader.cs` | Empty/first-null result sets expose schema/expression CLR types instead of incorrectly reporting `Object` | None; execution/ADO.NET metadata only | +| Non-destructive native creation | `LibRed.Core/Storage/DatabaseCreator.cs` | Uses atomic create-new semantics; an existing database or other file is preserved and creation throws `IOException` | Checked: file lifecycle only; no byte-layout fact changed | +| Coupled page-0 format validation | `LibRed.Core/Formats/JetFormatBase.cs` | Rejects mismatched MDB/ACCDB/workgroup identifiers and version bytes; rejects Jet 3 until its distinct layouts are implemented | Updated `docs/format/page-00-database.md` and `appendix-structures.md` | +| Relationship flag documentation sync | `docs/format/system-catalog.md`; `appendix-structures.md` | Records the Access-verified `MSysRelationships.grbit` `0x2000` delete-set-null flag already implemented symmetrically | Documentation-only; authoritative references now match runtime behavior | +| Office Standard descriptor validation | `LibRed.Core/Crypto/OfficeStandardEncryption.cs` | Rejects unsupported/fractional key sizes, non-16-byte salts, and verifier hashes that are not exactly the selected digest; full verifier comparison is constant-time | Checked `docs/format/page-00-database.md`; existing binary descriptor layout and documented supported variants are unchanged | +| Framed, bounded Agile profile | `LibRed.Core/Crypto/AgileEncryption.cs` | Uses `len@0x299`/blob `0x29B`, ignores stray XML, and validates the exact Access AES-256/SHA-512/16-byte/100000-spin profile before expensive work | Updated `docs/format/page-00-database.md`; no appendix edit because offsets/layout are unchanged | +| Validated SQL type dimensions | `LibRed.Engine/Execution/AccessTypeMapper.cs` | Rejects invalid Text/Binary sizes and Decimal precision/scale before any table is created | Updated `docs/format/data-types.md`; no appendix edit because no field layout changed | +| TDEF count and serializer preflight | `LibRed.Core/Pages/TableDefinitionPage.cs`; `Catalog/TdefBuilder.cs` | Enforces table count limits and assembled-region bounds before count-sized allocation; rejects column/id/length/fixed-offset narrowing before serialization | Updated `docs/format/page-02a-tdef.md`; no appendix edit because existing fields and limits are unchanged | +| Reference usage-map geometry | `LibRed.Core/Storage/UsageMap.cs` | Enforces the exact 17-slot record, in-file pointers, and complete bitmap-page header before expanding bits into owned pages | Updated `docs/format/page-05-usage-maps.md`; no appendix edit because the documented record/header layout is unchanged | +| Shared bounded TDEF continuation reader | `LibRed.Core/Pages/TdefChainReader.cs`; consumers in `TableDefinitionPage.cs`, `IndexWriter.cs`, and `TableCreator.cs` | Rejects cycles, invalid pages/headers, chain-length mismatches, and oversized declared definitions before assembly; copies exactly the declared bytes | Updated `docs/format/page-02a-tdef.md`; the 1 MiB bound is explicitly an implementation safety budget, not a claimed field limit | +| Checked TDEF variable-region parsing | `LibRed.Core/Pages/TableDefinitionPage.cs` | Enforces the declared definition boundary; strictly decodes bounded names; rejects invalid/duplicate column ids, unknown types, invalid variable indexes, and malformed or mis-targeted LVAL map entries | Updated `docs/format/page-02a-tdef.md`; no appendix edit because the established fields, encodings, and limits are unchanged | +| Checked data-page and row boundaries | `LibRed.Core/Pages/DataPage.cs`; `Storage/RowLayout.cs`, `RowDecoder.cs`, `RowInserter.cs`; `Storage/Types/JetTypeCodec.cs` | Full scans and O(1) seeks share page/slot checks; row bitmap/trailer/offset/fixed regions and scalar widths fail deterministically without breaking old rows or zero-length relocation tombstones | Updated `docs/format/page-01-data-and-rows.md` and `data-types.md`; no appendix edit because no established layout changed | +| Shared checked row-relocation resolver | `LibRed.Core/Storage/RowRelocationReader.cs`; consumers in `Table.cs`, `TableCursor.cs`, and `RowInserter.cs` | Validates the live 4-byte source, in-file target page, matching TDEF owner, target row, and nonempty hidden-inline target before scans, seeks, or mutations expose bytes | Updated `docs/format/page-01-data-and-rows.md`; no appendix edit because the established pointer/flag layout is unchanged | +| Checked index-page access | `LibRed.Core/Storage/IndexPageReader.cs`; `IndexWriter.cs`; `IndexCursor.cs` | Validates page/type/owner/pointers, bitmask-derived entries and compression before traversal and final mutation; rejects descent/leaf/tree cycles; replaces recursive full-tree walking with ordered iteration | Updated `docs/format/page-03-04-index-btree.md`; no appendix edit because existing page and entry layouts are unchanged | +| Checked LVAL traversal and reclamation prevalidation | `LibRed.Core/Storage/LongValueReader.cs`; `RowInserter.cs` | Enforces exact descriptor framing, page role/owner, row geometry, progress, uniqueness, and declared-length completion; resolves and validates the complete owned chain before reclamation starts | Updated `docs/format/long-values.md`; no appendix edit because the established descriptor and chain layouts are unchanged | +| Checked property-blob parsing and serialization | `LibRed.Core/Catalog/PropertyBlob.cs` | One exact representation validates signatures, nested block/record/entry bounds, name indexes, observed flags, and narrowing fields for read/add/remove while preserving raw values | Updated `docs/format/system-catalog.md` and `appendix-structures.md` with the Access-verified flag domain | +| Exact TDEF writer sizing and domain preflight | `LibRed.Core/Catalog/TdefBuilder.cs`; `Pages/TdefChainReader.cs` | Computes the encoded definition size exactly and rejects invalid names, duplicate identities, index references, LVAL maps, narrowing fields, and output beyond the shared safety budget before writing | Updated `docs/format/page-02a-tdef.md`; no appendix edit because established fields and encodings are unchanged | +| Validated allocation and LVAL mutation targets | `LibRed.Core/Storage/PageAllocator.cs`; `LongValueWriter.cs`; `RowInserter.cs` | Checks global/reference/owned map geometry, physical target ranges, page roles/owners, row capacity, and declared-versus-actual free space; materializes the Access-observed exactly-next page contiguously | Updated `docs/format/page-05-usage-maps.md` and `long-values.md`; no appendix edit because no field layout changed | + +These changes address localized defects only. They do not imply the larger parser, +transaction, or resource-budget findings are fixed. + +## Prioritized correctness findings + +Severity below describes product correctness/data-loss impact, not CVSS. Confidence is +based primarily on static control-flow or contract proof; items needing destructive or +process-isolated reproduction are called out. + +### LibRed.Core: binary format, storage, and crypto + +| Priority | Severity / confidence | Root cause and exact locations | Consequence / recommended action | +|---|---|---|---| +| Resolved | High / High dynamic | Three TDEF continuation readers followed unvalidated pointers until zero and appended whole page bodies without cycle or declared-length budgets: former loops in `TableDefinitionPage`, `IndexWriter`, and `TableCreator` | All three now use `TdefChainReader`: in-file unique pages, `[02 01]` headers, exact declared chain length/bytes, and a pre-allocation 1 MiB safety budget. Seven malformed-chain variants reject and real wide-table read/index/DDL controls pass. | +| Resolved | High / High dynamic | Active B-tree descent, leaf following, and the recursive full cursor lacked cycle/ownership/entry guards: `IndexWriter.cs`; `IndexCursor.cs` | All now use `IndexPageReader`; descent and leaf chains track visited pages, and the full cursor performs an iterative ordered walk. Twelve corrupt owner/type/pointer/entry/compression/cycle variants reject while real multi-level, split, usage-map, and Access controls pass. | +| Partially resolved: transaction redesign | Medium-High / High dynamic | LVAL reclamation formerly freed while following unvalidated pointers: `RowInserter.cs`; shared validation in `LongValueReader.cs` | The complete cycle-safe chain and column owned-pages map are now validated before the first free. Subsequent map/free writes still require the planned transaction/savepoint layer for atomic rollback on I/O failure. | +| P0 | High correctness / High static | Row insertion and other mutations publish multiple structures without statement atomicity: `RowInserter.cs:30-75`; `UsageMapWriter.cs:94-108,227-262`; `ViewCreator.cs:32-43,65-192`; `TableCreator.cs:443-468` | Late failures can leave heap, TDEF, index, usage-map, LVAL, query-object, or constraint metadata divergent. Require an internal transaction/savepoint or explicit compensation contract. | +| Resolved | Medium / High dynamic | Property blobs trusted nested sizes and narrowed lengths: `PropertyBlob.cs` | One exact parser now validates signatures, blocks, owner records, entries, name indexes, and values for read/add/remove; serializer preflight rejects every 16/32-bit overflow while raw values remain byte-faithful. | +| Resolved | Medium / High dynamic | Data-page slot, row trailer, scalar width, and relocation shape were consumed before validation: `DataPage.cs`; `RowLayout.cs`; `RowDecoder.cs`; `JetTypeCodec.cs`; relocation consumers in `Table.cs`, `TableCursor.cs`, and `RowInserter.cs` | Shared boundaries now validate page/slot geometry, row regions, scalar widths, and the complete live-source → same-owner hidden-target relocation shape. Corruption regressions reject deterministically while real LibRed- and Access-authored relocation controls pass. | +| Resolved | Medium / High dynamic | Allocator and LVAL append trusted hostile usage-map targets: `PageAllocator.cs`; `LongValueWriter.cs`; `RowInserter.cs` | Global map shape/pointers/free targets and LVAL page/row/free-space/map ownership are validated before mutation; the one-past-end ACE growth bit is materialized contiguously and larger gaps reject. | +| Resolved | Medium / High dynamic | TDEF counts, variable regions, and serializer casts were consumed before validating format limits or count-derived geometry: `TableDefinitionPage.cs`; `TdefBuilder.cs` | Reader geometry and variable regions are checked; writing now computes exact encoded size and preflights names, indexes, LVAL ids/pointers, duplicates, narrowing fields, and the shared 1 MiB budget before serialization. | +| Resolved | Medium / High dynamic | SQL DDL narrowed Text/Binary sizes and Decimal precision/scale without validating their domains: `AccessTypeMapper.cs` | Positive Text/Binary sizes and Decimal precision `1..28`, scale `0..precision`, are now enforced before table creation; ten invalid-shape and two valid-boundary regressions pass. Broader hostile TDEF parsing remains above. | +| Resolved | Medium / High dynamic | Office Standard trusted descriptor key/salt/verifier dimensions and accepted a zero-length verifier prefix: `OfficeStandardEncryption.cs` | Exact supported sizes are validated before allocation/crypto and the complete verifier is compared in constant time. Thirteen malformed cases now reject, while the valid Office variant sweep remains green. | +| Resolved | Medium / High dynamic | Agile searched page 0 for XML and trusted caller-controlled KDF/cipher dimensions: `AgileEncryption.cs` | Discovery now obeys the declared descriptor frame and the exact verified Access profile is validated before KDF/AES. Stray XML and three hostile-dimension regressions reject without expensive work; valid/wrong/missing-password controls pass. | +| P1 | Medium / High static | Password changes publish plaintext before replacement encryption succeeds: `DatabaseEncryption.cs:29-55,62-94,200-212` | A validation/I/O failure can leave an originally encrypted database plaintext. Use same-directory atomic replacement and failure-injection tests. | +| Resolved | Medium / High deterministic | Jet 3 was accepted while inheriting Jet 4/ACE offsets; identifier/version were independently allowlisted: `JetFormatBase.cs` | Detection now validates the pair before selecting a layout, and Jet 3 throws until implemented. Mismatch, Jet 3, valid Jet 4/workgroup, known ACE, and future-ACE regressions pass. | +| Resolved | Medium / High dynamic | Usage-map reference rows were expanded according to attacker-controlled row length and their pointers were not required to target bitmap pages: `UsageMap.cs` | Reference records now require exactly 17 slots/69 bytes; nonzero pointers must be in-file type-`0x05` pages with the complete header. Oversized-row and wrong-page-type regressions reject before expansion; exact empty and large real reference maps pass. | +| Resolved | Medium / High dynamic | LVAL reads lacked progress/visited/strict-completion checks: `LongValueReader.cs` | Descriptor, page type/owner, row, pointer, progress, cycle, and exact-length checks now reject malformed inline/single/chained values deterministically. | +| P2 | Medium / High static | Unique/primary index backfill publishes metadata without probing existing duplicates: `TableCreator.cs:443-468` | A database may claim a constraint that its data violates. Decide ACE null/IGNORE NULL semantics, validate first, publish second. | + +### LibRed.Sql and LibRed.Engine + +| Priority | Severity / confidence | Root cause and exact locations | Consequence / recommended action | +|---|---|---|---| +| P0 | High / High static | Multi-row DML interleaves validation and irreversible writes: `StatementExecutor.cs:237-287,895-929,951-958`; `QueryEngine.cs:72-98` | A later constraint/storage failure can commit a prefix. Make each statement atomic even without an explicit user transaction. | +| P0 | High / High static | Cascade deletion recurses before recording an in-progress/deleted row: `StatementExecutor.cs:218-266,942-958` | Cyclic relationships/rows can exhaust the stack; diamonds can double-mutate. Define ACE-compatible cycle semantics and use an explicit worklist/in-progress set. | +| P0 | High / High static | Stored view expansion has no active-name or work budget: `ViewExpander.cs:15-75`; source `JetCatalog.cs:180-221` | Cyclic or branching stored views can exhaust stack/CPU/memory. Carry one expansion context with cycle, depth, node, byte, and cancellation limits. | +| Resolved | High / High deterministic static | Standalone expression parsing did not require EOF: `AntlrSqlParser.cs`; `AccessSql.g4`; enforcement `StatementExecutor.cs:83-114,557-560` | Fixed with a dedicated `standaloneExpression : expression EOF` entry and regenerated parser artifacts. Parser and persisted-CHECK regressions prove trailing suffixes are rejected. | +| P1 | High potential / Medium pending sink test | Unmatched RIGHT JOIN mutation targets use `RowId(0,0)`: `StatementExecutor.cs:660-665,770-774,879-958`; `RowId.cs:4` | UPDATE/DELETE can address an absent physical row/page 0 or fail unexpectedly. Replace sentinel identity with explicit absence after disposable-copy validation. | +| P1 | Medium / High static | Non-hash RIGHT JOIN uses LEFT-only preservation: `QueryExecutor.cs:350-355,406-436`; `IndexSelection.cs:168-177` | Non-equi RIGHT JOIN silently drops unmatched right rows. Normalize carefully to swapped LEFT JOIN while preserving output column ordering. | +| P1 | Medium / High static | PARAMETERS lowering omits UPDATE/DELETE/EXECUTE/IF and `InListExpression`: `AstBuilder.cs:13-24,355-420` | Declared parameters can remain column references or bind incorrectly. Make lowering exhaustive and table-driven. | +| P2 | Medium / High static | INFORMATION_SCHEMA advertises VIEW but enumerates only physical tables: `InformationSchema.cs:48-78,128-133`; `JetCatalog.cs:96-111,204-213` | Scaffolding/generic clients cannot discover views accurately. Add TABLES rows first, then define view-column metadata behavior. | + +### LibRed.Ado and LibRed.EFCore + +| Priority | Severity / confidence | Root cause and exact locations | Consequence / recommended action | +|---|---|---|---| +| Resolved | Medium / High static | Connection strings were manually split on semicolons: `LibRedConnection.cs`; correct producer `LibRedConnectionStringBuilder.cs` | Fixed with `DbConnectionStringBuilder`; canonical `Data Source` wins over `DataSource`, then `DBQ`. Focused regression tests pass. | +| Deferred: transaction redesign | Medium / High static | Command transaction is stored but not enforced: `LibRedCommand.cs:27,39-55,68-74`; `LibRedConnection.cs:33-50,179-188` | A foreign/stale transaction association can execute under unexpected connection-scoped state. Do not patch this independently: define ownership/liveness as part of the planned ground-up transaction and ACE-interoperability design. | +| Resolved | Medium / High deterministic | Result metadata was inferred from the first runtime row: `LibRedDataReader.cs`; `ResultSet.cs`; plan schemas in `QueryExecutor.cs` and `StatementExecutor.cs` | Declared catalog and expression types now propagate to `ResultSet`. Empty and first-null base/computed/aggregate regressions pass. Unknown runtime-dependent coercions retain a conservative fallback. | +| Resolved | Medium / High static | `JetDatabase.Open` transferred channel ownership only after a constructor that can throw: `JetDatabase.cs`; `PageChannel.cs:34-42,297-302` | Fixed with local ownership and catch/dispose. A malformed page-0 regression verifies the failed open releases the file on Windows. | +| P1 | Medium correctness / High dynamic on Windows | Database deletion can retain an externally opened physical handle: `LibRedDatabaseCreator.cs:32-35`; `LibRedConnection.cs:119-123,158-172` | Delete fails with sharing violation/stale ownership. Four open-connection variants failed in the shard validation; fix only with ownership-state tests. | +| P2 | Low / High static | Batch splitting lacks comment/escaped-bracket states: `LibRedCommand.cs:83-106`; grammar `AccessSql.g4:437-439` | Valid SQL batches split incorrectly. Prefer token-aware splitting and avoid substring/trim allocation. | +| Partially resolved | Low / High static | `HasTablesAsync` still uses synchronous catalog work: `LibRedDatabaseCreator.cs:41-59`; `LibRedConnection.cs:138-155` | Pre-cancellation is now honored and covered. Genuine cancellable async I/O remains a larger design item. | + +## Security assessment + +### Calibration + +LibRed is an embedded library, not a network service. A malicious database file and +untrusted SQL are valid trust boundaries, but this repository does not prove that an +attacker can reach them through a privileged server. Consequently: + +- **0 Critical, 0 High** security findings after attack-path calibration; +- conditional **Medium** issues are those capable of process denial or persistent + integrity damage when hostile files/SQL reach an in-process engine; +- conditional **Low** issues are bounded managed exceptions, service degradation, or + impacts requiring an authorized mutation operation; +- two candidates were deferred and five ignored because current reachability or impact + was insufficient. They remain traceable in the raw ledger. + +### Conditional Medium security families + +- Recursive/cyclic hostile structures: stored views (`ViewExpander.cs:64-69`), active index + descent (`IndexWriter.cs:180-194`), LVAL reclamation (`RowInserter.cs:273-297`), and + cascade deletion (`StatementExecutor.cs:218-266,942-958`). These can hang, consume + memory, or exhaust the process stack. +- The previously reportable pre-authentication crypto descriptor family is resolved for + LibRed's supported Office Standard variants and exact Access Agile profile: key, salt, + block, verifier, and KDF dimensions are validated before allocation or expensive work. +- SQL resource exhaustion: unlimited LIKE backtracking (`ExpressionEvaluator.cs:1173-1231`), + caller-sized string allocations (`ExpressionEvaluator.cs:202-318,980-1011`), and + unbounded parser/binder/planner shapes (`AntlrSqlParser.cs:13-44`, `Binder.cs:26-29`, + `QueryPlanner.cs:18-24,71-171`, `IndexSelection.cs:21-345`). These are Medium only + where applications expose SQL/patterns; they are ordinary hardening in trusted-local use. +- Persistent-integrity paths: non-atomic multi-row DML, destructive LVAL reclaim, forged + free-map allocation, and plaintext-first password changes. All require writable access + or an authorized mutation path. +- Cross-database page-cache aliasing on case-sensitive hosts: `PageCache.cs:42,48-109` + lowercases paths unconditionally. This is not a normal Windows issue, but matters to + LibRed's cross-platform goal. + +### Conditional Low and bounded findings + +Nested property/row/index/codec bounds generally terminate as managed exceptions; +command timeout/cancellation is advertised but inert; and malformed LVAL/usage-map +structures can cause bounded-to-large resource use. These deserve fixes, but should not +be described as native memory corruption or as remote vulnerabilities without an +embedding application's exposure evidence. Quoted-semicolon path parsing and the +zero-length Office Standard verifier are now fixed and covered dynamically. + +`lr-sec-013` (zero-length Office Standard verifier) is resolved. The malformed size 0, +19, and 21 cases now deterministically throw `NotSupportedException`; supported real and +synthetic descriptors still authenticate correctly and wrong passwords still reject. + +### Deferred and ignored + +- `lr-sec-001`, create-database truncation (`LibRedConnection.CreateDatabase` -> + `DatabaseCreator.CreateEmpty`), was originally deferred as a security issue because no + less-trusted caller able to invoke explicit creation was established. The correctness/data-loss + defect is now fixed with atomic create-new semantics and a sentinel-preservation regression. +- `lr-sec-043`, unmatched RIGHT JOIN mutation to `RowId(0,0)`, was deferred pending a + disposable-copy sink reproduction. It remains a P1 correctness/integrity item. +- Ignored as current security findings: the unused direct `IndexCursor` cycle path, + oversized-row allocation leakage, LVAL descriptor truncation, row-insertion publication + without demonstrated amplification, and index-maintenance TDEF cycle duplicate. These + remain correctness/hardening backlog items where applicable. + +## Performance opportunities + +### Quick wins + +1. Add a case-insensitive first-ordinal map in `LibRedDataReader` instead of linear + `GetOrdinal` scans (`LibRedDataReader.cs:56-62`). Preserve duplicate-name behavior. +2. Replace repeated batch substrings/trims with span/token boundaries + (`LibRedCommand.cs:83-106`), ideally alongside the correctness fix. +3. Cache or reuse parameter lookup only with clear mutation/version semantics + (`LibRedCommand.cs:115-118`). +4. Pre-size small collections where counts are already validated; this is secondary to + rejecting hostile sizes. + +The largest simple reader allocation issue, full-string `ToCharArray()` on every +`GetChars` call, has already been removed. + +### Medium investments + +1. Parse each property blob once, materialize an indexed representation, and reuse it for + all columns (`PropertyBlob.cs:182-238`; currently O(columns x blob bytes)). +2. Derive the block-independent 50,000-round Office Standard KDF prefix once rather than + per page (`OfficeStandardEncryption.cs:301-315`; `PageChannel.cs:143,161,204,275`). + Require known-answer crypto tests before merging. +3. Stream validated usage-map and row enumeration instead of eagerly materializing large + page lists (`UsageMap.cs:95-153`). +4. Compute exact TDEF output size after validation instead of heuristic over-allocation + (`TdefBuilder.cs:106,207-246,396`). +5. Cache parsed stored views/expressions with bounded expansion contexts and invalidation, + avoiding repeated parse/rewrite work. + +### Architectural investments + +1. Replace whole-file in-memory encryption/password mutation with streaming same-directory + temporary output, fsync/flush policy, and atomic replace (`DatabaseEncryption.cs`). +2. Add a unified execution budget propagated through parser, binder, planner, executor, + storage iterators, scalar functions, regex, and lazy reader enumeration. This should + carry deadline/cancellation plus node/byte/depth/allocation limits. +3. Introduce validated immutable binary views (TDEF/page/index/LVAL/property/row) so every + consumer does not reimplement offsets, ownership, cycle, and geometry checks. +4. Add transaction/savepoint infrastructure for implicit statement atomicity and staged + schema publication. + +## Larger direction decisions + +### 1. Hostile-file support level + +| Option | Tradeoff | +|---|---| +| Trusted files only | Fastest path to feature coverage, but must document that malformed/imported files can crash operations or the host process through recursion/OOM. Poor fit for a general cross-platform engine. | +| Fail-safe imported files (recommended) | Build checked parsers/traversers and deterministic corruption exceptions. Moderate near-term cost, substantial simplification and security benefit across Core. | +| Recovery/forensics tolerant | Continue past localized corruption and salvage data. Much larger semantic and testing burden; defer until fail-safe parsing is mature. | + +### 2. Transaction model + +| Option | Tradeoff | +|---|---| +| Require callers to begin a transaction | Minimal implementation, but surprising for ADO.NET/SQL because a failed statement can leave a committed prefix. | +| Implicit per-statement savepoint/transaction (recommended) | Matches expected database semantics and fixes many integrity findings; requires careful interaction with explicit transactions and page cache rollback. | +| Operation-specific compensation | Smaller initial changes but proliferates fragile rollback code and misses process/interruption failures. | + +### 3. Resource limits and compatibility + +| Option | Tradeoff | +|---|---| +| Hard fixed limits | Simple and safe, but may reject unusually large valid databases/queries. | +| Configurable budgets with conservative defaults (recommended) | Supports trusted batch workloads while protecting service embeddings; adds public configuration and test matrix. | +| Cancellation only | Useful but insufficient for stack overflow, regex backtracking, giant single allocations, and work before a cancellation check. | + +### 4. Cross-platform file identity + +Use platform/file-system-aware canonical identity (or a handle/file-ID based cache key) +rather than unconditional lowercase strings. A string comparer selected by OS is simpler +but still imperfect for case-sensitive volumes on Windows and aliases/symlinks. A handle- +identity design is stronger but more platform work. Whichever option is chosen should also +return an immutable acquire token so release does not recanonicalize a relative path after +current-directory changes. + +## Format-spec synchronization + +The format documentation was used as authoritative for binary layouts. Most proposed +Core fixes enforce already documented geometry and therefore require a spec **check** but +not necessarily a spec change. Any newly verified offsets, ownership rules, limits, or +write mechanics must update the matching file under `src/LibRed/docs/format/` and +`appendix-structures.md`. + +The previously confirmed relationship-flag documentation drift is now fixed: + +- `src/LibRed/LibRed.Core/Formats/RelationshipFlags.cs:18-19` implements the + Access-verified `0x2000` delete-set-null flag, while + `src/LibRed/docs/format/system-catalog.md` and + `src/LibRed/docs/format/appendix-structures.md` now record it. Runtime read/write was + already symmetric; this was documentation drift, not a code-behavior change. + +The `JetFormatBase.Detect` stream-position `finally` change needed no format edit because +it changes exception/lifetime behavior only, not bytes, offsets, types, or interpretation. + +The crypto and DDL dimension remediation was checked against the matching references. +`page-00-database.md` now records authoritative Agile framing and the exact supported +Access profile; `data-types.md` records the enforced positive Text/Binary dimensions and +Decimal precision/scale bounds. `appendix-structures.md` did not need an edit because no +offset or field layout changed. Office Standard validation enforces the already documented +binary descriptor and supported variants, so no new format fact was added for that path. + +The TDEF/usage-map batch updated `page-02a-tdef.md` and `page-05-usage-maps.md` with the +new enforcement behavior. Both changes enforce structures and limits already present in +the authoritative specification, so `appendix-structures.md` needed no layout change. + +The continuation-chain remediation further updated `page-02a-tdef.md` with the shared +reader's authoritative-length behavior and clearly labels the 1 MiB allocation ceiling as +a LibRed safety policy rather than a verified on-disk limit. The chain/header layout itself +was already present, so the appendix still required no structural edit. + +The variable-region remediation also updated `page-02a-tdef.md` to record enforcement of +the existing name encoding/length, column identity/type/high-water, and terminated LVAL-map +rules. No offset or structure changed, so `appendix-structures.md` again needed no edit. + +The data-page/row remediation updated `page-01-data-and-rows.md` and `data-types.md` with +reader enforcement of the already documented page, slot, trailer, and scalar-width geometry. +The functional corpus exposed tolerated dead space between variable data and its offset table; +the documentation records that compatibility behavior and explicitly marks its cause as not yet +Access-verified. No field or structure changed, so the appendix required no edit. + +The relocation follow-up added the verified forward-pointer and hidden-target rules to +`page-01-data-and-rows.md`. These document existing bytes and flags, so no appendix change +was required. + +The index traversal and mutation remediation added implementation guardrails to +`page-03-04-index-btree.md`. They enforce the documented page types, owner, pointers, entry +mask, trailers, and compression layout, including revalidation immediately before a page is +mutated, without changing any field, so the appendix needed no edit. + +## Verification status + +- `LibRed.EFCore` was built during the review with **0 warnings and 0 errors**. +- `LibRed.Sql` was regenerated/compared and built with **0 warnings and 0 errors**; all + four committed generated artifacts matched modulo the provenance comment. +- Crypto remediation first reproduced all malformed cases: Office verifier sizes 0/19/21, + invalid RC4 key sizes 1/39/41/127/129, AES key size 257, Agile keyBits 257, + blockSize 15, spinCount 100001, and stray XML outside the declared frame. After the + fix, **39/39 focused Office Standard, Agile, and real Office-variant tests passed**. +- Database creator delete tests in shard 0019 dynamically established the open-handle + ownership problem on Windows; four open variants failed and closed variants passed. +- The first remediation batch added four focused regressions: **2 ADO, 1 Core, and + 1 EF Core test passed**. The `LibRed.EFCore` dependency chain then built with + **0 warnings and 0 errors** using `--no-restore` (restore was already complete). +- Standalone-expression remediation: the pre-fix regression reproduced silent suffix + acceptance; after the fix, **64/64 relevant parser, CHECK, and DEFAULT tests passed**. + ANTLR regeneration was deterministic, and the full LibRed dependency chain built with + **0 warnings and 0 errors**. +- The two relationship-column ALTER failures exposed by that run were traced to specialized + paths bypassing branch-local guards. After centralizing the guard, the original numeric + child/parent cases and new text-length child/parent cases passed; **32/32 related ALTER, + default, and AutoNumber tests passed**, followed by a clean complete Engine run: + **725 passed, 0 failed**. +- Declared-result metadata remediation added four ADO regressions covering empty base and + computed projections, a first-row NULL, and a NULL aggregate. The complete ADO suite + now passes **41/41**, the complete Engine suite passed **725/725**, and the complete LibRed + EF Core suite passed **15/15**. +- Create/format remediation first reproduced truncation, three mismatched identifier/version + pairs, and Jet 3 acceptance. After the fixes, **10/10 focused format tests** and both + destructive/legitimate create controls passed. Complete suites passed **Core 345/345**, + **ADO 41/41**, and **EF Core 15/15**. The Core run also exposed and corrected one invalid + synthetic page-0 test fixture; ADO fixture tests are serialized to avoid `File.Copy` + transiently denying the write-sharing their parallel peers require. +- SQL type-dimension remediation first reproduced ten invalid Text/Binary/Decimal shapes + creating tables. After the fix, **23/23 focused size/boundary tests passed** and invalid + DDL leaves no table behind. +- Final complete project suites passed **Core 358/358**, **Engine 737/737**, + **ADO 41/41**, and **EF Core 15/15**. The `LibRed.EFCore` dependency chain built during + the EF Core run with no compiler warnings or errors other than the SDK's preview-support message. +- TDEF/usage-map remediation first reproduced eight unsafe outcomes: silent writer narrowing, + accepted invalid counts/records, and incidental overflow/range exceptions. After the fix, + **24/24 focused TDEF and usage-map tests passed**, including exact 69-byte, wrong-target, + 255-column, inline-growth, and Access reference-map controls. Complete suites then passed + **Core 370/370**, **Engine 737/737**, **ADO 41/41**, and **EF Core 15/15**. +- TDEF continuation remediation safely reproduced wrong-page acceptance, declared-length + mismatch acceptance, and an out-of-file incidental exception. After consolidation, seven + corruption variants (including cycle, missing/extra page, invalid root/continuation header, + and oversized length) reject before assembly. Focused wide-table read, index, and DDL controls + passed **17/17**. Complete suites then passed **Core 377/377**, **Engine 737/737**, + **ADO 41/41**, and **EF Core 15/15**. +- TDEF variable-region remediation first reproduced nine unsafe outcomes: six malformed + structures were silently accepted and three failed through incidental framework exceptions. + After the fix, all **14/14 focused cases** passed, including four additional bypass cases and + a valid Memo usage-map control; the broader TDEF set passed **38/38**. Complete suites then + passed **Core 391/391**, **Engine 737/737**, **ADO 41/41**, and **EF Core 15/15**. +- Data-page/row remediation first reproduced eleven unsafe outcomes: silent page/row acceptance, + incidental range/argument exceptions, and failure to treat an older row's absent column as NULL. + After the fix and bypass review, **16/16 focused corruption and compatibility cases** passed. + One initial full-Core run captured the sole failing corpus test; its 11 schema-evolved tables + established that a bounded pre-table gap must remain accepted. After narrowing that assumption, + the 137-file corpus and complete suites passed **Core 407/407**, **Engine 737/737**, + **ADO 41/41**, and **EF Core 15/15**. +- Row-relocation remediation reproduced five scan failures and one index-seek failure: + malformed pointers were silently accepted or escaped as incidental exceptions. The shared + resolver plus owner/mutation bypass coverage passed **8/8 corruption cases**; combined with + five existing update/Access controls, the focused set passed **13/13**. Complete suites then + passed **Core 415/415**, **Engine 737/737**, **ADO 41/41**, and **EF Core 15/15**. +- Index traversal remediation first reproduced five unsafe outcomes: two malformed structures + were silently accepted and three escaped as incidental exceptions. Post-fix bypass coverage added + descent/leaf/full-cursor cycles, child ownership, non-leaf chaining, and oversized compression; + **12/12 corruption cases** and the **24/24** broader index/control set passed. Complete suites then + passed **Core 427/427**, **Engine 737/737**, **ADO 41/41**, and **EF Core 15/15**. +- Index mutation follow-up removed the remaining unchecked page parser and revalidates leaf insertion, + deletion, parent separator propagation, and old-next-leaf relinking at their final read-modify-write + boundary. The TOCTOU window was established statically because deterministic reproduction requires an + external concurrent file writer, which LibRed does not yet support. Focused index/Access controls passed + **29/29** and indexed insert/update/delete controls passed **16/16**; sequential complete suites passed + **Core 427/427**, **Engine 737/737**, **ADO 41/41**, and **EF Core 15/15**. +- LVAL-reader remediation first reproduced six unsafe outcomes: three malformed values were silently + accepted and three escaped as incidental exceptions; cycle reachability was encoded without running the + pre-fix hang. All **8/8** corruption/round-trip tests and eight real chained/update/Access controls passed. +- Property remediation first reproduced nine malformed blobs accepted or incidentally failing plus unchecked + serializer narrowing. The shared representation and preflight passed **11/11** new cases and **7/7** + byte-exact, raw-value, add/remove, and Access name-order controls. A complete Core run then exposed real + ACE blobs using flag `0`; accepting the verified `{0,1}` domain passed all affected ACE/encrypted fixtures. +- TDEF writer remediation reproduced heuristic-buffer overflow and six unvalidated LVAL/name/index cases. + Exact sizing and preflight passed **15/15** builder cases and **11/11** continuation/wide-table controls. +- Allocator/LVAL ownership remediation reproduced five unsafe writes or incidental failures. Seven focused + corruption/ownership cases and six global-reference, packing, update, reclamation, and Access controls + passed **13/13**. A real Northwind free bit established that exactly-next-page growth is legitimate; the + allocator now materializes it contiguously and rejects larger gaps. +- Final sequential complete suites passed **Core 460/460**, **Engine 737/737**, **ADO 41/41**, and + **EF Core 15/15**, with no compiler warnings or errors other than the SDK preview-support message. +- The complete 38,046-test functional suite was not rerun for this localized batch. +- Remaining cascade/view cycle, stack-exhaustion, huge-allocation, destructive page-0, + and partial-publication scenarios were not executed in-process. They should use bounded + fakes, subprocesses, fault injection, or disposable database copies. + +## Recommended roadmap + +### Phase 1: low-risk correctness and guardrails + +Completed: focused regressions and fixes for Office Standard verifier/key dimensions, +Agile framing/profile bounds, and SQL scalar/type dimensions. Keep future isolated, +low-risk findings in this phase; do not fold transaction semantics into piecemeal patches. + +### Phase 2: shared checked-format layer + +Completed: checked TDEF reading/writing, index access/mutation, row/relocation boundaries, +LVAL traversal/reclamation prevalidation, usage-map/global-allocation targets, and property blobs. + +1. Add broader format-fixture, fuzz/property, fault-injection, and cross-platform cache-identity tests. + +### Phase 3: integrity and execution architecture + +1. Add implicit statement savepoints/transactions and atomic DDL/catalog publication. +2. Add the end-to-end execution/cancellation/resource budget. +3. Replace recursive view/cascade/query-tree walks with bounded contexts or iterative worklists. +4. Redesign encryption mutation as streaming atomic replacement. + +### Phase 4: compatibility and performance + +1. Repair RIGHT JOIN mutation/selection, parameter lowering, and INFORMATION_SCHEMA view + support. +2. Apply property, usage-map, ordinal, query-cache, and KDF performance improvements with + benchmarks. +3. Decide whether to implement Jet 3 correctly or keep it explicitly unsupported. + +## Evidence appendix + +This report deliberately consolidates duplicate instances. The complete candidate record +is preserved in `.codex-security-work/`: + +| Artifact | Contents | +|---|---| +| `synthesis-a.md` | 45 ADO/Core catalog, format, and crypto files; normalized findings and performance notes | +| `synthesis-b.md` | 45 Core storage and EF Core files; 24 canonical issue families | +| `synthesis-c.md` | 44 EF Core, Engine, SQL, and generated files; 18 canonical groups | +| `dedupe-report.md` | 53 raw -> 49 stable candidates and exact merge decisions | +| `validation-lr-sec-001.md` | Deferred create/truncate security assessment; static correctness proof | +| `validation-lr-sec-013.md` | Reportable zero-length verifier assessment and focused test evidence | +| `raw-a.jsonl`, `raw-b.jsonl`, `raw-c.jsonl`, `deduped.jsonl` | Machine-readable raw and reconciled candidate ledgers | + +The external scan artifact `artifacts/05_findings/attack_path_analysis_report.md` contains +the 49 deployment-calibrated attack paths, including all report/defer/ignore decisions. diff --git a/SkipMessages.txt b/SkipMessages.txt deleted file mode 100644 index 14d97506..00000000 --- a/SkipMessages.txt +++ /dev/null @@ -1,45 +0,0 @@ -"`SELECT (SELECT TOP 1) FROM` is not supported by Jet." ---- -"Can be supported after rearranging CROSS JOIN/JOIN expressions." - -Currently, the following SQL is generated: - -SELECT -FROM (`Orders` AS `o`, -`Orders` AS `o0`) -LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` - -However, the following SQL is needed for Access to understand the query: - -SELECT -FROM Orders AS o -LEFT JOIN Customers AS c ON o.CustomerID = c.CustomerID, -Orders AS o0 -LEFT JOIN Customers AS c0 ON o0.CustomerID = c0.CustomerID - -The same is true for INNER JOINs as well. ---- - - -[Fact(Skip = "Probably unsupported by JET")] -[Fact(Skip = "Unsupported by JET")] -[Fact(Skip = "Unsupported by JET: subqueries supported only in FROM clause")] -[Fact(Skip = "Unsupported by JET: SELECT TOP 2 (SELECT TOP 1) returns 2 records")] -[Fact(Skip = "Unsupported by JET: SELECT ORDER BY (SELECT)")] -[Fact(Skip = "Unsupported by JET: SKIP TAKE is supported only in outer queries")] -[Fact(Skip = "Unsupported by JET: too complex query with DUAL")] -[Fact(Skip = "Unsupported by JET: DateTime does not support milliseconds")] -[Fact(Skip = "Unsupported by JET: SKIP TAKE DISTINCT")] -[Fact(Skip = "Assertion failed without evident reason")] -[Fact(Skip = "Unsupported by JET: Guid are supported indirectly")] -[Fact(Skip = "Unsupported by JET: Should be implemented by provider")] -[Fact(Skip = "Unsupported by JET: DateTimeOffset not fully supported")] -[Fact(Skip = "Unsupported by JET: CROSS JOIN and OTHER JOIN")] -[Fact(Skip = "Unsupported by JET: JOIN with unsupported ON PREDICATE")] -[Fact(Skip = "Unsupported by JET: operators on IMAGE and TEXT data types are not supported")] -[Fact(Skip = "Unsupported by JET: Data type unsupported")] -[Fact(Skip = "Unsupported by JET: rowversion unsupported")] -[Fact(Skip = "Unsupported by JET: nullable bit not supported")] -[Fact(Skip = "Unsupported by JET: JET behaviour requires that both columns in a composite foreign key are null")] -[Fact(Skip = "Unsupported by JET: OleDB does not support parallel transactions")] \ No newline at end of file diff --git a/src/EFCore.Jet/Extensions/JetDbContextOptionsBuilderExtensions.cs b/src/EFCore.Jet/Extensions/JetDbContextOptionsBuilderExtensions.cs index c905f1f5..c6651728 100644 --- a/src/EFCore.Jet/Extensions/JetDbContextOptionsBuilderExtensions.cs +++ b/src/EFCore.Jet/Extensions/JetDbContextOptionsBuilderExtensions.cs @@ -365,10 +365,6 @@ var coreOptionsExtension coreOptionsExtension = RelationalOptionsExtension.WithDefaultWarningConfiguration(coreOptionsExtension); - coreOptionsExtension = coreOptionsExtension.WithWarningsConfiguration( - coreOptionsExtension.WarningsConfiguration.TryWithExplicit( - RelationalEventId.AmbientTransactionWarning, WarningBehavior.Throw)); - ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(coreOptionsExtension); } } diff --git a/src/EFCore.Jet/Internal/JetOptions.cs b/src/EFCore.Jet/Internal/JetOptions.cs index abcbdf83..df860543 100644 --- a/src/EFCore.Jet/Internal/JetOptions.cs +++ b/src/EFCore.Jet/Internal/JetOptions.cs @@ -1,5 +1,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Linq; using EntityFrameworkCore.Jet.Data; using EntityFrameworkCore.Jet.Infrastructure.Internal; @@ -17,7 +18,12 @@ public class JetOptions : IJetOptions /// public virtual void Initialize(IDbContextOptions options) { - var jetOptions = options.FindExtension() ?? new JetOptionsExtension(); + // OfType (not FindExtension) so a *derived* extension is still found: + // FindExtension keys the extension dictionary by exact concrete type, so LibRed's + // LibRedOptionsExtension (which subclasses JetOptionsExtension to swap in its own services) + // would be missed and this would silently fall back to a default JetOptionsExtension — + // dropping UseShortTextForSystemString and every other option set through the LibRed builder. + var jetOptions = options.Extensions.OfType().FirstOrDefault() ?? new JetOptionsExtension(); // RowNumberPagingEnabled = jetOptions.RowNumberPaging ?? false; @@ -34,7 +40,12 @@ public virtual void Initialize(IDbContextOptions options) /// public virtual void Validate(IDbContextOptions options) { - var jetOptions = options.FindExtension() ?? new JetOptionsExtension(); + // OfType (not FindExtension) so a *derived* extension is still found: + // FindExtension keys the extension dictionary by exact concrete type, so LibRed's + // LibRedOptionsExtension (which subclasses JetOptionsExtension to swap in its own services) + // would be missed and this would silently fall back to a default JetOptionsExtension — + // dropping UseShortTextForSystemString and every other option set through the LibRed builder. + var jetOptions = options.Extensions.OfType().FirstOrDefault() ?? new JetOptionsExtension(); /* if (RowNumberPagingEnabled != (jetOptions.RowNumberPaging ?? false)) @@ -110,7 +121,12 @@ private static DataAccessProviderType GetDataAccessProviderTypeFromOptions(JetOp return DataAccessProviderType.Odbc; } - throw new InvalidOperationException("The JetConnection.DataAccessProviderFactory property needs to be set to an object of type OdbcFactory or OleDbFactory."); + // Neither OLE DB nor ODBC. For the ODBC/OLE DB providers a factory of some other type is a + // misconfiguration, but DataAccessProviderType only gates OLE-DB-vs-ODBC quirk handling, and a + // driver-free provider (LibRed, whose LibRedFactory is neither) legitimately has no such quirks. + // Treat it as Unconfigured — the same value a null factory yields, and what LibRed already ran as + // before its options extension was made discoverable — rather than failing a valid connection. + return DataAccessProviderType.Unconfigured; } /// diff --git a/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs b/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs index b7620110..ffc7c2aa 100644 --- a/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs +++ b/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs @@ -61,7 +61,12 @@ private string CreateExistsSql(string tableName) /// protected override bool InterpretExistsResult(object? value) { - return value != DBNull.Value; + // The exists query (`SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = …`) returns a row only + // when the table exists. An empty result is "not found" — but ADO.NET's ExecuteScalar returns C# null + // for an empty result set (per contract), while ACE's OLE DB path returns DBNull.Value. Treat BOTH as + // not-found, else a null (e.g. from LibRed's spec-correct reader) is misread as "exists" and the lock/ + // history table is never created. + return value is not null && value != DBNull.Value; } /// diff --git a/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs b/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs index 3faad939..be74e413 100644 --- a/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs +++ b/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs @@ -420,9 +420,12 @@ protected override void Generate( throw new InvalidOperationException(JetStrings.IndexTableRequired); } - builder.Append("RENAME INDEX ") + // Provider pseudo-SQL (Jet/ACE has no rename syntax): kept in the same `ALTER TABLE RENAME + // TO ` family as the table and column renames, rather than a dotted + // `RENAME INDEX
.` form that named the table differently from its siblings. + builder.Append("ALTER TABLE ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Table)) - .Append(".") + .Append(" RENAME INDEX ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name)) .Append(" TO ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.NewName)) diff --git a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetStringMethodTranslator.cs b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetStringMethodTranslator.cs index 43ad70cb..c8d1961c 100644 --- a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetStringMethodTranslator.cs +++ b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetStringMethodTranslator.cs @@ -191,13 +191,19 @@ private static readonly MethodInfo _lastOrDefaultMethodInfoWithoutArgs argument = _sqlExpressionFactory.Coalesce(argument, _sqlExpressionFactory.Constant(0)); } - argument = _sqlExpressionFactory.Case( - [ - new CaseWhenClause( - _sqlExpressionFactory.Equal(argument, _sqlExpressionFactory.Constant(-1)), - _sqlExpressionFactory.Constant(0)) - ], - argument); + // A dynamic start can be an IndexOf result. Protect MID from a -1 result because ACE may + // evaluate it before a preceding predicate which proves that the value was found. Constants + // cannot change at execution time and do not need the otherwise noisy CASE expression. + if (argument is not SqlConstantExpression) + { + argument = _sqlExpressionFactory.Case( + [ + new CaseWhenClause( + _sqlExpressionFactory.Equal(argument, _sqlExpressionFactory.Constant(-1)), + _sqlExpressionFactory.Constant(0)) + ], + argument); + } return _sqlExpressionFactory.Function( "MID", @@ -344,4 +350,4 @@ [new CaseWhenClause(_sqlExpressionFactory.IsNotNull(instance), _sqlExpressionFac return _sqlExpressionFactory.Subtract(charIndexExpression, offsetExpression); } } -} \ No newline at end of file +} diff --git a/src/EFCore.Jet/Query/Internal/JetDateTimeRangeConverter.cs b/src/EFCore.Jet/Query/Internal/JetDateTimeRangeConverter.cs new file mode 100644 index 00000000..431f396a --- /dev/null +++ b/src/EFCore.Jet/Query/Internal/JetDateTimeRangeConverter.cs @@ -0,0 +1,94 @@ +using Microsoft.EntityFrameworkCore.Query.SqlExpressions; + +namespace EntityFrameworkCore.Jet.Query.Internal; + +/// +/// Brings DateTime operands that fall outside Jet's representable date range into it. +/// +/// +/// +/// default(DateTime) (0001-01-01, Ticks 0) is below Jet's date floor of 0100-01-01, so it has no +/// on-disk representation. The DateTime type mapping substitutes the OLE epoch (1899-12-30, OA 0) for it, +/// which is the right sentinel for storage and equality — a stored default round-trips through it — but +/// wrong for ordering: it places "the lowest possible value" in the *middle* of the range, so every +/// genuine pre-1899 date compares as if it were below the minimum. WHERE d > default then +/// silently drops rows from years 100-1899. +/// +/// +/// Ordering comparisons don't need the round-trip sentinel — they need an operand that really is the +/// bottom of the range — so substitute 0100-01-01 (the same floor +/// JetSqlTranslatingExpressionVisitor uses for a COALESCE default). Equality is deliberately left +/// alone: d == default must keep matching the epoch a default was stored as. +/// +/// +/// This has to run in rather than in the compile-time +/// JetDateTimeExpressionVisitor, because the value normally arrives as a parameter and query +/// compilation is cached across invocations, so no value is available there. Nor can it be deferred to +/// a value-independent clamp in the emitted SQL: by then the DateTime type mapping has already replaced +/// 0001-01-01 with the epoch, so the clamp would test the substituted value and never fire. +/// +/// +public class JetDateTimeRangeConverter(ISqlExpressionFactory sqlExpressionFactory) : ExpressionVisitor +{ + /// The lowest date Jet/ACE can represent; dates run 0100-01-01 to 9999-12-31. + private static readonly DateTime JetMinDate = new(100, 1, 1); + + private ParametersCacheDecorator _parametersDecorator = null!; + + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// any release. + /// + public virtual Expression Process(Expression queryExpression, ParametersCacheDecorator parametersDecorator) + { + _parametersDecorator = parametersDecorator; + + return Visit(queryExpression); + } + + /// + protected override Expression VisitExtension(Expression extensionExpression) + { + if (extensionExpression is SqlBinaryExpression + { + OperatorType: ExpressionType.GreaterThan + or ExpressionType.GreaterThanOrEqual + or ExpressionType.LessThan + or ExpressionType.LessThanOrEqual + } binary) + { + var left = Replace(binary.Left); + var right = Replace(binary.Right); + + if (!ReferenceEquals(left, binary.Left) || !ReferenceEquals(right, binary.Right)) + { + return base.VisitExtension( + new SqlBinaryExpression(binary.OperatorType, left, right, binary.Type, binary.TypeMapping)); + } + } + + return base.VisitExtension(extensionExpression); + } + + /// Swaps an operand that is the CLR minimum DateTime for Jet's minimum. + private SqlExpression Replace(SqlExpression operand) + { + // Only look up a parameter's value when the operand could actually be one of ours: resolving it + // disables query caching for this shape, so don't pay that on unrelated comparisons. + var value = operand switch + { + SqlConstantExpression { Value: DateTime { Ticks: 0 } } => (object?)default(DateTime), + SqlParameterExpression { Type: var t } p when t == typeof(DateTime) || t == typeof(DateTimeOffset) + => _parametersDecorator.GetAndDisableCaching()[p.Name], + _ => null, + }; + + return value switch + { + DateTime { Ticks: 0 } => sqlExpressionFactory.Constant(JetMinDate, operand.TypeMapping), + DateTimeOffset { Ticks: 0 } => sqlExpressionFactory.Constant(JetMinDate, operand.TypeMapping), + _ => operand, + }; + } +} diff --git a/src/EFCore.Jet/Query/Internal/JetLiftOrderByPostprocessor.cs b/src/EFCore.Jet/Query/Internal/JetLiftOrderByPostprocessor.cs index 844b988b..a4ba4ab2 100644 --- a/src/EFCore.Jet/Query/Internal/JetLiftOrderByPostprocessor.cs +++ b/src/EFCore.Jet/Query/Internal/JetLiftOrderByPostprocessor.cs @@ -86,7 +86,7 @@ public virtual Expression Process(Expression expression) columnsToRewrite.Add(i, (existingIndex, selectExpression.Orderings[i], selectExpression.Orderings[i].IsAscending, false, referouter)); } - + } } @@ -95,6 +95,19 @@ public virtual Expression Process(Expression expression) return base.Visit(expression); } + // A lift IS happening: ClearOrdering below wipes every ordering and we re-append only what's + // captured in columnsToRewrite. Any ordering not captured above (e.g. a secondary ORDER BY on + // an inner-table column such as `l1.Name`, which isn't in the projection) would be silently + // dropped — losing a tie-breaker sort key. Project each such ordering so it survives pushdown + // and gets re-appended, preserving the full multi-key ORDER BY. + for (int i = 0; i < selectExpression.Orderings.Count; i++) + { + if (columnsToRewrite.ContainsKey(i)) + continue; + int index = selectExpression.AddToProjection(selectExpression.Orderings[i].Expression); + columnsToRewrite.Add(i, (index, null, selectExpression.Orderings[i].IsAscending, true, false)); + } + selectExpression.ClearOrdering(); var limit = selectExpression.Limit; //Keep the limit in parent expression @@ -117,7 +130,7 @@ public virtual Expression Process(Expression expression) selectExpression.PushdownIntoSubquery(); } - foreach (var colr in columnsToRewrite) + foreach (var colr in columnsToRewrite.OrderBy(p => p.Key)) { (int? index, OrderingExpression? oexp, bool ascending, bool rewrite, bool referstocurouter) = colr.Value; if (index.HasValue) diff --git a/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessor.cs b/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessor.cs index c2fb0132..9a85b6a8 100644 --- a/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessor.cs +++ b/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessor.cs @@ -32,6 +32,9 @@ public override Expression Process(Expression queryExpression, ParametersCacheDe var optimizedQueryExpression = new JetZeroLimitConverter(Dependencies.SqlExpressionFactory) .Process(queryExpression, parametersDecorator); + optimizedQueryExpression = new JetDateTimeRangeConverter(Dependencies.SqlExpressionFactory) + .Process(optimizedQueryExpression, parametersDecorator); + var afterBaseProcessing = base.Process(optimizedQueryExpression, parametersDecorator); var afterSearchConditionConversion = afterBaseProcessing;/*new SearchConditionConverter(Dependencies.SqlExpressionFactory) diff --git a/src/EFCore.Jet/Query/Internal/JetSqlTranslatingExpressionVisitor.cs b/src/EFCore.Jet/Query/Internal/JetSqlTranslatingExpressionVisitor.cs index f5b1d430..5ba00320 100644 --- a/src/EFCore.Jet/Query/Internal/JetSqlTranslatingExpressionVisitor.cs +++ b/src/EFCore.Jet/Query/Internal/JetSqlTranslatingExpressionVisitor.cs @@ -565,7 +565,8 @@ [ Dependencies.SqlExpressionFactory.Function( return null; } - return expressions.Aggregate((current, next) => + IReadOnlyList mappedExpressions = ApplyMinMaxResultTypeMapping(expressions, resultType); + return mappedExpressions.Aggregate((current, next) => Dependencies.SqlExpressionFactory.Case( [ new CaseWhenClause( @@ -582,7 +583,8 @@ [ Dependencies.SqlExpressionFactory.Function( return null; } - return expressions.Aggregate((current, next) => + IReadOnlyList mappedExpressions = ApplyMinMaxResultTypeMapping(expressions, resultType); + return mappedExpressions.Aggregate((current, next) => Dependencies.SqlExpressionFactory.Case( [ new CaseWhenClause( @@ -592,6 +594,29 @@ [ Dependencies.SqlExpressionFactory.Function( elseResult: next)); } + /// + /// Math.Min/Max operands can arrive with different store mappings even though their CLR expression has one + /// declared result type. Prefer an operand mapping for that result type and apply it to every arm before + /// building the CASE/IIF tree; otherwise the first arm can incorrectly force (for example) an Int16 mapping + /// onto an Int32 constant in an outer nested Min/Max. + /// + private IReadOnlyList ApplyMinMaxResultTypeMapping( + IReadOnlyList expressions, Type resultType) + { + RelationalTypeMapping? resultMapping = expressions + .Select(e => e.TypeMapping) + .FirstOrDefault(m => m?.ClrType == resultType); + + if (resultMapping is null) + { + return expressions; + } + + return expressions + .Select(e => Dependencies.SqlExpressionFactory.ApplyTypeMapping(e, resultMapping)) + .ToArray(); + } + private static string? GetProviderType(SqlExpression expression) => expression.TypeMapping?.StoreType; diff --git a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs index 7383165b..52710620 100644 --- a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs +++ b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs @@ -259,6 +259,12 @@ private void VisitJetTablesLinear(IReadOnlyList tables, Lis { SqlBinaryExpression bin => ExtractColumnExpressions(bin), SqlUnaryExpression unary => ExtractColumnExpressions(unary), + // A bare boolean column used directly as the ON condition (e.g. `ON g.HasSoulPatch`, + // once `= True` has been simplified away). Without this case it falls through to an + // empty list, the tables[0] check fails, and the INNER JOIN is wrongly emitted as a + // LEFT JOIN with nothing hoisted to WHERE — turning an inner join into an outer one + // (extra unmatched rows). See GearsOfWar Join_predicate_value. + ColumnExpression col => [col], _ => (List)[] }; @@ -358,6 +364,11 @@ private void EmitJoinInGroup(PredicateJoinExpressionBase join, TableExpressionBa { SqlBinaryExpression bin => ExtractColumnExpressions(bin), SqlUnaryExpression unary => ExtractColumnExpressions(unary), + // A bare boolean column used directly as the ON condition (e.g. `ON g.HasSoulPatch`, + // once `= True` is simplified away). Without this case it falls through to an empty + // list, the tables[0] check fails, and the INNER JOIN is wrongly emitted as a LEFT + // JOIN with nothing hoisted to WHERE — turning an inner join into an outer one. + ColumnExpression col => [col], _ => (List)[] }; diff --git a/src/EFCore.Jet/Storage/Internal/JetDoubleTypeMapping.cs b/src/EFCore.Jet/Storage/Internal/JetDoubleTypeMapping.cs index 3e18431e..3b0b1243 100644 --- a/src/EFCore.Jet/Storage/Internal/JetDoubleTypeMapping.cs +++ b/src/EFCore.Jet/Storage/Internal/JetDoubleTypeMapping.cs @@ -29,11 +29,17 @@ protected override string ProcessStoreType(RelationalTypeMappingParameters param protected override string GenerateNonNullSqlLiteral(object value) { - //The base can have some rounding problems - //-1.23456789 can have multiple 9s at the end - //Base uses format of G17 + // "R" (shortest round-trippable) rather than the base's "G17" or a lossy "G15": + // - G17 always emits 17 digits, so -1.23456789 becomes -1.2345678899999999. + // - G15 is clean for ordinary values but *rounds*: 1.0/3.0 drops a digit, and double.MinValue + // renders as -1.79769313486232E+308 — a larger magnitude than double.MaxValue, i.e. not a + // representable double at all. ACE rejects that literal ("Syntax error in number"). + // - "R" is the shortest string that parses back exactly: -1.23456789 stays clean, and + // double.MinValue renders as -1.7976931348623157E+308, which ACE accepts. + // ("R" was unreliable on .NET Framework — hence the old G17 advice — but has been + // shortest-round-trippable since .NET Core 3.0.) var doubleValue = Convert.ToDouble(value); - var literal = doubleValue.ToString("G15", CultureInfo.InvariantCulture); + var literal = doubleValue.ToString("R", CultureInfo.InvariantCulture); return !literal.Contains('E') && !literal.Contains('e') diff --git a/src/EFCore.Jet/Storage/Internal/JetFloatTypeMapping.cs b/src/EFCore.Jet/Storage/Internal/JetFloatTypeMapping.cs index db22830f..28d98204 100644 --- a/src/EFCore.Jet/Storage/Internal/JetFloatTypeMapping.cs +++ b/src/EFCore.Jet/Storage/Internal/JetFloatTypeMapping.cs @@ -34,6 +34,14 @@ protected override string ProcessStoreType(RelationalTypeMappingParameters param /// The generated string. /// protected override string GenerateNonNullSqlLiteral(object value) - => Convert.ToSingle(value).ToString("G7", CultureInfo.InvariantCulture); + // "R" (shortest round-trippable) rather than G9 or a lossy G7 — see JetDoubleTypeMapping: + // - G9 always emits 9 digits, so 0.1f becomes 0.100000001 and 85.55f becomes 85.5500031. + // - G7 is clean for ordinary values but *rounds*, so it doesn't round-trip: -1.23456789f + // renders as -1.234568, 1f/3f as 0.3333333, and float.MaxValue as 3.402823E+38 — a + // different float, so `WHERE Float = ` silently fails to match. (Unlike double's + // G15, G7 rounds the extremes *down*, so it never yields an out-of-range literal.) + // - "R" is the shortest string that parses back exactly: 0.1f/85.55f stay clean, and + // float.MaxValue renders as 3.4028235E+38. + => Convert.ToSingle(value).ToString("R", CultureInfo.InvariantCulture); } } diff --git a/src/EFCore.Jet/Storage/Internal/JetShortTypeMapping.cs b/src/EFCore.Jet/Storage/Internal/JetShortTypeMapping.cs new file mode 100644 index 00000000..974af4c5 --- /dev/null +++ b/src/EFCore.Jet/Storage/Internal/JetShortTypeMapping.cs @@ -0,0 +1,59 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Data; + +namespace EntityFrameworkCore.Jet.Storage.Internal; + +/// +/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to +/// the same compatibility standards as public APIs. It may be changed or removed without notice in +/// any release. You should only use it directly in your code with extreme caution and knowing that +/// doing so can result in application failures when updating to a new Entity Framework Core release. +/// +public class JetShortTypeMapping : ShortTypeMapping +{ + public static new JetShortTypeMapping Default { get; } = new("smallint", System.Data.DbType.Int16); + + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// any release. You should only use it directly in your code with extreme caution and knowing that + /// doing so can result in application failures when updating to a new Entity Framework Core release. + /// + public JetShortTypeMapping( + string storeType, + DbType? dbType = System.Data.DbType.Int16) + : base(storeType, dbType) + { + } + + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// any release. You should only use it directly in your code with extreme caution and knowing that + /// doing so can result in application failures when updating to a new Entity Framework Core release. + /// + protected JetShortTypeMapping(RelationalTypeMappingParameters parameters) + : base(parameters) + { + } + + /// + /// Creates a copy of this mapping. + /// + /// The parameters for this mapping. + /// The newly created mapping. + protected override RelationalTypeMapping Clone(RelationalTypeMappingParameters parameters) + => new JetShortTypeMapping(parameters); + + /// + /// A bare integer literal is Long/Integer to Jet, so a short (smallint) constant must be wrapped in + /// CINT (VBA CInt → 16-bit Integer) — mirroring 's CBYTE — otherwise the + /// reader gets an Int32 and GetInt16 throws. + /// + protected override string GenerateNonNullSqlLiteral(object value) + { + return $"CINT({base.GenerateNonNullSqlLiteral(value)})"; + } +} diff --git a/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs b/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs index c292c402..ae568dbe 100644 --- a/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs +++ b/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs @@ -28,7 +28,7 @@ public class JetTypeMappingSource : RelationalTypeMappingSource private readonly JetIntTypeMapping _counter = JetIntTypeMapping.Default; private readonly JetByteTypeMapping _byte = JetByteTypeMapping.Default; // unsigned, there is no signed byte in Jet - private readonly ShortTypeMapping _smallint = new("smallint", DbType.Int16); + private readonly JetShortTypeMapping _smallint = JetShortTypeMapping.Default; private readonly JetIntTypeMapping _integer = JetIntTypeMapping.Default; private readonly JetLongTypeMapping _bigint = JetLongTypeMapping.Default; @@ -137,6 +137,7 @@ public JetTypeMappingSource( {"ieeesingle", [_single] }, {"double", [_double] }, + {"double precision", [_double] }, {"float", [_double] }, {"float8", [_double] }, {"ieeedouble", [_double] }, diff --git a/src/EFCore.Jet/Update/Internal/JetUpdateSqlGenerator.cs b/src/EFCore.Jet/Update/Internal/JetUpdateSqlGenerator.cs index 31bf3b97..4eacf1ff 100644 --- a/src/EFCore.Jet/Update/Internal/JetUpdateSqlGenerator.cs +++ b/src/EFCore.Jet/Update/Internal/JetUpdateSqlGenerator.cs @@ -59,9 +59,19 @@ public ResultSetMapping AppendBulkInsertOperation(StringBuilder commandStringBui requiresTransaction = requiresTransaction || localRequiresTransaction; } + // Each command above was appended as its own INSERT + SELECT, so the group produces one result set + // PER COMMAND, not one for the group. Report "not last": JetModificationCommandBatch stamps this + // single value onto every command in the group and then patches only the final entry to + // LastInResultSet. Returning LastInResultSet here instead left commands 1..N-1 each claiming to be the + // last result set, so the reader could stop advancing early. (For a single-command group the outcome is + // unchanged — the patch turns the one entry into LastInResultSet either way.) + // + // Deliberately NOT IsPositionalResultMappingEnabled: that says the rows carry a position column for + // correlating them back to commands, which exists for a set-based MERGE ... OUTPUT. Jet has no MERGE — + // these are ordered, one-row-each result sets, so there is nothing to correlate positionally. return readOperations.Count == 0 ? ResultSetMapping.NoResults - : ResultSetMapping.LastInResultSet; + : ResultSetMapping.NotLastInResultSet; } /// @@ -121,32 +131,72 @@ protected override void AppendWhereAffectedClause(StringBuilder commandStringBui .Append("WHERE "); AppendRowsAffectedWhereCondition(commandStringBuilder, 1); - bool isfirstkeycolumn = true; - if (operations.Count > 0) + + // Choose the conditions before writing any of them: appending " AND " up front leaves a dangling + // "AND" — invalid SQL — whenever no operation ends up qualifying. + var conditions = new List<(IColumnModification Column, bool ByIdentity)>(); + var identityUsed = false; + foreach (var v in operations) { - commandStringBuilder - .Append(" AND ") - .AppendJoin( - operations, (sb, v) => - { - if (v is { IsKey: true, IsRead: false }) - { - AppendWhereCondition(sb, v, v.UseOriginalValueParameter); - return true; - } - - if (IsIdentityOperation(v) && isfirstkeycolumn) - { - AppendIdentityWhereCondition(sb, v); - isfirstkeycolumn = false; - return true; - } - - return false; - }, " AND "); + if (v is { IsKey: true, IsRead: false }) + { + conditions.Add((v, false)); + } + else if (IsIdentityOperation(v) && !identityUsed && IsGeneratedByAutoNumber(v)) + { + // @@identity only ever holds the value of the FIRST AutoNumber, so at most one column + // can be matched this way. + conditions.Add((v, true)); + identityUsed = true; + } + } + + if (conditions.Count == 0) + { + return; } + + commandStringBuilder + .Append(" AND ") + .AppendJoin( + conditions, (sb, c) => + { + if (c.ByIdentity) + { + AppendIdentityWhereCondition(sb, c.Column); + } + else + { + AppendWhereCondition(sb, c.Column, c.Column.UseOriginalValueParameter); + } + + return true; + }, " AND "); } + /// + /// Whether a store-generated read-back key column gets its value from a genuine AutoNumber, and so can + /// be located again with = @@identity. + /// + /// + /// @@identity reflects only an AutoNumber. A key column store-generated some other way — by a + /// DEFAULT or as a computed column — is not reflected in it, so col = @@identity would compare + /// against the previous insert's AutoNumber (possibly from another table entirely) and match no row. + /// Those columns get no condition at all: @@ROWCOUNT = 1 plus the other provided (non-read) key + /// columns identify the just-inserted row, and the generated value is what we read back. + /// + /// Tested negatively, against the ways a value can be generated *other* than by AutoNumber, rather + /// than positively against GetValueGenerationStrategy() == IdentityColumn: that also reports + /// when the model-level strategy or the property + /// itself is unavailable, which would wrongly drop the condition for a real AutoNumber. + /// + /// + private static bool IsGeneratedByAutoNumber(IColumnModification columnModification) + => columnModification.Property is not { } property + || (!property.TryGetDefaultValue(out _) + && property.GetDefaultValueSql() is null + && property.GetComputedColumnSql() is null); + public override ResultSetMapping AppendStoredProcedureCall( StringBuilder commandStringBuilder, IReadOnlyModificationCommand command, diff --git a/src/LibRed/Directory.Build.props b/src/LibRed/Directory.Build.props new file mode 100644 index 00000000..8f4f617b --- /dev/null +++ b/src/LibRed/Directory.Build.props @@ -0,0 +1,26 @@ + + + + + + enable + enable + false + false + $(NoWarn);CS1591 + + + + + true + $(MSBuildThisFileDirectory)..\..\Key.snk + + diff --git a/src/LibRed/LibRed.Ado/LibRed.Ado.csproj b/src/LibRed/LibRed.Ado/LibRed.Ado.csproj new file mode 100644 index 00000000..458b6747 --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRed.Ado.csproj @@ -0,0 +1,15 @@ + + + + $(JetTargetFramework) + LibRed.Data + LibRed.Ado + ADO.NET provider over the LibRed engine: DbConnection, DbCommand, DbDataReader, DbParameter, DbTransaction and DbProviderFactory. + AnyCPU;x86;x64 + + + + + + + diff --git a/src/LibRed/LibRed.Ado/LibRedCommand.cs b/src/LibRed/LibRed.Ado/LibRedCommand.cs new file mode 100644 index 00000000..01c9c607 --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRedCommand.cs @@ -0,0 +1,159 @@ +using System.Data; +using System.Data.Common; +using System.Diagnostics.CodeAnalysis; + +namespace LibRed.Data; + +/// ADO.NET command that runs SQL through the LibRed engine. +public sealed class LibRedCommand : DbCommand +{ + private readonly LibRedParameterCollection _parameters = new(); + + private string _commandText = string.Empty; + + [AllowNull] + public override string CommandText + { + get => _commandText; + set => _commandText = value ?? string.Empty; + } + public override int CommandTimeout { get; set; } = 30; + public override CommandType CommandType { get; set; } = CommandType.Text; + public override bool DesignTimeVisible { get; set; } + public override UpdateRowSource UpdatedRowSource { get; set; } = UpdateRowSource.None; + + protected override DbConnection? DbConnection { get; set; } + protected override DbParameterCollection DbParameterCollection => _parameters; + protected override DbTransaction? DbTransaction { get; set; } + + public new LibRedConnection? Connection + { + get => (LibRedConnection?)DbConnection; + set => DbConnection = value; + } + + public override void Cancel() { } + + public override void Prepare() { } + + public override int ExecuteNonQuery() => ExecuteBatch().RecordsAffected; + + public override object? ExecuteScalar() + { + using var reader = ExecuteReader(); + return reader.Read() && reader.FieldCount > 0 ? reader.GetValue(0) : null; + } + + protected override DbParameter CreateDbParameter() => new LibRedParameter(); + + protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior) + { + // Route through Execute so the reader path also handles DML/DDL: EF Core runs inserts through + // ExecuteReader and inspects RecordsAffected. A query yields rows (RecordsAffected -1); an + // INSERT/CREATE runs and yields an empty result carrying its rows-affected count. + Engine.CommandResult result = ExecuteBatch(); + return new LibRedDataReader(result.Rows, result.RecordsAffected); + } + + /// + /// Runs the command's text as a batch: Jet/ACE (and the LibRed engine) execute one statement at a + /// time, but EF Core sends multiple statements in a single command — most notably an INSERT followed + /// by a guarded SELECT that reads the store-generated key back via @@ROWCOUNT/@@IDENTITY. + /// Each statement runs through the same engine, so its connection-scoped session state (the two system + /// variables) carries from the INSERT to the SELECT. The batch's result is its last statement's + /// — the SELECT the caller reads — matching how a real database returns the final result set. + /// + private Engine.CommandResult ExecuteBatch() + { + ValidateTransaction(); + Engine.QueryEngine engine = RequireEngine(); + IReadOnlyDictionary parameters = BuildParameters(); + + Engine.CommandResult? last = null; + foreach (string statement in SplitStatements(CommandText)) + last = engine.Execute(statement, parameters); + + return last ?? new Engine.CommandResult(Engine.Execution.ResultSet.Empty, RecordsAffected: 0); + } + + /// + /// Splits a batch on top-level ; separators, ignoring semicolons inside string literals + /// ('…' / "…") and quoted identifiers ([…] / `…`). Blank statements + /// (e.g. a trailing ;) are dropped. The single-statement common case returns one item. + /// + public static IEnumerable SplitStatements(string sql) + { + int start = 0; + char quote = '\0'; // the closing delimiter we're inside, or '\0' at top level + for (int i = 0; i < sql.Length; i++) + { + char c = sql[i]; + if (quote != '\0') + { + if (c == quote) quote = '\0'; + } + else if (c is '\'' or '"' or '`') quote = c; + else if (c == '[') quote = ']'; + else if (c == ';') + { + string part = sql[start..i].Trim(); + if (part.Length > 0) yield return part; + start = i + 1; + } + } + + string tail = sql[start..].Trim(); + if (tail.Length > 0) yield return tail; + } + + private Engine.QueryEngine RequireEngine() => + Connection?.Engine ?? throw new InvalidOperationException("Connection is not open."); + + /// Rejects executing under a transaction that isn't the one active on this command's connection — + /// one from another connection, or one already committed/rolled back (after which the connection no longer + /// holds it). A command with no transaction assigned runs directly on the connection (autocommit), which the + /// engine still makes atomic per statement. + private void ValidateTransaction() + { + if (DbTransaction is null) return; + if (!ReferenceEquals(DbTransaction, Connection?.CurrentTransaction)) + throw new InvalidOperationException( + "The transaction assigned to this command is not active on its connection — it belongs to another " + + "connection or has already been committed or rolled back."); + } + + /// Snapshots the command's parameters as a name→value map for the engine, + /// translating to a SQL null. + private IReadOnlyDictionary BuildParameters() + { + var map = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (LibRedParameter parameter in _parameters.Cast()) + map[parameter.ParameterName] = Normalize(parameter.Value); + return map; + } + + /// The OLE epoch (1899-12-30): Jet stores every temporal as a DateTime relative to it — a time as + /// the epoch date + time-of-day, a date at midnight. + private static readonly DateTime OleEpoch = new(1899, 12, 30); + + /// Coerces a parameter value to what the engine should see. Jet/ACE has no native TimeSpan, TimeOnly, + /// DateOnly or DateTimeOffset — they are all stored as a on the 1899-12-30 epoch — so + /// this boundary (the single point EF parameters enter the engine) converts each to that DateTime, exactly as + /// the literal path does (a TimeSpan literal renders as a #…#/TIMEVALUE DateTime). The engine then only + /// ever handles DateTime for temporals, and the reader converts back on the way out. Sub-seconds are stripped + /// (Jet has 1-second resolution) so a WHERE d = @p comparison matches the seconds-only stored value. + private static object? Normalize(object? value) => value switch + { + DBNull => null, + DateTime d => Seconds(d), + // DateTimeOffset is read back at offset zero, so store its UTC instant. + DateTimeOffset dto => Seconds(dto.UtcDateTime), + TimeSpan t => OleEpoch + Seconds(t), + TimeOnly to => OleEpoch + Seconds(to.ToTimeSpan()), + DateOnly d => d.ToDateTime(TimeOnly.MinValue), + _ => value, + }; + + private static DateTime Seconds(DateTime d) => d.AddTicks(-(d.Ticks % TimeSpan.TicksPerSecond)); + private static TimeSpan Seconds(TimeSpan t) => TimeSpan.FromTicks(t.Ticks - t.Ticks % TimeSpan.TicksPerSecond); +} diff --git a/src/LibRed/LibRed.Ado/LibRedConnection.cs b/src/LibRed/LibRed.Ado/LibRedConnection.cs new file mode 100644 index 00000000..abe6b161 --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRedConnection.cs @@ -0,0 +1,266 @@ +using System.Data; +using System.Data.Common; +using System.Diagnostics.CodeAnalysis; +using LibRed.Engine; + +namespace LibRed.Data; + +/// +/// ADO.NET connection over a native LibRed engine instance. The connection string's +/// Data Source names the .mdb/.accdb file to open. +/// +public sealed class LibRedConnection : DbConnection +{ + private string _connectionString = string.Empty; + private ConnectionState _state = ConnectionState.Closed; + private JetDatabase? _database; + + public LibRedConnection() { } + + public LibRedConnection(string connectionString) => _connectionString = connectionString ?? string.Empty; + + [AllowNull] + public override string ConnectionString + { + get => _connectionString; + set + { + if (State != ConnectionState.Closed) + throw new InvalidOperationException("The connection string cannot be changed while the connection is open."); + + _connectionString = value ?? string.Empty; + } + } + + /// The open database, or null when closed. Used by commands. + internal QueryEngine? Engine { get; private set; } + + /// The transaction currently open on this connection, or null. + internal LibRedTransaction? CurrentTransaction { get; private set; } + + /// Commits the page-level transaction and clears it as the active one. Goes through the shared + /// nested-transaction controller so SQL COMMIT and this ADO commit track one depth. + internal void CommitTransaction(LibRedTransaction transaction) + { + if (!ReferenceEquals(CurrentTransaction, transaction)) return; + _database?.CommitNested(); + CurrentTransaction = null; + } + + /// Rolls the page-level transaction back and clears it as the active one. + internal void RollbackTransaction(LibRedTransaction transaction) + { + if (!ReferenceEquals(CurrentTransaction, transaction)) return; + _database?.RollbackNested(); + CurrentTransaction = null; + } + + /// Opens a savepoint in the connection's active transaction (called by + /// ). + internal LibRed.IO.Savepoint CreateSavepoint() => + (_database ?? throw new InvalidOperationException("The connection is not open.")).CreateSavepoint(); + + /// Rolls the active transaction back to a savepoint (called by ). + internal void RollbackToSavepoint(LibRed.IO.Savepoint savepoint) => _database?.RollbackToSavepoint(savepoint); + + /// Releases a savepoint in the active transaction (called by ). + internal void ReleaseSavepoint(LibRed.IO.Savepoint savepoint) => _database?.ReleaseSavepoint(savepoint); + + public override string Database => DataSource; + + public override string DataSource => ParseDataSource(_connectionString); + + public override string ServerVersion => _database?.Format.Version.ToString() ?? string.Empty; + + public override ConnectionState State => _state; + + /// True if the database file named by exists. + public static bool DatabaseExists(string? connectionString) + { + string path = ParseDataSource(connectionString ?? string.Empty); + return !string.IsNullOrEmpty(path) && File.Exists(path); + } + + /// + /// Builds a canonical Data Source=... connection string from a bare file name. If + /// already looks like a connection string + /// (contains a key=value pair), it is returned unchanged. + /// + public static string GetConnectionString(string fileNameOrConnectionString) + { + if (string.IsNullOrWhiteSpace(fileNameOrConnectionString)) + return string.Empty; + + return fileNameOrConnectionString.Contains('=') + ? fileNameOrConnectionString + : $"Data Source={fileNameOrConnectionString}"; + } + + /// + /// Creates a new, empty Jet/ACE database file at the location named by + /// — **natively, no DAO/ADOX, cross-platform**. + /// + /// + /// synthesises the file from scratch (page 0, + /// the free map, and the bootstrap system catalog), then LibRed's ordinary writers populate it. + /// Produces an ACE 2007-format (.accdb) database that LibRed reads and writes fully; the + /// remaining Access-compatibility system tables are still being filled in. + /// + public static void CreateDatabase(string connectionString) + { + string path = ParseDataSource(connectionString); + if (string.IsNullOrEmpty(path)) + throw new ArgumentException("The connection string is missing a Data Source.", nameof(connectionString)); + + Storage.DatabaseCreator.CreateEmpty(path); + CreateDualTable(path); + } + + /// + /// The single-row helper table every provider-created database carries. EFCore.Jet's query generator + /// renders FROM-less scalar queries (All/Any/Count/constant projections) as + /// FROM (SELECT COUNT(*) FROM `#Dual`), because Jet has no Oracle-style DUAL. The leading '#' + /// keeps it out of Catalog.UserTables (so HasUserTables() ignores it) while the binder + /// still resolves it by name. + /// + /// + /// Spelled out here rather than read from JetConnection.DefaultDualTableName: it is the same + /// name by necessity — EF's generated SQL is what has to find the table — but sharing one constant was + /// the last thing tying this assembly to the Windows-only EFCore.Jet.Data, for no benefit beyond a + /// five-character string. + /// + internal const string DualTableName = "#Dual"; + + // The DAO/ADOX creation path created this via ISchemaOperationsProvider.EnsureDualTable; native + // creation must do the same or those queries fail to bind. + private static void CreateDualTable(string path) + { + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable( + DualTableName, + [new LibRed.Catalog.ColumnSpec("ID", LibRed.Catalog.JetDataType.Int32, 4, IsFixedLength: true, IsNullable: false)], + primaryKey: ["ID"]); + db.OpenTable(DualTableName).Insert([1]); + } + + /// Deletes the database file named by , if it exists. + public static void DropDatabase(string connectionString) + { + string path = ParseDataSource(connectionString); + if (!string.IsNullOrEmpty(path) && File.Exists(path)) + File.Delete(path); + } + + /// + /// No-op: LibRed opens/closes the underlying file directly and does not pool connections. + /// Exists for API parity with JetConnection.ClearPool. + /// + public static void ClearPool(LibRedConnection connection) + { + } + + /// + /// True if the open database has any user (non-system) tables. Read from LibRed's own catalog — + /// no INFORMATION_SCHEMA or DAO/ADOX — so schema checks work cross-platform on LibRed files. + /// + public bool HasUserTables() + { + if (_database is null) + throw new InvalidOperationException("The connection is not open."); + return _database.Catalog.UserTables.Any(); + } + + public override void Open() + { + if (_state == ConnectionState.Open) return; + + string path = DataSource; + if (string.IsNullOrEmpty(path)) + throw new InvalidOperationException("Connection string is missing a Data Source."); + + _database = JetDatabase.Open(path, readOnly: false); + Engine = new QueryEngine(_database); + _state = ConnectionState.Open; + } + + public override void Close() + { + // An open transaction that was never committed is abandoned: roll it back (all nesting levels) so its + // writes don't leak onto disk (matches ADO.NET's implicit rollback on connection close). Keyed off the + // actual transaction depth so a SQL-opened BEGIN with no ADO handle is rolled back too. + if (_database is { TransactionDepth: > 0 }) + { + _database.RollbackAll(); + CurrentTransaction = null; + } + + _database?.Dispose(); + _database = null; + Engine = null; + _state = ConnectionState.Closed; + } + + public override void ChangeDatabase(string databaseName) => + throw new NotSupportedException("A Jet/ACE connection maps to a single file."); + + protected override DbCommand CreateDbCommand() => new LibRedCommand { Connection = this }; + + protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel) + { + if (_database is null || _state != ConnectionState.Open) + throw new InvalidOperationException("The connection is not open."); + if (CurrentTransaction is not null) + throw new InvalidOperationException("A transaction is already in progress on this connection; use SQL BEGIN/COMMIT or savepoints to nest."); + + _database.BeginNested(); + // Resolve the ADO default (Unspecified) to a concrete level the way real providers do — EF and its + // TransactionStarted interceptor expect a started transaction to report a real IsolationLevel, not + // Unspecified. LibRed serialises writers via page-level locking; ReadCommitted is the reported default. + if (isolationLevel == IsolationLevel.Unspecified) + isolationLevel = IsolationLevel.ReadCommitted; + return CurrentTransaction = new LibRedTransaction(this, isolationLevel); + } + + protected override void Dispose(bool disposing) + { + if (disposing) Close(); + base.Dispose(disposing); + } + + private static string ParseDataSource(string connectionString) + { + if (string.IsNullOrWhiteSpace(connectionString)) return string.Empty; + + // Allow a bare path as the whole connection string. + if (!connectionString.Contains('=')) + return ExpandPath(connectionString.Trim()); + + // Let the framework parser handle quoted/escaped values. In particular, splitting on + // semicolons selects the wrong file for a valid value such as Data Source="a;b.accdb". + // When aliases are mixed, prefer the canonical spelling, then DataSource, then DBQ. + var builder = new DbConnectionStringBuilder { ConnectionString = connectionString }; + string? raw = TryGetString(builder, "Data Source") + ?? TryGetString(builder, "DataSource") + ?? TryGetString(builder, "DBQ"); + + return string.IsNullOrEmpty(raw) ? string.Empty : ExpandPath(raw); + } + + private static string? TryGetString(DbConnectionStringBuilder builder, string key) => + builder.TryGetValue(key, out object? value) ? Convert.ToString(value) : null; + + /// + /// Resolves to a full path and defaults to a ".accdb" extension - matches EFCore.Jet.Data's + /// internal JetStoreDatabaseHandling.ExpandFileName/EnsureFileExtension, so + /// LibRedConnection agrees with 's bootstrap (see + /// ) about which file e.g. Data Source=Foo actually names. + /// Without this, a bare name like "Foo" would resolve here to a different path than the + /// "Foo.accdb" that DAO/ADOX actually creates, and DatabaseExists/DropDatabase/Open would all + /// silently look in the wrong place. + /// + private static string ExpandPath(string path) + { + var fullPath = Path.GetFullPath(path); + return string.IsNullOrEmpty(Path.GetExtension(fullPath)) ? fullPath + ".accdb" : fullPath; + } +} diff --git a/src/LibRed/LibRed.Ado/LibRedConnectionStringBuilder.cs b/src/LibRed/LibRed.Ado/LibRedConnectionStringBuilder.cs new file mode 100644 index 00000000..c4649bda --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRedConnectionStringBuilder.cs @@ -0,0 +1,28 @@ +using System.Data.Common; + +namespace LibRed.Data; + +/// +/// Connection string builder for the LibRed provider. LibRed connection strings are always +/// plain Data Source=... pairs, so unlike EFCore.Jet's +/// DbConnectionStringBuilderExtensions.GetDataSource/SetDataSource (which branch on +/// DataAccessProviderType/ODBC/OLE DB and throw for any other builder type), this reads +/// and writes the "Data Source" key directly - no provider-type gate to fall into. +/// +public class LibRedConnectionStringBuilder : DbConnectionStringBuilder +{ + /// + /// Reads "Data Source", "DataSource", or "DBQ" (whichever is present - matches + /// 's own tolerant key parsing), but always writes the + /// canonical "Data Source" key. + /// + public string? DataSource + { + get => TryGetValue("Data Source", out var value) + || TryGetValue("DataSource", out value) + || TryGetValue("DBQ", out value) + ? (string)value + : null; + set => this["Data Source"] = value; + } +} diff --git a/src/LibRed/LibRed.Ado/LibRedDataReader.cs b/src/LibRed/LibRed.Ado/LibRedDataReader.cs new file mode 100644 index 00000000..fee4e8f6 --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRedDataReader.cs @@ -0,0 +1,198 @@ +using System.Collections; +using System.Data.Common; +using LibRed.Engine.Execution; + +namespace LibRed.Data; + +/// Forward-only reader projecting an engine as ADO.NET rows. +public sealed class LibRedDataReader : DbDataReader +{ + private readonly ResultSet _result; + private readonly IEnumerator _rows; + private readonly int _recordsAffected; + private object?[] _current = []; + private bool _pendingFirst; + private bool _hadRows; + private bool _closed; + + /// Rows affected for a DML command; -1 for a query (ADO convention). + internal LibRedDataReader(ResultSet result, int recordsAffected = -1) + { + _result = result; + _rows = result.Rows.GetEnumerator(); + _recordsAffected = recordsAffected; + + // Buffer the first row eagerly so column types (GetFieldType/GetDataTypeName) are available + // before the first Read — EF's BufferedDataReader reads that metadata before reading any rows. + if (_rows.MoveNext()) + { + _current = _rows.Current; + _pendingFirst = true; + _hadRows = true; + } + } + + public override int FieldCount => _result.ColumnNames.Count; + public override int Depth => 0; + public override bool HasRows => _hadRows; + public override bool IsClosed => _closed; + public override int RecordsAffected => _recordsAffected; + + public override object this[int ordinal] => GetValue(ordinal); + public override object this[string name] => GetValue(GetOrdinal(name)); + + public override bool Read() + { + if (_pendingFirst) { _pendingFirst = false; return true; } // yield the pre-buffered first row + if (!_rows.MoveNext()) return false; + _current = _rows.Current; + return true; + } + + public override bool NextResult() => false; + + public override string GetName(int ordinal) => _result.ColumnNames[ordinal]; + + public override int GetOrdinal(string name) + { + for (int i = 0; i < _result.ColumnNames.Count; i++) + if (string.Equals(_result.ColumnNames[i], name, StringComparison.OrdinalIgnoreCase)) + return i; + throw new IndexOutOfRangeException(name); + } + + public override object GetValue(int ordinal) => _current[ordinal] ?? DBNull.Value; + + /// The OLE epoch (1899-12-30) — Jet stores TimeSpan/TimeOnly as an offset from it. + private static readonly DateTime OleEpoch = new(1899, 12, 30); + + /// + /// Typed accessor EF Core uses. Jet has no TimeSpan/DateOnly/TimeOnly/DateTimeOffset type — they are + /// all stored in a DateTime column — so convert a stored back when one of those + /// is requested. For there is no offset on disk (the mapping strips it and + /// stores UTC on the way in), so it is read back at offset zero. + /// default(DateTime) (Ticks 0 / 0001-01-01) is below Jet's OLE date floor, so the write path (the + /// inherited EFCore.Jet DateTime mapping) collapses it onto the epoch OA 0. This reverses it on the way out + /// — the epoch reads back as default — matching EFCore.Jet's JetDataReader. Scoped to DateTime/DateTimeOffset: + /// a TimeSpan/TimeOnly at the epoch is a legitimate midnight, handled above. + /// + public override T GetFieldValue(int ordinal) + { + if (_current[ordinal] is DateTime dt) + { + if (typeof(T) == typeof(TimeSpan)) return (T)(object)(dt - OleEpoch); + if (typeof(T) == typeof(DateOnly)) return (T)(object)DateOnly.FromDateTime(dt); + if (typeof(T) == typeof(TimeOnly)) return (T)(object)TimeOnly.FromDateTime(dt); + if (typeof(T) == typeof(DateTime)) return (T)(object)(dt == OleEpoch ? default : dt); + if (typeof(T) == typeof(DateTimeOffset)) return (T)(object)new DateTimeOffset(dt == OleEpoch ? default : dt, TimeSpan.Zero); + } + return base.GetFieldValue(ordinal); + } + + /// The stored epoch is the on-disk home of default(DateTime) — see . + private static DateTime FromStored(DateTime dt) => dt == OleEpoch ? default : dt; + + public override int GetValues(object[] values) + { + int count = Math.Min(values.Length, FieldCount); + for (int i = 0; i < count; i++) values[i] = GetValue(i); + return count; + } + + public override bool IsDBNull(int ordinal) => _current[ordinal] is null; + + public override Type GetFieldType(int ordinal) + { + Type declared = _result.ColumnTypes[ordinal]; + return declared != typeof(object) + ? declared + : ordinal < _current.Length && _current[ordinal] is { } value ? value.GetType() : typeof(object); + } + + public override string GetDataTypeName(int ordinal) => GetFieldType(ordinal).Name; + + public override bool GetBoolean(int ordinal) + { + var value = GetValue(ordinal); + if (value is short) return Convert.ToBoolean(value); + return (bool)value; + } + public override byte GetByte(int ordinal) => (byte)GetValue(ordinal); + public override char GetChar(int ordinal) => (char)GetValue(ordinal); + public override DateTime GetDateTime(int ordinal) => FromStored((DateTime)GetValue(ordinal)); + public override decimal GetDecimal(int ordinal) => (decimal)GetValue(ordinal); + public override double GetDouble(int ordinal) => (double)GetValue(ordinal); + public override float GetFloat(int ordinal) => (float)GetValue(ordinal); + public override Guid GetGuid(int ordinal) => (Guid)GetValue(ordinal); + public override short GetInt16(int ordinal) => (short)GetValue(ordinal); + public override int GetInt32(int ordinal) => (int)GetValue(ordinal); + + public override long GetInt64(int ordinal) + { + var result = GetValue(ordinal); + if (result is long l) + { + return l; + } + + try + { + return Convert.ToInt64(result); + } + catch (Exception) + { + // ignored + } + + return (long)result; + + } + public override string GetString(int ordinal) => (string)GetValue(ordinal); + + public override long GetBytes(int ordinal, long dataOffset, byte[]? buffer, int bufferOffset, int length) + { + var source = (byte[])GetValue(ordinal); + if (buffer is null) return source.Length; + + ValidateCopyArguments(dataOffset, buffer.Length, bufferOffset, length); + if (dataOffset >= source.Length) return 0; + + int copy = Math.Min(length, source.Length - checked((int)dataOffset)); + source.AsSpan(checked((int)dataOffset), copy).CopyTo(buffer.AsSpan(bufferOffset, copy)); + return copy; + } + + public override long GetChars(int ordinal, long dataOffset, char[]? buffer, int bufferOffset, int length) + { + var source = GetString(ordinal); + if (buffer is null) return source.Length; + + ValidateCopyArguments(dataOffset, buffer.Length, bufferOffset, length); + if (dataOffset >= source.Length) return 0; + + int copy = Math.Min(length, source.Length - checked((int)dataOffset)); + source.AsSpan(checked((int)dataOffset), copy).CopyTo(buffer.AsSpan(bufferOffset, copy)); + return copy; + } + + private static void ValidateCopyArguments(long dataOffset, int bufferLength, int bufferOffset, int length) + { + ArgumentOutOfRangeException.ThrowIfNegative(dataOffset); + ArgumentOutOfRangeException.ThrowIfNegative(bufferOffset); + ArgumentOutOfRangeException.ThrowIfNegative(length); + + if (bufferOffset > bufferLength || length > bufferLength - bufferOffset) + throw new ArgumentException("The requested range does not fit in the destination buffer."); + } + + public override IEnumerator GetEnumerator() => new DbEnumerator(this, closeReader: false); + + public override void Close() => _closed = true; + + protected override void Dispose(bool disposing) + { + if (disposing) _rows.Dispose(); + Close(); + base.Dispose(disposing); + } +} diff --git a/src/LibRed/LibRed.Ado/LibRedException.cs b/src/LibRed/LibRed.Ado/LibRedException.cs new file mode 100644 index 00000000..0f800e80 --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRedException.cs @@ -0,0 +1,29 @@ +using System.Data.Common; + +namespace LibRed.Data; + +/// +/// The exception raised for errors originating in the LibRed provider. It carries a +/// so the retrying execution strategy can decide whether a failure is +/// transient without depending on the ODBC/OLE DB exception types — LibRed is a native managed +/// engine and does not surface OleDbException/OdbcException. +/// +public sealed class LibRedException : DbException +{ + public LibRedException(string message, int number) + : base(message) + { + Number = number; + HResult = number; + } + + public LibRedException(string message, int number, Exception? innerException) + : base(message, innerException) + { + Number = number; + HResult = number; + } + + /// The LibRed error number, used to classify transient failures. + public int Number { get; } +} diff --git a/src/LibRed/LibRed.Ado/LibRedFactory.cs b/src/LibRed/LibRed.Ado/LibRedFactory.cs new file mode 100644 index 00000000..991ff27c --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRedFactory.cs @@ -0,0 +1,34 @@ +using System.Data.Common; + +namespace LibRed.Data; + +/// +/// for the LibRed provider, enabling provider-agnostic +/// ADO.NET code and registration via DbProviderFactories. +/// +public sealed class LibRedFactory : DbProviderFactory +{ + public static readonly LibRedFactory Instance = new(); + + private LibRedFactory() { } + + public override DbConnection CreateConnection() => new LibRedConnection(); + public override DbCommand CreateCommand() => new LibRedCommand(); + public override DbParameter CreateParameter() => new LibRedParameter(); + + /// + /// Returns a , not a bare + /// : EFCore.Jet.Data's + /// DbConnectionStringBuilderExtensions.SetDataSource throws for any builder that isn't + /// an ODBC/OLE DB builder, so LibRed needs its own type with its own "Data Source" handling + /// rather than sharing that generic extension surface. + /// + public override DbConnectionStringBuilder CreateConnectionStringBuilder() => new LibRedConnectionStringBuilder(); + + /// + /// Returns the to use for LibRed data access. LibRed has a + /// single native engine (no ODBC/OLE DB driver choice), so this always returns + /// . Exists for API parity with JetFactory.GetDataAccessProviderFactory. + /// + public static DbProviderFactory GetDataAccessProviderFactory() => Instance; +} diff --git a/src/LibRed/LibRed.Ado/LibRedParameter.cs b/src/LibRed/LibRed.Ado/LibRedParameter.cs new file mode 100644 index 00000000..ad7df342 --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRedParameter.cs @@ -0,0 +1,115 @@ +using System.Data; +using System.Data.Common; +using System.Diagnostics.CodeAnalysis; + +namespace LibRed.Data; + +/// A command parameter for the LibRed provider. +public sealed class LibRedParameter : DbParameter +{ + // Like SqlParameter/OleDbParameter/OdbcParameter, an unset DbType is INFERRED from the value's CLR type + // (not left at Object): a raw `new LibRedParameter { Value = "ALFKI" }` reports DbType.String, so EF Core's + // command logging prints it faithfully (no bare `(DbType = Object)`). An explicitly-set DbType always wins. + private DbType? _dbType; + public override DbType DbType + { + get => _dbType ?? InferDbType(Value); + set => _dbType = value; + } + + public override ParameterDirection Direction { get; set; } = ParameterDirection.Input; + + // Defaults to false, matching SqlParameter/OleDbParameter/OdbcParameter (whose IsNullable is false until set). + public override bool IsNullable { get; set; } + private string _parameterName = string.Empty; + private string _sourceColumn = string.Empty; + + [AllowNull] + public override string ParameterName + { + get => _parameterName; + set => _parameterName = value ?? string.Empty; + } + + [AllowNull] + public override string SourceColumn + { + get => _sourceColumn; + set => _sourceColumn = value ?? string.Empty; + } + public override bool SourceColumnNullMapping { get; set; } + public override object? Value { get; set; } + + // Mirror OleDbParameter/OdbcParameter: they derive a non-zero Size from the VALUE — a variable-length value + // reports its length (a string's character count, a byte[]'s byte count), a byte reports 1, and the fixed + // numeric/temporal/Guid/Boolean types all report 0 (the size comes from the value, not the DbType). EF Core's + // command logging prints `(Size = N)` from this. An explicitly-set size always wins. + private int _size; + public override int Size + { + get => _size != 0 ? _size + : Value switch { string s => s.Length, byte[] b => b.Length, byte => 1, _ => 0 }; + set => _size = value; + } + + // The base DbParameter.Precision/Scale are no-ops (get => 0; set { }) unless a concrete parameter type + // overrides them - SqlParameter/OdbcParameter/OleDbParameter do, so this must too. Two reasons: + // 1. JetDecimalTypeMapping.ConfigureParameter's `parameter.Value = decimal.Round(dec, parameter.Scale)` + // must read back the scale it just set (else 8.6 rounds to 9 before it ever reaches storage). + // 2. When a mapping sets NO scale (e.g. the `currency` mapping), OleDbParameter/OdbcParameter DERIVE + // precision/scale from the decimal value itself (81.1 -> P=3,S=1; 0.5 -> P=1,S=1; 100.00 -> P=5,S=2), + // and the round then keeps the fractional digits. We mirror that: derive from a decimal Value when the + // facet wasn't set explicitly (nullable backing, so an explicit 0 still wins and truncates). + private byte? _precision; + private byte? _scale; + public override byte Precision + { + get => _precision ?? (Value is decimal d ? DecimalPrecision(d) : (byte)0); + set => _precision = value; + } + public override byte Scale + { + get => _scale ?? (Value is decimal d ? DecimalScale(d) : (byte)0); + set => _scale = value; + } + + // A decimal carries its own scale; precision is the digit count of its unscaled mantissa (trailing zeros + // included, leading integer zero excluded — 0.5 -> 1, 100.00 -> 5), matching OLE DB's derivation. + private static byte DecimalScale(decimal d) => (byte)((decimal.GetBits(d)[3] >> 16) & 0xFF); + private static byte DecimalPrecision(decimal d) + { + int[] bits = decimal.GetBits(d); + string mantissa = new decimal(bits[0], bits[1], bits[2], false, 0) + .ToString(System.Globalization.CultureInfo.InvariantCulture); + return (byte)Math.Max(1, mantissa.Length); + } + + public override void ResetDbType() => _dbType = null; + + // The DbType a value maps to when none was set explicitly — the standard ADO.NET/OLE DB value inference, + // so the parameter looks the same as the other providers'. An unknown/null value falls back to Object. + private static DbType InferDbType(object? value) => value switch + { + null => DbType.Object, + string => DbType.String, + byte[] => DbType.Binary, + bool => DbType.Boolean, + byte => DbType.Byte, + sbyte => DbType.SByte, + short => DbType.Int16, + ushort => DbType.UInt16, + int => DbType.Int32, + uint => DbType.UInt32, + long => DbType.Int64, + ulong => DbType.UInt64, + float => DbType.Single, + double => DbType.Double, + decimal => DbType.Decimal, + DateTime => DbType.DateTime, + DateTimeOffset => DbType.DateTimeOffset, + TimeSpan => DbType.Time, + Guid => DbType.Guid, + char => DbType.StringFixedLength, + _ => DbType.Object, + }; +} diff --git a/src/LibRed/LibRed.Ado/LibRedParameterCollection.cs b/src/LibRed/LibRed.Ado/LibRedParameterCollection.cs new file mode 100644 index 00000000..e1786075 --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRedParameterCollection.cs @@ -0,0 +1,55 @@ +using System.Collections; +using System.Data.Common; + +namespace LibRed.Data; + +/// Parameter collection backed by a simple list. +public sealed class LibRedParameterCollection : DbParameterCollection +{ + private readonly List _items = []; + + public override int Count => _items.Count; + public override object SyncRoot { get; } = new(); + + public override int Add(object value) + { + _items.Add((LibRedParameter)value); + return _items.Count - 1; + } + + public override void AddRange(Array values) + { + foreach (object value in values) Add(value); + } + + public override void Clear() => _items.Clear(); + + public override bool Contains(object value) => _items.Contains((LibRedParameter)value); + public override bool Contains(string value) => IndexOf(value) >= 0; + + public override void CopyTo(Array array, int index) => ((ICollection)_items).CopyTo(array, index); + + public override IEnumerator GetEnumerator() => _items.GetEnumerator(); + + public override int IndexOf(object value) => _items.IndexOf((LibRedParameter)value); + + public override int IndexOf(string parameterName) => + _items.FindIndex(p => string.Equals(p.ParameterName, parameterName, StringComparison.OrdinalIgnoreCase)); + + public override void Insert(int index, object value) => _items.Insert(index, (LibRedParameter)value); + + public override void Remove(object value) => _items.Remove((LibRedParameter)value); + + public override void RemoveAt(int index) => _items.RemoveAt(index); + + public override void RemoveAt(string parameterName) => RemoveAt(IndexOf(parameterName)); + + protected override DbParameter GetParameter(int index) => _items[index]; + + protected override DbParameter GetParameter(string parameterName) => _items[IndexOf(parameterName)]; + + protected override void SetParameter(int index, DbParameter value) => _items[index] = (LibRedParameter)value; + + protected override void SetParameter(string parameterName, DbParameter value) => + _items[IndexOf(parameterName)] = (LibRedParameter)value; +} diff --git a/src/LibRed/LibRed.Ado/LibRedTransaction.cs b/src/LibRed/LibRed.Ado/LibRedTransaction.cs new file mode 100644 index 00000000..9537bb0f --- /dev/null +++ b/src/LibRed/LibRed.Ado/LibRedTransaction.cs @@ -0,0 +1,101 @@ +using System.Data; +using System.Data.Common; +using LibRed.IO; + +namespace LibRed.Data; + +/// +/// A database transaction over LibRed's page-level undo log. makes the writes +/// permanent (they are already on disk; commit just discards the undo log); +/// restores every page the transaction touched and drops any it allocated. An uncommitted +/// transaction that is disposed rolls back — this is what gives EF Core's shared-database tests +/// their per-test isolation. +/// +public sealed class LibRedTransaction : DbTransaction +{ + private LibRedConnection? _connection; + private bool _completed; + + // Named savepoints opened in this transaction (EF names them for nested SaveChanges). Maps the name to the + // engine's savepoint handle. + private readonly Dictionary _savepoints = new(StringComparer.Ordinal); + + internal LibRedTransaction(LibRedConnection connection, IsolationLevel isolationLevel) + { + _connection = connection; + IsolationLevel = isolationLevel; + } + + public override IsolationLevel IsolationLevel { get; } + + protected override DbConnection? DbConnection => _connection; + + /// LibRed supports savepoints (backed by the transaction's savepoint stack), so EF Core uses them + /// to make a nested SaveChanges inside a user transaction individually reversible. + public override bool SupportsSavepoints => true; + + /// Opens a savepoint with the given name — a rollback point within this transaction. + public override void Save(string savepointName) + { + EnsureActive(); + _savepoints[savepointName] = _connection!.CreateSavepoint(); + } + + /// Rolls back to a named savepoint, undoing writes made since it was opened; the transaction and + /// the savepoint stay open. + public override void Rollback(string savepointName) + { + EnsureActive(); + _connection!.RollbackToSavepoint(Lookup(savepointName)); + } + + /// Releases a named savepoint, merging its writes into the enclosing scope. + public override void Release(string savepointName) + { + EnsureActive(); + _connection!.ReleaseSavepoint(Lookup(savepointName)); + _savepoints.Remove(savepointName); + } + + private void EnsureActive() + { + if (_completed) + throw new InvalidOperationException("This transaction has already been committed or rolled back."); + } + + // A DbException (not a plain InvalidOperationException): referencing a released/never-opened savepoint is a + // database-operation error, and callers — EF Core's transaction tests included — expect DbException for it. + private Savepoint Lookup(string name) => + _savepoints.TryGetValue(name, out Savepoint sp) + ? sp + : throw new LibRedException($"No savepoint named '{name}' is open in this transaction.", 0); + + public override void Commit() + { + if (_completed) + throw new InvalidOperationException("This transaction has already been committed or rolled back."); + _connection?.CommitTransaction(this); + _completed = true; + } + + public override void Rollback() + { + if (_completed) + throw new InvalidOperationException("This transaction has already been committed or rolled back."); + _connection?.RollbackTransaction(this); + _completed = true; + } + + protected override void Dispose(bool disposing) + { + if (disposing && !_completed) + { + // Disposed without an explicit Commit → roll back. + _connection?.RollbackTransaction(this); + _completed = true; + } + + _connection = null; + base.Dispose(disposing); + } +} diff --git a/src/LibRed/LibRed.Core/Catalog/Collation.cs b/src/LibRed/LibRed.Core/Catalog/Collation.cs new file mode 100644 index 00000000..6e2b2879 --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/Collation.cs @@ -0,0 +1,68 @@ +namespace LibRed.Catalog; + +/// +/// A text collating order, identified by its Windows locale id (LCID) — the value Jet/ACE stores in a +/// column descriptor's locale bytes (0x0B/0x0C) and, database-wide, in the page-0 sort order. +/// These mirror DAO's CollatingOrderEnum; each name is the LCID Access records. +/// +/// +/// The LCID alone does not pin the on-disk key bytes: "General" (1033) has a legacy order (version 0, +/// Access 2000–2007) and a different default order (version 1, Access 2010+). The version lives in a +/// separate descriptor byte — see . Paradox-ISAM variants that DAO lists share +/// LCIDs with these (e.g. dbSortPDXIntl == 1033) and are omitted; they are link-only and irrelevant here. +/// +public enum CollatingOrder +{ + Undefined = -1, + Neutral = 1024, + Arabic = 1025, + ChineseTraditional = 1028, + Czech = 1029, + NorwegianDanish = 1030, + Greek = 1032, + General = 1033, // English, German, French, Portuguese — the default + Spanish = 1034, + Hebrew = 1037, + Hungarian = 1038, + Icelandic = 1039, + Japanese = 1041, + Korean = 1042, + Dutch = 1043, + Polish = 1045, + Cyrillic = 1049, + SwedishFinnish = 1053, + Thai = 1054, + Turkish = 1055, + Slovenian = 1060, + ChineseSimplified = 2052, +} + +/// +/// A fully-specified text collation: its (LCID) plus the sort-order +/// that selects between weight tables sharing that LCID. Determines the index-key +/// bytes for text/memo columns, and is written into their column descriptors. +/// +/// The collating order (LCID). +/// The sort-order version — the byte at column-descriptor 0x0E (the high byte of +/// a nominally 2-byte version field at 0x0D). Verified vs Access: General Legacy (Access 2000–2007) = +/// 0; the "General" order Access 2010 made default = 1. The low byte at 0x0D is 0 +/// in every file seen and is not modelled — but the field is nominally 2 bytes, so keep an eye on it: if a +/// database ever carries a non-zero 0x0D we are truncating a wider value (cf. the AutoNumber increment +/// at TDEF 0x18, which looked like a 1-byte flag but was a full signed int32). +public readonly record struct Collation(CollatingOrder Order, byte Version) +{ + /// The sort-order version byte for the Access-2010+ "General" order. + public const byte GeneralVersion = 1; + + /// Jet's "General legacy" order — locale 1033, version 0. The order LibRed reads and writes and + /// can encode index keys for. + public static Collation GeneralLegacy => new(CollatingOrder.General, 0); + + /// The Access-2010+ default "General" order — locale 1033, version 1. LibRed reads and + /// distinguishes it, but does not yet encode its (different) index keys — see . + public static Collation General => new(CollatingOrder.General, GeneralVersion); + + /// Whether LibRed can encode index keys for this collation. Only General legacy is implemented; + /// see JetTextCollation and the format spec §10.4. + public bool IsIndexKeyEncodable => this == GeneralLegacy; +} diff --git a/src/LibRed/LibRed.Core/Catalog/ColumnDef.cs b/src/LibRed/LibRed.Core/Catalog/ColumnDef.cs new file mode 100644 index 00000000..d8436614 --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/ColumnDef.cs @@ -0,0 +1,108 @@ +namespace LibRed.Catalog; + +/// +/// Describes a single column of a table: its name, type, physical layout and flags. +/// Decoded from the column descriptors in a . +/// +public sealed class ColumnDef +{ + public required string Name { get; init; } + public required JetDataType Type { get; init; } + + /// Zero-based logical column index (declaration order). + public int Index { get; init; } + + /// Physical offset/ordinal used to locate the value within a row record. + public int ColumnId { get; init; } + + /// Declared length in bytes for fixed-width/text columns. + public int Length { get; init; } + + /// For fixed-length columns, the offset of the value within the row's fixed-data region. + public int FixedOffset { get; init; } + + /// Position of this column among the variable-length columns (in column-id order); -1 if fixed. + public int VariableIndex { get; init; } = -1; + + /// The "variable-table index" stored at descriptor offset 7 (): + /// the count of variable-length columns whose column-id is smaller than this one's. For a variable column this + /// equals ; for a fixed column it is the running count of preceding variable columns + /// (Access stores it on fixed columns too, and its strict row reader relies on it). -1 = unset (falls back to + /// the legacy "0 for fixed" behaviour used by the ADD COLUMN path). + public int VariableTableIndex { get; init; } = -1; + + public bool IsFixedLength { get; init; } + + /// Whether the column accepts NULL. False for a NOT NULL / Required column — read from the + /// Required property in the extended-properties (LvProp) blob, set by the catalog after + /// the descriptors are decoded (like , the flag lives outside the TDEF). + public bool IsNullable { get; internal set; } = true; + + public bool IsAutoNumber { get; init; } + + /// The column's updatable flag bit (0x0F bit 0x02) — set on essentially every column. + /// Modelled so it round-trips explicitly rather than riding through the raw descriptor. + public bool IsUpdatable { get; init; } = true; + + /// An AutoNumber column that generates GUIDs (Replication ID), not sequential Longs — flag bit + /// 0x0F/0x40. Modelled for faithful round-trip; LibRed does not create these but preserves them. + public bool IsGuidAutoNumber { get; init; } + + /// A hyperlink column (a Memo presented as a hyperlink) — flag bit 0x0F/0x80. + public bool IsHyperlink { get; init; } + + /// The column can store compressed Unicode text (§7) — extended-flag bit 0x10/0x01. + public bool SupportsCompressedUnicode { get; init; } + + /// A calculated (computed) column (ACE 14+) — extended-flag bits 0x10/0xC0. LibRed reads and + /// preserves the flag; evaluating a calculated column's expression is separate (see the format spec). + public bool IsCalculated { get; init; } + + /// AutoNumber (COUNTER) seed and increment. The increment is read from the TDEF header (0x18); + /// the seed is the header's last-assigned value (0x14) plus the increment — which equals the original + /// seed on a freshly created table (before any inserts advance the last value). Default 1/1. + public int Seed { get; internal set; } = 1; + public int Increment { get; internal set; } = 1; + + /// The column's DefaultValue property (an expression's source text, e.g. "0" + /// or "'hi'"), read from the table's extended-properties (LvProp) blob; null if none. + /// Set by the catalog after the descriptors are decoded (the property lives outside the TDEF). + public string? DefaultValue { get; internal set; } + + /// The column's ValidationRule/ValidationText designer properties, read from the + /// table's extended-properties (LvProp) blob; null if none. Surfaced through + /// INFORMATION_SCHEMA.COLUMNS (VALIDATION_RULE/VALIDATION_TEXT), matching EFCore.Jet's + /// AdoxSchema.GetColumns which reads the equivalent Jet OLEDB:Column Validation Rule/Text. + public string? ValidationRule { get; internal set; } + + /// + public string? ValidationText { get; internal set; } + + /// A "Random" AutoNumber — an AutoNumber column whose is the built-in + /// GenUniqueID() expression (Access's "New Values = Random"). Such a column is assigned a random + /// Int32 on insert instead of the sequential seed/increment counter, and its TDEF high-water is left + /// unadvanced. Verified byte-identical to a UI-authored Random AutoNumber (see the format spec). + public bool IsRandomAutoNumber => IsAutoNumber && DefaultValue is not null + && DefaultValue.Trim().Equals("GenUniqueID()", StringComparison.OrdinalIgnoreCase); + + /// Precision/scale for columns. + public byte Precision { get; init; } + public byte Scale { get; init; } + + /// The text collation (LCID + sort-order version) for a non-numeric column — read from the + /// descriptor's locale bytes (0x0B/0x0C) and version byte (0x0D). Numeric columns reuse + /// those bytes for precision/scale and carry no collation. Defaults to General legacy, which is what + /// every file LibRed currently handles uses, and the only order whose index keys it can encode. + public Collation Collation { get; init; } = Collation.GeneralLegacy; + + /// The column's original on-disk descriptor bytes (the 25-byte Jet4 record), captured verbatim on + /// read. Every documented field is now modelled explicitly, so this is carried only to re-emit the + /// genuinely reserved/unknown bytes on a rewrite — the reserved words at 0x03 and 0x11, + /// and the undocumented bits of the two flag bytes (0x0F/0x10) — instead of stamping zero over + /// them (the faithful round-trip rule). Null for a freshly-built (never-read) column. + public byte[]? RawDescriptor { get; init; } + + /// Undocumented flag bits (byte 0x0F) to force-set — the system-catalog column marker (0x10) and + /// security-identifier marker (0x20) Access sets on MSys* columns. 0 for ordinary columns. + public byte SystemFlags { get; init; } +} diff --git a/src/LibRed/LibRed.Core/Catalog/ForeignKey.cs b/src/LibRed/LibRed.Core/Catalog/ForeignKey.cs new file mode 100644 index 00000000..07b14b77 --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/ForeignKey.cs @@ -0,0 +1,32 @@ +namespace LibRed.Catalog; + +/// +/// A relationship (foreign key) between two tables, as recorded in MSysRelationships. +/// +/// The relationship name. +/// The referencing (child / foreign-key) table. +/// The referenced (parent) table. +/// The column pairs (child column → referenced column), in key order. +/// Whether referential integrity is enforced. +/// Whether the relationship is inherited from a linked table. LibRed neither reads +/// nor writes this from disk (its grbit bit is unverified — no linked-table fixture to probe against), and it +/// never authors inherited relationships, so it is always false today; the field exists on the model so +/// callers have a place for it once linked tables are supported. +/// Whether updates to the parent key cascade. +/// Whether deletes of the parent row cascade. +/// Whether deleting the parent sets the child's FK columns to NULL (Jet's +/// ON DELETE SET NULL, grbit 0x2000; mutually exclusive with cascade delete, and Jet has no +/// ON UPDATE SET NULL). +public sealed record ForeignKey( + string Name, + string Table, + string ReferencedTable, + IReadOnlyList<(string Column, string ReferencedColumn)> Columns, + bool IsEnforced, + bool CascadeUpdate, + bool CascadeDelete, + bool IsInherited = false, + bool DeleteSetNull = false, + /// ON UPDATE SET NULL — pathway only; not read back yet (its storage is unverified — the ACE + /// OLE DB provider rejects the DDL, so the grbit/info-block bytes couldn't be probed). + bool UpdateSetNull = false); diff --git a/src/LibRed/LibRed.Core/Catalog/IndexDef.cs b/src/LibRed/LibRed.Core/Catalog/IndexDef.cs new file mode 100644 index 00000000..078df5bb --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/IndexDef.cs @@ -0,0 +1,39 @@ +namespace LibRed.Catalog; + +/// Describes an index: its columns (with sort direction), uniqueness and root page. +public sealed record IndexDef +{ + public required string Name { get; init; } + + /// Indexed columns in key order; true = ascending. + public IReadOnlyList<(ColumnDef Column, bool Ascending)> Columns { get; init; } = []; + + public bool IsUnique { get; init; } + public bool IsPrimaryKey { get; init; } + + /// WITH IGNORE NULL: rows with a null in any indexed column are excluded from the index + /// (index flag 0x02). Such rows are not added to the B-tree on insert. + public bool IgnoreNulls { get; init; } + + /// WITH DISALLOW NULL (Required): the index rejects a null key — the indexed column(s) are + /// required (index flag 0x08). Surfaced by scaffolding as the index DISALLOW NULL filter. + public bool Required { get; init; } + + /// + /// The index's unique-entry count from the TDEF statistics block. This is a cumulative + /// count of distinct entries ever added that Access increments but never decrements, + /// so it equals the current distinct-value count (cardinality) only when no rows have been + /// deleted. (Same semantics as Jackcess's uniqueEntryCount.) + /// + public int UniqueEntryCount { get; init; } + + /// Page number of the index B-tree root. Updated in place when the root splits (grows a level). + public int RootPage { get; internal set; } + + /// + /// This index's position among the table's real indexes — the ordinal of its 12-byte statistics + /// block (at TdefRealIndexBlockOffset + ordinal × RealIndexEntrySize) and its index-data + /// block. Used to locate the stats block when maintaining the unique-entry count on insert. + /// + public int RealIndexOrdinal { get; init; } +} diff --git a/src/LibRed/LibRed.Core/Catalog/JetCatalog.cs b/src/LibRed/LibRed.Core/Catalog/JetCatalog.cs new file mode 100644 index 00000000..6e50f8ea --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/JetCatalog.cs @@ -0,0 +1,403 @@ +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; +using LibRed.Storage; + +namespace LibRed.Catalog; + +/// +/// Reads the system catalog (MSysObjects) to enumerate the tables in a database. +/// +/// +/// Bootstrap: MSysObjects' own TDEF is at a fixed page (), +/// so we build a for it from that page and read its rows like any +/// other table. For a table object, the row's Id is its TDEF page number. +/// +public sealed class JetCatalog(PageChannel channel, int catalogPage = 2) +{ + // MSysObjects TDEF page — the catalog root. Normally read from the page-0 bootstrap pointer (0x20) + // and passed in by JetDatabase; defaults to Access's canonical page 2 for direct construction. + private readonly int _catalogPage = catalogPage; + + /// MSysObjects.Type value for a table object. + private const short ObjectTypeTable = 1; + + /// MSysObjects.Flags bits marking a system object (`0x80000000` system, `0x00000002` + /// system attribute). + private const uint SystemObjectFlags = 0x80000002; + + /// MSysObjects.Flags bit marking a hidden object (`0x08`, observed on Access's + /// nav-pane tables and on EFCore.Jet's `#Dual` helper). Access excludes hidden objects from its + /// user-table list, so we treat them as non-user too. + private const uint HiddenObjectFlags = 0x00000008; + + private readonly PageChannel _channel = channel; + private List? _tables; + private List? _relationships; + private Dictionary? _views; + private Dictionary? _actionQueries; + private Dictionary>? _queryParameters; + + /// All tables in the database (user and system). + public IReadOnlyList Tables => _tables ??= LoadTables(); + + /// Views (stored simple-SELECT queries) as name → reconstructed SELECT SQL, rebuilt from + /// each view's MSysQueries rows. Complex/system queries that don't reconstruct are omitted. + public IReadOnlyDictionary Views { get { EnsureStoredQueries(); return _views!; } } + + /// Stored action queries (a CREATE PROCEDURE body that is not a SELECT) as name → readback. + /// A supported query (CREATE/DROP TABLE, INSERT … VALUES) carries executable SQL; an unsupported one + /// (INSERT … SELECT, etc.) carries only a reason and throws when LibRed is asked to execute it. + public IReadOnlyDictionary ActionQueries { get { EnsureStoredQueries(); return _actionQueries!; } } + + /// A stored query's declared parameter names in declaration order (its Attribute=2 rows). + /// Used to bind an EXECUTE proc a, b's positional arguments to the procedure's named parameters. + /// Empty for a query with no parameters. + public IReadOnlyDictionary> QueryParameters { get { EnsureStoredQueries(); return _queryParameters!; } } + + /// Drops the cached catalog so a freshly created table is picked up on next read. + public void Invalidate() + { + _tables = null; + _relationships = null; + _views = null; + _actionQueries = null; + _queryParameters = null; + } + + /// All relationships (foreign keys) defined in the database. + public IReadOnlyList Relationships => _relationships ??= LoadRelationships(); + + /// Relationships for which is the referencing (child) table. + public IEnumerable ForeignKeysOf(string table) => + Relationships.Where(r => string.Equals(r.Table, table, StringComparison.OrdinalIgnoreCase)); + + /// User (non-system) tables only. + public IEnumerable UserTables => Tables.Where(t => !t.IsSystem); + + public TableDef? FindTable(string name) => + Tables.FirstOrDefault(t => string.Equals(t.Name, name, StringComparison.OrdinalIgnoreCase)); + + private List LoadTables() + { + // Build a TableDef for MSysObjects from its own (fixed) TDEF page, then scan its rows. + TableDef catalogDef = ReadTableDefinition(_catalogPage, "MSysObjects", isSystem: true); + var columns = catalogDef.Columns; + + int idIndex = ColumnIndex(columns, "Id"); + int typeIndex = ColumnIndex(columns, "Type"); + int nameIndex = ColumnIndex(columns, "Name"); + int flagsIndex = ColumnIndex(columns, "Flags"); + int lvpropIndex = ColumnIndex(columns, "LvProp"); + + var catalog = new Table(_channel, catalogDef); + var tables = new List(); + + foreach (object?[] row in catalog.Rows()) + { + if (row[typeIndex] is not short type || type != ObjectTypeTable) continue; + + int definitionPage = (int)row[idIndex]!; + string name = (string)row[nameIndex]!; + uint flags = unchecked((uint)(int)row[flagsIndex]!); + // A table is "system" (excluded from the user-table list, as Access's own schema view + // does) if it is flagged system or hidden, or is named as engine/temporary infrastructure: + // MSys*, a leading '~' (temp), or a leading '#' (e.g. EFCore.Jet's hidden #Dual helper). + bool isSystem = (flags & (SystemObjectFlags | HiddenObjectFlags)) != 0 + || name.StartsWith("MSys", StringComparison.Ordinal) + || name.StartsWith('~') + || name.StartsWith('#'); + + TableDef definition = ReadTableDefinition(definitionPage, name, isSystem); + // Attach column DefaultValue and table CHECK properties from the extended-properties (LvProp) blob. + if (row[lvpropIndex] is byte[] { Length: > 0 } blob) + { + var defaults = PropertyBlob.ReadColumnDefaults(blob); + var required = PropertyBlob.ReadRequiredColumns(blob); + foreach (ColumnDef column in definition.Columns) + { + if (defaults.TryGetValue(column.Name, out string? value)) + column.DefaultValue = value; + if (required.Contains(column.Name)) + column.IsNullable = false; + (column.ValidationRule, column.ValidationText) = PropertyBlob.ReadValidation(blob, column.Name); + } + + var checks = PropertyBlob.ReadCheckConstraints(blob); + if (checks.Count > 0) definition.CheckConstraints = checks; + + (definition.ValidationRule, definition.ValidationText) = PropertyBlob.ReadValidation(blob, ""); + } + tables.Add(definition); + } + + return tables; + } + + private List LoadRelationships() + { + TableDef? def = FindTable("MSysRelationships"); + if (def is null) return []; + + var c = def.Columns; + int nameIdx = ColumnIndex(c, "szRelationship"); + int childTableIdx = ColumnIndex(c, "szObject"); + int childColumnIdx = ColumnIndex(c, "szColumn"); + int parentTableIdx = ColumnIndex(c, "szReferencedObject"); + int parentColumnIdx = ColumnIndex(c, "szReferencedColumn"); + int orderIdx = ColumnIndex(c, "icolumn"); + int flagsIdx = ColumnIndex(c, "grbit"); + + // One row per column; group by relationship name and order columns by icolumn. + var groups = new Dictionary Columns)>(); + + foreach (object?[] row in new Table(_channel, def).Rows()) + { + string name = (string)row[nameIdx]!; + if (!groups.TryGetValue(name, out var g)) + { + g = ((string)row[childTableIdx]!, (string)row[parentTableIdx]!, + (int)row[flagsIdx]!, []); + groups[name] = g; + } + g.Columns.Add(((int)row[orderIdx]!, (string)row[childColumnIdx]!, (string)row[parentColumnIdx]!)); + } + + return groups + .Select(kvp => new ForeignKey( + kvp.Key, + kvp.Value.Child, + kvp.Value.Parent, + kvp.Value.Columns.OrderBy(x => x.Order).Select(x => (x.Column, x.ReferencedColumn)).ToList(), + IsEnforced: (kvp.Value.Flags & RelationshipFlags.DontEnforce) == 0, + CascadeUpdate: (kvp.Value.Flags & RelationshipFlags.UpdateCascade) != 0, + CascadeDelete: (kvp.Value.Flags & RelationshipFlags.DeleteCascade) != 0, + DeleteSetNull: (kvp.Value.Flags & RelationshipFlags.DeleteSetNull) != 0)) + .ToList(); + } + + private void EnsureStoredQueries() + { + if (_views is not null) return; + _views = new Dictionary(StringComparer.OrdinalIgnoreCase); + _actionQueries = new Dictionary(StringComparer.OrdinalIgnoreCase); + _queryParameters = new Dictionary>(StringComparer.OrdinalIgnoreCase); + + TableDef? mqDef = FindTable("MSysQueries"); + TableDef? objDef = FindTable("MSysObjects"); + if (mqDef is null || objDef is null) return; + + // Group MSysQueries rows by ObjectId. + var mq = mqDef.Columns; + int oid = ColumnIndex(mq, "ObjectId"), attr = ColumnIndex(mq, "Attribute"), expr = ColumnIndex(mq, "Expression"), + flag = ColumnIndex(mq, "Flag"), n1 = ColumnIndex(mq, "Name1"), n2 = ColumnIndex(mq, "Name2"), order = ColumnIndex(mq, "Order"); + var byObject = new Dictionary>(); + foreach (object?[] row in new Table(_channel, mqDef).Rows()) + if (row[oid] is int id) + (byObject.TryGetValue(id, out var list) ? list : byObject[id] = []).Add(row); + + // For each query object, reconstruct it: an action query (has an Attribute=1 row) → ActionQueries, + // otherwise a SELECT view → Views. + var oc = objDef.Columns; + int objId = ColumnIndex(oc, "Id"), objType = ColumnIndex(oc, "Type"), objName = ColumnIndex(oc, "Name"); + foreach (object?[] row in new Table(_channel, objDef).Rows()) + { + if (row[objType] is not short type || type != StoredQueryFormat.ObjectTypeQuery) continue; + if (row[objId] is not int id || row[objName] is not string name) continue; + if (!byObject.TryGetValue(id, out var rows)) continue; + + if (rows.Any(r => r[attr] is byte b && b == StoredQueryFormat.AttrAction)) + _actionQueries[name] = ReconstructAction(rows, attr, expr, flag, n1, n2, order); + else if (Reconstruct(rows, attr, expr, flag, n1, n2, order) is { } sql) + _views[name] = sql; + + // The declared parameters (Attribute=2 rows), in declaration order, for EXECUTE positional binding. + var paramNames = rows.Where(r => r[attr] is byte b && b == StoredQueryFormat.AttrParameter) + .OrderBy(r => r[order] is byte[] ob && ob.Length >= 4 + ? System.Buffers.Binary.BinaryPrimitives.ReadInt32BigEndian(ob) : 0) + .Select(r => r[n1] as string).Where(s => s is not null).Select(s => s!).ToList(); + if (paramNames.Count > 0) _queryParameters[name] = paramNames; + } + } + + /// Rebuilds a stored action query's executable SQL from its MSysQueries rows. Handles the kinds + /// LibRed can execute (CREATE/DROP TABLE, INSERT … VALUES); other kinds return an unsupported reason. + private static StoredActionQuery ReconstructAction(List rows, int attr, int expr, int flag, int n1, int n2, int order) + { + static int Ord(object? v) => v is byte[] b && b.Length >= 4 ? System.Buffers.Binary.BinaryPrimitives.ReadInt32BigEndian(b) : 0; + object?[]? action = rows.FirstOrDefault(r => r[attr] is byte b && b == StoredQueryFormat.AttrAction); + if (action is null) return new StoredActionQuery(null, "The stored action query has no action row."); + + short kind = action[flag] is short f ? f : (short)0; + if (kind == StoredQueryFormat.ActionDdl) + // The whole DDL statement is in Expression (Access stored it with a leading space). + return new StoredActionQuery((action[expr] as string)?.TrimStart(), null); + + if (kind == StoredQueryFormat.ActionAppend) + { + // INSERT … VALUES: only literal-value columns (Flag 0x8000) and no FROM source. An INSERT … + // SELECT (table rows present / Flag-0 columns) is stored but LibRed does not execute it yet. + if (rows.Any(r => r[attr] is byte b && b == StoredQueryFormat.AttrTable)) + return new StoredActionQuery(null, "INSERT … SELECT stored queries are not executed by LibRed yet."); + var cols = rows.Where(r => r[attr] is byte b && b == StoredQueryFormat.AttrColumn).OrderBy(r => Ord(r[order])).ToList(); + if (cols.Count == 0 || cols.Any(r => r[flag] is short cf && cf != StoredQueryFormat.AppendValueFlag)) + return new StoredActionQuery(null, "This append query shape is not executed by LibRed yet."); + + string target = action[n1] as string ?? ""; + string columns = string.Join(", ", cols.Select(r => $"[{r[n2] as string}]")); + string values = string.Join(", ", cols.Select(r => r[expr] as string ?? "NULL")); + return new StoredActionQuery($"INSERT INTO [{target}] ({columns}) VALUES ({values})", null); + } + + return new StoredActionQuery(null, "This stored action query kind is not supported by LibRed yet."); + } + + /// Rebuilds a simple-SELECT view's SQL from its MSysQueries rows; null if it uses an + /// attribute we don't reconstruct (a non-simple query). + private static string? Reconstruct(List rows, int attr, int expr, int flag, int n1, int n2, int order) + { + static int Ord(object? v) => v is byte[] b && b.Length >= 4 ? System.Buffers.Binary.BinaryPrimitives.ReadInt32BigEndian(b) : 0; + IEnumerable OfAttr(byte a) => rows.Where(r => r[attr] is byte b && b == a).OrderBy(r => Ord(r[order])); + + // Bail out if the query uses attributes beyond a simple SELECT (e.g. GROUP BY/HAVING/ORDER BY). + var known = new byte[] { StoredQueryFormat.AttrType, StoredQueryFormat.AttrParameter, StoredQueryFormat.AttrFlag, StoredQueryFormat.AttrTable, StoredQueryFormat.AttrColumn, StoredQueryFormat.AttrJoin, StoredQueryFormat.AttrWhere, StoredQueryFormat.AttrGroupBy, StoredQueryFormat.AttrOrderBy, 0xFF }; + if (rows.Any(r => r[attr] is byte b && !known.Contains(b))) return null; + + // Declared parameters (a stored procedure): each Attribute=2 row is Name1=name, Flag=Jet type code. + // Emitted as a leading PARAMETERS clause so the parser lowers body references to them as parameters. + var parameters = OfAttr(StoredQueryFormat.AttrParameter) + .Select(r => (Name: r[n1] as string, Code: r[flag] is short f ? (byte)f : (byte)0)) + .Where(p => p.Name is not null) + .Select(p => $"[{p.Name}] {AccessTypeName(p.Code)}") + .ToList(); + + // A column row's Name1 (when present) is its output alias. + var columns = OfAttr(StoredQueryFormat.AttrColumn) + .Select(r => (r[n1] as string) is { } a ? $"{r[expr] as string} AS [{a}]" : r[expr] as string ?? "").ToList(); + // A derived-table source has its subquery SQL in Expression and no Name1; a named table uses Name1. + var tables = OfAttr(StoredQueryFormat.AttrTable) + .Select(r => (Table: r[n1] as string ?? "", Alias: r[n2] as string, Sub: r[n1] is null ? r[expr] as string : null)).ToList(); + if (columns.Count == 0 || tables.Count == 0) return null; + + bool distinct = OfAttr(StoredQueryFormat.AttrFlag).Any(r => r[flag] is short f && (f & StoredQueryFormat.FlagDistinct) != 0); + // TOP n: an AttrFlag row with the TOP bit; the count is in Name1. + string? top = OfAttr(StoredQueryFormat.AttrFlag) + .Where(r => r[flag] is short f && (f & StoredQueryFormat.FlagTop) != 0) + .Select(r => r[n1] as string).FirstOrDefault(); + // ORDER BY: one AttrOrderBy row per key (Expression = column, Name1 = "d" for descending). + var orderBy = OfAttr(StoredQueryFormat.AttrOrderBy) + .Select(r => (r[expr] as string ?? "") + (string.Equals(r[n1] as string, "d", StringComparison.OrdinalIgnoreCase) ? " DESC" : "")) + .Where(s => s.Length > 0).ToList(); + var joins = OfAttr(StoredQueryFormat.AttrJoin) + .Select(r => (Cond: r[expr] as string ?? "", Kind: r[flag] is short f ? f : (short)1, + Left: r[n1] as string ?? "", Right: r[n2] as string ?? "")).ToList(); + string? where = OfAttr(StoredQueryFormat.AttrWhere).Select(r => r[expr] as string).FirstOrDefault(); + var groupBy = OfAttr(StoredQueryFormat.AttrGroupBy).Select(r => r[expr] as string ?? "").ToList(); + + static string Ident(string s) => $"[{s}]"; + static string Render((string Table, string? Alias, string? Sub) t) => + t.Sub is { } sub ? $"({sub}) AS {Ident(t.Alias!)}" + : t.Alias is not null && !string.Equals(t.Alias, t.Table, StringComparison.OrdinalIgnoreCase) + ? $"{Ident(t.Table)} AS {Ident(t.Alias)}" : Ident(t.Table); + string Key((string Table, string? Alias, string? Sub) t) => t.Alias ?? t.Table; + + // Build a JOIN chain by a spanning walk: only add a join once one of its two tables is already in + // scope, bringing the other into scope (so a flat set of joins from a nested source rebuilds a valid + // left-deep tree). If the new table is the condition's *left* side, a LEFT/RIGHT join flips. + var from = new System.Text.StringBuilder(Render(tables[0])); + var used = new HashSet(StringComparer.OrdinalIgnoreCase) { Key(tables[0]) }; + var pending = joins.ToList(); + for (bool progress = true; progress;) + { + progress = false; + for (int i = 0; i < pending.Count; i++) + { + var j = pending[i]; + bool leftIn = used.Contains(j.Left), rightIn = used.Contains(j.Right); + if (leftIn == rightIn) continue; // both already joined (extra condition) or neither reachable yet + string newKey = leftIn ? j.Right : j.Left; + int ti = tables.FindIndex(t => string.Equals(Key(t), newKey, StringComparison.OrdinalIgnoreCase)); + if (ti < 0) continue; + + short kind = !leftIn && j.Kind is 2 or 3 ? (short)(j.Kind == 2 ? 3 : 2) : j.Kind; // flip on reversed order + string kw = kind switch { 2 => "LEFT", 3 => "RIGHT", _ => "INNER" }; + from.Append($" {kw} JOIN {Render(tables[ti])} ON {j.Cond}"); + used.Add(newKey); + pending.RemoveAt(i); + progress = true; + break; + } + } + // Any tables the joins didn't reach are comma (cross) joins. + foreach (var t in tables.Where(t => !used.Contains(Key(t)))) + from.Append($", {Render(t)}"); + + // Joins whose two tables were both already in scope become extra WHERE conditions (a cyclic graph). + IEnumerable extra = pending.Select(j => j.Cond); + string? whereClause = where is null ? (extra.Any() ? string.Join(" AND ", extra) : null) + : string.Join(" AND ", extra.Prepend($"({where})")); + + var sql = new System.Text.StringBuilder(); + if (parameters.Count > 0) sql.Append("PARAMETERS ").Append(string.Join(", ", parameters)).Append("; "); + sql.Append("SELECT "); + if (distinct) sql.Append("DISTINCT "); + if (top is not null) sql.Append("TOP ").Append(top).Append(' '); + sql.Append(string.Join(", ", columns)).Append(" FROM ").Append(from); + if (whereClause is not null) sql.Append(" WHERE ").Append(whereClause); + if (groupBy.Count > 0) sql.Append(" GROUP BY ").Append(string.Join(", ", groupBy)); + if (orderBy.Count > 0) sql.Append(" ORDER BY ").Append(string.Join(", ", orderBy)); + return sql.ToString(); + } + + /// The Access SQL type name for a stored parameter's Jet type code (inverse of the CREATE TABLE + /// type mapper), used to render a read-back PARAMETERS clause. + private static string AccessTypeName(byte code) => (JetDataType)code switch + { + JetDataType.Boolean => "YESNO", + JetDataType.Byte => "BYTE", + JetDataType.Int16 => "SHORT", + JetDataType.Int32 => "LONG", + JetDataType.Int64 => "BIGINT", + JetDataType.Single => "SINGLE", + JetDataType.Double => "DOUBLE", + JetDataType.Currency => "CURRENCY", + JetDataType.DateTime => "DATETIME", + JetDataType.Text => "TEXT", + JetDataType.Memo => "MEMO", + JetDataType.Guid => "GUID", + JetDataType.Binary => "BINARY", + JetDataType.FixedPoint => "DECIMAL", + JetDataType.Ole => "OLEOBJECT", + _ => "TEXT", + }; + + /// Builds a straight from a TDEF page, bypassing the catalog — used + /// during database creation to seed the system tables before they are self-registered. + internal TableDef ReadTableDefinitionAt(int definitionPage, string name, bool isSystem) => + ReadTableDefinition(definitionPage, name, isSystem); + + private TableDef ReadTableDefinition(int definitionPage, string name, bool isSystem) + { + var tdef = new TableDefinitionPage(); + tdef.Read(_channel, definitionPage); + + return new TableDef + { + Name = name, + DefinitionPage = definitionPage, + Columns = tdef.Columns, + Indexes = tdef.Indexes, + ComplexAutoNumber = tdef.ComplexAutoNumber, + IsSystem = isSystem, + }; + } + + private static int ColumnIndex(IReadOnlyList columns, string name) + { + for (int i = 0; i < columns.Count; i++) + if (string.Equals(columns[i].Name, name, StringComparison.OrdinalIgnoreCase)) + return columns[i].Index; + throw new InvalidOperationException($"MSysObjects is missing the '{name}' column."); + } +} diff --git a/src/LibRed/LibRed.Core/Catalog/JetDataType.cs b/src/LibRed/LibRed.Core/Catalog/JetDataType.cs new file mode 100644 index 00000000..05cebc20 --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/JetDataType.cs @@ -0,0 +1,25 @@ +namespace LibRed.Catalog; + +/// +/// The column data types supported by Jet/ACE, with their on-disk type codes. +/// +public enum JetDataType : byte +{ + Boolean = 0x01, + Byte = 0x02, + Int16 = 0x03, + Int32 = 0x04, + Currency = 0x05, + Single = 0x06, + Double = 0x07, + DateTime = 0x08, + Binary = 0x09, + Text = 0x0A, + Ole = 0x0B, + Memo = 0x0C, + Guid = 0x0F, + FixedPoint = 0x10, // NUMERIC / DECIMAL + Complex = 0x12, // ACE complex/multi-value columns + Int64 = 0x13, // ACE 16 (Access 2016, version byte 0x05): BIGINT (Large Number) + DateTimeExtended = 0x14, // ACE 17 (Access 2019+, version byte 0x06): DATETIME2 (Date/Time Extended) +} diff --git a/src/LibRed/LibRed.Core/Catalog/JetName.cs b/src/LibRed/LibRed.Core/Catalog/JetName.cs new file mode 100644 index 00000000..50709da8 --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/JetName.cs @@ -0,0 +1,45 @@ +namespace LibRed.Catalog; + +/// +/// Validates user-supplied object names (table, column, index, constraint) against Jet/ACE's naming rules. +/// LibRed writes the file format directly, bypassing ACE's DDL parser, so without this it can emit names ACE +/// can't use — both verified against ACE (OLE DB) 2026-07-12: +/// +/// A name longer than makes ACE reject the WHOLE file — a column name of 65+ is +/// "Unrecognized database format"; a table name of 65+ is "Unspecified error". Not just the object — the DB. +/// The characters . ! ` [ ] make the name unreferenceable in SQL (both bracket- and backtick-quoted +/// SELECT fail on ACE), matching Access's documented forbidden-character rule. ACE stores/round-trips +/// every other tested special char (quotes, #, %, &, spaces, tab, unicode), so those are allowed. +/// +/// Only call this on names the caller supplied — NOT on LibRed's internally-generated hidden names (e.g. the +/// .rN incoming-relationship index names, which legitimately start with a period). +/// +public static class JetName +{ + /// Jet/ACE object-name length cap. Exceeding it corrupts the file from ACE's view. + public const int MaxLength = 64; + + // Verified to break SQL referencing on ACE (period, exclamation, grave accent, both brackets — Access's + // documented set). `]` is the one that truly breaks bracket-quoting; the rest and `[` are included to match + // Access and because a stray bracket is never intentional. + private static readonly char[] Forbidden = ['.', '!', '`', '[', ']']; + + /// Throws if is empty, too long, or contains + /// a character ACE forbids in an object name. names the object type for the message. + public static void Validate(string name, string kind = "name") + { + if (string.IsNullOrEmpty(name)) + throw new ArgumentException($"A {kind} cannot be empty.", nameof(name)); + + if (name.Length > MaxLength) + throw new ArgumentException( + $"The {kind} '{name}' is {name.Length} characters long; Jet/ACE limits object names to {MaxLength} " + + "characters (a longer name makes the database unreadable by Access).", nameof(name)); + + int i = name.IndexOfAny(Forbidden); + if (i >= 0) + throw new ArgumentException( + $"The {kind} '{name}' contains '{name[i]}', which Jet/ACE does not allow in object names " + + "(forbidden characters: . ! ` [ ]).", nameof(name)); + } +} diff --git a/src/LibRed/LibRed.Core/Catalog/PropertyBlob.cs b/src/LibRed/LibRed.Core/Catalog/PropertyBlob.cs new file mode 100644 index 00000000..fbc12112 --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/PropertyBlob.cs @@ -0,0 +1,475 @@ +using System.Buffers.Binary; +using System.Text; + +namespace LibRed.Catalog; + +/// +/// Reads and writes the Jet/ACE per-object extended-properties blob (the LvProp value on an +/// object's MSysObjects row). The blob holds column-level properties such as DefaultValue. +/// +/// +/// Layout (verified against an ACE-created table, §11): a 4-byte signature (MR2\0 for ACE, +/// KKD\0 for older MDB) followed by blocks. Each block is [int length][short type][body], +/// the length covering the whole block. Type 0x80 is the property-name pool +/// ([short len][UTF-16 name] repeated); other blocks are a per-owner value map: +/// [short ownerRecLen][short 0][short nameLen][owner name] then property entries +/// [short entryLen][byte DDL flag][byte dataType][short nameIndex][short valueLen][UTF-16 value]. +/// +public static class PropertyBlob +{ + private static readonly byte[] SignatureAce = "MR2\0"u8.ToArray(); + private static readonly byte[] SignatureMdb = "KKD\0"u8.ToArray(); + private const ushort NameListBlock = 0x0080; + private const ushort TableBlock = 0x0000; // value block owned by the table (empty owner name) + private const ushort ColumnBlock = 0x0001; // value block owned by a column + private const byte DdlFlag = 0x01; + public const string DefaultValueProperty = "DefaultValue"; + public const string CheckConstraintsProperty = "CheckConstraints"; + public const string RequiredProperty = "Required"; + public const string ValidationRuleProperty = "ValidationRule"; + public const string ValidationTextProperty = "ValidationText"; + + /// A single property: the owning column (or "" for the table), the property name, its value + /// (text; for a boolean, "1"/"0"), and its stored type. The type is an ordinary + /// code — the same byte used by column descriptors and MSysQueries — so Access + /// stores DefaultValue/CheckConstraints as and Required + /// as . + /// holds the exact stored value bytes when the property was + /// from a blob; emits it verbatim, so a property LibRed does not model (a numeric + /// DecimalPlaces, a designer ValidationRule/Format, …) round-trips byte-for-byte even + /// though its string is only a best-effort UTF-16 decode. It is null for a + /// property LibRed constructs, which is then encoded from /. + /// preserves the entry's DDL-property flag. DDL properties are protected as + /// part of the object's definition and some are only recognised correctly by Access when flagged. It + /// defaults to because the properties LibRed currently creates are schema + /// properties such as DefaultValue, Required, and CheckConstraints. + public readonly record struct Property( + string Owner, string Name, string Value, JetDataType Type = JetDataType.Memo, byte[]? RawValue = null) + { + /// Whether this entry is a DDL/property-definition property. + public bool IsDdl { get; init; } = true; + } + + /// A boolean property (e.g. Required), stored as a single 0/1 byte. + public static Property Bool(string owner, string name, bool value) => + new(owner, name, value ? "1" : "0", JetDataType.Boolean); + + /// Builds the blob for a set of properties, grouped by owner in the given order — matching + /// what ACE writes (verified byte-for-byte for column DefaultValues). + public static byte[] Write(IReadOnlyList properties) + { + ValidateForWrite(properties); + var names = properties.Select(p => p.Name).Distinct().ToList(); + var nameIndex = names.Select((n, i) => (n, i)).ToDictionary(x => x.n, x => x.i); + + var blob = new List(SignatureAce); + + var namesBody = new List(); + foreach (string name in names) AppendString(namesBody, name); + AppendBlock(blob, NameListBlock, namesBody); + + foreach (var group in GroupByOwnerPreservingOrder(properties)) + AppendOwnerBlock(blob, group.Owner, group.Properties, nameIndex); + + return [.. blob]; + } + + /// + /// Adds a column's (or the table's) property block to an existing blob — the reverse of + /// , used by ALTER TABLE ADD COLUMN with NOT NULL / DEFAULT. Extends the name + /// pool with any new property names (appended, so existing name indexes stay valid), keeps every existing + /// block verbatim, and appends the new owner block. If the blob is empty it builds a fresh one. + /// + public static byte[] AddColumnProperties(ReadOnlySpan blob, string owner, IReadOnlyList newProps) + { + if (newProps.Count == 0) return blob.ToArray(); + if (blob.Length == 0) return Write(newProps); + + ParsedBlob parsed = Parse(blob); + var names = parsed.Names.ToList(); + var otherBlocks = new List(); + foreach (ParsedBlock block in parsed.Blocks) + if (block.Type != NameListBlock) otherBlocks.Add(block.Raw); + + var nameIndex = new Dictionary(); + for (int i = 0; i < names.Count; i++) nameIndex[names[i]] = i; + foreach (Property p in newProps) + if (!nameIndex.ContainsKey(p.Name)) { nameIndex[p.Name] = names.Count; names.Add(p.Name); } + + ValidateNames(names); + ValidateOwnerProperties(owner, newProps, nameIndex); + + var result = new List(SignatureAce); + var namesBody = new List(); + foreach (string n in names) AppendString(namesBody, n); + AppendBlock(result, NameListBlock, namesBody); + foreach (byte[] b in otherBlocks) result.AddRange(b); + AppendOwnerBlock(result, owner, newProps, nameIndex); + return [.. result]; + } + + /// Appends one owner's value block: the owner record then a property entry per property. + private static void AppendOwnerBlock(List blob, string owner, IEnumerable props, IReadOnlyDictionary nameIndex) + { + Property[] propertyArray = props.ToArray(); + ValidateOwnerProperties(owner, propertyArray, nameIndex); + var body = new List(); + var ownerRec = new List { 0, 0, 0, 0 }; // [recLen placeholder][0x0000] + AppendString(ownerRec, owner); + BinaryPrimitives.WriteUInt16LittleEndian(System.Runtime.InteropServices.CollectionsMarshal.AsSpan(ownerRec), (ushort)ownerRec.Count); + body.AddRange(ownerRec); + + foreach (Property p in propertyArray) + { + // A property Read from a blob carries its exact stored bytes (RawValue) — emit them verbatim so + // anything LibRed does not model round-trips byte-for-byte. A LibRed-constructed property has no + // RawValue and is encoded from Value/Type (Boolean = one 0/1 byte, else UTF-16). + byte[] value = PropertyValue(p); + var entry = new List(); + AppendUInt16(entry, (ushort)(2 + 1 + 1 + 2 + 2 + value.Length)); // entry length + entry.Add(p.IsDdl ? DdlFlag : (byte)0x00); + entry.Add((byte)p.Type); + AppendUInt16(entry, (ushort)nameIndex[p.Name]); + AppendUInt16(entry, (ushort)value.Length); + entry.AddRange(value); + body.AddRange(entry); + } + // A table-level map (empty owner) uses block type 0x00; a column map uses 0x01. + AppendBlock(blob, owner.Length == 0 ? TableBlock : ColumnBlock, body); + } + + /// + /// Removes the property-value block owned by (a column being dropped), keeping + /// every other block — including the name pool — verbatim. The name pool is deliberately left untouched + /// so the surviving blocks' name indexes stay valid (an unreferenced pooled name is harmless). Returns + /// the blob unchanged if the owner has no block. This is what ACE does on DROP COLUMN (verified: a dropped + /// column's DefaultValue/Required entry disappears from the blob). + /// + public static byte[] RemoveOwner(ReadOnlySpan blob, string owner) + { + if (blob.Length == 0) return []; + + ParsedBlob parsed = Parse(blob); + + var result = new List(blob.Length); + result.AddRange(blob[..4]); // signature + foreach (ParsedBlock block in parsed.Blocks) + { + bool drop = false; + if (block.Type != NameListBlock) + drop = string.Equals(ReadOwner(block.Body), owner, StringComparison.OrdinalIgnoreCase); + if (!drop) result.AddRange(block.Raw); + } + return [.. result]; + } + + /// + /// Renames the owner of a property block (a column being renamed), keeping the block's property entries — + /// and every other block, including the name pool — byte-for-byte. Only the owner record's name and the two + /// lengths that describe it change; the unmodelled field at +2 is carried through. Returns the blob + /// unchanged if the owner has no block. This is what ACE does on a column rename: the column keeps its + /// DefaultValue/Required (verified — RenameFanOutProbeTest). + /// + public static byte[] RenameOwner(ReadOnlySpan blob, string oldOwner, string newOwner) + { + if (blob.Length == 0) return []; + + ParsedBlob parsed = Parse(blob); + + var result = new List(blob.Length); + result.AddRange(blob[..4]); // signature + foreach (ParsedBlock block in parsed.Blocks) + { + if (block.Type == NameListBlock + || !string.Equals(ReadOwner(block.Body), oldOwner, StringComparison.OrdinalIgnoreCase)) + { + result.AddRange(block.Raw); + continue; + } + + // Owner record: [uint16 recordLength][uint16 unmodelled][uint16 ownerLength][UTF-16 name]. + // Everything past it is this owner's property entries, which the rename must not disturb. + int oldRecordLength = BinaryPrimitives.ReadUInt16LittleEndian(block.Body.AsSpan(0, 2)); + byte[] nameBytes = Encoding.Unicode.GetBytes(newOwner); + + var body = new List(block.Body.Length - oldRecordLength + 6 + nameBytes.Length); + byte[] header = new byte[6]; + BinaryPrimitives.WriteUInt16LittleEndian(header.AsSpan(0, 2), (ushort)(6 + nameBytes.Length)); + block.Body.AsSpan(2, 2).CopyTo(header.AsSpan(2, 2)); // preserved verbatim + BinaryPrimitives.WriteUInt16LittleEndian(header.AsSpan(4, 2), (ushort)nameBytes.Length); + body.AddRange(header); + body.AddRange(nameBytes); + body.AddRange(block.Body.AsSpan(oldRecordLength).ToArray()); + + byte[] raw = new byte[6 + body.Count]; + BinaryPrimitives.WriteInt32LittleEndian(raw.AsSpan(0, 4), raw.Length); + BinaryPrimitives.WriteUInt16LittleEndian(raw.AsSpan(4, 2), block.Type); + body.CopyTo(raw, 6); + result.AddRange(raw); + } + + return [.. result]; + } + + /// Parses every property (owner, name, value) from a blob. Empty owner = a table property. + public static IReadOnlyList Read(ReadOnlySpan blob) + { + if (blob.Length == 0) return []; + return Parse(blob).Properties; + } + + /// Extracts each column's DefaultValue (column name → value text) from a blob. + public static IReadOnlyDictionary ReadColumnDefaults(ReadOnlySpan blob) + { + var result = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (Property p in Read(blob)) + if (p.Owner.Length > 0 && p.Name == DefaultValueProperty) + result[p.Owner] = p.Value; + return result; + } + + /// The set of columns marked Required (NOT NULL) in a blob — a column has the property + /// only when it is required (Access omits it for a nullable column). + public static IReadOnlySet ReadRequiredColumns(ReadOnlySpan blob) + { + var result = new HashSet(StringComparer.OrdinalIgnoreCase); + foreach (Property p in Read(blob)) + if (p.Owner.Length > 0 && p.Name == RequiredProperty && p.Value == "1") + result.Add(p.Owner); + return result; + } + + /// Extracts the ValidationRule/ValidationText designer properties for the given + /// owner (a column name, or "" for the table) from a blob; each is null if absent. Access stores these as + /// ordinary text properties in the LvProp blob, which is what EFCore.Jet's ADOX surfaces as + /// Jet OLEDB:{Column,Table} Validation Rule/Text. + public static (string? Rule, string? Text) ReadValidation(ReadOnlySpan blob, string owner) + { + string? rule = null, text = null; + foreach (Property p in Read(blob)) + { + if (!string.Equals(p.Owner, owner, StringComparison.OrdinalIgnoreCase)) continue; + if (p.Name == ValidationRuleProperty) rule = p.Value.Length > 0 ? p.Value : null; + else if (p.Name == ValidationTextProperty) text = p.Value.Length > 0 ? p.Value : null; + } + return (rule, text); + } + + /// Extracts the table's CHECK constraints (name, expression) from a blob. The + /// CheckConstraints table property stores them as a name\0expression\0 list, terminated + /// by an empty entry. + public static IReadOnlyList<(string Name, string Expression)> ReadCheckConstraints(ReadOnlySpan blob) + { + foreach (Property p in Read(blob)) + if (p.Owner.Length == 0 && p.Name == CheckConstraintsProperty) + return ParseCheckList(p.Value); + return []; + } + + /// Serialises CHECK constraints into the CheckConstraints property value: each is + /// name\0expression\0, then a trailing \0 terminator. + public static string WriteCheckList(IReadOnlyList<(string Name, string Expression)> checks) + { + var sb = new StringBuilder(); + foreach (var (name, expr) in checks) sb.Append(name).Append('\0').Append(expr).Append('\0'); + sb.Append('\0'); + return sb.ToString(); + } + + private static List<(string Name, string Expression)> ParseCheckList(string value) + { + var result = new List<(string, string)>(); + string[] parts = value.Split('\0'); + for (int i = 0; i + 1 < parts.Length; i += 2) + { + if (parts[i].Length == 0) break; // empty name = list terminator + result.Add((parts[i], parts[i + 1])); + } + return result; + } + + private sealed record ParsedBlock(ushort Type, byte[] Body, byte[] Raw); + private sealed record ParsedBlob( + IReadOnlyList Blocks, IReadOnlyList Names, IReadOnlyList Properties); + + /// Parses and validates the complete blob once, so every read/add/remove caller observes the + /// same block, owner-record, entry, and name-index boundaries. + private static ParsedBlob Parse(ReadOnlySpan blob) + { + if (blob.Length < 4) + throw new InvalidDataException($"Property blob has {blob.Length} bytes; expected a 4-byte signature."); + if (!blob[..4].SequenceEqual(SignatureAce) && !blob[..4].SequenceEqual(SignatureMdb)) + throw new InvalidDataException("Property blob has an unknown signature."); + + var blocks = new List(); + int pos = 4; + while (pos < blob.Length) + { + if (blob.Length - pos < 6) + throw new InvalidDataException($"Property blob has {blob.Length - pos} trailing bytes after its last complete block."); + int length = BinaryPrimitives.ReadInt32LittleEndian(blob.Slice(pos, 4)); + if (length < 6 || length > blob.Length - pos) + throw new InvalidDataException( + $"Property block at {pos} declares invalid length {length} with {blob.Length - pos} bytes remaining."); + ushort type = BinaryPrimitives.ReadUInt16LittleEndian(blob.Slice(pos + 4, 2)); + blocks.Add(new ParsedBlock(type, blob.Slice(pos + 6, length - 6).ToArray(), blob.Slice(pos, length).ToArray())); + pos += length; + } + + var names = new List(); + foreach (ParsedBlock block in blocks) + if (block.Type == NameListBlock) ReadNames(block.Body, names); + + var properties = new List(); + foreach (ParsedBlock block in blocks) + if (block.Type != NameListBlock) ReadProperties(block.Body, names, properties); + + return new ParsedBlob(blocks, names, properties); + } + + private static void ReadNames(ReadOnlySpan body, List names) + { + int pos = 0; + while (pos < body.Length) + { + if (body.Length - pos < 2) + throw new InvalidDataException("Property name pool ends inside a length field."); + int length = BinaryPrimitives.ReadUInt16LittleEndian(body.Slice(pos, 2)); + pos += 2; + if ((length & 1) != 0 || length > body.Length - pos) + throw new InvalidDataException( + $"Property name declares invalid UTF-16 length {length} with {body.Length - pos} bytes remaining."); + names.Add(Encoding.Unicode.GetString(body.Slice(pos, length))); + pos += length; + } + } + + private static string ReadOwner(ReadOnlySpan body) + { + if (body.Length < 6) + throw new InvalidDataException("Property owner block is shorter than its 6-byte owner header."); + int recordLength = BinaryPrimitives.ReadUInt16LittleEndian(body[..2]); + int ownerLength = BinaryPrimitives.ReadUInt16LittleEndian(body.Slice(4, 2)); + if (recordLength < 6 || recordLength > body.Length || (ownerLength & 1) != 0 || ownerLength != recordLength - 6) + throw new InvalidDataException( + $"Property owner record length {recordLength} and UTF-16 name length {ownerLength} are inconsistent."); + return Encoding.Unicode.GetString(body.Slice(6, ownerLength)); + } + + private static void ReadProperties(ReadOnlySpan body, IReadOnlyList names, List properties) + { + string owner = ReadOwner(body); + int pos = BinaryPrimitives.ReadUInt16LittleEndian(body[..2]); + while (pos < body.Length) + { + if (body.Length - pos < 8) + throw new InvalidDataException("Property value block ends inside an 8-byte entry header."); + int entryLength = BinaryPrimitives.ReadUInt16LittleEndian(body.Slice(pos, 2)); + int nameIndex = BinaryPrimitives.ReadUInt16LittleEndian(body.Slice(pos + 4, 2)); + int valueLength = BinaryPrimitives.ReadUInt16LittleEndian(body.Slice(pos + 6, 2)); + if (entryLength < 8 || entryLength > body.Length - pos || valueLength != entryLength - 8) + throw new InvalidDataException( + $"Property entry at {pos} has inconsistent entry/value lengths {entryLength}/{valueLength}."); + byte ddlFlag = body[pos + 2]; + if (ddlFlag is not (0x00 or DdlFlag)) + throw new InvalidDataException($"Property entry at {pos} has unsupported flag 0x{body[pos + 2]:X2}."); + if (nameIndex >= names.Count) + throw new InvalidDataException( + $"Property entry at {pos} names pool index {nameIndex}, but the pool has {names.Count} entries."); + + var dataType = (JetDataType)body[pos + 3]; + ReadOnlySpan raw = body.Slice(pos + 8, valueLength); + string value = dataType == JetDataType.Boolean + ? (raw.Length > 0 && raw[0] != 0 ? "1" : "0") + : Encoding.Unicode.GetString(raw); + properties.Add(new Property(owner, names[nameIndex], value, dataType, raw.ToArray()) { IsDdl = ddlFlag != 0 }); + pos += entryLength; + } + } + + private static void ValidateForWrite(IReadOnlyList properties) + { + var names = properties.Select(p => p.Name).Distinct().ToList(); + ValidateNames(names); + var nameIndex = names.Select((name, index) => (name, index)).ToDictionary(x => x.name, x => x.index); + foreach (var group in GroupByOwnerPreservingOrder(properties)) + ValidateOwnerProperties(group.Owner, group.Properties, nameIndex); + } + + private static void ValidateNames(IReadOnlyList names) + { + if (names.Count > ushort.MaxValue + 1) + throw new ArgumentException($"A property blob cannot name more than {ushort.MaxValue + 1} properties."); + long bodyLength = 0; + foreach (string name in names) + { + int length = Encoding.Unicode.GetByteCount(name); + if (length > ushort.MaxValue) + throw new ArgumentException($"Property name '{name[..Math.Min(name.Length, 32)]}' is too long for its 16-bit byte length."); + bodyLength += 2L + length; + } + if (bodyLength > int.MaxValue - 6) + throw new ArgumentException("Property name-pool block exceeds its 32-bit block length."); + } + + private static void ValidateOwnerProperties( + string owner, IEnumerable properties, IReadOnlyDictionary nameIndex) + { + int ownerLength = Encoding.Unicode.GetByteCount(owner); + if (ownerLength > ushort.MaxValue - 6) + throw new ArgumentException("Property owner name is too long for its 16-bit owner-record length.", nameof(owner)); + + long bodyLength = 6L + ownerLength; + foreach (Property property in properties) + { + if (!nameIndex.TryGetValue(property.Name, out int index) || index > ushort.MaxValue) + throw new ArgumentException($"Property '{property.Name}' has no encodable 16-bit name-pool index."); + int valueLength = PropertyValue(property).Length; + if (valueLength > ushort.MaxValue - 8) + throw new ArgumentException( + $"Property '{property.Name}' value is too long for its 16-bit entry length."); + bodyLength += 8L + valueLength; + } + if (bodyLength > int.MaxValue - 6) + throw new ArgumentException($"Property block for owner '{owner}' exceeds its 32-bit block length."); + } + + private static byte[] PropertyValue(Property property) => property.RawValue + ?? (property.Type == JetDataType.Boolean + ? [(byte)(property.Value is "1" or "true" or "True" ? 1 : 0)] + : Encoding.Unicode.GetBytes(property.Value)); + + private static IEnumerable<(string Owner, List Properties)> GroupByOwnerPreservingOrder(IReadOnlyList properties) + { + var order = new List(); + var byOwner = new Dictionary>(); + foreach (Property p in properties) + { + if (!byOwner.TryGetValue(p.Owner, out var list)) { byOwner[p.Owner] = list = []; order.Add(p.Owner); } + list.Add(p); + } + return order.Select(o => (o, byOwner[o])); + } + + private static void AppendBlock(List blob, ushort type, List body) + { + AppendInt32(blob, checked(body.Count + 6)); + AppendUInt16(blob, type); + blob.AddRange(body); + } + + private static void AppendString(List buffer, string s) + { + byte[] bytes = Encoding.Unicode.GetBytes(s); + if (bytes.Length > ushort.MaxValue) + throw new ArgumentException("String is too long for its 16-bit property-blob byte length.", nameof(s)); + AppendUInt16(buffer, (ushort)bytes.Length); + buffer.AddRange(bytes); + } + + private static void AppendUInt16(List buffer, ushort value) { buffer.Add((byte)value); buffer.Add((byte)(value >> 8)); } + private static void AppendInt32(List buffer, int value) + { + buffer.Add((byte)value); buffer.Add((byte)(value >> 8)); buffer.Add((byte)(value >> 16)); buffer.Add((byte)(value >> 24)); + } +} diff --git a/src/LibRed/LibRed.Core/Catalog/RelationshipSpec.cs b/src/LibRed/LibRed.Core/Catalog/RelationshipSpec.cs new file mode 100644 index 00000000..a2c60e59 --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/RelationshipSpec.cs @@ -0,0 +1,28 @@ +namespace LibRed.Catalog; + +/// +/// A relationship (foreign key) to create on the table being defined: the child column pairs, the +/// referenced (parent) table, and the enforce/cascade options. The child table is implicit (the +/// table under construction). Persisted as rows in MSysRelationships plus a child-side index +/// on the foreign-key columns — the inverse of . +/// +public sealed record RelationshipSpec( + string Name, + string ReferencedTable, + IReadOnlyList<(string Column, string ReferencedColumn)> Columns, + bool IsEnforced, + bool CascadeUpdate, + bool CascadeDelete, + bool NoIndex = false, + // Inherited from a linked table. LibRed neither reads nor writes this on disk (its grbit bit is unverified) + // and never authors inherited relationships, so it stays false; the field exists for parity with ForeignKey. + bool IsInherited = false, + bool DeleteSetNull = false, + // ON UPDATE SET NULL: the docs list it, but the ACE OLE DB provider rejects it via SQL DDL ("Invalid + // argument"), so its on-disk storage (grbit flag + info-block +0x15 byte) couldn't be probed. The + // pathway is threaded through; TableCreator throws NotImplemented rather than guess the bytes. See the + // libred-foreign-key-status memory / spec §11. + bool UpdateSetNull = false); + +/// A UNIQUE constraint to create as a unique (non-primary) index over the named columns. +public sealed record UniqueIndexSpec(string Name, IReadOnlyList Columns); diff --git a/src/LibRed/LibRed.Core/Catalog/TableDef.cs b/src/LibRed/LibRed.Core/Catalog/TableDef.cs new file mode 100644 index 00000000..04e17a91 --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/TableDef.cs @@ -0,0 +1,40 @@ +namespace LibRed.Catalog; + +/// +/// The resolved definition of a table: its columns and indexes plus the page that +/// anchors its data. Produced by and consumed by the +/// storage layer to open a . +/// +public sealed class TableDef +{ + public required string Name { get; init; } + + /// Page number of the table's TDEF (definition) page. + public required int DefinitionPage { get; init; } + + public IReadOnlyList Columns { get; init; } = []; + public IReadOnlyList Indexes { get; init; } = []; + + /// The complex-type AutoNumber high-water (TDEF header 0x1C) — the next id for a complex + /// (multi-value/attachment) column. Carried for faithful round-trip; 0 for every table LibRed handles. + public int ComplexAutoNumber { get; init; } + + /// CHECK constraints (name, expression), read from the table's extended-properties + /// (LvProp) blob. Set by the catalog after the definition is decoded. + public IReadOnlyList<(string Name, string Expression)> CheckConstraints { get; internal set; } = []; + + /// The table's ValidationRule/ValidationText designer properties, read from the + /// extended-properties (LvProp) blob; null if none. Surfaced through + /// INFORMATION_SCHEMA.TABLES (VALIDATION_RULE/VALIDATION_TEXT), matching EFCore.Jet's + /// AdoxSchema.GetTables (Jet OLEDB:Table Validation Rule/Text). + public string? ValidationRule { get; internal set; } + + /// + public string? ValidationText { get; internal set; } + + /// True for the MSys* system tables. + public bool IsSystem { get; init; } + + public ColumnDef? FindColumn(string name) => + Columns.FirstOrDefault(c => string.Equals(c.Name, name, StringComparison.OrdinalIgnoreCase)); +} diff --git a/src/LibRed/LibRed.Core/Catalog/TableType.cs b/src/LibRed/LibRed.Core/Catalog/TableType.cs new file mode 100644 index 00000000..aa74ca85 --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/TableType.cs @@ -0,0 +1,11 @@ +namespace LibRed.Catalog; + +/// The table-type marker in a TDEF page (byte at the format's table-type offset). +public enum TableType : byte +{ + /// A user table ('N'). + User = 0x4E, + + /// A system (MSys*) table ('S'). + System = 0x53, +} diff --git a/src/LibRed/LibRed.Core/Catalog/TdefBuilder.cs b/src/LibRed/LibRed.Core/Catalog/TdefBuilder.cs new file mode 100644 index 00000000..346260ed --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/TdefBuilder.cs @@ -0,0 +1,522 @@ +using System.Buffers.Binary; +using System.Text; +using LibRed.Formats; +using LibRed.Pages; + +namespace LibRed.Catalog; + +/// A column to create: its name, type, and (for fixed/text) byte length. +public sealed record ColumnSpec( + string Name, + JetDataType Type, + int Length, + bool IsFixedLength, + bool IsAutoNumber = false, + byte Precision = 0, + byte Scale = 0, + bool IsNullable = true, + // AutoNumber (COUNTER) seed and increment — the first generated id is Seed, then +Increment each row. + // Default 1/1 (a plain COUNTER). Stored in the TDEF header: last-value 0x14 = Seed-Increment, 0x18 = Increment. + int Seed = 1, + int Increment = 1, + // Faithful-rebuild passthrough (ALTER COLUMN): an explicit column id (else the column's position is used) + // and the column's original 25-byte descriptor, re-emitted verbatim except for the fields LibRed manages + // so a rebuild preserves unmodeled bytes. Both null for an ordinary CREATE/ADD column. See ColumnDef.RawDescriptor. + int? ColumnId = null, + byte[]? RawDescriptor = null, + // Undocumented flag bits (0x0F) Access sets on system-table columns: 0x10 marks a system-catalog column, + // 0x20 additionally marks a security-identifier column (MSysObjects.Owner, MSysACEs.SID). User-table + // columns leave these clear. Verified against real files; the desktop engine expects them on MSys* columns. + byte SystemFlags = 0); + +/// An index to create over the named columns, anchored at an already-allocated root page. +public sealed record IndexSpec( + string Name, + IReadOnlyList Columns, + bool IsPrimaryKey, + bool IsUnique, + int RootPage, + int UsageMapRow = 0, + int UsageMapPage = 0); + +/// +/// The trailing §3.3.2 column-usage-map entry for a long-value (memo/OLE) column: its column id and +/// pointers to the owned- and free-pages usage maps that will track the column's LVAL pages. +/// +public sealed record LongValueColumnSpec(int ColumnId, int UsedRow, int FreeRow, int MapPage); + +/// +/// Serializes a table schema into a Jet 4 / ACE table-definition (TDEF) page — the inverse of +/// . This first cut builds a single-page definition with no +/// indexes; index-data blocks and continuation pages come later. Fixed columns are packed in +/// declaration order; variable columns are ranked by column id for the row var-offset table. +/// +public static class TdefBuilder +{ + // TDEF header offsets + the record marker / continuation-header size live on JetFormatBase (shared, + // version-aware); the column-descriptor sub-offsets Access needs but the reader ignores are below. + private const int ColumnRecordMarkerOffset = 0x01; // 0x0659 + private const int ColumnNumber2Offset = 0x09; // duplicate column id + + // Index-data and index-info block layout + flags are shared with the reader via IndexBlockFormat / IndexFlags. + private const int MaxIndexesPerTable = 32; // Jet/ACE limit, counting keys- and relationship-backing indexes + private const int MaxColumnsPerTable = 255; + private const int MaxNameBytes = 128; // verified Access limit: 64 UTF-16 code units + + /// + /// One logical index-info block (§3.6). Several logical indexes may share a data block: a plain + /// index has one, and a relationship adds one that reuses this table's side of the foreign key. + /// is the data-block index (index_num2); + /// is the logical id (index_num). For a relationship, is 1 (incoming) + /// or 2 (outgoing), is the other end's index_num, and + /// is the other table's TDEF page. + /// + public sealed record LogicalIndexSpec( + int Number, + int DataOrdinal, + byte FkType, + uint FkNumber, + int FkTablePage, + byte UpdateAction, + byte DeleteAction, + byte Type, + string Name); + + public sealed record Result(byte[] Page, IReadOnlyList Columns); + + public static Result Build( + JetFormatBase format, + TableType tableType, + IReadOnlyList specs, + IReadOnlyList? indexes = null, + IReadOnlyList? longValueColumns = null, + IReadOnlyList? logicalIndexes = null, + Collation? collation = null, + int complexAutoNumber = 0) + { + indexes ??= []; + longValueColumns ??= []; + ValidateColumnSpecs(format, specs); + // Jet/ACE caps a table at 32 indexes, counting those backing primary keys, unique constraints + // and relationships (§3.5 index-data blocks, the 0x33 count). Reject rather than write a bad TDEF. + if (indexes.Count > MaxIndexesPerTable) + throw new NotSupportedException( + $"Table has {indexes.Count} indexes; Jet/ACE allows at most {MaxIndexesPerTable} per table (including those backing keys and relationships)."); + var columns = ResolveColumns(format, specs, collation ?? Collation.GeneralLegacy); + IReadOnlyList logical = logicalIndexes ?? indexes.Select((ix, i) => new LogicalIndexSpec( + Number: i, DataOrdinal: i, FkType: 0, FkNumber: IndexBlockFormat.NoForeignKey, FkTablePage: 0, + UpdateAction: IndexBlockFormat.PlainAction, DeleteAction: IndexBlockFormat.PlainAction, + Type: ix.IsPrimaryKey ? IndexBlockFormat.TypePrimary : IndexBlockFormat.TypeSecondary, Name: ix.Name)).ToList(); + ValidateIndexAndLongValueSpecs(columns, indexes, logical, longValueColumns); + + int definitionSize = DefinitionSize(format, columns, indexes, logical, longValueColumns); + var page = new byte[Math.Max(format.PageSize, definitionSize)]; + + page[0] = (byte)PageType.TableDefinition; + page[format.TdefHeaderFlagsOffset] = 0x01; + BinaryPrimitives.WriteUInt32LittleEndian(page.AsSpan(format.TdefRecordMarkerOffset, 4), JetFormatBase.TdefRecordMarker); + // AutoNumber (COUNTER) config lives in the TDEF header: 0x18 = increment (default 1), and 0x14 = + // the last-assigned value initialized to Seed-Increment so the first insert yields Seed. A table has + // at most one AutoNumber column; with none, these stay at the plain-counter defaults (increment 1, + // last 0). Verified vs ACE (COUNTER(1000, 7) → 0x18=7, 0x14=993). + ColumnSpec? counter = specs.FirstOrDefault(s => s.IsAutoNumber); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefAutoNumberIncrementOffset, 4), counter?.Increment ?? 1); + // Complex-type AutoNumber high-water (0x1C) — 0 for a table with no complex column, carried through on + // a rebuild for faithful round-trip. + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefComplexAutoNumberOffset, 4), complexAutoNumber); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefNextPageOffset, 4), 0); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefRowCountOffset, 4), 0); + if (counter is not null) + BinaryPrimitives.WriteInt32LittleEndian( + page.AsSpan(format.TdefLastAutoNumberOffset, 4), counter.Seed - counter.Increment); + page[format.TdefTableTypeOffset] = (byte)tableType; + // The 0x29 high-water is the next column id to hand out = max existing id + 1. For contiguous ids this + // equals the column count; when a rebuild carries a burned id (ALTER COLUMN) it exceeds the count. + int maxColumnId = columns.Select(c => c.ColumnId).DefaultIfEmpty(-1).Max(); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.TdefMaxColumnsOffset, 2), (ushort)(maxColumnId + 1)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.TdefVariableColumnsOffset, 2), + (ushort)columns.Count(c => !c.IsFixedLength)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.TdefColumnCountOffset, 2), (ushort)columns.Count); + // Logical index count (0x2F) may exceed the real data-block count (0x33): a relationship adds + // a logical block that shares a data block. Without explicit logical specs the two are equal. + int logicalCount = logical.Count; + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefRealIndexCountOffset, 4), logicalCount); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefIndexCountOffset, 4), indexes.Count); + + // The per-index statistics blocks (12 bytes each, one per data block) precede the columns. + int columnBlock = format.TdefRealIndexBlockOffset + indexes.Count * format.RealIndexEntrySize; + WriteColumnDescriptors(page, format, columns, columnBlock); + int afterNames = WriteColumnNames(page, format, columns, columnBlock + columns.Count * format.ColumnDescriptorSize); + + int definitionEnd = WriteIndexes(page, format, columns, indexes, logical, longValueColumns, afterNames); + if (definitionEnd != definitionSize) + throw new InvalidOperationException( + $"TDEF sizing preflight calculated {definitionSize} bytes but serialization wrote {definitionEnd}."); + + // Definition length and remaining free space (Access reserves an 8-byte continuation header). For a + // multi-page definition the caller recomputes the first page's free space, so clamp at 0 here. + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefLengthOffset, 4), definitionEnd); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.TdefFreeSpaceOffset, 2), + (ushort)Math.Max(0, format.PageSize - definitionEnd - JetFormatBase.TdefContinuationHeaderSize)); + + return new Result(page, columns); + } + + private static void ValidateColumnSpecs(JetFormatBase format, IReadOnlyList specs) + { + if (specs.Count > MaxColumnsPerTable) + throw new NotSupportedException( + $"Table has {specs.Count} columns; Jet/ACE allows at most {MaxColumnsPerTable} per table."); + + var ids = new HashSet(); + var names = new HashSet(StringComparer.OrdinalIgnoreCase); + long fixedBytes = 0; + for (int i = 0; i < specs.Count; i++) + { + ColumnSpec spec = specs[i]; + ValidateNameLength(spec.Name, "Column"); + if (!names.Add(spec.Name)) + throw new NotSupportedException($"Column name '{spec.Name}' is used more than once."); + if (spec.RawDescriptor is { } raw && raw.Length != format.ColumnDescriptorSize) + throw new NotSupportedException( + $"Column '{spec.Name}' carries a {raw.Length}-byte raw descriptor; this format requires {format.ColumnDescriptorSize} bytes."); + int id = spec.ColumnId ?? i; + if (id is < 0 or >= MaxColumnsPerTable) + throw new NotSupportedException( + $"Column '{spec.Name}' has id {id}; Jet/ACE column ids range from 0 through {MaxColumnsPerTable - 1}."); + if (!ids.Add(id)) + throw new NotSupportedException($"Column id {id} is used more than once."); + if (spec.Length is < 0 or > ushort.MaxValue) + throw new NotSupportedException( + $"Column '{spec.Name}' has byte length {spec.Length}, which does not fit the TDEF field."); + if (spec.IsFixedLength && spec.Type != JetDataType.Boolean) + fixedBytes += spec.Length; + } + + if (fixedBytes > ushort.MaxValue) + throw new NotSupportedException( + $"The table's fixed-data region is {fixedBytes} bytes, which does not fit the TDEF offset fields."); + } + + private static void ValidateIndexAndLongValueSpecs( + IReadOnlyList columns, + IReadOnlyList indexes, + IReadOnlyList logical, + IReadOnlyList longValueColumns) + { + if (logical.Count > MaxIndexesPerTable) + throw new NotSupportedException( + $"Table has {logical.Count} logical indexes; Jet/ACE allows at most {MaxIndexesPerTable}."); + + var columnByName = columns.ToDictionary(c => c.Name, StringComparer.OrdinalIgnoreCase); + foreach (IndexSpec index in indexes) + { + ValidateNameLength(index.Name, "Index"); + if (index.Columns.Count > IndexBlockFormat.MaxColumns) + throw new NotSupportedException( + $"Index '{index.Name}' spans {index.Columns.Count} columns; Jet/ACE allows {IndexBlockFormat.MaxColumns}."); + foreach (string column in index.Columns) + if (!columnByName.ContainsKey(column)) + throw new NotSupportedException($"Index '{index.Name}' refers to unknown column '{column}'."); + ValidateUsageMapPointer(index.UsageMapRow, index.UsageMapPage, $"index '{index.Name}'", allowNull: true); + } + foreach (LogicalIndexSpec index in logical) ValidateNameLength(index.Name, "Logical index"); + + var columnById = columns.ToDictionary(c => c.ColumnId); + var seen = new HashSet(); + foreach (LongValueColumnSpec value in longValueColumns) + { + if (!seen.Add(value.ColumnId)) + throw new NotSupportedException($"Long-value column id {value.ColumnId} has more than one usage-map entry."); + if (!columnById.TryGetValue(value.ColumnId, out ColumnDef? column) + || column.Type is not (JetDataType.Memo or JetDataType.Ole)) + throw new NotSupportedException( + $"Long-value usage-map entry {value.ColumnId} does not identify a Memo/OLE column."); + ValidateUsageMapPointer(value.UsedRow, value.MapPage, $"long-value column '{column.Name}' owned map", allowNull: false); + ValidateUsageMapPointer(value.FreeRow, value.MapPage, $"long-value column '{column.Name}' free map", allowNull: false); + } + } + + private static void ValidateUsageMapPointer(int row, int page, string owner, bool allowNull) + { + if (allowNull && row == 0 && page == 0) return; + if (row is < 0 or > byte.MaxValue || page is <= 0 or > 0xFFFFFF) + throw new NotSupportedException( + $"The {owner} usage-map pointer ({row}, {page}) does not fit its 1-byte row / 3-byte page fields."); + } + + private static void ValidateNameLength(string name, string kind) + { + int length = Encoding.Unicode.GetByteCount(name); + if (length is 0 or > MaxNameBytes) + throw new NotSupportedException( + $"{kind} name is {length} UTF-16 bytes; Jet/ACE names must use 1 through {MaxNameBytes / 2} characters."); + } + + private static int DefinitionSize( + JetFormatBase format, + IReadOnlyList columns, + IReadOnlyList indexes, + IReadOnlyList logical, + IReadOnlyList longValueColumns) + { + long size = format.TdefRealIndexBlockOffset + + (long)indexes.Count * format.RealIndexEntrySize + + (long)columns.Count * format.ColumnDescriptorSize + + columns.Sum(c => 2L + Encoding.Unicode.GetByteCount(c.Name)) + + (long)indexes.Count * IndexBlockFormat.DataBlockSize + + (long)logical.Count * IndexBlockFormat.InfoBlockSize + + logical.Sum(i => 2L + Encoding.Unicode.GetByteCount(i.Name)) + + (long)longValueColumns.Count * 10 + + 2; + if (size > TdefChainReader.MaxDefinitionLength) + throw new NotSupportedException( + $"The serialized table definition requires {size} bytes; LibRed's validated TDEF budget is {TdefChainReader.MaxDefinitionLength}."); + return (int)size; + } + + /// Writes the index structures and returns the offset just past them (the definition end). + private static int WriteIndexes(byte[] page, JetFormatBase format, List columns, IReadOnlyList indexes, IReadOnlyList logical, IReadOnlyList longValueColumns, int dataBlockStart) + { + var columnIdByName = columns.ToDictionary(c => c.Name, c => c.ColumnId, StringComparer.OrdinalIgnoreCase); + + // The index-data block (§3.5) has a fixed array of exactly IndexBlockFormat.MaxColumns column slots and no + // count field, so an index — hence any PRIMARY KEY / UNIQUE / FOREIGN KEY — spans at most that + // many columns. Reject an over-wide index rather than silently truncating it. + foreach (IndexSpec ix in indexes) + if (ix.Columns.Count > IndexBlockFormat.MaxColumns) + throw new NotSupportedException( + $"Index '{ix.Name}' spans {ix.Columns.Count} columns; Jet/ACE indexes (and the keys built on them) are limited to {IndexBlockFormat.MaxColumns}."); + + // 1. Index-data blocks: columns, root page, unique flag. + for (int i = 0; i < indexes.Count; i++) + { + IndexSpec index = indexes[i]; + int block = dataBlockStart + i * IndexBlockFormat.DataBlockSize; + + BinaryPrimitives.WriteUInt32LittleEndian(page.AsSpan(block, 4), IndexBlockFormat.DataMarker); + for (int slot = 0; slot < IndexBlockFormat.MaxColumns; slot++) + { + int entry = block + IndexBlockFormat.ColumnsOffset + slot * IndexBlockFormat.ColumnSlotSize; + if (slot < index.Columns.Count) + { + BinaryPrimitives.WriteInt16LittleEndian(page.AsSpan(entry, 2), (short)columnIdByName[index.Columns[slot]]); + page[entry + 2] = IndexBlockFormat.ColumnAscending; + } + else + { + BinaryPrimitives.WriteInt16LittleEndian(page.AsSpan(entry, 2), IndexBlockFormat.ColumnUnused); + } + } + page[block + IndexBlockFormat.UsageMapRowOffset] = (byte)index.UsageMapRow; + page[block + IndexBlockFormat.UsageMapRowOffset + 1] = (byte)index.UsageMapPage; + page[block + IndexBlockFormat.UsageMapRowOffset + 2] = (byte)(index.UsageMapPage >> 8); + page[block + IndexBlockFormat.UsageMapRowOffset + 3] = (byte)(index.UsageMapPage >> 16); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(block + IndexBlockFormat.RootPageOffset, 4), index.RootPage); + ushort flags = IndexFlags.AlwaysSet; + if (index.IsUnique) flags |= IndexFlags.Unique; + if (index.IsPrimaryKey) flags |= IndexFlags.Required; + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(block + IndexBlockFormat.FlagsOffset, 2), flags); + } + + // 2. Index-info blocks (one per logical index) and 3. their names. Without explicit logical + // specs each data block maps 1:1 to a plain info block (back-compat); with them, relationship + // blocks are included and stored name-sorted (matching Access). + int infoStart = dataBlockStart + indexes.Count * IndexBlockFormat.DataBlockSize; + for (int i = 0; i < logical.Count; i++) + { + LogicalIndexSpec li = logical[i]; + int block = infoStart + i * IndexBlockFormat.InfoBlockSize; + BinaryPrimitives.WriteUInt32LittleEndian(page.AsSpan(block + IndexBlockFormat.InfoMarkerOffset, 4), JetFormatBase.TdefRecordMarker); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(block + IndexBlockFormat.InfoNumberOffset, 4), li.Number); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(block + IndexBlockFormat.InfoDataNumberOffset, 4), li.DataOrdinal); + page[block + IndexBlockFormat.InfoFkTypeOffset] = li.FkType; + BinaryPrimitives.WriteUInt32LittleEndian(page.AsSpan(block + IndexBlockFormat.InfoFkNumberOffset, 4), li.FkNumber); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(block + IndexBlockFormat.InfoFkTablePageOffset, 4), li.FkTablePage); + page[block + IndexBlockFormat.InfoUpdateActionOffset] = li.UpdateAction; + page[block + IndexBlockFormat.InfoDeleteActionOffset] = li.DeleteAction; + page[block + IndexBlockFormat.InfoTypeOffset] = li.Type; + } + + int namePos = infoStart + logical.Count * IndexBlockFormat.InfoBlockSize; + foreach (LogicalIndexSpec li in logical) + { + byte[] name = System.Text.Encoding.Unicode.GetBytes(li.Name); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(namePos, 2), (ushort)name.Length); + namePos += 2; + name.CopyTo(page.AsSpan(namePos)); + namePos += name.Length; + } + + // After the index names comes a per-long-value-column (memo/OLE) usage-map list (spec §3.3.2): + // one 10-byte entry {col_num:2, used_pages:4, free_pages:4} per column, in ascending column + // order, terminated by col_num 0xFFFF. Each pointer is a 1-byte usage-map row + 3-byte page. + // The terminator is mandatory even when the list is empty; the definition length includes it. + foreach (LongValueColumnSpec lv in longValueColumns.OrderBy(l => l.ColumnId)) + { + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(namePos, 2), (ushort)lv.ColumnId); + WriteUsageMapPointer(page, namePos + 2, lv.UsedRow, lv.MapPage); + WriteUsageMapPointer(page, namePos + 6, lv.FreeRow, lv.MapPage); + namePos += 10; + } + + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(namePos, 2), 0xFFFF); + namePos += 2; + return namePos; + } + + /// Writes a 4-byte usage-map pointer: a 1-byte record row followed by a 3-byte page. + private static void WriteUsageMapPointer(byte[] page, int offset, int row, int mapPage) + { + page[offset] = (byte)row; + page[offset + 1] = (byte)mapPage; + page[offset + 2] = (byte)(mapPage >> 8); + page[offset + 3] = (byte)(mapPage >> 16); + } + + private static List ResolveColumns(JetFormatBase format, IReadOnlyList specs, Collation collation) + { + // A column's id is its declaration position unless the spec pins one explicitly (ALTER COLUMN burns a + // fresh id at the same position, so ids can be non-contiguous — the row codec reads var-index from the + // descriptor, not from id arithmetic). Variable columns are addressed in ascending column-id order. + int EffectiveId(int i) => specs[i].ColumnId ?? i; + + var variableRank = new Dictionary(); + int rank = 0; + foreach (int i in Enumerable.Range(0, specs.Count).Where(i => !specs[i].IsFixedLength).OrderBy(EffectiveId)) + variableRank[i] = rank++; + + // Descriptor offset 7 ("variable-table index") = number of variable columns with a smaller column-id. + // Access stores this on EVERY column (fixed columns included) and its strict row reader relies on it; + // writing 0 on fixed columns yields a file Access rejects with "record(s) cannot be read". + int VarTableIndex(int i) => + Enumerable.Range(0, specs.Count).Count(j => !specs[j].IsFixedLength && EffectiveId(j) < EffectiveId(i)); + + // Fixed-data offsets are assigned in ascending column-id order, NOT declaration order — Access lays the + // fixed columns out by column id (e.g. MSysACEs stores ObjectId(id0) at offset 0 even though its + // descriptor is written after ACM). Only differs from declaration order when ids are reordered (MSys*). + bool Occupies(int i) => specs[i].IsFixedLength && specs[i].Type != JetDataType.Boolean; + var fixedOffsets = new Dictionary(); + int running = 0; + foreach (int i in Enumerable.Range(0, specs.Count).Where(Occupies).OrderBy(EffectiveId)) + { + fixedOffsets[i] = running; + running += specs[i].Length; + } + + var columns = new List(specs.Count); + for (int i = 0; i < specs.Count; i++) + { + ColumnSpec s = specs[i]; + // Booleans live in the null bitmap and occupy no fixed-data bytes, so they don't + // advance the fixed offset (matching how the row codec skips them). + bool occupiesFixedData = s.IsFixedLength && s.Type != JetDataType.Boolean; + // The documented flag bits LibRed doesn't drive from the spec (updatable, GUID-autonumber, hyperlink, + // compressed-Unicode, calculated) are carried through a rebuild by reading them off the original + // descriptor. A fresh column (no raw) is updatable with the rest clear — the CREATE default. + bool hasRaw = s.RawDescriptor is { } r && r.Length == format.ColumnDescriptorSize; + byte rawFlags = hasRaw ? s.RawDescriptor![format.ColumnFlagsOffset] : JetFormatBase.ColumnFlagUpdatable; + byte rawExt = hasRaw ? s.RawDescriptor![format.ColumnExtendedFlagsOffset] : (byte)0; + columns.Add(new ColumnDef + { + Name = s.Name, + Type = s.Type, + Index = i, + ColumnId = EffectiveId(i), + Length = s.Length, + FixedOffset = occupiesFixedData ? fixedOffsets[i] : 0, + VariableIndex = s.IsFixedLength ? -1 : variableRank[i], + VariableTableIndex = VarTableIndex(i), + IsFixedLength = s.IsFixedLength, + IsAutoNumber = s.IsAutoNumber, + IsUpdatable = (rawFlags & JetFormatBase.ColumnFlagUpdatable) != 0, + IsGuidAutoNumber = (rawFlags & JetFormatBase.ColumnFlagGuidAutoNumber) != 0, + IsHyperlink = (rawFlags & JetFormatBase.ColumnFlagHyperlink) != 0, + SupportsCompressedUnicode = (rawExt & JetFormatBase.ColumnExtFlagCompressedUnicode) != 0, + IsCalculated = (rawExt & JetFormatBase.ColumnExtFlagCalculated) != 0, + SystemFlags = s.SystemFlags, + Precision = s.Precision, + Scale = s.Scale, + // Numeric columns carry no collation (their 0x0B/0x0C bytes are precision/scale); every + // other column inherits the database's collating order. + Collation = s.Type == JetDataType.FixedPoint ? Collation.GeneralLegacy : collation, + RawDescriptor = s.RawDescriptor, + }); + } + return columns; + } + + private static void WriteColumnDescriptors(byte[] page, JetFormatBase format, List columns, int columnBlock) + { + for (int i = 0; i < columns.Count; i++) + BuildColumnDescriptor(columns[i], format).CopyTo(page.AsSpan(columnBlock + i * format.ColumnDescriptorSize)); + } + + /// Builds one column's fixed-size (25-byte Jet4) descriptor. Shared by CREATE TABLE and + /// ALTER TABLE ADD COLUMN. + public static byte[] BuildColumnDescriptor(ColumnDef c, JetFormatBase format) + { + // Faithful round-trip: when we have the column's original bytes (a rebuild of a read column that we're + // NOT retyping), start from them and overwrite every field LibRed models, so the only bytes that survive + // untouched are the genuinely reserved/unknown ones — the reserved words 0x03/0x11 and the undocumented + // bits of the two flag bytes. A fresh column (RawDescriptor null — CREATE, ADD COLUMN, or the + // deliberately-retyped ALTER target) builds from zero. + byte[] d = c.RawDescriptor is { } raw && raw.Length == format.ColumnDescriptorSize + ? (byte[])raw.Clone() + : new byte[format.ColumnDescriptorSize]; + d[format.ColumnTypeOffset] = (byte)c.Type; + BinaryPrimitives.WriteUInt16LittleEndian(d.AsSpan(ColumnRecordMarkerOffset, 2), (ushort)JetFormatBase.TdefRecordMarker); + BinaryPrimitives.WriteUInt16LittleEndian(d.AsSpan(format.ColumnNumberOffset, 2), (ushort)c.ColumnId); + // Offset 0x09 stays zero on a fresh column (real DAO/Access files store 0 here, not a duplicate id). + // Offset 7 = variable-table index (count of variable columns with a smaller id), stored on fixed columns + // too. Prefer the precomputed value; fall back to the legacy rule (0 for fixed) when unset (ADD COLUMN). + BinaryPrimitives.WriteUInt16LittleEndian(d.AsSpan(format.ColumnVariableIndexOffset, 2), + (ushort)(c.VariableTableIndex >= 0 ? c.VariableTableIndex : (c.IsFixedLength ? 0 : c.VariableIndex))); + if (c.Type == JetDataType.FixedPoint) + { + d[format.ColumnPrecisionOffset] = c.Precision; + d[format.ColumnScaleOffset] = c.Scale; + } + else + { + // Non-numeric columns store the text-collation LCID in the precision/scale bytes (0x0B/0x0C) and the + // sort-order version as the HIGH byte (0x0E) of the 2-byte field at 0x0D. General legacy is LCID 1033 + // (0x0409), version 0; the Access-2010 "General" order is version 1. The low byte 0x0D is left as-is + // (0 on a fresh column, preserved from the original descriptor otherwise) — see Collation.Version. + BinaryPrimitives.WriteUInt16LittleEndian(d.AsSpan(format.ColumnLocaleOffset, 2), (ushort)c.Collation.Order); + d[format.ColumnCollationVersionOffset + 1] = c.Collation.Version; + } + // Compose the flag byte (0x0F) from EVERY documented bit; only the undocumented bits survive from the + // original (zero in every file observed). Likewise the extended-flag byte (0x10). + byte flags = (byte)( + (c.IsUpdatable ? JetFormatBase.ColumnFlagUpdatable : 0) + | (c.IsFixedLength ? JetFormatBase.ColumnFlagFixedLength : 0) + | (c.IsAutoNumber ? JetFormatBase.ColumnFlagAutoNumber : 0) + | (c.IsGuidAutoNumber ? JetFormatBase.ColumnFlagGuidAutoNumber : 0) + | (c.IsHyperlink ? JetFormatBase.ColumnFlagHyperlink : 0)); + d[format.ColumnFlagsOffset] = (byte)((d[format.ColumnFlagsOffset] & ~JetFormatBase.ColumnFlagsDocumented) | flags | c.SystemFlags); + + byte extFlags = (byte)( + (c.SupportsCompressedUnicode ? JetFormatBase.ColumnExtFlagCompressedUnicode : 0) + | (c.IsCalculated ? JetFormatBase.ColumnExtFlagCalculated : 0)); + d[format.ColumnExtendedFlagsOffset] = (byte)((d[format.ColumnExtendedFlagsOffset] & ~JetFormatBase.ColumnExtFlagsDocumented) | extFlags); + + BinaryPrimitives.WriteUInt16LittleEndian(d.AsSpan(format.ColumnFixedOffsetOffset, 2), (ushort)c.FixedOffset); + BinaryPrimitives.WriteUInt16LittleEndian(d.AsSpan(format.ColumnLengthOffset, 2), (ushort)c.Length); + return d; + } + + private static int WriteColumnNames(byte[] page, JetFormatBase format, List columns, int namePos) + { + _ = format; + foreach (ColumnDef c in columns) + { + byte[] name = Encoding.Unicode.GetBytes(c.Name); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(namePos, 2), (ushort)name.Length); + namePos += 2; + name.CopyTo(page.AsSpan(namePos)); + namePos += name.Length; + } + return namePos; + } +} diff --git a/src/LibRed/LibRed.Core/Catalog/ViewSpec.cs b/src/LibRed/LibRed.Core/Catalog/ViewSpec.cs new file mode 100644 index 00000000..3570c63f --- /dev/null +++ b/src/LibRed/LibRed.Core/Catalog/ViewSpec.cs @@ -0,0 +1,69 @@ +namespace LibRed.Catalog; + +/// Join kind in a view (stored as the MSysQueries join-row flag: inner=1, left=2, right=3). +public enum ViewJoinType { Inner = 1, Left = 2, Right = 3 } + +/// A source in a view's FROM: a named table (), or a derived table whose +/// is the verbatim inner subquery (stored in the MSysQueries table row's +/// Expression instead of Name1, with the alias in Name2). +public sealed record ViewTableSpec(string? Table, string? Alias, string? SubquerySql = null); + +/// A join in a view: kind, verbatim ON condition, and the two tables it joins (from the +/// condition), stored as the join row's Name1/Name2. +public sealed record ViewJoinSpec(ViewJoinType Kind, string Condition, string LeftAlias, string RightAlias); + +/// An output column of a view: its verbatim expression and optional alias (MSysQueries column +/// row Expression + Name1). +public sealed record ViewColumnSpec(string Expression, string? Alias); + +/// A declared parameter of a stored (procedure) query: its name and Jet type code, stored as an +/// MSysQueries Attribute=2 row (Name1 = name, Flag = ). +public sealed record ViewParameterSpec(string Name, byte TypeCode); + +/// An ORDER BY key: verbatim sort expression + direction, stored as an MSysQueries +/// Attribute=0x0B row (Expression = the column, Name1 = "d" when ). +public sealed record ViewOrderBySpec(string Expression, bool Descending); + +/// The kind of stored action query. Access flags the MSysObjects row and the MSysQueries +/// Attribute=0x01 row differently for each. +public enum ActionQueryKind +{ + /// CREATE TABLE / DROP TABLE etc. — the whole SQL text is stored verbatim. + DataDefinition, + /// INSERT INTO … — a target table plus the appended columns. + Append, +} + +/// One appended column of an INSERT query: the target column and the verbatim value/source +/// expression, stored as an Attribute=0x06 row (Name2 = column, Expression = value). +public sealed record AppendColumnSpec(string Column, string ValueExpression); + +/// A stored action query (a CREATE PROCEDURE body that is not a SELECT). A +/// query carries its whole ; an +/// query carries a and its appended +/// (VALUES mode — literal expressions per column). +public sealed record ActionQuerySpec( + ActionQueryKind Kind, + string? DdlSql = null, + string? TargetTable = null, + IReadOnlyList? Values = null); + +/// A stored action query read back from the catalog. is the reconstructed, +/// executable statement when LibRed supports the kind; otherwise it is null and +/// explains why executing it throws. +public sealed record StoredActionQuery(string? Sql, string? UnsupportedReason); + +/// +/// A view's decomposed "simple SELECT" — the columns, source tables, joins and WHERE (all verbatim text) — +/// that Access stores as MSysQueries rows. Aggregates / GROUP BY / HAVING / ORDER BY are not permitted. +/// +public sealed record ViewSpec( + bool Distinct, + IReadOnlyList Columns, + IReadOnlyList Tables, + IReadOnlyList Joins, + string? Where, + IReadOnlyList? GroupBy = null, + IReadOnlyList? Parameters = null, + IReadOnlyList? OrderBy = null, + int? Top = null); diff --git a/src/LibRed/LibRed.Core/Crypto/AccessEncryption.cs b/src/LibRed/LibRed.Core/Crypto/AccessEncryption.cs new file mode 100644 index 00000000..955fa717 --- /dev/null +++ b/src/LibRed/LibRed.Core/Crypto/AccessEncryption.cs @@ -0,0 +1,46 @@ +namespace LibRed.Crypto; + +/// +/// The encryption scheme to apply when setting or changing an Access database password +/// (see ). Not every scheme is valid for every file format — Office +/// Standard/CryptoAPI and Agile apply to .accdb (ACE); legacy Jet applies to .mdb — and +/// rejects mismatches. +/// +public enum AccessEncryption +{ + /// No encryption. Not valid for set/change — use . + None = 0, + + /// Legacy Jet 3/4 page encoding (RC4 keyed by the 0x3E database key). .mdb only. + /// Not a set-scheme here — the legacy Jet database password (obfuscation only) is set via + /// ; RC4 page encoding of a .mdb is not yet a create path. + LegacyJet, + + /// Office "Standard"/CryptoAPI RC4-40 (binary EncryptionInfo descriptor). .accdb only. + OfficeStandardRc4, + + /// Office "Standard"/CryptoAPI AES-256 (binary EncryptionInfo descriptor). .accdb only. + OfficeStandardAes, + + /// ACE Agile encryption (AES-256-CBC / SHA-512, spinCount 100000, XML descriptor). .accdb only. + Agile, +} + +/// +/// The hashing algorithm for Office "Standard"/CryptoAPI RC4 encryption, selectable when creating a password with +/// . Mirrors the CryptoAPI AlgIDHash values Access accepts. +/// MD2/MD4 are intentionally absent (no managed implementation). +/// +public enum StandardHash +{ + /// MD5 (0x8003). Base-provider compatible. + Md5, + /// SHA-1 (0x8004). Base-provider compatible; the Access 2007 default hash. + Sha1, + /// SHA-256 (0x800c). Requires the Enhanced provider / EncryptionEnhancer add-in. + Sha256, + /// SHA-384 (0x800d). Requires the Enhanced provider / EncryptionEnhancer add-in. + Sha384, + /// SHA-512 (0x800e). Requires the Enhanced provider / EncryptionEnhancer add-in. + Sha512, +} diff --git a/src/LibRed/LibRed.Core/Crypto/AgileEncryption.cs b/src/LibRed/LibRed.Core/Crypto/AgileEncryption.cs new file mode 100644 index 00000000..5f8e47c3 --- /dev/null +++ b/src/LibRed/LibRed.Core/Crypto/AgileEncryption.cs @@ -0,0 +1,361 @@ +using System.Buffers.Binary; +using System.Security.Cryptography; +using System.Text; +using System.Xml; +using System.Xml.Linq; + +namespace LibRed.Crypto; + +/// +/// Reads a password-encrypted ACCDB using Office Agile Encryption (MS-OFFCRYPTO §2.3.4) — the +/// scheme Access 2010+ applies on "Set Database Password". Page 0's header stays readable (only base-masked); +/// every subsequent page is AES-CBC encrypted with a per-page IV. +/// +/// +/// The EncryptionInfo XML descriptor lives in page 0 (after the masked header). The data key is +/// recovered from the password + descriptor; each page N is then decrypted with +/// IV = Hash(keyDataSalt ‖ (LE32(N) ⊕ dbEncodingKey)). The ⊕ dbEncodingKey (the 4-byte key at +/// page-0 0x3E) is Access's deviation from stock Agile. Verified byte-for-byte against a real +/// password-protected file (decrypted pages match the unencrypted twin). +/// +public sealed class AgileEncryption : IPageCodec +{ + private const int EncryptionInfoLengthOffset = 0x299; + private const int EncryptionInfoOffset = 0x29B; + private const int SupportedBlockSize = 16; + private const int SupportedKeyBits = 256; + private const int SupportedSpinCount = 100000; + private static ReadOnlySpan AgilePrefix => [0x04, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00]; + + // Block keys that salt the key-derivation for each purpose (MS-OFFCRYPTO §2.3.4.13/§2.3.4.14). + private static readonly byte[] BlockVerifierHashInput = [0xFE, 0xA7, 0xD2, 0x76, 0x3B, 0x4B, 0x9E, 0x79]; + private static readonly byte[] BlockVerifierHashValue = [0xD7, 0xAA, 0x0F, 0x6D, 0x30, 0x61, 0x34, 0x4E]; + private static readonly byte[] BlockKeyValue = [0x14, 0x6E, 0x0B, 0xE7, 0xAB, 0xAC, 0xD0, 0xD6]; + + private readonly byte[] _secretKey; // the data-encryption key + private readonly byte[] _keyDataSalt; + private readonly int _blockSize; + private readonly byte[] _encodingKey; // 4-byte database key (page-0 0x3E) + private readonly HashKind _hash; // the descriptor's hashAlgorithm (also used per-page for the IV) + + private AgileEncryption(byte[] secretKey, byte[] keyDataSalt, int blockSize, byte[] encodingKey, HashKind hash) + { + _secretKey = secretKey; + _keyDataSalt = keyDataSalt; + _blockSize = blockSize; + _encodingKey = encodingKey; + _hash = hash; + } + + /// + /// Builds a codec for an encrypted database, or returns null if is 0 + /// (the file is not encrypted). Throws if the file is encrypted but no/incorrect password is supplied, or if + /// the scheme is not the verified Agile (AES + SHA-512) configuration. + /// + public static AgileEncryption? TryCreate(ReadOnlySpan page0, int databaseKey, string? password) + { + if (databaseKey == 0) + return null; // unencrypted + + // Detection keys off the actual Agile EncryptionInfo descriptor, not merely the nonzero key byte: + // a legacy RC4 scheme (or a synthetic file with an incidental nonzero 0x3E) has no such descriptor + // and is treated as unencrypted here rather than mis-flagged. + XElement? enc = LocateEncryptionInfo(page0); + if (enc is null) + return null; + if (password is null) + throw new InvalidOperationException("This database is password-encrypted; a password is required to open it."); + + try + { + XElement keyData = Child(enc, "keyData"); + XElement encKey = enc.Descendants().First(e => e.Name.LocalName == "encryptedKey"); + + RequireAes(keyData, encKey); + HashKind hash = ParseHash((string)encKey.Attribute("hashAlgorithm")!); + + byte[] keyDataSalt = B64(keyData, "saltValue"); + int blockSize = IntAttribute(keyData, "blockSize"); + + byte[] pwdSalt = B64(encKey, "saltValue"); + int spinCount = IntAttribute(encKey, "spinCount"); + int keyBits = IntAttribute(encKey, "keyBits"); + int keyBytes = keyBits / 8; + + ValidateSupportedProfile(keyData, encKey, hash, blockSize, keyBits, spinCount); + RequireLength(keyDataSalt, 16, "keyData saltValue"); + RequireLength(pwdSalt, 16, "encryptedKey saltValue"); + + // Cross-check the descriptor's declared sizes against reality: the salt bytes must be saltSize long, the + // hash must match hashSize, and both elements must name the same hash. A disagreement means a malformed or + // misparsed descriptor — fail here with a clear message rather than deep in the KDF. + VerifyDeclaredSizes(keyData, hash, keyDataSalt.Length); + VerifyDeclaredSizes(encKey, hash, pwdSalt.Length); + + // H_spin = Hash(salt ‖ UTF16LE(password)), then spinCount iterations of Hash(LE32(i) ‖ H). + byte[] hspin = Hash(hash, pwdSalt, Encoding.Unicode.GetBytes(password)); + Span iter = stackalloc byte[4]; + for (int i = 0; i < spinCount; i++) + { + BinaryPrimitives.WriteInt32LittleEndian(iter, i); + hspin = Hash(hash, iter.ToArray(), hspin); + } + + byte[] DeriveKey(byte[] blockKey) => Fit(Hash(hash, hspin, blockKey), keyBytes); + + // Verify the password before trusting anything: SHA(verifierInput) must equal verifierValue. + byte[] encryptedVerifierInput = B64(encKey, "encryptedVerifierHashInput"); + byte[] encryptedVerifierValue = B64(encKey, "encryptedVerifierHashValue"); + byte[] encryptedKeyValue = B64(encKey, "encryptedKeyValue"); + RequireLength(encryptedVerifierInput, SupportedBlockSize, "encryptedVerifierHashInput"); + RequireLength(encryptedVerifierValue, HashSize(hash), "encryptedVerifierHashValue"); + RequireLength(encryptedKeyValue, keyBytes, "encryptedKeyValue"); + + byte[] verifierInput = AesCbcDecrypt(DeriveKey(BlockVerifierHashInput), pwdSalt, encryptedVerifierInput); + byte[] verifierValue = AesCbcDecrypt(DeriveKey(BlockVerifierHashValue), pwdSalt, encryptedVerifierValue); + byte[] check = Hash(hash, verifierInput); + if (!CryptographicOperations.FixedTimeEquals(verifierValue, check)) + throw new UnauthorizedAccessException("Incorrect database password."); + + // Recover the data-encryption key. + byte[] secretKey = AesCbcDecrypt(DeriveKey(BlockKeyValue), pwdSalt, encryptedKeyValue); + + byte[] encodingKey = new byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(encodingKey, databaseKey); + return new AgileEncryption(secretKey, keyDataSalt, blockSize, encodingKey, hash); + } + catch (NotSupportedException) { throw; } + catch (UnauthorizedAccessException) { throw; } + catch (Exception ex) when (ex is InvalidOperationException or ArgumentException or FormatException + or OverflowException or CryptographicException or NullReferenceException or InvalidCastException) + { + throw new NotSupportedException("The Agile EncryptionInfo descriptor is malformed.", ex); + } + } + + /// Generates a fresh Agile EncryptionInfo (AES-256-CBC / SHA-512, spinCount 100000) for a new + /// password: returns the descriptor blob (8-byte version prefix + the XML, to place at page-0 0x29B + /// with its 2-byte length at 0x299) and a codec that encrypts the data pages. This is the read path + /// run forward — generate salts + a random data key, wrap it, and emit the descriptor Access writes. + internal static (byte[] Descriptor, AgileEncryption Codec) Create(string password, int databaseKey) + { + const HashKind hash = HashKind.Sha512; + const int keyBytes = 32, blockSize = 16, spinCount = 100000; + byte[] keyDataSalt = RandomBytes(16), pwdSalt = RandomBytes(16), secretKey = RandomBytes(keyBytes); + + // H_spin = Hash(pwdSalt ‖ UTF16LE(password)), then spinCount folds of Hash(LE32(i) ‖ H). + byte[] hspin = Hash(hash, pwdSalt, Encoding.Unicode.GetBytes(password)); + byte[] iter = new byte[4]; + for (int i = 0; i < spinCount; i++) { BinaryPrimitives.WriteInt32LittleEndian(iter, i); hspin = Hash(hash, iter, hspin); } + byte[] DeriveKey(byte[] blockKey) => Fit(Hash(hash, hspin, blockKey), keyBytes); + + byte[] verifierInput = RandomBytes(16); + byte[] encVerifierInput = AesCbcEncrypt(DeriveKey(BlockVerifierHashInput), pwdSalt, verifierInput); + byte[] encVerifierValue = AesCbcEncrypt(DeriveKey(BlockVerifierHashValue), pwdSalt, Hash(hash, verifierInput)); + byte[] encKeyValue = AesCbcEncrypt(DeriveKey(BlockKeyValue), pwdSalt, secretKey); + + string b64K = Convert.ToBase64String(keyDataSalt), b64P = Convert.ToBase64String(pwdSalt); + string xml = + "" + + "" + + $"" + + "" + + "" + + ""; + + // EncryptionInfo = version 4.4 + flags 0x40 + the UTF-8 XML (verified against a real file). + byte[] descriptor = Concat([0x04, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00], Encoding.UTF8.GetBytes(xml)); + byte[] encodingKey = BitConverter.GetBytes(databaseKey); + return (descriptor, new AgileEncryption(secretKey, keyDataSalt, blockSize, encodingKey, hash)); + } + + private static byte[] AesCbcEncrypt(byte[] key, byte[] iv, byte[] data) + { + using var aes = Aes.Create(); + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.None; + aes.Key = key; + aes.IV = iv.Length == 16 ? iv : Fit(iv, 16); + return aes.EncryptCbc(data, aes.IV, PaddingMode.None); + } + + private static byte[] RandomBytes(int n) { byte[] b = new byte[n]; RandomNumberGenerator.Fill(b); return b; } + + public void DecryptPage(int pageNumber, Span page) => Transform(pageNumber, page, decrypt: true); + + /// Encrypts a page — the inverse of (AES-CBC encrypt with the same + /// per-page IV) — for writing back to an encrypted database. + public void EncryptPage(int pageNumber, Span page) => Transform(pageNumber, page, decrypt: false); + + private void Transform(int pageNumber, Span page, bool decrypt) + { + if (pageNumber == 0) + return; // header page is not encrypted + + // blockKey = LE32(pageNumber) XOR dbEncodingKey; IV = Hash(keyDataSalt ‖ blockKey), truncated to blockSize. + Span blockKey = stackalloc byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(blockKey, pageNumber); + for (int i = 0; i < 4; i++) blockKey[i] ^= _encodingKey[i]; + + byte[] iv = Fit(Hash(_hash, _keyDataSalt, blockKey.ToArray()), _blockSize); + + using var aes = Aes.Create(); + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.None; + aes.Key = _secretKey; + aes.IV = iv; + // Transform in place (length is a whole number of AES blocks — a page). + byte[] result = decrypt ? aes.DecryptCbc(page, iv, PaddingMode.None) : aes.EncryptCbc(page, iv, PaddingMode.None); + result.CopyTo(page); + } + + // --- helpers --- + + private enum HashKind { Sha1, Sha256, Sha384, Sha512 } + + private static XElement? LocateEncryptionInfo(ReadOnlySpan page0) + { + if (page0.Length < EncryptionInfoOffset) + return null; + int length = BinaryPrimitives.ReadUInt16LittleEndian(page0.Slice(EncryptionInfoLengthOffset, 2)); + if (length == 0) + return null; + if (length > page0.Length - EncryptionInfoOffset) + throw new NotSupportedException("The Agile EncryptionInfo descriptor extends past page 0."); + + ReadOnlySpan descriptor = page0.Slice(EncryptionInfoOffset, length); + if (descriptor.Length < AgilePrefix.Length || !descriptor[..AgilePrefix.Length].SequenceEqual(AgilePrefix)) + return null; // a binary Office-Standard descriptor may occupy the same framed field + + try + { + return XDocument.Parse(Encoding.UTF8.GetString(descriptor[AgilePrefix.Length..])).Root; + } + catch (XmlException ex) + { + throw new NotSupportedException("The Agile EncryptionInfo XML descriptor is malformed.", ex); + } + } + + private static XElement Child(XElement parent, string localName) => + parent.Descendants().First(e => e.Name.LocalName == localName); + + private static byte[] B64(XElement el, string attr) => Convert.FromBase64String((string)el.Attribute(attr)!); + + private static int IntAttribute(XElement element, string name) + { + if (!int.TryParse((string?)element.Attribute(name), out int value)) + throw new NotSupportedException($"The Agile descriptor has an invalid {name} value."); + return value; + } + + private static void ValidateSupportedProfile( + XElement keyData, XElement encKey, HashKind hash, int blockSize, int keyBits, int spinCount) + { + if (hash != HashKind.Sha512 + || ParseHash((string)keyData.Attribute("hashAlgorithm")!) != HashKind.Sha512) + throw new NotSupportedException("Only the Access Agile SHA-512 profile is supported."); + if (blockSize != SupportedBlockSize || IntAttribute(encKey, "blockSize") != SupportedBlockSize) + throw new NotSupportedException("Only the Access Agile 16-byte AES block size is supported."); + if (keyBits != SupportedKeyBits || IntAttribute(keyData, "keyBits") != SupportedKeyBits) + throw new NotSupportedException("Only the Access Agile AES-256 profile is supported."); + if (spinCount != SupportedSpinCount) + throw new NotSupportedException("Only the Access Agile 100000-spin profile is supported."); + } + + private static void RequireLength(byte[] value, int expected, string name) + { + if (value.Length != expected) + throw new NotSupportedException( + $"The Agile descriptor {name} is {value.Length} bytes; expected {expected}."); + } + + private static void RequireAes(XElement keyData, XElement encKey) + { + foreach (var el in new[] { keyData, encKey }) + { + if ((string?)el.Attribute("cipherAlgorithm") != "AES" || + (string?)el.Attribute("cipherChaining") != "ChainingModeCBC") + throw new NotSupportedException("Only AES-CBC Agile encryption is supported."); + } + } + + private static int HashSize(HashKind kind) => kind switch + { + HashKind.Sha1 => 20, + HashKind.Sha256 => 32, + HashKind.Sha384 => 48, + HashKind.Sha512 => 64, + _ => throw new NotSupportedException(), + }; + + // Asserts the element's declared saltSize/hashSize/hashAlgorithm agree with the actual salt length and the + // hash we're using. These attributes are redundant with the data, so a mismatch signals corruption/misparse. + private static void VerifyDeclaredSizes(XElement el, HashKind hash, int actualSaltLength) + { + int saltSize = (int)el.Attribute("saltSize")!; + if (saltSize != actualSaltLength) + throw new NotSupportedException($"Agile descriptor saltSize ({saltSize}) disagrees with the salt value length ({actualSaltLength})."); + + int hashSize = (int)el.Attribute("hashSize")!; + if (hashSize != HashSize(hash)) + throw new NotSupportedException($"Agile descriptor hashSize ({hashSize}) disagrees with {hash} ({HashSize(hash)})."); + + if (ParseHash((string)el.Attribute("hashAlgorithm")!) != hash) + throw new NotSupportedException("Agile descriptor hashAlgorithm differs between keyData and encryptedKey."); + } + + private static HashKind ParseHash(string name) => name.Replace("-", "").ToUpperInvariant() switch + { + "SHA1" => HashKind.Sha1, + "SHA256" => HashKind.Sha256, + "SHA384" => HashKind.Sha384, + "SHA512" => HashKind.Sha512, + _ => throw new NotSupportedException($"Unsupported Agile hash algorithm '{name}' (SHA1/256/384/512 supported).") + }; + + private static byte[] Hash(HashKind kind, params byte[][] parts) + { + byte[] all = parts.Length == 1 ? parts[0] : Concat(parts); + return kind switch + { + HashKind.Sha1 => SHA1.HashData(all), + HashKind.Sha256 => SHA256.HashData(all), + HashKind.Sha384 => SHA384.HashData(all), + HashKind.Sha512 => SHA512.HashData(all), + _ => throw new NotSupportedException() + }; + } + + private static byte[] Concat(params byte[][] parts) + { + var result = new byte[parts.Sum(p => p.Length)]; + int o = 0; + foreach (var p in parts) { p.CopyTo(result, o); o += p.Length; } + return result; + } + + /// Truncates a hash to , or pads with 0x36 if it is shorter. + private static byte[] Fit(byte[] hash, int length) + { + if (hash.Length == length) return hash; + var key = new byte[length]; + Array.Fill(key, (byte)0x36); + Array.Copy(hash, key, Math.Min(hash.Length, length)); + return key; + } + + private static byte[] AesCbcDecrypt(byte[] key, byte[] iv, byte[] data) + { + using var aes = Aes.Create(); + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.None; + aes.Key = key; + aes.IV = iv.Length == 16 ? iv : Fit(iv, 16); + return aes.DecryptCbc(data, aes.IV, PaddingMode.None); + } +} diff --git a/src/LibRed/LibRed.Core/Crypto/DatabaseEncryption.cs b/src/LibRed/LibRed.Core/Crypto/DatabaseEncryption.cs new file mode 100644 index 00000000..7d8892ff --- /dev/null +++ b/src/LibRed/LibRed.Core/Crypto/DatabaseEncryption.cs @@ -0,0 +1,309 @@ +using System.Buffers.Binary; +using System.Security.Cryptography; +using System.Text; +using LibRed.Formats; + +namespace LibRed.Crypto; + +/// +/// Sets, removes, and changes the password/encryption of an existing Access database file, in place. +/// Implements every .accdb scheme — Office "Standard"/CryptoAPI (RC4-40, AES-256) and Agile +/// (AES-256-CBC / SHA-512) — plus the legacy Jet 4 (.mdb) database password (password-only obfuscation). +/// The whole file is loaded into memory, transformed, and written back — intended for the typical Access +/// database size, not multi-gigabyte files. +/// +public static class DatabaseEncryption +{ + private const int PageSize = 4096; + private const int KeyOffset = 0x3E; // 4-byte database (encoding) key, XOR-masked by the page-0 header mask + private const int LengthOffset = 0x299; // 2-byte EncryptionInfo blob length (Access's "is encrypted" signal) + private const int DescriptorOffset = 0x29B; // the EncryptionInfo blob itself + + private const int JetPasswordOffset = 0x42; // 40-byte legacy Jet database-password field (header-masked) + private const int JetPasswordSize = 40; // 20 UTF-16LE chars + private const int HeaderDateOffset = 0x72; // 8-byte creation-date OLE double (header-masked) + + /// Encrypts a currently-unencrypted database with a new using + /// . Throws if the file is already encrypted (use ) or the + /// scheme is invalid for the file format. + public static void SetPassword(string path, string password, AccessEncryption scheme) + { + ArgumentException.ThrowIfNullOrEmpty(password); + byte[] file = File.ReadAllBytes(path); + ValidateScheme(scheme, DetectFormat(file)); + if (DecodeDatabaseKey(file) != 0) + throw new InvalidOperationException("Database is already encrypted; use ChangePassword."); + + Encrypt(file, password, scheme); + File.WriteAllBytes(path, file); + } + + /// Decrypts an encrypted database, removing its password. Throws if the file is not encrypted or the + /// password is incorrect. + public static void RemovePassword(string path, string password) + { + byte[] file = File.ReadAllBytes(path); + int dbKey = DecodeDatabaseKey(file); + if (dbKey == 0) + throw new InvalidOperationException("Database is not encrypted."); + + var codec = OpenDecryptor(file, dbKey, password); // validates the password + int pages = file.Length / PageSize; + for (int p = 1; p < pages; p++) + codec.DecryptPage(p, file.AsSpan(p * PageSize, PageSize)); + ClearEncryption(file); + File.WriteAllBytes(path, file); + } + + /// Encrypts a currently-unencrypted .accdb with Office "Standard" RC4, letting the caller pick + /// the (40–128, multiple of 8) and . RC4 is the only Standard + /// cipher a stock/add-in Access reads back; key lengths above 56 bits or SHA-2 hashes require the "Enhanced" + /// provider (the EncryptionEnhancer add-in) to open in Access, though LibRed reads them regardless. + public static void SetPasswordRc4(string path, string password, int keyBits = 40, StandardHash hash = StandardHash.Sha1) + { + ArgumentException.ThrowIfNullOrEmpty(password); + if (keyBits is < 40 or > 128 || keyBits % 8 != 0) + throw new ArgumentOutOfRangeException(nameof(keyBits), "RC4 key length must be 40–128 bits, in multiples of 8."); + + byte[] file = File.ReadAllBytes(path); + if (!DetectFormat(file).IsAccdb) + throw new ArgumentException("Office-Standard encryption requires an .accdb (ACE) database.", nameof(path)); + if (DecodeDatabaseKey(file) != 0) + throw new InvalidOperationException("Database is already encrypted; use ChangePassword."); + + int dbKey = NewDatabaseKey(); + var (descriptor, codec) = OfficeStandardEncryption.CreateRc4(password, keyBits, ToHashName(hash), dbKey); + ApplyEncryption(file, dbKey, descriptor, codec); + File.WriteAllBytes(path, file); + } + + /// Changes the password (and optionally the scheme): decrypt with the old password, then re-encrypt + /// with the new one — exactly remove + set. + public static void ChangePassword(string path, string oldPassword, string newPassword, AccessEncryption scheme) + { + RemovePassword(path, oldPassword); + SetPassword(path, newPassword, scheme); + } + + /// Changes the password to a fresh Office-Standard RC4 encryption with the given key length and hash — + /// decrypt with the old password, then . + public static void ChangePasswordRc4(string path, string oldPassword, string newPassword, int keyBits = 40, StandardHash hash = StandardHash.Sha1) + { + RemovePassword(path, oldPassword); + SetPasswordRc4(path, newPassword, keyBits, hash); + } + + /// Sets the legacy Jet 4 (.mdb) database password — the "Set Database Password" feature, which is + /// password obfuscation only (the data pages stay plaintext; this is not RC4 page encryption). The password + /// (≤20 chars) is stored UTF-16LE at 0x42, XOR-masked with the 32-bit truncation of the creation-date + /// double at 0x72, all within the header-masked region. Verified byte-identical to Access's own output. + public static void SetJetPassword(string path, string password) + { + ArgumentException.ThrowIfNullOrEmpty(password); + if (password.Length > JetPasswordSize / 2) + throw new ArgumentException($"A Jet database password is at most {JetPasswordSize / 2} characters.", nameof(password)); + + byte[] file = File.ReadAllBytes(path); + if (DetectFormat(file).IsAccdb) + throw new ArgumentException("The legacy Jet password applies to .mdb, not .accdb — use SetPassword.", nameof(path)); + + WriteJetPasswordField(file, password); + File.WriteAllBytes(path, file); + } + + /// Removes a legacy Jet 4 (.mdb) database password by clearing the password field (equivalent to + /// setting an empty password). + public static void RemoveJetPassword(string path) + { + byte[] file = File.ReadAllBytes(path); + if (DetectFormat(file).IsAccdb) + throw new ArgumentException("The legacy Jet password applies to .mdb, not .accdb — use RemovePassword.", nameof(path)); + + WriteJetPasswordField(file, ""); // empty password → field encodes the mask alone, decoding back to "" + File.WriteAllBytes(path, file); + } + + // Encodes the password into the header-masked 0x42 field: plaintext = UTF-16LE(password) zero-padded to 40 bytes, + // XORed with the 4-byte little-endian (int)creationDateDouble mask (cycled); the on-disk bytes are that plaintext + // XORed with the page-0 header mask. Reading (jackcess/LibRed) is the exact inverse. + private static void WriteJetPasswordField(byte[] file, string password) + { + ReadOnlySpan hmask = JetFormatBase.PageZeroHeaderMask; + int start = JetFormatBase.PageZeroHeaderMaskStart; + + Span date = stackalloc byte[8]; + for (int i = 0; i < 8; i++) date[i] = (byte)(file[HeaderDateOffset + i] ^ hmask[HeaderDateOffset - start + i]); + Span dateMask = stackalloc byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(dateMask, (int)BitConverter.ToDouble(date)); + + Span field = stackalloc byte[JetPasswordSize]; + field.Clear(); + Encoding.Unicode.GetBytes(password).CopyTo(field); + for (int i = 0; i < JetPasswordSize; i++) + file[JetPasswordOffset + i] = (byte)(field[i] ^ dateMask[i % 4] ^ hmask[JetPasswordOffset - start + i]); + } + + /// Applies legacy Jet 4 (.mdb) page encoding — the "Encode Database" feature — RC4-encrypting + /// every data page with a fresh random database key stored at 0x3E. This is independent of the + /// database password (): a file may carry both (encoding scrambles the pages, the + /// password gates opening). Throws if the file is already encoded, is an .accdb, or is Jet 3. + public static void SetJetEncoding(string path) => SetJetEncoding(path, NewDatabaseKey()); + + // Explicit-key overload (internal): the public API picks a fresh random key; tests use a specific key to + // reproduce a real Access-encoded file byte-for-byte. + internal static void SetJetEncoding(string path, int dbKey) + { + byte[] file = File.ReadAllBytes(path); + RequireJet4Mdb(file); + if (DecodeDatabaseKey(file) != 0) + throw new InvalidOperationException("Database is already encoded."); + + ApplyJetEncoding(file, dbKey); + File.WriteAllBytes(path, file); + } + + /// Removes legacy Jet 4 (.mdb) page encoding — RC4-decrypts every page with the stored + /// 0x3E key and clears it. Leaves any database password (the 0x42 field) untouched. + public static void RemoveJetEncoding(string path) + { + byte[] file = File.ReadAllBytes(path); + RequireJet4Mdb(file); + int dbKey = DecodeDatabaseKey(file); + if (dbKey == 0) + throw new InvalidOperationException("Database is not encoded."); + + var codec = new JetLegacyEncryption(dbKey); + int pages = file.Length / PageSize; + for (int p = 1; p < pages; p++) + codec.DecryptPage(p, file.AsSpan(p * PageSize, PageSize)); + WriteDatabaseKey(file, 0); + File.WriteAllBytes(path, file); + } + + private static void ApplyJetEncoding(byte[] file, int dbKey) + { + WriteDatabaseKey(file, dbKey); // page 0 (header) is never encrypted + var codec = new JetLegacyEncryption(dbKey); + int pages = file.Length / PageSize; + for (int p = 1; p < pages; p++) + codec.EncryptPage(p, file.AsSpan(p * PageSize, PageSize)); + } + + private static void RequireJet4Mdb(byte[] file) + { + if (DetectFormat(file).IsAccdb) + throw new ArgumentException("Legacy Jet encoding applies to .mdb, not .accdb.", nameof(file)); + if (file[0x14] == 0) // version byte: 0 = Jet 3 (2048-byte pages), 1 = Jet 4 + throw new NotSupportedException("Jet 3 (Access 97) page encoding is not supported."); + } + + private static void Encrypt(byte[] file, string password, AccessEncryption scheme) + { + int dbKey = NewDatabaseKey(); + byte[] descriptor; + IPageCodec codec; + switch (scheme) + { + case AccessEncryption.Agile: (descriptor, codec) = AgileEncryption.Create(password, dbKey); break; + case AccessEncryption.OfficeStandardAes: (descriptor, codec) = OfficeStandardEncryption.Create(password, aes: true, dbKey); break; + case AccessEncryption.OfficeStandardRc4: (descriptor, codec) = OfficeStandardEncryption.Create(password, aes: false, dbKey); break; + default: throw new ArgumentOutOfRangeException(nameof(scheme)); + } + ApplyEncryption(file, dbKey, descriptor, codec); + } + + private static int NewDatabaseKey() + { + int dbKey = BinaryPrimitives.ReadInt32LittleEndian(RandomBytes(4)); + return dbKey == 0 ? 1 : dbKey; // 0 would read back as "unencrypted" + } + + // Writes the database key, the 0x299 length signal + descriptor, and encrypts every data page. + private static void ApplyEncryption(byte[] file, int dbKey, byte[] descriptor, IPageCodec codec) + { + WriteDatabaseKey(file, dbKey); + BinaryPrimitives.WriteUInt16LittleEndian(file.AsSpan(LengthOffset, 2), (ushort)descriptor.Length); + descriptor.CopyTo(file, DescriptorOffset); + + int pages = file.Length / PageSize; + for (int p = 1; p < pages; p++) + codec.EncryptPage(p, file.AsSpan(p * PageSize, PageSize)); + } + + private static HashAlgorithmName ToHashName(StandardHash hash) => hash switch + { + StandardHash.Md5 => HashAlgorithmName.MD5, + StandardHash.Sha1 => HashAlgorithmName.SHA1, + StandardHash.Sha256 => HashAlgorithmName.SHA256, + StandardHash.Sha384 => HashAlgorithmName.SHA384, + StandardHash.Sha512 => HashAlgorithmName.SHA512, + _ => throw new ArgumentOutOfRangeException(nameof(hash)), + }; + + private static void ClearEncryption(byte[] file) + { + int blobLen = BinaryPrimitives.ReadUInt16LittleEndian(file.AsSpan(LengthOffset, 2)); + Array.Clear(file, LengthOffset, 2 + blobLen); // the length signal + the descriptor + WriteDatabaseKey(file, 0); // decodes back to 0 = unencrypted + } + + private static IPageCodec OpenDecryptor(byte[] file, int dbKey, string password) + { + var page0 = file.AsSpan(0, PageSize); + IPageCodec? codec = DetectFormat(file).IsAccdb + ? (IPageCodec?)AgileEncryption.TryCreate(page0, dbKey, password) + ?? OfficeStandardEncryption.TryCreate(page0, dbKey, password) + : JetLegacyEncryption.TryCreate(dbKey); + return codec ?? throw new InvalidOperationException("Unrecognised or unsupported encryption scheme."); + } + + private static void ValidateScheme(AccessEncryption scheme, JetFormatBase format) + { + switch (scheme) + { + case AccessEncryption.OfficeStandardRc4: + case AccessEncryption.OfficeStandardAes: + if (!format.IsAccdb) + throw new ArgumentException($"{scheme} requires an .accdb (ACE) database.", nameof(scheme)); + break; + case AccessEncryption.Agile: + if (!format.IsAccdb) + throw new ArgumentException("Agile encryption requires an .accdb (ACE) database.", nameof(scheme)); + break; + case AccessEncryption.LegacyJet: + if (format.IsAccdb) + throw new ArgumentException("Legacy Jet encryption applies to .mdb, not .accdb.", nameof(scheme)); + throw new NotSupportedException("Legacy Jet set-password is not yet implemented."); + case AccessEncryption.None: + throw new ArgumentException("Use RemovePassword to remove encryption.", nameof(scheme)); + default: + throw new ArgumentOutOfRangeException(nameof(scheme)); + } + } + + private static JetFormatBase DetectFormat(byte[] file) + { + using var ms = new MemoryStream(file, writable: false); + return JetFormatBase.Detect(ms); + } + + private static int DecodeDatabaseKey(byte[] file) + { + ReadOnlySpan mask = JetFormatBase.PageZeroHeaderMask; + int start = JetFormatBase.PageZeroHeaderMaskStart; + Span key = stackalloc byte[4]; + for (int i = 0; i < 4; i++) key[i] = (byte)(file[KeyOffset + i] ^ mask[KeyOffset - start + i]); + return BinaryPrimitives.ReadInt32LittleEndian(key); + } + + private static void WriteDatabaseKey(byte[] file, int dbKey) + { + ReadOnlySpan mask = JetFormatBase.PageZeroHeaderMask; + int start = JetFormatBase.PageZeroHeaderMaskStart; + Span k = stackalloc byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(k, dbKey); + for (int i = 0; i < 4; i++) file[KeyOffset + i] = (byte)(k[i] ^ mask[KeyOffset - start + i]); + } + + private static byte[] RandomBytes(int n) { byte[] b = new byte[n]; RandomNumberGenerator.Fill(b); return b; } +} diff --git a/src/LibRed/LibRed.Core/Crypto/IPageCodec.cs b/src/LibRed/LibRed.Core/Crypto/IPageCodec.cs new file mode 100644 index 00000000..07eb6088 --- /dev/null +++ b/src/LibRed/LibRed.Core/Crypto/IPageCodec.cs @@ -0,0 +1,17 @@ +namespace LibRed.Crypto; + +/// +/// Encrypts/decrypts database pages in place. Page 0 (the database definition page) is never page-encrypted +/// and must be a no-op for both directions. Implemented per encryption scheme (legacy Jet 3/4 RC4, ACE Agile, +/// Office Standard/CryptoAPI). is the exact inverse of , so +/// for a stream cipher (RC4) the two are the same operation. +/// +public interface IPageCodec +{ + /// Decrypts (a full page) in place. No-op for page 0. + void DecryptPage(int pageNumber, Span page); + + /// Encrypts (a full page) in place — the inverse of + /// , used when writing a page back to disk. No-op for page 0. + void EncryptPage(int pageNumber, Span page); +} diff --git a/src/LibRed/LibRed.Core/Crypto/JetLegacyEncryption.cs b/src/LibRed/LibRed.Core/Crypto/JetLegacyEncryption.cs new file mode 100644 index 00000000..dda20daf --- /dev/null +++ b/src/LibRed/LibRed.Core/Crypto/JetLegacyEncryption.cs @@ -0,0 +1,60 @@ +using System.Buffers.Binary; + +namespace LibRed.Crypto; + +/// +/// The legacy Jet 3/4 engine-level page encryption (pre-ACE). Every page except page 0 is RC4-encrypted with a +/// per-page key of LE32(pageNumber XOR databaseKey), where databaseKey is the 4-byte value at +/// page-0 0x3E. Unlike ACE Agile encryption there is no password or key-derivation step — the database +/// key in the header is the whole secret. This is what protects the account/password data in a workgroup file +/// (System.mdw, which always carries a nonzero database key) and is also used by password-protected +/// .mdb files. +/// +/// +/// Verified against a real System.mdw (databaseKey 0xABBB315C): with this key every page decrypts +/// to a valid page-type byte (page 1 → 0x01 data, page 2/3 → 0x02 TDEF, index pages → 0x04), +/// and the XOR (not ADD) page-number mixing is the one that yields valid types on pages where the two differ. +/// Same per-page key derivation as (LE32(pageNumber) XOR encodingKey), just +/// feeding RC4 directly rather than an AES IV. +/// +public sealed class JetLegacyEncryption : IPageCodec +{ + private readonly int _databaseKey; + + public JetLegacyEncryption(int databaseKey) => _databaseKey = databaseKey; + + /// Returns a codec when is nonzero (an encrypted Jet 3/4 file), else null. + public static JetLegacyEncryption? TryCreate(int databaseKey) => databaseKey == 0 ? null : new JetLegacyEncryption(databaseKey); + + public void DecryptPage(int pageNumber, Span page) + { + if (pageNumber == 0) + return; // header page is never encrypted + + Span key = stackalloc byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(key, pageNumber ^ _databaseKey); + Rc4(key, page); + } + + // RC4 is a symmetric XOR keystream, so encryption is the identical operation. + public void EncryptPage(int pageNumber, Span page) => DecryptPage(pageNumber, page); + + /// Standard RC4: KSA then PRGA, XOR'ing the keystream over in place. + private static void Rc4(ReadOnlySpan key, Span data) + { + Span s = stackalloc byte[256]; + for (int i = 0; i < 256; i++) s[i] = (byte)i; + for (int i = 0, j = 0; i < 256; i++) + { + j = (j + s[i] + key[i % key.Length]) & 0xFF; + (s[i], s[j]) = (s[j], s[i]); + } + for (int n = 0, a = 0, b = 0; n < data.Length; n++) + { + a = (a + 1) & 0xFF; + b = (b + s[a]) & 0xFF; + (s[a], s[b]) = (s[b], s[a]); + data[n] ^= s[(s[a] + s[b]) & 0xFF]; + } + } +} diff --git a/src/LibRed/LibRed.Core/Crypto/OfficeStandardEncryption.cs b/src/LibRed/LibRed.Core/Crypto/OfficeStandardEncryption.cs new file mode 100644 index 00000000..e879bbef --- /dev/null +++ b/src/LibRed/LibRed.Core/Crypto/OfficeStandardEncryption.cs @@ -0,0 +1,420 @@ +using System.Buffers.Binary; +using System.Security.Cryptography; +using System.Text; + +namespace LibRed.Crypto; + +/// +/// Office "Standard"/CryptoAPI encryption (MS-OFFCRYPTO §2.3.4/§2.3.5) as Access applies it to an +/// .accdb — the pre-Agile scheme carried by a binary EncryptionInfo header (version x.2), +/// covering RC4-CryptoAPI and the AES "non-standard" variant. Distinct from ACE Agile (XML descriptor, +/// ) and legacy Jet RC4 (). +/// +/// +/// Algorithm verified against the jackcess-encrypt providers and real fixtures (db2007-oldenc = RC4-40 / +/// Test123; db-nonstandard = AES-256 / password): +/// +/// baseHash = SHA1(salt ‖ UTF16LE(password)). +/// per-block key: iterHash = iterate(baseHash, iterations) (0 iterations for RC4-CryptoAPI and the +/// AES "non-standard" variant; 50000 for ECMA-standard AES); H = SHA1(iterHash ‖ block); then AES uses the +/// 0x36/0x5C expansion key = (SHA1(0x36pad⊕H) ‖ SHA1(0x5Cpad⊕H))[0..keyLen] while RC4 uses +/// key = H[0..keyLen] (a 40-bit RC4 key is then zero-padded to 16 bytes). +/// verifier block = LE32(0); per-page block = LE32(pageNumber) XOR encodingKey (the 4-byte +/// database key at page-0 0x3E). +/// cipher: RC4 (stream, re-keyed per page; the verifier + verifier-hash decrypt as one continuous stream) +/// or AES-ECB. +/// +/// +public sealed class OfficeStandardEncryption : IPageCodec +{ + private const uint AlgIdRc4 = 0x6801; + private const int VerifierBlock = 0; + + private readonly bool _rc4; + private readonly HashAlgorithmName _hashName; // hashing algorithm from AlgIDHash (MD5/SHA-1/256/384/512) + private readonly byte[] _baseHash; + private readonly int _iterations; + private readonly int _truncateLen; // logical key length in bytes derived from the hash (5 for RC4-40, 32 for AES-256) + private readonly int _finalLen; // actual cipher key length (RC4 <128-bit keys are zero-padded to 16 bytes) + private readonly byte[] _encodingKey; // 4-byte database key (page-0 0x3E) + + private readonly bool _aesExpand; // AES: apply the CryptDeriveKey 0x36/0x5C expansion vs. use the truncated hash + + private OfficeStandardEncryption(bool rc4, HashAlgorithmName hashName, byte[] baseHash, int iterations, int truncateLen, int finalLen, bool aesExpand, byte[] encodingKey) + { + _rc4 = rc4; _hashName = hashName; _baseHash = baseHash; _iterations = iterations; _truncateLen = truncateLen; _finalLen = finalLen; _aesExpand = aesExpand; _encodingKey = encodingKey; + } + + // AlgIDHash → (.NET hash algorithm, unencrypted-hash length in bytes). Access/the CryptoAPI let the encrypting + // tool pick the hashing algorithm independently of the cipher; MD2/MD4 (0x8001/0x8002) have no managed + // implementation and are not produced by Access, so they surface as "unsupported" rather than a crash. + private static (HashAlgorithmName Name, int Len)? MapHash(uint algIdHash) => algIdHash switch + { + 0x8003 => (HashAlgorithmName.MD5, 16), + 0x8004 => (HashAlgorithmName.SHA1, 20), + 0x800c => (HashAlgorithmName.SHA256, 32), + 0x800d => (HashAlgorithmName.SHA384, 48), + 0x800e => (HashAlgorithmName.SHA512, 64), + _ => null, + }; + + // Reverse of MapHash: the CALG_* AlgIDHash to write into a descriptor for a given .NET hash. + private static uint HashAlgId(HashAlgorithmName name) => name.Name switch + { + "MD5" => 0x8003, + "SHA1" => 0x8004, + "SHA256" => 0x800c, + "SHA384" => 0x800d, + "SHA512" => 0x800e, + _ => throw new NotSupportedException($"Unsupported Office-Standard hash {name}."), + }; + + private static byte[] Hash(HashAlgorithmName name, byte[] data) => name.Name switch + { + "MD5" => MD5.HashData(data), + "SHA1" => SHA1.HashData(data), + "SHA256" => SHA256.HashData(data), + "SHA384" => SHA384.HashData(data), + "SHA512" => SHA512.HashData(data), + _ => throw new NotSupportedException($"Unsupported hash algorithm {name}."), + }; + + // The CryptoAPI CryptDeriveKey 0x36/0x5C expansion uses a fixed 64-byte pad buffer for every hash algorithm + // (it is not HMAC, so SHA-384/512 do NOT switch to their 128-byte block size). Verified: AES-256 + SHA-512. + private const int DeriveKeyPadSize = 64; + + /// Builds a codec for an .accdb that uses a binary (non-Agile) EncryptionInfo descriptor, or + /// null if the file is not encrypted / carries no such descriptor. Throws if a password is required/incorrect. + public static OfficeStandardEncryption? TryCreate(ReadOnlySpan page0, int databaseKey, string? password) + { + if (databaseKey == 0) + return null; + + int ei = LocateBinaryEncryptionInfo(page0); + if (ei < 0) + return null; + if (password is null) + throw new InvalidOperationException("This database is password-encrypted; a password is required to open it."); + + int headerSize = BinaryPrimitives.ReadInt32LittleEndian(page0.Slice(ei + 8, 4)); + int h = ei + 12; + uint algId = BinaryPrimitives.ReadUInt32LittleEndian(page0.Slice(h + 8, 4)); + uint algIdHash = BinaryPrimitives.ReadUInt32LittleEndian(page0.Slice(h + 12, 4)); + int keyBits = BinaryPrimitives.ReadInt32LittleEndian(page0.Slice(h + 16, 4)); + + bool rc4 = algId == AlgIdRc4; + // We've committed to a binary EncryptionInfo descriptor (dbKey != 0 + located header). Anything we can't + // honour is a genuinely unsupported/invalid file (e.g. Access rejects AES/3DES combos with certain hashes), + // so throw a clear error rather than falling through to read ciphertext as plaintext. + if (!rc4 && algId is not (0x660E or 0x660F or 0x6610)) + throw new NotSupportedException($"Unsupported Office-Standard cipher AlgID 0x{algId:X4}."); + if (MapHash(algIdHash) is not var (hashName, hashLength)) + throw new NotSupportedException($"Unsupported Office-Standard hash AlgID 0x{algIdHash:X4}."); + if (keyBits != 0 && (rc4 + ? keyBits is < 40 or > 128 || keyBits % 8 != 0 + : keyBits is not (128 or 192 or 256))) + throw new NotSupportedException( + $"Unsupported Office-Standard {(rc4 ? "RC4" : "AES")} key size {keyBits} bits."); + + int v = h + headerSize; // EncryptionVerifier + int saltSize = BinaryPrimitives.ReadInt32LittleEndian(page0.Slice(v, 4)); + if (saltSize != 16) + throw new NotSupportedException($"Unsupported Office-Standard salt size {saltSize}; expected 16 bytes."); + byte[] salt = page0.Slice(v + 4, saltSize).ToArray(); + byte[] encVerifier = page0.Slice(v + 4 + saltSize, 16).ToArray(); + int verifierHashSize = BinaryPrimitives.ReadInt32LittleEndian(page0.Slice(v + 4 + saltSize + 16, 4)); + if (verifierHashSize != hashLength) + throw new NotSupportedException( + $"Office-Standard verifier hash size {verifierHashSize} does not match {hashName.Name} ({hashLength} bytes)."); + int encHashLen = rc4 ? verifierHashSize : (verifierHashSize + 15) / 16 * 16; // RC4: raw hash; AES: padded to block + byte[] encVerifierHash = page0.Slice(v + 4 + saltSize + 16 + 4, encHashLen).ToArray(); + + byte[] baseHash = Hash(hashName, Concat(salt, Encoding.Unicode.GetBytes(password))); + byte[] encodingKey = BitConverter.GetBytes(databaseKey); + + // Try each plausible (key length, RC4 pad, iteration count) combination and keep whichever authenticates — + // KeySize == 0 means "the algorithm default" (which the descriptor doesn't spell out), RC4 keys shorter than + // 128 bits are zero-padded to 16 bytes by the base provider, and AES may be ECMA-standard (50000 iterations) + // or the "non-standard" 0-iteration variant. The verifier disambiguates all of them. + foreach ((int truncateLen, int finalLen) in KeyCandidates(rc4, keyBits)) + foreach (int iterations in rc4 ? [0] : new[] { 0, 50000 }) + foreach (bool aesExpand in rc4 ? [false] : new[] { false, true }) + { + var codec = new OfficeStandardEncryption(rc4, hashName, baseHash, iterations, truncateLen, finalLen, aesExpand, encodingKey); + if (codec.VerifyPassword(encVerifier, encVerifierHash, verifierHashSize)) + return codec; + } + throw new UnauthorizedAccessException("Incorrect database password."); + } + + // Candidate (truncate, final) key lengths in bytes. keyBits > 0 is authoritative; keyBits == 0 ("default") is + // resolved by trying the standard defaults. RC4 keys < 16 bytes are also tried zero-padded to 16 (the base + // CryptoAPI provider's exportable-key behaviour); the caller's verifier check selects the real one. + private static IEnumerable<(int Truncate, int Final)> KeyCandidates(bool rc4, int keyBits) + { + int[] lens = keyBits > 0 ? [keyBits / 8] : rc4 ? [5, 16] : [16, 24, 32]; + foreach (int len in lens) + { + yield return (len, len); + if (rc4 && len < 16) + yield return (len, 16); + } + } + + /// Generates a fresh Office-Standard EncryptionInfo for a new password: returns the + /// descriptor blob (to place at page-0 0x29B, with its 2-byte length at 0x299) and a codec that + /// encrypts the data pages. selects AES-256 (the 0-iteration variant Access accepts on + /// a created file) vs RC4-40; is a fresh random 0x3E key. + internal static (byte[] Descriptor, OfficeStandardEncryption Codec) Create(string password, bool aes, int databaseKey) + { + uint algId = aes ? 0x6610u : AlgIdRc4; + int keyBits = aes ? 256 : 40; + byte[] salt = RandomBytes(16); + byte[] baseHash = SHA1.HashData(Concat(salt, Encoding.Unicode.GetBytes(password))); + int keyLen = keyBits / 8; + int finalLen = !aes && keyBits == 40 ? 16 : keyLen; + // AES-256 (32 bytes) from SHA-1 (20 bytes) needs the 0x36/0x5C expansion; RC4 never expands. + var codec = new OfficeStandardEncryption(!aes, HashAlgorithmName.SHA1, baseHash, 0, keyLen, finalLen, aesExpand: aes, BitConverter.GetBytes(databaseKey)); + + byte[] verKey = codec.ComputeKey(VerifierBlock); + byte[] verifier = RandomBytes(16); + byte[] verifierHash = SHA1.HashData(verifier); + byte[] encVerifier, encVerifierHash; + if (aes) + { + encVerifier = AesEcbEncrypt(verKey, verifier); + encVerifierHash = AesEcbEncrypt(verKey, Fix(verifierHash, 32)); // pad the 20-byte hash to a cipher block + } + else + { + byte[] stream = Concat(verifier, verifierHash); // one continuous RC4 stream + Rc4(verKey, stream); + encVerifier = stream[..16]; + encVerifierHash = stream[16..]; + } + + var (provType, csp) = Provider(aes, keyBits, HashAlgorithmName.SHA1); + return (BuildDescriptor(algId, 0x8004, aes ? 0x0Cu : 0x04u, keyBits, provType, csp, salt, encVerifier, encVerifierHash, 20), codec); + } + + /// Generates a fresh Office-Standard RC4 EncryptionInfo with a caller-chosen key length + /// (, 40–128) and hashing algorithm (). RC4 is the only Standard + /// cipher a stock/add-in Access reads back; AES-Standard is exposed only via the AES path. + internal static (byte[] Descriptor, OfficeStandardEncryption Codec) CreateRc4(string password, int keyBits, HashAlgorithmName hash, int databaseKey) + { + byte[] salt = RandomBytes(16); + byte[] baseHash = Hash(hash, Concat(salt, Encoding.Unicode.GetBytes(password))); + int keyLen = keyBits / 8; + int finalLen = keyBits == 40 ? 16 : keyLen; // 40-bit is the one length the base provider zero-pads to 128 + var codec = new OfficeStandardEncryption(rc4: true, hash, baseHash, 0, keyLen, finalLen, aesExpand: false, BitConverter.GetBytes(databaseKey)); + + byte[] verKey = codec.ComputeKey(VerifierBlock); + byte[] verifier = RandomBytes(16); + byte[] verifierHash = Hash(hash, verifier); + byte[] stream = Concat(verifier, verifierHash); // one continuous RC4 stream + Rc4(verKey, stream); + + var (provType, csp) = Provider(aes: false, keyBits, hash); + return (BuildDescriptor(AlgIdRc4, HashAlgId(hash), 0x04u, keyBits, provType, csp, salt, stream[..16], stream[16..], verifierHash.Length), codec); + } + + // Picks the (ProviderType, CSP name) pair the way the CryptoAPI does: the Base provider handles RC4 ≤56-bit with + // MD-family/SHA-1 hashes; larger keys or SHA-2 hashes require the Enhanced RSA/AES provider ("enhanced mode"). + private static (uint ProviderType, string Csp) Provider(bool aes, int keyBits, HashAlgorithmName hash) + { + bool sha2 = hash.Name is "SHA256" or "SHA384" or "SHA512"; + bool enhanced = aes || keyBits > 56 || sha2; + return enhanced + ? (0x18u, "Microsoft Enhanced RSA and AES Cryptographic Provider") + : (0x01u, "Microsoft Base Cryptographic Provider v1.0"); + } + + // Builds the binary EncryptionInfo (version 4.2 + EncryptionHeader incl. ProviderType + CSP name + + // EncryptionVerifier) byte-for-byte as Access writes it (verified against real files). + private static byte[] BuildDescriptor(uint algId, uint algIdHash, uint flags, int keyBits, uint providerType, string csp, + byte[] salt, byte[] encVerifier, byte[] encVerifierHash, int verifierHashSize) + { + byte[] cspBytes = Concat(Encoding.Unicode.GetBytes(csp), new byte[2]); // null-terminated UTF-16LE + + var b = new List(); + void U16(ushort x) => b.AddRange(BitConverter.GetBytes(x)); + void U32(uint x) => b.AddRange(BitConverter.GetBytes(x)); + + int headerSize = 8 * 4 + cspBytes.Length; // Flags,SizeExtra,AlgID,AlgIDHash,KeySize,ProviderType,Reserved1,Reserved2 + CSP + U16(4); U16(2); // EncryptionVersionInfo 4.2 + U32(flags); // EncryptionInfo flags + U32((uint)headerSize); + U32(flags); U32(0); U32(algId); U32(algIdHash); U32((uint)keyBits); U32(providerType); U32(0); U32(0); + b.AddRange(cspBytes); + // EncryptionVerifier + U32((uint)salt.Length); b.AddRange(salt); + b.AddRange(encVerifier); + U32((uint)verifierHashSize); b.AddRange(encVerifierHash); + return b.ToArray(); + } + + private static byte[] AesEcbEncrypt(byte[] key, byte[] data) + { + using var aes = Aes.Create(); + aes.Mode = CipherMode.ECB; + aes.Padding = PaddingMode.None; + aes.Key = key; + return aes.EncryptEcb(data, PaddingMode.None); + } + + private static byte[] RandomBytes(int n) { byte[] b = new byte[n]; RandomNumberGenerator.Fill(b); return b; } + + private bool VerifyPassword(byte[] encVerifier, byte[] encVerifierHash, int hashSize) + { + byte[] key = ComputeKey(VerifierBlock); + byte[] verifier, storedHash; + if (_rc4) + { + // one continuous RC4 stream over verifier(16) ‖ verifierHash + byte[] stream = Concat(encVerifier, encVerifierHash); + Rc4(key, stream); + verifier = stream[..16]; + storedHash = stream[16..]; + } + else + { + verifier = AesEcb(key, encVerifier); + storedHash = AesEcb(key, encVerifierHash); + } + byte[] computed = Hash(_hashName, verifier); + return computed.Length == hashSize && storedHash.Length >= hashSize + && CryptographicOperations.FixedTimeEquals(computed, storedHash.AsSpan(0, hashSize)); + } + + public void DecryptPage(int pageNumber, Span page) => Transform(pageNumber, page, decrypt: true); + + // RC4 is symmetric; AES-ECB uses the encrypt direction when writing. + public void EncryptPage(int pageNumber, Span page) => Transform(pageNumber, page, decrypt: false); + + private void Transform(int pageNumber, Span page, bool decrypt) + { + if (pageNumber == 0) + return; + + // block = LE32(pageNumber) XOR encodingKey + Span block = stackalloc byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(block, pageNumber); + for (int i = 0; i < 4; i++) block[i] ^= _encodingKey[i]; + + byte[] key = ComputeKey(BinaryPrimitives.ReadInt32LittleEndian(block)); + if (_rc4) + Rc4(key, page); // symmetric + else + AesEcbInPlace(key, page, decrypt); + } + + private byte[] ComputeKey(int block) + { + byte[] iterHash = _baseHash; + if (_iterations > 0) + { + Span it = stackalloc byte[4]; + for (int i = 0; i < _iterations; i++) + { + BinaryPrimitives.WriteInt32LittleEndian(it, i); + iterHash = Hash(_hashName, Concat(it.ToArray(), iterHash)); + } + } + byte[] blk = new byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(blk, block); + byte[] hf = Hash(_hashName, Concat(iterHash, blk)); + + // RC4 keys are always the truncated hash. AES either uses the truncated hash or the CryptDeriveKey + // 0x36/0x5C expansion — the choice does not follow a clean keyLen-vs-hashLen rule (AES-128 from MD5 (16==16) + // expands, yet AES-256 from SHA-256 (32==32) truncates), so both are tried and the verifier selects. + byte[] derived = !_rc4 && _aesExpand ? Concat(GenX(hf, 0x36), GenX(hf, 0x5C)) : hf; + byte[] key = Fix(derived, _truncateLen); + return _finalLen != _truncateLen ? Fix(key, _finalLen) : key; + } + + // --- helpers --- + + private byte[] GenX(byte[] hf, byte pad) + { + byte[] buf = new byte[DeriveKeyPadSize]; + Array.Fill(buf, pad); + for (int i = 0; i < hf.Length; i++) buf[i] ^= hf[i]; + return Hash(_hashName, buf); + } + + private static int LocateBinaryEncryptionInfo(ReadOnlySpan page0) + { + // A binary EncryptionInfo begins: uint16 major, uint16 minor(=2 for standard/CryptoAPI), uint32 flags + // (fCryptoAPI=0x04 set), uint32 headerSize. Validate against a known cipher AlgID to avoid false hits. + for (int i = 0x100; i + 32 < page0.Length && i < 0x400; i++) + { + ushort major = BinaryPrimitives.ReadUInt16LittleEndian(page0.Slice(i, 2)); + ushort minor = BinaryPrimitives.ReadUInt16LittleEndian(page0.Slice(i + 2, 2)); + uint flags = BinaryPrimitives.ReadUInt32LittleEndian(page0.Slice(i + 4, 2 + 2)); + int headerSize = BinaryPrimitives.ReadInt32LittleEndian(page0.Slice(i + 8, 4)); + if (major is < 2 or > 4 || minor != 2 || (flags & 0x04) == 0 || headerSize is <= 0 or > 512) + continue; + // Recognise the descriptor by a CALG_* cipher id (0x66xx block ciphers, 0x68xx stream). This covers the + // ciphers we support (RC4, AES-128/192/256) *and* ones we don't (e.g. 3DES 0x6603) so those surface as a + // clean "unsupported" error in TryCreate instead of being mistaken for an unencrypted file. + uint algId = BinaryPrimitives.ReadUInt32LittleEndian(page0.Slice(i + 12 + 8, 4)); + if ((algId & 0xFF00) is 0x6600 or 0x6800) + return i; + } + return -1; + } + + private static byte[] AesEcb(byte[] key, byte[] data) + { + using var aes = Aes.Create(); + aes.Mode = CipherMode.ECB; + aes.Padding = PaddingMode.None; + aes.Key = key; + return aes.DecryptEcb(data, PaddingMode.None); + } + + private static void AesEcbInPlace(byte[] key, Span page, bool decrypt) + { + using var aes = Aes.Create(); + aes.Mode = CipherMode.ECB; + aes.Padding = PaddingMode.None; + aes.Key = key; + int len = page.Length - page.Length % 16; + byte[] result = decrypt ? aes.DecryptEcb(page[..len], PaddingMode.None) : aes.EncryptEcb(page[..len], PaddingMode.None); + result.CopyTo(page); + } + + private static void Rc4(ReadOnlySpan key, Span data) + { + Span s = stackalloc byte[256]; + for (int i = 0; i < 256; i++) s[i] = (byte)i; + for (int i = 0, j = 0; i < 256; i++) + { + j = (j + s[i] + key[i % key.Length]) & 0xFF; + (s[i], s[j]) = (s[j], s[i]); + } + for (int n = 0, a = 0, b = 0; n < data.Length; n++) + { + a = (a + 1) & 0xFF; + b = (b + s[a]) & 0xFF; + (s[a], s[b]) = (s[b], s[a]); + data[n] ^= s[(s[a] + s[b]) & 0xFF]; + } + } + + private static byte[] Fix(byte[] b, int len) + { + if (b.Length == len) return b; + byte[] r = new byte[len]; + Array.Copy(b, r, Math.Min(b.Length, len)); + return r; + } + + private static byte[] Concat(byte[] a, byte[] b) + { + byte[] r = new byte[a.Length + b.Length]; + a.CopyTo(r, 0); + b.CopyTo(r, a.Length); + return r; + } +} diff --git a/src/LibRed/LibRed.Core/Formats/CatalogFormat.cs b/src/LibRed/LibRed.Core/Formats/CatalogFormat.cs new file mode 100644 index 00000000..0f4f7dea --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/CatalogFormat.cs @@ -0,0 +1,9 @@ +namespace LibRed.Formats; + +/// Shared MSysObjects catalog constants used when writing new object rows. +internal static class CatalogFormat +{ + /// The MSysObjects.ParentId of a top-level user object — the database's object container, + /// a constant 0x0F000001. Used for both table and query/view objects (verified vs Northwind). + public const int ObjectContainerParentId = 0x0F000001; +} diff --git a/src/LibRed/LibRed.Core/Formats/IndexBlockFormat.cs b/src/LibRed/LibRed.Core/Formats/IndexBlockFormat.cs new file mode 100644 index 00000000..f12b23e3 --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/IndexBlockFormat.cs @@ -0,0 +1,43 @@ +namespace LibRed.Formats; + +/// +/// Layout of the two per-index TDEF sub-structures on the Jet 4 / ACE family: the 52-byte index-data +/// block (column slots, root page, flags) and the 28-byte index-info block (name/data-block linkage +/// and relationship action bytes). Shared by the read side (TableDefinitionPage) and the write sides +/// (TdefBuilder, TableCreator) so the offsets and markers can't drift. +/// +internal static class IndexBlockFormat +{ + // Index-data block (52 bytes): a 0x783 marker, up to 10 column slots, root page, flags. + public const int DataBlockSize = 52; + public const int MaxColumns = 10; + public const int ColumnSlotSize = 3; // 2-byte column id + 1-byte flags + public const int ColumnsOffset = 0x04; + public const int UsageMapRowOffset = 0x22; // 1-byte row + 3-byte page for the index's pages + public const int RootPageOffset = 0x26; + public const int FlagsOffset = 0x2E; + public const short ColumnUnused = -1; // 0xFFFF in an unused column slot + public const byte ColumnAscending = 0x01; // slot flags byte: 0x01 = ascending, 0x00 = descending + public const uint DataMarker = 0x783; + + // Index-info block (28 bytes, one per logical index): links a name to a data block. + public const int InfoBlockSize = 28; + public const int InfoMarkerOffset = 0x00; // 0x0659 record marker + public const int InfoNumberOffset = 0x04; + public const int InfoDataNumberOffset = 0x08; + public const int InfoFkTypeOffset = 0x0C; // 0=none, 1=incoming, 2=outgoing relationship + public const int InfoFkNumberOffset = 0x0D; // 0xFFFFFFFF = no foreign key + public const int InfoFkTablePageOffset = 0x11; // the other table's TDEF page (0 = none) + public const int InfoUpdateActionOffset = 0x15; + public const int InfoDeleteActionOffset = 0x16; + public const int InfoTypeOffset = 0x17; + public const uint NoForeignKey = 0xFFFFFFFF; + + /// Update/delete action byte on a plain (non-relationship) index. + public const byte PlainAction = 0x04; + + // Index-info block type byte (at InfoTypeOffset). + public const byte TypeSecondary = 0x00; + public const byte TypePrimary = 0x01; + public const byte TypeForeign = 0x02; +} diff --git a/src/LibRed/LibRed.Core/Formats/IndexFlags.cs b/src/LibRed/LibRed.Core/Formats/IndexFlags.cs new file mode 100644 index 00000000..39d59215 --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/IndexFlags.cs @@ -0,0 +1,23 @@ +namespace LibRed.Formats; + +/// +/// The flag bits at offset of an index-data block. Shared by the +/// read side (TableDefinitionPage) and the write sides (TdefBuilder, TableCreator) so the +/// bit values can't drift. Verified against ACE: plain 0x0080, IGNORE NULL 0x0082, DISALLOW NULL 0x0088, +/// primary key 0x0089. +/// +internal static class IndexFlags +{ + /// The index is unique (WITH PRIMARY / a unique index or constraint). + public const ushort Unique = 0x0001; + + /// WITH IGNORE NULL: rows with a null in any indexed column are excluded from the index. + public const ushort IgnoreNulls = 0x0002; + + /// WITH DISALLOW NULL (Required): the index rejects a null key. Set for primary keys and for + /// any required index. + public const ushort Required = 0x0008; + + /// Always set on Access 2000+ index-data blocks. + public const ushort AlwaysSet = 0x0080; +} diff --git a/src/LibRed/LibRed.Core/Formats/IndexKeyFlags.cs b/src/LibRed/LibRed.Core/Formats/IndexKeyFlags.cs new file mode 100644 index 00000000..45807ee8 --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/IndexKeyFlags.cs @@ -0,0 +1,22 @@ +namespace LibRed.Formats; + +/// +/// The per-column prefix bytes of an order-preserving index key. Each non-boolean column is prefixed by a +/// start byte (present value) or null byte, with distinct values for ascending vs descending columns so that +/// a lexicographic byte compare matches the index's logical order. Shared by the write side +/// (IndexKeyEncoder) and the read side (IndexKeyDecoder) so the two can't drift. +/// +internal static class IndexKeyFlags +{ + /// Ascending column, present value. + public const byte AscStart = 0x7F; + + /// Ascending column, null value. + public const byte AscNull = 0x00; + + /// Descending column, present value. + public const byte DescStart = 0x80; + + /// Descending column, null value. + public const byte DescNull = 0xFF; +} diff --git a/src/LibRed/LibRed.Core/Formats/Jet12Format.cs b/src/LibRed/LibRed.Core/Formats/Jet12Format.cs new file mode 100644 index 00000000..12e3a024 --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/Jet12Format.cs @@ -0,0 +1,9 @@ +namespace LibRed.Formats; + +/// Access 2007 (ACE 12) — first ACCDB format. +internal class Jet12Format : Jet4Format +{ + public override JetVersion Version => JetVersion.Version12_2007; + + public override bool IsAccdb => true; +} diff --git a/src/LibRed/LibRed.Core/Formats/Jet14Format.cs b/src/LibRed/LibRed.Core/Formats/Jet14Format.cs new file mode 100644 index 00000000..f5ff6d5b --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/Jet14Format.cs @@ -0,0 +1,7 @@ +namespace LibRed.Formats; + +/// Access 2010 (ACE 14) — ACCDB. +internal class Jet14Format : Jet12Format +{ + public override JetVersion Version => JetVersion.Version14_2010; +} diff --git a/src/LibRed/LibRed.Core/Formats/Jet16Format.cs b/src/LibRed/LibRed.Core/Formats/Jet16Format.cs new file mode 100644 index 00000000..f401c50f --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/Jet16Format.cs @@ -0,0 +1,7 @@ +namespace LibRed.Formats; + +/// Access 2016 (ACE 16) — ACCDB. +internal class Jet16Format : Jet14Format +{ + public override JetVersion Version => JetVersion.Version16_2016; +} diff --git a/src/LibRed/LibRed.Core/Formats/Jet17Format.cs b/src/LibRed/LibRed.Core/Formats/Jet17Format.cs new file mode 100644 index 00000000..1f57a20f --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/Jet17Format.cs @@ -0,0 +1,7 @@ +namespace LibRed.Formats; + +/// Access 2019/2021 (ACE 17) — ACCDB. +internal sealed class Jet17Format : Jet16Format +{ + public override JetVersion Version => JetVersion.Version17_2019; +} diff --git a/src/LibRed/LibRed.Core/Formats/Jet3Format.cs b/src/LibRed/LibRed.Core/Formats/Jet3Format.cs new file mode 100644 index 00000000..797c6a62 --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/Jet3Format.cs @@ -0,0 +1,9 @@ +namespace LibRed.Formats; + +/// Access 97 (Jet 3.x) — 2 KB pages, MDB. +internal sealed class Jet3Format : JetFormatBase +{ + public Jet3Format() => PageSize = 2048; + + public override JetVersion Version => JetVersion.Version3; +} diff --git a/src/LibRed/LibRed.Core/Formats/Jet4Format.cs b/src/LibRed/LibRed.Core/Formats/Jet4Format.cs new file mode 100644 index 00000000..1e49b6fe --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/Jet4Format.cs @@ -0,0 +1,9 @@ +namespace LibRed.Formats; + +/// Access 2000–2003 (Jet 4.x) — 4 KB pages, MDB. +internal class Jet4Format : JetFormatBase +{ + public Jet4Format() => PageSize = 4096; + + public override JetVersion Version => JetVersion.Version4; +} diff --git a/src/LibRed/LibRed.Core/Formats/JetFormatBase.cs b/src/LibRed/LibRed.Core/Formats/JetFormatBase.cs new file mode 100644 index 00000000..d8d9e44a --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/JetFormatBase.cs @@ -0,0 +1,320 @@ +namespace LibRed.Formats; + +/// +/// Version-specific layout description for a Jet/ACE database. Holds every byte +/// offset, size and limit that differs between format versions, so the page +/// parsers can read named constants instead of hard-coded magic numbers. +/// +/// +/// The authoritative references for these values are the mdbtools source +/// (include/mdbtools.h, src/libmdb/) and Jackcess +/// (com.healthmarketscience.jackcess.impl.JetFormat). +/// +public abstract class JetFormatBase +{ + /// Offset of the one-byte format version marker within page 0. + public const int VersionOffset = 0x14; + + /// Offset of the cleartext ASCII engine-version string ("4.0", NUL-terminated) — past the masked + /// header window, so readable directly. Present on both Jet 4 (.mdb) and ACE (.accdb), which + /// are both the Jet-4.0 engine. Used to confirm an unknown version byte is still a 4.0-family database + /// before falling back to the latest known ACE layout. + public const int EngineVersionOffset = 0x9C; + public const int EngineVersionLength = 4; + private const string Jet40EngineVersion = "4.0"; + + /// Offset of the ASCII format identifier string within page 0. + public const int FormatIdentifierOffset = 0x04; + + /// Length of the format identifier string (excluding its NUL terminator). + public const int FormatIdentifierLength = 15; + + /// Identifier for the MDB (Jet 3/4) family. + public const string JetIdentifier = "Standard Jet DB"; + + /// Identifier for the ACCDB (ACE 12+) family. + public const string AceIdentifier = "Standard ACE DB"; + + /// Identifier for a Jet workgroup / system database (System.mdw). Same Jet 4 binary format + /// as , but with this signature and always engine-encrypted (see + /// ). + public const string JetSystemIdentifier = "Jet System DB"; + + // --- Page 0 obfuscated header (0x18..0x98) --- + // The header is XOR-obfuscated with a fixed 128-byte mask (below). Field offsets and the mask + // are corroborated by mdbtools and Jackcess AND verified against real files here: the mask + // reproduces the code page (0x3C), collation LCID (0x6E) and creation date (0x72) bytes we + // recovered independently by known-plaintext, and it decodes every fixture's header to sensible + // values (see docs/format/page-00-database.md §2.1). + + /// Start offset of the obfuscated page-0 header region (also the mask's first byte). + public const int PageZeroHeaderMaskStart = 0x18; + + /// Offset of the 4-byte page number of the MSysObjects TDEF — the catalog root, the + /// bootstrap pointer that lets the engine find the system catalog before it can read any table. It is + /// the first of four system-table pointers (MSysObjects/MSysACEs/MSysQueries/ + /// MSysRelationships at 0x20/0x24/0x28/0x2C, values 2/3/4/5 in every + /// file); the others are reachable via the catalog itself. Verified: each value equals the object's + /// MSysObjects.Id and the page it names is a TDEF. + public const int CatalogRootPointerOffset = 0x20; + + /// Offset of the 2-byte ANSI code page (LE): 0x04E4 = 1252, 0x04E2 = 1250. + public const int CodePageOffset = 0x3C; + + /// Offset of the 4-byte database (encryption) key; 0 when the database has no password. + public const int DatabaseKeyOffset = 0x3E; + + /// Offset of the database password (Jet 4: 40 bytes; additionally masked by a + /// creation-date-derived value, so an empty password does not read as zeroes). + public const int PasswordOffset = 0x42; + + /// Offset of the 4-byte default text collating sort order: LCID (2 bytes LE, e.g. + /// 0x0409 = 1033 en-US) followed by the sort-order version at 0x71 (0 = General + /// Legacy, 1 = General). The version here matches each column's descriptor byte 0x0E. + public const int CollationSortOrderOffset = 0x6E; + + /// Offset of the 1-byte collation sort-order version within the sort-order field (0/1). + public const int CollationVersionOffset = 0x71; + + /// Offset of the 8-byte database creation timestamp: an OLE automation date + /// (IEEE double, days from the 1899-12-30 epoch). + public const int CreationDateOffset = 0x72; + + /// + /// The fixed 128-byte XOR mask applied to the page-0 header from + /// (Jet 4 / ACE; Jet 3 uses 126 bytes). This is Jackcess's BASE_HEADER_MASK, verified here to + /// reproduce the header bytes LibRed recovered from first principles and to decode real fixtures. + /// + public static ReadOnlySpan PageZeroHeaderMask => + [ + 0xB5, 0x6F, 0x03, 0x62, 0x61, 0x08, 0xC2, 0x55, 0xEB, 0xA9, 0x67, 0x72, 0x43, 0x3F, 0x00, 0x9C, + 0x7A, 0x9F, 0x90, 0xFF, 0x80, 0x9A, 0x31, 0xC5, 0x79, 0xBA, 0xED, 0x30, 0xBC, 0xDF, 0xCC, 0x9D, + 0x63, 0xD9, 0xE4, 0xC3, 0x7B, 0x42, 0xFB, 0x8A, 0xBC, 0x4E, 0x86, 0xFB, 0xEC, 0x37, 0x5D, 0x44, + 0x9C, 0xFA, 0xC6, 0x5E, 0x28, 0xE6, 0x13, 0xB6, 0x8A, 0x60, 0x54, 0x94, 0x7B, 0x36, 0xF5, 0x72, + 0xDF, 0xB1, 0x77, 0xF4, 0x13, 0x43, 0xCF, 0xAF, 0xB1, 0x33, 0x34, 0x61, 0x79, 0x5B, 0x92, 0xB5, + 0x7C, 0x2A, 0x05, 0xF1, 0x7C, 0x99, 0x01, 0x1B, 0x98, 0xFD, 0x12, 0x4F, 0x4A, 0x94, 0x6C, 0x3E, + 0x60, 0x26, 0x5F, 0x95, 0xF8, 0xD0, 0x89, 0x24, 0x85, 0x67, 0xC6, 0x1F, 0x27, 0x44, 0xD2, 0xEE, + 0xCF, 0x65, 0xED, 0xFF, 0x07, 0xC7, 0x46, 0xA1, 0x78, 0x16, 0x0C, 0xED, 0xE9, 0x2D, 0x62, 0xD4, + ]; + + // --- Table definition (TDEF) page layout --- + // Defaults below are for Jet 4 / ACE (verified against a real ACCDB). Jet 3 differs + // (18-byte column entries, 1-byte ASCII name lengths) and will override these. + + /// Offset of the 1-byte TDEF header flags (observed 0x01). + public virtual int TdefHeaderFlagsOffset => 0x01; + + /// Offset of the 2-byte free-space-remaining-in-this-page field. + public virtual int TdefFreeSpaceOffset => 0x02; + + /// Offset of the 4-byte pointer to the next TDEF page (0 if the definition fits one page). + public virtual int TdefNextPageOffset => 0x04; + + /// Offset of the 4-byte total TDEF definition length. + public virtual int TdefLengthOffset => 0x08; + + /// Offset of the 4-byte TDEF record marker (0x00000659); see . + public virtual int TdefRecordMarkerOffset => 0x0C; + + /// Offset of the 2-byte maximum-column-count high-water (the next column id to assign). + public virtual int TdefMaxColumnsOffset => 0x29; + + /// The 0x00000659 record marker written at the TDEF header (), + /// each column descriptor (+0x01) and each index-info block (+0x00). Access validates it; the reader ignores it. + public const uint TdefRecordMarker = 0x00000659; + + /// Size of the 8-byte continuation header that prefixes each TDEF continuation page's payload + /// (also the free-space reserve the first page leaves for it). + public const int TdefContinuationHeaderSize = 8; + + /// Offset of the 4-byte row count. + public virtual int TdefRowCountOffset => 0x10; + + /// Offset of the 4-byte highest-AutoNumber-assigned value (the last id used; next = +increment). + public virtual int TdefLastAutoNumberOffset => 0x14; + + /// Offset of the 4-byte AutoNumber increment (default 1; a custom COUNTER sets it). + public virtual int TdefAutoNumberIncrementOffset => 0x18; + + /// Offset of the 4-byte complex-type AutoNumber high-water (mdbtools ct_autonum) — the + /// next id for a complex (multi-value/attachment) column. 0 for every table without such a column. + public virtual int TdefComplexAutoNumberOffset => 0x1C; + + /// Offset of the 1-byte table type (0x4E 'N' user, 0x53 'S' system). + public virtual int TdefTableTypeOffset => 0x28; + + /// Offset of the 2-byte variable-length column count. + public virtual int TdefVariableColumnsOffset => 0x2B; + + /// Offset of the 2-byte total column count. + public virtual int TdefColumnCountOffset => 0x2D; + + /// Offset of the 4-byte real-index (slot) count, used to size the index block before columns. + public virtual int TdefRealIndexCountOffset => 0x2F; + + /// Offset of the 4-byte logical index count. + public virtual int TdefIndexCountOffset => 0x33; + + /// Offset where the real-index block begins; column descriptors follow it. + public virtual int TdefRealIndexBlockOffset => 0x3F; + + /// Size in bytes of each real-index entry in the block before the column descriptors. + public virtual int RealIndexEntrySize => 12; + + /// Size in bytes of one column descriptor. + public virtual int ColumnDescriptorSize => 25; + + // --- Column descriptor layout (offsets within a single descriptor) --- + public virtual int ColumnTypeOffset => 0x00; + public virtual int ColumnNumberOffset => 0x05; + public virtual int ColumnVariableIndexOffset => 0x07; // position among variable columns (0 for fixed) + public virtual int ColumnPrecisionOffset => 0x0B; // Decimal/Numeric columns only + public virtual int ColumnScaleOffset => 0x0C; // Decimal/Numeric columns only + // Non-numeric columns instead use 0x0B/0x0C for the text-collation LCID (a little-endian UInt16 read at + // 0x0B), and 0x0D for its sort-order version (0 = General legacy, 1 = the Access 2010 order). + public virtual int ColumnLocaleOffset => 0x0B; + public virtual int ColumnCollationVersionOffset => 0x0D; + public virtual int ColumnFlagsOffset => 0x0F; + /// Extended column flags (0x10): bit 0x01 = compressed-Unicode capable, 0xC0 = calculated column. + public virtual int ColumnExtendedFlagsOffset => 0x10; + public virtual int ColumnFixedOffsetOffset => 0x15; + public virtual int ColumnLengthOffset => 0x17; + + // Column flag byte (0x0F). Every documented bit is modelled (read into ColumnDef, written from it); the + // undocumented bits (0x08/0x10/0x20, zero in every file observed) are the only ones carried through raw. + /// Column flag: the column is fixed-length. + public const byte ColumnFlagFixedLength = 0x01; + /// Column flag: the column is updatable (set on essentially every column). + public const byte ColumnFlagUpdatable = 0x02; + /// Column flag: the column is an AutoNumber. + public const byte ColumnFlagAutoNumber = 0x04; + /// Column flag: an AutoNumber column that generates GUIDs (Replication ID) rather than Longs. + public const byte ColumnFlagGuidAutoNumber = 0x40; + /// Column flag: a hyperlink (a Memo column presented as a hyperlink). + public const byte ColumnFlagHyperlink = 0x80; + /// Mask of the documented flag bits — the complement is undocumented and preserved from raw. + public const byte ColumnFlagsDocumented = + ColumnFlagFixedLength | ColumnFlagUpdatable | ColumnFlagAutoNumber | ColumnFlagGuidAutoNumber | ColumnFlagHyperlink; + + // Extended flag byte (0x10). + /// Extended flag: the column can store compressed Unicode text (§7). + public const byte ColumnExtFlagCompressedUnicode = 0x01; + /// Extended flag: a calculated (computed) column (ACE 14+); the 0xC0 pair. + public const byte ColumnExtFlagCalculated = 0xC0; + /// Mask of the documented extended-flag bits — the complement is preserved from raw. + public const byte ColumnExtFlagsDocumented = ColumnExtFlagCompressedUnicode | ColumnExtFlagCalculated; + // Note: nullability is NOT in the column flag byte (bit 0x02 is set on every column). A NOT NULL column + // is marked by a boolean `Required` property in the LvProp blob instead — see PropertyBlob / §11. + + // --- Data page layout (Jet 4 / ACE) --- + + /// Offset of the 2-byte free-space count on a data page. + public virtual int DataFreeSpaceOffset => 0x02; + + /// Offset of the 4-byte owning-table TDEF page (or the "LVAL" marker on long-value pages). + public virtual int DataOwnerOffset => 0x04; + + /// Offset of the 2-byte row count on a data page. + public virtual int DataRowCountOffset => 0x0C; + + /// Offset of the row-offset slot directory (2 bytes per row). + public virtual int DataRowDirectoryOffset => 0x0E; + + /// Size of the column-count field at the start of a row record (2 bytes in Jet 4 / ACE, 1 in Jet 3). + public virtual int RowColumnCountSize => 2; + + /// Page number of the system catalog table MSysObjects (its TDEF page). + public virtual int CatalogPage => 2; + + /// Offset in a TDEF of the owned-pages usage-map pointer: 1 byte row, then a 3-byte page. + public virtual int TdefOwnedPagesOffset => 0x37; + + /// Offset in a TDEF of the free-pages usage-map pointer (same 1-byte row + 3-byte page shape): + /// the subset of the table's owned data pages that still have room for a row. Once earlier pages fill, + /// Access leaves only the page it is currently appending to marked here. + public virtual int TdefFreePagesOffset => 0x3B; + + /// Page size in bytes (2048 for Jet 3, 4096 for Jet 4 and all ACE versions). + public int PageSize { get; protected set; } = 4096; + + /// The logical version this format describes. + public abstract JetVersion Version { get; } + + /// True for the ACCDB (ACE 12+) family, which uses different encryption and layout details. + public virtual bool IsAccdb => false; + + /// + /// Sniffs the format version byte from page 0 of and + /// returns the matching format description. Restores the stream position. + /// + public static JetFormatBase Detect(Stream stream) + { + Span header = stackalloc byte[EngineVersionOffset + EngineVersionLength]; // through the 0x9C engine string + long original = stream.Position; + try + { + stream.Seek(0, SeekOrigin.Begin); + stream.ReadExactly(header); + } + finally + { + stream.Seek(original, SeekOrigin.Begin); + } + + string identifier = ReadFormatIdentifier(header); + if (identifier is not (JetIdentifier or AceIdentifier or JetSystemIdentifier)) + throw new NotSupportedException( + $"Not a Jet/ACE database: expected \"{JetIdentifier}\", \"{AceIdentifier}\" or \"{JetSystemIdentifier}\" at offset 0x{FormatIdentifierOffset:X2}, found \"{identifier}\"."); + + byte version = header[VersionOffset]; + bool identifierMatchesVersion = identifier == AceIdentifier + ? version >= 0x02 + : version <= 0x01; + if (!identifierMatchesVersion) + throw new NotSupportedException( + $"Jet/ACE format identifier \"{identifier}\" does not match version byte 0x{version:X2}."); + + try + { + return FromVersionByte(version); + } + catch (NotSupportedException) + { + // Unknown version byte on an ACCDB that still carries the Jet-4.0 engine string is almost certainly a + // newer 4KB ACE variant (the format grows conservatively, adding a byte per engine release). Read it + // with the latest known ACE layout rather than failing. The 4.0 guard is essential: it stops us from + // mis-reading a genuinely different future engine (e.g. a "5.0" string) as ACE. + if (identifier == AceIdentifier && ReadEngineVersion(header) == Jet40EngineVersion) + return new Jet17Format(); + throw; + } + } + + /// Reads the cleartext engine-version string ("4.0") at . + private static string ReadEngineVersion(ReadOnlySpan header) => + System.Text.Encoding.ASCII.GetString(header.Slice(EngineVersionOffset, EngineVersionLength)).TrimEnd('\0'); + + /// Reads the ASCII format identifier ("Standard Jet DB"/"Standard ACE DB") from a page-0 header. + public static string ReadFormatIdentifier(ReadOnlySpan header) => + // Trim trailing NULs and spaces: the ACE/Jet identifiers fill the field exactly, but "Jet System DB" + // (a workgroup file) is padded with spaces to the field width. + System.Text.Encoding.ASCII.GetString(header.Slice(FormatIdentifierOffset, FormatIdentifierLength)).TrimEnd('\0', ' '); + + /// Maps the raw version byte at to a format instance. + public static JetFormatBase FromVersionByte(byte versionByte) => versionByte switch + { + 0x00 => throw new NotSupportedException( + "Jet 3 / Access 97 databases are not supported because their 2 KB page, TDEF, column, and row layouts are not yet implemented."), + 0x01 => new Jet4Format(), + 0x02 => new Jet12Format(), + 0x03 => new Jet14Format(), + // 0x04 = ACE 15 (Access 2013)'s reserved engine byte. 2013 added no format-forcing data type (Large Number + // is 0x05, Date/Time Extended is 0x06), so this is byte-identical to the 0x03 (2010) format and is never + // actually emitted — 2013 defaults to 0x03. Read it with the 2010 layout rather than inventing a clone + // Jet15Format (verified: a real db2013 reads 0x03; jackcess ships no 2013 fixture). + 0x04 => new Jet14Format(), + 0x05 => new Jet16Format(), + 0x06 => new Jet17Format(), + _ => throw new NotSupportedException($"Unknown Jet/ACE format version byte 0x{versionByte:X2}."), + }; +} diff --git a/src/LibRed/LibRed.Core/Formats/JetVersion.cs b/src/LibRed/LibRed.Core/Formats/JetVersion.cs new file mode 100644 index 00000000..386b8fb4 --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/JetVersion.cs @@ -0,0 +1,13 @@ +namespace LibRed.Formats +{ + public enum JetVersion + { + Version3 = 0x0, + Version4 = 0x1, + Version12_2007 = 0x2, + Version14_2010 = 0x3, + Version15_2013 = 0x4, + Version16_2016 = 0x5, + Version17_2019 = 0x6, + } +} \ No newline at end of file diff --git a/src/LibRed/LibRed.Core/Formats/LongValueFormat.cs b/src/LibRed/LibRed.Core/Formats/LongValueFormat.cs new file mode 100644 index 00000000..fc9ebc38 --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/LongValueFormat.cs @@ -0,0 +1,21 @@ +namespace LibRed.Formats; + +/// +/// Constants of the long-value (Memo / OLE / long binary) storage form: the flags in a 12-byte in-row +/// long-value descriptor, and the "LVAL" page owner marker. Shared by the read side +/// (LongValueReader, DataPage) and the write side (LongValueWriter) so they can't drift. +/// +internal static class LongValueFormat +{ + /// Descriptor flag: the payload follows the descriptor inline (no LVAL page). + public const byte FlagInline = 0x80; + + /// Descriptor flag: the payload is a single LVAL page row. + public const byte FlagSinglePage = 0x40; + + /// Descriptor flag value for a payload chained across multiple LVAL pages. + public const byte FlagChained = 0x00; + + /// The 4-byte owner marker on a long-value page: ASCII "LVAL" (little-endian 4C 56 41 4C). + public const uint LvalMarker = 0x4C41564C; +} diff --git a/src/LibRed/LibRed.Core/Formats/RelationshipFlags.cs b/src/LibRed/LibRed.Core/Formats/RelationshipFlags.cs new file mode 100644 index 00000000..184ee6df --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/RelationshipFlags.cs @@ -0,0 +1,20 @@ +namespace LibRed.Formats; + +/// +/// The MSysRelationships.grbit flag values, shared by the read side (JetCatalog) and the +/// write side (TableCreator) so the two can't drift. Values verified against Access. +/// +internal static class RelationshipFlags +{ + /// Referential integrity is NOT enforced. + public const int DontEnforce = 0x00000002; + + /// Updates to the parent key cascade to the child (ON UPDATE CASCADE). + public const int UpdateCascade = 0x00000100; + + /// Deletes of the parent row cascade to the child (ON DELETE CASCADE). + public const int DeleteCascade = 0x00001000; + + /// Deleting the parent sets the child's FK columns to NULL (Jet ON DELETE SET NULL). + public const int DeleteSetNull = 0x00002000; +} diff --git a/src/LibRed/LibRed.Core/Formats/RowPointer.cs b/src/LibRed/LibRed.Core/Formats/RowPointer.cs new file mode 100644 index 00000000..f9d2e37f --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/RowPointer.cs @@ -0,0 +1,18 @@ +namespace LibRed.Formats; + +/// +/// Encoding of a 16-bit row-pointer directory entry on a data page: the low 13 bits are the row's byte +/// offset within the page, the top bits are status flags. Shared by the read side (DataPage) and the +/// write side (RowInserter) so the mask and flag bits can't drift. Fixed across the Jet 4 / ACE family. +/// +internal static class RowPointer +{ + /// Low 13 bits: the row's byte offset within the page. + public const int OffsetMask = 0x1FFF; + + /// Top bit: the row is deleted (a tombstone). + public const int DeletedFlag = 0x8000; + + /// Second-from-top bit: the pointer targets an overflow (long-value / relocated) row. + public const int OverflowFlag = 0x4000; +} diff --git a/src/LibRed/LibRed.Core/Formats/StoredQueryFormat.cs b/src/LibRed/LibRed.Core/Formats/StoredQueryFormat.cs new file mode 100644 index 00000000..5618b978 --- /dev/null +++ b/src/LibRed/LibRed.Core/Formats/StoredQueryFormat.cs @@ -0,0 +1,44 @@ +namespace LibRed.Formats; + +/// +/// The MSysQueries row vocabulary that encodes a stored query (view / action query): the per-row +/// attribute codes, the query-type / DISTINCT / TOP flag values, the action-query sub-kinds, and the +/// MSysObjects.Type value for a query object. Shared by the read side (JetCatalog) and the write +/// side (ViewCreator) so the two can't drift. See spec §11. +/// +internal static class StoredQueryFormat +{ + /// MSysObjects.Type value for a stored query / view object. + public const short ObjectTypeQuery = 5; + + // MSysQueries per-row attribute codes. + public const byte AttrType = 0x00; // query type (Flag = 1 for SELECT) + public const byte AttrAction = 0x01; // action query: Flag 7 = DDL, Flag 3 = append + public const byte AttrParameter = 0x02; // Name1 = param name, Flag = Jet type code + public const byte AttrFlag = 0x03; // Flag = 2 for DISTINCT; Flag = 0x10 for TOP + public const byte AttrTable = 0x05; // named/derived table + public const byte AttrColumn = 0x06; // Expression = column text + public const byte AttrJoin = 0x07; // Expression = condition, Flag = kind + public const byte AttrWhere = 0x08; // Expression = predicate text + public const byte AttrGroupBy = 0x09; // Expression = a GROUP BY column + public const byte AttrOrderBy = 0x0B; // Expression = a sort column + public const byte AttrEnd = 0xFF; // terminating row + + /// AttrType Flag value for a SELECT query. + public const short QueryTypeSelect = 1; + + /// AttrFlag Flag value marking the query DISTINCT. + public const short FlagDistinct = 2; + + /// AttrFlag Flag value marking a TOP query (Name1 = the count as text). + public const short FlagTop = 0x10; + + /// AttrAction Flag value for a data-definition (DDL) query (whole SQL in Expression). + public const short ActionDdl = 7; + + /// AttrAction Flag value for an append (INSERT) query (target table in Name1). + public const short ActionAppend = 3; + + /// AttrColumn Flag bit marking an appended literal value. + public const short AppendValueFlag = unchecked((short)0x8000); +} diff --git a/src/LibRed/LibRed.Core/IO/ILockManager.cs b/src/LibRed/LibRed.Core/IO/ILockManager.cs new file mode 100644 index 00000000..7c411bf7 --- /dev/null +++ b/src/LibRed/LibRed.Core/IO/ILockManager.cs @@ -0,0 +1,40 @@ +namespace LibRed.IO; + +/// +/// Coordinates page access between the handles that share one database file — eventually across processes, +/// so LibRed can hold a live .accdb open alongside Access. This is the seam the concurrency work fills +/// in: acquires a shared lock around every read and an exclusive lock around every +/// write, and the implementation decides what that means. +/// +/// Implementations: +/// +/// — process-local reader/writer locks (LibRed↔LibRed within one +/// process); the reference behaviour the file-based managers must match. +/// (later) a self-consistent byte-range manager for cross-process LibRed↔LibRed, then a Jet-exact one +/// (the LockFileEx offset bands + page-0 commit-byte table) for live co-residency with Access — see +/// docs/design/transactions.md. +/// +/// +/// Locks are operation-scoped in this phase: acquired and released around a single page read or +/// write, which prevents a reader from seeing a half-written page. Holding locks to transaction commit (strict +/// two-phase locking, for full isolation) is a later refinement layered on the same seam. +/// +/// The API is Enter/Exit (not a disposable handle) so the hot path — a page read takes +/// and releases a shared lock — allocates nothing; pairs each Enter with an Exit in a +/// finally. Locks are non-reentrant: a caller never enters the same page twice on one thread. +public interface ILockManager +{ + /// Takes a shared (read) lock on the page. Multiple readers may hold it concurrently, but not while + /// a writer does. Pair with . + void EnterShared(int page); + + /// Releases the shared lock taken by . + void ExitShared(int page); + + /// Takes an exclusive (write) lock on the page, excluding all other readers and writers of it. Pair + /// with . + void EnterExclusive(int page); + + /// Releases the exclusive lock taken by . + void ExitExclusive(int page); +} diff --git a/src/LibRed/LibRed.Core/IO/MonitorLockManager.cs b/src/LibRed/LibRed.Core/IO/MonitorLockManager.cs new file mode 100644 index 00000000..bd3b9620 --- /dev/null +++ b/src/LibRed/LibRed.Core/IO/MonitorLockManager.cs @@ -0,0 +1,80 @@ +namespace LibRed.IO; + +/// +/// Process-local page coordination: the handles a single process holds on one file (e.g. EF's several +/// connections) don't read a page mid-write. Shared per file path via / +/// (refcounted, like ), so every on the same file coordinates +/// through one manager and it is freed when the last channel closes. +/// +/// Locks are striped: a page maps to one of a fixed number of by +/// its low bits, so memory is bounded no matter how many pages a large database touches. (A per-page map grew a +/// lock per page forever and leaked millions of them.) Distinct pages almost never collide, and a lock is only +/// taken on the rare cache-miss read and on writes, so occasional false sharing is immaterial. +/// +/// This is the reference reader/writer behaviour; the cross-process byte-range managers reproduce it +/// against the same seam. It provides no cross-process coordination and none with Access — that is the later, +/// file-based work (docs/design/transactions.md). +/// +public sealed class MonitorLockManager : ILockManager, IDisposable +{ + private const int StripeCount = 256; + private readonly ReaderWriterLockSlim?[] _stripes = new ReaderWriterLockSlim?[StripeCount]; + + private ReaderWriterLockSlim Stripe(int page) => + LazyInitializer.EnsureInitialized(ref _stripes[(int)((uint)page % StripeCount)], static () => new ReaderWriterLockSlim()); + + public void EnterShared(int page) => Stripe(page).EnterReadLock(); + public void ExitShared(int page) => Stripe(page).ExitReadLock(); + public void EnterExclusive(int page) => Stripe(page).EnterWriteLock(); + public void ExitExclusive(int page) => Stripe(page).ExitWriteLock(); + + public void Dispose() + { + foreach (ReaderWriterLockSlim? stripe in _stripes) stripe?.Dispose(); + } + + // --- refcounted per-path registry: one manager per canonical file path, freed on the last Release --- + + private static readonly Dictionary Registry = + new(StringComparer.Ordinal); + + private static string Key(string path) => Path.GetFullPath(path).ToLowerInvariant(); + + + /// The shared manager for a file path (creating it on first use); each call must be paired with a + /// . + public static MonitorLockManager Acquire(string path) + { + string key = Key(path); + lock (Registry) + { + if (Registry.TryGetValue(key, out var slot)) + { + Registry[key] = (slot.Manager, slot.RefCount + 1); + return slot.Manager; + } + var manager = new MonitorLockManager(); + Registry[key] = (manager, 1); + return manager; + } + } + + /// Drops one reference; the last release disposes the manager (and its lock stripes). + public static void Release(string path) + { + string key = Key(path); + lock (Registry) + { + if (!Registry.TryGetValue(key, out var slot)) return; + if (slot.RefCount <= 1) + { + Registry.Remove(key); + slot.Manager.Dispose(); + } + else + { + Registry[key] = (slot.Manager, slot.RefCount - 1); + } + } + } +} diff --git a/src/LibRed/LibRed.Core/IO/PageBuffer.cs b/src/LibRed/LibRed.Core/IO/PageBuffer.cs new file mode 100644 index 00000000..9077306c --- /dev/null +++ b/src/LibRed/LibRed.Core/IO/PageBuffer.cs @@ -0,0 +1,38 @@ +using System.Buffers.Binary; +using System.Text; + +namespace LibRed.IO; + +/// +/// A thin, allocation-free reader over a single page's bytes. All Jet/ACE +/// integers are little-endian; the helpers here centralise that so the page +/// parsers can read named offsets instead of scattering +/// calls everywhere. +/// +public readonly struct PageBuffer(ReadOnlyMemory data, int pageNumber) +{ + public ReadOnlyMemory Data { get; } = data; + public int PageNumber { get; } = pageNumber; + public int Length => Data.Length; + + public ReadOnlySpan Span => Data.Span; + + public byte ReadByte(int offset) => Span[offset]; + + public short ReadInt16(int offset) => BinaryPrimitives.ReadInt16LittleEndian(Span.Slice(offset, 2)); + + public ushort ReadUInt16(int offset) => BinaryPrimitives.ReadUInt16LittleEndian(Span.Slice(offset, 2)); + + public int ReadInt32(int offset) => BinaryPrimitives.ReadInt32LittleEndian(Span.Slice(offset, 4)); + + public uint ReadUInt32(int offset) => BinaryPrimitives.ReadUInt32LittleEndian(Span.Slice(offset, 4)); + + public long ReadInt64(int offset) => BinaryPrimitives.ReadInt64LittleEndian(Span.Slice(offset, 8)); + + /// Reads a 3-byte little-endian page pointer (used by index/usage structures). + public int ReadInt24(int offset) => Span[offset] | (Span[offset + 1] << 8) | (Span[offset + 2] << 16); + + public ReadOnlySpan Slice(int offset, int length) => Span.Slice(offset, length); + + public string ReadString(int offset, int length, Encoding encoding) => encoding.GetString(Span.Slice(offset, length)); +} diff --git a/src/LibRed/LibRed.Core/IO/PageCache.cs b/src/LibRed/LibRed.Core/IO/PageCache.cs new file mode 100644 index 00000000..20dd920a --- /dev/null +++ b/src/LibRed/LibRed.Core/IO/PageCache.cs @@ -0,0 +1,185 @@ +namespace LibRed.IO; + +/// +/// A bounded, write-through buffer pool of raw page bytes for one physical database file, shared by every +/// open on that file (see ). A single cache per file is what +/// keeps coexisting handles coherent: because they all read and write through the same pool, one connection's +/// committed — or, as today, uncommitted — writes are immediately visible to the others, exactly as the old +/// straight-to-disk reads were, only now served from memory instead of a Seek()+Read() per page. +/// +/// The pool owns its own copies: reads copy out to the caller and writes copy in from the +/// caller, so a caller mutating its buffer can never corrupt a cached page. Eviction is LRU, capped at +/// . All operations are guarded by a per-cache lock — same-file access from multiple +/// threads is serialised at the page level (concurrent unsynchronised writes to the same page were never +/// defined behaviour anyway). +/// +internal sealed class PageCache +{ + /// Max resident pages per file. At a 4 KB page this is ~32 MB, comfortably covering the whole of a + /// typical Access database (and the benchmark tables); larger databases simply evict LRU. + private const int CapacityPages = 8192; + + private sealed class Entry(int page, byte[] bytes) + { + public readonly int Page = page; + public byte[] Bytes = bytes; + + // An optional higher-layer parse of this page (e.g. an index page's decoded entries), cached alongside + // the raw bytes so it is invalidated by the same write-through/eviction path — whenever the bytes change + // the parse is stale, so Store() clears it. Opaque to the cache (boxed as object). + public object? Parsed; + } + + private readonly int _pageSize; + private readonly object _gate = new(); + private readonly Dictionary> _map = []; + private readonly LinkedList _lru = new(); // first = most-recently-used + + private PageCache(int pageSize) => _pageSize = pageSize; + + // --- shared registry: one cache per canonical file path, refcounted by the channels using it --- + + private static readonly Dictionary Registry = new(StringComparer.Ordinal); + private static readonly object RegistryGate = new(); + + /// Returns the shared cache for , creating it on first use; each call must be + /// paired with a . The key is the case-folded full path so relative and absolute opens + /// of the same file share one pool (two pools for one file would reintroduce cross-handle staleness). + public static PageCache Acquire(string path, int pageSize) + { + string key = Path.GetFullPath(path).ToLowerInvariant(); + lock (RegistryGate) + { + if (Registry.TryGetValue(key, out var slot)) + { + Registry[key] = (slot.Cache, slot.RefCount + 1); + return slot.Cache; + } + var cache = new PageCache(pageSize); + Registry[key] = (cache, 1); + return cache; + } + } + + /// Drops one reference to the cache for ; when the last channel closes, the + /// pool is discarded so a later re-open re-reads from disk (picking up any external change). + public static void Release(string path) + { + string key = Path.GetFullPath(path).ToLowerInvariant(); + lock (RegistryGate) + { + if (!Registry.TryGetValue(key, out var slot)) return; + if (slot.RefCount <= 1) Registry.Remove(key); + else Registry[key] = (slot.Cache, slot.RefCount - 1); + } + } + + /// Copies the cached bytes of into and + /// returns true on a hit; false (leaving the buffer untouched) on a miss. + public bool TryRead(int page, Span destination) + { + lock (_gate) + { + if (!_map.TryGetValue(page, out var node)) return false; + _lru.Remove(node); + _lru.AddFirst(node); + node.Value.Bytes.CopyTo(destination); + return true; + } + } + + /// Returns the cache's own byte array for a resident without copying it out + /// — for a read that consumes the bytes immediately (e.g. decoding one row) and never mutates or retains + /// them. False on a miss. The array is live cache state: treat it read-only and use it before any further + /// cache operation on the same thread could evict or overwrite it. + public bool TryGetArray(int page, out byte[] array) + { + lock (_gate) + { + if (_map.TryGetValue(page, out var node)) + { + _lru.Remove(node); + _lru.AddFirst(node); + array = node.Value.Bytes; + return true; + } + array = []; + return false; + } + } + + /// Stores as the cached image of (copying it), + /// used both to fill a read miss and to write through a page write. + public void Store(int page, ReadOnlySpan source) + { + lock (_gate) + { + if (_map.TryGetValue(page, out var node)) + { + // Copy-on-write: replace the array rather than overwriting it in place, so a zero-copy reader + // that already took the old array via TryGetArray keeps a stable (if now slightly stale) image + // instead of seeing bytes change under it. Reads on a cache hit therefore need no page lock — + // only the pre-existing _gate — which keeps the hot read path free of coordination overhead. + node.Value.Bytes = source.ToArray(); + node.Value.Parsed = null; // the bytes changed, so any cached parse of them is stale + _lru.Remove(node); + _lru.AddFirst(node); + return; + } + + var entry = new Entry(page, source.ToArray()); + var added = _lru.AddFirst(entry); + _map[page] = added; + + if (_map.Count > CapacityPages) + { + LinkedListNode lruNode = _lru.Last!; + _lru.RemoveLast(); + _map.Remove(lruNode.Value.Page); + } + } + } + + /// Returns a previously cached higher-layer parse of (see + /// ), or false if the page is not resident or has no parse cached. + public bool TryGetParsed(int page, out object? parsed) + { + lock (_gate) + { + if (_map.TryGetValue(page, out var node) && node.Value.Parsed is { } p) + { + _lru.Remove(node); + _lru.AddFirst(node); + parsed = p; + return true; + } + parsed = null; + return false; + } + } + + /// Attaches a higher-layer parse to a resident page so later reads can skip re-parsing; a no-op if + /// the page is not resident (it will simply be re-parsed next time). Cleared automatically when the page's + /// bytes change (see ) or it is evicted. + public void SetParsed(int page, object parsed) + { + lock (_gate) + if (_map.TryGetValue(page, out var node)) + node.Value.Parsed = parsed; + } + + /// Drops every cached page numbered or higher — used after a + /// rollback truncates the file so freshly-allocated (now non-existent) pages don't linger in the pool. + public void EvictFrom(int fromPageInclusive) + { + lock (_gate) + { + var drop = _map.Keys.Where(p => p >= fromPageInclusive).ToList(); + foreach (int p in drop) + { + _lru.Remove(_map[p]); + _map.Remove(p); + } + } + } +} diff --git a/src/LibRed/LibRed.Core/IO/PageChannel.cs b/src/LibRed/LibRed.Core/IO/PageChannel.cs new file mode 100644 index 00000000..23b9d248 --- /dev/null +++ b/src/LibRed/LibRed.Core/IO/PageChannel.cs @@ -0,0 +1,412 @@ +using System.Buffers.Binary; +using LibRed.Crypto; +using LibRed.Formats; + +namespace LibRed.IO; + +/// +/// The single primitive every higher layer reads through: page-aligned, optionally +/// decrypted access to the database file. Owns the and the +/// resolved . +/// +public sealed class PageChannel : IDisposable +{ + private readonly FileStream _stream; + private readonly bool _readOnly; + + // Shared, write-through buffer pool for this file (one pool per physical file, shared across every channel + // open on it — see PageCache). Turns a page read from a Seek()+Read() syscall into a memory copy, and keeps + // coexisting handles coherent because they all read/write through the same pool. Never null after Open. + private readonly string _path; + private readonly PageCache _cache; + + // Page decryptor for a password-encrypted database (null when the file is unencrypted). Applied to + // every page as it comes off disk; page 0 (the readable header) is a no-op inside the codec. + private readonly IPageCodec? _codec; + + // Cross-handle page coordination, shared per file path. Acquired here (refcounted, like the cache) unless a + // manager is injected for a test; _ownsLocks records which, so Dispose releases only the one we acquired. + private readonly ILockManager? _locks; + private readonly bool _ownsLocks; + + // The open transaction's savepoint bookkeeping (null when none is open). This channel is the I/O executor; + // the Transaction only tracks what a savepoint rollback must restore. + private Transaction? _active; + + // Deferred-write overlay for the open transaction: page -> uncommitted plaintext bytes. Transactional writes + // land here instead of on disk / in the shared cache, so a concurrent channel on the same file never sees + // this channel's uncommitted pages (read-committed isolation). Commit replays it; rollback discards it. + // Per-channel and only touched while a transaction is open, so a channel's own single thread owns it — no + // lock. `_txPageCount` is the logical page count during a transaction (committed pages plus any the overlay + // allocated), since deferred allocations do not grow the file until commit. + private readonly Dictionary _overlay = []; + private int _txPageCount; + + private PageChannel(FileStream stream, JetFormatBase format, bool readOnly, string path, IPageCodec? codec, ILockManager? locks) + { + _stream = stream; + _readOnly = readOnly; + Format = format; + _path = path; + _codec = codec; + // A test may inject its own manager; otherwise share the per-path one (refcounted, released on Dispose). + _ownsLocks = locks is null; + _locks = locks ?? MonitorLockManager.Acquire(path); + _cache = PageCache.Acquire(path, format.PageSize); + } + + /// Whether a transaction is currently open on this channel. + public bool InTransaction => _active is not null; + + public JetFormatBase Format { get; } + + public int PageSize => Format.PageSize; + + /// Number of pages currently in the file — or, inside a transaction, the logical count including + /// pages the overlay has allocated but not yet written to disk. + public int PageCount => _active is not null ? _txPageCount : (int)(_stream.Length / PageSize); + + /// + /// Opens a database file, sniffs its Jet/ACE version from page 0 and resolves the + /// matching . + /// + public static PageChannel Open(string path, bool readOnly = true, string? password = null, ILockManager? locks = null) + { + // A Jet/ACE file is a shared-file database — Access, ODBC and OLE DB all open it with multiple + // concurrent handles (a store's long-lived connection plus per-context connections to the same + // file, as EF's test infrastructure does). So we share read+write rather than taking the file + // exclusively; an exclusive open (FileShare.None) would throw IOException the moment a second + // connection touched the same .accdb. Coexisting handles stay coherent by sharing a single per-file + // write-through buffer pool (PageCache) rather than each caching independently — one pool means one + // connection's writes are seen by the others, as the old straight-to-disk reads guaranteed. + var stream = new FileStream( + path, + FileMode.Open, + readOnly ? FileAccess.Read : FileAccess.ReadWrite, + FileShare.ReadWrite); + + try + { + var format = JetFormatBase.Detect(stream); + + // Read page 0 (always unencrypted) to detect encryption: a nonzero database key at 0x3E means the + // data pages are ACE-encrypted, and the EncryptionInfo descriptor lives in the clear on this page. + var page0 = new byte[format.PageSize]; + stream.Seek(0, SeekOrigin.Begin); + stream.ReadExactly(page0); + int databaseKey = DecodeDatabaseKey(page0); + // A nonzero database key means the pages are encrypted. ACE (.accdb) uses Office Agile encryption + // (with a password); the pre-ACE Jet 3/4 formats (.mdb and the .mdw workgroup file) use the legacy + // RC4 scheme keyed by the database key alone (no password). + // ACE (.accdb) may use Agile (XML descriptor) or the older Office "Standard"/CryptoAPI scheme (binary + // descriptor) — detect by descriptor, trying Agile first then Standard. The pre-ACE Jet 3/4 formats + // (.mdb and the .mdw workgroup file) use the legacy RC4 scheme keyed by the database key alone. + IPageCodec? codec = format.IsAccdb + ? (IPageCodec?)AgileEncryption.TryCreate(page0, databaseKey, password) + ?? OfficeStandardEncryption.TryCreate(page0, databaseKey, password) + : JetLegacyEncryption.TryCreate(databaseKey); + + // A nonzero database key means the file is encrypted; if no codec recognised the descriptor the scheme + // is unsupported — fail clearly rather than decoding ciphertext as plaintext (which corrupts downstream). + if (databaseKey != 0 && codec is null) + throw new NotSupportedException("The database is encrypted with an unsupported scheme."); + + return new PageChannel(stream, format, readOnly, path, codec, locks); + } + catch + { + stream.Dispose(); + throw; + } + } + + /// Decodes the 4-byte database (encryption) key at page-0 0x3E through the fixed header mask. + private static int DecodeDatabaseKey(ReadOnlySpan page0) + { + ReadOnlySpan mask = JetFormatBase.PageZeroHeaderMask; + int start = JetFormatBase.PageZeroHeaderMaskStart; + Span key = stackalloc byte[4]; + for (int i = 0; i < 4; i++) + key[i] = (byte)(page0[JetFormatBase.DatabaseKeyOffset + i] ^ mask[JetFormatBase.DatabaseKeyOffset - start + i]); + return BinaryPrimitives.ReadInt32LittleEndian(key); + } + + /// Reads a single page into a freshly allocated buffer. + public PageBuffer ReadPage(int pageNumber) + { + var buffer = new byte[PageSize]; + ReadPage(pageNumber, buffer); + return new PageBuffer(buffer, pageNumber); + } + + /// + /// Returns a page backed by the shared cache's own buffer, without copying it out — a zero-allocation read + /// for callers that consume the bytes immediately and never mutate or retain them (e.g. decoding one row + /// during an index seek, where 's per-call 4 KB copy dominated). On a cache miss + /// the page is read from disk and cached, then returned. The returned bytes are live cache state: valid + /// only until the next write to or eviction of this page. + /// + public PageBuffer ReadPageShared(int pageNumber) + { + // Read-your-own-writes: a page this transaction has written lives only in the overlay until commit. + if (_active is not null && _overlay.TryGetValue(pageNumber, out byte[]? buffered)) + return new PageBuffer(buffered, pageNumber); + + // Cache hit: the cache's own lock makes the lookup atomic and copy-on-write Store keeps the returned + // array stable, so no page lock is needed — this is the hot path and stays coordination-free. + if (_cache.TryGetArray(pageNumber, out byte[] cached)) + return new PageBuffer(cached, pageNumber); + + // Miss: read from disk under a shared page lock so a concurrent cross-handle write of this page can't + // tear the read. Re-check the cache after acquiring — another handle may have filled it while we waited. + _locks?.EnterShared(pageNumber); + try + { + if (_cache.TryGetArray(pageNumber, out cached)) + return new PageBuffer(cached, pageNumber); + + var buffer = new byte[PageSize]; + long offset = (long)pageNumber * PageSize; + _stream.Seek(offset, SeekOrigin.Begin); + _stream.ReadExactly(buffer); + _codec?.DecryptPage(pageNumber, buffer); + _cache.Store(pageNumber, buffer); + return new PageBuffer(buffer, pageNumber); + } + finally { _locks?.ExitShared(pageNumber); } + } + + /// Reads a single page into the supplied buffer (must be at least ). + public void ReadPage(int pageNumber, Span destination) + { + if (destination.Length < PageSize) + throw new ArgumentException($"Buffer must be at least {PageSize} bytes.", nameof(destination)); + + // Read-your-own-writes: a page this transaction has written lives only in the overlay until commit. + if (_active is not null && _overlay.TryGetValue(pageNumber, out byte[]? buffered)) + { + buffered.CopyTo(destination); + return; + } + + // Cache hit: served under the cache's own lock, no page lock needed (the hot path). + if (_cache.TryRead(pageNumber, destination)) + return; + + // Miss: read from disk under a shared page lock (coordinates with a cross-handle write), re-checking + // the cache after acquiring in case another handle filled it while we waited. + _locks?.EnterShared(pageNumber); + try + { + if (_cache.TryRead(pageNumber, destination)) + return; + + long offset = (long)pageNumber * PageSize; + _stream.Seek(offset, SeekOrigin.Begin); + _stream.ReadExactly(destination[..PageSize]); + _codec?.DecryptPage(pageNumber, destination[..PageSize]); + _cache.Store(pageNumber, destination[..PageSize]); + } + finally { _locks?.ExitShared(pageNumber); } + } + + /// + /// Writes a full page back to the file at . If the page lies beyond + /// the current end of the file, the file is grown to accommodate it (any intervening pages are + /// zero-filled). This is legitimate: a page taken from the global free-pages map can lie past the + /// physical end (the map pre-accounts for growth, and allocation defers the physical write), and + /// writing the page is what materialises it — the same growth Access performs on such a write. + /// + public void WritePage(int pageNumber, ReadOnlySpan source) + { + if (_readOnly) + throw new InvalidOperationException("This channel was opened read-only."); + if (source.Length != PageSize) + throw new ArgumentException($"A page write must be exactly {PageSize} bytes.", nameof(source)); + if (pageNumber < 0) + throw new ArgumentOutOfRangeException(nameof(pageNumber)); + + // Inside a transaction, defer the write into the private overlay — invisible to other channels until + // commit. Snapshot the page's prior overlay state (once per savepoint frame) so a savepoint rollback can + // restore it, then buffer a private copy of the new bytes and advance the logical page count. + if (_active is not null) + { + if (_active.NeedsBeforeImage(pageNumber)) + _active.RecordBeforeImage(pageNumber, _overlay.TryGetValue(pageNumber, out byte[]? prior) ? prior : null); + _overlay[pageNumber] = source[..PageSize].ToArray(); + if (pageNumber >= _txPageCount) _txPageCount = pageNumber + 1; + return; + } + + WriteThrough(pageNumber, source); + } + + /// Writes a page to disk and the shared cache (the committed path): encrypts a copy on the way to + /// disk for an encrypted file while caching plaintext, growing the file if the page lies past its end. Used + /// for non-transactional writes and to publish each overlay page on commit. + private void WriteThrough(int pageNumber, ReadOnlySpan source) + { + _locks?.EnterExclusive(pageNumber); + try + { + // The cache holds plaintext and the disk holds ciphertext (for an encrypted file), so encrypt a copy + // on the way to disk — the mirror of ReadPage's decrypt — while caching the plaintext. Page 0 is a + // no-op inside the codec (never page-encrypted). + ReadOnlySpan toDisk = source[..PageSize]; + byte[]? encrypted = null; + if (_codec is not null) + { + encrypted = source[..PageSize].ToArray(); + _codec.EncryptPage(pageNumber, encrypted); + toDisk = encrypted; + } + + long offset = (long)pageNumber * PageSize; + if (offset > _stream.Length) + _stream.SetLength(offset); // zero-fills the gap up to this page + _stream.Seek(offset, SeekOrigin.Begin); + _stream.Write(toDisk); + + // Write through: the pool now holds the just-written (plaintext) image, so a subsequent read (this + // channel or any other on the file) sees it without touching disk. + _cache.Store(pageNumber, source[..PageSize]); + } + finally { _locks?.ExitExclusive(pageNumber); } + } + + /// + /// Allocates a fresh page by growing the file by one page, returning its number. Jet also + /// recycles freed pages via usage maps; appending at the end is always valid since the page + /// count is simply the file length divided by the page size. + /// + public int AllocatePage() + { + if (_readOnly) + throw new InvalidOperationException("This channel was opened read-only."); + + int pageNumber = PageCount; + WritePage(pageNumber, new byte[PageSize]); + return pageNumber; + } + + /// + /// Begins a page-level transaction. Subsequent calls snapshot the + /// original bytes of each page they touch, so can undo them. + /// Reads continue to see writes made within the transaction (read-your-writes). Nesting is not + /// supported. + /// + public Transaction BeginTransaction() + { + if (_readOnly) + throw new InvalidOperationException("This channel was opened read-only."); + if (_active is not null) + throw new InvalidOperationException("A transaction is already in progress."); + _overlay.Clear(); + _txPageCount = PageCount; // committed count at start (PageCount is still file-based while _active is null) + return _active = new Transaction(_txPageCount); + } + + /// Commits the current transaction: publishes every buffered overlay page to disk and the shared + /// cache — making the writes visible to other channels for the first time — in ascending page order so the + /// file grows monotonically. No-op if no transaction is open. forces the OS buffers + /// to disk (durability) — used by an explicit user commit; an implicit per-statement autocommit passes false, + /// matching the pre-transaction behaviour of flushing only on rather than fsyncing + /// every statement. + public void CommitTransaction(bool flush = true) + { + if (_active is null) return; + + int[] pages = _overlay.Keys.ToArray(); + Array.Sort(pages); + _active = null; // clear first so WriteThrough takes the committed path and PageCount reverts to the file + foreach (int page in pages) + WriteThrough(page, _overlay[page]); + _overlay.Clear(); + + if (flush) _stream.Flush(flushToDisk: true); + } + + /// + /// Rolls the current transaction back by discarding its overlay. Nothing the transaction wrote ever reached + /// disk or the shared cache, so there is nothing to restore, truncate or flush. No-op if none is open. + /// + public void RollbackTransaction() + { + if (_active is null) return; + _overlay.Clear(); + _active = null; + } + + /// Opens a savepoint in the current transaction; pass the handle to + /// or . + public Savepoint CreateSavepoint() + { + if (_active is null) + throw new InvalidOperationException("No transaction is in progress."); + return _active.Save(_txPageCount); + } + + /// Rolls the transaction back to : undoes every write made since it was + /// created and drops pages allocated after it, leaving the savepoint (and the transaction) open. + public void RollbackToSavepoint(Savepoint savepoint) + { + if (_active is null) + throw new InvalidOperationException("No transaction is in progress."); + var (before, pageCount) = _active.TakeForRollbackTo(savepoint); + RestoreOverlay(before, pageCount); + } + + /// Releases , merging its changes into the enclosing scope. Only the + /// innermost open savepoint may be released. + public void ReleaseSavepoint(Savepoint savepoint) + { + if (_active is null) + throw new InvalidOperationException("No transaction is in progress."); + _active.Release(savepoint); + } + + /// Restores the overlay to a savepoint: each before-image is re-applied newest-first so the oldest + /// snapshot wins for a page touched in several frames — a null image means the page was absent at the + /// savepoint, so drop it. The logical page count is reset, dropping overlay pages the rolled-back frames + /// allocated. Nothing touches disk or the shared cache; the overlay never left this channel. + private void RestoreOverlay(List> before, int pageCount) + { + foreach (var (page, image) in before) + { + if (image is null) _overlay.Remove(page); + else _overlay[page] = image; + } + _txPageCount = pageCount; + } + + /// Retrieves a higher-layer parse of a page previously stored via + /// (e.g. an index page's decoded entries), or false if none is cached. The parse is dropped automatically + /// when the page is written (any channel) or evicted, so a hit is always consistent with the current bytes. + public bool TryGetParsedPage(int pageNumber, out object? parsed) + { + // A page buffered in this transaction's overlay has uncommitted bytes; the shared parsed cache reflects + // the committed image, so don't serve it — force a re-parse of the overlay bytes instead. + if (_active is not null && _overlay.ContainsKey(pageNumber)) { parsed = null; return false; } + return _cache.TryGetParsed(pageNumber, out parsed); + } + + /// Caches a higher-layer parse of a (resident) page so repeated reads — e.g. a B-tree descent that + /// re-visits the same root/internal pages — can skip re-decoding it. The caller must not mutate the object + /// afterwards, as it is shared with other readers of the same file. + public void SetParsedPage(int pageNumber, object parsed) + { + // Don't attach a transaction-local parse to the shared (committed) cache entry for an overlay page. + if (_active is not null && _overlay.ContainsKey(pageNumber)) return; + _cache.SetParsed(pageNumber, parsed); + } + + public void Flush() => _stream.Flush(flushToDisk: true); + + public void Dispose() + { + if (!_readOnly) _stream.Flush(flushToDisk: true); + _stream.Dispose(); + PageCache.Release(_path); // last channel on this file drops the shared pool + if (_ownsLocks) MonitorLockManager.Release(_path); // and the shared lock manager + } +} diff --git a/src/LibRed/LibRed.Core/IO/Transaction.cs b/src/LibRed/LibRed.Core/IO/Transaction.cs new file mode 100644 index 00000000..b7451a4f --- /dev/null +++ b/src/LibRed/LibRed.Core/IO/Transaction.cs @@ -0,0 +1,106 @@ +namespace LibRed.IO; + +/// Opaque handle to a savepoint within a (the frame's stack position). +public readonly record struct Savepoint(int Index); + +/// +/// A page-level, in-process transaction implemented with deferred writes: the owning +/// buffers every transactional page write into a private overlay and publishes it to +/// disk and the shared cache only on commit, so concurrent channels on the same file never observe uncommitted +/// pages (read-committed isolation). A full rollback simply discards the overlay. +/// +/// This type tracks only what is needed to roll back to a savepoint: a LIFO stack of frames, each +/// recording — for every page it was the first to write — what the overlay held for that page before +/// this frame touched it. A null before-image means the page was absent from the overlay at the +/// frame's start, so restoring drops it. Each frame also captures the logical page count when it opened, the +/// high-water mark to restore (pages the frame allocated are dropped). The owning channel performs the actual +/// overlay restore; this type is pure bookkeeping. +/// +public sealed class Transaction +{ + private sealed class Frame + { + // page -> overlay bytes before this frame's first write to it; null = the page was not in the overlay. + public readonly Dictionary Before = []; + public int StartPageCount; + } + + private readonly List _frames; + + internal Transaction(int originalPageCount) => _frames = [new Frame { StartPageCount = originalPageCount }]; + + /// Logical page count when the transaction began — the high-water to restore on a full rollback. + internal int OriginalPageCount => _frames[0].StartPageCount; + + /// Nesting depth: 1 with no open savepoint, higher inside savepoints. + internal int Depth => _frames.Count; + + /// Whether the innermost frame still needs to snapshot the overlay state of a page about to be + /// written (i.e. this frame has not yet recorded a before-image for it). + internal bool NeedsBeforeImage(int page) => !_frames[^1].Before.ContainsKey(page); + + /// Records, in the innermost frame, what the overlay held for before this + /// frame's first write to it (null = it was absent). Call only when + /// returned true. + internal void RecordBeforeImage(int page, byte[]? priorOverlay) => _frames[^1].Before[page] = priorOverlay; + + /// Opens a savepoint over the given current logical page count; returns a handle for + /// / . + internal Savepoint Save(int currentPageCount) + { + _frames.Add(new Frame { StartPageCount = currentPageCount }); + return new Savepoint(_frames.Count - 1); + } + + /// Collects the overlay before-images to restore (newest first, so the oldest image wins for a page + /// touched in several frames) and the logical page count for rolling back to . Discards + /// the frames above the savepoint and empties the savepoint's own frame, leaving it active for reuse. The + /// caller applies the restore to the overlay. + internal (List> Before, int PageCount) TakeForRollbackTo(Savepoint sp) + { + ValidateFrame(sp.Index); + var before = CollectNewestFirst(sp.Index); + int pageCount = _frames[sp.Index].StartPageCount; + _frames.RemoveRange(sp.Index + 1, _frames.Count - sp.Index - 1); + _frames[sp.Index].Before.Clear(); + return (before, pageCount); + } + + /// Releases (merges) the innermost savepoint into its parent: the child's changes become part of the + /// enclosing frame, so a later rollback of the parent still undoes them. Its before-images move down only for + /// pages the parent hasn't already snapshotted (the parent's older image must win). + internal void Release(Savepoint sp) + { + if (sp.Index != _frames.Count - 1) + throw new InvalidOperationException("Only the innermost savepoint can be released."); + if (sp.Index == 0) + throw new InvalidOperationException("The transaction root is not a savepoint."); + + Frame child = _frames[^1]; + Frame parent = _frames[^2]; + foreach (var (page, image) in child.Before) + parent.Before.TryAdd(page, image); + _frames.RemoveAt(_frames.Count - 1); + } + + /// Collects every overlay before-image (newest first) for a full rollback, and the transaction's + /// original logical page count. The transaction is spent after this. (The channel may instead simply clear + /// the whole overlay, which is equivalent and cheaper.) + internal (List> Before, int PageCount) TakeForRollback() => + (CollectNewestFirst(0), OriginalPageCount); + + private List> CollectNewestFirst(int fromFrame) + { + var images = new List>(); + for (int i = _frames.Count - 1; i >= fromFrame; i--) + foreach (var kv in _frames[i].Before) + images.Add(kv); + return images; + } + + private void ValidateFrame(int index) + { + if (index < 0 || index >= _frames.Count) + throw new InvalidOperationException("The savepoint is not open in this transaction."); + } +} diff --git a/src/LibRed/LibRed.Core/JetDatabase.cs b/src/LibRed/LibRed.Core/JetDatabase.cs new file mode 100644 index 00000000..f13968fe --- /dev/null +++ b/src/LibRed/LibRed.Core/JetDatabase.cs @@ -0,0 +1,385 @@ +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; +using LibRed.Storage; + +namespace LibRed; + +/// +/// The public entry point to the Core layer: opens a Jet/ACE database file and +/// exposes its catalog and tables. This is what the SQL engine and ADO provider +/// build on; consumers wanting raw storage access start here. +/// +public sealed class JetDatabase : IDisposable +{ + private readonly PageChannel _channel; + + private JetDatabase(PageChannel channel) + { + _channel = channel; + + DefinitionPage = new DatabaseDefinitionPage(); + DefinitionPage.Read(channel.ReadPage(0), channel.Format); + + // Find MSysObjects via the page-0 bootstrap pointer (0x20); fall back to the format default + // if it reads as 0 (never observed — every file points at page 2). + int catalogPage = DefinitionPage.CatalogRootPage > 0 ? DefinitionPage.CatalogRootPage : channel.Format.CatalogPage; + Catalog = new JetCatalog(channel, catalogPage); + } + + /// The decoded database definition page (page 0). + public DatabaseDefinitionPage DefinitionPage { get; } + + /// The instant the database file was created, decoded from the obfuscated OLE + /// timestamp on page 0 (see ). + public DateTime CreationDate => DefinitionPage.DatabaseCreationDate; + + /// The database's ANSI code page (e.g. 1252, 1250), decoded from page 0. + public int CodePage => DefinitionPage.CodePage; + + /// The database's default collation LCID (e.g. 1033 = en-US), decoded from page 0. + public int DefaultCollationLcid => DefinitionPage.DefaultCollationLcid; + + /// The database default sort-order version (0 = General Legacy, 1 = General), from page 0. + public byte DefaultCollationVersion => DefinitionPage.DefaultCollationVersion; + + /// The database's default text collating order — the source of truth for the LCID and + /// sort-order version written into new columns, in place of a hardcoded constant. Defaults to General + /// legacy (locale 1033, version 0), which is what every file LibRed currently handles uses; decoding + /// the actual value from the page-0 sort order (obfuscated region) is a follow-up, after which this + /// property would be populated from . + public Collation Collation { get; internal set; } = Collation.GeneralLegacy; + + /// Reads and decodes the table definition (TDEF) page at . + public TableDefinitionPage ReadTableDefinition(int pageNumber) + { + var tdef = new TableDefinitionPage(); + tdef.Read(_channel, pageNumber); + return tdef; + } + + /// Reads and decodes the data page at . + public DataPage ReadDataPage(int pageNumber) + { + var page = new DataPage(); + page.Read(_channel.ReadPage(pageNumber), _channel.Format); + return page; + } + + /// Opens a database file (read-only by default). For a password-encrypted ACCDB, supply + /// — encrypted databases open read-only. + public static JetDatabase Open(string path, bool readOnly = true, string? password = null) + { + // Coordinate page access between every handle open on this file (EF holds several connections on one + // .accdb): readers share a page, a writer excludes them. PageChannel shares one per-path manager + // (refcounted, freed on the last close). Process-local for now; the file-based managers replace it. + var channel = PageChannel.Open(path, readOnly, password); + try + { + return new JetDatabase(channel); + } + catch + { + // PageChannel.Open owns the file handle and shared cache lease. Ownership transfers + // to JetDatabase only after its page-0/catalog initialization has completed. + channel.Dispose(); + throw; + } + } + + /// The resolved on-disk format/version of the database. + public JetFormatBase Format => _channel.Format; + + /// Whether a transaction is currently open. + public bool InTransaction => _channel.InTransaction; + + /// Begins a page-level transaction; writes are undoable until . + public void BeginTransaction() => _channel.BeginTransaction(); + + /// Commits the current transaction (writes are already on disk). forces + /// durability (fsync) for an explicit user commit; an implicit per-statement autocommit passes false. + public void Commit(bool flush = true) => _channel.CommitTransaction(flush); + + /// + /// Rolls the current transaction back, restoring every touched page and dropping any pages the + /// transaction allocated. The catalog cache is invalidated so subsequent reads pick up the + /// restored TDEFs/row counts rather than stale in-memory copies. + /// + public void Rollback() + { + if (!_channel.InTransaction) return; + _channel.RollbackTransaction(); + Catalog.Invalidate(); + } + + /// Opens a savepoint within the current transaction (used to make a single statement atomic + /// inside a larger user transaction). Requires a transaction to be open. + public Savepoint CreateSavepoint() => _channel.CreateSavepoint(); + + /// Rolls back to , undoing writes made since it was created; the + /// transaction (and savepoint) stay open. Invalidates the catalog cache, as a full rollback does, since a + /// restored page may be a TDEF/catalog page. + public void RollbackToSavepoint(Savepoint savepoint) + { + _channel.RollbackToSavepoint(savepoint); + Catalog.Invalidate(); + } + + /// Releases , merging its writes into the enclosing scope. + public void ReleaseSavepoint(Savepoint savepoint) => _channel.ReleaseSavepoint(savepoint); + + // --- nested transactions (shared by the ADO API and SQL BEGIN/COMMIT/ROLLBACK) --- + // One physical transaction; nesting maps onto the savepoint stack. The depth counts every open level, so a + // COMMIT/ROLLBACK at the innermost level releases/rolls back just that level and the outermost commits or + // rolls back the whole transaction — Jet/DAO nested semantics. See docs/design/transactions.md §4. + private int _txnDepth; + private readonly Stack _nestedSavepoints = new(); + + /// Current transaction nesting depth (0 = none). Shared authority for both front doors. + public int TransactionDepth => _txnDepth; + + /// Opens a transaction level: the outermost begins the real transaction, an inner one pushes a + /// savepoint. + public void BeginNested() + { + if (_txnDepth == 0) BeginTransaction(); + else _nestedSavepoints.Push(CreateSavepoint()); + _txnDepth++; + } + + /// Commits the innermost level: the outermost commits the transaction, an inner one releases its + /// savepoint (merging into the enclosing level). + public void CommitNested() + { + if (_txnDepth == 0) throw new InvalidOperationException("No transaction is in progress."); + if (_txnDepth == 1) Commit(); + else ReleaseSavepoint(_nestedSavepoints.Pop()); + _txnDepth--; + } + + /// Rolls back the entire transaction regardless of nesting depth (all levels at once) and resets the + /// controller — used when a connection closes with a transaction still open, so its writes don't leak. + public void RollbackAll() + { + if (_txnDepth == 0) return; + Rollback(); // a full rollback restores every frame's before-images + _txnDepth = 0; + _nestedSavepoints.Clear(); + } + + /// Rolls back the innermost level: the outermost rolls back the whole transaction, an inner one + /// rolls back to (and closes) its savepoint. + public void RollbackNested() + { + if (_txnDepth == 0) throw new InvalidOperationException("No transaction is in progress."); + if (_txnDepth == 1) + { + Rollback(); + } + else + { + Savepoint sp = _nestedSavepoints.Pop(); + RollbackToSavepoint(sp); // undo this level's writes + ReleaseSavepoint(sp); // then drop the (now empty) level, returning to the parent + } + _txnDepth--; + } + + /// The system catalog, used to enumerate and resolve tables. + public JetCatalog Catalog { get; } + + /// + /// Creates a new table and registers it in the catalog. An optional primary key creates a + /// unique index over the named columns. The database must have been opened writable; the + /// table is usable immediately for inserts and scans. + /// + public void CreateTable( + string name, + IReadOnlyList columns, + IReadOnlyList? primaryKey = null, + IReadOnlyList? relationships = null, + IReadOnlyList? uniqueConstraints = null, + IReadOnlyList<(string Column, string DefaultSql)>? columnDefaults = null, + IReadOnlyList<(string Name, string Expression)>? checkConstraints = null, + string? primaryKeyName = null) + { + new Storage.TableCreator(_channel, Catalog, Collation) + .Create(name, columns, primaryKey, relationships, uniqueConstraints, columnDefaults, checkConstraints, + primaryKeyName); + Catalog.Invalidate(); + } + + /// + /// Adds an index to an existing (currently empty) table — the CREATE INDEX statement. WITH PRIMARY + /// makes it the primary key; WITH DISALLOW NULL marks it required. + /// + public void CreateIndex(string table, string index, IReadOnlyList<(string Column, bool Descending)> columns, + bool isUnique = false, bool isPrimary = false, bool disallowNull = false, bool ignoreNulls = false) + { + new Storage.TableCreator(_channel, Catalog).AddIndex(table, index, columns, isUnique, isPrimary, disallowNull, ignoreNulls); + Catalog.Invalidate(); + } + + /// Adds a foreign key (relationship) to an existing table — ALTER TABLE ADD CONSTRAINT … + /// FOREIGN KEY. Writes the child backing index, the parent's incoming block and MSysRelationships. + public void AddForeignKey(string childTable, RelationshipSpec relationship) + { + new Storage.TableCreator(_channel, Catalog).AddForeignKey(childTable, relationship); + Catalog.Invalidate(); + } + + /// Adds a table-level CHECK constraint to an existing table — ALTER TABLE ADD CONSTRAINT … CHECK. + /// Merges into the table's LvProp CheckConstraints property; the engine enforces it on insert/update. + public void AddCheckConstraint(string table, string name, string expression) + { + new Storage.TableCreator(_channel, Catalog).AddCheckConstraint(table, name, expression); + Catalog.Invalidate(); + } + + /// Drops a named table-level CHECK constraint — ALTER TABLE … DROP CONSTRAINT. Removes it from the + /// LvProp CheckConstraints property. Returns false if no CHECK of that name exists. + public bool DropCheckConstraint(string table, string name) + { + bool dropped = new Storage.TableCreator(_channel, Catalog).DropCheckConstraint(table, name); + if (dropped) Catalog.Invalidate(); + return dropped; + } + + /// Changes a column's declared type — ALTER TABLE … ALTER COLUMN. A variable text/binary length + /// change is an in-place descriptor edit; a storage-type change rebuilds the table (converting values). + public void AlterColumn(string table, string column, ColumnSpec newSpec) + { + new Storage.TableCreator(_channel, Catalog).AlterColumn(table, column, newSpec); + Catalog.Invalidate(); + } + + /// Just the in-place TDEF descriptor edit of a column type-change (bump 0x29 + rewrite only the + /// target descriptor), matching ACE byte-for-byte — the TDEF-page step of , + /// exposed on its own so a byte-diff test can isolate the TDEF page. It does NOT re-lay rows or rebuild + /// indexes; call for the full, self-consistent change. + public void AlterColumnTypeInPlaceTdef(string table, string column, ColumnSpec newSpec) + { + new Storage.TableCreator(_channel, Catalog).AlterColumnTypeInPlaceTdef(table, column, newSpec); + Catalog.Invalidate(); + } + + /// Full in-place column type change, byte-for-byte like ACE for every shape (fixed/variable columns + /// and targets, fixed↔variable, and indexed targets): TDEF edit + row re-lay preserving the dead old slot + + /// index rebuild. Falls back to the logical rebuild only for a Memo/OLE (long-value) source or target. + public void AlterColumnTypeInPlace(string table, string column, ColumnSpec newSpec) + { + new Storage.TableCreator(_channel, Catalog).AlterColumnTypeInPlace(table, column, newSpec); + Catalog.Invalidate(); + } + + /// Sets a column's DEFAULT — ALTER TABLE … ALTER COLUMN … DEFAULT. Replaces the column's + /// DefaultValue in the LvProp blob; the engine applies it on an omit-insert. + public void SetColumnDefault(string table, string column, string defaultSql) + { + new Storage.TableCreator(_channel, Catalog).SetColumnDefault(table, column, defaultSql); + Catalog.Invalidate(); + } + + /// Removes a column's DEFAULT — ALTER TABLE … ALTER COLUMN … DROP DEFAULT. Drops only the + /// DefaultValue property from the LvProp blob; the column's type and Required (NOT NULL) are left intact + /// (ACE-verified). A no-op if the column had no default. + public void DropColumnDefault(string table, string column) + { + new Storage.TableCreator(_channel, Catalog).DropColumnDefault(table, column); + Catalog.Invalidate(); + } + + /// Sets or clears a column's Required (NOT NULL) property — ALTER TABLE … ALTER COLUMN … NOT NULL / + /// NULL. Adds the Required LvProp property when , removes it otherwise; + /// the engine enforces it on insert and ACE reads it byte-faithfully (verified). + public void SetColumnRequired(string table, string column, bool required) + { + new Storage.TableCreator(_channel, Catalog).SetColumnRequired(table, column, required); + Catalog.Invalidate(); + } + + /// Drops a named FOREIGN KEY constraint from a table — ALTER TABLE … DROP CONSTRAINT. Returns + /// false if no such relationship exists (e.g. the name is a primary-key/unique index, not yet handled). + public bool DropConstraint(string childTable, string name) => + new Storage.TableCreator(_channel, Catalog).DropConstraint(childTable, name); + + /// Renames a table — ALTER TABLE … RENAME TO. Updates MSysObjects.Name and repoints the by-name + /// table references in MSysRelationships; indexes and stored queries are left alone, matching ACE. Returns + /// false if the table doesn't exist; throws if the new name is taken. + public bool RenameTable(string oldName, string newName) + { + bool renamed = new Storage.TableCreator(_channel, Catalog).RenameTable(oldName, newName); + if (renamed) Catalog.Invalidate(); // the cached TableDefs still carry the old name + return renamed; + } + + /// Renames a column — ALTER TABLE … RENAME COLUMN … TO. Rewrites the name in the TDEF, repoints + /// MSysRelationships' by-name column references, and re-owns the column's LvProp properties so it keeps its + /// DEFAULT. Returns false if the column doesn't exist; throws if the new name is taken on that table. + public bool RenameColumn(string table, string oldName, string newName) + { + bool renamed = new Storage.TableCreator(_channel, Catalog).RenameColumn(table, oldName, newName); + if (renamed) Catalog.Invalidate(); + return renamed; + } + + /// Drops a column — ALTER TABLE … DROP COLUMN. A metadata-only TDEF edit (survivors and rows are + /// untouched). Returns false if the column doesn't exist; throws for an indexed/keyed or memo/OLE column. + public bool DropColumn(string table, string column) => + new Storage.TableCreator(_channel, Catalog).DropColumn(table, column); + + /// Adds a column — ALTER TABLE … ADD COLUMN. Appends the descriptor/name and bumps the counts; + /// existing rows read it as NULL. Returns false if the column already exists; throws for memo/OLE. + public bool AddColumn(string table, Catalog.ColumnSpec column, string? defaultValue = null) => + new Storage.TableCreator(_channel, Catalog, Collation).AddColumn(table, column, defaultValue); + + /// Drops an index — DROP INDEX … ON table. Removes its TDEF blocks and frees its B-tree root. + /// Returns false if the index doesn't exist; throws if it backs a relationship. + public bool DropIndex(string table, string index) => + new Storage.TableCreator(_channel, Catalog).DropIndex(table, index); + + /// Drops a table — DROP TABLE. Removes its MSysObjects + MSysACEs rows and frees its pages. + /// Returns false if the table doesn't exist; throws if it is in a relationship. + public bool DropTable(string table) => + new Storage.TableCreator(_channel, Catalog).DropTable(table); + + /// Drops a view or stored procedure — DROP VIEW / DROP PROCEDURE (interchangeable, both target a + /// type-5 query object). Removes its MSysObjects + MSysQueries + MSysACEs rows. Returns false if absent. + public bool DropQueryObject(string name) => + new Storage.TableCreator(_channel, Catalog).DropQueryObject(name); + + /// Creates a view (a stored SELECT query) — the CREATE VIEW statement. Written the way Access + /// does: an MSysObjects type-5 row plus the query decomposed into MSysQueries rows. + public void CreateView(string name, ViewSpec spec) + { + new Storage.ViewCreator(_channel, Catalog).Create(name, spec); + Catalog.Invalidate(); + } + + /// Creates a stored action query — a data-definition (CREATE/DROP TABLE) or append (INSERT) + /// query, as CREATE PROCEDURE persists them. Written byte-faithfully the way Access does. + public void CreateActionQuery(string name, ActionQuerySpec spec) + { + new Storage.ViewCreator(_channel, Catalog).CreateAction(name, spec); + Catalog.Invalidate(); + } + + /// Opens a table directly from its TDEF page, bypassing the catalog — used during database + /// creation to seed the system tables before they self-register in MSysObjects. + public Storage.Table OpenTableAt(int tdefPage, string name, bool isSystem = true) => + new(_channel, Catalog.ReadTableDefinitionAt(tdefPage, name, isSystem)); + + /// Opens a table by name for row access. + public Table OpenTable(string name) + { + TableDef def = Catalog.FindTable(name) + ?? throw new ArgumentException($"Table '{name}' was not found.", nameof(name)); + return new Table(_channel, def); + } + + public void Dispose() + { + _channel.Dispose(); + } +} diff --git a/src/LibRed/LibRed.Core/LibRed.Core.csproj b/src/LibRed/LibRed.Core/LibRed.Core.csproj new file mode 100644 index 00000000..3d4baea0 --- /dev/null +++ b/src/LibRed/LibRed.Core/LibRed.Core.csproj @@ -0,0 +1,11 @@ + + + + $(JetTargetFramework) + LibRed + LibRed.Core + Native, fully managed reader/writer for the Microsoft Jet/ACE (Access MDB/ACCDB) file format: pages, tables, columns, indexes, catalog, encoding and memo/OLE fields. + AnyCPU;x86;x64 + + + diff --git a/src/LibRed/LibRed.Core/Pages/DataPage.cs b/src/LibRed/LibRed.Core/Pages/DataPage.cs new file mode 100644 index 00000000..b79f2f75 --- /dev/null +++ b/src/LibRed/LibRed.Core/Pages/DataPage.cs @@ -0,0 +1,129 @@ +using LibRed.Formats; +using LibRed.IO; + +namespace LibRed.Pages; + +/// One entry in a data page's row slot directory. +/// Byte offset of the row record within the page. +/// Length of the row record in bytes. +/// The row is marked deleted. +/// The slot points at an overflow/lookup record rather than inline data. +public readonly record struct RowSlot(int Offset, int Length, bool IsDeleted, bool HasOverflow); + +/// +/// A data page holding the rows of a single table. Rows are addressed by a slot +/// directory near the front of the page and packed from the page end backward. +/// Long-value (memo/OLE) pages share this page type but carry the "LVAL" owner marker. +/// +public sealed class DataPage : Page +{ + + private readonly List _rows = []; + private PageBuffer _buffer; + + public override PageType Type => PageType.DataPage; + + /// The TDEF page of the table that owns this data page (0 for long-value pages). + public int OwningTablePage { get; private set; } + + /// True when this is a long-value (memo/OLE overflow) page. + public bool IsLongValuePage { get; private set; } + + public int FreeSpace { get; private set; } + public int RowCount { get; private set; } + + public IReadOnlyList Rows => _rows; + + public override void Read(PageBuffer buffer, JetFormatBase format) + { + ValidateHeader(buffer, format, out int rowCount, out int directoryEnd); + _buffer = buffer; + PageNumber = buffer.PageNumber; + + uint owner = buffer.ReadUInt32(format.DataOwnerOffset); + IsLongValuePage = owner == LongValueFormat.LvalMarker; + OwningTablePage = IsLongValuePage ? 0 : (int)owner; + + FreeSpace = buffer.ReadUInt16(format.DataFreeSpaceOffset); + RowCount = rowCount; + + _rows.Clear(); + int prevEnd = buffer.Length; + for (int i = 0; i < RowCount; i++) + { + int raw = buffer.ReadUInt16(format.DataRowDirectoryOffset + i * 2); + int offset = raw & RowPointer.OffsetMask; + bool deleted = (raw & RowPointer.DeletedFlag) != 0; + bool overflow = (raw & RowPointer.OverflowFlag) != 0; + + // Rows are packed from the page end backward, so a slot runs from its own + // offset up to where the previous slot's row began. + ValidateSlot(buffer, i, offset, prevEnd, directoryEnd); + int length = prevEnd - offset; + _rows.Add(new RowSlot(offset, length, deleted, overflow)); + prevEnd = offset; + } + } + + /// Returns the raw bytes of the row at in the slot directory. + public ReadOnlySpan GetRow(int index) + { + RowSlot slot = _rows[index]; + return _buffer.Slice(slot.Offset, slot.Length); + } + + /// Reads a single row's slot and bytes straight from the raw page directory in O(1), without + /// materialising the whole slot list the way does — for an index seek's per-row fetch, + /// where parsing every slot on the page just to take one row was the dominant cost. Returns false when + /// is past the page's row count. + public static bool TryReadRow(PageBuffer buffer, JetFormatBase format, int index, + out RowSlot slot, out ReadOnlySpan bytes) + { + ValidateHeader(buffer, format, out int rowCount, out int directoryEnd); + if (index < 0 || index >= rowCount) + { + slot = default; + bytes = default; + return false; + } + + int dir = format.DataRowDirectoryOffset; + int raw = buffer.ReadUInt16(dir + index * 2); + int offset = raw & RowPointer.OffsetMask; + // Rows pack from the page end backward, so this slot runs up to where the previous slot began + // (or the page end for slot 0) — read just those two directory entries instead of walking all of them. + int prevEnd = index == 0 ? buffer.Length : buffer.ReadUInt16(dir + (index - 1) * 2) & RowPointer.OffsetMask; + ValidateSlot(buffer, index, offset, prevEnd, directoryEnd); + slot = new RowSlot(offset, prevEnd - offset, (raw & RowPointer.DeletedFlag) != 0, (raw & RowPointer.OverflowFlag) != 0); + bytes = buffer.Slice(offset, prevEnd - offset); + return true; + } + + private static void ValidateHeader(PageBuffer buffer, JetFormatBase format, out int rowCount, out int directoryEnd) + { + if (buffer.Length != format.PageSize) + throw new InvalidDataException( + $"Data page {buffer.PageNumber} has {buffer.Length} bytes; expected {format.PageSize}."); + if (buffer.ReadByte(0) != (byte)PageType.DataPage) + throw new InvalidDataException( + $"Page {buffer.PageNumber} is type 0x{buffer.ReadByte(0):X2}, not a data page (0x01)."); + + rowCount = buffer.ReadUInt16(format.DataRowCountOffset); + long end = (long)format.DataRowDirectoryOffset + rowCount * 2L; + if (end > buffer.Length) + throw new InvalidDataException( + $"Data page {buffer.PageNumber} declares {rowCount} rows, placing its slot directory past the page."); + directoryEnd = (int)end; + } + + private static void ValidateSlot(PageBuffer buffer, int index, int offset, int previousEnd, int directoryEnd) + { + if (offset < directoryEnd || offset > buffer.Length) + throw new InvalidDataException( + $"Data page {buffer.PageNumber} row slot {index} has offset {offset}, outside the row heap " + + $"[{directoryEnd}, {buffer.Length}]."); + if (offset > previousEnd) + throw new InvalidDataException( + $"Data page {buffer.PageNumber} row slot {index} has offset {offset}, above the previous row boundary {previousEnd}."); + } +} diff --git a/src/LibRed/LibRed.Core/Pages/DatabaseDefinitionPage.cs b/src/LibRed/LibRed.Core/Pages/DatabaseDefinitionPage.cs new file mode 100644 index 00000000..bb318016 --- /dev/null +++ b/src/LibRed/LibRed.Core/Pages/DatabaseDefinitionPage.cs @@ -0,0 +1,75 @@ +using System.Buffers.Binary; +using LibRed.IO; + +namespace LibRed.Pages; + +/// +/// Page 0 — the database definition page. Carries the format version, code page, +/// collation, creation metadata and the encryption material needed to decrypt the +/// rest of the file. +/// +public sealed class DatabaseDefinitionPage : Page +{ + public override PageType Type => PageType.DatabaseDefinition; + + /// The ASCII format identifier, e.g. "Standard Jet DB" or "Standard ACE DB". + public string FormatIdentifier { get; internal set; } = string.Empty; + + public byte JetVersion { get; internal set; } + + /// The 4-byte database (encryption) key; 0 when the database has no password. + public int DatabaseKey { get; internal set; } + + /// The database's ANSI code page (e.g. 1252 Latin-1, 1250 Central European), + /// decoded from the obfuscated field at . + public int CodePage { get; internal set; } + + /// The database's default collation LCID (e.g. 1033 = en-US), decoded from the + /// obfuscated sort-order field at . + public int DefaultCollationLcid { get; internal set; } + + /// The database default sort-order version: 0 = General Legacy, 1 = General (2010+). + /// Matches each column descriptor's byte 0x0E. + public byte DefaultCollationVersion { get; internal set; } + + /// Page number of the MSysObjects TDEF (the catalog root), read from the bootstrap + /// pointer at . 2 in every observed file. + public int CatalogRootPage { get; internal set; } + + public DateTime DatabaseCreationDate { get; internal set; } + + public override void Read(PageBuffer buffer, Formats.JetFormatBase format) + { + PageNumber = buffer.PageNumber; + FormatIdentifier = Formats.JetFormatBase.ReadFormatIdentifier(buffer.Span); + JetVersion = buffer.ReadByte(Formats.JetFormatBase.VersionOffset); + + // The header from 0x18 is XOR-obfuscated with the fixed 128-byte mask; de-obfuscate the + // whole region once, then read the fields out of the clear copy. + Span clear = stackalloc byte[Formats.JetFormatBase.PageZeroHeaderMask.Length]; + Demask(buffer.Span, clear); + int b = Formats.JetFormatBase.PageZeroHeaderMaskStart; + + CodePage = BinaryPrimitives.ReadUInt16LittleEndian(clear.Slice(Formats.JetFormatBase.CodePageOffset - b, 2)); + DatabaseKey = BinaryPrimitives.ReadInt32LittleEndian(clear.Slice(Formats.JetFormatBase.DatabaseKeyOffset - b, 4)); + DefaultCollationLcid = BinaryPrimitives.ReadUInt16LittleEndian(clear.Slice(Formats.JetFormatBase.CollationSortOrderOffset - b, 2)); + DefaultCollationVersion = clear[Formats.JetFormatBase.CollationVersionOffset - b]; + CatalogRootPage = BinaryPrimitives.ReadInt32LittleEndian(clear.Slice(Formats.JetFormatBase.CatalogRootPointerOffset - b, 4)); + double days = BinaryPrimitives.ReadDoubleLittleEndian(clear.Slice(Formats.JetFormatBase.CreationDateOffset - b, 8)); + DatabaseCreationDate = OleAutomationEpoch.AddDays(days); + } + + /// XOR-de-obfuscates the page-0 header region into , whose length + /// equals the mask length; clear[i] corresponds to page offset + /// + i. + internal static void Demask(ReadOnlySpan page, Span clear) + { + ReadOnlySpan mask = Formats.JetFormatBase.PageZeroHeaderMask; + int start = Formats.JetFormatBase.PageZeroHeaderMaskStart; + for (int i = 0; i < mask.Length; i++) + clear[i] = (byte)(page[start + i] ^ mask[i]); + } + + /// The OLE automation date epoch: 1899-12-30. + private static readonly DateTime OleAutomationEpoch = new(1899, 12, 30); +} diff --git a/src/LibRed/LibRed.Core/Pages/IndexPage.cs b/src/LibRed/LibRed.Core/Pages/IndexPage.cs new file mode 100644 index 00000000..c02c5982 --- /dev/null +++ b/src/LibRed/LibRed.Core/Pages/IndexPage.cs @@ -0,0 +1,23 @@ +using LibRed.Formats; +using LibRed.IO; + +namespace LibRed.Pages; + +/// +/// A B-tree index page — either an intermediate (node) page pointing at child +/// pages, or a leaf page holding index entries that point at rows. +/// +public sealed class IndexPage : Page +{ + public IndexPage(bool isLeaf) => IsLeaf = isLeaf; + + public bool IsLeaf { get; } + + public override PageType Type => IsLeaf ? PageType.LeafIndexPage : PageType.IntermediateIndexPage; + + public override void Read(PageBuffer buffer, JetFormatBase format) + { + PageNumber = buffer.PageNumber; + // TODO: decode index entries (column-order-preserving encoded keys) and child pointers. + } +} diff --git a/src/LibRed/LibRed.Core/Pages/LvalPage.cs b/src/LibRed/LibRed.Core/Pages/LvalPage.cs new file mode 100644 index 00000000..cfdce08f --- /dev/null +++ b/src/LibRed/LibRed.Core/Pages/LvalPage.cs @@ -0,0 +1,20 @@ +using LibRed.Formats; +using LibRed.IO; + +namespace LibRed.Pages; + +/// +/// A long-value (LVAL) page storing memo, OLE and other overflow data that does not +/// fit inline in a row. Long values may be stored inline, on a single LVAL page, or +/// chained across many LVAL pages. +/// +public sealed class LvalPage : Page +{ + public override PageType Type => PageType.DataPage; // LVAL pages reuse the data-page type marker. + + public override void Read(PageBuffer buffer, JetFormatBase format) + { + PageNumber = buffer.PageNumber; + // TODO: decode LVAL chunk header and payload / next-chunk pointer. + } +} diff --git a/src/LibRed/LibRed.Core/Pages/Page.cs b/src/LibRed/LibRed.Core/Pages/Page.cs new file mode 100644 index 00000000..7a4bf828 --- /dev/null +++ b/src/LibRed/LibRed.Core/Pages/Page.cs @@ -0,0 +1,20 @@ +using LibRed.Formats; +using LibRed.IO; + +namespace LibRed.Pages; + +/// +/// Base class for a typed view over a raw page. Concrete pages declare their +/// and decode their fields from a . +/// +public abstract class Page +{ + /// Zero-based page number within the file. + public int PageNumber { get; protected set; } + + /// The page type marker (byte 0 of the page). + public abstract PageType Type { get; } + + /// Decodes this page's fields from the supplied buffer using version-specific offsets. + public abstract void Read(PageBuffer buffer, JetFormatBase format); +} diff --git a/src/LibRed/LibRed.Core/Pages/PageType.cs b/src/LibRed/LibRed.Core/Pages/PageType.cs new file mode 100644 index 00000000..a7e4f644 --- /dev/null +++ b/src/LibRed/LibRed.Core/Pages/PageType.cs @@ -0,0 +1,15 @@ +namespace LibRed.Pages; + +/// +/// The page-type marker stored in byte 0 of every page. Values match the on-disk +/// Jet/ACE encoding. +/// +public enum PageType : byte +{ + DatabaseDefinition = 0x00, + DataPage = 0x01, + TableDefinition = 0x02, + IntermediateIndexPage = 0x03, + LeafIndexPage = 0x04, + PageUsageBitmap = 0x05, +} diff --git a/src/LibRed/LibRed.Core/Pages/TableDefinitionPage.cs b/src/LibRed/LibRed.Core/Pages/TableDefinitionPage.cs new file mode 100644 index 00000000..df993643 --- /dev/null +++ b/src/LibRed/LibRed.Core/Pages/TableDefinitionPage.cs @@ -0,0 +1,389 @@ +using System.Text; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; + +namespace LibRed.Pages; + +/// +/// A table definition (TDEF) page: row count, table type, and the column descriptors +/// and names. Verified against the Jet 4 / ACE layout. May be continued across pages +/// for wide tables (see ). +/// +public sealed class TableDefinitionPage : Page +{ + private const int MaxColumnsPerTable = 255; + private const int MaxIndexesPerTable = 32; + private const int MaxNameBytes = JetName.MaxLength * 2; + private static readonly Encoding StrictUnicode = new UnicodeEncoding( + bigEndian: false, byteOrderMark: false, throwOnInvalidBytes: true); + private readonly List _columns = []; + + public override PageType Type => PageType.TableDefinition; + + public int NextDefinitionPage { get; private set; } + public int RowCount { get; private set; } + + /// The complex-type AutoNumber high-water (header 0x1C) — the next id for a complex + /// (multi-value/attachment) column. Read and carried for faithful round-trip; 0 for every table without + /// such a column (LibRed neither creates nor consumes complex columns). + public int ComplexAutoNumber { get; private set; } + + public TableType TableType { get; private set; } + public int VariableColumnCount { get; private set; } + public int ColumnCount { get; private set; } + public int RealIndexCount { get; private set; } + public int IndexCount { get; private set; } + + public IReadOnlyList Columns => _columns; + + private readonly List _indexes = []; + public IReadOnlyList Indexes => _indexes; + + private readonly Dictionary _longValueOwnedMaps = []; + /// Per long-value (memo/OLE) column id → its owned-pages usage-map pointer (record row + + /// page), from the §3.3.2 list after the index names. Used to record a newly allocated LVAL page. + public IReadOnlyDictionary LongValueOwnedMaps => _longValueOwnedMaps; + + private readonly Dictionary _longValueFreeMaps = []; + /// Per long-value column id → its free-pages usage-map pointer (LVAL pages with spare room). + public IReadOnlyDictionary LongValueFreeMaps => _longValueFreeMaps; + + // Index structures (Jet 4 / ACE) follow the column names, in this order: + // IndexCount (0x33) data blocks : 52 bytes each — columns, flags, root page + // LogicalIndexCount (0x2F) info blocks : 28 bytes each — links a name to a data block + // LogicalIndexCount names : 2-byte length + UTF-16 + // A logical index may be a relationship (FK) sharing a data block with a real index. + // Index-block layout and flag values are shared with the writers via IndexBlockFormat / IndexFlags. + + /// + /// Reads a table definition starting at , transparently + /// stitching continuation pages (wide tables whose definition spans multiple pages) + /// into one contiguous buffer before parsing. + /// + public void Read(PageChannel channel, int page) + { + (PageBuffer buffer, _) = TdefChainReader.Read(channel, page); + Read(buffer, channel.Format); + } + + public override void Read(PageBuffer buffer, JetFormatBase format) + { + if (buffer.Length < format.TdefRealIndexBlockOffset) + throw new InvalidDataException( + $"TDEF buffer is {buffer.Length} bytes; the fixed header requires {format.TdefRealIndexBlockOffset}."); + int declaredLength = buffer.ReadInt32(format.TdefLengthOffset); + if (declaredLength < format.TdefRealIndexBlockOffset || declaredLength > buffer.Length) + throw new InvalidDataException( + $"TDEF declares length {declaredLength}, outside the available {buffer.Length}-byte buffer."); + if (declaredLength != buffer.Length) + buffer = new PageBuffer(buffer.Data[..declaredLength], buffer.PageNumber); + + PageNumber = buffer.PageNumber; + + NextDefinitionPage = buffer.ReadInt32(format.TdefNextPageOffset); + RowCount = buffer.ReadInt32(format.TdefRowCountOffset); + ComplexAutoNumber = buffer.ReadInt32(format.TdefComplexAutoNumberOffset); + TableType = (TableType)buffer.ReadByte(format.TdefTableTypeOffset); + VariableColumnCount = buffer.ReadUInt16(format.TdefVariableColumnsOffset); + ColumnCount = buffer.ReadUInt16(format.TdefColumnCountOffset); + RealIndexCount = buffer.ReadInt32(format.TdefRealIndexCountOffset); + IndexCount = buffer.ReadInt32(format.TdefIndexCountOffset); + + if (ColumnCount > MaxColumnsPerTable) + throw new InvalidDataException($"TDEF declares {ColumnCount} columns; Jet/ACE permits at most {MaxColumnsPerTable}."); + if (VariableColumnCount > MaxColumnsPerTable) + throw new InvalidDataException( + $"TDEF declares a variable-column high-water of {VariableColumnCount}; Jet/ACE permits at most {MaxColumnsPerTable}."); + if (IndexCount is < 0 or > MaxIndexesPerTable) + throw new InvalidDataException($"TDEF declares {IndexCount} real indexes; Jet/ACE permits 0 through {MaxIndexesPerTable}."); + if (RealIndexCount < 0) + throw new InvalidDataException($"TDEF declares a negative logical-index count ({RealIndexCount})."); + + // The column descriptors follow a per-index block sized by the index count at + // 0x33 (IndexCount) — NOT the index-slot count at 0x2F. The two are equal for + // MSysObjects but differ for user tables (e.g. slots=2, indexes=1). + // The buffer here may already be a stitched multi-page definition (see Read(channel, page)). + int columnBlock = CheckedRegionEnd( + format.TdefRealIndexBlockOffset, IndexCount, format.RealIndexEntrySize, buffer.Span.Length, "index statistics"); + _ = CheckedRegionEnd( + columnBlock, ColumnCount, format.ColumnDescriptorSize, buffer.Span.Length, "column descriptors"); + int afterNames = ReadColumns(buffer, format, columnBlock); + ReadIndexes(buffer, format, afterNames); + } + + /// + /// Parses the index structures following the column names into s + /// (one per index-data block): columns + sort order, unique/primary flags, root page, + /// and the index name (resolved from the logical-index info blocks). + /// + private void ReadIndexes(PageBuffer buffer, JetFormatBase format, int blockStart) + { + _indexes.Clear(); + var byColumnId = _columns.ToDictionary(c => c.ColumnId); + int infoStart = CheckedRegionEnd( + blockStart, IndexCount, IndexBlockFormat.DataBlockSize, buffer.Span.Length, "index-data blocks"); + _ = CheckedRegionEnd( + infoStart, RealIndexCount, IndexBlockFormat.InfoBlockSize, buffer.Span.Length, "logical-index blocks"); + + // 1. Index-data blocks (one IndexDef each): columns, unique flag, root page. + for (int i = 0; i < IndexCount; i++) + { + int block = blockStart + i * IndexBlockFormat.DataBlockSize; + + // Per-index statistics live in the 12-byte block at TdefRealIndexBlockOffset: + // [+0] total entries (= row count), [+4] unique entry count (cumulative, never + // decremented by Access), [+8] reserved. + int statsBlock = format.TdefRealIndexBlockOffset + i * format.RealIndexEntrySize; + int uniqueEntryCount = buffer.ReadInt32(statsBlock + 4); + + var columns = new List<(ColumnDef Column, bool Ascending)>(); + for (int slot = 0; slot < IndexBlockFormat.MaxColumns; slot++) + { + int entry = block + IndexBlockFormat.ColumnsOffset + slot * IndexBlockFormat.ColumnSlotSize; + short columnId = buffer.ReadInt16(entry); + if (columnId == IndexBlockFormat.ColumnUnused) continue; + if (byColumnId.TryGetValue(columnId, out ColumnDef? column)) + columns.Add((column, (buffer.ReadByte(entry + 2) & IndexBlockFormat.ColumnAscending) != 0)); + } + + _indexes.Add(new IndexDef + { + Name = string.Empty, + Columns = columns, + IsUnique = (buffer.ReadUInt16(block + IndexBlockFormat.FlagsOffset) & IndexFlags.Unique) != 0, + IgnoreNulls = (buffer.ReadUInt16(block + IndexBlockFormat.FlagsOffset) & IndexFlags.IgnoreNulls) != 0, + Required = (buffer.ReadUInt16(block + IndexBlockFormat.FlagsOffset) & IndexFlags.Required) != 0, + IsPrimaryKey = false, + UniqueEntryCount = uniqueEntryCount, + RootPage = buffer.ReadInt32(block + IndexBlockFormat.RootPageOffset), + RealIndexOrdinal = i, + }); + } + + int afterIndexNames = ResolveIndexNames(buffer, infoStart); + ReadLongValueMaps(buffer, afterIndexNames); + } + + private static int CheckedRegionEnd( + int start, int count, int itemSize, int bufferLength, string section) + { + long end = (long)start + (long)count * itemSize; + if (start < 0 || count < 0 || end < start || end > bufferLength) + throw new InvalidDataException( + $"TDEF {section} extend past the assembled definition ({start} + {count} * {itemSize} > {bufferLength})."); + return (int)end; + } + + /// Parses the §3.3.2 long-value column usage-map list (after the index names): one 10-byte + /// entry {col_num:2, used_ptr:4, free_ptr:4} per memo/OLE column, terminated by col_num 0xFFFF. Each + /// pointer is a 1-byte record row + 3-byte page. Captures the owned- (used-pages) map pointer. + private void ReadLongValueMaps(PageBuffer buffer, int pos) + { + _longValueOwnedMaps.Clear(); + _longValueFreeMaps.Clear(); + var seen = new HashSet(); + while (true) + { + EnsureAvailable(buffer, pos, 2, "long-value map terminator"); + int colNum = buffer.ReadUInt16(pos); + if (colNum == 0xFFFF) + { + pos += 2; + if (pos != buffer.Length) + throw new InvalidDataException( + $"TDEF has {buffer.Length - pos} trailing bytes after the long-value map terminator."); + return; + } + + EnsureAvailable(buffer, pos, 10, "long-value map entry"); + ColumnDef? column = _columns.FirstOrDefault(c => c.ColumnId == colNum); + if (column is null) + throw new InvalidDataException($"TDEF long-value map references unknown column id {colNum}."); + if (column.Type is not (JetDataType.Memo or JetDataType.Ole)) + throw new InvalidDataException( + $"TDEF long-value map references non-long-value column '{column.Name}' ({column.Type})."); + if (!seen.Add(colNum)) + throw new InvalidDataException($"TDEF contains duplicate long-value map entries for column id {colNum}."); + + _longValueOwnedMaps[colNum] = (buffer.ReadByte(pos + 2), buffer.ReadInt24(pos + 3)); + _longValueFreeMaps[colNum] = (buffer.ReadByte(pos + 6), buffer.ReadInt24(pos + 7)); + pos += 10; + } + } + + /// + /// Reads the logical-index info blocks and their names, then attaches each name (and the + /// primary-key flag) to the index-data block it references. A data block may be referenced + /// by several logical indexes (e.g. a relationship plus the real index); the real index's + /// name wins over a foreign-key relationship's. + /// + private int ResolveIndexNames(PageBuffer buffer, int infoStart) + { + int logicalCount = RealIndexCount; // 0x2F — the logical-index (slot) count + var info = new (int DataNumber, bool IsRelationship, byte Type)[logicalCount]; + for (int i = 0; i < logicalCount; i++) + { + int block = infoStart + i * IndexBlockFormat.InfoBlockSize; + info[i] = ( + buffer.ReadInt32(block + IndexBlockFormat.InfoDataNumberOffset), + buffer.ReadInt32(block + IndexBlockFormat.InfoFkTablePageOffset) != 0, + buffer.ReadByte(block + IndexBlockFormat.InfoTypeOffset)); + } + + int namePos = infoStart + logicalCount * IndexBlockFormat.InfoBlockSize; + var priority = new int[_indexes.Count]; + for (int i = 0; i < logicalCount; i++) + { + (string name, namePos) = ReadName(buffer, namePos, $"logical index {i}"); + + (int dataNumber, bool isRelationship, byte type) = info[i]; + if (dataNumber < 0 || dataNumber >= _indexes.Count) continue; + + // Prefer a real index name over a relationship's; prefer the primary among real ones. + int p = isRelationship ? 1 : type == IndexBlockFormat.TypePrimary ? 3 : 2; + if (p > priority[dataNumber]) + { + priority[dataNumber] = p; + _indexes[dataNumber] = _indexes[dataNumber] with + { + Name = name, + IsPrimaryKey = !isRelationship && type == IndexBlockFormat.TypePrimary, + }; + } + } + + return namePos; + } + + private int ReadColumns(PageBuffer buffer, JetFormatBase format, int columnBlock) + { + _columns.Clear(); + + // Pass 1: fixed-size column descriptors. + var descriptors = new (JetDataType Type, int ColumnId, byte Flags, byte ExtFlags, int FixedOffset, int Length, byte Precision, byte Scale, int VariableIndex, Collation Collation)[ColumnCount]; + var columnIds = new HashSet(); + for (int i = 0; i < ColumnCount; i++) + { + int entry = columnBlock + i * format.ColumnDescriptorSize; + var type = (JetDataType)buffer.ReadByte(entry + format.ColumnTypeOffset); + int columnId = buffer.ReadUInt16(entry + format.ColumnNumberOffset); + if (!Enum.IsDefined(type)) + throw new InvalidDataException($"TDEF column {i} has unknown type code 0x{(byte)type:X2}."); + if (columnId >= MaxColumnsPerTable) + throw new InvalidDataException( + $"TDEF column {i} has id {columnId}; valid ids are 0 through {MaxColumnsPerTable - 1}."); + if (!columnIds.Add(columnId)) + throw new InvalidDataException($"TDEF contains duplicate column id {columnId}."); + + // Bytes 0x0B/0x0C are precision/scale for a Decimal/Numeric column and the text-collation LCID + // for everything else; 0x0D is the collation's sort-order version. Read whichever applies. + bool numeric = type == JetDataType.FixedPoint; + descriptors[i] = ( + type, + columnId, + buffer.ReadByte(entry + format.ColumnFlagsOffset), + buffer.ReadByte(entry + format.ColumnExtendedFlagsOffset), + buffer.ReadUInt16(entry + format.ColumnFixedOffsetOffset), + buffer.ReadUInt16(entry + format.ColumnLengthOffset), + numeric ? buffer.ReadByte(entry + format.ColumnPrecisionOffset) : (byte)0, + numeric ? buffer.ReadByte(entry + format.ColumnScaleOffset) : (byte)0, + // The variable-table index is **stored** in the descriptor (0x07), not derived. Reading it + // (rather than ranking column ids) is what lets a table with a **dropped column** decode: + // ACE's DROP COLUMN removes a descriptor but does NOT renumber the survivors or rewrite + // rows, so a survivor keeps its original variable index even though ranking would shift it. + buffer.ReadUInt16(entry + format.ColumnVariableIndexOffset), + numeric ? Collation.GeneralLegacy + : new Collation((CollatingOrder)buffer.ReadUInt16(entry + format.ColumnLocaleOffset), + // The sort-order version is the HIGH byte of the 2-byte field at 0x0D — i.e. the byte at + // 0x0E (0 = General legacy, 1 = Access-2010 General). The low byte 0x0D is 0 in every file + // seen; reading it alone (as LibRed used to) hid v1. Watch 0x0D — see Collation.Version. + buffer.ReadByte(entry + format.ColumnCollationVersionOffset + 1))); + } + + // Pass 2: column names, in the same order, immediately after the descriptor block. + // Each name is a 2-byte (little-endian) byte length followed by UTF-16LE text. + int namePos = columnBlock + ColumnCount * format.ColumnDescriptorSize; + for (int i = 0; i < ColumnCount; i++) + { + (string name, namePos) = ReadName(buffer, namePos, $"column {i}"); + + var d = descriptors[i]; + bool isFixed = (d.Flags & JetFormatBase.ColumnFlagFixedLength) != 0; + if ((!isFixed && d.VariableIndex >= VariableColumnCount) + || (isFixed && d.VariableIndex > VariableColumnCount)) + throw new InvalidDataException( + $"TDEF column '{name}' has variable-table index {d.VariableIndex}, " + + $"outside high-water {VariableColumnCount}."); + _columns.Add(new ColumnDef + { + Name = name, + Type = d.Type, + Index = i, + ColumnId = d.ColumnId, + Length = d.Length, + FixedOffset = d.FixedOffset, + VariableIndex = isFixed ? -1 : d.VariableIndex, + // Byte 7 is stored on fixed columns too (the running count of preceding variable columns); keep + // it so a faithful rebuild re-emits the exact value instead of clobbering fixed columns to 0. + VariableTableIndex = d.VariableIndex, + IsFixedLength = isFixed, + IsAutoNumber = (d.Flags & JetFormatBase.ColumnFlagAutoNumber) != 0, + // Every documented flag bit is modelled (0x0F: updatable/GUID-autonumber/hyperlink; 0x10: + // compressed-Unicode / calculated) so it round-trips explicitly, not via RawDescriptor. + IsUpdatable = (d.Flags & JetFormatBase.ColumnFlagUpdatable) != 0, + IsGuidAutoNumber = (d.Flags & JetFormatBase.ColumnFlagGuidAutoNumber) != 0, + IsHyperlink = (d.Flags & JetFormatBase.ColumnFlagHyperlink) != 0, + SupportsCompressedUnicode = (d.ExtFlags & JetFormatBase.ColumnExtFlagCompressedUnicode) != 0, + IsCalculated = (d.ExtFlags & JetFormatBase.ColumnExtFlagCalculated) != 0, + Precision = d.Precision, + Scale = d.Scale, + Collation = d.Collation, + // Keep the original 25 bytes so a rewrite preserves fields we don't model (faithful round-trip). + RawDescriptor = buffer.Slice(columnBlock + i * format.ColumnDescriptorSize, format.ColumnDescriptorSize).ToArray(), + }); + } + + // AutoNumber seed/increment from the TDEF header: 0x18 = increment, 0x14 = last-assigned value. On a + // freshly created table the last value is Seed-Increment, so Seed = last + increment (matching what a + // no-insert scaffold reports). A table has at most one AutoNumber column; apply to it. + int increment = buffer.ReadInt32(format.TdefAutoNumberIncrementOffset); + if (increment == 0) increment = 1; + int lastAuto = buffer.ReadInt32(format.TdefLastAutoNumberOffset); + foreach (ColumnDef column in _columns) + if (column.IsAutoNumber) + { + column.Increment = increment; + column.Seed = lastAuto + increment; + } + + return namePos; + } + + private static (string Name, int Next) ReadName(PageBuffer buffer, int pos, string kind) + { + EnsureAvailable(buffer, pos, 2, $"{kind} name length"); + int byteLength = buffer.ReadUInt16(pos); + pos += 2; + if (byteLength == 0 || byteLength > MaxNameBytes || (byteLength & 1) != 0) + throw new InvalidDataException( + $"TDEF {kind} name has invalid UTF-16 byte length {byteLength}; expected an even value from 2 through {MaxNameBytes}."); + EnsureAvailable(buffer, pos, byteLength, $"{kind} name"); + try + { + return (StrictUnicode.GetString(buffer.Slice(pos, byteLength)), pos + byteLength); + } + catch (DecoderFallbackException ex) + { + throw new InvalidDataException($"TDEF {kind} name is not valid UTF-16LE.", ex); + } + } + + private static void EnsureAvailable(PageBuffer buffer, int pos, int length, string section) + { + long end = (long)pos + length; + if (pos < 0 || length < 0 || end > buffer.Length) + throw new InvalidDataException( + $"TDEF {section} extends past the declared definition ({pos} + {length} > {buffer.Length})."); + } +} diff --git a/src/LibRed/LibRed.Core/Pages/TdefChainReader.cs b/src/LibRed/LibRed.Core/Pages/TdefChainReader.cs new file mode 100644 index 00000000..9df63736 --- /dev/null +++ b/src/LibRed/LibRed.Core/Pages/TdefChainReader.cs @@ -0,0 +1,86 @@ +using LibRed.Formats; +using LibRed.IO; + +namespace LibRed.Pages; + +/// Reads one TDEF chain into its absolute logical coordinate space. +internal static class TdefChainReader +{ + // A valid Jet/ACE table is constrained to 255 columns, 32 real indexes, and 64-character names. + // One MiB is deliberately generous while still preventing a hostile 32-bit length from driving + // process-scale allocation. This is an implementation safety budget, not an on-disk field width. + internal const int MaxDefinitionLength = 1024 * 1024; + + internal static (PageBuffer Buffer, IReadOnlyList ContinuationPages) Read( + PageChannel channel, int firstPage) + { + JetFormatBase format = channel.Format; + ValidatePageNumber(channel, firstPage, "TDEF root"); + PageBuffer first = channel.ReadPage(firstPage); + if (first.ReadByte(0) != (byte)PageType.TableDefinition || first.ReadByte(1) != 0x01) + throw new InvalidDataException( + $"TDEF root page {firstPage} has header " + + $"[{first.ReadByte(0):X2} {first.ReadByte(1):X2}], expected [02 01]."); + + int definitionLength = first.ReadInt32(format.TdefLengthOffset); + if (definitionLength < format.TdefRealIndexBlockOffset || definitionLength > MaxDefinitionLength) + throw new InvalidDataException( + $"TDEF page {firstPage} declares length {definitionLength}; supported validated range is " + + $"{format.TdefRealIndexBlockOffset} through {MaxDefinitionLength} bytes."); + + int pageSize = format.PageSize; + int bodySize = pageSize - JetFormatBase.TdefContinuationHeaderSize; + int continuationCount = definitionLength <= pageSize + ? 0 + : (definitionLength - pageSize + bodySize - 1) / bodySize; + + int next = first.ReadInt32(format.TdefNextPageOffset); + var continuationPages = new List(continuationCount); + var continuationBuffers = new List(continuationCount); + var visited = new HashSet { firstPage }; + + for (int i = 0; i < continuationCount; i++) + { + if (next == 0) + throw new InvalidDataException( + $"TDEF page {firstPage} ends after {i} continuation pages but its declared length requires {continuationCount}."); + ValidatePageNumber(channel, next, "TDEF continuation"); + if (!visited.Add(next)) + throw new InvalidDataException($"TDEF page {firstPage} contains a continuation cycle at page {next}."); + + PageBuffer continuation = channel.ReadPage(next); + if (continuation.ReadByte(0) != (byte)PageType.TableDefinition || continuation.ReadByte(1) != 0x01) + throw new InvalidDataException( + $"TDEF continuation page {next} has header " + + $"[{continuation.ReadByte(0):X2} {continuation.ReadByte(1):X2}], expected [02 01]."); + + continuationPages.Add(next); + continuationBuffers.Add(continuation); + next = continuation.ReadInt32(format.TdefNextPageOffset); + } + + if (next != 0) + throw new InvalidDataException( + $"TDEF page {firstPage} has more continuation pages than its declared length permits."); + + var assembled = new byte[definitionLength]; + int written = Math.Min(pageSize, definitionLength); + first.Span[..written].CopyTo(assembled); + foreach (PageBuffer continuation in continuationBuffers) + { + int take = Math.Min(bodySize, definitionLength - written); + continuation.Span.Slice(JetFormatBase.TdefContinuationHeaderSize, take) + .CopyTo(assembled.AsSpan(written)); + written += take; + } + + return (new PageBuffer(assembled, firstPage), continuationPages); + } + + private static void ValidatePageNumber(PageChannel channel, int pageNumber, string role) + { + if (pageNumber <= 0 || pageNumber >= channel.PageCount) + throw new InvalidDataException( + $"{role} page {pageNumber} is outside the database's {channel.PageCount} pages."); + } +} diff --git a/src/LibRed/LibRed.Core/Pages/UsageMapPage.cs b/src/LibRed/LibRed.Core/Pages/UsageMapPage.cs new file mode 100644 index 00000000..6753585e --- /dev/null +++ b/src/LibRed/LibRed.Core/Pages/UsageMapPage.cs @@ -0,0 +1,20 @@ +using LibRed.Formats; +using LibRed.IO; + +namespace LibRed.Pages; + +/// +/// A page-usage bitmap page. Usage maps track which pages belong to a table (or are +/// free). They come in two flavours — inline (stored in the TDEF) and reference +/// (a chain of dedicated bitmap pages) — handled by . +/// +public sealed class UsageMapPage : Page +{ + public override PageType Type => PageType.PageUsageBitmap; + + public override void Read(PageBuffer buffer, JetFormatBase format) + { + PageNumber = buffer.PageNumber; + // TODO: decode the bitmap payload. + } +} diff --git a/src/LibRed/LibRed.Core/Storage/DatabaseCreator.cs b/src/LibRed/LibRed.Core/Storage/DatabaseCreator.cs new file mode 100644 index 00000000..f0db3fbd --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/DatabaseCreator.cs @@ -0,0 +1,350 @@ +using System.Buffers.Binary; +using System.Text; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// Builds the pages of a brand-new, empty Jet/ACE database from scratch — the native, cross-platform +/// replacement for the DAO/ADOX file creator. Currently synthesises page 0 (the database definition +/// page); the system catalog follows. +/// +public static class DatabaseCreator +{ + private static readonly DateTime OleEpoch = new(1899, 12, 30); + + /// + /// Synthesises page 0 (the database definition page) — the exact inverse of + /// . Byte-for-byte identical to a real empty file's + /// page 0 for the same parameters (verified against Access-created files). + /// + /// Format version byte (e.g. 0x02 = ACE 12 / Access 2007). + /// true for the ACCDB identifier, false for the MDB (Jet) identifier. + /// ANSI code page (1252 for en-US). + /// Default collation LCID (1033 = en-US). + /// Sort-order version (0 = General Legacy, 1 = General). + /// Creation timestamp as an OLE-automation date (days since 1899-12-30), passed + /// as the raw double so the exact millisecond-precise bit pattern is preserved — the page-0 SID mask is bound + /// to those exact bits (see ). + public static byte[] BuildDefinitionPage( + byte version, bool isAccdb, int codePage, int collationLcid, byte collationVersion, double creationDays) + { + var page = new byte[4096]; + + // --- Pre-mask region (0x00..0x17, cleartext) --- + page[0x00] = 0x00; // page type + page[0x01] = 0x01; // observed constant 01 00 00 + string id = isAccdb ? JetFormatBase.AceIdentifier : JetFormatBase.JetIdentifier; + Encoding.ASCII.GetBytes(id).CopyTo(page, JetFormatBase.FormatIdentifierOffset); // 0x04, 15 bytes; 0x13 stays NUL + page[JetFormatBase.VersionOffset] = version; // 0x14 + page[0x15] = (byte)(version == 0x03 ? 0x01 : 0x00); // 2010-format minor byte + + // --- Masked header (0x18..0x97): build the clear image, then XOR the fixed mask over it. --- + int b = JetFormatBase.PageZeroHeaderMaskStart; + Span clear = stackalloc byte[JetFormatBase.PageZeroHeaderMask.Length]; + + BinaryPrimitives.WriteInt32LittleEndian(clear[(0x18 - b)..], 0x00000100); // 0x18 fixed constant + BinaryPrimitives.WriteInt32LittleEndian(clear[(0x1C - b)..], 0x00000101); // 0x1C fixed constant + // 0x20..0x2C: system-catalog bootstrap pointers = MSysObjects/ACEs/Queries/Relationships pages. + BinaryPrimitives.WriteInt32LittleEndian(clear[(0x20 - b)..], 2); + BinaryPrimitives.WriteInt32LittleEndian(clear[(0x24 - b)..], 3); + BinaryPrimitives.WriteInt32LittleEndian(clear[(0x28 - b)..], 4); + BinaryPrimitives.WriteInt32LittleEndian(clear[(0x2C - b)..], 5); + BinaryPrimitives.WriteUInt16LittleEndian(clear[(JetFormatBase.CodePageOffset - b)..], (ushort)codePage); // 0x3C + // 0x3E database key = 0 (unencrypted); leave clear zero. + // 0x42..0x69 password (empty): on disk the field is additionally masked by a 4-byte value derived + // from the creation date, so the clear image (pre-header-mask) of an empty password is that value + // repeated — reproduce it exactly. + double days = creationDays; + Span dateMask = stackalloc byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(dateMask, (int)days); + for (int i = 0; i < 40; i++) + clear[JetFormatBase.PasswordOffset - b + i] = dateMask[i % 4]; + // 0x6A fixed sentinel constant. + BinaryPrimitives.WriteInt32LittleEndian(clear[(0x6A - b)..], 0x000011A6); + // 0x6E..0x71 collating sort order: LCID + version byte at 0x71. + BinaryPrimitives.WriteUInt16LittleEndian(clear[(JetFormatBase.CollationSortOrderOffset - b)..], (ushort)collationLcid); + clear[JetFormatBase.CollationVersionOffset - b] = collationVersion; + // 0x72..0x79 creation date (OLE double). + BinaryPrimitives.WriteDoubleLittleEndian(clear[(JetFormatBase.CreationDateOffset - b)..], days); + + ReadOnlySpan mask = JetFormatBase.PageZeroHeaderMask; + for (int i = 0; i < mask.Length; i++) + page[b + i] = (byte)(clear[i] ^ mask[i]); + + // --- Post-mask tail (cleartext) --- + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(0x98), 0x00000654); // fixed constant + Encoding.ASCII.GetBytes("4.0").CopyTo(page, 0x9C); // engine version string + + // User commit-byte table (0xE00–0xFFF): 256 users × 2 bytes at the end of the header page — Jet 3.x's + // 0x600 commit region relocated to the end of the 4 KB page (see the Jet locking white paper). Each + // pair is a per-user commit/lock status. A fresh file must seed every slot to the neutral idle value + // 00 01 — NOT 00 00, which Jet reads as "mid-write to disk"; with no matching .ldb user lock that + // reads as a suspect/corrupt database and forces a repair before Access will open it. + for (int i = 0xE00; i < 0x1000; i++) page[i] = (byte)(i & 1); + + return page; + } + + // System-column flag bits: Sys = 0x10 (system-catalog column), SysSid = 0x10|0x20 (also a security id). + private const byte Sys = 0x10, SysSid = 0x30; + + // MSysObjects — the system catalog. Declared in the real physical (alphabetical) descriptor order with + // explicit canonical ColumnIds and system flags, exactly as an Access-created file stores it. + private static readonly ColumnSpec[] MSysObjectsColumns = + [ + new("Connect", JetDataType.Memo, 0, false, ColumnId: 9, SystemFlags: Sys), + new("Database", JetDataType.Memo, 0, false, ColumnId: 8, SystemFlags: Sys), + new("DateCreate", JetDataType.DateTime, 8, true, ColumnId: 4, SystemFlags: Sys), + new("DateUpdate", JetDataType.DateTime, 8, true, ColumnId: 5, SystemFlags: Sys), + new("Flags", JetDataType.Int32, 4, true, ColumnId: 7, SystemFlags: Sys), + new("ForeignName", JetDataType.Text, 510, false, ColumnId: 10, SystemFlags: Sys), + new("Id", JetDataType.Int32, 4, true, ColumnId: 0, SystemFlags: Sys), + new("Lv", JetDataType.Ole, 0, false, ColumnId: 13, SystemFlags: Sys), + new("LvExtra", JetDataType.Ole, 0, false, ColumnId: 16, SystemFlags: Sys), + new("LvModule", JetDataType.Ole, 0, false, ColumnId: 15, SystemFlags: Sys), + new("LvProp", JetDataType.Ole, 0, false, ColumnId: 14, SystemFlags: Sys), + new("Name", JetDataType.Text, 510, false, ColumnId: 2, SystemFlags: Sys), + new("Owner", JetDataType.Binary, 510, false, ColumnId: 6, SystemFlags: SysSid), + new("ParentId", JetDataType.Int32, 4, true, ColumnId: 1, SystemFlags: Sys), + new("RmtInfoLong", JetDataType.Ole, 0, false, ColumnId: 12, SystemFlags: Sys), + new("RmtInfoShort", JetDataType.Binary, 510, false, ColumnId: 11, SystemFlags: Sys), + new("Type", JetDataType.Int16, 2, true, ColumnId: 3, SystemFlags: Sys), + ]; + + // MSysACEs — per-object access-control rows. Real physical order + ColumnIds (ObjectId at fixed offset 0). + private static readonly ColumnSpec[] MSysAcesColumns = + [ + new("ACM", JetDataType.Int32, 4, true, ColumnId: 2, SystemFlags: Sys), + new("FInheritable", JetDataType.Boolean, 1, true, ColumnId: 3, SystemFlags: Sys), + new("ObjectId", JetDataType.Int32, 4, true, ColumnId: 0, SystemFlags: Sys), + new("SID", JetDataType.Binary, 510, false, ColumnId: 1, SystemFlags: SysSid), + ]; + + // MSysQueries — stored query/view definitions (empty in a fresh database). + private static readonly ColumnSpec[] MSysQueriesColumns = + [ + new("Attribute", JetDataType.Byte, 1, true, ColumnId: 1, SystemFlags: Sys), + new("Expression", JetDataType.Memo, 0, false, ColumnId: 5, SystemFlags: Sys), + new("Flag", JetDataType.Int16, 2, true, ColumnId: 6, SystemFlags: Sys), + new("LvExtra", JetDataType.Int32, 4, true, ColumnId: 7, SystemFlags: Sys), + new("Name1", JetDataType.Text, 510, false, ColumnId: 3, SystemFlags: Sys), + new("Name2", JetDataType.Text, 510, false, ColumnId: 4, SystemFlags: Sys), + new("ObjectId", JetDataType.Int32, 4, true, ColumnId: 0, SystemFlags: Sys), + new("Order", JetDataType.Binary, 510, false, ColumnId: 2, SystemFlags: Sys), + ]; + + // MSysRelationships — relationship (foreign key) definitions (empty in a fresh database). + private static readonly ColumnSpec[] MSysRelationshipsColumns = + [ + new("ccolumn", JetDataType.Int32, 4, true, ColumnId: 2, SystemFlags: Sys), + new("grbit", JetDataType.Int32, 4, true, ColumnId: 1, SystemFlags: Sys), + new("icolumn", JetDataType.Int32, 4, true, ColumnId: 3, SystemFlags: Sys), + new("szColumn", JetDataType.Text, 510, false, ColumnId: 5, SystemFlags: Sys), + new("szObject", JetDataType.Text, 510, false, ColumnId: 4, SystemFlags: Sys), + new("szReferencedColumn", JetDataType.Text, 510, false, ColumnId: 7, SystemFlags: Sys), + new("szReferencedObject", JetDataType.Text, 510, false, ColumnId: 6, SystemFlags: Sys), + new("szRelationship", JetDataType.Text, 510, false, ColumnId: 0, SystemFlags: Sys), + ]; + + private const int SystemFlag = unchecked((int)0x80000000); + + // Per-file SID cluster. A database's on-disk 2-byte SIDs are the DEFAULT WORKGROUP's account SIDs XOR'd with + // a per-file 2-byte mask. The account SIDs were read verbatim from a real System.mdw (the file Access opens + // first to authenticate): admin(user)=03-01, Users(group)=02-01, Engine=02-03, Creator=02-04; the Admins + // group alone has a long per-workgroup SID (which Access materialises as a 98-byte SID on first open, so we + // don't emit it). Object ownership uses the "user" form (byte0 0x03) of Engine/Creator, matching real DAO + // files. Verified against WideTable with mask 24-CC: Users 02-01^24-CC = 26-CD, admin 03-01^24-CC = 27-CD, + // Engine-as-user 03-03^24-CC = 27-CF (system-object owner), Creator-as-user 03-04^24-CC = 27-C8. + // + // The mask is bound to the millisecond-precise creation date: Access derives both from a shared PRNG state + // at create time, so there is NO closed-form date->mask function (144 files, no checksum/PRNG fit) and the + // two MUST travel together. We bake one verified, self-consistent (creation-date, mask) pair — the from- + // scratch analogue of the account-SID constants — giving an Access-openable file with no template/graft. + // TODO: per-file-random dates (and custom/secured workgroups) need the date<->mask coupling cracked. + internal const long SeedCreationDateBits = 0x40E68F1E8943D217L; // 2026-06-27 22:54:07.716 (WideTable) — pairs with SidMask + private static readonly byte[] SidMask = [0x24, 0xCC]; // WideTable's per-file mask (pairs with SeedCreationDateBits) + private static byte[] Masked(byte b0, byte b1) => [(byte)(b0 ^ SidMask[0]), (byte)(b1 ^ SidMask[1])]; + internal static readonly byte[] SidUsers = Masked(0x02, 0x01); // Users group — read grantee / owner of user tables + internal static readonly byte[] SidAdmin = Masked(0x03, 0x01); // admin user — full grantee + private static readonly byte[] SidEngine = Masked(0x03, 0x03); // Engine (user form) — owner of system tables + DAO containers + private static readonly byte[] SidCreator = Masked(0x03, 0x04); // Creator (user form) — inheritable container grant + + /// + /// Creates a new, empty database at from scratch — no DAO/ADOX. Hand-builds the + /// bootstrap (page 0, the page-1 free map, and the MSysObjects/MSysACEs TDEFs with their + /// usage maps + self-registering catalog rows), then the file is a normal LibRed database: further tables + /// are added through the ordinary writers. Produces a LibRed-openable, round-trippable file (Access-level + /// fidelity — the remaining system tables and the 0xE00 map — is a follow-up). + /// + public static void CreateEmpty(string path, byte version = 0x02) + { + JetFormatBase format = JetFormatBase.FromVersionByte(version); + // The four core system tables live at the exact pages the page-0 bootstrap pointers name (2/3/4/5); + // their usage maps follow at 6..9. Access uses those pointers to find the catalog. + const int objPage = 2, acesPage = 3, queriesPage = 4, relPage = 5; + + var (objTdef, objMap) = BuildSystemTable(format, MSysObjectsColumns, usageMapPage: 6); + var (acesTdef, acesMap) = BuildSystemTable(format, MSysAcesColumns, usageMapPage: 7); + var (queriesTdef, queriesMap) = BuildSystemTable(format, MSysQueriesColumns, usageMapPage: 8); + var (relTdef, relMap) = BuildSystemTable(format, MSysRelationshipsColumns, usageMapPage: 9); + const int seedPages = 10; // page 0, page 1, 4 core TDEFs (2..5), 4 usage maps (6..9) + byte[][] seed = + [ + BuildDefinitionPage(version, isAccdb: true, 1252, 1033, 0, BitConverter.Int64BitsToDouble(SeedCreationDateBits)), + BuildFreeMapPage(format, seedPages), // page 1: global free-pages map + objTdef, acesTdef, queriesTdef, relTdef, // pages 2..5: core TDEFs + objMap, acesMap, queriesMap, relMap, // pages 6..9: their usage maps + ]; + // Creation is an explicit create-new operation. FileMode.Create would silently truncate an existing + // database before any of the format bootstrap work could validate or fail. + using (var fs = new FileStream(path, FileMode.CreateNew, FileAccess.Write, FileShare.None)) + foreach (byte[] p in seed) fs.Write(p, 0, format.PageSize); + + // Reopen through the normal stack and self-register the four core tables, so the catalog then finds + // them and every other table can go through TableCreator. + using var db = JetDatabase.Open(path, readOnly: false); + // The DAO catalog hierarchy Access navigates: a root (0x0F000000) parents the three containers + // (Tables/Databases/Relationships); tables live under Tables, MSysDb under Databases. Access looks + // objects up by (ParentId, Name), so these parents must be exact. + const int root = 0x0F000000, tablesC = 0x0F000001, databasesC = 0x0F000002, relationshipsC = 0x0F000003; + + Table msysObjects = db.OpenTableAt(objPage, "MSysObjects"); + Table msysAces = db.OpenTableAt(acesPage, "MSysACEs"); + void Ace(int objectId, byte[] sid, int acm, bool inherit = false) + { + var v = new object?[msysAces.Definition.Columns.Count]; + v[msysAces.Definition.FindColumn("ObjectId")!.Index] = objectId; + v[msysAces.Definition.FindColumn("SID")!.Index] = sid; + v[msysAces.Definition.FindColumn("ACM")!.Index] = acm; + v[msysAces.Definition.FindColumn("FInheritable")!.Index] = inherit; + msysAces.Insert(v); + } + + // Catalog rows in the real stored order: DAO containers + MSysDb first, then the system tables, then + // the DAO "SingleRecord" pseudo-object. Access's catalog bootstrap walks MSysObjects in this order. + InsertCatalogRow(msysObjects, tablesC, "Tables", type: 3, SystemFlag, parentId: root, owner: SidEngine); + InsertCatalogRow(msysObjects, databasesC, "Databases", type: 3, SystemFlag, parentId: root, owner: SidEngine); + InsertCatalogRow(msysObjects, relationshipsC, "Relationships", type: 3, SystemFlag, parentId: root, owner: SidEngine); + InsertCatalogRow(msysObjects, 0x10000000, "MSysDb", type: 2, SystemFlag, parentId: databasesC, owner: SidUsers); + InsertCatalogRow(msysObjects, objPage, "MSysObjects", type: 1, SystemFlag, parentId: tablesC, owner: SidEngine); + InsertCatalogRow(msysObjects, acesPage, "MSysACEs", type: 1, SystemFlag, parentId: tablesC, owner: SidEngine); + InsertCatalogRow(msysObjects, queriesPage, "MSysQueries", type: 1, SystemFlag, parentId: tablesC, owner: SidEngine); + InsertCatalogRow(msysObjects, relPage, "MSysRelationships", type: 1, SystemFlag, parentId: tablesC, owner: SidEngine); + InsertCatalogRow(msysObjects, unchecked((int)0x80000000), "SingleRecord", type: 9, flags: 0x10000000, parentId: relationshipsC); + + // Access-control rows (verified per-object-class masks) in the same object order as the catalog rows. + Ace(tablesC, SidCreator, 0x0F00FE, inherit: true); Ace(tablesC, SidUsers, 0x060001); Ace(tablesC, SidAdmin, 0x0FFEFF, inherit: true); + Ace(databasesC, SidUsers, 0x060000); + Ace(relationshipsC, SidCreator, 0x0F00FE, inherit: true); Ace(relationshipsC, SidUsers, 0x060001); Ace(relationshipsC, SidAdmin, 0x0FFFFF, inherit: true); + Ace(0x10000000, SidUsers, 0x06000E); Ace(0x10000000, SidAdmin, 0x00000E); // MSysDb + Ace(objPage, SidUsers, 0x060000); Ace(objPage, SidAdmin, 0x000014); // MSysObjects + Ace(acesPage, SidUsers, 0x060000); // MSysACEs (Users only) + Ace(queriesPage, SidUsers, 0x060000); Ace(queriesPage, SidAdmin, 0x000014); // MSysQueries + Ace(relPage, SidUsers, 0x0E0000); Ace(relPage, SidAdmin, 0x000014); // MSysRelationships + + // The system tables carry the indexes Access uses to navigate the catalog. ParentIdName is the first + // real index, Id (the PK) second — matching real files. + db.CreateIndex("MSysObjects", "ParentIdName", [("ParentId", false), ("Name", false)], isUnique: true); + db.CreateIndex("MSysObjects", "Id", [("Id", false)], isUnique: true, isPrimary: true); + db.CreateIndex("MSysACEs", "ObjectId", [("ObjectId", false)], disallowNull: true); + db.CreateIndex("MSysQueries", "ObjectIdAttribute", [("ObjectId", false), ("Attribute", false), ("Order", false)], isUnique: true, isPrimary: true); + db.CreateIndex("MSysRelationships", "szRelationship", [("szRelationship", false)]); + db.CreateIndex("MSysRelationships", "szObject", [("szObject", false)]); + db.CreateIndex("MSysRelationships", "szReferencedObject", [("szReferencedObject", false)]); + + // Note: MSysAccessStorage and the MSysNavPane* tables are deliberately NOT created here. Verified across + // ~135 pure-DAO reference files: none of them carry those tables — Access creates them (plus the nav-pane + // long SID) itself on first open. Emitting them ourselves both diverged from real DAO output and produced + // a table Access's compact rejected ("-1206 Unrecognized database format"). A faithful native file mirrors + // DAO: core catalog only, and Access augments on first open. + } + + private static void InsertCatalogRow(Table msysObjects, int id, string name, short type, int flags, int parentId = 0, byte[]? owner = null) + { + var values = new object?[msysObjects.Definition.Columns.Count]; + void Set(string col, object? v) => values[msysObjects.Definition.FindColumn(col)!.Index] = v; + Set("Id", id); + Set("ParentId", parentId); + Set("Name", name); + Set("Type", type); // 1 = table, 2 = database (MSysDb), 3 = DAO container, 9 = SingleRecord + Set("Flags", flags); + if (owner != null) Set("Owner", owner); + Set("DateCreate", DateTime.Now); + Set("DateUpdate", DateTime.Now); + msysObjects.Insert(values); + } + + /// Builds the page-1 global free-pages map: a data page with two 69-byte inline maps. Row 0 is + /// the free map — pages < are used (bit 0); pages from there to the map's + /// 512-page reach are marked free (bit 1), pre-declaring space beyond the file end so an allocator + /// (LibRed's or Access's) grabs a "free" page and grows the file. Row 1 is an all-zeros companion, as real + /// files carry. + private static byte[] BuildFreeMapPage(JetFormatBase format, int usedPages) + { + const int mapLen = 1 + 4 + 64; // inline map: type + start page + 64-byte bitmap (512 pages) + var page = new byte[format.PageSize]; + page[0] = (byte)PageType.DataPage; + page[1] = 0x01; + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.DataOwnerOffset, 4), 1); // global-map owner (observed) + + int row0 = format.PageSize - mapLen; // free map (highest offset — the one the allocator reads) + int row1 = row0 - mapLen; // all-zeros companion + for (int p = usedPages; p < 64 * 8; p++) // mark pages >= usedPages free + page[row0 + 5 + (p >> 3)] |= (byte)(1 << (p & 7)); + + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset, 2), (ushort)row0); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + 2, 2), (ushort)row1); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2), 2); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), (ushort)(row1 - format.DataRowDirectoryOffset - 4)); + return page; + } + + /// Builds a system table's TDEF page and its owned/free usage-map page. Long-value (Memo/Ole) + /// columns each get an owned+free map on that page (rows 2 onward, after the two data-page maps), so a + /// row that stores a long value — e.g. an MSysObjects catalog row carrying an LvProp blob — + /// has somewhere to record its LVAL page. + private static (byte[] Tdef, byte[] UsageMap) BuildSystemTable( + JetFormatBase format, IReadOnlyList columns, int usageMapPage) + { + var longValueCols = columns.Select((c, pos) => (c, id: c.ColumnId ?? pos)) + .Where(x => x.c.Type is JetDataType.Memo or JetDataType.Ole).ToList(); + var longValueSpecs = new List(longValueCols.Count); + for (int j = 0; j < longValueCols.Count; j++) + longValueSpecs.Add(new LongValueColumnSpec(longValueCols[j].id, UsedRow: 2 + 2 * j, FreeRow: 3 + 2 * j, MapPage: usageMapPage)); + + byte[] tdef = TdefBuilder.Build(format, TableType.System, columns, longValueColumns: longValueSpecs).Page; + tdef[format.TdefOwnedPagesOffset] = 0; WriteInt24(tdef, format.TdefOwnedPagesOffset + 1, usageMapPage); + tdef[format.TdefFreePagesOffset] = 1; WriteInt24(tdef, format.TdefFreePagesOffset + 1, usageMapPage); + var tdefPage = new byte[format.PageSize]; + Array.Copy(tdef, tdefPage, format.PageSize); // these system TDEFs fit one page + + byte[] usageMap = BuildUsageMapPage(format, 2 + longValueCols.Count * 2); + return (tdefPage, usageMap); + } + + private static byte[] BuildUsageMapPage(JetFormatBase format, int mapCount) + { + const int mapLen = 1 + 4 + 64; // inline map record: type + start page + 64-byte bitmap + var page = new byte[format.PageSize]; + page[0] = (byte)PageType.DataPage; + page[1] = 0x01; + int offset = format.PageSize; + for (int row = 0; row < mapCount; row++) + { + offset -= mapLen; + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + row * 2, 2), (ushort)offset); + } + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2), (ushort)mapCount); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), + (ushort)(offset - format.DataRowDirectoryOffset - mapCount * 2)); + return page; + } + + private static void WriteInt24(byte[] b, int o, int v) + { + b[o] = (byte)v; b[o + 1] = (byte)(v >> 8); b[o + 2] = (byte)(v >> 16); + } +} diff --git a/src/LibRed/LibRed.Core/Storage/IndexCursor.cs b/src/LibRed/LibRed.Core/Storage/IndexCursor.cs new file mode 100644 index 00000000..16bfd2ec --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/IndexCursor.cs @@ -0,0 +1,68 @@ +using LibRed.Catalog; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// An index entry: the decoded key values (in index column order) and the row they point at. +public readonly record struct IndexEntry(object?[] Key, RowId Row); + +/// +/// Walks an index B-tree and yields the row pointers in index (key) order. +/// +/// +/// Each index page has an entry-position bitmask at whose set +/// bits give the end offsets of successive entries within the entry-data region that begins +/// at . A leaf entry ends with a 4-byte big-endian row pointer +/// (page in the high 24 bits, row in the low 8); a node entry instead ends with the 4-byte +/// child page number. Key bytes are not decoded here — only the trailing pointers are read — +/// so the order-preserving key encoding is not needed to enumerate rows in order. +/// +public sealed class IndexCursor(PageChannel channel, int rootPage) +{ + private readonly PageChannel _channel = channel; + private readonly int _rootPage = rootPage; + + public IEnumerable RowIds() => WalkRaw().Select(e => e.Row); + + /// + /// Yields each entry with its decoded key (per ) in index order. + /// Key columns that use Jet's lossy text/binary collation decode as null. + /// + public IEnumerable Entries(IReadOnlyList<(ColumnDef Column, bool Ascending)> columns) => + WalkRaw().Select(e => new IndexEntry(IndexKeyDecoder.Decode(columns, e.Key), e.Row)); + + /// + /// Yields each entry's full (decompressed) key bytes and row pointer, without decoding — used + /// to verify the order-preserving key encoding byte-for-byte against what Access stored. + /// + public IEnumerable<(byte[] Key, RowId Row)> RawEntries() => WalkRaw(); + + private IEnumerable<(byte[] Key, RowId Row)> WalkRaw() + { + var pending = new Stack(); + var visited = new HashSet(); + int? owner = null; + pending.Push(_rootPage); + while (pending.Count > 0) + { + int pageNumber = pending.Pop(); + if (!visited.Add(pageNumber)) + throw new InvalidDataException($"Index traversal contains a repeated/cyclic page {pageNumber}."); + CheckedIndexPage page = IndexPageReader.Read(_channel, pageNumber, owner); + owner ??= page.Owner; + + if (page.Type == PageType.LeafIndexPage) + { + foreach ((byte[] key, int pointer) in IndexPageReader.DecodeEntries(page)) + yield return (key, new RowId(pointer >> 8, pointer & 0xFF)); + continue; + } + pending.Push(page.Tail); + for (int i = page.EntryRanges.Count - 1; i >= 0; i--) + pending.Push(IndexPageReader.ReadInt32BigEndian( + page.Buffer, IndexPageReader.EntryDataOffset + page.EntryRanges[i].End - 4)); + } + } + +} diff --git a/src/LibRed/LibRed.Core/Storage/IndexKeyDecoder.cs b/src/LibRed/LibRed.Core/Storage/IndexKeyDecoder.cs new file mode 100644 index 00000000..6fbaa54f --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/IndexKeyDecoder.cs @@ -0,0 +1,147 @@ +using System.Buffers.Binary; +using LibRed.Catalog; +using LibRed.Formats; + +namespace LibRed.Storage; + +/// +/// Decodes the order-preserving key bytes of an index entry back into column values. +/// +/// +/// Each non-boolean column is prefixed by a flag byte (0x7F start / 0x00 null for ascending; +/// 0x80 / 0xFF for descending). Fixed/numeric types use a reversible transform (sign-bit flip +/// + big-endian for integers; an IEEE transform for floating point). TEXT/Binary/GUID keys use +/// Jet's collation encoding, which is lossy and not reversible — decoding stops at the first +/// such column (its value and any following columns are returned as null). +/// +public static class IndexKeyDecoder +{ + private const byte AscBooleanTrue = 0x00; // ascending: true sorts before false + + public static object?[] Decode(IReadOnlyList<(ColumnDef Column, bool Ascending)> columns, ReadOnlySpan key) + { + var values = new object?[columns.Count]; + int pos = 0; + + for (int i = 0; i < columns.Count; i++) + { + (ColumnDef column, bool ascending) = columns[i]; + if (pos >= key.Length) break; + + // Booleans carry no flag byte — the value IS the byte. + if (column.Type == JetDataType.Boolean) + { + byte b = key[pos++]; + values[i] = ascending ? b == AscBooleanTrue : b != AscBooleanTrue; + continue; + } + + byte flag = key[pos++]; + if (flag == (ascending ? IndexKeyFlags.AscNull : IndexKeyFlags.DescNull)) + { + values[i] = null; + continue; + } + // Otherwise flag is the start flag (0x7F / 0x80). + + // GUID key: 8 bytes, a 0x09 marker, 8 bytes, a terminator — the 16 bytes are the GUID's + // canonical string order (see IndexKeyEncoder). Descending inverts every data byte (the 0x09 + // marker stays constant), so undo that here. + if (column.Type == JetDataType.Guid) + { + if (pos + 18 > key.Length) break; + var s = new byte[16]; + for (int j = 0; j < 8; j++) s[j] = ascending ? key[pos + j] : (byte)~key[pos + j]; + for (int j = 0; j < 8; j++) s[8 + j] = ascending ? key[pos + 9 + j] : (byte)~key[pos + 9 + j]; + pos += 18; + values[i] = new Guid(Convert.ToHexString(s)); + continue; + } + + int size = FixedKeySize(column.Type); + if (size <= 0 || pos + size > key.Length) + break; // text/binary/unsupported (lossy) — cannot reliably continue + + Span raw = key.Slice(pos, size).ToArray(); + pos += size; + values[i] = DecodeFixed(column.Type, raw, ascending); + } + + return values; + } + + private static int FixedKeySize(JetDataType type) => type switch + { + JetDataType.Byte => 1, + JetDataType.Int16 => 2, + JetDataType.Int32 => 4, + JetDataType.Single => 4, + JetDataType.Double or JetDataType.DateTime => 8, + JetDataType.Currency => 8, + _ => -1, + }; + + private static object DecodeFixed(JetDataType type, Span raw, bool ascending) + { + switch (type) + { + case JetDataType.Byte: + if (!ascending) raw[0] = (byte)~raw[0]; + return raw[0]; + + case JetDataType.Int16: + return (short)DecodeInteger(raw, ascending); + case JetDataType.Int32: + return (int)DecodeInteger(raw, ascending); + case JetDataType.Currency: + return DecodeInteger(raw, ascending) / 10000m; + + case JetDataType.Single: + return BitConverter.Int32BitsToSingle((int)DecodeFloatBits(raw, ascending)); + case JetDataType.Double: + return BitConverter.Int64BitsToDouble(DecodeFloatBits(raw, ascending)); + case JetDataType.DateTime: + return DateTime.FromOADate(BitConverter.Int64BitsToDouble(DecodeFloatBits(raw, ascending))); + + default: + throw new NotSupportedException($"Index key type {type} is not decodable."); + } + } + + /// Reverses the integer key transform (descending = bytes inverted; sign bit flipped; big-endian). + private static long DecodeInteger(Span raw, bool ascending) + { + if (!ascending) + for (int i = 0; i < raw.Length; i++) raw[i] = (byte)~raw[i]; + raw[0] ^= 0x80; + + long value = 0; + bool negative = (raw[0] & 0x80) != 0; + if (negative) value = -1; // sign-extend + foreach (byte b in raw) value = (value << 8) | b; + return value; + } + + /// Reverses the floating-point key transform, returning the raw IEEE bits big-endian. + private static long DecodeFloatBits(Span raw, bool ascending) + { + if (ascending) + { + if ((raw[0] & 0x80) != 0) raw[0] ^= 0x80; // was positive: undo first-bit flip + else for (int i = 0; i < raw.Length; i++) raw[i] = (byte)~raw[i]; // was negative: undo full invert + } + else + { + if ((raw[0] & 0x80) == 0) // was positive + { + for (int i = 0; i < raw.Length; i++) raw[i] = (byte)~raw[i]; + raw[0] ^= 0x80; + } + // was negative: stored as-is + } + + long bits = 0; + foreach (byte b in raw) bits = (bits << 8) | b; + return bits; + } +} diff --git a/src/LibRed/LibRed.Core/Storage/IndexKeyEncoder.cs b/src/LibRed/LibRed.Core/Storage/IndexKeyEncoder.cs new file mode 100644 index 00000000..170b8ca2 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/IndexKeyEncoder.cs @@ -0,0 +1,277 @@ +using System.Buffers.Binary; +using System.Globalization; +using LibRed.Catalog; +using LibRed.Formats; + +namespace LibRed.Storage; + +/// +/// Encodes index column values into Jet's order-preserving key bytes — the inverse of +/// . Lexicographic comparison of the produced bytes matches the +/// index's logical order, so a freshly encoded key can be slotted into a leaf by byte compare. +/// +/// +/// Each non-boolean column is prefixed by a flag byte (0x7F start / 0x00 null ascending; +/// 0x80 / 0xFF descending). Fixed/numeric types use the reversible transform (sign-bit flip + +/// big-endian for integers; an IEEE transform for floating point); descending inverts the bytes. +/// GUID keys are encoded byte-faithfully (string-order halves split by 0x09, terminated by 0x08). +/// Text uses Jet's collation; general Binary keys use the same 0x09-chunked layout for any length. +/// +public static class IndexKeyEncoder +{ + /// Access indexes only the first 255 characters of a Memo (Long Text) value (verified vs ACE). + private const int MemoKeyMaxChars = 255; + + public static byte[] Encode(IReadOnlyList<(ColumnDef Column, bool Ascending)> columns, object?[] values) + { + var buffer = new List(); + + for (int i = 0; i < columns.Count; i++) + { + (ColumnDef column, bool ascending) = columns[i]; + object? value = values[column.Index]; + + if (column.Type == JetDataType.Boolean) + { + // No flag byte: ascending true sorts before false (0x00 < 0xFF); descending mirrors. + bool b = value is true; + buffer.Add((byte)((b ^ !ascending) ? 0x00 : 0xFF)); + continue; + } + + if (value is null) + { + buffer.Add(ascending ? IndexKeyFlags.AscNull : IndexKeyFlags.DescNull); + continue; + } + + // Text uses Jet's collation: start flag then the collation key body (weights, inline + // ignorable codes, terminator). Descending inverts every byte of that ascending key + // and appends a 0x00 (verified against ACE). + // + // A Memo (Long Text) column IS indexable in Access, and its key is the *same* collation key + // over only the value's first 255 characters — verified vs ACE: a 256- or 300-character memo + // produces byte-for-byte the key of its 255-character prefix. + if (column.Type is JetDataType.Text or JetDataType.Memo) + { + // Index-key weights are only implemented for General legacy; refuse other collations up front + // rather than emit wrong bytes with the General-v0 table (e.g. a 2010+ General-v1 column, or a + // non-English locale). The collation is read per-column from the descriptor (0x0B–0x0E). + if (!column.Collation.IsIndexKeyEncodable) + throw new NotSupportedException( + $"Index key encoding for column '{column.Name}' uses collation {column.Collation.Order} " + + $"version {column.Collation.Version}, which is not implemented yet (only General legacy is)."); + + string text = (string)value; + if (column.Type == JetDataType.Memo && text.Length > MemoKeyMaxChars) + text = text[..MemoKeyMaxChars]; + + var ascendingKey = new List { IndexKeyFlags.AscStart }; + if (!JetTextCollation.TryEncode(text, ascendingKey)) + throw new NotSupportedException($"Text index key '{text}' contains a character whose collation weight is not implemented yet."); + + if (ascending) + { + buffer.AddRange(ascendingKey); + } + else + { + foreach (byte b in ascendingKey) buffer.Add((byte)~b); + buffer.Add(0x00); + } + continue; + } + + // GUID key (verified against ACE): the start flag, then the 16 GUID bytes in canonical *string* + // order (NOT the mixed-endian .ToByteArray layout), split into two 8-byte halves by a constant + // 0x09 marker, and terminated by 0x08. Fixed 19-byte key; data bytes equal to 0x08/0x09 need no + // escaping because every field is at a fixed offset. Descending inverts every byte EXCEPT the + // 0x09 field marker (which stays constant so the structure is parseable, and doesn't affect + // ordering since it's equal in every key) — verified against ACE. + if (column.Type == JetDataType.Guid) + { + Guid guid = value switch + { + Guid g => g, + byte[] b when b.Length == 16 => new Guid(b), + _ => throw new NotSupportedException($"Cannot encode GUID index key from {value.GetType().Name}."), + }; + byte[] s = Convert.FromHexString(guid.ToString("N")); // 16 bytes, canonical string order + + if (ascending) + { + buffer.Add(IndexKeyFlags.AscStart); // 0x7F + buffer.AddRange(s.AsSpan(0, 8)); + buffer.Add(0x09); + buffer.AddRange(s.AsSpan(8, 8)); + buffer.Add(0x08); + } + else + { + buffer.Add(IndexKeyFlags.DescStart); // 0x80 = ~0x7F + for (int j = 0; j < 8; j++) buffer.Add((byte)~s[j]); + buffer.Add(0x09); // field marker kept as-is + for (int j = 8; j < 16; j++) buffer.Add((byte)~s[j]); + buffer.Add(unchecked((byte)~0x08)); // 0xF7 + } + continue; + } + + // Binary key (verified against ACE's EverythingIsBytes fixture): the start flag, then the raw + // bytes in **8-byte chunks**. Each chunk is 8 bytes (real bytes left-aligned, zero-padded on the + // right) followed by a control byte: 0x09 when another chunk follows (a full 8-byte chunk with + // more to come), otherwise the real-byte count of this final chunk (1..8; 0x08 for a full final + // chunk, 0x00 for empty data). This is the same chunking as the GUID key (a 16-byte value → two + // chunks: 8, 0x09, 8, 0x08); the old fixed 4-byte MSysQueries.Order case is the single-chunk form + // (7F <4B> 00 00 00 00 04). Descending inverts every byte EXCEPT the 0x09 continuation markers + // (which stay constant so structure is parseable and they're equal across keys) — mirrors GUID. + if (column.Type == JetDataType.Binary) + { + EncodeBinaryChunked(buffer, (byte[])value, ascending); + continue; + } + + int size = FixedKeySize(column.Type); + if (size <= 0) + throw new NotSupportedException( + $"Index key encoding for {column.Type} (binary collation) is not supported yet."); + + buffer.Add(ascending ? IndexKeyFlags.AscStart : IndexKeyFlags.DescStart); + byte[] raw = EncodeFixed(column, value); + if (!ascending) + for (int j = 0; j < raw.Length; j++) raw[j] = (byte)~raw[j]; + buffer.AddRange(raw); + } + + return [.. buffer]; + } + + /// + /// Appends Jet's order-preserving binary index key: start flag, then 8-byte chunks each followed by + /// a control byte (0x09 = "full chunk, more follow"; 1..8 = real-byte count of the final chunk). + /// Descending inverts every byte except the 0x09 continuation markers (verified against ACE). + /// + private static void EncodeBinaryChunked(List buffer, byte[] data, bool ascending) + { + buffer.Add(ascending ? IndexKeyFlags.AscStart : IndexKeyFlags.DescStart); + + int offset = 0; + do + { + int n = Math.Min(8, data.Length - offset); + for (int j = 0; j < 8; j++) + { + byte b = j < n ? data[offset + j] : (byte)0; + buffer.Add(ascending ? b : (byte)~b); + } + offset += n; + + if (offset < data.Length) + buffer.Add(0x09); // continuation marker (constant either way) + else + buffer.Add(ascending ? (byte)n : (byte)~n); // terminator = final-chunk length + } + while (offset < data.Length); + } + + private static int FixedKeySize(JetDataType type) => type switch + { + JetDataType.Byte => 1, + JetDataType.Int16 => 2, + JetDataType.Int32 => 4, + JetDataType.Single => 4, + JetDataType.Double or JetDataType.DateTime => 8, + JetDataType.Currency => 8, + JetDataType.FixedPoint => 17, // sign byte + 16-byte big-endian magnitude + _ => -1, + }; + + private static byte[] EncodeFixed(ColumnDef column, object value) + { + var c = CultureInfo.InvariantCulture; + switch (column.Type) + { + case JetDataType.Byte: + return [Convert.ToByte(value, c)]; + case JetDataType.Int16: + return EncodeInteger(Convert.ToInt16(value, c), 2); + case JetDataType.Int32: + return EncodeInteger(Convert.ToInt32(value, c), 4); + case JetDataType.Currency: + return EncodeInteger((long)decimal.Round(Convert.ToDecimal(value, c) * 10000m), 8); + case JetDataType.Single: + return EncodeFloatBits(BitConverter.SingleToInt32Bits(Convert.ToSingle(value, c)), 4); + case JetDataType.Double: + return EncodeFloatBits(BitConverter.DoubleToInt64Bits(Convert.ToDouble(value, c)), 8); + case JetDataType.DateTime: + return EncodeFloatBits(BitConverter.DoubleToInt64Bits(Convert.ToDateTime(value, c).ToOADate()), 8); + case JetDataType.FixedPoint: + return EncodeFixedPoint(Convert.ToDecimal(value, c), column.Scale); + default: + throw new NotSupportedException($"Index key type {column.Type} is not encodable."); + } + } + + /// + /// Encodes a FixedPoint (Numeric/Decimal) index key — a sign byte followed by the value's 16-byte + /// big-endian **unscaled magnitude** (|value| × 10^scale, the same integer the row codec stores). + /// A non-negative value uses sign 0xFF; a negative value is the **bitwise complement of the + /// whole 17-byte positive form** (sign becomes 0x00, magnitude is one's-complemented), so byte + /// order equals numeric order: negatives (sign 0x00) precede non-negatives (0xFF), and complementing + /// makes a larger magnitude sort earlier among negatives. Zero encodes as positive. + /// Verified byte-for-byte against ACE (see DecimalKeyEncodingTests). + /// + private static byte[] EncodeFixedPoint(decimal value, byte scale) + { + decimal factor = 1m; + for (int i = 0; i < scale; i++) factor *= 10m; + decimal magnitude = decimal.Truncate(decimal.Round(Math.Abs(value) * factor, 0)); + int[] bits = decimal.GetBits(magnitude); // [lo, mid, hi, flags]; magnitude has scale 0 + + var key = new byte[17]; + key[0] = 0xFF; // non-negative marker + // 16-byte big-endian magnitude: the top 32-bit word is always 0 for a System.Decimal, then hi/mid/lo. + BinaryPrimitives.WriteUInt32BigEndian(key.AsSpan(1, 4), 0); + BinaryPrimitives.WriteUInt32BigEndian(key.AsSpan(5, 4), (uint)bits[2]); + BinaryPrimitives.WriteUInt32BigEndian(key.AsSpan(9, 4), (uint)bits[1]); + BinaryPrimitives.WriteUInt32BigEndian(key.AsSpan(13, 4), (uint)bits[0]); + + if (value < 0) + for (int i = 0; i < key.Length; i++) key[i] = (byte)~key[i]; + return key; + } + + /// Big-endian with the sign bit flipped, so signed values sort lexicographically. + private static byte[] EncodeInteger(long value, int size) + { + var raw = new byte[size]; + for (int i = size - 1; i >= 0; i--) + { + raw[i] = (byte)(value & 0xFF); + value >>= 8; + } + raw[0] ^= 0x80; + return raw; + } + + /// + /// IEEE bits big-endian with the order-preserving transform: positive numbers flip the high + /// bit, negative numbers invert every byte (so negatives sort below positives, descending). + /// + private static byte[] EncodeFloatBits(long bits, int size) + { + var raw = new byte[size]; + for (int i = size - 1; i >= 0; i--) + { + raw[i] = (byte)(bits & 0xFF); + bits >>= 8; + } + + if (raw[0] < 0x80) // sign bit clear → non-negative value + raw[0] ^= 0x80; + else + for (int i = 0; i < size; i++) raw[i] = (byte)~raw[i]; + + return raw; + } +} diff --git a/src/LibRed/LibRed.Core/Storage/IndexPageReader.cs b/src/LibRed/LibRed.Core/Storage/IndexPageReader.cs new file mode 100644 index 00000000..579eaf43 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/IndexPageReader.cs @@ -0,0 +1,121 @@ +using System.Buffers.Binary; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +internal sealed record CheckedIndexPage( + PageBuffer Buffer, PageType Type, int Owner, int Previous, int Next, int Tail, + int CompressedByteCount, IReadOnlyList<(int Start, int End)> EntryRanges); + +/// Checks the common header, owner, pointers, and entry boundaries of an index page. +internal static class IndexPageReader +{ + internal const int OwnerOffset = 0x04; + internal const int PrevPageOffset = 0x0C; + internal const int NextPageOffset = 0x10; + internal const int ChildTailOffset = 0x14; + internal const int CompressedByteCountOffset = 0x18; + internal const int EntryMaskOffset = 0x1B; + internal const int EntryDataOffset = 0x1E0; + + public static CheckedIndexPage Read(PageChannel channel, int pageNumber, int? expectedOwner) + { + ValidatePageNumber(channel, pageNumber, "index page"); + PageBuffer buffer = channel.ReadPageShared(pageNumber); + var type = (PageType)buffer.ReadByte(0); + if (type is not (PageType.LeafIndexPage or PageType.IntermediateIndexPage)) + throw new InvalidDataException( + $"Page {pageNumber} is type 0x{(byte)type:X2}, not an index page (0x03/0x04)."); + + int owner = buffer.ReadInt32(OwnerOffset); + if (expectedOwner is not null && owner != expectedOwner) + throw new InvalidDataException( + $"Index page {pageNumber} belongs to TDEF {owner}, not TDEF {expectedOwner}."); + + int previous = buffer.ReadInt32(PrevPageOffset); + int next = buffer.ReadInt32(NextPageOffset); + int tail = buffer.ReadInt32(ChildTailOffset); + if (type == PageType.LeafIndexPage) + { + ValidateOptionalPageNumber(channel, previous, "previous leaf"); + ValidateOptionalPageNumber(channel, next, "next leaf"); + } + else + { + ValidatePageNumber(channel, tail, "node child-tail"); + } + + var ranges = new List<(int Start, int End)>(); + int start = 0; + for (int i = EntryMaskOffset; i < EntryDataOffset; i++) + { + byte mask = buffer.ReadByte(i); + for (int bit = 0; bit < 8; bit++) + { + if ((mask & (1 << bit)) == 0) continue; + int end = (i - EntryMaskOffset) * 8 + bit; + if (end - start < 4 || EntryDataOffset + end > buffer.Length) + throw new InvalidDataException( + $"Index page {pageNumber} entry [{start}, {end}) cannot contain its 4-byte trailer."); + ranges.Add((start, end)); + start = end; + } + } + + int compressed = buffer.ReadUInt16(CompressedByteCountOffset); + if (ranges.Count == 0 && compressed != 0) + throw new InvalidDataException($"Empty index page {pageNumber} declares a compressed prefix."); + if (ranges.Count > 0 && compressed > ranges[0].End - ranges[0].Start - 4) + throw new InvalidDataException( + $"Index page {pageNumber} compressed prefix {compressed} exceeds its first key."); + + if (type == PageType.IntermediateIndexPage) + foreach ((_, int end) in ranges) + ValidatePageNumber(channel, ReadInt32BigEndian(buffer, EntryDataOffset + end - 4), "node child"); + + return new CheckedIndexPage(buffer, type, owner, previous, next, tail, compressed, ranges); + } + + public static int ReadInt32BigEndian(PageBuffer page, int offset) => + BinaryPrimitives.ReadInt32BigEndian(page.Slice(offset, 4)); + + /// Decodes a checked page's entries in order, decompressing each entry's shared prefix: the first + /// entry is stored whole and its leading CompressedByteCount bytes are the prefix reapplied to every + /// following entry. Yields the full key bytes and the 4-byte big-endian trailer (a leaf entry's row pointer + /// or a node entry's child page). Shared by the cursor's leaf enumeration and the writer's parse so the + /// prefix rule lives in exactly one place. + public static IEnumerable<(byte[] Key, int Trailer)> DecodeEntries(CheckedIndexPage page) + { + byte[] prefix = []; + bool first = true; + foreach ((int start, int end) in page.EntryRanges) + { + int trailer = ReadInt32BigEndian(page.Buffer, EntryDataOffset + end - 4); + ReadOnlySpan stored = page.Buffer.Slice(EntryDataOffset + start, end - start - 4); + byte[] key = first ? stored.ToArray() : Concat(prefix, stored); + if (first) { prefix = key[..page.CompressedByteCount]; first = false; } + yield return (key, trailer); + } + } + + private static byte[] Concat(ReadOnlySpan a, ReadOnlySpan b) + { + var result = new byte[a.Length + b.Length]; + a.CopyTo(result); + b.CopyTo(result.AsSpan(a.Length)); + return result; + } + + private static void ValidateOptionalPageNumber(PageChannel channel, int pageNumber, string kind) + { + if (pageNumber != 0) ValidatePageNumber(channel, pageNumber, kind); + } + + private static void ValidatePageNumber(PageChannel channel, int pageNumber, string kind) + { + if (pageNumber <= 0 || pageNumber >= channel.PageCount) + throw new InvalidDataException( + $"Index {kind} pointer {pageNumber} is outside the file's 1..{channel.PageCount - 1} range."); + } +} diff --git a/src/LibRed/LibRed.Core/Storage/IndexWriter.cs b/src/LibRed/LibRed.Core/Storage/IndexWriter.cs new file mode 100644 index 00000000..66d3a799 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/IndexWriter.cs @@ -0,0 +1,555 @@ +using System.Buffers.Binary; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// Maintains an index B-tree on row insert: descends from the root to the target leaf, inserts the key, +/// and — when a page overflows — splits it, promoting a separator into the parent and propagating +/// splits up the tree (growing a new root when the root itself splits, and repointing the index-data +/// block's root). Leaf pages keep their doubly-linked prev/next chain; pages are written with prefix +/// compression. Indexes whose key columns need unsupported (text/binary) collation still throw. +/// +/// +/// A page entry is [key bytes][4-byte big-endian trailer]: on a leaf the trailer is the row +/// pointer (page<<8 | row) and the key is the column key; on a node the trailer is the child +/// page and the key is a full leaf key (column key ++ row pointer) used as the separator = the maximum +/// key of that child. See §10. +/// +public sealed class IndexWriter(PageChannel channel, TableDef table) +{ + private const int FreeSpaceOffset = 0x02; + private const int OwnerOffset = 0x04; + private const int PrevPageOffset = 0x0C; // leaf page: previous (lower-key) leaf + private const int NextPageOffset = 0x10; // leaf page: next (higher-key) leaf — Access walks this for COUNT/scan + private const int ChildTailOffset = 0x14; + private const int CompressedByteCountOffset = 0x18; + private const int LevelOffset = 0x1A; // 0 on a leaf, its height above the leaves on a node + private const int EntryMaskOffset = 0x1B; + private const int EntryDataOffset = 0x1E0; + private const int RootPageInBlockOffset = 0x26; // within the 52-byte index-data block + + private readonly PageChannel _channel = channel; + private readonly TableDef _table = table; + private readonly PageAllocator _allocator = new(channel); + private readonly UsageMapWriter _usageMaps = new(channel); + + private readonly record struct Entry(byte[] Key, int Trailer); + + public void AddEntry(IndexDef index, object?[] values, RowId rowId) + { + byte[] key = IndexKeyEncoder.Encode(index.Columns, values); + int pointer = (rowId.Page << 8) | rowId.Row; + byte[] fullKey = WithTrailer(key, pointer); // key ++ 4-byte pointer (what node separators store) + + var path = Descend(index.RootPage, fullKey); // [root, …, leaf] page numbers + InsertIntoLeaf(index, path, key, pointer); + } + + /// + /// Whether the index already contains an entry with this key (ignoring the row pointer) — used to enforce + /// a UNIQUE/PRIMARY index on insert. Descends to the leaf the key belongs in (with the smallest pointer, + /// so we land at/just-before any equal-key entry) and scans forward while keys could still match. The + /// caller skips null keys (Jet allows multiple nulls in a unique index — verified vs ACE). + /// + public bool KeyExists(IndexDef index, object?[] values, int? excludePointer = null) + { + byte[] key = IndexKeyEncoder.Encode(index.Columns, values); + int leaf = Descend(index.RootPage, WithTrailer(key, 0))[^1]; + var visitedLeaves = new HashSet(); + while (leaf != 0) + { + if (!visitedLeaves.Add(leaf)) + throw new InvalidDataException($"Index leaf chain contains a cycle at page {leaf}."); + ParsedIndexPage page = ReadIndexPage(leaf); + if (page.Type != PageType.LeafIndexPage) + throw new InvalidDataException($"Index leaf chain points to non-leaf page {leaf}."); + foreach (Entry e in page.Entries) + { + int cmp = CompareBytes(e.Key, key); + if (cmp > 0) return false; // sorted past where the key would be — it's absent + // Same key held by a *different* row (for an UPDATE, the row's own entry is excluded). + if (cmp == 0 && e.Trailer != excludePointer) return true; + } + leaf = page.Next; // all keys here sort below it — may continue on the next leaf + } + return false; + } + + /// + /// Seeks the index for the rows whose key equals (an equality lookup): descends + /// the B-tree to the leaf where the key belongs, then walks the leaf chain yielding matching row ids until + /// a larger key is reached. O(log n) descent + O(matches), versus a full table scan. + /// + /// + /// The key encoding is order-preserving but lossy for text/binary collation, so distinct values can + /// share a key — the seek is an access path that may over-return; the caller re-applies the real predicate. + /// + public IEnumerable Seek(IndexDef index, object?[] values) + { + byte[] key = IndexKeyEncoder.Encode(index.Columns, values); + int leaf = Descend(index.RootPage, WithTrailer(key, 0))[^1]; + var visitedLeaves = new HashSet(); + while (leaf != 0) + { + if (!visitedLeaves.Add(leaf)) + throw new InvalidDataException($"Index leaf chain contains a cycle at page {leaf}."); + ParsedIndexPage page = ReadIndexPage(leaf); + if (page.Type != PageType.LeafIndexPage) + throw new InvalidDataException($"Index leaf chain points to non-leaf page {leaf}."); + foreach (Entry e in page.Entries) + { + int cmp = CompareBytes(e.Key, key); + if (cmp > 0) yield break; // sorted past the key — no more matches + if (cmp == 0) yield return new RowId(e.Trailer >> 8, e.Trailer & 0xFF); + } + leaf = page.Next; // matches may continue on the next leaf + } + } + + /// + /// Seeks the index for the rows whose key lies in the range [, ] + /// (either bound null = open): descends to the low bound's leaf and walks the leaf chain, yielding row ids + /// while the key does not exceed the high bound. The key encoding is order-preserving so this returns the + /// range in order. Like it may over-return at the boundaries (lossy keys / strict-vs- + /// inclusive) — the caller re-applies the real predicate. + /// + public IEnumerable SeekRange(IndexDef index, object?[]? low, object?[]? high) + { + byte[]? lowKey = low is null ? null : IndexKeyEncoder.Encode(index.Columns, low); + byte[]? highKey = high is null ? null : IndexKeyEncoder.Encode(index.Columns, high); + + int leaf = Descend(index.RootPage, WithTrailer(lowKey ?? [], 0))[^1]; + var visitedLeaves = new HashSet(); + while (leaf != 0) + { + if (!visitedLeaves.Add(leaf)) + throw new InvalidDataException($"Index leaf chain contains a cycle at page {leaf}."); + ParsedIndexPage page = ReadIndexPage(leaf); + if (page.Type != PageType.LeafIndexPage) + throw new InvalidDataException($"Index leaf chain points to non-leaf page {leaf}."); + foreach (Entry e in page.Entries) + { + if (lowKey is not null && CompareBytes(e.Key, lowKey) < 0) continue; // before the low bound + if (highKey is not null && CompareBytes(e.Key, highKey) > 0) yield break; // past the high bound + yield return new RowId(e.Trailer >> 8, e.Trailer & 0xFF); + } + leaf = page.Next; + } + } + + /// + /// Moves a row's entry when its key changes: removes the old-key entry and inserts the new-key one (the + /// row id is unchanged — Access rewrites rows in place). Honours WITH IGNORE NULL on each side (a row with + /// a null key is simply absent from the index). Used by UPDATE of an indexed column. + /// + public void MoveEntry(IndexDef index, object?[] oldValues, object?[] newValues, RowId rowId) + { + if (!(index.IgnoreNulls && HasNullKey(index, oldValues))) RemoveEntry(index, oldValues, rowId); + if (!(index.IgnoreNulls && HasNullKey(index, newValues))) AddEntry(index, newValues, rowId); + } + + /// Removes a row's entry when the row is deleted — a no-op for a WITH IGNORE NULL index whose + /// key the row was absent from (null key), otherwise . + public void DeleteEntry(IndexDef index, object?[] values, RowId rowId) + { + if (index.IgnoreNulls && HasNullKey(index, values)) return; + RemoveEntry(index, values, rowId); + } + + /// + /// Removes a row's entry from the index. Descends to the entry's leaf, drops it, and rewrites the leaf. + /// No rebalancing: an underfull or empty leaf is fine, and a stale separator (if the removed entry was a + /// leaf's maximum) stays a valid upper bound, so later descents still route correctly — matching Access's + /// lazy delete. + /// + public void RemoveEntry(IndexDef index, object?[] values, RowId rowId) + { + byte[] key = IndexKeyEncoder.Encode(index.Columns, values); + int pointer = (rowId.Page << 8) | rowId.Row; + + List path = Descend(index.RootPage, WithTrailer(key, pointer)); + int leafPage = path[^1]; + CheckedIndexPage page = ReadMutationPage(leafPage, PageType.LeafIndexPage); + (List entries, _) = Parse(page); + + int idx = entries.FindIndex(e => e.Trailer == pointer && CompareBytes(e.Key, key) == 0); + if (idx < 0) + throw new InvalidOperationException( + $"Index '{index.Name}': entry for row {rowId.Page}:{rowId.Row} was not found on leaf {leafPage}."); + entries.RemoveAt(idx); + + // Removing only shrinks the page, so Build never overflows. + _channel.WritePage(leafPage, + Build(PageType.LeafIndexPage, page.Previous, page.Next, tail: 0, level: 0, entries)!); + } + + private static bool HasNullKey(IndexDef index, object?[] values) => + index.Columns.Any(c => values[c.Column.Index] is null or DBNull); + + /// Descends to the leaf that should hold the key, recording the path from the root. + private List Descend(int rootPage, byte[] fullKey) + { + var path = new List(); + var visited = new HashSet(); + int pageNumber = rootPage; + while (true) + { + if (!visited.Add(pageNumber)) + throw new InvalidDataException($"Index descent contains a cycle at page {pageNumber}."); + path.Add(pageNumber); + ParsedIndexPage page = ReadIndexPage(pageNumber); + if (page.Type == PageType.LeafIndexPage) return path; + if (page.Type != PageType.IntermediateIndexPage) + throw new InvalidDataException($"Index descent reached non-index page {pageNumber}."); + + int child = page.Tail; + foreach (Entry e in page.Entries) + if (CompareBytes(e.Key, fullKey) >= 0) { child = e.Trailer; break; } + pageNumber = child; + } + } + + /// An index page decoded for the read paths (// + /// ): its type, entries, node child-tail and leaf next-pointer. + private sealed record ParsedIndexPage(PageType Type, int Owner, List Entries, int Tail, int Next); + + /// Reads an index page as decoded entries, served from the channel's parsed-page cache on a repeat + /// visit — a B-tree descent re-reads its root/internal pages on every seek, so caching the decode (not just + /// the bytes) removes both the page copy and the entry decode. Read-only: the write paths parse fresh, and + /// their WritePage invalidates the cached parse, so a hit is always consistent with the bytes. + private ParsedIndexPage ReadIndexPage(int pageNumber) + { + if (_channel.TryGetParsedPage(pageNumber, out object? cached) && cached is ParsedIndexPage hit) + { + if (hit.Owner != _table.DefinitionPage) + throw new InvalidDataException( + $"Index page {pageNumber} belongs to TDEF {hit.Owner}, not TDEF {_table.DefinitionPage}."); + return hit; + } + + CheckedIndexPage page = IndexPageReader.Read(_channel, pageNumber, _table.DefinitionPage); + (List entries, int tail) = Parse(page); + var parsed = new ParsedIndexPage(page.Type, page.Owner, entries, tail, page.Next); + _channel.SetParsedPage(pageNumber, parsed); + return parsed; + } + + private void InsertIntoLeaf(IndexDef index, List path, byte[] key, int pointer) + { + int leafPage = path[^1]; + CheckedIndexPage page = ReadMutationPage(leafPage, PageType.LeafIndexPage); + (List entries, _) = Parse(page); + + // Insert in key order (key then pointer tiebreaker) — the full leaf key is key ++ pointer. + byte[] fullKey = WithTrailer(key, pointer); + int pos = 0; + while (pos < entries.Count && CompareBytes(WithTrailer(entries[pos].Key, entries[pos].Trailer), fullKey) < 0) pos++; + entries.Insert(pos, new Entry(key, pointer)); + + if (Build(PageType.LeafIndexPage, page.Previous, page.Next, tail: 0, level: 0, entries) is { } built) + { + _channel.WritePage(leafPage, built); + return; + } + + SplitAndPropagate(index, path, path.Count - 1, entries, PageType.LeafIndexPage, + page.Previous, page.Next); + } + + /// + /// Splits the (leaf or node) page at into two, writes both, then promotes a + /// separator into the parent — splitting parents in turn, or growing a new root at the top. + /// + private void SplitAndPropagate(IndexDef index, List path, int level, List entries, + PageType type, int prev, int next) + { + int leftPage = path[level]; + int rightPage = AllocateIndexPage(index); + int nodeLevel = path.Count - 1 - level; // height above the leaves of the page being split + + byte[] promoted; + if (type == PageType.LeafIndexPage) + { + int mid = entries.Count / 2; + var left = entries.GetRange(0, mid); + var right = entries.GetRange(mid, entries.Count - mid); + promoted = WithTrailer(left[^1].Key, left[^1].Trailer); // left's max full key + + WriteOrThrow(leftPage, Build(type, prev, rightPage, tail: 0, nodeLevel, left)); + WriteOrThrow(rightPage, Build(type, leftPage, next, tail: 0, nodeLevel, right)); + if (next != 0) SetPrev(next, rightPage); // fix the old next leaf's back-link + } + else + { + // Node split: the middle entry's key is promoted; its child becomes the left node's tail. + int mid = entries.Count / 2; + Entry middle = entries[mid]; + var left = entries.GetRange(0, mid); + var right = entries.GetRange(mid + 1, entries.Count - mid - 1); + promoted = middle.Key; + int oldTail = _splitTail; + + WriteOrThrow(leftPage, Build(type, 0, 0, tail: middle.Trailer, nodeLevel, left)); + WriteOrThrow(rightPage, Build(type, 0, 0, tail: oldTail, nodeLevel, right)); + } + + if (level == 0) + { + // The root split: build a new root node [promoted -> old root] with the new page as its tail. + int newRoot = AllocateIndexPage(index); + WriteOrThrow(newRoot, Build(PageType.IntermediateIndexPage, 0, 0, tail: rightPage, nodeLevel + 1, + [new Entry(promoted, leftPage)])); + UpdateIndexRoot(index, newRoot); + index.RootPage = newRoot; // keep the in-memory def in step for the next insert + return; + } + + InsertSeparator(index, path, level - 1, leftPage, promoted, rightPage); + } + + /// Inserts a promoted separator into the parent node; repoints the old child to the new right + /// page and splits the parent if it overflows. + private void InsertSeparator(IndexDef index, List path, int level, int oldChild, byte[] promoted, int newRight) + { + int parentPage = path[level]; + CheckedIndexPage page = ReadMutationPage(parentPage, PageType.IntermediateIndexPage); + (List entries, int tail) = Parse(page); + + int slot = entries.FindIndex(e => e.Trailer == oldChild); + if (slot >= 0) + { + entries[slot] = entries[slot] with { Trailer = newRight }; + entries.Insert(slot, new Entry(promoted, oldChild)); + } + else // oldChild was the tail + { + tail = newRight; + entries.Add(new Entry(promoted, oldChild)); + } + + int parentLevel = path.Count - 1 - level; + if (Build(PageType.IntermediateIndexPage, 0, 0, tail, parentLevel, entries) is { } built) + { + _channel.WritePage(parentPage, built); + return; + } + + _splitTail = tail; + SplitAndPropagate(index, path, level, entries, PageType.IntermediateIndexPage, 0, 0); + } + + private int _splitTail; // carries a node's tail into SplitAndPropagate + + /// Parses a checked page's entries, decompressing their shared prefix. + private static (List Entries, int Tail) Parse(CheckedIndexPage page) + { + var entries = new List(page.EntryRanges.Count); + foreach ((byte[] key, int trailer) in IndexPageReader.DecodeEntries(page)) + entries.Add(new Entry(key, trailer)); + return (entries, page.Tail); + } + + /// Revalidates a page immediately before mutation, closing the gap between B-tree descent and + /// the final read-modify-write operation. + private CheckedIndexPage ReadMutationPage(int pageNumber, PageType expectedType) + { + CheckedIndexPage page = IndexPageReader.Read(_channel, pageNumber, _table.DefinitionPage); + if (page.Type != expectedType) + throw new InvalidDataException( + $"Index mutation expected page {pageNumber} to be {expectedType}, but found {page.Type}."); + return page; + } + + /// Builds a page from entries; null if they overflow the page. Leaf pages are prefix-compressed; + /// node pages are stored uncompressed and carry their height above the leaves at , + /// both matching what Access writes. (An isolation test showed neither is strictly required — Access reads + /// a node with 0x1A=0 and compressed just fine; they are kept purely for byte-faithfulness. The one + /// hard requirement is a leaf's 0x1A=0 and the leaf-chain offsets at 0x0C/0x10.) + private byte[]? Build(PageType type, int prev, int next, int tail, int level, List entries) + { + bool isLeaf = type == PageType.LeafIndexPage; + int pageSize = _channel.PageSize; + var page = new byte[pageSize]; + page[0] = (byte)type; + page[1] = 0x01; // page flags (observed constant) + page[LevelOffset] = (byte)level; // 0 on a leaf; the node's height above the leaves otherwise + WriteInt32Le(page, OwnerOffset, _table.DefinitionPage); + WriteInt32Le(page, PrevPageOffset, prev); + WriteInt32Le(page, NextPageOffset, next); + WriteInt32Le(page, ChildTailOffset, tail); + + // A single entry (or a node) has no common-prefix compression — ACE writes 0 here (the whole key with + // itself would otherwise "compress" to its full length, which ACE does not do for one entry). + int compress = !isLeaf || entries.Count <= 1 ? 0 : CommonPrefixLength(entries[0].Key, entries[^1].Key); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(CompressedByteCountOffset, 2), (ushort)compress); + + int pos = EntryDataOffset; + bool first = true; + foreach (Entry e in entries) + { + ReadOnlySpan stored = first ? e.Key : e.Key.AsSpan(compress); + first = false; + int len = stored.Length + 4; + if (pos + len > pageSize) return null; // overflow + + stored.CopyTo(page.AsSpan(pos)); + WriteInt32Be(page, pos + stored.Length, e.Trailer); + pos += len; + + int end = pos - EntryDataOffset; + page[EntryMaskOffset + (end >> 3)] |= (byte)(1 << (end & 7)); + } + + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(FreeSpaceOffset, 2), (ushort)(pageSize - pos)); + return page; + } + + /// Repoints the index-data block's B-tree root (0x26) after the root grows a level. Walks + /// stats → column descriptors → column names → data blocks to the index's block. + /// + /// A wide table's definition spans continuation pages, and the data blocks sit past the column names — + /// well beyond the first page for a 255-column table. The walk therefore runs over the stitched + /// definition (the absolute coordinate space the descriptors use), and only the 4 root bytes are written + /// back, mapped to whichever page actually holds them. Nothing changes length, so no re-split is needed. + /// + private void UpdateIndexRoot(IndexDef index, int newRoot) + { + (_, IReadOnlyList continuations, int block) = LocateIndexBlock(index); + WriteInt32IntoDefinition(continuations, block + RootPageInBlockOffset, newRoot); + } + + private const int IndexUsageMapRowOffset = 0x22; // within the 52-byte block: 1-byte row + 3-byte page + + /// The (row, page) pointer to the index's own pages usage map, read from its data block. + private (int MapRow, int MapPage) IndexUsageMapPointer(IndexDef index) + { + (byte[] tdef, _, int block) = LocateIndexBlock(index); + int row = tdef[block + IndexUsageMapRowOffset]; + int mapPage = tdef[block + IndexUsageMapRowOffset + 1] + | tdef[block + IndexUsageMapRowOffset + 2] << 8 + | tdef[block + IndexUsageMapRowOffset + 3] << 16; + return (row, mapPage); + } + + /// Walks the stitched definition (stats → column descriptors → column names → data blocks) to + /// the index's 52-byte data block, returning the buffer, its continuation pages, and the block's absolute + /// offset. A wide table's blocks sit past the column names, well beyond the first page. + private (byte[] Definition, IReadOnlyList Continuations, int BlockOffset) LocateIndexBlock(IndexDef index) + { + JetFormatBase format = _channel.Format; + (byte[] tdef, IReadOnlyList continuations) = ReadDefinition(); + int dataCount = BinaryPrimitives.ReadInt32LittleEndian(tdef.AsSpan(format.TdefIndexCountOffset, 4)); + int colCount = BinaryPrimitives.ReadUInt16LittleEndian(tdef.AsSpan(format.TdefColumnCountOffset, 2)); + + int pos = format.TdefRealIndexBlockOffset + dataCount * format.RealIndexEntrySize + + colCount * format.ColumnDescriptorSize; + for (int i = 0; i < colCount; i++) pos += 2 + BinaryPrimitives.ReadUInt16LittleEndian(tdef.AsSpan(pos, 2)); + + return (tdef, continuations, pos + index.RealIndexOrdinal * 52); + } + + /// Allocates a fresh B-tree page for and records it in the index's own + /// pages usage map, exactly as Access does — the map then covers every page of the index's B-tree, not + /// just the root. (Reads use the B-tree's own links, so this is for byte-faithfulness and to feed Access's + /// own maintenance, not for LibRed's own traversal.) + private int AllocateIndexPage(IndexDef index) + { + int page = _allocator.Allocate(); + (int mapRow, int mapPage) = IndexUsageMapPointer(index); + _usageMaps.SetBit(mapRow, mapPage, page, set: true); + return page; + } + + /// Reads the table definition, stitching continuation pages into one contiguous buffer, and + /// returns the continuation page numbers in chain order. + private (byte[] Definition, IReadOnlyList ContinuationPages) ReadDefinition() + { + (PageBuffer buffer, IReadOnlyList continuations) = + TdefChainReader.Read(_channel, _table.DefinitionPage); + return (buffer.Span.ToArray(), continuations); + } + + /// Maps an absolute definition offset to the page holding it and the offset within that page. + private (int Page, int Offset) MapDefinitionOffset(IReadOnlyList continuations, int offset) + { + int pageSize = _channel.Format.PageSize; + if (offset < pageSize) return (_table.DefinitionPage, offset); + + int body = pageSize - JetFormatBase.TdefContinuationHeaderSize; + int relative = offset - pageSize; + int index = relative / body; + if (index >= continuations.Count) + throw new InvalidOperationException( + $"Definition offset {offset} lies past the end of table '{_table.Name}'s definition chain."); + return (continuations[index], JetFormatBase.TdefContinuationHeaderSize + relative % body); + } + + /// Writes 4 little-endian bytes at an absolute definition offset, splitting the write when the + /// field straddles a continuation-page boundary. + private void WriteInt32IntoDefinition(IReadOnlyList continuations, int offset, int value) + { + Span bytes = stackalloc byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(bytes, value); + + for (int i = 0; i < 4;) + { + int pageNumber = MapDefinitionOffset(continuations, offset + i).Page; + byte[] page = _channel.ReadPage(pageNumber).Span.ToArray(); + + int j = i; + for (; j < 4; j++) + { + (int target, int within) = MapDefinitionOffset(continuations, offset + j); + if (target != pageNumber) break; + page[within] = bytes[j]; + } + + _channel.WritePage(pageNumber, page); + i = j; + } + } + + private void SetPrev(int pageNumber, int prev) + { + CheckedIndexPage checkedPage = IndexPageReader.Read(_channel, pageNumber, _table.DefinitionPage); + if (checkedPage.Type != PageType.LeafIndexPage) + throw new InvalidDataException($"Leaf next-pointer targets non-leaf page {pageNumber}."); + byte[] page = checkedPage.Buffer.Span.ToArray(); + WriteInt32Le(page, PrevPageOffset, prev); + _channel.WritePage(pageNumber, page); + } + + private void WriteOrThrow(int pageNumber, byte[]? page) => + _channel.WritePage(pageNumber, page ?? throw new NotSupportedException( + "An index page still overflows after a split (a key wider than half a page).")); + + private static byte[] WithTrailer(byte[] key, int trailer) + { + var result = new byte[key.Length + 4]; + key.CopyTo(result, 0); + WriteInt32Be(result, key.Length, trailer); + return result; + } + + private static int CommonPrefixLength(byte[] a, byte[] b) + { + int n = Math.Min(a.Length, b.Length), i = 0; + while (i < n && a[i] == b[i]) i++; + return i; + } + + private static int CompareBytes(ReadOnlySpan a, ReadOnlySpan b) + { + int n = Math.Min(a.Length, b.Length); + for (int i = 0; i < n; i++) + if (a[i] != b[i]) return a[i] - b[i]; + return a.Length - b.Length; + } + + private static void WriteInt32Le(byte[] page, int offset, int value) => BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(offset, 4), value); + private static void WriteInt32Be(byte[] page, int offset, int value) => BinaryPrimitives.WriteInt32BigEndian(page.AsSpan(offset, 4), value); +} diff --git a/src/LibRed/LibRed.Core/Storage/JetTextCollation.cs b/src/LibRed/LibRed.Core/Storage/JetTextCollation.cs new file mode 100644 index 00000000..823fe4e3 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/JetTextCollation.cs @@ -0,0 +1,174 @@ +namespace LibRed.Storage; + +/// +/// Jet's "General" text collation — specifically the **version-0 "General legacy"** order (locale +/// 1033, version 0) used by Access 2000–2007 and by any newer engine writing an ACE-2007-format +/// file. It maps characters to the order-preserving primary weight bytes used in index keys, +/// verified byte-for-byte against the ACE engine over printable ASCII. Case is folded (lowercase +/// weighs the same as uppercase), trailing spaces are ignored, and most characters weigh one byte +/// (a handful — ^ _ ` { | } ~ — weigh two, sharing the 0x2B page). +/// +/// +/// Apostrophe and hyphen are "ignorable": they add no primary weight but append a trailing inline +/// group recording their position (verified against ACE). Accented Latin-1 letters sort with their +/// base letter's primary weight and record the accent in a secondary section (see below); a handful of +/// other characters are still reported unencodable. +/// +/// The sort-order version is the column descriptor's 0x0D field (spec §3.4). Access 2010+ +/// introduced a different default "General" order (1033, version 1) with other key bytes; this class +/// does not implement it. A version-1 column/index therefore needs a separate weight table — +/// see the spec §10.4 note. +/// +/// +internal static class JetTextCollation +{ + private const byte EndPrimary = 0x01; + private const byte EndKey = 0x00; + private const byte InlineStart = 0x80; + private const byte InlineMid = 0x06; + private const byte ApostropheCode = 0x80; + private const byte HyphenCode = 0x82; + private const byte DefaultSecondary = 0x02; // a character with no accent + + // Secondary (diacritic) weight per Unicode combining mark — depends only on the accent, not the base + // letter (verified against ACE: acute weighs 0x0E on a/e/i/o/u/y alike, etc.). + private static readonly Dictionary DiacriticWeights = new() + { + ['́'] = 0x0E, // acute + ['̀'] = 0x0F, // grave + ['̂'] = 0x12, // circumflex + ['̈'] = 0x13, // diaeresis / umlaut + ['̃'] = 0x19, // tilde + ['̊'] = 0x1A, // ring above + ['̧'] = 0x1C, // cedilla + }; + + // Atomic accented letters that have no Unicode canonical decomposition: base letter + secondary weight. + // Verified against ACE. + private static readonly Dictionary AtomicAccents = new() + { + ['Ø'] = ('O', 0x21), + ['Ð'] = ('D', 0x68), + }; + + // Letters that sort as a multi-letter expansion (each expanded letter weighs its normal primary, no + // accent). Verified against ACE: ß = SS, Þ/þ = TH, Æ = AE. + private static readonly Dictionary Expansions = new() + { + ['Æ'] = "AE", + ['ß'] = "SS", + ['Þ'] = "TH", + }; + + // Primary weight for 'A'..'Z' (general collation; mostly +2 with a few +1 steps). + private static readonly byte[] Letters = + [ + 0x4A, 0x4C, 0x4D, 0x4F, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5B, 0x5C, 0x5E, 0x60, + 0x62, 0x64, 0x66, 0x68, 0x69, 0x6B, 0x6D, 0x6F, 0x71, 0x73, 0x75, 0x76, 0x78, + ]; + + private static readonly Dictionary Symbols = new() + { + [' '] = [0x07], + ['!'] = [0x09], ['"'] = [0x0A], ['#'] = [0x0C], ['$'] = [0x0E], ['%'] = [0x10], + ['&'] = [0x12], ['('] = [0x14], [')'] = [0x16], ['*'] = [0x18], [','] = [0x1A], + ['.'] = [0x1C], ['/'] = [0x1E], [':'] = [0x20], [';'] = [0x22], ['?'] = [0x24], + ['@'] = [0x26], ['['] = [0x27], ['\\'] = [0x29], [']'] = [0x2A], ['+'] = [0x2C], + ['<'] = [0x2E], ['='] = [0x30], ['>'] = [0x32], + ['^'] = [0x2B, 0x02], ['_'] = [0x2B, 0x03], ['`'] = [0x2B, 0x07], + ['{'] = [0x2B, 0x09], ['|'] = [0x2B, 0x0B], ['}'] = [0x2B, 0x0D], ['~'] = [0x2B, 0x0F], + }; + + /// + /// Appends the order-preserving collation key body for (everything + /// after the start flag: primary weights, end-of-primary marker, any ignorable-char inline + /// codes, and the terminator). Trailing spaces are dropped. Returns false if any character is + /// not yet supported. + /// + public static bool TryEncode(string value, List output) + { + ReadOnlySpan s = value.AsSpan().TrimEnd(' '); + + // Build the primary weight bytes and a parallel secondary weight per byte (0x02 = no accent). + var primaries = new List(); + var secondaries = new List(); + // Apostrophe/hyphen carry no primary weight; they record (position, code) for the inline + // section, where position is the count of **primary weight bytes** emitted before them (so a + // multi-byte expansion like ß→SS counts as 2 — verified against ACE). + var inline = new List<(int Position, byte Code)>(); + + foreach (char c in s) + { + char u = char.ToUpperInvariant(c); + if (u == '\'') { inline.Add((primaries.Count, ApostropheCode)); continue; } + if (u == '-') { inline.Add((primaries.Count, HyphenCode)); continue; } + + if (u is >= 'A' and <= 'Z') + Add(Letters[u - 'A']); + else if (u is >= '0' and <= '9') + Add((byte)(0x36 + 2 * (u - '0'))); + else if (Symbols.TryGetValue(u, out byte[]? weights)) + foreach (byte w in weights) Add(w); + else if (!TryAddAccented(u, Add)) + return false; // not handled yet + } + + output.AddRange(primaries); + output.Add(EndPrimary); + + // Secondary (diacritic) section: only emitted when a character carries a non-default weight; it lists + // the secondary weight of every byte from the first up to and including the last accented one. + int lastAccent = secondaries.FindLastIndex(w => w != DefaultSecondary); + for (int i = 0; i <= lastAccent; i++) + output.Add(secondaries[i]); + + // Apostrophe/hyphen inline (tertiary) section. + if (inline.Count > 0) + { + output.Add(0x01); + output.Add(0x01); + output.Add(0x01); + foreach (var (position, code) in inline) + { + output.Add(InlineStart); + output.Add((byte)(0x07 + 4 * position)); + output.Add(InlineMid); + output.Add(code); + } + } + output.Add(EndKey); + return true; + + void Add(byte primary, byte secondary = DefaultSecondary) + { + primaries.Add(primary); + secondaries.Add(secondary); + } + } + + /// Emits the primary+secondary weight(s) for an accented or special Latin-1 letter (uppercased): + /// a multi-letter expansion (ß=SS, Þ=TH, Æ=AE), an atomic accent (Ø, Ð), or a Unicode canonical + /// decomposition (base letter + combining mark). Returns false if the character is unknown. + private static bool TryAddAccented(char u, Action add) + { + if (Expansions.TryGetValue(u, out string? expansion)) + { + foreach (char letter in expansion) add(Letters[letter - 'A'], DefaultSecondary); + return true; + } + if (AtomicAccents.TryGetValue(u, out (char Base, byte Secondary) atomic)) + { + add(Letters[atomic.Base - 'A'], atomic.Secondary); + return true; + } + + // Canonical decomposition: a base A–Z letter followed by one combining diacritic we know. + string nfd = u.ToString().Normalize(System.Text.NormalizationForm.FormD); + if (nfd.Length == 2 && nfd[0] is >= 'A' and <= 'Z' && DiacriticWeights.TryGetValue(nfd[1], out byte weight)) + { + add(Letters[nfd[0] - 'A'], weight); + return true; + } + return false; + } +} diff --git a/src/LibRed/LibRed.Core/Storage/LongValueReader.cs b/src/LibRed/LibRed.Core/Storage/LongValueReader.cs new file mode 100644 index 00000000..0289807c --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/LongValueReader.cs @@ -0,0 +1,124 @@ +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// Resolves a long value (Memo / OLE) from its 12-byte in-row descriptor to the full +/// byte payload, following LVAL pages as needed. +/// +/// +/// Descriptor layout: bytes 0-2 = length (24-bit), byte 3 = flags, bytes 4-7 = a +/// row+page pointer to the first LVAL chunk, bytes 8-11 reserved. Flags: +/// 0x80 = inline (payload follows the descriptor); 0x40 = single LVAL page (the row is +/// the whole payload); otherwise the payload is chained across LVAL pages, each row +/// beginning with a 4-byte pointer to the next chunk. +/// +public sealed class LongValueReader(PageChannel channel) +{ + private readonly PageChannel _channel = channel; + + public byte[] Resolve(ReadOnlySpan descriptor) => ResolveWithPages(descriptor, out _); + + internal byte[] ResolveWithPages(ReadOnlySpan descriptor, out IReadOnlyList pages) + { + if (descriptor.Length < 12) + throw new InvalidDataException( + $"Long-value descriptor has {descriptor.Length} bytes; expected at least 12."); + + int length = descriptor[0] | (descriptor[1] << 8) | (descriptor[2] << 16); + byte flags = descriptor[3]; + if (flags is not (LongValueFormat.FlagInline or LongValueFormat.FlagSinglePage or LongValueFormat.FlagChained)) + throw new InvalidDataException($"Long-value descriptor has unsupported flags 0x{flags:X2}."); + + if ((flags & LongValueFormat.FlagInline) != 0) + { + if (length > descriptor.Length - 12) + throw new InvalidDataException( + $"Inline long value declares {length} bytes but only {descriptor.Length - 12} are present."); + pages = []; + return descriptor.Slice(12, length).ToArray(); + } + + int row = descriptor[4]; + int page = descriptor[5] | (descriptor[6] << 8) | (descriptor[7] << 16); + + if ((flags & LongValueFormat.FlagSinglePage) != 0) + { + byte[] value = ReadLvalRow(page, row); + if (value.Length != length) + throw new InvalidDataException( + $"Single-page long value declares {length} bytes but row {page}:{row} has {value.Length}."); + pages = [page]; + return value; + } + + return ReadChain(page, row, length, out pages); + } + + private byte[] ReadChain(int page, int row, int length, out IReadOnlyList pages) + { + var result = new byte[length]; + int written = 0; + var visited = new HashSet<(int Page, int Row)>(); + var chainPages = new List(); + + while (written < length) + { + if (page == 0) + throw new InvalidDataException( + $"Long-value chain ended after {written} of {length} declared bytes."); + if (!visited.Add((page, row))) + throw new InvalidDataException($"Long-value chain contains a cycle at row {page}:{row}."); + chainPages.Add(page); + + byte[] chunk = ReadLvalRow(page, row); + if (chunk.Length < 4) + throw new InvalidDataException( + $"Long-value chain row {page}:{row} has {chunk.Length} bytes; at least 4 are required for its next pointer."); + + // Each chained chunk starts with a 4-byte pointer (row + 3-byte page) to the next. + int nextRow = chunk[0]; + int nextPage = chunk[1] | (chunk[2] << 8) | (chunk[3] << 16); + + int copy = chunk.Length - 4; + if (copy == 0) + throw new InvalidDataException($"Long-value chain row {page}:{row} makes no payload progress."); + if (copy > length - written) + throw new InvalidDataException( + $"Long-value chain row {page}:{row} exceeds the declared length by {copy - (length - written)} bytes."); + Array.Copy(chunk, 4, result, written, copy); + written += copy; + + if (written == length && nextPage != 0) + throw new InvalidDataException( + $"Long-value chain continues to page {nextPage} after its declared {length} bytes."); + page = nextPage; + row = nextRow; + } + + pages = chainPages; + return result; + } + + private byte[] ReadLvalRow(int page, int row) + { + if (page <= 0 || page >= _channel.PageCount) + throw new InvalidDataException( + $"Long-value page pointer {page} is outside the file's 1..{_channel.PageCount - 1} range."); + + var lval = new DataPage(); + lval.Read(_channel.ReadPage(page), _channel.Format); + if (!lval.IsLongValuePage) + throw new InvalidDataException($"Long-value pointer {page}:{row} targets a non-LVAL data page."); + if (row < 0 || row >= lval.RowCount) + throw new InvalidDataException( + $"Long-value row pointer {page}:{row} is outside the page's 0..{lval.RowCount - 1} range."); + RowSlot slot = lval.Rows[row]; + if (slot.IsDeleted || slot.HasOverflow) + throw new InvalidDataException( + $"Long-value pointer {page}:{row} targets a deleted or overflow row slot."); + return lval.GetRow(row).ToArray(); + } +} diff --git a/src/LibRed/LibRed.Core/Storage/LongValueWriter.cs b/src/LibRed/LibRed.Core/Storage/LongValueWriter.cs new file mode 100644 index 00000000..2d28c3dd --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/LongValueWriter.cs @@ -0,0 +1,164 @@ +using System.Buffers.Binary; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// A pre-built long-value (memo/OLE) in-row descriptor, written verbatim by the row encoder instead of +/// inlining. Produced by when a value is stored on an LVAL page. +/// +public sealed record LongValueDescriptor(byte[] Bytes); + +/// +/// The result of writing a long value to LVAL page(s): the 12-byte in-row descriptor, the pages it now +/// occupies (to record in the column's owned-pages map), and the one page that still has spare room (the +/// last, partially-filled chunk — recorded in the free-pages map). +/// +public sealed record LongValueResult(byte[] Descriptor, IReadOnlyList OwnedPages, int FreePage); + +/// +/// Writes a long value (memo/OLE) to LVAL page(s) and returns its 12-byte in-row reference descriptor. +/// A value up to one page is a single page (flag 0x40): the row is the payload. A +/// larger value is chained (flag 0x00) across several pages: each page holds one chunk row +/// that begins with a 4-byte [row:1][page:3] pointer to the next chunk (zero on the last). +/// +/// +/// An LVAL page is a data page (type 0x01) whose owner field is the ASCII marker "LVAL"; a chunk is +/// stored as its row 0. Access's property loader (and general long-value reads) require this page form — +/// an inline value is not recognised for object properties (LvProp). +/// +public sealed class LongValueWriter(PageChannel channel) +{ + + // Access caps an LVAL page row at MAX_LONG_VALUE_ROW_SIZE (Jackcess) — 4076 on Jet4 (Jet3 = 2032), + // 4 bytes short of the page's usable space. A single-page value up to this fits in one row; a chained + // chunk row is this size (a 4-byte next-pointer + up to 4072 data bytes). Verified against ACE's own + // chained OLE values (Northwind Employee photos: 4076, 4076, 2606-byte chunk rows). + private const int MaxLvalRowSize = 4076; + private const int MaxChunkData = MaxLvalRowSize - 4; + + private readonly PageChannel _channel = channel; + private readonly PageAllocator _allocator = new(channel); + + /// Writes across one or more LVAL pages, returning its descriptor + /// and the pages used (all owned; the last is also free, having spare room). + public LongValueResult Write(byte[] payload) + { + if (payload.Length <= MaxLvalRowSize) + { + int page = _allocator.Allocate(); + WriteChunkPage(page, payload); // a single-page row is the payload itself (no next pointer) + return new LongValueResult(Descriptor(payload.Length, LongValueFormat.FlagSinglePage, page), [page], page); + } + + // Chained: split into chunks that each fit on a page after a 4-byte next-pointer. + int chunkCount = (payload.Length + MaxChunkData - 1) / MaxChunkData; + var pages = new int[chunkCount]; + for (int i = 0; i < chunkCount; i++) pages[i] = _allocator.Allocate(); + + for (int i = 0; i < chunkCount; i++) + { + int start = i * MaxChunkData; + int len = Math.Min(MaxChunkData, payload.Length - start); + int nextPage = i + 1 < chunkCount ? pages[i + 1] : 0; + + var row = new byte[4 + len]; + row[0] = 0; // next row (always row 0 — one chunk per page) + row[1] = (byte)nextPage; + row[2] = (byte)(nextPage >> 8); + row[3] = (byte)(nextPage >> 16); + payload.AsSpan(start, len).CopyTo(row.AsSpan(4)); + WriteChunkPage(pages[i], row); + } + + return new LongValueResult(Descriptor(payload.Length, LongValueFormat.FlagChained, pages[0]), pages, pages[^1]); + } + + /// Allocates a fresh LVAL page, writes as its row 0, and returns the + /// page number — the caller records it in the column's usage maps. + public int WriteNewPage(byte[] row) + { + int page = _allocator.Allocate(); + WriteChunkPage(page, row); + return page; + } + + /// Appends to an existing LVAL page if it has room, returning the new + /// row index and the page's remaining free space (null if it does not fit). Lets several small long + /// values share one page, the way Access packs them. + public (int Row, int RemainingFree)? TryAppend(int pageNumber, byte[] row) + { + JetFormatBase format = _channel.Format; + if (pageNumber <= 0 || pageNumber >= _channel.PageCount) + throw new InvalidDataException($"LVAL append page {pageNumber} is outside the physical file."); + if (row.Length > MaxLvalRowSize) + throw new ArgumentOutOfRangeException(nameof(row), + $"An LVAL row cannot exceed {MaxLvalRowSize} bytes."); + + PageBuffer buffer = _channel.ReadPage(pageNumber); + var parsed = new DataPage(); + parsed.Read(buffer, format); + if (!parsed.IsLongValuePage) + throw new InvalidDataException($"LVAL append target {pageNumber} is not owned by the LVAL store."); + + int rowCount = parsed.RowCount; + int lowest = parsed.Rows.Count == 0 ? format.PageSize : parsed.Rows.Min(r => r.Offset); + int directoryEnd = format.DataRowDirectoryOffset + rowCount * 2; + int physicalFree = lowest - directoryEnd; + if (parsed.FreeSpace != physicalFree) + throw new InvalidDataException( + $"LVAL page {pageNumber} declares {parsed.FreeSpace} free bytes but its row geometry has {physicalFree}."); + if (physicalFree < row.Length + 2) return null; // row data + its 2-byte directory entry + + byte[] page = buffer.Span.ToArray(); + + int offset = lowest - row.Length; + row.CopyTo(page.AsSpan(offset)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + rowCount * 2, 2), (ushort)offset); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2), (ushort)(rowCount + 1)); + int remaining = physicalFree - row.Length - 2; + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), (ushort)remaining); + _channel.WritePage(pageNumber, page); + return (rowCount, remaining); + } + + /// The single-page (0x40) descriptor for a value stored at (, + /// ) — used when a value is packed onto an existing page at a non-zero row. + public static byte[] SinglePageDescriptor(int length, int page, int row) => + Descriptor(length, LongValueFormat.FlagSinglePage, page, row); + + /// Writes one row () to a fresh LVAL data page, packed from the page end. + private void WriteChunkPage(int pageNumber, byte[] row) + { + JetFormatBase format = _channel.Format; + var page = new byte[format.PageSize]; + page[0] = (byte)PageType.DataPage; + page[1] = 0x01; // page flags (observed constant) + BinaryPrimitives.WriteUInt32LittleEndian(page.AsSpan(format.DataOwnerOffset, 4), LongValueFormat.LvalMarker); + + int offset = format.PageSize - row.Length; + row.CopyTo(page.AsSpan(offset)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset, 2), (ushort)offset); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2), 1); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), + (ushort)(offset - format.DataRowDirectoryOffset - 2)); + _channel.WritePage(pageNumber, page); + } + + /// Builds the 12-byte in-row descriptor: [length:3][flag:1][row:1][page:3][4 reserved]. + private static byte[] Descriptor(int length, byte flag, int firstPage, int row = 0) + { + var d = new byte[12]; + d[0] = (byte)length; + d[1] = (byte)(length >> 8); + d[2] = (byte)(length >> 16); + d[3] = flag; + d[4] = (byte)row; + d[5] = (byte)firstPage; + d[6] = (byte)(firstPage >> 8); + d[7] = (byte)(firstPage >> 16); + return d; + } +} diff --git a/src/LibRed/LibRed.Core/Storage/PageAllocator.cs b/src/LibRed/LibRed.Core/Storage/PageAllocator.cs new file mode 100644 index 00000000..f83fe6c8 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/PageAllocator.cs @@ -0,0 +1,201 @@ +using System.Buffers.Binary; +using System.Numerics; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// Allocates database pages the way Access does: through the **global free-pages map** at page 1, +/// row 0 (an inline usage map where a set bit marks a free page). Allocation takes a free page, +/// clears its bit (so it is no longer free), and returns it — reusing freed pages rather than +/// always growing the file. The file is grown only when no free page is available. +/// +public sealed class PageAllocator(PageChannel channel) +{ + private const int GlobalMapPage = 1; + private const byte InlineMapType = 0x00; + private const byte ReferenceMapType = 0x01; + /// Bytes preceding the bitmap on a dedicated usage-bitmap page (type 0x05). + private const int BitmapPageHeaderSize = 4; + + /// A reference map is a fixed 69-byte record: the type byte + 17 bitmap-page pointers (17 being + /// exactly enough to span Jet's 2 GB ceiling). See the usage-maps spec (§9). + private const int ReferenceMapSlots = 17; + + private readonly PageChannel _channel = channel; + + public int Allocate() + { + (byte[] page, RowSlot slot) = ReadGlobalMap(); + int mapOffset = slot.Offset; + byte mapType = page[mapOffset]; + if (mapType == ReferenceMapType) + return AllocateFromReferenceMap(page.AsSpan(mapOffset, slot.Length)); + if (mapType != InlineMapType) + throw new InvalidDataException($"Global free-pages map has unknown type 0x{mapType:X2}."); + if (slot.Length < 5) + throw new InvalidDataException("Global inline free-pages map is shorter than its 5-byte header."); + + int startPage = BinaryPrimitives.ReadInt32LittleEndian(page.AsSpan(mapOffset + 1, 4)); + int bitmapStart = mapOffset + 5; + int bitmapEnd = mapOffset + slot.Length; + for (int i = bitmapStart; i < bitmapEnd; i++) + { + if (page[i] == 0) continue; + int bit = BitOperations.TrailingZeroCount(page[i]); + int allocated = startPage + (i - bitmapStart) * 8 + bit; + ValidateReusablePage(allocated, "inline free bit", allowAppendBoundary: true); + EnsurePhysicalAllocation(allocated); + page[i] &= (byte)~(1 << bit); // no longer free + _channel.WritePage(GlobalMapPage, page); + return allocated; + } + + // No free page recorded; fall back to growing the file (the new page is used, not free). + return _channel.AllocatePage(); + } + + /// Returns a page to the global free-pages map (sets its bit) so it can be reused — the inverse + /// of . Used when dropping an index frees its B-tree pages, matching Access. + public void Free(int page) + { + ValidateReusablePage(page, "page being freed", allowAppendBoundary: false); + (byte[] p, RowSlot slot) = ReadGlobalMap(); + + int mapOffset = slot.Offset; + byte mapType = p[mapOffset]; + if (mapType == ReferenceMapType) + { + FreeInReferenceMap(p.AsSpan(mapOffset, slot.Length), page); + return; + } + if (mapType != InlineMapType) + throw new InvalidDataException($"Global free-pages map has unknown type 0x{mapType:X2}."); + if (slot.Length < 5) + throw new InvalidDataException("Global inline free-pages map is shorter than its 5-byte header."); + + int startPage = BinaryPrimitives.ReadInt32LittleEndian(p.AsSpan(mapOffset + 1, 4)); + int bit = page - startPage; + int byteIndex = mapOffset + 5 + bit / 8; + if (bit < 0 || byteIndex >= mapOffset + slot.Length) return; // outside the inline window + + p[byteIndex] |= (byte)(1 << (bit % 8)); + _channel.WritePage(GlobalMapPage, p); + } + + /// Allocates from a reference-type global free map (huge databases): the record is a list of + /// pointers to dedicated bitmap pages (type 0x05), pointer k covering the page range starting at + /// k × (pageSize − 4) × 8. A **set bit is a free page** (the global map's sense, opposite of a + /// per-table owned map). Finds the first free page, clears its bit on the bitmap page, and returns it; + /// grows the file when no bitmap records a free page. + private int AllocateFromReferenceMap(ReadOnlySpan map) + { + var format = _channel.Format; + ValidateReferenceMap(map); + int pagesPerBitmap = (format.PageSize - BitmapPageHeaderSize) * 8; + var bitmapPages = new HashSet(); + for (int slot = 0; slot < ReferenceMapSlots; slot++) + { + int bitmapPage = BinaryPrimitives.ReadInt32LittleEndian(map.Slice(1 + slot * 4, 4)); + if (bitmapPage == 0) continue; + ValidateBitmapPage(bitmapPage); + if (!bitmapPages.Add(bitmapPage)) + throw new InvalidDataException($"Global reference free map repeats bitmap page {bitmapPage}."); + } + + for (int slot = 0; slot < ReferenceMapSlots; slot++) + { + int bitmapPage = BinaryPrimitives.ReadInt32LittleEndian(map.Slice(1 + slot * 4, 4)); + if (bitmapPage == 0) continue; // no bitmap page allocated for this range + + byte[] bitmap = ValidateBitmapPage(bitmapPage); + for (int i = BitmapPageHeaderSize; i < format.PageSize; i++) + { + if (bitmap[i] == 0) continue; + int bit = BitOperations.TrailingZeroCount(bitmap[i]); + int allocated = slot * pagesPerBitmap + (i - BitmapPageHeaderSize) * 8 + bit; + ValidateReusablePage(allocated, $"reference-map slot {slot} free bit", allowAppendBoundary: true); + if (bitmapPages.Contains(allocated)) + throw new InvalidDataException($"Global free map marks bitmap page {allocated} itself as free."); + EnsurePhysicalAllocation(allocated); + bitmap[i] &= (byte)~(1 << bit); // no longer free + _channel.WritePage(bitmapPage, bitmap); + return allocated; + } + } + + // No free page recorded in any bitmap page; grow the file (the new page is used, not free). + return _channel.AllocatePage(); + } + + /// Returns a page to a reference-type global free map by setting its bit on the bitmap page for + /// its range. If that range has no bitmap page (e.g. a page grown past the map's coverage), the page is + /// left unrecorded — it simply won't be reused, matching the pre-existing inline-window behaviour. + private void FreeInReferenceMap(ReadOnlySpan map, int page) + { + var format = _channel.Format; + ValidateReferenceMap(map); + int pagesPerBitmap = (format.PageSize - BitmapPageHeaderSize) * 8; + int slot = page / pagesPerBitmap; + if (slot < 0 || slot >= ReferenceMapSlots) return; // beyond the map's ~2 GB reach + + int bitmapPage = BinaryPrimitives.ReadInt32LittleEndian(map.Slice(1 + slot * 4, 4)); + if (bitmapPage == 0) return; // range has no bitmap page — nothing to record into + + int bitInRange = page - slot * pagesPerBitmap; + byte[] bitmap = ValidateBitmapPage(bitmapPage); + if (page == bitmapPage) + throw new InvalidDataException($"Usage-map bitmap page {page} cannot be marked globally free."); + bitmap[BitmapPageHeaderSize + bitInRange / 8] |= (byte)(1 << (bitInRange % 8)); + _channel.WritePage(bitmapPage, bitmap); + } + + private (byte[] Page, RowSlot Slot) ReadGlobalMap() + { + if (_channel.PageCount <= GlobalMapPage) + throw new InvalidDataException("Database has no global free-pages map at page 1."); + PageBuffer buffer = _channel.ReadPage(GlobalMapPage); + var data = new DataPage(); + data.Read(buffer, _channel.Format); + if (data.RowCount < 1) + throw new InvalidDataException("Global free-pages map page has no row 0."); + RowSlot slot = data.Rows[0]; + if (slot.IsDeleted || slot.HasOverflow || slot.Length == 0) + throw new InvalidDataException("Global free-pages map row 0 is deleted, overflowed, or empty."); + return (buffer.Span.ToArray(), slot); + } + + private static void ValidateReferenceMap(ReadOnlySpan map) + { + if (map.Length != 1 + ReferenceMapSlots * 4) + throw new InvalidDataException( + $"Global reference free map must be exactly {1 + ReferenceMapSlots * 4} bytes; got {map.Length}."); + } + + private byte[] ValidateBitmapPage(int pageNumber) + { + ValidateReusablePage(pageNumber, "usage-map bitmap pointer", allowAppendBoundary: false); + byte[] page = _channel.ReadPage(pageNumber).Span.ToArray(); + if (page[0] != (byte)PageType.PageUsageBitmap || page[1] != 0x01 || page[2] != 0 || page[3] != 0) + throw new InvalidDataException($"Global free-map pointer {pageNumber} does not target a valid bitmap page."); + return page; + } + + private void ValidateReusablePage(int page, string source, bool allowAppendBoundary) + { + int maximum = allowAppendBoundary ? _channel.PageCount : _channel.PageCount - 1; + if (page <= GlobalMapPage || page > maximum) + throw new InvalidDataException( + $"Global {source} names page {page}, outside the reusable contiguous range 2..{maximum}."); + } + + private void EnsurePhysicalAllocation(int page) + { + if (page < _channel.PageCount) return; + int allocated = _channel.AllocatePage(); + if (allocated != page) + throw new InvalidDataException( + $"Global free map selected append page {page}, but contiguous allocation produced page {allocated}."); + } +} diff --git a/src/LibRed/LibRed.Core/Storage/RowDecoder.cs b/src/LibRed/LibRed.Core/Storage/RowDecoder.cs new file mode 100644 index 00000000..57b41d36 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/RowDecoder.cs @@ -0,0 +1,121 @@ +using System.Buffers.Binary; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.Storage.Types; + +namespace LibRed.Storage; + +/// +/// Decodes a single raw row record into CLR values. Implements the Jet 4 / ACE row +/// layout (verified against real data): +/// +/// [colCount:2] [fixed data] [var data] [varOffsetTable:(numVar+1)x2] [numVar:2] [nullBitmap] +/// +/// The null bitmap is indexed by column id (bit set = value present). Variable columns +/// are addressed via the trailing offset table in ascending column-id order. +/// Jet 4 / ACE uses 2-byte variable offsets at any row size — there is no Jet 3-style +/// jump table (1-byte offsets), so rows larger than 256 bytes decode the same way. +/// +public sealed class RowDecoder(IReadOnlyList columns, JetFormatBase format, LongValueReader? longValues = null) +{ + private readonly IReadOnlyList _columns = columns; + private readonly JetFormatBase _format = format; + private readonly LongValueReader? _longValues = longValues; + + /// Decodes the row into one value per column (aligned to ). + public object?[] Decode(ReadOnlySpan row) + { + var values = new object?[_columns.Count]; + + // The null-bitmap width comes from the row's own leading count (= max id + 1), NOT the live column + // count — they differ once ids have a gap (a burned type-change id / DROP COLUMN gap). Reading the + // stored count is exactly how ACE sizes it, and is robust to any id scheme (spec §5). A real inline + // row is at least: column count + an empty var table (1 entry) + var count + null bitmap; anything + // shorter is an overflow/lookup pointer slot the caller should have skipped. + RowLayout layout = ParseLayout(row); + int nullBitmapSize = layout.NullBitmapSize; + + ReadOnlySpan nullBitmap = row[^nullBitmapSize..]; + + foreach (ColumnDef column in _columns) + { + bool present = IsPresent(nullBitmap, layout.ColumnCount, column.ColumnId); + + // Jet stores Boolean (YesNo) columns with no fixed/variable data: the value + // IS the null-bitmap bit (set = true). Booleans are never null. + if (column.Type == JetDataType.Boolean) + { + values[column.Index] = present; + continue; + } + + if (!present) + { + values[column.Index] = null; + continue; + } + + ReadOnlySpan raw = column.IsFixedLength + ? FixedSlice(row, layout, column) + : layout.VarChunk(column.VariableIndex); + + // Memo / OLE columns store a long-value descriptor, not the data itself. + if (_longValues is not null && column.Type is JetDataType.Memo or JetDataType.Ole) + { + byte[] data = _longValues.Resolve(raw); + values[column.Index] = column.Type == JetDataType.Memo + ? JetTypeCodec.DecodeText(data) + : data; + continue; + } + + values[column.Index] = JetTypeCodec.Decode(column, raw); + } + + return values; + } + + /// Returns the raw in-row long-value descriptor bytes for each present memo/OLE column (keyed by + /// ), WITHOUT resolving the value. Used by UPDATE/DELETE to preserve an + /// unchanged column's descriptor verbatim (avoiding a needless re-materialise) and to free a replaced or + /// deleted value's LVAL pages. + public Dictionary LongValueRaw(ReadOnlySpan row) + { + var result = new Dictionary(); + RowLayout layout = ParseLayout(row); + int nullBitmapSize = layout.NullBitmapSize; + + ReadOnlySpan nullBitmap = row[^nullBitmapSize..]; + + foreach (ColumnDef column in _columns) + if (column.Type is JetDataType.Memo or JetDataType.Ole + && IsPresent(nullBitmap, layout.ColumnCount, column.ColumnId)) + result[column.Index] = layout.VarChunk(column.VariableIndex).ToArray(); + + return result; + } + + private ReadOnlySpan FixedSlice(ReadOnlySpan row, RowLayout layout, ColumnDef column) + { + int start = _format.RowColumnCountSize + column.FixedOffset; + long end = (long)start + column.Length; + if (column.FixedOffset < 0 || column.Length < 0 + || end > _format.RowColumnCountSize + (long)layout.FixedRegionLength) + throw new InvalidDataException( + $"Row fixed value for column '{column.Name}' extends outside the fixed-data region."); + return row.Slice(start, column.Length); + } + + private RowLayout ParseLayout(ReadOnlySpan row) + { + if (row.Length < _format.RowColumnCountSize) + throw new InvalidDataException("Row is too short to be an inline record."); + int storedCount = BinaryPrimitives.ReadUInt16LittleEndian(row[.._format.RowColumnCountSize]); + bool hasVar = _columns.Any(c => !c.IsFixedLength && c.ColumnId < storedCount); + return RowLayout.Parse(row, _format.RowColumnCountSize, hasVar); + } + + private static bool IsPresent(ReadOnlySpan nullBitmap, int storedColumnCount, int columnId) => + columnId >= 0 && columnId < storedColumnCount + && (nullBitmap[columnId >> 3] & (1 << (columnId & 7))) != 0; +} diff --git a/src/LibRed/LibRed.Core/Storage/RowEncoder.cs b/src/LibRed/LibRed.Core/Storage/RowEncoder.cs new file mode 100644 index 00000000..6733afe7 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/RowEncoder.cs @@ -0,0 +1,143 @@ +using System.Buffers.Binary; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.Storage.Types; + +namespace LibRed.Storage; + +/// +/// Encodes a row of CLR values into the Jet 4 / ACE inline row layout — the inverse of +/// : +/// +/// [colCount:2] [fixed data] [var data] [varOffsetTable:(numVar+1)x2] [numVar:2] [nullBitmap] +/// +/// The null bitmap marks present (non-null) columns; a Boolean column has no data and its +/// bit carries the value. Variable columns are laid out in ascending VariableIndex order with +/// an end-first offset table. A memo/OLE column's value is written as an *inline* long-value +/// (12-byte descriptor + payload, §8); values too large to inline (chained LVAL pages) are not +/// written yet. +/// +public sealed class RowEncoder(IReadOnlyList columns, JetFormatBase format, int? fixedDataLength = null) +{ + private readonly IReadOnlyList _columns = columns; + private readonly JetFormatBase _format = format; + + // Fixed (non-boolean) columns occupy a contiguous region; its length is defined by the + // table definition. Default to the tight max so a standalone encode round-trips; INSERT + // passes the TDEF's actual fixed-row size so the on-disk layout matches Access. + private readonly int _fixedDataLength = fixedDataLength ?? ComputeFixedDataLength(columns); + + public byte[] Encode(object?[] values) + { + if (values.Length != _columns.Count) + throw new ArgumentException($"Expected {_columns.Count} values, got {values.Length}.", nameof(values)); + + int colCountSize = _format.RowColumnCountSize; + // The leading count and the null-bitmap width are driven by the highest column id + 1, NOT the live + // column count — the two coincide only while ids are contiguous (fresh table / ADD COLUMN), and diverge + // once ids have a gap (a burned type-change id, or a DROP COLUMN gap). Verified vs ACE (spec §5). + int maxColumnId = _columns.Count == 0 ? -1 : _columns.Max(c => c.ColumnId); + int colCount = maxColumnId + 1; + int nullBitmapSize = (colCount + 7) / 8; + + var varCols = _columns.Where(c => !c.IsFixedLength).OrderBy(c => c.VariableIndex).ToList(); + int numVar = varCols.Count; + + // Encode each region's payload first so we can size the row exactly. + var fixedRegion = new byte[_fixedDataLength]; + foreach (ColumnDef column in _columns) + { + if (column.Type == JetDataType.Boolean || !column.IsFixedLength) continue; + object? v = values[column.Index]; + if (v is null) continue; // null fixed value: leave its slot zeroed, clear the bit below + byte[] encoded = JetTypeCodec.Encode(column, v); + if (encoded.Length != column.Length) + throw new InvalidOperationException($"Column '{column.Name}' encoded to {encoded.Length} bytes, expected {column.Length}."); + encoded.CopyTo(fixedRegion.AsSpan(column.FixedOffset)); + } + + var varChunks = new byte[numVar][]; + for (int j = 0; j < numVar; j++) + { + object? v = values[varCols[j].Index]; + varChunks[j] = v is null ? [] : JetTypeCodec.Encode(varCols[j], v); + } + + _ = colCount; _ = colCountSize; _ = nullBitmapSize; // sizes are derived inside AssembleRow + return AssembleRow(maxColumnId, fixedRegion, varChunks, _columns, values); + } + + /// Assembles the on-disk row bytes from a prepared fixed region and the ordered variable chunks: + /// [count][fixed][var data][var-offset table][numVar] (the variable section is omitted entirely when + /// there are none) then [null bitmap]. The count and bitmap width are maxColumnId + 1; a + /// column's bit is set when present (Boolean = its truthy value), and dead ids (gaps below the max, from a + /// burned/dropped id) are set present too — all verified vs ACE (§5). Shared by and + /// the ALTER COLUMN row re-lay so the two can never drift. + internal static byte[] AssembleRow(int maxColumnId, ReadOnlySpan fixedRegion, + IReadOnlyList varChunks, IReadOnlyList columns, object?[] values) + { + const int countSize = 2; + int count = maxColumnId + 1; + int nullBitmapSize = (count + 7) / 8; + int numVar = varChunks.Count; + int varDataLength = 0; + for (int j = 0; j < numVar; j++) varDataLength += varChunks[j].Length; + int varSectionLen = numVar > 0 ? varDataLength + (numVar + 1) * 2 + 2 : 0; + + var row = new byte[countSize + fixedRegion.Length + varSectionLen + nullBitmapSize]; + BinaryPrimitives.WriteUInt16LittleEndian(row, (ushort)count); + fixedRegion.CopyTo(row.AsSpan(countSize)); + + int bitmapPos; + if (numVar > 0) + { + int varDataStart = countSize + fixedRegion.Length; + int pos = varDataStart; + for (int j = 0; j < numVar; j++) { varChunks[j].CopyTo(row.AsSpan(pos)); pos += varChunks[j].Length; } + + // End-first offset table: entry[numVar] = var-data start, entry[numVar-j-1] = end of var col j. + int tableStart = pos; + BinaryPrimitives.WriteUInt16LittleEndian(row.AsSpan(tableStart + numVar * 2, 2), (ushort)varDataStart); + int running = varDataStart; + for (int j = 0; j < numVar; j++) + { + running += varChunks[j].Length; + BinaryPrimitives.WriteUInt16LittleEndian(row.AsSpan(tableStart + (numVar - j - 1) * 2, 2), (ushort)running); + } + int numVarPos = tableStart + (numVar + 1) * 2; + BinaryPrimitives.WriteUInt16LittleEndian(row.AsSpan(numVarPos, 2), (ushort)numVar); + bitmapPos = numVarPos + 2; + } + else bitmapPos = countSize + fixedRegion.Length; + + var liveIds = new HashSet(); + foreach (ColumnDef column in columns) + { + liveIds.Add(column.ColumnId); + bool present = column.Type == JetDataType.Boolean ? IsTruthy(values[column.Index]) : values[column.Index] is not null; + if (present) row[bitmapPos + (column.ColumnId >> 3)] |= (byte)(1 << (column.ColumnId & 7)); + } + for (int id = 0; id <= maxColumnId; id++) // dead ids read present in ACE + if (!liveIds.Contains(id)) + row[bitmapPos + (id >> 3)] |= (byte)(1 << (id & 7)); + return row; + } + + /// Access truthiness for a Boolean (bit) value being stored: a bool is itself, any non-zero + /// number is true, 0 / null is false. + private static bool IsTruthy(object? value) => value switch + { + null => false, + bool b => b, + _ => Convert.ToBoolean(value, System.Globalization.CultureInfo.InvariantCulture), + }; + + private static int ComputeFixedDataLength(IReadOnlyList columns) + { + int length = 0; + foreach (ColumnDef c in columns) + if (c.IsFixedLength && c.Type != JetDataType.Boolean) + length = Math.Max(length, c.FixedOffset + c.Length); + return length; + } +} diff --git a/src/LibRed/LibRed.Core/Storage/RowId.cs b/src/LibRed/LibRed.Core/Storage/RowId.cs new file mode 100644 index 00000000..c48c52c7 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/RowId.cs @@ -0,0 +1,4 @@ +namespace LibRed.Storage; + +/// A pointer to a row: the data page it lives on and its slot index within that page. +public readonly record struct RowId(int Page, int Row); diff --git a/src/LibRed/LibRed.Core/Storage/RowInserter.cs b/src/LibRed/LibRed.Core/Storage/RowInserter.cs new file mode 100644 index 00000000..1b965240 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/RowInserter.cs @@ -0,0 +1,767 @@ +using System.Buffers; +using System.Buffers.Binary; +using System.Text; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// Inserts a row into an existing data page of a table. This first cut only fills free space on +/// the table's already-owned pages — it does not yet allocate a new page or update indexes — so +/// it is valid for tables whose last data page has room. The page's slot directory grows forward +/// while row data is packed from the page end backward (see ). +/// +public sealed class RowInserter(PageChannel channel, TableDef table) +{ + private readonly PageChannel _channel = channel; + private readonly UsageMapWriter _usageMaps = new(channel); + private readonly TableDef _table = table; + + /// Encodes and writes (aligned to column Index) into the table. + public void Insert(object?[] values) => Insert(values, updateIndexes: true); + + /// + /// Inserts a row, optionally skipping index maintenance. Heap-only inserts are used for the + /// MSysObjects catalog row (whose text indexes are not yet writable), which the catalog reader + /// finds by table scan anyway. + /// + public void Insert(object?[] values, bool updateIndexes) + { + JetFormatBase format = _channel.Format; + + // Assign AutoNumber ids for any AutoNumber column the caller left unset (the usual case — + // Jet SQL omits the AutoNumber column from the insert). An explicitly supplied value is kept + // as-is (Jet, unlike SQL Server, permits explicit AutoNumber values); either way the row's + // final id drives both the row encoding and the high-water update below. + AssignAutoNumbers(format, values); + if (updateIndexes) EnforceUniqueIndexes(values); // reject a duplicate before writing anything + + // Index keys are encoded from the *logical* values. MaterializeLongValues replaces a memo/OLE value + // with its on-disk LongValueDescriptor, and a Memo column IS indexable (its key is the collation key + // of the first 255 characters), so snapshot the values first and key the index off that snapshot. + object?[] keyValues = updateIndexes ? (object?[])values.Clone() : values; + MaterializeLongValues(values); + + // Encode first: the fixed-region length is pinned by any existing row (to match Access), + // or derived from the columns for a just-created empty table. + var encoder = new RowEncoder(_table.Columns, format, InferFixedDataLength(format)); + byte[] record = encoder.Encode(values); + + // Then find an owned page with room for the record plus its 2-byte slot entry. + (int pageNumber, byte[] page) = FindPageWithRoom(format, record.Length + 2); + + int rowCount = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2)); + int freeSpace = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2)); + + // Rows are packed from the page end backward, with strictly decreasing slot offsets, + // so the new row goes just below the current lowest row start. + int lowestOffset = LowestRowOffset(page, format, rowCount); + int newOffset = lowestOffset - record.Length; + record.CopyTo(page.AsSpan(newOffset)); + + // Append the slot, bump the row count, shrink free space by row + slot-entry bytes. + // The new row's slot index is the old row count, giving its row id on this page. + BinaryPrimitives.WriteUInt16LittleEndian( + page.AsSpan(format.DataRowDirectoryOffset + rowCount * 2, 2), (ushort)(newOffset & RowPointer.OffsetMask)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2), (ushort)(rowCount + 1)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), (ushort)(freeSpace - record.Length - 2)); + + _channel.WritePage(pageNumber, page); + + UpdateTdefCounters(format, values); + if (updateIndexes) + UpdateIndexes(keyValues, new RowId(pageNumber, rowCount)); + } + + /// + /// Rewrites an existing row in place at its slot (page + row index preserved, matching Access, so + /// index rowid pointers stay valid). Any changed memo/OLE value is re-materialized onto LVAL pages; + /// the page is repacked to absorb a size change (slot order = physical order, as Access keeps it). + /// Throws if the row no longer fits its page (relocation not implemented yet); index-key maintenance for + /// a changed indexed column is the caller's responsibility. Does not touch the old LVAL pages (freeing + /// them is a follow-up). + /// + public void Update(RowId id, object?[] values, IReadOnlySet changedColumns) + { + JetFormatBase format = _channel.Format; + + // Long-value (memo/OLE) columns: keep an unchanged column's on-disk descriptor verbatim (so it is not + // needlessly re-materialised onto fresh LVAL pages), and free a changed column's old chained pages. + var oldDescriptors = new RowDecoder(_table.Columns, format).LongValueRaw(ReadRowBytes(id)); + foreach (ColumnDef column in _table.Columns) + { + if (column.Type is not (JetDataType.Memo or JetDataType.Ole)) continue; + if (!oldDescriptors.TryGetValue(column.Index, out byte[]? oldDescriptor)) continue; // old value was null + if (changedColumns.Contains(column.Index)) FreeLongValue(column, oldDescriptor); + else values[column.Index] = new LongValueDescriptor(oldDescriptor); + } + + MaterializeLongValues(values); + + byte[] srcPage = _channel.ReadPageShared(id.Page).Span.ToArray(); + // Use the same guarded inference as Insert (Math.Max with the column-derived length): the raw per-row + // parse returns a negative length for an all-fixed-column table (no variable columns — e.g. Northwind + // Order Details), which without the guard would overflow `new byte[len]`. + var encoder = new RowEncoder(_table.Columns, format, InferFixedDataLength(format)); + byte[] record = encoder.Encode(values); + + int raw = BinaryPrimitives.ReadUInt16LittleEndian(srcPage.AsSpan(format.DataRowDirectoryOffset + id.Row * 2, 2)); + if ((raw & RowPointer.OverflowFlag) != 0) + { + // This slot is a 4-byte forward pointer to the real (relocated) row; rewrite it on its target page + // (which keeps its hidden "deleted" flag). If it grows past that page too, we'd need to re-relocate. + DataPage.TryReadRow(new PageBuffer(srcPage, id.Page), format, id.Row, + out RowSlot sourceSlot, out ReadOnlySpan sourceBytes); + RelocatedRow target = RowRelocationReader.Resolve( + _channel, _table.DefinitionPage, sourceSlot, sourceBytes); + if (!TryRewriteRowInPlace(target.Buffer.PageNumber, target.RowNumber, record)) + throw new NotSupportedException("Re-relocating an already-relocated row that grew again is not supported yet."); + return; + } + + // Normal row: rewrite in place if it still fits its page (row id preserved). + if (TryRewriteRowInPlace(id.Page, id.Row, record)) return; + + // It no longer fits: relocate the row to another page as a hidden ("deleted") record, and turn this + // slot into a 4-byte forward pointer (row id preserved, so index entries stay valid) — Access's own + // overflow mechanism, verified against ACE. + (int targetPage, int targetRow) = WriteHiddenRow(format, record); + var pointerBytes = new byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(pointerBytes, (targetPage << 8) | targetRow); + TryRewriteRowInPlace(id.Page, id.Row, pointerBytes, addFlags: RowPointer.OverflowFlag); // 4 bytes always fits + } + + /// Rewrites the row at (page, slot) in place, repacking the page from the end in slot order so + /// every row id is preserved and each slot keeps its flags (plus on the + /// target). Returns false without writing if the row no longer fits the page. + private bool TryRewriteRowInPlace(int pageNumber, int slot, byte[] record, int addFlags = 0) + { + JetFormatBase format = _channel.Format; + // Pool the transient working page: read into a rented buffer, repack in place, write back, return it — + // instead of allocating (and immediately discarding) two 4 KB arrays (ReadPage's + ToArray's) per rewrite. + byte[] page = ArrayPool.Shared.Rent(format.PageSize); + try + { + _channel.ReadPage(pageNumber, page); + int rowCount = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2)); + + var rows = new byte[rowCount][]; + var rawDir = new int[rowCount]; + int prevEnd = format.PageSize; + for (int i = 0; i < rowCount; i++) + { + int raw = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + i * 2, 2)); + rawDir[i] = raw; + int offset = raw & RowPointer.OffsetMask; + rows[i] = page.AsSpan(offset, prevEnd - offset).ToArray(); // preserve every row's bytes (deleted/overflow included) + prevEnd = offset; + } + rows[slot] = record; + rawDir[slot] |= addFlags; + + int total = rows.Sum(r => r.Length); + if (total > format.PageSize - format.DataRowDirectoryOffset - rowCount * 2) return false; + + int off = format.PageSize; + for (int i = 0; i < rowCount; i++) + { + off -= rows[i].Length; + rows[i].CopyTo(page.AsSpan(off)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + i * 2, 2), + (ushort)((rawDir[i] & ~RowPointer.OffsetMask) | (off & RowPointer.OffsetMask))); + } + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), + (ushort)(off - format.DataRowDirectoryOffset - rowCount * 2)); + _channel.WritePage(pageNumber, page.AsSpan(0, format.PageSize)); + return true; + } + finally { ArrayPool.Shared.Return(page); } + } + + /// Writes a relocated row's bytes onto a page with room, as a hidden slot (Access marks it + /// "deleted" so scans skip it there — it's only reached via the forward pointer). Returns its location. + private (int Page, int Row) WriteHiddenRow(JetFormatBase format, byte[] record) + { + (int pageNumber, byte[] page) = FindPageWithRoom(format, record.Length + 2); + int rowCount = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2)); + int freeSpace = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2)); + int newOffset = LowestRowOffset(page, format, rowCount) - record.Length; + record.CopyTo(page.AsSpan(newOffset)); + + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + rowCount * 2, 2), + (ushort)((newOffset & RowPointer.OffsetMask) | RowPointer.DeletedFlag)); // hidden target + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2), (ushort)(rowCount + 1)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), (ushort)(freeSpace - record.Length - 2)); + _channel.WritePage(pageNumber, page); + return (pageNumber, rowCount); + } + + /// + /// Soft-deletes the row at — sets the deleted flag (0x8000) on its slot (the bytes + /// stay; scans and Access skip it) and decrements the TDEF row count (0x10), matching Access. The caller + /// removes the row's index entries first. (The row's LVAL pages, if any, are not reclaimed yet.) + /// + public void Delete(RowId id) + { + JetFormatBase format = _channel.Format; + + // Free the deleted row's chained long-value pages. + var oldDescriptors = new RowDecoder(_table.Columns, format).LongValueRaw(ReadRowBytes(id)); + foreach (ColumnDef column in _table.Columns) + if (column.Type is JetDataType.Memo or JetDataType.Ole && oldDescriptors.TryGetValue(column.Index, out byte[]? d)) + FreeLongValue(column, d); + + byte[] page = ArrayPool.Shared.Rent(format.PageSize); + try + { + _channel.ReadPage(id.Page, page); + int dir = format.DataRowDirectoryOffset + id.Row * 2; + ushort entry = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(dir, 2)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(dir, 2), (ushort)(entry | RowPointer.DeletedFlag)); + _channel.WritePage(id.Page, page.AsSpan(0, format.PageSize)); + } + finally { ArrayPool.Shared.Return(page); } + + byte[] tdef = ArrayPool.Shared.Rent(format.PageSize); + try + { + _channel.ReadPage(_table.DefinitionPage, tdef); + int rowCount = BinaryPrimitives.ReadInt32LittleEndian(tdef.AsSpan(format.TdefRowCountOffset, 4)); + BinaryPrimitives.WriteInt32LittleEndian(tdef.AsSpan(format.TdefRowCountOffset, 4), rowCount - 1); + _channel.WritePage(_table.DefinitionPage, tdef.AsSpan(0, format.PageSize)); + } + finally { ArrayPool.Shared.Return(tdef); } + } + + /// The full inline bytes of the row at (following an overflow pointer). + public byte[] ReadRow(RowId id) => ReadRowBytes(id); + + /// Rewrites the row at with the exact bytes given, + /// handling growth the same way does — repack in place if it fits, else relocate as a + /// hidden row with a forward pointer. The row id is preserved (so index entries stay valid). + public void RewriteRowRaw(RowId id, byte[] record) + { + JetFormatBase format = _channel.Format; + byte[] srcPage = _channel.ReadPageShared(id.Page).Span.ToArray(); + int raw = BinaryPrimitives.ReadUInt16LittleEndian(srcPage.AsSpan(format.DataRowDirectoryOffset + id.Row * 2, 2)); + if ((raw & RowPointer.OverflowFlag) != 0) + { + DataPage.TryReadRow(new PageBuffer(srcPage, id.Page), format, id.Row, + out RowSlot sourceSlot, out ReadOnlySpan sourceBytes); + RelocatedRow target = RowRelocationReader.Resolve( + _channel, _table.DefinitionPage, sourceSlot, sourceBytes); + if (!TryRewriteRowInPlace(target.Buffer.PageNumber, target.RowNumber, record)) + throw new NotSupportedException("Re-relocating an already-relocated row that grew again is not supported yet."); + return; + } + if (TryRewriteRowInPlace(id.Page, id.Row, record)) return; + (int targetPage, int targetRow) = WriteHiddenRow(format, record); + var pointerBytes = new byte[4]; + BinaryPrimitives.WriteInt32LittleEndian(pointerBytes, (targetPage << 8) | targetRow); + TryRewriteRowInPlace(id.Page, id.Row, pointerBytes, addFlags: RowPointer.OverflowFlag); + } + + /// The full inline bytes of the row at , following an overflow-forward + /// pointer to the row's real location if the slot has been relocated. + private byte[] ReadRowBytes(RowId id) + { + JetFormatBase format = _channel.Format; + PageBuffer page = _channel.ReadPageShared(id.Page); + if (!DataPage.TryReadRow(page, format, id.Row, out RowSlot slot, out ReadOnlySpan bytes)) + throw new InvalidDataException($"Row {id.Page}:{id.Row} does not exist."); + if (!slot.HasOverflow) return bytes.ToArray(); + + return RowRelocationReader.Resolve(_channel, _table.DefinitionPage, slot, bytes).Bytes.ToArray(); + } + + /// + /// Reclaims the LVAL pages of a replaced/deleted long value. A chained value owns dedicated pages + /// (one chunk per page): each is freed to the global map and cleared from the column's owned/free maps. + /// Inline (0x80) values have no pages; single-page (0x40) values share a page with others, so reclaiming + /// their row is deferred (they are left in place — a small, shared-page leak). + /// + private void FreeLongValue(ColumnDef column, byte[] descriptor) + { + byte flags = descriptor[3]; + if ((flags & 0x80) != 0 || (flags & 0x40) != 0) return; // inline or single (shared) page — not reclaimed here + + TableDefinitionPage definition = ReadDefinition(); + definition.LongValueOwnedMaps.TryGetValue(column.ColumnId, out (int Row, int Page) owned); + definition.LongValueFreeMaps.TryGetValue(column.ColumnId, out (int Row, int Page) free); + var allocator = new PageAllocator(_channel); + var reader = new LongValueReader(_channel); + _ = reader.ResolveWithPages(descriptor, out IReadOnlyList pages); + HashSet ownedPages = MapPages(owned.Row, owned.Page).ToHashSet(); + _ = MapPages(free.Row, free.Page); // validate both mutation targets before the first free + foreach (int page in pages) + if (!ownedPages.Contains(page)) + throw new InvalidDataException( + $"Long-value page {page} is not present in column '{column.Name}'s owned-pages map."); + + // Validation above completes before the first free-map or page mutation. The writes are still not + // atomic without the planned transaction/savepoint layer, but malformed chains cannot partially free. + foreach (int page in pages) + { + allocator.Free(page); + _usageMaps.SetBit(owned.Row, owned.Page, page, set: false); + _usageMaps.SetBit(free.Row, free.Page, page, set: false); + } + } + + /// The raw bytes of slot on a data page (walks the packed rows). + private static byte[] SlotBytes(byte[] page, JetFormatBase format, int slot) + { + int prevEnd = format.PageSize; + for (int i = 0; i <= slot; i++) + { + int offset = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + i * 2, 2)) & RowPointer.OffsetMask; + if (i == slot) return page.AsSpan(offset, prevEnd - offset).ToArray(); + prevEnd = offset; + } + throw new ArgumentOutOfRangeException(nameof(slot)); + } + + /// Adds the new row to every index B-tree (deduped by root page, since relationship + /// indexes share a real index's data) so indexed lookups — and Access — find it. + /// Rejects the insert if a UNIQUE or PRIMARY index would gain a duplicate key. A row with a + /// null in any of a unique index's columns is skipped — Jet treats nulls as distinct, so a unique index + /// allows multiple nulls (verified vs ACE). Runs before the row is written so nothing is half-inserted. + private void EnforceUniqueIndexes(object?[] values) + { + IndexWriter? writer = null; + foreach (IndexDef index in _table.Indexes + .Where(i => i.IsUnique && i.RootPage > 0) + .GroupBy(i => i.RootPage).Select(g => g.First())) + { + if (HasNullKey(index, values)) continue; // nulls are distinct — multiple allowed + writer ??= new IndexWriter(_channel, _table); + if (writer.KeyExists(index, values)) + throw new InvalidOperationException( + $"Cannot insert into '{_table.Name}': a row with the same {(index.IsPrimaryKey ? "primary key" : "unique key")} " + + $"already exists (index '{index.Name}')."); + } + } + + private void UpdateIndexes(object?[] values, RowId rowId) + { + var writer = new IndexWriter(_channel, _table); + foreach (IndexDef index in _table.Indexes + .Where(i => i.RootPage > 0) + .GroupBy(i => i.RootPage) + .Select(g => g.First())) + { + // WITH IGNORE NULL: a row with a null in any indexed column is not added to this index. + if (index.IgnoreNulls && HasNullKey(index, values)) continue; + writer.AddEntry(index, values, rowId); + } + } + + private static bool HasNullKey(IndexDef index, object?[] values) => + index.Columns.Any(c => values[c.Column.Index] is null or DBNull); + + /// Finds a data page with room for a row of bytes, growing the table + /// if none has. + /// + /// Consults the free-pages map, not the owned-pages map. The two agree only while a table is + /// small: once a page fills, Access clears its free bit (see ), so the free + /// map is normally just the page currently being appended to. Scanning the owned map instead would read + /// every already-full page from disk on every insert — O(pages) per row, i.e. quadratic over a bulk load. + /// + private (int PageNumber, byte[] Page) FindPageWithRoom(JetFormatBase format, int needed) + { + foreach (int pageNumber in new UsageMap(_channel, _table).FreeDataPages()) + { + byte[] page = _channel.ReadPageShared(pageNumber).Span.ToArray(); + int freeSpace = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2)); + if (freeSpace >= needed) + return (pageNumber, page); + } + + return AllocateDataPage(format); + } + + /// + /// Grows the table by one data page — like Access does for the first insert into a fresh + /// (data-page-less) table: takes a page from the global free-pages map, initialises it as an + /// empty data page owned by this table, and records it in the table's owned- and free-pages + /// usage maps so both Access and LibRed find it. + /// + private (int PageNumber, byte[] Page) AllocateDataPage(JetFormatBase format) + { + // We only allocate when no owned page had room, so the current tail (highest owned data page) + // is full. Access clears such a page from the free-pages map when it moves past it to a new + // page — leaving only the page currently being appended to marked free. Match that: clear the + // old tail's free bit, then set the new page's. (Verified against an ACE sequential fill: only + // the last of six equally-full pages stays in the free map.) + int previousTail = new UsageMap(_channel, _table).MaxDataPage(); + + int pageNumber = new PageAllocator(_channel).Allocate(); + + var page = new byte[format.PageSize]; + page[0] = (byte)PageType.DataPage; + page[1] = 0x01; // page flags (observed constant) + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.DataOwnerOffset, 4), _table.DefinitionPage); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2), 0); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), + (ushort)(format.PageSize - format.DataRowDirectoryOffset)); + _channel.WritePage(pageNumber, page); + + if (previousTail >= 0) + UpdateUsageBit(format.TdefFreePagesOffset, previousTail, set: false); // old tail is now full + UpdateUsageBit(format.TdefOwnedPagesOffset, pageNumber, set: true); + UpdateUsageBit(format.TdefFreePagesOffset, pageNumber, set: true); // new tail has room + + return (pageNumber, page); + } + + /// Sets or clears the bit for in the inline usage map + /// referenced by the TDEF pointer at (row byte + 3-byte page). + private void UpdateUsageBit(int tdefPointerOffset, int targetPage, bool set) + { + PageBuffer tdef = _channel.ReadPageShared(_table.DefinitionPage); + _usageMaps.SetBit(tdef.ReadByte(tdefPointerOffset), tdef.ReadInt24(tdefPointerOffset + 1), targetPage, set, + movableWindow: tdefPointerOffset == _channel.Format.TdefFreePagesOffset); + } + + + /// Pins the fixed-region length to an existing row anywhere in the table (so the layout + /// matches Access), or returns null for an empty table (the encoder then derives it). + private int? InferFixedDataLength(JetFormatBase format) + { + // The current fixed-region end from the column descriptors — this includes a just-added fixed column, + // whereas an existing row pins only the length as of when it was written. + int derived = _table.Columns.Where(c => c.IsFixedLength) + .Select(c => c.FixedOffset + c.Length).DefaultIfEmpty(0).Max(); + + // A table with no variable columns has no variable-offset table in its rows (ACE omits it), so a row + // can't pin the fixed length — and the schema fully determines it. Let the encoder derive it. + if (_table.Columns.All(c => c.IsFixedLength)) + return null; + + foreach (int pageNumber in new UsageMap(_channel, _table).DataPages()) + { + byte[] page = _channel.ReadPageShared(pageNumber).Span.ToArray(); + if (InferFixedDataLength(page, format) is { } pinned) + return Math.Max(pinned, derived); // ADD COLUMN of a fixed column grows the region past old rows + } + return null; // empty table → RowEncoder derives the same length from the columns + } + + private static int LowestRowOffset(byte[] page, JetFormatBase format, int rowCount) + { + int lowest = format.PageSize; + for (int i = 0; i < rowCount; i++) + { + int raw = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + i * 2, 2)); + lowest = Math.Min(lowest, raw & RowPointer.OffsetMask); + } + return lowest; + } + + /// + /// Reads the fixed-region length straight off an existing inline row: its variable-offset + /// table's last entry is the variable-data start (= columnCount field + fixed region), so the + /// fixed length is that minus the leading column-count field. + /// + private int? InferFixedDataLength(byte[] page, JetFormatBase format) + { + int rowCount = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2)); + + // Take the largest sane fixed length across the page's inline rows rather than trusting the first one: + // some rows decode to a nonsensical (e.g. zero) variable-data offset, which would yield a negative + // length — those are ignored, and the real rows agree on the true fixed length. + int? best = null; + int prevEnd = format.PageSize; + for (int i = 0; i < rowCount; i++) + { + int raw = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + i * 2, 2)); + int offset = raw & RowPointer.OffsetMask; + int length = prevEnd - offset; + prevEnd = offset; + + if ((raw & (RowPointer.DeletedFlag | RowPointer.OverflowFlag)) != 0) continue; + if (length < format.RowColumnCountSize + 2) continue; + + ReadOnlySpan row = page.AsSpan(offset, length); + // An old row written before the table's first variable ADD has no variable trailer even though + // the current schema does. Its stored count cannot cover that new variable column, which lets us + // distinguish the verified all-fixed form without interpreting fixed bytes as trailer offsets. + int storedCount = BinaryPrimitives.ReadUInt16LittleEndian(row[..format.RowColumnCountSize]); + bool rowHasVar = _table.Columns.Any(c => !c.IsFixedLength && c.ColumnId < storedCount); + RowLayout layout = RowLayout.Parse(row, format.RowColumnCountSize, rowHasVar); + int varDataStart = layout.FixedRegionLength + format.RowColumnCountSize; + + // The variable-data start is the end of the fixed region; it must lie after the column-count field + // and no later than the offset table. A row that fails this decoded garbage — skip it. + int candidate = layout.FixedRegionLength; + if (candidate > 0 && (!rowHasVar || varDataStart <= layout.VarTableStart)) + best = best is null ? candidate : Math.Max(best.Value, candidate); + } + return best; + } + + /// + /// Fills each AutoNumber column the caller left null with the next id — the TDEF high-water value + /// (`0x14`) plus one — matching how Jet assigns AutoNumbers. A value the caller supplied + /// explicitly is left untouched (Jet allows it, and then bumps + /// the high-water to it). Access permits only one AutoNumber column per table, but any number are + /// handled here for safety. + /// + /// + /// Access stores a memo/OLE value inline only up to 64 bytes (Jackcess + /// MAX_INLINE_LONG_VALUE_SIZE, the same for Jet3/Jet4); a larger value goes on its own LVAL + /// page. Inlining a long value works for LibRed's own reader but Access rejects it (e.g. it opens the + /// database yet fails to run a view whose subquery Expression is inlined). So for each memo/OLE column + /// whose value exceeds the inline limit, write it to an LVAL page and substitute the 12-byte reference + /// descriptor (short values, and pre-built descriptors from other callers, are left as-is to inline). + /// + private void MaterializeLongValues(object?[] values) + { + const int maxInline = 64; // Jackcess MAX_INLINE_LONG_VALUE_SIZE (Jet3 and Jet4) + LongValueWriter? writer = null; + TableDefinitionPage? definition = null; + + foreach (ColumnDef column in _table.Columns) + { + if (column.Type is not (JetDataType.Memo or JetDataType.Ole)) continue; + byte[]? payload = values[column.Index] switch + { + string s => Encoding.Unicode.GetBytes(s), // memo: UTF-16LE + byte[] b => b, // OLE: raw bytes + _ => null, // null, or an already-built LongValueDescriptor + }; + if (payload is null || payload.Length <= maxInline) continue; + + writer ??= new LongValueWriter(_channel); + definition ??= ReadDefinition(); + definition.LongValueOwnedMaps.TryGetValue(column.ColumnId, out (int Row, int Page) owned); + definition.LongValueFreeMaps.TryGetValue(column.ColumnId, out (int Row, int Page) free); + values[column.Index] = new LongValueDescriptor(StoreLongValue(writer, payload, owned, free)); + } + } + + // A page is dropped from the free-pages map once it cannot hold the smallest long value (a 65-byte + // payload — anything up to 64 inlines — plus its 2-byte row-directory entry). + private const int MaxLvalRowSize = 4076; // one LVAL page row (Jackcess MAX_LONG_VALUE_ROW_SIZE, Jet4) + private const int MinLvalRow = 65 + 2; + + /// Stores on an LVAL page for long-value column + /// — packing onto a free page as usual — and returns the in-row descriptor. + /// For a caller that must use a page regardless of size (the MSysObjects LvProp property blob, + /// which Access reads only from a page, never inline). Call before + /// so the row carries the returned descriptor as a . + public byte[] StorePackedLongValue(int columnId, byte[] payload) + { + TableDefinitionPage definition = ReadDefinition(); + definition.LongValueOwnedMaps.TryGetValue(columnId, out (int Row, int Page) owned); + definition.LongValueFreeMaps.TryGetValue(columnId, out (int Row, int Page) free); + return StoreLongValue(new LongValueWriter(_channel), payload, owned, free); + } + + /// + /// Writes one long value to LVAL page(s) and returns its in-row descriptor, maintaining the column's + /// §3.3.2 usage maps. A value up to one page is packed onto an existing free page (a page in the + /// free-pages map with room), the way Access shares a page across many small values; only when none has + /// room is a fresh page allocated (owned + free). A value larger than one page is chained across + /// dedicated pages. + /// + private byte[] StoreLongValue(LongValueWriter writer, byte[] payload, (int Row, int Page) owned, (int Row, int Page) free) + { + if (owned.Page == 0 || free.Page == 0) + throw new InvalidDataException("Long-value column has no complete owned/free usage-map pointers."); + _ = MapPages(owned.Row, owned.Page); // validate both map targets before allocating or writing LVAL pages + IReadOnlyList freePages = MapPages(free.Row, free.Page); + + if (payload.Length > MaxLvalRowSize) + { + LongValueResult chained = writer.Write(payload); + foreach (int page in chained.OwnedPages) _usageMaps.SetBit(owned.Row, owned.Page, page, set: true); + _usageMaps.SetBit(free.Row, free.Page, chained.FreePage, set: true, movableWindow: true); + return chained.Descriptor; + } + + // Pack onto the first free page that has room for the value plus its directory entry. + if (free.Page != 0) + foreach (int page in freePages) + if (writer.TryAppend(page, payload) is (int row, int remaining)) + { + if (remaining < MinLvalRow) _usageMaps.SetBit(free.Row, free.Page, page, set: false); // now full + return LongValueWriter.SinglePageDescriptor(payload.Length, page, row); + } + + // No free page had room: a fresh page (owned, and free — it still has spare room). + int newPage = writer.WriteNewPage(payload); + _usageMaps.SetBit(owned.Row, owned.Page, newPage, set: true); + _usageMaps.SetBit(free.Row, free.Page, newPage, set: true, movableWindow: true); + return LongValueWriter.SinglePageDescriptor(payload.Length, newPage, 0); + } + + /// Reads every page marked in a validated inline or reference usage map. + private IReadOnlyList MapPages(int mapRow, int mapPage) + { + if (mapPage <= 1 || mapPage >= _channel.PageCount) + throw new InvalidDataException($"Long-value usage-map page {mapPage} is outside the physical file."); + var holder = new DataPage(); + holder.Read(_channel.ReadPageShared(mapPage), _channel.Format); + if (holder.IsLongValuePage || holder.OwningTablePage != 0) + throw new InvalidDataException( + $"Long-value usage-map pointer {mapPage}:{mapRow} does not target an owner-zero usage-map data page."); + if (mapRow < 0 || mapRow >= holder.RowCount) + throw new InvalidDataException($"Long-value usage-map row {mapPage}:{mapRow} does not exist."); + RowSlot slot = holder.Rows[mapRow]; + if (slot.IsDeleted || slot.HasOverflow || slot.Length == 0) + throw new InvalidDataException($"Long-value usage-map row {mapPage}:{mapRow} is deleted, overflowed, or empty."); + ReadOnlySpan map = holder.GetRow(mapRow); + var result = new List(); + + if (map[0] == 0x00) + { + if (map.Length < 5) + throw new InvalidDataException("Inline long-value usage map is shorter than its 5-byte header."); + int startPage = BinaryPrimitives.ReadInt32LittleEndian(map.Slice(1, 4)); + AppendMapBits(result, map[5..], startPage); + return result; + } + + if (map[0] != 0x01 || map.Length != 69) + throw new InvalidDataException( + $"Long-value usage map has invalid type/length 0x{map[0]:X2}/{map.Length}."); + int pagesPerBitmap = (_channel.PageSize - 4) * 8; + var bitmapPages = new HashSet(); + for (int i = 0; i < 17; i++) + { + int bitmapPage = BinaryPrimitives.ReadInt32LittleEndian(map.Slice(1 + i * 4, 4)); + if (bitmapPage == 0) continue; + if (bitmapPage <= 1 || bitmapPage >= _channel.PageCount || !bitmapPages.Add(bitmapPage)) + throw new InvalidDataException($"Long-value usage map has invalid bitmap-page pointer {bitmapPage}."); + ReadOnlySpan bitmap = _channel.ReadPageShared(bitmapPage).Span; + if (bitmap[0] != (byte)PageType.PageUsageBitmap || bitmap[1] != 0x01 || bitmap[2] != 0 || bitmap[3] != 0) + throw new InvalidDataException($"Long-value usage-map pointer {bitmapPage} is not a bitmap page."); + AppendMapBits(result, bitmap[4..], i * pagesPerBitmap); + } + return result; + } + + private void AppendMapBits(List result, ReadOnlySpan bitmap, int startPage) + { + for (int i = 0; i < bitmap.Length; i++) + for (int bit = 0; bit < 8; bit++) + if ((bitmap[i] & (1 << bit)) != 0) + { + int page = startPage + i * 8 + bit; + if (page <= 1 || page >= _channel.PageCount) + throw new InvalidDataException( + $"Long-value usage map names page {page}, outside the physical reusable range."); + result.Add(page); + } + } + + private TableDefinitionPage ReadDefinition() + { + var definition = new TableDefinitionPage(); + definition.Read(_channel, _table.DefinitionPage); + return definition; + } + + private void AssignAutoNumbers(JetFormatBase format, object?[] values) + { + bool needed = false; + foreach (ColumnDef column in _table.Columns) + if (column.IsAutoNumber && values[column.Index] is null or DBNull) { needed = true; break; } + if (!needed) return; + + ReadOnlySpan tdef = _channel.ReadPageShared(_table.DefinitionPage).Span; + int highWater = BinaryPrimitives.ReadInt32LittleEndian(tdef.Slice(format.TdefLastAutoNumberOffset, 4)); + + foreach (ColumnDef column in _table.Columns) + if (column.IsAutoNumber && values[column.Index] is null or DBNull) + { + if (column.IsRandomAutoNumber) + // "Random" AutoNumber (DefaultValue = GenUniqueID()): a random Int32, independent of the + // sequential counter. Access relies on the PK's uniqueness to reject the rare collision. + values[column.Index] = RandomAutoNumber(); + else + // Next id = last-assigned + increment. On a fresh table the last value (0x14) is + // Seed-Increment, so the first assigned id is the Seed. + values[column.Index] = highWater += column.Increment; + } + } + + /// A random non-zero signed Int32 for a "Random" AutoNumber, mirroring Access's GenUniqueID(). + private static int RandomAutoNumber() + { + int value; + do { value = Random.Shared.Next(int.MinValue, int.MaxValue); } while (value == 0); + return value; + } + + /// + /// Updates the TDEF counters Access maintains on insert, in one read-modify-write of the TDEF + /// page: + /// + /// Row count (`0x10`) — incremented. + /// AutoNumber high-water (`0x14`) — set to the max of its current value and the id just + /// written (Access reads it to pick the *next* id = this + 1; leaving it stale makes Access + /// reissue an existing id and reject the insert as a duplicate primary key). + /// Per-index **unique-entry count** (`0x3F + ordinal×12`, `+4`) — incremented by one for + /// each **unique** index (a unique index gets a distinct key per row). This is the cumulative + /// count Access advances on every insert and never decrements. The sibling **total-entry count** + /// (`+0`) is deliberately left untouched: Access does **not** maintain it live — it stays `0` + /// through inserts and is only written (to the row count) on compact/repair (verified: a live + /// ACE-inserted table reads total `0` while saved Northwind tables read total = row count). + /// + /// + private void UpdateTdefCounters(JetFormatBase format, object?[] values) + { + byte[] tdef = _channel.ReadPageShared(_table.DefinitionPage).Span.ToArray(); + + int count = BinaryPrimitives.ReadInt32LittleEndian(tdef.AsSpan(format.TdefRowCountOffset, 4)); + BinaryPrimitives.WriteInt32LittleEndian(tdef.AsSpan(format.TdefRowCountOffset, 4), count + 1); + + foreach (ColumnDef column in _table.Columns) + { + if (!column.IsAutoNumber || values[column.Index] is not { } value) continue; + // A "Random" AutoNumber leaves the high-water at its default (Access ignores 0x14 for it — verified: + // a UI-authored Random AutoNumber reads last-value 0). Advancing it would be meaningless (random ids + // don't form a monotone sequence) and diverge from Access's on-disk state. + if (column.IsRandomAutoNumber) continue; + int assigned = Convert.ToInt32(value); + int highWater = BinaryPrimitives.ReadInt32LittleEndian(tdef.AsSpan(format.TdefLastAutoNumberOffset, 4)); + // Advance 0x14 to the id just written when it moves further in the counter's direction — for a + // positive increment that's the max seen, for a negative (descending) counter the min. Using max + // unconditionally would let a descending counter reissue the previous id (duplicate key). + // NB deliberate divergence from Access: ACE seeds 0x14 from the *last inserted* value regardless + // of direction (KB 884185), so an explicit lower INSERT drops the counter and the next auto id + // collides with an existing row ("duplicate values in the index/primary key"). LibRed's monotone + // rule is immune — verified both sides in AutoNumberSeed[Immunity]Tests. + bool advances = column.Increment >= 0 ? assigned > highWater : assigned < highWater; + int newHighWater = advances ? assigned : highWater; + if (advances) + BinaryPrimitives.WriteInt32LittleEndian(tdef.AsSpan(format.TdefLastAutoNumberOffset, 4), assigned); + // Keep the cached catalog seed in sync with the on-disk 0x14. The insert path itself reads the + // high-water from disk (AssignAutoNumbers), so this isn't needed for assigning ids — but RewriteColumn + // (an ALTER on a table that has an AutoNumber) reconstructs the counter from the cached + // ColumnDef.Seed; if left stale, a rebuild after the high rows were deleted resets the counter to its + // create-time value (verified: next id dropped to 1 instead of continuing past 6). Seed = next id. + column.Seed = newHighWater + column.Increment; + } + + // TODO(non-unique-index-stats): a non-unique index's unique-entry count must advance only + // when the inserted key is genuinely new (Access's cumulative-distinct semantics), which + // needs a probe of the existing keys. LibRed only creates unique (PK) indexes today, so we + // handle just those; extend this when secondary/non-unique indexes are supported. + foreach (IndexDef index in _table.Indexes) + { + if (!index.IsUnique) continue; + if (index.IgnoreNulls && HasNullKey(index, values)) continue; // row was excluded from the index + int statsUnique = format.TdefRealIndexBlockOffset + index.RealIndexOrdinal * format.RealIndexEntrySize + 4; + int unique = BinaryPrimitives.ReadInt32LittleEndian(tdef.AsSpan(statsUnique, 4)); + BinaryPrimitives.WriteInt32LittleEndian(tdef.AsSpan(statsUnique, 4), unique + 1); + } + + _channel.WritePage(_table.DefinitionPage, tdef); + } +} diff --git a/src/LibRed/LibRed.Core/Storage/RowLayout.cs b/src/LibRed/LibRed.Core/Storage/RowLayout.cs new file mode 100644 index 00000000..fe81cb4e --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/RowLayout.cs @@ -0,0 +1,94 @@ +using System.Buffers.Binary; + +namespace LibRed.Storage; + +/// +/// Parses the structural trailer of an inline row record once (spec §5), so the several call sites that +/// need to locate a row's regions don't each re-derive the offset arithmetic. Layout: +/// +/// [count:2] [fixed data] [var data] [varOffsetTable:(numVar+1)x2] [numVar:2] [nullBitmap] +/// +/// The leading count is maxColumnId + 1 and drives the null-bitmap width. A table with NO variable +/// columns omits the whole variable section (offset table + numVar) — such a row can't self-describe that, +/// so the caller passes from the schema. +/// +internal readonly ref struct RowLayout +{ + private readonly ReadOnlySpan _row; + private readonly int _countSize; + + /// The leading column count (= max column id + 1). + public int ColumnCount { get; } + /// Null-bitmap width in bytes, from the leading count. + public int NullBitmapSize { get; } + /// Number of variable columns stored (0 when the table has no variable section). + public int NumVar { get; } + /// Offset of the variable-offset table, or -1 when there is no variable section. + public int VarTableStart { get; } + /// Length of the fixed-data region (bytes between the leading count and the variable data). + public int FixedRegionLength { get; } + + private RowLayout(ReadOnlySpan row, int countSize, bool hasVar) + { + if (countSize != 2 || row.Length < countSize) + throw new InvalidDataException("Row is too short to contain its 2-byte column count."); + + _row = row; + _countSize = countSize; + ColumnCount = BinaryPrimitives.ReadUInt16LittleEndian(row[..countSize]); + NullBitmapSize = (ColumnCount + 7) / 8; + if (row.Length < countSize + NullBitmapSize) + throw new InvalidDataException( + $"Row is {row.Length} bytes, too short for its {NullBitmapSize}-byte null bitmap."); + + if (!hasVar) + { + NumVar = 0; + VarTableStart = -1; + FixedRegionLength = row.Length - countSize - NullBitmapSize; + return; + } + + int numVarPos = row.Length - NullBitmapSize - 2; + if (numVarPos < countSize + 2) + throw new InvalidDataException("Row is too short to contain a variable-column trailer."); + NumVar = BinaryPrimitives.ReadUInt16LittleEndian(row.Slice(numVarPos, 2)); + long tableStart = (long)numVarPos - ((long)NumVar + 1) * 2; + if (tableStart < countSize || tableStart > numVarPos) + throw new InvalidDataException( + $"Row declares {NumVar} variable slots, placing its offset table outside the row."); + VarTableStart = (int)tableStart; + + int previous = VarOffset(0); + if (previous < countSize || previous > VarTableStart) + throw new InvalidDataException( + $"Row variable-data end {previous} is outside the data region ending at {VarTableStart}."); + for (int entry = 1; entry <= NumVar; entry++) + { + int current = VarOffset(entry); + if (current < countSize || current > previous) + throw new InvalidDataException( + $"Row variable offset {entry} ({current}) is outside or above its preceding boundary {previous}."); + previous = current; + } + // The last offset-table entry is the variable-data start (= count field + fixed region). + FixedRegionLength = previous - countSize; + } + + /// Parses ; is whether the schema has any variable column. + public static RowLayout Parse(ReadOnlySpan row, int countSize, bool hasVar) => new(row, countSize, hasVar); + + /// The raw bytes of variable column (end-first offset table). + public ReadOnlySpan VarChunk(int variableIndex) + { + if (variableIndex < 0 || variableIndex >= NumVar) + throw new InvalidDataException( + $"Row has {NumVar} variable slots but column metadata requests slot {variableIndex}."); + int start = VarOffset(NumVar - variableIndex); + int end = VarOffset(NumVar - variableIndex - 1); + return _row[start..end]; + } + + private int VarOffset(int entry) => + BinaryPrimitives.ReadUInt16LittleEndian(_row.Slice(VarTableStart + entry * 2, 2)); +} diff --git a/src/LibRed/LibRed.Core/Storage/RowRelocationReader.cs b/src/LibRed/LibRed.Core/Storage/RowRelocationReader.cs new file mode 100644 index 00000000..fdd359fe --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/RowRelocationReader.cs @@ -0,0 +1,46 @@ +using System.Buffers.Binary; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// A validated, page-backed relocated-row target. The bytes remain zero-copy for index seeks. +internal readonly record struct RelocatedRow(PageBuffer Buffer, RowSlot Slot, int RowNumber) +{ + public ReadOnlySpan Bytes => Buffer.Slice(Slot.Offset, Slot.Length); +} + +/// Validates and follows the 4-byte forward pointer stored in a live overflow row slot. +internal static class RowRelocationReader +{ + public static RelocatedRow Resolve(PageChannel channel, int owningTablePage, + RowSlot sourceSlot, ReadOnlySpan sourceBytes) + { + if (sourceSlot.IsDeleted || !sourceSlot.HasOverflow) + throw new InvalidDataException("A relocation source must be a live overflow row slot."); + if (sourceBytes.Length != 4) + throw new InvalidDataException( + $"A relocation source must contain exactly one 4-byte pointer; found {sourceBytes.Length} bytes."); + + int pointer = BinaryPrimitives.ReadInt32LittleEndian(sourceBytes); + int pageNumber = pointer >> 8; + int rowNumber = pointer & 0xFF; + if (pageNumber <= 0 || pageNumber >= channel.PageCount) + throw new InvalidDataException( + $"Relocation pointer targets page {pageNumber}, outside the file's 1..{channel.PageCount - 1} range."); + + PageBuffer targetBuffer = channel.ReadPageShared(pageNumber); + uint owner = targetBuffer.ReadUInt32(channel.Format.DataOwnerOffset); + if (owner != (uint)owningTablePage) + throw new InvalidDataException( + $"Relocation target page {pageNumber} belongs to TDEF {owner}, not TDEF {owningTablePage}."); + if (!DataPage.TryReadRow(targetBuffer, channel.Format, rowNumber, out RowSlot targetSlot, out _)) + throw new InvalidDataException( + $"Relocation pointer targets missing row {rowNumber} on page {pageNumber}."); + if (!targetSlot.IsDeleted || targetSlot.HasOverflow || targetSlot.Length == 0) + throw new InvalidDataException( + $"Relocation target {pageNumber}:{rowNumber} is not a nonempty hidden inline row."); + + return new RelocatedRow(targetBuffer, targetSlot, rowNumber); + } +} diff --git a/src/LibRed/LibRed.Core/Storage/Table.cs b/src/LibRed/LibRed.Core/Storage/Table.cs new file mode 100644 index 00000000..ab30857e --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/Table.cs @@ -0,0 +1,117 @@ +using LibRed.Catalog; +using LibRed.IO; + +namespace LibRed.Storage; + +/// +/// An opened table: pairs a with the means to read its rows. +/// The primary entry point for scanning data out of the storage layer. +/// +public sealed class Table +{ + public Table(PageChannel channel, TableDef definition) + { + Channel = channel; + Definition = definition; + UsageMap = new UsageMap(channel, definition); + } + + public PageChannel Channel { get; } + public TableDef Definition { get; } + public UsageMap UsageMap { get; } + + public string Name => Definition.Name; + + /// Returns a forward-only cursor over all rows in the table. + public TableCursor Rows() => new(this); + + /// A row decoder over this table's columns — reuse one across a seek/scan rather than allocating + /// per row (each carries a shared ). + private RowDecoder NewDecoder() => new(Definition.Columns, Channel.Format, new LongValueReader(Channel)); + + /// Decodes the row at (following an overflow forward-pointer to a + /// relocated row), or if the slot is empty/deleted. Used by an index seek, which + /// yields row ids. + public object?[]? GetRow(RowId id) => GetRow(id, NewDecoder()); + + private object?[]? GetRow(RowId id, RowDecoder decoder) + { + // Read just the one wanted slot straight from the page directory (O(1)), over the shared cache buffer + // without copying the 4 KB page out — the bytes are consumed immediately by Decode. Both were the + // seek's per-row hot cost. + if (!Pages.DataPage.TryReadRow(Channel.ReadPageShared(id.Page), Channel.Format, id.Row, out Pages.RowSlot slot, out ReadOnlySpan bytes)) + return null; + + if (slot.IsDeleted) return null; + if (slot.HasOverflow) + { + RelocatedRow target = RowRelocationReader.Resolve( + Channel, Definition.DefinitionPage, slot, bytes); + return decoder.Decode(target.Bytes); + } + return decoder.Decode(bytes); + } + + /// Yields the rows whose key equals — an index + /// seek (equality) instead of a full scan. May over-return (lossy text/binary keys); the caller re-checks + /// the predicate. + public IEnumerable SeekRows(IndexDef index, object?[] values) + { + var decoder = NewDecoder(); + foreach (RowId id in new IndexWriter(Channel, Definition).Seek(index, values)) + if (GetRow(id, decoder) is { } row) + yield return row; + } + + /// Like but yields each matching row together with its — + /// for an UPDATE/DELETE join that must know which physical row to rewrite/remove, not just its values. + public IEnumerable<(RowId Id, object?[] Values)> SeekRowsWithIds(IndexDef index, object?[] values) + { + var decoder = NewDecoder(); + foreach (RowId id in new IndexWriter(Channel, Definition).Seek(index, values)) + if (GetRow(id, decoder) is { } row) + yield return (id, row); + } + + /// Yields the rows whose key lies in [, + /// ] (either bound null = open) — an index range scan. May over-return at the + /// boundaries; the caller re-checks the predicate. + public IEnumerable SeekRangeRows(IndexDef index, object?[]? low, object?[]? high) + { + var decoder = NewDecoder(); + foreach (RowId id in new IndexWriter(Channel, Definition).SeekRange(index, low, high)) + if (GetRow(id, decoder) is { } row) + yield return row; + } + + /// Inserts a row (values aligned to column ) into the table. + public void Insert(object?[] values) => new RowInserter(Channel, Definition).Insert(values); + + /// Rewrites the row at in place with new values (row id preserved). + /// are the columns that actually changed — an unchanged memo/OLE column + /// keeps its stored descriptor (no re-materialise), a changed one has its old LVAL pages reclaimed. + public void Update(RowId id, object?[] values, IReadOnlySet changedColumns) => + new RowInserter(Channel, Definition).Update(id, values, changedColumns); + + /// Rewrites the row treating every column as changed (materialises all long values). + public void Update(RowId id, object?[] values) => + Update(id, values, new HashSet(System.Linq.Enumerable.Range(0, values.Length))); + + /// Moves a row's entry in one index when its key changes (remove old key, add new; row id + /// unchanged). Used by UPDATE of an indexed column. + public void MoveIndexEntry(IndexDef index, object?[] oldValues, object?[] newValues, RowId id) => + new IndexWriter(Channel, Definition).MoveEntry(index, oldValues, newValues, id); + + /// Whether ' key already exists in for a row + /// other than — used to enforce a UNIQUE/PRIMARY index on UPDATE. + public bool HasDuplicateKey(IndexDef index, object?[] values, RowId excludeRow) => + new IndexWriter(Channel, Definition).KeyExists(index, values, (excludeRow.Page << 8) | excludeRow.Row); + + /// Soft-deletes the row at (row bytes kept, slot flagged; TDEF row count + /// decremented). The caller removes its index entries first via . + public void Delete(RowId id) => new RowInserter(Channel, Definition).Delete(id); + + /// Removes a deleted row's entry from one index. + public void RemoveIndexEntry(IndexDef index, object?[] values, RowId id) => + new IndexWriter(Channel, Definition).DeleteEntry(index, values, id); +} diff --git a/src/LibRed/LibRed.Core/Storage/TableCreator.cs b/src/LibRed/LibRed.Core/Storage/TableCreator.cs new file mode 100644 index 00000000..e9ca216f --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/TableCreator.cs @@ -0,0 +1,2578 @@ +using System.Buffers.Binary; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// Creates a new (heap) table in an existing database: allocates and writes its TDEF page, an +/// empty data page, and an owned-pages usage map, then records it in MSysObjects so the catalog +/// finds it. This first cut creates a no-index table and writes the catalog row heap-only (the +/// catalog is read by table scan), enough for LibRed to round-trip create → insert → query. +/// +public sealed class TableCreator(PageChannel channel, JetCatalog catalog, Collation? collation = null) +{ + private readonly PageChannel _channel = channel; + private readonly JetCatalog _catalog = catalog; + private readonly PageAllocator _allocator = new(channel); + + // The database's default collating order, written into new non-numeric columns. Defaults to General + // legacy for callers that don't create columns (most alter operations). + private readonly Collation _collation = collation ?? Collation.GeneralLegacy; + + public void Create( + string name, + IReadOnlyList columns, + IReadOnlyList? primaryKey = null, + IReadOnlyList? relationships = null, + IReadOnlyList? uniqueConstraints = null, + IReadOnlyList<(string Column, string DefaultSql)>? columnDefaults = null, + IReadOnlyList<(string Name, string Expression)>? checkConstraints = null, + string? primaryKeyName = null) + { + relationships ??= []; + uniqueConstraints ??= []; + columnDefaults ??= []; + checkConstraints ??= []; + + // Reject names ACE can't use before writing anything: > 64 chars corrupts the whole file for ACE, and + // the characters . ! ` [ ] make the name unreferenceable in ACE SQL (both verified vs ACE). Applies only + // to caller-supplied names — LibRed's own hidden .rN relationship-index names are generated later. + JetName.Validate(name, "table name"); + foreach (ColumnSpec c in columns) + JetName.Validate(c.Name, "column name"); + // Constraint names go to disk too (PK/unique → index names, FK → MSysRelationships, CHECK → LvProp) and + // carry the same 64-char + forbidden-char limits — verified: a 100-char FK name overruns into adjacent + // data and a 100-char index name breaks ACE's index enumeration. Only validate caller-supplied names. + if (primaryKeyName is not null) JetName.Validate(primaryKeyName, "primary key name"); + foreach (RelationshipSpec r in relationships) JetName.Validate(r.Name, "foreign key name"); + foreach (UniqueIndexSpec u in uniqueConstraints) JetName.Validate(u.Name, "unique constraint name"); + foreach ((string checkName, _) in checkConstraints) JetName.Validate(checkName, "check constraint name"); + + // A table name is unique (case-insensitively) across the database; reject a duplicate rather + // than writing a second MSysObjects row that shadows the existing table. + if (_catalog.FindTable(name) is not null) + throw new InvalidOperationException($"Table '{name}' already exists."); + + // Jet/ACE caps a table at 255 columns. The count/id fields are 2 bytes wide so we could physically + // write more, but Access would refuse to open the table — fail early with a clear message instead. + if (columns.Count > MaxColumnsPerTable) + throw new InvalidOperationException( + $"Table '{name}' has {columns.Count} columns; Jet/ACE tables are limited to {MaxColumnsPerTable}."); + + JetFormatBase format = _channel.Format; + + // Allocate the pages the table needs through the global free-pages map (so Access accounts + // for them). Like Access, a fresh table has NO data page — the first is allocated lazily on + // the first insert — so its usage maps start empty. + int tdefPage = _allocator.Allocate(); + int usageMapPage = _allocator.Allocate(); + + var longValueCols = columns.Select((c, i) => (Column: c, Id: i)) + .Where(x => x.Column.Type is JetDataType.Memo or JetDataType.Ole) + .ToList(); + + // The table's data-block indexes: the primary key (unique), then a unique index per UNIQUE + // constraint, then one non-unique index per foreign key over its child columns — Access enforces + // a relationship through an index on the FK columns. Each carries the relationship (if any) it backs. + var indexPlans = new List<(string Name, IReadOnlyList Columns, bool IsPk, bool IsUnique, RelationshipSpec? Fk)>(); + if (primaryKey is { Count: > 0 }) + // Name the PK index after the CONSTRAINT if one was given (ACE does the same, and the scaffolder + // round-trips it). If unnamed, LibRed picks the stable "PrimaryKey" (the DAO/Access-UI convention) + // — an engine choice, since ACE-via-SQL instead generates a random "Index_" with no fixed + // value to reproduce, and nothing downstream depends on the exact name. + indexPlans.Add((primaryKeyName ?? "PrimaryKey", primaryKey, true, true, null)); + foreach (UniqueIndexSpec unique in uniqueConstraints) + indexPlans.Add((unique.Name, unique.Columns, false, true, null)); + foreach (RelationshipSpec fk in relationships) + indexPlans.Add((fk.Name, fk.Columns.Select(c => c.Column).ToList(), false, false, fk)); + + // Usage-map layout (verified vs ACE): the primary page holds row 0 = table owned, row 1 = table + // free, then one row per index, then two rows (owned + free) per long-value (memo/OLE) column — as + // many *whole* columns as fit (a page holds ~57 inline records). Once the primary page is full, each + // remaining long-value column gets its OWN usage-map page (owned = row 0, free = row 1). All maps + // start empty. This keeps a wide table's per-column maps from overflowing a single page. + // How many 69-byte inline map records (plus their 2-byte directory slot) fit on one page. + int mapsPerPage = (format.PageSize - format.DataRowDirectoryOffset) / (UsageMapRecordLength + 2); + int primaryRecords = 2 + indexPlans.Count; // data owned/free + one per index + int colsOnPrimary = Math.Clamp((mapsPerPage - primaryRecords) / 2, 0, longValueCols.Count); + WriteUsageMaps(format, usageMapPage, mapCount: primaryRecords + colsOnPrimary * 2); + + // §3.3.2 entries: a long-value column's maps are on the primary page (if it fit) or a dedicated page. + var longValueSpecs = new List(longValueCols.Count); + for (int j = 0; j < longValueCols.Count; j++) + { + int colId = longValueCols[j].Id; + if (j < colsOnPrimary) + longValueSpecs.Add(new LongValueColumnSpec( + colId, UsedRow: primaryRecords + 2 * j, FreeRow: primaryRecords + 2 * j + 1, MapPage: usageMapPage)); + else + { + int columnMapPage = _allocator.Allocate(); + WriteUsageMaps(format, columnMapPage, mapCount: 2); // owned = row 0, free = row 1 + longValueSpecs.Add(new LongValueColumnSpec(colId, UsedRow: 0, FreeRow: 1, MapPage: columnMapPage)); + } + } + + // Each index is an empty leaf root, populated as rows are inserted. Its usage map is on the primary + // page right after the two data-page maps (row 2 + i). + var indexes = new List(indexPlans.Count); + for (int i = 0; i < indexPlans.Count; i++) + { + var plan = indexPlans[i]; + int rootPage = _allocator.Allocate(); + WriteEmptyLeafIndexPage(format, rootPage, owner: tdefPage); + // Record the root in the index's own pages usage map — Access does this at CREATE, before any + // row exists (verified: a freshly created empty index has exactly its root bit set). As the tree + // grows, IndexWriter adds each page it allocates, so the map covers the whole B-tree. + new UsageMapWriter(_channel).SetBit(2 + i, usageMapPage, rootPage, set: true); + indexes.Add(new IndexSpec(plan.Name, plan.Columns, plan.IsPk, plan.IsUnique, + rootPage, UsageMapRow: 2 + i, UsageMapPage: usageMapPage)); + } + + // Build the child's logical index-info blocks. A plain index (PK) maps 1:1 to its data block; + // a foreign key's data block instead carries the *outgoing* relationship block (§3.6), linked + // to an *incoming* block. The two ends cross-reference by index_num. For a cross-table FK the + // incoming block is added to the parent's TDEF; for a self-reference it lives in this same TDEF. + var childLogical = new List(indexPlans.Count); + var incoming = new List(); + var parentAdds = new Dictionary(); + // Incoming blocks that this table hosts for its own self-references are numbered after the + // data-block logical indexes (verified vs ACE: a self-ref adds one such block at num = data count). + int selfIncomingNum = indexPlans.Count; + for (int i = 0; i < indexPlans.Count; i++) + { + var plan = indexPlans[i]; + if (plan.Fk is null) + { + childLogical.Add(new TdefBuilder.LogicalIndexSpec( + Number: i, DataOrdinal: i, FkType: 0, FkNumber: 0xFFFFFFFF, FkTablePage: 0, + UpdateAction: IndexBlockFormat.PlainAction, DeleteAction: IndexBlockFormat.PlainAction, + Type: plan.IsPk ? IndexBlockFormat.TypePrimary : IndexBlockFormat.TypeSecondary, Name: plan.Name)); + continue; + } + + RelationshipSpec fk = plan.Fk; + if (fk.UpdateSetNull) throw UpdateSetNullNotImplemented(); + byte upd = fk.CascadeUpdate ? CascadeAction : NoCascadeAction; + byte del = fk.CascadeDelete ? CascadeAction : fk.DeleteSetNull ? SetNullAction : NoCascadeAction; + byte outgoingType = fk.NoIndex ? FkTypeOutgoingNoIndex : FkTypeOutgoing; + + // A self-referencing FK: the table is not in the catalog yet (we are creating it), so resolve + // the referenced index within the plans we are building and host both ends here. + if (string.Equals(fk.ReferencedTable, name, StringComparison.OrdinalIgnoreCase)) + { + int refOrdinal = SelfReferencedOrdinal(indexPlans, fk); + int inNum = selfIncomingNum++; + // Outgoing block (this table's child side) — NO INDEX flags it 0x03 instead of 0x02. + childLogical.Add(new TdefBuilder.LogicalIndexSpec( + Number: i, DataOrdinal: i, FkType: outgoingType, FkNumber: (uint)inNum, + FkTablePage: tdefPage, UpdateAction: upd, DeleteAction: del, + Type: IndexBlockFormat.TypeForeign, Name: fk.Name)); + // Incoming block (this table's parent side), hidden ".r" name unique within the table. + childLogical.Add(new TdefBuilder.LogicalIndexSpec( + Number: inNum, DataOrdinal: refOrdinal, FkType: FkTypeIncoming, FkNumber: (uint)i, + FkTablePage: tdefPage, UpdateAction: upd, DeleteAction: del, + Type: IndexBlockFormat.TypeForeign, Name: NextHiddenRelationshipName(childLogical.Select(l => l.Name).ToList()))); + continue; + } + + (int parentPage, int refOrd, int parentLogicalCount) = ResolveParent(fk, tdefPage); + int parentNum = parentLogicalCount + parentAdds.GetValueOrDefault(parentPage); + parentAdds[parentPage] = parentAdds.GetValueOrDefault(parentPage) + 1; + + childLogical.Add(new TdefBuilder.LogicalIndexSpec( + Number: i, DataOrdinal: i, FkType: outgoingType, + FkNumber: (uint)parentNum, FkTablePage: parentPage, UpdateAction: upd, DeleteAction: del, + Type: IndexBlockFormat.TypeForeign, Name: fk.Name)); + incoming.Add(new IncomingRelationship(parentPage, parentNum, refOrd, + ChildBlockNumber: (uint)i, ChildPage: tdefPage, upd, del)); + } + + // Access stores logical blocks sorted by name (with their names in the same order). + childLogical.Sort((a, b) => string.CompareOrdinal(a.Name, b.Name)); + + // Build the definition and point it at the usage maps: owned-pages = row 0, free-pages = + // row 1, both on the usage-map page. + byte[] tdef = TdefBuilder.Build(format, TableType.User, columns, indexes, longValueSpecs, childLogical, _collation).Page; + tdef[format.TdefOwnedPagesOffset] = 0; // owned map record row + WriteInt24(tdef, format.TdefOwnedPagesOffset + 1, usageMapPage); + tdef[format.TdefFreePagesOffset] = 1; // free map record row + WriteInt24(tdef, format.TdefFreePagesOffset + 1, usageMapPage); + // A wide table's definition can exceed one page; write it split across continuation pages if needed. + int defEnd = BinaryPrimitives.ReadInt32LittleEndian(tdef.AsSpan(format.TdefLengthOffset, 4)); + WriteDefinition(tdefPage, tdef[..defEnd], []); + + // Per-column extended properties, in column order with DefaultValue before Required (matching ACE): + // a DEFAULT is a memo property; a NOT NULL column carries a boolean Required property (Access omits + // it for a nullable column, and — verified — for an AutoNumber, which is implicitly required). + var columnProps = new List(); + foreach (ColumnSpec col in columns) + { + var def = columnDefaults.FirstOrDefault(d => string.Equals(d.Column, col.Name, StringComparison.OrdinalIgnoreCase)); + if (def.DefaultSql is not null) + columnProps.Add(new PropertyBlob.Property(col.Name, PropertyBlob.DefaultValueProperty, def.DefaultSql)); + if (!col.IsNullable && !col.IsAutoNumber) + columnProps.Add(PropertyBlob.Bool(col.Name, PropertyBlob.RequiredProperty, true)); + } + + AddCatalogRow(name, tdefPage, columnProps, checkConstraints); + AddPermissionRows(tdefPage); + foreach (RelationshipSpec fk in relationships) + AddRelationshipRows(name, fk); + foreach (IncomingRelationship inc in incoming) + AddIncomingRelationshipBlock(inc); + } + + // Index-info block field values (§3.6), verified against ACE-created relationships. + // (PlainAction and the index-type bytes are shared with the reader via IndexBlockFormat.) + private const byte NoCascadeAction = 0x00; // relationship without ON UPDATE/DELETE CASCADE + private const byte CascadeAction = 0x01; // relationship with cascade + private const byte SetNullAction = 0x02; // ON DELETE SET NULL (verified vs ACE, index-info block +0x16) + + /// ON UPDATE SET NULL pathway: the docs list it, but the ACE OLE DB provider rejects it via SQL, + /// so its on-disk storage (the grbit flag + the index-info +0x15 action byte) is unverified. Rather than + /// guess the bytes, fail loudly until a UI/DAO-created sample can be probed. + private static NotImplementedException UpdateSetNullNotImplemented() => new( + "ON UPDATE SET NULL is not implemented: its Jet storage bytes are unverified (the ACE OLE DB provider " + + "rejects the DDL, so they could not be probed). Only ON UPDATE {NO ACTION | CASCADE} are supported."); + private const byte FkTypeIncoming = 0x01; // this table is the parent/referenced end + private const byte FkTypeOutgoing = 0x02; // this table is the child/referencing end (indexed) + private const byte FkTypeOutgoingNoIndex = 0x03; // child/referencing end declared FOREIGN KEY NO INDEX + + /// An incoming-relationship logical block to add to a parent table's TDEF. + private readonly record struct IncomingRelationship( + int ParentPage, int Number, int ReferencedOrdinal, uint ChildBlockNumber, int ChildPage, + byte UpdateAction, byte DeleteAction); + + /// The data-block ordinal of the index over a self-reference's referenced columns, found + /// among the indexes being created for this table (the table is not in the catalog yet). + private static int SelfReferencedOrdinal( + List<(string Name, IReadOnlyList Columns, bool IsPk, bool IsUnique, RelationshipSpec? Fk)> indexPlans, + RelationshipSpec fk) + { + var refColumns = fk.Columns.Select(c => c.ReferencedColumn).ToList(); + for (int j = 0; j < indexPlans.Count; j++) + if (indexPlans[j].Columns.SequenceEqual(refColumns, StringComparer.OrdinalIgnoreCase)) + return j; + throw new InvalidOperationException( + $"Self-referencing foreign key '{fk.Name}' references ({string.Join(", ", refColumns)}), which is not a key or index of '{fk.ReferencedTable}'."); + } + + /// + /// Resolves a cross-table relationship's parent: its TDEF page, the data-block ordinal of the parent + /// index over the referenced columns (normally the PK), and the parent's current logical-index count + /// (used to number the incoming block we will add). Self-references are handled by the caller before + /// this is reached (the table is not yet in the catalog). + /// + private (int Page, int ReferencedOrdinal, int LogicalCount) ResolveParent(RelationshipSpec fk, int childPage) + { + TableDef parent = _catalog.FindTable(fk.ReferencedTable) + ?? throw new InvalidOperationException($"Referenced table '{fk.ReferencedTable}' was not found."); + if (parent.DefinitionPage == childPage) + throw new InvalidOperationException($"Self-referencing foreign key '{fk.Name}' should have been handled inline."); + + var ptdef = new Pages.TableDefinitionPage(); + ptdef.Read(_channel, parent.DefinitionPage); + var refColumns = fk.Columns.Select(c => c.ReferencedColumn).ToList(); + IndexDef refIndex = ptdef.Indexes.FirstOrDefault(ix => + ix.Columns.Select(c => c.Column.Name).SequenceEqual(refColumns, StringComparer.OrdinalIgnoreCase)) + ?? throw new InvalidOperationException( + $"Referenced table '{fk.ReferencedTable}' has no index over ({string.Join(", ", refColumns)})."); + return (parent.DefinitionPage, refIndex.RealIndexOrdinal, ptdef.RealIndexCount); + } + + /// + /// Writes the MSysRelationships rows for one relationship — one row per column pair, with + /// ccolumn = the pair count, icolumn = the 0-based pair index, and grbit + /// encoding enforce/cascade (verified against Access: an enforced no-cascade FK stores grbit 0). + /// + private void AddRelationshipRows(string childTable, RelationshipSpec fk) + { + TableDef msys = _catalog.FindTable("MSysRelationships") + ?? throw new InvalidOperationException("MSysRelationships catalog table was not found."); + + int grbit = 0; + if (!fk.IsEnforced) grbit |= RelationshipFlags.DontEnforce; + if (fk.CascadeUpdate) grbit |= RelationshipFlags.UpdateCascade; + if (fk.CascadeDelete) grbit |= RelationshipFlags.DeleteCascade; + if (fk.DeleteSetNull) grbit |= RelationshipFlags.DeleteSetNull; + + for (int i = 0; i < fk.Columns.Count; i++) + { + var (column, referencedColumn) = fk.Columns[i]; + var values = new object?[msys.Columns.Count]; + SetByName(msys, values, "szRelationship", fk.Name); + SetByName(msys, values, "szObject", childTable); + SetByName(msys, values, "szColumn", column); + SetByName(msys, values, "szReferencedObject", fk.ReferencedTable); + SetByName(msys, values, "szReferencedColumn", referencedColumn); + SetByName(msys, values, "ccolumn", fk.Columns.Count); + SetByName(msys, values, "icolumn", i); + SetByName(msys, values, "grbit", grbit); + new RowInserter(_channel, msys).Insert(values, updateIndexes: true); + } + } + + + /// + /// Adds an index to an existing (empty) table for CREATE INDEX. Surgically inserts a statistics + /// block, an index-data block and a logical index-info block into the TDEF (preserving the existing + /// columns, indexes, relationship linkage and long-value entries byte-for-byte), grows the usage-map + /// page by one row and writes an empty B-tree root. Single-page, empty-table only. + /// + public void AddIndex(string tableName, string indexName, IReadOnlyList<(string Column, bool Descending)> columns, + bool isUnique, bool isPrimary, bool disallowNull, bool ignoreNulls) + { + JetName.Validate(indexName, "index name"); + TableDef table = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' was not found."); + var slots = ResolveSlots(table, columns.Select(c => (c.Column, Ascending: !c.Descending))); + InsertIndex(table, indexName, slots, + unique: isUnique || isPrimary, required: isPrimary || disallowNull, ignoreNulls, + (num, ord) => BuildPlainInfoBlock(num, ord, isPrimary)); + } + + /// Resolves index column names to (columnId, ascending) slots against a table. + private static IReadOnlyList<(int Id, bool Ascending)> ResolveSlots( + TableDef table, IEnumerable<(string Column, bool Ascending)> columns) + { + var byName = table.Columns.ToDictionary(c => c.Name, c => c.ColumnId, StringComparer.OrdinalIgnoreCase); + return columns.Select(c => byName.TryGetValue(c.Column, out int id) ? (Id: id, c.Ascending) + : throw new InvalidOperationException($"Column '{c.Column}' does not exist in '{table.Name}'.")).ToList(); + } + + /// Surgically inserts one data index and its logical info block into an existing (empty) + /// table's TDEF, name-sorted. gets (block number, data-block ordinal) and + /// returns the 28-byte info block — a plain index or an outgoing-FK block. Returns the new block number. + private int InsertIndex(TableDef table, string indexName, IReadOnlyList<(int Id, bool Ascending)> slots, + bool unique, bool required, bool ignoreNulls, Func buildInfo) + { + JetFormatBase format = _channel.Format; + + // Read the whole definition (stitching any existing continuation pages) so the surgical insert + // works in absolute coordinates; the old continuation pages are reused when we write it back. + (LibRed.IO.PageBuffer buf, IReadOnlyList existingContinuations) = ReadDefinition(table.DefinitionPage); + int existingRowCount = buf.ReadInt32(format.TdefRowCountOffset); + + // A unique index over rows that already exist has to be rejected if those rows aren't unique — ACE + // refuses the DDL too. Done *here*, before a single byte of the TDEF moves, rather than during the + // back-fill: this path is not transactional, so a failure discovered mid-back-fill would leave the + // index committed to the TDEF and half-populated. Scanning first means a rejected CREATE INDEX + // leaves the file exactly as it was. + if (unique && existingRowCount != 0) + EnsureNoDuplicateKeys(table, indexName, slots); + + int dataCount = buf.ReadInt32(format.TdefIndexCountOffset); + int logicalCount = buf.ReadInt32(format.TdefRealIndexCountOffset); + int colCount = buf.ReadUInt16(format.TdefColumnCountOffset); + + // Walk the TDEF regions: stats -> column descriptors -> column names -> data blocks -> info blocks. + int afterStats = format.TdefRealIndexBlockOffset + dataCount * format.RealIndexEntrySize; + int pos = afterStats + colCount * format.ColumnDescriptorSize; + for (int i = 0; i < colCount; i++) pos += 2 + buf.ReadUInt16(pos); + int afterColumns = pos; // start of the data blocks + int afterDataBlocks = afterColumns + dataCount * IndexBlockFormat.DataBlockSize; + int infoStart = afterDataBlocks; + + // Existing logical blocks and names, plus the max index_num, so the new block gets a fresh number. + int namePos = infoStart + logicalCount * IndexBlockFormat.InfoBlockSize; + var blocks = new List(logicalCount + 1); + int maxNum = -1; + for (int i = 0; i < logicalCount; i++) + { + byte[] block = buf.Slice(infoStart + i * IndexBlockFormat.InfoBlockSize, IndexBlockFormat.InfoBlockSize).ToArray(); + maxNum = Math.Max(maxNum, System.Buffers.Binary.BinaryPrimitives.ReadInt32LittleEndian(block.AsSpan(4, 4))); + blocks.Add(block); + } + var names = new List(logicalCount + 1); + var nameBytes = new List(logicalCount + 1); + for (int i = 0; i < logicalCount; i++) + { + int len = buf.ReadUInt16(namePos); + nameBytes.Add(buf.Slice(namePos, 2 + len).ToArray()); + names.Add(System.Text.Encoding.Unicode.GetString(buf.Slice(namePos + 2, len))); + namePos += 2 + len; + } + + int defEnd = buf.ReadInt32(format.TdefLengthOffset); + byte[] lvalRegion = buf.Slice(namePos, defEnd - namePos).ToArray(); // §3.3.2 list + 0xFFFF terminator + int lvalCount = (lvalRegion.Length - 2) / 10; // 10 bytes per entry, then 0xFFFF + + // Allocate the new index's root (empty leaf) and its usage-map row (appended after existing rows). + int rootPage = _allocator.Allocate(); + WriteEmptyLeafIndexPage(format, rootPage, owner: table.DefinitionPage); + int usageMapPage = ReadInt24(buf, format.TdefOwnedPagesOffset + 1); + int newIndexUsageRow = 2 + lvalCount * 2 + dataCount; + // Append the new index's (empty) usage-map row, preserving every existing record. The data maps are + // empty on an empty table but the *existing indexes'* maps already carry their root bits (set at + // creation), so we must not rewrite the page from scratch even when the table has no rows. + AppendEmptyUsageMapRow(format, usageMapPage, newIndexUsageRow); + + // Record this index's own root, as Access does at CREATE INDEX (the empty root is the index's sole + // page until it splits, after which IndexWriter adds each page it allocates). + new UsageMapWriter(_channel).SetBit(newIndexUsageRow, usageMapPage, rootPage, set: true); + + // Assemble the new definition: header + existing stats, a new stats block, columns + names + + // existing data blocks, the new data block, then the logical blocks (new one inserted, name-sorted) + // and their names, and finally the unchanged long-value region. + byte[] newData = BuildIndexDataBlock(slots, rootPage, newIndexUsageRow, usageMapPage, unique, required, ignoreNulls); + byte[] newInfo = buildInfo(maxNum + 1, dataCount); + + int k = names.Count(n => string.CompareOrdinal(n, indexName) < 0); // name-sorted insert position + blocks.Insert(k, newInfo); + nameBytes.Insert(k, EncodeName(indexName)); + + int newDefEnd = infoStart + IndexBlockFormat.DataBlockSize // one new data block shifts info start + + blocks.Count * IndexBlockFormat.InfoBlockSize + nameBytes.Sum(n => n.Length) + lvalRegion.Length + + format.RealIndexEntrySize; // one new stats block at the front + + // Build the full definition buffer (may exceed one page — split across continuation pages below). + var def = new byte[newDefEnd]; + var src = buf.Span; + int w = 0; + void Append(ReadOnlySpan s) { s.CopyTo(def.AsSpan(w)); w += s.Length; } + + Append(src[..afterStats]); // header + existing stats blocks + Append(new byte[format.RealIndexEntrySize]); // new (zero) stats block + Append(src[afterStats..afterDataBlocks]); // columns + names + existing data blocks + Append(newData); // new index-data block + foreach (byte[] b in blocks) Append(b); // logical blocks (new inserted, sorted) + foreach (byte[] n in nameBytes) Append(n); // their names, same order + Append(lvalRegion); // §3.3.2 list + terminator (unchanged) + + // Bump the two index counts and the definition length in the header. + System.Buffers.Binary.BinaryPrimitives.WriteInt32LittleEndian(def.AsSpan(format.TdefIndexCountOffset, 4), dataCount + 1); + System.Buffers.Binary.BinaryPrimitives.WriteInt32LittleEndian(def.AsSpan(format.TdefRealIndexCountOffset, 4), logicalCount + 1); + System.Buffers.Binary.BinaryPrimitives.WriteInt32LittleEndian(def.AsSpan(format.TdefLengthOffset, 4), newDefEnd); + + WriteDefinition(table.DefinitionPage, def, existingContinuations); + _catalog.Invalidate(); + + // Back-fill the new (empty) index B-tree with an entry per existing row, so the index is complete. + if (existingRowCount != 0) + BackfillIndex(table.Name, indexName, ignoreNulls, validateUnique: false); + return maxNum + 1; + } + + /// + /// Throws if the table's existing rows already hold a duplicate key for a would-be unique index. Purely a + /// read: it encodes each row's key and looks for a repeat, touching nothing on disk, so it is safe to call + /// before the index exists. Rows with a null in any key column are exempt — Jet's uniqueness is over the + /// non-null keys only, so several rows may be null (verified vs ACE; see the constraints page). That skip + /// is unconditional: a WITH IGNORE NULL index leaves null-keyed rows out of the B-tree altogether, so + /// either way they cannot collide. + /// + /// + /// Comparison is on the encoded key, not the raw values, which is deliberate: the encoding is what the + /// B-tree stores and it is collation-lossy, so "ABC" and "abc" share a key. That is precisely Access's + /// uniqueness domain, and it keeps this agreeing with the insert- and update-time checks, which compare + /// the same way via . + /// + private void EnsureNoDuplicateKeys( + TableDef table, string indexName, IReadOnlyList<(int Id, bool Ascending)> slots) + { + var keyColumns = slots + .Select(s => (Column: table.Columns.First(c => c.ColumnId == s.Id), s.Ascending)) + .ToArray(); + + var seen = new HashSet(); + foreach (object?[] values in new Table(_channel, table).Rows()) + { + if (keyColumns.Any(k => values[k.Column.Index] is null)) continue; + if (!seen.Add(Convert.ToHexString(IndexKeyEncoder.Encode(keyColumns, values)))) + throw new InvalidOperationException( + $"Cannot create unique index '{indexName}' on '{table.Name}': duplicate key values exist."); + } + } + + /// Populates a freshly added index over a table's existing rows: scans every live row and + /// inserts its key (IndexWriter handles B-tree growth). Rows with a null in an IGNORE NULL index's key + /// are skipped, matching the per-insert path. + private void BackfillIndex(string tableName, string indexName, bool ignoreNulls, bool validateUnique) + { + TableDef table = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' was not found after adding the index."); + IndexDef index = table.Indexes.First(ix => string.Equals(ix.Name, indexName, StringComparison.OrdinalIgnoreCase)); + var keyColumnIds = index.Columns.Select(c => c.Column.Index).ToArray(); + var writer = new IndexWriter(_channel, table); + + foreach ((RowId id, object?[] values) in new Table(_channel, table).Rows().WithIds()) + { + bool hasNullKey = keyColumnIds.Any(i => values[i] is null); + if (ignoreNulls && hasNullKey) continue; + if (validateUnique && index.IsUnique && !hasNullKey && writer.KeyExists(index, values)) + throw new InvalidOperationException( + $"Cannot create unique index '{indexName}' on '{tableName}': duplicate key values exist."); + writer.AddEntry(index, values, id); + } + } + + /// Appends one empty inline usage-map record (row ) to an existing + /// usage-map page, preserving every existing record. The new index tracks no pages here (IndexWriter + /// navigates the B-tree structurally), so an empty bitmap is correct. + private void AppendEmptyUsageMapRow(JetFormatBase format, int pageNumber, int newRow) + { + const int MapLength = 1 + 4 + 64; // inline type + start page + 64-byte bitmap (matches WriteUsageMaps) + byte[] page = _channel.ReadPage(pageNumber).Span.ToArray(); + int rowCount = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2)); + + // Reuse a row slot left orphaned by a prior index drop — DropConstraint/DropIndex leave the dropped + // index's usage-map row in place (matching ACE), and a re-added index takes the same slot number. Clear + // its bitmap in place rather than appending a duplicate. (Needed when a parent-side ALTER COLUMN rewrite + // drops and re-adds a child's foreign key.) + if (newRow < rowCount) + { + int existing = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + newRow * 2, 2)); + Array.Clear(page, existing, MapLength); + _channel.WritePage(pageNumber, page); + return; + } + if (rowCount != newRow) + throw new InvalidOperationException( + $"Usage-map page has {rowCount} rows; expected {newRow} before appending the new index's map."); + + int minOffset = format.PageSize; + for (int r = 0; r < rowCount; r++) + minOffset = Math.Min(minOffset, BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + r * 2, 2))); + + int newOffset = minOffset - MapLength; + Array.Clear(page, newOffset, MapLength); // inline type 0x00, start page 0, zero bitmap + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + newRow * 2, 2), (ushort)newOffset); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2), (ushort)(rowCount + 1)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), + (ushort)(newOffset - format.DataRowDirectoryOffset - (rowCount + 1) * 2)); + _channel.WritePage(pageNumber, page); + } + + /// + /// Adds a foreign key to an existing (empty) child table: a backing non-unique index over the child + /// columns carrying an outgoing-relationship block, an incoming block on the parent's TDEF, and the + /// MSysRelationships rows. The child index and parent block are written the same way inline-FK creation + /// does (verified byte-faithful vs ACE). A self-reference hosts both ends in the one table; FOREIGN KEY + /// NO INDEX is not yet handled. + /// + public void AddForeignKey(string childTable, RelationshipSpec fk) + { + JetName.Validate(fk.Name, "foreign key name"); + TableDef child = _catalog.FindTable(childTable) + ?? throw new InvalidOperationException($"Table '{childTable}' was not found."); + if (fk.NoIndex) + throw new NotSupportedException("ALTER TABLE ADD FOREIGN KEY … NO INDEX is not supported yet."); + if (fk.UpdateSetNull) throw UpdateSetNullNotImplemented(); + + byte upd = fk.CascadeUpdate ? CascadeAction : NoCascadeAction; + byte del = fk.CascadeDelete ? CascadeAction : fk.DeleteSetNull ? SetNullAction : NoCascadeAction; + var slots = ResolveSlots(child, fk.Columns.Select(c => (c.Column, Ascending: true))); + + // A self-reference (child == parent) hosts both ends in the same TDEF: the outgoing block links to + // an incoming block whose number is one past the outgoing block's (mirrors inline self-ref creation). + if (string.Equals(fk.ReferencedTable, childTable, StringComparison.OrdinalIgnoreCase)) + { + int selfRefOrdinal = ReferencedOrdinalIn(child, fk); + int outNum = InsertIndex(child, fk.Name, slots, + unique: false, required: false, ignoreNulls: false, + (num, ord) => BuildOutgoingInfoBlock(num, ord, FkTypeOutgoing, num + 1, child.DefinitionPage, upd, del)); + AddIncomingRelationshipBlock(new IncomingRelationship( + child.DefinitionPage, outNum + 1, selfRefOrdinal, (uint)outNum, child.DefinitionPage, upd, del)); + AddRelationshipRows(childTable, fk); + _catalog.Invalidate(); + return; + } + + (int parentPage, int refOrdinal, int parentLogicalCount) = ResolveParent(fk, child.DefinitionPage); + int parentNum = parentLogicalCount; // the incoming block gets the next free logical number on the parent + int childBlockNum = InsertIndex(child, fk.Name, slots, + unique: false, required: false, ignoreNulls: false, + (num, ord) => BuildOutgoingInfoBlock(num, ord, FkTypeOutgoing, parentNum, parentPage, upd, del)); + + AddIncomingRelationshipBlock(new IncomingRelationship( + parentPage, parentNum, refOrdinal, (uint)childBlockNum, child.DefinitionPage, upd, del)); + AddRelationshipRows(childTable, fk); + _catalog.Invalidate(); + } + + /// + /// Drops a named FOREIGN KEY constraint, byte-faithfully with ACE: removes the child's backing index + /// (its stats + index-data + outgoing info blocks + name) and the parent's incoming info block from the + /// two TDEFs, frees the index's B-tree root page back to the global free map, and soft-deletes the + /// relationship's MSysRelationships rows (the usage-map page is left untouched — ACE leaves the + /// orphan map row). A self-reference hosts both ends in one TDEF. Returns false if no such relationship + /// exists on . + /// + public bool DropConstraint(string childTable, string name) + { + ForeignKey? rel = _catalog.Relationships.FirstOrDefault(r => + string.Equals(r.Name, name, StringComparison.OrdinalIgnoreCase) && + string.Equals(r.Table, childTable, StringComparison.OrdinalIgnoreCase)); + if (rel is null) return false; + + TableDef child = _catalog.FindTable(childTable) + ?? throw new InvalidOperationException($"Table '{childTable}' was not found."); + IndexDef? fkIndex = child.Indexes.FirstOrDefault(i => string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase)); + bool selfRef = string.Equals(rel.ReferencedTable, childTable, StringComparison.OrdinalIgnoreCase); + + if (fkIndex is not null) + { + TdefParts childParts = ParseTdef(child.DefinitionPage); + int outgoing = childParts.Logical.FindIndex(b => NameOf(b.Name).Equals(name, StringComparison.OrdinalIgnoreCase)); + int childBlockNum = BinaryPrimitives.ReadInt32LittleEndian(childParts.Logical[outgoing].Info.AsSpan(0x04, 4)); + + // Remove the FK index (data ordinal) + its outgoing info block from the child, plus — for a + // self-reference — the incoming block, which also lives here. + RemoveTdefBlocks(childParts, removeDataOrdinal: fkIndex.RealIndexOrdinal, removeLogical: b => + NameOf(b.Name).Equals(name, StringComparison.OrdinalIgnoreCase) || + (selfRef && IsIncomingBlockFor(b.Info, childBlockNum, child.DefinitionPage))); + WriteTdef(child.DefinitionPage, childParts); + + if (!selfRef) + { + TableDef parent = _catalog.FindTable(rel.ReferencedTable) + ?? throw new InvalidOperationException($"Table '{rel.ReferencedTable}' was not found."); + TdefParts parentParts = ParseTdef(parent.DefinitionPage); + RemoveTdefBlocks(parentParts, removeDataOrdinal: null, removeLogical: b => + IsIncomingBlockFor(b.Info, childBlockNum, child.DefinitionPage)); + WriteTdef(parent.DefinitionPage, parentParts); + } + + new PageAllocator(_channel).Free(fkIndex.RootPage); + } + + SoftDeleteRelationshipRows(name); + _catalog.Invalidate(); + return true; + } + + /// + /// Drops a table — DROP TABLE table. Removes the object's MSysObjects row and its + /// MSysACEs permission rows (soft-delete, as ACE does), and frees the table's pages back to the + /// global free map so a later create reuses them (verified vs ACE): its index B-tree roots, its data + /// pages (owned-pages usage map), and the TDEF page. Returns false if the table doesn't exist. + /// + /// A table that is the child (referencing) side of relationships can be dropped directly: ACE + /// lets you drop the referencing table while the parent stays, so each such relationship is removed first + /// (via ). But a table still referenced as a parent by a surviving + /// child cannot be dropped — drop the referencing table (or the relationship) first. EF drops FKs before + /// tables, but database-first scaffolding cleanup drops child tables directly, which must work. + /// + /// Multi-page TDEFs, multi-level index trees (non-root pages), memo/OLE LVAL pages and dedicated + /// usage-map pages are not yet freed (they leak until Compact); the catalog removal is complete regardless, + /// so the table disappears and Access opens the file. + public bool DropTable(string tableName) + { + TableDef? table = _catalog.FindTable(tableName); + if (table is null) return false; + + // Remove the relationships this table owns as the child (referencing) side. Materialize first — + // DropConstraint rewrites TDEFs and invalidates the catalog on each call. + foreach (ForeignKey rel in _catalog.Relationships + .Where(r => string.Equals(r.Table, tableName, StringComparison.OrdinalIgnoreCase)) + .ToList()) + DropConstraint(tableName, rel.Name); + + // A table still referenced by a surviving child (as the parent) cannot be dropped. + if (_catalog.Relationships.Any(r => + string.Equals(r.ReferencedTable, tableName, StringComparison.OrdinalIgnoreCase))) + throw new InvalidOperationException( + $"Cannot drop table '{tableName}': it is referenced by a relationship — drop the referencing table first."); + + // Re-fetch: DropConstraint above rewrote this table's TDEF (removed FK indexes) and invalidated the catalog. + table = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' was not found."); + + int tdefPage = table.DefinitionPage; + var allocator = new PageAllocator(_channel); + foreach (IndexDef index in table.Indexes.Where(i => i.RootPage > 0).GroupBy(i => i.RootPage).Select(g => g.First())) + allocator.Free(index.RootPage); + foreach (int dataPage in new UsageMap(_channel, table).DataPages()) + allocator.Free(dataPage); + allocator.Free(tdefPage); + + DeleteCatalogRows("MSysObjects", "Id", tdefPage); + DeleteCatalogRows("MSysACEs", "ObjectId", tdefPage); + _catalog.Invalidate(); + return true; + } + + /// + /// Drops a view or stored procedure — DROP VIEW name / DROP PROCEDURE name. Both are a + /// type-5 MSysObjects object; ACE's two statements are interchangeable (verified: DROP VIEW works + /// on a procedure and vice versa), so this handles either. The inverse of ViewCreator: deletes the + /// object's MSysObjects row, its MSysQueries rows, and its two MSysACEs permission rows (index entries + /// removed, not just soft-deleted). No pages to free (a query owns none — its MSysQueries rows live on the + /// shared MSysQueries pages). Returns false if no such query object exists. + /// + public bool DropQueryObject(string name) + { + TableDef mo = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIdx = (mo.FindColumn("Id") ?? throw new InvalidOperationException("MSysObjects is missing 'Id'.")).Index; + int nameIdx = (mo.FindColumn("Name") ?? throw new InvalidOperationException("MSysObjects is missing 'Name'.")).Index; + int typeIdx = (mo.FindColumn("Type") ?? throw new InvalidOperationException("MSysObjects is missing 'Type'.")).Index; + + int? objId = null; + foreach (object?[] values in new Table(_channel, mo).Rows()) + if (string.Equals(values[nameIdx] as string, name, StringComparison.OrdinalIgnoreCase) + && Convert.ToInt16(values[typeIdx] ?? (short)0) == StoredQueryFormat.ObjectTypeQuery) + { objId = Convert.ToInt32(values[idIdx]); break; } + if (objId is null) return false; + + DeleteCatalogRows("MSysObjects", "Id", objId.Value); + DeleteCatalogRows("MSysQueries", "ObjectId", objId.Value); + DeleteCatalogRows("MSysACEs", "ObjectId", objId.Value); + _catalog.Invalidate(); + return true; + } + + + /// Deletes every row of whose equals + /// (the object id) — used to remove a dropped table's MSysObjects and MSysACEs + /// rows. A full delete: its **index entries are removed** (not just the slot soft-deleted) so, e.g., the + /// MSysObjects ParentIdName unique index doesn't retain a stale entry that would then reject + /// re-creating a same-named table. + /// + /// Renames a table — ALTER TABLE … RENAME TO. Measured against ACE (see RenameFanOutProbeTest): + /// only two things move — the object's MSysObjects.Name, and the by-name table references in + /// MSysRelationships. Everything else is deliberately left alone, matching ACE exactly: + /// + /// indexes (including the PK) keep their own names and need no fixup — they reference the table by id; + /// the relationship keeps its own name and its enforcement; + /// stored queries/views are left dangling — ACE does not rewrite MSysQueries (Name + /// AutoCorrect is an Access application feature), and "helpfully" fixing them would diverge from Jet. + /// + /// Returns false if no such table exists; throws if the new name is already taken. + /// + public bool RenameTable(string oldName, string newName) + { + TableDef? table = _catalog.FindTable(oldName); + if (table is null) return false; + // The table being renamed is not a collision with itself: renaming to the same name is a no-op that ACE + // allows (and EF's schema "move" degrades to exactly that on a schema-less engine), as is a case-only + // change. Both verified — RenameFanOutProbeTest. + if (ObjectNameExists(newName, exceptObjectId: table.DefinitionPage)) + throw new InvalidOperationException( + $"ALTER TABLE '{oldName}' RENAME TO '{newName}': a table or query named '{newName}' already exists."); + + RenameCatalogObject(table.DefinitionPage, newName); + RepointRelationshipTables(oldName, newName); + return true; + } + + /// Sets the Name of the MSysObjects row whose Id is this table's TDEF page. + private void RenameCatalogObject(int tdefPage, string newName) + { + TableDef def = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIndex = ColumnIndexOf(def, "Id"); + int nameIndex = ColumnIndexOf(def, "Name"); + var table = new Table(_channel, def); + + foreach ((RowId id, object?[] values) in table.Rows().WithIds() + .Where(r => r.Values[idIndex] is not null && Convert.ToInt32(r.Values[idIndex]) == tdefPage) + .ToList()) + { + SetCatalogValues(table, def, id, values, (nameIndex, newName)); + } + } + + /// Repoints every relationship that names on either side. Both the + /// child (szObject) and parent (szReferencedObject) are stored by name, and a self-reference + /// names the table twice — hence updating both columns in one pass over each row. + private void RepointRelationshipTables(string oldName, string newName) + { + TableDef? def = _catalog.FindTable("MSysRelationships"); + if (def is null) return; // a database with no relationships has no catalog table to fix up + + int childIndex = ColumnIndexOf(def, "szObject"); + int parentIndex = ColumnIndexOf(def, "szReferencedObject"); + var table = new Table(_channel, def); + + foreach ((RowId id, object?[] values) in table.Rows().WithIds().ToList()) + { + var updates = new List<(int Column, object? Value)>(2); + if (NameMatches(values[childIndex], oldName)) updates.Add((childIndex, newName)); + if (NameMatches(values[parentIndex], oldName)) updates.Add((parentIndex, newName)); + if (updates.Count > 0) + SetCatalogValues(table, def, id, values, updates.ToArray()); + } + } + + /// + /// Renames a column — ALTER TABLE … RENAME COLUMN … TO. Measured against ACE (see + /// RenameFanOutProbeTest): the name in the TDEF's column region moves, MSysRelationships' + /// by-name column references are repointed, and the column's LvProp property block is re-owned so it + /// keeps its DEFAULT. Nothing else moves — indexes reference columns by id, so they keep their own + /// names and need no fixup, and stored queries are left dangling exactly as ACE leaves them. + /// Returns false if no such column exists; throws if the new name is already used on the table. + /// + public bool RenameColumn(string tableName, string oldName, string newName) + { + TableDef table = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' was not found."); + ColumnDef? col = table.Columns.FirstOrDefault(c => string.Equals(c.Name, oldName, StringComparison.OrdinalIgnoreCase)); + if (col is null) return false; + if (table.Columns.Any(c => string.Equals(c.Name, newName, StringComparison.OrdinalIgnoreCase))) + throw new InvalidOperationException( + $"ALTER TABLE '{tableName}' RENAME COLUMN '{oldName}' TO '{newName}': the table already has a column named '{newName}'."); + + TdefParts parts = ParseTdef(table.DefinitionPage); // stitches continuation pages for a multi-page TDEF + RenameColumnInParts(parts, table.Columns.Count, col.Index, newName, _channel.Format); + WriteTdef(table.DefinitionPage, parts); + RenameColumnProperties(table.DefinitionPage, oldName, newName); + RepointRelationshipColumns(tableName, oldName, newName); + _catalog.Invalidate(); + return true; + } + + /// Replaces the name entry of the column at in the column region. + /// The descriptors are fixed-size and untouched; only the variable-length name pool is rebuilt (a + /// different-length name shifts every following entry), and the column count is unchanged. + private static void RenameColumnInParts( + TdefParts parts, int colCount, int renameIndex, string newName, JetFormatBase format) + { + int descSize = format.ColumnDescriptorSize; + ReadOnlySpan cols = parts.Columns; + + var descriptors = new List(colCount); + for (int i = 0; i < colCount; i++) + descriptors.Add(cols.Slice(i * descSize, descSize).ToArray()); + + int np = colCount * descSize; + var names = new List(colCount); + for (int i = 0; i < colCount; i++) + { + int len = BinaryPrimitives.ReadUInt16LittleEndian(cols.Slice(np, 2)); + names.Add(cols.Slice(np, 2 + len).ToArray()); + np += 2 + len; + } + + byte[] nameBytes = System.Text.Encoding.Unicode.GetBytes(newName); + byte[] entry = new byte[2 + nameBytes.Length]; + BinaryPrimitives.WriteUInt16LittleEndian(entry.AsSpan(0, 2), (ushort)nameBytes.Length); + nameBytes.CopyTo(entry, 2); + names[renameIndex] = entry; + + var blob = new List(parts.Columns.Length); + foreach (byte[] d in descriptors) blob.AddRange(d); + foreach (byte[] n in names) blob.AddRange(n); + parts.Columns = [.. blob]; + } + + /// Re-owns the renamed column's extended-property block in its table's MSysObjects.LvProp + /// blob, so its DefaultValue/Required/validation survive the rename (ACE does this — verified). No-op when + /// the column had no properties. + private void RenameColumnProperties(int tdefPage, string oldName, string newName) + { + TableDef msys = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIndex = ColumnIndexOf(msys, "Id"); + ColumnDef lvProp = msys.FindColumn("LvProp") + ?? throw new InvalidOperationException("MSysObjects is missing 'LvProp'."); + var table = new Table(_channel, msys); + + foreach ((RowId id, object?[] values) in table.Rows().WithIds()) + { + if (values[idIndex] is null || Convert.ToInt32(values[idIndex]) != tdefPage) continue; + if (values[lvProp.Index] is not byte[] { Length: > 0 } blob) return; + + byte[] renamed = PropertyBlob.RenameOwner(blob, oldName, newName); + if (renamed.AsSpan().SequenceEqual(blob)) return; // the column had no property block + + byte[] descriptor = new RowInserter(_channel, msys).StorePackedLongValue(lvProp.ColumnId, renamed); + values[lvProp.Index] = new LongValueDescriptor(descriptor); + table.Update(id, values, new HashSet { lvProp.Index }); + return; + } + } + + /// Repoints every relationship that names this column, on whichever side owns it. Unlike a table + /// name, a column name is only unique within its table, so each side is matched on its table name too. + private void RepointRelationshipColumns(string tableName, string oldName, string newName) + { + TableDef? def = _catalog.FindTable("MSysRelationships"); + if (def is null) return; + + int childTable = ColumnIndexOf(def, "szObject"); + int childColumn = ColumnIndexOf(def, "szColumn"); + int parentTable = ColumnIndexOf(def, "szReferencedObject"); + int parentColumn = ColumnIndexOf(def, "szReferencedColumn"); + var table = new Table(_channel, def); + + foreach ((RowId id, object?[] values) in table.Rows().WithIds().ToList()) + { + var updates = new List<(int Column, object? Value)>(2); + if (NameMatches(values[childTable], tableName) && NameMatches(values[childColumn], oldName)) + updates.Add((childColumn, newName)); + if (NameMatches(values[parentTable], tableName) && NameMatches(values[parentColumn], oldName)) + updates.Add((parentColumn, newName)); + if (updates.Count > 0) + SetCatalogValues(table, def, id, values, updates.ToArray()); + } + } + + /// MSysObjects.Type for a table object (queries use ). + private const short ObjectTypeTable = 1; + + /// + /// Whether any table or saved query already uses this name. Access keeps tables and queries in a + /// single namespace: ACE rejects renaming a table onto either (verified — RenameFanOutProbeTest), + /// even though they live in different MSysObjects containers, so the unique (ParentId, Name) index + /// would not catch a table/query collision on its own. Scanned straight from MSysObjects rather than + /// the catalog's reconstructed Views/ActionQueries, which omit queries LibRed can't rebuild. + /// + private bool ObjectNameExists(string name, int exceptObjectId) + { + TableDef mo = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIndex = ColumnIndexOf(mo, "Id"); + int nameIndex = ColumnIndexOf(mo, "Name"); + int typeIndex = ColumnIndexOf(mo, "Type"); + + foreach (object?[] values in new Table(_channel, mo).Rows()) + { + if (!NameMatches(values[nameIndex], name)) continue; + // Skip the object being renamed — it can't collide with itself (same-name and case-only renames). + if (values[idIndex] is not null && Convert.ToInt32(values[idIndex]) == exceptObjectId) continue; + short type = Convert.ToInt16(values[typeIndex] ?? (short)0); + if (type is ObjectTypeTable or StoredQueryFormat.ObjectTypeQuery) return true; + } + + return false; + } + + private static bool NameMatches(object? value, string name) => + value is string s && string.Equals(s, name, StringComparison.OrdinalIgnoreCase); + + private static int ColumnIndexOf(TableDef def, string column) => + (def.FindColumn(column) ?? throw new InvalidOperationException($"'{def.Name}' is missing '{column}'.")).Index; + + /// Rewrites some columns of one catalog row, keeping any index whose key covers a changed column in + /// step — MSysObjects is uniquely indexed on (ParentId, Name), so a rename has to move that entry rather + /// than just overwrite the value. + private static void SetCatalogValues( + Table table, TableDef def, RowId id, object?[] values, params (int Column, object? Value)[] updates) + { + var newValues = (object?[])values.Clone(); + var changed = new HashSet(); + foreach ((int column, object? value) in updates) + { + newValues[column] = value; + changed.Add(column); + } + + foreach (IndexDef index in def.Indexes.Where(i => i.RootPage > 0).GroupBy(i => i.RootPage).Select(g => g.First())) + if (index.Columns.Any(c => changed.Contains(c.Column.Index))) + table.MoveIndexEntry(index, values, newValues, id); + + table.Update(id, newValues, changed); + } + + private void DeleteCatalogRows(string catalogTable, string keyColumn, int keyValue) + { + TableDef t = _catalog.FindTable(catalogTable) + ?? throw new InvalidOperationException($"{catalogTable} catalog table was not found."); + int idx = (t.FindColumn(keyColumn) ?? throw new InvalidOperationException($"{catalogTable} is missing '{keyColumn}'.")).Index; + var table = new Table(_channel, t); + + var rows = table.Rows().WithIds() + .Where(r => r.Values[idx] is not null && Convert.ToInt32(r.Values[idx]) == keyValue) + .ToList(); + foreach ((RowId id, object?[] values) in rows) + { + foreach (IndexDef index in t.Indexes.Where(i => i.RootPage > 0).GroupBy(i => i.RootPage).Select(g => g.First())) + table.RemoveIndexEntry(index, values, id); + table.Delete(id); + } + } + + /// + /// Drops a secondary/unique/primary index — DROP INDEX index ON table. Byte-faithful with ACE + /// (probed): remove the index's 12-byte stats block, 52-byte index-data block, and its 28-byte logical + /// info block + name from the TDEF (decrementing counts and the data-ordinal ref of any block past it), + /// and free its B-tree root page back to the global free map — the same index-removal path as DROP + /// CONSTRAINT, minus the relationship linkage. A secondary index lives only in the TDEF (no MSys row). + /// Returns false if no such index exists. Throws if the index backs a relationship (ACE rejects that — + /// drop the relationship first) or the TDEF is multi-page. (PK and unique indexes ARE droppable.) + /// + public bool DropIndex(string tableName, string indexName) + { + TableDef table = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' was not found."); + IndexDef? index = table.Indexes.FirstOrDefault(i => string.Equals(i.Name, indexName, StringComparison.OrdinalIgnoreCase)); + if (index is null) return false; + + if (IndexParticipatesInRelationship(table, index)) + throw new InvalidOperationException( + $"Cannot drop index '{indexName}': it is used in a relationship — drop the relationship first."); + + TdefParts parts = ParseTdef(table.DefinitionPage); // stitches continuation pages for a multi-page TDEF + RemoveTdefBlocks(parts, removeDataOrdinal: index.RealIndexOrdinal, + removeLogical: b => NameOf(b.Name).Equals(indexName, StringComparison.OrdinalIgnoreCase)); + WriteTdef(table.DefinitionPage, parts); + new PageAllocator(_channel).Free(index.RootPage); + _catalog.Invalidate(); + return true; + } + + /// True if the index IS a relationship's enforcement index — the one specific index ACE refuses + /// to drop while the relationship exists. This is NOT "any index over the relationship's columns": a + /// redundant same-columns secondary index is droppable, and EF relies on that (it creates an explicit + /// index, adds the FK, then drops the now-redundant explicit index). ACE-verified (ZzProbe): with a + /// relationship on POrd.CustomerId → PCust.Id, dropping a coincident IX_POrd_CustomerId / IX_PCust_Id + /// succeeds, but dropping the FK's own child index (named after the relationship) or the referenced PK + /// fails with "used in a relationship". + /// Two indexes are protected: on the child, the FK's backing index — named after the relationship, + /// as both ACE and create it; on the parent, the referenced key — the + /// unique/primary index over the referenced columns. + private bool IndexParticipatesInRelationship(TableDef table, IndexDef index) + { + var cols = index.Columns.Select(c => c.Column.Name).ToList(); + bool SameCols(IEnumerable other) => + other.OrderBy(x => x, StringComparer.OrdinalIgnoreCase) + .SequenceEqual(cols.OrderBy(x => x, StringComparer.OrdinalIgnoreCase), StringComparer.OrdinalIgnoreCase); + + return _catalog.Relationships.Any(r => + (string.Equals(r.Table, table.Name, StringComparison.OrdinalIgnoreCase) + && string.Equals(index.Name, r.Name, StringComparison.OrdinalIgnoreCase)) || + (string.Equals(r.ReferencedTable, table.Name, StringComparison.OrdinalIgnoreCase) + && (index.IsUnique || index.IsPrimaryKey) + && SameCols(r.Columns.Select(c => c.ReferencedColumn)))); + } + + /// + /// Adds a column — ALTER TABLE t ADD COLUMN c type. A metadata TDEF edit (probed vs ACE, the + /// inverse of DROP COLUMN): appends the column's 25-byte descriptor + name, gives it the next column id + /// from the 0x29 max-columns high-water (which keeps counting even past dropped ids), appends its + /// fixed offset (end of the fixed region) or variable index (current variable count), and bumps + /// ColumnCount (0x2D), the 0x29 high-water, and — for a variable column — VariableColumnCount (0x2B). + /// Existing rows are not rewritten; they read the new column as NULL via the null bitmap. Fully correct + /// on an empty table (new inserts include it); on a populated table the column is visible and old rows + /// read NULL. A memo/OLE column additionally gets its §3.3.2 usage-map entry (two empty maps appended to + /// the table's usage-map page — or, if that page is full, a dedicated map page, the fallback CREATE TABLE + /// uses on a wide table). Returns false if the column already exists. Multi-page TDEFs are handled. + /// + public bool AddColumn(string tableName, ColumnSpec spec, string? defaultValue = null) + { + JetName.Validate(spec.Name, "column name"); + TableDef table = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' was not found."); + if (table.Columns.Any(c => string.Equals(c.Name, spec.Name, StringComparison.OrdinalIgnoreCase))) + return false; + if (table.Columns.Count >= MaxColumnsPerTable) + throw new NotSupportedException($"Table '{tableName}' already has {MaxColumnsPerTable} columns (Jet/ACE limit)."); + JetFormatBase format = _channel.Format; + bool isLongValue = spec.Type is JetDataType.Memo or JetDataType.Ole; + TdefParts parts = ParseTdef(table.DefinitionPage); // stitches continuation pages for a multi-page TDEF + + int maxCols = BinaryPrimitives.ReadUInt16LittleEndian(parts.Header.AsSpan(format.TdefMaxColumnsOffset, 2)); + int varCount = BinaryPrimitives.ReadUInt16LittleEndian(parts.Header.AsSpan(format.TdefVariableColumnsOffset, 2)); + int colCount = BinaryPrimitives.ReadUInt16LittleEndian(parts.Header.AsSpan(format.TdefColumnCountOffset, 2)); + + // The 0x29 column-id high-water never decrements on DROP COLUMN, so once 255 ids have been handed out + // no further column can be added — even if the *live* count is lower (the guard above) — until the + // database is compacted (which renumbers and reclaims dropped ids). ACE enforces exactly this: create + // 255 columns, drop some, ADD COLUMN → "Too many fields defined." Mirror it rather than write a 256th + // id ACE can't represent. Verified vs ACE. + if (maxCols >= MaxColumnsPerTable) + throw new NotSupportedException( + $"Cannot add column '{spec.Name}' to '{tableName}': too many fields defined — {MaxColumnsPerTable} column ids " + + "have been used over this table's lifetime (Jet/ACE caps the id high-water; a compact is required to reclaim dropped ids)."); + + var newColumn = new ColumnDef + { + Name = spec.Name, + Type = spec.Type, + Index = colCount, + ColumnId = maxCols, // next id from the high-water (dropped ids are never reused) + Length = spec.Length, + FixedOffset = spec.IsFixedLength + ? table.Columns.Where(c => c.IsFixedLength).Select(c => c.FixedOffset + c.Length).DefaultIfEmpty(0).Max() + : 0, + VariableIndex = spec.IsFixedLength ? -1 : varCount, + IsFixedLength = spec.IsFixedLength, + IsAutoNumber = spec.IsAutoNumber, + Precision = spec.Precision, + Scale = spec.Scale, + IsNullable = spec.IsNullable, + Collation = spec.Type == JetDataType.FixedPoint ? Collation.GeneralLegacy : _collation, + }; + + AppendColumnToParts(parts, colCount, TdefBuilder.BuildColumnDescriptor(newColumn, format), spec.Name, format); + + BinaryPrimitives.WriteUInt16LittleEndian(parts.Header.AsSpan(format.TdefColumnCountOffset, 2), (ushort)(colCount + 1)); + BinaryPrimitives.WriteUInt16LittleEndian(parts.Header.AsSpan(format.TdefMaxColumnsOffset, 2), (ushort)(maxCols + 1)); + if (!spec.IsFixedLength) + BinaryPrimitives.WriteUInt16LittleEndian(parts.Header.AsSpan(format.TdefVariableColumnsOffset, 2), (ushort)(varCount + 1)); + + // A memo/OLE column needs a §3.3.2 usage-map entry (its owned + free page maps). ACE appends the two + // maps to the table's existing usage-map page right after the data/index maps (verified), and adds the + // 10-byte entry before the list's 0xFFFF terminator. + int lvMapPage = 0, lvUsedRow = 0, lvFreeRow = 0; + bool lvDedicated = false; + if (isLongValue) + { + int o = format.TdefOwnedPagesOffset + 1; + int primaryPage = parts.Header[o] | (parts.Header[o + 1] << 8) | (parts.Header[o + 2] << 16); + byte[] primaryBytes = _channel.ReadPage(primaryPage).Span.ToArray(); + int primaryFree = BinaryPrimitives.ReadUInt16LittleEndian(primaryBytes.AsSpan(format.DataFreeSpaceOffset, 2)); + + if (primaryFree >= 2 * (UsageMapRecordLength + 2)) + { + // Room on the table's usage-map page — append the two maps there (as ACE does). + lvMapPage = primaryPage; + lvUsedRow = BinaryPrimitives.ReadUInt16LittleEndian(primaryBytes.AsSpan(format.DataRowCountOffset, 2)); + lvFreeRow = lvUsedRow + 1; + } + else + { + // Full — give the column its own usage-map page (owned = row 0, free = row 1), the same + // fallback CREATE TABLE uses once its primary map page fills on a wide table. + lvMapPage = _allocator.Allocate(); + lvUsedRow = 0; lvFreeRow = 1; lvDedicated = true; + } + AddLongValueMapEntry(parts, maxCols, lvUsedRow, lvFreeRow, lvMapPage); + } + + WriteTdef(table.DefinitionPage, parts); + + if (isLongValue) + { + if (lvDedicated) + WriteUsageMaps(format, lvMapPage, mapCount: 2); // owned = row 0, free = row 1, both empty + else + { + AppendEmptyUsageMapRow(format, lvMapPage, lvUsedRow); + AppendEmptyUsageMapRow(format, lvMapPage, lvFreeRow); + } + } + + // NOT NULL / DEFAULT go in the table's LvProp blob (DefaultValue before Required, matching ACE), the + // same properties CREATE TABLE writes — appended to the existing blob without disturbing other columns'. + var props = new List(); + if (defaultValue is not null) props.Add(new PropertyBlob.Property(spec.Name, PropertyBlob.DefaultValueProperty, defaultValue)); + if (!spec.IsNullable) props.Add(PropertyBlob.Bool(spec.Name, PropertyBlob.RequiredProperty, true)); + if (props.Count > 0) SetColumnProperties(table.DefinitionPage, spec.Name, props); + + _catalog.Invalidate(); + return true; + } + + /// Inserts a long-value (memo/OLE) column's 10-byte §3.3.2 usage-map entry + /// ({col_num:2}{used row+page:4}{free row+page:4}) just before the list's 0xFFFF terminator. + /// The new column has the highest id, so appending keeps the list in ascending column order. + private static void AddLongValueMapEntry(TdefParts parts, int columnId, int usedRow, int freeRow, int mapPage) + { + byte[] lval = parts.Lval; + int at = lval.Length - 2; // before the terminator + + var entry = new byte[10]; + BinaryPrimitives.WriteUInt16LittleEndian(entry, (ushort)columnId); + entry[2] = (byte)usedRow; WriteInt24(entry, 3, mapPage); + entry[6] = (byte)freeRow; WriteInt24(entry, 7, mapPage); + + var result = new byte[lval.Length + 10]; + Array.Copy(lval, 0, result, 0, at); + entry.CopyTo(result, at); + Array.Copy(lval, at, result, at + 10, 2); // the 0xFFFF terminator + parts.Lval = result; + } + + /// Appends a column's extended properties (DefaultValue/Required) to its table's + /// MSysObjects.LvProp blob and re-stores it — the add-side counterpart of + /// . + /// Sets (replaces) a column's DefaultValue in the table's MSysObjects.LvProp blob — + /// ALTER TABLE … ALTER COLUMN … DEFAULT. Reads all properties, drops any existing DefaultValue for the + /// column, adds the new one, and rewrites the blob (preserving every other property). + public void SetColumnDefault(string tableName, string columnName, string defaultSql) + => MutateLvPropForColumn(tableName, columnName, props => + { + props.RemoveAll(p => string.Equals(p.Owner, columnName, StringComparison.OrdinalIgnoreCase) + && p.Name == PropertyBlob.DefaultValueProperty); + props.Add(new PropertyBlob.Property(columnName, PropertyBlob.DefaultValueProperty, defaultSql)); + }); + + /// Removes a column's DefaultValue from the table's MSysObjects.LvProp blob — + /// ALTER TABLE … ALTER COLUMN … DROP DEFAULT. Drops only that property, so the column's type and its + /// Required (NOT NULL) property survive — ACE-verified. A no-op if the column had no default. + public void DropColumnDefault(string tableName, string columnName) + => MutateLvPropForColumn(tableName, columnName, props => + props.RemoveAll(p => string.Equals(p.Owner, columnName, StringComparison.OrdinalIgnoreCase) + && p.Name == PropertyBlob.DefaultValueProperty)); + + /// Sets or clears a column's Required (NOT NULL) property in the table's + /// MSysObjects.LvProp blob — ALTER TABLE … ALTER COLUMN … NOT NULL / NULL. A required column carries + /// a boolean Required property; a nullable one simply has none, so this drops any existing one and + /// re-adds it only when (matching the CREATE-side write, and read back into + /// ). ACE-verified: ACE writes the same property for + /// ALTER COLUMN … NOT NULL and enforces it. + public void SetColumnRequired(string tableName, string columnName, bool required) + => MutateLvPropForColumn(tableName, columnName, props => + { + props.RemoveAll(p => string.Equals(p.Owner, columnName, StringComparison.OrdinalIgnoreCase) + && p.Name == PropertyBlob.RequiredProperty); + if (required) props.Add(PropertyBlob.Bool(columnName, PropertyBlob.RequiredProperty, true)); + }); + + /// Reads the table's MSysObjects.LvProp property blob, applies , + /// and rewrites it — the shared read-modify-write behind ALTER COLUMN … SET/DROP DEFAULT. + private void MutateLvPropForColumn(string tableName, string columnName, Action> mutate) + { + TableDef target = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' does not exist."); + int tdefPage = target.DefinitionPage; + + TableDef msys = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIdx = (msys.FindColumn("Id") ?? throw new InvalidOperationException("MSysObjects is missing 'Id'.")).Index; + ColumnDef lvProp = msys.FindColumn("LvProp") ?? throw new InvalidOperationException("MSysObjects is missing 'LvProp'."); + var table = new Table(_channel, msys); + + foreach ((RowId id, object?[] values) in table.Rows().WithIds()) + { + if (values[idIdx] is null || Convert.ToInt32(values[idIdx]) != tdefPage) continue; + byte[] blob = values[lvProp.Index] as byte[] ?? []; + var props = PropertyBlob.Read(blob).ToList(); + mutate(props); + byte[] updated = PropertyBlob.Write(props); + byte[] descriptor = new RowInserter(_channel, msys).StorePackedLongValue(lvProp.ColumnId, updated); + values[lvProp.Index] = new LongValueDescriptor(descriptor); + table.Update(id, values, new HashSet { lvProp.Index }); + return; + } + throw new InvalidOperationException($"MSysObjects row for table '{tableName}' (page {tdefPage}) was not found."); + } + + private void SetColumnProperties(int tdefPage, string columnName, IReadOnlyList props) + { + TableDef msys = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIdx = (msys.FindColumn("Id") ?? throw new InvalidOperationException("MSysObjects is missing 'Id'.")).Index; + ColumnDef lvProp = msys.FindColumn("LvProp") ?? throw new InvalidOperationException("MSysObjects is missing 'LvProp'."); + var table = new Table(_channel, msys); + + foreach ((RowId id, object?[] values) in table.Rows().WithIds()) + { + if (values[idIdx] is null || Convert.ToInt32(values[idIdx]) != tdefPage) continue; + byte[] blob = values[lvProp.Index] as byte[] ?? []; + byte[] updated = PropertyBlob.AddColumnProperties(blob, columnName, props); + byte[] descriptor = new RowInserter(_channel, msys).StorePackedLongValue(lvProp.ColumnId, updated); + values[lvProp.Index] = new LongValueDescriptor(descriptor); + table.Update(id, values, new HashSet { lvProp.Index }); + return; + } + } + + /// Adds a table-level CHECK to the table's MSysObjects.LvProp blob — ALTER TABLE ADD + /// CONSTRAINT … CHECK. Merges with any existing checks: reads the current CheckConstraints property, + /// appends the new (name, expression), and rewrites the single empty-owner table block (RemoveOwner + re-add), + /// keeping the name pool and every column block intact. The check is enforced by the engine from the + /// re-loaded TableDef.CheckConstraints. + public void AddCheckConstraint(string tableName, string checkName, string expression) + { + JetName.Validate(checkName, "check constraint name"); + TableDef target = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' does not exist."); + int tdefPage = target.DefinitionPage; + + TableDef msys = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIdx = (msys.FindColumn("Id") ?? throw new InvalidOperationException("MSysObjects is missing 'Id'.")).Index; + ColumnDef lvProp = msys.FindColumn("LvProp") ?? throw new InvalidOperationException("MSysObjects is missing 'LvProp'."); + var table = new Table(_channel, msys); + + foreach ((RowId id, object?[] values) in table.Rows().WithIds()) + { + if (values[idIdx] is null || Convert.ToInt32(values[idIdx]) != tdefPage) continue; + byte[] blob = values[lvProp.Index] as byte[] ?? []; + + var checks = PropertyBlob.ReadCheckConstraints(blob).ToList(); + checks.Add((checkName, expression)); + + byte[] withoutTableBlock = PropertyBlob.RemoveOwner(blob, ""); + var checkProp = new PropertyBlob.Property("", PropertyBlob.CheckConstraintsProperty, + PropertyBlob.WriteCheckList(checks)); + byte[] updated = PropertyBlob.AddColumnProperties(withoutTableBlock, "", [checkProp]); + + byte[] descriptor = new RowInserter(_channel, msys).StorePackedLongValue(lvProp.ColumnId, updated); + values[lvProp.Index] = new LongValueDescriptor(descriptor); + table.Update(id, values, new HashSet { lvProp.Index }); + return; + } + throw new InvalidOperationException($"MSysObjects row for table '{tableName}' (page {tdefPage}) was not found."); + } + + /// Drops a named table-level CHECK — ALTER TABLE … DROP CONSTRAINT. Removes the matching entry from + /// the CheckConstraints list in the table's MSysObjects.LvProp blob (the inverse of + /// ): if any remain, rewrites the list; if it was the last one, drops the + /// whole table-level property block. ACE-verified: after the drop ACE stops enforcing the check. Returns + /// false if no CHECK of that name exists (so the caller can try other constraint kinds). + public bool DropCheckConstraint(string tableName, string checkName) + { + TableDef target = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' does not exist."); + int tdefPage = target.DefinitionPage; + + TableDef msys = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIdx = (msys.FindColumn("Id") ?? throw new InvalidOperationException("MSysObjects is missing 'Id'.")).Index; + ColumnDef lvProp = msys.FindColumn("LvProp") ?? throw new InvalidOperationException("MSysObjects is missing 'LvProp'."); + var table = new Table(_channel, msys); + + foreach ((RowId id, object?[] values) in table.Rows().WithIds()) + { + if (values[idIdx] is null || Convert.ToInt32(values[idIdx]) != tdefPage) continue; + byte[] blob = values[lvProp.Index] as byte[] ?? []; + + var checks = PropertyBlob.ReadCheckConstraints(blob).ToList(); + if (checks.RemoveAll(c => string.Equals(c.Name, checkName, StringComparison.OrdinalIgnoreCase)) == 0) + return false; // no CHECK of that name — let the caller try FK/PK/unique + + byte[] updated = PropertyBlob.RemoveOwner(blob, ""); // drop the table-level block… + if (checks.Count > 0) // …and re-add it only if checks remain + updated = PropertyBlob.AddColumnProperties(updated, "", + [new PropertyBlob.Property("", PropertyBlob.CheckConstraintsProperty, PropertyBlob.WriteCheckList(checks))]); + + byte[] descriptor = new RowInserter(_channel, msys).StorePackedLongValue(lvProp.ColumnId, updated); + values[lvProp.Index] = new LongValueDescriptor(descriptor); + table.Update(id, values, new HashSet { lvProp.Index }); + return true; + } + throw new InvalidOperationException($"MSysObjects row for table '{tableName}' (page {tdefPage}) was not found."); + } + + /// Changes a column's declared type — ALTER TABLE … ALTER COLUMN. Supports changing a **variable + /// text/binary column's max length** (a descriptor-length edit at ColumnLengthOffset; variable columns + /// store each row's actual length, so no rows need rewriting — works on empty and populated tables). Changing + /// the storage type (numeric type, a fixed column's size, or fixed↔variable) would require an Access-style + /// full column rewrite (read all rows, convert values, re-lay-out the row) and throws NotSupported. + public void AlterColumn(string tableName, string columnName, ColumnSpec newSpec) + { + TableDef table = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' does not exist."); + ColumnDef col = table.FindColumn(columnName) + ?? throw new InvalidOperationException($"Column '{columnName}' does not exist in '{tableName}'."); + EnsureColumnIsNotInRelationship(table, col); + + // A pure reseed of an existing counter — ALTER COLUMN c COUNTER(seed, increment) where c is already an + // AutoNumber of the same storage type — changes only the next id, not the data or layout. It's an + // in-place TDEF header edit (0x14/0x18), exactly what ACE does; RewriteColumn would needlessly rebuild + // the whole table. (Changing the numeric type still rebuilds.) + if (col.IsAutoNumber && newSpec.IsAutoNumber && col.Type == newSpec.Type) + { + ReseedCounter(table, col, newSpec.Seed, newSpec.Increment); + return; + } + + // Promote a plain Int32 column to an AutoNumber — a counter is stored identically (both a 4-byte Int32); + // the only differences are the column's 0x04 flag and the header's seed/increment. So it's a metadata + // edit, not a rebuild. (ACE/SQL Server reject this; PostgreSQL/MySQL and LibRed allow it — see spec.) + if (!col.IsAutoNumber && newSpec.IsAutoNumber && col.Type == newSpec.Type) + { + PromoteColumnToCounter(table, col, newSpec.Seed, newSpec.Increment); + return; + } + + // Demote a counter back to a plain Int32 — the reverse, and likewise a metadata edit: clear the 0x04 + // flag and reset the header to a non-AutoNumber table's state (0x14 = 0, 0x18 = 1). ACE *allows* this + // (unlike promotion), so LibRed matches; existing values are kept and the column stops auto-assigning. + if (col.IsAutoNumber && !newSpec.IsAutoNumber && col.Type == newSpec.Type) + { + DemoteCounterToInt(table, col); + return; + } + + bool variableLengthChange = + !col.IsFixedLength && !newSpec.IsFixedLength && col.Type == newSpec.Type && + newSpec.Type is JetDataType.Text or JetDataType.Binary; + // A variable text/binary length change is a cheap in-place descriptor edit (below). A storage-type change + // (numeric type, fixed size, fixed↔variable) is a full column rewrite: the byte-faithful in-place edit + // where it applies (all-fixed non-indexed target), else the logical rebuild (AlterColumnTypeInPlace picks). + if (!variableLengthChange) + { + AlterColumnTypeInPlace(tableName, columnName, newSpec); + return; + } + + JetFormatBase format = _channel.Format; + TdefParts parts = ParseTdef(table.DefinitionPage); + byte[] cols = parts.Columns; + int descSize = format.ColumnDescriptorSize; + for (int i = 0; i < table.Columns.Count; i++) + { + int entry = i * descSize; + int colId = BinaryPrimitives.ReadUInt16LittleEndian(cols.AsSpan(entry + format.ColumnNumberOffset, 2)); + if (colId != col.ColumnId) continue; + BinaryPrimitives.WriteUInt16LittleEndian(cols.AsSpan(entry + format.ColumnLengthOffset, 2), (ushort)newSpec.Length); + WriteTdef(table.DefinitionPage, parts); + return; + } + throw new InvalidOperationException($"Descriptor for column '{columnName}' (id {col.ColumnId}) was not found."); + } + + /// ACE rejects every type/length alteration of a relationship column, on either the + /// referencing or referenced side. Keep this check ahead of all specialized ALTER paths so an + /// in-place descriptor edit cannot bypass the same rule enforced by a logical table rebuild. + private void EnsureColumnIsNotInRelationship(TableDef table, ColumnDef column) + { + const StringComparison oic = StringComparison.OrdinalIgnoreCase; + if (_catalog.Relationships.Any(r => + (string.Equals(r.Table, table.Name, oic) && + r.Columns.Any(c => string.Equals(c.Column, column.Name, oic))) || + (string.Equals(r.ReferencedTable, table.Name, oic) && + r.Columns.Any(c => string.Equals(c.ReferencedColumn, column.Name, oic))))) + throw new InvalidOperationException( + $"Cannot change field '{column.Name}'. It is part of one or more relationships."); + } + + /// Reseeds an existing AutoNumber column in place — ALTER COLUMN c COUNTER(seed, increment). Writes + /// the TDEF header's last-value (0x14 = seed − increment, so the next assigned id is seed) and + /// increment (0x18); no data or descriptor changes. ACE rejects reseeding a counter that participates + /// in a relationship ("Cannot change field 'X'. It is part of one or more relationships." — verified); match + /// that. + private void ReseedCounter(TableDef table, ColumnDef col, int seed, int increment) + { + const StringComparison oic = StringComparison.OrdinalIgnoreCase; + if (_catalog.Relationships.Any(r => + (string.Equals(r.Table, table.Name, oic) && r.Columns.Any(c => string.Equals(c.Column, col.Name, oic))) || + (string.Equals(r.ReferencedTable, table.Name, oic) && r.Columns.Any(c => string.Equals(c.ReferencedColumn, col.Name, oic))))) + throw new InvalidOperationException($"Cannot change field '{col.Name}'. It is part of one or more relationships."); + + if (increment == 0) increment = 1; + JetFormatBase format = _channel.Format; + byte[] tdef = _channel.ReadPage(table.DefinitionPage).Span.ToArray(); + BinaryPrimitives.WriteInt32LittleEndian(tdef.AsSpan(format.TdefLastAutoNumberOffset, 4), seed - increment); + BinaryPrimitives.WriteInt32LittleEndian(tdef.AsSpan(format.TdefAutoNumberIncrementOffset, 4), increment); + _channel.WritePage(table.DefinitionPage, tdef); + _catalog.Invalidate(); + } + + /// Promotes a plain Int32 column to an AutoNumber in place — ALTER COLUMN c COUNTER(seed, increment) + /// where c is a plain integer. A counter is stored identically to a Long Integer, so this only sets the + /// column descriptor's 0x04 AutoNumber flag and the header's seed/increment (0x14/0x18); + /// existing values are untouched. Jet allows only one AutoNumber per table, so it rejects a second; and (like + /// the reseed path) a column in a relationship is rejected, matching ACE. + private void PromoteColumnToCounter(TableDef table, ColumnDef col, int seed, int increment) + { + const StringComparison oic = StringComparison.OrdinalIgnoreCase; + if (table.Columns.Any(c => c.IsAutoNumber && c.ColumnId != col.ColumnId)) + throw new InvalidOperationException( + $"Cannot make '{col.Name}' an AutoNumber: table '{table.Name}' already has one (Jet allows a single AutoNumber column per table)."); + if (_catalog.Relationships.Any(r => + (string.Equals(r.Table, table.Name, oic) && r.Columns.Any(c => string.Equals(c.Column, col.Name, oic))) || + (string.Equals(r.ReferencedTable, table.Name, oic) && r.Columns.Any(c => string.Equals(c.ReferencedColumn, col.Name, oic))))) + throw new InvalidOperationException($"Cannot change field '{col.Name}'. It is part of one or more relationships."); + + if (increment == 0) increment = 1; + JetFormatBase format = _channel.Format; + TdefParts parts = ParseTdef(table.DefinitionPage); + int descSize = format.ColumnDescriptorSize; + for (int i = 0; i < table.Columns.Count; i++) + { + int entry = i * descSize; + if (BinaryPrimitives.ReadUInt16LittleEndian(parts.Columns.AsSpan(entry + format.ColumnNumberOffset, 2)) != col.ColumnId) continue; + parts.Columns[entry + format.ColumnFlagsOffset] |= JetFormatBase.ColumnFlagAutoNumber; + break; + } + BinaryPrimitives.WriteInt32LittleEndian(parts.Header.AsSpan(format.TdefLastAutoNumberOffset, 4), seed - increment); + BinaryPrimitives.WriteInt32LittleEndian(parts.Header.AsSpan(format.TdefAutoNumberIncrementOffset, 4), increment); + WriteTdef(table.DefinitionPage, parts); + _catalog.Invalidate(); + + // COUNTER(seed, increment) is a *sequential* counter. A surviving GenUniqueID() default would instead + // make it a "Random" AutoNumber (IsRandomAutoNumber) — assigning random ids and ignoring the seed — so + // clear it to honour the requested sequence. Other (literal) defaults are inert on a counter (the insert + // path skips defaults for AutoNumber columns) and are left as-is. + if (col.DefaultValue?.Trim().Equals("GenUniqueID()", StringComparison.OrdinalIgnoreCase) == true) + DropColumnDefault(table.Name, col.Name); + } + + /// Demotes an AutoNumber column back to a plain Int32 in place — ALTER COLUMN c LONG where c is a + /// counter. Clears the descriptor's 0x04 flag and resets the header to a non-AutoNumber table's state + /// (0x14 = 0, 0x18 = 1); existing values are kept, the column just stops auto-assigning. ACE + /// permits this (unlike int→counter promotion), so no divergence. + private void DemoteCounterToInt(TableDef table, ColumnDef col) + { + JetFormatBase format = _channel.Format; + TdefParts parts = ParseTdef(table.DefinitionPage); + int descSize = format.ColumnDescriptorSize; + for (int i = 0; i < table.Columns.Count; i++) + { + int entry = i * descSize; + if (BinaryPrimitives.ReadUInt16LittleEndian(parts.Columns.AsSpan(entry + format.ColumnNumberOffset, 2)) != col.ColumnId) continue; + parts.Columns[entry + format.ColumnFlagsOffset] &= unchecked((byte)~JetFormatBase.ColumnFlagAutoNumber); + break; + } + BinaryPrimitives.WriteInt32LittleEndian(parts.Header.AsSpan(format.TdefLastAutoNumberOffset, 4), 0); + BinaryPrimitives.WriteInt32LittleEndian(parts.Header.AsSpan(format.TdefAutoNumberIncrementOffset, 4), 1); + WriteTdef(table.DefinitionPage, parts); + _catalog.Invalidate(); + } + + /// Changes a column's storage type, matching ACE's column-modify semantics (verified): the column + /// keeps its position but is internally a new column — it gets a fresh id burned from the 0x29 + /// high-water, while every other column keeps its id and its original descriptor bytes (so fields + /// LibRed doesn't model are preserved, per the faithful round-trip rule). All target values are converted + /// in memory first (an unconvertible value fails before anything is written), then the rebuild — drop, + /// recreate with the new type, re-insert, recreate secondary indexes, re-add relationships — runs inside a + /// page-level transaction that rolls back atomically on any later failure. Column order, the primary + /// key, unique/secondary indexes, CHECK constraints, defaults, and AutoNumber values are preserved. Rejects a + /// table whose target column is in a relationship (drop the FK first). This is a logical rebuild (a fresh TDEF + /// page, not ACE's byte-exact in-place edit), but the resulting column layout — position, burned id, and the + /// untouched columns' bytes — matches what ACE produces. + private void RewriteColumn(string tableName, string columnName, ColumnSpec newColumnSpec) + { + TableDef def = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' does not exist."); + ColumnDef target = def.FindColumn(columnName) + ?? throw new InvalidOperationException($"Column '{columnName}' does not exist in '{tableName}'."); + + const StringComparison oic = StringComparison.OrdinalIgnoreCase; + + // ACE rejects altering a column that is itself part of a relationship (an FK column or the referenced + // key column) — "Cannot change field 'X'. It is part of one or more relationships." (verified). + if (_catalog.Relationships.Any(r => + (string.Equals(r.Table, tableName, oic) && r.Columns.Any(c => string.Equals(c.Column, columnName, oic))) || + (string.Equals(r.ReferencedTable, tableName, oic) && r.Columns.Any(c => string.Equals(c.ReferencedColumn, columnName, oic))))) + throw new InvalidOperationException($"Cannot change field '{columnName}'. It is part of one or more relationships."); + + // The rebuild drops + recreates the table, so every relationship it touches is captured and restored + // afterwards. OUTGOING FKs (this table is the child) are cascaded away by DropTable and re-added; their + // backing indexes are recreated with them, so they're excluded from `secondary`. INCOMING FKs (this table + // is the referenced parent) are dropped up front so the parent can be dropped, then re-added — this is + // what makes a parent-side rewrite work. Self-references count as outgoing only. + var foreignKeys = _catalog.ForeignKeysOf(tableName).ToList(); + var incoming = _catalog.Relationships + .Where(r => string.Equals(r.ReferencedTable, tableName, oic) && !string.Equals(r.Table, tableName, oic)) + .ToList(); + var fkColumnSets = foreignKeys.Select(fk => fk.Columns.Select(c => c.Column).ToArray()).ToList(); + + // 1. Materialise all rows (values indexed by column position) before dropping the table. + var rows = new Table(_channel, def).Rows().Select(r => (object?[])r.Clone()).ToList(); + + // 2. Reconstruct the schema — column order preserved, the target re-typed. Every OTHER column keeps its + // original descriptor bytes (RawDescriptor passthrough), so fields LibRed doesn't model survive the + // rewrite (the faithful round-trip rule); the target builds fresh (RawDescriptor null). Column ids stay + // contiguous by position — NOT burned like ACE — because the row codec's null bitmap is currently + // keyed by column id, which only agrees with ACE's (position-keyed) bitmap when id == position. Burning + // the id needs the codec switched to position-keying first (verified vs an ACE-modified file). TODO. + int targetIndex = target.Index; + var specs = def.Columns.Select(c => c.Index == targetIndex + ? newColumnSpec with { IsNullable = target.IsNullable, RawDescriptor = null } + : new ColumnSpec(c.Name, c.Type, c.Length, c.IsFixedLength, c.IsAutoNumber, c.Precision, c.Scale, + c.IsNullable, c.Seed, c.Increment, RawDescriptor: c.RawDescriptor)).ToList(); + + IndexDef? pk = def.Indexes.FirstOrDefault(i => i.IsPrimaryKey); + IReadOnlyList? primaryKey = pk?.Columns.Select(c => c.Column.Name).ToList(); + // Secondary indexes to recreate — excluding the primary key and any FK-backing index (re-added with its FK). + var secondary = def.Indexes + .Where(i => !i.IsPrimaryKey) + .Where(i => !fkColumnSets.Any(cols => + cols.SequenceEqual(i.Columns.Select(c => c.Column.Name), StringComparer.OrdinalIgnoreCase))) + .ToList(); + var checks = def.CheckConstraints.ToList(); + var defaults = def.Columns.Where(c => c.DefaultValue is not null) + .Select(c => (Column: c.Name, DefaultSql: c.DefaultValue!)).ToList(); + + // 3. Pre-check: convert every target value in memory BEFORE touching disk. An unconvertible value + // (e.g. non-numeric text → INT) throws here, with nothing written — the caller sees a clean failure. + foreach (object?[] row in rows) + row[targetIndex] = ConvertValue(row[targetIndex], newColumnSpec.Type); + + // 4. Apply the rebuild atomically: wrap it in a page-level transaction so any failure that slips past the + // pre-check (a unique-index collision after narrowing, NOT NULL, an I/O or allocation error) rolls the + // whole operation back and leaves the table byte-unchanged — never a half-converted table. + bool ownTransaction = !_channel.InTransaction; + if (ownTransaction) _channel.BeginTransaction(); + try + { + // Drop incoming relationships (so the parent becomes unreferenced) → drop → recreate (PK only) → + // re-insert → recreate secondary indexes → re-add outgoing then incoming relationships. + foreach (ForeignKey r in incoming) { DropConstraint(r.Table, r.Name); _catalog.Invalidate(); } + DropTable(tableName); + _catalog.Invalidate(); + Create(tableName, specs, primaryKey, relationships: null, uniqueConstraints: null, + columnDefaults: defaults, checkConstraints: checks, primaryKeyName: pk?.Name); + _catalog.Invalidate(); + + var dest = new Table(_channel, _catalog.FindTable(tableName)!); + foreach (object?[] row in rows) dest.Insert(row); + + foreach (IndexDef ix in secondary) + { + AddIndex(tableName, ix.Name, ix.Columns.Select(c => (c.Column.Name, !c.Ascending)).ToList(), + ix.IsUnique, isPrimary: false, disallowNull: false, ignoreNulls: false); + _catalog.Invalidate(); + } + + // Re-add the outgoing foreign keys (recreates their backing index + linkage + MSysRelationships rows). + foreach (ForeignKey fk in foreignKeys) + { + AddForeignKey(tableName, new RelationshipSpec(fk.Name, fk.ReferencedTable, fk.Columns.ToList(), + fk.IsEnforced, fk.CascadeUpdate, fk.CascadeDelete, NoIndex: false, + DeleteSetNull: fk.DeleteSetNull, UpdateSetNull: fk.UpdateSetNull)); + _catalog.Invalidate(); + } + + // Re-add the incoming relationships — each child's FK back to the rebuilt parent. + foreach (ForeignKey r in incoming) + { + AddForeignKey(r.Table, new RelationshipSpec(r.Name, r.ReferencedTable, r.Columns.ToList(), + r.IsEnforced, r.CascadeUpdate, r.CascadeDelete, NoIndex: false, + DeleteSetNull: r.DeleteSetNull, UpdateSetNull: r.UpdateSetNull)); + _catalog.Invalidate(); + } + + if (ownTransaction) _channel.CommitTransaction(); + } + catch when (ownTransaction) + { + _channel.RollbackTransaction(); + _catalog.Invalidate(); // the in-memory catalog cache is stale after the pages are restored + throw; + } + } + + /// The TDEF-page step of the in-place column type change: bump the 0x29 high-water and rewrite + /// ONLY the target descriptor (type, burned id, fixed-offset appended to the end of the fixed region with the + /// old slot left dead, length), leaving the TDEF page number and every other descriptor byte-identical to ACE. + /// This alone is not a self-consistent change — wraps it with the row + /// re-lay and index rebuild; this entry point exists so a byte-diff test can isolate the TDEF page. + public void AlterColumnTypeInPlaceTdef(string tableName, string columnName, ColumnSpec newSpec, int? fixedEndOverride = null) + { + TableDef def = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' does not exist."); + ColumnDef target = def.FindColumn(columnName) + ?? throw new InvalidOperationException($"Column '{columnName}' does not exist in '{tableName}'."); + EnsureColumnIsNotInRelationship(def, target); + JetFormatBase format = _channel.Format; + + TdefParts parts = ParseTdef(def.DefinitionPage); + // The fixed-region end must include dead slots, so callers with rows pass the row-derived length. + int fixedEnd = fixedEndOverride ?? def.Columns.Where(c => c.IsFixedLength && c.Type != JetDataType.Boolean) + .Select(c => c.FixedOffset + c.Length).DefaultIfEmpty(0).Max(); + + EditTargetDescriptor(parts, target, newSpec, fixedEnd, format); + WriteTdef(def.DefinitionPage, parts); + _catalog.Invalidate(); + } + + /// Applies ACE's in-place column retype to the target descriptor within + /// (no page write — the caller writes the TDEF once): the target becomes a NEW column with a fresh id from the + /// 0x29 high-water and its fixed data appended to the END of the current fixed region (its old slot left + /// as dead space — ACE does not compact); 0x29 bumps, and 0x2B too for a variable retype. Only + /// the target descriptor changes; every other descriptor stays byte-identical. Returns the burned new id. + private static int EditTargetDescriptor(TdefParts parts, ColumnDef target, ColumnSpec newSpec, int fixedEnd, JetFormatBase format) + { + int maxCols = BinaryPrimitives.ReadUInt16LittleEndian(parts.Header.AsSpan(format.TdefMaxColumnsOffset, 2)); + int varCount = BinaryPrimitives.ReadUInt16LittleEndian(parts.Header.AsSpan(format.TdefVariableColumnsOffset, 2)); + + Span d = parts.Columns.AsSpan(target.Index * format.ColumnDescriptorSize, format.ColumnDescriptorSize); + d[format.ColumnTypeOffset] = (byte)newSpec.Type; + BinaryPrimitives.WriteUInt16LittleEndian(d[format.ColumnNumberOffset..], (ushort)maxCols); // +0x05 id burned + // The target's var-index (+0x07) becomes the old variable-column count — the next var slot — for BOTH a + // fixed and a variable retype (verified vs ACE); a variable retype also bumps the 0x2B var-column count. + BinaryPrimitives.WriteUInt16LittleEndian(d[format.ColumnVariableIndexOffset..], (ushort)varCount); + // The duplicate id at +0x09 is deliberately left unchanged — verified ACE does not update it. + byte flags = d[format.ColumnFlagsOffset]; + flags = newSpec.IsFixedLength ? (byte)(flags | JetFormatBase.ColumnFlagFixedLength) + : (byte)(flags & ~JetFormatBase.ColumnFlagFixedLength); + flags = newSpec.IsAutoNumber ? (byte)(flags | JetFormatBase.ColumnFlagAutoNumber) + : (byte)(flags & ~JetFormatBase.ColumnFlagAutoNumber); + d[format.ColumnFlagsOffset] = flags; + BinaryPrimitives.WriteUInt16LittleEndian(d[format.ColumnFixedOffsetOffset..], (ushort)(newSpec.IsFixedLength ? fixedEnd : 0)); // +0x15 + BinaryPrimitives.WriteUInt16LittleEndian(d[format.ColumnLengthOffset..], (ushort)newSpec.Length); // +0x17 + if (newSpec.Type == JetDataType.FixedPoint) // Decimal/Numeric: precision/scale share the 0x0B/0x0C bytes + { + d[format.ColumnPrecisionOffset] = newSpec.Precision; + d[format.ColumnScaleOffset] = newSpec.Scale; + } + + BinaryPrimitives.WriteUInt16LittleEndian(parts.Header.AsSpan(format.TdefMaxColumnsOffset, 2), (ushort)(maxCols + 1)); // 0x29++ + if (!newSpec.IsFixedLength) + BinaryPrimitives.WriteUInt16LittleEndian(parts.Header.AsSpan(format.TdefVariableColumnsOffset, 2), (ushort)(varCount + 1)); // 0x2B++ + return maxCols; + } + + /// Full in-place column type change, byte-for-byte like ACE (currently: an all-fixed, non-boolean + /// table whose target stays fixed and is not indexed; falls back to otherwise). + /// Edits the TDEF in place () and re-lays every row — the target's + /// OLD fixed slot is kept as dead space, its converted value appended at the new offset, count + null bitmap + /// updated. Converts values in memory first (throws on bad data before any write); runs in a transaction. + public void AlterColumnTypeInPlace(string tableName, string columnName, ColumnSpec newSpec) + { + TableDef oldDef = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' does not exist."); + ColumnDef oldTarget = oldDef.FindColumn(columnName) + ?? throw new InvalidOperationException($"Column '{columnName}' does not exist in '{tableName}'."); + EnsureColumnIsNotInRelationship(oldDef, oldTarget); + + // A long-value (Memo/OLE) target — or converting one away — needs long-value column mechanics (a §3.3.2 + // usage-map entry, LVAL pages, freeing the old value). That's out of scope for the byte-faithful in-place + // edit; the logical rebuild (Create handles long-value columns) does it correctly, if not byte-exactly. + if (newSpec.Type is JetDataType.Memo or JetDataType.Ole || oldTarget.Type is JetDataType.Memo or JetDataType.Ole) + { + RewriteColumn(tableName, columnName, newSpec); + return; + } + + // Indexes that include the target column must be rebuilt (their keys change type) — captured now. + var affectedIndexes = oldDef.Indexes + .Where(i => i.Columns.Any(col => col.Column.Index == oldTarget.Index)) + .Select(i => i.Name).ToList(); + int oldTargetId = oldTarget.ColumnId; + + // 1. Materialize (id + raw bytes + values) before touching disk; conversion throws here on bad data. + var reader = new RowInserter(_channel, oldDef); + var rows = new Table(_channel, oldDef).Rows().WithIds() + .Select(r => (r.Id, Raw: reader.ReadRow(r.Id), Values: (object?[])r.Values.Clone())) + .ToList(); + foreach (var r in rows) r.Values[oldTarget.Index] = ConvertValue(r.Values[oldTarget.Index], newSpec.Type); + + // The fixed-region length is authoritative from an existing row (its var-data-start), NOT the live + // column descriptors — those diverge once a high-offset column has been retyped to variable and left a + // dead fixed slot at the end. Fall back to the schema for an empty table (encoder derives the same). + bool hasVar = oldDef.Columns.Any(c => !c.IsFixedLength); + int oldFixedLen = rows.Count > 0 + ? FixedRegionLength(rows[0].Raw, hasVar) + : oldDef.Columns.Where(c => c.IsFixedLength && c.Type != JetDataType.Boolean) + .Select(c => c.FixedOffset + c.Length).DefaultIfEmpty(0).Max(); + + bool ownTx = !_channel.InTransaction; + if (ownTx) _channel.BeginTransaction(); + try + { + JetFormatBase format = _channel.Format; + + // 2. One TDEF edit for the whole modify: patch only the target descriptor (bump 0x29 / 0x2B — its + // appended fixed offset is the row's true fixed-region end incl. dead slots) AND re-point every + // index over the target, all into the SAME parts, then write the TDEF a single time. Each index + // re-point needs the fresh root allocated + owned-map recycled first (page work off the TDEF). + TdefParts parts = ParseTdef(oldDef.DefinitionPage); + int newTargetId = EditTargetDescriptor(parts, oldTarget, newSpec, oldFixedLen, format); + + var pending = new List<(string Name, int OldRoot, int NewRoot, bool IgnoreNulls)>(); + foreach (string ixName in affectedIndexes) + { + IndexDef index = oldDef.Indexes.First(i => string.Equals(i.Name, ixName, StringComparison.OrdinalIgnoreCase)); + int newRoot = PrepareIndexRebuild(parts, oldDef, index, oldTargetId, newTargetId); + pending.Add((ixName, index.RootPage, newRoot, index.IgnoreNulls)); + } + + WriteTdef(oldDef.DefinitionPage, parts); + _catalog.Invalidate(); + + TableDef newDef = _catalog.FindTable(tableName)!; + ColumnDef newTarget = newDef.FindColumn(columnName)!; + int newMaxId = newDef.Columns.Max(c => c.ColumnId); + int newFixedLen = newTarget.IsFixedLength ? oldFixedLen + newTarget.Length : oldFixedLen; + var writer = new RowInserter(_channel, newDef); + + // 3. Re-lay each row: old fixed region + old var chunks verbatim (incl. the dead old slot), target + // appended (a new fixed slot, or a new variable chunk); count/var-table/null-bitmap rebuilt. + foreach (var r in rows) + writer.RewriteRowRaw(r.Id, BuildRelaidRecord(r.Raw, oldFixedLen, hasVar, newTarget, r.Values, newDef.Columns, newMaxId, newFixedLen)); + + // 4. Finish each index rebuild: backfill the fresh B-tree with new-type keys, then free the old root + // (last, so the new root got the appended page rather than reusing this one) — as ACE does. + foreach (var p in pending) + { + BackfillIndex(tableName, p.Name, p.IgnoreNulls, validateUnique: true); + _allocator.Free(p.OldRoot); + } + + if (ownTx) _channel.CommitTransaction(); + } + catch when (ownTx) { _channel.RollbackTransaction(); _catalog.Invalidate(); throw; } + _catalog.Invalidate(); + } + + /// Builds the re-laid row record, matching ACE's in-place modify byte-for-byte: the OLD fixed + /// region and OLD variable chunks are kept verbatim (the dead old-target slot/chunk keeps its stale bytes), + /// the converted target is appended (a new fixed slot if it is fixed, else a new variable chunk), and the + /// leading count (= max id + 1), variable-offset table + numVar (omitted if none), and null bitmap + /// (dead-id bits set present) are rebuilt. + private static byte[] BuildRelaidRecord(byte[] oldRow, int oldFixedLen, bool hasVar, ColumnDef newTarget, + object?[] values, IReadOnlyList newCols, int newMaxId, int newFixedLen) + { + object? tv = values[newTarget.Index]; + byte[] targetBytes = tv is null + ? (newTarget.IsFixedLength ? new byte[newTarget.Length] : []) + : Types.JetTypeCodec.Encode(newTarget, tv); + + // Fixed region: old fixed bytes verbatim (incl. a dead fixed slot); append the target if it is fixed. + var newFixed = new byte[newFixedLen]; + Array.Copy(oldRow, 2, newFixed, 0, oldFixedLen); + if (newTarget.IsFixedLength && tv is not null) + Array.Copy(targetBytes, 0, newFixed, newTarget.FixedOffset, newTarget.Length); + + // Variable chunks: old chunks verbatim (incl. a dead variable chunk); append the target if it is variable. + List chunks = ExtractVarChunks(oldRow, hasVar); + if (!newTarget.IsFixedLength) chunks.Add(targetBytes); + + // Assemble via the shared row layout (count + var table + null bitmap identical to a fresh encode). + _ = newFixedLen; // == newFixed.Length + return RowEncoder.AssembleRow(newMaxId, newFixed, chunks, newCols, values); + } + + /// The length of a row's fixed-data region (bytes between the leading count and the variable data), + /// read from the row itself — its variable-offset table's last entry is the variable-data start (= 2 + fixed + /// length), or for an all-fixed row it's the whole row minus the count field and null bitmap. This is + /// authoritative over the live column descriptors, which omit dead fixed slots left by prior retypes. + private static int FixedRegionLength(byte[] row, bool hasVar) => + RowLayout.Parse(row, 2, hasVar).FixedRegionLength; + + /// Extracts a row's variable-column chunks (in variable-index order) verbatim, using the row's own + /// stored numVar. (from the schema) says whether a variable section exists at all — + /// an all-fixed table omits it entirely, so its "numVar" bytes would otherwise be misread from fixed data. + private static List ExtractVarChunks(byte[] row, bool hasVar) + { + RowLayout layout = RowLayout.Parse(row, 2, hasVar); + var chunks = new List(layout.NumVar); + for (int j = 0; j < layout.NumVar; j++) + chunks.Add(layout.VarChunk(j).ToArray()); + return chunks; + } + + /// Prepares one index rebuild over a just-modified column, matching ACE's reconstruction: allocate a + /// fresh empty root leaf (appended — the old root is left orphaned) and extend/recycle the owned usage map to + /// track it, then re-point the index-data block within to the new root with the + /// target's burned column id and the new usage-map row (bumping the stats block). The caller writes the TDEF + /// once, then backfills the fresh B-tree and frees the old root. Returns the new root page. + private int PrepareIndexRebuild(TdefParts parts, TableDef table, IndexDef index, int oldTargetId, int newTargetId) + { + JetFormatBase format = _channel.Format; + + // A fresh empty root leaf, appended; the old root is freed by the caller afterwards (ACE reuses it on the + // next alloc). This and the owned-map recycle touch pages OFF the TDEF, so they happen before the single + // TDEF write; only the index-data block + stats mutations below go into the shared parts. + int newRoot = _allocator.Allocate(); + WriteEmptyLeafIndexPage(format, newRoot, owner: table.DefinitionPage); + + int usageMapPage = parts.Header[format.TdefOwnedPagesOffset + 1] + | (parts.Header[format.TdefOwnedPagesOffset + 2] << 8) | (parts.Header[format.TdefOwnedPagesOffset + 3] << 16); + + // Recycle the index's owned-map row (ACE soft-deletes the old row and reuses its space for a new row + // tracking the new root), reading the current row number from the (as-yet-unwritten) data block. + Span block = parts.DataBlocks[index.RealIndexOrdinal]; + int oldUsageRow = block[IndexBlockFormat.UsageMapRowOffset]; + int newRow = RecycleOwnedMapRow(format, usageMapPage, oldUsageRow, newRoot); + + // Re-point the index-data block: the target's burned id in its column slot, the new root, the new + // usage-map row; bump the stats block (+0x00, observed 0→1 on ACE's rebuild). + for (int slot = 0; slot < IndexBlockFormat.MaxColumns; slot++) + { + int at = IndexBlockFormat.ColumnsOffset + slot * IndexBlockFormat.ColumnSlotSize; + if (BinaryPrimitives.ReadInt16LittleEndian(block.Slice(at, 2)) == oldTargetId) + BinaryPrimitives.WriteInt16LittleEndian(block.Slice(at, 2), (short)newTargetId); + } + block[IndexBlockFormat.UsageMapRowOffset] = (byte)newRow; + BinaryPrimitives.WriteInt32LittleEndian(block.Slice(IndexBlockFormat.RootPageOffset, 4), newRoot); + Span stats = parts.Stats[index.RealIndexOrdinal]; + BinaryPrimitives.WriteInt32LittleEndian(stats, BinaryPrimitives.ReadInt32LittleEndian(stats) + 1); + return newRoot; + } + + /// Recycles an index's owned-pages usage-map row exactly the way ACE does on a rebuild: append a + /// fresh row and set the new root's bit (ACE's first write, at the appended slot), then MOVE that map into + /// the old row's freed slot and soft-delete the old row (a 0-length deleted+overflow tombstone) — leaving + /// the appended slot's bytes stale in free space, byte-for-byte as ACE does. Returns the new row number. + private int RecycleOwnedMapRow(JetFormatBase format, int usageMapPage, int oldRow, int newRoot) + { + const int MapLength = 1 + 4 + 64; + int dir = format.DataRowDirectoryOffset; + int rowCount = BinaryPrimitives.ReadUInt16LittleEndian(_channel.ReadPage(usageMapPage).Span.Slice(format.DataRowCountOffset, 2)); + int newRow = rowCount; + + // ACE's first write: append a fresh row and set the new root's bit (this copy is later left stale). + AppendEmptyUsageMapRow(format, usageMapPage, newRow); + new UsageMapWriter(_channel).SetBit(newRow, usageMapPage, newRoot, set: true); + + // Then move that map into the old row's freed slot and turn the old row into a tombstone; the appended + // slot's bytes are left in place (stale, in free space) — matching ACE's leftover. + byte[] page = _channel.ReadPage(usageMapPage).Span.ToArray(); + int freshOffset = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(dir + newRow * 2, 2)) & RowPointer.OffsetMask; + int oldOffset = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(dir + oldRow * 2, 2)) & RowPointer.OffsetMask; + int aboveOffset = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(dir + (oldRow - 1) * 2, 2)) & RowPointer.OffsetMask; + + Array.Copy(page, freshOffset, page, oldOffset, MapLength); // move the map into the old slot + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(dir + newRow * 2, 2), (ushort)oldOffset); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(dir + oldRow * 2, 2), + (ushort)(aboveOffset | RowPointer.DeletedFlag | RowPointer.OverflowFlag)); // old row → 0-length tombstone + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), + (ushort)(oldOffset - (dir + (rowCount + 1) * 2))); + _channel.WritePage(usageMapPage, page); + return newRow; + } + + /// Converts a stored value to the CLR type for a new column type (ALTER COLUMN). NULL stays NULL; + /// an unconvertible value throws (as ACE's rewrite would). + private static object? ConvertValue(object? value, JetDataType type) + { + if (value is null) return null; + var inv = System.Globalization.CultureInfo.InvariantCulture; + return type switch + { + JetDataType.Boolean => value is bool b ? b : Convert.ToBoolean(value, inv), + JetDataType.Byte => Convert.ToByte(value, inv), + JetDataType.Int16 => Convert.ToInt16(value, inv), + JetDataType.Int32 => Convert.ToInt32(value, inv), + JetDataType.Int64 => Convert.ToInt64(value, inv), + JetDataType.Single => Convert.ToSingle(value, inv), + JetDataType.Double => Convert.ToDouble(value, inv), + JetDataType.Currency or JetDataType.FixedPoint => Convert.ToDecimal(value, inv), + JetDataType.DateTime => value is DateTime d ? d : Convert.ToDateTime(value, inv), + JetDataType.Text or JetDataType.Memo => Convert.ToString(value, inv), + JetDataType.Guid => value is Guid g ? g : Guid.Parse(value.ToString()!), + JetDataType.Binary or JetDataType.Ole => value as byte[] ?? System.Text.Encoding.Unicode.GetBytes(value.ToString()!), + _ => value, + }; + } + + + /// Appends the new column's descriptor (after the existing descriptors) and its name (after the + /// existing names) to the column region. + private static void AppendColumnToParts(TdefParts parts, int colCount, byte[] descriptor, string name, JetFormatBase format) + { + int namesStart = colCount * format.ColumnDescriptorSize; + ReadOnlySpan cols = parts.Columns; + + byte[] nameBytes = System.Text.Encoding.Unicode.GetBytes(name); + var blob = new List(parts.Columns.Length + descriptor.Length + 2 + nameBytes.Length); + blob.AddRange(cols[..namesStart].ToArray()); // existing descriptors + blob.AddRange(descriptor); // new descriptor + blob.AddRange(cols[namesStart..].ToArray()); // existing names + blob.Add((byte)nameBytes.Length); blob.Add((byte)(nameBytes.Length >> 8)); + blob.AddRange(nameBytes); // new name + parts.Columns = [.. blob]; + } + + /// + /// Drops a column byte-faithfully with ACE (probed): a **metadata-only TDEF edit** — removes the + /// column's 25-byte descriptor and its name, and decrements the live ColumnCount (0x2D). It does + /// **not** renumber the surviving columns, recompute their fixed offsets/variable indexes, decrement the + /// VariableColumnCount (0x2B stays a high-water mark), or rewrite existing rows — survivors keep + /// their stored variable index (§3.4) so old rows still decode (the dropped column's data becomes dead + /// bytes). Returns false if the column doesn't exist. Multi-page TDEFs are handled. Throws for a column + /// that backs an index/key (drop that first) or a memo/OLE column (its long-value usage-map entry/pages + /// aren't handled yet). + /// + public bool DropColumn(string tableName, string columnName) + { + TableDef table = _catalog.FindTable(tableName) + ?? throw new InvalidOperationException($"Table '{tableName}' was not found."); + ColumnDef? col = table.Columns.FirstOrDefault(c => string.Equals(c.Name, columnName, StringComparison.OrdinalIgnoreCase)); + if (col is null) return false; + + // ACE rejects dropping a column that participates in a relationship (as the child FK column or the + // referenced parent key) — even a NO INDEX FK with no backing index — with "It is part of one or more + // relationships"; you must drop the relationship first. This is correct, permanent behaviour (not a + // gap), so mirror it. Verified vs ACE. + if (_catalog.Relationships.Any(r => + (string.Equals(r.Table, tableName, StringComparison.OrdinalIgnoreCase) + && r.Columns.Any(c => string.Equals(c.Column, columnName, StringComparison.OrdinalIgnoreCase))) || + (string.Equals(r.ReferencedTable, tableName, StringComparison.OrdinalIgnoreCase) + && r.Columns.Any(c => string.Equals(c.ReferencedColumn, columnName, StringComparison.OrdinalIgnoreCase))))) + throw new InvalidOperationException( + $"Cannot drop column '{columnName}': it is part of one or more relationships — drop the relationship first."); + + // ACE likewise rejects dropping an indexed/keyed column ("part of an index or is needed by the + // system"); the index must be dropped first. Also correct, permanent behaviour. Verified vs ACE. + if (table.Indexes.Any(ix => ix.Columns.Any(c => c.Column.ColumnId == col.ColumnId))) + throw new InvalidOperationException( + $"Cannot drop column '{columnName}': it is part of an index or key — drop the index/constraint first."); + + if (col.Type is JetDataType.Memo or JetDataType.Ole) + throw new NotSupportedException( + $"DROP COLUMN '{columnName}': dropping a memo/OLE (long-value) column is not supported yet."); + + TdefParts parts = ParseTdef(table.DefinitionPage); // stitches continuation pages for a multi-page TDEF + RemoveColumnFromParts(parts, table.Columns.Count, col.Index, _channel.Format); + WriteTdef(table.DefinitionPage, parts); + RemoveColumnProperties(table.DefinitionPage, columnName); // drop its DefaultValue/Required from LvProp (ACE does) + _catalog.Invalidate(); + return true; + } + + /// Removes a dropped column's extended-property block (DefaultValue, Required, …) from its + /// table's MSysObjects.LvProp blob — what ACE does on DROP COLUMN (verified). Surgically removes + /// just that column's block (keeps the name pool + other columns' blocks), re-stores the smaller blob on + /// an LvProp page and updates the row. No-op when the column had no properties. + private void RemoveColumnProperties(int tdefPage, string columnName) + { + TableDef msys = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIdx = (msys.FindColumn("Id") ?? throw new InvalidOperationException("MSysObjects is missing 'Id'.")).Index; + ColumnDef lvProp = msys.FindColumn("LvProp") ?? throw new InvalidOperationException("MSysObjects is missing 'LvProp'."); + var table = new Table(_channel, msys); + + foreach ((RowId id, object?[] values) in table.Rows().WithIds()) + { + if (values[idIdx] is null || Convert.ToInt32(values[idIdx]) != tdefPage) continue; + if (values[lvProp.Index] is not byte[] { Length: > 0 } blob) return; + + byte[] cleaned = PropertyBlob.RemoveOwner(blob, columnName); + if (cleaned.Length == blob.Length) return; // the column had no property block — nothing to remove + + byte[] descriptor = new RowInserter(_channel, msys).StorePackedLongValue(lvProp.ColumnId, cleaned); + values[lvProp.Index] = new LongValueDescriptor(descriptor); + table.Update(id, values, new HashSet { lvProp.Index }); + return; + } + } + + /// Removes the descriptor + name of the column at from the + /// column region and decrements the header's live ColumnCount (0x2D). VariableColumnCount (0x2B) is + /// deliberately left unchanged — ACE keeps it as a high-water mark (verified). + private static void RemoveColumnFromParts(TdefParts parts, int colCount, int removeIndex, JetFormatBase format) + { + int descSize = format.ColumnDescriptorSize; + ReadOnlySpan cols = parts.Columns; + + var descriptors = new List(colCount); + for (int i = 0; i < colCount; i++) + descriptors.Add(cols.Slice(i * descSize, descSize).ToArray()); + + int np = colCount * descSize; + var names = new List(colCount); + for (int i = 0; i < colCount; i++) + { + int len = BinaryPrimitives.ReadUInt16LittleEndian(cols.Slice(np, 2)); + names.Add(cols.Slice(np, 2 + len).ToArray()); + np += 2 + len; + } + + descriptors.RemoveAt(removeIndex); + names.RemoveAt(removeIndex); + + var blob = new List(parts.Columns.Length); + foreach (byte[] d in descriptors) blob.AddRange(d); + foreach (byte[] n in names) blob.AddRange(n); + parts.Columns = [.. blob]; + + BinaryPrimitives.WriteUInt16LittleEndian(parts.Header.AsSpan(format.TdefColumnCountOffset, 2), (ushort)(colCount - 1)); + } + + /// True if is the incoming relationship block that cross-links to the + /// child's outgoing block number on the child's TDEF page (info block layout: +0x0C fk_type, + /// +0x0D child block number, +0x11 child page). + private static bool IsIncomingBlockFor(byte[] info, int childBlockNum, int childPage) => + info[IndexBlockFormat.InfoFkTypeOffset] == FkTypeIncoming && + (int)BinaryPrimitives.ReadUInt32LittleEndian(info.AsSpan(IndexBlockFormat.InfoFkNumberOffset, 4)) == childBlockNum && + BinaryPrimitives.ReadInt32LittleEndian(info.AsSpan(IndexBlockFormat.InfoFkTablePageOffset, 4)) == childPage; + + /// Soft-deletes every MSysRelationships row for the named relationship. + private void SoftDeleteRelationshipRows(string name) + { + TableDef msys = _catalog.FindTable("MSysRelationships") + ?? throw new InvalidOperationException("MSysRelationships catalog table was not found."); + int nameIdx = (msys.FindColumn("szRelationship") + ?? throw new InvalidOperationException("MSysRelationships is missing the 'szRelationship' column.")).Index; + + var rows = new List(); + foreach ((RowId id, object?[] values) in new Table(_channel, msys).Rows().WithIds()) + if (string.Equals(values[nameIdx] as string, name, StringComparison.OrdinalIgnoreCase)) + rows.Add(id); + foreach (RowId id in rows) SoftDeleteRow(id); + } + + /// The name text of a TDEF name entry (2-byte UTF-16 length, then the chars). + private static string NameOf(byte[] nameEntry) => + System.Text.Encoding.Unicode.GetString(nameEntry, 2, BinaryPrimitives.ReadUInt16LittleEndian(nameEntry.AsSpan(0, 2))); + + /// The parsed regions of a single-page table definition, for surgical block removal. + private sealed class TdefParts + { + public required byte[] Header; // [0, TdefRealIndexBlockOffset) + public required List Stats; // one 12-byte stats block per data index + public required byte[] Columns; // column descriptors + names region + public required List DataBlocks; // one 52-byte index-data block per data index + public required List<(byte[] Info, byte[] Name)> Logical; // 28-byte info block + its name, name-sorted + public required byte[] Lval; // §3.3.2 list + terminator + public IReadOnlyList Continuations = []; // continuation-page numbers (multi-page TDEF) + } + + private TdefParts ParseTdef(int tdefPage) + { + JetFormatBase format = _channel.Format; + // Stitch any continuation pages into one contiguous buffer (offsets are absolute from page 1), so the + // surgery below works the same for single- and multi-page definitions. + (LibRed.IO.PageBuffer buf, IReadOnlyList continuations) = ReadDefinition(tdefPage); + + int dataCount = buf.ReadInt32(format.TdefIndexCountOffset); + int logicalCount = buf.ReadInt32(format.TdefRealIndexCountOffset); + int colCount = buf.ReadUInt16(format.TdefColumnCountOffset); + + int statsStart = format.TdefRealIndexBlockOffset; + int afterStats = statsStart + dataCount * format.RealIndexEntrySize; + int pos = afterStats + colCount * format.ColumnDescriptorSize; + for (int i = 0; i < colCount; i++) pos += 2 + buf.ReadUInt16(pos); + int afterColumns = pos; + int infoStart = afterColumns + dataCount * IndexBlockFormat.DataBlockSize; + int namePos = infoStart + logicalCount * IndexBlockFormat.InfoBlockSize; + int defEnd = buf.ReadInt32(format.TdefLengthOffset); + + var stats = new List(dataCount); + for (int i = 0; i < dataCount; i++) stats.Add(buf.Slice(statsStart + i * format.RealIndexEntrySize, format.RealIndexEntrySize).ToArray()); + var dataBlocks = new List(dataCount); + for (int i = 0; i < dataCount; i++) dataBlocks.Add(buf.Slice(afterColumns + i * IndexBlockFormat.DataBlockSize, IndexBlockFormat.DataBlockSize).ToArray()); + + var logical = new List<(byte[], byte[])>(logicalCount); + int np = namePos; + for (int i = 0; i < logicalCount; i++) + { + byte[] info = buf.Slice(infoStart + i * IndexBlockFormat.InfoBlockSize, IndexBlockFormat.InfoBlockSize).ToArray(); + int len = buf.ReadUInt16(np); + byte[] nm = buf.Slice(np, 2 + len).ToArray(); + np += 2 + len; + logical.Add((info, nm)); + } + + return new TdefParts + { + Header = buf.Slice(0, statsStart).ToArray(), + Stats = stats, + Columns = buf.Slice(afterStats, afterColumns - afterStats).ToArray(), + DataBlocks = dataBlocks, + Logical = logical, + Lval = buf.Slice(np, defEnd - np).ToArray(), + Continuations = continuations, + }; + } + + /// Removes a data index (its stats + data block at , + /// decrementing the data-ordinal reference (+0x08) of every remaining info block that pointed past it) + /// and every logical block matching (with its name). + private static void RemoveTdefBlocks(TdefParts parts, int? removeDataOrdinal, Func<(byte[] Info, byte[] Name), bool> removeLogical) + { + if (removeDataOrdinal is int ord) + { + parts.Stats.RemoveAt(ord); + parts.DataBlocks.RemoveAt(ord); + foreach ((byte[] info, _) in parts.Logical) + { + int num2 = BinaryPrimitives.ReadInt32LittleEndian(info.AsSpan(0x08, 4)); + if (num2 > ord) BinaryPrimitives.WriteInt32LittleEndian(info.AsSpan(0x08, 4), num2 - 1); + } + } + parts.Logical.RemoveAll(b => removeLogical(b)); + } + + private void WriteTdef(int tdefPage, TdefParts parts) + { + JetFormatBase format = _channel.Format; + var body = new List(format.PageSize); + body.AddRange(parts.Header); + foreach (byte[] s in parts.Stats) body.AddRange(s); + body.AddRange(parts.Columns); + foreach (byte[] d in parts.DataBlocks) body.AddRange(d); + foreach ((byte[] info, _) in parts.Logical) body.AddRange(info); + foreach ((_, byte[] nm) in parts.Logical) body.AddRange(nm); + body.AddRange(parts.Lval); + byte[] def = [.. body]; + int defEnd = def.Length; + + BinaryPrimitives.WriteInt32LittleEndian(def.AsSpan(format.TdefIndexCountOffset, 4), parts.DataBlocks.Count); + BinaryPrimitives.WriteInt32LittleEndian(def.AsSpan(format.TdefRealIndexCountOffset, 4), parts.Logical.Count); + BinaryPrimitives.WriteInt32LittleEndian(def.AsSpan(format.TdefLengthOffset, 4), defEnd); + + // Write across the first page and continuation pages as needed (reusing the existing ones) — handles a + // definition that shrinks to one page, stays multi-page, or grows past a page (e.g. ADD COLUMN). + WriteDefinition(tdefPage, def, parts.Continuations); + } + + /// Marks a row deleted by setting the deleted flag (0x8000) on its slot-directory entry — a + /// Jet soft delete: the row bytes stay but scans (and Access) skip it. + private void SoftDeleteRow(RowId id) + { + JetFormatBase format = _channel.Format; + byte[] page = _channel.ReadPage(id.Page).Span.ToArray(); + int dirOffset = format.DataRowDirectoryOffset + id.Row * 2; + ushort entry = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(dirOffset, 2)); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(dirOffset, 2), (ushort)(entry | 0x8000)); + _channel.WritePage(id.Page, page); + } + + /// The data-block ordinal of a table's own index over the FK's referenced columns (for a + /// self-reference — normally the primary key). + private static int ReferencedOrdinalIn(TableDef table, RelationshipSpec fk) + { + var refColumns = fk.Columns.Select(c => c.ReferencedColumn).ToList(); + IndexDef refIndex = table.Indexes.FirstOrDefault(ix => + ix.Columns.Select(c => c.Column.Name).SequenceEqual(refColumns, StringComparer.OrdinalIgnoreCase)) + ?? throw new InvalidOperationException( + $"Self-referencing foreign key '{fk.Name}' references ({string.Join(", ", refColumns)}), which is not a key or index of '{table.Name}'."); + return refIndex.RealIndexOrdinal; + } + + /// The child (outgoing) end of a relationship: index_num2 = the child's own FK data block, + /// Fk_type = outgoing, Fk_number/Fk_table = the parent's incoming block. Mirrors the inline-FK block + /// TdefBuilder writes at creation time. + private static byte[] BuildOutgoingInfoBlock(int number, int dataOrdinal, byte fkType, int fkNumber, int fkTablePage, byte upd, byte del) + { + var b = new byte[IndexBlockFormat.InfoBlockSize]; + BinaryPrimitives.WriteUInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoMarkerOffset, 4), JetFormatBase.TdefRecordMarker); + BinaryPrimitives.WriteInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoNumberOffset, 4), number); + BinaryPrimitives.WriteInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoDataNumberOffset, 4), dataOrdinal); + b[IndexBlockFormat.InfoFkTypeOffset] = fkType; + BinaryPrimitives.WriteUInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoFkNumberOffset, 4), (uint)fkNumber); + BinaryPrimitives.WriteInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoFkTablePageOffset, 4), fkTablePage); + b[IndexBlockFormat.InfoUpdateActionOffset] = upd; + b[IndexBlockFormat.InfoDeleteActionOffset] = del; + b[IndexBlockFormat.InfoTypeOffset] = IndexBlockFormat.TypeForeign; + return b; + } + + + /// Reads a table definition, stitching continuation pages into one contiguous buffer (in + /// the absolute coordinate space the descriptors use), and returns the continuation page numbers. + private (LibRed.IO.PageBuffer Buffer, IReadOnlyList ContinuationPages) ReadDefinition(int firstPage) + => TdefChainReader.Read(_channel, firstPage); + + /// + /// Writes a definition buffer across the first page and, if it overflows, continuation pages (each + /// [0x02][0x01][free:2][next:4] then data). The first page carries the whole definition in its + /// coordinate space; each continuation contributes -offset data. + /// Existing continuation pages are reused before allocating new ones. + /// + private void WriteDefinition(int firstPage, byte[] def, IReadOnlyList reusePages) + { + JetFormatBase format = _channel.Format; + int ps = format.PageSize; + int nextOffset = format.TdefNextPageOffset; + + if (def.Length + JetFormatBase.TdefContinuationHeaderSize <= ps) + { + var only = new byte[ps]; + def.CopyTo(only, 0); + BinaryPrimitives.WriteInt32LittleEndian(only.AsSpan(nextOffset, 4), 0); + BinaryPrimitives.WriteUInt16LittleEndian(only.AsSpan(format.TdefFreeSpaceOffset, 2), (ushort)(ps - def.Length - JetFormatBase.TdefContinuationHeaderSize)); + _channel.WritePage(firstPage, only); + return; + } + + // Plan the continuation chunks: each holds up to (ps - header) data; the last also leaves the reserve. + var chunks = new List<(int Offset, int Length)>(); + for (int offset = ps; offset < def.Length;) + { + int remaining = def.Length - offset; + int length = remaining <= ps - JetFormatBase.TdefContinuationHeaderSize - JetFormatBase.TdefContinuationHeaderSize + ? remaining + : ps - JetFormatBase.TdefContinuationHeaderSize; + chunks.Add((offset, length)); + offset += length; + } + + int reuse = 0; + int[] pageNumbers = chunks.Select(_ => reuse < reusePages.Count ? reusePages[reuse++] : _allocator.Allocate()).ToArray(); + + var page1 = new byte[ps]; + Array.Copy(def, 0, page1, 0, ps); // page 1 is completely full in a multi-page definition + BinaryPrimitives.WriteInt32LittleEndian(page1.AsSpan(nextOffset, 4), pageNumbers[0]); + BinaryPrimitives.WriteUInt16LittleEndian(page1.AsSpan(format.TdefFreeSpaceOffset, 2), 0); + _channel.WritePage(firstPage, page1); + + for (int i = 0; i < chunks.Count; i++) + { + var (offset, length) = chunks[i]; + var page = new byte[ps]; + page[0] = (byte)PageType.TableDefinition; + page[1] = 0x01; + Array.Copy(def, offset, page, JetFormatBase.TdefContinuationHeaderSize, length); + int next = i + 1 < pageNumbers.Length ? pageNumbers[i + 1] : 0; + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(nextOffset, 4), next); + int free = next != 0 ? 0 : ps - JetFormatBase.TdefContinuationHeaderSize - length - JetFormatBase.TdefContinuationHeaderSize; + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.TdefFreeSpaceOffset, 2), (ushort)free); + _channel.WritePage(pageNumbers[i], page); + } + } + + private static byte[] BuildIndexDataBlock(IReadOnlyList<(int Id, bool Ascending)> columns, int rootPage, int usageRow, int usagePage, bool unique, bool required, bool ignoreNulls) + { + var b = new byte[IndexBlockFormat.DataBlockSize]; + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(b.AsSpan(0, 4), IndexBlockFormat.DataMarker); + for (int slot = 0; slot < IndexBlockFormat.MaxColumns; slot++) + { + int entry = IndexBlockFormat.ColumnsOffset + slot * IndexBlockFormat.ColumnSlotSize; + if (slot < columns.Count) + { + System.Buffers.Binary.BinaryPrimitives.WriteInt16LittleEndian(b.AsSpan(entry, 2), (short)columns[slot].Id); + b[entry + 2] = columns[slot].Ascending ? IndexBlockFormat.ColumnAscending : (byte)0x00; // 0x00 = descending + } + else System.Buffers.Binary.BinaryPrimitives.WriteInt16LittleEndian(b.AsSpan(entry, 2), IndexBlockFormat.ColumnUnused); + } + b[IndexBlockFormat.UsageMapRowOffset] = (byte)usageRow; + b[IndexBlockFormat.UsageMapRowOffset + 1] = (byte)usagePage; + b[IndexBlockFormat.UsageMapRowOffset + 2] = (byte)(usagePage >> 8); + b[IndexBlockFormat.UsageMapRowOffset + 3] = (byte)(usagePage >> 16); + System.Buffers.Binary.BinaryPrimitives.WriteInt32LittleEndian(b.AsSpan(IndexBlockFormat.RootPageOffset, 4), rootPage); + ushort flags = IndexFlags.AlwaysSet; + if (unique) flags |= IndexFlags.Unique; + if (ignoreNulls) flags |= IndexFlags.IgnoreNulls; + if (required) flags |= IndexFlags.Required; + System.Buffers.Binary.BinaryPrimitives.WriteUInt16LittleEndian(b.AsSpan(IndexBlockFormat.FlagsOffset, 2), flags); + return b; + } + + private static byte[] BuildPlainInfoBlock(int number, int dataOrdinal, bool isPrimary) + { + var b = new byte[IndexBlockFormat.InfoBlockSize]; + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoMarkerOffset, 4), JetFormatBase.TdefRecordMarker); + System.Buffers.Binary.BinaryPrimitives.WriteInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoNumberOffset, 4), number); + System.Buffers.Binary.BinaryPrimitives.WriteInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoDataNumberOffset, 4), dataOrdinal); + System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoFkNumberOffset, 4), IndexBlockFormat.NoForeignKey); // no foreign key + b[IndexBlockFormat.InfoUpdateActionOffset] = IndexBlockFormat.PlainAction; + b[IndexBlockFormat.InfoDeleteActionOffset] = IndexBlockFormat.PlainAction; + b[IndexBlockFormat.InfoTypeOffset] = isPrimary ? IndexBlockFormat.TypePrimary : IndexBlockFormat.TypeSecondary; + return b; + } + + private static int ReadInt24(LibRed.IO.PageBuffer buf, int offset) => + buf.ReadByte(offset) | (buf.ReadByte(offset + 1) << 8) | (buf.ReadByte(offset + 2) << 16); + + /// + /// Adds an incoming-relationship logical index-info block (§3.6) to a parent table's already-written + /// TDEF: it reuses the parent's referenced-key data block (no new data block), links back to the + /// child's outgoing block, and grows the logical-index list by one (kept name-sorted). Single + /// definition page only (throws if the definition spans continuation pages). + /// + private void AddIncomingRelationshipBlock(IncomingRelationship inc) + { + JetFormatBase format = _channel.Format; + var buf = _channel.ReadPage(inc.ParentPage); + if (buf.ReadInt32(format.TdefNextPageOffset) != 0) + throw new NotSupportedException("Adding a relationship to a multi-page table definition is not supported yet."); + + int dataCount = buf.ReadInt32(format.TdefIndexCountOffset); // 0x33 real data blocks + int logicalCount = buf.ReadInt32(format.TdefRealIndexCountOffset); // 0x2F logical blocks + int colCount = buf.ReadUInt16(format.TdefColumnCountOffset); + + // Walk to the logical index-info blocks: stats + column descriptors -> column names -> data blocks. + int pos = format.TdefRealIndexBlockOffset + dataCount * format.RealIndexEntrySize + + colCount * format.ColumnDescriptorSize; + for (int i = 0; i < colCount; i++) pos += 2 + buf.ReadUInt16(pos); + int infoStart = pos + dataCount * IndexBlockFormat.DataBlockSize; + + var blocks = new List(logicalCount + 1); + for (int i = 0; i < logicalCount; i++) + blocks.Add(buf.Slice(infoStart + i * IndexBlockFormat.InfoBlockSize, IndexBlockFormat.InfoBlockSize).ToArray()); + + int namePos = infoStart + logicalCount * IndexBlockFormat.InfoBlockSize; + var names = new List(logicalCount + 1); + var nameBytes = new List(logicalCount + 1); + for (int i = 0; i < logicalCount; i++) + { + int len = buf.ReadUInt16(namePos); + nameBytes.Add(buf.Slice(namePos, 2 + len).ToArray()); + names.Add(System.Text.Encoding.Unicode.GetString(buf.Slice(namePos + 2, len))); + namePos += 2 + len; + } + + int defEnd = buf.ReadInt32(format.TdefLengthOffset); + byte[] lvalRegion = buf.Slice(namePos, defEnd - namePos).ToArray(); // §3.3.2 list + 0xFFFF terminator + + string newName = NextHiddenRelationshipName(names); + int k = names.Count(n => string.CompareOrdinal(n, newName) < 0); // name-sorted insert position + blocks.Insert(k, BuildIncomingInfoBlock(inc)); + nameBytes.Insert(k, EncodeName(newName)); + + int newDefEnd = infoStart + blocks.Count * IndexBlockFormat.InfoBlockSize + nameBytes.Sum(n => n.Length) + lvalRegion.Length; + if (newDefEnd > format.PageSize - JetFormatBase.TdefContinuationHeaderSize) + throw new NotSupportedException("No room in the table definition for another relationship (needs a continuation page)."); + + var page = buf.Span.ToArray(); + int w = infoStart; + foreach (byte[] b in blocks) { b.CopyTo(page.AsSpan(w)); w += b.Length; } + foreach (byte[] n in nameBytes) { n.CopyTo(page.AsSpan(w)); w += n.Length; } + lvalRegion.CopyTo(page.AsSpan(w)); + + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefRealIndexCountOffset, 4), logicalCount + 1); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefLengthOffset, 4), newDefEnd); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.TdefFreeSpaceOffset, 2), + (ushort)(format.PageSize - newDefEnd - JetFormatBase.TdefContinuationHeaderSize)); + _channel.WritePage(inc.ParentPage, page); + } + + private byte[] BuildIncomingInfoBlock(IncomingRelationship inc) + { + var b = new byte[IndexBlockFormat.InfoBlockSize]; + BinaryPrimitives.WriteUInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoMarkerOffset, 4), JetFormatBase.TdefRecordMarker); + BinaryPrimitives.WriteInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoNumberOffset, 4), inc.Number); // index_num + BinaryPrimitives.WriteInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoDataNumberOffset, 4), inc.ReferencedOrdinal); // index_num2 -> referenced-key data block + b[IndexBlockFormat.InfoFkTypeOffset] = FkTypeIncoming; + BinaryPrimitives.WriteUInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoFkNumberOffset, 4), inc.ChildBlockNumber); // cross-link to child block + BinaryPrimitives.WriteInt32LittleEndian(b.AsSpan(IndexBlockFormat.InfoFkTablePageOffset, 4), inc.ChildPage); + b[IndexBlockFormat.InfoUpdateActionOffset] = inc.UpdateAction; + b[IndexBlockFormat.InfoDeleteActionOffset] = inc.DeleteAction; + b[IndexBlockFormat.InfoTypeOffset] = IndexBlockFormat.TypeForeign; + return b; + } + + private static byte[] EncodeName(string name) + { + byte[] chars = System.Text.Encoding.Unicode.GetBytes(name); + var entry = new byte[2 + chars.Length]; + BinaryPrimitives.WriteUInt16LittleEndian(entry.AsSpan(0, 2), (ushort)chars.Length); + chars.CopyTo(entry.AsSpan(2)); + return entry; + } + + /// The hidden name Access gives an incoming relationship index: ".r" + a letter unique + /// among the table's index names (Access starts at 'B'). + private static string NextHiddenRelationshipName(IReadOnlyCollection existing) + { + for (char c = 'B'; c <= 'Z'; c++) + { + string candidate = $".r{c}"; + if (!existing.Contains(candidate)) return candidate; + } + return $".r{Guid.NewGuid():N}"[..8]; + } + + /// Writes an empty B-tree leaf (no entries) to serve as a fresh index root. + private void WriteEmptyLeafIndexPage(JetFormatBase format, int pageNumber, int owner) + { + const int EntryDataOffset = 0x1E0; + const int OwnerOffset = 0x04; + + var page = new byte[format.PageSize]; + page[0] = (byte)PageType.LeafIndexPage; + page[1] = 0x01; // page flags (observed constant) + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(OwnerOffset, 4), owner); + // No entries: empty mask, no prefix compression, free space is the whole entry region. + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), + (ushort)(format.PageSize - EntryDataOffset)); + _channel.WritePage(pageNumber, page); + } + + /// + /// Writes a data page of empty inline usage-map records — like + /// Access does for a fresh table that has no data page yet. Each record is + /// [0x00][startPage = 0][all-zero bitmap]: row 0 = table owned-pages, row 1 = table + /// free-pages, and (with an index) row 2 = the index's owned-pages. The first insert allocates a + /// data page and sets the corresponding bit. + /// + private void WriteUsageMaps(JetFormatBase format, int pageNumber, int mapCount) + { + // An empty inline usage map: type byte + start page (0) + a bitmap of all-zero bytes. Access + // writes a full-width bitmap; match its record length so the page layout matches byte-for-byte. + const int MapLength = UsageMapRecordLength; + + var page = new byte[format.PageSize]; + page[0] = (byte)PageType.DataPage; + page[1] = 0x01; // page flags (observed constant) + // Owner of a usage-map page is 0 (it belongs to no table). + + int offset = format.PageSize; + for (int row = 0; row < mapCount; row++) + { + offset -= MapLength; + // page[offset] already 0x00 (inline type), start page already 0, bitmap already zero. + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowDirectoryOffset + row * 2, 2), (ushort)offset); + } + + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataRowCountOffset, 2), (ushort)mapCount); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.DataFreeSpaceOffset, 2), + (ushort)(offset - format.DataRowDirectoryOffset - mapCount * 2)); + _channel.WritePage(pageNumber, page); + } + + // Jet/ACE hard limit on columns in a table. + private const int MaxColumnsPerTable = 255; + + // An inline usage-map record: type byte + 4-byte start page + a 64-byte all-zero bitmap = 69 bytes. + private const int UsageMapRecordLength = 1 + 4 + 64; + + // A user table's parent object is the database's "Tables" container; observed constant. + + // A user table's owner + grantee SIDs, matching the cluster DatabaseCreator seeds for the system objects + // (Users owns user objects; Users + Admin get the user-table grants). + private static readonly byte[] DefaultOwner = DatabaseCreator.SidUsers; // Users/Engine (per-file masked) + private static readonly byte[] AdminSid = DatabaseCreator.SidAdmin; // Admin user (per-file masked) + + /// + /// Adds the MSysObjects row describing the new table so Access (and the catalog) see it: Id = + /// TDEF page, ParentId = Tables container, Type = table, Name, Flags, Owner, and create/update + /// dates. Any column DEFAULT values are written into the extended-properties blob (LvProp, an OLE + /// long value) as DefaultValue properties. MSysObjects' own indexes (Id, and the composite + /// ParentId+Name used for name resolution) are maintained so Access can open the table by name. + /// + private void AddCatalogRow(string name, int tdefPage, + IReadOnlyList columnProps, + IReadOnlyList<(string Name, string Expression)> checkConstraints) + { + TableDef msysObjects = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + + DateTime now = DateTime.Now; + var values = new object?[msysObjects.Columns.Count]; + SetByName(msysObjects, values, "Id", tdefPage); + SetByName(msysObjects, values, "ParentId", CatalogFormat.ObjectContainerParentId); + SetByName(msysObjects, values, "Type", (short)1); // table object + SetByName(msysObjects, values, "Name", name); + SetByName(msysObjects, values, "Flags", 0); + SetByName(msysObjects, values, "Owner", DefaultOwner); + SetByName(msysObjects, values, "DateCreate", now); + SetByName(msysObjects, values, "DateUpdate", now); + + // Per-column properties (DefaultValue / Required) and CHECK constraints (a table property) both + // live in the object's extended-properties (LvProp) blob. + var props = columnProps.ToList(); + if (checkConstraints.Count > 0) + props.Add(new PropertyBlob.Property("", PropertyBlob.CheckConstraintsProperty, + PropertyBlob.WriteCheckList(checkConstraints))); + + var inserter = new RowInserter(_channel, msysObjects); + if (props.Count > 0) + { + // Access reads object properties only from an LVAL-page long value, not an inline one, so + // store the blob on a page (packed onto a shared LvProp page like Access) and keep the descriptor. + int lvPropColumn = (msysObjects.FindColumn("LvProp") + ?? throw new InvalidOperationException("MSysObjects is missing the 'LvProp' column.")).ColumnId; + byte[] reference = inserter.StorePackedLongValue(lvPropColumn, PropertyBlob.Write(props)); + SetByName(msysObjects, values, "LvProp", new LongValueDescriptor(reference)); + } + + inserter.Insert(values, updateIndexes: true); + } + + // A new user table's per-object-class masks (verified against DAO-created files): Users get read/write + // data (0x0F00FE), Admin gets full-access-minus-ownership (0x0FFEFF). + private const int UserTableUsersMask = 0x0F00FE; + private const int UserTableAdminMask = 0x0FFEFF; + + /// + /// Adds the two MSysACEs permission rows Access writes for a new user table (Users + Admin, with the + /// user-table masks), maintaining the table's ObjectId index so Access's security check sees them. + /// + private void AddPermissionRows(int objectId) + { + TableDef msysAces = _catalog.FindTable("MSysACEs") + ?? throw new InvalidOperationException("MSysACEs catalog table was not found."); + + foreach ((byte[] sid, int acm) in new[] { (DefaultOwner, UserTableUsersMask), (AdminSid, UserTableAdminMask) }) + { + var values = new object?[msysAces.Columns.Count]; + SetByName(msysAces, values, "ACM", acm); + SetByName(msysAces, values, "FInheritable", false); + SetByName(msysAces, values, "ObjectId", objectId); + SetByName(msysAces, values, "SID", sid); + new RowInserter(_channel, msysAces).Insert(values, updateIndexes: true); + } + } + + private static void SetByName(TableDef table, object?[] values, string column, object value) + { + ColumnDef def = table.FindColumn(column) + ?? throw new InvalidOperationException($"MSysObjects is missing the '{column}' column."); + values[def.Index] = value; + } + + private static void WriteInt24(byte[] buffer, int offset, int value) + { + buffer[offset] = (byte)value; + buffer[offset + 1] = (byte)(value >> 8); + buffer[offset + 2] = (byte)(value >> 16); + } +} diff --git a/src/LibRed/LibRed.Core/Storage/TableCursor.cs b/src/LibRed/LibRed.Core/Storage/TableCursor.cs new file mode 100644 index 00000000..f3ed39d0 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/TableCursor.cs @@ -0,0 +1,60 @@ +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// A forward-only cursor over the rows of a table. Walks the table's data pages, +/// decodes each inline row, and yields one value array per row. +/// +public sealed class TableCursor(Table table) : IEnumerable +{ + private readonly Table _table = table; + + public IEnumerator GetEnumerator() + { + foreach ((RowId _, object?[] values) in WithIds()) + yield return values; + } + + /// Yields each live row together with its — used when the caller needs to + /// reference the row (e.g. back-filling an index over existing data). + public IEnumerable<(RowId Id, object?[] Values)> WithIds() + { + var decoder = new RowDecoder( + _table.Definition.Columns, + _table.Channel.Format, + new LongValueReader(_table.Channel)); + + foreach (int pageNumber in _table.UsageMap.DataPages()) + { + // Zero-copy read: the scan only reads this page and consumes each row immediately, so serve it from + // the shared cache instead of allocating a fresh 4 KB buffer per page. Copy-on-write Store keeps the + // returned array stable even if decoding a row triggers a long-value read that evicts this page. + PageBuffer buffer = _table.Channel.ReadPageShared(pageNumber); + var page = new DataPage(); + page.Read(buffer, _table.Channel.Format); + + for (int i = 0; i < page.RowCount; i++) + { + RowSlot slot = page.Rows[i]; + if (slot.IsDeleted) continue; // deleted, or a relocated row's hidden target (reached via its pointer) + + // A relocated row: the slot holds a 4-byte pointer (page<<8 | row) to the real row, which lives + // on another page flagged "deleted" so scans skip it there. The row id stays this slot's, so + // index entries keep pointing here. Follow the pointer and decode the target's bytes. + if (slot.HasOverflow) + { + RelocatedRow target = RowRelocationReader.Resolve( + _table.Channel, _table.Definition.DefinitionPage, slot, page.GetRow(i)); + yield return (new RowId(pageNumber, i), decoder.Decode(target.Bytes)); + continue; + } + + yield return (new RowId(pageNumber, i), decoder.Decode(page.GetRow(i))); + } + } + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => GetEnumerator(); +} diff --git a/src/LibRed/LibRed.Core/Storage/Types/JetTypeCodec.cs b/src/LibRed/LibRed.Core/Storage/Types/JetTypeCodec.cs new file mode 100644 index 00000000..0e6b0452 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/Types/JetTypeCodec.cs @@ -0,0 +1,280 @@ +using System.Buffers.Binary; +using System.Text; +using LibRed.Catalog; + +namespace LibRed.Storage.Types; + +/// +/// Decodes individual column values from their on-disk byte representation. Centralises +/// the per-type quirks: the 1899-12-30 OLE date epoch, Jet CURRENCY (scaled int64), +/// GUID byte order, and UTF-16LE text. Long values (memo/OLE) that live on LVAL pages +/// are not resolved here yet. +/// +public static class JetTypeCodec +{ + /// Decodes a single non-null column value from its raw bytes. + public static object? Decode(ColumnDef column, ReadOnlySpan value) + { + int expectedLength = column.Type switch + { + JetDataType.Byte => 1, + JetDataType.Int16 => 2, + JetDataType.Int32 or JetDataType.Single => 4, + JetDataType.Int64 or JetDataType.Double or JetDataType.DateTime or JetDataType.Currency => 8, + JetDataType.Guid => 16, + JetDataType.FixedPoint => 17, + JetDataType.DateTimeExtended => 42, + _ => -1, + }; + if (expectedLength >= 0 && value.Length != expectedLength) + throw new InvalidDataException( + $"Column '{column.Name}' ({column.Type}) has {value.Length} bytes; expected {expectedLength}."); + + switch (column.Type) + { + case JetDataType.Boolean: + return value.Length > 0 && value[0] != 0; + case JetDataType.Byte: + return value[0]; + case JetDataType.Int16: + return BinaryPrimitives.ReadInt16LittleEndian(value); + case JetDataType.Int32: + return BinaryPrimitives.ReadInt32LittleEndian(value); + case JetDataType.Int64: // ACE 16 BIGINT + return BinaryPrimitives.ReadInt64LittleEndian(value); + case JetDataType.Single: + return BinaryPrimitives.ReadSingleLittleEndian(value); + case JetDataType.Double: + return BinaryPrimitives.ReadDoubleLittleEndian(value); + case JetDataType.DateTime: + return DateTime.FromOADate(BinaryPrimitives.ReadDoubleLittleEndian(value)); + case JetDataType.DateTimeExtended: // ACE 16 DATETIME2 + return DecodeExtendedDateTime(value); + case JetDataType.Currency: + return BinaryPrimitives.ReadInt64LittleEndian(value) / 10000m; + case JetDataType.Guid: + return new Guid(value[..16]); + case JetDataType.Text: + return DecodeText(value); + case JetDataType.Binary: + return value.ToArray(); + case JetDataType.FixedPoint: + return DecodeNumeric(value, column.Scale); + + // Long values stored on LVAL pages — needs the long-value reader. TODO. + case JetDataType.Memo: + case JetDataType.Ole: + case JetDataType.Complex: + default: + return value.ToArray(); + } + } + + /// + /// Decodes an ACE 16 DATETIME2 value: a fixed 42-byte ASCII string + /// "<day>:<time>:<precision>" where day is the .NET day number and + /// time is the count of 100-ns ticks within the day. Both are zero-padded to 19 + /// digits so that byte order equals chronological order. + /// + private static DateTime DecodeExtendedDateTime(ReadOnlySpan value) + { + Span chars = stackalloc char[value.Length]; + int n = Encoding.ASCII.GetChars(value, chars); + ReadOnlySpan s = chars[..n]; + + int c1 = s.IndexOf(':'); + int c2 = s.Slice(c1 + 1).IndexOf(':') + c1 + 1; + long day = long.Parse(s[..c1]); + long time = long.Parse(s.Slice(c1 + 1, c2 - c1 - 1)); + + return new DateTime(day * TimeSpan.TicksPerDay + time); + } + + /// + /// Decodes a Jet Decimal/Numeric value (17 bytes): a sign byte (0x80 = negative) followed + /// by a 128-bit magnitude stored as four 32-bit little-endian words in big-endian word + /// order (the low word last). The value is the magnitude divided by 10^scale. + /// + private static decimal DecodeNumeric(ReadOnlySpan value, byte scale) + { + bool negative = (value[0] & 0x80) != 0; + uint lo = BinaryPrimitives.ReadUInt32LittleEndian(value.Slice(13, 4)); + uint mid = BinaryPrimitives.ReadUInt32LittleEndian(value.Slice(9, 4)); + uint hi = BinaryPrimitives.ReadUInt32LittleEndian(value.Slice(5, 4)); + uint top = BinaryPrimitives.ReadUInt32LittleEndian(value.Slice(1, 4)); + + if (top != 0) + throw new OverflowException("Numeric value exceeds the range of System.Decimal."); + + return new decimal((int)lo, (int)mid, (int)hi, negative, scale); + } + + /// + /// Decodes a Jet text value, honoring compressed Unicode. A value beginning with the + /// 0xFF 0xFE marker stores ASCII-range characters as one byte each; otherwise it is + /// UTF-16LE. + /// + /// + /// TODO: the full compressed format can toggle between 1-byte and 2-byte runs mid-string + /// (via embedded markers) for mixed scripts; this handles the common all-compressed case. + /// + public static string DecodeText(ReadOnlySpan value) + { + if (value.Length >= 2 && value[0] == 0xFF && value[1] == 0xFE) + return Encoding.Latin1.GetString(value[2..]); + + return Encoding.Unicode.GetString(value); + } + + /// + /// Encodes a non-null CLR value to its on-disk bytes — the inverse of . + /// Boolean is not handled here (its value lives in the null bitmap). Text is written as + /// uncompressed UTF-16LE. Memo/OLE values are written as an inline long value + /// (see ); chained LVAL pages for larger values are not yet written. + /// + public static byte[] Encode(ColumnDef column, object value) + { + var c = System.Globalization.CultureInfo.InvariantCulture; + + // A long value already written to an LVAL page arrives as its pre-built 12-byte reference + // descriptor, which is written verbatim (memo/OLE columns only). + if (value is LibRed.Storage.LongValueDescriptor descriptor) + return descriptor.Bytes; + + // Jet represents a boolean as -1 (true) / 0 (false). EF maps a CLR bool onto a numeric + // (smallint) column, so a bool value here targets a numeric column — normalise it to the Jet + // form so what we write matches Access (which also stores -1). (A real Boolean/YESNO column is + // carried in the null bitmap and never reaches this method.) + if (value is bool boolean) + value = (short)(boolean ? -1 : 0); + + switch (column.Type) + { + case JetDataType.Byte: + return [Convert.ToByte(value, c)]; + case JetDataType.Int16: + return Bytes(2, b => BinaryPrimitives.WriteInt16LittleEndian(b, Convert.ToInt16(value, c))); + case JetDataType.Int32: + return Bytes(4, b => BinaryPrimitives.WriteInt32LittleEndian(b, Convert.ToInt32(value, c))); + case JetDataType.Int64: + return Bytes(8, b => BinaryPrimitives.WriteInt64LittleEndian(b, Convert.ToInt64(value, c))); + case JetDataType.Single: + return Bytes(4, b => BinaryPrimitives.WriteSingleLittleEndian(b, Convert.ToSingle(value, c))); + case JetDataType.Double: + return Bytes(8, b => BinaryPrimitives.WriteDoubleLittleEndian(b, Convert.ToDouble(value, c))); + case JetDataType.DateTime: + return Bytes(8, b => BinaryPrimitives.WriteDoubleLittleEndian(b, ToOaDate(value, c))); + case JetDataType.Currency: + return Bytes(8, b => BinaryPrimitives.WriteInt64LittleEndian(b, (long)decimal.Round(Convert.ToDecimal(value, c) * 10000m))); + case JetDataType.Guid: + return ((Guid)value).ToByteArray(); + case JetDataType.Text: + return EncodeText(column, AsText(value, c)); + case JetDataType.Binary: + return EncodeBinary(column, (byte[])value); + case JetDataType.FixedPoint: + return EncodeNumeric(Convert.ToDecimal(value, c), column.Scale); + + // Long values (memo/OLE): store the payload inline after the 12-byte descriptor (memo + // text as UTF-16LE, OLE as raw bytes). LongValueReader reads this back via the inline + // flag. Chained LVAL pages for values too large to inline are not written yet. + case JetDataType.Memo: + return EncodeInlineLongValue(Encoding.Unicode.GetBytes(AsText(value, c))); + case JetDataType.Ole: + return EncodeInlineLongValue((byte[])value); + + default: + throw new NotSupportedException($"Encoding {column.Type} is not supported yet."); + } + } + + /// The string form of a value being written to a Text/Memo column. A CLR string is used as-is; + /// anything else (a DateTime, number, GUID …) is coerced to its invariant string form — Jet/ACE likewise + /// stores a non-text value inserted into a text column as text (e.g. EF writes a DateTimeOffset lock + /// timestamp into a TEXT column). Prevents an InvalidCastException on the hard (string) cast. + private static string AsText(object value, IFormatProvider culture) => + value as string ?? Convert.ToString(value, culture) ?? ""; + + /// Encodes text. A fixed-length (CHAR/NCHAR) column is **space-padded** (or truncated) to its byte + /// length — matching ACE, which stores and returns fixed text space-padded to the full width; a variable + /// column (TEXT/VARCHAR) is its exact UTF-16 bytes. + private static byte[] EncodeText(ColumnDef column, string value) + { + byte[] text = Encoding.Unicode.GetBytes(value); + if (!column.IsFixedLength) return text; + var padded = new byte[column.Length]; + for (int i = 0; i < column.Length; i += 2) padded[i] = 0x20; // UTF-16LE space (0x20 0x00) + Array.Copy(text, padded, Math.Min(text.Length, column.Length)); + return padded; + } + + /// Encodes binary. A fixed-length (BINARY) column is **zero-padded** (or truncated) to its byte + /// length; a variable column (VARBINARY) is its exact bytes. + private static byte[] EncodeBinary(ColumnDef column, byte[] value) + { + if (!column.IsFixedLength || value.Length == column.Length) return value; + var padded = new byte[column.Length]; + Array.Copy(value, padded, Math.Min(value.Length, column.Length)); + return padded; + } + + private static byte[] Bytes(int length, Action> write) + { + var b = new byte[length]; + write(b); + return b; + } + + /// The OLE-automation epoch (1899-12-30), which is also Jet's zero date and the base for + /// storing a / as a date offset. + private static readonly DateTime OleEpoch = new(1899, 12, 30); + + /// + /// Converts a date/time-ish CLR value to the OLE-automation double stored in a Jet DateTime + /// column. Jet has no dedicated TimeSpan/DateOnly/TimeOnly type, so — like EFCore.Jet — a + /// and are stored as an offset from the epoch, and a + /// as that date at midnight. + /// + private static double ToOaDate(object value, IFormatProvider c) => value switch + { + DateTime dt => dt.ToOADate(), + TimeSpan ts => (OleEpoch + ts).ToOADate(), + DateOnly d => d.ToDateTime(TimeOnly.MinValue).ToOADate(), + TimeOnly t => (OleEpoch + t.ToTimeSpan()).ToOADate(), + _ => Convert.ToDateTime(value, c).ToOADate(), + }; + + /// + /// Builds an inline long-value (memo/OLE) in-row value: a 12-byte descriptor + /// (24-bit length, the 0x80 inline flag, then 8 unused bytes) followed by the payload. + /// This is the exact shape reads back for an inline + /// value. + /// + private static byte[] EncodeInlineLongValue(ReadOnlySpan payload) + { + var result = new byte[12 + payload.Length]; + result[0] = (byte)payload.Length; + result[1] = (byte)(payload.Length >> 8); + result[2] = (byte)(payload.Length >> 16); + result[3] = 0x80; // inline + payload.CopyTo(result.AsSpan(12)); + return result; + } + + /// Inverse of : 17 bytes, sign + 128-bit magnitude (top word 0). + private static byte[] EncodeNumeric(decimal value, byte scale) + { + decimal factor = 1m; + for (int i = 0; i < scale; i++) factor *= 10m; + decimal magnitude = decimal.Truncate(decimal.Round(Math.Abs(value) * factor, 0)); + + int[] bits = decimal.GetBits(magnitude); // [lo, mid, hi, flags]; magnitude has scale 0 + var result = new byte[17]; + result[0] = (byte)(value < 0 ? 0x80 : 0x00); + // bytes[1..5) top word = 0; hi at 5, mid at 9, lo at 13 (see DecodeNumeric). + BinaryPrimitives.WriteUInt32LittleEndian(result.AsSpan(5, 4), (uint)bits[2]); + BinaryPrimitives.WriteUInt32LittleEndian(result.AsSpan(9, 4), (uint)bits[1]); + BinaryPrimitives.WriteUInt32LittleEndian(result.AsSpan(13, 4), (uint)bits[0]); + return result; + } +} diff --git a/src/LibRed/LibRed.Core/Storage/UsageMap.cs b/src/LibRed/LibRed.Core/Storage/UsageMap.cs new file mode 100644 index 00000000..d7451f56 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/UsageMap.cs @@ -0,0 +1,191 @@ +using System.Buffers.Binary; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// Enumerates the data pages that belong to a table by reading its owned-pages usage map. +/// +/// +/// The TDEF holds a pointer (row + page) to the usage-map record. An inline map +/// (type 0x00) stores a start page and a bitmap where bit i marks page (startPage + i) +/// as owned. A reference map (type 0x01, for very large tables) instead stores a list of +/// pointers to dedicated bitmap pages (type 0x05); pointer k's bitmap covers the page +/// range starting at k * (pageSize - 4) * 8. +/// +public sealed class UsageMap(PageChannel channel, TableDef table) +{ + private const byte MapTypeInline = 0x00; + private const byte MapTypeReference = 0x01; + private const int ReferenceMapSlots = 17; + private const int ReferenceMapRecordSize = 1 + ReferenceMapSlots * 4; + + /// Bytes preceding the bitmap on a dedicated usage-bitmap page (type 0x05). + private const int BitmapPageHeaderSize = 4; + + private readonly PageChannel _channel = channel; + private readonly TableDef _table = table; + + /// Yields the page numbers of every data page owned by the table, in ascending order. + public IEnumerable DataPages() => PagesAt(_channel.Format.TdefOwnedPagesOffset); + + /// Yields the table's data pages that still have room for a row, in ascending order — the + /// free-pages map. A strict subset of , and normally just the page currently + /// being appended to, so it is the map to consult when looking for somewhere to put a new row. + public IEnumerable FreeDataPages() => PagesAt(_channel.Format.TdefFreePagesOffset); + + /// The highest-numbered data page the table owns, or -1 when it owns none. + /// + /// Scans the bitmap backwards rather than enumerating and taking the maximum: + /// callers ask this on every page allocation, and materializing every owned page each time would make a + /// bulk load quadratic. Cost here is bounded by the bitmap size, not the table's page count. + /// + public int MaxDataPage() + { + byte[] record = ReadMapRecord(_channel.Format.TdefOwnedPagesOffset); + + if (record.Length == 0) + throw new InvalidDataException("A usage-map record cannot be empty."); + + if (record[0] == MapTypeInline) + { + if (record.Length < 5) + throw new InvalidDataException("An inline usage-map record must contain its 5-byte header."); + int startPage = BinaryPrimitives.ReadInt32LittleEndian(record.AsSpan(1, 4)); + int bit = HighestSetBit(record.AsSpan(5)); + return bit < 0 ? -1 : startPage + bit; + } + + if (record[0] != MapTypeReference) + throw new NotSupportedException($"Unknown usage map type 0x{record[0]:X2}."); + + ValidateReferenceRecord(record); + + int pagesPerBitmap = (_channel.PageSize - BitmapPageHeaderSize) * 8; + for (int e = ReferenceMapSlots - 1; e >= 0; e--) + { + int bitmapPage = BinaryPrimitives.ReadInt32LittleEndian(record.AsSpan(1 + e * 4, 4)); + if (bitmapPage == 0) continue; + + int bit = HighestSetBit(ReadBitmapPage(bitmapPage)); + if (bit >= 0) return e * pagesPerBitmap + bit; + } + + return -1; + } + + /// Index of the highest set bit in , or -1 if it is all zeros. + private static int HighestSetBit(ReadOnlySpan bitmap) + { + for (int i = bitmap.Length - 1; i >= 0; i--) + { + if (bitmap[i] == 0) continue; + for (int bit = 7; bit >= 0; bit--) + if ((bitmap[i] & (1 << bit)) != 0) + return i * 8 + bit; + } + return -1; + } + + /// The raw usage-map record whose (row, page) pointer sits at + /// in the TDEF. + private byte[] ReadMapRecord(int pointerOffset) + { + JetFormatBase format = _channel.Format; + PageBuffer tdef = _channel.ReadPage(_table.DefinitionPage); + + var holder = new DataPage(); + holder.Read(_channel.ReadPage(tdef.ReadInt24(pointerOffset + 1)), format); + return holder.GetRow(tdef.ReadByte(pointerOffset)).ToArray(); + } + + /// Reads the usage map whose (row, page) pointer sits at in + /// the TDEF. Both maps share the same pointer shape and record format. + private IEnumerable PagesAt(int pointerOffset) + { + JetFormatBase format = _channel.Format; + + PageBuffer tdef = _channel.ReadPage(_table.DefinitionPage); + int mapRow = tdef.ReadByte(pointerOffset); + int mapPage = tdef.ReadInt24(pointerOffset + 1); + + var holder = new DataPage(); + holder.Read(_channel.ReadPage(mapPage), format); + ReadOnlySpan map = holder.GetRow(mapRow); + + if (map.Length == 0) + throw new InvalidDataException("A usage-map record cannot be empty."); + + return map[0] switch + { + MapTypeInline => ReadInlineMap(map), + MapTypeReference => ReadReferenceMap(map), + byte t => throw new NotSupportedException($"Unknown usage map type 0x{t:X2}."), + }; + } + + private static List ReadInlineMap(ReadOnlySpan map) + { + if (map.Length < 5) + throw new InvalidDataException("An inline usage-map record must contain its 5-byte header."); + int startPage = BinaryPrimitives.ReadInt32LittleEndian(map.Slice(1, 4)); + var pages = new List(); + AppendSetBits(pages, map[5..], startPage); + return pages; + } + + private List ReadReferenceMap(ReadOnlySpan map) + { + ValidateReferenceRecord(map); + int pagesPerBitmap = (_channel.PageSize - BitmapPageHeaderSize) * 8; + var pages = new List(); + + // The record is a list of 4-byte pointers to bitmap pages; pointer k's bitmap + // covers the page range starting at k * pagesPerBitmap. A zero pointer means the + // range has no owned pages. + for (int e = 0; e < ReferenceMapSlots; e++) + { + int bitmapPage = BinaryPrimitives.ReadInt32LittleEndian(map.Slice(1 + e * 4, 4)); + if (bitmapPage == 0) continue; + + int rangeBase = e * pagesPerBitmap; + ReadOnlySpan bitmap = ReadBitmapPage(bitmapPage); + AppendSetBits(pages, bitmap, rangeBase); + } + + return pages; + } + + private static void ValidateReferenceRecord(ReadOnlySpan map) + { + if (map.Length != ReferenceMapRecordSize) + throw new InvalidDataException( + $"A reference usage-map record must be exactly {ReferenceMapRecordSize} bytes; got {map.Length}."); + } + + private ReadOnlySpan ReadBitmapPage(int pageNumber) + { + if (pageNumber <= 0 || pageNumber >= _channel.PageCount) + throw new InvalidDataException($"Usage-map bitmap page {pageNumber} is outside the database."); + + ReadOnlySpan page = _channel.ReadPage(pageNumber).Span; + if (page[0] != (byte)PageType.PageUsageBitmap || page[1] != 0x01 || page[2] != 0 || page[3] != 0) + throw new InvalidDataException($"Usage-map pointer {pageNumber} does not reference a valid bitmap page."); + return page[BitmapPageHeaderSize..]; + } + + private static void AppendSetBits(List pages, ReadOnlySpan bitmap, int basePage) + { + for (int i = 0; i < bitmap.Length; i++) + { + byte b = bitmap[i]; + if (b == 0) continue; + for (int bit = 0; bit < 8; bit++) + if ((b & (1 << bit)) != 0) + pages.Add(basePage + i * 8 + bit); + } + } +} diff --git a/src/LibRed/LibRed.Core/Storage/UsageMapWriter.cs b/src/LibRed/LibRed.Core/Storage/UsageMapWriter.cs new file mode 100644 index 00000000..fc53f02c --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/UsageMapWriter.cs @@ -0,0 +1,301 @@ +using System.Buffers.Binary; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; + +namespace LibRed.Storage; + +/// +/// Writes a usage map — the bitmap recording which pages belong to a table, an index, or a long-value +/// column. The counterpart to , which reads them. +/// +/// +/// A map is a single record on a usage-map page, addressed by a (row, page) pointer in the TDEF. It starts +/// as an inline map (type 0x00: a start page plus a bitmap) and, once its record can no longer +/// grow within its page, is rewritten as a reference map (type 0x01: pointers to dedicated +/// bitmap pages). See §9 of the format spec. +/// +public sealed class UsageMapWriter(PageChannel channel) +{ + // Access grows an inline usage-map bitmap in 32-bit (4-byte) steps. Verified against owned-map record + // lengths on a 255-column ACE table whose data pages start at 353: 8,000 rows → 1053, 12,000 → 1553, + // 30,000 → 3801, i.e. 5 + roundUp(ceil((353 + rows) / 8), 4) exactly. (A 32-byte chunk would give 1056 / + // 1568 / 3808.) Getting this right matters beyond tidiness: overshooting the record length spends the + // usage-map page's remaining room and converts the map to reference type earlier than Access would. + private const int UsageMapChunkBytes = 4; + + private const byte InlineMapType = 0x00; + private const byte ReferenceMapType = 0x01; + private const int InlineMapHeaderSize = 5; // type byte + 4-byte start page + private const int BitmapPageHeaderSize = 4; // type + flags + 2 unused, then the bitmap + + // A reference map's record is a type byte followed by 17 four-byte bitmap-page pointers (69 bytes). + // Seventeen is not arbitrary: each bitmap page covers (pageSize - 4) * 8 = 32,736 pages, so 17 slots + // span ~2.28 GB — just past Jet's 2 GB file ceiling. Verified against an ACE-built 134 MB table. + private const int ReferenceMapSlots = 17; + private const int ReferenceMapRecordSize = 1 + ReferenceMapSlots * 4; + + // A movable inline window is exactly 512 pages (a 64-byte bitmap) aligned to a 512-page boundary. + // Verified against ACE free-pages maps: the sole set bit at page 852/1227/1852/2852 sat in a 64-byte + // record whose startPage was 512/1024/1536/2560 — i.e. floor(page / 512) * 512. + private const int InlineWindowBitmapBytes = 64; + private const int InlineWindowPages = InlineWindowBitmapBytes * 8; + + private readonly PageChannel _channel = channel; + + /// Sets or clears the bit for in the usage map at record + /// on . + /// + /// Handles both map types. An inline map (0x00) is grown in place while its record still fits the page; + /// once it cannot, the map is converted to a reference map (0x01) — exactly Access's own threshold. + /// + /// marks a map whose set bits stay clustered near the append tail — a + /// free-pages map. Rather than growing a bitmap from startPage = 0 all the way out to the tail, + /// such a map slides a fixed 512-page window, as Access does, so its record stays 69 bytes forever. + /// An owned-pages map cannot do this: it must retain every page it has ever taken. + /// + /// + public void SetBit(int mapRow, int mapPage, int targetPage, bool set, bool movableWindow = false) + { + JetFormatBase format = _channel.Format; + byte[] page = _channel.ReadPage(mapPage).Span.ToArray(); + var holder = new DataPage(); + holder.Read(_channel.ReadPage(mapPage), format); + int mapOffset = holder.Rows[mapRow].Offset; + + if (page[mapOffset] == ReferenceMapType) + { + SetReferenceBit(page, mapPage, mapOffset, targetPage, set); + return; + } + + int startPage = BinaryPrimitives.ReadInt32LittleEndian(page.AsSpan(mapOffset + 1, 4)); + int bitmapBits = (holder.Rows[mapRow].Length - InlineMapHeaderSize) * 8; + int bitIndex = targetPage - startPage; + + // The inline bitmap covers pages [startPage, startPage + bitmapBits). Clearing a bit outside that + // window is a no-op — it is already 0. + if (bitIndex < 0 || bitIndex >= bitmapBits) + { + if (!set) return; + + // A free-pages map slides its window onto the target instead of growing (and can therefore also + // move *backwards*, which a grown map could never do). + if (movableWindow && TryRepositionWindow(page, holder, format, mapPage, mapRow, targetPage)) + return; + + if (bitIndex < 0) + throw new NotSupportedException( + $"Page {targetPage} is below the usage map's start page {startPage}; this map's window cannot move."); + } + + // When Access needs to mark a page beyond the window it grows the bitmap record in place (still + // type 0x00, same startPage), extending it in 4-byte steps. + if (bitIndex >= bitmapBits) + { + int neededBitmapBytes = RoundUpTo(bitIndex / 8 + 1, UsageMapChunkBytes); + byte[] grownRecord = new byte[InlineMapHeaderSize + neededBitmapBytes]; // extra bitmap bytes stay zero + page.AsSpan(mapOffset, holder.Rows[mapRow].Length).CopyTo(grownRecord); + + byte[]? grown = ReplaceMapRecord(page, holder, format, mapRow, grownRecord, out mapOffset); + if (grown is null) + { + // The record can no longer grow within its page: switch to a reference map and retry there. + ConvertInlineToReference(mapPage, mapRow); + page = _channel.ReadPage(mapPage).Span.ToArray(); + var converted = new DataPage(); + converted.Read(_channel.ReadPage(mapPage), format); + SetReferenceBit(page, mapPage, converted.Rows[mapRow].Offset, targetPage, set); + return; + } + + page = grown; + } + + int byteIndex = mapOffset + InlineMapHeaderSize + bitIndex / 8; + byte mask = (byte)(1 << (bitIndex % 8)); + if (set) page[byteIndex] |= mask; + else page[byteIndex] &= (byte)~mask; + _channel.WritePage(mapPage, page); + } + + /// + /// Slides an inline map's window onto : a 64-byte bitmap starting at + /// floor(targetPage / 512) * 512, carrying over every bit already set and adding the target's. + /// Returns — leaving the map untouched — when some page already marked would + /// fall outside the new window, since moving would silently forget it; the caller then grows instead. + /// + private bool TryRepositionWindow(byte[] page, DataPage holder, JetFormatBase format, int mapPage, int mapRow, int targetPage) + { + RowSlot slot = holder.Rows[mapRow]; + int startPage = BinaryPrimitives.ReadInt32LittleEndian(page.AsSpan(slot.Offset + 1, 4)); + ReadOnlySpan bitmap = page.AsSpan(slot.Offset + InlineMapHeaderSize, slot.Length - InlineMapHeaderSize); + + int newStart = targetPage / InlineWindowPages * InlineWindowPages; + int newEnd = newStart + InlineWindowPages; + + var marked = new List(); + for (int i = 0; i < bitmap.Length; i++) + { + if (bitmap[i] == 0) continue; + for (int bit = 0; bit < 8; bit++) + { + if ((bitmap[i] & (1 << bit)) == 0) continue; + int markedPage = startPage + i * 8 + bit; + if (markedPage < newStart || markedPage >= newEnd) return false; + marked.Add(markedPage); + } + } + + var record = new byte[InlineMapHeaderSize + InlineWindowBitmapBytes]; + record[0] = InlineMapType; + BinaryPrimitives.WriteInt32LittleEndian(record.AsSpan(1, 4), newStart); + marked.Add(targetPage); + foreach (int markedPage in marked) + { + int bit = markedPage - newStart; + record[InlineMapHeaderSize + bit / 8] |= (byte)(1 << (bit % 8)); + } + + byte[]? rewritten = ReplaceMapRecord(page, holder, format, mapRow, record, out _); + if (rewritten is null) return false; // shrinking or same size, so effectively unreachable + + _channel.WritePage(mapPage, rewritten); + return true; + } + + /// Number of pages one dedicated bitmap page (type 0x05) covers. + private int PagesPerBitmapPage => (_channel.Format.PageSize - BitmapPageHeaderSize) * 8; + + /// Sets or clears 's bit in a reference map: pointer slot + /// targetPage / PagesPerBitmapPage names the bitmap page holding it. A slot's bitmap page is + /// allocated lazily, only when a bit in its range is first set. + private void SetReferenceBit(byte[] page, int mapPage, int mapOffset, int targetPage, bool set) + { + int slot = targetPage / PagesPerBitmapPage; + if (slot >= ReferenceMapSlots) + throw new NotSupportedException( + $"Page {targetPage} lies past the {ReferenceMapSlots} bitmap slots a usage map can address (Jet's 2 GB file limit)."); + + int pointerOffset = mapOffset + 1 + slot * 4; + int bitmapPage = BinaryPrimitives.ReadInt32LittleEndian(page.AsSpan(pointerOffset, 4)); + if (bitmapPage == 0) + { + if (!set) return; // the bit is already clear — no need to materialize the bitmap page + bitmapPage = AllocateBitmapPage(); + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(pointerOffset, 4), bitmapPage); + _channel.WritePage(mapPage, page); + } + + SetBitmapPageBit(bitmapPage, targetPage % PagesPerBitmapPage, set); + } + + private void SetBitmapPageBit(int bitmapPage, int bit, bool set) + { + byte[] bitmap = _channel.ReadPage(bitmapPage).Span.ToArray(); + int byteIndex = BitmapPageHeaderSize + bit / 8; + byte mask = (byte)(1 << (bit % 8)); + if (set) bitmap[byteIndex] |= mask; + else bitmap[byteIndex] &= (byte)~mask; + _channel.WritePage(bitmapPage, bitmap); + } + + /// Allocates and initialises an empty dedicated usage-bitmap page (type 0x05). + private int AllocateBitmapPage() + { + int pageNumber = new PageAllocator(_channel).Allocate(); + var bitmap = new byte[_channel.Format.PageSize]; + bitmap[0] = (byte)PageType.PageUsageBitmap; + bitmap[1] = 0x01; // page flags (observed constant, as on data pages) + _channel.WritePage(pageNumber, bitmap); + return pageNumber; + } + + /// + /// Rewrites an inline (0x00) usage map as a reference (0x01) map: every page the inline bitmap marked is + /// re-marked in a dedicated bitmap page, and the record shrinks to the fixed 69-byte pointer table. Bits + /// are grouped by slot so each bitmap page is written once rather than once per page. + /// + private void ConvertInlineToReference(int mapPage, int mapRow) + { + JetFormatBase format = _channel.Format; + byte[] page = _channel.ReadPage(mapPage).Span.ToArray(); + var holder = new DataPage(); + holder.Read(_channel.ReadPage(mapPage), format); + RowSlot slot = holder.Rows[mapRow]; + + int startPage = BinaryPrimitives.ReadInt32LittleEndian(page.AsSpan(slot.Offset + 1, 4)); + ReadOnlySpan bitmap = page.AsSpan(slot.Offset + InlineMapHeaderSize, slot.Length - InlineMapHeaderSize); + + var marked = new List(); + for (int i = 0; i < bitmap.Length; i++) + for (int bit = 0; bit < 8; bit++) + if ((bitmap[i] & (1 << bit)) != 0) + marked.Add(startPage + i * 8 + bit); + + var record = new byte[ReferenceMapRecordSize]; + record[0] = ReferenceMapType; + + foreach (IGrouping group in marked.GroupBy(p => p / PagesPerBitmapPage)) + { + if (group.Key >= ReferenceMapSlots) + throw new NotSupportedException( + $"Page {group.First()} lies past the {ReferenceMapSlots} bitmap slots a usage map can address (Jet's 2 GB file limit)."); + + int bitmapPage = AllocateBitmapPage(); + byte[] bits = _channel.ReadPage(bitmapPage).Span.ToArray(); + foreach (int ownedPage in group) + { + int bit = ownedPage % PagesPerBitmapPage; + bits[BitmapPageHeaderSize + bit / 8] |= (byte)(1 << (bit % 8)); + } + _channel.WritePage(bitmapPage, bits); + BinaryPrimitives.WriteInt32LittleEndian(record.AsSpan(1 + group.Key * 4, 4), bitmapPage); + } + + // Re-read: allocating bitmap pages above may have grown the file, though not this page. + byte[] fresh = _channel.ReadPage(mapPage).Span.ToArray(); + var current = new DataPage(); + current.Read(_channel.ReadPage(mapPage), format); + byte[] rewritten = ReplaceMapRecord(fresh, current, format, mapRow, record, out _) + ?? throw new InvalidOperationException("The reference-map record does not fit its usage-map page."); + _channel.WritePage(mapPage, rewritten); + } + + private static int RoundUpTo(int value, int unit) => (value + unit - 1) / unit * unit; + + /// Replaces the usage-map record at with , + /// repacking every record on the page from the end backward — the way Access enlarges a table's owned/free + /// bitmap once it spans past the current window. Records keep their directory order (row 0 nearest the + /// page end). Returns the rewritten page and the record's new offset, or if the + /// record no longer fits the page. + private static byte[]? ReplaceMapRecord(byte[] page, DataPage holder, JetFormatBase format, int mapRow, byte[] newRecord, out int newOffset) + { + int rowCount = holder.Rows.Count; + var records = new byte[rowCount][]; + for (int i = 0; i < rowCount; i++) + records[i] = page.AsSpan(holder.Rows[i].Offset, holder.Rows[i].Length).ToArray(); + records[mapRow] = newRecord; + + // Check the fit *before* laying anything out: the records are packed from the page end backward, so + // an oversized record would otherwise run past offset 0 mid-copy rather than reporting "doesn't fit". + newOffset = -1; + int directoryEnd = format.DataRowDirectoryOffset + rowCount * 2; + if (format.PageSize - records.Sum(r => r.Length) < directoryEnd) return null; + + var result = new byte[format.PageSize]; + Array.Copy(page, result, format.DataRowDirectoryOffset); // preserve type/flags/owner/header + int offset = format.PageSize; + for (int i = 0; i < rowCount; i++) + { + offset -= records[i].Length; + Array.Copy(records[i], 0, result, offset, records[i].Length); + BinaryPrimitives.WriteUInt16LittleEndian(result.AsSpan(format.DataRowDirectoryOffset + i * 2, 2), (ushort)offset); + if (i == mapRow) newOffset = offset; + } + + BinaryPrimitives.WriteUInt16LittleEndian(result.AsSpan(format.DataRowCountOffset, 2), (ushort)rowCount); + BinaryPrimitives.WriteUInt16LittleEndian(result.AsSpan(format.DataFreeSpaceOffset, 2), (ushort)(offset - directoryEnd)); + return result; + } +} diff --git a/src/LibRed/LibRed.Core/Storage/ViewCreator.cs b/src/LibRed/LibRed.Core/Storage/ViewCreator.cs new file mode 100644 index 00000000..c9584491 --- /dev/null +++ b/src/LibRed/LibRed.Core/Storage/ViewCreator.cs @@ -0,0 +1,204 @@ +using System.Buffers.Binary; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; + +namespace LibRed.Storage; + +/// +/// Creates a view (a stored SELECT query) the way Access does — an MSysObjects row of type 5 with +/// a negative synthetic id, plus the query decomposed into MSysQueries rows (one per column / table +/// / join / where, bracketed by a type row and an end row). Verified byte-faithful against ACE for the +/// "simple SELECT" views a view is allowed to contain. +/// +public sealed class ViewCreator(PageChannel channel, JetCatalog catalog) +{ + private const int ViewFlags = 0x10000000; // a SELECT query / view + private const int AppendFlags = 0x10000040; // an INSERT (append) query + private const int DataDefinitionFlags = 0x10000060; // a CREATE/DROP TABLE (data-definition) query + private static readonly byte[] DefaultOwner = [0x69, 0x0C]; + private static readonly byte[] AdminSid = [0x68, 0x0C]; + + // MSysACEs permission rows a QUERY/VIEW object gets — distinct from a table's (owner and admin both get + // full 0xFFEFF on a table). Verified against every Northwind view: owner (0x690C) = 0xF00FE, admin/users + // (0x680C) = 0xFFEFF. Without these, Access opens the file but warns about permissions on the query. + private const int QueryOwnerAcm = 0xF00FE; // 983294 + private const int QueryAdminAcm = 0xFFEFF; // 1048319 + + + private readonly PageChannel _channel = channel; + private readonly JetCatalog _catalog = catalog; + + public void Create(string name, ViewSpec spec) + { + int objectId = AllocateObject(name, ViewFlags); + AddQueryRows(objectId, spec); + } + + /// Persists a stored action query (a non-SELECT CREATE PROCEDURE body) byte-faithfully. + public void CreateAction(string name, ActionQuerySpec spec) + { + int flags = spec.Kind == ActionQueryKind.DataDefinition ? DataDefinitionFlags : AppendFlags; + int objectId = AllocateObject(name, flags); + AddActionRows(objectId, spec); + } + + /// Reserves the next free query object id, checks the name is unique, and writes the MSysObjects + /// row with the given (which distinguish view / append / data-definition). + private int AllocateObject(string name, int flags) + { + TableDef msysObjects = _catalog.FindTable("MSysObjects") + ?? throw new InvalidOperationException("MSysObjects catalog table was not found."); + int idIndex = ColumnIndex(msysObjects, "Id"); + int nameIndex = ColumnIndex(msysObjects, "Name"); + + // A query's name must be unique among all objects (it also cannot equal an existing table name); + // find the next free negative id (queries increment from 0x80000000) in one scan. + int nextId = unchecked((int)0x80000000); + foreach (object?[] row in new Table(_channel, msysObjects).Rows()) + { + if (string.Equals(row[nameIndex] as string, name, StringComparison.OrdinalIgnoreCase)) + throw new InvalidOperationException($"An object named '{name}' already exists."); + if (row[idIndex] is int id && id < 0 && id >= nextId) nextId = id + 1; + } + + AddObjectRow(msysObjects, name, nextId, flags); + AddPermissionRows(nextId); + return nextId; + } + + /// + /// Adds the two MSysACEs permission rows Access writes for a new query/view object — owner (0x690C) at + /// ACM 0xF00FE and admin/users (0x680C) at ACM 0xFFEFF — maintaining the ObjectId index so Access's + /// security check finds them. Without these Access warns about permissions when opening the query. + /// + private void AddPermissionRows(int objectId) + { + TableDef msysAces = _catalog.FindTable("MSysACEs") + ?? throw new InvalidOperationException("MSysACEs catalog table was not found."); + + foreach ((byte[] sid, int acm) in new[] { (DefaultOwner, QueryOwnerAcm), (AdminSid, QueryAdminAcm) }) + { + var values = new object?[msysAces.Columns.Count]; + SetByName(msysAces, values, "ACM", acm); + SetByName(msysAces, values, "FInheritable", false); + SetByName(msysAces, values, "ObjectId", objectId); + SetByName(msysAces, values, "SID", sid); + new RowInserter(_channel, msysAces).Insert(values, updateIndexes: true); + } + } + + private void AddObjectRow(TableDef msysObjects, string name, int objectId, int flags) + { + DateTime now = DateTime.Now; + var values = new object?[msysObjects.Columns.Count]; + SetByName(msysObjects, values, "Id", objectId); + SetByName(msysObjects, values, "ParentId", CatalogFormat.ObjectContainerParentId); + SetByName(msysObjects, values, "Type", StoredQueryFormat.ObjectTypeQuery); + SetByName(msysObjects, values, "Name", name); + SetByName(msysObjects, values, "Flags", flags); + SetByName(msysObjects, values, "Owner", DefaultOwner); + SetByName(msysObjects, values, "DateCreate", now); + SetByName(msysObjects, values, "DateUpdate", now); + new RowInserter(_channel, msysObjects).Insert(values, updateIndexes: true); + } + + private void AddActionRows(int objectId, ActionQuerySpec spec) + { + TableDef mq = _catalog.FindTable("MSysQueries") + ?? throw new InvalidOperationException("MSysQueries catalog table was not found."); + + Row(mq, objectId, StoredQueryFormat.AttrType, order: 1, flag: StoredQueryFormat.QueryTypeSelect); + Row(mq, objectId, StoredQueryFormat.AttrEnd, order: 1); + if (spec.Kind == ActionQueryKind.DataDefinition) + { + // The whole DDL statement is stored verbatim in one row; Access records it with a leading space. + Row(mq, objectId, StoredQueryFormat.AttrAction, order: 1, flag: StoredQueryFormat.ActionDdl, expression: " " + spec.DdlSql); + } + else + { + Row(mq, objectId, StoredQueryFormat.AttrAction, order: 1, flag: StoredQueryFormat.ActionAppend, name1: spec.TargetTable); + // Each appended column: Name2 = target column, Expression = the (literal) value; the 0x8000 flag + // marks a VALUES append (as opposed to an INSERT … SELECT, whose columns carry Flag 0). + var values = spec.Values ?? []; + for (int i = 0; i < values.Count; i++) + Row(mq, objectId, StoredQueryFormat.AttrColumn, order: i + 1, flag: StoredQueryFormat.AppendValueFlag, + expression: values[i].ValueExpression, name2: values[i].Column); + } + } + + private void AddQueryRows(int objectId, ViewSpec spec) + { + TableDef mq = _catalog.FindTable("MSysQueries") + ?? throw new InvalidOperationException("MSysQueries catalog table was not found."); + + // ACE's row order (verified against every Northwind view): type, end, distinct, TABLES, COLUMNS, + // joins, where. Tables must precede columns — a derived-table source defines an alias that the + // column expressions reference, and Access processes the rows in order, so columns-before-tables + // makes it fail to run the view (it opens, but SELECT-from-view errors). Order fields are + // per-attribute counters, independent of this insertion order. + Row(mq, objectId, StoredQueryFormat.AttrType, order: 1, flag: StoredQueryFormat.QueryTypeSelect); + Row(mq, objectId, StoredQueryFormat.AttrEnd, order: 1); + // Declared parameters (CREATE PROCEDURE) come right after the End row, before the tables. + for (int i = 0; i < (spec.Parameters?.Count ?? 0); i++) + Row(mq, objectId, StoredQueryFormat.AttrParameter, order: i + 1, + flag: spec.Parameters![i].TypeCode, name1: spec.Parameters[i].Name); + // DISTINCT and TOP are both StoredQueryFormat.AttrFlag (0x03) rows, distinguished by their Flag bits; a TOP row also + // carries the count in Name1. Give them distinct Order values so the composite PK stays unique. + int flagOrder = 1; + if (spec.Distinct) + Row(mq, objectId, StoredQueryFormat.AttrFlag, order: flagOrder++, flag: StoredQueryFormat.FlagDistinct); + if (spec.Top is { } top) + Row(mq, objectId, StoredQueryFormat.AttrFlag, order: flagOrder++, flag: StoredQueryFormat.FlagTop, name1: top.ToString(System.Globalization.CultureInfo.InvariantCulture)); + for (int i = 0; i < spec.Tables.Count; i++) + { + ViewTableSpec t = spec.Tables[i]; + // A derived table stores its subquery SQL in Expression (Name1 empty); a named table uses Name1. + if (t.SubquerySql is { } sub) + Row(mq, objectId, StoredQueryFormat.AttrTable, order: i + 1, expression: sub, name2: t.Alias); + else + Row(mq, objectId, StoredQueryFormat.AttrTable, order: i + 1, name1: t.Table, name2: t.Alias); + } + for (int i = 0; i < spec.Columns.Count; i++) + Row(mq, objectId, StoredQueryFormat.AttrColumn, order: i + 1, flag: 0, + expression: spec.Columns[i].Expression, name1: spec.Columns[i].Alias); + for (int i = 0; i < spec.Joins.Count; i++) + { + ViewJoinSpec j = spec.Joins[i]; + Row(mq, objectId, StoredQueryFormat.AttrJoin, order: i + 1, flag: (short)j.Kind, expression: j.Condition, name1: j.LeftAlias, name2: j.RightAlias); + } + if (spec.Where is { } where) + Row(mq, objectId, StoredQueryFormat.AttrWhere, order: 1, expression: where); + for (int i = 0; i < (spec.GroupBy?.Count ?? 0); i++) + Row(mq, objectId, StoredQueryFormat.AttrGroupBy, order: i + 1, flag: 0, expression: spec.GroupBy![i]); + for (int i = 0; i < (spec.OrderBy?.Count ?? 0); i++) + Row(mq, objectId, StoredQueryFormat.AttrOrderBy, order: i + 1, expression: spec.OrderBy![i].Expression, + name1: spec.OrderBy[i].Descending ? "d" : null); + } + + private void Row(TableDef mq, int objectId, byte attribute, int order, + short? flag = null, string? expression = null, string? name1 = null, string? name2 = null) + { + var values = new object?[mq.Columns.Count]; + SetByName(mq, values, "ObjectId", objectId); + SetByName(mq, values, "Attribute", attribute); + var orderBytes = new byte[4]; + BinaryPrimitives.WriteInt32BigEndian(orderBytes, order); // 4-byte big-endian per-attribute counter + SetByName(mq, values, "Order", orderBytes); + if (flag is { } f) SetByName(mq, values, "Flag", f); + if (expression is not null) SetByName(mq, values, "Expression", expression); + if (name1 is not null) SetByName(mq, values, "Name1", name1); + if (name2 is not null) SetByName(mq, values, "Name2", name2); + new RowInserter(_channel, mq).Insert(values, updateIndexes: true); + } + + private static void SetByName(TableDef table, object?[] values, string column, object value) + { + ColumnDef def = table.FindColumn(column) + ?? throw new InvalidOperationException($"'{table.Name}' is missing the '{column}' column."); + values[def.Index] = value; + } + + private static int ColumnIndex(TableDef table, string column) => + (table.FindColumn(column) ?? throw new InvalidOperationException($"'{table.Name}' is missing the '{column}' column.")).Index; +} diff --git a/src/LibRed/LibRed.EFCore/Design/Internal/LibRedDesignTimeServices.cs b/src/LibRed/LibRed.EFCore/Design/Internal/LibRedDesignTimeServices.cs new file mode 100644 index 00000000..0c74462e --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Design/Internal/LibRedDesignTimeServices.cs @@ -0,0 +1,24 @@ +using EntityFrameworkCore.Jet.Design.Internal; +using EntityFrameworkCore.LibRed.Scaffolding.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.Extensions.DependencyInjection; + +namespace EntityFrameworkCore.LibRed.Design.Internal; + +/// +/// Design-time services for the LibRed provider. Reuses EFCore.Jet's design services but swaps +/// the database-model factory for LibRed's catalog-backed one, so reverse-engineering reads the +/// schema natively instead of via INFORMATION_SCHEMA/ADOX. +/// +public class LibRedDesignTimeServices : JetDesignTimeServices +{ + public override void ConfigureDesignTimeServices(IServiceCollection serviceCollection) + { + base.ConfigureDesignTimeServices(serviceCollection); + // Registered after the base Jet factory; the later registration wins on resolution. Scoped, NOT + // singleton, to match EF Core's conventional lifetime for IDatabaseModelFactory (which the base Jet + // registration gets via TryAdd): the factory depends on the scoped scaffolding logger, so a singleton + // would capture a scoped ILoggerFactory and fail service-provider scope validation. + serviceCollection.AddScoped(); + } +} diff --git a/src/LibRed/LibRed.EFCore/Extensions/LibRedDbContextOptionsBuilderExtensions.cs b/src/LibRed/LibRed.EFCore/Extensions/LibRedDbContextOptionsBuilderExtensions.cs new file mode 100644 index 00000000..6a3af29b --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Extensions/LibRedDbContextOptionsBuilderExtensions.cs @@ -0,0 +1,268 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Data.Common; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Infrastructure.Internal; +using LibRed.Data; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; + +// ReSharper disable once CheckNamespace +namespace Microsoft.EntityFrameworkCore; + +/// LibRed-specific extension methods for . +public static class LibRedDbContextOptionsBuilderExtensions +{ + /// + /// Configures the context to connect to a Jet/ACE database via the native LibRed engine, but without + /// initially setting any or connection string. + /// + /// The builder being used to configure the context. + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + Action? libRedOptionsAction = null) + { + ArgumentNullException.ThrowIfNull(optionsBuilder); + + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(GetOrCreateExtension(optionsBuilder)); + + return ApplyConfiguration(optionsBuilder, libRedOptionsAction); + } + + /// + /// Configures the context to use the native LibRed engine against a Jet/ACE file. The + /// connection string takes the form Data Source=path\to\file.accdb (a bare file path + /// is also accepted). + /// + /// The builder being used to configure the context. + /// The file name or connection string of the database to connect to. + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + string? connectionString, + Action? libRedOptionsAction = null) + { + ArgumentNullException.ThrowIfNull(optionsBuilder); + + var extension = (LibRedOptionsExtension)GetOrCreateExtension(optionsBuilder) + .WithConnectionString(connectionString); + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); + + return ApplyConfiguration(optionsBuilder, libRedOptionsAction); + } + + /// + /// Configures the context to use the native LibRed engine against a Jet/ACE file. The + /// connection string takes the form Data Source=path\to\file.accdb (a bare file path + /// is also accepted). + /// + /// The builder being used to configure the context. + /// The file name or connection string of the database to connect to. + /// The to be used for all + /// data access operations by the LibRed connection. + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + string? connectionString, + DbProviderFactory dataAccessProviderFactory, + Action? libRedOptionsAction = null) + { + ArgumentNullException.ThrowIfNull(optionsBuilder); + ArgumentNullException.ThrowIfNull(dataAccessProviderFactory); + + var extension = (LibRedOptionsExtension)GetOrCreateExtension(optionsBuilder) + .WithConnectionString(connectionString); + extension = extension.WithDataAccessProviderFactory(dataAccessProviderFactory); + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); + + return ApplyConfiguration(optionsBuilder, libRedOptionsAction); + } + + // Note: Decision made to use DbConnection not SqlConnection: Issue #772 + /// + /// Configures the context to use the native LibRed engine. + /// + /// The builder being used to configure the context. + /// + /// An existing to be used to connect to the database. If the connection is + /// in the open state then EF will not open or close the connection. If the connection is in the closed + /// state then EF will open and close the connection as needed. + /// + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + DbConnection connection, + Action? libRedOptionsAction = null) + => UseLibRed(optionsBuilder, connection, false, libRedOptionsAction); + + // Note: Decision made to use DbConnection not SqlConnection: Issue #772 + /// + /// Configures the context to use the native LibRed engine. + /// + /// The builder being used to configure the context. + /// + /// An existing to be used to connect to the database. If the connection is + /// in the open state then EF will not open or close the connection. If the connection is in the closed + /// state then EF will open and close the connection as needed. + /// + /// + /// If , then EF will take ownership of the connection and will + /// dispose it in the same way it would dispose a connection created by EF. If , then the caller still + /// owns the connection and is responsible for its disposal. + /// + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + DbConnection connection, + bool contextOwnsConnection, + Action? libRedOptionsAction = null) + { + ArgumentNullException.ThrowIfNull(optionsBuilder); + ArgumentNullException.ThrowIfNull(connection); + + if (connection is not LibRedConnection) + { + throw new ArgumentException($"The {nameof(connection)} parameter must be of type {nameof(LibRedConnection)}."); + } + + var extension = (LibRedOptionsExtension)GetOrCreateExtension(optionsBuilder) + .WithConnection(connection, contextOwnsConnection); + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); + + return ApplyConfiguration(optionsBuilder, libRedOptionsAction); + } + + /// + /// Configures the context to connect to a Jet/ACE database via the native LibRed engine, but without + /// initially setting any or connection string. + /// + /// The builder being used to configure the context. + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + Action? libRedOptionsAction = null) + where TContext : DbContext + => (DbContextOptionsBuilder)UseLibRed( + (DbContextOptionsBuilder)optionsBuilder, libRedOptionsAction); + + /// + /// Configures the context to use the native LibRed engine against a Jet/ACE file. The + /// connection string takes the form Data Source=path\to\file.accdb (a bare file path + /// is also accepted). + /// + /// The builder being used to configure the context. + /// The file name or connection string of the database to connect to. + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + string? connectionString, + Action? libRedOptionsAction = null) + where TContext : DbContext + => (DbContextOptionsBuilder)UseLibRed( + (DbContextOptionsBuilder)optionsBuilder, connectionString, libRedOptionsAction); + + /// + /// Configures the context to use the native LibRed engine against a Jet/ACE file. The + /// connection string takes the form Data Source=path\to\file.accdb (a bare file path + /// is also accepted). + /// + /// The builder being used to configure the context. + /// The file name or connection string of the database to connect to. + /// The to be used for all + /// data access operations by the LibRed connection. + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + string? connectionString, + DbProviderFactory dataAccessProviderFactory, + Action? libRedOptionsAction = null) + where TContext : DbContext + => (DbContextOptionsBuilder)UseLibRed( + (DbContextOptionsBuilder)optionsBuilder, connectionString, dataAccessProviderFactory, libRedOptionsAction); + + // Note: Decision made to use DbConnection not SqlConnection: Issue #772 + /// + /// Configures the context to use the native LibRed engine. + /// + /// The type of context to be configured. + /// The builder being used to configure the context. + /// + /// An existing to be used to connect to the database. If the connection is + /// in the open state then EF will not open or close the connection. If the connection is in the closed + /// state then EF will open and close the connection as needed. + /// + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + DbConnection connection, + Action? libRedOptionsAction = null) + where TContext : DbContext + => (DbContextOptionsBuilder)UseLibRed( + (DbContextOptionsBuilder)optionsBuilder, connection, libRedOptionsAction); + + // Note: Decision made to use DbConnection not SqlConnection: Issue #772 + /// + /// Configures the context to use the native LibRed engine. + /// + /// The type of context to be configured. + /// The builder being used to configure the context. + /// + /// An existing to be used to connect to the database. If the connection is + /// in the open state then EF will not open or close the connection. If the connection is in the closed + /// state then EF will open and close the connection as needed. + /// + /// + /// If , then EF will take ownership of the connection and will + /// dispose it in the same way it would dispose a connection created by EF. If , then the caller still + /// owns the connection and is responsible for its disposal. + /// + /// An optional action to allow additional LibRed specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseLibRed( + this DbContextOptionsBuilder optionsBuilder, + DbConnection connection, + bool contextOwnsConnection, + Action? libRedOptionsAction = null) + where TContext : DbContext + => (DbContextOptionsBuilder)UseLibRed( + (DbContextOptionsBuilder)optionsBuilder, connection, contextOwnsConnection, libRedOptionsAction); + + private static LibRedOptionsExtension GetOrCreateExtension(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.Options.FindExtension() + ?? new LibRedOptionsExtension(); + + private static DbContextOptionsBuilder ApplyConfiguration( + DbContextOptionsBuilder optionsBuilder, + Action? libRedOptionsAction) + { + ConfigureWarnings(optionsBuilder); + + libRedOptionsAction?.Invoke(new LibRedDbContextOptionsBuilder(optionsBuilder)); + + var extension = GetOrCreateExtension(optionsBuilder); + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); + + return optionsBuilder; + } + + private static void ConfigureWarnings(DbContextOptionsBuilder optionsBuilder) + { + var coreOptionsExtension + = optionsBuilder.Options.FindExtension() + ?? new CoreOptionsExtension(); + + coreOptionsExtension = RelationalOptionsExtension.WithDefaultWarningConfiguration(coreOptionsExtension); + + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(coreOptionsExtension); + } +} diff --git a/src/LibRed/LibRed.EFCore/Extensions/LibRedServiceCollectionExtensions.cs b/src/LibRed/LibRed.EFCore/Extensions/LibRedServiceCollectionExtensions.cs new file mode 100644 index 00000000..6588608b --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Extensions/LibRedServiceCollectionExtensions.cs @@ -0,0 +1,81 @@ +using EntityFrameworkCore.Jet.Infrastructure.Internal; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Infrastructure.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.DependencyInjection.Extensions; + +// ReSharper disable once CheckNamespace +namespace Microsoft.Extensions.DependencyInjection; + +/// LibRed-specific registration on top of the EFCore.Jet provider services. +public static class LibRedServiceCollectionExtensions +{ + /// + /// Registers the EFCore.Jet provider services, then overrides the LibRed-specific pieces. + /// Today that is the relational connection (native engine instead of ODBC/OLE DB), the + /// database creator, and the default execution strategy; the SQL generator and others are + /// inherited from EFCore.Jet for now. The later registration wins when a single service is + /// resolved, so this overrides the Jet defaults. + /// + public static IServiceCollection AddEntityFrameworkLibRed(this IServiceCollection serviceCollection) + { + serviceCollection.AddEntityFrameworkJet(); + // ILibRedRelationalConnection is the concrete registration LibRed owns; IJetRelationalConnection + // (and therefore IRelationalConnection, which Jet forwards to it) resolve to the same instance. + // Registering on the LibRed interface — not IJetRelationalConnection — lets tests and downstream + // code override "the LibRed connection" without naming a Jet type. + // TryAdd/Replace (never plain Add) so a second AddEntityFrameworkLibRed() call is idempotent and Jet's + // original registration doesn't linger beside ours — the service-collection conformance test checks both + // (Repeated_calls_to_add_do_not_modify_collection, Required_services_are_registered_with_expected_lifetimes). + serviceCollection.TryAddScoped(); + serviceCollection.Replace(ServiceDescriptor.Scoped( + p => p.GetRequiredService())); + // Answer existence / has-tables from LibRed's catalog instead of INFORMATION_SCHEMA + ADOX. + serviceCollection.Replace(ServiceDescriptor.Scoped()); + // Substitute the driver-free `long` mapping (DbType reflects the decimal(20,0) it's stored as) for + // EFCore.Jet's, which only reports Decimal via an OLE DB/ODBC reflection poke a native engine can't use. + // + // This MUST go through the EF services builder (not serviceCollection.AddSingleton) so it lands in + // EF Core's internal service provider as a *per-options* singleton — one instance per unique + // DbContextOptions, each built with that context's own IJetOptions. A plain application singleton is + // constructed once with whichever context resolves it first and then shared across every context, + // baking in the wrong UseShortTextForSystemString (the model-building context, False, wins over the + // store context, True) — which made unbounded strings scaffold/migrate as `longchar` instead of + // `varchar(255)`. TryAdd won't replace Jet's existing registration, so drop it first — but drop ONLY + // EFCore.Jet's own JetTypeMappingSource, NOT a custom source a fixture/downstream registered before us. + // (RemoveAll wiped those too: e.g. the EverythingIsStrings/EverythingIsBytes + // fixtures register their own all-string/all-byte IRelationalTypeMappingSource, then call AddProviderServices + // → us; when one is present Jet's TryAdd already no-op'd, so there's no Jet mapping to remove and our TryAdd + // below correctly no-ops too, leaving the custom source in place.) + foreach (ServiceDescriptor jetMapping in serviceCollection.Where(d => + d.ServiceType == typeof(IRelationalTypeMappingSource) && + d.ImplementationType == typeof(JetTypeMappingSource)).ToList()) + serviceCollection.Remove(jetMapping); + new EntityFrameworkRelationalServicesBuilder(serviceCollection) + .TryAdd(); + serviceCollection.Replace(ServiceDescriptor.Scoped()); + // Report LibRed's own provider identity in logs/diagnostics ("EntityFrameworkCore.LibRed", not + // "EntityFrameworkCore.Jet"): IDatabaseProvider's Name is DatabaseProvider's + // options-extension assembly name. Swap Jet's registration (keyed on JetOptionsExtension) for one keyed + // on LibRedOptionsExtension. Same remove-then-TryAdd shape as the other service swaps. + foreach (ServiceDescriptor jetProvider in serviceCollection.Where(d => + d.ServiceType == typeof(IDatabaseProvider) && + d.ImplementationType == typeof(DatabaseProvider)).ToList()) + serviceCollection.Remove(jetProvider); + new EntityFrameworkRelationalServicesBuilder(serviceCollection) + .TryAdd>(); + // EFCore.Jet's JetTransaction disables savepoints (ACE has none). LibRed's engine and ADO layer both + // support them, so swap in a factory that builds EF Core's base RelationalTransaction, which honours + // savepoints via the ADO transaction. Same shape as the type-mapping swap above: drop Jet's descriptor + // (TryAdd won't replace it), then re-add ours through the services builder at the conventional lifetime. + foreach (ServiceDescriptor jetTxFactory in serviceCollection.Where(d => + d.ServiceType == typeof(IRelationalTransactionFactory) && + d.ImplementationType == typeof(JetTransactionFactory)).ToList()) + serviceCollection.Remove(jetTxFactory); + new EntityFrameworkRelationalServicesBuilder(serviceCollection) + .TryAdd(); + return serviceCollection; + } +} diff --git a/src/LibRed/LibRed.EFCore/Infrastructure/Internal/LibRedOptionsExtension.cs b/src/LibRed/LibRed.EFCore/Infrastructure/Internal/LibRedOptionsExtension.cs new file mode 100644 index 00000000..f67a527f --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Infrastructure/Internal/LibRedOptionsExtension.cs @@ -0,0 +1,45 @@ +using System.Data.Common; +using EntityFrameworkCore.Jet.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.Extensions.DependencyInjection; + +namespace EntityFrameworkCore.LibRed.Infrastructure.Internal; + +/// +/// Options extension for the LibRed provider. It reuses EFCore.Jet's options extension wholesale +/// (so every Jet service that looks for a still finds one) but +/// applies the LibRed service overrides instead of the plain Jet ones. +/// +public class LibRedOptionsExtension : JetOptionsExtension +{ + public LibRedOptionsExtension() + { + } + + protected LibRedOptionsExtension(LibRedOptionsExtension copyFrom) + : base(copyFrom) + { + } + + public override void ApplyServices(IServiceCollection services) + => services.AddEntityFrameworkLibRed(); + + // Must preserve the derived type: WithConnectionString/WithConnection clone the extension, + // and a plain JetOptionsExtension clone would silently revert ApplyServices to AddEntityFrameworkJet. + protected override RelationalOptionsExtension Clone() + => new LibRedOptionsExtension(this); + + // Covariant overrides: the base With...() methods clone via the (overridden) Clone() above, so the + // returned instance is already a LibRedOptionsExtension at runtime; this just fixes the static type. + public override LibRedOptionsExtension WithUseOuterSelectSkipEmulationViaDataReader(bool enabled) + => (LibRedOptionsExtension)base.WithUseOuterSelectSkipEmulationViaDataReader(enabled); + + public override LibRedOptionsExtension WithEnableMillisecondsSupport(bool enabled) + => (LibRedOptionsExtension)base.WithEnableMillisecondsSupport(enabled); + + public override LibRedOptionsExtension WithUseShortTextForSystemString(bool enabled) + => (LibRedOptionsExtension)base.WithUseShortTextForSystemString(enabled); + + public override LibRedOptionsExtension WithDataAccessProviderFactory(DbProviderFactory dataAccessProviderFactory) + => (LibRedOptionsExtension)base.WithDataAccessProviderFactory(dataAccessProviderFactory); +} diff --git a/src/LibRed/LibRed.EFCore/Infrastructure/LibRedDbContextOptionsBuilder.cs b/src/LibRed/LibRed.EFCore/Infrastructure/LibRedDbContextOptionsBuilder.cs new file mode 100644 index 00000000..11d8b242 --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Infrastructure/LibRedDbContextOptionsBuilder.cs @@ -0,0 +1,86 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.Infrastructure +{ + /// + /// Provides extension methods on and + /// to configure a to use with Jet/Access and EntityFrameworkCore.LibRed. + /// + /// + /// Initializes a new instance of the class. + /// + /// The options builder. + public class LibRedDbContextOptionsBuilder(DbContextOptionsBuilder optionsBuilder) + : RelationalDbContextOptionsBuilder(optionsBuilder) + { + + /// + /// Use a ROW_NUMBER() in queries instead of OFFSET/FETCH. This method is backwards-compatible to Jet 2005. + /// + // [Obsolete("Row-number paging is no longer supported. See https://aka.ms/AA6h122 for more information.")] + // public virtual LibRedDbContextOptionsBuilder UseRowNumberForPaging(bool useRowNumberForPaging = true) + // => WithOption(e => e.WithRowNumberPaging(useRowNumberForPaging)); + + /// + /// Jet/ACE doesn't natively support row skipping. When this option is enabled, row skipping will be + /// emulated in the most outer SELECT statement, by letting the JetDataReader ignore as many returned rows + /// as should have been skipped by the database. + /// This will only work when `JetCommand.ExecuteDataReader()` is beeing used to execute the `JetCommand`. + /// It is recommanded to not use this option, but to switch to client evaluation instead, by inserting a + /// call to either `AsEnumerable()`, `AsAsyncEnumerable()`, `ToList()`, or `ToListAsync()` and only then + /// to use `Skip()`. This will work in all cases and independent of the specific `JetCommand.Execute()` + /// method called. + /// + [Obsolete("This method exists for backward compatibility reasons only. Switch to client evaluation instead.")] + public virtual LibRedDbContextOptionsBuilder UseOuterSelectSkipEmulationViaDataReader(bool enabled = true) + => WithOption(e => e.WithUseOuterSelectSkipEmulationViaDataReader(enabled)); + + /// + /// Configures the context support milliseconds in `DateTime`, `DateTimeOffset` and `TimeSpan` values when + /// accessing Jet databases. Jet has no native support for milliseconds, therefore this feature is opt-in. + /// + public virtual LibRedDbContextOptionsBuilder EnableMillisecondsSupport(bool enabled = true) + => WithOption(e => e.WithEnableMillisecondsSupport(enabled)); + + + /// + /// Set this to enabled to map the System.String CLR type to the Jet `Short Text` data type instead of the + /// Long Text data type. This will limit the maximum length of strings to 255 characters. + /// As System.String does not have a size it is normally mapped to 'lonchar' or 'memo' (SQL Server is 'nvarchar(max)' + /// Jet/Ace has limitations when using memo for strings: + /// - Joins based on the memo column are not supported + /// - Ordering the column (specially the implicit ordering) can be a bit different to expected behaviour + /// + public virtual LibRedDbContextOptionsBuilder UseShortTextForSystemString(bool enabled = true) + => WithOption(e => e.WithUseShortTextForSystemString(enabled)); + + /// + /// Configures the context to use the default retrying . + /// + public virtual LibRedDbContextOptionsBuilder EnableRetryOnFailure() + => ExecutionStrategy(c => new LibRedRetryingExecutionStrategy(c)); + + /// + /// Configures the context to use the default retrying . + /// + public virtual LibRedDbContextOptionsBuilder EnableRetryOnFailure(int maxRetryCount) + => ExecutionStrategy(c => new LibRedRetryingExecutionStrategy(c, maxRetryCount)); + + /// + /// Configures the context to use the default retrying . + /// + /// The maximum number of retry attempts. + /// The maximum delay between retries. + /// Additional SQL error numbers that should be considered transient. + public virtual LibRedDbContextOptionsBuilder EnableRetryOnFailure( + int maxRetryCount, + TimeSpan maxRetryDelay, + ICollection errorNumbersToAdd) + => ExecutionStrategy(c => new LibRedRetryingExecutionStrategy(c, maxRetryCount, maxRetryDelay, errorNumbersToAdd)); + } +} \ No newline at end of file diff --git a/src/LibRed/LibRed.EFCore/LibRed.EFCore.csproj b/src/LibRed/LibRed.EFCore/LibRed.EFCore.csproj new file mode 100644 index 00000000..14b52f26 --- /dev/null +++ b/src/LibRed/LibRed.EFCore/LibRed.EFCore.csproj @@ -0,0 +1,26 @@ + + + + $(JetTargetFramework) + EntityFrameworkCore.LibRed + EntityFrameworkCore.LibRed + Entity Framework Core provider built on the LibRed ADO.NET provider and native engine. + + $(NoWarn);EF1001;CA1416 + AnyCPU;x86;x64 + + + + + + + + + + + + + diff --git a/src/LibRed/LibRed.EFCore/LibRedDesignTimeMarker.cs b/src/LibRed/LibRed.EFCore/LibRedDesignTimeMarker.cs new file mode 100644 index 00000000..cf904ecb --- /dev/null +++ b/src/LibRed/LibRed.EFCore/LibRedDesignTimeMarker.cs @@ -0,0 +1,46 @@ +using LibRed.Data; + +namespace EntityFrameworkCore.LibRed; + +/// +/// Placeholder for the EF Core provider built on the native LibRed engine +/// (UseLibRed(...) options extension, type mappings, SQL generation, migrations). +/// +/// +/// The existing EntityFrameworkCore.Jet provider targets ODBC/OleDb and is the +/// reference for the EF Core surface to mirror here, but this provider will sit on +/// instead, making it cross-platform. +/// +/// Registration plan. EFCore.Jet wires every provider service through DI in +/// JetServiceCollectionExtensions.AddEntityFrameworkJet() +/// (src/EFCore.Jet/Extensions/JetServiceCollectionExtensions.cs), built with an +/// EntityFrameworkRelationalServicesBuilder. LibRed.EFCore exposes its own +/// AddEntityFrameworkLibRed() that keeps as much of EFCore.Jet as possible +/// and overrides only the LibRed-specific services on top: +/// +/// +/// +/// IQuerySqlGeneratorFactory (today JetQuerySqlGeneratorFactory, which +/// creates JetQuerySqlGenerator) — the biggest difference. Because LibRed owns +/// both SQL generation and the engine/parser, the generator can shed the ACE-pleasing +/// contortions (parenthesised multi-way joins, comma-vs-JOIN quirks, CBOOL/CLNG/TOP-SKIP +/// gymnastics) that exist only to satisfy the OLE DB/ODBC → ACE path. Subclass/customise +/// on top of the Jet generator rather than rewrite. +/// +/// +/// The connection (IRelationalConnection / IJetRelationalConnection) → a +/// LibRed connection over LibRed.Ado instead of the OLE DB/ODBC JetConnection. +/// +/// +/// +/// Consequence: because EF SQL generation is controlled top-to-bottom, the LibRed engine +/// only needs to accept the SQL EF actually emits — not arbitrary Jet syntax. Note when +/// implementing: the Jet builder uses TryAdd (add-if-absent), so confirm the override +/// ordering (register LibRed's services first, or replace afterward). +/// +/// +public static class LibRedProviderInfo +{ + /// Invariant name suitable for ADO.NET provider registration. + public const string InvariantName = "LibRed.Data"; +} diff --git a/src/LibRed/LibRed.EFCore/LibRedRetryingExecutionStrategy.cs b/src/LibRed/LibRed.EFCore/LibRedRetryingExecutionStrategy.cs new file mode 100644 index 00000000..758be97f --- /dev/null +++ b/src/LibRed/LibRed.EFCore/LibRedRetryingExecutionStrategy.cs @@ -0,0 +1,136 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.Storage; + +// ReSharper disable once CheckNamespace +namespace Microsoft.EntityFrameworkCore; + +/// +/// An implementation for retrying failed executions +/// on LibRed. +/// +/// +/// Same shape as EFCore.Jet's retrying strategy, but transient-failure detection is LibRed-native +/// (): LibRed doesn't raise +/// OleDbException/OdbcException, so this retries on plus +/// any whose error number the caller passes to +/// errorNumbersToAdd. +/// +public class LibRedRetryingExecutionStrategy : ExecutionStrategy +{ + private readonly HashSet? _additionalErrorNumbers; + + /// + /// Creates a new instance of . + /// + /// The context on which the operations will be invoked. + /// + /// The default retry limit is 6, which means that the total amount of time spent before failing is about a minute. + /// + public LibRedRetryingExecutionStrategy( + DbContext context) + : this(context, DefaultMaxRetryCount) + { + } + + /// + /// Creates a new instance of . + /// + /// Parameter object containing service dependencies. + public LibRedRetryingExecutionStrategy( + ExecutionStrategyDependencies dependencies) + : this(dependencies, DefaultMaxRetryCount) + { + } + + /// + /// Creates a new instance of . + /// + /// The context on which the operations will be invoked. + /// The maximum number of retry attempts. + public LibRedRetryingExecutionStrategy( + DbContext context, + int maxRetryCount) + : this(context, maxRetryCount, DefaultMaxDelay, errorNumbersToAdd: null) + { + } + + /// + /// Creates a new instance of . + /// + /// Parameter object containing service dependencies. + /// The maximum number of retry attempts. + public LibRedRetryingExecutionStrategy( + ExecutionStrategyDependencies dependencies, + int maxRetryCount) + : this(dependencies, maxRetryCount, DefaultMaxDelay, errorNumbersToAdd: null) + { + } + + /// + /// Creates a new instance of . + /// + /// The context on which the operations will be invoked. + /// The maximum number of retry attempts. + /// The maximum delay between retries. + /// Additional error numbers that should be considered transient. + public LibRedRetryingExecutionStrategy( + DbContext context, + int maxRetryCount, + TimeSpan maxRetryDelay, + IEnumerable? errorNumbersToAdd) + : base( + context, + maxRetryCount, + maxRetryDelay) + { + _additionalErrorNumbers = errorNumbersToAdd?.ToHashSet(); + } + + /// + /// Creates a new instance of . + /// + /// Parameter object containing service dependencies. + /// The maximum number of retry attempts. + /// The maximum delay between retries. + /// Additional error numbers that should be considered transient. + public LibRedRetryingExecutionStrategy( + ExecutionStrategyDependencies dependencies, + int maxRetryCount, + TimeSpan maxRetryDelay, + IEnumerable? errorNumbersToAdd) + : base(dependencies, maxRetryCount, maxRetryDelay) + { + _additionalErrorNumbers = errorNumbersToAdd?.ToHashSet(); + } + + /// + /// Determines whether the specified exception represents a transient failure that can be + /// compensated by a retry. Additional exceptions to retry on can be passed to the constructor. + /// + /// The exception object to be verified. + /// + /// true if the specified exception is considered as transient, otherwise false. + /// + protected override bool ShouldRetryOn(Exception exception) + => LibRedTransientExceptionDetector.ShouldRetryOn(exception, _additionalErrorNumbers); + + /// + /// Determines whether the operation should be retried and the delay before the next attempt. + /// + /// The exception thrown during the last execution attempt. + /// + /// Returns the delay indicating how long to wait for before the next execution attempt if the operation should be retried; + /// null otherwise + /// + protected override TimeSpan? GetNextDelay(Exception lastException) + { + var baseDelay = base.GetNextDelay(lastException); + if (baseDelay == null) + { + return null; + } + return baseDelay; + } +} diff --git a/src/LibRed/LibRed.EFCore/Properties/AssemblyInfo.cs b/src/LibRed/LibRed.EFCore/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..e4c1b95a --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using Microsoft.EntityFrameworkCore.Design; + +[assembly: DesignTimeProviderServices("EntityFrameworkCore.LibRed.Design.Internal.LibRedDesignTimeServices")] diff --git a/src/LibRed/LibRed.EFCore/Scaffolding/Internal/LibRedDatabaseModelFactory.cs b/src/LibRed/LibRed.EFCore/Scaffolding/Internal/LibRedDatabaseModelFactory.cs new file mode 100644 index 00000000..3bcc48f5 --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Scaffolding/Internal/LibRedDatabaseModelFactory.cs @@ -0,0 +1,393 @@ +using System.Data.Common; +using System.Text.RegularExpressions; +using EntityFrameworkCore.Jet.Internal; // FK scaffolding-logger extensions (ForeignKeyFound, …) +using EntityFrameworkCore.Jet.Metadata.Internal; // JetAnnotationNames (identity seed/increment) +using LibRed; +using LibRed.Catalog; +using LibRed.Data; +using LibRed.Engine.Schema; // shared store-type/nullability derivations (JetStoreType) — kept in sync with INFORMATION_SCHEMA +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Scaffolding.Metadata; + +namespace EntityFrameworkCore.LibRed.Scaffolding.Internal; + +/// +/// Builds the scaffolding directly from LibRed's own catalog +/// (JetCatalog) — tables, columns, primary keys, indexes and relationships — replacing +/// EFCore.Jet's INFORMATION_SCHEMA-over-ADOX reader. Cross-platform, no Access required. The +/// shape mirrors JetDatabaseModelFactory (Get* helpers + scaffolding logging) so the two +/// stay easy to compare. +/// +public class LibRedDatabaseModelFactory(IDiagnosticsLogger logger) + : DatabaseModelFactory +{ + private readonly IDiagnosticsLogger _logger = logger; + + public override DatabaseModel Create(string connectionString, DatabaseModelFactoryOptions options) + { + ArgumentException.ThrowIfNullOrEmpty(connectionString); + ArgumentNullException.ThrowIfNull(options); + + using var connection = new LibRedConnection(connectionString); + return Create(connection, options); + } + + public override DatabaseModel Create(DbConnection connection, DatabaseModelFactoryOptions options) + { + ArgumentNullException.ThrowIfNull(connection); + ArgumentNullException.ThrowIfNull(options); + + string path = connection is LibRedConnection libred ? libred.DataSource : new LibRedConnection(connection.ConnectionString).DataSource; + using var database = JetDatabase.Open(path); + + var databaseModel = new DatabaseModel { DatabaseName = Path.GetFileNameWithoutExtension(path) }; + + var tableList = options.Tables.ToList(); + Func? tableFilter = GenerateTableFilter(tableList); + + foreach (DatabaseTable table in GetTables(database, databaseModel, tableFilter)) + { + databaseModel.Tables.Add(table); + } + + foreach (string table in tableList) + { + string parsed = StripDelimiters(table); + if (databaseModel.Tables.All(t => !string.Equals(t.Name, parsed, StringComparison.OrdinalIgnoreCase))) + { + _logger.MissingTableWarning(table); + } + } + + // Access has no schemas, so every requested schema is "missing" — warn, matching EFCore.Jet's factory. + foreach (string schema in options.Schemas + .Where(s => !string.IsNullOrWhiteSpace(s)) + .Except(databaseModel.Tables.Select(t => t.Schema ?? string.Empty), StringComparer.OrdinalIgnoreCase)) + { + _logger.MissingSchemaWarning(schema); + } + + return databaseModel; + } + + private IReadOnlyList GetTables(JetDatabase database, DatabaseModel databaseModel, Func? filter) + { + var tables = new List(); + + foreach (TableDef definition in database.Catalog.UserTables) + { + _logger.TableFound(definition.Name); + + if (filter is not null && !filter(definition.Name)) continue; + + tables.Add(new DatabaseTable { Database = databaseModel, Name = definition.Name }); + } + + if (tables.Count > 0) + { + GetColumns(database, tables); + GetIndexes(database, tables); + GetRelations(database, tables); + } + + return tables; + } + + private void GetColumns(JetDatabase database, IReadOnlyList tables) + { + foreach (DatabaseTable table in tables) + { + TableDef definition = database.Catalog.FindTable(table.Name)!; + + for (int ordinal = 0; ordinal < definition.Columns.Count; ordinal++) + { + ColumnDef column = definition.Columns[ordinal]; + // Store type + nullability come from the shared JetStoreType so INFORMATION_SCHEMA and this + // scaffolder can never report a column differently (see JetStoreType). + string storeType = JetStoreType.StoreType(column); + int maxLength = column.Type == JetDataType.Text ? Math.Max(1, column.Length / 2) : 0; + bool nullable = JetStoreType.IsNullable(column); + + // DefaultValue is the expression's source text (e.g. "0", "'hi'"), read from the same blob. + string? defaultValueSql = column.DefaultValue; + + _logger.ColumnFound( + table.Name, + column.Name, + ordinal + 1, + storeType, + maxLength, + column.Precision, + column.Scale, + nullable, + column.IsAutoNumber, + defaultValueSql, + null, // computedValue + null); // computed-is-stored + + // Identity seed/increment (matching EFCore.Jet's scaffolder), read from the column's COUNTER + // config; a non-identity column carries a null seed/increment as Jet's does. + int? identitySeed = column.IsAutoNumber ? column.Seed : null; + int? identityIncrement = column.IsAutoNumber ? column.Increment : null; + + var databaseColumn = new DatabaseColumn + { + Table = table, + Name = column.Name, + StoreType = storeType, + IsNullable = nullable, + // Report the default both ways, as EFCore.Jet's scaffolder does: DefaultValueSql is the raw + // stored expression text (what the migrations tests assert against), DefaultValue is that text + // parsed to a CLR value when it's a simple literal (so the scaffolded model uses HasDefaultValue). + DefaultValueSql = defaultValueSql, + DefaultValue = ParseDefaultValue(column.Type, defaultValueSql), + ValueGenerated = column.IsAutoNumber ? ValueGenerated.OnAdd : null, + }; + + databaseColumn[JetAnnotationNames.IdentitySeed] = identitySeed; + databaseColumn[JetAnnotationNames.IdentityIncrement] = identityIncrement; + databaseColumn[JetAnnotationNames.Identity] = $"(${identitySeed}, ${identityIncrement})"; + + table.Columns.Add(databaseColumn); + } + } + } + + private void GetIndexes(JetDatabase database, IReadOnlyList tables) + { + foreach (DatabaseTable table in tables) + { + TableDef definition = database.Catalog.FindTable(table.Name)!; + + foreach (IndexDef index in definition.Indexes) + { + List columns = index.Columns + .Select(c => table.Columns.First(dc => dc.Name == c.Column.Name)) + .ToList(); + + if (index.IsPrimaryKey) + { + _logger.PrimaryKeyFound(index.Name, table.Name); + var pk = new DatabasePrimaryKey { Table = table, Name = index.Name }; + foreach (DatabaseColumn c in columns) pk.Columns.Add(c); + table.PrimaryKey = pk; + } + // A UNIQUE constraint and a UNIQUE index are byte-identical in Jet (verified vs ACE), so they + // can't be told apart structurally. Disambiguate by name like EFCore.Jet does: a unique index + // named `IX_…` (EF's index convention) is a unique *index*; any other unique index (EF names an + // alternate key `AK_…`) is a unique *constraint*. + else if (index.IsUnique && !index.Name.StartsWith("IX_", StringComparison.OrdinalIgnoreCase)) + { + _logger.UniqueConstraintFound(index.Name, table.Name); + var unique = new DatabaseUniqueConstraint { Table = table, Name = index.Name }; + foreach (DatabaseColumn c in columns) unique.Columns.Add(c); + table.UniqueConstraints.Add(unique); + } + else if (IsForeignKeyBackingIndex(database, table, index)) + { + // A relationship's own child (FK) index is named after the relationship and isn't a + // standalone user index — it's part of the foreign key, surfaced via GetRelations. Real + // Jet scaffolding doesn't report it either; surfacing it makes the RelationalDatabaseCleaner + // emit a DROP INDEX for it, which ACE (and LibRed) reject while the relationship still + // exists (the cleaner drops the relationship by dropping the table, not the index). + } + else + { + _logger.IndexFound(index.Name, table.Name, index.IsUnique); + // Surface the index's null-handling as the scaffolded Filter, as EFCore.Jet does: WITH IGNORE + // NULL → "IGNORE NULLS" (wins), else a Required (DISALLOW NULL) index → "DISALLOW NULL". + string? filter = index.IgnoreNulls ? "IGNORE NULLS" : index.Required ? "DISALLOW NULL" : null; + var dbIndex = new DatabaseIndex { Table = table, Name = index.Name, IsUnique = index.IsUnique, Filter = filter }; + // Carry the per-column sort direction (IsDescending, one bool per column) so scaffolding + // round-trips a DESC / mixed-order index — otherwise the list stays empty and a + // change-sort-order migration can't see the ordering. + foreach ((ColumnDef col, bool ascending) in index.Columns) + { + dbIndex.Columns.Add(table.Columns.First(dc => dc.Name == col.Name)); + dbIndex.IsDescending.Add(!ascending); + } + table.Indexes.Add(dbIndex); + } + } + } + } + + /// True if this non-unique index is a relationship's child (FK) backing index — named after a + /// relationship for which this table is the referencing (child) side, as both ACE and LibRed create it. + private static bool IsForeignKeyBackingIndex(JetDatabase database, DatabaseTable table, IndexDef index) + => database.Catalog.Relationships.Any(r => + string.Equals(r.Table, table.Name, StringComparison.OrdinalIgnoreCase) && + string.Equals(r.Name, index.Name, StringComparison.OrdinalIgnoreCase)); + + private void GetRelations(JetDatabase database, IReadOnlyList tables) + { + DatabaseTable? Find(string name) + => tables.FirstOrDefault(t => string.Equals(t.Name, name, StringComparison.OrdinalIgnoreCase)); + + foreach (ForeignKey relation in database.Catalog.Relationships) + { + DatabaseTable? referencingTable = Find(relation.Table); + if (referencingTable is null) continue; + + // Jet supports ON DELETE NO ACTION / CASCADE / SET NULL (read from MSysRelationships.grbit + + // the index-info action byte). EF's scaffolding models OnDelete only (no OnUpdate). + ReferentialAction onDeleteAction = relation.CascadeDelete ? ReferentialAction.Cascade + : relation.DeleteSetNull ? ReferentialAction.SetNull + : ReferentialAction.NoAction; + string onDelete = onDeleteAction switch + { + ReferentialAction.Cascade => "CASCADE", + ReferentialAction.SetNull => "SET NULL", + _ => "NO ACTION", + }; + + // Read the whole relation record — the full column set EFCore.Jet's JetDatabaseModelFactory / + // AdoxSchema surface (INFORMATION_SCHEMA.RELATIONS ON_UPDATE / IS_ENFORCED / IS_INHERITED) — even + // though EF's DatabaseForeignKey models only OnDelete. Read for parity, not consumed by EF. + string onUpdate = relation.CascadeUpdate ? "CASCADE" : "NO ACTION"; + bool isEnforced = relation.IsEnforced; + bool isInherited = relation.IsInherited; + _ = (onUpdate, isEnforced, isInherited); + + _logger.ForeignKeyFound(relation.Name, relation.Table, relation.ReferencedTable, onDelete); + + DatabaseTable? principalTable = Find(relation.ReferencedTable); + if (principalTable is null) + { + _logger.ForeignKeyReferencesMissingPrincipalTableWarning(relation.Name, relation.Table, relation.ReferencedTable); + continue; + } + + var foreignKey = new DatabaseForeignKey + { + Name = relation.Name, + Table = referencingTable, + PrincipalTable = principalTable, + OnDelete = onDeleteAction, + }; + + bool invalid = false; + foreach (var (column, referenced) in relation.Columns) + { + DatabaseColumn? referencingColumn = referencingTable.Columns.FirstOrDefault(c => string.Equals(c.Name, column, StringComparison.OrdinalIgnoreCase)); + DatabaseColumn? principalColumn = principalTable.Columns.FirstOrDefault(c => string.Equals(c.Name, referenced, StringComparison.OrdinalIgnoreCase)); + + if (principalColumn is null || referencingColumn is null) + { + invalid = true; + _logger.ForeignKeyPrincipalColumnMissingWarning(relation.Name, relation.Table, referenced, relation.ReferencedTable); + break; + } + + foreignKey.Columns.Add(referencingColumn); + foreignKey.PrincipalColumns.Add(principalColumn); + } + + if (invalid) continue; + + if (foreignKey.Columns.SequenceEqual(foreignKey.PrincipalColumns)) + { + _logger.ReflexiveConstraintIgnored(foreignKey.Name!, relation.Table); + continue; + } + + referencingTable.ForeignKeys.Add(foreignKey); + } + } + + private static Func? GenerateTableFilter(IReadOnlyList tables) + { + var wanted = tables.Where(t => !string.IsNullOrWhiteSpace(t)) + .Select(StripDelimiters) + .ToHashSet(StringComparer.OrdinalIgnoreCase); + return wanted.Count > 0 ? name => wanted.Contains(name) : null; + } + + /// Strips a leading/trailing `..` or [..] identifier delimiter so a filter given as + /// `K2` matches the bare table name K2 (mirrors EFCore.Jet's Parse). + private static string StripDelimiters(string name) + { + name = name.Trim(); + return name.Length >= 2 && ((name[0] == '`' && name[^1] == '`') || (name[0] == '[' && name[^1] == ']')) + ? name[1..^1] + : name; + } + + /// Converts a column's stored default-value text (e.g. "0", "'hi'", "-1") to + /// the CLR literal it represents, coerced to the column's type. Jet/ACE defaults are literal values, not + /// SQL expressions, so this becomes DatabaseColumn.DefaultValue. Unparseable text (e.g. a function + /// like Now()) is returned as-is. + private static object? ParseDefaultValue(JetDataType type, string? text) + { + text = text?.Trim(); + if (string.IsNullOrEmpty(text) || text.Equals("NULL", StringComparison.OrdinalIgnoreCase)) + return null; + + var ci = System.Globalization.CultureInfo.InvariantCulture; + try + { + return type switch + { + // Jet booleans are -1/0; also accept True/False. + JetDataType.Boolean => int.TryParse(text, out int i) ? i != 0 : bool.Parse(text), + JetDataType.Byte => byte.Parse(text, ci), + JetDataType.Int16 => short.Parse(text, ci), + JetDataType.Int32 => int.Parse(text, ci), + JetDataType.Int64 => long.Parse(text, ci), + JetDataType.Single => float.Parse(text, ci), + JetDataType.Double => double.Parse(text, ci), + JetDataType.Currency or JetDataType.FixedPoint => decimal.Parse(text, ci), + JetDataType.Guid => Guid.Parse(Unquote(text).Trim('{', '}')), + // Temporal defaults: a bare date → DateOnly, date+time → DateTime, a time span → TimeOnly/TimeSpan + // (matching EFCore.Jet's scaffolder). A function default (Now()/Date()) matches none → raw text. + JetDataType.DateTime or JetDataType.DateTimeExtended => ParseTemporalDefault(text) ?? (object)text, + // A string literal is single-quoted with doubled inner quotes: 'Bon app''' → Bon app'. + JetDataType.Text or JetDataType.Memo => ParseStringDefault(text), + _ => text, + }; + } + catch (Exception ex) when (ex is FormatException or OverflowException) + { + return text; // e.g. a default expression such as Now()/Date() — keep the raw text + } + } + + private static string Unquote(string s) + => s.Length >= 2 && s[0] == '\'' && s[^1] == '\'' + ? s[1..^1].Replace("''", "'") + : s; + + /// A string-column default is normally just the unquoted text, but a literal that reads as a + /// is surfaced as one: Jet has no datetimeoffset type, so EF models such a + /// column as text yet still expects the parsed value (matches EFCore.Jet's scaffolder). + private static object ParseStringDefault(string text) + { + string s = Unquote(text); + return DateTimeOffset.TryParse(s, System.Globalization.CultureInfo.InvariantCulture, + System.Globalization.DateTimeStyles.None, out DateTimeOffset dto) ? dto : s; + } + + /// Parses a temporal default's text into the CLR type it denotes — DateOnly (date only), DateTime + /// (date + time), TimeOnly/TimeSpan (a time), matching EFCore.Jet's scaffolder. Returns null when the text is + /// not a recognised temporal literal (e.g. a function like Now()), so the caller keeps the raw text. + private static object? ParseTemporalDefault(string text) + { + string s = Unquote(text.Trim()).Trim('#').Trim(); + var ci = System.Globalization.CultureInfo.InvariantCulture; + var t = TimeSpan.FromMilliseconds(1000); + if (Regex.IsMatch(s, @"^\d{4}-\d{2}-\d{2}$", default, t)) + return DateOnly.Parse(s, ci); + if (Regex.IsMatch(s, @"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(\.\d{1,7})?$", default, t)) + return DateTime.Parse(s, ci); + if (Regex.IsMatch(s, @"^-?(\d+\.)?\d{2}:\d{2}:\d{2}(\.\d{1,7})?$", default, t) + && TimeSpan.TryParse(s, ci, out var ts)) + return ts >= TimeOnly.MinValue.ToTimeSpan() && ts <= TimeOnly.MaxValue.ToTimeSpan() + ? TimeOnly.FromTimeSpan(ts) : ts; + return null; + } + +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/ILibRedRelationalConnection.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/ILibRedRelationalConnection.cs new file mode 100644 index 00000000..2ecf99cf --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/ILibRedRelationalConnection.cs @@ -0,0 +1,15 @@ +using EntityFrameworkCore.Jet.Storage.Internal; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// This API supports the Entity Framework Core infrastructure and is not intended to be used +/// directly from your code. This API may change or be removed in future releases. +/// +/// +/// No members of its own today — it exists so LibRed-specific services can depend on "the +/// LibRed connection" instead of the more general . +/// +public interface ILibRedRelationalConnection : IJetRelationalConnection +{ +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedDatabaseCreator.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedDatabaseCreator.cs new file mode 100644 index 00000000..e15b328a --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedDatabaseCreator.cs @@ -0,0 +1,59 @@ +using EntityFrameworkCore.Jet.Storage.Internal; +using LibRed.Data; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// Database creator that answers the existence and "has tables" checks from LibRed's own +/// catalog instead of EFCore.Jet's INFORMATION_SCHEMA query (which is served by DAO/ADOX). +/// This lets EnsureCreated run against LibRed-managed files cross-platform without Access. +/// +/// +/// Not sealed: mirrors EFCore.Jet's , which is also open for +/// test/derived doubles (see JetDatabaseCreatorTest.TestDatabaseCreator). +/// +public class LibRedDatabaseCreator( + RelationalDatabaseCreatorDependencies dependencies, + ILibRedRelationalConnection relationalConnection, + IRawSqlCommandBuilder rawSqlCommandBuilder) + : JetDatabaseCreator(dependencies, relationalConnection, rawSqlCommandBuilder) +{ + private readonly ILibRedRelationalConnection _connection = relationalConnection; + + // Jet's Create/Delete go through relationalConnection.CreateEmptyConnection() - a "masterless" + // connection used to run a CREATE/DROP DATABASE migration command. LibRedRelationalConnection + // doesn't support that (there's nothing to connect to before the file exists), so these bypass + // it entirely and go straight through LibRedConnection's own bootstrap (see its CreateDatabase + // remarks: it hands off to JetConnection.CreateDatabase/DAO-ADOX for now). + public override void Create() + => LibRedConnection.CreateDatabase(_connection.DbConnection.ConnectionString); + + public override void Delete() + { + _connection.Close(); + LibRedConnection.DropDatabase(_connection.DbConnection.ConnectionString); + } + + public override bool Exists() + => LibRedConnection.DatabaseExists(_connection.DbConnection.ConnectionString); + + public override bool HasTables() + { + _connection.Open(); + try + { + return ((LibRedConnection)_connection.DbConnection).HasUserTables(); + } + finally + { + _connection.Close(); + } + } + + public override Task HasTablesAsync(CancellationToken cancellationToken = default) + { + cancellationToken.ThrowIfCancellationRequested(); + return Task.FromResult(HasTables()); + } +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedExecutionStrategy.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedExecutionStrategy.cs new file mode 100644 index 00000000..ab8aec53 --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedExecutionStrategy.cs @@ -0,0 +1,71 @@ +using EntityFrameworkCore.Jet.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to +/// the same compatibility standards as public APIs. It may be changed or removed without notice in +/// any release. You should only use it directly in your code with extreme caution and knowing that +/// doing so can result in application failures when updating to a new Entity Framework Core release. +/// +/// +/// The default, non-retrying strategy; transient-failure detection is LibRed-native +/// (). +/// +public class LibRedExecutionStrategy(ExecutionStrategyDependencies dependencies) : IExecutionStrategy +{ + private ExecutionStrategyDependencies Dependencies { get; } = dependencies; + + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// any release. You should only use it directly in your code with extreme caution and knowing that + /// doing so can result in application failures when updating to a new Entity Framework Core release. + /// + public virtual bool RetriesOnFailure => false; + + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// any release. You should only use it directly in your code with extreme caution and knowing that + /// doing so can result in application failures when updating to a new Entity Framework Core release. + /// + public virtual TResult Execute( + TState state, + Func operation, + Func>? verifySucceeded) + { + try + { + return operation(Dependencies.CurrentContext.Context, state); + } + catch (Exception ex) when (ExecutionStrategy.CallOnWrappedException(ex, LibRedTransientExceptionDetector.ShouldRetryOn)) + { + throw new InvalidOperationException(JetStrings.TransientExceptionDetected, ex); + } + } + + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// any release. You should only use it directly in your code with extreme caution and knowing that + /// doing so can result in application failures when updating to a new Entity Framework Core release. + /// + public virtual async Task ExecuteAsync( + TState state, + Func> operation, + Func>>? verifySucceeded, + CancellationToken cancellationToken) + { + try + { + return await operation(Dependencies.CurrentContext.Context, state, cancellationToken); + } + catch (Exception ex) when (ExecutionStrategy.CallOnWrappedException(ex, LibRedTransientExceptionDetector.ShouldRetryOn)) + { + throw new InvalidOperationException(JetStrings.TransientExceptionDetected, ex); + } + } +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedExecutionStrategyFactory.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedExecutionStrategyFactory.cs new file mode 100644 index 00000000..d6c2e0fa --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedExecutionStrategyFactory.cs @@ -0,0 +1,38 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.DependencyInjection; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// +/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to +/// the same compatibility standards as public APIs. It may be changed or removed without notice in +/// any release. You should only use it directly in your code with extreme caution and knowing that +/// doing so can result in application failures when updating to a new Entity Framework Core release. +/// +/// +/// The service lifetime is . This means that each +/// instance will use its own instance of this service. +/// The implementation may depend on other services registered with any lifetime. +/// The implementation does not need to be thread-safe. +/// +/// +/// +/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to +/// the same compatibility standards as public APIs. It may be changed or removed without notice in +/// any release. You should only use it directly in your code with extreme caution and knowing that +/// doing so can result in application failures when updating to a new Entity Framework Core release. +/// +public class LibRedExecutionStrategyFactory( + ExecutionStrategyDependencies dependencies) : RelationalExecutionStrategyFactory(dependencies) +{ + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// any release. You should only use it directly in your code with extreme caution and knowing that + /// doing so can result in application failures when updating to a new Entity Framework Core release. + /// + protected override IExecutionStrategy CreateDefaultStrategy(ExecutionStrategyDependencies dependencies) + => new LibRedExecutionStrategy(dependencies); +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedLongTypeMapping.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedLongTypeMapping.cs new file mode 100644 index 00000000..e9757743 --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedLongTypeMapping.cs @@ -0,0 +1,38 @@ +using System.Data; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// A is emulated as decimal(20,0) on disk — Jet/ACE has no native 64-bit integer +/// before ACE 16, and LibRed targets Access 2007 (ACE 12) files. EFCore.Jet's JetLongTypeMapping keeps +/// its DbType as and, at parameter-configuration time, pokes the underlying +/// OLE DB / ODBC parameter to the Numeric type via reflection to work around an x86/x64 conversion bug in those +/// drivers. LibRed is a fully managed engine that consumes the parameter's value object directly (its DbType is +/// metadata only), so it needs neither that reflection poke nor a Decimal DbType: it keeps +/// — the natural type of the CLR value — while still declaring the +/// decimal(20, 0) store type for DDL. +/// +public class LibRedLongTypeMapping : LongTypeMapping +{ + public static new LibRedLongTypeMapping Default { get; } = new(); + + private LibRedLongTypeMapping() + : base(new RelationalTypeMappingParameters( + new CoreTypeMappingParameters(typeof(long), jsonValueReaderWriter: JsonInt64ReaderWriter.Instance), + "decimal(20, 0)", + StoreTypePostfix.PrecisionAndScale, + System.Data.DbType.Int64) + .WithPrecisionAndScale(20, 0)) + { + } + + protected LibRedLongTypeMapping(RelationalTypeMappingParameters parameters) + : base(parameters) + { + } + + protected override RelationalTypeMapping Clone(RelationalTypeMappingParameters parameters) + => new LibRedLongTypeMapping(parameters); +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedRelationalConnection.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedRelationalConnection.cs new file mode 100644 index 00000000..c0651232 --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedRelationalConnection.cs @@ -0,0 +1,22 @@ +using System.Data.Common; +using EntityFrameworkCore.Jet.Storage.Internal; +using LibRed.Data; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// Relational connection that creates a native instead of the +/// ODBC/OLE DB JetConnection. This is the single service LibRed must override to sit +/// the EFCore.Jet provider on its own managed engine. +/// +public class LibRedRelationalConnection(RelationalConnectionDependencies dependencies) + : JetRelationalConnection(dependencies), ILibRedRelationalConnection +{ + protected override DbConnection CreateDbConnection() + => new LibRedConnection { ConnectionString = ConnectionString }; + + public override IJetRelationalConnection CreateEmptyConnection() + => throw new NotSupportedException( + "LibRed does not support masterless (empty) connections yet — database creation/drop is not implemented."); +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedRelationalTransaction.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedRelationalTransaction.cs new file mode 100644 index 00000000..3fcdf5c9 --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedRelationalTransaction.cs @@ -0,0 +1,47 @@ +using System.Data.Common; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// EF Core relational transaction for LibRed that implements savepoints by calling the ADO transaction's +/// savepoint API directly, instead of the base 's SQL path. +/// The base issues savepoint SQL via ISqlGenerationHelper, but the inherited +/// JetSqlGenerationHelper generates an empty statement for every savepoint operation (Jet has no +/// savepoints, and its transaction throws before that SQL is ever reached). Executing that empty SQL is a silent +/// no-op — EF believes a savepoint exists when none does. LibRed's ADO LibRedTransaction already maps +/// Save/Rollback/Release to the engine's real savepoints, so we route straight to it. +/// +public class LibRedRelationalTransaction : RelationalTransaction +{ + private readonly DbTransaction _transaction; + + public LibRedRelationalTransaction( + IRelationalConnection connection, + DbTransaction transaction, + Guid transactionId, + IDiagnosticsLogger logger, + bool transactionOwned, + ISqlGenerationHelper sqlGenerationHelper) + : base(connection, transaction, transactionId, logger, transactionOwned, sqlGenerationHelper) + => _transaction = transaction; + + public override void CreateSavepoint(string name) => _transaction.Save(name); + + public override Task CreateSavepointAsync(string name, CancellationToken cancellationToken = default) + => _transaction.SaveAsync(name, cancellationToken); + + public override void RollbackToSavepoint(string name) => _transaction.Rollback(name); + + public override Task RollbackToSavepointAsync(string name, CancellationToken cancellationToken = default) + => _transaction.RollbackAsync(name, cancellationToken); + + public override void ReleaseSavepoint(string name) => _transaction.Release(name); + + public override Task ReleaseSavepointAsync(string name, CancellationToken cancellationToken = default) + => _transaction.ReleaseAsync(name, cancellationToken); + + public override bool SupportsSavepoints => true; +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedTransactionFactory.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedTransactionFactory.cs new file mode 100644 index 00000000..55d858ec --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedTransactionFactory.cs @@ -0,0 +1,29 @@ +using System.Data.Common; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// Produces EF Core's base rather than EFCore.Jet's JetTransaction. +/// JetTransaction overrides every savepoint operation to throw, because ACE/Jet has no savepoints — but +/// LibRed's engine does (PageChannel.CreateSavepoint/RollbackToSavepoint/ReleaseSavepoint) +/// and its ADO LibRedTransaction exposes them (SupportsSavepoints + Save/Rollback/ +/// Release). The base honours savepoints by delegating to the ADO +/// transaction, so LibRed uses it to get real savepoint support (EF nests a SaveChanges inside a user +/// transaction on one). +/// +public class LibRedTransactionFactory(RelationalTransactionFactoryDependencies dependencies) : IRelationalTransactionFactory +{ + protected virtual RelationalTransactionFactoryDependencies Dependencies { get; } = dependencies; + + public virtual RelationalTransaction Create( + IRelationalConnection connection, + DbTransaction transaction, + Guid transactionId, + IDiagnosticsLogger logger, + bool transactionOwned) + => new LibRedRelationalTransaction( + connection, transaction, transactionId, logger, transactionOwned, Dependencies.SqlGenerationHelper); +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedTransientExceptionDetector.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedTransientExceptionDetector.cs new file mode 100644 index 00000000..429d16d2 --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedTransientExceptionDetector.cs @@ -0,0 +1,33 @@ +using LibRed.Data; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// Detects the exceptions caused by LibRed transient failures. Unlike EFCore.Jet's detector, this +/// does not look at OleDbException/OdbcException — LibRed is a native managed engine and +/// surfaces its own . A is always +/// transient; a is transient when its +/// is in the caller-supplied set of transient error numbers (LibRed has no built-in transient codes yet). +/// +public static class LibRedTransientExceptionDetector +{ + public static bool ShouldRetryOn(Exception ex) + => ShouldRetryOn(ex, additionalErrorNumbers: null); + + public static bool ShouldRetryOn(Exception ex, ISet? additionalErrorNumbers) + { + if (ex is TimeoutException) + { + return true; + } + + if (ex is LibRedException libRedException + && additionalErrorNumbers is not null + && additionalErrorNumbers.Contains(libRedException.Number)) + { + return true; + } + + return false; + } +} diff --git a/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedTypeMappingSource.cs b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedTypeMappingSource.cs new file mode 100644 index 00000000..9d4fa0f2 --- /dev/null +++ b/src/LibRed/LibRed.EFCore/Storage/Internal/LibRedTypeMappingSource.cs @@ -0,0 +1,28 @@ +using EntityFrameworkCore.Jet.Infrastructure.Internal; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.Storage.Internal; + +/// +/// LibRed's relational type-mapping source. It reuses every EFCore.Jet mapping unchanged, but substitutes a +/// driver-free mapping () whose DbType reflects the type +/// the value is actually stored as (decimal(20,0)) rather than Int64 — EFCore.Jet only reports +/// Decimal via an OLE DB / ODBC reflection poke that a native engine has no reason to reproduce. +/// +public class LibRedTypeMappingSource : JetTypeMappingSource +{ + public LibRedTypeMappingSource( + TypeMappingSourceDependencies dependencies, + RelationalTypeMappingSourceDependencies relationalDependencies, + IJetOptions options) + : base(dependencies, relationalDependencies, options) + { + } + + protected override RelationalTypeMapping? FindMapping(in RelationalTypeMappingInfo mappingInfo) + { + RelationalTypeMapping? mapping = base.FindMapping(mappingInfo); + return mapping is JetLongTypeMapping ? LibRedLongTypeMapping.Default : mapping; + } +} diff --git a/src/LibRed/LibRed.Engine/Execution/AccessTypeMapper.cs b/src/LibRed/LibRed.Engine/Execution/AccessTypeMapper.cs new file mode 100644 index 00000000..9f6c4e61 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/AccessTypeMapper.cs @@ -0,0 +1,161 @@ +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Execution; + +/// +/// Maps a CREATE TABLE column's declared SQL/Access type name to a storage . +/// Aliases follow Microsoft's "Equivalent ANSI SQL Data Types" reference: +/// https://learn.microsoft.com/office/client-developer/access/desktop-database-reference/equivalent-ansi-sql-data-types +/// EFCore.Jet itself defaults to a subset (counter, long, single, double, currency, datetime, +/// yesno, guid, decimal, varchar, …), but every documented alias is accepted. +/// +internal static class AccessTypeMapper +{ + public static ColumnSpec ToColumnSpec(ColumnDefinition column, JetVersion version) => + MapType(column, version) with { IsNullable = !column.NotNull }; + + private static ColumnSpec MapType(ColumnDefinition column, JetVersion version) + { + // Collapse any internal whitespace so two-word aliases ("character varying") match. + string t = string.Join(' ', column.TypeName.ToUpperInvariant().Split((char[]?)null, StringSplitOptions.RemoveEmptyEntries)); + + // BIGINT and DATETIME2 were added in DIFFERENT format versions — verified against files authored with + // each feature enabled: BIGINT (Large Number) forces the ACE 16 / Access 2016 format (version byte + // 0x05), while DATETIME2 (Date/Time Extended) forces the ACE 17 / 2019+ format (0x06). On any older + // format the engine can't represent the type, so refuse to create/alter a column to one rather than + // silently producing a file the real Access version couldn't open. This is the single DDL choke point. + (JetVersion Min, string Label)? gate = t switch + { + "BIGINT" => (JetVersion.Version16_2016, "Access 2016 (ACE 16)"), + "DATETIME2" => (JetVersion.Version17_2019, "Access 2019+ (ACE 17)"), + _ => null, + }; + if (gate is { } g && version < g.Min) + throw new NotSupportedException( + $"Column type '{column.TypeName}' requires {g.Label} or later; this database is {version}."); + + return t switch + { + // AutoNumber. COUNTER(seed, increment) parses seed/increment as the (size, scale) pair; a plain + // COUNTER defaults to 1/1. INTEGER IDENTITY(seed, increment) is the ANSI-style spelling. + "COUNTER" or "AUTOINCREMENT" or "IDENTITY" + or "INTEGER IDENTITY" or "INT IDENTITY" or "LONG IDENTITY" + => new ColumnSpec(column.Name, JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true, + Seed: column.Size ?? 1, Increment: column.Scale ?? 1), + "INTEGER" or "INT" or "LONG" or "INTEGER4" + => Fixed(column, JetDataType.Int32, 4), + "SMALLINT" or "SHORT" or "INTEGER2" + => Fixed(column, JetDataType.Int16, 2), + "BYTE" or "TINYINT" or "INTEGER1" + => Fixed(column, JetDataType.Byte, 1), + "BIGINT" + => Fixed(column, JetDataType.Int64, 8), + "REAL" or "SINGLE" or "IEEESINGLE" or "FLOAT4" + => Fixed(column, JetDataType.Single, 4), + "FLOAT" or "DOUBLE" or "DOUBLE PRECISION" or "IEEEDOUBLE" or "FLOAT8" or "NUMBER" + => Fixed(column, JetDataType.Double, 8), + // SMALLMONEY is a SQL-Server alias ACE accepts and folds onto CURRENCY — there is no narrower + // money storage in Jet/ACE (verified vs ACE: SMALLMONEY → Currency, 8 bytes). + "CURRENCY" or "MONEY" or "SMALLMONEY" + => Fixed(column, JetDataType.Currency, 8), + // SMALLDATETIME likewise folds onto the single 8-byte DateTime (no narrower date storage exists); + // no file-format upgrade (verified vs ACE: SMALLDATETIME → DateTime, version byte unchanged). + "DATETIME" or "DATE" or "TIME" or "TIMESTAMP" or "SMALLDATETIME" + => Fixed(column, JetDataType.DateTime, 8), + "BIT" or "YESNO" or "BOOLEAN" or "LOGICAL" or "LOGICAL1" + => Fixed(column, JetDataType.Boolean, 1), + "GUID" or "UNIQUEIDENTIFIER" + => Fixed(column, JetDataType.Guid, 16), + "DECIMAL" or "NUMERIC" or "DEC" + => Decimal(column), + // Fixed-length character types (the CHAR family) → a fixed-length Text column (ACE stores it in + // the row's fixed-data region, space-padded). The N-prefixed / "national" forms are the same + // storage — Jet/ACE has no separate nchar (all text is UTF-16). Access TEXT length is in + // characters; on disk it is 2 bytes each. + "CHAR" or "CHARACTER" or "NCHAR" or "NATIONAL CHAR" or "NATIONAL CHARACTER" + => Text(column, isFixed: true), + // Bare TEXT is a Jet quirk: with no size it means LONGTEXT (Memo), but TEXT(n) is a variable + // Text column of n characters. Verified vs ACE: `TEXT` → Memo, `TEXT(50)` → Text(50). + "TEXT" => column.Size is null + ? new ColumnSpec(column.Name, JetDataType.Memo, 0, IsFixedLength: false) + : Text(column, isFixed: false), + // Variable-length character types (the VARCHAR family) → a variable Text column. + "VARCHAR" or "NVARCHAR" or "STRING" or "ALPHANUMERIC" + or "CHARACTER VARYING" or "CHAR VARYING" + or "NATIONAL CHAR VARYING" or "NATIONAL CHARACTER VARYING" or "NCHAR VARYING" + => Text(column, isFixed: false), + // Fixed- vs variable-length binary → fixed / variable Binary (byte length, not char-doubled). + "BINARY" + => Binary(column, isFixed: true), + "VARBINARY" or "BINARY VARYING" or "BIT VARYING" + => Binary(column, isFixed: false), + + // Long-value columns: variable-length with no fixed byte length. The in-row value is a + // 12-byte long-value descriptor; short values are stored inline after it. + "MEMO" or "LONGTEXT" or "LONGCHAR" or "NOTE" or "NTEXT" + => new ColumnSpec(column.Name, JetDataType.Memo, 0, IsFixedLength: false), + "OLEOBJECT" or "IMAGE" or "LONGBINARY" or "GENERAL" + => new ColumnSpec(column.Name, JetDataType.Ole, 0, IsFixedLength: false), + + _ => throw new NotSupportedException($"CREATE TABLE column type '{column.TypeName}' is not supported yet."), + }; + } + + private static ColumnSpec Fixed(ColumnDefinition column, JetDataType type, int length, bool autoNumber = false) + => new(column.Name, type, length, IsFixedLength: true, IsAutoNumber: autoNumber); + + // Jet/ACE column-size caps (verified vs ACE): a char/varchar column holds at most 255 characters, a + // binary/varbinary column at most 510 bytes. Beyond these, Access requires LONGTEXT/LONGBINARY (Memo/OLE); + // it rejects an over-long fixed size rather than widening — so LibRed rejects it too, keeping the file + // openable by Access (an over-long fixed column produces an unreadable file). + private const int MaxTextCharacters = 255; + private const int MaxBinaryBytes = 510; + private const int MaxDecimalPrecision = 28; + + private static ColumnSpec Decimal(ColumnDefinition column) + { + int precision = column.Size ?? 18; + int scale = column.Scale ?? 0; + if (precision is < 1 or > MaxDecimalPrecision) + throw new InvalidOperationException( + $"Precision of field '{column.Name}' must be from 1 through {MaxDecimalPrecision} (got {precision})."); + if (scale < 0 || scale > precision) + throw new InvalidOperationException( + $"Scale of field '{column.Name}' must be from 0 through its precision {precision} (got {scale})."); + return new ColumnSpec(column.Name, JetDataType.FixedPoint, 17, IsFixedLength: true, + Precision: (byte)precision, Scale: (byte)scale); + } + + // A character column: length is declared in characters, stored as UTF-16 (2 bytes each). A size-less + // char/varchar takes the MAXIMUM (255 characters) — verified vs ACE, which defaults a bare CHAR/VARCHAR + // to a 255-char (510-byte) field, not CHAR(1). + private static ColumnSpec Text(ColumnDefinition column, bool isFixed) + { + int characters = column.Size ?? MaxTextCharacters; + if (characters <= 0) + throw new InvalidOperationException( + $"Size of field '{column.Name}' must be positive (got {characters})."); + if (characters > MaxTextCharacters) + throw new InvalidOperationException( + $"Size of field '{column.Name}' is too long: a char/varchar column holds at most {MaxTextCharacters} " + + $"characters in Jet/ACE (got {characters}). Use LONGTEXT/MEMO for longer text."); + return new(column.Name, JetDataType.Text, characters * 2, IsFixedLength: isFixed); + } + + // A binary column: length is in bytes (not char-doubled). A size-less binary/varbinary takes the + // MAXIMUM (510 bytes) — verified vs ACE, which defaults a bare BINARY/VARBINARY to a 510-byte field. + private static ColumnSpec Binary(ColumnDefinition column, bool isFixed) + { + int bytes = column.Size ?? MaxBinaryBytes; + if (bytes <= 0) + throw new InvalidOperationException( + $"Size of field '{column.Name}' must be positive (got {bytes})."); + if (bytes > MaxBinaryBytes) + throw new InvalidOperationException( + $"Size of field '{column.Name}' is too long: a binary/varbinary column holds at most {MaxBinaryBytes} " + + $"bytes in Jet/ACE (got {bytes}). Use LONGBINARY/OLE for longer data."); + return new(column.Name, JetDataType.Binary, bytes, IsFixedLength: isFixed); + } +} diff --git a/src/LibRed/LibRed.Engine/Execution/DecorrelationGate.cs b/src/LibRed/LibRed.Engine/Execution/DecorrelationGate.cs new file mode 100644 index 00000000..39850f78 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/DecorrelationGate.cs @@ -0,0 +1,53 @@ +using System.Diagnostics; + +namespace LibRed.Engine.Execution; + +/// +/// Decides when a correlated subquery stops being evaluated per outer row and switches to its decorrelated +/// form. Whether it may is a separate question, settled by and the +/// rewrites themselves; this is only about cost. +/// +/// +/// +/// It exists because decorrelating is not free. The rewrite runs the body once without the correlation, so a +/// body that per-row would have been a single index seek pays a full pass instead. Measured on a 3-row outer +/// against a 20,000-row indexed inner: 0.2 ms per-row against 32.8 ms decorrelated for EXISTS, 0.1 against +/// 34.5 for IN, and 0.2 against 117.7 for a COUNT — 160x to 590x the wrong way, in the same engine +/// where decorrelating turns 92 s into 0.4 s the other way. +/// +/// +/// Choosing up front would need the outer row count, and nobody has it at the first probe: rows stream, and the +/// subquery is asked for its answer long before the outer scan has finished. So don't choose — measure. Evaluate +/// per row, accumulate the time actually spent doing it, and switch once that reaches a budget. The loss is then +/// bounded whichever way the query leans: a per-row-friendly query never reaches the budget and wastes nothing, +/// and a decorrelation-friendly one wastes at most the budget before switching. +/// +/// +/// The budget only has to separate "a handful of index seeks" from "a query that is actually slow" — microseconds +/// from seconds — so its exact value is not delicate; three orders of magnitude sit between the two. +/// +/// +/// What this deliberately cannot see is the case in between: a medium outer with cheap seeks over a very large +/// inner, where per-row would have finished just above the budget and the build costs far more than the probes +/// that remained. Bounding that needs the inner's cardinality — the TDEF carries a row count, which is where a +/// later refinement would start. Recorded rather than guessed at. +/// +/// +/// Switching mid-scan is sound for two reasons: both forms answer identically, which is what the semantics tests +/// pin, and DML materialises its entire row set before mutating anything, so no probe and no build ever observes a +/// partly-modified table. +/// +/// +internal sealed class DecorrelationGate +{ + /// 25 ms of per-row work before the decorrelated form takes over. + private static readonly long Budget = Stopwatch.Frequency / 40; + + private long _spent; + + /// Whether enough per-row time has been spent to justify one pass over the whole body. + internal bool Ready => _spent >= Budget; + + /// Charges one per-row evaluation, given the timestamp taken just before it started. + internal void Charge(long startTimestamp) => _spent += Stopwatch.GetTimestamp() - startTimestamp; +} diff --git a/src/LibRed/LibRed.Engine/Execution/EvalScope.cs b/src/LibRed/LibRed.Engine/Execution/EvalScope.cs new file mode 100644 index 00000000..1eed873b --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/EvalScope.cs @@ -0,0 +1,109 @@ +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Execution; + +/// +/// The column bindings visible while evaluating an expression: the current row's schema and +/// values, plus a link to the enclosing query's scope so correlated subqueries can resolve +/// outer columns. +/// +internal sealed class EvalScope( + IReadOnlyList schema, object?[] row, EvalScope? outer, + IReadOnlyDictionary? aggregates = null) +{ + // The current row's values. Mutable so a hot loop (e.g. a join's per-row key/residual evaluation) can + // rebind the same scope + evaluator to successive rows instead of allocating a fresh pair each iteration; + // the schema and outer link are fixed for the scope's lifetime. + private object?[] row = row; + + /// Points this scope at a new row of the same schema (see 's callers for why + /// reuse is worthwhile). Returns the scope for fluent use. + public EvalScope Rebind(object?[] newRow) + { + row = newRow; + return this; + } + + /// Resolves a precomputed aggregate (by reference), walking out to enclosing scopes so an outer + /// aggregate referenced inside a correlated subquery (e.g. … WHERE x = MAX(o.Col) …) is found. + public bool TryResolveAggregate(FunctionCall call, out object? value) + { + if (aggregates is not null && aggregates.TryGetValue(call, out value)) return true; + if (outer is not null) return outer.TryResolveAggregate(call, out value); + value = null; + return false; + } + + public bool TryResolve(ColumnReference reference, out object? value) + { + int found = -1; + for (int i = 0; i < schema.Count; i++) + { + bool nameMatch = string.Equals(schema[i].Name, reference.Column, StringComparison.OrdinalIgnoreCase); + bool qualifierMatch = reference.Table is null + || string.Equals(schema[i].Qualifier, reference.Table, StringComparison.OrdinalIgnoreCase); + if (!nameMatch || !qualifierMatch) continue; + + if (found >= 0) + throw new InvalidOperationException($"Column reference '{Describe(reference)}' is ambiguous."); + found = i; + } + + if (found >= 0) + { + value = row[found]; + return true; + } + + if (outer is not null) + return outer.TryResolve(reference, out value); + + value = null; + return false; + } + + internal static string Describe(ColumnReference r) => r.Table is null ? r.Column : $"{r.Table}.{r.Column}"; + + /// Every table alias visible in this scope and its enclosing scopes — so index selection on a + /// correlated subquery knows which column references belong to the outer query (and are seekable constants). + public IEnumerable VisibleAliases() + { + foreach (OutputColumn c in schema) + if (c.Qualifier is { } q) + yield return q; + if (outer is not null) + foreach (string a in outer.VisibleAliases()) + yield return a; + } + + /// Every column visible in this scope and its enclosing scopes — so decorrelating a correlated + /// EXISTS can read the outer side's declared type, which decides whether a hash key is sound (see + /// ). + public IReadOnlyList AllColumns() + { + if (outer is null) return schema; + var all = new List(schema); + all.AddRange(outer.AllColumns()); + return all; + } +} + +/// Executes a subquery, correlating it to . +internal interface IScalarSubqueryRunner +{ + object? ExecuteScalar(SelectStatement query, EvalScope outerScope); + + /// True when the (possibly correlated) subquery returns at least one row. + bool ExecuteExists(SelectStatement query, EvalScope outerScope); + + /// The values of the first column of the (possibly correlated) subquery — for IN (subquery). + IEnumerable ExecuteColumn(SelectStatement query, EvalScope outerScope); + + /// + /// Membership of in a correlated subquery's column, answered from a hash rather + /// than by re-running the body for this row, together with whether that column held a null (which + /// IN reports as UNKNOWN, not as no-match). Null when the subquery has no such form and the caller + /// should fall back to . + /// + (bool Found, bool HasNull)? ExecuteInSubquery(SelectStatement query, Expression value, object? evaluated, EvalScope outerScope); +} diff --git a/src/LibRed/LibRed.Engine/Execution/ExistsSemiJoin.cs b/src/LibRed/LibRed.Engine/Execution/ExistsSemiJoin.cs new file mode 100644 index 00000000..65e8c6d2 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/ExistsSemiJoin.cs @@ -0,0 +1,266 @@ +using LibRed.Catalog; +using LibRed.Engine.Plan; +using LibRed.Engine.Planning; +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Execution; + +/// +/// Turns a correlated EXISTS into a hash semi-join: run the subquery once without its correlation +/// predicate, hash the values it would have been correlated on, then test each outer row against that set. +/// +/// +/// +/// A correlated subquery is evaluated per outer row, so an EXISTS whose body is a join re-runs that join +/// for every candidate row. Measured on Northwind: the ExecuteDelete EF generates for a predicate over a +/// navigation puts a three-table join inside EXISTS, and deleting 164 of 2155 rows took 92.4 s — +/// running that join once costs 101 ms. Correlating barely narrowed the work (61.5 ms per iteration +/// against 101 ms for the whole unfiltered join), because the correlation filters after the joins have already +/// happened. Decorrelating is the standard fix — SQL Server's Left Semi Join, PostgreSQL's +/// JOIN_SEMI, Oracle's subquery unnesting. +/// +/// +/// The rewrite is only valid when every outer reference sits in a top-level inner = outer equality, so +/// removing those conjuncts leaves a subquery that means the same thing for every outer row. Anything else — an +/// outer reference in a residual conjunct, a GROUP BY key, a HAVING, or a nested subquery — declines, +/// and the caller falls back to per-row evaluation. +/// +/// +/// A GROUP BY body is still decorrelated, by grouping on the correlation columns as well: that splits each +/// group by key, giving the same partition the correlation produced one key at a time, so HAVING decides +/// each group identically. What must decline is a body that yields a row over an EMPTY input — see +/// . +/// +/// +internal sealed class ExistsSemiJoin +{ + /// The subquery stripped of its correlation, projecting the inner sides of the equalities. + private readonly SelectStatement _keyQuery; + + /// The outer sides of the equalities, in the same order as the key query's projection. + private readonly IReadOnlyList _outerKeys; + + /// Per correlation key, whether NULL matches NULL. See . + private readonly IReadOnlyList _nullSafe; + + /// True when the key query projects the IN value after the correlation columns. + private readonly bool _hasInValue; + + private HashSet? _keys; + private HashSet? _nullTail; + + private ExistsSemiJoin( + SelectStatement keyQuery, IReadOnlyList outerKeys, IReadOnlyList nullSafe, bool hasInValue) + => (_keyQuery, _outerKeys, _nullSafe, _hasInValue) = (keyQuery, outerKeys, nullSafe, hasInValue); + + /// + /// Analyses an EXISTS subquery, returning a semi-join plan or null when the rewrite would not be + /// sound. supplies the outer side's types, since a hash is only + /// consistent with the evaluator's = within one type kind. + /// + internal static ExistsSemiJoin? TryBuild( + SelectStatement subquery, + IReadOnlyList outerColumns, + HashSet outerAliases, + JetCatalog catalog) + => TryBuild(subquery, null, outerColumns, outerAliases, catalog); + + /// + /// The same analysis for x [NOT] IN (subquery), where is the outer + /// expression being tested. A correlated IN is a semi-join too — membership is one more equality + /// between the subquery's output column and — so the value joins the hash key + /// as a final column and the probe supplies it alongside the correlation values. + /// + /// + /// Stricter than the EXISTS form in two ways, both because IN asks for the body's VALUES and + /// not merely for a row: + /// + /// + /// Any TOP declines. TOP n cannot change whether a row exists, but it certainly changes + /// which values are in the set, so it cannot be dropped from the key query. + /// + /// + /// GROUP BY/HAVING decline. The EXISTS form groups by the correlation columns as + /// well, which is sound when only existence is asked; here the output column would have to be added to + /// the grouping too, and whether that preserves the projected values depends on what a non-grouping + /// column projects out of a group. Not worth guessing at — EF emits the ungrouped shape. + /// + /// + /// + internal static ExistsSemiJoin? TryBuildForIn( + SelectStatement subquery, + Expression inValue, + IReadOnlyList outerColumns, + HashSet outerAliases, + JetCatalog catalog) + => subquery is { Top: null, GroupBy.Count: 0, Having: null, IsSelectStar: false, Projection: [{ Value: ColumnReference }] } + ? TryBuild(subquery, inValue, outerColumns, outerAliases, catalog) + : null; + + private static ExistsSemiJoin? TryBuild( + SelectStatement subquery, + Expression? inValue, + IReadOnlyList outerColumns, + HashSet outerAliases, + JetCatalog catalog) + { + // (ORDER BY and DISTINCT are irrelevant to EXISTS.) + if (!TopCannotChangeExistence(subquery) + || !EmptyInputMeansNoRows(subquery) + || SubqueryCorrelation.TrySplit(subquery, outerColumns, outerAliases, catalog) is not { } split) + { + return null; + } + + // The IN value is a key column like any other — the difference is only that its inner side comes from the + // projection rather than from a WHERE equality, and that a null there means UNKNOWN rather than no match + // (see BuildSemiJoinKeys). It goes last so the probe can append the already-evaluated value. + var projected = new List(split.InnerKeys); + if (inValue is not null) + { + Expression output = subquery.Projection[0].Value; + if (!SubqueryCorrelation.SameKind((ColumnReference)output, split.Plan, catalog, inValue, outerColumns)) + { + return null; + } + + projected.Add(output); + } + + var keyQuery = subquery with + { + Projection = projected.Select(k => new SelectItem(k, null)).ToList(), + IsSelectStar = false, + Where = split.Residual, + // The residual HAVING, not the original: a correlation on a grouping key may have been lifted out + // of it, and leaving that behind would keep the body referencing the outer row. + Having = split.ResidualHaving, + // Grouping by the correlation columns as well splits each group by key, which is exactly the + // partition the correlation predicate produced one key at a time — so a group passes HAVING here + // if and only if it passed for that outer row. The keys must also be grouping columns to be + // projectable at all. (Empty for a non-grouped body, leaving the plan unchanged.) + GroupBy = subquery.GroupBy.Count == 0 ? [] : [.. subquery.GroupBy, .. split.InnerKeys], + OrderBy = [], + Distinct = false, + DistinctRow = false, + // Dropped deliberately: the key query must yield EVERY matching key, not the first n. Existence per + // key is unaffected, which is what TopCannotChangeExistence establishes. + Top = null, + TopPercent = false, + }; + + return new ExistsSemiJoin(keyQuery, split.OuterKeys, split.NullSafe, inValue is not null); + } + + /// + /// Whether a body over zero rows returns zero rows — which is what makes "the key is absent from the set" + /// mean "EXISTS is false". + /// + /// + /// It fails for exactly one shape: an aggregate with no GROUP BY, which has a single group even + /// when nothing matched, so it yields a row regardless — EXISTS (SELECT COUNT(*) FROM I WHERE I.K = + /// o.K) is true for every outer row, and a key test would say false for the unmatched ones. A + /// HAVING without GROUP BY filters that same lone group and can admit it on empty input + /// (HAVING COUNT(*) = 0), so it goes the same way. + /// + /// With a GROUP BY there is no such row: no input rows means no groups. Before this test the + /// non-grouped aggregate declined only by accident — SubtreeAliases had no + /// AggregateNode case, so no inner alias was ever found and every conjunct fell to the + /// residual. Adding that case to support grouped bodies removed the accident. + /// + /// + private static bool EmptyInputMeansNoRows(SelectStatement subquery) + => subquery.GroupBy.Count > 0 + || (subquery.Having is null && !subquery.Projection.Any(p => QueryPlanner.HasAggregate(p.Value))); + + /// + /// Whether the body's TOP can be ignored when all we are asking is whether ANY row exists. + /// + /// + /// TOP n for n >= 1 cannot change existence: if the body matches at all it still returns a + /// row, and if it matches nothing no limit conjures one. EF emits EXISTS (SELECT TOP 1 …) for + /// Any(), so declining on any TOP at all left that common shape running per outer row. + /// + /// TOP 0 does change it — the body returns nothing, so EXISTS is always false — and so does + /// TOP 0 PERCENT. A non-literal TOP (parameter or expression) cannot be judged here. + /// All of those decline. PERCENT is refused outright rather than reasoned about: for n > 0 it + /// rounds up to at least one row and would be safe, but that is a rule worth verifying against ACE + /// before relying on it. + /// + /// + private static bool TopCannotChangeExistence(SelectStatement subquery) + { + if (subquery.Top is null) + { + return true; + } + + return !subquery.TopPercent + && subquery.Top is LiteralExpression { Value: { } value } + && IsNumeric(value) + && Convert.ToDecimal(value, System.Globalization.CultureInfo.InvariantCulture) >= 1m; + } + + private static bool IsNumeric(object v) + => v is byte or sbyte or short or ushort or int or uint or long or ulong or float or double or decimal; + + /// + /// Tests one outer row. The key set is built on first use — once per statement, not per row. + /// + internal bool Matches(QueryExecutor executor, ExpressionEvaluator outerEval) + => Probe(executor, outerEval, null) is { } probe && _keys!.Contains(probe); + + /// + /// Tests one outer row for x IN (subquery), reporting membership and whether the subquery's + /// column yielded a null for this row — the caller needs both to reproduce SQL's three-valued IN, + /// where "no match" and "no match but a null was seen" differ (FALSE against UNKNOWN). + /// + /// + /// The already-evaluated left side. The caller has evaluated it to check for null before reaching here, so + /// re-evaluating it would only repeat that work. + /// + internal (bool Found, bool HasNull) ContainsValue(QueryExecutor executor, ExpressionEvaluator outerEval, object? value) + { + if (Probe(executor, outerEval, value) is not { } probe) + { + // A null correlation value matches no inner row, so the subquery is empty for this outer row — + // which is FALSE, not UNKNOWN, even for `x IN ()`. + return (false, false); + } + + return _keys!.Contains(probe) + ? (true, false) // Short-circuits like the row-by-row loop: on a match the null flag is unused. + : (false, _nullTail!.Contains(probe[..^1])); + } + + /// + /// Builds the key set on first use — once per statement, not per row — and evaluates this outer row's + /// probe. Null when a correlation value is null, which no inner row can equal. + /// + private object?[]? Probe(QueryExecutor executor, ExpressionEvaluator outerEval, object? inValue) + { + if (_keys is null) + { + (_keys, _nullTail) = executor.BuildSemiJoinKeys( + _keyQuery, _outerKeys.Count + (_hasInValue ? 1 : 0), _nullSafe, _hasInValue); + } + + var probe = new object?[_outerKeys.Count + (_hasInValue ? 1 : 0)]; + for (var i = 0; i < _outerKeys.Count; i++) + { + // A null matches nothing under a plain `=`, so there is no point probing. Under the null-safe form it + // is a key like any other and must be looked up. + if ((probe[i] = outerEval.Evaluate(_outerKeys[i])) is null && !_nullSafe[i]) + { + return null; + } + } + + if (_hasInValue) + { + probe[^1] = inValue; + } + + return probe; + } +} diff --git a/src/LibRed/LibRed.Engine/Execution/ExpressionEvaluator.cs b/src/LibRed/LibRed.Engine/Execution/ExpressionEvaluator.cs new file mode 100644 index 00000000..37d11133 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/ExpressionEvaluator.cs @@ -0,0 +1,1422 @@ +using System.Globalization; +using System.Text; +using System.Text.RegularExpressions; +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Execution; + +/// +/// Evaluates an AST against a single row, resolving column +/// references through an (which chains to outer scopes for +/// correlation). Comparisons coerce numeric operands; SQL nulls propagate (a comparison +/// involving null yields null, treated as "not true" by filters). +/// +internal sealed class ExpressionEvaluator( + EvalScope scope, + IScalarSubqueryRunner subqueries, + ParameterBag? parameters = null, + SessionState? session = null) +{ + /// Rebinds this evaluator's scope to a new row of the same schema and returns the evaluator, so a + /// hot loop can reuse one evaluator across rows instead of allocating a fresh evaluator + scope per row. + public ExpressionEvaluator Rebind(object?[] row) + { + scope.Rebind(row); + return this; + } + + public object? Evaluate(Expression expression) => expression switch + { + LiteralExpression l => l.Value, + ColumnReference c => scope.TryResolve(c, out object? v) ? v + : TryNiladicFunction(c, out object? nv) ? nv + : throw new InvalidOperationException($"Column '{EvalScope.Describe(c)}' was not found."), + ScalarSubquery s => subqueries.ExecuteScalar(s.Query, scope), + ExistsExpression e => subqueries.ExecuteExists(e.Query, scope), + InSubqueryExpression i => EvaluateInSubquery(i), + InListExpression i => EvaluateInList(i), + FunctionCall f => EvaluateFunction(f), + UnaryExpression u => EvaluateUnary(u), + BinaryExpression b => EvaluateBinary(b), + ParameterExpression p => parameters is not null + ? parameters.Resolve(p.Name) + : throw new InvalidOperationException($"No parameters were supplied for '{p.Name}'."), + SystemVariableExpression v => ResolveSystemVariable(v.Name), + _ => throw new NotSupportedException($"Cannot evaluate {expression.GetType().Name}."), + }; + + /// Access's Now is a niladic function callable without parentheses — so a bare unqualified + /// identifier that isn't a column but names it evaluates as the current timestamp. Matches ACE, which accepts + /// e.g. DATETIME DEFAULT Now and SELECT Now. Only tried after column resolution fails, so a real + /// column named "Now" still wins. Note Date/Time are NOT included: they are reserved type + /// keywords in Jet SQL and ACE rejects them bare ("Type mismatch") — they require parentheses (Date(), + /// Time()), which parse as function calls and are handled in . + private static bool TryNiladicFunction(ColumnReference c, out object? value) + { + if (c.Table is null && c.Column.Equals("Now", StringComparison.OrdinalIgnoreCase)) + { + value = DateTime.Now; + return true; + } + value = null; + return false; + } + + /// Resolves a connection-scoped system variable from the session state: @@ROWCOUNT + /// (rows affected by the previous statement) and @@IDENTITY (the last AutoNumber generated on + /// this connection, or NULL if none). EF Core's insert round-trip reads both in the SELECT that + /// follows the INSERT within the same batch. + private object? ResolveSystemVariable(string name) + { + if (session is null) + throw new InvalidOperationException($"System variable '@@{name}' is not available in this context."); + + return name.ToUpperInvariant() switch + { + "ROWCOUNT" => session.RowCount, + "IDENTITY" => session.LastIdentity, + _ => throw new NotSupportedException($"Unknown system variable '@@{name}'."), + }; + } + + /// x [NOT] IN (subquery) with SQL three-valued semantics: NULL if x is null or (no match + /// and the subquery yields a null), otherwise the membership result (negated for NOT IN). + private object? EvaluateInSubquery(InSubqueryExpression inq) + { + object? val = Evaluate(inq.Value); + if (val is null) return null; + + bool hasNull = false, found = false; + // A correlated IN is a semi-join: hash the body's values once instead of re-running it for every outer row. + if (subqueries.ExecuteInSubquery(inq.Query, inq.Value, val, scope) is var (semiFound, semiNull)) + { + (found, hasNull) = (semiFound, semiNull); + } + else + { + foreach (object? item in subqueries.ExecuteColumn(inq.Query, scope)) + { + if (item is null) hasNull = true; + else if (Compare(val, item) == 0) { found = true; break; } + } + } + + bool? result = found ? true : hasNull ? null : false; + return inq.Negated ? (result is null ? null : !result) : result; + } + + /// x [NOT] IN (a, b, …) over a literal list, evaluated iteratively (not as a recursive OR-tree) + /// so a huge list can't overflow the stack. Same three-valued semantics as the subquery form: NULL if x is null + /// or (no match and some item is null), otherwise the membership result (negated for NOT IN). + private object? EvaluateInList(InListExpression inl) + { + object? val = Evaluate(inl.Value); + if (val is null) return null; + + bool hasNull = false, found = false; + foreach (Expression itemExpr in inl.Items) + { + object? item = Evaluate(itemExpr); + if (item is null) hasNull = true; + else if (Compare(val, item) == 0) { found = true; break; } + } + bool? result = found ? true : hasNull ? null : false; + return inl.Negated ? (result is null ? null : !result) : result; + } + + private object? EvaluateFunction(FunctionCall f) + { + // Aggregate calls are precomputed per group and resolved by reference — including an outer + // aggregate found in an enclosing scope (a correlated subquery referencing MAX(o.Col), etc.). + if (scope.TryResolveAggregate(f, out object? aggregate)) + return aggregate; + + // VBA "$" variants (Left$, UCase$, Chr$, …) return a String instead of a Variant but compute the same + // value in the Jet expression service — so a trailing "$" is stripped and dispatched to the base name. + string name = f.Name.ToUpperInvariant(); + if (name.Length > 1 && name[^1] == '$') name = name[..^1]; + + return name switch + { + "IIF" => IsTrue(f.Arguments[0]) ? Evaluate(f.Arguments[1]) : Evaluate(f.Arguments[2]), + "CHOOSE" => Choose(f), + "SWITCH" => Switch(f), + "DATEPART" => DatePart(Evaluate(f.Arguments[0]), Evaluate(f.Arguments[1])), + "ROUND" => Round(f), + "FIX" => Numeric1(f, Math.Truncate, Math.Truncate), // toward zero + "INT" => Numeric1(f, Math.Floor, Math.Floor), // toward -infinity + "ABS" => Numeric1(f, Math.Abs, Math.Abs), + // VBA/Access type-conversion functions. All propagate NULL. CInt/CLng/CByte round half-to-even + // ("banker's rounding"), which is exactly what Convert.ToInt16/Int32/Byte do. CVar is a no-op + // passthrough (LibRed has no distinct Variant type). + "CCUR" => Convert1(f, v => Math.Round(Convert.ToDecimal(v, CultureInfo.InvariantCulture), 4)), // to Currency (decimal, 4 dp) + "CBOOL" => Convert1(f, v => v is bool b ? b : Convert.ToBoolean(v, CultureInfo.InvariantCulture)), + "CBYTE" => Convert1(f, v => Convert.ToByte(v, CultureInfo.InvariantCulture)), + "CINT" => Convert1(f, v => Convert.ToInt16(v, CultureInfo.InvariantCulture)), + "CLNG" => Convert1(f, v => Convert.ToInt32(v, CultureInfo.InvariantCulture)), + "CSNG" => Convert1(f, v => Convert.ToSingle(v, CultureInfo.InvariantCulture)), + "CDBL" => Convert1(f, v => Convert.ToDouble(v, CultureInfo.InvariantCulture)), + "CDEC" => Convert1(f, v => Convert.ToDecimal(v, CultureInfo.InvariantCulture)), + "CSTR" => Convert1(f, v => Convert.ToString(v, CultureInfo.InvariantCulture)), + "CDATE" => Convert1(f, ToDate), + "CVAR" => Evaluate(f.Arguments[0]), // passthrough (no Variant type) + + // VBA/Access string functions. All propagate NULL; positions are 1-based. Comparisons default to + // case-insensitive (Access "Option Compare Database" = Text), overridable by a compare argument. + "LEN" => Convert1(f, v => v.ToString()!.Length), + "LCASE" => Convert1(f, v => v.ToString()!.ToLowerInvariant()), + "UCASE" => Convert1(f, v => v.ToString()!.ToUpperInvariant()), + "TRIM" => Convert1(f, v => v.ToString()!.Trim(' ')), + "LTRIM" => Convert1(f, v => v.ToString()!.TrimStart(' ')), + "RTRIM" => Convert1(f, v => v.ToString()!.TrimEnd(' ')), + "LEFT" => StringInt(f, static (s, n) => n <= 0 ? "" : n >= s.Length ? s : s[..n]), + "RIGHT" => StringInt(f, static (s, n) => n <= 0 ? "" : n >= s.Length ? s : s[^n..]), + "MID" => Mid(f), + "INSTR" => Instr(f), + "REPLACE" => Replace(f), + + // Date/time functions (VBA/Access). All propagate NULL on a date argument. + "DATEADD" => DateAdd(f), + "DATEDIFF" => DateDiff(f), + "DATESERIAL" => DateParts(f, (y, m, d) => new DateTime(y, 1, 1).AddMonths(m - 1).AddDays(d - 1)), + "TIMESERIAL" => DateParts(f, (h, m, s) => DateTime.FromOADate(0).AddHours(h).AddMinutes(m).AddSeconds(s)), + "NOW" => DateTime.Now, + "DATE" => DateTime.Today, + "TIME" => DateTime.FromOADate(0).Add(DateTime.Now.TimeOfDay), + "YEAR" => DatePartOf(f, d => d.Year), + "MONTH" => DatePartOf(f, d => d.Month), + "DAY" => DatePartOf(f, d => d.Day), + "HOUR" => DatePartOf(f, d => d.Hour), + "MINUTE" => DatePartOf(f, d => d.Minute), + "SECOND" => DatePartOf(f, d => d.Second), + "WEEKDAY" => DatePartOf(f, d => (int)d.DayOfWeek + 1), // Access: Sunday = 1 + // DateValue = the date at midnight; TimeValue = the time on the Jet epoch (1899-12-30) — both + // NULL-propagating and verified against ACE. IsDate is a predicate (true only for a date or a + // date/time-parseable string; a number, NULL or unparseable string is false — verified vs ACE). + "DATEVALUE" => Convert1(f, v => ((DateTime)ToDate(v)).Date), + "TIMEVALUE" => Convert1(f, v => DateTime.FromOADate(0).Add(((DateTime)ToDate(v)).TimeOfDay)), + "ISDATE" => IsDateValue(Evaluate(f.Arguments[0])), + // Jet VBA math functions (double precision). SQR = sqrt, ATN = atan, SGN = sign, LOG = + // natural log. Acos/Asin/Atan2/Floor/Ceiling/Log10/Log-base are emitted by EF as + // expressions built from these plus arithmetic, so they need no dedicated cases. + "SIN" => UnaryDouble(f, Math.Sin), + "COS" => UnaryDouble(f, Math.Cos), + "TAN" => UnaryDouble(f, Math.Tan), + "ATN" => UnaryDouble(f, Math.Atan), + "EXP" => UnaryDouble(f, Math.Exp), + "LOG" => UnaryDouble(f, Math.Log), + "SQR" => UnaryDouble(f, Math.Sqrt), + "SGN" => UnaryDouble(f, d => Math.Sign(d)), + + // More VBA/Access built-ins (verified vs ACE via the function-whitelist sweep). All NULL-propagating + // via Convert1 unless noted; positions are 1-based. + "ASC" => Convert1(f, v => (int)v.ToString()![0]), + "CHR" => Convert1(f, v => ((char)Convert.ToInt32(v, CultureInfo.InvariantCulture)).ToString()), + "SPACE" => Convert1(f, v => new string(' ', Convert.ToInt32(v, CultureInfo.InvariantCulture))), + "STRING" => StringOf(f), // String(count, char) → char repeated count times + "STRREVERSE" => Convert1(f, v => new string(v.ToString()!.Reverse().ToArray())), + "STRCOMP" => StrComp(f), // -1/0/1 (case-insensitive, Access "Compare Database") + "STR" => Convert1(f, VbaStr), // number → text with a leading space when non-negative + "VAL" => Convert1(f, v => VbaVal(v.ToString()!)),// parse the leading numeric portion (Double), else 0 + "HEX" => Convert1(f, v => Convert.ToString(Convert.ToInt64(v, CultureInfo.InvariantCulture), 16).ToUpperInvariant()), + "OCT" => Convert1(f, v => Convert.ToString(Convert.ToInt64(v, CultureInfo.InvariantCulture), 8)), + "INSTRREV" => InstrRev(f), // last occurrence, 1-based (0 if none) + "MONTHNAME" => Convert1(f, v => EnUs.DateTimeFormat.GetMonthName(Convert.ToInt32(v, CultureInfo.InvariantCulture))), + "TIMER" => (DateTime.Now - DateTime.Today).TotalSeconds, + "RND" => Rnd(f), + // Predicates / type inspection. IsError is always false — LibRed has no error-value type. ISNULL + // returns a Boolean (ACE reports it as -1/0); both print as a boolean here. + "ISNULL" => Evaluate(f.Arguments[0]) is null, + "ISNUMERIC" => IsNumericValue(Evaluate(f.Arguments[0])), + "ISERROR" => false, + "TYPENAME" => TypeNameOf(Evaluate(f.Arguments[0])), + "VARTYPE" => VarTypeOf(Evaluate(f.Arguments[0])), + "STRCONV" => StrConv(f), + "WEEKDAYNAME" => WeekdayNameOf(f), + "PARTITION" => PartitionOf(f), + "FORMAT" => FormatValue(f), + "FORMATCURRENCY" => Convert.ToDecimal(FinArg(f, 0), CultureInfo.InvariantCulture).ToString("C" + FmtDigits(f, 1), CultureInfo.CurrentCulture), + "FORMATNUMBER" => Convert.ToDouble(FinArg(f, 0), CultureInfo.InvariantCulture).ToString("N" + FmtDigits(f, 1), CultureInfo.CurrentCulture), + "FORMATPERCENT" => FinArg(f, 0).ToString(FmtDigits(f, 1) > 0 ? "0." + new string('0', FmtDigits(f, 1)) + "%" : "0%", CultureInfo.CurrentCulture), + "FORMATDATETIME" => FormatDateTimeFn(f), + "RGB" => (int)(FinArg(f, 0) % 256) + ((int)(FinArg(f, 1) % 256) << 8) + ((int)(FinArg(f, 2) % 256) << 16), + "QBCOLOR" => QbColor((int)FinArg(f, 0)), + // Financial functions (verified vs ACE). rate is per period; pv/fv/pmt sign conventions follow VBA. + "PMT" => Pmt(f), + "FV" => Fv(f), + "PV" => Pv(f), + "NPER" => NPer(f), + "IPMT" => IPmt(f), + "PPMT" => PPmt(f), + "RATE" => Rate(f), + "SLN" => (FinArg(f, 0) - FinArg(f, 1)) / FinArg(f, 2), + "SYD" => (FinArg(f, 0) - FinArg(f, 1)) * (FinArg(f, 2) - FinArg(f, 3) + 1) / (FinArg(f, 2) * (FinArg(f, 2) + 1) / 2), + "DDB" => Ddb(f), + + // Wide (Unicode code-point) variants. AscW = the first char's code point; ChrW = the char for a code + // point (unlike Chr, not restricted to a byte). Verified vs ACE: ChrW(233) → 'é'. + "ASCW" => Convert1(f, v => (int)ToText(v)[0]), + "CHRW" => Convert1(f, v => ((char)Convert.ToInt32(v, CultureInfo.InvariantCulture)).ToString()), + // Byte variants operate on the UTF-16 byte layout (2 bytes/char): LenB = 2×length, AscB = the low + // byte of the first char, and Left/Right/Mid/InStr count bytes. Verified vs ACE (LenB('abc')=6, + // InStrB(1,'abc','b')=3). ChrB is intentionally absent — ACE's expression service has no ChrB. + "ASCB" => Convert1(f, v => (int)ToBytes(v)[0]), + "LENB" => Convert1(f, v => ToBytes(v).Length), + "LEFTB" => ByteLeft(f), + "RIGHTB" => ByteRight(f), + "MIDB" => ByteMid(f), + "INSTRB" => InstrB(f), + + // GenUniqueID(): Access's random-Long generator. Not callable in a SELECT (ACE errors "Undefined + // function") but valid as a LONG column's DEFAULT, where it yields a random signed Int32 per row — + // the mechanism behind a "Random" AutoNumber. Accepted on a plain LONG default too (ACE allows it + // only on a LONG column). AutoNumber columns take their random value in the row inserter instead. + "GENUNIQUEID" => RandomLong(), + // GenGUID(): Access's GUID generator, the sibling of GenUniqueID(). Same shape — ACE errors + // "Undefined function 'GenGUID' in expression" in a SELECT, but it is valid as a GUID column's + // DEFAULT, where it yields a fresh Guid per row (verified vs ACE). EF Core models it as + // HasDefaultValueSql("GenGUID()") for store-generated Guid keys. + "GENGUID" => Guid.NewGuid(), + _ => throw new NotSupportedException($"Function {f.Name} is not supported."), + }; + } + + /// Access Choose(index, choice-1, choice-2, …): returns the 1-based choice at + /// 's index, or NULL when the index is out of range (verified vs ACE: Choose(0,…) + /// and Choose(5,…) on three choices both return Null). A NULL index is an error in ACE ("Data type + /// mismatch"). Only the selected choice is evaluated. + private object? Choose(FunctionCall f) + { + object? indexValue = Evaluate(f.Arguments[0]); + if (indexValue is null) + throw new InvalidOperationException("Data type mismatch in criteria expression: Choose() index is null."); + int index = Convert.ToInt32(indexValue, CultureInfo.InvariantCulture); + int choiceCount = f.Arguments.Count - 1; + return index < 1 || index > choiceCount ? null : Evaluate(f.Arguments[index]); + } + + /// Access Switch(cond-1, value-1, cond-2, value-2, …): evaluates the conditions left to + /// right and returns the value paired with the first true one, or NULL if none is true (verified vs ACE). + /// The argument count must be even (condition/value pairs) — an odd count is an error in ACE ("Wrong number + /// of arguments"). Only the matched value is evaluated. + private object? Switch(FunctionCall f) + { + if (f.Arguments.Count % 2 != 0) + throw new InvalidOperationException( + "Wrong number of arguments used with function Switch (expects condition/value pairs)."); + for (int i = 0; i < f.Arguments.Count; i += 2) + if (IsTrue(f.Arguments[i])) + return Evaluate(f.Arguments[i + 1]); + return null; + } + + private static readonly CultureInfo EnUs = CultureInfo.GetCultureInfo("en-US"); + + /// Access String(count, character): 's first arg repeated. The character + /// arg may be a string (first char used) or a character code. NULL-propagating. + private object? StringOf(FunctionCall f) + { + object? countValue = Evaluate(f.Arguments[0]); + object? charValue = Evaluate(f.Arguments[1]); + if (countValue is null || charValue is null) return null; + int count = Convert.ToInt32(countValue, CultureInfo.InvariantCulture); + char ch = charValue is string s + ? (s.Length > 0 ? s[0] : ' ') + : (char)Convert.ToInt32(charValue, CultureInfo.InvariantCulture); + return new string(ch, count); + } + + /// Access StrComp(a, b, [compare]): -1/0/1 (NULL-propagating). compare=0 is a binary + /// (case-sensitive) comparison; the default and every other mode are textual (case-insensitive, Access + /// "Option Compare Database" = Text). Verified vs ACE (StrComp('a','A',0)=1, default=0). + private object? StrComp(FunctionCall f) + { + object? a = Evaluate(f.Arguments[0]); + object? b = Evaluate(f.Arguments[1]); + if (a is null || b is null) return null; + StringComparison cmp = f.Arguments.Count > 2 + && Convert.ToInt32(Evaluate(f.Arguments[2]), CultureInfo.InvariantCulture) == 0 + ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; + return Math.Sign(string.Compare(a.ToString(), b.ToString(), cmp)); + } + + /// Access InStrRev(string1, string2, [start=-1], [compare]): the 1-based position of the last + /// occurrence of string2 in string1 (0 if not found), searching within the first start characters + /// (the match must end at or before start; start=-1 means the whole string). Case-insensitive + /// unless compare=0 (binary). Semantics verified vs ACE, including its quirks: an empty needle returns the + /// effective start position; start=0 (or <-1) → "Invalid procedure call"; and — unlike + /// InStr — a NULL argument raises "Data type mismatch" rather than propagating NULL. + private object? InstrRev(FunctionCall f) + { + object? s1v = Evaluate(f.Arguments[0]); + object? s2v = Evaluate(f.Arguments[1]); + if (s1v is null || s2v is null) + throw new InvalidOperationException("Data type mismatch in criteria expression: InStrRev() argument is null."); + string s1 = s1v.ToString()!, s2 = s2v.ToString()!; + + int start = f.Arguments.Count > 2 ? Convert.ToInt32(Evaluate(f.Arguments[2]), CultureInfo.InvariantCulture) : -1; + if (start == -1) start = s1.Length; + else if (start < 1) + throw new InvalidOperationException("Invalid procedure call: InStrRev() start must be -1 or a positive position."); + + StringComparison cmp = f.Arguments.Count > 3 + && Convert.ToInt32(Evaluate(f.Arguments[3]), CultureInfo.InvariantCulture) == 0 + ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; + + if (s1.Length == 0) return 0; + int window = Math.Min(start, s1.Length); // search within Left(string1, start) + if (s2.Length == 0) return window; // empty needle → the effective start position + int idx = s1[..window].LastIndexOf(s2, cmp); + return idx < 0 ? 0 : idx + 1; + } + + /// VBA Str(number): the number as text, with a leading space for non-negative values (VBA + /// reserves that column for the sign). + private static string VbaStr(object v) + { + double d = Convert.ToDouble(v, CultureInfo.InvariantCulture); + string s = d.ToString(CultureInfo.InvariantCulture); + return d >= 0 ? " " + s : s; + } + + /// VBA Val(string): the leading number as a Double (0 if none). VBA first strips ALL + /// whitespace (so "3 .1 4" → 3.14, " - 5" → -5), then reads the leading number — recognising + /// &H hex and &O octal prefixes — and stops at the first character it can't use + /// (verified vs ACE). + private static object VbaVal(string s) + { + string t = new string(s.Where(c => !char.IsWhiteSpace(c)).ToArray()); + if (t.Length == 0) return 0.0; + + Match hex = Regex.Match(t, @"^([+-]?)&[Hh]([0-9A-Fa-f]+)"); + if (hex.Success) + { + long h = Convert.ToInt64(hex.Groups[2].Value, 16); + return (double)(hex.Groups[1].Value == "-" ? -h : h); + } + Match oct = Regex.Match(t, @"^([+-]?)&[Oo]([0-7]+)"); + if (oct.Success) + { + long o = Convert.ToInt64(oct.Groups[2].Value, 8); + return (double)(oct.Groups[1].Value == "-" ? -o : o); + } + Match dec = Regex.Match(t, @"^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?"); + return dec.Success && double.TryParse(dec.Value, NumberStyles.Float, CultureInfo.InvariantCulture, out double d) + ? d : 0.0; + } + + /// VBA IsNumeric(value): true for a number or a numeric string. + private static bool IsNumericValue(object? v) => v switch + { + null or bool => false, + byte or short or int or long or float or double or decimal => true, + _ => double.TryParse(v.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out _), + }; + + /// VBA TypeName(value) — the Access type name (verified vs ACE, e.g. an Int32 literal → "Long"). + private static string TypeNameOf(object? v) => v switch + { + null => "Null", + bool => "Boolean", + byte => "Byte", + short => "Integer", + int or long => "Long", + float => "Single", + double => "Double", + decimal => "Currency", + DateTime => "Date", + string => "String", + _ => v.GetType().Name, + }; + + /// VBA VarType(value) — the Access variant type code (vbLong=3, vbString=8, …). + private static int VarTypeOf(object? v) => v switch + { + null => 1, // vbNull + bool => 11, // vbBoolean + byte => 17, // vbByte + short => 2, // vbInteger + int or long => 3, // vbLong + float => 4, // vbSingle + double => 5, // vbDouble + decimal => 6, // vbCurrency + DateTime => 7, // vbDate + _ => 8, // vbString + }; + + /// Access Format(value[, format]). Named formats (Currency, Percent, Short Date, …) and the + /// custom numeric/date/string format strings, driven off — as ACE + /// drives them off the OS regional settings (so date/currency output is locale-dependent, matching ACE on a + /// given host). Custom date formats translate VBA tokens to .NET (VBA mm=month/nn=minutes/ + /// hh=hour, plus q=quarter). NULL-propagating; no/empty format → the default string. + private object? FormatValue(FunctionCall f) + { + object? value = Evaluate(f.Arguments[0]); + if (value is null) return null; + string? fmt = f.Arguments.Count > 1 ? Evaluate(f.Arguments[1])?.ToString() : null; + if (string.IsNullOrEmpty(fmt)) return value.ToString(); + + CultureInfo c = CultureInfo.CurrentCulture; + // Named formats (case-insensitive). Numeric/boolean names first, then date/time names. + switch (fmt.Trim().ToLowerInvariant()) + { + case "general number": return Convert.ToDecimal(value, CultureInfo.InvariantCulture).ToString(c); + case "currency": return Convert.ToDecimal(value, CultureInfo.InvariantCulture).ToString("C", c); + case "fixed": return Convert.ToDouble(value, CultureInfo.InvariantCulture).ToString("0.00", c); + case "standard": return Convert.ToDouble(value, CultureInfo.InvariantCulture).ToString("#,##0.00", c); + case "percent": return Convert.ToDouble(value, CultureInfo.InvariantCulture).ToString("0.00%", c); + case "scientific": return Convert.ToDouble(value, CultureInfo.InvariantCulture).ToString("0.00E+00", c); + case "yes/no": return IsZeroValue(value) ? "No" : "Yes"; + case "true/false": return IsZeroValue(value) ? "False" : "True"; + case "on/off": return IsZeroValue(value) ? "Off" : "On"; + case "general date": return ((DateTime)ToDate(value)).ToString(c); + case "long date": return ((DateTime)ToDate(value)).ToString("D", c); + case "medium date": return ((DateTime)ToDate(value)).ToString("dd-MMM-yy", c); + case "short date": return ((DateTime)ToDate(value)).ToString("d", c); + case "long time": return ((DateTime)ToDate(value)).ToString("T", c); + case "medium time": return ((DateTime)ToDate(value)).ToString("hh:mm tt", c); + case "short time": return ((DateTime)ToDate(value)).ToString("HH:mm", c); + } + + // Custom format strings. '0'/'#' → numeric (VBA numeric tokens map ~directly to .NET). Otherwise a date + // token letter → date format (VBA→.NET translation). Otherwise a string format ('>' upper, '<' lower). + if (fmt.IndexOfAny(['0', '#']) >= 0) + return Convert.ToDouble(value, CultureInfo.InvariantCulture).ToString(fmt, c); + if (fmt.IndexOfAny(['y', 'Y', 'm', 'M', 'd', 'D', 'h', 'H', 'n', 'N', 's', 'S', 'q', 'Q']) >= 0) + { + DateTime dt = (DateTime)ToDate(value); + return dt.ToString(TranslateVbaDateFormat(fmt, dt), c); + } + return fmt switch + { + ">" => value.ToString()!.ToUpperInvariant(), + "<" => value.ToString()!.ToLowerInvariant(), + _ => value.ToString(), + }; + } + + /// True when a value is zero/false — for the Yes/No, True/False, On/Off named formats. + private static bool IsZeroValue(object v) => + v is bool b ? !b : Convert.ToDouble(v, CultureInfo.InvariantCulture) == 0; + + /// Translates a VBA date/time format string into the equivalent .NET custom format. VBA differs from + /// .NET on m=month (vs minutes), n=minutes, and h=24-hour unless AM/PM is present; and it + /// has q=quarter, which .NET lacks (emitted as an escaped literal digit). + private static string TranslateVbaDateFormat(string vba, DateTime dt) + { + bool twelveHour = vba.Contains("am/pm", StringComparison.OrdinalIgnoreCase) + || vba.Contains("a/p", StringComparison.OrdinalIgnoreCase); + var sb = new StringBuilder(); + for (int i = 0; i < vba.Length;) + { + char ch = vba[i]; + // AM/PM tokens. + if (i + 4 < vba.Length + 1 && vba.AsSpan(i).StartsWith("am/pm", StringComparison.OrdinalIgnoreCase)) + { sb.Append("tt"); i += 5; continue; } + if (ch is '\\' && i + 1 < vba.Length) { sb.Append('\\').Append(vba[i + 1]); i += 2; continue; } + if (ch is '"') + { + int j = i + 1; + while (j < vba.Length && vba[j] != '"') { sb.Append('\\').Append(vba[j]); j++; } + i = j + 1; continue; + } + char lower = char.ToLowerInvariant(ch); + if ("ymdhnsq".IndexOf(lower) >= 0) + { + int j = i; while (j < vba.Length && char.ToLowerInvariant(vba[j]) == lower) j++; + int len = j - i; + sb.Append(lower switch + { + 'y' => new string('y', len is 2 ? 2 : 4), + 'm' => new string('M', len), // VBA m/mm/mmm/mmmm = month + 'n' => new string('m', Math.Min(len, 2)), // VBA n/nn = minutes + 's' => new string('s', Math.Min(len, 2)), + 'd' => new string('d', len), + 'h' => new string(twelveHour ? 'h' : 'H', Math.Min(len, 2)), + 'q' => "\\" + ((dt.Month - 1) / 3 + 1), // quarter as an escaped literal digit + _ => new string(lower, len), + }); + i = j; continue; + } + sb.Append(ch); i++; + } + return sb.ToString(); + } + + /// Access StrConv(string, conversion) (verified vs ACE): 1 = UpperCase, 2 = LowerCase, + /// 3 = ProperCase (title case); 64 = vbUnicode (reinterpret the UTF-16 bytes as one char each — doubles the + /// length with null chars); 128 = vbFromUnicode (combine char pairs into single code units). The narrow/wide + /// and Japanese Kana modes (4/16/32) raise "Invalid procedure call", matching ACE. NULL-propagating. + private object? StrConv(FunctionCall f) + { + object? sv = Evaluate(f.Arguments[0]); + object? modeV = Evaluate(f.Arguments[1]); + if (sv is null || modeV is null) return null; + int mode = Convert.ToInt32(modeV, CultureInfo.InvariantCulture); + + // vbUnicode (64) on binary widens each byte to one Unicode char — Jet's binary→string conversion. + // This is the byte-array path EF emits for `byte[].Contains(x)`: INSTR(1, STRCONV(arr, 64), 0xXX, 0). + if (mode == 64 && sv is byte[] binary) + return ByteArrayToString(binary); + + string s = sv.ToString()!; + return mode switch + { + 1 => s.ToUpperInvariant(), + 2 => s.ToLowerInvariant(), + 3 => EnUs.TextInfo.ToTitleCase(s.ToLowerInvariant()), + 64 => new string(Encoding.Unicode.GetBytes(s).Select(x => (char)x).ToArray()), + 128 => FromUnicodeBytes(s), + _ => throw new InvalidOperationException("Invalid procedure call: unsupported StrConv conversion mode."), + }; + } + + /// Jet coerces a binary value to a string by mapping each byte to a single char (the value it + /// widens back to via STRCONV(…, 64)). A byte[] reaching a string function — e.g. a + /// 0xNN hex literal used as an INSTR needle — is coerced this way, not via + /// ToString() (which would yield "System.Byte[]"). + private static string ByteArrayToString(byte[] bytes) => new(Array.ConvertAll(bytes, b => (char)b)); + + private static string ToJetString(object value) => value is byte[] b ? ByteArrayToString(b) : value.ToString()!; + + /// StrConv vbFromUnicode (128): combine successive character pairs into single UTF-16 code units + /// (low char = low byte, next char = high byte); a trailing unpaired char is dropped (verified vs ACE). + private static string FromUnicodeBytes(string s) + { + var sb = new StringBuilder(); + for (int i = 0; i + 1 < s.Length; i += 2) + sb.Append((char)(s[i] | (s[i + 1] << 8))); + return sb.ToString(); + } + + /// VBA WeekdayName(weekday, [abbreviate=False], [firstDayOfWeek=vbSunday]): the name of the + /// day at 1-based position weekday in a week starting from firstDayOfWeek (1=Sunday … 7=Saturday). + /// Verified vs ACE for an explicit first day (WeekdayName(1,,1)→"Sunday", (1,,2)→"Monday"). NOTE: + /// ACE's *omitted* default follows the OS regional first day; LibRed uses the VBA-documented default of + /// vbSunday for determinism, so the no-third-arg case may differ from a given ACE host. NULL-propagating. + private object? WeekdayNameOf(FunctionCall f) + { + object? wdV = Evaluate(f.Arguments[0]); + if (wdV is null) return null; + int weekday = Convert.ToInt32(wdV, CultureInfo.InvariantCulture); + bool abbreviate = f.Arguments.Count > 1 && IsTrue(f.Arguments[1]); + int firstDay = f.Arguments.Count > 2 ? Convert.ToInt32(Evaluate(f.Arguments[2]), CultureInfo.InvariantCulture) : 1; + if (firstDay == 0) firstDay = 1; // vbUseSystem → treat as vbSunday for determinism + // Map to a 0..6 index into Sunday..Saturday. + int index = ((firstDay - 1) + (weekday - 1)) % 7; + if (index < 0) index += 7; + var names = abbreviate ? EnUs.DateTimeFormat.AbbreviatedDayNames : EnUs.DateTimeFormat.DayNames; + return names[index]; + } + + /// Access Partition(number, start, stop, interval): a "lower:upper" range label, both + /// sides right-justified to a fixed width. Below the range → lower blank, upper = start-1; above → + /// lower = stop+1, upper blank; otherwise the interval bucket (verified vs ACE). NULL-propagating. + private object? PartitionOf(FunctionCall f) + { + object? nV = Evaluate(f.Arguments[0]); + if (nV is null) return null; + long number = Convert.ToInt64(nV, CultureInfo.InvariantCulture); + long start = Convert.ToInt64(Evaluate(f.Arguments[1]), CultureInfo.InvariantCulture); + long stop = Convert.ToInt64(Evaluate(f.Arguments[2]), CultureInfo.InvariantCulture); + long interval = Convert.ToInt64(Evaluate(f.Arguments[3]), CultureInfo.InvariantCulture); + + // Fixed field width = the widest boundary that can appear (the below/above sentinels). + int width = Math.Max((start - 1).ToString(CultureInfo.InvariantCulture).Length, + (stop + 1).ToString(CultureInfo.InvariantCulture).Length); + + string lower, upper; + if (number < start) { lower = ""; upper = (start - 1).ToString(CultureInfo.InvariantCulture); } + else if (number > stop) { lower = (stop + 1).ToString(CultureInfo.InvariantCulture); upper = ""; } + else + { + long lo = start + (number - start) / interval * interval; + long hi = Math.Min(lo + interval - 1, stop); + lower = lo.ToString(CultureInfo.InvariantCulture); + upper = hi.ToString(CultureInfo.InvariantCulture); + } + return $"{lower.PadLeft(width)}:{upper.PadLeft(width)}"; + } + + /// VBA LeftB(string, bytes): the leading bytes bytes of the UTF-16 layout, i.e. the + /// first bytes/2 characters. NULL-propagating. + private object? ByteLeft(FunctionCall f) + { + object? sv = Evaluate(f.Arguments[0]); + if (sv is null) return null; + byte[] b = ToBytes(sv); + int n = Math.Clamp(Convert.ToInt32(Evaluate(f.Arguments[1]), CultureInfo.InvariantCulture), 0, b.Length); + return ByteResult(sv, b[..n]); + } + + /// VBA RightB(string, bytes): the trailing bytes bytes. NULL-propagating. + private object? ByteRight(FunctionCall f) + { + object? sv = Evaluate(f.Arguments[0]); + if (sv is null) return null; + byte[] b = ToBytes(sv); + int n = Math.Clamp(Convert.ToInt32(Evaluate(f.Arguments[1]), CultureInfo.InvariantCulture), 0, b.Length); + return ByteResult(sv, b[^n..]); + } + + /// VBA MidB(string, startByte[, lenBytes]): a 1-based **byte** slice (may start/end + /// mid-character). NULL-propagating. + private object? ByteMid(FunctionCall f) + { + object? sv = Evaluate(f.Arguments[0]); + if (sv is null) return null; + byte[] b = ToBytes(sv); + int start = Math.Max(0, Convert.ToInt32(Evaluate(f.Arguments[1]), CultureInfo.InvariantCulture) - 1); + if (start >= b.Length) return ByteResult(sv, []); + int len = f.Arguments.Count > 2 + ? Convert.ToInt32(Evaluate(f.Arguments[2]), CultureInfo.InvariantCulture) + : b.Length - start; + len = Math.Clamp(len, 0, b.Length - start); + return ByteResult(sv, b[start..(start + len)]); + } + + /// The result of a byte-slice function: a **byte[]** when the input was binary (so a further byte + /// function like ASCB(RIGHTB(x,1)) can read the raw byte — the mechanism EFCore.Jet's ByteArrayLength + /// relies on), or the decoded string (dropping a trailing odd byte) when the input was text. + private static object ByteResult(object input, byte[] slice) => input is byte[] ? slice : FromBytes(slice); + + /// VBA InStrB([start,] string1, string2): the 1-based **byte** position of string2's bytes in + /// string1's bytes (0 if not found). NULL-propagating. + private object? InstrB(FunctionCall f) + { + int argc = f.Arguments.Count; + object? s1v = Evaluate(f.Arguments[argc >= 3 ? 1 : 0]); + object? s2v = Evaluate(f.Arguments[argc >= 3 ? 2 : 1]); + if (s1v is null || s2v is null) return null; + int start = argc >= 3 ? Math.Max(0, Convert.ToInt32(Evaluate(f.Arguments[0]), CultureInfo.InvariantCulture) - 1) : 0; + int idx = IndexOfBytes(ToBytes(s1v), ToBytes(s2v), start); + return idx < 0 ? 0 : idx + 1; + } + + private static int IndexOfBytes(byte[] hay, byte[] needle, int start) + { + if (needle.Length == 0) return start <= hay.Length ? start : -1; + for (int i = Math.Max(0, start); i + needle.Length <= hay.Length; i++) + { + bool match = true; + for (int j = 0; j < needle.Length; j++) + if (hay[i + j] != needle[j]) { match = false; break; } + if (match) return i; + } + return -1; + } + + /// The UTF-16LE **byte** representation a byte function operates on: a string's encoded bytes, or a + /// binary value's raw bytes with an odd trailing byte zero-padded (matching ACE, which reinterprets a binary + /// column as a UTF-16 string — LenB of a 3-byte value is 4). + private static byte[] ToBytes(object v) + { + if (v is not byte[] bytes) return System.Text.Encoding.Unicode.GetBytes(v.ToString()!); + if (bytes.Length % 2 == 0) return bytes; + var padded = new byte[bytes.Length + 1]; + Array.Copy(bytes, padded, bytes.Length); + return padded; + } + + /// Decodes a byte slice back to a string, dropping a trailing incomplete (odd) byte — matching ACE + /// (MidB(x, 1, 3) yields one character from three bytes). + private static string FromBytes(byte[] b) => + System.Text.Encoding.Unicode.GetString(b, 0, b.Length - (b.Length % 2)); + + /// The text a string function operates on: a binary value reinterpreted as a UTF-16LE string (odd + /// byte zero-padded), or a normal string. + private static string ToText(object v) => + v is byte[] ? System.Text.Encoding.Unicode.GetString(ToBytes(v)) : v.ToString()!; + + // --- Financial / formatting / colour functions (JES surface) --- + + private double FinArg(FunctionCall f, int i) => Convert.ToDouble(Evaluate(f.Arguments[i]), CultureInfo.InvariantCulture); + private double FinArgOr(FunctionCall f, int i, double def) + => f.Arguments.Count > i && Evaluate(f.Arguments[i]) is { } v ? Convert.ToDouble(v, CultureInfo.InvariantCulture) : def; + /// Optional decimal-count arg for the FormatX functions — default 2 (also for the VBA "-1" default). + private int FmtDigits(FunctionCall f, int i) + => f.Arguments.Count > i && Evaluate(f.Arguments[i]) is { } v && Convert.ToInt32(v, CultureInfo.InvariantCulture) >= 0 + ? Convert.ToInt32(v, CultureInfo.InvariantCulture) : 2; + + private object FormatDateTimeFn(FunctionCall f) + { + var dt = (DateTime)ToDate(Evaluate(f.Arguments[0])!); + int mode = f.Arguments.Count > 1 ? Convert.ToInt32(Evaluate(f.Arguments[1]), CultureInfo.InvariantCulture) : 0; + CultureInfo c = CultureInfo.CurrentCulture; + return mode switch + { + 1 => dt.ToString("D", c), // Long Date + 2 => dt.ToString("d", c), // Short Date + 3 => dt.ToString("T", c), // Long Time + 4 => dt.ToString("t", c), // Short Time + _ => dt.TimeOfDay == TimeSpan.Zero ? dt.ToString("d", c) : dt.ToString("g", c), // General Date + }; + } + + // QBColor maps 0..15 to fixed BGR Long values (verified vs ACE: QBColor(4) = 128). + private static readonly int[] QbColors = + [ + 0x000000, 0x800000, 0x008000, 0x808000, 0x000080, 0x800080, 0x008080, 0xC0C0C0, + 0x808080, 0xFF0000, 0x00FF00, 0xFFFF00, 0x0000FF, 0xFF00FF, 0x00FFFF, 0xFFFFFF, + ]; + private static int QbColor(int n) => QbColors[((n % 16) + 16) % 16]; + + private static double Pow1(double rate, double nper) => Math.Pow(1 + rate, nper); + private static double AnnuityFactor(double rate, double nper, double type) => (1 + rate * type) * (Pow1(rate, nper) - 1) / rate; + + /// VBA Pmt(rate, nper, pv, [fv=0], [type=0]): the constant payment for an annuity. + private object Pmt(FunctionCall f) + { + double rate = FinArg(f, 0), nper = FinArg(f, 1), pv = FinArg(f, 2), fv = FinArgOr(f, 3, 0), type = FinArgOr(f, 4, 0); + return rate == 0 ? -(pv + fv) / nper : -(pv * Pow1(rate, nper) + fv) / AnnuityFactor(rate, nper, type); + } + + /// VBA FV(rate, nper, pmt, [pv=0], [type=0]): the future value of an annuity. + private object Fv(FunctionCall f) + { + double rate = FinArg(f, 0), nper = FinArg(f, 1), pmt = FinArg(f, 2), pv = FinArgOr(f, 3, 0), type = FinArgOr(f, 4, 0); + return rate == 0 ? -(pv + pmt * nper) : -(pv * Pow1(rate, nper) + pmt * AnnuityFactor(rate, nper, type)); + } + + /// VBA PV(rate, nper, pmt, [fv=0], [type=0]): the present value of an annuity. + private object Pv(FunctionCall f) + { + double rate = FinArg(f, 0), nper = FinArg(f, 1), pmt = FinArg(f, 2), fv = FinArgOr(f, 3, 0), type = FinArgOr(f, 4, 0); + return rate == 0 ? -(fv + pmt * nper) : -(fv + pmt * AnnuityFactor(rate, nper, type)) / Pow1(rate, nper); + } + + /// VBA NPer(rate, pmt, pv, [fv=0], [type=0]): the number of periods for an annuity. + private object NPer(FunctionCall f) + { + double rate = FinArg(f, 0), pmt = FinArg(f, 1), pv = FinArg(f, 2), fv = FinArgOr(f, 3, 0), type = FinArgOr(f, 4, 0); + if (rate == 0) return -(pv + fv) / pmt; + double a = pmt * (1 + rate * type); + return Math.Log((a - fv * rate) / (a + pv * rate)) / Math.Log(1 + rate); + } + + /// VBA IPmt(rate, per, nper, pv, [fv=0], [type=0]): the interest portion of payment per. + private object IPmt(FunctionCall f) + { + double rate = FinArg(f, 0), per = FinArg(f, 1), nper = FinArg(f, 2), pv = FinArg(f, 3), fv = FinArgOr(f, 4, 0), type = FinArgOr(f, 5, 0); + double pmt = rate == 0 ? -(pv + fv) / nper : -(pv * Pow1(rate, nper) + fv) / AnnuityFactor(rate, nper, type); + if (type == 1 && per == 1) return 0.0; + double balance = pv * Pow1(rate, per - 1) + pmt * (rate == 0 ? per - 1 : AnnuityFactor(rate, per - 1, type)); + double interest = -balance * rate; // interest paid is a cash outflow (negative), like Pmt + return type == 1 ? interest / (1 + rate) : interest; + } + + /// VBA PPmt(...): the principal portion of a payment (= Pmt − IPmt). + private object PPmt(FunctionCall f) + { + double rate = FinArg(f, 0), nper = FinArg(f, 2), pv = FinArg(f, 3), fv = FinArgOr(f, 4, 0), type = FinArgOr(f, 5, 0); + double pmt = rate == 0 ? -(pv + fv) / nper : -(pv * Pow1(rate, nper) + fv) / AnnuityFactor(rate, nper, type); + return pmt - Convert.ToDouble(IPmt(f), CultureInfo.InvariantCulture); + } + + /// VBA DDB(cost, salvage, life, period, [factor=2]): double-declining-balance depreciation. + private object Ddb(FunctionCall f) + { + double cost = FinArg(f, 0), salvage = FinArg(f, 1), life = FinArg(f, 2), period = FinArg(f, 3), factor = FinArgOr(f, 4, 2); + double rate = factor / life; + double bookStart = cost * Math.Pow(1 - rate, period - 1); + double dep = bookStart * rate; + if (bookStart - dep < salvage) dep = Math.Max(0, bookStart - salvage); + return dep; + } + + /// VBA Rate(nper, pmt, pv, [fv=0], [type=0], [guess=0.1]): the per-period rate, solved by + /// Newton–Raphson on the annuity equation. + private object Rate(FunctionCall f) + { + double nper = FinArg(f, 0), pmt = FinArg(f, 1), pv = FinArg(f, 2), fv = FinArgOr(f, 3, 0), type = FinArgOr(f, 4, 0); + double r = FinArgOr(f, 5, 0.1); + for (int iter = 0; iter < 100; iter++) + { + double v = r == 0 ? pv + pmt * nper + fv + : pv * Pow1(r, nper) + pmt * (1 + r * type) * (Pow1(r, nper) - 1) / r + fv; + const double h = 1e-6; + double vh = (r + h) == 0 ? pv + pmt * nper + fv + : pv * Pow1(r + h, nper) + pmt * (1 + (r + h) * type) * (Pow1(r + h, nper) - 1) / (r + h) + fv; + double deriv = (vh - v) / h; + if (Math.Abs(deriv) < 1e-12) break; + double next = r - v / deriv; + if (Math.Abs(next - r) < 1e-10) return next; + r = next; + } + return r; + } + + private uint _localRandSeed = 0x50000; // used when no connection-scoped SessionState is available + + /// VBA Rnd([number]) using VBA's own 24-bit LCG, so the sequence matches ACE (verified: + /// Rnd(-1) = 0.2240070104598999). number > 0 (or omitted) advances the generator; + /// number = 0 repeats the last value; number < 0 reseeds deterministically from the + /// argument's Single bit pattern. The seed is connection-scoped (via ) since the + /// JES has no Randomize. Result is a Single widened to Double, matching ACE. + private object Rnd(FunctionCall f) + { + uint seed = session?.RandSeed ?? _localRandSeed; + double arg = f.Arguments.Count > 0 && Evaluate(f.Arguments[0]) is { } a + ? Convert.ToDouble(a, CultureInfo.InvariantCulture) : 1.0; + if (arg != 0) + { + if (arg < 0) + { + uint ni = BitConverter.SingleToUInt32Bits((float)arg); + seed = (ni + (ni >> 24)) & 0xFFFFFF; + } + seed = (uint)((seed * 0xFD43FDUL + 0xC39EC3UL) & 0xFFFFFF); + } + if (session is not null) session.RandSeed = seed; else _localRandSeed = seed; + return (double)((float)seed / (float)0x1000000); + } + + /// A random non-zero signed Int32 — Access's GenUniqueID(). + private static int RandomLong() + { + int value; + do { value = Random.Shared.Next(int.MinValue, int.MaxValue); } while (value == 0); + return value; + } + + /// Access ROUND(number[, digits]): banker's rounding, preserving the operand's type (a double + /// rounds to a double, a decimal to a decimal — the EF contract). NULL-propagating. + private object? Round(FunctionCall f) + { + object? value = Evaluate(f.Arguments[0]); + if (value is null) return null; + int digits = f.Arguments.Count > 1 + ? Convert.ToInt32(Evaluate(f.Arguments[1]), CultureInfo.InvariantCulture) + : 0; + return value switch + { + decimal m => Math.Round(m, digits, MidpointRounding.ToEven), + double d => Math.Round(d, digits, MidpointRounding.ToEven), + float s => (float)Math.Round((double)s, digits, MidpointRounding.ToEven), + long l => (long)Math.Round((decimal)l, digits, MidpointRounding.ToEven), + _ => (int)Math.Round(Convert.ToDecimal(value, CultureInfo.InvariantCulture), digits, MidpointRounding.ToEven), + }; + } + + /// Applies a conversion to a single argument, propagating NULL. + private object? Convert1(FunctionCall f, Func convert) + { + object? value = Evaluate(f.Arguments[0]); + return value is null ? null : convert(value); + } + + /// Access CDate: a date passes through, a string is parsed, a number is an OLE Automation date + /// (days since 1899-12-30). + private static object ToDate(object v) => v switch + { + DateTime d => d, + string s => DateTime.Parse(s, CultureInfo.InvariantCulture), + _ => DateTime.FromOADate(Convert.ToDouble(v, CultureInfo.InvariantCulture)), + }; + + /// Access IsDate: true only for a date value or a string that parses as a date/time. A number, + /// NULL, or an unrecognisable string is false (verified vs ACE — unlike CDate, a bare number is not a + /// date here). + private static bool IsDateValue(object? v) => v switch + { + null => false, + DateTime => true, + string s => DateTime.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.None, out _), + _ => false, + }; + + /// A (string, int) → string function (LEFT/RIGHT), propagating NULL on the string argument. + // Left/Right: NULL string propagates; a NULL length raises "Data type mismatch" and a negative length + // "Invalid procedure call" — matching ACE (which errors rather than clamping). A zero length yields "". + private object? StringInt(FunctionCall f, Func op) + { + object? s = Evaluate(f.Arguments[0]); + if (s is null) return null; + object? nv = Evaluate(f.Arguments[1]); + if (nv is null) + throw new InvalidOperationException("Data type mismatch in criteria expression: length argument is null."); + int n = Convert.ToInt32(nv, CultureInfo.InvariantCulture); + if (n < 0) + throw new InvalidOperationException("Invalid procedure call: length cannot be negative."); + return op(s.ToString()!, n); + } + + /// Access MID(string, start[, length]) — a 1-based substring; length omitted means to the end. + private object? Mid(FunctionCall f) + { + object? sv = Evaluate(f.Arguments[0]); + if (sv is null) return null; // Mid propagates NULL on the string argument + string s = sv.ToString()!; + int start = Convert.ToInt32(Evaluate(f.Arguments[1]), CultureInfo.InvariantCulture); + if (start < 1) // ACE errors rather than clamping + throw new InvalidOperationException("Invalid procedure call: Mid() start must be >= 1."); + int from = start - 1; + if (from >= s.Length) return ""; + int avail = s.Length - from; + int len = avail; + if (f.Arguments.Count > 2 && Evaluate(f.Arguments[2]) is { } lenVal) + { + int requested = Convert.ToInt32(lenVal, CultureInfo.InvariantCulture); + if (requested < 0) // ACE errors on a negative length + throw new InvalidOperationException("Invalid procedure call: Mid() length cannot be negative."); + len = Math.Min(requested, avail); + } + return s.Substring(from, len); + } + + /// Access INSTR([start,] string1, string2[, compare]) — the 1-based position of string2 in + /// string1 (0 if not found). start defaults to 1; compare 0 = binary (case-sensitive), else text. + private object? Instr(FunctionCall f) + { + int argc = f.Arguments.Count; + // 2 args: (s1, s2); 3+: (start, s1, s2[, compare]). + int start = argc >= 3 ? Convert.ToInt32(Evaluate(f.Arguments[0]), CultureInfo.InvariantCulture) : 1; + object? s1v = Evaluate(f.Arguments[argc >= 3 ? 1 : 0]); + object? s2v = Evaluate(f.Arguments[argc >= 3 ? 2 : 1]); + if (s1v is null || s2v is null) return null; + StringComparison cmp = argc >= 4 && Convert.ToInt32(Evaluate(f.Arguments[3]), CultureInfo.InvariantCulture) == 0 + ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; + + // A byte[] argument (e.g. a 0xNN hex literal needle, or a binary haystack) coerces to a string one + // char per byte, matching Jet — not "System.Byte[]". + string s1 = ToJetString(s1v), s2 = ToJetString(s2v); + if (start < 1) start = 1; + if (start > s1.Length) return 0; + int idx = s1.IndexOf(s2, start - 1, cmp); + return idx < 0 ? 0 : idx + 1; + } + + /// Access REPLACE(string, find, replace[, start[, count[, compare]]]) — replaces occurrences of + /// find (from the 1-based start, at most count times, case-insensitive by default). + private object? Replace(FunctionCall f) + { + object? sv = Evaluate(f.Arguments[0]), findv = Evaluate(f.Arguments[1]), replv = Evaluate(f.Arguments[2]); + // ACE raises "Data type mismatch" for a null argument (unlike InStr, which propagates NULL). + if (sv is null || findv is null || replv is null) + throw new InvalidOperationException("Data type mismatch in criteria expression: Replace() argument is null."); + string s = sv.ToString()!, find = findv.ToString()!, repl = replv.ToString()!; + + int start = f.Arguments.Count > 3 ? Convert.ToInt32(Evaluate(f.Arguments[3]), CultureInfo.InvariantCulture) : 1; + if (start < 1) // ACE errors rather than clamping + throw new InvalidOperationException("Invalid procedure call: Replace() start must be >= 1."); + int count = f.Arguments.Count > 4 ? Convert.ToInt32(Evaluate(f.Arguments[4]), CultureInfo.InvariantCulture) : -1; + StringComparison cmp = f.Arguments.Count > 5 && Convert.ToInt32(Evaluate(f.Arguments[5]), CultureInfo.InvariantCulture) == 0 + ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; + + if (start > s.Length) return ""; + s = s[(start - 1)..]; + if (find.Length == 0) return s; + + var sb = new StringBuilder(); + int pos = 0, replaced = 0; + while (true) + { + int j = (count >= 0 && replaced >= count) ? -1 : s.IndexOf(find, pos, cmp); + if (j < 0) { sb.Append(s.AsSpan(pos)); break; } + sb.Append(s, pos, j - pos).Append(repl); + pos = j + find.Length; + replaced++; + } + return sb.ToString(); + } + + /// Applies a numeric transform to a single argument, propagating NULL. + /// A numeric transform (Fix/Int/Abs) that **preserves the operand's type** (double→double, + /// single→single, decimal→decimal, int→int, long→long) so it matches EF's Math.* return type. Integer + /// types use the exact decimal op (no floating round-trip). NULL-propagating. + private object? Numeric1(FunctionCall f, Func dOp, Func mOp) => + Evaluate(f.Arguments[0]) switch + { + null => null, + decimal m => mOp(m), + double d => dOp(d), + float s => (float)dOp(s), + long l => (long)mOp(l), + var v => (int)mOp(Convert.ToDecimal(v!, CultureInfo.InvariantCulture)), + }; + + /// Applies a double-precision transform to a single argument, propagating NULL. Used for + /// the trig/exp/log/sqrt VBA functions, which are inherently floating-point. + private object? UnaryDouble(FunctionCall f, Func op) + { + object? value = Evaluate(f.Arguments[0]); + return value is null ? null : op(Convert.ToDouble(value, CultureInfo.InvariantCulture)); + } + + /// Access DATEPART(interval, date): extracts a component of a date as an int. + private static object? DatePart(object? interval, object? date) + { + if (date is null) return null; + var d = Convert.ToDateTime(date, CultureInfo.InvariantCulture); + return (interval?.ToString() ?? "").ToLowerInvariant() switch + { + "yyyy" => d.Year, + "q" => (d.Month + 2) / 3, + "m" => d.Month, + "y" => d.DayOfYear, + "d" => d.Day, + "w" => (int)d.DayOfWeek + 1, + "ww" => CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(d, CalendarWeekRule.FirstDay, DayOfWeek.Sunday), + "h" => d.Hour, + "n" => d.Minute, + "s" => d.Second, + "ms" => d.Millisecond, + "mcs" => d.Microsecond, + "ns" => d.Nanosecond, + _ => throw new NotSupportedException($"DATEPART interval '{interval}' is not supported."), + }; + } + + /// A bitwise op (Access BAND/BOR/BXOR) over integer operands; the result + /// keeps the operand's int type (Int32, or Int64 if either operand is long). + private static object BitwiseOp(object a, object b, Func op) => + a is long or ulong || b is long or ulong ? (object)op(Lng(a), Lng(b)) : (int)op(Int(a), Int(b)); + + /// A function of a single date argument (Year/Month/Day/…), NULL-propagating. + private object? DatePartOf(FunctionCall f, Func part) + { + object? v = Evaluate(f.Arguments[0]); + return v is null ? null : part(Convert.ToDateTime(v, CultureInfo.InvariantCulture)); + } + + /// DateSerial(y,m,d) / TimeSerial(h,m,s): build a date/time from three integer parts (parts may + /// be out of range and roll over, matching Access). NULL-propagating. + private object? DateParts(FunctionCall f, Func build) + { + object? a = Evaluate(f.Arguments[0]), b = Evaluate(f.Arguments[1]), c = Evaluate(f.Arguments[2]); + if (a is null || b is null || c is null) return null; + return build(Int(a), Int(b), Int(c)); + } + + /// Access DateAdd(interval, number, date): add number intervals to a date. + private object? DateAdd(FunctionCall f) + { + object? intervalV = Evaluate(f.Arguments[0]), numberV = Evaluate(f.Arguments[1]), dateV = Evaluate(f.Arguments[2]); + if (dateV is null || numberV is null) return null; + int n = (int)Math.Truncate(Convert.ToDouble(numberV, CultureInfo.InvariantCulture)); // Access truncates + var d = Convert.ToDateTime(dateV, CultureInfo.InvariantCulture); + return (intervalV?.ToString() ?? "").ToLowerInvariant() switch + { + "yyyy" => d.AddYears(n), + "q" => d.AddMonths(n * 3), + "m" => d.AddMonths(n), + "y" or "d" or "w" => d.AddDays(n), + "ww" => d.AddDays(n * 7), + "h" => d.AddHours(n), + "n" => d.AddMinutes(n), + "s" => d.AddSeconds(n), + _ => throw new NotSupportedException($"DATEADD interval '{intervalV}' is not supported."), + }; + } + + /// Access DateDiff(interval, date1, date2): the number of interval boundaries from date1 to + /// date2 (a Long Integer). NULL-propagating. + private object? DateDiff(FunctionCall f) + { + object? intervalV = Evaluate(f.Arguments[0]), d1V = Evaluate(f.Arguments[1]), d2V = Evaluate(f.Arguments[2]); + if (d1V is null || d2V is null) return null; + var d1 = Convert.ToDateTime(d1V, CultureInfo.InvariantCulture); + var d2 = Convert.ToDateTime(d2V, CultureInfo.InvariantCulture); + return (intervalV?.ToString() ?? "").ToLowerInvariant() switch + { + "yyyy" => d2.Year - d1.Year, + "q" => (d2.Year - d1.Year) * 4 + (d2.Month - 1) / 3 - (d1.Month - 1) / 3, + "m" => (d2.Year - d1.Year) * 12 + d2.Month - d1.Month, + "y" or "d" or "w" => (int)(d2.Date - d1.Date).TotalDays, + "ww" => (int)((d2.Date - d1.Date).TotalDays / 7), + "h" => (int)(d2 - d1).TotalHours, + "n" => (int)(d2 - d1).TotalMinutes, + "s" => (int)(d2 - d1).TotalSeconds, + _ => throw new NotSupportedException($"DATEDIFF interval '{intervalV}' is not supported."), + }; + } + + // Access truthiness: a filter/logical context treats any non-zero number as true (so a boolean stored + // as a -1/0 integer — the nullable-bool convention — works as a bare predicate), a null as not-true. + public bool IsTrue(Expression expression) => AsBool(Evaluate(expression)) is true; + + private object? EvaluateUnary(UnaryExpression u) + { + object? v = Evaluate(u.Operand); + return u.Operator switch + { + UnaryOperator.Not => AsBool(v) is bool b ? !b : null, // coerce a -1/0 integer boolean too + UnaryOperator.Negate => v switch // preserve the operand's numeric type (EF contract), like C# unary minus + { + null => null, + decimal d => -d, + double db => -db, + float f => -f, + long or ulong => -Lng(v), + _ => -Int(v), // int/short/byte → int + }, + UnaryOperator.BitNot => v is null ? null : v is long or ulong ? (object)~Lng(v) : ~Int(v), + UnaryOperator.IsNull => v is null, + UnaryOperator.IsNotNull => v is not null, + _ => throw new NotSupportedException($"Unary operator {u.Operator}."), + }; + } + + private object? EvaluateBinary(BinaryExpression b) + { + // AND/OR use Kleene three-valued logic, and short-circuit: `false AND x` is false and `true OR x` + // is true regardless of x — so the right operand (which may be an expensive correlated subquery) is + // only evaluated when it can affect the result. + if (b.Operator is BinaryOperator.And) + { + bool? l = AsBool(Evaluate(b.Left)); + return l == false ? false : l & AsBool(Evaluate(b.Right)); + } + if (b.Operator is BinaryOperator.Or) + { + bool? l = AsBool(Evaluate(b.Left)); + return l == true ? true : l | AsBool(Evaluate(b.Right)); + } + + object? left = Evaluate(b.Left); + object? right = Evaluate(b.Right); + + if (b.Operator == BinaryOperator.Concat) + return (left?.ToString() ?? "") + (right?.ToString() ?? ""); + + if (left is null || right is null) + return null; + + return b.Operator switch + { + BinaryOperator.Equal => Compare(left, right) == 0, + BinaryOperator.NotEqual => Compare(left, right) != 0, + BinaryOperator.LessThan => Compare(left, right) < 0, + BinaryOperator.LessThanOrEqual => Compare(left, right) <= 0, + BinaryOperator.GreaterThan => Compare(left, right) > 0, + BinaryOperator.GreaterThanOrEqual => Compare(left, right) >= 0, + BinaryOperator.Like => Like(left.ToString()!, right.ToString()!), + // Access '+' concatenates when either operand is text (but, unlike '&', null already propagated above). + BinaryOperator.Add => left is string || right is string ? left.ToString() + right.ToString() : Arithmetic(left, right, '+'), + BinaryOperator.Subtract => Arithmetic(left, right, '-'), + BinaryOperator.Multiply => Arithmetic(left, right, '*'), + BinaryOperator.Divide => Divide(left, right), // Access '/' is floating division + BinaryOperator.Modulo => IntegerOp(left, right, '%'), + BinaryOperator.IntDivide => IntegerOp(left, right, '\\'), + BinaryOperator.Power => Math.Pow(Convert.ToDouble(left, CultureInfo.InvariantCulture), Convert.ToDouble(right, CultureInfo.InvariantCulture)), + BinaryOperator.BitAnd => BitwiseOp(left, right, (x, y) => x & y), + BinaryOperator.BitOr => BitwiseOp(left, right, (x, y) => x | y), + BinaryOperator.BitXor => BitwiseOp(left, right, (x, y) => x ^ y), + _ => throw new NotSupportedException($"Binary operator {b.Operator}."), + }; + } + + /// SQL LIKE: '%'/'*' match any run, '_'/'?' match one char; case-insensitive. + private static bool Like(string value, string pattern) + { + // Access/Jet LIKE wildcards: * or % = any run, ? or _ = any single char, # = any single DIGIT, and + // [charlist] / [!charlist] = a (negated) single-char class. A literal special char is escaped by + // bracketing it — e.g. EF's Contains("C#") emits `%C[#]%`, where [#] matches a literal '#'. Without + // bracket-class support that pattern would look for the literal text "C[#]" and match nothing. + var sb = new StringBuilder("^"); + int i = 0; + while (i < pattern.Length) + { + char ch = pattern[i]; + if (ch == '[') + { + int close = pattern.IndexOf(']', i + 1); + if (close > i) + { + sb.Append(TranslateLikeClass(pattern.Substring(i + 1, close - i - 1))); + i = close + 1; + continue; + } + // No closing ']' → a literal '['. + } + + sb.Append(ch switch + { + '%' or '*' => ".*", + '_' or '?' => ".", + '#' => "[0-9]", + _ => Regex.Escape(ch.ToString()), + }); + i++; + } + sb.Append('$'); + return Regex.IsMatch(value, sb.ToString(), RegexOptions.IgnoreCase | RegexOptions.Singleline); + } + + /// Translates an Access LIKE bracket list (the text between [ and ]) to a regex + /// character class: a leading ! is negation (^), ranges (a-z) carry over, and the + /// regex-special \ ] ^ are escaped so a bracketed literal like [#]/[[] matches itself. + private static string TranslateLikeClass(string inner) + { + var sb = new StringBuilder("["); + if (inner.StartsWith('!')) { sb.Append('^'); inner = inner[1..]; } + foreach (char c in inner) + { + if (c is '\\' or ']' or '^') sb.Append('\\'); + sb.Append(c); + } + sb.Append(']'); + return sb.ToString(); + } + + private static bool? AsBool(object? v) => v switch { bool b => b, null => null, _ => Convert.ToBoolean(v) }; + + /// + - * with C# widest-operand type promotion, so the result CLR type matches what EF + /// expects (int+int→int, …): decimal > double > single > long > int. (Contract: like + /// Enumerable arithmetic — LibRed emits the operand type, not an ACE-widened one.) + private static object Arithmetic(object left, object right, char op) + { + // Date/time arithmetic operates on the OLE Automation serial (days since 1899-12-30; the fractional + // part is the time), verified vs ACE: date+time and date±N days yield a DateTime, but date−date yields + // a plain day count (Double). A number operand is taken as a count of days. The result is rounded to a + // whole second (Jet has no sub-second) to shed the tiny floating-point drift the serial round-trip adds. + if (left is DateTime || right is DateTime) + { + double a = Oa(left), b = Oa(right); + bool bothDates = left is DateTime && right is DateTime; + return op switch + { + '-' when bothDates => a - b, // date − date → number of days + '+' => RoundToSecond(DateTime.FromOADate(a + b)), + '-' => RoundToSecond(DateTime.FromOADate(a - b)), + _ => a * b, // date × n has no date meaning → numeric + }; + } + if (left is decimal || right is decimal) { decimal a = Dec(left), b = Dec(right); return op == '+' ? a + b : op == '-' ? a - b : a * b; } + if (left is double || right is double) { double a = Dbl(left), b = Dbl(right); return op == '+' ? a + b : op == '-' ? a - b : a * b; } + if (left is float || right is float) { float a = (float)Dbl(left), b = (float)Dbl(right); return op == '+' ? a + b : op == '-' ? a - b : a * b; } + if (left is long or ulong || right is long or ulong) { long a = Lng(left), b = Lng(right); return op == '+' ? a + b : op == '-' ? a - b : a * b; } + int x = Int(left), y = Int(right); return op == '+' ? x + y : op == '-' ? x - y : x * y; + } + + /// Access / is floating division — Decimal when either operand is Decimal/Currency, + /// otherwise Double (never integer division; that is \). + private static object Divide(object left, object right) => + left is decimal || right is decimal ? Dec(left) / Dec(right) : Dbl(left) / Dbl(right); + + /// Access integer operators \ (int division) and MOD: operands round to an + /// integer, and the result keeps the operand's integer type (int, or long if either is Int64) — so + /// int \ int is Int32, matching the EF contract. + private static object IntegerOp(object left, object right, char op) + { + if (left is long or ulong || right is long or ulong) + { long a = Lng(left), b = Lng(right); return op == '%' ? a % b : a / b; } + int x = Int(left), y = Int(right); return op == '%' ? x % y : x / y; + } + + // Jet's boolean convention (true = -1, false = 0) so a bool matches the numeric column it is stored in. + private static object Numeric(object v) => v is bool b ? (b ? -1 : 0) : v; + private static decimal Dec(object v) => Convert.ToDecimal(Numeric(v), CultureInfo.InvariantCulture); + private static double Dbl(object v) => Convert.ToDouble(Numeric(v), CultureInfo.InvariantCulture); + // Narrow to single precision (the cast yields ±Infinity for an out-of-range double rather than throwing). + private static float Sng(object v) => (float)Dbl(v); + private static long Lng(object v) => Convert.ToInt64(Numeric(v), CultureInfo.InvariantCulture); + private static int Int(object v) => Convert.ToInt32(Numeric(v), CultureInfo.InvariantCulture); + + // For date arithmetic: a DateTime becomes its OLE Automation serial; a number is taken verbatim (as days). + private static double Oa(object v) => v is DateTime d ? d.ToOADate() : Dbl(v); + + // Rounds to the nearest whole second — Jet stores no sub-second, and the OA-serial round-trip can leave + // a value a few ticks shy of/past an exact second (e.g. 21:05:18.9999999). + private static DateTime RoundToSecond(DateTime d) + { + long rem = d.Ticks % TimeSpan.TicksPerSecond; + return rem >= TimeSpan.TicksPerSecond - rem + ? d.AddTicks(TimeSpan.TicksPerSecond - rem) + : d.AddTicks(-rem); + } + + private static int Compare(object left, object right) + { + if (IsNumeric(left) && IsNumeric(right)) + { + // A single-precision operand (a Single column value, a CSNG result, a SUM of singles) compares in + // single precision — narrow the other side to Single too. Widening the single to double instead + // exposes its rounding (a stored -1.234f is -1.2339999675… as a double) and breaks equality against + // a double literal, whereas ACE compares the literal in the column's single precision (no CSNG in + // the SQL). Only a Single present, no genuine double column, triggers this. + if (left is float || right is float) + return Sng(left).CompareTo(Sng(right)); + + // Otherwise compare in double when either side is floating point: a double can exceed decimal's + // range (e.g. EXP of a large value) and coercing it to decimal overflows. For integer/decimal + // operands keep decimal, which holds 64-bit integers and exact decimals without the precision loss + // double would introduce. + return left is double || right is double + ? Dbl(left).CompareTo(Dbl(right)) + : Dec(left).CompareTo(Dec(right)); + } + + // Binary (byte[]) columns: structural, length-sensitive byte compare — lexicographic then by + // length, so a shorter value sorts before a longer one sharing its prefix (Jet's binary order, + // matching IndexKeyEncoder). Without this, byte[] falls through to ToString() ("System.Byte[]" + // for every array) and all binaries compare *equal* — so `WHERE binKey = @p` matches every row. + if (left is byte[] lb && right is byte[] rb) + return CompareBytes(lb, rb); + + if (left is string || right is string) + return CompareText(left.ToString()!, right.ToString()!); + + if (left is IComparable c && left.GetType() == right.GetType()) + return c.CompareTo(right); + + return CompareText(left.ToString()!, right.ToString()!); + } + + /// Whether two non-null values are equal under the same coercions as = (used by the hash + /// join to re-check a bucket candidate). Only meaningful within one type kind — see . + public static bool KeyEqual(object a, object b) => Compare(a, b) == 0; + + /// A hash for a non-null join key that agrees with within a type kind: values + /// the evaluator treats as equal hash the same (numeric via double, text via Access's case-insensitive/ + /// trailing-space-trimmed collation, binary structurally). The planner only builds a hash join over + /// same-kind key columns, so this is total over the keys it actually sees. + public static int KeyHash(object v) => v switch + { + byte[] b => BinaryHash(b), + string s => System.Globalization.CultureInfo.InvariantCulture.CompareInfo + .GetHashCode(s.TrimEnd(' '), System.Globalization.CompareOptions.IgnoreCase), + _ when IsNumeric(v) => Dbl(v).GetHashCode(), + _ => v.GetHashCode(), + }; + + private static int BinaryHash(byte[] b) + { + var h = new HashCode(); + h.AddBytes(b); + return h.ToHashCode(); + } + + /// Lexicographic byte comparison, then by length (shorter prefix sorts first). + private static int CompareBytes(byte[] a, byte[] b) + { + int n = Math.Min(a.Length, b.Length); + for (int i = 0; i < n; i++) + if (a[i] != b[i]) return a[i].CompareTo(b[i]); + return a.Length.CompareTo(b.Length); + } + + /// Access text comparison: **case-insensitive**, **trailing spaces ignored**, and + /// **accent-aware ordering** (Access "General" collation). Uses invariant-culture ignore-case, which + /// matches ACE where ordinal doesn't — an accented letter sorts next to its base letter (verified vs + /// ACE: 'é' < 'f', 'café' < 'cafz') while accents stay significant for equality + /// ('café' ≠ 'cafe'). (Ignorable apostrophe/hyphen ordering is not reproduced.) + private static int CompareText(string a, string b) => + string.Compare(a.TrimEnd(' '), b.TrimEnd(' '), StringComparison.InvariantCultureIgnoreCase); + + /// Orders two values for SORT (nulls first), using the same coercion as comparisons. + public static int CompareForSort(object? a, object? b) => (a, b) switch + { + (null, null) => 0, + (null, _) => -1, + (_, null) => 1, + _ => Compare(a, b), + }; + + // Booleans count as numeric for comparison: EF maps CLR bool to a numeric (smallint) column, and + // a boolean predicate (e.g. IS NOT NULL) must compare equal to that stored value. The comparison + // coercions (Dec/Dbl) use Jet's convention (false = 0, true = -1) so a bool matches the numeric value + // it is stored as. + private static bool IsNumeric(object v) => + v is bool or byte or sbyte or short or ushort or int or uint or long or ulong or float or double or decimal; +} diff --git a/src/LibRed/LibRed.Engine/Execution/ParameterBag.cs b/src/LibRed/LibRed.Engine/Execution/ParameterBag.cs new file mode 100644 index 00000000..95ba0950 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/ParameterBag.cs @@ -0,0 +1,29 @@ +namespace LibRed.Engine.Execution; + +/// +/// Resolves query parameter references (@name) to supplied values. Names are matched +/// case-insensitively and the leading @ is optional on both the reference and the key, +/// so a value supplied as "p0" satisfies a "@p0" reference and vice versa. +/// +internal sealed class ParameterBag +{ + private readonly Dictionary _values = new(StringComparer.OrdinalIgnoreCase); + + public ParameterBag(IReadOnlyDictionary? values) + { + if (values is null) return; + foreach (var (key, value) in values) + _values[Normalize(key)] = value; + } + + public object? Resolve(string name) + { + if (name.StartsWith('?')) + throw new NotSupportedException("Positional ('?') parameters are not supported yet; use named (@name) parameters."); + if (_values.TryGetValue(Normalize(name), out object? value)) + return value; + throw new InvalidOperationException($"No value was supplied for parameter '{name}'."); + } + + private static string Normalize(string name) => name.TrimStart('@'); +} diff --git a/src/LibRed/LibRed.Engine/Execution/QueryExecutor.cs b/src/LibRed/LibRed.Engine/Execution/QueryExecutor.cs new file mode 100644 index 00000000..2eea5006 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/QueryExecutor.cs @@ -0,0 +1,1365 @@ +using LibRed.Engine.Plan; +using LibRed.Engine.Planning; +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Execution; + +/// A column produced by a plan node: an optional table-alias qualifier and a name. +internal readonly record struct OutputColumn(string? Qualifier, string Name, Type? ClrType = null); + +/// +/// Interprets a logical plan tree against the storage layer, producing a +/// . Rows flow as object?[]; each node carries the schema +/// (alias-qualified columns), and an optional outer is threaded so +/// correlated subqueries can resolve outer columns. +/// +public sealed class QueryExecutor : IScalarSubqueryRunner +{ + private readonly JetDatabase _database; + private readonly ParameterBag _parameters; + private readonly SessionState? _session; + + // Optimised plans for subqueries, keyed by their AST node (reference identity). A correlated subquery is + // executed once per outer row, so planning + index selection must be done ONCE, not on every evaluation. + private readonly Dictionary _subqueryPlans = new(ReferenceEqualityComparer.Instance); + + // Flattened projection schema (output columns + per-item source), keyed by the ProjectNode. Depends only on + // the node and its input column structure — both invariant across outer rows — so, like the subquery plans, + // it must be built ONCE. Rebuilding it per row re-ran DeclaredType (linear column scans, string allocation) + // for every outer row of a correlated subquery / nested-loop inner. + private readonly Dictionary _projectionSchemas = new(ReferenceEqualityComparer.Instance); + + // Decorrelated EXISTS subqueries, keyed by AST node. A present-but-null value records "analysed, not + // decorrelatable", so an unsound-to-rewrite subquery isn't re-analysed on every outer row. + private readonly Dictionary _semiJoins = new(ReferenceEqualityComparer.Instance); + + // The same for `x IN (subquery)`, kept separate because the plan there carries the IN value as an extra key + // column — the same SelectStatement node reached as an EXISTS body would need a different one. + private readonly Dictionary _inSemiJoins = new(ReferenceEqualityComparer.Instance); + + // And for a correlated scalar aggregate, which maps each key to one value rather than testing membership. + private readonly Dictionary _scalarSemiJoins = new(ReferenceEqualityComparer.Instance); + + // Results of subqueries that turned out not to depend on the outer row: same answer every time, so they are + // evaluated once per statement. Keyed by AST node; the boxed value may legitimately be null (SQL NULL), hence + // separate dictionaries rather than a null-means-absent convention. + private readonly Dictionary _hoistedScalar = new(ReferenceEqualityComparer.Instance); + private readonly Dictionary> _hoistedColumn = new(ReferenceEqualityComparer.Instance); + private readonly Dictionary _hoistedExists = new(ReferenceEqualityComparer.Instance); + + // Subqueries proven to depend on the outer row. Recorded so a correlated subquery pays ONE failed hoist + // attempt per statement rather than one per row. + private readonly HashSet _correlated = new(ReferenceEqualityComparer.Instance); + + // Per-row time spent on each decorrelatable subquery, which is what decides when to switch over. See + // DecorrelationGate: the rewrite is sound from the first probe but not always cheaper, and the outer row count + // that would settle it isn't known until the outer scan has finished. + private readonly Dictionary _gates = new(ReferenceEqualityComparer.Instance); + + private DecorrelationGate Gate(SelectStatement query) + => _gates.TryGetValue(query, out DecorrelationGate? gate) ? gate : _gates[query] = new DecorrelationGate(); + + public QueryExecutor(JetDatabase database, IReadOnlyDictionary? parameters = null, SessionState? session = null) + { + _database = database; + _parameters = new ParameterBag(parameters); + _session = session; + } + + public ResultSet ExecuteQuery(PlanNode plan) + { + var (columns, rows) = Execute(plan, null); + return new ResultSet( + columns.Select(c => c.Name).ToList(), + rows, + columns.Select(c => c.ClrType ?? typeof(object)).ToList()); + } + + /// Runs a FROM-less SELECT @@IDENTITY / SELECT @@ROWCOUNT: evaluates each system + /// variable against the session state and yields a single row. Each output column is named by its alias, + /// or the variable name if unaliased. + public ResultSet ExecuteSystemVariableSelect(SystemVariableSelectStatement statement) + { + var evaluator = new ExpressionEvaluator(new EvalScope([], [], null), this, _parameters, _session); + var names = new List(statement.Projection.Count); + var row = new object?[statement.Projection.Count]; + for (int i = 0; i < statement.Projection.Count; i++) + { + SelectItem item = statement.Projection[i]; + row[i] = evaluator.Evaluate(item.Value); + names.Add(item.Alias ?? ((SystemVariableExpression)item.Value).Name); + } + return new ResultSet(names, [row], statement.Projection + .Select(item => DeclaredType(item.Value, []) ?? typeof(object)).ToList()); + } + + object? IScalarSubqueryRunner.ExecuteScalar(SelectStatement query, EvalScope outerScope) + { + if (_hoistedScalar.TryGetValue(query, out object? hoisted)) + return hoisted; + + if (TryHoist(query, outerScope, ScalarOf, out object? once)) + return _hoistedScalar[query] = once; + + // A correlated aggregate is one grouped pass over the body rather than one aggregate per outer row. + if (!_scalarSemiJoins.TryGetValue(query, out ScalarAggregateSemiJoin? semi)) + { + _scalarSemiJoins[query] = semi = ScalarAggregateSemiJoin.TryBuild( + query, outerScope.AllColumns(), outerScope.VisibleAliases().ToHashSet(StringComparer.OrdinalIgnoreCase), + _database.Catalog); + } + + if (semi is null) + return ScalarOf(outerScope); + + DecorrelationGate gate = Gate(query); + if (gate.Ready) + return semi.Evaluate(this, new ExpressionEvaluator(outerScope, this, _parameters, _session)); + + long started = System.Diagnostics.Stopwatch.GetTimestamp(); + object? perRow = ScalarOf(outerScope); + gate.Charge(started); + return perRow; + + object? ScalarOf(EvalScope? scope) + { + var (_, rows) = Execute(SubqueryPlan(query, outerScope), scope); + foreach (object?[] row in rows) + return row.Length > 0 ? row[0] : null; + return null; // no rows → NULL + } + } + + bool IScalarSubqueryRunner.ExecuteExists(SelectStatement query, EvalScope outerScope) + { + // An EXISTS that doesn't depend on the outer row at all has one answer for the whole statement. + if (_hoistedExists.TryGetValue(query, out bool hoisted)) + return hoisted; + + if (TryHoist(query, outerScope, ExistsOf, out bool once)) + return _hoistedExists[query] = once; + + // A correlated EXISTS runs once per outer row, so if it can be turned into a hash semi-join the body is + // executed once for the whole statement instead of once per row. See ExistsSemiJoin for the measurements. + if (!_semiJoins.TryGetValue(query, out ExistsSemiJoin? semi)) + { + _semiJoins[query] = semi = ExistsSemiJoin.TryBuild( + query, outerScope.AllColumns(), outerScope.VisibleAliases().ToHashSet(StringComparer.OrdinalIgnoreCase), + _database.Catalog); + } + + if (semi is null) + { + return ExistsOf(outerScope); + } + + DecorrelationGate gate = Gate(query); + if (gate.Ready) + { + return semi.Matches(this, new ExpressionEvaluator(outerScope, this, _parameters, _session)); + } + + long started = System.Diagnostics.Stopwatch.GetTimestamp(); + bool perRow = ExistsOf(outerScope); + gate.Charge(started); + return perRow; + + bool ExistsOf(EvalScope? scope) + { + var (_, r) = Execute(SubqueryPlan(query, outerScope), scope); + return r.Any(); + } + } + + /// + /// Tries to evaluate a subquery once for the whole statement, which is valid exactly when its result does + /// not depend on the outer row. See for why this takes two checks: a + /// static one for qualified outer references (which a conditional could hide from any single evaluation), + /// and this trial run with no outer scope, which settles unqualified references by letting the + /// evaluator's own resolver fail on anything that would bind outward. + /// + /// + /// Catching broadly is safe in the harmless direction: a body that throws for an unrelated reason is + /// recorded as correlated and re-run per row, which raises the same error the caller would have seen + /// anyway. A subquery is a SELECT, so the abandoned attempt has no side effects. + /// + private bool TryHoist(SelectStatement query, EvalScope outerScope, Func run, out T result) + { + result = default!; + if (_correlated.Contains(query) + || SubqueryHoisting.MayReferenceOuter(query, outerScope.VisibleAliases().ToHashSet(StringComparer.OrdinalIgnoreCase))) + { + return false; + } + + try + { + result = run(null); + return true; + } + catch (Exception) + { + _correlated.Add(query); + return false; + } + } + + /// + /// Runs a decorrelated subquery body once and hashes the values it correlates on. Tuples containing a null + /// are dropped: a null can never satisfy an equi-predicate, exactly as the hash join's build phase does. + /// + /// + /// For IN, whose last key column is the subquery's own output rather than a correlation. A null + /// there is not "no match" but SQL's UNKNOWN, so instead of dropping the row its correlation prefix goes + /// to NullTailKeys — that is how the caller learns the column held a null for a given outer row. + /// A null in the correlation prefix still drops the row from both sets. + /// + /// + /// Per correlation column, whether a null there is a value to be hashed rather than a row to discard. See + /// . + /// + internal (HashSet Keys, HashSet NullTailKeys) BuildSemiJoinKeys( + SelectStatement keyQuery, int keyWidth, IReadOnlyList nullSafe, bool trackNullTail = false) + { + var keys = new HashSet(HashKeyComparer.Instance); + var nullTail = new HashSet(HashKeyComparer.Instance); + var (_, rows) = Execute(SubqueryPlan(keyQuery, new EvalScope([], [], null)), null); + foreach (object?[] row in rows) + { + if (row.Length < keyWidth) + { + continue; + } + + // The correlation prefix — every column but the IN value, which is the whole key for EXISTS. + int prefix = trackNullTail ? keyWidth - 1 : keyWidth; + var key = new object?[keyWidth]; + var usable = true; + for (var i = 0; i < prefix && usable; i++) + { + usable = (key[i] = row[i]) is not null || (i < nullSafe.Count && nullSafe[i]); + } + + if (!usable) + { + continue; + } + + if (!trackNullTail) + { + keys.Add(key); + } + else if ((key[prefix] = row[prefix]) is null) + { + nullTail.Add(key[..prefix]); + } + else + { + keys.Add(key); + } + } + + return (keys, nullTail); + } + + /// + /// Runs a decorrelated aggregate body grouped by its correlation columns, mapping each key tuple to the one + /// value that group aggregated to. Key tuples containing a null are dropped, as in + /// ; the aggregate itself may legitimately be null (SUM of nulls). + /// + internal Dictionary BuildGroupedAggregate( + SelectStatement keyQuery, int keyWidth, IReadOnlyList nullSafe) + { + var values = new Dictionary(HashKeyComparer.Instance); + var (_, rows) = Execute(SubqueryPlan(keyQuery, new EvalScope([], [], null)), null); + foreach (object?[] row in rows) + { + if (row.Length <= keyWidth) + { + continue; + } + + var key = new object?[keyWidth]; + var usable = true; + for (var i = 0; i < keyWidth && usable; i++) + { + usable = (key[i] = row[i]) is not null || (i < nullSafe.Count && nullSafe[i]); + } + + if (usable) + { + // Grouping is by exactly these columns, so a key cannot repeat; indexing rather than Add would + // hide it if that ever stopped holding, so let a duplicate throw. + values.Add(key, row[keyWidth]); + } + } + + return values; + } + + /// + /// What an aggregate call evaluates to over an empty group — COUNT is 0 where SUM/MIN + /// are null. This is what a correlated aggregate returns for an outer row with no matching inner rows, and + /// it comes from the same computation the per-row path uses so the two cannot disagree. + /// + internal object? EmptyGroupAggregate(FunctionCall call) + { + try + { + return ComputeAggregate(call, [], [], null); + } + catch (InvalidOperationException) + { + return null; // As in ExecuteAggregate: a call that can't be computed here isn't ours to compute. + } + } + + (bool Found, bool HasNull)? IScalarSubqueryRunner.ExecuteInSubquery( + SelectStatement query, Expression value, object? evaluated, EvalScope outerScope) + { + // An uncorrelated IN needs nothing from here: ExecuteColumn hoists it, so the body already runs once and + // the caller's loop walks a cached list. TryBuildForIn declines it too (there are no correlation keys). + if (!_inSemiJoins.TryGetValue(query, out ExistsSemiJoin? semi)) + { + _inSemiJoins[query] = semi = ExistsSemiJoin.TryBuildForIn( + query, value, outerScope.AllColumns(), + outerScope.VisibleAliases().ToHashSet(StringComparer.OrdinalIgnoreCase), _database.Catalog); + } + + // Not ready yet: decline, and the caller's loop runs the body through ExecuteColumn, which charges the gate. + return semi is not null && Gate(query).Ready + ? semi.ContainsValue(this, new ExpressionEvaluator(outerScope, this, _parameters, _session), evaluated) + : null; + } + + IEnumerable IScalarSubqueryRunner.ExecuteColumn(SelectStatement query, EvalScope outerScope) + { + if (_hoistedColumn.TryGetValue(query, out List? hoisted)) + return hoisted; + + if (TryHoist(query, outerScope, ColumnOf, out List? once)) + return _hoistedColumn[query] = once!; + + // This is the per-row cost of an IN, so it is what the gate measures — the membership comparison the caller + // then does over the returned values is negligible beside running the body. + long started = System.Diagnostics.Stopwatch.GetTimestamp(); + List values = ColumnOf(outerScope); + Gate(query).Charge(started); + return values; + + List ColumnOf(EvalScope? scope) + { + var (_, rows) = Execute(SubqueryPlan(query, outerScope), scope); + // Materialize: the outer scope is reused across the enclosing row loop, so don't defer. + return rows.Select(r => r.Length > 0 ? r[0] : null).ToList(); + } + } + + /// The optimised plan for a subquery, planned once and cached: index selection (index seeks, hash + /// joins) is applied just like a top-level query, and the outer query's aliases are passed so a correlated + /// predicate (inner.col = outer.col) becomes an index seek keyed off the outer row — a correlated + /// subquery runs per outer row, so an unoptimised plan re-run thousands of times is what made correlated + /// EXISTS/scalar pathological. + private PlanNode SubqueryPlan(SelectStatement query, EvalScope outerScope) + { + if (!_subqueryPlans.TryGetValue(query, out PlanNode? plan)) + { + var outerAliases = outerScope.VisibleAliases().ToHashSet(StringComparer.OrdinalIgnoreCase); + _subqueryPlans[query] = plan = + Planning.IndexSelection.Apply(QueryPlanner.PlanSelect(query), _database.Catalog, outerAliases); + } + return plan; + } + + private (IReadOnlyList Columns, IEnumerable Rows) Execute(PlanNode node, EvalScope? outer) + { + switch (node) + { + case SingleRowNode: + // FROM-less SELECT: one row, no columns — the projection above evaluates its constants once. + return ([], [new object?[0]]); + + case ScanNode scan when Schema.InformationSchema.IsInformationSchema(scan.Table): + { + // Virtual INFORMATION_SCHEMA. table: materialise rows from the catalog. + string alias = scan.Alias ?? scan.Table; + var columns = Schema.InformationSchema.ColumnsOf(scan.Table) + .Zip(Schema.InformationSchema.ColumnTypesOf(scan.Table), + (name, type) => new OutputColumn(alias, name, type)).ToList(); + return (columns, Schema.InformationSchema.Rows(scan.Table, _database.Catalog)); + } + + case ScanNode scan: + { + var table = _database.OpenTable(scan.Table); + string alias = scan.Alias ?? scan.Table; + var columns = table.Definition.Columns + .Select(c => new OutputColumn(alias, c.Name, Schema.JetClrTypeMap.ToClrType(c.Type))).ToList(); + return (columns, table.Rows()); + } + + case IndexSeekNode seek: + { + var table = _database.OpenTable(seek.Table); + string alias = seek.Alias ?? seek.Table; + var columns = table.Definition.Columns + .Select(c => new OutputColumn(alias, c.Name, Schema.JetClrTypeMap.ToClrType(c.Type))).ToList(); + + // Evaluate the key(s) in the outer scope (so an index-nested-loop join can key off the outer + // row); a single-table seek's key is a constant/parameter. + var evaluator = new ExpressionEvaluator(new EvalScope([], [], outer), this, parameters: _parameters, session: _session); + var keyValues = new object?[table.Definition.Columns.Count]; + for (int i = 0; i < seek.Keys.Count; i++) + keyValues[seek.Index.Columns[i].Column.Index] = evaluator.Evaluate(seek.Keys[i]); + + return (columns, table.SeekRows(seek.Index, keyValues)); + } + + case IndexRangeSeekNode range: + { + var table = _database.OpenTable(range.Table); + string alias = range.Alias ?? range.Table; + var columns = table.Definition.Columns + .Select(c => new OutputColumn(alias, c.Name, Schema.JetClrTypeMap.ToClrType(c.Type))).ToList(); + + var evaluator = new ExpressionEvaluator(new EvalScope([], [], outer), this, parameters: _parameters, session: _session); + int col = range.Index.Columns[0].Column.Index; + object?[]? Bound(Expression? e) + { + if (e is null) return null; + var v = new object?[table.Definition.Columns.Count]; + v[col] = evaluator.Evaluate(e); + return v; + } + return (columns, table.SeekRangeRows(range.Index, Bound(range.Low), Bound(range.High))); + } + + case DerivedTableNode derived: + { + var (inner, rows) = Execute(derived.Input, outer); + var columns = inner.Select(c => new OutputColumn(derived.Alias, c.Name, c.ClrType)).ToList(); + return (columns, rows); + } + + case FilterNode filter: + { + var (columns, rows) = Execute(filter.Input, outer); + return (columns, rows.Where(row => Eval(columns, row, outer).IsTrue(filter.Predicate))); + } + + case JoinNode join: + return ExecuteJoin(join, outer); + + case HashJoinNode hashJoin: + return ExecuteHashJoin(hashJoin, outer); + + case AggregateNode aggregate: + return ExecuteAggregate(aggregate, outer); + + case SortNode sort: + { + var (columns, rows) = Execute(sort.Input, outer); + // As in LimitNode: the count is literal/parameter/arithmetic, so an empty row scope suffices. + int? bound = sort.Limit is { } lim + ? Convert.ToInt32(Eval([], [], outer).Evaluate(lim), System.Globalization.CultureInfo.InvariantCulture) + : null; + return (columns, SortRows(sort.Keys, columns, outer, rows, bound)); + } + + case ProjectNode project: + { + var (columns, rows) = Execute(project.Input, outer); + + // The output schema is invariant across outer rows, so build (or reuse) it once. Rows are still + // produced fresh — only the per-item plan (which ran DeclaredType) is cached. + ProjectionSchema schema = ProjectionSchemaFor(project, columns); + var plan = schema.Plan; + + var projected = rows.Select(row => + { + var eval = Eval(columns, row, outer); + return plan.Select(p => p.InputIndex >= 0 ? row[p.InputIndex] : eval.Evaluate(p.Expr!)).ToArray(); + }); + + return (schema.Columns, projected); + } + + case SetOperationNode setOp: + { + // Column names come from the left (leading) query, per SQL. + var (columns, leftRows) = Execute(setOp.Left, outer); + var (_, rightRows) = Execute(setOp.Right, outer); + return (columns, ExecuteSetOp(setOp.Operator, leftRows, rightRows)); + } + + case LimitNode limit: + { + var (columns, rows) = Execute(limit.Input, outer); + // The count is literal/parameter/arithmetic (no column refs), so an empty row scope suffices. + object? countValue = new ExpressionEvaluator(new EvalScope([], [], outer), this, parameters: _parameters, session: _session) + .Evaluate(limit.Count); + int n = Convert.ToInt32(countValue, System.Globalization.CultureInfo.InvariantCulture); + + // Nothing can be returned, so don't read the input at all. This matters for the PERCENT branch + // below, which materialises its whole input before it can compute the take — so `TOP 0 PERCENT` + // otherwise buffers every row only to discard all of them, once per outer row when it sits inside + // a correlated subquery. (Plain `TOP 0` was already cheap: Take(0) never pulls from the source.) + if (n <= 0) + return (columns, []); + + if (!limit.Percent) + return (columns, rows.Take(n)); + + // TOP n PERCENT: ceil(rowCount × n / 100), verified vs ACE (10% of 9 → 1, 25% of 9 → 3, + // 1% of 830 → 9). Materialize to count; integer ceil-division avoids float rounding. + var buffered = rows.ToList(); + int take = (int)(((long)buffered.Count * n + 99) / 100); + return (columns, buffered.Take(take)); + } + + case DistinctNode distinct: + { + var (columns, rows) = Execute(distinct.Input, outer); + return (columns, Distinct(rows)); + } + + case DistinctRowNode distinctRow: + { + var (columns, rows) = Execute(distinctRow.Input, outer); + + // Which source tables (qualifiers) contribute output columns, and which exist at all. + var contributing = ContributingQualifiers(distinctRow.Projection, columns); + var all = columns.Select(c => c.Qualifier) + .Where(q => q is not null).Select(q => q!) + .ToHashSet(StringComparer.OrdinalIgnoreCase); + + // Access ignores DISTINCTROW when there is a single source table, when every table + // contributes output, or (our guard) when nothing does — leaving the rows untouched. + if (all.Count <= 1 || contributing.Count == 0 || all.All(contributing.Contains)) + return (columns, rows); + + // Otherwise dedupe on the full set of columns belonging to the contributing tables. + int[] keyIndexes = Enumerable.Range(0, columns.Count) + .Where(i => columns[i].Qualifier is { } q && contributing.Contains(q)) + .ToArray(); + return (columns, DistinctByIndexes(rows, keyIndexes)); + } + + default: + throw new NotSupportedException($"Plan node {node.GetType().Name} is not supported yet."); + } + } + + private static IEnumerable ExecuteSetOp(SetOperator op, IEnumerable left, IEnumerable right) + { + switch (op) + { + case SetOperator.UnionAll: + return left.Concat(right); + case SetOperator.Union: + return Distinct(left.Concat(right)); + case SetOperator.Intersect: + { + var keep = new HashSet(right.Select(r => new GroupKey(r))); + return Distinct(left).Where(r => keep.Contains(new GroupKey(r))); + } + case SetOperator.Except: + { + var remove = new HashSet(right.Select(r => new GroupKey(r))); + return Distinct(left).Where(r => !remove.Contains(new GroupKey(r))); + } + default: + throw new NotSupportedException($"Set operator {op} is not supported."); + } + } + + /// Yields rows with duplicates removed by structural (value-wise) equality. + private static IEnumerable Distinct(IEnumerable rows) + { + var seen = new HashSet(); + foreach (object?[] row in rows) + if (seen.Add(new GroupKey(row))) + yield return row; + } + + /// Yields the first row for each distinct combination of the values at + /// (the columns of the DISTINCTROW contributing tables), preserving order. + private static IEnumerable DistinctByIndexes(IEnumerable rows, int[] indexes) + { + var seen = new HashSet(); + foreach (object?[] row in rows) + { + var key = new object?[indexes.Length]; + for (int i = 0; i < indexes.Length; i++) key[i] = row[indexes[i]]; + if (seen.Add(new GroupKey(key))) + yield return row; + } + } + + /// Infers a stable declared CLR type from schema and expression shape. It deliberately returns + /// null for expressions whose result type depends on runtime coercion; the ADO layer can still fall back + /// to a non-null runtime value in those cases without publishing misleading metadata for empty results. + /// A ProjectNode's flattened output: the per-item plan (source input index, or an expression to + /// evaluate) and the resulting output columns. Structural — the same for every outer row. + private sealed record ProjectionSchema( + List<(OutputColumn Column, int InputIndex, Expression? Expr)> Plan, List Columns); + + /// Builds — or reuses — a ProjectNode's schema. Flattens the projection, expanding a qualified star + /// (Table.*) into the input columns of that source (passed through by index); every other item is an + /// evaluated expression whose declared type is derived once here. + private ProjectionSchema ProjectionSchemaFor(ProjectNode project, IReadOnlyList columns) + { + if (_projectionSchemas.TryGetValue(project, out ProjectionSchema? cached)) + return cached; + + var plan = new List<(OutputColumn Column, int InputIndex, Expression? Expr)>(); + foreach (SelectItem item in project.Projection) + { + if (item.Value is QualifiedStarExpression star) + { + for (int ci = 0; ci < columns.Count; ci++) + if (string.Equals(columns[ci].Qualifier, star.Table, StringComparison.OrdinalIgnoreCase)) + plan.Add((columns[ci], ci, null)); + } + else + { + string name = item.Alias ?? (item.Value is ColumnReference c ? c.Column : $"Expr{plan.Count + 1}"); + plan.Add((new OutputColumn(null, name, DeclaredType(item.Value, columns)), -1, item.Value)); + } + } + + var schema = new ProjectionSchema(plan, plan.Select(p => p.Column).ToList()); + _projectionSchemas[project] = schema; + return schema; + } + + private Type? DeclaredType(Expression expression, IReadOnlyList columns) + { + switch (expression) + { + case LiteralExpression { Value: { } value }: + return value.GetType(); + case LiteralExpression: + return null; + case ColumnReference column: + return DeclaredColumnType(column, columns) + ?? (column.Table is null && column.Column.Equals("Now", StringComparison.OrdinalIgnoreCase) + ? typeof(DateTime) : null); + case SystemVariableExpression variable: + return variable.Name.Equals("ROWCOUNT", StringComparison.OrdinalIgnoreCase) + ? typeof(int) : _session?.LastIdentity?.GetType(); + case ExistsExpression or InSubqueryExpression or InListExpression: + return typeof(bool); + case UnaryExpression unary: + return unary.Operator is UnaryOperator.Not or UnaryOperator.IsNull or UnaryOperator.IsNotNull + ? typeof(bool) : DeclaredType(unary.Operand, columns); + case BinaryExpression binary: + if (binary.Operator is BinaryOperator.Equal or BinaryOperator.NotEqual + or BinaryOperator.LessThan or BinaryOperator.LessThanOrEqual + or BinaryOperator.GreaterThan or BinaryOperator.GreaterThanOrEqual + or BinaryOperator.And or BinaryOperator.Or or BinaryOperator.Like or BinaryOperator.In) + return typeof(bool); + if (binary.Operator == BinaryOperator.Concat) + return typeof(string); + Type? left = DeclaredType(binary.Left, columns); + Type? right = DeclaredType(binary.Right, columns); + return DeclaredBinaryType(binary.Operator, left, right); + case FunctionCall function: + return DeclaredFunctionType(function, columns); + default: + return null; + } + } + + private static Type? DeclaredColumnType(ColumnReference reference, IReadOnlyList columns) + { + Type? result = null; + bool found = false; + foreach (OutputColumn column in columns) + { + if (!string.Equals(column.Name, reference.Column, StringComparison.OrdinalIgnoreCase) + || reference.Table is not null + && !string.Equals(column.Qualifier, reference.Table, StringComparison.OrdinalIgnoreCase)) + continue; + + if (found) return null; // execution will report the ambiguous reference + found = true; + result = column.ClrType; + } + return result; + } + + private Type? DeclaredFunctionType(FunctionCall function, IReadOnlyList columns) + { + string name = function.Name.TrimEnd('$').ToUpperInvariant(); + Type? argument = function.Arguments.Count > 0 ? DeclaredType(function.Arguments[0], columns) : null; + return name switch + { + "COUNT" => typeof(int), + "SUM" or "MIN" or "MAX" or "FIRST" or "LAST" => argument, + "AVG" => argument == typeof(decimal) ? typeof(decimal) : typeof(double), + "CBOOL" or "ISDATE" => typeof(bool), + "CBYTE" => typeof(byte), + "CINT" => typeof(short), + "CLNG" => typeof(int), + "CSNG" => typeof(float), + "CDBL" => typeof(double), + "CDEC" or "CCUR" => typeof(decimal), + "CSTR" or "FORMAT" or "LCASE" or "UCASE" or "TRIM" or "LTRIM" or "RTRIM" + or "LEFT" or "RIGHT" or "MID" or "REPLACE" or "STRING" or "SPACE" or "HEX" + or "OCT" or "WEEKDAYNAME" or "MONTHNAME" or "PARTITION" => typeof(string), + "LEN" or "INSTR" or "INSTRREV" or "ASC" or "ASCW" or "DATEPART" or "DATEDIFF" + or "YEAR" or "MONTH" or "DAY" or "HOUR" or "MINUTE" or "SECOND" or "WEEKDAY" => typeof(int), + "CDATE" or "NOW" or "DATE" or "TIME" or "DATEADD" or "DATESERIAL" or "TIMESERIAL" + or "DATEVALUE" or "TIMEVALUE" => typeof(DateTime), + "SQR" or "SIN" or "COS" or "TAN" or "ATN" or "LOG" or "EXP" or "RND" + or "PMT" or "FV" or "PV" or "NPER" or "IPMT" or "PPMT" or "DDB" or "RATE" => typeof(double), + "IIF" when function.Arguments.Count == 3 => SameType( + DeclaredType(function.Arguments[1], columns), DeclaredType(function.Arguments[2], columns)), + _ => null, + }; + } + + private static Type? SameType(Type? left, Type? right) => left == right ? left : null; + + private static Type? DeclaredBinaryType(BinaryOperator op, Type? left, Type? right) + { + if (left is null || right is null) + return null; + + if (op == BinaryOperator.Add && (left == typeof(string) || right == typeof(string))) + return typeof(string); + if (op == BinaryOperator.Power) + return typeof(double); + if (op == BinaryOperator.Divide) + return left == typeof(decimal) || right == typeof(decimal) ? typeof(decimal) : typeof(double); + if (op is BinaryOperator.Modulo or BinaryOperator.IntDivide + or BinaryOperator.BitAnd or BinaryOperator.BitOr or BinaryOperator.BitXor) + return IsInt64(left) || IsInt64(right) ? typeof(long) : typeof(int); + + if (op is not (BinaryOperator.Add or BinaryOperator.Subtract or BinaryOperator.Multiply)) + return null; + + // Keep this in lock-step with ExpressionEvaluator.Arithmetic. Date +/- number produces a date, + // date-date subtraction produces a day count, while date multiplication is numeric. + if (left == typeof(DateTime) || right == typeof(DateTime)) + { + if (op == BinaryOperator.Subtract && left == typeof(DateTime) && right == typeof(DateTime)) + return typeof(double); + return op is BinaryOperator.Add or BinaryOperator.Subtract ? typeof(DateTime) : typeof(double); + } + if (left == typeof(decimal) || right == typeof(decimal)) return typeof(decimal); + if (left == typeof(double) || right == typeof(double)) return typeof(double); + if (left == typeof(float) || right == typeof(float)) return typeof(float); + if (IsInt64(left) || IsInt64(right)) return typeof(long); + return typeof(int); + } + + private static bool IsInt64(Type type) => type == typeof(long) || type == typeof(ulong); + + /// The set of source-table qualifiers that supply the DISTINCTROW projection's output columns. + /// An unqualified column is resolved to its source table via the input's columns. + private static HashSet ContributingQualifiers( + IReadOnlyList projection, IReadOnlyList columns) + { + var result = new HashSet(StringComparer.OrdinalIgnoreCase); + foreach (SelectItem item in projection) + foreach ((string? qualifier, string column) in ColumnRefs(item.Value)) + { + if (qualifier is not null) { result.Add(qualifier); continue; } + OutputColumn match = columns.FirstOrDefault( + c => string.Equals(c.Name, column, StringComparison.OrdinalIgnoreCase)); + if (match.Qualifier is not null) result.Add(match.Qualifier); + } + return result; + } + + /// The column references an expression reads from the current row scope (a t.* counts as + /// its table). Subqueries are opaque — their column refs bind in the inner scope, not here. + private static IEnumerable<(string? Qualifier, string Column)> ColumnRefs(Expression expression) => expression switch + { + ColumnReference c => [(c.Table, c.Column)], + QualifiedStarExpression qs => [(qs.Table, "*")], + BinaryExpression b => ColumnRefs(b.Left).Concat(ColumnRefs(b.Right)), + UnaryExpression u => ColumnRefs(u.Operand), + FunctionCall f => f.Arguments.SelectMany(ColumnRefs), + InListExpression il => ColumnRefs(il.Value).Concat(il.Items.SelectMany(ColumnRefs)), + _ => [], + }; + + private (IReadOnlyList Columns, IEnumerable Rows) ExecuteJoin(JoinNode join, EvalScope? outer) + { + var (leftColumns, leftRows) = Execute(join.Left, outer); + Expression? on = join.On; // null for a CROSS join (cartesian product) + bool leftOuter = join.Kind == JoinKind.Left; + + // Index-nested-loop: the right side is a *correlated* index seek (keyed off the outer row). Re-execute + // it per left row — seeking the inner index — instead of materialising and scanning the whole inner + // table. IndexSelection produces this for a join whose ON is an equality on an indexed inner column. + if (join.Right is IndexSeekNode seek) + { + // Open the inner table, resolve its columns, and precompute the seek key-column positions ONCE — + // not per left row. Per left row we only rebuild the tiny key-value array and seek; this is the + // hot path of the join, so everything hoistable stays out of the loop. + var innerTable = _database.OpenTable(seek.Table); + string innerAlias = seek.Alias ?? seek.Table; + int innerWidth = innerTable.Definition.Columns.Count; + var seekColumns = innerTable.Definition.Columns + .Select(c => new OutputColumn(innerAlias, c.Name, Schema.JetClrTypeMap.ToClrType(c.Type))).ToList(); + var joinColumns = leftColumns.Concat(seekColumns).ToList(); + int[] keyCols = seek.Index.Columns.Select(c => c.Column.Index).ToArray(); + + IEnumerable SeekRows() + { + // Build the scopes + evaluators once and rebind them to each row (see EvalScope.Rebind): the + // key eval fires per outer row and the residual-ON eval per matched row, so allocating a fresh + // pair each time was the join's dominant per-row cost once the page cache made reads free. + var keyScope = new EvalScope(leftColumns, [], outer); + var keyEval = new ExpressionEvaluator(keyScope, this, parameters: _parameters, session: _session); + var onScope = new EvalScope(joinColumns, [], outer); + var onEval = new ExpressionEvaluator(onScope, this, parameters: _parameters, session: _session); + var keyValues = new object?[innerWidth]; // reused; the inner seek is fully drained each outer row + + foreach (object?[] left in leftRows) + { + keyScope.Rebind(left); + for (int i = 0; i < seek.Keys.Count; i++) + keyValues[keyCols[i]] = keyEval.Evaluate(seek.Keys[i]); + + bool matched = false; + foreach (object?[] right in innerTable.SeekRows(seek.Index, keyValues)) + { + object?[] combined = [.. left, .. right]; + if (on is null || onEval.Rebind(combined).IsTrue(on)) + { + matched = true; + yield return combined; + } + } + if (leftOuter && !matched) + yield return [.. left, .. new object?[innerWidth]]; + } + } + + return (joinColumns, SeekRows()); + } + + var (rightColumns, rightRowsEnum) = Execute(join.Right, outer); + + var columns = leftColumns.Concat(rightColumns).ToList(); + var rightRows = rightRowsEnum.ToList(); // re-iterated per left row + if (on is null && join.Kind != JoinKind.Cross) + throw new NotSupportedException("Joins require an ON condition."); + + IEnumerable Rows() + { + var onScope = new EvalScope(columns, [], outer); // one scope/evaluator, rebound per combined row + var onEval = new ExpressionEvaluator(onScope, this, parameters: _parameters, session: _session); + + foreach (object?[] left in leftRows) + { + bool matched = false; + foreach (object?[] right in rightRows) + { + object?[] combined = [.. left, .. right]; + if (on is null || onEval.Rebind(combined).IsTrue(on)) + { + matched = true; + yield return combined; + } + } + + if (leftOuter && !matched) + yield return [.. left, .. new object?[rightColumns.Count]]; + } + } + + return (columns, Rows()); + } + + private (IReadOnlyList Columns, IEnumerable Rows) ExecuteHashJoin(HashJoinNode join, EvalScope? outer) + { + var (leftColumns, leftRows) = Execute(join.Left, outer); + var (rightColumns, rightRowsEnum) = Execute(join.Right, outer); + var joinColumns = leftColumns.Concat(rightColumns).ToList(); + int leftWidth = leftColumns.Count, rightWidth = rightColumns.Count; + Expression on = join.On; + + // INNER/LEFT build the right side and probe with the left; RIGHT builds the left and probes with the + // right (so the preserved — outer — side is always the probe side). The emitted row is [left.., right..] + // regardless of which side was built. + bool buildRight = join.Kind != JoinKind.Right; + bool preserveProbe = join.Kind is JoinKind.Left or JoinKind.Right; // probe side is the outer/preserved side + var buildColumns = buildRight ? rightColumns : leftColumns; + var buildKeys = buildRight ? join.RightKeys : join.LeftKeys; + var buildRowsEnum = buildRight ? rightRowsEnum : leftRows; + var probeColumns = buildRight ? leftColumns : rightColumns; + var probeKeys = buildRight ? join.LeftKeys : join.RightKeys; + var probeRowsEnum = buildRight ? leftRows : rightRowsEnum; + + IEnumerable Rows() + { + // Build phase: hash the build side by its keys. A row with any null key can never satisfy an + // equi-join (SQL null = null is not true), so it is dropped from the table. + var table = new Dictionary>(HashKeyComparer.Instance); + var buildScope = new EvalScope(buildColumns, [], outer); + var buildEval = new ExpressionEvaluator(buildScope, this, parameters: _parameters, session: _session); + foreach (object?[] b in buildRowsEnum) + { + buildScope.Rebind(b); + var key = new object?[buildKeys.Count]; + if (!EvalKey(buildEval, buildKeys, key)) continue; // null key → unmatchable + if (!table.TryGetValue(key, out List? bucket)) + table[key] = bucket = []; + bucket.Add(b); + } + + // Probe phase: each probe row looks up its bucket; the full ON re-checks each candidate (buckets can + // collide, and ON may carry extra non-equi conjuncts). An outer join emits a null-padded row on no match. + var probeScope = new EvalScope(probeColumns, [], outer); + var probeEval = new ExpressionEvaluator(probeScope, this, parameters: _parameters, session: _session); + var onScope = new EvalScope(joinColumns, [], outer); + var onEval = new ExpressionEvaluator(onScope, this, parameters: _parameters, session: _session); + var probe = new object?[probeKeys.Count]; // reused; only used to look up, never stored + + foreach (object?[] p in probeRowsEnum) + { + probeScope.Rebind(p); + bool matched = false; + if (EvalKey(probeEval, probeKeys, probe) && table.TryGetValue(probe, out List? bucket)) + { + foreach (object?[] b in bucket) + { + object?[] left = buildRight ? p : b; + object?[] right = buildRight ? b : p; + object?[] combined = [.. left, .. right]; + if (onEval.Rebind(combined).IsTrue(on)) + { + matched = true; + yield return combined; + } + } + } + if (preserveProbe && !matched) + yield return buildRight + ? [.. p, .. new object?[rightWidth]] // probe is the left side; right is null + : [.. new object?[leftWidth], .. p]; // probe is the right side; left is null + } + } + + return (joinColumns, Rows()); + } + + /// Evaluates the key expressions into ; returns false (short-circuiting) if + /// any key is null, since a null key never participates in an equi-join match. + private static bool EvalKey(ExpressionEvaluator eval, IReadOnlyList keys, object?[] dest) + { + for (int i = 0; i < keys.Count; i++) + if ((dest[i] = eval.Evaluate(keys[i])) is null) + return false; + return true; + } + + /// Hash/equality over a composite join key that mirrors the evaluator's = within a type kind + /// (the planner only builds a hash join over same-kind key columns). Key elements are never null. + private sealed class HashKeyComparer : IEqualityComparer + { + public static readonly HashKeyComparer Instance = new(); + + // A null element equals only a null element. KeyEqual/KeyHash are documented for non-null keys, and for a + // plain `=` correlation no null ever reaches here (such rows are dropped from the build and short-circuit + // on probe). A null-safe correlation — EF's `a = b OR (a IS NULL AND b IS NULL)` — does hash nulls, so the + // tuple level owns that case rather than widening KeyEqual's contract. + public bool Equals(object?[]? a, object?[]? b) + { + if (a is null || b is null) return ReferenceEquals(a, b); + if (a.Length != b.Length) return false; + for (int i = 0; i < a.Length; i++) + { + if (a[i] is null || b[i] is null) + { + if (a[i] is not null || b[i] is not null) return false; + continue; + } + + if (!ExpressionEvaluator.KeyEqual(a[i]!, b[i]!)) return false; + } + return true; + } + + public int GetHashCode(object?[] a) + { + var h = new HashCode(); + foreach (object? v in a) h.Add(v is null ? 0 : ExpressionEvaluator.KeyHash(v)); + return h.ToHashCode(); + } + } + + /// + /// Sorts rows by their ORDER BY keys, evaluating each key ONCE PER ROW rather than inside the comparer. + /// + /// + /// + /// Evaluating in the comparer costs an expression evaluation — plus an and an + /// allocation — for both operands of every comparison, so a sort of + /// n rows paid O(n log n) evaluations instead of n. Measured: SELECT TOP 1 c.… FROM Customers c, + /// Orders o, Employees e ORDER BY c.CustomerID — 679,770 rows, ~13.4M comparisons, so ~27M + /// evaluations — took 31.2 s, against 6 ms for the identical query without the ORDER BY. + /// The cross join was never the problem; evaluating the key 40 times per row was. + /// + /// + /// already precomputed its per-group sort keys this way, so this also + /// settles a disagreement between the two paths, and they now share + /// . + /// + /// + /// Rows with equal keys must keep their input order: EF's reference and SQL Server both preserve it, + /// so an ORDER BY that doesn't fully disambiguate (e.g. ORDER BY CustomerID with several orders per + /// customer) has to as well. That used to come from Enumerable.OrderBy being a documented stable sort; + /// it now comes from carrying each row's input position and comparing it when the keys tie. That makes + /// the ordering total, so an unstable algorithm produces the stable answer anyway — which is what lets + /// discard rows early without the notion of "first among equals" drifting. + /// + /// + /// With a (an enclosing TOP n) only the n smallest rows can survive, + /// so the buffer is trimmed back to n whenever it reaches 2n and the input is never fully ordered. + /// Trimming in batches rather than per row amortises each sort over the n rows it throws away. + /// + /// + private List SortRows( + IReadOnlyList keys, + IReadOnlyList columns, + EvalScope? outer, + IEnumerable rows, + int? bound = null) + { + // Rows paired with their evaluated keys and their input position. The position makes the ordering TOTAL, + // which is what lets the bounded path below be stable without relying on a stable algorithm. + var decorated = new List<(object?[] Row, object?[] Keys, int Index)>(); + var index = 0; + foreach (object?[] row in rows) + { + ExpressionEvaluator eval = Eval(columns, row, outer); + var rowKeys = new object?[keys.Count]; + for (var i = 0; i < keys.Count; i++) + { + rowKeys[i] = eval.Evaluate(keys[i].Value); + } + + decorated.Add((row, rowKeys, index++)); + if (bound is { } max && decorated.Count > max * 2 && max > 0) + { + // Keep only the best `max` so far. Doing this in batches (rather than per row) amortises the sort + // over the rows it discards, so the list never grows past 2·max however large the input is. + Trim(decorated, keys, max); + } + } + + if (bound is { } limit && limit <= 0) + { + return []; + } + + decorated.Sort((a, b) => Compare(a, b)); + if (bound is { } take && decorated.Count > take) + { + decorated.RemoveRange(take, decorated.Count - take); + } + + return decorated.Select(x => x.Row).ToList(); + + int Compare((object?[] Row, object?[] Keys, int Index) a, (object?[] Row, object?[] Keys, int Index) b) + { + int c = CompareEvaluatedKeys(keys, a.Keys, b.Keys); + // Ties fall back to input order, reproducing a stable sort's result exactly. + return c != 0 ? c : a.Index.CompareTo(b.Index); + } + + static void Trim(List<(object?[] Row, object?[] Keys, int Index)> list, IReadOnlyList keys, int max) + { + list.Sort((a, b) => + { + int c = CompareEvaluatedKeys(keys, a.Keys, b.Keys); + return c != 0 ? c : a.Index.CompareTo(b.Index); + }); + list.RemoveRange(max, list.Count - max); + } + } + + /// Compares two rows' already-evaluated ORDER BY key values, honouring each key's direction. + private static int CompareEvaluatedKeys(IReadOnlyList keys, object?[] a, object?[] b) + { + for (var i = 0; i < keys.Count; i++) + { + int c = ExpressionEvaluator.CompareForSort(a[i], b[i]); + if (keys[i].Direction == SortDirection.Descending) + { + c = -c; + } + + if (c != 0) + { + return c; + } + } + + return 0; + } + + private ExpressionEvaluator Eval(IReadOnlyList columns, object?[] row, EvalScope? outer) => + new(new EvalScope(columns, row, outer), this, parameters: _parameters, session: _session); + + private (IReadOnlyList Columns, IEnumerable Rows) ExecuteAggregate(AggregateNode node, EvalScope? outer) + { + var (inColumns, inRowsEnum) = Execute(node.Input, outer); + var inRows = inRowsEnum.ToList(); + // Aggregates can appear in the projection, HAVING (e.g. HAVING COUNT(*) > 30) and ORDER BY + // (e.g. ORDER BY COUNT(*)); precompute all of them per group so each instance resolves. + var aggregateCalls = node.Projection.SelectMany(i => Aggregates(i.Value)) + .Concat(node.Having is { } h ? Aggregates(h) : []) + .Concat(node.OrderBy.SelectMany(k => Aggregates(k.Value))) + .ToList(); + + var outColumns = node.Projection + .Select((item, i) => new OutputColumn(null, + item.Alias ?? (item.Value is ColumnReference c ? c.Column : $"Expr{i + 1}"), + DeclaredType(item.Value, inColumns))) + .ToList(); + + // Each output row carries its ORDER BY key values AND its grouping-key values, evaluated in the same + // group scope as the projection, to sort the groups afterward: by ORDER BY if present, otherwise — + // matching Access, which returns GROUP BY results ascending by the grouping columns — by the group key + // (this also makes a TOP-1-over-a-GROUP-BY deterministic, as Access/SQL Server do). + var outRows = new List<(object?[] Row, object?[] SortKeys, object?[] GroupKeys)>(); + foreach (List group in GroupRows(inRows, node.GroupBy, inColumns, outer)) + { + var values = new Dictionary(ReferenceComparer.Instance); + foreach (FunctionCall call in aggregateCalls) + { + // An aggregate collected from a nested subquery may belong to that subquery (its argument + // references the subquery's own columns, not this group's) — it can't be computed here, so + // skip it; the subquery computes it itself. A genuine outer aggregate resolves fine. + try { values[call] = ComputeAggregate(call, group, inColumns, outer); } + catch (InvalidOperationException) { } + } + + // Within a group every key value is constant, so the first row resolves group keys; aggregate + // calls resolve from the precomputed map (threaded via the scope so correlated subqueries can + // reach an outer aggregate). An empty group only happens for an aggregate with no GROUP BY over + // zero rows (e.g. COUNT(*) -> 0); there are no key columns to resolve, so a null row suffices. + object?[] keyRow = group.Count > 0 ? group[0] : new object?[inColumns.Count]; + var eval = new ExpressionEvaluator(new EvalScope(inColumns, keyRow, outer, values), this, _parameters, _session); + + // HAVING filters whole groups after aggregation. + if (node.Having is not null && !eval.IsTrue(node.Having)) + continue; + + object?[] row = node.Projection.Select(item => eval.Evaluate(item.Value)).ToArray(); + object?[] sortKeys = node.OrderBy.Select(k => eval.Evaluate(k.Value)).ToArray(); + object?[] groupKeys = node.GroupBy.Select(k => eval.Evaluate(k)).ToArray(); + outRows.Add((row, sortKeys, groupKeys)); + } + + if (node.OrderBy.Count > 0) + // Stable (see SortNode): groups with equal ORDER BY keys keep their input (first-appearance) order. + outRows = outRows.OrderBy(x => x, Comparer<(object?[] Row, object?[] SortKeys, object?[] GroupKeys)>.Create( + (a, b) => CompareEvaluatedKeys(node.OrderBy, a.SortKeys, b.SortKeys))).ToList(); + else if (node.GroupBy.Count > 0) + // No explicit ORDER BY: Access orders GROUP BY output ascending by the grouping columns. + outRows.Sort((a, b) => + { + for (int i = 0; i < node.GroupBy.Count; i++) + { + int c = ExpressionEvaluator.CompareForSort(a.GroupKeys[i], b.GroupKeys[i]); + if (c != 0) return c; + } + return 0; + }); + + return (outColumns, outRows.Select(x => x.Row)); + } + + private List> GroupRows(List rows, IReadOnlyList keys, IReadOnlyList columns, EvalScope? outer) + { + if (keys.Count == 0) + return [rows]; // a single group over all rows (even if empty) + + var order = new List(); + var groups = new Dictionary>(); + foreach (object?[] row in rows) + { + var eval = Eval(columns, row, outer); + var key = new GroupKey(keys.Select(k => eval.Evaluate(k)).ToArray()); + if (!groups.TryGetValue(key, out var list)) + { + groups[key] = list = []; + order.Add(key); + } + list.Add(row); + } + return order.Select(k => groups[k]).ToList(); + } + + /// The distinct set of scalar values, using the same value-equality () as + /// SELECT DISTINCT / GROUP BY, so COUNT(DISTINCT col) dedupes exactly as ACE groups. Order preserved. + private static List DistinctValues(IEnumerable values) + { + var seen = new HashSet(); + var result = new List(); + foreach (object? v in values) + if (seen.Add(new GroupKey([v]))) + result.Add(v); + return result; + } + + private object? ComputeAggregate(FunctionCall call, List group, IReadOnlyList columns, EvalScope? outer) + { + string name = call.Name.ToUpperInvariant(); + Expression? arg = call.Arguments.Count > 0 ? call.Arguments[0] : null; + + // COUNT is an Access Long Integer (32-bit) — EF reads it with GetInt32, so return int, not long. + if (name == "COUNT") + { + if (arg is StarExpression or null) + return group.Count; // COUNT(*) counts rows; DISTINCT is meaningless (and EF never emits it) + var counted = group.Select(r => Eval(columns, r, outer).Evaluate(arg)).Where(v => v is not null); + return call.Distinct ? DistinctValues(counted).Count : counted.Count(); + } + + // FIRST/LAST return the argument's value from the first/last row of the group in scan order — NOT + // null-filtered (verified vs ACE: First over a leading NULL row returns NULL). + if (name == "FIRST") + return group.Count == 0 ? null : Eval(columns, group[0], outer).Evaluate(arg!); + if (name == "LAST") + return group.Count == 0 ? null : Eval(columns, group[^1], outer).Evaluate(arg!); + + var values = group.Select(r => Eval(columns, r, outer).Evaluate(arg!)).Where(v => v is not null).ToList(); + // SUM(DISTINCT)/AVG(DISTINCT)/… aggregate the distinct set of the argument's values. MIN/MAX are + // unaffected by dedup, but applying it uniformly keeps the one code path. + if (call.Distinct) + values = DistinctValues(values); + if (values.Count == 0) + return null; // SUM/AVG/MIN/MAX of nothing is NULL (COUNT already returned above) + + // Result types: SUM **preserves the input type** (int→int, long→long, decimal→decimal, …) so the EF + // provider (which emits a bare SUM and reads by the LINQ operand type) round-trips without a cast. + // AVG is Double unless the input is Currency/Decimal (matches Access and LINQ). MIN/MAX keep the + // column's own value and type. + var inv = System.Globalization.CultureInfo.InvariantCulture; + return name switch + { + "SUM" => SumPreservingType(values, inv), + "AVG" => values[0] is decimal ? values.Average(v => Convert.ToDecimal(v, inv)) : values.Average(v => Convert.ToDouble(v, inv)), + "MIN" => values.Aggregate((a, b) => ExpressionEvaluator.CompareForSort(a, b) <= 0 ? a : b), + "MAX" => values.Aggregate((a, b) => ExpressionEvaluator.CompareForSort(a, b) >= 0 ? a : b), + // Statistical aggregates. Sample forms (StDev/Var) divide by n-1 and are NULL for a single value; + // population forms (StDevP/VarP) divide by n. Verified vs ACE. + "VAR" or "STDEV" or "STDDEV" or "VARP" or "STDEVP" or "STDDEVP" => Statistic(name, values, inv), + _ => throw new NotSupportedException($"Aggregate {call.Name} is not supported."), + }; + } + + /// Access statistical aggregates over the non-null values (verified vs ACE). VAR/STDEV are the + /// **sample** forms (divide by n−1, NULL for a single value); VARP/STDEVP the **population** forms (divide by + /// n). STDEV/STDEVP are the square roots of VAR/VARP. + private static object? Statistic(string name, List values, System.Globalization.CultureInfo inv) + { + int n = values.Count; + double mean = values.Average(v => Convert.ToDouble(v, inv)); + double sumSq = values.Sum(v => { double d = Convert.ToDouble(v, inv) - mean; return d * d; }); + bool sample = !name.EndsWith("P", StringComparison.Ordinal); // VAR/STDEV sample; VARP/STDEVP population + if (sample && n < 2) return null; // sample variance of one value is undefined + double variance = sumSq / (sample ? n - 1 : n); + bool stdev = name.Contains("DEV", StringComparison.Ordinal); + return stdev ? Math.Sqrt(variance) : variance; + } + + /// SUM keeping the operand's numeric type (as LINQ's Sum overloads do): integer types + /// (byte/short/int) sum to Int32, Int64 to Int64, Single to Single, Double to Double, Decimal/Currency + /// to Decimal. + private static object SumPreservingType(List values, System.Globalization.CultureInfo inv) => + values[0] switch + { + decimal => values.Sum(v => Convert.ToDecimal(v, inv)), + double => values.Sum(v => Convert.ToDouble(v, inv)), + float => (float)values.Sum(v => Convert.ToDouble(v, inv)), + long or ulong => values.Sum(v => Convert.ToInt64(v, inv)), + _ => values.Sum(v => Convert.ToInt32(v, inv)), + }; + + private static IEnumerable Aggregates(Expression e) + { + switch (e) + { + case FunctionCall f when QueryPlanner.IsAggregate(f.Name): + yield return f; + break; + case FunctionCall f: + foreach (FunctionCall a in f.Arguments.SelectMany(Aggregates)) yield return a; + break; + case BinaryExpression b: + foreach (FunctionCall a in Aggregates(b.Left).Concat(Aggregates(b.Right))) yield return a; + break; + case UnaryExpression u: + foreach (FunctionCall a in Aggregates(u.Operand)) yield return a; + break; + // Descend into subqueries: an aggregate over an *outer* column may appear there (a correlated + // subquery). Its own aggregates come along too, but are skipped when they can't be computed in + // this group's scope. + case ScalarSubquery s: + foreach (FunctionCall a in AggregatesInSelect(s.Query)) yield return a; + break; + case ExistsExpression x: + foreach (FunctionCall a in AggregatesInSelect(x.Query)) yield return a; + break; + case InSubqueryExpression i: + foreach (FunctionCall a in Aggregates(i.Value).Concat(AggregatesInSelect(i.Query))) yield return a; + break; + case InListExpression i: + foreach (FunctionCall a in Aggregates(i.Value).Concat(i.Items.SelectMany(Aggregates))) yield return a; + break; + } + } + + /// All aggregate calls anywhere in a subquery's clauses (projection, WHERE, HAVING, GROUP BY, + /// ORDER BY) — used to surface outer aggregates that a correlated subquery references. + private static IEnumerable AggregatesInSelect(SelectStatement s) => + s.Projection.SelectMany(i => Aggregates(i.Value)) + .Concat(s.Where is { } w ? Aggregates(w) : []) + .Concat(s.Having is { } h ? Aggregates(h) : []) + .Concat(s.GroupBy.SelectMany(Aggregates)) + .Concat(s.OrderBy.SelectMany(o => Aggregates(o.Value))); + + /// Groups by structural equality of the key value tuple. + // DISTINCT / GROUP BY / INTERSECT / EXCEPT key. String keys use Access text semantics — case-insensitive + // and trailing-space-insensitive — so 'London' and 'LONDON ' group together as Access does. + private sealed class GroupKey(object?[] values) : IEquatable + { + private readonly object?[] _values = values; + + public bool Equals(GroupKey? other) => + other is not null && _values.Length == other._values.Length + && _values.Zip(other._values).All(p => KeyEquals(p.First, p.Second)); + + public override bool Equals(object? obj) => Equals(obj as GroupKey); + public override int GetHashCode() + { + var hash = new HashCode(); + foreach (object? v in _values) + hash.Add(v is string s ? StringComparer.InvariantCultureIgnoreCase.GetHashCode(s.TrimEnd(' ')) : v?.GetHashCode() ?? 0); + return hash.ToHashCode(); + } + + private static bool KeyEquals(object? a, object? b) => + a is string sa && b is string sb + ? string.Equals(sa.TrimEnd(' '), sb.TrimEnd(' '), StringComparison.InvariantCultureIgnoreCase) + : Equals(a, b); + } + + private sealed class ReferenceComparer : IEqualityComparer + { + public static readonly ReferenceComparer Instance = new(); + public bool Equals(FunctionCall? x, FunctionCall? y) => ReferenceEquals(x, y); + public int GetHashCode(FunctionCall obj) => System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj); + } +} diff --git a/src/LibRed/LibRed.Engine/Execution/ResultSet.cs b/src/LibRed/LibRed.Engine/Execution/ResultSet.cs new file mode 100644 index 00000000..d3711afd --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/ResultSet.cs @@ -0,0 +1,33 @@ +namespace LibRed.Engine.Execution; + +/// +/// The shape and rows produced by executing a query plan. Rows are arrays of boxed +/// values aligned to ; the ADO layer projects these into a +/// DbDataReader. +/// +public sealed class ResultSet +{ + public ResultSet( + IReadOnlyList columnNames, + IEnumerable rows, + IReadOnlyList? columnTypes = null) + { + if (columnTypes is not null && columnTypes.Count != columnNames.Count) + throw new ArgumentException("The number of column types must match the number of column names.", nameof(columnTypes)); + + ColumnNames = columnNames; + Rows = rows; + ColumnTypes = columnTypes ?? Enumerable.Repeat(typeof(object), columnNames.Count).ToArray(); + } + + public IReadOnlyList ColumnNames { get; } + + /// Declared CLR type for each output column. Unlike row-value inference, this remains + /// available for empty results and when the first runtime value is null. + public IReadOnlyList ColumnTypes { get; } + + /// Lazily-evaluated rows. Enumerating drives the underlying cursors. + public IEnumerable Rows { get; } + + public static ResultSet Empty { get; } = new([], [], []); +} diff --git a/src/LibRed/LibRed.Engine/Execution/ScalarAggregateSemiJoin.cs b/src/LibRed/LibRed.Engine/Execution/ScalarAggregateSemiJoin.cs new file mode 100644 index 00000000..185045d3 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/ScalarAggregateSemiJoin.cs @@ -0,0 +1,107 @@ +using LibRed.Catalog; +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Execution; + +/// +/// Turns a correlated scalar aggregate — … > (SELECT COUNT(*) FROM I WHERE I.K = o.K) — into one grouped +/// pass: run the body once grouped BY the correlation columns, giving one aggregate value per key, then look each +/// outer row's key up in that map instead of re-running the aggregate for it. +/// +/// +/// +/// The grouping is what makes it exact. The correlated body aggregates over the rows with K = this row's +/// key; grouping by K aggregates over precisely the same rows, one key at a time in a single pass. +/// +/// +/// The trap is the missing key. Absence from the map is NOT null: a bare aggregate over zero rows still returns a +/// row, so an outer row with no partner gets COUNT(*) = 0 — while SUM/MIN/MAX do give +/// null there. Rather than encode a table of per-aggregate empty values (which could drift from what the evaluator +/// actually computes), the miss value is obtained by asking the executor to compute this very aggregate call over +/// an empty group. It is the same code path the per-row form would have taken, so the two cannot disagree. +/// +/// +/// Only a lone aggregate call is accepted. A non-aggregate scalar body (SELECT TOP 1 x … ORDER BY …) has +/// first-row semantics, whose answer depends on an ordering this rewrite discards, and an expression built around +/// an aggregate would need its own empty-input evaluation; both decline. So does a GROUP BY body, which +/// yields several rows for the outer row to take the first of. +/// +/// +internal sealed class ScalarAggregateSemiJoin +{ + private readonly SelectStatement _keyQuery; + private readonly IReadOnlyList _outerKeys; + + /// Per correlation key, whether NULL matches NULL. See . + private readonly IReadOnlyList _nullSafe; + + /// The aggregate call itself, kept to compute the value a key absent from the map stands for. + private readonly FunctionCall _aggregate; + + private Dictionary? _values; + private object? _empty; + + private ScalarAggregateSemiJoin( + SelectStatement keyQuery, IReadOnlyList outerKeys, IReadOnlyList nullSafe, FunctionCall aggregate) + => (_keyQuery, _outerKeys, _nullSafe, _aggregate) = (keyQuery, outerKeys, nullSafe, aggregate); + + internal static ScalarAggregateSemiJoin? TryBuild( + SelectStatement subquery, + IReadOnlyList outerColumns, + HashSet outerAliases, + JetCatalog catalog) + { + // A lone aggregate call and nothing else — see the remarks. TOP is redundant over a single row but would + // have to be reasoned about, and DISTINCT/ORDER BY over one row are no-ops, so the strictest form is taken. + if (subquery is not + { + Top: null, GroupBy.Count: 0, Having: null, IsSelectStar: false, + Projection: [{ Value: FunctionCall { Name: { } name } call }], + } + || !Planning.QueryPlanner.IsAggregate(name) + || SubqueryCorrelation.TrySplit(subquery, outerColumns, outerAliases, catalog) is not { } split) + { + return null; + } + + var keyQuery = subquery with + { + // Correlation columns first so the aggregate lands at a known index; they must be grouping columns to + // be projectable alongside an aggregate at all. + Projection = [.. split.InnerKeys.Select(k => new SelectItem(k, null)), subquery.Projection[0]], + GroupBy = [.. split.InnerKeys], + Where = split.Residual, + OrderBy = [], + Distinct = false, + DistinctRow = false, + }; + + return new ScalarAggregateSemiJoin(keyQuery, split.OuterKeys, split.NullSafe, call); + } + + /// + /// The value the correlated body would have returned for this outer row. The grouped pass runs on first + /// use — once per statement, not per row. + /// + internal object? Evaluate(QueryExecutor executor, ExpressionEvaluator outerEval) + { + if (_values is null) + { + _values = executor.BuildGroupedAggregate(_keyQuery, _outerKeys.Count, _nullSafe); + _empty = executor.EmptyGroupAggregate(_aggregate); + } + + var probe = new object?[_outerKeys.Count]; + for (var i = 0; i < _outerKeys.Count; i++) + { + // Under a plain `=` a null correlation value equals no inner row, so the body aggregates over nothing. + // Under the null-safe form it matches the inner rows that are also null, so it must be looked up. + if ((probe[i] = outerEval.Evaluate(_outerKeys[i])) is null && !_nullSafe[i]) + { + return _empty; + } + } + + return _values.TryGetValue(probe, out object? value) ? value : _empty; + } +} diff --git a/src/LibRed/LibRed.Engine/Execution/StatementExecutor.cs b/src/LibRed/LibRed.Engine/Execution/StatementExecutor.cs new file mode 100644 index 00000000..469269de --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/StatementExecutor.cs @@ -0,0 +1,1052 @@ +using LibRed.Catalog; +using LibRed.Sql.Ast; +using LibRed.Sql.Parsing; +using LibRed.Storage; + +namespace LibRed.Engine.Execution; + +/// +/// Executes non-query statements (DDL/DML) against the storage layer: CREATE TABLE and INSERT. +/// Returns the number of affected rows (0 for DDL). +/// +internal sealed class StatementExecutor(JetDatabase database, IReadOnlyDictionary? parameters, ISqlParser parser, SessionState? session = null) +{ + private readonly JetDatabase _database = database; + private readonly ParameterBag _parameters = new(parameters); + private readonly ISqlParser _parser = parser; + private readonly SessionState? _session = session; + // For evaluating VALUES expressions (literals, parameters, and any scalar subqueries). + private readonly QueryExecutor _scalarRunner = new(database, parameters, session); + + public int Execute(SqlStatement statement) => statement switch + { + CreateTableStatement create => ExecuteCreateTable(create), + CreateIndexStatement createIndex => ExecuteCreateIndex(createIndex), + CreateViewStatement createView => ExecuteCreateView(createView), + CreateProcedureStatement createProc => ExecuteCreateProcedure(createProc), + CreateActionProcedureStatement actionProc => ExecuteCreateActionProcedure(actionProc), + AlterTableStatement alter => ExecuteAlterTable(alter), + DropIndexStatement dropIndex => DropIndex(dropIndex.Table, dropIndex.Index), + DropTableStatement dropTable => DropTable(dropTable.Table), + DropViewStatement dropView => DropQueryObject(dropView.View, "view"), + DropProcedureStatement dropProc => DropQueryObject(dropProc.Procedure, "procedure"), + InsertStatement insert => ExecuteInsert(insert), + UpdateStatement update => ExecuteUpdate(update), + DeleteStatement delete => ExecuteDelete(delete), + _ => throw new NotSupportedException($"{statement.GetType().Name} cannot be executed as a non-query."), + }; + + private int ExecuteCreateTable(CreateTableStatement statement) + { + var columns = statement.Columns.Select(c => AccessTypeMapper.ToColumnSpec(c, _database.Format.Version)).ToList(); + foreach (var (spec, def) in columns.Zip(statement.Columns)) + ValidateColumnDefault(spec, def.Default); + IReadOnlyList? primaryKey = statement.PrimaryKey.Count > 0 ? statement.PrimaryKey : null; + + var relationships = statement.ForeignKeys.Select(fk => new RelationshipSpec( + Name: fk.Name ?? DefaultRelationshipName(statement.Table, fk), + ReferencedTable: fk.ReferencedTable, + Columns: PairColumns(fk), + IsEnforced: true, + CascadeUpdate: fk.OnUpdate == ReferentialAction.Cascade, + CascadeDelete: fk.OnDelete == ReferentialAction.Cascade, + NoIndex: fk.NoIndex, + DeleteSetNull: fk.OnDelete == ReferentialAction.SetNull, + UpdateSetNull: fk.OnUpdate == ReferentialAction.SetNull)).ToList(); + + var uniques = statement.UniqueConstraints.Select((u, i) => new UniqueIndexSpec( + Name: u.Name ?? $"UQ_{statement.Table}_{i}", + Columns: u.Columns)).ToList(); + + var defaults = statement.Columns + .Where(c => c.Default is not null) + .Select(c => (c.Name, DefaultSql: c.Default!)) + .ToList(); + + var checks = statement.CheckConstraints + .Select((ck, i) => (Name: ck.Name ?? $"CK_{statement.Table}_{i}", ck.Expression)) + .ToList(); + + _database.CreateTable(statement.Table, columns, primaryKey, relationships, uniques, defaults, checks, + statement.PrimaryKeyName); + return 0; + } + + private static readonly System.Text.RegularExpressions.Regex BareWord = + new(@"^[A-Za-z_][A-Za-z_0-9]*$", System.Text.RegularExpressions.RegexOptions.Compiled); + + /// Parses a column DEFAULT into an expression. In Access an **unquoted single word** is a LITERAL + /// STRING (verified vs ACE: DEFAULT Unknown → "Unknown", DEFAULT K → "K" even when K is a + /// column) — it is never a column reference. The one exception is the niladic Now function. A + /// bracketed [X] stays a column reference (rejected in a default); a quoted literal, function call, or + /// compound expression parses normally. (A multi-word bare default is a syntax error at CREATE, matching ACE.) + private Expression ParseDefaultExpression(string text) + { + string t = text.Trim(); + return BareWord.IsMatch(t) && !t.Equals("Now", StringComparison.OrdinalIgnoreCase) + ? new LiteralExpression(t) + : _parser.ParseExpression(text); + } + + /// Rejects an insert that leaves a NOT NULL (Required) column null after defaults are applied — + /// matching Access, which raises "You must enter a value in the 'Table.Column' field." AutoNumber columns + /// are exempt: they are assigned during the write, not supplied here. + private static void EnforceRequired(string table, IReadOnlyList columns, object?[] values) + { + foreach (ColumnDef column in columns) + if (!column.IsNullable && !column.IsAutoNumber && values[column.Index] is null) + throw new InvalidOperationException($"You must enter a value in the '{table}.{column.Name}' field."); + } + + /// Rejects a row that violates any of the table's CHECK constraints — evaluated against the full + /// row. A CHECK is violated only when its expression is explicitly FALSE; NULL/unknown passes (SQL + /// three-valued CHECK semantics). The expression may reference the row's own columns and use (uncorrelated) + /// subqueries. Matches Access's validation-rule enforcement. + private void EnforceCheckConstraints(TableDef definition, object?[] values) + { + if (definition.CheckConstraints.Count == 0) return; + var schema = definition.Columns + .Select(c => new OutputColumn(definition.Name, c.Name, Schema.JetClrTypeMap.ToClrType(c.Type))).ToList(); + var evaluator = new ExpressionEvaluator(new EvalScope(schema, values, null), _scalarRunner, _parameters, _session); + foreach (var (name, expression) in definition.CheckConstraints) + if (evaluator.Evaluate(_parser.ParseExpression(expression)) is false) + throw new InvalidOperationException( + $"One or more values are prohibited by the validation rule '{name}' set for '{definition.Name}'. " + + "Enter a value that the expression for this field can accept."); + } + + /// Pairs each child FK column with its referenced parent column, in key order. + private static List<(string Column, string ReferencedColumn)> PairColumns(ForeignKeyConstraint fk) + { + if (fk.ReferencedColumns.Count != fk.Columns.Count) + throw new InvalidOperationException( + $"Foreign key on '{fk.ReferencedTable}' has {fk.Columns.Count} columns but references {fk.ReferencedColumns.Count}."); + return fk.Columns.Zip(fk.ReferencedColumns).ToList(); + } + + /// Access-style fallback name when the constraint is unnamed: "childparent". + private static string DefaultRelationshipName(string childTable, ForeignKeyConstraint fk) => + $"{fk.ReferencedTable}{childTable}"; + + /// + /// Rejects an insert whose foreign-key columns reference a non-existent parent row. NULL handling follows + /// ACE's **MATCH FULL** rule (verified vs ACE, and unlike SQL Server's MATCH SIMPLE): a composite FK is + /// skipped only when **every** column is null; a **partial** null (some null, some not) can never match a + /// parent key and is rejected. Only enforced relationships (grbit without "don't enforce") are checked. + /// + private void EnforceReferentialIntegrity(string childTable, Table table, object?[] values) + { + foreach (ForeignKey fk in _database.Catalog.ForeignKeysOf(childTable)) + { + if (!fk.IsEnforced) continue; + + var target = new object?[fk.Columns.Count]; + int nullCount = 0; + for (int i = 0; i < fk.Columns.Count; i++) + { + ColumnDef col = table.Definition.FindColumn(fk.Columns[i].Column) + ?? throw new InvalidOperationException($"Column '{fk.Columns[i].Column}' does not exist in '{childTable}'."); + object? v = values[col.Index]; + if (v is null) nullCount++; + else target[i] = v; + } + if (nullCount == fk.Columns.Count) continue; // all FK columns null → the FK is not applied to this row + + // MATCH FULL: a partial null can never reference a full parent key, so it's a violation — treated + // like a missing parent (ACE gives the same "a related record is required" error). + bool partialNull = nullCount > 0; + + // A **self-referencing** FK: a fully-specified row that points at its own key (the root of a + // required self-ref, e.g. Inverse1Id = Id) satisfies the FK even though it isn't on disk yet — the + // parent scan runs before the insert. Access allows this (EF's ComplexNavigations seed relies on it). + if (!partialNull + && string.Equals(fk.ReferencedTable, childTable, StringComparison.OrdinalIgnoreCase) + && RowSatisfiesOwnKey(fk, table, values, target)) + continue; + + if (partialNull || !ParentRowExists(fk, target)) + throw new InvalidOperationException( + $"INSERT into '{childTable}' violates foreign key '{fk.Name}': no matching row in '{fk.ReferencedTable}'."); + } + } + + /// For a self-referencing FK, whether the row's own referenced-column values equal the FK + /// target — i.e. the row points at itself (or at its own composite key), which satisfies the FK. + private static bool RowSatisfiesOwnKey(ForeignKey fk, Table table, object?[] values, object?[] target) + { + for (int i = 0; i < fk.Columns.Count; i++) + { + ColumnDef refCol = table.Definition.FindColumn(fk.Columns[i].ReferencedColumn) + ?? throw new InvalidOperationException($"Column '{fk.Columns[i].ReferencedColumn}' does not exist in '{table.Name}'."); + if (ExpressionEvaluator.CompareForSort(values[refCol.Index], target[i]) != 0) return false; + } + return true; + } + + /// Scans the parent table for a row whose referenced columns equal the child key values. + private bool ParentRowExists(ForeignKey fk, object?[] target) + { + Table parent = _database.OpenTable(fk.ReferencedTable); + int[] parentCols = fk.Columns.Select(c => + (parent.Definition.FindColumn(c.ReferencedColumn) + ?? throw new InvalidOperationException($"Column '{c.ReferencedColumn}' does not exist in '{fk.ReferencedTable}'.")).Index) + .ToArray(); + + foreach (object?[] row in parent.Rows()) + { + bool match = true; + for (int i = 0; i < parentCols.Length; i++) + if (ExpressionEvaluator.CompareForSort(row[parentCols[i]], target[i]) != 0) { match = false; break; } + if (match) return true; + } + return false; + } + + /// The enforced relationships for which is the referenced + /// (parent) side — i.e. those whose child rows a delete/key-update of a parent row must handle. + private IEnumerable ChildRelationshipsOf(string parentTable) => + _database.Catalog.Relationships.Where(r => + r.IsEnforced && string.Equals(r.ReferencedTable, parentTable, StringComparison.OrdinalIgnoreCase)); + + /// The referenced-column values from a parent row (the key children point at). + private object?[] ReferencedKey(ForeignKey fk, object?[] parentValues) + { + Table parent = _database.OpenTable(fk.ReferencedTable); + return fk.Columns.Select(c => parentValues[parent.Definition.FindColumn(c.ReferencedColumn)!.Index]).ToArray(); + } + + /// Child rows whose FK columns equal (a null FK column never matches). + private List<(RowId Id, object?[] Values)> FindChildRows(ForeignKey fk, object?[] key) + { + Table child = _database.OpenTable(fk.Table); + int[] childCols = fk.Columns.Select(c => child.Definition.FindColumn(c.Column)!.Index).ToArray(); + var result = new List<(RowId, object?[])>(); + foreach ((RowId id, object?[] values) in child.Rows().WithIds()) + { + bool match = true; + for (int i = 0; i < childCols.Length; i++) + if (values[childCols[i]] is null || ExpressionEvaluator.CompareForSort(values[childCols[i]], key[i]) != 0) + { match = false; break; } + if (match) result.Add((id, values)); + } + return result; + } + + /// + /// Deletes the given root rows and everything ON DELETE CASCADE reaches from them, applying SET NULL and + /// NO ACTION as it goes. An explicit worklist replaces the former recursion: each row is scheduled at most + /// once (a set makes cyclic and diamond-shaped FK graphs terminate and delete a shared + /// child exactly once), and rows are deleted in post-order — every cascade child before its parent — so no + /// row is removed while another still references it. Bounded by the number of rows in the database, so a + /// deep or cyclic chain can no longer overflow the call stack. + /// + private void CascadeDelete(Table rootTable, IEnumerable<(RowId Id, object?[] Values)> roots) + { + var scheduled = new HashSet<(string Table, RowId Id)>(); + var order = new List<(Table Table, RowId Id, object?[] Values)>(); + var stack = new Stack<(Table Table, RowId Id, object?[] Values, bool ChildrenExpanded)>(); + + foreach (var (id, values) in roots) + if (scheduled.Add((rootTable.Name, id))) + stack.Push((rootTable, id, values, false)); + + while (stack.Count > 0) + { + var (table, id, values, expanded) = stack.Pop(); + if (expanded) + { + order.Add((table, id, values)); // its children are all below it on the stack / already emitted + continue; + } + stack.Push((table, id, values, true)); // revisit to emit after its children + EnqueueCascadeChildren(table.Name, values, scheduled, stack); + } + + foreach (var (table, id, values) in order) + { + foreach (IndexDef index in table.Definition.Indexes.Where(i => i.RootPage > 0) + .GroupBy(i => i.RootPage).Select(g => g.First())) + table.RemoveIndexEntry(index, values, id); + table.Delete(id); + } + } + + /// Applies each enforced relationship's ON DELETE action to a parent row about to be deleted: + /// CASCADE schedules its children for deletion (unless already scheduled), SET NULL nulls their FK columns + /// now, and NO ACTION rejects the delete if any child exists (matching Access's "record cannot be deleted… + /// includes related records"). + private void EnqueueCascadeChildren(string parentTable, object?[] parentValues, + HashSet<(string Table, RowId Id)> scheduled, + Stack<(Table Table, RowId Id, object?[] Values, bool ChildrenExpanded)> stack) + { + foreach (ForeignKey fk in ChildRelationshipsOf(parentTable)) + { + object?[] key = ReferencedKey(fk, parentValues); + if (key.Any(k => k is null)) continue; // a null parent key is referenced by nobody + var children = FindChildRows(fk, key); + if (children.Count == 0) continue; + + if (fk.CascadeDelete) + { + Table child = _database.OpenTable(fk.Table); + foreach (var (cid, cvals) in children) + if (scheduled.Add((child.Name, cid))) + stack.Push((child, cid, cvals, false)); + } + else if (fk.DeleteSetNull) + foreach (var (cid, cvals) in children) SetChildKey(fk, cid, cvals, newKey: null); + else + throw new InvalidOperationException( + $"The record cannot be deleted or changed because table '{fk.Table}' includes related records."); + } + } + + /// Applies each enforced relationship's ON UPDATE action when a parent row's referenced key + /// changes: CASCADE rewrites the children's FK to the new key; NO ACTION rejects if any child exists. + /// (Jet has no ON UPDATE SET NULL.) + private void CascadeParentKeyUpdate(string parentTable, object?[] oldValues, object?[] newValues) + { + foreach (ForeignKey fk in ChildRelationshipsOf(parentTable)) + { + object?[] oldKey = ReferencedKey(fk, oldValues); + object?[] newKey = ReferencedKey(fk, newValues); + if (oldKey.Any(k => k is null) || KeyEquals(oldKey, newKey)) continue; + var children = FindChildRows(fk, oldKey); + if (children.Count == 0) continue; + + if (fk.CascadeUpdate) + foreach (var (cid, cvals) in children) SetChildKey(fk, cid, cvals, newKey); + else + throw new InvalidOperationException( + $"The record cannot be deleted or changed because table '{fk.Table}' includes related records."); + } + } + + private static bool KeyEquals(object?[] a, object?[] b) + { + for (int i = 0; i < a.Length; i++) + if (ExpressionEvaluator.CompareForSort(a[i], b[i]) != 0) return false; + return true; + } + + /// Rewrites a child row's FK columns to (or NULL for SET NULL), + /// maintaining any index over them. + private void SetChildKey(ForeignKey fk, RowId childId, object?[] childValues, object?[]? newKey) + { + Table child = _database.OpenTable(fk.Table); + var newValues = (object?[])childValues.Clone(); + var changed = new HashSet(); + for (int i = 0; i < fk.Columns.Count; i++) + { + int idx = child.Definition.FindColumn(fk.Columns[i].Column)!.Index; + object? nv = newKey?[i]; + if (!Equals(nv, childValues[idx])) { newValues[idx] = nv; changed.Add(idx); } + } + if (changed.Count == 0) return; + + child.Update(childId, newValues, changed); + foreach (IndexDef index in child.Definition.Indexes + .Where(i => i.RootPage > 0 && i.Columns.Any(c => changed.Contains(c.Column.Index))) + .GroupBy(i => i.RootPage).Select(g => g.First())) + child.MoveIndexEntry(index, childValues, newValues, childId); + } + + private int ExecuteCreateIndex(CreateIndexStatement statement) + { + _database.CreateIndex( + statement.Table, + statement.Name, + statement.Columns, + isUnique: statement.IsUnique, + isPrimary: statement.WithOption == IndexWithOption.Primary, + disallowNull: statement.WithOption == IndexWithOption.DisallowNull, + ignoreNulls: statement.WithOption == IndexWithOption.IgnoreNull); + return 0; + } + + private int ExecuteCreateView(CreateViewStatement statement) + { + _database.CreateView(statement.Name, BuildViewSpec(statement.Definition)); + return 0; + } + + private int ExecuteCreateProcedure(CreateProcedureStatement statement) + { + // A procedure is a parameterized stored query: a view spec plus a parameter row per declared + // parameter (name + Jet type code, resolved from the declared Access type name). + var parameters = statement.Parameters + .Select(p => new ViewParameterSpec( + p.Name, + (byte)AccessTypeMapper.ToColumnSpec( + new ColumnDefinition(p.Name, p.TypeName, null, null, false, false), _database.Format.Version).Type)) + .ToList(); + _database.CreateView(statement.Name, BuildViewSpec(statement.Definition) with { Parameters = parameters }); + return 0; + } + + private int ExecuteAlterTable(AlterTableStatement statement) => statement.Action switch + { + // ADD CONSTRAINT … PRIMARY KEY (cols): a primary key is a unique, primary index named after the + // constraint (verified vs ACE) — the same write path as CREATE INDEX … WITH PRIMARY. + AddPrimaryKeyAction pk => AddPrimaryKey(statement.Table, pk), + // ADD CONSTRAINT … UNIQUE (cols): a unique (non-primary) index named after the constraint — the same + // write path as CREATE INDEX / ADD PRIMARY KEY, minus the primary flag. + AddUniqueAction uq => AddUnique(statement.Table, uq), + // ADD CONSTRAINT … CHECK (expr): persist the check to the table's LvProp; the engine then enforces it. + AddCheckAction chk => AddCheck(statement.Table, chk), + // ADD CONSTRAINT … FOREIGN KEY: add a relationship to the existing table (child index + parent + // incoming block + MSysRelationships), the same write path as an inline CREATE TABLE foreign key. + AddForeignKeyAction fk => AddForeignKey(statement.Table, fk.ForeignKey), + // DROP CONSTRAINT name: drop a foreign key (relationship) by name. LibRed enforces FKs from + // MSysRelationships, so removing those rows disables it. + DropConstraintAction drop => DropConstraint(statement.Table, drop.Name), + // ADD COLUMN: append the column's descriptor/name to the TDEF (existing rows read it as NULL). + AddColumnAction add => AddColumn(statement.Table, add.Column), + // DROP COLUMN: a metadata-only TDEF edit (remove the descriptor + name, decrement ColumnCount). + DropColumnAction dropCol => DropColumn(statement.Table, dropCol.Field), + // ALTER COLUMN field type: change the column's declared type (a variable text/binary length change is a + // descriptor edit; other storage-type changes need a full column rewrite and throw NotSupported). + AlterColumnAction alterCol => AlterColumn(statement.Table, alterCol), + // ALTER COLUMN … SET/DROP DEFAULT: an LvProp edit only — no type change, and DROP DEFAULT keeps NOT NULL. + AlterColumnSetDefaultAction setDef => SetColumnDefault(statement.Table, setDef), + AlterColumnDropDefaultAction dropDef => DropColumnDefault(statement.Table, dropDef), + // RENAME { TO | COLUMN … TO | INDEX … TO }: provider DDL — Jet/ACE has no rename syntax at all (Access + // renames through DAO/ADOX), so EFCore.Jet emits this as pseudo-SQL and intercepts it out-of-engine. + // LibRed has no COM to delegate to, so it does the catalog/TDEF surgery itself. + RenameTableAction rt => RenameTable(statement.Table, rt.NewName), + RenameColumnAction rc => RenameColumn(statement.Table, rc.Field, rc.NewName), + RenameIndexAction ri => RenameIndex(statement.Table, ri.Index, ri.NewName), + // The remaining actions land in their own follow-up steps. + _ => throw new NotSupportedException( + $"ALTER TABLE {statement.Action.GetType().Name} is parsed but not executed yet."), + }; + + /// + /// RENAME TO — renames the table itself. Behaviour measured against ACE (see RenameFanOutProbeTest): + /// update the object's MSysObjects.Name and repoint MSysRelationships + /// (szObject/szReferencedObject), which stores tables by name — ACE rewrites those, preserves + /// the relationship's name and enforcement, and does not refuse the rename for a table in an enforced + /// relationship. Indexes need no action: they ride along with the table and keep their own names. + /// Stored queries/views are deliberately left dangling — ACE does not rewrite MSysQueries (Name + /// AutoCorrect is an Access application feature, not an engine one), so a view naming the old table breaks. + /// Match that rather than "fixing" it, or LibRed and Jet diverge on the same migration. + /// + private int RenameTable(string table, string newName) + { + if (!_database.RenameTable(table, newName)) + throw new InvalidOperationException($"ALTER TABLE '{table}' RENAME TO '{newName}': the table was not found."); + return 0; + } + + /// + /// RENAME COLUMN — renames a column. Behaviour measured against ACE (see RenameFanOutProbeTest). + /// The name lives in the TDEF's column descriptor and is variable-length, so a different-length name relays + /// out the TDEF: the rewrite must be faithful (every unparsed descriptor byte preserved, only the name + /// changed). Two fixups are required because ACE performs them: MSysRelationships + /// (szColumn/szReferencedColumn), and the per-column keys in the table's LvProp property + /// blob — a renamed column keeps its DEFAULT, so the name-keyed properties must be carried across. + /// Indexes need no fixup: they reference columns by id and keep their own names. Stored queries/views are + /// left dangling, as for a table rename — ACE does not rewrite MSysQueries. + /// + private int RenameColumn(string table, string field, string newName) + { + if (!_database.RenameColumn(table, field, newName)) + throw new InvalidOperationException( + $"ALTER TABLE '{table}' RENAME COLUMN '{field}' TO '{newName}': the column was not found."); + return 0; + } + + /// + /// RENAME INDEX — renames an index; the name lives in the TDEF's index block. If the index backs a foreign + /// key, check its coupling to the relationship name (szRelationship). Access cannot do this through + /// SQL or DAO/ADOX, so there is no ACE oracle for the operation itself — verify via the converged + /// end state (an index created as the new name should match one created then renamed). + /// + private int RenameIndex(string table, string index, string newName) => throw new NotSupportedException( + $"ALTER TABLE `{table}` RENAME INDEX `{index}` TO `{newName}` is parsed and routed but the TDEF rewrite is not implemented yet."); + + private int DropConstraint(string table, string name) + { + // In Jet/ACE a named constraint is a relationship (FK), an index (PK/unique — a UNIQUE constraint IS a + // unique index, so DROP CONSTRAINT and DROP INDEX are interchangeable), or a table-level CHECK. Try each + // in turn (all verified vs ACE); the index path itself rejects an FK-backing index, matching ACE. + if (_database.DropConstraint(table, name)) return 0; + if (_database.DropIndex(table, name)) return 0; + if (_database.DropCheckConstraint(table, name)) return 0; + throw new InvalidOperationException( + $"ALTER TABLE '{table}' DROP CONSTRAINT '{name}': no foreign key, primary key, unique, or check " + + "constraint of that name exists."); + } + + private int AddColumn(string table, ColumnDefinition column) + { + // NOT NULL and DEFAULT are written to the column's LvProp properties (Required / DefaultValue). + ColumnSpec spec = AccessTypeMapper.ToColumnSpec(column, _database.Format.Version); + ValidateColumnDefault(spec, column.Default); + if (!_database.AddColumn(table, spec, column.Default)) + throw new InvalidOperationException($"ALTER TABLE '{table}' ADD COLUMN '{column.Name}': the column already exists."); + return 0; + } + + /// Rejects a DEFAULT expression the storage engine can't accept — matching ACE's CREATE-time + /// validation. Currently: GenUniqueID() is only valid on a LONG (Int32) column; every other + /// type raises "Cannot place this validation expression on this field" (verified across BYTE/SHORT/SINGLE/ + /// DOUBLE/CURRENCY/DECIMAL/GUID/DATETIME/BIT/TEXT). + private static void ValidateColumnDefault(ColumnSpec spec, string? defaultSql) + { + if (defaultSql is not null + && defaultSql.Trim().Equals("GenUniqueID()", StringComparison.OrdinalIgnoreCase) + && spec.Type != JetDataType.Int32) + throw new InvalidOperationException( + $"Cannot place this validation expression on this field. GenUniqueID() is only valid as the " + + $"DEFAULT of a LONG (Int32) column (column '{spec.Name}')."); + } + + private int DropColumn(string table, string column) + { + if (!_database.DropColumn(table, column)) + throw new InvalidOperationException($"ALTER TABLE '{table}' DROP COLUMN '{column}': no such column."); + return 0; + } + + private int DropIndex(string table, string index) + { + if (!_database.DropIndex(table, index)) + throw new InvalidOperationException($"DROP INDEX '{index}' ON '{table}': no such index."); + return 0; + } + + private int DropTable(string table) + { + if (!_database.DropTable(table)) + throw new InvalidOperationException($"DROP TABLE '{table}': no such table."); + return 0; + } + + private int DropQueryObject(string name, string kind) + { + if (!_database.DropQueryObject(name)) + throw new InvalidOperationException($"DROP {kind.ToUpperInvariant()} '{name}': no such {kind}."); + return 0; + } + + private int AddPrimaryKey(string table, AddPrimaryKeyAction pk) + { + _database.CreateIndex( + table, + pk.Name ?? "PrimaryKey", + pk.Columns.Select(c => (c, false)).ToList(), // PK columns are ascending + isUnique: true, isPrimary: true); + return 0; + } + + private int AddUnique(string table, AddUniqueAction uq) + { + _database.CreateIndex( + table, + uq.Unique.Name ?? $"UQ_{table}", + uq.Unique.Columns.Select(c => (c, false)).ToList(), + isUnique: true, isPrimary: false); + return 0; + } + + private int AddCheck(string table, AddCheckAction chk) + { + _database.AddCheckConstraint(table, chk.Check.Name ?? $"CK_{table}", chk.Check.Expression); + return 0; + } + + private int AlterColumn(string table, AlterColumnAction alter) + { + var colDef = new ColumnDefinition(alter.Field, alter.TypeName, alter.Size, alter.Scale, NotNull: false, PrimaryKey: false); + _database.AlterColumn(table, alter.Field, AccessTypeMapper.ToColumnSpec(colDef, _database.Format.Version)); + // Apply DEFAULT before Required so the column's property map keeps ACE's order (DefaultValue, then Required). + if (alter.Default is not null) // ALTER COLUMN … DEFAULT: set the column's default after the type change + _database.SetColumnDefault(table, alter.Field, alter.Default); + if (alter.NotNull is bool required) // ALTER COLUMN … NOT NULL / NULL: set or clear the Required property + _database.SetColumnRequired(table, alter.Field, required); + return 0; + } + + private int SetColumnDefault(string table, AlterColumnSetDefaultAction set) + { + _database.SetColumnDefault(table, set.Field, set.Default); + return 0; + } + + private int DropColumnDefault(string table, AlterColumnDropDefaultAction drop) + { + _database.DropColumnDefault(table, drop.Field); + return 0; + } + + private int AddForeignKey(string table, ForeignKeyConstraint fk) + { + _database.AddForeignKey(table, new RelationshipSpec( + Name: fk.Name ?? DefaultRelationshipName(table, fk), + ReferencedTable: fk.ReferencedTable, + Columns: PairColumns(fk), + IsEnforced: true, + CascadeUpdate: fk.OnUpdate == ReferentialAction.Cascade, + CascadeDelete: fk.OnDelete == ReferentialAction.Cascade, + NoIndex: fk.NoIndex, + DeleteSetNull: fk.OnDelete == ReferentialAction.SetNull, + UpdateSetNull: fk.OnUpdate == ReferentialAction.SetNull)); + return 0; + } + + private int ExecuteCreateActionProcedure(CreateActionProcedureStatement statement) + { + ActionQuerySpec spec = statement.Kind == ProcedureActionKind.DataDefinition + ? new ActionQuerySpec(ActionQueryKind.DataDefinition, DdlSql: statement.DdlSql) + : new ActionQuerySpec(ActionQueryKind.Append, TargetTable: statement.TargetTable, + Values: statement.AppendColumns!.Select(c => new AppendColumnSpec(c.Column, c.ValueExpression)).ToList()); + _database.CreateActionQuery(statement.Name, spec); + return 0; + } + + private static ViewSpec BuildViewSpec(ViewDefinition d) => new( + d.Distinct, + d.Columns.Select(c => new ViewColumnSpec(c.Expression, c.Alias)).ToList(), + d.Tables.Select(t => new ViewTableSpec(t.Table, t.Alias, t.SubquerySql)).ToList(), + d.Joins.Select(j => new ViewJoinSpec( + j.Kind switch { ViewJoinKind.Left => ViewJoinType.Left, ViewJoinKind.Right => ViewJoinType.Right, _ => ViewJoinType.Inner }, + j.Condition, j.LeftAlias, j.RightAlias)).ToList(), + d.Where, + d.GroupBy, + Parameters: null, + OrderBy: d.OrderBy.Select(o => new ViewOrderBySpec(o.Expression, o.Descending)).ToList(), + Top: d.Top); + + private int ExecuteInsert(InsertStatement statement) + { + Table table = _database.OpenTable(statement.Table); + var columns = table.Definition.Columns; + + // Target columns: the explicit list; DEFAULT VALUES provides none (every column takes its default); + // otherwise a bare VALUES (…) targets all columns in order. + IReadOnlyList targets = statement.Columns.Count > 0 + ? statement.Columns + : statement.DefaultValues + ? [] + : columns.Select(c => c.Name).ToList(); + + var evaluator = new ExpressionEvaluator( + new EvalScope([], [], null), _scalarRunner, parameters: _parameters); + + // Columns with a DEFAULT value (parsed once): applied to any row that omits the column, matching + // Access — EF Core relies on the store default rather than supplying the value itself. + // AutoNumber columns are excluded: their value is assigned by the row inserter (sequential counter, or + // a random Int32 for a GenUniqueID() "Random" AutoNumber), not by evaluating the DefaultValue — and + // GenUniqueID() is not a callable expression, so parsing it as a default would fail. + var defaultColumns = columns + .Where(c => c.DefaultValue is not null && !c.IsAutoNumber) + .Select(c => (c.Index, Expression: ParseDefaultExpression(c.DefaultValue!))) + .ToList(); + + // Jet allows at most one AutoNumber column; its post-insert value is @@IDENTITY. + ColumnDef? autoNumber = columns.FirstOrDefault(c => c.IsAutoNumber); + + int affected = 0; + object? lastIdentity = null; + foreach (IReadOnlyList rowExprs in statement.Rows) + { + if (rowExprs.Count != targets.Count) + throw new InvalidOperationException( + $"INSERT has {rowExprs.Count} values but {targets.Count} target columns."); + + var values = new object?[columns.Count]; + var provided = new HashSet(); + for (int i = 0; i < targets.Count; i++) + { + ColumnDef column = table.Definition.FindColumn(targets[i]) + ?? throw new InvalidOperationException($"Column '{targets[i]}' does not exist in '{statement.Table}'."); + values[column.Index] = evaluator.Evaluate(rowExprs[i]); + provided.Add(column.Index); + } + + // Fill defaults for columns the insert didn't mention (an explicit NULL is left as NULL). + foreach (var (index, expression) in defaultColumns) + if (!provided.Contains(index)) + values[index] = evaluator.Evaluate(expression); + + EnforceRequired(statement.Table, columns, values); + EnforceReferentialIntegrity(statement.Table, table, values); + EnforceCheckConstraints(table.Definition, values); + table.Insert(values); // fills values[autoNumber.Index] with the generated id (array mutated in place) + if (autoNumber is not null) + lastIdentity = values[autoNumber.Index]; + affected++; + } + + // Publish @@ROWCOUNT (rows this insert affected) and @@IDENTITY (the last AutoNumber generated) so a + // following SELECT in the same batch can read the store-generated key back — the shape EF Core emits. + // @@IDENTITY is connection-scoped and only overwritten by an insert that actually generates an id, + // so an insert into a keyless table leaves the previous value intact (matching Access). + if (_session is not null) + { + _session.RowCount = affected; + if (autoNumber is not null) + _session.LastIdentity = lastIdentity; + } + return affected; + } + + /// A table participating in an UPDATE/DELETE source: its alias, columns (alias-qualified, for the + /// combined evaluation scope), and its rows. A physical table exposes (rows have real + /// s and can be a SET/DELETE target); a derived table (a subquery in the source) has + /// null and its already-materialised (never a target). + private sealed record SourceTable(string Alias, Table? Table, IReadOnlyList Columns, + IReadOnlyList? DerivedRows); + + /// Flattens the UPDATE/DELETE table source into its tables in order, each paired with the join that + /// introduced it: its and ON condition (the first/base table is Inner with a null ON). + /// INNER/CROSS/LEFT joins over named tables are supported — the left-deep form EF and Access emit. + private (List Tables, List Kinds, List Ons) ResolveSource(TableReference from) + { + var tables = new List(); + var kinds = new List(); + var ons = new List(); + + void EmitTable(NamedTable n, JoinKind kind, Expression? on) + { + Table t = _database.OpenTable(n.Name); + string alias = n.Alias ?? n.Name; + tables.Add(new SourceTable(alias, t, t.Definition.Columns + .Select(c => new OutputColumn(alias, c.Name, Schema.JetClrTypeMap.ToClrType(c.Type))).ToList(), null)); + kinds.Add(kind); + ons.Add(on); + } + + void EmitDerived(SubqueryTable sq, JoinKind kind, Expression? on) + { + string alias = sq.Alias ?? throw new NotSupportedException("A derived table in an UPDATE/DELETE source requires an alias."); + var (columns, rows) = ExecuteDerivedSource(sq.Query, alias); + tables.Add(new SourceTable(alias, null, columns, rows)); + kinds.Add(kind); + ons.Add(on); + } + + void Walk(TableReference r, JoinKind kind, Expression? on) + { + switch (r) + { + case NamedTable n: + EmitTable(n, kind, on); + break; + case SubqueryTable sq: + EmitDerived(sq, kind, on); + break; + // Left-deep: the left subtree carries its own joins (its base is the source's first table, Inner + // with no ON); the right side is the newly joined named/derived table, tagged with this join. + case JoinTable { Kind: JoinKind.Inner or JoinKind.Cross or JoinKind.Left, Right: NamedTable or SubqueryTable } j: + Walk(j.Left, JoinKind.Inner, null); + Walk(j.Right, j.Kind, j.On); + break; + // RIGHT JOIN keeps the right side: model it as the right side preserved (the base) with the left + // side LEFT-joined onto it. The SET/DELETE target is usually that left side — which then becomes + // the nullable side, so a right row with no match yields a null target that the WHERE drops. + case JoinTable { Kind: JoinKind.Right, Left: NamedTable or SubqueryTable } j: + Walk(j.Right, JoinKind.Inner, null); + Walk(j.Left, JoinKind.Left, j.On); + break; + default: + throw new NotSupportedException($"UPDATE/DELETE over a {r.GetType().Name} source is not supported yet."); + } + } + + Walk(from, JoinKind.Inner, null); + return (tables, kinds, ons); + } + + /// Runs a derived-table subquery (uncorrelated — a FROM/JOIN source) through the full query + /// pipeline (index selection included) and materialises its rows, with columns qualified by the derived + /// table's alias for the combined evaluation scope. + private (List Columns, List Rows) ExecuteDerivedSource(SqlStatement query, string alias) + { + if (query is not SelectStatement select) + throw new NotSupportedException("Only a SELECT is supported as a derived table in an UPDATE/DELETE source."); + var plan = Planning.IndexSelection.Apply(Planning.QueryPlanner.PlanSelect(select), _database.Catalog); + ResultSet result = _scalarRunner.ExecuteQuery(plan); + var columns = result.ColumnNames.Select((name, i) => new OutputColumn(alias, name, result.ColumnTypes[i])).ToList(); + return (columns, result.Rows.ToList()); + } + + /// + /// Materialises the join rows of the source: each is the per-table (row id + shared value array), + /// in table order, that satisfies all ON conditions and the WHERE. A physical row's value array is shared + /// across every join row it appears in (cached by alias+row id), so a SET that references the row's own + /// value accumulates across matches — matching Access (e.g. a "one"-side counter incremented per match). + /// + private List<(RowId Id, object?[] Values)[]> JoinRows( + List tables, List kinds, List ons, Expression? where, IReadOnlyList columns) + { + // A physical row's value array is shared across every join row it appears in (see the method summary). + var cache = new Dictionary<(string, RowId), object?[]>(); + object?[] Shared(string alias, RowId id, object?[] values) + { + var key = (alias, id); + if (!cache.TryGetValue(key, out object?[]? s)) cache[key] = s = values; + return s; + } + + // Access's multi-table UPDATE/DELETE joins are equi-joins on keys; for each table after the first, if its + // ON equates one of its single-column-indexed columns to a column of an earlier table, seek it by that + // key instead of scanning it in full — turning an O(∏ rows) cartesian product into an index-nested-loop. + var seekPlan = new (IndexDef Index, Expression Key)?[tables.Count]; + for (int i = 1; i < tables.Count; i++) + seekPlan[i] = SeekPlanFor(i, tables, ons[i]); + + // Precompute the accumulated columns visible when seeking/evaluating an ON at each depth. + var colsUpTo = new List[tables.Count + 1]; + colsUpTo[0] = []; + for (int i = 0; i < tables.Count; i++) + colsUpTo[i + 1] = [.. colsUpTo[i], .. tables[i].Columns]; + + var result = new List<(RowId, object?[])[]>(); + var acc = new (RowId, object?[])[tables.Count]; + + bool Holds(Expression? predicate, int depth) => + predicate is null || new ExpressionEvaluator( + new EvalScope(colsUpTo[depth], Flatten(acc, depth), null), _scalarRunner, _parameters, _session) + .Evaluate(predicate) is true; + + void Recurse(int i) + { + if (i == tables.Count) + { + if (Holds(where, tables.Count)) + result.Add(((RowId, object?[])[])acc.Clone()); + return; + } + + // A derived table's rows are already materialised and have no RowId (never a target). A physical + // table is seeked when its ON allows (index-nested-loop), else scanned. + IEnumerable<(RowId Id, object?[] Values)> rows; + if (tables[i].Table is null) + { + rows = tables[i].DerivedRows!.Select(v => (default(RowId), v)); + } + else if (seekPlan[i] is { } p) + { + var keyEval = new ExpressionEvaluator(new EvalScope(colsUpTo[i], Flatten(acc, i), null), _scalarRunner, _parameters, _session); + var keyValues = new object?[tables[i].Table!.Definition.Columns.Count]; + keyValues[p.Index.Columns[0].Column.Index] = keyEval.Evaluate(p.Key); + rows = tables[i].Table!.SeekRowsWithIds(p.Index, keyValues); + } + else + { + rows = tables[i].Table!.Rows().WithIds(); + } + + // The ON (also the seek's residual re-check — index keys can over-return) gates each candidate. + bool matched = false; + foreach ((RowId id, object?[] values) in rows) + { + // Share a physical row's array across the combos it appears in (counter-accumulation semantics); + // a derived row has no identity to share on, so use it directly. + acc[i] = tables[i].Table is null ? (id, values) : (id, Shared(tables[i].Alias, id, values)); + if (Holds(ons[i], i + 1)) + { + matched = true; + Recurse(i + 1); + } + } + + // LEFT join: an outer row with no matching inner row is still emitted, with the inner side all-null. + if (kinds[i] == JoinKind.Left && !matched) + { + acc[i] = (default, new object?[tables[i].Columns.Count]); + Recurse(i + 1); + } + } + + Recurse(0); + return result; + } + + /// Concatenates the value arrays of the first accumulated join rows. + private static object?[] Flatten((RowId, object?[])[] acc, int count) + { + var flat = new List(); + for (int i = 0; i < count; i++) flat.AddRange(acc[i].Item2); + return [.. flat]; + } + + /// If table 's own join has an equality between one of its + /// single-column-indexed columns and an expression over the earlier tables, returns that index and key + /// expression (to seek it per outer row); else null (scan it). + private static (IndexDef Index, Expression Key)? SeekPlanFor(int i, List tables, Expression? on) + { + if (on is null || tables[i].Table is null) return null; // a derived table has no index to seek + TableDef def = tables[i].Table!.Definition; + string alias = tables[i].Alias; + HashSet earlier = tables.Take(i).Select(t => t.Alias).ToHashSet(StringComparer.OrdinalIgnoreCase); + + foreach (Expression conjunct in Conjuncts(on)) + { + if (conjunct is not BinaryExpression { Operator: BinaryOperator.Equal } eq) + continue; + if (MatchSeek(eq.Left, eq.Right, alias, def, earlier) is { } a) return a; + if (MatchSeek(eq.Right, eq.Left, alias, def, earlier) is { } b) return b; + } + return null; + } + + private static IEnumerable Conjuncts(Expression e) => + e is BinaryExpression { Operator: BinaryOperator.And } b + ? Conjuncts(b.Left).Concat(Conjuncts(b.Right)) + : [e]; + + private static (IndexDef Index, Expression Key)? MatchSeek( + Expression colSide, Expression keySide, string alias, TableDef def, HashSet earlier) + { + if (colSide is not ColumnReference c + || (c.Table is { } t && !string.Equals(t, alias, StringComparison.OrdinalIgnoreCase)) + || !def.Columns.Any(cd => string.Equals(cd.Name, c.Column, StringComparison.OrdinalIgnoreCase))) + return null; + + IndexDef? index = def.Indexes.FirstOrDefault(ix => ix.RootPage > 0 && ix.Columns.Count == 1 + && string.Equals(ix.Columns[0].Column.Name, c.Column, StringComparison.OrdinalIgnoreCase)); + return index is not null && ReferencesOnly(keySide, earlier) ? (index, keySide) : null; + } + + private static bool ReferencesOnly(Expression e, HashSet aliases) => e switch + { + ColumnReference { Table: { } t } => aliases.Contains(t), + ColumnReference => false, // unqualified — can't attribute it to an earlier table safely + LiteralExpression or ParameterExpression or SystemVariableExpression => true, + BinaryExpression b => ReferencesOnly(b.Left, aliases) && ReferencesOnly(b.Right, aliases), + UnaryExpression u => ReferencesOnly(u.Operand, aliases), + FunctionCall f => f.Arguments.All(a => ReferencesOnly(a, aliases)), + _ => false, + }; + + /// The source-table index a SET assignment (or a delete target) applies to: the alias/table-name + /// qualifier if given, else the single table (ambiguous when there are several). + private static int TargetIndex(List tables, string? qualifier, string what) + { + if (qualifier is null) + return tables.Count == 1 ? 0 + : throw new InvalidOperationException($"{what} must be table-qualified when the statement joins several tables."); + int i = tables.FindIndex(t => + string.Equals(t.Alias, qualifier, StringComparison.OrdinalIgnoreCase) || + string.Equals(t.Table?.Name, qualifier, StringComparison.OrdinalIgnoreCase)); + return i >= 0 ? i : throw new InvalidOperationException($"{what} '{qualifier}' is not one of the statement's tables."); + } + + /// The physical a SET/DELETE targets — a derived table (subquery source) has no + /// rows to write back, so targeting one is rejected. + private static Table TargetTable(List tables, int ti) => + tables[ti].Table ?? throw new NotSupportedException($"Cannot UPDATE/DELETE the derived table '{tables[ti].Alias}'."); + + /// + /// Executes UPDATE tableexpression SET col = expr, … [WHERE criteria]. The table expression may be a join, + /// and each SET target may name a specific joined table (Access's multi-table update). Each SET expression + /// may reference the current values; the WHERE is an ordinary expression (correlated EXISTS included). + /// Rows are rewritten in place (row id preserved). @@ROWCOUNT = matched join rows. + /// + private int ExecuteUpdate(UpdateStatement statement) + { + var (tables, kinds, ons) = ResolveSource(statement.From); + var columns = tables.SelectMany(t => t.Columns).ToList(); + List<(RowId Id, object?[] Values)[]> joinRows = JoinRows(tables, kinds, ons, statement.Where, columns); + + // Resolve each assignment to its (table index, column) once. + var targets = statement.Assignments.Select(a => + { + int ti = TargetIndex(tables, a.Table, "UPDATE SET column"); + Table tt = TargetTable(tables, ti); + ColumnDef col = tt.Definition.FindColumn(a.Column) + ?? throw new InvalidOperationException($"Column '{a.Column}' does not exist in '{tt.Name}'."); + return (TableIndex: ti, Column: col, a.Value); + }).ToList(); + + // Apply SETs to the shared value arrays; snapshot each touched row's original bytes on first touch. + var dirty = new Dictionary<(string, RowId), (Table Table, RowId Id, object?[] Original, object?[] Values)>(); + foreach (var combo in joinRows) + { + foreach ((int ti, ColumnDef col, Expression valueExpr) in targets) + { + object?[] shared = combo[ti].Values; + var key = (tables[ti].Alias, combo[ti].Id); + if (!dirty.ContainsKey(key)) dirty[key] = (TargetTable(tables, ti), combo[ti].Id, (object?[])shared.Clone(), shared); + + object?[] flat = combo.SelectMany(c => c.Item2).ToArray(); + var eval = new ExpressionEvaluator(new EvalScope(columns, flat, null), _scalarRunner, _parameters, _session); + shared[col.Index] = eval.Evaluate(valueExpr); + } + } + + foreach (var (table, id, original, values) in dirty.Values) + { + var changed = new HashSet(); + for (int i = 0; i < values.Length; i++) + if (!Equals(original[i], values[i])) changed.Add(i); + if (changed.Count == 0) continue; // unchanged after all + + // UPDATE must preserve the same Required/NOT NULL invariant as INSERT. Check the complete + // post-assignment row before any referential action, row rewrite, or index mutation occurs. + EnforceRequired(table.Name, table.Definition.Columns, values); + + // Child side: a changed FK column must still reference an existing parent (like an insert). + if (_database.Catalog.ForeignKeysOf(table.Name).Any(f => f.IsEnforced && + f.Columns.Any(c => changed.Contains(table.Definition.FindColumn(c.Column)!.Index)))) + EnforceReferentialIntegrity(table.Name, table, values); + + // A changed UNIQUE/PRIMARY key must not collide with another row (null keys are distinct — a + // unique index permits multiple nulls, so they're skipped, matching the insert rule). + foreach (IndexDef index in table.Definition.Indexes + .Where(i => i.IsUnique && i.RootPage > 0 && i.Columns.Any(c => changed.Contains(c.Column.Index))) + .GroupBy(i => i.RootPage).Select(g => g.First())) + if (!index.Columns.Any(c => values[c.Column.Index] is null) && table.HasDuplicateKey(index, values, id)) + throw new InvalidOperationException( + $"Cannot update '{table.Name}': a row with the same " + + $"{(index.IsPrimaryKey ? "primary key" : "unique key")} already exists (index '{index.Name}')."); + + // The updated row must still satisfy every CHECK constraint (evaluated against the full new row). + EnforceCheckConstraints(table.Definition, values); + + // Parent side: a changed referenced-key column triggers each relationship's ON UPDATE action + // (CASCADE rewrites children, NO ACTION rejects if children exist). + CascadeParentKeyUpdate(table.Name, original, values); + + table.Update(id, values, changed); + foreach (IndexDef index in table.Definition.Indexes + .Where(i => i.RootPage > 0 && i.Columns.Any(c => changed.Contains(c.Column.Index))) + .GroupBy(i => i.RootPage).Select(g => g.First())) + table.MoveIndexEntry(index, original, values, id); + } + + int affected = joinRows.Count; + if (_session is not null) _session.RowCount = affected; + return affected; + } + + /// + /// Executes DELETE [target.*] FROM tableexpression [WHERE criteria]. The table expression may be a join; + /// target.* selects which joined table's rows to delete (defaults to the single table). Each + /// matched target row's index entries are removed and the row is soft-deleted (row id kept, TDEF row + /// count decremented). @@ROWCOUNT = distinct rows deleted. + /// + private int ExecuteDelete(DeleteStatement statement) + { + var (tables, kinds, ons) = ResolveSource(statement.From); + var columns = tables.SelectMany(t => t.Columns).ToList(); + List<(RowId Id, object?[] Values)[]> joinRows = JoinRows(tables, kinds, ons, statement.Where, columns); + + int ti = TargetIndex(tables, statement.TargetTable, "DELETE target"); + Table target = TargetTable(tables, ti); + + var deleted = new Dictionary(); + foreach (var combo in joinRows) + deleted.TryAdd(combo[ti].Id, combo[ti].Values); // one delete per distinct target row + + // Delete the distinct target rows and everything ON DELETE CASCADE reaches, children before parents. + CascadeDelete(target, deleted.Select(kv => (kv.Key, kv.Value))); + + int affected = deleted.Count; + if (_session is not null) _session.RowCount = affected; + return affected; + } +} diff --git a/src/LibRed/LibRed.Engine/Execution/SubqueryCorrelation.cs b/src/LibRed/LibRed.Engine/Execution/SubqueryCorrelation.cs new file mode 100644 index 00000000..e0cf1e17 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/SubqueryCorrelation.cs @@ -0,0 +1,259 @@ +using LibRed.Catalog; +using LibRed.Engine.Plan; +using LibRed.Engine.Planning; +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Execution; + +/// +/// A correlated subquery's WHERE and HAVING split into the equalities that tie it to the outer row and the rest. +/// +/// The body's plan, used to tell inner aliases and column types from outer ones. +/// The subquery sides of the correlation equalities. +/// The outer sides, positionally matched to . +/// +/// Per key, whether NULL matches NULL there — true for EF's a = b OR (a IS NULL AND b IS NULL) form. A +/// plain = key drops null-bearing rows from the hash and fails a null probe outright, because a null can +/// never satisfy it; a null-safe key must instead hash the null and match it. +/// +/// The WHERE conjuncts that were not correlation equalities, re-ANDed, or null if none. +/// +/// The same for HAVING. The key query must use this and not the original HAVING, which still holds the +/// correlation conjunct that was lifted out of it. +/// +internal readonly record struct CorrelationSplit( + PlanNode Plan, + IReadOnlyList InnerKeys, + IReadOnlyList OuterKeys, + IReadOnlyList NullSafe, + Expression? Residual, + Expression? ResidualHaving); + +/// +/// The analysis every decorrelation rewrite starts from: which conjuncts of a subquery's WHERE are +/// inner = outer equalities, and whether removing them leaves a body that means the same thing for every +/// outer row. What each rewrite then does with the split differs — hashes the keys +/// for a membership test, maps them to one aggregate value each — but this +/// part, and the reasons it declines, is common to all of them. +/// +internal static class SubqueryCorrelation +{ + /// + /// Splits 's WHERE, or returns null when decorrelating would not be sound. + /// supplies the outer side's types, since a hash is only consistent with + /// the evaluator's = within one type kind. + /// + internal static CorrelationSplit? TrySplit( + SelectStatement subquery, + IReadOnlyList outerColumns, + HashSet outerAliases, + JetCatalog catalog) + { + if (subquery is not { From: not null }) + { + return null; + } + + PlanNode plan; + try + { + plan = QueryPlanner.PlanSelect(subquery); + } + catch (Exception) + { + return null; // Unplannable here is not our problem to report; let the normal path raise it. + } + + HashSet innerAliases = QueryPlanner.SubtreeAliases(plan); + + var innerKeys = new List(); + var outerKeys = new List(); + var nullSafe = new List(); + var residual = new List(); + var residualHaving = new List(); + + // HAVING is searched for correlations too, but only for conjuncts whose subquery side is a GROUPING KEY. + // Such a predicate is constant within a group, so it selects whole groups rather than filtering rows + // inside them — which is exactly what makes lifting it out equivalent to a WHERE correlation, and what + // leaves the remaining aggregates (COUNT(*) and friends) computed over the same rows as before. A + // correlation against an aggregate or a non-grouping column would change which rows the aggregate sees, + // so it stays put. EF emits the grouping-key form: `GROUP BY o0.CustomerID HAVING COUNT(*) > 30 AND + // o0.CustomerID = o.CustomerID` (its Contains-over-a-GroupBy shape), which without this ran the whole + // grouping once per outer row — 3.0 s on Northwind. + foreach ((Expression conjunct, bool fromHaving) in + IndexSelection.Conjuncts(subquery.Where).Select(c => (c, false)) + .Concat(IndexSelection.Conjuncts(subquery.Having).Select(c => (c, true)))) + { + // A correlation is either a plain equality or EF's null-safe form. Both give the same pair of + // operands; they differ only in what a null on either side means. + (Expression Left, Expression Right)? operands = conjunct switch + { + BinaryExpression { Operator: BinaryOperator.Equal } eq => (eq.Left, eq.Right), + _ => NullSafeEquality(conjunct), + }; + + if (operands is var (left, right) + && Orient(left, right, innerAliases, outerAliases) is var (inner, outer) + && inner is ColumnReference innerCol + && (!fromHaving || IsGroupingKey(inner, subquery.GroupBy)) + && SameKind(innerCol, plan, catalog, outer, outerColumns)) + { + innerKeys.Add(inner); + outerKeys.Add(outer); + nullSafe.Add(conjunct is not BinaryExpression { Operator: BinaryOperator.Equal }); + } + else + { + (fromHaving ? residualHaving : residual).Add(conjunct); + } + } + + // Every outer reference must have been consumed as a key, or the body would still vary per outer row. + // + // The test is "references no OUTER alias", not "references only inner aliases": the latter (ReferencesOnly) + // treats a nested subquery as opaque and refuses, which declined an EXISTS whose residual merely holds an + // outer-INDEPENDENT `IN (…)` — the Delete_Where_predicate_with_GroupBy_aggregate_2 shape. MayReferenceOuter + // descends into nested subqueries instead, so such a residual is recognised as outer-independent. + // + // Unqualified columns are refused outright. A bare name may bind outward and only the evaluator's resolver + // can tell; the hoisting path settles that with a trial run, but these rewrites commit before the body is + // ever executed (the key set is built lazily on first probe), so a wrong guess would surface as a query + // error rather than a fallback. EF always qualifies, so nothing real is lost. + // + // The GROUP BY keys and whatever is left of HAVING stay in the key query, so they face the same test as a + // residual WHERE conjunct. + if (innerKeys.Count == 0 + || residual.Concat(residualHaving).Concat(subquery.GroupBy) + .Any(r => SubqueryHoisting.MayReferenceOuter(r, outerAliases) + || SubqueryHoisting.HasUnqualifiedColumn(r))) + { + return null; + } + + return new CorrelationSplit(plan, innerKeys, outerKeys, nullSafe, And(residual), And(residualHaving)); + + static Expression? And(List conjuncts) + => conjuncts.Count == 0 ? null : conjuncts.Aggregate((a, b) => new BinaryExpression(BinaryOperator.And, a, b)); + } + + /// + /// Whether is one of the GROUP BY key expressions — the condition for lifting a + /// correlation out of HAVING. + /// + private static bool IsGroupingKey(Expression inner, IReadOnlyList groupBy) + => groupBy.Any(k => SameOperand(k, inner)); + + /// + /// Recognises EF's null-safe equality — a = b OR (a IS NULL AND b IS NULL) — returning the two + /// operands, or null when the conjunct is not that shape. + /// + /// + /// EF emits this wherever a correlation involves a nullable column, so it is not an edge case but the + /// common form. Read as one opaque disjunction it looked like a residual mentioning the outer row, which + /// declined the whole rewrite: measured on Northwind, the Late_subquery_pushdown shape took + /// 9,632 ms written this way against 55 ms with a plain =, the SQL being otherwise + /// identical. + /// + /// It really is null-safe equality: a = b is UNKNOWN if either side is null, so the disjunction + /// is true exactly when both are non-null and equal, or both are null. + /// + /// + private static (Expression Left, Expression Right)? NullSafeEquality(Expression conjunct) + { + if (conjunct is not BinaryExpression { Operator: BinaryOperator.Or } or) + { + return null; + } + + // EF puts the equality first, but don't depend on the operand order of either connective. + foreach ((Expression eqSide, Expression nullSide) in new[] { (or.Left, or.Right), (or.Right, or.Left) }) + { + if (eqSide is not BinaryExpression { Operator: BinaryOperator.Equal } eq + || nullSide is not BinaryExpression { Operator: BinaryOperator.And } and) + { + continue; + } + + if ((IsNullTestOf(and.Left, eq.Left) && IsNullTestOf(and.Right, eq.Right)) + || (IsNullTestOf(and.Left, eq.Right) && IsNullTestOf(and.Right, eq.Left))) + { + return (eq.Left, eq.Right); + } + } + + return null; + } + + /// Whether is operand IS NULL for that same operand. + private static bool IsNullTestOf(Expression test, Expression operand) + => test is UnaryExpression { Operator: UnaryOperator.IsNull, Operand: { } tested } && SameOperand(tested, operand); + + /// + /// Whether two operands of the null-safe form are the same expression. Column references compare + /// case-insensitively, since SQL identifiers are; anything else falls back to the AST's own structural + /// equality (the expression records are value types by construction). + /// + private static bool SameOperand(Expression a, Expression b) + => (a, b) switch + { + (ColumnReference x, ColumnReference y) => + string.Equals(x.Column, y.Column, StringComparison.OrdinalIgnoreCase) + && string.Equals(x.Table, y.Table, StringComparison.OrdinalIgnoreCase), + _ => a.Equals(b), + }; + + /// Orients an equality so the first element is the subquery side and the second the outer side. + private static (Expression Inner, Expression Outer)? Orient( + Expression left, Expression right, HashSet innerAliases, HashSet outerAliases) + => IndexSelection.ReferencesOnly(left, innerAliases) && IndexSelection.ReferencesOnly(right, outerAliases) + ? (left, right) + : IndexSelection.ReferencesOnly(right, innerAliases) && IndexSelection.ReferencesOnly(left, outerAliases) + ? (right, left) + : null; + + /// + /// Whether both sides of a correlation equality are the same type kind. A hash agreeing with the + /// evaluator's = only exists within a kind (5 = '5' and 5 = 5.0, but + /// '5' ≠ '5.0'), so a cross-kind correlation must stay a per-row comparison. + /// + internal static bool SameKind( + ColumnReference innerCol, + PlanNode innerPlan, + JetCatalog catalog, + Expression outer, + IReadOnlyList outerColumns) + { + IndexSelection.TypeKind? innerKind = IndexSelection.ResolveKind(innerCol, innerPlan, catalog); + if (innerKind is null) + { + return false; + } + + // The outer side's kind comes from the scope's CLR types rather than the catalog: it may be any + // expression over already-materialised rows, not necessarily a base-table column. + if (outer is not ColumnReference outerCol) + { + return false; + } + + Type? clr = outerColumns + .Where(c => string.Equals(c.Name, outerCol.Column, StringComparison.OrdinalIgnoreCase) + && (outerCol.Table is null || string.Equals(c.Qualifier, outerCol.Table, StringComparison.OrdinalIgnoreCase))) + .Select(c => c.ClrType) + .FirstOrDefault(); + + return clr is not null && KindOf(clr) == innerKind; + } + + private static IndexSelection.TypeKind? KindOf(Type t) + { + Type u = Nullable.GetUnderlyingType(t) ?? t; + if (u == typeof(string)) return IndexSelection.TypeKind.Text; + if (u == typeof(byte[])) return IndexSelection.TypeKind.Binary; + if (u == typeof(DateTime)) return IndexSelection.TypeKind.Temporal; + if (u == typeof(Guid)) return IndexSelection.TypeKind.Guid; + if (u == typeof(bool) || u == typeof(byte) || u == typeof(short) || u == typeof(int) || u == typeof(long) + || u == typeof(float) || u == typeof(double) || u == typeof(decimal)) return IndexSelection.TypeKind.Numeric; + return null; + } +} diff --git a/src/LibRed/LibRed.Engine/Execution/SubqueryHoisting.cs b/src/LibRed/LibRed.Engine/Execution/SubqueryHoisting.cs new file mode 100644 index 00000000..3d888b24 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Execution/SubqueryHoisting.cs @@ -0,0 +1,145 @@ +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Execution; + +/// +/// Decides whether a subquery's result is the same for every outer row, so it can be evaluated once per +/// statement instead of once per row. +/// +/// +/// +/// EF emits uncorrelated subqueries inside DML predicates. The ExecuteDelete for a GROUP BY +/// predicate becomes … WHERE o.OrderID < (SELECT TOP 1 (…) FROM Orders o0 GROUP BY … HAVING COUNT(*) > +/// 11): that subquery never mentions the outer alias, yet it was re-evaluated for all 2155 candidate rows, +/// costing ~42.8 s in one Northwind test and ~11.9 s in another (as an IN). The GROUP BY only makes +/// each repeat expensive — the defect is repeating it at all. +/// +/// +/// Two checks must both pass, because each covers what the other misses: +/// +/// +/// +/// No qualified reference to an outer alias anywhere inside, including nested subqueries. This is +/// needed because a conditional can hide one from evaluation — IIF(x, o.Col, 1) may never touch +/// o.Col on the row a trial happens to look at. +/// +/// +/// The subquery runs with no outer scope (see the caller). That settles unqualified references +/// using the evaluator's own resolver: one that binds to an inner table succeeds, while one that would bind +/// outward walks out, finds nothing, and throws. Deferring to rather than +/// re-implementing name resolution is the point — the two can then never disagree about what a bare column +/// name means. +/// +/// +/// +internal static class SubqueryHoisting +{ + /// + /// Whether qualifies a column with one of , or + /// contains something this walk cannot inspect. True means "do not hoist": unrecognised shapes are + /// treated as correlated so a missed case costs speed, never correctness. + /// + internal static bool MayReferenceOuter(SelectStatement query, HashSet outerAliases) + => outerAliases.Count > 0 && Statement(query, outerAliases); + + /// + /// The same question for a single expression: does it qualify a column with an outer alias, or contain + /// something the walk cannot inspect? Unlike , this descends + /// INTO nested subqueries rather than treating them as opaque, so an expression holding an + /// outer-independent IN (…) can be recognised as outer-independent too. + /// + internal static bool MayReferenceOuter(Expression expression, HashSet outerAliases) + => outerAliases.Count > 0 && Expr(expression, outerAliases); + + /// + /// Whether an expression contains a column reference with no table qualifier, at any depth. + /// + /// + /// A bare name may bind to an outer table, and only the evaluator's resolver can say which + /// (see ). Callers that cannot afford a + /// trial run — because their rewrite commits before the body is ever executed — use this to decline + /// instead. EF always qualifies, so in practice nothing is lost. + /// + internal static bool HasUnqualifiedColumn(Expression? expression) => expression switch + { + null => false, + ColumnReference { Table: null } => true, + ColumnReference => false, + LiteralExpression or ParameterExpression or SystemVariableExpression + or StarExpression or QualifiedStarExpression => false, + BinaryExpression b => HasUnqualifiedColumn(b.Left) || HasUnqualifiedColumn(b.Right), + UnaryExpression u => HasUnqualifiedColumn(u.Operand), + FunctionCall f => f.Arguments.Any(HasUnqualifiedColumn), + InListExpression il => HasUnqualifiedColumn(il.Value) || il.Items.Any(HasUnqualifiedColumn), + ScalarSubquery sq => StatementHasUnqualified(sq.Query), + ExistsExpression ex => StatementHasUnqualified(ex.Query), + InSubqueryExpression isq => HasUnqualifiedColumn(isq.Value) || StatementHasUnqualified(isq.Query), + _ => true, // unknown shape: assume the worst + }; + + private static bool StatementHasUnqualified(SqlStatement statement) + { + if (statement is not SelectStatement s) + { + return true; + } + + return s.Projection.Any(p => HasUnqualifiedColumn(p.Value)) + || (s.From is { } from && TableHasUnqualified(from)) + || HasUnqualifiedColumn(s.Where) + || s.GroupBy.Any(HasUnqualifiedColumn) + || HasUnqualifiedColumn(s.Having) + || s.OrderBy.Any(o => HasUnqualifiedColumn(o.Value)) + || HasUnqualifiedColumn(s.Top); + } + + private static bool TableHasUnqualified(TableReference table) => table switch + { + NamedTable => false, + SubqueryTable t => StatementHasUnqualified(t.Query), + JoinTable j => TableHasUnqualified(j.Left) || TableHasUnqualified(j.Right) || HasUnqualifiedColumn(j.On), + _ => true, + }; + + private static bool Statement(SqlStatement statement, HashSet outer) + { + if (statement is not SelectStatement s) + { + return true; // a set operation or anything else: not inspected, so assume correlated + } + + return s.Projection.Any(p => Expr(p.Value, outer)) + || (s.From is { } from && Table(from, outer)) + || Expr(s.Where, outer) + || s.GroupBy.Any(g => Expr(g, outer)) + || Expr(s.Having, outer) + || s.OrderBy.Any(o => Expr(o.Value, outer)) + || Expr(s.Top, outer); + } + + private static bool Table(TableReference table, HashSet outer) => table switch + { + NamedTable => false, + SubqueryTable t => Statement(t.Query, outer), + JoinTable j => Table(j.Left, outer) || Table(j.Right, outer) || Expr(j.On, outer), + _ => true, // unknown source shape + }; + + private static bool Expr(Expression? e, HashSet outer) => e switch + { + null => false, + ColumnReference { Table: { } t } => outer.Contains(t), + // Unqualified: the trial execution decides, using the evaluator's own resolution rules. + ColumnReference => false, + LiteralExpression or ParameterExpression or SystemVariableExpression + or StarExpression or QualifiedStarExpression => false, + BinaryExpression b => Expr(b.Left, outer) || Expr(b.Right, outer), + UnaryExpression u => Expr(u.Operand, outer), + FunctionCall f => f.Arguments.Any(a => Expr(a, outer)), + InListExpression il => Expr(il.Value, outer) || il.Items.Any(i => Expr(i, outer)), + ScalarSubquery sq => Statement(sq.Query, outer), + ExistsExpression ex => Statement(ex.Query, outer), + InSubqueryExpression isq => Expr(isq.Value, outer) || Statement(isq.Query, outer), + _ => true, // unknown expression shape + }; +} diff --git a/src/LibRed/LibRed.Engine/LibRed.Engine.csproj b/src/LibRed/LibRed.Engine/LibRed.Engine.csproj new file mode 100644 index 00000000..c288e779 --- /dev/null +++ b/src/LibRed/LibRed.Engine/LibRed.Engine.csproj @@ -0,0 +1,20 @@ + + + + $(JetTargetFramework) + LibRed.Engine + LibRed.Engine + Query engine: plans and executes bound SQL statements (select/insert/update/delete, joins, filters, expressions) against the LibRed.Core storage layer. + AnyCPU;x86;x64 + + + + + + + + + + + + diff --git a/src/LibRed/LibRed.Engine/Plan/PlanNode.cs b/src/LibRed/LibRed.Engine/Plan/PlanNode.cs new file mode 100644 index 00000000..4c68d7bb --- /dev/null +++ b/src/LibRed/LibRed.Engine/Plan/PlanNode.cs @@ -0,0 +1,14 @@ +namespace LibRed.Engine.Plan; + +/// +/// Base type for logical query-plan nodes. A bound statement is lowered into a tree +/// of these (Scan → Filter → Project → …). Keeping the plan separate from both the +/// AST and the executor lets optimisation passes (predicate pushdown, join +/// reordering, index selection) run as tree rewrites, and lets new SQL features add +/// new node types without touching parsing or execution wiring. +/// +public abstract record PlanNode +{ + /// Input nodes feeding this operator (empty for leaves such as Scan). + public virtual IReadOnlyList Children => []; +} diff --git a/src/LibRed/LibRed.Engine/Plan/PlanNodes.cs b/src/LibRed/LibRed.Engine/Plan/PlanNodes.cs new file mode 100644 index 00000000..efaeddb1 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Plan/PlanNodes.cs @@ -0,0 +1,135 @@ +using LibRed.Catalog; +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Plan; + +/// Full-table scan of a base table, exposing its columns under . +public sealed record ScanNode(string Table, string? Alias) : PlanNode; + +/// A FROM-less SELECT source: yields exactly one row with no columns, so a constant projection like +/// SELECT 2 evaluates once. ACE accepts a bare SELECT 2 (verified) — this matches that. +public sealed record SingleRowNode : PlanNode; + +/// +/// An index seek: reads the rows of whose key equals the +/// evaluated (one per index column, in index order), instead of a full scan. Exposes +/// the same columns as a scan of the table. The seek is an access path that may over-return (the key encoding +/// is lossy for text/binary), so the residual predicate is re-checked by the above. +/// A key may reference an outer row (index-nested-loop join). +/// +public sealed record IndexSeekNode(string Table, string? Alias, IndexDef Index, IReadOnlyList Keys) : PlanNode; + +/// +/// An index range scan: reads the rows of whose single-column +/// key lies in [, ] (either bound null = open), instead of a full +/// scan. Emitted for range predicates (>/>=/</<=/BETWEEN) on an +/// indexed column. The residual above re-applies the exact bounds (the seek is an +/// over-returning access path — lossy keys, strict-vs-inclusive boundaries). +/// +public sealed record IndexRangeSeekNode(string Table, string? Alias, IndexDef Index, Expression? Low, Expression? High) : PlanNode; + +/// A derived table: the output of re-exposed under an alias. The alias +/// is optional (Access permits an aliasless derived table); its columns are then unqualified. +public sealed record DerivedTableNode(PlanNode Input, string? Alias) : PlanNode +{ + public override IReadOnlyList Children => [Input]; +} + +/// Index seek/range scan over a named index. +public sealed record IndexScanNode(string Table, string Index, Expression? Predicate) : PlanNode +{ + public override IReadOnlyList Children => []; +} + +/// Applies a boolean predicate to its input rows. +public sealed record FilterNode(PlanNode Input, Expression Predicate) : PlanNode +{ + public override IReadOnlyList Children => [Input]; +} + +/// Projects (and optionally renames) a set of expressions from its input. +public sealed record ProjectNode(PlanNode Input, IReadOnlyList Projection) : PlanNode +{ + public override IReadOnlyList Children => [Input]; +} + +/// Joins two inputs on a condition. +public sealed record JoinNode(PlanNode Left, PlanNode Right, JoinKind Kind, Expression? On) : PlanNode +{ + public override IReadOnlyList Children => [Left, Right]; +} + +/// +/// An equi-join executed by hashing: the side is materialised into a hash table keyed +/// by , then each row probes it by +/// — O(n+m) instead of the nested loop's O(n·m). The full is kept as a residual re-check +/// (hash buckets can collide, and the ON may carry non-equi conjuncts). Produced by the planner only when every +/// key pair is columns of the same type kind, since the evaluator's equality is not transitive across kinds +/// (5 = '5' and 5 = 5.0 but '5' ≠ '5.0'), so a hash consistent with it exists only within one kind. +/// +public sealed record HashJoinNode( + PlanNode Left, PlanNode Right, JoinKind Kind, + IReadOnlyList LeftKeys, IReadOnlyList RightKeys, Expression On) : PlanNode +{ + public override IReadOnlyList Children => [Left, Right]; +} + +/// +/// Groups input rows by the key expressions and emits one row per +/// group by evaluating — where aggregate calls are computed over +/// the group and other expressions see the group's key values. +/// +public sealed record AggregateNode( + PlanNode Input, + IReadOnlyList GroupBy, + IReadOnlyList Projection, + Expression? Having, + IReadOnlyList OrderBy) : PlanNode +{ + public override IReadOnlyList Children => [Input]; +} + +/// Orders rows. +/// +/// When set, only this many rows are needed from the ordering, so the sort keeps the smallest n as it goes instead +/// of ordering its whole input (see QueryExecutor.SortRows). The planner sets it from an enclosing TOP n +/// when nothing between the two changes the row count; the still applies the count itself, +/// so this is purely a way to avoid ordering rows that cannot survive it. +/// +public sealed record SortNode(PlanNode Input, IReadOnlyList Keys, Expression? Limit = null) : PlanNode +{ + public override IReadOnlyList Children => [Input]; +} + +/// Combines two inputs by a set operation (UNION / UNION ALL / INTERSECT / EXCEPT). +public sealed record SetOperationNode(PlanNode Left, PlanNode Right, SetOperator Operator) : PlanNode +{ + public override IReadOnlyList Children => [Left, Right]; +} + +/// Limits the number of rows (Access TOP n). The count is an expression (usually a literal, +/// but LibRed also accepts a parameter or a +/- expression) evaluated once at execution. When +/// is set (TOP n PERCENT) the count is a percentage of the input row +/// count, taken as ceil(rows × n / 100) (verified vs ACE). +public sealed record LimitNode(PlanNode Input, Expression Count, bool Percent = false) : PlanNode +{ + public override IReadOnlyList Children => [Input]; +} + +/// Removes duplicate rows (SELECT DISTINCT). +public sealed record DistinctNode(PlanNode Input) : PlanNode +{ + public override IReadOnlyList Children => [Input]; +} + +/// +/// Access SELECT DISTINCTROW: dedupes on the underlying rows of the tables that contribute output +/// columns, applied over the pre-projection row so it can see all their columns. The +/// identifies the contributing tables at execution (via each output column's +/// source qualifier). A no-op when the query has a single source table or draws columns from every table — +/// exactly Access's "ignored unless output is from a strict subset of the tables" rule. +/// +public sealed record DistinctRowNode(PlanNode Input, IReadOnlyList Projection) : PlanNode +{ + public override IReadOnlyList Children => [Input]; +} diff --git a/src/LibRed/LibRed.Engine/Planning/IndexSelection.cs b/src/LibRed/LibRed.Engine/Planning/IndexSelection.cs new file mode 100644 index 00000000..08e28234 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Planning/IndexSelection.cs @@ -0,0 +1,350 @@ +using LibRed.Catalog; +using LibRed.Engine.Plan; +using LibRed.Sql.Ast; + +namespace LibRed.Engine.Planning; + +/// +/// A post-planning optimizer pass that replaces a Filter(pred) over Scan(t) with +/// Filter(pred) over IndexSeek(t, index, key) when pred has an equality on a column that is the +/// sole column of one of t's indexes. The is KEPT: the index key encoding is +/// order-preserving but lossy (text/binary collation), so the seek may over-return and the residual predicate +/// re-checks each candidate — the seek only narrows what has to be read. +/// +internal static class IndexSelection +{ + private static readonly HashSet NoOuter = new(StringComparer.OrdinalIgnoreCase); + + /// Aliases of the enclosing query (empty at top level). A value referencing only these + /// is a constant from this query's view, so a correlated predicate t.col = outer.col becomes an + /// index seek keyed off the outer row — the point of running index selection on correlated subqueries. + public static PlanNode Apply(PlanNode node, JetCatalog catalog, HashSet? outer = null) + { + outer ??= NoOuter; + return node switch + { + FilterNode { Input: ScanNode scan } filter => RewriteFilterOverScan(filter, scan, catalog, outer), + JoinNode j => RewriteJoin(j, catalog, outer), + + // Otherwise rebuild the node with its children rewritten. + FilterNode f => f with { Input = Apply(f.Input, catalog, outer) }, + SortNode s => s with { Input = Apply(s.Input, catalog, outer) }, + ProjectNode p => p with { Input = Apply(p.Input, catalog, outer) }, + DistinctNode d => d with { Input = Apply(d.Input, catalog, outer) }, + DistinctRowNode dr => dr with { Input = Apply(dr.Input, catalog, outer) }, + LimitNode l => l with { Input = Apply(l.Input, catalog, outer) }, + AggregateNode a => a with { Input = Apply(a.Input, catalog, outer) }, + DerivedTableNode dt => dt with { Input = Apply(dt.Input, catalog, outer) }, + SetOperationNode so => so with { Left = Apply(so.Left, catalog, outer), Right = Apply(so.Right, catalog, outer) }, + _ => node, + }; + } + + private static PlanNode RewriteFilterOverScan(FilterNode filter, ScanNode scan, JetCatalog catalog, HashSet outer) + { + if (catalog.FindTable(scan.Table) is not { } def) + return filter; + string alias = scan.Alias ?? scan.Table; + var conjuncts = Conjuncts(filter.Predicate).ToList(); + + // 1. Equality seek. Collect every `col = value` where col is a column of this scan and value is + // evaluable without a row of it (a constant, a parameter, or — in a correlated subquery — an outer + // column), then use the index (composite preferred) all of whose columns are so constrained. This is + // an exact point seek; a fully-constrained composite key (e.g. a correlated PK match) hits one row. + var equalities = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (Expression conjunct in conjuncts) + { + if (conjunct is not BinaryExpression { Operator: BinaryOperator.Equal } eq) + continue; + (ColumnReference col, Expression value)? match = + Column(eq.Left, alias, def) is { } c1 && Seekable(eq.Right, outer) ? (c1, eq.Right) + : Column(eq.Right, alias, def) is { } c2 && Seekable(eq.Left, outer) ? (c2, eq.Left) + : null; + if (match is { } m) + equalities.TryAdd(m.col.Column, m.value); + } + if (equalities.Count > 0) + // Most columns first, so a correlated composite PK match is preferred over a single-column index. + foreach (IndexDef index in def.Indexes.OrderByDescending(i => i.Columns.Count)) + if (index.Columns.All(c => equalities.ContainsKey(c.Column.Name))) + { + var keys = index.Columns.Select(c => equalities[c.Column.Name]).ToList(); + return filter with { Input = new IndexSeekNode(scan.Table, scan.Alias, index, keys) }; + } + + // 2. Range comparison(s) on a single-column index → a range scan (lower and/or upper bound). + foreach (IndexDef index in def.Indexes.Where(i => i.Columns.Count == 1)) + { + string colName = index.Columns[0].Column.Name; + Expression? low = null, high = null; + foreach (Expression conjunct in conjuncts) + { + if (Bound(conjunct, colName, alias, def) is not { } b) + continue; + if (b.Op is BinaryOperator.GreaterThan or BinaryOperator.GreaterThanOrEqual) + low ??= b.Value; + else + high ??= b.Value; // LessThan / LessThanOrEqual + } + if (low is not null || high is not null) + return filter with { Input = new IndexRangeSeekNode(scan.Table, scan.Alias, index, low, high) }; + } + + return filter; + } + + /// Whether can be evaluated as a seek key without a row of the table being + /// scanned — a constant, a parameter, or a column of the enclosing (outer) query in a correlated subquery. + private static bool Seekable(Expression e, HashSet outer) => ReferencesOnly(e, outer); + + /// If is a range comparison of column against + /// a value (either orientation), returns the operator as if the column were on the left (so 5 < K + /// yields K > 5) and the value expression; else null. + private static (BinaryOperator Op, Expression Value)? Bound(Expression conjunct, string colName, string alias, TableDef def) + { + if (conjunct is not BinaryExpression { Operator: var op } cmp + || op is not (BinaryOperator.GreaterThan or BinaryOperator.GreaterThanOrEqual + or BinaryOperator.LessThan or BinaryOperator.LessThanOrEqual)) + return null; + + bool IsCol(Expression e) => Column(e, alias, def) is { } c && string.Equals(c.Column, colName, StringComparison.OrdinalIgnoreCase); + if (IsCol(cmp.Left) && !HasColumnRef(cmp.Right)) return (op, cmp.Right); + if (IsCol(cmp.Right) && !HasColumnRef(cmp.Left)) return (Flip(op), cmp.Left); + return null; + } + + private static BinaryOperator Flip(BinaryOperator op) => op switch + { + BinaryOperator.GreaterThan => BinaryOperator.LessThan, + BinaryOperator.GreaterThanOrEqual => BinaryOperator.LessThanOrEqual, + BinaryOperator.LessThan => BinaryOperator.GreaterThan, + BinaryOperator.LessThanOrEqual => BinaryOperator.GreaterThanOrEqual, + _ => op, + }; + + /// + /// Turns a nested-loop join whose inner (right) side is a base-table scan into an index-nested-loop + /// join: if the join's ON has an equality right.col = leftExpr where right.col is the sole + /// column of an index of the inner table and leftExpr references only the outer (left) side, the + /// inner scan becomes an keyed off the outer row. Executed per left row, it + /// seeks the index instead of scanning the whole inner table. The join keeps its ON as the residual check. + /// + private static PlanNode RewriteJoin(JoinNode j, JetCatalog catalog, HashSet outer) + { + PlanNode left = Apply(j.Left, catalog, outer); // rewrite the outer side first (independent of this join) + + // Only a plain nested-loop join with an ON can become index-nested-loop; an outer join is left alone + // for now (the right side must still contribute null rows when nothing matches — a scan, not a seek). + if (j.Kind is (JoinKind.Inner or JoinKind.Cross) && j.On is { } on + && j.Right is ScanNode scan && catalog.FindTable(scan.Table) is { } def) + { + string rAlias = scan.Alias ?? scan.Table; + // The seek key may reference the join's own left side or the enclosing (outer) query. + HashSet keySources = QueryPlanner.SubtreeAliases(left).Union(outer).ToHashSet(StringComparer.OrdinalIgnoreCase); + + foreach (Expression conjunct in Conjuncts(on)) + { + if (conjunct is not BinaryExpression { Operator: BinaryOperator.Equal } eq) + continue; + + // One side is an inner-table column; the other references only the outer side (the seek key). + (ColumnReference innerCol, Expression outerKey)? m = + Column(eq.Left, rAlias, def) is { } c1 && ReferencesOnly(eq.Right, keySources) ? (c1, eq.Right) + : Column(eq.Right, rAlias, def) is { } c2 && ReferencesOnly(eq.Left, keySources) ? (c2, eq.Left) + : null; + if (m is not { } match) + continue; + + IndexDef? index = def.Indexes.FirstOrDefault( + i => i.Columns.Count == 1 && string.Equals(i.Columns[0].Column.Name, match.innerCol.Column, StringComparison.OrdinalIgnoreCase)); + if (index is null) + continue; + + var seek = new IndexSeekNode(scan.Table, scan.Alias, index, [match.outerKey]); + return j with { Left = left, Right = seek }; // ON kept as residual + } + } + + PlanNode right = Apply(j.Right, catalog, outer); + + // No index-nested-loop available: if this is an equi-join whose keys are same-kind columns, hash it + // (O(n+m)) instead of leaving the O(n·m) nested loop. See HashJoinNode for why same-kind is required. + // RIGHT joins hash too (the executor builds the left and probes with the right). + if (j.Kind is (JoinKind.Inner or JoinKind.Left or JoinKind.Right) && j.On is { } cond + && TryHashKeys(cond, left, right, catalog) is { } keys) + return new HashJoinNode(left, right, j.Kind, keys.Left, keys.Right, cond); + + return j with { Left = left, Right = right }; + } + + /// Splits the join condition into equi-key column pairs (left-referencing = right-referencing) + /// whose columns are of the same type kind, or null if there is no such pair. The full ON is still applied + /// as a residual, so a partial split (extra non-equi conjuncts) is fine. + private static (IReadOnlyList Left, IReadOnlyList Right)? TryHashKeys( + Expression on, PlanNode left, PlanNode right, JetCatalog catalog) + { + HashSet leftAliases = QueryPlanner.SubtreeAliases(left); + HashSet rightAliases = QueryPlanner.SubtreeAliases(right); + var leftKeys = new List(); + var rightKeys = new List(); + + foreach (Expression conjunct in Conjuncts(on)) + { + if (conjunct is not BinaryExpression { Operator: BinaryOperator.Equal } eq) + continue; + + // Orient the equality so L is the left-subtree side and R the right-subtree side. + (Expression L, Expression R)? oriented = + ReferencesOnly(eq.Left, leftAliases) && ReferencesOnly(eq.Right, rightAliases) ? (eq.Left, eq.Right) + : ReferencesOnly(eq.Right, leftAliases) && ReferencesOnly(eq.Left, rightAliases) ? (eq.Right, eq.Left) + : null; + if (oriented is not { } o || o.L is not ColumnReference lc || o.R is not ColumnReference rc) + continue; + + // A hash consistent with the evaluator's equality only exists within one type kind (5 = '5' and + // 5 = 5.0 but '5' ≠ '5.0'), so both key columns must resolve to the same kind. + TypeKind? lk = ResolveKind(lc, left, catalog); + TypeKind? rk = ResolveKind(rc, right, catalog); + if (lk is null || lk != rk) + continue; + + leftKeys.Add(o.L); + rightKeys.Add(o.R); + } + + return leftKeys.Count > 0 ? (leftKeys, rightKeys) : null; + } + + internal enum TypeKind { Numeric, Text, Binary, Temporal, Guid } + + internal static TypeKind? Classify(JetDataType t) => t switch + { + JetDataType.Boolean or JetDataType.Byte or JetDataType.Int16 or JetDataType.Int32 or JetDataType.Int64 + or JetDataType.Single or JetDataType.Double or JetDataType.Currency or JetDataType.FixedPoint => TypeKind.Numeric, + JetDataType.Text or JetDataType.Memo => TypeKind.Text, + JetDataType.Binary or JetDataType.Ole => TypeKind.Binary, + JetDataType.DateTime or JetDataType.DateTimeExtended => TypeKind.Temporal, + JetDataType.Guid => TypeKind.Guid, + _ => null, + }; + + /// The type kind of a column resolved against — a base-table column + /// directly, or a derived-table column followed through its projection to the underlying base column — or + /// null if it can't be pinned down (e.g. the projection is a computed expression), in which case the join + /// is left as a nested loop rather than risk an unsound hash. + internal static TypeKind? ResolveKind(ColumnReference col, PlanNode subtree, JetCatalog catalog) + { + foreach ((string alias, string table) in BaseTables(subtree)) + { + if (col.Table is { } t && !string.Equals(t, alias, StringComparison.OrdinalIgnoreCase)) + continue; + ColumnDef? c = catalog.FindTable(table)?.Columns + .FirstOrDefault(cd => string.Equals(cd.Name, col.Column, StringComparison.OrdinalIgnoreCase)); + if (c is not null) + return Classify(c.Type); + } + + // A derived-table column: match its alias, find what its SELECT list projects for this name, and resolve + // that expression's kind against the derived query's own tables (only if it is itself a plain column). + foreach (DerivedTableNode d in DerivedTables(subtree)) + { + if (col.Table is { } t && !string.Equals(t, d.Alias, StringComparison.OrdinalIgnoreCase)) + continue; + if (ProjectionExprFor(d.Input, col.Column) is ColumnReference inner) + return ResolveKind(inner, d.Input, catalog); + } + return null; + } + + // A derived table is an opaque boundary: its inner tables/aliases are not visible outside it, so BaseTables + // stops there (DerivedTables handles the derived level separately). + private static IEnumerable<(string Alias, string Table)> BaseTables(PlanNode node) => node switch + { + ScanNode s => [(s.Alias ?? s.Table, s.Table)], + IndexSeekNode s => [(s.Alias ?? s.Table, s.Table)], + IndexRangeSeekNode s => [(s.Alias ?? s.Table, s.Table)], + DerivedTableNode => [], + _ => node.Children.SelectMany(BaseTables), + }; + + /// The derived tables directly visible in (not descending into a derived + /// table's own body, which is its private scope). + private static IEnumerable DerivedTables(PlanNode node) => node switch + { + DerivedTableNode d => [d], + _ => node.Children.SelectMany(DerivedTables), + }; + + /// The expression a derived query projects under output name , or null. + private static Expression? ProjectionExprFor(PlanNode derivedBody, string column) + { + if (FindProject(derivedBody) is not { } proj) + return null; + foreach (SelectItem item in proj.Projection) + { + string name = item.Alias ?? (item.Value as ColumnReference)?.Column ?? ""; + if (string.Equals(name, column, StringComparison.OrdinalIgnoreCase)) + return item.Value; + } + return null; + } + + private static ProjectNode? FindProject(PlanNode node) => node switch + { + ProjectNode p => p, + SortNode s => FindProject(s.Input), + LimitNode l => FindProject(l.Input), + DistinctNode d => FindProject(d.Input), + DistinctRowNode dr => FindProject(dr.Input), + FilterNode f => FindProject(f.Input), + DerivedTableNode dt => FindProject(dt.Input), + _ => null, + }; + + /// Whether every column an expression references is one of the given aliases (and it has no + /// subquery) — i.e. it can be evaluated from the outer row alone, as an index-seek key. + internal static bool ReferencesOnly(Expression e, HashSet aliases) => e switch + { + ColumnReference { Table: { } t } => aliases.Contains(t), + ColumnReference => false, // unqualified — can't attribute it to the outer side safely + LiteralExpression or ParameterExpression or SystemVariableExpression => true, + BinaryExpression b => ReferencesOnly(b.Left, aliases) && ReferencesOnly(b.Right, aliases), + UnaryExpression u => ReferencesOnly(u.Operand, aliases), + FunctionCall f => f.Arguments.All(a => ReferencesOnly(a, aliases)), + InListExpression il => ReferencesOnly(il.Value, aliases) && il.Items.All(a => ReferencesOnly(a, aliases)), + _ => false, + }; + + /// The column reference if is a column of the given scan (its qualifier is + /// the scan's alias, or it is unqualified and the table has such a column), else null. + private static ColumnReference? Column(Expression e, string alias, TableDef def) + { + if (e is not ColumnReference c) return null; + if (c.Table is { } t && !string.Equals(t, alias, StringComparison.OrdinalIgnoreCase)) return null; + return def.Columns.Any(col => string.Equals(col.Name, c.Column, StringComparison.OrdinalIgnoreCase)) ? c : null; + } + + private static bool HasColumnRef(Expression e) => e switch + { + ColumnReference => true, + // A subquery is opaque: it may be CORRELATED to this scan's own row (e.g. `t.Id > (SELECT … WHERE + // t.Id = …)`), so it must never be used as a seek key/bound — treat it as referencing a column. (A + // seek bound is evaluated once, with no row scope; a correlated subquery would fail to resolve there.) + ScalarSubquery or ExistsExpression or InSubqueryExpression => true, + BinaryExpression b => HasColumnRef(b.Left) || HasColumnRef(b.Right), + UnaryExpression u => HasColumnRef(u.Operand), + FunctionCall f => f.Arguments.Any(HasColumnRef), + InListExpression il => HasColumnRef(il.Value) || il.Items.Any(HasColumnRef), + _ => false, // literals, parameters, system vars + }; + + /// The AND-conjuncts of a predicate; none at all for an absent one (a missing WHERE or HAVING). + internal static IEnumerable Conjuncts(Expression? e) + { + if (e is null) + return []; + if (e is BinaryExpression { Operator: BinaryOperator.And } b) + return Conjuncts(b.Left).Concat(Conjuncts(b.Right)); + return [e]; + } +} diff --git a/src/LibRed/LibRed.Engine/Planning/QueryPlanner.cs b/src/LibRed/LibRed.Engine/Planning/QueryPlanner.cs new file mode 100644 index 00000000..65d3ec65 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Planning/QueryPlanner.cs @@ -0,0 +1,255 @@ +using LibRed.Engine.Plan; +using LibRed.Sql.Ast; +using LibRed.Sql.Binding; + +namespace LibRed.Engine.Planning; + +/// +/// Turns a bound statement into a logical tree. Index +/// selection and other optimisations are applied as rewrites over the tree. +/// +public sealed class QueryPlanner +{ + public PlanNode Plan(BoundStatement bound) + { + return PlanStatement(bound.Statement); + } + + private static PlanNode PlanStatement(SqlStatement statement) => statement switch + { + SelectStatement select => PlanSelect(select), + SetOperationStatement set => new SetOperationNode( + PlanStatement(set.Left), PlanStatement(set.Right), set.Operator), + _ => throw new NotImplementedException( + $"Planning for {statement.GetType().Name} is not yet implemented."), + }; + + /// Plans a SELECT statement directly (used for subqueries). + public static PlanNode PlanSelect(SelectStatement select) + { + // Shape: From (Scan/Join/Derived) → Filter → Sort → Project → Limit. ORDER BY is + // applied over the source columns (before projection) so it can reference them. + PlanNode node = PlanFrom(select.From); + + if (select.Where is not null) + node = PushPredicates(node, select.Where); + + bool aggregate = select.GroupBy.Count > 0 || select.Having is not null + || select.Projection.Any(i => HasAggregate(i.Value)); + if (aggregate) + // The aggregate node owns ORDER BY: its keys are evaluated in the group scope (so they can + // reference grouping expressions / aggregates), not over the already-projected output. + node = new AggregateNode(node, select.GroupBy, select.Projection, select.Having, select.OrderBy); + else if (select.OrderBy.Count > 0) + node = PushSort(node, select.OrderBy); + + // DISTINCTROW dedupes on the *pre-projection* rows of the contributing tables, so it goes below the + // projection. It is meaningless with aggregation (grouping already collapses rows) and a no-op for + // SELECT * (output covers every table), so only the plain projected case needs the node. + if (select.DistinctRow && !aggregate && !select.IsSelectStar) + node = new DistinctRowNode(node, select.Projection); + + if (!aggregate && !select.IsSelectStar) + node = new ProjectNode(node, select.Projection); + + if (select.Distinct) + node = new DistinctNode(node); + + if (select.Top is { } top) + { + // `TOP n ... ORDER BY k` only needs the n smallest rows by k, so tell the sort the bound and let it + // discard rows that can't survive rather than ordering everything. Only sound when nothing between the + // sort and the limit changes the row count: a projection is 1:1, but DISTINCT/DISTINCTROW collapse + // rows, so the n rows reaching the limit are not the n the sort would have kept. PERCENT is excluded + // because it needs the full input count to work out the take at all. + if (!select.TopPercent && !select.Distinct && !select.DistinctRow) + node = BoundSort(node, top); + + node = new LimitNode(node, top, select.TopPercent); + } + + return node; + } + + /// + /// Places an ORDER BY as deep in the join tree as it can go: when every key comes from one side of a join, + /// sorting that side and letting the join stream produces the same order as sorting the join's output — + /// without building the product to sort it. + /// + /// + /// + /// SELECT TOP 1 c.… FROM Customers c, Orders o, Employees e ORDER BY c.CustomerID ordered a + /// 679,770-row cross product (91 × 830 × 9) to return one row. Sorting the 91 customers instead lets + /// the join emit rows in that order, so the enclosing TOP stops after the first: 1,363 ms to ~10 ms. + /// It pays off without a TOP as well — EF's Include emits LEFT JOIN … ORDER BY {principal key}, + /// where this sorts the principal table rather than the whole joined result, and the join then streams + /// instead of being materialised. + /// + /// + /// Only the LEFT input drives output order: the nested loop iterates it in the outer loop, and the hash + /// join probes with it (building the right) for INNER/LEFT. A RIGHT join instead probes with the right, + /// so its output follows the right side and a left-side sort would be lost — hence the kind check. The + /// recursion handles left-deep chains, so a key on c sinks past both joins of c, o, e. + /// + /// + /// returns null for anything it cannot pin to a table — an unqualified column + /// (which might bind to either side), a subquery, a qualified star — and those decline, leaving the sort + /// above the join. + /// + /// + /// A pushed sort deliberately gets NO row bound from , which only walks + /// row-preserving nodes and so stops at the join. Bounding it would be wrong in general: an INNER join + /// can drop left rows, so the first n rows of the sorted side need not yield n joined rows. (It would be + /// sound for LEFT and CROSS, which never drop one — a refinement, not done here.) + /// + /// + private static PlanNode PushSort(PlanNode node, IReadOnlyList keys) + { + if (node is JoinNode { Kind: JoinKind.Inner or JoinKind.Left or JoinKind.Cross } j + && keys.All(k => Qualifiers(k.Value) is { Count: > 0 } q && q.IsSubsetOf(SubtreeAliases(j.Left)))) + { + return j with { Left = PushSort(j.Left, keys) }; + } + + return new SortNode(node, keys); + } + + /// + /// Attaches a row bound to the sort at the top of , descending through the + /// row-preserving nodes above it. Returns the tree unchanged when there is no sort to bound. + /// + private static PlanNode BoundSort(PlanNode node, Expression limit) => node switch + { + SortNode s => s with { Limit = limit }, + ProjectNode p => p with { Input = BoundSort(p.Input, limit) }, + _ => node, + }; + + /// The aggregate function names recognised by the planner/executor. Includes the Access statistical + /// aggregates StDev/StDevP (sample/population standard deviation) and Var/VarP (sample/population variance); + /// the "StdDev"/"StdDevP" spellings are accepted as aliases. + internal static bool IsAggregate(string name) => + name.ToUpperInvariant() is "COUNT" or "SUM" or "AVG" or "MIN" or "MAX" or "FIRST" or "LAST" + or "STDEV" or "STDEVP" or "STDDEV" or "STDDEVP" or "VAR" or "VARP"; + + internal static bool HasAggregate(Expression e) => e switch + { + FunctionCall f when IsAggregate(f.Name) => true, + FunctionCall f => f.Arguments.Any(HasAggregate), + BinaryExpression b => HasAggregate(b.Left) || HasAggregate(b.Right), + UnaryExpression u => HasAggregate(u.Operand), + _ => false, + }; + + private static PlanNode PlanFrom(TableReference? from) => from switch + { + null => new SingleRowNode(), // FROM-less SELECT (e.g. `SELECT 2`) — one row, no columns + NamedTable t => new ScanNode(t.Name, t.Alias), + JoinTable j => new JoinNode(PlanFrom(j.Left), PlanFrom(j.Right), j.Kind, j.On), + SubqueryTable s => new DerivedTableNode(PlanStatement(s.Query), s.Alias), // alias optional (Access allows aliasless) + _ => throw new NotSupportedException($"Unsupported FROM source {from.GetType().Name}."), + }; + + /// + /// Places the WHERE clause's AND-conjuncts as low in the join tree as each can go — a single-table + /// predicate onto that table's scan, a two-table equality onto the join of those tables — instead of + /// filtering the full cross product on top. This is what makes an Access comma-join + /// (FROM a, b, c WHERE a.x=b.x AND …, planned as CROSS joins) tractable: the nested-loop join + /// evaluates the pushed predicate inside its loop, so intermediate results stay small. + /// + private static PlanNode PushPredicates(PlanNode joinTree, Expression where) + { + var conjuncts = new List(); + SplitAnd(where, conjuncts); + (PlanNode node, List unplaced) = Place(joinTree, conjuncts); + return unplaced.Count == 0 ? node : new FilterNode(node, CombineAnd(unplaced)); + } + + /// Pushes each conjunct that lies entirely within 's subtree as deep as it + /// fits; returns the rewritten node and the conjuncts that reference tables outside it (to bubble up). + private static (PlanNode Node, List Unplaced) Place(PlanNode node, List conjuncts) + { + HashSet aliases = SubtreeAliases(node); + var candidates = new List(); + var outside = new List(); + foreach (Expression c in conjuncts) + (Qualifiers(c) is { } q && q.Count > 0 && q.IsSubsetOf(aliases) ? candidates : outside).Add(c); + + // Only CROSS/INNER joins are safe to push below (an outer join's null-supplying side changes meaning). + if (node is JoinNode { Kind: JoinKind.Cross or JoinKind.Inner } j) + { + (PlanNode left, List afterLeft) = Place(j.Left, candidates); + (PlanNode right, List both) = Place(j.Right, afterLeft); + // `both` reference columns from each side → this is the lowest join that sees them: fold into ON. + Expression? on = j.On; + foreach (Expression c in both) on = on is null ? c : new BinaryExpression(BinaryOperator.And, on, c); + return (new JoinNode(left, right, j.Kind, on), outside); + } + + PlanNode placed = candidates.Count > 0 ? new FilterNode(node, CombineAnd(candidates)) : node; + return (placed, outside); + } + + /// The table aliases (or names) exposed by a plan subtree — a scan's alias/name, or the union + /// over a join. A derived table exposes only its own alias (its inner columns are already projected). + internal static HashSet SubtreeAliases(PlanNode node) => node switch + { + ScanNode s => new(StringComparer.OrdinalIgnoreCase) { s.Alias ?? s.Table }, + IndexSeekNode s => new(StringComparer.OrdinalIgnoreCase) { s.Alias ?? s.Table }, + DerivedTableNode d => d.Alias is { } a ? new(StringComparer.OrdinalIgnoreCase) { a } : new(StringComparer.OrdinalIgnoreCase), + IndexRangeSeekNode s => new(StringComparer.OrdinalIgnoreCase) { s.Alias ?? s.Table }, + JoinNode j => SubtreeAliases(j.Left).Union(SubtreeAliases(j.Right)).ToHashSet(StringComparer.OrdinalIgnoreCase), + HashJoinNode h => SubtreeAliases(h.Left).Union(SubtreeAliases(h.Right)).ToHashSet(StringComparer.OrdinalIgnoreCase), + FilterNode f => SubtreeAliases(f.Input), + // Pass-through nodes keep their input's aliases: they reshape or restrict rows without renaming a + // source. A ProjectNode in particular sits at the root of every planned SELECT, so omitting it made + // SubtreeAliases(PlanSelect(q)) report NO aliases at all — which silently defeated any caller asking + // "which aliases does this query introduce?" (ExistsSemiJoin declined every subquery because of it). + // A DerivedTableNode is deliberately NOT pass-through: above it only its own alias is visible. + ProjectNode p => SubtreeAliases(p.Input), + SortNode s => SubtreeAliases(s.Input), + LimitNode l => SubtreeAliases(l.Input), + DistinctNode d => SubtreeAliases(d.Input), + DistinctRowNode d => SubtreeAliases(d.Input), + // Grouping collapses rows but doesn't rename their source: the group scope still exposes the input's + // columns (which is what lets HAVING and the projection qualify them), so the aliases carry through. + AggregateNode a => SubtreeAliases(a.Input), + IndexScanNode s => new(StringComparer.OrdinalIgnoreCase) { s.Table }, + _ => new(StringComparer.OrdinalIgnoreCase), + }; + + /// The set of table qualifiers an expression's column references use, or + /// if it can't be safely placed — an unqualified column (ambiguous) or a subquery (references an inner + /// scope). Such a conjunct stays at the top filter. + private static HashSet? Qualifiers(Expression e) + { + var result = new HashSet(StringComparer.OrdinalIgnoreCase); + return Collect(e, result) ? result : null; + + static bool Collect(Expression e, HashSet acc) => e switch + { + ColumnReference { Table: { } t } => Add(acc, t), + ColumnReference => false, // unqualified — can't determine its table + LiteralExpression or ParameterExpression or SystemVariableExpression => true, + BinaryExpression b => Collect(b.Left, acc) && Collect(b.Right, acc), + UnaryExpression u => Collect(u.Operand, acc), + FunctionCall f => f.Arguments.All(a => Collect(a, acc)), + InListExpression il => Collect(il.Value, acc) && il.Items.All(a => Collect(a, acc)), + _ => false, // subqueries (scalar/EXISTS/IN), qualified star, etc. — don't push + }; + static bool Add(HashSet acc, string t) { acc.Add(t); return true; } + } + + private static void SplitAnd(Expression e, List into) + { + if (e is BinaryExpression { Operator: BinaryOperator.And } b) + { + SplitAnd(b.Left, into); + SplitAnd(b.Right, into); + } + else into.Add(e); + } + + private static Expression CombineAnd(IReadOnlyList conjuncts) => + conjuncts.Aggregate((a, b) => new BinaryExpression(BinaryOperator.And, a, b)); +} diff --git a/src/LibRed/LibRed.Engine/Planning/ViewExpander.cs b/src/LibRed/LibRed.Engine/Planning/ViewExpander.cs new file mode 100644 index 00000000..251818d5 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Planning/ViewExpander.cs @@ -0,0 +1,78 @@ +using LibRed.Sql.Ast; +using LibRed.Sql.Parsing; + +namespace LibRed.Engine.Planning; + +/// +/// Rewrites a query so that any reference to a view becomes a derived table (a subquery over the view's +/// stored SELECT) — the same shape the planner already handles for explicit subqueries. A view named in +/// a FROM clause, or inside a scalar/EXISTS subquery in any clause (projection, WHERE, GROUP BY, HAVING, +/// ORDER BY), is expanded. View SQL is reconstructed by the catalog (JetCatalog.Views) and parsed +/// here. Views nested inside other views are expanded recursively. +/// +internal static class ViewExpander +{ + public static SqlStatement Expand(SqlStatement statement, IReadOnlyDictionary views, ISqlParser parser) => + views.Count == 0 ? statement : Rewrite(statement, views, parser); + + private static SqlStatement Rewrite(SqlStatement statement, IReadOnlyDictionary views, ISqlParser parser) => statement switch + { + SelectStatement s => RewriteSelect(s, views, parser), + SetOperationStatement so => so with + { + Left = Rewrite(so.Left, views, parser), + Right = Rewrite(so.Right, views, parser), + }, + _ => statement, + }; + + private static SelectStatement RewriteSelect(SelectStatement select, IReadOnlyDictionary views, ISqlParser parser) + { + Expression Expr(Expression e) => RewriteExpression(e, views, parser); + return select with + { + From = select.From is null ? null : RewriteSource(select.From, views, parser), + Projection = select.Projection.Select(i => i with { Value = Expr(i.Value) }).ToList(), + Where = select.Where is { } w ? Expr(w) : null, + GroupBy = select.GroupBy.Select(Expr).ToList(), + Having = select.Having is { } h ? Expr(h) : null, + OrderBy = select.OrderBy.Select(o => o with { Value = Expr(o.Value) }).ToList(), + }; + } + + /// Rewrites views referenced inside expression subqueries (scalar / EXISTS), recursing through + /// the operator/function tree; leaf expressions are returned unchanged. + private static Expression RewriteExpression(Expression expr, IReadOnlyDictionary views, ISqlParser parser) => expr switch + { + ScalarSubquery s => new ScalarSubquery(RewriteSelect(s.Query, views, parser)), + ExistsExpression x => new ExistsExpression(RewriteSelect(x.Query, views, parser)), + InSubqueryExpression i => i with + { + Value = RewriteExpression(i.Value, views, parser), + Query = RewriteSelect(i.Query, views, parser), + }, + BinaryExpression b => b with + { + Left = RewriteExpression(b.Left, views, parser), + Right = RewriteExpression(b.Right, views, parser), + }, + UnaryExpression u => u with { Operand = RewriteExpression(u.Operand, views, parser) }, + FunctionCall f => f with { Arguments = f.Arguments.Select(a => RewriteExpression(a, views, parser)).ToList() }, + _ => expr, + }; + + private static TableReference RewriteSource(TableReference source, IReadOnlyDictionary views, ISqlParser parser) => source switch + { + NamedTable n when views.TryGetValue(n.Name, out string? sql) => + new SubqueryTable( + Rewrite(parser.ParseStatement(sql), views, parser), // expand views nested in the view + n.Alias ?? n.Name), + JoinTable j => j with + { + Left = RewriteSource(j.Left, views, parser), + Right = RewriteSource(j.Right, views, parser), + }, + SubqueryTable sq => sq with { Query = Rewrite(sq.Query, views, parser) }, + _ => source, + }; +} diff --git a/src/LibRed/LibRed.Engine/QueryEngine.cs b/src/LibRed/LibRed.Engine/QueryEngine.cs new file mode 100644 index 00000000..beb3461e --- /dev/null +++ b/src/LibRed/LibRed.Engine/QueryEngine.cs @@ -0,0 +1,260 @@ +using LibRed.Catalog; +using LibRed.IO; +using LibRed.Engine.Execution; +using LibRed.Engine.Plan; +using LibRed.Engine.Planning; +using LibRed.Engine.Schema; +using LibRed.Sql.Ast; +using LibRed.Sql.Binding; +using LibRed.Sql.Parsing; + +namespace LibRed.Engine; + +/// +/// The engine facade: wires the full pipeline parse → bind → plan → execute over an +/// open . This is what the ADO provider sits on top of. +/// +public sealed class QueryEngine +{ + private readonly JetDatabase _database; + private readonly ISqlParser _parser; + private readonly Binder _binder; + private readonly QueryPlanner _planner = new(); + private readonly SessionState _session = new(); + + public QueryEngine(JetDatabase database, ISqlParser? parser = null) + { + _database = database; + _parser = parser ?? new AntlrSqlParser(); + _binder = new Binder(new CatalogSchemaProvider(database.Catalog)); + } + + public JetDatabase Database => _database; + + /// Connection-scoped @@ROWCOUNT/@@IDENTITY state, shared across the statements + /// of a batch (which the ADO command layer splits and runs through this one engine). + public SessionState Session => _session; + + public ResultSet ExecuteQuery(string sql, IReadOnlyDictionary? parameters = null) + { + SqlStatement parsed = _parser.ParseStatement(sql); + if (parsed is ExecuteStatement exec) return ExecuteProcedure(exec, parameters).Rows; + SqlStatement ast = ViewExpander.Expand(parsed, _database.Catalog.Views, _parser); + BoundStatement bound = _binder.Bind(ast); + if (bound.Statement is TransactionControlStatement txnControl) + { + RunTransactionControl(txnControl.Kind); + return ResultSet.Empty; + } + var executor = new QueryExecutor(_database, parameters, _session); + return bound.Statement is SystemVariableSelectStatement sysSelect + ? executor.ExecuteSystemVariableSelect(sysSelect) + : executor.ExecuteQuery(PlanWithIndexes(bound)); + } + + public int ExecuteNonQuery(string sql, IReadOnlyDictionary? parameters = null) + => Execute(sql, parameters).RecordsAffected; + + /// Executes a stored action query (a CREATE PROCEDURE body that is not a SELECT) by name — the + /// read-back counterpart of . The query is reconstructed from + /// its catalog rows and run; a kind LibRed cannot execute (e.g. INSERT … SELECT) throws + /// , and an unknown name throws . + public int ExecuteStoredActionQuery(string name) + { + if (!_database.Catalog.ActionQueries.TryGetValue(name, out StoredActionQuery? query)) + throw new InvalidOperationException($"No stored action query named '{name}'."); + if (query.Sql is null) + throw new NotSupportedException(query.UnsupportedReason ?? $"Stored query '{name}' cannot be executed by LibRed yet."); + return ExecuteNonQuery(query.Sql); + } + + /// + /// Parses and binds once, then routes by statement kind: a query (SELECT / set operation) + /// is planned and executed into a ; a DML/DDL statement (INSERT, + /// CREATE TABLE) runs directly against storage and reports rows affected. This is the + /// single entry point the ADO layer uses so that ExecuteReader works for *any* statement — + /// EF Core executes inserts through the reader path to read results back. + /// + public CommandResult Execute(string sql, IReadOnlyDictionary? parameters = null) + { + SqlStatement parsed = _parser.ParseStatement(sql); + if (parsed is ExecuteStatement exec) return ExecuteProcedure(exec, parameters); + SqlStatement ast = ViewExpander.Expand(parsed, _database.Catalog.Views, _parser); + BoundStatement bound = _binder.Bind(ast); + return Route(bound.Statement, parameters); + } + + /// Drives the nested-transaction controller on the shared — the same L2 + /// the ADO front door uses, so the two can't open parallel transactions. + private void RunTransactionControl(TransactionControlKind kind) + { + switch (kind) + { + case TransactionControlKind.Begin: _database.BeginNested(); break; + case TransactionControlKind.Commit: _database.CommitNested(); break; + case TransactionControlKind.Rollback: _database.RollbackNested(); break; + } + } + + /// Routes an already-bound statement to the right executor (system-variable select, IF…THEN, + /// query, or a DML/DDL non-query). Split out so IF…THEN can run its guarded body through the same path. + private CommandResult Route(SqlStatement statement, IReadOnlyDictionary? parameters) + { + switch (statement) + { + case SystemVariableSelectStatement sysSelect: + return new CommandResult( + new QueryExecutor(_database, parameters, _session).ExecuteSystemVariableSelect(sysSelect), -1); + case IfThenStatement ifThen: + return ExecuteIfThen(ifThen, parameters); + case SelectStatement or SetOperationStatement: + return new CommandResult( + new QueryExecutor(_database, parameters, _session).ExecuteQuery(PlanWithIndexes(new BoundStatement(statement))), -1); + case TransactionControlStatement txnControl: + // Transaction control manages the transaction itself — it must NOT go through the implicit + // per-statement wrap below (which would open/commit a transaction around it). + RunTransactionControl(txnControl.Kind); + return new CommandResult(ResultSet.Empty, 0); + default: + return ExecuteWritingStatement(statement, parameters); + } + } + + /// + /// Runs a DML/DDL statement so that it is atomic on its own: with no user transaction open it runs inside + /// an implicit transaction (commit on success, roll back on any failure — a late constraint/I/O error can + /// never leave a half-written row, index, LVAL chain, or catalog entry); inside a user transaction it runs + /// under a savepoint, so a statement failure undoes just that statement and leaves the user's transaction + /// intact. Only writing statements reach here — reads never open a transaction. + /// + private CommandResult ExecuteWritingStatement(SqlStatement statement, IReadOnlyDictionary? parameters) + { + int Run() => new StatementExecutor(_database, parameters, _parser, _session).Execute(statement); + + if (_database.InTransaction) + { + Savepoint savepoint = _database.CreateSavepoint(); + try + { + int affected = Run(); + _database.ReleaseSavepoint(savepoint); + return new CommandResult(ResultSet.Empty, affected); + } + catch + { + _database.RollbackToSavepoint(savepoint); + throw; + } + } + + _database.BeginTransaction(); + try + { + int affected = Run(); + _database.Commit(flush: false); // autocommit: durability stays on Dispose, as before transactions existed + return new CommandResult(ResultSet.Empty, affected); + } + catch + { + _database.Rollback(); + throw; + } + } + + /// Evaluates the condition subquery; runs the guarded THEN statement only when the EXISTS test holds + /// (or, for NOT EXISTS, when it doesn't). @@ROWCOUNT reflects the THEN, or 0 when the guard skips it. + private CommandResult ExecuteIfThen(IfThenStatement ifThen, IReadOnlyDictionary? parameters) + { + var condPlan = IndexSelection.Apply(QueryPlanner.PlanSelect(ifThen.Condition), _database.Catalog); + bool hasRows = new QueryExecutor(_database, parameters, _session).ExecuteQuery(condPlan).Rows.Any(); + if (hasRows == ifThen.Negated) + return new CommandResult(ResultSet.Empty, 0); // guard not satisfied — skip the body + return Route(ifThen.Then, parameters); + } + + /// Plans a bound statement, then applies index selection (turning scans into index seeks where a + /// predicate allows). + private PlanNode PlanWithIndexes(BoundStatement bound) => + IndexSelection.Apply(_planner.Plan(bound), _database.Catalog); + + /// The optimised plan for a query — exposed for tests to assert the chosen access path/strategy + /// (e.g. that an unindexed equi-join becomes a hash join). + internal PlanNode PlanFor(string sql) + { + SqlStatement ast = ViewExpander.Expand(_parser.ParseStatement(sql), _database.Catalog.Views, _parser); + return PlanWithIndexes(_binder.Bind(ast)); + } + + /// + /// Runs an EXECUTE|EXEC procedure arg, …: resolves the stored procedure/query by name, binds the + /// positional argument values to its declared parameters (in declaration order), and runs it — a stored + /// SELECT returns its rows, a stored action query (INSERT/DDL) returns its rows-affected count. + /// + private CommandResult ExecuteProcedure(ExecuteStatement exec, IReadOnlyDictionary? parameters) + { + JetCatalog catalog = _database.Catalog; + var bag = new ParameterBag(parameters); + var executor = new QueryExecutor(_database, parameters, _session); + var evaluator = new ExpressionEvaluator(new EvalScope([], [], null), executor, bag, _session); + + IReadOnlyList paramNames = catalog.QueryParameters.TryGetValue(exec.Procedure, out var ns) + ? ns : []; + + // Access EXEC arguments take three shapes (EF emits all of them): + // procParam = value → a NAMED argument (bind the proc's named parameter to the value) + // name → a bare identifier REFERENCING a supplied command parameter (`EXEC p CustomerID`) + // literal / @param → a positional value + var named = new Dictionary(StringComparer.OrdinalIgnoreCase); + var positional = new List(); + foreach (Expression arg in exec.Arguments) + { + switch (arg) + { + case BinaryExpression { Operator: BinaryOperator.Equal, Left: ColumnReference { Table: null } target } eq: + named[target.Column] = evaluator.Evaluate(eq.Right); + break; + case ColumnReference { Table: null } paramRef: + positional.Add(bag.Resolve(paramRef.Column)); + break; + default: + positional.Add(evaluator.Evaluate(arg)); + break; + } + } + + Dictionary args; + if (named.Count > 0) + { + if (positional.Count > 0) + throw new InvalidOperationException( + $"Procedure '{exec.Procedure}' was executed with a mix of named and positional arguments."); + args = named; // keyed by the procedure's parameter names directly + } + else + { + if (positional.Count != paramNames.Count) + throw new InvalidOperationException( + $"Procedure '{exec.Procedure}' declares {paramNames.Count} parameter(s) but was executed with {positional.Count} argument(s)."); + args = new Dictionary(StringComparer.OrdinalIgnoreCase); + for (int i = 0; i < paramNames.Count; i++) args[paramNames[i]] = positional[i]; + } + + // A stored SELECT (with its PARAMETERS clause) → rows; a stored action query → rows-affected. + if (catalog.Views.TryGetValue(exec.Procedure, out string? viewSql)) + return Execute(viewSql, args); + + if (catalog.ActionQueries.TryGetValue(exec.Procedure, out StoredActionQuery? action)) + { + if (action.Sql is null) + throw new NotSupportedException( + action.UnsupportedReason ?? $"Stored query '{exec.Procedure}' cannot be executed by LibRed yet."); + return new CommandResult(ResultSet.Empty, ExecuteNonQuery(action.Sql, args)); + } + + throw new InvalidOperationException($"No stored procedure or query named '{exec.Procedure}'."); + } +} + +/// The outcome of : query rows (with +/// = -1) or an empty set with the DML rows-affected count. +public sealed record CommandResult(ResultSet Rows, int RecordsAffected); diff --git a/src/LibRed/LibRed.Engine/Schema/CatalogSchemaProvider.cs b/src/LibRed/LibRed.Engine/Schema/CatalogSchemaProvider.cs new file mode 100644 index 00000000..c3578fc9 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Schema/CatalogSchemaProvider.cs @@ -0,0 +1,59 @@ +using LibRed.Catalog; +using LibRed.Sql.Binding; + +namespace LibRed.Engine.Schema; + +/// +/// Adapts the Core to the SQL binder's . +/// This is the inverted dependency in action: LibRed.Sql defines the interface, +/// LibRed.Engine supplies the storage-backed implementation. +/// +public sealed class CatalogSchemaProvider(JetCatalog catalog) : ISchemaProvider +{ + private readonly JetCatalog _catalog = catalog; + + public ITableSchema? GetTable(string name) + { + // The magic INFORMATION_SCHEMA. tables are virtual (no catalog TableDef) — expose a synthetic + // schema so binding validates; the executor materialises their rows from the catalog. + if (InformationSchema.IsInformationSchema(name)) + return new InformationSchemaTable(name); + + TableDef? def = _catalog.FindTable(name); + return def is null ? null : new TableSchema(def); + } + + private sealed class InformationSchemaTable(string name) : ITableSchema + { + public string Name => name; + public IReadOnlyList Columns { get; } = + InformationSchema.ColumnsOf(name).Zip(InformationSchema.ColumnTypesOf(name), + (column, type) => (IColumnSchema)new VirtualColumn(column, type)).ToList(); + public IColumnSchema? FindColumn(string col) => + Columns.FirstOrDefault(c => string.Equals(c.Name, col, StringComparison.OrdinalIgnoreCase)); + } + + private sealed class VirtualColumn(string name, Type clrType) : IColumnSchema + { + public string Name => name; + public bool IsNullable => true; + public Type ClrType => clrType; + } + + private sealed class TableSchema(TableDef def) : ITableSchema + { + public string Name => def.Name; + public IReadOnlyList Columns { get; } = + def.Columns.Select(c => (IColumnSchema)new ColumnSchema(c)).ToList(); + + public IColumnSchema? FindColumn(string name) => + Columns.FirstOrDefault(c => string.Equals(c.Name, name, StringComparison.OrdinalIgnoreCase)); + } + + private sealed class ColumnSchema(ColumnDef col) : IColumnSchema + { + public string Name => col.Name; + public bool IsNullable => col.IsNullable; + public Type ClrType => JetClrTypeMap.ToClrType(col.Type); + } +} diff --git a/src/LibRed/LibRed.Engine/Schema/InformationSchema.cs b/src/LibRed/LibRed.Engine/Schema/InformationSchema.cs new file mode 100644 index 00000000..95923aab --- /dev/null +++ b/src/LibRed/LibRed.Engine/Schema/InformationSchema.cs @@ -0,0 +1,169 @@ +using LibRed.Catalog; + +namespace LibRed.Engine.Schema; + +/// +/// Exposes the Jet-flavoured INFORMATION_SCHEMA views as engine-native virtual tables backed by the +/// . EF's migrations query these as magic dotted-name tables — e.g. +/// SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = '…' — which EFCore.Jet's data layer +/// intercepts and synthesises from ADOX/DAO. LibRed owns its engine, so it answers them directly from the +/// catalog: cross-platform, and composes naturally with WHERE / EXISTS (no command-string interception). +/// +/// The seven views and their column sets match EFCore.Jet's JetInformationSchema / SchemaTables +/// exactly, so any query EF builds over them reads the columns it expects. +/// +public static class InformationSchema +{ + /// The magic view names, without the INFORMATION_SCHEMA. prefix (case-insensitive). + private static readonly HashSet Views = new(StringComparer.OrdinalIgnoreCase) + { + "TABLES", "COLUMNS", "INDEXES", "INDEX_COLUMNS", "RELATIONS", "RELATION_COLUMNS", "CHECK_CONSTRAINTS", + }; + + private const string Prefix = "INFORMATION_SCHEMA."; + + /// True if is one of the magic INFORMATION_SCHEMA.<view> names. + public static bool IsInformationSchema(string tableName) => + tableName.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase) + && Views.Contains(tableName[Prefix.Length..]); + + /// The column names of the given view, in order (for the binder's synthetic schema). + public static IReadOnlyList ColumnsOf(string tableName) => View(tableName) switch + { + "TABLES" => ["TABLE_NAME", "TABLE_TYPE", "VALIDATION_RULE", "VALIDATION_TEXT"], + "COLUMNS" => ["TABLE_NAME", "COLUMN_NAME", "ORDINAL_POSITION", "DATA_TYPE", "IS_NULLABLE", + "CHARACTER_MAXIMUM_LENGTH", "NUMERIC_PRECISION", "NUMERIC_SCALE", "COLUMN_DEFAULT", + "VALIDATION_RULE", "VALIDATION_TEXT", "IDENTITY_SEED", "IDENTITY_INCREMENT"], + "INDEXES" => ["TABLE_NAME", "INDEX_NAME", "INDEX_TYPE", "IS_NULLABLE", "IGNORES_NULLS"], + "INDEX_COLUMNS" => ["TABLE_NAME", "INDEX_NAME", "ORDINAL_POSITION", "COLUMN_NAME", "IS_DESCENDING"], + "RELATIONS" => ["RELATION_NAME", "REFERENCING_TABLE_NAME", "PRINCIPAL_TABLE_NAME", "RELATION_TYPE", + "ON_DELETE", "ON_UPDATE", "IS_ENFORCED", "IS_INHERITED"], + "RELATION_COLUMNS" => ["RELATION_NAME", "REFERENCING_COLUMN_NAME", "PRINCIPAL_COLUMN_NAME", "ORDINAL_POSITION"], + "CHECK_CONSTRAINTS" => ["TABLE_NAME", "CONSTRAINT_NAME", "CHECK_CLAUSE"], + _ => throw new InvalidOperationException($"'{tableName}' is not an INFORMATION_SCHEMA view."), + }; + + /// Declared CLR types corresponding to . Nullable schema values still + /// report their underlying type, as ADO.NET metadata does; row nulls are represented by DBNull. + public static IReadOnlyList ColumnTypesOf(string tableName) => View(tableName) switch + { + "TABLES" => [typeof(string), typeof(string), typeof(string), typeof(string)], + "COLUMNS" => [typeof(string), typeof(string), typeof(int), typeof(string), typeof(bool), + typeof(int), typeof(int), typeof(int), typeof(string), typeof(string), typeof(string), + typeof(int), typeof(int)], + "INDEXES" => [typeof(string), typeof(string), typeof(string), typeof(bool), typeof(bool)], + "INDEX_COLUMNS" => [typeof(string), typeof(string), typeof(int), typeof(string), typeof(bool)], + "RELATIONS" => [typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), + typeof(string), typeof(bool), typeof(bool)], + "RELATION_COLUMNS" => [typeof(string), typeof(string), typeof(string), typeof(int)], + "CHECK_CONSTRAINTS" => [typeof(string), typeof(string), typeof(string)], + _ => throw new InvalidOperationException($"'{tableName}' is not an INFORMATION_SCHEMA view."), + }; + + /// The rows of the given view, materialised from the catalog (one object?[] per row, columns + /// in order). + public static IReadOnlyList Rows(string tableName, JetCatalog catalog) + { + // All views cover the same set — user tables PLUS the '#Dual' internal helper (INFORMATION_SCHEMA + // surfaces it the way EFCore.Jet's AdoxSchema does), but not MSys*/temp system tables — matching how + // EFCore.Jet applies its MSys filter uniformly across every schema query. + var tables = catalog.Tables.Where(t => !t.IsSystem || t.Name.StartsWith('#')).ToList(); + var rows = new List(); + switch (View(tableName)) + { + case "TABLES": + // Same table set as every other view — user tables plus the '#Dual' internal helper, no + // MSys*/temp system tables — each classified by TABLE_TYPE. Consumers filter by type anyway + // (e.g. the creator's "has tables" check is TABLE_TYPE IN ('BASE TABLE','VIEW')). + foreach (TableDef t in tables) + rows.Add([t.Name, TableType(t), t.ValidationRule, t.ValidationText]); + break; + + case "COLUMNS": + foreach (TableDef t in tables) + foreach (ColumnDef c in t.Columns) + // DATA_TYPE / IS_NULLABLE / CHARACTER_MAXIMUM_LENGTH come from the shared JetStoreType so + // they always agree with the scaffolder. Precision/Scale are cast to int (they are byte on + // ColumnDef) so a consumer's GetInt32 can read them. + // ORDINAL_POSITION is 0-based, matching EFCore.Jet's AdoxSchema.GetColumns (ADOX reports + // the OpenSchema position minus one; consumers only ORDER BY it). + rows.Add([t.Name, c.Name, c.Index, JetStoreType.TypeName(c), JetStoreType.IsNullable(c), + JetStoreType.MaxLength(c), c.Type == JetDataType.FixedPoint ? (int)c.Precision : (object?)null, + c.Type == JetDataType.FixedPoint ? (int)c.Scale : (object?)null, c.DefaultValue, + c.ValidationRule, c.ValidationText, c.IsAutoNumber ? c.Seed : (object?)null, + c.IsAutoNumber ? c.Increment : (object?)null]); + break; + + case "INDEXES": + foreach (TableDef t in tables) + foreach (IndexDef ix in t.Indexes) + // IS_NULLABLE / IGNORES_NULLS mirror AdoxSchema.GetIndexes' AllowNullsEnum derivation, + // NOT uniqueness: an index is non-nullable only when it DISALLOW NULLs (Required, flag + // 0x08 = adIndexNullsDisallow); IGNORES_NULLS is the Ignore-nulls state (flag 0x02) and, + // as ADOX gates it, is only meaningful when the index is otherwise nullable. + rows.Add([t.Name, ix.Name, IndexType(ix), !ix.Required, !ix.Required && ix.IgnoreNulls]); + break; + + case "INDEX_COLUMNS": + foreach (TableDef t in tables) + foreach (IndexDef ix in t.Indexes) + // ORDINAL_POSITION is 0-based here too, matching AdoxSchema.GetIndexColumns (which uses the + // loop index k directly). RELATION_COLUMNS below stays 1-based, as ADOX does there. + for (int i = 0; i < ix.Columns.Count; i++) + rows.Add([t.Name, ix.Name, i, ix.Columns[i].Column.Name, !ix.Columns[i].Ascending]); + break; + + case "RELATIONS": + foreach (ForeignKey fk in catalog.Relationships) + // RELATION_TYPE: EFCore.Jet's live provider is PreciseSchema, which overrides ADOX's value + // with DAO's GetRelationTypes — "ONE" for a one-to-one relationship, else "MANY". This is + // NOT a grbit flag (MSysRelationships.grbit only carries enforce/cascade/set-null); Access + // encodes one-to-one by making the child-side FK backing index UNIQUE (a 1:many child index + // is non-unique). So derive it from that index's uniqueness, which LibRed already models. + rows.Add([fk.Name, fk.Table, fk.ReferencedTable, RelationType(fk, catalog), + RefAction(fk.CascadeDelete, fk.DeleteSetNull), RefAction(fk.CascadeUpdate, fk.UpdateSetNull), + fk.IsEnforced, fk.IsInherited]); + break; + + case "RELATION_COLUMNS": + foreach (ForeignKey fk in catalog.Relationships) + for (int i = 0; i < fk.Columns.Count; i++) + rows.Add([fk.Name, fk.Columns[i].Column, fk.Columns[i].ReferencedColumn, i + 1]); + break; + + case "CHECK_CONSTRAINTS": + foreach (TableDef t in tables) + foreach ((string name, string expr) in t.CheckConstraints) + rows.Add([t.Name, name, expr]); + break; + } + return rows; + } + + private static string View(string tableName) => tableName[Prefix.Length..].ToUpperInvariant(); + + // Classify TABLE_TYPE as EFCore.Jet's AdoxSchema / SchemaProvider does: a '#'-prefixed helper (#Dual) is an + // INTERNAL TABLE, an MSys* table is a SYSTEM TABLE, everything else is a user BASE TABLE. + private static string TableType(TableDef t) => + t.Name.StartsWith('#') ? "INTERNAL TABLE" + : t.Name.StartsWith("MSys", StringComparison.OrdinalIgnoreCase) ? "SYSTEM TABLE" + : "BASE TABLE"; + + private static string IndexType(IndexDef ix) => ix.IsPrimaryKey ? "PRIMARY" : ix.IsUnique ? "UNIQUE" : "INDEX"; + + private static string RefAction(bool cascade, bool setNull) => cascade ? "CASCADE" : setNull ? "SET NULL" : "NO ACTION"; + + /// RELATION_TYPE — "ONE" for a one-to-one relationship, else "MANY", as DAO reports it. A + /// relationship is one-to-one when the child (referencing) table's backing index over the FK columns is + /// UNIQUE; a one-to-many child index is non-unique (see system-catalog.md). Defaults to "MANY" when no + /// matching child index is found (e.g. an unenforced FK that Access left unindexed). + private static string RelationType(ForeignKey fk, JetCatalog catalog) + { + TableDef? child = catalog.Tables.FirstOrDefault(t => t.Name.Equals(fk.Table, StringComparison.OrdinalIgnoreCase)); + var fkColumns = fk.Columns.Select(c => c.Column).ToHashSet(StringComparer.OrdinalIgnoreCase); + IndexDef? backing = child?.Indexes.FirstOrDefault(ix => + ix.Columns.Count == fkColumns.Count + && ix.Columns.All(c => fkColumns.Contains(c.Column.Name))); + return backing?.IsUnique == true ? "ONE" : "MANY"; + } +} diff --git a/src/LibRed/LibRed.Engine/Schema/JetClrTypeMap.cs b/src/LibRed/LibRed.Engine/Schema/JetClrTypeMap.cs new file mode 100644 index 00000000..b9930ec4 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Schema/JetClrTypeMap.cs @@ -0,0 +1,27 @@ +using LibRed.Catalog; + +namespace LibRed.Engine.Schema; + +/// Maps Jet/ACE column types to the CLR types the engine exposes. +public static class JetClrTypeMap +{ + public static Type ToClrType(JetDataType type) => type switch + { + JetDataType.Boolean => typeof(bool), + JetDataType.Byte => typeof(byte), + JetDataType.Int16 => typeof(short), + JetDataType.Int32 => typeof(int), + JetDataType.Int64 => typeof(long), + JetDataType.Currency => typeof(decimal), + JetDataType.Single => typeof(float), + JetDataType.Double => typeof(double), + JetDataType.DateTime => typeof(DateTime), + JetDataType.DateTimeExtended => typeof(DateTime), + JetDataType.Binary or JetDataType.Ole => typeof(byte[]), + JetDataType.Text or JetDataType.Memo => typeof(string), + JetDataType.Guid => typeof(Guid), + JetDataType.FixedPoint => typeof(decimal), + JetDataType.Complex => typeof(object), + _ => typeof(object), + }; +} diff --git a/src/LibRed/LibRed.Engine/Schema/JetStoreType.cs b/src/LibRed/LibRed.Engine/Schema/JetStoreType.cs new file mode 100644 index 00000000..3f7399a5 --- /dev/null +++ b/src/LibRed/LibRed.Engine/Schema/JetStoreType.cs @@ -0,0 +1,68 @@ +using LibRed.Catalog; + +namespace LibRed.Engine.Schema; + +/// +/// The single source for a column's SQL store-type presentation, shared by the two consumers that must agree: +/// LibRed's views (DATA_TYPE / IS_NULLABLE / CHARACTER_MAXIMUM_LENGTH) and the +/// database-first scaffolder (LibRedDatabaseModelFactory, which composes DatabaseColumn.StoreType). +/// Duplicating these derivations is exactly how the two diverged before — the store-type name map and the +/// "an AutoNumber/counter is never nullable" rule live here once. Mirrors EFCore.Jet's +/// AdoxSchema.GetDataTypeString (bare name + separate facet columns). +/// +public static class JetStoreType +{ + /// An AutoNumber (counter) column is never nullable — its non-null behaviour comes from the + /// AutoNumber flag, not the LvProp Required property (verified; matches Access/DAO). + public static bool IsNullable(ColumnDef column) => !column.IsAutoNumber && column.IsNullable; + + /// The bare type name (no facets) — INFORMATION_SCHEMA.COLUMNS.DATA_TYPE, with length / + /// precision / scale reported in their own columns. Mirrors AdoxSchema.GetDataTypeString. + public static string TypeName(ColumnDef column) => column.Type switch + { + JetDataType.Boolean => "bit", + JetDataType.Byte => "byte", + JetDataType.Int16 => "smallint", + JetDataType.Int32 => column.IsAutoNumber ? "counter" : "integer", + JetDataType.Int64 => "bigint", + JetDataType.Single => "single", + JetDataType.Double => "double", + JetDataType.Currency => "currency", + JetDataType.DateTime => "datetime", + JetDataType.DateTimeExtended => "datetime2", + JetDataType.Guid => "guid", + JetDataType.FixedPoint => "decimal", + // Text keeps its fixed/variable distinction (adChar/adVarChar → char/varchar). Binary does NOT: ADOX + // reports every binary column as adVarBinary (it never surfaces fixed adBinary), so a fixed binary column + // collapses to varbinary — match that, or INFORMATION_SCHEMA/scaffolding disagree with EFCore.Jet's output. + JetDataType.Text => column.IsFixedLength ? "char" : "varchar", + JetDataType.Binary => "varbinary", + JetDataType.Memo => "longchar", + JetDataType.Ole => "longbinary", + _ => "varchar", + }; + + /// Length facet: characters for text (on-disk bytes are 2 per char), bytes for binary; null for + /// everything else. This is CHARACTER_MAXIMUM_LENGTH. + public static int? MaxLength(ColumnDef column) => column.Type switch + { + JetDataType.Text => Math.Max(1, column.Length / 2), + JetDataType.Binary => Math.Max(1, column.Length), + _ => null, + }; + + /// The full store type EF's type mapping consumes — bare name plus its facet suffix, e.g. + /// varchar(255), decimal(18,0), counter. Built from so it can + /// never disagree with the INFORMATION_SCHEMA presentation. No space after the precision/scale comma — + /// EF's own store types are unspaced (SQL Server, and what the scaffolding tests expect). + public static string StoreType(ColumnDef column) + { + string name = TypeName(column); + return column.Type switch + { + JetDataType.FixedPoint => $"{name}({column.Precision},{column.Scale})", + JetDataType.Text or JetDataType.Binary => $"{name}({MaxLength(column)})", + _ => name, + }; + } +} diff --git a/src/LibRed/LibRed.Engine/SessionState.cs b/src/LibRed/LibRed.Engine/SessionState.cs new file mode 100644 index 00000000..dbf81c5d --- /dev/null +++ b/src/LibRed/LibRed.Engine/SessionState.cs @@ -0,0 +1,28 @@ +namespace LibRed.Engine; + +/// +/// Connection-scoped runtime state that outlives a single statement, backing the SQL system +/// variables @@ROWCOUNT and @@IDENTITY. One instance lives on a +/// (which is created once per open connection), so the values a statement sets are visible to the next +/// statement on the same connection — exactly what EF Core's insert-then-select round-trip relies on. +/// +/// +/// Unlike SQL Server, Jet/ACE @@IDENTITY is *connection*-scoped, not table-scoped: it holds the +/// last AutoNumber generated on the connection regardless of table, and is overwritten by the next +/// insert that generates one. So it must be read immediately after the insert, before another insert +/// clobbers it — which is exactly why EF emits the guarded SELECT in the same batch. +/// +public sealed class SessionState +{ + /// Rows affected by the most recent DML statement (@@ROWCOUNT). + public int RowCount { get; set; } + + /// The last AutoNumber generated on this connection (@@IDENTITY), or null if + /// none has been generated yet. + public object? LastIdentity { get; set; } + + /// The 24-bit VBA Rnd() generator seed (connection-scoped, VBA default 0x50000). Kept + /// here so a Rnd() sequence is deterministic across the connection — matching ACE, whose JES has no + /// Randomize to reseed it. + public uint RandSeed { get; set; } = 0x50000; +} diff --git a/src/LibRed/LibRed.Sql/Ast/Clauses.cs b/src/LibRed/LibRed.Sql/Ast/Clauses.cs new file mode 100644 index 00000000..977acc8a --- /dev/null +++ b/src/LibRed/LibRed.Sql/Ast/Clauses.cs @@ -0,0 +1,24 @@ +namespace LibRed.Sql.Ast; + +/// Base type for a source of rows in a FROM clause. +public abstract record TableReference : SqlNode; + +/// A named base table, optionally aliased. +public sealed record NamedTable(string Name, string? Alias) : TableReference; + +/// A derived table (subquery) in the FROM clause. The query is any +/// query — a or a (e.g. a UNION). +public sealed record SubqueryTable(SqlStatement Query, string? Alias) : TableReference; + +public enum JoinKind { Inner, Left, Right, Cross } + +/// A join between two table references with an ON condition. +public sealed record JoinTable( + TableReference Left, + TableReference Right, + JoinKind Kind, + Expression? On) : TableReference; + +public enum SortDirection { Ascending, Descending } + +public sealed record OrderByItem(Expression Value, SortDirection Direction) : SqlNode; diff --git a/src/LibRed/LibRed.Sql/Ast/Expressions.cs b/src/LibRed/LibRed.Sql/Ast/Expressions.cs new file mode 100644 index 00000000..574cea0f --- /dev/null +++ b/src/LibRed/LibRed.Sql/Ast/Expressions.cs @@ -0,0 +1,61 @@ +namespace LibRed.Sql.Ast; + +/// Base type for scalar/boolean expressions. +public abstract record Expression : SqlNode; + +/// A literal constant (number, string, date, boolean or null). +public sealed record LiteralExpression(object? Value) : Expression; + +/// A reference to a column, optionally table-qualified. +public sealed record ColumnReference(string? Table, string Column) : Expression; + +/// A positional or named query parameter (e.g. ? or @p). +public sealed record ParameterExpression(string Name) : Expression; + +/// A connection-scoped system variable: @@ROWCOUNT (rows affected by the previous +/// statement) or @@IDENTITY (the last AutoNumber generated on this connection). EF Core emits +/// these to read a store-generated key back after an INSERT. is the bare name +/// without the leading @@. +public sealed record SystemVariableExpression(string Name) : Expression; + +/// * in a projection or aggregate. +public sealed record StarExpression : Expression; + +/// A table-qualified star, Table.* — all columns of that source. Expanded during +/// projection into the input columns whose source is . +public sealed record QualifiedStarExpression(string Table) : Expression; + +public enum BinaryOperator +{ + Add, Subtract, Multiply, Divide, Modulo, IntDivide, Power, Concat, + Equal, NotEqual, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, + And, Or, Like, In, + BitAnd, BitOr, BitXor, // Access bitwise operators BAND / BOR / BXOR (integers only) +} + +public sealed record BinaryExpression(BinaryOperator Operator, Expression Left, Expression Right) : Expression; + +public enum UnaryOperator { Negate, Not, IsNull, IsNotNull, BitNot } + +public sealed record UnaryExpression(UnaryOperator Operator, Expression Operand) : Expression; + +/// A scalar/aggregate function call, e.g. Count(*), IIf(...), Format(...). +/// is set for the ANSI aggregate form COUNT(DISTINCT col) — the aggregate +/// runs over the distinct set of the argument's values (not distinct rows). +public sealed record FunctionCall(string Name, IReadOnlyList Arguments, bool Distinct = false) : Expression; + +/// A subquery used as a scalar value: (SELECT … ). May correlate to the outer query. +public sealed record ScalarSubquery(SelectStatement Query) : Expression; + +/// EXISTS (SELECT … ): true when the (possibly correlated) subquery returns any row. +public sealed record ExistsExpression(SelectStatement Query) : Expression; + +/// x [NOT] IN (SELECT … ): membership of in the first column of a +/// (possibly correlated) subquery, with SQL three-valued semantics. +public sealed record InSubqueryExpression(Expression Value, SelectStatement Query, bool Negated) : Expression; + +/// x [NOT] IN (a, b, …) over a literal value list, kept as a flat node (rather than lowered to a +/// deep OR-chain) so a very large list — EF Core inlines a "huge number of values" Contains as thousands +/// of constants — evaluates iteratively instead of recursing once per item and overflowing the stack. Same SQL +/// three-valued semantics as . +public sealed record InListExpression(Expression Value, IReadOnlyList Items, bool Negated) : Expression; diff --git a/src/LibRed/LibRed.Sql/Ast/SqlNode.cs b/src/LibRed/LibRed.Sql/Ast/SqlNode.cs new file mode 100644 index 00000000..8589e9f8 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Ast/SqlNode.cs @@ -0,0 +1,9 @@ +namespace LibRed.Sql.Ast; + +/// +/// Base type for every node in the SQL abstract syntax tree. The AST is deliberately +/// decoupled from the ANTLR parse tree: the parser lowers the concrete syntax tree +/// into these nodes so the rest of the engine never depends on the grammar. +/// New SQL features are added by introducing new node types here. +/// +public abstract record SqlNode; diff --git a/src/LibRed/LibRed.Sql/Ast/Statements.cs b/src/LibRed/LibRed.Sql/Ast/Statements.cs new file mode 100644 index 00000000..081ec501 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Ast/Statements.cs @@ -0,0 +1,261 @@ +namespace LibRed.Sql.Ast; + +/// Base type for top-level SQL statements. +public abstract record SqlStatement : SqlNode; + +/// Which transaction-control action a performs. +public enum TransactionControlKind { Begin, Commit, Rollback } + +/// A transaction-control statement: BEGIN/COMMIT/ROLLBACK [TRANSACTION|WORK]. +/// Manages the transaction rather than running inside one. +public sealed record TransactionControlStatement(TransactionControlKind Kind) : SqlStatement; + +/// A single item in a SELECT projection, optionally aliased. +public sealed record SelectItem(Expression Value, string? Alias) : SqlNode; + +public sealed record SelectStatement( + IReadOnlyList Projection, + bool IsSelectStar, + // Null for a FROM-less SELECT (e.g. `SELECT 2`): a single-row source that evaluates the projection once. + TableReference? From, + Expression? Where, + IReadOnlyList GroupBy, + Expression? Having, + IReadOnlyList OrderBy, + Expression? Top, + bool Distinct = false, + // DISTINCTROW: dedupe on the underlying rows of the output-contributing tables (Access-specific). + bool DistinctRow = false, + // TOP n PERCENT: Top is a percentage (0–100) of the row count rather than an absolute count. + bool TopPercent = false) : SqlStatement; + +/// EXECUTE|EXEC procedure [arg, …] — invokes a stored procedure/query by name, passing +/// positional argument values that bind to its declared parameters (in declaration order). +public sealed record ExecuteStatement(string Procedure, IReadOnlyList Arguments) : SqlStatement; + +/// Jet's conditional DDL IF [NOT] EXISTS (<condition>) THEN <then> — EF emits it for +/// idempotent migrations (e.g. create the history table only if it isn't already in INFORMATION_SCHEMA.TABLES). +/// runs when the (possibly correlated) condition subquery returns a row — or, when +/// , when it returns none. +public sealed record IfThenStatement(bool Negated, SelectStatement Condition, SqlStatement Then) : SqlStatement; + +/// A FROM-less SELECT @@IDENTITY / SELECT @@ROWCOUNT (a comma list of system +/// variables only). ACE allows these without a FROM clause; they yield a single row. The projection +/// items' are all . +public sealed record SystemVariableSelectStatement(IReadOnlyList Projection) : SqlStatement; + +public enum SetOperator { Union, UnionAll, Intersect, Except } + +/// +/// A set operation combining two queries. UNION dedupes, UNION ALL keeps duplicates, +/// INTERSECT keeps rows in both, EXCEPT keeps rows in the left not in the right. +/// +public sealed record SetOperationStatement( + SqlStatement Left, + SetOperator Operator, + SqlStatement Right) : SqlStatement; + +/// An INSERT. is the DEFAULT VALUES form (no column or +/// value list): a single row where every column takes its default / AutoNumber; +/// is empty and holds one empty row. +public sealed record InsertStatement( + string Table, + IReadOnlyList Columns, + IReadOnlyList> Rows, + bool DefaultValues = false) : SqlStatement; + +/// A column in a CREATE TABLE: its declared SQL type, optional size/scale, constraints, and the +/// raw text of an optional DEFAULT value expression (stored as the column's DefaultValue property). +public sealed record ColumnDefinition( + string Name, + string TypeName, + int? Size, + int? Scale, + bool NotNull, + bool PrimaryKey, + string? Default = null); + +/// Referential action for a foreign key's ON DELETE / ON UPDATE clause. Jet records only +/// enforce + cascade-update + cascade-delete, so NoAction/SetNull/SetDefault collapse to "no cascade". +public enum ReferentialAction { NoAction, Cascade, SetNull, SetDefault } + +/// A FOREIGN KEY constraint (table-level, or a column-level REFERENCES): the child columns, +/// the referenced (parent) table and its columns, the ON DELETE / ON UPDATE actions, and whether the +/// FOREIGN KEY NO INDEX modifier was given (suppresses the backing index). +public sealed record ForeignKeyConstraint( + string? Name, + IReadOnlyList Columns, + string ReferencedTable, + IReadOnlyList ReferencedColumns, + ReferentialAction OnDelete, + ReferentialAction OnUpdate, + bool NoIndex = false); + +/// A UNIQUE constraint (table-level, or a column-level UNIQUE) over one or more columns. +public sealed record UniqueConstraint(string? Name, IReadOnlyList Columns); + +/// A CHECK constraint: an optional name and the raw expression text (validated by Access, not +/// yet enforced by LibRed). +public sealed record CheckConstraint(string? Name, string Expression); + +public sealed record CreateTableStatement( + string Table, + IReadOnlyList Columns, + IReadOnlyList PrimaryKey, + IReadOnlyList ForeignKeys, + IReadOnlyList UniqueConstraints, + IReadOnlyList CheckConstraints, + // The PRIMARY KEY's CONSTRAINT name, if one was given (column- or table-level). ACE names the primary + // key index after the constraint (verified: the scaffolder round-trips it), so it must be preserved. + // When null (no name given), the engine picks its own stable fallback in TableCreator. + string? PrimaryKeyName = null) : SqlStatement; + +/// The optional WITH clause of CREATE INDEX: PRIMARY (make it the primary key), DISALLOW NULL +/// (no nulls allowed), IGNORE NULL (rows with nulls excluded from the index). +public enum IndexWithOption { None, Primary, DisallowNull, IgnoreNull } + +/// CREATE [UNIQUE] INDEX name ON table (col [ASC|DESC], …) [WITH …] — a new index on an +/// existing table. +public sealed record CreateIndexStatement( + string Name, + string Table, + bool IsUnique, + IReadOnlyList<(string Column, bool Descending)> Columns, + IndexWithOption WithOption) : SqlStatement; + +public enum ViewJoinKind { Inner, Left, Right } + +/// A source in a view's FROM: either a named table ( set) or a derived +/// table ( = the verbatim inner subquery text, with a required alias). +public sealed record ViewSource(string? Table, string? Alias, string? SubquerySql = null); + +/// A join in a view: its kind, the verbatim ON condition, and the two tables it joins (from the +/// condition), which Access stores as the join row's Name1/Name2. +public sealed record ViewJoin(ViewJoinKind Kind, string Condition, string LeftAlias, string RightAlias); + +/// An output column of a view: the verbatim expression text and its optional alias (stored in the +/// MSysQueries column row's Expression and Name1). +public sealed record ViewColumn(string Expression, string? Alias); + +/// An ORDER BY key of a view: the verbatim sort expression and its direction (stored as an +/// MSysQueries Attribute=0x0B row — Expression = the sort column, Name1 = "d" for descending). +public sealed record ViewOrderBy(string Expression, bool Descending); + +/// A view's decomposed SELECT (columns/tables/joins/where/group-by, all as verbatim text), which +/// Access stores as MSysQueries rows. A GROUP BY makes it a "totals" query (aggregate columns are ordinary +/// column rows; the group-by columns are separate rows). HAVING and ORDER BY are not stored yet. +public sealed record ViewDefinition( + bool Distinct, + IReadOnlyList Columns, + IReadOnlyList Tables, + IReadOnlyList Joins, + string? Where, + IReadOnlyList GroupBy, + IReadOnlyList OrderBy, + int? Top); + +/// CREATE VIEW view [(fields)] AS select — a stored query, decomposed for byte-faithful storage. +public sealed record CreateViewStatement( + string Name, + IReadOnlyList Columns, + ViewDefinition Definition, + string QuerySql) : SqlStatement; + +/// A CREATE PROCEDURE parameter: a name and its declared Access SQL type name. +public sealed record ProcedureParameter(string Name, string TypeName); + +/// CREATE PROCEDURE name [param datatype, …] AS select — a parameterized stored query. Stored like +/// a view (the decomposed ) plus a parameter row per declared parameter. +public sealed record CreateProcedureStatement( + string Name, + IReadOnlyList Parameters, + ViewDefinition Definition, + string QuerySql) : SqlStatement; + +/// The kind of non-SELECT (action) CREATE PROCEDURE body. +public enum ProcedureActionKind { DataDefinition, Append } + +/// One appended column of an INSERT procedure body: the target column and the verbatim value text. +public sealed record AppendColumn(string Column, string ValueExpression); + +/// A CREATE PROCEDURE whose body is an action query (not a SELECT). A +/// body carries the whole +/// (CREATE/DROP TABLE); an body carries the +/// and its appended . +public sealed record CreateActionProcedureStatement( + string Name, + ProcedureActionKind Kind, + string? DdlSql, + string? TargetTable, + IReadOnlyList? AppendColumns) : SqlStatement; + +/// One action of an ALTER TABLE statement (Access allows exactly one per statement). +public abstract record AlterTableAction; + +/// ADD [COLUMN] field type … — add a new column (with its inline constraints). +public sealed record AddColumnAction(ColumnDefinition Column) : AlterTableAction; + +/// ADD CONSTRAINT … FOREIGN KEY … — add a foreign key. +public sealed record AddForeignKeyAction(ForeignKeyConstraint ForeignKey) : AlterTableAction; + +/// ADD CONSTRAINT … PRIMARY KEY (cols) — add the primary key. +public sealed record AddPrimaryKeyAction(string? Name, IReadOnlyList Columns) : AlterTableAction; + +/// ADD CONSTRAINT … UNIQUE (cols) — add a unique constraint. +public sealed record AddUniqueAction(UniqueConstraint Unique) : AlterTableAction; + +/// ADD CONSTRAINT … CHECK (…) — add a check constraint. +public sealed record AddCheckAction(CheckConstraint Check) : AlterTableAction; + +/// ALTER COLUMN field type[(size[,scale])] [NOT NULL|NULL] [DEFAULT expr] — change a column's data +/// type, and optionally its nullability (: true = NOT NULL, false = NULL, null = leave +/// as-is) and default. +public sealed record AlterColumnAction(string Field, string TypeName, int? Size, int? Scale, string? Default = null, bool? NotNull = null) : AlterTableAction; + +/// ALTER COLUMN field SET DEFAULT expr — set (replace) a column's default, without retyping it. +public sealed record AlterColumnSetDefaultAction(string Field, string Default) : AlterTableAction; + +/// ALTER COLUMN field DROP DEFAULT — remove a column's default, leaving its type and NOT NULL intact. +public sealed record AlterColumnDropDefaultAction(string Field) : AlterTableAction; + +/// DROP COLUMN field — delete a column. +public sealed record DropColumnAction(string Field) : AlterTableAction; + +/// DROP CONSTRAINT name — delete a (multi-field) index/constraint by name. +public sealed record DropConstraintAction(string Name) : AlterTableAction; + +/// RENAME TO newName — rename the table itself. +public sealed record RenameTableAction(string NewName) : AlterTableAction; + +/// RENAME COLUMN field TO newName — rename one of the table's columns. +public sealed record RenameColumnAction(string Field, string NewName) : AlterTableAction; + +/// RENAME INDEX index TO newName — rename one of the table's indexes. +public sealed record RenameIndexAction(string Index, string NewName) : AlterTableAction; + +/// ALTER TABLE table <action> — modifies an existing table's design. +public sealed record AlterTableStatement(string Table, AlterTableAction Action) : SqlStatement; + +// DROP { TABLE table | INDEX index ON table | PROCEDURE procedure | VIEW view } — deletes an object. +public sealed record DropTableStatement(string Table) : SqlStatement; +public sealed record DropIndexStatement(string Index, string Table) : SqlStatement; +public sealed record DropProcedureStatement(string Procedure) : SqlStatement; +public sealed record DropViewStatement(string View) : SqlStatement; + +/// A SET assignment: the target column (optionally table/alias-qualified for a multi-table UPDATE) +/// and the value expression. +public sealed record Assignment(string? Table, string Column, Expression Value) : SqlNode; + +/// UPDATE over a table source (a single table, or a join — Access allows SET to touch columns in +/// several joined tables). is the join tree; the WHERE is an ordinary expression. +public sealed record UpdateStatement( + TableReference From, + IReadOnlyList Assignments, + Expression? Where) : SqlStatement; + +/// DELETE over a table source. is the table.* target (which +/// table's rows to delete in a join); null means the single table named by . +public sealed record DeleteStatement( + string? TargetTable, + TableReference From, + Expression? Where) : SqlStatement; diff --git a/src/LibRed/LibRed.Sql/Binding/Binder.cs b/src/LibRed/LibRed.Sql/Binding/Binder.cs new file mode 100644 index 00000000..ea58ac01 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Binding/Binder.cs @@ -0,0 +1,62 @@ +using LibRed.Sql.Ast; + +namespace LibRed.Sql.Binding; + +/// +/// Resolves names in a parsed statement against an : verifies +/// the table and every referenced column exists, so the planner can assume validity. +/// +public sealed class Binder(ISchemaProvider schema) +{ + private readonly ISchemaProvider _schema = schema; + + public BoundStatement Bind(SqlStatement statement) + { + BindStatement(statement); + return new BoundStatement(statement); + } + + private void BindStatement(SqlStatement statement) + { + switch (statement) + { + case SelectStatement select: + BindSelect(select); + break; + case SetOperationStatement set: + BindStatement(set.Left); + BindStatement(set.Right); + break; + case IfThenStatement ifThen: + BindSelect(ifThen.Condition); // validate the condition's sources (e.g. INFORMATION_SCHEMA.TABLES) + BindStatement(ifThen.Then); // DDL/DML Then is validated at execution; a query Then is bound here + break; + } + } + + private void BindSelect(SelectStatement select) + { + // Validate that referenced tables exist. Column existence is resolved at execution + // time, because columns may be alias-qualified across joins/derived tables or + // correlated to an outer query, which single-table binding cannot see. + ValidateSources(select.From); + } + + private void ValidateSources(TableReference? from) + { + switch (from) + { + case null: // FROM-less SELECT (e.g. `SELECT 2`) — nothing to validate + break; + case NamedTable n when _schema.GetTable(n.Name) is null: + throw new SqlBindException($"Table '{n.Name}' does not exist."); + case JoinTable j: + ValidateSources(j.Left); + ValidateSources(j.Right); + break; + case SubqueryTable s: + BindStatement(s.Query); // Select or a set operation (UNION) derived table + break; + } + } +} diff --git a/src/LibRed/LibRed.Sql/Binding/BoundStatement.cs b/src/LibRed/LibRed.Sql/Binding/BoundStatement.cs new file mode 100644 index 00000000..9c537836 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Binding/BoundStatement.cs @@ -0,0 +1,10 @@ +using LibRed.Sql.Ast; + +namespace LibRed.Sql.Binding; + +/// +/// A statement whose names and types have been resolved against the schema. The +/// query planner consumes this rather than the raw AST so it can assume everything +/// referenced is valid. +/// +public sealed record BoundStatement(SqlStatement Statement); diff --git a/src/LibRed/LibRed.Sql/Binding/ISchemaProvider.cs b/src/LibRed/LibRed.Sql/Binding/ISchemaProvider.cs new file mode 100644 index 00000000..51be08ec --- /dev/null +++ b/src/LibRed/LibRed.Sql/Binding/ISchemaProvider.cs @@ -0,0 +1,32 @@ +namespace LibRed.Sql.Binding; + +/// +/// The schema information the binder needs to resolve and type-check a statement. +/// Defined here (not in Core) to keep the dependency inverted: LibRed.Sql has no +/// reference to the storage engine. The Engine project supplies an implementation +/// backed by the Jet catalog. +/// +public interface ISchemaProvider +{ + /// Resolves a table by name, or returns null if it does not exist. + ITableSchema? GetTable(string name); +} + +/// Minimal table shape needed for binding. +public interface ITableSchema +{ + string Name { get; } + IReadOnlyList Columns { get; } + IColumnSchema? FindColumn(string name); +} + +/// Minimal column shape needed for binding. +public interface IColumnSchema +{ + string Name { get; } + + /// The CLR type the column maps to, used for expression type checking. + Type ClrType { get; } + + bool IsNullable { get; } +} diff --git a/src/LibRed/LibRed.Sql/Binding/SqlBindException.cs b/src/LibRed/LibRed.Sql/Binding/SqlBindException.cs new file mode 100644 index 00000000..5c445b4c --- /dev/null +++ b/src/LibRed/LibRed.Sql/Binding/SqlBindException.cs @@ -0,0 +1,4 @@ +namespace LibRed.Sql.Binding; + +/// Thrown when a statement references a table or column that does not exist. +public sealed class SqlBindException(string message) : Exception(message); diff --git a/src/LibRed/LibRed.Sql/Grammar/.gitignore b/src/LibRed/LibRed.Sql/Grammar/.gitignore new file mode 100644 index 00000000..225df602 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Grammar/.gitignore @@ -0,0 +1,3 @@ +antlr-*.jar +Generated/*.interp +Generated/*.tokens diff --git a/src/LibRed/LibRed.Sql/Grammar/AccessSql.g4 b/src/LibRed/LibRed.Sql/Grammar/AccessSql.g4 new file mode 100644 index 00000000..4c5d4fe3 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Grammar/AccessSql.g4 @@ -0,0 +1,465 @@ +// ANTLR4 grammar for the Jet/ACE (Microsoft Access) SQL dialect. +// +// Scope: SELECT with projection/aliases, multi-table FROM with INNER/LEFT/RIGHT JOIN and +// derived-table subqueries, WHERE, ORDER BY, TOP. The parse tree is lowered into +// LibRed.Sql.Ast by AstBuilder, so the rest of the engine never sees these generated types. +// +// Dialect notes (vs ANSI): '&' string concat; MOD / '\' operators; '*'/'?' LIKE wildcards; +// TOP n (no OFFSET); #1/1/2020# date literals; [bracketed] and `backtick` identifiers; +// booleans -1/0. + +grammar AccessSql; + +// A single statement, optionally terminated by ';' (EF Core emits a trailing semicolon). +statement : parametersClause? (ifThenStatement | createTableStatement | createIndexStatement | createViewStatement | createProcedureStatement | alterTableStatement | dropStatement | insertStatement | updateStatement | deleteStatement | transactionStatement | executeStatement | systemVariableSelect | queryExpression) SEMI? EOF ; + +// EF emits Jet's conditional DDL for idempotent migrations: `IF [NOT] EXISTS ( — a parameterized stored query (no parens +// around the params, per the Access DDL). Stored like a view plus MSysQueries parameter rows. +createProcedureStatement + : CREATE PROCEDURE name=identifier + procParamList? + AS body=procedureBody + ; +// The parameter list is optional, and Access accepts it either bare or wrapped in parentheses. +procParamList + : LPAREN procParam (COMMA procParam)* RPAREN + | procParam (COMMA procParam)* + ; +// A parameter name is an identifier or an @-prefixed parameter token (e.g. @Beginning_Date). +procParam : pname=procParamName dataType ; +procParamName : identifier | PARAM ; + +// ALTER TABLE table { ADD [COLUMN] field type … | ADD CONSTRAINT … | ALTER COLUMN field type | DROP … } +// (Access allows exactly one action per statement.) The CONSTRAINT clause reuses CREATE TABLE's +// tableConstraint (PK / FK / UNIQUE / CHECK — the "multifieldindex"). COLUMN is optional on ADD (EF omits it). +alterTableStatement + : ALTER TABLE table=identifier alterTableAction + ; +alterTableAction + : ADD COLUMN? columnDefinition # AddColumnAction + | ADD tableConstraint # AddConstraintAction + | ALTER COLUMN? field=identifier dataType columnConstraint* # AlterColumnAction + | ALTER COLUMN? field=identifier SET DEFAULT expression # AlterColumnSetDefaultAction + | ALTER COLUMN? field=identifier DROP DEFAULT # AlterColumnDropDefaultAction + | DROP COLUMN field=identifier # DropColumnAction + | DROP CONSTRAINT cname=identifier # DropConstraintAction + // Renames. Jet/ACE has no rename syntax at all (Access does them through DAO/ADOX), so these are the + // provider's own DDL — kept as one ALTER TABLE family so the table is always the statement's subject. + | RENAME TO newName=identifier # RenameTableAction + | RENAME COLUMN field=identifier TO newName=identifier # RenameColumnAction + | RENAME INDEX index=identifier TO newName=identifier # RenameIndexAction + ; + +// A procedure body is any statement Access allows. We store/execute the ones we know (SELECT, INSERT, +// CREATE TABLE); other action queries (UPDATE/DELETE/DROP/…) are rejected by the builder. +procedureBody : queryExpression | insertStatement | createTableStatement ; + +// CREATE [UNIQUE] INDEX name ON table (field [ASC|DESC], …) [WITH {PRIMARY|DISALLOW NULL|IGNORE NULL}] +createIndexStatement + : CREATE unique=UNIQUE? INDEX name=identifier ON table=identifier + LPAREN indexColumn (COMMA indexColumn)* RPAREN + (WITH withOption)? + ; + +// DROP { TABLE table | INDEX index ON table | PROCEDURE procedure | VIEW view } — deletes an object +// (Access "DROP statement"). One target per statement; DROP INDEX names the table the index is on. +dropStatement + : DROP TABLE table=identifier # DropTableStatement + | DROP INDEX index=identifier ON table=identifier # DropIndexStatement + | DROP PROCEDURE proc=identifier # DropProcedureStatement + | DROP VIEW view=identifier # DropViewStatement + ; + +indexColumn : col=identifier dir=(ASC | DESC)? ; + +withOption + : PRIMARY # WithPrimary + | DISALLOW NULL # WithDisallowNull + | IGNORE NULL # WithIgnoreNull + ; + +columnDefinition : name=identifier dataType columnConstraint* ; + +// A second word handles two-word ANSI aliases like CHARACTER VARYING / BIT VARYING. +// Up to three words to cover multi-word SQL type names: "char varying", "national character varying", etc. +dataType : typeName=identifier extra=identifier? extra2=identifier? (LPAREN size=signedInteger (COMMA scale=signedInteger)? RPAREN)? ; + +// A possibly-negative integer — needed for a descending COUNTER(seed, increment) whose increment is negative. +signedInteger : MINUS? INTEGER_LITERAL ; + +// Single-field constraints (after the column's data type). A CONSTRAINT name may prefix any of them. +columnConstraint + : NOT NULL # NotNullConstraint + | NULL # NullableConstraint + | DEFAULT expression # DefaultConstraint + | WITH (COMPRESSION | COMP) # CompressionConstraint + | (CONSTRAINT cname=identifier)? CHECK LPAREN checkBody RPAREN # CheckColumnConstraint + | (CONSTRAINT cname=identifier)? PRIMARY KEY # PrimaryKeyConstraint + | (CONSTRAINT cname=identifier)? UNIQUE # UniqueColumnConstraint + | (CONSTRAINT cname=identifier)? REFERENCES refTable=identifier + (LPAREN refColumns+=identifier (COMMA refColumns+=identifier)* RPAREN)? + foreignKeyAction* # ColumnReferencesConstraint + ; + +// EF Core emits named table constraints: CONSTRAINT `PK_x` PRIMARY KEY (`col`, ...) and +// CONSTRAINT `FK_x` FOREIGN KEY (`col`, ...) REFERENCES `Parent` (`col`, ...) ON DELETE CASCADE. +tableConstraint + : (CONSTRAINT name=identifier)? PRIMARY KEY + LPAREN columns+=identifier (COMMA columns+=identifier)* RPAREN # PrimaryKeyTableConstraint + | (CONSTRAINT name=identifier)? UNIQUE + LPAREN columns+=identifier (COMMA columns+=identifier)* RPAREN # UniqueTableConstraint + | (CONSTRAINT name=identifier)? FOREIGN KEY (noIndex=NO INDEX)? + LPAREN columns+=identifier (COMMA columns+=identifier)* RPAREN + REFERENCES refTable=identifier + (LPAREN refColumns+=identifier (COMMA refColumns+=identifier)* RPAREN)? + foreignKeyAction* # ForeignKeyTableConstraint + | (CONSTRAINT name=identifier)? CHECK LPAREN checkBody RPAREN # CheckTableConstraint + ; + +// A CHECK expression is parsed as balanced-paren token soup and ignored (not enforced yet), so any +// expression ACE accepts parses without needing full expression support. +checkBody : ( ~(LPAREN | RPAREN) | LPAREN checkBody RPAREN )* ; + +// ON UPDATE / ON DELETE may appear in either order (Access documents UPDATE-then-DELETE; EF Core +// emits only ON DELETE), so they are parsed as an unordered list. +foreignKeyAction + : ON UPDATE referentialAction # OnUpdateAction + | ON DELETE referentialAction # OnDeleteAction + ; + +// Referential actions (ON DELETE / ON UPDATE). Jet's DAO model records only enforce / cascade +// update / cascade delete; NO ACTION / RESTRICT map to "enforced, no cascade". +referentialAction + : CASCADE # CascadeAction + | NO ACTION # NoActionAction + | RESTRICT # RestrictAction + | SET NULL # SetNullAction + | SET DEFAULT # SetDefaultAction + ; + +// INSERT … VALUES (…), or `INSERT INTO t DEFAULT VALUES` — the latter (EF Core emits it for an all-store- +// -generated/all-default row) inserts one row taking every column's default / AutoNumber. +insertStatement + : INSERT INTO table=identifier + ( (LPAREN columns+=identifier (COMMA columns+=identifier)* RPAREN)? + VALUES LPAREN expression (COMMA expression)* RPAREN + | DEFAULT VALUES ) + ; + +// Set operations over SELECTs (left-associative). UNION dedupes; UNION ALL keeps +// duplicates; INTERSECT/EXCEPT dedupe. (Access has no INTERSECT/EXCEPT — LibRed owns the dialect.) +queryExpression : queryTerm (setOperator queryTerm)* ; +// A set-operation operand is a SELECT or a parenthesised query expression (so `A UNION ALL (B UNION C)` +// groups the right side as one term — EF emits this from Concat/Union nesting). +queryTerm + : selectStatement # SelectTerm + | LPAREN queryExpression RPAREN # ParenTerm + ; +setOperator : UNION ALL? | INTERSECT | EXCEPT ; + +// The FROM clause is optional: ACE accepts a bare `SELECT 2` (verified) — a FROM-less SELECT yields one row. +selectStatement + : SELECT predicate=selectPredicate? topClause? selectList fromClause? whereClause? groupByClause? havingClause? orderByClause? + ; + +// The optional row predicate. ALL is the default (return every row); DISTINCT dedupes on the output +// columns; DISTINCTROW dedupes on the underlying rows of the tables that contribute output columns +// (Access-specific — a no-op unless output is drawn from a strict subset of the joined tables). +selectPredicate : ALL | DISTINCT | DISTINCTROW ; + +groupByClause : GROUP BY expression (COMMA expression)* ; +havingClause : HAVING expression ; + +// Access allows only a literal after TOP, but LibRed also accepts a parameter (or a +/- expression of +// literals/parameters) — EFCore.Jet normally inlines the value, and we can evaluate it directly instead. +// Restricted to additive operands (no bare '*') so it can't swallow a following SELECT star ('TOP n *'). +// A trailing PERCENT returns that percentage of rows (ceil) instead of a fixed count. +topClause : TOP topOperand ((PLUS | MINUS) topOperand)* percent=PERCENT? ; +topOperand : INTEGER_LITERAL | PARAM | LPAREN expression RPAREN ; + +selectList + : STAR + | selectItem (COMMA selectItem)* + ; + +selectItem + : qualifier=identifier DOT STAR # QualifiedStarSelectItem + | expression (AS? alias=identifier)? # ExpressionSelectItem + ; + +fromClause : FROM tableSource (COMMA tableSource)* ; + +// A table source and its explicit JOINs; comma between sources is an implicit cross join. +tableSource : tablePrimary joinClause* ; + +tablePrimary + : table=identifier (AS? alias=identifier)? # NamedTablePrimary + | LPAREN queryExpression RPAREN (AS? alias=identifier)? # SubqueryPrimary + | LPAREN tableSource RPAREN # ParenJoinPrimary + ; + +joinClause : joinType JOIN tablePrimary ON expression ; + +joinType + : INNER? # InnerJoin + | LEFT OUTER? # LeftJoin + | RIGHT OUTER? # RightJoin + ; + +whereClause : WHERE expression ; + +orderByClause : ORDER BY orderByItem (COMMA orderByItem)* ; +orderByItem : expression (dir=(ASC | DESC))? ; + +expression + : NOT expression # NotExpr + | BNOT expression # BitNotExpr + | MINUS expression # NegateExpr + | left=expression CARET right=expression # PowExpr + | left=expression op=(STAR | SLASH | MOD | BACKSLASH) right=expression # MulDivExpr + | left=expression op=(PLUS | MINUS | AMP) right=expression # AddConcatExpr + | left=expression op=(EQ | NEQ | LT | LTE | GT | GTE) right=expression # ComparisonExpr + | val=expression not=NOT? BETWEEN lo=expression AND hi=expression # BetweenExpr + | left=expression not=NOT? LIKE right=expression # LikeExpr + | val=expression not=NOT? IN LPAREN sub=selectStatement RPAREN # InSubqueryExpr + | val=expression not=NOT? IN LPAREN items+=expression (COMMA items+=expression)* RPAREN # InExpr + | operand=expression IS not=NOT? NULL # IsNullExpr + | left=expression op=(BAND | BOR | BXOR) right=expression # BitwiseExpr + | left=expression AND right=expression # AndExpr + | left=expression OR right=expression # OrExpr + | primary # PrimaryExpr + ; + +primary + : literal # LiteralPrimary + | functionCall # FunctionCallPrimary + | columnRef # ColumnPrimary + | PARAM # ParamPrimary + | SYSVAR # SystemVariablePrimary + | EXISTS LPAREN selectStatement RPAREN # ExistsPrimary + | LPAREN selectStatement RPAREN # ScalarSubqueryPrimary + | LPAREN expression RPAREN # ParenPrimary + ; + +// An optional DISTINCT before the argument applies to aggregates (COUNT/SUM/AVG/…): the aggregate operates +// on the distinct set of the argument's VALUES (COUNT(DISTINCT col)), not on distinct rows — see DISTINCTROW. +functionCall : name=functionName LPAREN (star=STAR | (distinct=DISTINCT? expression (COMMA expression)*))? RPAREN ; +// A function name is an identifier, or the LEFT/RIGHT/ASC keywords used as the Left()/Right()/Asc() functions — +// unambiguous with LEFT/RIGHT JOIN and ORDER BY ... ASC because a function call is always followed by '(' and +// never appears in the FROM/ORDER BY clause. +functionName : identifier | LEFT | RIGHT | ASC ; + +columnRef : (qualifier=identifier DOT)? name=identifier ; + +identifier : IDENTIFIER | BRACKET_ID | BACKTICK_ID ; + +literal + : INTEGER_LITERAL # IntLiteral + | NUMBER_LITERAL # NumberLiteral + | HEX_LITERAL # HexLiteral + | STRING_LITERAL # StringLiteral + | DATE_LITERAL # DateLiteral + | GUID_LITERAL # GuidLiteral + | TRUE # TrueLiteral + | FALSE # FalseLiteral + | NULL # NullLiteral + ; + +// Transaction control (engine-native BEGIN/COMMIT/ROLLBACK, with the optional TRANSACTION/WORK keyword). +// These manage the transaction rather than run inside one, so the engine routes them straight to the +// transaction controller (exempt from the implicit per-statement wrap). +transactionStatement + : BEGIN (TRANSACTION | WORK)? # BeginTransactionStatement + | COMMIT (TRANSACTION | WORK)? # CommitTransactionStatement + | ROLLBACK (TRANSACTION | WORK)? # RollbackTransactionStatement + ; + +// A standalone expression read from catalog metadata (DEFAULT/CHECK/validation text). Requiring +// EOF prevents a valid prefix from silently weakening the stored expression's intended meaning. +// Kept after the existing parser rules so adding it does not renumber their generated rule ids. +standaloneExpression : expression EOF ; + +// ---- Lexer ---- + +SELECT : [Ss][Ee][Ll][Ee][Cc][Tt] ; +FROM : [Ff][Rr][Oo][Mm] ; +WHERE : [Ww][Hh][Ee][Rr][Ee] ; +TOP : [Tt][Oo][Pp] ; +AS : [Aa][Ss] ; +AND : [Aa][Nn][Dd] ; +OR : [Oo][Rr] ; +NOT : [Nn][Oo][Tt] ; +BAND : [Bb][Aa][Nn][Dd] ; +BOR : [Bb][Oo][Rr] ; +BXOR : [Bb][Xx][Oo][Rr] ; +BNOT : [Bb][Nn][Oo][Tt] ; +LIKE : [Ll][Ii][Kk][Ee] ; +MOD : [Mm][Oo][Dd] ; +INNER : [Ii][Nn][Nn][Ee][Rr] ; +LEFT : [Ll][Ee][Ff][Tt] ; +RIGHT : [Rr][Ii][Gg][Hh][Tt] ; +OUTER : [Oo][Uu][Tt][Ee][Rr] ; +JOIN : [Jj][Oo][Ii][Nn] ; +IN : [Ii][Nn] ; +ON : [Oo][Nn] ; +ORDER : [Oo][Rr][Dd][Ee][Rr] ; +GROUP : [Gg][Rr][Oo][Uu][Pp] ; +IS : [Ii][Ss] ; +BY : [Bb][Yy] ; +HAVING : [Hh][Aa][Vv][Ii][Nn][Gg] ; +EXISTS : [Ee][Xx][Ii][Ss][Tt][Ss] ; +IF : [Ii][Ff] ; +THEN : [Tt][Hh][Ee][Nn] ; +DISTINCTROW : [Dd][Ii][Ss][Tt][Ii][Nn][Cc][Tt][Rr][Oo][Ww] ; +DISTINCT : [Dd][Ii][Ss][Tt][Ii][Nn][Cc][Tt] ; +PERCENT : [Pp][Ee][Rr][Cc][Ee][Nn][Tt] ; +BETWEEN : [Bb][Ee][Tt][Ww][Ee][Ee][Nn] ; +UNION : [Uu][Nn][Ii][Oo][Nn] ; +ALL : [Aa][Ll][Ll] ; +INTERSECT : [Ii][Nn][Tt][Ee][Rr][Ss][Ee][Cc][Tt] ; +EXCEPT : [Ee][Xx][Cc][Ee][Pp][Tt] ; +CREATE : [Cc][Rr][Ee][Aa][Tt][Ee] ; +TABLE : [Tt][Aa][Bb][Ll][Ee] ; +BEGIN : [Bb][Ee][Gg][Ii][Nn] ; +COMMIT : [Cc][Oo][Mm][Mm][Ii][Tt] ; +ROLLBACK : [Rr][Oo][Ll][Ll][Bb][Aa][Cc][Kk] ; +TRANSACTION : [Tt][Rr][Aa][Nn][Ss][Aa][Cc][Tt][Ii][Oo][Nn] ; +WORK : [Ww][Oo][Rr][Kk] ; +ALTER : [Aa][Ll][Tt][Ee][Rr] ; +RENAME : [Rr][Ee][Nn][Aa][Mm][Ee] ; +TO : [Tt][Oo] ; +ADD : [Aa][Dd][Dd] ; +DROP : [Dd][Rr][Oo][Pp] ; +COLUMN : [Cc][Oo][Ll][Uu][Mm][Nn] ; +INSERT : [Ii][Nn][Ss][Ee][Rr][Tt] ; +INTO : [Ii][Nn][Tt][Oo] ; +VALUES : [Vv][Aa][Ll][Uu][Ee][Ss] ; +PRIMARY : [Pp][Rr][Ii][Mm][Aa][Rr][Yy] ; +KEY : [Kk][Ee][Yy] ; +CONSTRAINT : [Cc][Oo][Nn][Ss][Tt][Rr][Aa][Ii][Nn][Tt] ; +FOREIGN : [Ff][Oo][Rr][Ee][Ii][Gg][Nn] ; +REFERENCES : [Rr][Ee][Ff][Ee][Rr][Ee][Nn][Cc][Ee][Ss] ; +DELETE : [Dd][Ee][Ll][Ee][Tt][Ee] ; +UPDATE : [Uu][Pp][Dd][Aa][Tt][Ee] ; +CASCADE : [Cc][Aa][Ss][Cc][Aa][Dd][Ee] ; +RESTRICT : [Rr][Ee][Ss][Tt][Rr][Ii][Cc][Tt] ; +ACTION : [Aa][Cc][Tt][Ii][Oo][Nn] ; +SET : [Ss][Ee][Tt] ; +DEFAULT : [Dd][Ee][Ff][Aa][Uu][Ll][Tt] ; +NO : [Nn][Oo] ; +UNIQUE : [Uu][Nn][Ii][Qq][Uu][Ee] ; +INDEX : [Ii][Nn][Dd][Ee][Xx] ; +TEMPORARY : [Tt][Ee][Mm][Pp][Oo][Rr][Aa][Rr][Yy] ; +WITH : [Ww][Ii][Tt][Hh] ; +COMPRESSION: [Cc][Oo][Mm][Pp][Rr][Ee][Ss][Ss][Ii][Oo][Nn] ; +COMP : [Cc][Oo][Mm][Pp] ; +DISALLOW : [Dd][Ii][Ss][Aa][Ll][Ll][Oo][Ww] ; +IGNORE : [Ii][Gg][Nn][Oo][Rr][Ee] ; +CHECK : [Cc][Hh][Ee][Cc][Kk] ; +VIEW : [Vv][Ii][Ee][Ww] ; +PROCEDURE : [Pp][Rr][Oo][Cc][Ee][Dd][Uu][Rr][Ee] ; +PARAMETERS : [Pp][Aa][Rr][Aa][Mm][Ee][Tt][Ee][Rr][Ss] ; +EXECUTE : [Ee][Xx][Ee][Cc][Uu][Tt][Ee] ; +EXEC : [Ee][Xx][Ee][Cc] ; +ASC : [Aa][Ss][Cc] ; +DESC : [Dd][Ee][Ss][Cc] ; +TRUE : [Tt][Rr][Uu][Ee] ; +FALSE : [Ff][Aa][Ll][Ss][Ee] ; +NULL : [Nn][Uu][Ll][Ll] ; + +STAR : '*' ; +SLASH : '/' ; +BACKSLASH: '\\' ; +CARET : '^' ; +PLUS : '+' ; +MINUS : '-' ; +AMP : '&' ; +EQ : '=' ; +NEQ : '<>' | '!=' ; +LTE : '<=' ; +GTE : '>=' ; +LT : '<' ; +GT : '>' ; +LPAREN : '(' ; +RPAREN : ')' ; +COMMA : ',' ; +DOT : '.' ; +SEMI : ';' ; +// A connection-scoped system variable: @@ROWCOUNT (rows affected by the last statement) and +// @@IDENTITY (the last AutoNumber generated on this connection). Must precede PARAM so the '@@' +// prefix is matched as one token rather than PARAM failing on the second '@'. +SYSVAR : '@@' [A-Za-z_][A-Za-z_0-9]* ; +PARAM : '?' | '@' [A-Za-z_][A-Za-z_0-9]* ; + +// A raw binary literal, e.g. 0x151C2F… (an OLE / Long Binary value). Must precede INTEGER_LITERAL so the +// leading 0 isn't lexed as an integer; ANTLR's longest-match picks this, and ordering settles ties. +HEX_LITERAL : '0' [Xx] [0-9A-Fa-f]+ ; +INTEGER_LITERAL : [0-9]+ ; +// A floating-point literal, with optional scientific-notation exponent (e.g. 6.023E23, 1.5e-3, 2E10). +// The bare-integer-with-exponent form (2E10) is a NUMBER_LITERAL, not an INTEGER_LITERAL — longest match. +NUMBER_LITERAL : [0-9]+ '.' [0-9]* EXPONENT? | '.' [0-9]+ EXPONENT? | [0-9]+ EXPONENT ; +fragment EXPONENT : [Ee] [+-]? [0-9]+ ; +// A doubled quote inside a string is an escaped quote ('Bon app''' → Bon app'); the AST un-doubles it. +STRING_LITERAL : '"' ( ~["] | '""' )* '"' | '\'' ( ~['] | '\'\'' )* '\'' ; +DATE_LITERAL : '#' ~[#]* '#' ; +// Access GUID literal: {8-4-4-4-12 hex}. Braces appear nowhere else in the grammar. +GUID_LITERAL : '{' HEXDIGIT+ '-' HEXDIGIT+ '-' HEXDIGIT+ '-' HEXDIGIT+ '-' HEXDIGIT+ '}' ; +fragment HEXDIGIT : [0-9A-Fa-f] ; +BRACKET_ID : '[' ~[\]]+ ']' ; +BACKTICK_ID : '`' ~[`]+ '`' ; +// A trailing '$' is allowed so VBA "$" string-function variants (Left$, UCase$, Chr$, …) lex as a single +// identifier. Longest-match makes "Left$" an IDENTIFIER (5 chars) rather than the LEFT keyword (4); the +// evaluator strips the '$' and dispatches to the base function. +IDENTIFIER : [A-Za-z_][A-Za-z_0-9]* '$'? ; + +WS : [ \t\r\n]+ -> skip ; +// SQL comments — EF Core query tags prepend a `-- tag` line comment to the statement; also block comments. +LINE_COMMENT : '--' ~[\r\n]* -> skip ; +BLOCK_COMMENT : '/*' .*? '*/' -> skip ; diff --git a/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlBaseVisitor.cs b/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlBaseVisitor.cs new file mode 100644 index 00000000..7d895218 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlBaseVisitor.cs @@ -0,0 +1,1391 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// ANTLR Version: 4.13.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from AccessSql.g4 by ANTLR 4.13.1 + +// Unreachable code detected +#pragma warning disable 0162 +// The variable '...' is assigned but its value is never used +#pragma warning disable 0219 +// Missing XML comment for publicly visible type or member '...' +#pragma warning disable 1591 +// Ambiguous reference in cref attribute +#pragma warning disable 419 + +namespace LibRed.Sql.Grammar { +using Antlr4.Runtime.Misc; +using Antlr4.Runtime.Tree; +using IToken = Antlr4.Runtime.IToken; +using ParserRuleContext = Antlr4.Runtime.ParserRuleContext; + +/// +/// This class provides an empty implementation of , +/// which can be extended to create a visitor which only needs to handle a subset +/// of the available methods. +/// +/// The return type of the visit operation. +[System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.13.1")] +[System.Diagnostics.DebuggerNonUserCode] +[System.CLSCompliant(false)] +public partial class AccessSqlBaseVisitor : AbstractParseTreeVisitor, IAccessSqlVisitor { + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitStatement([NotNull] AccessSqlParser.StatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitIfThenStatement([NotNull] AccessSqlParser.IfThenStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitThenBody([NotNull] AccessSqlParser.ThenBodyContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitExecuteStatement([NotNull] AccessSqlParser.ExecuteStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitUpdateStatement([NotNull] AccessSqlParser.UpdateStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAssignment([NotNull] AccessSqlParser.AssignmentContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDeleteStatement([NotNull] AccessSqlParser.DeleteStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSystemVariableSelect([NotNull] AccessSqlParser.SystemVariableSelectContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSysVarItem([NotNull] AccessSqlParser.SysVarItemContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitParametersClause([NotNull] AccessSqlParser.ParametersClauseContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCreateTableStatement([NotNull] AccessSqlParser.CreateTableStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCreateViewStatement([NotNull] AccessSqlParser.CreateViewStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCreateProcedureStatement([NotNull] AccessSqlParser.CreateProcedureStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitProcParamList([NotNull] AccessSqlParser.ProcParamListContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitProcParam([NotNull] AccessSqlParser.ProcParamContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitProcParamName([NotNull] AccessSqlParser.ProcParamNameContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAlterTableStatement([NotNull] AccessSqlParser.AlterTableStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the AddColumnAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAddColumnAction([NotNull] AccessSqlParser.AddColumnActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the AddConstraintAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAddConstraintAction([NotNull] AccessSqlParser.AddConstraintActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the AlterColumnAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAlterColumnAction([NotNull] AccessSqlParser.AlterColumnActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the AlterColumnSetDefaultAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAlterColumnSetDefaultAction([NotNull] AccessSqlParser.AlterColumnSetDefaultActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the AlterColumnDropDefaultAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAlterColumnDropDefaultAction([NotNull] AccessSqlParser.AlterColumnDropDefaultActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the DropColumnAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDropColumnAction([NotNull] AccessSqlParser.DropColumnActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the DropConstraintAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDropConstraintAction([NotNull] AccessSqlParser.DropConstraintActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the RenameTableAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitRenameTableAction([NotNull] AccessSqlParser.RenameTableActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the RenameColumnAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitRenameColumnAction([NotNull] AccessSqlParser.RenameColumnActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the RenameIndexAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitRenameIndexAction([NotNull] AccessSqlParser.RenameIndexActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitProcedureBody([NotNull] AccessSqlParser.ProcedureBodyContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCreateIndexStatement([NotNull] AccessSqlParser.CreateIndexStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the DropTableStatement + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDropTableStatement([NotNull] AccessSqlParser.DropTableStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the DropIndexStatement + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDropIndexStatement([NotNull] AccessSqlParser.DropIndexStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the DropProcedureStatement + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDropProcedureStatement([NotNull] AccessSqlParser.DropProcedureStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the DropViewStatement + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDropViewStatement([NotNull] AccessSqlParser.DropViewStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitIndexColumn([NotNull] AccessSqlParser.IndexColumnContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the WithPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitWithPrimary([NotNull] AccessSqlParser.WithPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the WithDisallowNull + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitWithDisallowNull([NotNull] AccessSqlParser.WithDisallowNullContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the WithIgnoreNull + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitWithIgnoreNull([NotNull] AccessSqlParser.WithIgnoreNullContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitColumnDefinition([NotNull] AccessSqlParser.ColumnDefinitionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDataType([NotNull] AccessSqlParser.DataTypeContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSignedInteger([NotNull] AccessSqlParser.SignedIntegerContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the NotNullConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNotNullConstraint([NotNull] AccessSqlParser.NotNullConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the NullableConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNullableConstraint([NotNull] AccessSqlParser.NullableConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the DefaultConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDefaultConstraint([NotNull] AccessSqlParser.DefaultConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the CompressionConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCompressionConstraint([NotNull] AccessSqlParser.CompressionConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the CheckColumnConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCheckColumnConstraint([NotNull] AccessSqlParser.CheckColumnConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the PrimaryKeyConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitPrimaryKeyConstraint([NotNull] AccessSqlParser.PrimaryKeyConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the UniqueColumnConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitUniqueColumnConstraint([NotNull] AccessSqlParser.UniqueColumnConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ColumnReferencesConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitColumnReferencesConstraint([NotNull] AccessSqlParser.ColumnReferencesConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the PrimaryKeyTableConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitPrimaryKeyTableConstraint([NotNull] AccessSqlParser.PrimaryKeyTableConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the UniqueTableConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitUniqueTableConstraint([NotNull] AccessSqlParser.UniqueTableConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ForeignKeyTableConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitForeignKeyTableConstraint([NotNull] AccessSqlParser.ForeignKeyTableConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the CheckTableConstraint + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCheckTableConstraint([NotNull] AccessSqlParser.CheckTableConstraintContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCheckBody([NotNull] AccessSqlParser.CheckBodyContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the OnUpdateAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitOnUpdateAction([NotNull] AccessSqlParser.OnUpdateActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the OnDeleteAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitOnDeleteAction([NotNull] AccessSqlParser.OnDeleteActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the CascadeAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCascadeAction([NotNull] AccessSqlParser.CascadeActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the NoActionAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNoActionAction([NotNull] AccessSqlParser.NoActionActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the RestrictAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitRestrictAction([NotNull] AccessSqlParser.RestrictActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the SetNullAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSetNullAction([NotNull] AccessSqlParser.SetNullActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the SetDefaultAction + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSetDefaultAction([NotNull] AccessSqlParser.SetDefaultActionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitInsertStatement([NotNull] AccessSqlParser.InsertStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitQueryExpression([NotNull] AccessSqlParser.QueryExpressionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the SelectTerm + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSelectTerm([NotNull] AccessSqlParser.SelectTermContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ParenTerm + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitParenTerm([NotNull] AccessSqlParser.ParenTermContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSetOperator([NotNull] AccessSqlParser.SetOperatorContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSelectStatement([NotNull] AccessSqlParser.SelectStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSelectPredicate([NotNull] AccessSqlParser.SelectPredicateContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitGroupByClause([NotNull] AccessSqlParser.GroupByClauseContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitHavingClause([NotNull] AccessSqlParser.HavingClauseContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitTopClause([NotNull] AccessSqlParser.TopClauseContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitTopOperand([NotNull] AccessSqlParser.TopOperandContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSelectList([NotNull] AccessSqlParser.SelectListContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the QualifiedStarSelectItem + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitQualifiedStarSelectItem([NotNull] AccessSqlParser.QualifiedStarSelectItemContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ExpressionSelectItem + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitExpressionSelectItem([NotNull] AccessSqlParser.ExpressionSelectItemContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitFromClause([NotNull] AccessSqlParser.FromClauseContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitTableSource([NotNull] AccessSqlParser.TableSourceContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the NamedTablePrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNamedTablePrimary([NotNull] AccessSqlParser.NamedTablePrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the SubqueryPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSubqueryPrimary([NotNull] AccessSqlParser.SubqueryPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ParenJoinPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitParenJoinPrimary([NotNull] AccessSqlParser.ParenJoinPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitJoinClause([NotNull] AccessSqlParser.JoinClauseContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the InnerJoin + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitInnerJoin([NotNull] AccessSqlParser.InnerJoinContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the LeftJoin + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitLeftJoin([NotNull] AccessSqlParser.LeftJoinContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the RightJoin + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitRightJoin([NotNull] AccessSqlParser.RightJoinContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitWhereClause([NotNull] AccessSqlParser.WhereClauseContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitOrderByClause([NotNull] AccessSqlParser.OrderByClauseContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitOrderByItem([NotNull] AccessSqlParser.OrderByItemContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the AndExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAndExpr([NotNull] AccessSqlParser.AndExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the LikeExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitLikeExpr([NotNull] AccessSqlParser.LikeExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the IsNullExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitIsNullExpr([NotNull] AccessSqlParser.IsNullExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ComparisonExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitComparisonExpr([NotNull] AccessSqlParser.ComparisonExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the BetweenExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitBetweenExpr([NotNull] AccessSqlParser.BetweenExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the BitNotExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitBitNotExpr([NotNull] AccessSqlParser.BitNotExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the PowExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitPowExpr([NotNull] AccessSqlParser.PowExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the OrExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitOrExpr([NotNull] AccessSqlParser.OrExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the NegateExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNegateExpr([NotNull] AccessSqlParser.NegateExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the InSubqueryExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitInSubqueryExpr([NotNull] AccessSqlParser.InSubqueryExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the MulDivExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitMulDivExpr([NotNull] AccessSqlParser.MulDivExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the BitwiseExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitBitwiseExpr([NotNull] AccessSqlParser.BitwiseExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the PrimaryExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitPrimaryExpr([NotNull] AccessSqlParser.PrimaryExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the NotExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNotExpr([NotNull] AccessSqlParser.NotExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the InExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitInExpr([NotNull] AccessSqlParser.InExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the AddConcatExpr + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitAddConcatExpr([NotNull] AccessSqlParser.AddConcatExprContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the LiteralPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitLiteralPrimary([NotNull] AccessSqlParser.LiteralPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the FunctionCallPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitFunctionCallPrimary([NotNull] AccessSqlParser.FunctionCallPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ColumnPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitColumnPrimary([NotNull] AccessSqlParser.ColumnPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ParamPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitParamPrimary([NotNull] AccessSqlParser.ParamPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the SystemVariablePrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitSystemVariablePrimary([NotNull] AccessSqlParser.SystemVariablePrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ExistsPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitExistsPrimary([NotNull] AccessSqlParser.ExistsPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ScalarSubqueryPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitScalarSubqueryPrimary([NotNull] AccessSqlParser.ScalarSubqueryPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ParenPrimary + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitParenPrimary([NotNull] AccessSqlParser.ParenPrimaryContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitFunctionCall([NotNull] AccessSqlParser.FunctionCallContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitFunctionName([NotNull] AccessSqlParser.FunctionNameContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitColumnRef([NotNull] AccessSqlParser.ColumnRefContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitIdentifier([NotNull] AccessSqlParser.IdentifierContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the IntLiteral + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitIntLiteral([NotNull] AccessSqlParser.IntLiteralContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the NumberLiteral + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNumberLiteral([NotNull] AccessSqlParser.NumberLiteralContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the HexLiteral + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitHexLiteral([NotNull] AccessSqlParser.HexLiteralContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the StringLiteral + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitStringLiteral([NotNull] AccessSqlParser.StringLiteralContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the DateLiteral + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDateLiteral([NotNull] AccessSqlParser.DateLiteralContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the GuidLiteral + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitGuidLiteral([NotNull] AccessSqlParser.GuidLiteralContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the TrueLiteral + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitTrueLiteral([NotNull] AccessSqlParser.TrueLiteralContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the FalseLiteral + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitFalseLiteral([NotNull] AccessSqlParser.FalseLiteralContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the NullLiteral + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNullLiteral([NotNull] AccessSqlParser.NullLiteralContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the BeginTransactionStatement + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitBeginTransactionStatement([NotNull] AccessSqlParser.BeginTransactionStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the CommitTransactionStatement + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitCommitTransactionStatement([NotNull] AccessSqlParser.CommitTransactionStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the RollbackTransactionStatement + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitRollbackTransactionStatement([NotNull] AccessSqlParser.RollbackTransactionStatementContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitStandaloneExpression([NotNull] AccessSqlParser.StandaloneExpressionContext context) { return VisitChildren(context); } +} +} // namespace LibRed.Sql.Grammar diff --git a/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlLexer.cs b/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlLexer.cs new file mode 100644 index 00000000..9615c9fd --- /dev/null +++ b/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlLexer.cs @@ -0,0 +1,490 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// ANTLR Version: 4.13.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from AccessSql.g4 by ANTLR 4.13.1 + +// Unreachable code detected +#pragma warning disable 0162 +// The variable '...' is assigned but its value is never used +#pragma warning disable 0219 +// Missing XML comment for publicly visible type or member '...' +#pragma warning disable 1591 +// Ambiguous reference in cref attribute +#pragma warning disable 419 + +namespace LibRed.Sql.Grammar { +using System; +using System.IO; +using System.Text; +using Antlr4.Runtime; +using Antlr4.Runtime.Atn; +using Antlr4.Runtime.Misc; +using DFA = Antlr4.Runtime.Dfa.DFA; + +[System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.13.1")] +[System.CLSCompliant(false)] +public partial class AccessSqlLexer : Lexer { + protected static DFA[] decisionToDFA; + protected static PredictionContextCache sharedContextCache = new PredictionContextCache(); + public const int + SELECT=1, FROM=2, WHERE=3, TOP=4, AS=5, AND=6, OR=7, NOT=8, BAND=9, BOR=10, + BXOR=11, BNOT=12, LIKE=13, MOD=14, INNER=15, LEFT=16, RIGHT=17, OUTER=18, + JOIN=19, IN=20, ON=21, ORDER=22, GROUP=23, IS=24, BY=25, HAVING=26, EXISTS=27, + IF=28, THEN=29, DISTINCTROW=30, DISTINCT=31, PERCENT=32, BETWEEN=33, UNION=34, + ALL=35, INTERSECT=36, EXCEPT=37, CREATE=38, TABLE=39, BEGIN=40, COMMIT=41, + ROLLBACK=42, TRANSACTION=43, WORK=44, ALTER=45, RENAME=46, TO=47, ADD=48, + DROP=49, COLUMN=50, INSERT=51, INTO=52, VALUES=53, PRIMARY=54, KEY=55, + CONSTRAINT=56, FOREIGN=57, REFERENCES=58, DELETE=59, UPDATE=60, CASCADE=61, + RESTRICT=62, ACTION=63, SET=64, DEFAULT=65, NO=66, UNIQUE=67, INDEX=68, + TEMPORARY=69, WITH=70, COMPRESSION=71, COMP=72, DISALLOW=73, IGNORE=74, + CHECK=75, VIEW=76, PROCEDURE=77, PARAMETERS=78, EXECUTE=79, EXEC=80, ASC=81, + DESC=82, TRUE=83, FALSE=84, NULL=85, STAR=86, SLASH=87, BACKSLASH=88, + CARET=89, PLUS=90, MINUS=91, AMP=92, EQ=93, NEQ=94, LTE=95, GTE=96, LT=97, + GT=98, LPAREN=99, RPAREN=100, COMMA=101, DOT=102, SEMI=103, SYSVAR=104, + PARAM=105, HEX_LITERAL=106, INTEGER_LITERAL=107, NUMBER_LITERAL=108, STRING_LITERAL=109, + DATE_LITERAL=110, GUID_LITERAL=111, BRACKET_ID=112, BACKTICK_ID=113, IDENTIFIER=114, + WS=115, LINE_COMMENT=116, BLOCK_COMMENT=117; + public static string[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static string[] modeNames = { + "DEFAULT_MODE" + }; + + public static readonly string[] ruleNames = { + "SELECT", "FROM", "WHERE", "TOP", "AS", "AND", "OR", "NOT", "BAND", "BOR", + "BXOR", "BNOT", "LIKE", "MOD", "INNER", "LEFT", "RIGHT", "OUTER", "JOIN", + "IN", "ON", "ORDER", "GROUP", "IS", "BY", "HAVING", "EXISTS", "IF", "THEN", + "DISTINCTROW", "DISTINCT", "PERCENT", "BETWEEN", "UNION", "ALL", "INTERSECT", + "EXCEPT", "CREATE", "TABLE", "BEGIN", "COMMIT", "ROLLBACK", "TRANSACTION", + "WORK", "ALTER", "RENAME", "TO", "ADD", "DROP", "COLUMN", "INSERT", "INTO", + "VALUES", "PRIMARY", "KEY", "CONSTRAINT", "FOREIGN", "REFERENCES", "DELETE", + "UPDATE", "CASCADE", "RESTRICT", "ACTION", "SET", "DEFAULT", "NO", "UNIQUE", + "INDEX", "TEMPORARY", "WITH", "COMPRESSION", "COMP", "DISALLOW", "IGNORE", + "CHECK", "VIEW", "PROCEDURE", "PARAMETERS", "EXECUTE", "EXEC", "ASC", + "DESC", "TRUE", "FALSE", "NULL", "STAR", "SLASH", "BACKSLASH", "CARET", + "PLUS", "MINUS", "AMP", "EQ", "NEQ", "LTE", "GTE", "LT", "GT", "LPAREN", + "RPAREN", "COMMA", "DOT", "SEMI", "SYSVAR", "PARAM", "HEX_LITERAL", "INTEGER_LITERAL", + "NUMBER_LITERAL", "EXPONENT", "STRING_LITERAL", "DATE_LITERAL", "GUID_LITERAL", + "HEXDIGIT", "BRACKET_ID", "BACKTICK_ID", "IDENTIFIER", "WS", "LINE_COMMENT", + "BLOCK_COMMENT" + }; + + + public AccessSqlLexer(ICharStream input) + : this(input, Console.Out, Console.Error) { } + + public AccessSqlLexer(ICharStream input, TextWriter output, TextWriter errorOutput) + : base(input, output, errorOutput) + { + Interpreter = new LexerATNSimulator(this, _ATN, decisionToDFA, sharedContextCache); + } + + private static readonly string[] _LiteralNames = { + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, "'*'", "'/'", "'\\'", "'^'", "'+'", "'-'", "'&'", "'='", null, + "'<='", "'>='", "'<'", "'>'", "'('", "')'", "','", "'.'", "';'" + }; + private static readonly string[] _SymbolicNames = { + null, "SELECT", "FROM", "WHERE", "TOP", "AS", "AND", "OR", "NOT", "BAND", + "BOR", "BXOR", "BNOT", "LIKE", "MOD", "INNER", "LEFT", "RIGHT", "OUTER", + "JOIN", "IN", "ON", "ORDER", "GROUP", "IS", "BY", "HAVING", "EXISTS", + "IF", "THEN", "DISTINCTROW", "DISTINCT", "PERCENT", "BETWEEN", "UNION", + "ALL", "INTERSECT", "EXCEPT", "CREATE", "TABLE", "BEGIN", "COMMIT", "ROLLBACK", + "TRANSACTION", "WORK", "ALTER", "RENAME", "TO", "ADD", "DROP", "COLUMN", + "INSERT", "INTO", "VALUES", "PRIMARY", "KEY", "CONSTRAINT", "FOREIGN", + "REFERENCES", "DELETE", "UPDATE", "CASCADE", "RESTRICT", "ACTION", "SET", + "DEFAULT", "NO", "UNIQUE", "INDEX", "TEMPORARY", "WITH", "COMPRESSION", + "COMP", "DISALLOW", "IGNORE", "CHECK", "VIEW", "PROCEDURE", "PARAMETERS", + "EXECUTE", "EXEC", "ASC", "DESC", "TRUE", "FALSE", "NULL", "STAR", "SLASH", + "BACKSLASH", "CARET", "PLUS", "MINUS", "AMP", "EQ", "NEQ", "LTE", "GTE", + "LT", "GT", "LPAREN", "RPAREN", "COMMA", "DOT", "SEMI", "SYSVAR", "PARAM", + "HEX_LITERAL", "INTEGER_LITERAL", "NUMBER_LITERAL", "STRING_LITERAL", + "DATE_LITERAL", "GUID_LITERAL", "BRACKET_ID", "BACKTICK_ID", "IDENTIFIER", + "WS", "LINE_COMMENT", "BLOCK_COMMENT" + }; + public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); + + [NotNull] + public override IVocabulary Vocabulary + { + get + { + return DefaultVocabulary; + } + } + + public override string GrammarFileName { get { return "AccessSql.g4"; } } + + public override string[] RuleNames { get { return ruleNames; } } + + public override string[] ChannelNames { get { return channelNames; } } + + public override string[] ModeNames { get { return modeNames; } } + + public override int[] SerializedAtn { get { return _serializedATN; } } + + static AccessSqlLexer() { + decisionToDFA = new DFA[_ATN.NumberOfDecisions]; + for (int i = 0; i < _ATN.NumberOfDecisions; i++) { + decisionToDFA[i] = new DFA(_ATN.GetDecisionState(i), i); + } + } + private static int[] _serializedATN = { + 4,0,117,1009,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2, + 14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2, + 21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2, + 28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,34,2, + 35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2, + 42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2, + 49,7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2, + 56,7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2, + 63,7,63,2,64,7,64,2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2, + 70,7,70,2,71,7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2, + 77,7,77,2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2, + 84,7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2, + 91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2, + 98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103,2,104, + 7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,2,109,7,109,2,110, + 7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114,7,114,2,115,7,115,2,116, + 7,116,2,117,7,117,2,118,7,118,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1, + 1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,5,1,5,1, + 5,1,5,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9, + 1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12, + 1,12,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15, + 1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17, + 1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,20,1,20,1,20,1,21,1,21,1,21, + 1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,24,1,24, + 1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26, + 1,26,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29, + 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30, + 1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32, + 1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34, + 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36, + 1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38, + 1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40, + 1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42, + 1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,44, + 1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46, + 1,46,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49, + 1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51, + 1,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,53, + 1,53,1,53,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55, + 1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57, + 1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58, + 1,58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60, + 1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62, + 1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64, + 1,64,1,64,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67, + 1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68, + 1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70, + 1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72, + 1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74, + 1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77, + 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,80, + 1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,83, + 1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,86,1,86, + 1,87,1,87,1,88,1,88,1,89,1,89,1,90,1,90,1,91,1,91,1,92,1,92,1,93,1,93, + 1,93,1,93,3,93,791,8,93,1,94,1,94,1,94,1,95,1,95,1,95,1,96,1,96,1,97,1, + 97,1,98,1,98,1,99,1,99,1,100,1,100,1,101,1,101,1,102,1,102,1,103,1,103, + 1,103,1,103,1,103,5,103,818,8,103,10,103,12,103,821,9,103,1,104,1,104, + 1,104,1,104,5,104,827,8,104,10,104,12,104,830,9,104,3,104,832,8,104,1, + 105,1,105,1,105,4,105,837,8,105,11,105,12,105,838,1,106,4,106,842,8,106, + 11,106,12,106,843,1,107,4,107,847,8,107,11,107,12,107,848,1,107,1,107, + 5,107,853,8,107,10,107,12,107,856,9,107,1,107,3,107,859,8,107,1,107,1, + 107,4,107,863,8,107,11,107,12,107,864,1,107,3,107,868,8,107,1,107,4,107, + 871,8,107,11,107,12,107,872,1,107,3,107,876,8,107,1,108,1,108,3,108,880, + 8,108,1,108,4,108,883,8,108,11,108,12,108,884,1,109,1,109,1,109,1,109, + 5,109,891,8,109,10,109,12,109,894,9,109,1,109,1,109,1,109,1,109,1,109, + 5,109,901,8,109,10,109,12,109,904,9,109,1,109,3,109,907,8,109,1,110,1, + 110,5,110,911,8,110,10,110,12,110,914,9,110,1,110,1,110,1,111,1,111,4, + 111,920,8,111,11,111,12,111,921,1,111,1,111,4,111,926,8,111,11,111,12, + 111,927,1,111,1,111,4,111,932,8,111,11,111,12,111,933,1,111,1,111,4,111, + 938,8,111,11,111,12,111,939,1,111,1,111,4,111,944,8,111,11,111,12,111, + 945,1,111,1,111,1,112,1,112,1,113,1,113,4,113,954,8,113,11,113,12,113, + 955,1,113,1,113,1,114,1,114,4,114,962,8,114,11,114,12,114,963,1,114,1, + 114,1,115,1,115,5,115,970,8,115,10,115,12,115,973,9,115,1,115,3,115,976, + 8,115,1,116,4,116,979,8,116,11,116,12,116,980,1,116,1,116,1,117,1,117, + 1,117,1,117,5,117,989,8,117,10,117,12,117,992,9,117,1,117,1,117,1,118, + 1,118,1,118,1,118,5,118,1000,8,118,10,118,12,118,1003,9,118,1,118,1,118, + 1,118,1,118,1,118,1,1001,0,119,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9, + 19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21, + 43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33, + 67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45, + 91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54,109,55,111,56, + 113,57,115,58,117,59,119,60,121,61,123,62,125,63,127,64,129,65,131,66, + 133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,149,75,151,76, + 153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169,85,171,86, + 173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,189,95,191,96, + 193,97,195,98,197,99,199,100,201,101,203,102,205,103,207,104,209,105,211, + 106,213,107,215,108,217,0,219,109,221,110,223,111,225,0,227,112,229,113, + 231,114,233,115,235,116,237,117,1,0,37,2,0,83,83,115,115,2,0,69,69,101, + 101,2,0,76,76,108,108,2,0,67,67,99,99,2,0,84,84,116,116,2,0,70,70,102, + 102,2,0,82,82,114,114,2,0,79,79,111,111,2,0,77,77,109,109,2,0,87,87,119, + 119,2,0,72,72,104,104,2,0,80,80,112,112,2,0,65,65,97,97,2,0,78,78,110, + 110,2,0,68,68,100,100,2,0,66,66,98,98,2,0,88,88,120,120,2,0,73,73,105, + 105,2,0,75,75,107,107,2,0,71,71,103,103,2,0,85,85,117,117,2,0,74,74,106, + 106,2,0,89,89,121,121,2,0,86,86,118,118,2,0,81,81,113,113,3,0,65,90,95, + 95,97,122,4,0,48,57,65,90,95,95,97,122,3,0,48,57,65,70,97,102,1,0,48,57, + 2,0,43,43,45,45,1,0,34,34,1,0,39,39,1,0,35,35,1,0,93,93,1,0,96,96,3,0, + 9,10,13,13,32,32,2,0,10,10,13,13,1040,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0, + 0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17, + 1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0, + 0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39, + 1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0, + 0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61, + 1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0, + 0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83, + 1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0, + 0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0, + 105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0, + 115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0, + 125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0, + 135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0, + 145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0, + 155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0, + 165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0, + 175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0, + 185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0, + 195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0, + 205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0, + 215,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,227,1,0,0,0,0, + 229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,1, + 239,1,0,0,0,3,246,1,0,0,0,5,251,1,0,0,0,7,257,1,0,0,0,9,261,1,0,0,0,11, + 264,1,0,0,0,13,268,1,0,0,0,15,271,1,0,0,0,17,275,1,0,0,0,19,280,1,0,0, + 0,21,284,1,0,0,0,23,289,1,0,0,0,25,294,1,0,0,0,27,299,1,0,0,0,29,303,1, + 0,0,0,31,309,1,0,0,0,33,314,1,0,0,0,35,320,1,0,0,0,37,326,1,0,0,0,39,331, + 1,0,0,0,41,334,1,0,0,0,43,337,1,0,0,0,45,343,1,0,0,0,47,349,1,0,0,0,49, + 352,1,0,0,0,51,355,1,0,0,0,53,362,1,0,0,0,55,369,1,0,0,0,57,372,1,0,0, + 0,59,377,1,0,0,0,61,389,1,0,0,0,63,398,1,0,0,0,65,406,1,0,0,0,67,414,1, + 0,0,0,69,420,1,0,0,0,71,424,1,0,0,0,73,434,1,0,0,0,75,441,1,0,0,0,77,448, + 1,0,0,0,79,454,1,0,0,0,81,460,1,0,0,0,83,467,1,0,0,0,85,476,1,0,0,0,87, + 488,1,0,0,0,89,493,1,0,0,0,91,499,1,0,0,0,93,506,1,0,0,0,95,509,1,0,0, + 0,97,513,1,0,0,0,99,518,1,0,0,0,101,525,1,0,0,0,103,532,1,0,0,0,105,537, + 1,0,0,0,107,544,1,0,0,0,109,552,1,0,0,0,111,556,1,0,0,0,113,567,1,0,0, + 0,115,575,1,0,0,0,117,586,1,0,0,0,119,593,1,0,0,0,121,600,1,0,0,0,123, + 608,1,0,0,0,125,617,1,0,0,0,127,624,1,0,0,0,129,628,1,0,0,0,131,636,1, + 0,0,0,133,639,1,0,0,0,135,646,1,0,0,0,137,652,1,0,0,0,139,662,1,0,0,0, + 141,667,1,0,0,0,143,679,1,0,0,0,145,684,1,0,0,0,147,693,1,0,0,0,149,700, + 1,0,0,0,151,706,1,0,0,0,153,711,1,0,0,0,155,721,1,0,0,0,157,732,1,0,0, + 0,159,740,1,0,0,0,161,745,1,0,0,0,163,749,1,0,0,0,165,754,1,0,0,0,167, + 759,1,0,0,0,169,765,1,0,0,0,171,770,1,0,0,0,173,772,1,0,0,0,175,774,1, + 0,0,0,177,776,1,0,0,0,179,778,1,0,0,0,181,780,1,0,0,0,183,782,1,0,0,0, + 185,784,1,0,0,0,187,790,1,0,0,0,189,792,1,0,0,0,191,795,1,0,0,0,193,798, + 1,0,0,0,195,800,1,0,0,0,197,802,1,0,0,0,199,804,1,0,0,0,201,806,1,0,0, + 0,203,808,1,0,0,0,205,810,1,0,0,0,207,812,1,0,0,0,209,831,1,0,0,0,211, + 833,1,0,0,0,213,841,1,0,0,0,215,875,1,0,0,0,217,877,1,0,0,0,219,906,1, + 0,0,0,221,908,1,0,0,0,223,917,1,0,0,0,225,949,1,0,0,0,227,951,1,0,0,0, + 229,959,1,0,0,0,231,967,1,0,0,0,233,978,1,0,0,0,235,984,1,0,0,0,237,995, + 1,0,0,0,239,240,7,0,0,0,240,241,7,1,0,0,241,242,7,2,0,0,242,243,7,1,0, + 0,243,244,7,3,0,0,244,245,7,4,0,0,245,2,1,0,0,0,246,247,7,5,0,0,247,248, + 7,6,0,0,248,249,7,7,0,0,249,250,7,8,0,0,250,4,1,0,0,0,251,252,7,9,0,0, + 252,253,7,10,0,0,253,254,7,1,0,0,254,255,7,6,0,0,255,256,7,1,0,0,256,6, + 1,0,0,0,257,258,7,4,0,0,258,259,7,7,0,0,259,260,7,11,0,0,260,8,1,0,0,0, + 261,262,7,12,0,0,262,263,7,0,0,0,263,10,1,0,0,0,264,265,7,12,0,0,265,266, + 7,13,0,0,266,267,7,14,0,0,267,12,1,0,0,0,268,269,7,7,0,0,269,270,7,6,0, + 0,270,14,1,0,0,0,271,272,7,13,0,0,272,273,7,7,0,0,273,274,7,4,0,0,274, + 16,1,0,0,0,275,276,7,15,0,0,276,277,7,12,0,0,277,278,7,13,0,0,278,279, + 7,14,0,0,279,18,1,0,0,0,280,281,7,15,0,0,281,282,7,7,0,0,282,283,7,6,0, + 0,283,20,1,0,0,0,284,285,7,15,0,0,285,286,7,16,0,0,286,287,7,7,0,0,287, + 288,7,6,0,0,288,22,1,0,0,0,289,290,7,15,0,0,290,291,7,13,0,0,291,292,7, + 7,0,0,292,293,7,4,0,0,293,24,1,0,0,0,294,295,7,2,0,0,295,296,7,17,0,0, + 296,297,7,18,0,0,297,298,7,1,0,0,298,26,1,0,0,0,299,300,7,8,0,0,300,301, + 7,7,0,0,301,302,7,14,0,0,302,28,1,0,0,0,303,304,7,17,0,0,304,305,7,13, + 0,0,305,306,7,13,0,0,306,307,7,1,0,0,307,308,7,6,0,0,308,30,1,0,0,0,309, + 310,7,2,0,0,310,311,7,1,0,0,311,312,7,5,0,0,312,313,7,4,0,0,313,32,1,0, + 0,0,314,315,7,6,0,0,315,316,7,17,0,0,316,317,7,19,0,0,317,318,7,10,0,0, + 318,319,7,4,0,0,319,34,1,0,0,0,320,321,7,7,0,0,321,322,7,20,0,0,322,323, + 7,4,0,0,323,324,7,1,0,0,324,325,7,6,0,0,325,36,1,0,0,0,326,327,7,21,0, + 0,327,328,7,7,0,0,328,329,7,17,0,0,329,330,7,13,0,0,330,38,1,0,0,0,331, + 332,7,17,0,0,332,333,7,13,0,0,333,40,1,0,0,0,334,335,7,7,0,0,335,336,7, + 13,0,0,336,42,1,0,0,0,337,338,7,7,0,0,338,339,7,6,0,0,339,340,7,14,0,0, + 340,341,7,1,0,0,341,342,7,6,0,0,342,44,1,0,0,0,343,344,7,19,0,0,344,345, + 7,6,0,0,345,346,7,7,0,0,346,347,7,20,0,0,347,348,7,11,0,0,348,46,1,0,0, + 0,349,350,7,17,0,0,350,351,7,0,0,0,351,48,1,0,0,0,352,353,7,15,0,0,353, + 354,7,22,0,0,354,50,1,0,0,0,355,356,7,10,0,0,356,357,7,12,0,0,357,358, + 7,23,0,0,358,359,7,17,0,0,359,360,7,13,0,0,360,361,7,19,0,0,361,52,1,0, + 0,0,362,363,7,1,0,0,363,364,7,16,0,0,364,365,7,17,0,0,365,366,7,0,0,0, + 366,367,7,4,0,0,367,368,7,0,0,0,368,54,1,0,0,0,369,370,7,17,0,0,370,371, + 7,5,0,0,371,56,1,0,0,0,372,373,7,4,0,0,373,374,7,10,0,0,374,375,7,1,0, + 0,375,376,7,13,0,0,376,58,1,0,0,0,377,378,7,14,0,0,378,379,7,17,0,0,379, + 380,7,0,0,0,380,381,7,4,0,0,381,382,7,17,0,0,382,383,7,13,0,0,383,384, + 7,3,0,0,384,385,7,4,0,0,385,386,7,6,0,0,386,387,7,7,0,0,387,388,7,9,0, + 0,388,60,1,0,0,0,389,390,7,14,0,0,390,391,7,17,0,0,391,392,7,0,0,0,392, + 393,7,4,0,0,393,394,7,17,0,0,394,395,7,13,0,0,395,396,7,3,0,0,396,397, + 7,4,0,0,397,62,1,0,0,0,398,399,7,11,0,0,399,400,7,1,0,0,400,401,7,6,0, + 0,401,402,7,3,0,0,402,403,7,1,0,0,403,404,7,13,0,0,404,405,7,4,0,0,405, + 64,1,0,0,0,406,407,7,15,0,0,407,408,7,1,0,0,408,409,7,4,0,0,409,410,7, + 9,0,0,410,411,7,1,0,0,411,412,7,1,0,0,412,413,7,13,0,0,413,66,1,0,0,0, + 414,415,7,20,0,0,415,416,7,13,0,0,416,417,7,17,0,0,417,418,7,7,0,0,418, + 419,7,13,0,0,419,68,1,0,0,0,420,421,7,12,0,0,421,422,7,2,0,0,422,423,7, + 2,0,0,423,70,1,0,0,0,424,425,7,17,0,0,425,426,7,13,0,0,426,427,7,4,0,0, + 427,428,7,1,0,0,428,429,7,6,0,0,429,430,7,0,0,0,430,431,7,1,0,0,431,432, + 7,3,0,0,432,433,7,4,0,0,433,72,1,0,0,0,434,435,7,1,0,0,435,436,7,16,0, + 0,436,437,7,3,0,0,437,438,7,1,0,0,438,439,7,11,0,0,439,440,7,4,0,0,440, + 74,1,0,0,0,441,442,7,3,0,0,442,443,7,6,0,0,443,444,7,1,0,0,444,445,7,12, + 0,0,445,446,7,4,0,0,446,447,7,1,0,0,447,76,1,0,0,0,448,449,7,4,0,0,449, + 450,7,12,0,0,450,451,7,15,0,0,451,452,7,2,0,0,452,453,7,1,0,0,453,78,1, + 0,0,0,454,455,7,15,0,0,455,456,7,1,0,0,456,457,7,19,0,0,457,458,7,17,0, + 0,458,459,7,13,0,0,459,80,1,0,0,0,460,461,7,3,0,0,461,462,7,7,0,0,462, + 463,7,8,0,0,463,464,7,8,0,0,464,465,7,17,0,0,465,466,7,4,0,0,466,82,1, + 0,0,0,467,468,7,6,0,0,468,469,7,7,0,0,469,470,7,2,0,0,470,471,7,2,0,0, + 471,472,7,15,0,0,472,473,7,12,0,0,473,474,7,3,0,0,474,475,7,18,0,0,475, + 84,1,0,0,0,476,477,7,4,0,0,477,478,7,6,0,0,478,479,7,12,0,0,479,480,7, + 13,0,0,480,481,7,0,0,0,481,482,7,12,0,0,482,483,7,3,0,0,483,484,7,4,0, + 0,484,485,7,17,0,0,485,486,7,7,0,0,486,487,7,13,0,0,487,86,1,0,0,0,488, + 489,7,9,0,0,489,490,7,7,0,0,490,491,7,6,0,0,491,492,7,18,0,0,492,88,1, + 0,0,0,493,494,7,12,0,0,494,495,7,2,0,0,495,496,7,4,0,0,496,497,7,1,0,0, + 497,498,7,6,0,0,498,90,1,0,0,0,499,500,7,6,0,0,500,501,7,1,0,0,501,502, + 7,13,0,0,502,503,7,12,0,0,503,504,7,8,0,0,504,505,7,1,0,0,505,92,1,0,0, + 0,506,507,7,4,0,0,507,508,7,7,0,0,508,94,1,0,0,0,509,510,7,12,0,0,510, + 511,7,14,0,0,511,512,7,14,0,0,512,96,1,0,0,0,513,514,7,14,0,0,514,515, + 7,6,0,0,515,516,7,7,0,0,516,517,7,11,0,0,517,98,1,0,0,0,518,519,7,3,0, + 0,519,520,7,7,0,0,520,521,7,2,0,0,521,522,7,20,0,0,522,523,7,8,0,0,523, + 524,7,13,0,0,524,100,1,0,0,0,525,526,7,17,0,0,526,527,7,13,0,0,527,528, + 7,0,0,0,528,529,7,1,0,0,529,530,7,6,0,0,530,531,7,4,0,0,531,102,1,0,0, + 0,532,533,7,17,0,0,533,534,7,13,0,0,534,535,7,4,0,0,535,536,7,7,0,0,536, + 104,1,0,0,0,537,538,7,23,0,0,538,539,7,12,0,0,539,540,7,2,0,0,540,541, + 7,20,0,0,541,542,7,1,0,0,542,543,7,0,0,0,543,106,1,0,0,0,544,545,7,11, + 0,0,545,546,7,6,0,0,546,547,7,17,0,0,547,548,7,8,0,0,548,549,7,12,0,0, + 549,550,7,6,0,0,550,551,7,22,0,0,551,108,1,0,0,0,552,553,7,18,0,0,553, + 554,7,1,0,0,554,555,7,22,0,0,555,110,1,0,0,0,556,557,7,3,0,0,557,558,7, + 7,0,0,558,559,7,13,0,0,559,560,7,0,0,0,560,561,7,4,0,0,561,562,7,6,0,0, + 562,563,7,12,0,0,563,564,7,17,0,0,564,565,7,13,0,0,565,566,7,4,0,0,566, + 112,1,0,0,0,567,568,7,5,0,0,568,569,7,7,0,0,569,570,7,6,0,0,570,571,7, + 1,0,0,571,572,7,17,0,0,572,573,7,19,0,0,573,574,7,13,0,0,574,114,1,0,0, + 0,575,576,7,6,0,0,576,577,7,1,0,0,577,578,7,5,0,0,578,579,7,1,0,0,579, + 580,7,6,0,0,580,581,7,1,0,0,581,582,7,13,0,0,582,583,7,3,0,0,583,584,7, + 1,0,0,584,585,7,0,0,0,585,116,1,0,0,0,586,587,7,14,0,0,587,588,7,1,0,0, + 588,589,7,2,0,0,589,590,7,1,0,0,590,591,7,4,0,0,591,592,7,1,0,0,592,118, + 1,0,0,0,593,594,7,20,0,0,594,595,7,11,0,0,595,596,7,14,0,0,596,597,7,12, + 0,0,597,598,7,4,0,0,598,599,7,1,0,0,599,120,1,0,0,0,600,601,7,3,0,0,601, + 602,7,12,0,0,602,603,7,0,0,0,603,604,7,3,0,0,604,605,7,12,0,0,605,606, + 7,14,0,0,606,607,7,1,0,0,607,122,1,0,0,0,608,609,7,6,0,0,609,610,7,1,0, + 0,610,611,7,0,0,0,611,612,7,4,0,0,612,613,7,6,0,0,613,614,7,17,0,0,614, + 615,7,3,0,0,615,616,7,4,0,0,616,124,1,0,0,0,617,618,7,12,0,0,618,619,7, + 3,0,0,619,620,7,4,0,0,620,621,7,17,0,0,621,622,7,7,0,0,622,623,7,13,0, + 0,623,126,1,0,0,0,624,625,7,0,0,0,625,626,7,1,0,0,626,627,7,4,0,0,627, + 128,1,0,0,0,628,629,7,14,0,0,629,630,7,1,0,0,630,631,7,5,0,0,631,632,7, + 12,0,0,632,633,7,20,0,0,633,634,7,2,0,0,634,635,7,4,0,0,635,130,1,0,0, + 0,636,637,7,13,0,0,637,638,7,7,0,0,638,132,1,0,0,0,639,640,7,20,0,0,640, + 641,7,13,0,0,641,642,7,17,0,0,642,643,7,24,0,0,643,644,7,20,0,0,644,645, + 7,1,0,0,645,134,1,0,0,0,646,647,7,17,0,0,647,648,7,13,0,0,648,649,7,14, + 0,0,649,650,7,1,0,0,650,651,7,16,0,0,651,136,1,0,0,0,652,653,7,4,0,0,653, + 654,7,1,0,0,654,655,7,8,0,0,655,656,7,11,0,0,656,657,7,7,0,0,657,658,7, + 6,0,0,658,659,7,12,0,0,659,660,7,6,0,0,660,661,7,22,0,0,661,138,1,0,0, + 0,662,663,7,9,0,0,663,664,7,17,0,0,664,665,7,4,0,0,665,666,7,10,0,0,666, + 140,1,0,0,0,667,668,7,3,0,0,668,669,7,7,0,0,669,670,7,8,0,0,670,671,7, + 11,0,0,671,672,7,6,0,0,672,673,7,1,0,0,673,674,7,0,0,0,674,675,7,0,0,0, + 675,676,7,17,0,0,676,677,7,7,0,0,677,678,7,13,0,0,678,142,1,0,0,0,679, + 680,7,3,0,0,680,681,7,7,0,0,681,682,7,8,0,0,682,683,7,11,0,0,683,144,1, + 0,0,0,684,685,7,14,0,0,685,686,7,17,0,0,686,687,7,0,0,0,687,688,7,12,0, + 0,688,689,7,2,0,0,689,690,7,2,0,0,690,691,7,7,0,0,691,692,7,9,0,0,692, + 146,1,0,0,0,693,694,7,17,0,0,694,695,7,19,0,0,695,696,7,13,0,0,696,697, + 7,7,0,0,697,698,7,6,0,0,698,699,7,1,0,0,699,148,1,0,0,0,700,701,7,3,0, + 0,701,702,7,10,0,0,702,703,7,1,0,0,703,704,7,3,0,0,704,705,7,18,0,0,705, + 150,1,0,0,0,706,707,7,23,0,0,707,708,7,17,0,0,708,709,7,1,0,0,709,710, + 7,9,0,0,710,152,1,0,0,0,711,712,7,11,0,0,712,713,7,6,0,0,713,714,7,7,0, + 0,714,715,7,3,0,0,715,716,7,1,0,0,716,717,7,14,0,0,717,718,7,20,0,0,718, + 719,7,6,0,0,719,720,7,1,0,0,720,154,1,0,0,0,721,722,7,11,0,0,722,723,7, + 12,0,0,723,724,7,6,0,0,724,725,7,12,0,0,725,726,7,8,0,0,726,727,7,1,0, + 0,727,728,7,4,0,0,728,729,7,1,0,0,729,730,7,6,0,0,730,731,7,0,0,0,731, + 156,1,0,0,0,732,733,7,1,0,0,733,734,7,16,0,0,734,735,7,1,0,0,735,736,7, + 3,0,0,736,737,7,20,0,0,737,738,7,4,0,0,738,739,7,1,0,0,739,158,1,0,0,0, + 740,741,7,1,0,0,741,742,7,16,0,0,742,743,7,1,0,0,743,744,7,3,0,0,744,160, + 1,0,0,0,745,746,7,12,0,0,746,747,7,0,0,0,747,748,7,3,0,0,748,162,1,0,0, + 0,749,750,7,14,0,0,750,751,7,1,0,0,751,752,7,0,0,0,752,753,7,3,0,0,753, + 164,1,0,0,0,754,755,7,4,0,0,755,756,7,6,0,0,756,757,7,20,0,0,757,758,7, + 1,0,0,758,166,1,0,0,0,759,760,7,5,0,0,760,761,7,12,0,0,761,762,7,2,0,0, + 762,763,7,0,0,0,763,764,7,1,0,0,764,168,1,0,0,0,765,766,7,13,0,0,766,767, + 7,20,0,0,767,768,7,2,0,0,768,769,7,2,0,0,769,170,1,0,0,0,770,771,5,42, + 0,0,771,172,1,0,0,0,772,773,5,47,0,0,773,174,1,0,0,0,774,775,5,92,0,0, + 775,176,1,0,0,0,776,777,5,94,0,0,777,178,1,0,0,0,778,779,5,43,0,0,779, + 180,1,0,0,0,780,781,5,45,0,0,781,182,1,0,0,0,782,783,5,38,0,0,783,184, + 1,0,0,0,784,785,5,61,0,0,785,186,1,0,0,0,786,787,5,60,0,0,787,791,5,62, + 0,0,788,789,5,33,0,0,789,791,5,61,0,0,790,786,1,0,0,0,790,788,1,0,0,0, + 791,188,1,0,0,0,792,793,5,60,0,0,793,794,5,61,0,0,794,190,1,0,0,0,795, + 796,5,62,0,0,796,797,5,61,0,0,797,192,1,0,0,0,798,799,5,60,0,0,799,194, + 1,0,0,0,800,801,5,62,0,0,801,196,1,0,0,0,802,803,5,40,0,0,803,198,1,0, + 0,0,804,805,5,41,0,0,805,200,1,0,0,0,806,807,5,44,0,0,807,202,1,0,0,0, + 808,809,5,46,0,0,809,204,1,0,0,0,810,811,5,59,0,0,811,206,1,0,0,0,812, + 813,5,64,0,0,813,814,5,64,0,0,814,815,1,0,0,0,815,819,7,25,0,0,816,818, + 7,26,0,0,817,816,1,0,0,0,818,821,1,0,0,0,819,817,1,0,0,0,819,820,1,0,0, + 0,820,208,1,0,0,0,821,819,1,0,0,0,822,832,5,63,0,0,823,824,5,64,0,0,824, + 828,7,25,0,0,825,827,7,26,0,0,826,825,1,0,0,0,827,830,1,0,0,0,828,826, + 1,0,0,0,828,829,1,0,0,0,829,832,1,0,0,0,830,828,1,0,0,0,831,822,1,0,0, + 0,831,823,1,0,0,0,832,210,1,0,0,0,833,834,5,48,0,0,834,836,7,16,0,0,835, + 837,7,27,0,0,836,835,1,0,0,0,837,838,1,0,0,0,838,836,1,0,0,0,838,839,1, + 0,0,0,839,212,1,0,0,0,840,842,7,28,0,0,841,840,1,0,0,0,842,843,1,0,0,0, + 843,841,1,0,0,0,843,844,1,0,0,0,844,214,1,0,0,0,845,847,7,28,0,0,846,845, + 1,0,0,0,847,848,1,0,0,0,848,846,1,0,0,0,848,849,1,0,0,0,849,850,1,0,0, + 0,850,854,5,46,0,0,851,853,7,28,0,0,852,851,1,0,0,0,853,856,1,0,0,0,854, + 852,1,0,0,0,854,855,1,0,0,0,855,858,1,0,0,0,856,854,1,0,0,0,857,859,3, + 217,108,0,858,857,1,0,0,0,858,859,1,0,0,0,859,876,1,0,0,0,860,862,5,46, + 0,0,861,863,7,28,0,0,862,861,1,0,0,0,863,864,1,0,0,0,864,862,1,0,0,0,864, + 865,1,0,0,0,865,867,1,0,0,0,866,868,3,217,108,0,867,866,1,0,0,0,867,868, + 1,0,0,0,868,876,1,0,0,0,869,871,7,28,0,0,870,869,1,0,0,0,871,872,1,0,0, + 0,872,870,1,0,0,0,872,873,1,0,0,0,873,874,1,0,0,0,874,876,3,217,108,0, + 875,846,1,0,0,0,875,860,1,0,0,0,875,870,1,0,0,0,876,216,1,0,0,0,877,879, + 7,1,0,0,878,880,7,29,0,0,879,878,1,0,0,0,879,880,1,0,0,0,880,882,1,0,0, + 0,881,883,7,28,0,0,882,881,1,0,0,0,883,884,1,0,0,0,884,882,1,0,0,0,884, + 885,1,0,0,0,885,218,1,0,0,0,886,892,5,34,0,0,887,891,8,30,0,0,888,889, + 5,34,0,0,889,891,5,34,0,0,890,887,1,0,0,0,890,888,1,0,0,0,891,894,1,0, + 0,0,892,890,1,0,0,0,892,893,1,0,0,0,893,895,1,0,0,0,894,892,1,0,0,0,895, + 907,5,34,0,0,896,902,5,39,0,0,897,901,8,31,0,0,898,899,5,39,0,0,899,901, + 5,39,0,0,900,897,1,0,0,0,900,898,1,0,0,0,901,904,1,0,0,0,902,900,1,0,0, + 0,902,903,1,0,0,0,903,905,1,0,0,0,904,902,1,0,0,0,905,907,5,39,0,0,906, + 886,1,0,0,0,906,896,1,0,0,0,907,220,1,0,0,0,908,912,5,35,0,0,909,911,8, + 32,0,0,910,909,1,0,0,0,911,914,1,0,0,0,912,910,1,0,0,0,912,913,1,0,0,0, + 913,915,1,0,0,0,914,912,1,0,0,0,915,916,5,35,0,0,916,222,1,0,0,0,917,919, + 5,123,0,0,918,920,3,225,112,0,919,918,1,0,0,0,920,921,1,0,0,0,921,919, + 1,0,0,0,921,922,1,0,0,0,922,923,1,0,0,0,923,925,5,45,0,0,924,926,3,225, + 112,0,925,924,1,0,0,0,926,927,1,0,0,0,927,925,1,0,0,0,927,928,1,0,0,0, + 928,929,1,0,0,0,929,931,5,45,0,0,930,932,3,225,112,0,931,930,1,0,0,0,932, + 933,1,0,0,0,933,931,1,0,0,0,933,934,1,0,0,0,934,935,1,0,0,0,935,937,5, + 45,0,0,936,938,3,225,112,0,937,936,1,0,0,0,938,939,1,0,0,0,939,937,1,0, + 0,0,939,940,1,0,0,0,940,941,1,0,0,0,941,943,5,45,0,0,942,944,3,225,112, + 0,943,942,1,0,0,0,944,945,1,0,0,0,945,943,1,0,0,0,945,946,1,0,0,0,946, + 947,1,0,0,0,947,948,5,125,0,0,948,224,1,0,0,0,949,950,7,27,0,0,950,226, + 1,0,0,0,951,953,5,91,0,0,952,954,8,33,0,0,953,952,1,0,0,0,954,955,1,0, + 0,0,955,953,1,0,0,0,955,956,1,0,0,0,956,957,1,0,0,0,957,958,5,93,0,0,958, + 228,1,0,0,0,959,961,5,96,0,0,960,962,8,34,0,0,961,960,1,0,0,0,962,963, + 1,0,0,0,963,961,1,0,0,0,963,964,1,0,0,0,964,965,1,0,0,0,965,966,5,96,0, + 0,966,230,1,0,0,0,967,971,7,25,0,0,968,970,7,26,0,0,969,968,1,0,0,0,970, + 973,1,0,0,0,971,969,1,0,0,0,971,972,1,0,0,0,972,975,1,0,0,0,973,971,1, + 0,0,0,974,976,5,36,0,0,975,974,1,0,0,0,975,976,1,0,0,0,976,232,1,0,0,0, + 977,979,7,35,0,0,978,977,1,0,0,0,979,980,1,0,0,0,980,978,1,0,0,0,980,981, + 1,0,0,0,981,982,1,0,0,0,982,983,6,116,0,0,983,234,1,0,0,0,984,985,5,45, + 0,0,985,986,5,45,0,0,986,990,1,0,0,0,987,989,8,36,0,0,988,987,1,0,0,0, + 989,992,1,0,0,0,990,988,1,0,0,0,990,991,1,0,0,0,991,993,1,0,0,0,992,990, + 1,0,0,0,993,994,6,117,0,0,994,236,1,0,0,0,995,996,5,47,0,0,996,997,5,42, + 0,0,997,1001,1,0,0,0,998,1000,9,0,0,0,999,998,1,0,0,0,1000,1003,1,0,0, + 0,1001,1002,1,0,0,0,1001,999,1,0,0,0,1002,1004,1,0,0,0,1003,1001,1,0,0, + 0,1004,1005,5,42,0,0,1005,1006,5,47,0,0,1006,1007,1,0,0,0,1007,1008,6, + 118,0,0,1008,238,1,0,0,0,34,0,790,819,828,831,838,843,848,854,858,864, + 867,872,875,879,884,890,892,900,902,906,912,921,927,933,939,945,955,963, + 971,975,980,990,1001,1,6,0,0 + }; + + public static readonly ATN _ATN = + new ATNDeserializer().Deserialize(_serializedATN); + + +} +} // namespace LibRed.Sql.Grammar diff --git a/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlParser.cs b/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlParser.cs new file mode 100644 index 00000000..9c9b6ba0 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlParser.cs @@ -0,0 +1,7528 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// ANTLR Version: 4.13.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from AccessSql.g4 by ANTLR 4.13.1 + +// Unreachable code detected +#pragma warning disable 0162 +// The variable '...' is assigned but its value is never used +#pragma warning disable 0219 +// Missing XML comment for publicly visible type or member '...' +#pragma warning disable 1591 +// Ambiguous reference in cref attribute +#pragma warning disable 419 + +namespace LibRed.Sql.Grammar { +using System; +using System.IO; +using System.Text; +using System.Diagnostics; +using System.Collections.Generic; +using Antlr4.Runtime; +using Antlr4.Runtime.Atn; +using Antlr4.Runtime.Misc; +using Antlr4.Runtime.Tree; +using DFA = Antlr4.Runtime.Dfa.DFA; + +[System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.13.1")] +[System.CLSCompliant(false)] +public partial class AccessSqlParser : Parser { + protected static DFA[] decisionToDFA; + protected static PredictionContextCache sharedContextCache = new PredictionContextCache(); + public const int + SELECT=1, FROM=2, WHERE=3, TOP=4, AS=5, AND=6, OR=7, NOT=8, BAND=9, BOR=10, + BXOR=11, BNOT=12, LIKE=13, MOD=14, INNER=15, LEFT=16, RIGHT=17, OUTER=18, + JOIN=19, IN=20, ON=21, ORDER=22, GROUP=23, IS=24, BY=25, HAVING=26, EXISTS=27, + IF=28, THEN=29, DISTINCTROW=30, DISTINCT=31, PERCENT=32, BETWEEN=33, UNION=34, + ALL=35, INTERSECT=36, EXCEPT=37, CREATE=38, TABLE=39, BEGIN=40, COMMIT=41, + ROLLBACK=42, TRANSACTION=43, WORK=44, ALTER=45, RENAME=46, TO=47, ADD=48, + DROP=49, COLUMN=50, INSERT=51, INTO=52, VALUES=53, PRIMARY=54, KEY=55, + CONSTRAINT=56, FOREIGN=57, REFERENCES=58, DELETE=59, UPDATE=60, CASCADE=61, + RESTRICT=62, ACTION=63, SET=64, DEFAULT=65, NO=66, UNIQUE=67, INDEX=68, + TEMPORARY=69, WITH=70, COMPRESSION=71, COMP=72, DISALLOW=73, IGNORE=74, + CHECK=75, VIEW=76, PROCEDURE=77, PARAMETERS=78, EXECUTE=79, EXEC=80, ASC=81, + DESC=82, TRUE=83, FALSE=84, NULL=85, STAR=86, SLASH=87, BACKSLASH=88, + CARET=89, PLUS=90, MINUS=91, AMP=92, EQ=93, NEQ=94, LTE=95, GTE=96, LT=97, + GT=98, LPAREN=99, RPAREN=100, COMMA=101, DOT=102, SEMI=103, SYSVAR=104, + PARAM=105, HEX_LITERAL=106, INTEGER_LITERAL=107, NUMBER_LITERAL=108, STRING_LITERAL=109, + DATE_LITERAL=110, GUID_LITERAL=111, BRACKET_ID=112, BACKTICK_ID=113, IDENTIFIER=114, + WS=115, LINE_COMMENT=116, BLOCK_COMMENT=117; + public const int + RULE_statement = 0, RULE_ifThenStatement = 1, RULE_thenBody = 2, RULE_executeStatement = 3, + RULE_updateStatement = 4, RULE_assignment = 5, RULE_deleteStatement = 6, + RULE_systemVariableSelect = 7, RULE_sysVarItem = 8, RULE_parametersClause = 9, + RULE_createTableStatement = 10, RULE_createViewStatement = 11, RULE_createProcedureStatement = 12, + RULE_procParamList = 13, RULE_procParam = 14, RULE_procParamName = 15, + RULE_alterTableStatement = 16, RULE_alterTableAction = 17, RULE_procedureBody = 18, + RULE_createIndexStatement = 19, RULE_dropStatement = 20, RULE_indexColumn = 21, + RULE_withOption = 22, RULE_columnDefinition = 23, RULE_dataType = 24, + RULE_signedInteger = 25, RULE_columnConstraint = 26, RULE_tableConstraint = 27, + RULE_checkBody = 28, RULE_foreignKeyAction = 29, RULE_referentialAction = 30, + RULE_insertStatement = 31, RULE_queryExpression = 32, RULE_queryTerm = 33, + RULE_setOperator = 34, RULE_selectStatement = 35, RULE_selectPredicate = 36, + RULE_groupByClause = 37, RULE_havingClause = 38, RULE_topClause = 39, + RULE_topOperand = 40, RULE_selectList = 41, RULE_selectItem = 42, RULE_fromClause = 43, + RULE_tableSource = 44, RULE_tablePrimary = 45, RULE_joinClause = 46, RULE_joinType = 47, + RULE_whereClause = 48, RULE_orderByClause = 49, RULE_orderByItem = 50, + RULE_expression = 51, RULE_primary = 52, RULE_functionCall = 53, RULE_functionName = 54, + RULE_columnRef = 55, RULE_identifier = 56, RULE_literal = 57, RULE_transactionStatement = 58, + RULE_standaloneExpression = 59; + public static readonly string[] ruleNames = { + "statement", "ifThenStatement", "thenBody", "executeStatement", "updateStatement", + "assignment", "deleteStatement", "systemVariableSelect", "sysVarItem", + "parametersClause", "createTableStatement", "createViewStatement", "createProcedureStatement", + "procParamList", "procParam", "procParamName", "alterTableStatement", + "alterTableAction", "procedureBody", "createIndexStatement", "dropStatement", + "indexColumn", "withOption", "columnDefinition", "dataType", "signedInteger", + "columnConstraint", "tableConstraint", "checkBody", "foreignKeyAction", + "referentialAction", "insertStatement", "queryExpression", "queryTerm", + "setOperator", "selectStatement", "selectPredicate", "groupByClause", + "havingClause", "topClause", "topOperand", "selectList", "selectItem", + "fromClause", "tableSource", "tablePrimary", "joinClause", "joinType", + "whereClause", "orderByClause", "orderByItem", "expression", "primary", + "functionCall", "functionName", "columnRef", "identifier", "literal", + "transactionStatement", "standaloneExpression" + }; + + private static readonly string[] _LiteralNames = { + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, "'*'", "'/'", "'\\'", "'^'", "'+'", "'-'", "'&'", "'='", null, + "'<='", "'>='", "'<'", "'>'", "'('", "')'", "','", "'.'", "';'" + }; + private static readonly string[] _SymbolicNames = { + null, "SELECT", "FROM", "WHERE", "TOP", "AS", "AND", "OR", "NOT", "BAND", + "BOR", "BXOR", "BNOT", "LIKE", "MOD", "INNER", "LEFT", "RIGHT", "OUTER", + "JOIN", "IN", "ON", "ORDER", "GROUP", "IS", "BY", "HAVING", "EXISTS", + "IF", "THEN", "DISTINCTROW", "DISTINCT", "PERCENT", "BETWEEN", "UNION", + "ALL", "INTERSECT", "EXCEPT", "CREATE", "TABLE", "BEGIN", "COMMIT", "ROLLBACK", + "TRANSACTION", "WORK", "ALTER", "RENAME", "TO", "ADD", "DROP", "COLUMN", + "INSERT", "INTO", "VALUES", "PRIMARY", "KEY", "CONSTRAINT", "FOREIGN", + "REFERENCES", "DELETE", "UPDATE", "CASCADE", "RESTRICT", "ACTION", "SET", + "DEFAULT", "NO", "UNIQUE", "INDEX", "TEMPORARY", "WITH", "COMPRESSION", + "COMP", "DISALLOW", "IGNORE", "CHECK", "VIEW", "PROCEDURE", "PARAMETERS", + "EXECUTE", "EXEC", "ASC", "DESC", "TRUE", "FALSE", "NULL", "STAR", "SLASH", + "BACKSLASH", "CARET", "PLUS", "MINUS", "AMP", "EQ", "NEQ", "LTE", "GTE", + "LT", "GT", "LPAREN", "RPAREN", "COMMA", "DOT", "SEMI", "SYSVAR", "PARAM", + "HEX_LITERAL", "INTEGER_LITERAL", "NUMBER_LITERAL", "STRING_LITERAL", + "DATE_LITERAL", "GUID_LITERAL", "BRACKET_ID", "BACKTICK_ID", "IDENTIFIER", + "WS", "LINE_COMMENT", "BLOCK_COMMENT" + }; + public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); + + [NotNull] + public override IVocabulary Vocabulary + { + get + { + return DefaultVocabulary; + } + } + + public override string GrammarFileName { get { return "AccessSql.g4"; } } + + public override string[] RuleNames { get { return ruleNames; } } + + public override int[] SerializedAtn { get { return _serializedATN; } } + + static AccessSqlParser() { + decisionToDFA = new DFA[_ATN.NumberOfDecisions]; + for (int i = 0; i < _ATN.NumberOfDecisions; i++) { + decisionToDFA[i] = new DFA(_ATN.GetDecisionState(i), i); + } + } + + public AccessSqlParser(ITokenStream input) : this(input, Console.Out, Console.Error) { } + + public AccessSqlParser(ITokenStream input, TextWriter output, TextWriter errorOutput) + : base(input, output, errorOutput) + { + Interpreter = new ParserATNSimulator(this, _ATN, decisionToDFA, sharedContextCache); + } + + public partial class StatementContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode Eof() { return GetToken(AccessSqlParser.Eof, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IfThenStatementContext ifThenStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public CreateTableStatementContext createTableStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public CreateIndexStatementContext createIndexStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public CreateViewStatementContext createViewStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public CreateProcedureStatementContext createProcedureStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public AlterTableStatementContext alterTableStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public DropStatementContext dropStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public InsertStatementContext insertStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public UpdateStatementContext updateStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public DeleteStatementContext deleteStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public TransactionStatementContext transactionStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ExecuteStatementContext executeStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public SystemVariableSelectContext systemVariableSelect() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public QueryExpressionContext queryExpression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ParametersClauseContext parametersClause() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SEMI() { return GetToken(AccessSqlParser.SEMI, 0); } + public StatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_statement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public StatementContext statement() { + StatementContext _localctx = new StatementContext(Context, State); + EnterRule(_localctx, 0, RULE_statement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 121; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==PARAMETERS) { + { + State = 120; + parametersClause(); + } + } + + State = 137; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,1,Context) ) { + case 1: + { + State = 123; + ifThenStatement(); + } + break; + case 2: + { + State = 124; + createTableStatement(); + } + break; + case 3: + { + State = 125; + createIndexStatement(); + } + break; + case 4: + { + State = 126; + createViewStatement(); + } + break; + case 5: + { + State = 127; + createProcedureStatement(); + } + break; + case 6: + { + State = 128; + alterTableStatement(); + } + break; + case 7: + { + State = 129; + dropStatement(); + } + break; + case 8: + { + State = 130; + insertStatement(); + } + break; + case 9: + { + State = 131; + updateStatement(); + } + break; + case 10: + { + State = 132; + deleteStatement(); + } + break; + case 11: + { + State = 133; + transactionStatement(); + } + break; + case 12: + { + State = 134; + executeStatement(); + } + break; + case 13: + { + State = 135; + systemVariableSelect(); + } + break; + case 14: + { + State = 136; + queryExpression(); + } + break; + } + State = 140; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==SEMI) { + { + State = 139; + Match(SEMI); + } + } + + State = 142; + Match(Eof); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class IfThenStatementContext : ParserRuleContext { + public IToken not; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode IF() { return GetToken(AccessSqlParser.IF, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EXISTS() { return GetToken(AccessSqlParser.EXISTS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public SelectStatementContext selectStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode THEN() { return GetToken(AccessSqlParser.THEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ThenBodyContext thenBody() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NOT() { return GetToken(AccessSqlParser.NOT, 0); } + public IfThenStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_ifThenStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitIfThenStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public IfThenStatementContext ifThenStatement() { + IfThenStatementContext _localctx = new IfThenStatementContext(Context, State); + EnterRule(_localctx, 2, RULE_ifThenStatement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 144; + Match(IF); + State = 146; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==NOT) { + { + State = 145; + _localctx.not = Match(NOT); + } + } + + State = 148; + Match(EXISTS); + State = 149; + Match(LPAREN); + State = 150; + selectStatement(); + State = 151; + Match(RPAREN); + State = 152; + Match(THEN); + State = 153; + thenBody(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ThenBodyContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public CreateTableStatementContext createTableStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public CreateIndexStatementContext createIndexStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public CreateViewStatementContext createViewStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public CreateProcedureStatementContext createProcedureStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public AlterTableStatementContext alterTableStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public DropStatementContext dropStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public InsertStatementContext insertStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public UpdateStatementContext updateStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public DeleteStatementContext deleteStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ExecuteStatementContext executeStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public QueryExpressionContext queryExpression() { + return GetRuleContext(0); + } + public ThenBodyContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_thenBody; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitThenBody(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ThenBodyContext thenBody() { + ThenBodyContext _localctx = new ThenBodyContext(Context, State); + EnterRule(_localctx, 4, RULE_thenBody); + try { + State = 166; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,4,Context) ) { + case 1: + EnterOuterAlt(_localctx, 1); + { + State = 155; + createTableStatement(); + } + break; + case 2: + EnterOuterAlt(_localctx, 2); + { + State = 156; + createIndexStatement(); + } + break; + case 3: + EnterOuterAlt(_localctx, 3); + { + State = 157; + createViewStatement(); + } + break; + case 4: + EnterOuterAlt(_localctx, 4); + { + State = 158; + createProcedureStatement(); + } + break; + case 5: + EnterOuterAlt(_localctx, 5); + { + State = 159; + alterTableStatement(); + } + break; + case 6: + EnterOuterAlt(_localctx, 6); + { + State = 160; + dropStatement(); + } + break; + case 7: + EnterOuterAlt(_localctx, 7); + { + State = 161; + insertStatement(); + } + break; + case 8: + EnterOuterAlt(_localctx, 8); + { + State = 162; + updateStatement(); + } + break; + case 9: + EnterOuterAlt(_localctx, 9); + { + State = 163; + deleteStatement(); + } + break; + case 10: + EnterOuterAlt(_localctx, 10); + { + State = 164; + executeStatement(); + } + break; + case 11: + EnterOuterAlt(_localctx, 11); + { + State = 165; + queryExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ExecuteStatementContext : ParserRuleContext { + public IdentifierContext name; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EXECUTE() { return GetToken(AccessSqlParser.EXECUTE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EXEC() { return GetToken(AccessSqlParser.EXEC, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public ExecuteStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_executeStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitExecuteStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ExecuteStatementContext executeStatement() { + ExecuteStatementContext _localctx = new ExecuteStatementContext(Context, State); + EnterRule(_localctx, 6, RULE_executeStatement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 168; + _la = TokenStream.LA(1); + if ( !(_la==EXECUTE || _la==EXEC) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + State = 169; + _localctx.name = identifier(); + State = 178; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 134418688L) != 0) || ((((_la - 81)) & ~0x3f) == 0 && ((1L << (_la - 81)) & 17171743773L) != 0)) { + { + State = 170; + expression(0); + State = 175; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 171; + Match(COMMA); + State = 172; + expression(0); + } + } + State = 177; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class UpdateStatementContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode UPDATE() { return GetToken(AccessSqlParser.UPDATE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TableSourceContext tableSource() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SET() { return GetToken(AccessSqlParser.SET, 0); } + [System.Diagnostics.DebuggerNonUserCode] public AssignmentContext[] assignment() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public AssignmentContext assignment(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + [System.Diagnostics.DebuggerNonUserCode] public WhereClauseContext whereClause() { + return GetRuleContext(0); + } + public UpdateStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_updateStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitUpdateStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public UpdateStatementContext updateStatement() { + UpdateStatementContext _localctx = new UpdateStatementContext(Context, State); + EnterRule(_localctx, 8, RULE_updateStatement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 180; + Match(UPDATE); + State = 181; + tableSource(); + State = 182; + Match(SET); + State = 183; + assignment(); + State = 188; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 184; + Match(COMMA); + State = 185; + assignment(); + } + } + State = 190; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 192; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==WHERE) { + { + State = 191; + whereClause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class AssignmentContext : ParserRuleContext { + public ColumnRefContext target; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EQ() { return GetToken(AccessSqlParser.EQ, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ColumnRefContext columnRef() { + return GetRuleContext(0); + } + public AssignmentContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_assignment; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitAssignment(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public AssignmentContext assignment() { + AssignmentContext _localctx = new AssignmentContext(Context, State); + EnterRule(_localctx, 10, RULE_assignment); + try { + EnterOuterAlt(_localctx, 1); + { + State = 194; + _localctx.target = columnRef(); + State = 195; + Match(EQ); + State = 196; + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class DeleteStatementContext : ParserRuleContext { + public IdentifierContext target; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DELETE() { return GetToken(AccessSqlParser.DELETE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FROM() { return GetToken(AccessSqlParser.FROM, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TableSourceContext tableSource() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DOT() { return GetToken(AccessSqlParser.DOT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode STAR() { return GetToken(AccessSqlParser.STAR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public WhereClauseContext whereClause() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public DeleteStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_deleteStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDeleteStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public DeleteStatementContext deleteStatement() { + DeleteStatementContext _localctx = new DeleteStatementContext(Context, State); + EnterRule(_localctx, 12, RULE_deleteStatement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 198; + Match(DELETE); + State = 204; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case BRACKET_ID: + case BACKTICK_ID: + case IDENTIFIER: + { + State = 199; + _localctx.target = identifier(); + State = 200; + Match(DOT); + State = 201; + Match(STAR); + } + break; + case STAR: + { + State = 203; + Match(STAR); + } + break; + case FROM: + break; + default: + break; + } + State = 206; + Match(FROM); + State = 207; + tableSource(); + State = 209; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==WHERE) { + { + State = 208; + whereClause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class SystemVariableSelectContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SELECT() { return GetToken(AccessSqlParser.SELECT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public SysVarItemContext[] sysVarItem() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public SysVarItemContext sysVarItem(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public SystemVariableSelectContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_systemVariableSelect; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSystemVariableSelect(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public SystemVariableSelectContext systemVariableSelect() { + SystemVariableSelectContext _localctx = new SystemVariableSelectContext(Context, State); + EnterRule(_localctx, 14, RULE_systemVariableSelect); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 211; + Match(SELECT); + State = 212; + sysVarItem(); + State = 217; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 213; + Match(COMMA); + State = 214; + sysVarItem(); + } + } + State = 219; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class SysVarItemContext : ParserRuleContext { + public IdentifierContext alias; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SYSVAR() { return GetToken(AccessSqlParser.SYSVAR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode AS() { return GetToken(AccessSqlParser.AS, 0); } + public SysVarItemContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_sysVarItem; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSysVarItem(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public SysVarItemContext sysVarItem() { + SysVarItemContext _localctx = new SysVarItemContext(Context, State); + EnterRule(_localctx, 16, RULE_sysVarItem); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 220; + Match(SYSVAR); + State = 225; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==AS || ((((_la - 112)) & ~0x3f) == 0 && ((1L << (_la - 112)) & 7L) != 0)) { + { + State = 222; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==AS) { + { + State = 221; + Match(AS); + } + } + + State = 224; + _localctx.alias = identifier(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ParametersClauseContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARAMETERS() { return GetToken(AccessSqlParser.PARAMETERS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ProcParamContext[] procParam() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ProcParamContext procParam(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SEMI() { return GetToken(AccessSqlParser.SEMI, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public ParametersClauseContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_parametersClause; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitParametersClause(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ParametersClauseContext parametersClause() { + ParametersClauseContext _localctx = new ParametersClauseContext(Context, State); + EnterRule(_localctx, 18, RULE_parametersClause); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 227; + Match(PARAMETERS); + State = 228; + procParam(); + State = 233; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 229; + Match(COMMA); + State = 230; + procParam(); + } + } + State = 235; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 236; + Match(SEMI); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class CreateTableStatementContext : ParserRuleContext { + public IToken temp; + public IdentifierContext table; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CREATE() { return GetToken(AccessSqlParser.CREATE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TABLE() { return GetToken(AccessSqlParser.TABLE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ColumnDefinitionContext[] columnDefinition() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ColumnDefinitionContext columnDefinition(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + [System.Diagnostics.DebuggerNonUserCode] public TableConstraintContext[] tableConstraint() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public TableConstraintContext tableConstraint(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TEMPORARY() { return GetToken(AccessSqlParser.TEMPORARY, 0); } + public CreateTableStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_createTableStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCreateTableStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public CreateTableStatementContext createTableStatement() { + CreateTableStatementContext _localctx = new CreateTableStatementContext(Context, State); + EnterRule(_localctx, 20, RULE_createTableStatement); + int _la; + try { + int _alt; + EnterOuterAlt(_localctx, 1); + { + State = 238; + Match(CREATE); + State = 240; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==TEMPORARY) { + { + State = 239; + _localctx.temp = Match(TEMPORARY); + } + } + + State = 242; + Match(TABLE); + State = 243; + _localctx.table = identifier(); + State = 244; + Match(LPAREN); + State = 245; + columnDefinition(); + State = 250; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,16,Context); + while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + State = 246; + Match(COMMA); + State = 247; + columnDefinition(); + } + } + } + State = 252; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,16,Context); + } + State = 257; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 253; + Match(COMMA); + State = 254; + tableConstraint(); + } + } + State = 259; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 260; + Match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class CreateViewStatementContext : ParserRuleContext { + public IdentifierContext name; + public IdentifierContext _identifier; + public IList _columns = new List(); + public QueryExpressionContext query; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CREATE() { return GetToken(AccessSqlParser.CREATE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode VIEW() { return GetToken(AccessSqlParser.VIEW, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode AS() { return GetToken(AccessSqlParser.AS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public QueryExpressionContext queryExpression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public CreateViewStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_createViewStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCreateViewStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public CreateViewStatementContext createViewStatement() { + CreateViewStatementContext _localctx = new CreateViewStatementContext(Context, State); + EnterRule(_localctx, 22, RULE_createViewStatement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 262; + Match(CREATE); + State = 263; + Match(VIEW); + State = 264; + _localctx.name = identifier(); + State = 276; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==LPAREN) { + { + State = 265; + Match(LPAREN); + State = 266; + _localctx._identifier = identifier(); + _localctx._columns.Add(_localctx._identifier); + State = 271; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 267; + Match(COMMA); + State = 268; + _localctx._identifier = identifier(); + _localctx._columns.Add(_localctx._identifier); + } + } + State = 273; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 274; + Match(RPAREN); + } + } + + State = 278; + Match(AS); + State = 279; + _localctx.query = queryExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class CreateProcedureStatementContext : ParserRuleContext { + public IdentifierContext name; + public ProcedureBodyContext body; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CREATE() { return GetToken(AccessSqlParser.CREATE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PROCEDURE() { return GetToken(AccessSqlParser.PROCEDURE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode AS() { return GetToken(AccessSqlParser.AS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ProcedureBodyContext procedureBody() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ProcParamListContext procParamList() { + return GetRuleContext(0); + } + public CreateProcedureStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_createProcedureStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCreateProcedureStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public CreateProcedureStatementContext createProcedureStatement() { + CreateProcedureStatementContext _localctx = new CreateProcedureStatementContext(Context, State); + EnterRule(_localctx, 24, RULE_createProcedureStatement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 281; + Match(CREATE); + State = 282; + Match(PROCEDURE); + State = 283; + _localctx.name = identifier(); + State = 285; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (((((_la - 99)) & ~0x3f) == 0 && ((1L << (_la - 99)) & 57409L) != 0)) { + { + State = 284; + procParamList(); + } + } + + State = 287; + Match(AS); + State = 288; + _localctx.body = procedureBody(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ProcParamListContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ProcParamContext[] procParam() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ProcParamContext procParam(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public ProcParamListContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_procParamList; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitProcParamList(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ProcParamListContext procParamList() { + ProcParamListContext _localctx = new ProcParamListContext(Context, State); + EnterRule(_localctx, 26, RULE_procParamList); + int _la; + try { + State = 309; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case LPAREN: + EnterOuterAlt(_localctx, 1); + { + State = 290; + Match(LPAREN); + State = 291; + procParam(); + State = 296; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 292; + Match(COMMA); + State = 293; + procParam(); + } + } + State = 298; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 299; + Match(RPAREN); + } + break; + case PARAM: + case BRACKET_ID: + case BACKTICK_ID: + case IDENTIFIER: + EnterOuterAlt(_localctx, 2); + { + State = 301; + procParam(); + State = 306; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 302; + Match(COMMA); + State = 303; + procParam(); + } + } + State = 308; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ProcParamContext : ParserRuleContext { + public ProcParamNameContext pname; + [System.Diagnostics.DebuggerNonUserCode] public DataTypeContext dataType() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ProcParamNameContext procParamName() { + return GetRuleContext(0); + } + public ProcParamContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_procParam; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitProcParam(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ProcParamContext procParam() { + ProcParamContext _localctx = new ProcParamContext(Context, State); + EnterRule(_localctx, 28, RULE_procParam); + try { + EnterOuterAlt(_localctx, 1); + { + State = 311; + _localctx.pname = procParamName(); + State = 312; + dataType(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ProcParamNameContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARAM() { return GetToken(AccessSqlParser.PARAM, 0); } + public ProcParamNameContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_procParamName; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitProcParamName(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ProcParamNameContext procParamName() { + ProcParamNameContext _localctx = new ProcParamNameContext(Context, State); + EnterRule(_localctx, 30, RULE_procParamName); + try { + State = 316; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case BRACKET_ID: + case BACKTICK_ID: + case IDENTIFIER: + EnterOuterAlt(_localctx, 1); + { + State = 314; + identifier(); + } + break; + case PARAM: + EnterOuterAlt(_localctx, 2); + { + State = 315; + Match(PARAM); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class AlterTableStatementContext : ParserRuleContext { + public IdentifierContext table; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ALTER() { return GetToken(AccessSqlParser.ALTER, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TABLE() { return GetToken(AccessSqlParser.TABLE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public AlterTableActionContext alterTableAction() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public AlterTableStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_alterTableStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitAlterTableStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public AlterTableStatementContext alterTableStatement() { + AlterTableStatementContext _localctx = new AlterTableStatementContext(Context, State); + EnterRule(_localctx, 32, RULE_alterTableStatement); + try { + EnterOuterAlt(_localctx, 1); + { + State = 318; + Match(ALTER); + State = 319; + Match(TABLE); + State = 320; + _localctx.table = identifier(); + State = 321; + alterTableAction(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class AlterTableActionContext : ParserRuleContext { + public AlterTableActionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_alterTableAction; } } + + public AlterTableActionContext() { } + public virtual void CopyFrom(AlterTableActionContext context) { + base.CopyFrom(context); + } + } + public partial class AddConstraintActionContext : AlterTableActionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ADD() { return GetToken(AccessSqlParser.ADD, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TableConstraintContext tableConstraint() { + return GetRuleContext(0); + } + public AddConstraintActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitAddConstraintAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class RenameIndexActionContext : AlterTableActionContext { + public IdentifierContext index; + public IdentifierContext newName; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RENAME() { return GetToken(AccessSqlParser.RENAME, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INDEX() { return GetToken(AccessSqlParser.INDEX, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TO() { return GetToken(AccessSqlParser.TO, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + public RenameIndexActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitRenameIndexAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class DropColumnActionContext : AlterTableActionContext { + public IdentifierContext field; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DROP() { return GetToken(AccessSqlParser.DROP, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COLUMN() { return GetToken(AccessSqlParser.COLUMN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public DropColumnActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDropColumnAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class RenameTableActionContext : AlterTableActionContext { + public IdentifierContext newName; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RENAME() { return GetToken(AccessSqlParser.RENAME, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TO() { return GetToken(AccessSqlParser.TO, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public RenameTableActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitRenameTableAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class RenameColumnActionContext : AlterTableActionContext { + public IdentifierContext field; + public IdentifierContext newName; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RENAME() { return GetToken(AccessSqlParser.RENAME, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COLUMN() { return GetToken(AccessSqlParser.COLUMN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TO() { return GetToken(AccessSqlParser.TO, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + public RenameColumnActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitRenameColumnAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class DropConstraintActionContext : AlterTableActionContext { + public IdentifierContext cname; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DROP() { return GetToken(AccessSqlParser.DROP, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CONSTRAINT() { return GetToken(AccessSqlParser.CONSTRAINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public DropConstraintActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDropConstraintAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class AlterColumnSetDefaultActionContext : AlterTableActionContext { + public IdentifierContext field; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ALTER() { return GetToken(AccessSqlParser.ALTER, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SET() { return GetToken(AccessSqlParser.SET, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DEFAULT() { return GetToken(AccessSqlParser.DEFAULT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COLUMN() { return GetToken(AccessSqlParser.COLUMN, 0); } + public AlterColumnSetDefaultActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitAlterColumnSetDefaultAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class AddColumnActionContext : AlterTableActionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ADD() { return GetToken(AccessSqlParser.ADD, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ColumnDefinitionContext columnDefinition() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COLUMN() { return GetToken(AccessSqlParser.COLUMN, 0); } + public AddColumnActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitAddColumnAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class AlterColumnActionContext : AlterTableActionContext { + public IdentifierContext field; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ALTER() { return GetToken(AccessSqlParser.ALTER, 0); } + [System.Diagnostics.DebuggerNonUserCode] public DataTypeContext dataType() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COLUMN() { return GetToken(AccessSqlParser.COLUMN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ColumnConstraintContext[] columnConstraint() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ColumnConstraintContext columnConstraint(int i) { + return GetRuleContext(i); + } + public AlterColumnActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitAlterColumnAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class AlterColumnDropDefaultActionContext : AlterTableActionContext { + public IdentifierContext field; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ALTER() { return GetToken(AccessSqlParser.ALTER, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DROP() { return GetToken(AccessSqlParser.DROP, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DEFAULT() { return GetToken(AccessSqlParser.DEFAULT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COLUMN() { return GetToken(AccessSqlParser.COLUMN, 0); } + public AlterColumnDropDefaultActionContext(AlterTableActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitAlterColumnDropDefaultAction(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public AlterTableActionContext alterTableAction() { + AlterTableActionContext _localctx = new AlterTableActionContext(Context, State); + EnterRule(_localctx, 34, RULE_alterTableAction); + int _la; + try { + State = 380; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,30,Context) ) { + case 1: + _localctx = new AddColumnActionContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 323; + Match(ADD); + State = 325; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==COLUMN) { + { + State = 324; + Match(COLUMN); + } + } + + State = 327; + columnDefinition(); + } + break; + case 2: + _localctx = new AddConstraintActionContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 328; + Match(ADD); + State = 329; + tableConstraint(); + } + break; + case 3: + _localctx = new AlterColumnActionContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 330; + Match(ALTER); + State = 332; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==COLUMN) { + { + State = 331; + Match(COLUMN); + } + } + + State = 334; + ((AlterColumnActionContext)_localctx).field = identifier(); + State = 335; + dataType(); + State = 339; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 378302368699121920L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 1049637L) != 0)) { + { + { + State = 336; + columnConstraint(); + } + } + State = 341; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + break; + case 4: + _localctx = new AlterColumnSetDefaultActionContext(_localctx); + EnterOuterAlt(_localctx, 4); + { + State = 342; + Match(ALTER); + State = 344; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==COLUMN) { + { + State = 343; + Match(COLUMN); + } + } + + State = 346; + ((AlterColumnSetDefaultActionContext)_localctx).field = identifier(); + State = 347; + Match(SET); + State = 348; + Match(DEFAULT); + State = 349; + expression(0); + } + break; + case 5: + _localctx = new AlterColumnDropDefaultActionContext(_localctx); + EnterOuterAlt(_localctx, 5); + { + State = 351; + Match(ALTER); + State = 353; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==COLUMN) { + { + State = 352; + Match(COLUMN); + } + } + + State = 355; + ((AlterColumnDropDefaultActionContext)_localctx).field = identifier(); + State = 356; + Match(DROP); + State = 357; + Match(DEFAULT); + } + break; + case 6: + _localctx = new DropColumnActionContext(_localctx); + EnterOuterAlt(_localctx, 6); + { + State = 359; + Match(DROP); + State = 360; + Match(COLUMN); + State = 361; + ((DropColumnActionContext)_localctx).field = identifier(); + } + break; + case 7: + _localctx = new DropConstraintActionContext(_localctx); + EnterOuterAlt(_localctx, 7); + { + State = 362; + Match(DROP); + State = 363; + Match(CONSTRAINT); + State = 364; + ((DropConstraintActionContext)_localctx).cname = identifier(); + } + break; + case 8: + _localctx = new RenameTableActionContext(_localctx); + EnterOuterAlt(_localctx, 8); + { + State = 365; + Match(RENAME); + State = 366; + Match(TO); + State = 367; + ((RenameTableActionContext)_localctx).newName = identifier(); + } + break; + case 9: + _localctx = new RenameColumnActionContext(_localctx); + EnterOuterAlt(_localctx, 9); + { + State = 368; + Match(RENAME); + State = 369; + Match(COLUMN); + State = 370; + ((RenameColumnActionContext)_localctx).field = identifier(); + State = 371; + Match(TO); + State = 372; + ((RenameColumnActionContext)_localctx).newName = identifier(); + } + break; + case 10: + _localctx = new RenameIndexActionContext(_localctx); + EnterOuterAlt(_localctx, 10); + { + State = 374; + Match(RENAME); + State = 375; + Match(INDEX); + State = 376; + ((RenameIndexActionContext)_localctx).index = identifier(); + State = 377; + Match(TO); + State = 378; + ((RenameIndexActionContext)_localctx).newName = identifier(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ProcedureBodyContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public QueryExpressionContext queryExpression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public InsertStatementContext insertStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public CreateTableStatementContext createTableStatement() { + return GetRuleContext(0); + } + public ProcedureBodyContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_procedureBody; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitProcedureBody(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ProcedureBodyContext procedureBody() { + ProcedureBodyContext _localctx = new ProcedureBodyContext(Context, State); + EnterRule(_localctx, 36, RULE_procedureBody); + try { + State = 385; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case SELECT: + case LPAREN: + EnterOuterAlt(_localctx, 1); + { + State = 382; + queryExpression(); + } + break; + case INSERT: + EnterOuterAlt(_localctx, 2); + { + State = 383; + insertStatement(); + } + break; + case CREATE: + EnterOuterAlt(_localctx, 3); + { + State = 384; + createTableStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class CreateIndexStatementContext : ParserRuleContext { + public IToken unique; + public IdentifierContext name; + public IdentifierContext table; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CREATE() { return GetToken(AccessSqlParser.CREATE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INDEX() { return GetToken(AccessSqlParser.INDEX, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ON() { return GetToken(AccessSqlParser.ON, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IndexColumnContext[] indexColumn() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IndexColumnContext indexColumn(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode WITH() { return GetToken(AccessSqlParser.WITH, 0); } + [System.Diagnostics.DebuggerNonUserCode] public WithOptionContext withOption() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode UNIQUE() { return GetToken(AccessSqlParser.UNIQUE, 0); } + public CreateIndexStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_createIndexStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCreateIndexStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public CreateIndexStatementContext createIndexStatement() { + CreateIndexStatementContext _localctx = new CreateIndexStatementContext(Context, State); + EnterRule(_localctx, 38, RULE_createIndexStatement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 387; + Match(CREATE); + State = 389; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==UNIQUE) { + { + State = 388; + _localctx.unique = Match(UNIQUE); + } + } + + State = 391; + Match(INDEX); + State = 392; + _localctx.name = identifier(); + State = 393; + Match(ON); + State = 394; + _localctx.table = identifier(); + State = 395; + Match(LPAREN); + State = 396; + indexColumn(); + State = 401; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 397; + Match(COMMA); + State = 398; + indexColumn(); + } + } + State = 403; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 404; + Match(RPAREN); + State = 407; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==WITH) { + { + State = 405; + Match(WITH); + State = 406; + withOption(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class DropStatementContext : ParserRuleContext { + public DropStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_dropStatement; } } + + public DropStatementContext() { } + public virtual void CopyFrom(DropStatementContext context) { + base.CopyFrom(context); + } + } + public partial class DropProcedureStatementContext : DropStatementContext { + public IdentifierContext proc; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DROP() { return GetToken(AccessSqlParser.DROP, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PROCEDURE() { return GetToken(AccessSqlParser.PROCEDURE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public DropProcedureStatementContext(DropStatementContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDropProcedureStatement(this); + else return visitor.VisitChildren(this); + } + } + public partial class DropViewStatementContext : DropStatementContext { + public IdentifierContext view; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DROP() { return GetToken(AccessSqlParser.DROP, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode VIEW() { return GetToken(AccessSqlParser.VIEW, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public DropViewStatementContext(DropStatementContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDropViewStatement(this); + else return visitor.VisitChildren(this); + } + } + public partial class DropTableStatementContext : DropStatementContext { + public IdentifierContext table; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DROP() { return GetToken(AccessSqlParser.DROP, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TABLE() { return GetToken(AccessSqlParser.TABLE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public DropTableStatementContext(DropStatementContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDropTableStatement(this); + else return visitor.VisitChildren(this); + } + } + public partial class DropIndexStatementContext : DropStatementContext { + public IdentifierContext index; + public IdentifierContext table; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DROP() { return GetToken(AccessSqlParser.DROP, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INDEX() { return GetToken(AccessSqlParser.INDEX, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ON() { return GetToken(AccessSqlParser.ON, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + public DropIndexStatementContext(DropStatementContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDropIndexStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public DropStatementContext dropStatement() { + DropStatementContext _localctx = new DropStatementContext(Context, State); + EnterRule(_localctx, 40, RULE_dropStatement); + try { + State = 424; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,35,Context) ) { + case 1: + _localctx = new DropTableStatementContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 409; + Match(DROP); + State = 410; + Match(TABLE); + State = 411; + ((DropTableStatementContext)_localctx).table = identifier(); + } + break; + case 2: + _localctx = new DropIndexStatementContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 412; + Match(DROP); + State = 413; + Match(INDEX); + State = 414; + ((DropIndexStatementContext)_localctx).index = identifier(); + State = 415; + Match(ON); + State = 416; + ((DropIndexStatementContext)_localctx).table = identifier(); + } + break; + case 3: + _localctx = new DropProcedureStatementContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 418; + Match(DROP); + State = 419; + Match(PROCEDURE); + State = 420; + ((DropProcedureStatementContext)_localctx).proc = identifier(); + } + break; + case 4: + _localctx = new DropViewStatementContext(_localctx); + EnterOuterAlt(_localctx, 4); + { + State = 421; + Match(DROP); + State = 422; + Match(VIEW); + State = 423; + ((DropViewStatementContext)_localctx).view = identifier(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class IndexColumnContext : ParserRuleContext { + public IdentifierContext col; + public IToken dir; + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ASC() { return GetToken(AccessSqlParser.ASC, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DESC() { return GetToken(AccessSqlParser.DESC, 0); } + public IndexColumnContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_indexColumn; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitIndexColumn(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public IndexColumnContext indexColumn() { + IndexColumnContext _localctx = new IndexColumnContext(Context, State); + EnterRule(_localctx, 42, RULE_indexColumn); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 426; + _localctx.col = identifier(); + State = 428; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==ASC || _la==DESC) { + { + State = 427; + _localctx.dir = TokenStream.LT(1); + _la = TokenStream.LA(1); + if ( !(_la==ASC || _la==DESC) ) { + _localctx.dir = ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class WithOptionContext : ParserRuleContext { + public WithOptionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_withOption; } } + + public WithOptionContext() { } + public virtual void CopyFrom(WithOptionContext context) { + base.CopyFrom(context); + } + } + public partial class WithPrimaryContext : WithOptionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PRIMARY() { return GetToken(AccessSqlParser.PRIMARY, 0); } + public WithPrimaryContext(WithOptionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitWithPrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class WithDisallowNullContext : WithOptionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DISALLOW() { return GetToken(AccessSqlParser.DISALLOW, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NULL() { return GetToken(AccessSqlParser.NULL, 0); } + public WithDisallowNullContext(WithOptionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitWithDisallowNull(this); + else return visitor.VisitChildren(this); + } + } + public partial class WithIgnoreNullContext : WithOptionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode IGNORE() { return GetToken(AccessSqlParser.IGNORE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NULL() { return GetToken(AccessSqlParser.NULL, 0); } + public WithIgnoreNullContext(WithOptionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitWithIgnoreNull(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public WithOptionContext withOption() { + WithOptionContext _localctx = new WithOptionContext(Context, State); + EnterRule(_localctx, 44, RULE_withOption); + try { + State = 435; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case PRIMARY: + _localctx = new WithPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 430; + Match(PRIMARY); + } + break; + case DISALLOW: + _localctx = new WithDisallowNullContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 431; + Match(DISALLOW); + State = 432; + Match(NULL); + } + break; + case IGNORE: + _localctx = new WithIgnoreNullContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 433; + Match(IGNORE); + State = 434; + Match(NULL); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ColumnDefinitionContext : ParserRuleContext { + public IdentifierContext name; + [System.Diagnostics.DebuggerNonUserCode] public DataTypeContext dataType() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ColumnConstraintContext[] columnConstraint() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ColumnConstraintContext columnConstraint(int i) { + return GetRuleContext(i); + } + public ColumnDefinitionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_columnDefinition; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitColumnDefinition(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ColumnDefinitionContext columnDefinition() { + ColumnDefinitionContext _localctx = new ColumnDefinitionContext(Context, State); + EnterRule(_localctx, 46, RULE_columnDefinition); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 437; + _localctx.name = identifier(); + State = 438; + dataType(); + State = 442; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 378302368699121920L) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & 1049637L) != 0)) { + { + { + State = 439; + columnConstraint(); + } + } + State = 444; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class DataTypeContext : ParserRuleContext { + public IdentifierContext typeName; + public IdentifierContext extra; + public IdentifierContext extra2; + public SignedIntegerContext size; + public SignedIntegerContext scale; + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public SignedIntegerContext[] signedInteger() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public SignedIntegerContext signedInteger(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA() { return GetToken(AccessSqlParser.COMMA, 0); } + public DataTypeContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_dataType; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDataType(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public DataTypeContext dataType() { + DataTypeContext _localctx = new DataTypeContext(Context, State); + EnterRule(_localctx, 48, RULE_dataType); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 445; + _localctx.typeName = identifier(); + State = 447; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,39,Context) ) { + case 1: + { + State = 446; + _localctx.extra = identifier(); + } + break; + } + State = 450; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (((((_la - 112)) & ~0x3f) == 0 && ((1L << (_la - 112)) & 7L) != 0)) { + { + State = 449; + _localctx.extra2 = identifier(); + } + } + + State = 460; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==LPAREN) { + { + State = 452; + Match(LPAREN); + State = 453; + _localctx.size = signedInteger(); + State = 456; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==COMMA) { + { + State = 454; + Match(COMMA); + State = 455; + _localctx.scale = signedInteger(); + } + } + + State = 458; + Match(RPAREN); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class SignedIntegerContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INTEGER_LITERAL() { return GetToken(AccessSqlParser.INTEGER_LITERAL, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode MINUS() { return GetToken(AccessSqlParser.MINUS, 0); } + public SignedIntegerContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_signedInteger; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSignedInteger(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public SignedIntegerContext signedInteger() { + SignedIntegerContext _localctx = new SignedIntegerContext(Context, State); + EnterRule(_localctx, 50, RULE_signedInteger); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 463; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==MINUS) { + { + State = 462; + Match(MINUS); + } + } + + State = 465; + Match(INTEGER_LITERAL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ColumnConstraintContext : ParserRuleContext { + public ColumnConstraintContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_columnConstraint; } } + + public ColumnConstraintContext() { } + public virtual void CopyFrom(ColumnConstraintContext context) { + base.CopyFrom(context); + } + } + public partial class DefaultConstraintContext : ColumnConstraintContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DEFAULT() { return GetToken(AccessSqlParser.DEFAULT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + public DefaultConstraintContext(ColumnConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDefaultConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class CheckColumnConstraintContext : ColumnConstraintContext { + public IdentifierContext cname; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CHECK() { return GetToken(AccessSqlParser.CHECK, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public CheckBodyContext checkBody() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CONSTRAINT() { return GetToken(AccessSqlParser.CONSTRAINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public CheckColumnConstraintContext(ColumnConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCheckColumnConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class ColumnReferencesConstraintContext : ColumnConstraintContext { + public IdentifierContext cname; + public IdentifierContext refTable; + public IdentifierContext _identifier; + public IList _refColumns = new List(); + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode REFERENCES() { return GetToken(AccessSqlParser.REFERENCES, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CONSTRAINT() { return GetToken(AccessSqlParser.CONSTRAINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ForeignKeyActionContext[] foreignKeyAction() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ForeignKeyActionContext foreignKeyAction(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public ColumnReferencesConstraintContext(ColumnConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitColumnReferencesConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class NullableConstraintContext : ColumnConstraintContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NULL() { return GetToken(AccessSqlParser.NULL, 0); } + public NullableConstraintContext(ColumnConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitNullableConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class CompressionConstraintContext : ColumnConstraintContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode WITH() { return GetToken(AccessSqlParser.WITH, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMPRESSION() { return GetToken(AccessSqlParser.COMPRESSION, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMP() { return GetToken(AccessSqlParser.COMP, 0); } + public CompressionConstraintContext(ColumnConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCompressionConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class NotNullConstraintContext : ColumnConstraintContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NOT() { return GetToken(AccessSqlParser.NOT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NULL() { return GetToken(AccessSqlParser.NULL, 0); } + public NotNullConstraintContext(ColumnConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitNotNullConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class PrimaryKeyConstraintContext : ColumnConstraintContext { + public IdentifierContext cname; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PRIMARY() { return GetToken(AccessSqlParser.PRIMARY, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode KEY() { return GetToken(AccessSqlParser.KEY, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CONSTRAINT() { return GetToken(AccessSqlParser.CONSTRAINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public PrimaryKeyConstraintContext(ColumnConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitPrimaryKeyConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class UniqueColumnConstraintContext : ColumnConstraintContext { + public IdentifierContext cname; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode UNIQUE() { return GetToken(AccessSqlParser.UNIQUE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CONSTRAINT() { return GetToken(AccessSqlParser.CONSTRAINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public UniqueColumnConstraintContext(ColumnConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitUniqueColumnConstraint(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ColumnConstraintContext columnConstraint() { + ColumnConstraintContext _localctx = new ColumnConstraintContext(Context, State); + EnterRule(_localctx, 52, RULE_columnConstraint); + int _la; + try { + State = 519; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,51,Context) ) { + case 1: + _localctx = new NotNullConstraintContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 467; + Match(NOT); + State = 468; + Match(NULL); + } + break; + case 2: + _localctx = new NullableConstraintContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 469; + Match(NULL); + } + break; + case 3: + _localctx = new DefaultConstraintContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 470; + Match(DEFAULT); + State = 471; + expression(0); + } + break; + case 4: + _localctx = new CompressionConstraintContext(_localctx); + EnterOuterAlt(_localctx, 4); + { + State = 472; + Match(WITH); + State = 473; + _la = TokenStream.LA(1); + if ( !(_la==COMPRESSION || _la==COMP) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + break; + case 5: + _localctx = new CheckColumnConstraintContext(_localctx); + EnterOuterAlt(_localctx, 5); + { + State = 476; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==CONSTRAINT) { + { + State = 474; + Match(CONSTRAINT); + State = 475; + ((CheckColumnConstraintContext)_localctx).cname = identifier(); + } + } + + State = 478; + Match(CHECK); + State = 479; + Match(LPAREN); + State = 480; + checkBody(); + State = 481; + Match(RPAREN); + } + break; + case 6: + _localctx = new PrimaryKeyConstraintContext(_localctx); + EnterOuterAlt(_localctx, 6); + { + State = 485; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==CONSTRAINT) { + { + State = 483; + Match(CONSTRAINT); + State = 484; + ((PrimaryKeyConstraintContext)_localctx).cname = identifier(); + } + } + + State = 487; + Match(PRIMARY); + State = 488; + Match(KEY); + } + break; + case 7: + _localctx = new UniqueColumnConstraintContext(_localctx); + EnterOuterAlt(_localctx, 7); + { + State = 491; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==CONSTRAINT) { + { + State = 489; + Match(CONSTRAINT); + State = 490; + ((UniqueColumnConstraintContext)_localctx).cname = identifier(); + } + } + + State = 493; + Match(UNIQUE); + } + break; + case 8: + _localctx = new ColumnReferencesConstraintContext(_localctx); + EnterOuterAlt(_localctx, 8); + { + State = 496; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==CONSTRAINT) { + { + State = 494; + Match(CONSTRAINT); + State = 495; + ((ColumnReferencesConstraintContext)_localctx).cname = identifier(); + } + } + + State = 498; + Match(REFERENCES); + State = 499; + ((ColumnReferencesConstraintContext)_localctx).refTable = identifier(); + State = 511; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==LPAREN) { + { + State = 500; + Match(LPAREN); + State = 501; + ((ColumnReferencesConstraintContext)_localctx)._identifier = identifier(); + ((ColumnReferencesConstraintContext)_localctx)._refColumns.Add(((ColumnReferencesConstraintContext)_localctx)._identifier); + State = 506; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 502; + Match(COMMA); + State = 503; + ((ColumnReferencesConstraintContext)_localctx)._identifier = identifier(); + ((ColumnReferencesConstraintContext)_localctx)._refColumns.Add(((ColumnReferencesConstraintContext)_localctx)._identifier); + } + } + State = 508; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 509; + Match(RPAREN); + } + } + + State = 516; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==ON) { + { + { + State = 513; + foreignKeyAction(); + } + } + State = 518; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class TableConstraintContext : ParserRuleContext { + public TableConstraintContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_tableConstraint; } } + + public TableConstraintContext() { } + public virtual void CopyFrom(TableConstraintContext context) { + base.CopyFrom(context); + } + } + public partial class PrimaryKeyTableConstraintContext : TableConstraintContext { + public IdentifierContext name; + public IdentifierContext _identifier; + public IList _columns = new List(); + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PRIMARY() { return GetToken(AccessSqlParser.PRIMARY, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode KEY() { return GetToken(AccessSqlParser.KEY, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CONSTRAINT() { return GetToken(AccessSqlParser.CONSTRAINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public PrimaryKeyTableConstraintContext(TableConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitPrimaryKeyTableConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class ForeignKeyTableConstraintContext : TableConstraintContext { + public IdentifierContext name; + public IToken noIndex; + public IdentifierContext _identifier; + public IList _columns = new List(); + public IdentifierContext refTable; + public IList _refColumns = new List(); + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FOREIGN() { return GetToken(AccessSqlParser.FOREIGN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode KEY() { return GetToken(AccessSqlParser.KEY, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] LPAREN() { return GetTokens(AccessSqlParser.LPAREN); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN(int i) { + return GetToken(AccessSqlParser.LPAREN, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] RPAREN() { return GetTokens(AccessSqlParser.RPAREN); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN(int i) { + return GetToken(AccessSqlParser.RPAREN, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode REFERENCES() { return GetToken(AccessSqlParser.REFERENCES, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CONSTRAINT() { return GetToken(AccessSqlParser.CONSTRAINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INDEX() { return GetToken(AccessSqlParser.INDEX, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ForeignKeyActionContext[] foreignKeyAction() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ForeignKeyActionContext foreignKeyAction(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NO() { return GetToken(AccessSqlParser.NO, 0); } + public ForeignKeyTableConstraintContext(TableConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitForeignKeyTableConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class UniqueTableConstraintContext : TableConstraintContext { + public IdentifierContext name; + public IdentifierContext _identifier; + public IList _columns = new List(); + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode UNIQUE() { return GetToken(AccessSqlParser.UNIQUE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CONSTRAINT() { return GetToken(AccessSqlParser.CONSTRAINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public UniqueTableConstraintContext(TableConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitUniqueTableConstraint(this); + else return visitor.VisitChildren(this); + } + } + public partial class CheckTableConstraintContext : TableConstraintContext { + public IdentifierContext name; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CHECK() { return GetToken(AccessSqlParser.CHECK, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public CheckBodyContext checkBody() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CONSTRAINT() { return GetToken(AccessSqlParser.CONSTRAINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public CheckTableConstraintContext(TableConstraintContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCheckTableConstraint(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public TableConstraintContext tableConstraint() { + TableConstraintContext _localctx = new TableConstraintContext(Context, State); + EnterRule(_localctx, 54, RULE_tableConstraint); + int _la; + try { + State = 604; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,63,Context) ) { + case 1: + _localctx = new PrimaryKeyTableConstraintContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 523; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==CONSTRAINT) { + { + State = 521; + Match(CONSTRAINT); + State = 522; + ((PrimaryKeyTableConstraintContext)_localctx).name = identifier(); + } + } + + State = 525; + Match(PRIMARY); + State = 526; + Match(KEY); + State = 527; + Match(LPAREN); + State = 528; + ((PrimaryKeyTableConstraintContext)_localctx)._identifier = identifier(); + ((PrimaryKeyTableConstraintContext)_localctx)._columns.Add(((PrimaryKeyTableConstraintContext)_localctx)._identifier); + State = 533; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 529; + Match(COMMA); + State = 530; + ((PrimaryKeyTableConstraintContext)_localctx)._identifier = identifier(); + ((PrimaryKeyTableConstraintContext)_localctx)._columns.Add(((PrimaryKeyTableConstraintContext)_localctx)._identifier); + } + } + State = 535; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 536; + Match(RPAREN); + } + break; + case 2: + _localctx = new UniqueTableConstraintContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 540; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==CONSTRAINT) { + { + State = 538; + Match(CONSTRAINT); + State = 539; + ((UniqueTableConstraintContext)_localctx).name = identifier(); + } + } + + State = 542; + Match(UNIQUE); + State = 543; + Match(LPAREN); + State = 544; + ((UniqueTableConstraintContext)_localctx)._identifier = identifier(); + ((UniqueTableConstraintContext)_localctx)._columns.Add(((UniqueTableConstraintContext)_localctx)._identifier); + State = 549; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 545; + Match(COMMA); + State = 546; + ((UniqueTableConstraintContext)_localctx)._identifier = identifier(); + ((UniqueTableConstraintContext)_localctx)._columns.Add(((UniqueTableConstraintContext)_localctx)._identifier); + } + } + State = 551; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 552; + Match(RPAREN); + } + break; + case 3: + _localctx = new ForeignKeyTableConstraintContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 556; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==CONSTRAINT) { + { + State = 554; + Match(CONSTRAINT); + State = 555; + ((ForeignKeyTableConstraintContext)_localctx).name = identifier(); + } + } + + State = 558; + Match(FOREIGN); + State = 559; + Match(KEY); + State = 562; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==NO) { + { + State = 560; + ((ForeignKeyTableConstraintContext)_localctx).noIndex = Match(NO); + State = 561; + Match(INDEX); + } + } + + State = 564; + Match(LPAREN); + State = 565; + ((ForeignKeyTableConstraintContext)_localctx)._identifier = identifier(); + ((ForeignKeyTableConstraintContext)_localctx)._columns.Add(((ForeignKeyTableConstraintContext)_localctx)._identifier); + State = 570; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 566; + Match(COMMA); + State = 567; + ((ForeignKeyTableConstraintContext)_localctx)._identifier = identifier(); + ((ForeignKeyTableConstraintContext)_localctx)._columns.Add(((ForeignKeyTableConstraintContext)_localctx)._identifier); + } + } + State = 572; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 573; + Match(RPAREN); + State = 574; + Match(REFERENCES); + State = 575; + ((ForeignKeyTableConstraintContext)_localctx).refTable = identifier(); + State = 587; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==LPAREN) { + { + State = 576; + Match(LPAREN); + State = 577; + ((ForeignKeyTableConstraintContext)_localctx)._identifier = identifier(); + ((ForeignKeyTableConstraintContext)_localctx)._refColumns.Add(((ForeignKeyTableConstraintContext)_localctx)._identifier); + State = 582; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 578; + Match(COMMA); + State = 579; + ((ForeignKeyTableConstraintContext)_localctx)._identifier = identifier(); + ((ForeignKeyTableConstraintContext)_localctx)._refColumns.Add(((ForeignKeyTableConstraintContext)_localctx)._identifier); + } + } + State = 584; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 585; + Match(RPAREN); + } + } + + State = 592; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==ON) { + { + { + State = 589; + foreignKeyAction(); + } + } + State = 594; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + break; + case 4: + _localctx = new CheckTableConstraintContext(_localctx); + EnterOuterAlt(_localctx, 4); + { + State = 597; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==CONSTRAINT) { + { + State = 595; + Match(CONSTRAINT); + State = 596; + ((CheckTableConstraintContext)_localctx).name = identifier(); + } + } + + State = 599; + Match(CHECK); + State = 600; + Match(LPAREN); + State = 601; + checkBody(); + State = 602; + Match(RPAREN); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class CheckBodyContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] LPAREN() { return GetTokens(AccessSqlParser.LPAREN); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN(int i) { + return GetToken(AccessSqlParser.LPAREN, i); + } + [System.Diagnostics.DebuggerNonUserCode] public CheckBodyContext[] checkBody() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public CheckBodyContext checkBody(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] RPAREN() { return GetTokens(AccessSqlParser.RPAREN); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN(int i) { + return GetToken(AccessSqlParser.RPAREN, i); + } + public CheckBodyContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_checkBody; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCheckBody(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public CheckBodyContext checkBody() { + CheckBodyContext _localctx = new CheckBodyContext(Context, State); + EnterRule(_localctx, 56, RULE_checkBody); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 613; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -2L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 18014329790005247L) != 0)) { + { + State = 611; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case SELECT: + case FROM: + case WHERE: + case TOP: + case AS: + case AND: + case OR: + case NOT: + case BAND: + case BOR: + case BXOR: + case BNOT: + case LIKE: + case MOD: + case INNER: + case LEFT: + case RIGHT: + case OUTER: + case JOIN: + case IN: + case ON: + case ORDER: + case GROUP: + case IS: + case BY: + case HAVING: + case EXISTS: + case IF: + case THEN: + case DISTINCTROW: + case DISTINCT: + case PERCENT: + case BETWEEN: + case UNION: + case ALL: + case INTERSECT: + case EXCEPT: + case CREATE: + case TABLE: + case BEGIN: + case COMMIT: + case ROLLBACK: + case TRANSACTION: + case WORK: + case ALTER: + case RENAME: + case TO: + case ADD: + case DROP: + case COLUMN: + case INSERT: + case INTO: + case VALUES: + case PRIMARY: + case KEY: + case CONSTRAINT: + case FOREIGN: + case REFERENCES: + case DELETE: + case UPDATE: + case CASCADE: + case RESTRICT: + case ACTION: + case SET: + case DEFAULT: + case NO: + case UNIQUE: + case INDEX: + case TEMPORARY: + case WITH: + case COMPRESSION: + case COMP: + case DISALLOW: + case IGNORE: + case CHECK: + case VIEW: + case PROCEDURE: + case PARAMETERS: + case EXECUTE: + case EXEC: + case ASC: + case DESC: + case TRUE: + case FALSE: + case NULL: + case STAR: + case SLASH: + case BACKSLASH: + case CARET: + case PLUS: + case MINUS: + case AMP: + case EQ: + case NEQ: + case LTE: + case GTE: + case LT: + case GT: + case COMMA: + case DOT: + case SEMI: + case SYSVAR: + case PARAM: + case HEX_LITERAL: + case INTEGER_LITERAL: + case NUMBER_LITERAL: + case STRING_LITERAL: + case DATE_LITERAL: + case GUID_LITERAL: + case BRACKET_ID: + case BACKTICK_ID: + case IDENTIFIER: + case WS: + case LINE_COMMENT: + case BLOCK_COMMENT: + { + State = 606; + _la = TokenStream.LA(1); + if ( _la <= 0 || (_la==LPAREN || _la==RPAREN) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + break; + case LPAREN: + { + State = 607; + Match(LPAREN); + State = 608; + checkBody(); + State = 609; + Match(RPAREN); + } + break; + default: + throw new NoViableAltException(this); + } + } + State = 615; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ForeignKeyActionContext : ParserRuleContext { + public ForeignKeyActionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_foreignKeyAction; } } + + public ForeignKeyActionContext() { } + public virtual void CopyFrom(ForeignKeyActionContext context) { + base.CopyFrom(context); + } + } + public partial class OnUpdateActionContext : ForeignKeyActionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ON() { return GetToken(AccessSqlParser.ON, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode UPDATE() { return GetToken(AccessSqlParser.UPDATE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ReferentialActionContext referentialAction() { + return GetRuleContext(0); + } + public OnUpdateActionContext(ForeignKeyActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitOnUpdateAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class OnDeleteActionContext : ForeignKeyActionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ON() { return GetToken(AccessSqlParser.ON, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DELETE() { return GetToken(AccessSqlParser.DELETE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ReferentialActionContext referentialAction() { + return GetRuleContext(0); + } + public OnDeleteActionContext(ForeignKeyActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitOnDeleteAction(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ForeignKeyActionContext foreignKeyAction() { + ForeignKeyActionContext _localctx = new ForeignKeyActionContext(Context, State); + EnterRule(_localctx, 58, RULE_foreignKeyAction); + try { + State = 622; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,66,Context) ) { + case 1: + _localctx = new OnUpdateActionContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 616; + Match(ON); + State = 617; + Match(UPDATE); + State = 618; + referentialAction(); + } + break; + case 2: + _localctx = new OnDeleteActionContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 619; + Match(ON); + State = 620; + Match(DELETE); + State = 621; + referentialAction(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ReferentialActionContext : ParserRuleContext { + public ReferentialActionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_referentialAction; } } + + public ReferentialActionContext() { } + public virtual void CopyFrom(ReferentialActionContext context) { + base.CopyFrom(context); + } + } + public partial class CascadeActionContext : ReferentialActionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CASCADE() { return GetToken(AccessSqlParser.CASCADE, 0); } + public CascadeActionContext(ReferentialActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCascadeAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class NoActionActionContext : ReferentialActionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NO() { return GetToken(AccessSqlParser.NO, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ACTION() { return GetToken(AccessSqlParser.ACTION, 0); } + public NoActionActionContext(ReferentialActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitNoActionAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class SetNullActionContext : ReferentialActionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SET() { return GetToken(AccessSqlParser.SET, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NULL() { return GetToken(AccessSqlParser.NULL, 0); } + public SetNullActionContext(ReferentialActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSetNullAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class RestrictActionContext : ReferentialActionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RESTRICT() { return GetToken(AccessSqlParser.RESTRICT, 0); } + public RestrictActionContext(ReferentialActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitRestrictAction(this); + else return visitor.VisitChildren(this); + } + } + public partial class SetDefaultActionContext : ReferentialActionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SET() { return GetToken(AccessSqlParser.SET, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DEFAULT() { return GetToken(AccessSqlParser.DEFAULT, 0); } + public SetDefaultActionContext(ReferentialActionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSetDefaultAction(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ReferentialActionContext referentialAction() { + ReferentialActionContext _localctx = new ReferentialActionContext(Context, State); + EnterRule(_localctx, 60, RULE_referentialAction); + try { + State = 632; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,67,Context) ) { + case 1: + _localctx = new CascadeActionContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 624; + Match(CASCADE); + } + break; + case 2: + _localctx = new NoActionActionContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 625; + Match(NO); + State = 626; + Match(ACTION); + } + break; + case 3: + _localctx = new RestrictActionContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 627; + Match(RESTRICT); + } + break; + case 4: + _localctx = new SetNullActionContext(_localctx); + EnterOuterAlt(_localctx, 4); + { + State = 628; + Match(SET); + State = 629; + Match(NULL); + } + break; + case 5: + _localctx = new SetDefaultActionContext(_localctx); + EnterOuterAlt(_localctx, 5); + { + State = 630; + Match(SET); + State = 631; + Match(DEFAULT); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class InsertStatementContext : ParserRuleContext { + public IdentifierContext table; + public IdentifierContext _identifier; + public IList _columns = new List(); + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INSERT() { return GetToken(AccessSqlParser.INSERT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INTO() { return GetToken(AccessSqlParser.INTO, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode VALUES() { return GetToken(AccessSqlParser.VALUES, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] LPAREN() { return GetTokens(AccessSqlParser.LPAREN); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN(int i) { + return GetToken(AccessSqlParser.LPAREN, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] RPAREN() { return GetTokens(AccessSqlParser.RPAREN); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN(int i) { + return GetToken(AccessSqlParser.RPAREN, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DEFAULT() { return GetToken(AccessSqlParser.DEFAULT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public InsertStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_insertStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitInsertStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public InsertStatementContext insertStatement() { + InsertStatementContext _localctx = new InsertStatementContext(Context, State); + EnterRule(_localctx, 62, RULE_insertStatement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 634; + Match(INSERT); + State = 635; + Match(INTO); + State = 636; + _localctx.table = identifier(); + State = 664; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case VALUES: + case LPAREN: + { + State = 648; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==LPAREN) { + { + State = 637; + Match(LPAREN); + State = 638; + _localctx._identifier = identifier(); + _localctx._columns.Add(_localctx._identifier); + State = 643; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 639; + Match(COMMA); + State = 640; + _localctx._identifier = identifier(); + _localctx._columns.Add(_localctx._identifier); + } + } + State = 645; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 646; + Match(RPAREN); + } + } + + State = 650; + Match(VALUES); + State = 651; + Match(LPAREN); + State = 652; + expression(0); + State = 657; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 653; + Match(COMMA); + State = 654; + expression(0); + } + } + State = 659; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 660; + Match(RPAREN); + } + break; + case DEFAULT: + { + State = 662; + Match(DEFAULT); + State = 663; + Match(VALUES); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class QueryExpressionContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public QueryTermContext[] queryTerm() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public QueryTermContext queryTerm(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public SetOperatorContext[] setOperator() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public SetOperatorContext setOperator(int i) { + return GetRuleContext(i); + } + public QueryExpressionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_queryExpression; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitQueryExpression(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public QueryExpressionContext queryExpression() { + QueryExpressionContext _localctx = new QueryExpressionContext(Context, State); + EnterRule(_localctx, 64, RULE_queryExpression); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 666; + queryTerm(); + State = 672; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 223338299392L) != 0)) { + { + { + State = 667; + setOperator(); + State = 668; + queryTerm(); + } + } + State = 674; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class QueryTermContext : ParserRuleContext { + public QueryTermContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_queryTerm; } } + + public QueryTermContext() { } + public virtual void CopyFrom(QueryTermContext context) { + base.CopyFrom(context); + } + } + public partial class SelectTermContext : QueryTermContext { + [System.Diagnostics.DebuggerNonUserCode] public SelectStatementContext selectStatement() { + return GetRuleContext(0); + } + public SelectTermContext(QueryTermContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSelectTerm(this); + else return visitor.VisitChildren(this); + } + } + public partial class ParenTermContext : QueryTermContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public QueryExpressionContext queryExpression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + public ParenTermContext(QueryTermContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitParenTerm(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public QueryTermContext queryTerm() { + QueryTermContext _localctx = new QueryTermContext(Context, State); + EnterRule(_localctx, 66, RULE_queryTerm); + try { + State = 680; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case SELECT: + _localctx = new SelectTermContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 675; + selectStatement(); + } + break; + case LPAREN: + _localctx = new ParenTermContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 676; + Match(LPAREN); + State = 677; + queryExpression(); + State = 678; + Match(RPAREN); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class SetOperatorContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode UNION() { return GetToken(AccessSqlParser.UNION, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ALL() { return GetToken(AccessSqlParser.ALL, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INTERSECT() { return GetToken(AccessSqlParser.INTERSECT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EXCEPT() { return GetToken(AccessSqlParser.EXCEPT, 0); } + public SetOperatorContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_setOperator; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSetOperator(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public SetOperatorContext setOperator() { + SetOperatorContext _localctx = new SetOperatorContext(Context, State); + EnterRule(_localctx, 68, RULE_setOperator); + int _la; + try { + State = 688; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case UNION: + EnterOuterAlt(_localctx, 1); + { + State = 682; + Match(UNION); + State = 684; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==ALL) { + { + State = 683; + Match(ALL); + } + } + + } + break; + case INTERSECT: + EnterOuterAlt(_localctx, 2); + { + State = 686; + Match(INTERSECT); + } + break; + case EXCEPT: + EnterOuterAlt(_localctx, 3); + { + State = 687; + Match(EXCEPT); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class SelectStatementContext : ParserRuleContext { + public SelectPredicateContext predicate; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SELECT() { return GetToken(AccessSqlParser.SELECT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public SelectListContext selectList() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public TopClauseContext topClause() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public FromClauseContext fromClause() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public WhereClauseContext whereClause() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public GroupByClauseContext groupByClause() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public HavingClauseContext havingClause() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public OrderByClauseContext orderByClause() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public SelectPredicateContext selectPredicate() { + return GetRuleContext(0); + } + public SelectStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_selectStatement; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSelectStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public SelectStatementContext selectStatement() { + SelectStatementContext _localctx = new SelectStatementContext(Context, State); + EnterRule(_localctx, 70, RULE_selectStatement); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 690; + Match(SELECT); + State = 692; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 37580963840L) != 0)) { + { + State = 691; + _localctx.predicate = selectPredicate(); + } + } + + State = 695; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==TOP) { + { + State = 694; + topClause(); + } + } + + State = 697; + selectList(); + State = 699; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==FROM) { + { + State = 698; + fromClause(); + } + } + + State = 702; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==WHERE) { + { + State = 701; + whereClause(); + } + } + + State = 705; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==GROUP) { + { + State = 704; + groupByClause(); + } + } + + State = 708; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==HAVING) { + { + State = 707; + havingClause(); + } + } + + State = 711; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==ORDER) { + { + State = 710; + orderByClause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class SelectPredicateContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ALL() { return GetToken(AccessSqlParser.ALL, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DISTINCT() { return GetToken(AccessSqlParser.DISTINCT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DISTINCTROW() { return GetToken(AccessSqlParser.DISTINCTROW, 0); } + public SelectPredicateContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_selectPredicate; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSelectPredicate(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public SelectPredicateContext selectPredicate() { + SelectPredicateContext _localctx = new SelectPredicateContext(Context, State); + EnterRule(_localctx, 72, RULE_selectPredicate); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 713; + _la = TokenStream.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 37580963840L) != 0)) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class GroupByClauseContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode GROUP() { return GetToken(AccessSqlParser.GROUP, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BY() { return GetToken(AccessSqlParser.BY, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public GroupByClauseContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_groupByClause; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitGroupByClause(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public GroupByClauseContext groupByClause() { + GroupByClauseContext _localctx = new GroupByClauseContext(Context, State); + EnterRule(_localctx, 74, RULE_groupByClause); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 715; + Match(GROUP); + State = 716; + Match(BY); + State = 717; + expression(0); + State = 722; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 718; + Match(COMMA); + State = 719; + expression(0); + } + } + State = 724; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class HavingClauseContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode HAVING() { return GetToken(AccessSqlParser.HAVING, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + public HavingClauseContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_havingClause; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitHavingClause(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public HavingClauseContext havingClause() { + HavingClauseContext _localctx = new HavingClauseContext(Context, State); + EnterRule(_localctx, 76, RULE_havingClause); + try { + EnterOuterAlt(_localctx, 1); + { + State = 725; + Match(HAVING); + State = 726; + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class TopClauseContext : ParserRuleContext { + public IToken percent; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TOP() { return GetToken(AccessSqlParser.TOP, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TopOperandContext[] topOperand() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public TopOperandContext topOperand(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] PLUS() { return GetTokens(AccessSqlParser.PLUS); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PLUS(int i) { + return GetToken(AccessSqlParser.PLUS, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] MINUS() { return GetTokens(AccessSqlParser.MINUS); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode MINUS(int i) { + return GetToken(AccessSqlParser.MINUS, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PERCENT() { return GetToken(AccessSqlParser.PERCENT, 0); } + public TopClauseContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_topClause; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitTopClause(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public TopClauseContext topClause() { + TopClauseContext _localctx = new TopClauseContext(Context, State); + EnterRule(_localctx, 78, RULE_topClause); + int _la; + try { + int _alt; + EnterOuterAlt(_localctx, 1); + { + State = 728; + Match(TOP); + State = 729; + topOperand(); + State = 734; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,84,Context); + while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + State = 730; + _la = TokenStream.LA(1); + if ( !(_la==PLUS || _la==MINUS) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + State = 731; + topOperand(); + } + } + } + State = 736; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,84,Context); + } + State = 738; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==PERCENT) { + { + State = 737; + _localctx.percent = Match(PERCENT); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class TopOperandContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INTEGER_LITERAL() { return GetToken(AccessSqlParser.INTEGER_LITERAL, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARAM() { return GetToken(AccessSqlParser.PARAM, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + public TopOperandContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_topOperand; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitTopOperand(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public TopOperandContext topOperand() { + TopOperandContext _localctx = new TopOperandContext(Context, State); + EnterRule(_localctx, 80, RULE_topOperand); + try { + State = 746; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case INTEGER_LITERAL: + EnterOuterAlt(_localctx, 1); + { + State = 740; + Match(INTEGER_LITERAL); + } + break; + case PARAM: + EnterOuterAlt(_localctx, 2); + { + State = 741; + Match(PARAM); + } + break; + case LPAREN: + EnterOuterAlt(_localctx, 3); + { + State = 742; + Match(LPAREN); + State = 743; + expression(0); + State = 744; + Match(RPAREN); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class SelectListContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode STAR() { return GetToken(AccessSqlParser.STAR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public SelectItemContext[] selectItem() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public SelectItemContext selectItem(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public SelectListContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_selectList; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSelectList(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public SelectListContext selectList() { + SelectListContext _localctx = new SelectListContext(Context, State); + EnterRule(_localctx, 82, RULE_selectList); + int _la; + try { + State = 757; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case STAR: + EnterOuterAlt(_localctx, 1); + { + State = 748; + Match(STAR); + } + break; + case NOT: + case BNOT: + case LEFT: + case RIGHT: + case EXISTS: + case ASC: + case TRUE: + case FALSE: + case NULL: + case MINUS: + case LPAREN: + case SYSVAR: + case PARAM: + case HEX_LITERAL: + case INTEGER_LITERAL: + case NUMBER_LITERAL: + case STRING_LITERAL: + case DATE_LITERAL: + case GUID_LITERAL: + case BRACKET_ID: + case BACKTICK_ID: + case IDENTIFIER: + EnterOuterAlt(_localctx, 2); + { + State = 749; + selectItem(); + State = 754; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 750; + Match(COMMA); + State = 751; + selectItem(); + } + } + State = 756; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class SelectItemContext : ParserRuleContext { + public SelectItemContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_selectItem; } } + + public SelectItemContext() { } + public virtual void CopyFrom(SelectItemContext context) { + base.CopyFrom(context); + } + } + public partial class ExpressionSelectItemContext : SelectItemContext { + public IdentifierContext alias; + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode AS() { return GetToken(AccessSqlParser.AS, 0); } + public ExpressionSelectItemContext(SelectItemContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitExpressionSelectItem(this); + else return visitor.VisitChildren(this); + } + } + public partial class QualifiedStarSelectItemContext : SelectItemContext { + public IdentifierContext qualifier; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DOT() { return GetToken(AccessSqlParser.DOT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode STAR() { return GetToken(AccessSqlParser.STAR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + public QualifiedStarSelectItemContext(SelectItemContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitQualifiedStarSelectItem(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public SelectItemContext selectItem() { + SelectItemContext _localctx = new SelectItemContext(Context, State); + EnterRule(_localctx, 84, RULE_selectItem); + int _la; + try { + State = 770; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,91,Context) ) { + case 1: + _localctx = new QualifiedStarSelectItemContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 759; + ((QualifiedStarSelectItemContext)_localctx).qualifier = identifier(); + State = 760; + Match(DOT); + State = 761; + Match(STAR); + } + break; + case 2: + _localctx = new ExpressionSelectItemContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 763; + expression(0); + State = 768; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==AS || ((((_la - 112)) & ~0x3f) == 0 && ((1L << (_la - 112)) & 7L) != 0)) { + { + State = 765; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==AS) { + { + State = 764; + Match(AS); + } + } + + State = 767; + ((ExpressionSelectItemContext)_localctx).alias = identifier(); + } + } + + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class FromClauseContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FROM() { return GetToken(AccessSqlParser.FROM, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TableSourceContext[] tableSource() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public TableSourceContext tableSource(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public FromClauseContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_fromClause; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitFromClause(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public FromClauseContext fromClause() { + FromClauseContext _localctx = new FromClauseContext(Context, State); + EnterRule(_localctx, 86, RULE_fromClause); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 772; + Match(FROM); + State = 773; + tableSource(); + State = 778; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 774; + Match(COMMA); + State = 775; + tableSource(); + } + } + State = 780; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class TableSourceContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public TablePrimaryContext tablePrimary() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public JoinClauseContext[] joinClause() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public JoinClauseContext joinClause(int i) { + return GetRuleContext(i); + } + public TableSourceContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_tableSource; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitTableSource(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public TableSourceContext tableSource() { + TableSourceContext _localctx = new TableSourceContext(Context, State); + EnterRule(_localctx, 88, RULE_tableSource); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 781; + tablePrimary(); + State = 785; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 753664L) != 0)) { + { + { + State = 782; + joinClause(); + } + } + State = 787; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class TablePrimaryContext : ParserRuleContext { + public TablePrimaryContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_tablePrimary; } } + + public TablePrimaryContext() { } + public virtual void CopyFrom(TablePrimaryContext context) { + base.CopyFrom(context); + } + } + public partial class NamedTablePrimaryContext : TablePrimaryContext { + public IdentifierContext table; + public IdentifierContext alias; + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode AS() { return GetToken(AccessSqlParser.AS, 0); } + public NamedTablePrimaryContext(TablePrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitNamedTablePrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class ParenJoinPrimaryContext : TablePrimaryContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TableSourceContext tableSource() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + public ParenJoinPrimaryContext(TablePrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitParenJoinPrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class SubqueryPrimaryContext : TablePrimaryContext { + public IdentifierContext alias; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public QueryExpressionContext queryExpression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode AS() { return GetToken(AccessSqlParser.AS, 0); } + public SubqueryPrimaryContext(TablePrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSubqueryPrimary(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public TablePrimaryContext tablePrimary() { + TablePrimaryContext _localctx = new TablePrimaryContext(Context, State); + EnterRule(_localctx, 90, RULE_tablePrimary); + int _la; + try { + State = 808; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,98,Context) ) { + case 1: + _localctx = new NamedTablePrimaryContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 788; + ((NamedTablePrimaryContext)_localctx).table = identifier(); + State = 793; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==AS || ((((_la - 112)) & ~0x3f) == 0 && ((1L << (_la - 112)) & 7L) != 0)) { + { + State = 790; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==AS) { + { + State = 789; + Match(AS); + } + } + + State = 792; + ((NamedTablePrimaryContext)_localctx).alias = identifier(); + } + } + + } + break; + case 2: + _localctx = new SubqueryPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 795; + Match(LPAREN); + State = 796; + queryExpression(); + State = 797; + Match(RPAREN); + State = 802; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==AS || ((((_la - 112)) & ~0x3f) == 0 && ((1L << (_la - 112)) & 7L) != 0)) { + { + State = 799; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==AS) { + { + State = 798; + Match(AS); + } + } + + State = 801; + ((SubqueryPrimaryContext)_localctx).alias = identifier(); + } + } + + } + break; + case 3: + _localctx = new ParenJoinPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 804; + Match(LPAREN); + State = 805; + tableSource(); + State = 806; + Match(RPAREN); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class JoinClauseContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public JoinTypeContext joinType() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode JOIN() { return GetToken(AccessSqlParser.JOIN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TablePrimaryContext tablePrimary() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ON() { return GetToken(AccessSqlParser.ON, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + public JoinClauseContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_joinClause; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitJoinClause(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public JoinClauseContext joinClause() { + JoinClauseContext _localctx = new JoinClauseContext(Context, State); + EnterRule(_localctx, 92, RULE_joinClause); + try { + EnterOuterAlt(_localctx, 1); + { + State = 810; + joinType(); + State = 811; + Match(JOIN); + State = 812; + tablePrimary(); + State = 813; + Match(ON); + State = 814; + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class JoinTypeContext : ParserRuleContext { + public JoinTypeContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_joinType; } } + + public JoinTypeContext() { } + public virtual void CopyFrom(JoinTypeContext context) { + base.CopyFrom(context); + } + } + public partial class RightJoinContext : JoinTypeContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RIGHT() { return GetToken(AccessSqlParser.RIGHT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode OUTER() { return GetToken(AccessSqlParser.OUTER, 0); } + public RightJoinContext(JoinTypeContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitRightJoin(this); + else return visitor.VisitChildren(this); + } + } + public partial class LeftJoinContext : JoinTypeContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LEFT() { return GetToken(AccessSqlParser.LEFT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode OUTER() { return GetToken(AccessSqlParser.OUTER, 0); } + public LeftJoinContext(JoinTypeContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitLeftJoin(this); + else return visitor.VisitChildren(this); + } + } + public partial class InnerJoinContext : JoinTypeContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INNER() { return GetToken(AccessSqlParser.INNER, 0); } + public InnerJoinContext(JoinTypeContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitInnerJoin(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public JoinTypeContext joinType() { + JoinTypeContext _localctx = new JoinTypeContext(Context, State); + EnterRule(_localctx, 94, RULE_joinType); + int _la; + try { + State = 827; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case INNER: + case JOIN: + _localctx = new InnerJoinContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 817; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==INNER) { + { + State = 816; + Match(INNER); + } + } + + } + break; + case LEFT: + _localctx = new LeftJoinContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 819; + Match(LEFT); + State = 821; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==OUTER) { + { + State = 820; + Match(OUTER); + } + } + + } + break; + case RIGHT: + _localctx = new RightJoinContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 823; + Match(RIGHT); + State = 825; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==OUTER) { + { + State = 824; + Match(OUTER); + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class WhereClauseContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode WHERE() { return GetToken(AccessSqlParser.WHERE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + public WhereClauseContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_whereClause; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitWhereClause(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public WhereClauseContext whereClause() { + WhereClauseContext _localctx = new WhereClauseContext(Context, State); + EnterRule(_localctx, 96, RULE_whereClause); + try { + EnterOuterAlt(_localctx, 1); + { + State = 829; + Match(WHERE); + State = 830; + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class OrderByClauseContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ORDER() { return GetToken(AccessSqlParser.ORDER, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BY() { return GetToken(AccessSqlParser.BY, 0); } + [System.Diagnostics.DebuggerNonUserCode] public OrderByItemContext[] orderByItem() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public OrderByItemContext orderByItem(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + public OrderByClauseContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_orderByClause; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitOrderByClause(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public OrderByClauseContext orderByClause() { + OrderByClauseContext _localctx = new OrderByClauseContext(Context, State); + EnterRule(_localctx, 98, RULE_orderByClause); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 832; + Match(ORDER); + State = 833; + Match(BY); + State = 834; + orderByItem(); + State = 839; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 835; + Match(COMMA); + State = 836; + orderByItem(); + } + } + State = 841; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class OrderByItemContext : ParserRuleContext { + public IToken dir; + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ASC() { return GetToken(AccessSqlParser.ASC, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DESC() { return GetToken(AccessSqlParser.DESC, 0); } + public OrderByItemContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_orderByItem; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitOrderByItem(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public OrderByItemContext orderByItem() { + OrderByItemContext _localctx = new OrderByItemContext(Context, State); + EnterRule(_localctx, 100, RULE_orderByItem); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 842; + expression(0); + State = 844; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==ASC || _la==DESC) { + { + State = 843; + _localctx.dir = TokenStream.LT(1); + _la = TokenStream.LA(1); + if ( !(_la==ASC || _la==DESC) ) { + _localctx.dir = ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ExpressionContext : ParserRuleContext { + public ExpressionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_expression; } } + + public ExpressionContext() { } + public virtual void CopyFrom(ExpressionContext context) { + base.CopyFrom(context); + } + } + public partial class AndExprContext : ExpressionContext { + public ExpressionContext left; + public ExpressionContext right; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode AND() { return GetToken(AccessSqlParser.AND, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + public AndExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitAndExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class LikeExprContext : ExpressionContext { + public ExpressionContext left; + public IToken not; + public ExpressionContext right; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LIKE() { return GetToken(AccessSqlParser.LIKE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NOT() { return GetToken(AccessSqlParser.NOT, 0); } + public LikeExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitLikeExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class IsNullExprContext : ExpressionContext { + public ExpressionContext operand; + public IToken not; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode IS() { return GetToken(AccessSqlParser.IS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NULL() { return GetToken(AccessSqlParser.NULL, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NOT() { return GetToken(AccessSqlParser.NOT, 0); } + public IsNullExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitIsNullExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class ComparisonExprContext : ExpressionContext { + public ExpressionContext left; + public IToken op; + public ExpressionContext right; + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EQ() { return GetToken(AccessSqlParser.EQ, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NEQ() { return GetToken(AccessSqlParser.NEQ, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LT() { return GetToken(AccessSqlParser.LT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LTE() { return GetToken(AccessSqlParser.LTE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode GT() { return GetToken(AccessSqlParser.GT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode GTE() { return GetToken(AccessSqlParser.GTE, 0); } + public ComparisonExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitComparisonExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class BetweenExprContext : ExpressionContext { + public ExpressionContext val; + public IToken not; + public ExpressionContext lo; + public ExpressionContext hi; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BETWEEN() { return GetToken(AccessSqlParser.BETWEEN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode AND() { return GetToken(AccessSqlParser.AND, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NOT() { return GetToken(AccessSqlParser.NOT, 0); } + public BetweenExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitBetweenExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class BitNotExprContext : ExpressionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BNOT() { return GetToken(AccessSqlParser.BNOT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + public BitNotExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitBitNotExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class PowExprContext : ExpressionContext { + public ExpressionContext left; + public ExpressionContext right; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode CARET() { return GetToken(AccessSqlParser.CARET, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + public PowExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitPowExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class OrExprContext : ExpressionContext { + public ExpressionContext left; + public ExpressionContext right; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode OR() { return GetToken(AccessSqlParser.OR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + public OrExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitOrExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class NegateExprContext : ExpressionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode MINUS() { return GetToken(AccessSqlParser.MINUS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + public NegateExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitNegateExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class InSubqueryExprContext : ExpressionContext { + public ExpressionContext val; + public IToken not; + public SelectStatementContext sub; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode IN() { return GetToken(AccessSqlParser.IN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public SelectStatementContext selectStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NOT() { return GetToken(AccessSqlParser.NOT, 0); } + public InSubqueryExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitInSubqueryExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class MulDivExprContext : ExpressionContext { + public ExpressionContext left; + public IToken op; + public ExpressionContext right; + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode STAR() { return GetToken(AccessSqlParser.STAR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SLASH() { return GetToken(AccessSqlParser.SLASH, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode MOD() { return GetToken(AccessSqlParser.MOD, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BACKSLASH() { return GetToken(AccessSqlParser.BACKSLASH, 0); } + public MulDivExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitMulDivExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class BitwiseExprContext : ExpressionContext { + public ExpressionContext left; + public IToken op; + public ExpressionContext right; + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BAND() { return GetToken(AccessSqlParser.BAND, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BOR() { return GetToken(AccessSqlParser.BOR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BXOR() { return GetToken(AccessSqlParser.BXOR, 0); } + public BitwiseExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitBitwiseExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class PrimaryExprContext : ExpressionContext { + [System.Diagnostics.DebuggerNonUserCode] public PrimaryContext primary() { + return GetRuleContext(0); + } + public PrimaryExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitPrimaryExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class NotExprContext : ExpressionContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NOT() { return GetToken(AccessSqlParser.NOT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + public NotExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitNotExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class InExprContext : ExpressionContext { + public ExpressionContext val; + public IToken not; + public ExpressionContext _expression; + public IList _items = new List(); + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode IN() { return GetToken(AccessSqlParser.IN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NOT() { return GetToken(AccessSqlParser.NOT, 0); } + public InExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitInExpr(this); + else return visitor.VisitChildren(this); + } + } + public partial class AddConcatExprContext : ExpressionContext { + public ExpressionContext left; + public IToken op; + public ExpressionContext right; + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PLUS() { return GetToken(AccessSqlParser.PLUS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode MINUS() { return GetToken(AccessSqlParser.MINUS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode AMP() { return GetToken(AccessSqlParser.AMP, 0); } + public AddConcatExprContext(ExpressionContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitAddConcatExpr(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ExpressionContext expression() { + return expression(0); + } + + private ExpressionContext expression(int _p) { + ParserRuleContext _parentctx = Context; + int _parentState = State; + ExpressionContext _localctx = new ExpressionContext(Context, _parentState); + ExpressionContext _prevctx = _localctx; + int _startState = 102; + EnterRecursionRule(_localctx, 102, RULE_expression, _p); + int _la; + try { + int _alt; + EnterOuterAlt(_localctx, 1); + { + State = 854; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case NOT: + { + _localctx = new NotExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + + State = 847; + Match(NOT); + State = 848; + expression(16); + } + break; + case BNOT: + { + _localctx = new BitNotExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 849; + Match(BNOT); + State = 850; + expression(15); + } + break; + case MINUS: + { + _localctx = new NegateExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 851; + Match(MINUS); + State = 852; + expression(14); + } + break; + case LEFT: + case RIGHT: + case EXISTS: + case ASC: + case TRUE: + case FALSE: + case NULL: + case LPAREN: + case SYSVAR: + case PARAM: + case HEX_LITERAL: + case INTEGER_LITERAL: + case NUMBER_LITERAL: + case STRING_LITERAL: + case DATE_LITERAL: + case GUID_LITERAL: + case BRACKET_ID: + case BACKTICK_ID: + case IDENTIFIER: + { + _localctx = new PrimaryExprContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 853; + primary(); + } + break; + default: + throw new NoViableAltException(this); + } + Context.Stop = TokenStream.LT(-1); + State = 925; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,113,Context); + while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( ParseListeners!=null ) + TriggerExitRuleEvent(); + _prevctx = _localctx; + { + State = 923; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,112,Context) ) { + case 1: + { + _localctx = new PowExprContext(new ExpressionContext(_parentctx, _parentState)); + ((PowExprContext)_localctx).left = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 856; + if (!(Precpred(Context, 13))) throw new FailedPredicateException(this, "Precpred(Context, 13)"); + State = 857; + Match(CARET); + State = 858; + ((PowExprContext)_localctx).right = expression(14); + } + break; + case 2: + { + _localctx = new MulDivExprContext(new ExpressionContext(_parentctx, _parentState)); + ((MulDivExprContext)_localctx).left = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 859; + if (!(Precpred(Context, 12))) throw new FailedPredicateException(this, "Precpred(Context, 12)"); + State = 860; + ((MulDivExprContext)_localctx).op = TokenStream.LT(1); + _la = TokenStream.LA(1); + if ( !(_la==MOD || ((((_la - 86)) & ~0x3f) == 0 && ((1L << (_la - 86)) & 7L) != 0)) ) { + ((MulDivExprContext)_localctx).op = ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + State = 861; + ((MulDivExprContext)_localctx).right = expression(13); + } + break; + case 3: + { + _localctx = new AddConcatExprContext(new ExpressionContext(_parentctx, _parentState)); + ((AddConcatExprContext)_localctx).left = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 862; + if (!(Precpred(Context, 11))) throw new FailedPredicateException(this, "Precpred(Context, 11)"); + State = 863; + ((AddConcatExprContext)_localctx).op = TokenStream.LT(1); + _la = TokenStream.LA(1); + if ( !(((((_la - 90)) & ~0x3f) == 0 && ((1L << (_la - 90)) & 7L) != 0)) ) { + ((AddConcatExprContext)_localctx).op = ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + State = 864; + ((AddConcatExprContext)_localctx).right = expression(12); + } + break; + case 4: + { + _localctx = new ComparisonExprContext(new ExpressionContext(_parentctx, _parentState)); + ((ComparisonExprContext)_localctx).left = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 865; + if (!(Precpred(Context, 10))) throw new FailedPredicateException(this, "Precpred(Context, 10)"); + State = 866; + ((ComparisonExprContext)_localctx).op = TokenStream.LT(1); + _la = TokenStream.LA(1); + if ( !(((((_la - 93)) & ~0x3f) == 0 && ((1L << (_la - 93)) & 63L) != 0)) ) { + ((ComparisonExprContext)_localctx).op = ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + State = 867; + ((ComparisonExprContext)_localctx).right = expression(11); + } + break; + case 5: + { + _localctx = new BetweenExprContext(new ExpressionContext(_parentctx, _parentState)); + ((BetweenExprContext)_localctx).val = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 868; + if (!(Precpred(Context, 9))) throw new FailedPredicateException(this, "Precpred(Context, 9)"); + State = 870; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==NOT) { + { + State = 869; + ((BetweenExprContext)_localctx).not = Match(NOT); + } + } + + State = 872; + Match(BETWEEN); + State = 873; + ((BetweenExprContext)_localctx).lo = expression(0); + State = 874; + Match(AND); + State = 875; + ((BetweenExprContext)_localctx).hi = expression(10); + } + break; + case 6: + { + _localctx = new LikeExprContext(new ExpressionContext(_parentctx, _parentState)); + ((LikeExprContext)_localctx).left = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 877; + if (!(Precpred(Context, 8))) throw new FailedPredicateException(this, "Precpred(Context, 8)"); + State = 879; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==NOT) { + { + State = 878; + ((LikeExprContext)_localctx).not = Match(NOT); + } + } + + State = 881; + Match(LIKE); + State = 882; + ((LikeExprContext)_localctx).right = expression(9); + } + break; + case 7: + { + _localctx = new BitwiseExprContext(new ExpressionContext(_parentctx, _parentState)); + ((BitwiseExprContext)_localctx).left = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 883; + if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); + State = 884; + ((BitwiseExprContext)_localctx).op = TokenStream.LT(1); + _la = TokenStream.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 3584L) != 0)) ) { + ((BitwiseExprContext)_localctx).op = ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + State = 885; + ((BitwiseExprContext)_localctx).right = expression(5); + } + break; + case 8: + { + _localctx = new AndExprContext(new ExpressionContext(_parentctx, _parentState)); + ((AndExprContext)_localctx).left = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 886; + if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); + State = 887; + Match(AND); + State = 888; + ((AndExprContext)_localctx).right = expression(4); + } + break; + case 9: + { + _localctx = new OrExprContext(new ExpressionContext(_parentctx, _parentState)); + ((OrExprContext)_localctx).left = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 889; + if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); + State = 890; + Match(OR); + State = 891; + ((OrExprContext)_localctx).right = expression(3); + } + break; + case 10: + { + _localctx = new InSubqueryExprContext(new ExpressionContext(_parentctx, _parentState)); + ((InSubqueryExprContext)_localctx).val = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 892; + if (!(Precpred(Context, 7))) throw new FailedPredicateException(this, "Precpred(Context, 7)"); + State = 894; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==NOT) { + { + State = 893; + ((InSubqueryExprContext)_localctx).not = Match(NOT); + } + } + + State = 896; + Match(IN); + State = 897; + Match(LPAREN); + State = 898; + ((InSubqueryExprContext)_localctx).sub = selectStatement(); + State = 899; + Match(RPAREN); + } + break; + case 11: + { + _localctx = new InExprContext(new ExpressionContext(_parentctx, _parentState)); + ((InExprContext)_localctx).val = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 901; + if (!(Precpred(Context, 6))) throw new FailedPredicateException(this, "Precpred(Context, 6)"); + State = 903; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==NOT) { + { + State = 902; + ((InExprContext)_localctx).not = Match(NOT); + } + } + + State = 905; + Match(IN); + State = 906; + Match(LPAREN); + State = 907; + ((InExprContext)_localctx)._expression = expression(0); + ((InExprContext)_localctx)._items.Add(((InExprContext)_localctx)._expression); + State = 912; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 908; + Match(COMMA); + State = 909; + ((InExprContext)_localctx)._expression = expression(0); + ((InExprContext)_localctx)._items.Add(((InExprContext)_localctx)._expression); + } + } + State = 914; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 915; + Match(RPAREN); + } + break; + case 12: + { + _localctx = new IsNullExprContext(new ExpressionContext(_parentctx, _parentState)); + ((IsNullExprContext)_localctx).operand = _prevctx; + PushNewRecursionContext(_localctx, _startState, RULE_expression); + State = 917; + if (!(Precpred(Context, 5))) throw new FailedPredicateException(this, "Precpred(Context, 5)"); + State = 918; + Match(IS); + State = 920; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==NOT) { + { + State = 919; + ((IsNullExprContext)_localctx).not = Match(NOT); + } + } + + State = 922; + Match(NULL); + } + break; + } + } + } + State = 927; + ErrorHandler.Sync(this); + _alt = Interpreter.AdaptivePredict(TokenStream,113,Context); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + UnrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public partial class PrimaryContext : ParserRuleContext { + public PrimaryContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_primary; } } + + public PrimaryContext() { } + public virtual void CopyFrom(PrimaryContext context) { + base.CopyFrom(context); + } + } + public partial class LiteralPrimaryContext : PrimaryContext { + [System.Diagnostics.DebuggerNonUserCode] public LiteralContext literal() { + return GetRuleContext(0); + } + public LiteralPrimaryContext(PrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitLiteralPrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class ParamPrimaryContext : PrimaryContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PARAM() { return GetToken(AccessSqlParser.PARAM, 0); } + public ParamPrimaryContext(PrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitParamPrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class ExistsPrimaryContext : PrimaryContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode EXISTS() { return GetToken(AccessSqlParser.EXISTS, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public SelectStatementContext selectStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + public ExistsPrimaryContext(PrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitExistsPrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class ScalarSubqueryPrimaryContext : PrimaryContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public SelectStatementContext selectStatement() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + public ScalarSubqueryPrimaryContext(PrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitScalarSubqueryPrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class FunctionCallPrimaryContext : PrimaryContext { + [System.Diagnostics.DebuggerNonUserCode] public FunctionCallContext functionCall() { + return GetRuleContext(0); + } + public FunctionCallPrimaryContext(PrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitFunctionCallPrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class SystemVariablePrimaryContext : PrimaryContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SYSVAR() { return GetToken(AccessSqlParser.SYSVAR, 0); } + public SystemVariablePrimaryContext(PrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitSystemVariablePrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class ColumnPrimaryContext : PrimaryContext { + [System.Diagnostics.DebuggerNonUserCode] public ColumnRefContext columnRef() { + return GetRuleContext(0); + } + public ColumnPrimaryContext(PrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitColumnPrimary(this); + else return visitor.VisitChildren(this); + } + } + public partial class ParenPrimaryContext : PrimaryContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + public ParenPrimaryContext(PrimaryContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitParenPrimary(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public PrimaryContext primary() { + PrimaryContext _localctx = new PrimaryContext(Context, State); + EnterRule(_localctx, 104, RULE_primary); + try { + State = 946; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,114,Context) ) { + case 1: + _localctx = new LiteralPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 928; + literal(); + } + break; + case 2: + _localctx = new FunctionCallPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 929; + functionCall(); + } + break; + case 3: + _localctx = new ColumnPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 930; + columnRef(); + } + break; + case 4: + _localctx = new ParamPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 4); + { + State = 931; + Match(PARAM); + } + break; + case 5: + _localctx = new SystemVariablePrimaryContext(_localctx); + EnterOuterAlt(_localctx, 5); + { + State = 932; + Match(SYSVAR); + } + break; + case 6: + _localctx = new ExistsPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 6); + { + State = 933; + Match(EXISTS); + State = 934; + Match(LPAREN); + State = 935; + selectStatement(); + State = 936; + Match(RPAREN); + } + break; + case 7: + _localctx = new ScalarSubqueryPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 7); + { + State = 938; + Match(LPAREN); + State = 939; + selectStatement(); + State = 940; + Match(RPAREN); + } + break; + case 8: + _localctx = new ParenPrimaryContext(_localctx); + EnterOuterAlt(_localctx, 8); + { + State = 942; + Match(LPAREN); + State = 943; + expression(0); + State = 944; + Match(RPAREN); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class FunctionCallContext : ParserRuleContext { + public FunctionNameContext name; + public IToken star; + public IToken distinct; + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPAREN() { return GetToken(AccessSqlParser.LPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RPAREN() { return GetToken(AccessSqlParser.RPAREN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public FunctionNameContext functionName() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode STAR() { return GetToken(AccessSqlParser.STAR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext[] expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] COMMA() { return GetTokens(AccessSqlParser.COMMA); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMA(int i) { + return GetToken(AccessSqlParser.COMMA, i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DISTINCT() { return GetToken(AccessSqlParser.DISTINCT, 0); } + public FunctionCallContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_functionCall; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitFunctionCall(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public FunctionCallContext functionCall() { + FunctionCallContext _localctx = new FunctionCallContext(Context, State); + EnterRule(_localctx, 106, RULE_functionCall); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 948; + _localctx.name = functionName(); + State = 949; + Match(LPAREN); + State = 962; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case STAR: + { + State = 950; + _localctx.star = Match(STAR); + } + break; + case NOT: + case BNOT: + case LEFT: + case RIGHT: + case EXISTS: + case DISTINCT: + case ASC: + case TRUE: + case FALSE: + case NULL: + case MINUS: + case LPAREN: + case SYSVAR: + case PARAM: + case HEX_LITERAL: + case INTEGER_LITERAL: + case NUMBER_LITERAL: + case STRING_LITERAL: + case DATE_LITERAL: + case GUID_LITERAL: + case BRACKET_ID: + case BACKTICK_ID: + case IDENTIFIER: + { + { + State = 952; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==DISTINCT) { + { + State = 951; + _localctx.distinct = Match(DISTINCT); + } + } + + State = 954; + expression(0); + State = 959; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + while (_la==COMMA) { + { + { + State = 955; + Match(COMMA); + State = 956; + expression(0); + } + } + State = 961; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + } + } + break; + case RPAREN: + break; + default: + break; + } + State = 964; + Match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class FunctionNameContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LEFT() { return GetToken(AccessSqlParser.LEFT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode RIGHT() { return GetToken(AccessSqlParser.RIGHT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ASC() { return GetToken(AccessSqlParser.ASC, 0); } + public FunctionNameContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_functionName; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitFunctionName(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public FunctionNameContext functionName() { + FunctionNameContext _localctx = new FunctionNameContext(Context, State); + EnterRule(_localctx, 108, RULE_functionName); + try { + State = 970; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case BRACKET_ID: + case BACKTICK_ID: + case IDENTIFIER: + EnterOuterAlt(_localctx, 1); + { + State = 966; + identifier(); + } + break; + case LEFT: + EnterOuterAlt(_localctx, 2); + { + State = 967; + Match(LEFT); + } + break; + case RIGHT: + EnterOuterAlt(_localctx, 3); + { + State = 968; + Match(RIGHT); + } + break; + case ASC: + EnterOuterAlt(_localctx, 4); + { + State = 969; + Match(ASC); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class ColumnRefContext : ParserRuleContext { + public IdentifierContext qualifier; + public IdentifierContext name; + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext[] identifier() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public IdentifierContext identifier(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DOT() { return GetToken(AccessSqlParser.DOT, 0); } + public ColumnRefContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_columnRef; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitColumnRef(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public ColumnRefContext columnRef() { + ColumnRefContext _localctx = new ColumnRefContext(Context, State); + EnterRule(_localctx, 110, RULE_columnRef); + try { + EnterOuterAlt(_localctx, 1); + { + State = 975; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,119,Context) ) { + case 1: + { + State = 972; + _localctx.qualifier = identifier(); + State = 973; + Match(DOT); + } + break; + } + State = 977; + _localctx.name = identifier(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class IdentifierContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode IDENTIFIER() { return GetToken(AccessSqlParser.IDENTIFIER, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BRACKET_ID() { return GetToken(AccessSqlParser.BRACKET_ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BACKTICK_ID() { return GetToken(AccessSqlParser.BACKTICK_ID, 0); } + public IdentifierContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_identifier; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitIdentifier(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public IdentifierContext identifier() { + IdentifierContext _localctx = new IdentifierContext(Context, State); + EnterRule(_localctx, 112, RULE_identifier); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 979; + _la = TokenStream.LA(1); + if ( !(((((_la - 112)) & ~0x3f) == 0 && ((1L << (_la - 112)) & 7L) != 0)) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class LiteralContext : ParserRuleContext { + public LiteralContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_literal; } } + + public LiteralContext() { } + public virtual void CopyFrom(LiteralContext context) { + base.CopyFrom(context); + } + } + public partial class StringLiteralContext : LiteralContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode STRING_LITERAL() { return GetToken(AccessSqlParser.STRING_LITERAL, 0); } + public StringLiteralContext(LiteralContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitStringLiteral(this); + else return visitor.VisitChildren(this); + } + } + public partial class DateLiteralContext : LiteralContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DATE_LITERAL() { return GetToken(AccessSqlParser.DATE_LITERAL, 0); } + public DateLiteralContext(LiteralContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitDateLiteral(this); + else return visitor.VisitChildren(this); + } + } + public partial class TrueLiteralContext : LiteralContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TRUE() { return GetToken(AccessSqlParser.TRUE, 0); } + public TrueLiteralContext(LiteralContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitTrueLiteral(this); + else return visitor.VisitChildren(this); + } + } + public partial class GuidLiteralContext : LiteralContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode GUID_LITERAL() { return GetToken(AccessSqlParser.GUID_LITERAL, 0); } + public GuidLiteralContext(LiteralContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitGuidLiteral(this); + else return visitor.VisitChildren(this); + } + } + public partial class HexLiteralContext : LiteralContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode HEX_LITERAL() { return GetToken(AccessSqlParser.HEX_LITERAL, 0); } + public HexLiteralContext(LiteralContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitHexLiteral(this); + else return visitor.VisitChildren(this); + } + } + public partial class IntLiteralContext : LiteralContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INTEGER_LITERAL() { return GetToken(AccessSqlParser.INTEGER_LITERAL, 0); } + public IntLiteralContext(LiteralContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitIntLiteral(this); + else return visitor.VisitChildren(this); + } + } + public partial class NullLiteralContext : LiteralContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NULL() { return GetToken(AccessSqlParser.NULL, 0); } + public NullLiteralContext(LiteralContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitNullLiteral(this); + else return visitor.VisitChildren(this); + } + } + public partial class NumberLiteralContext : LiteralContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NUMBER_LITERAL() { return GetToken(AccessSqlParser.NUMBER_LITERAL, 0); } + public NumberLiteralContext(LiteralContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitNumberLiteral(this); + else return visitor.VisitChildren(this); + } + } + public partial class FalseLiteralContext : LiteralContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FALSE() { return GetToken(AccessSqlParser.FALSE, 0); } + public FalseLiteralContext(LiteralContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitFalseLiteral(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public LiteralContext literal() { + LiteralContext _localctx = new LiteralContext(Context, State); + EnterRule(_localctx, 114, RULE_literal); + try { + State = 990; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case INTEGER_LITERAL: + _localctx = new IntLiteralContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 981; + Match(INTEGER_LITERAL); + } + break; + case NUMBER_LITERAL: + _localctx = new NumberLiteralContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 982; + Match(NUMBER_LITERAL); + } + break; + case HEX_LITERAL: + _localctx = new HexLiteralContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 983; + Match(HEX_LITERAL); + } + break; + case STRING_LITERAL: + _localctx = new StringLiteralContext(_localctx); + EnterOuterAlt(_localctx, 4); + { + State = 984; + Match(STRING_LITERAL); + } + break; + case DATE_LITERAL: + _localctx = new DateLiteralContext(_localctx); + EnterOuterAlt(_localctx, 5); + { + State = 985; + Match(DATE_LITERAL); + } + break; + case GUID_LITERAL: + _localctx = new GuidLiteralContext(_localctx); + EnterOuterAlt(_localctx, 6); + { + State = 986; + Match(GUID_LITERAL); + } + break; + case TRUE: + _localctx = new TrueLiteralContext(_localctx); + EnterOuterAlt(_localctx, 7); + { + State = 987; + Match(TRUE); + } + break; + case FALSE: + _localctx = new FalseLiteralContext(_localctx); + EnterOuterAlt(_localctx, 8); + { + State = 988; + Match(FALSE); + } + break; + case NULL: + _localctx = new NullLiteralContext(_localctx); + EnterOuterAlt(_localctx, 9); + { + State = 989; + Match(NULL); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class TransactionStatementContext : ParserRuleContext { + public TransactionStatementContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_transactionStatement; } } + + public TransactionStatementContext() { } + public virtual void CopyFrom(TransactionStatementContext context) { + base.CopyFrom(context); + } + } + public partial class CommitTransactionStatementContext : TransactionStatementContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode COMMIT() { return GetToken(AccessSqlParser.COMMIT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TRANSACTION() { return GetToken(AccessSqlParser.TRANSACTION, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode WORK() { return GetToken(AccessSqlParser.WORK, 0); } + public CommitTransactionStatementContext(TransactionStatementContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitCommitTransactionStatement(this); + else return visitor.VisitChildren(this); + } + } + public partial class BeginTransactionStatementContext : TransactionStatementContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BEGIN() { return GetToken(AccessSqlParser.BEGIN, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TRANSACTION() { return GetToken(AccessSqlParser.TRANSACTION, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode WORK() { return GetToken(AccessSqlParser.WORK, 0); } + public BeginTransactionStatementContext(TransactionStatementContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitBeginTransactionStatement(this); + else return visitor.VisitChildren(this); + } + } + public partial class RollbackTransactionStatementContext : TransactionStatementContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ROLLBACK() { return GetToken(AccessSqlParser.ROLLBACK, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TRANSACTION() { return GetToken(AccessSqlParser.TRANSACTION, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode WORK() { return GetToken(AccessSqlParser.WORK, 0); } + public RollbackTransactionStatementContext(TransactionStatementContext context) { CopyFrom(context); } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitRollbackTransactionStatement(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public TransactionStatementContext transactionStatement() { + TransactionStatementContext _localctx = new TransactionStatementContext(Context, State); + EnterRule(_localctx, 116, RULE_transactionStatement); + int _la; + try { + State = 1004; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case BEGIN: + _localctx = new BeginTransactionStatementContext(_localctx); + EnterOuterAlt(_localctx, 1); + { + State = 992; + Match(BEGIN); + State = 994; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==TRANSACTION || _la==WORK) { + { + State = 993; + _la = TokenStream.LA(1); + if ( !(_la==TRANSACTION || _la==WORK) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + + } + break; + case COMMIT: + _localctx = new CommitTransactionStatementContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 996; + Match(COMMIT); + State = 998; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==TRANSACTION || _la==WORK) { + { + State = 997; + _la = TokenStream.LA(1); + if ( !(_la==TRANSACTION || _la==WORK) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + + } + break; + case ROLLBACK: + _localctx = new RollbackTransactionStatementContext(_localctx); + EnterOuterAlt(_localctx, 3); + { + State = 1000; + Match(ROLLBACK); + State = 1002; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==TRANSACTION || _la==WORK) { + { + State = 1001; + _la = TokenStream.LA(1); + if ( !(_la==TRANSACTION || _la==WORK) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class StandaloneExpressionContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ExpressionContext expression() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode Eof() { return GetToken(AccessSqlParser.Eof, 0); } + public StandaloneExpressionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_standaloneExpression; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + IAccessSqlVisitor typedVisitor = visitor as IAccessSqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitStandaloneExpression(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public StandaloneExpressionContext standaloneExpression() { + StandaloneExpressionContext _localctx = new StandaloneExpressionContext(Context, State); + EnterRule(_localctx, 118, RULE_standaloneExpression); + try { + EnterOuterAlt(_localctx, 1); + { + State = 1006; + expression(0); + State = 1007; + Match(Eof); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public override bool Sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 51: return expression_sempred((ExpressionContext)_localctx, predIndex); + } + return true; + } + private bool expression_sempred(ExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: return Precpred(Context, 13); + case 1: return Precpred(Context, 12); + case 2: return Precpred(Context, 11); + case 3: return Precpred(Context, 10); + case 4: return Precpred(Context, 9); + case 5: return Precpred(Context, 8); + case 6: return Precpred(Context, 4); + case 7: return Precpred(Context, 3); + case 8: return Precpred(Context, 2); + case 9: return Precpred(Context, 7); + case 10: return Precpred(Context, 6); + case 11: return Precpred(Context, 5); + } + return true; + } + + private static int[] _serializedATN = { + 4,1,117,1010,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2, + 7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14, + 2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21, + 2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,7,28, + 2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,34,2,35,7,35, + 2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42, + 2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49, + 2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56, + 2,57,7,57,2,58,7,58,2,59,7,59,1,0,3,0,122,8,0,1,0,1,0,1,0,1,0,1,0,1,0, + 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,138,8,0,1,0,3,0,141,8,0,1,0,1,0,1, + 1,1,1,3,1,147,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,3,2,167,8,2,1,3,1,3,1,3,1,3,1,3,5,3,174,8,3,10,3,12, + 3,177,9,3,3,3,179,8,3,1,4,1,4,1,4,1,4,1,4,1,4,5,4,187,8,4,10,4,12,4,190, + 9,4,1,4,3,4,193,8,4,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,3,6,205,8, + 6,1,6,1,6,1,6,3,6,210,8,6,1,7,1,7,1,7,1,7,5,7,216,8,7,10,7,12,7,219,9, + 7,1,8,1,8,3,8,223,8,8,1,8,3,8,226,8,8,1,9,1,9,1,9,1,9,5,9,232,8,9,10,9, + 12,9,235,9,9,1,9,1,9,1,10,1,10,3,10,241,8,10,1,10,1,10,1,10,1,10,1,10, + 1,10,5,10,249,8,10,10,10,12,10,252,9,10,1,10,1,10,5,10,256,8,10,10,10, + 12,10,259,9,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,5,11,270,8, + 11,10,11,12,11,273,9,11,1,11,1,11,3,11,277,8,11,1,11,1,11,1,11,1,12,1, + 12,1,12,1,12,3,12,286,8,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,5,13,295, + 8,13,10,13,12,13,298,9,13,1,13,1,13,1,13,1,13,1,13,5,13,305,8,13,10,13, + 12,13,308,9,13,3,13,310,8,13,1,14,1,14,1,14,1,15,1,15,3,15,317,8,15,1, + 16,1,16,1,16,1,16,1,16,1,17,1,17,3,17,326,8,17,1,17,1,17,1,17,1,17,1,17, + 3,17,333,8,17,1,17,1,17,1,17,5,17,338,8,17,10,17,12,17,341,9,17,1,17,1, + 17,3,17,345,8,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,3,17,354,8,17,1,17, + 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17, + 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,3,17,381,8,17,1,18,1, + 18,1,18,3,18,386,8,18,1,19,1,19,3,19,390,8,19,1,19,1,19,1,19,1,19,1,19, + 1,19,1,19,1,19,5,19,400,8,19,10,19,12,19,403,9,19,1,19,1,19,1,19,3,19, + 408,8,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1, + 20,1,20,1,20,3,20,425,8,20,1,21,1,21,3,21,429,8,21,1,22,1,22,1,22,1,22, + 1,22,3,22,436,8,22,1,23,1,23,1,23,5,23,441,8,23,10,23,12,23,444,9,23,1, + 24,1,24,3,24,448,8,24,1,24,3,24,451,8,24,1,24,1,24,1,24,1,24,3,24,457, + 8,24,1,24,1,24,3,24,461,8,24,1,25,3,25,464,8,25,1,25,1,25,1,26,1,26,1, + 26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,477,8,26,1,26,1,26,1,26,1,26,1,26, + 1,26,1,26,3,26,486,8,26,1,26,1,26,1,26,1,26,3,26,492,8,26,1,26,1,26,1, + 26,3,26,497,8,26,1,26,1,26,1,26,1,26,1,26,1,26,5,26,505,8,26,10,26,12, + 26,508,9,26,1,26,1,26,3,26,512,8,26,1,26,5,26,515,8,26,10,26,12,26,518, + 9,26,3,26,520,8,26,1,27,1,27,3,27,524,8,27,1,27,1,27,1,27,1,27,1,27,1, + 27,5,27,532,8,27,10,27,12,27,535,9,27,1,27,1,27,1,27,1,27,3,27,541,8,27, + 1,27,1,27,1,27,1,27,1,27,5,27,548,8,27,10,27,12,27,551,9,27,1,27,1,27, + 1,27,1,27,3,27,557,8,27,1,27,1,27,1,27,1,27,3,27,563,8,27,1,27,1,27,1, + 27,1,27,5,27,569,8,27,10,27,12,27,572,9,27,1,27,1,27,1,27,1,27,1,27,1, + 27,1,27,5,27,581,8,27,10,27,12,27,584,9,27,1,27,1,27,3,27,588,8,27,1,27, + 5,27,591,8,27,10,27,12,27,594,9,27,1,27,1,27,3,27,598,8,27,1,27,1,27,1, + 27,1,27,1,27,3,27,605,8,27,1,28,1,28,1,28,1,28,1,28,5,28,612,8,28,10,28, + 12,28,615,9,28,1,29,1,29,1,29,1,29,1,29,1,29,3,29,623,8,29,1,30,1,30,1, + 30,1,30,1,30,1,30,1,30,1,30,3,30,633,8,30,1,31,1,31,1,31,1,31,1,31,1,31, + 1,31,5,31,642,8,31,10,31,12,31,645,9,31,1,31,1,31,3,31,649,8,31,1,31,1, + 31,1,31,1,31,1,31,5,31,656,8,31,10,31,12,31,659,9,31,1,31,1,31,1,31,1, + 31,3,31,665,8,31,1,32,1,32,1,32,1,32,5,32,671,8,32,10,32,12,32,674,9,32, + 1,33,1,33,1,33,1,33,1,33,3,33,681,8,33,1,34,1,34,3,34,685,8,34,1,34,1, + 34,3,34,689,8,34,1,35,1,35,3,35,693,8,35,1,35,3,35,696,8,35,1,35,1,35, + 3,35,700,8,35,1,35,3,35,703,8,35,1,35,3,35,706,8,35,1,35,3,35,709,8,35, + 1,35,3,35,712,8,35,1,36,1,36,1,37,1,37,1,37,1,37,1,37,5,37,721,8,37,10, + 37,12,37,724,9,37,1,38,1,38,1,38,1,39,1,39,1,39,1,39,5,39,733,8,39,10, + 39,12,39,736,9,39,1,39,3,39,739,8,39,1,40,1,40,1,40,1,40,1,40,1,40,3,40, + 747,8,40,1,41,1,41,1,41,1,41,5,41,753,8,41,10,41,12,41,756,9,41,3,41,758, + 8,41,1,42,1,42,1,42,1,42,1,42,1,42,3,42,766,8,42,1,42,3,42,769,8,42,3, + 42,771,8,42,1,43,1,43,1,43,1,43,5,43,777,8,43,10,43,12,43,780,9,43,1,44, + 1,44,5,44,784,8,44,10,44,12,44,787,9,44,1,45,1,45,3,45,791,8,45,1,45,3, + 45,794,8,45,1,45,1,45,1,45,1,45,3,45,800,8,45,1,45,3,45,803,8,45,1,45, + 1,45,1,45,1,45,3,45,809,8,45,1,46,1,46,1,46,1,46,1,46,1,46,1,47,3,47,818, + 8,47,1,47,1,47,3,47,822,8,47,1,47,1,47,3,47,826,8,47,3,47,828,8,47,1,48, + 1,48,1,48,1,49,1,49,1,49,1,49,1,49,5,49,838,8,49,10,49,12,49,841,9,49, + 1,50,1,50,3,50,845,8,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,855, + 8,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51, + 1,51,3,51,871,8,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,880,8,51,1, + 51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,895, + 8,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,904,8,51,1,51,1,51,1,51,1, + 51,1,51,5,51,911,8,51,10,51,12,51,914,9,51,1,51,1,51,1,51,1,51,1,51,3, + 51,921,8,51,1,51,5,51,924,8,51,10,51,12,51,927,9,51,1,52,1,52,1,52,1,52, + 1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52, + 3,52,947,8,52,1,53,1,53,1,53,1,53,3,53,953,8,53,1,53,1,53,1,53,5,53,958, + 8,53,10,53,12,53,961,9,53,3,53,963,8,53,1,53,1,53,1,54,1,54,1,54,1,54, + 3,54,971,8,54,1,55,1,55,1,55,3,55,976,8,55,1,55,1,55,1,56,1,56,1,57,1, + 57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,3,57,991,8,57,1,58,1,58,3,58,995, + 8,58,1,58,1,58,3,58,999,8,58,1,58,1,58,3,58,1003,8,58,3,58,1005,8,58,1, + 59,1,59,1,59,1,59,0,1,102,60,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30, + 32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78, + 80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118, + 0,12,1,0,79,80,1,0,81,82,1,0,71,72,1,0,99,100,2,0,30,31,35,35,1,0,90,91, + 2,0,14,14,86,88,1,0,90,92,1,0,93,98,1,0,9,11,1,0,112,114,1,0,43,44,1152, + 0,121,1,0,0,0,2,144,1,0,0,0,4,166,1,0,0,0,6,168,1,0,0,0,8,180,1,0,0,0, + 10,194,1,0,0,0,12,198,1,0,0,0,14,211,1,0,0,0,16,220,1,0,0,0,18,227,1,0, + 0,0,20,238,1,0,0,0,22,262,1,0,0,0,24,281,1,0,0,0,26,309,1,0,0,0,28,311, + 1,0,0,0,30,316,1,0,0,0,32,318,1,0,0,0,34,380,1,0,0,0,36,385,1,0,0,0,38, + 387,1,0,0,0,40,424,1,0,0,0,42,426,1,0,0,0,44,435,1,0,0,0,46,437,1,0,0, + 0,48,445,1,0,0,0,50,463,1,0,0,0,52,519,1,0,0,0,54,604,1,0,0,0,56,613,1, + 0,0,0,58,622,1,0,0,0,60,632,1,0,0,0,62,634,1,0,0,0,64,666,1,0,0,0,66,680, + 1,0,0,0,68,688,1,0,0,0,70,690,1,0,0,0,72,713,1,0,0,0,74,715,1,0,0,0,76, + 725,1,0,0,0,78,728,1,0,0,0,80,746,1,0,0,0,82,757,1,0,0,0,84,770,1,0,0, + 0,86,772,1,0,0,0,88,781,1,0,0,0,90,808,1,0,0,0,92,810,1,0,0,0,94,827,1, + 0,0,0,96,829,1,0,0,0,98,832,1,0,0,0,100,842,1,0,0,0,102,854,1,0,0,0,104, + 946,1,0,0,0,106,948,1,0,0,0,108,970,1,0,0,0,110,975,1,0,0,0,112,979,1, + 0,0,0,114,990,1,0,0,0,116,1004,1,0,0,0,118,1006,1,0,0,0,120,122,3,18,9, + 0,121,120,1,0,0,0,121,122,1,0,0,0,122,137,1,0,0,0,123,138,3,2,1,0,124, + 138,3,20,10,0,125,138,3,38,19,0,126,138,3,22,11,0,127,138,3,24,12,0,128, + 138,3,32,16,0,129,138,3,40,20,0,130,138,3,62,31,0,131,138,3,8,4,0,132, + 138,3,12,6,0,133,138,3,116,58,0,134,138,3,6,3,0,135,138,3,14,7,0,136,138, + 3,64,32,0,137,123,1,0,0,0,137,124,1,0,0,0,137,125,1,0,0,0,137,126,1,0, + 0,0,137,127,1,0,0,0,137,128,1,0,0,0,137,129,1,0,0,0,137,130,1,0,0,0,137, + 131,1,0,0,0,137,132,1,0,0,0,137,133,1,0,0,0,137,134,1,0,0,0,137,135,1, + 0,0,0,137,136,1,0,0,0,138,140,1,0,0,0,139,141,5,103,0,0,140,139,1,0,0, + 0,140,141,1,0,0,0,141,142,1,0,0,0,142,143,5,0,0,1,143,1,1,0,0,0,144,146, + 5,28,0,0,145,147,5,8,0,0,146,145,1,0,0,0,146,147,1,0,0,0,147,148,1,0,0, + 0,148,149,5,27,0,0,149,150,5,99,0,0,150,151,3,70,35,0,151,152,5,100,0, + 0,152,153,5,29,0,0,153,154,3,4,2,0,154,3,1,0,0,0,155,167,3,20,10,0,156, + 167,3,38,19,0,157,167,3,22,11,0,158,167,3,24,12,0,159,167,3,32,16,0,160, + 167,3,40,20,0,161,167,3,62,31,0,162,167,3,8,4,0,163,167,3,12,6,0,164,167, + 3,6,3,0,165,167,3,64,32,0,166,155,1,0,0,0,166,156,1,0,0,0,166,157,1,0, + 0,0,166,158,1,0,0,0,166,159,1,0,0,0,166,160,1,0,0,0,166,161,1,0,0,0,166, + 162,1,0,0,0,166,163,1,0,0,0,166,164,1,0,0,0,166,165,1,0,0,0,167,5,1,0, + 0,0,168,169,7,0,0,0,169,178,3,112,56,0,170,175,3,102,51,0,171,172,5,101, + 0,0,172,174,3,102,51,0,173,171,1,0,0,0,174,177,1,0,0,0,175,173,1,0,0,0, + 175,176,1,0,0,0,176,179,1,0,0,0,177,175,1,0,0,0,178,170,1,0,0,0,178,179, + 1,0,0,0,179,7,1,0,0,0,180,181,5,60,0,0,181,182,3,88,44,0,182,183,5,64, + 0,0,183,188,3,10,5,0,184,185,5,101,0,0,185,187,3,10,5,0,186,184,1,0,0, + 0,187,190,1,0,0,0,188,186,1,0,0,0,188,189,1,0,0,0,189,192,1,0,0,0,190, + 188,1,0,0,0,191,193,3,96,48,0,192,191,1,0,0,0,192,193,1,0,0,0,193,9,1, + 0,0,0,194,195,3,110,55,0,195,196,5,93,0,0,196,197,3,102,51,0,197,11,1, + 0,0,0,198,204,5,59,0,0,199,200,3,112,56,0,200,201,5,102,0,0,201,202,5, + 86,0,0,202,205,1,0,0,0,203,205,5,86,0,0,204,199,1,0,0,0,204,203,1,0,0, + 0,204,205,1,0,0,0,205,206,1,0,0,0,206,207,5,2,0,0,207,209,3,88,44,0,208, + 210,3,96,48,0,209,208,1,0,0,0,209,210,1,0,0,0,210,13,1,0,0,0,211,212,5, + 1,0,0,212,217,3,16,8,0,213,214,5,101,0,0,214,216,3,16,8,0,215,213,1,0, + 0,0,216,219,1,0,0,0,217,215,1,0,0,0,217,218,1,0,0,0,218,15,1,0,0,0,219, + 217,1,0,0,0,220,225,5,104,0,0,221,223,5,5,0,0,222,221,1,0,0,0,222,223, + 1,0,0,0,223,224,1,0,0,0,224,226,3,112,56,0,225,222,1,0,0,0,225,226,1,0, + 0,0,226,17,1,0,0,0,227,228,5,78,0,0,228,233,3,28,14,0,229,230,5,101,0, + 0,230,232,3,28,14,0,231,229,1,0,0,0,232,235,1,0,0,0,233,231,1,0,0,0,233, + 234,1,0,0,0,234,236,1,0,0,0,235,233,1,0,0,0,236,237,5,103,0,0,237,19,1, + 0,0,0,238,240,5,38,0,0,239,241,5,69,0,0,240,239,1,0,0,0,240,241,1,0,0, + 0,241,242,1,0,0,0,242,243,5,39,0,0,243,244,3,112,56,0,244,245,5,99,0,0, + 245,250,3,46,23,0,246,247,5,101,0,0,247,249,3,46,23,0,248,246,1,0,0,0, + 249,252,1,0,0,0,250,248,1,0,0,0,250,251,1,0,0,0,251,257,1,0,0,0,252,250, + 1,0,0,0,253,254,5,101,0,0,254,256,3,54,27,0,255,253,1,0,0,0,256,259,1, + 0,0,0,257,255,1,0,0,0,257,258,1,0,0,0,258,260,1,0,0,0,259,257,1,0,0,0, + 260,261,5,100,0,0,261,21,1,0,0,0,262,263,5,38,0,0,263,264,5,76,0,0,264, + 276,3,112,56,0,265,266,5,99,0,0,266,271,3,112,56,0,267,268,5,101,0,0,268, + 270,3,112,56,0,269,267,1,0,0,0,270,273,1,0,0,0,271,269,1,0,0,0,271,272, + 1,0,0,0,272,274,1,0,0,0,273,271,1,0,0,0,274,275,5,100,0,0,275,277,1,0, + 0,0,276,265,1,0,0,0,276,277,1,0,0,0,277,278,1,0,0,0,278,279,5,5,0,0,279, + 280,3,64,32,0,280,23,1,0,0,0,281,282,5,38,0,0,282,283,5,77,0,0,283,285, + 3,112,56,0,284,286,3,26,13,0,285,284,1,0,0,0,285,286,1,0,0,0,286,287,1, + 0,0,0,287,288,5,5,0,0,288,289,3,36,18,0,289,25,1,0,0,0,290,291,5,99,0, + 0,291,296,3,28,14,0,292,293,5,101,0,0,293,295,3,28,14,0,294,292,1,0,0, + 0,295,298,1,0,0,0,296,294,1,0,0,0,296,297,1,0,0,0,297,299,1,0,0,0,298, + 296,1,0,0,0,299,300,5,100,0,0,300,310,1,0,0,0,301,306,3,28,14,0,302,303, + 5,101,0,0,303,305,3,28,14,0,304,302,1,0,0,0,305,308,1,0,0,0,306,304,1, + 0,0,0,306,307,1,0,0,0,307,310,1,0,0,0,308,306,1,0,0,0,309,290,1,0,0,0, + 309,301,1,0,0,0,310,27,1,0,0,0,311,312,3,30,15,0,312,313,3,48,24,0,313, + 29,1,0,0,0,314,317,3,112,56,0,315,317,5,105,0,0,316,314,1,0,0,0,316,315, + 1,0,0,0,317,31,1,0,0,0,318,319,5,45,0,0,319,320,5,39,0,0,320,321,3,112, + 56,0,321,322,3,34,17,0,322,33,1,0,0,0,323,325,5,48,0,0,324,326,5,50,0, + 0,325,324,1,0,0,0,325,326,1,0,0,0,326,327,1,0,0,0,327,381,3,46,23,0,328, + 329,5,48,0,0,329,381,3,54,27,0,330,332,5,45,0,0,331,333,5,50,0,0,332,331, + 1,0,0,0,332,333,1,0,0,0,333,334,1,0,0,0,334,335,3,112,56,0,335,339,3,48, + 24,0,336,338,3,52,26,0,337,336,1,0,0,0,338,341,1,0,0,0,339,337,1,0,0,0, + 339,340,1,0,0,0,340,381,1,0,0,0,341,339,1,0,0,0,342,344,5,45,0,0,343,345, + 5,50,0,0,344,343,1,0,0,0,344,345,1,0,0,0,345,346,1,0,0,0,346,347,3,112, + 56,0,347,348,5,64,0,0,348,349,5,65,0,0,349,350,3,102,51,0,350,381,1,0, + 0,0,351,353,5,45,0,0,352,354,5,50,0,0,353,352,1,0,0,0,353,354,1,0,0,0, + 354,355,1,0,0,0,355,356,3,112,56,0,356,357,5,49,0,0,357,358,5,65,0,0,358, + 381,1,0,0,0,359,360,5,49,0,0,360,361,5,50,0,0,361,381,3,112,56,0,362,363, + 5,49,0,0,363,364,5,56,0,0,364,381,3,112,56,0,365,366,5,46,0,0,366,367, + 5,47,0,0,367,381,3,112,56,0,368,369,5,46,0,0,369,370,5,50,0,0,370,371, + 3,112,56,0,371,372,5,47,0,0,372,373,3,112,56,0,373,381,1,0,0,0,374,375, + 5,46,0,0,375,376,5,68,0,0,376,377,3,112,56,0,377,378,5,47,0,0,378,379, + 3,112,56,0,379,381,1,0,0,0,380,323,1,0,0,0,380,328,1,0,0,0,380,330,1,0, + 0,0,380,342,1,0,0,0,380,351,1,0,0,0,380,359,1,0,0,0,380,362,1,0,0,0,380, + 365,1,0,0,0,380,368,1,0,0,0,380,374,1,0,0,0,381,35,1,0,0,0,382,386,3,64, + 32,0,383,386,3,62,31,0,384,386,3,20,10,0,385,382,1,0,0,0,385,383,1,0,0, + 0,385,384,1,0,0,0,386,37,1,0,0,0,387,389,5,38,0,0,388,390,5,67,0,0,389, + 388,1,0,0,0,389,390,1,0,0,0,390,391,1,0,0,0,391,392,5,68,0,0,392,393,3, + 112,56,0,393,394,5,21,0,0,394,395,3,112,56,0,395,396,5,99,0,0,396,401, + 3,42,21,0,397,398,5,101,0,0,398,400,3,42,21,0,399,397,1,0,0,0,400,403, + 1,0,0,0,401,399,1,0,0,0,401,402,1,0,0,0,402,404,1,0,0,0,403,401,1,0,0, + 0,404,407,5,100,0,0,405,406,5,70,0,0,406,408,3,44,22,0,407,405,1,0,0,0, + 407,408,1,0,0,0,408,39,1,0,0,0,409,410,5,49,0,0,410,411,5,39,0,0,411,425, + 3,112,56,0,412,413,5,49,0,0,413,414,5,68,0,0,414,415,3,112,56,0,415,416, + 5,21,0,0,416,417,3,112,56,0,417,425,1,0,0,0,418,419,5,49,0,0,419,420,5, + 77,0,0,420,425,3,112,56,0,421,422,5,49,0,0,422,423,5,76,0,0,423,425,3, + 112,56,0,424,409,1,0,0,0,424,412,1,0,0,0,424,418,1,0,0,0,424,421,1,0,0, + 0,425,41,1,0,0,0,426,428,3,112,56,0,427,429,7,1,0,0,428,427,1,0,0,0,428, + 429,1,0,0,0,429,43,1,0,0,0,430,436,5,54,0,0,431,432,5,73,0,0,432,436,5, + 85,0,0,433,434,5,74,0,0,434,436,5,85,0,0,435,430,1,0,0,0,435,431,1,0,0, + 0,435,433,1,0,0,0,436,45,1,0,0,0,437,438,3,112,56,0,438,442,3,48,24,0, + 439,441,3,52,26,0,440,439,1,0,0,0,441,444,1,0,0,0,442,440,1,0,0,0,442, + 443,1,0,0,0,443,47,1,0,0,0,444,442,1,0,0,0,445,447,3,112,56,0,446,448, + 3,112,56,0,447,446,1,0,0,0,447,448,1,0,0,0,448,450,1,0,0,0,449,451,3,112, + 56,0,450,449,1,0,0,0,450,451,1,0,0,0,451,460,1,0,0,0,452,453,5,99,0,0, + 453,456,3,50,25,0,454,455,5,101,0,0,455,457,3,50,25,0,456,454,1,0,0,0, + 456,457,1,0,0,0,457,458,1,0,0,0,458,459,5,100,0,0,459,461,1,0,0,0,460, + 452,1,0,0,0,460,461,1,0,0,0,461,49,1,0,0,0,462,464,5,91,0,0,463,462,1, + 0,0,0,463,464,1,0,0,0,464,465,1,0,0,0,465,466,5,107,0,0,466,51,1,0,0,0, + 467,468,5,8,0,0,468,520,5,85,0,0,469,520,5,85,0,0,470,471,5,65,0,0,471, + 520,3,102,51,0,472,473,5,70,0,0,473,520,7,2,0,0,474,475,5,56,0,0,475,477, + 3,112,56,0,476,474,1,0,0,0,476,477,1,0,0,0,477,478,1,0,0,0,478,479,5,75, + 0,0,479,480,5,99,0,0,480,481,3,56,28,0,481,482,5,100,0,0,482,520,1,0,0, + 0,483,484,5,56,0,0,484,486,3,112,56,0,485,483,1,0,0,0,485,486,1,0,0,0, + 486,487,1,0,0,0,487,488,5,54,0,0,488,520,5,55,0,0,489,490,5,56,0,0,490, + 492,3,112,56,0,491,489,1,0,0,0,491,492,1,0,0,0,492,493,1,0,0,0,493,520, + 5,67,0,0,494,495,5,56,0,0,495,497,3,112,56,0,496,494,1,0,0,0,496,497,1, + 0,0,0,497,498,1,0,0,0,498,499,5,58,0,0,499,511,3,112,56,0,500,501,5,99, + 0,0,501,506,3,112,56,0,502,503,5,101,0,0,503,505,3,112,56,0,504,502,1, + 0,0,0,505,508,1,0,0,0,506,504,1,0,0,0,506,507,1,0,0,0,507,509,1,0,0,0, + 508,506,1,0,0,0,509,510,5,100,0,0,510,512,1,0,0,0,511,500,1,0,0,0,511, + 512,1,0,0,0,512,516,1,0,0,0,513,515,3,58,29,0,514,513,1,0,0,0,515,518, + 1,0,0,0,516,514,1,0,0,0,516,517,1,0,0,0,517,520,1,0,0,0,518,516,1,0,0, + 0,519,467,1,0,0,0,519,469,1,0,0,0,519,470,1,0,0,0,519,472,1,0,0,0,519, + 476,1,0,0,0,519,485,1,0,0,0,519,491,1,0,0,0,519,496,1,0,0,0,520,53,1,0, + 0,0,521,522,5,56,0,0,522,524,3,112,56,0,523,521,1,0,0,0,523,524,1,0,0, + 0,524,525,1,0,0,0,525,526,5,54,0,0,526,527,5,55,0,0,527,528,5,99,0,0,528, + 533,3,112,56,0,529,530,5,101,0,0,530,532,3,112,56,0,531,529,1,0,0,0,532, + 535,1,0,0,0,533,531,1,0,0,0,533,534,1,0,0,0,534,536,1,0,0,0,535,533,1, + 0,0,0,536,537,5,100,0,0,537,605,1,0,0,0,538,539,5,56,0,0,539,541,3,112, + 56,0,540,538,1,0,0,0,540,541,1,0,0,0,541,542,1,0,0,0,542,543,5,67,0,0, + 543,544,5,99,0,0,544,549,3,112,56,0,545,546,5,101,0,0,546,548,3,112,56, + 0,547,545,1,0,0,0,548,551,1,0,0,0,549,547,1,0,0,0,549,550,1,0,0,0,550, + 552,1,0,0,0,551,549,1,0,0,0,552,553,5,100,0,0,553,605,1,0,0,0,554,555, + 5,56,0,0,555,557,3,112,56,0,556,554,1,0,0,0,556,557,1,0,0,0,557,558,1, + 0,0,0,558,559,5,57,0,0,559,562,5,55,0,0,560,561,5,66,0,0,561,563,5,68, + 0,0,562,560,1,0,0,0,562,563,1,0,0,0,563,564,1,0,0,0,564,565,5,99,0,0,565, + 570,3,112,56,0,566,567,5,101,0,0,567,569,3,112,56,0,568,566,1,0,0,0,569, + 572,1,0,0,0,570,568,1,0,0,0,570,571,1,0,0,0,571,573,1,0,0,0,572,570,1, + 0,0,0,573,574,5,100,0,0,574,575,5,58,0,0,575,587,3,112,56,0,576,577,5, + 99,0,0,577,582,3,112,56,0,578,579,5,101,0,0,579,581,3,112,56,0,580,578, + 1,0,0,0,581,584,1,0,0,0,582,580,1,0,0,0,582,583,1,0,0,0,583,585,1,0,0, + 0,584,582,1,0,0,0,585,586,5,100,0,0,586,588,1,0,0,0,587,576,1,0,0,0,587, + 588,1,0,0,0,588,592,1,0,0,0,589,591,3,58,29,0,590,589,1,0,0,0,591,594, + 1,0,0,0,592,590,1,0,0,0,592,593,1,0,0,0,593,605,1,0,0,0,594,592,1,0,0, + 0,595,596,5,56,0,0,596,598,3,112,56,0,597,595,1,0,0,0,597,598,1,0,0,0, + 598,599,1,0,0,0,599,600,5,75,0,0,600,601,5,99,0,0,601,602,3,56,28,0,602, + 603,5,100,0,0,603,605,1,0,0,0,604,523,1,0,0,0,604,540,1,0,0,0,604,556, + 1,0,0,0,604,597,1,0,0,0,605,55,1,0,0,0,606,612,8,3,0,0,607,608,5,99,0, + 0,608,609,3,56,28,0,609,610,5,100,0,0,610,612,1,0,0,0,611,606,1,0,0,0, + 611,607,1,0,0,0,612,615,1,0,0,0,613,611,1,0,0,0,613,614,1,0,0,0,614,57, + 1,0,0,0,615,613,1,0,0,0,616,617,5,21,0,0,617,618,5,60,0,0,618,623,3,60, + 30,0,619,620,5,21,0,0,620,621,5,59,0,0,621,623,3,60,30,0,622,616,1,0,0, + 0,622,619,1,0,0,0,623,59,1,0,0,0,624,633,5,61,0,0,625,626,5,66,0,0,626, + 633,5,63,0,0,627,633,5,62,0,0,628,629,5,64,0,0,629,633,5,85,0,0,630,631, + 5,64,0,0,631,633,5,65,0,0,632,624,1,0,0,0,632,625,1,0,0,0,632,627,1,0, + 0,0,632,628,1,0,0,0,632,630,1,0,0,0,633,61,1,0,0,0,634,635,5,51,0,0,635, + 636,5,52,0,0,636,664,3,112,56,0,637,638,5,99,0,0,638,643,3,112,56,0,639, + 640,5,101,0,0,640,642,3,112,56,0,641,639,1,0,0,0,642,645,1,0,0,0,643,641, + 1,0,0,0,643,644,1,0,0,0,644,646,1,0,0,0,645,643,1,0,0,0,646,647,5,100, + 0,0,647,649,1,0,0,0,648,637,1,0,0,0,648,649,1,0,0,0,649,650,1,0,0,0,650, + 651,5,53,0,0,651,652,5,99,0,0,652,657,3,102,51,0,653,654,5,101,0,0,654, + 656,3,102,51,0,655,653,1,0,0,0,656,659,1,0,0,0,657,655,1,0,0,0,657,658, + 1,0,0,0,658,660,1,0,0,0,659,657,1,0,0,0,660,661,5,100,0,0,661,665,1,0, + 0,0,662,663,5,65,0,0,663,665,5,53,0,0,664,648,1,0,0,0,664,662,1,0,0,0, + 665,63,1,0,0,0,666,672,3,66,33,0,667,668,3,68,34,0,668,669,3,66,33,0,669, + 671,1,0,0,0,670,667,1,0,0,0,671,674,1,0,0,0,672,670,1,0,0,0,672,673,1, + 0,0,0,673,65,1,0,0,0,674,672,1,0,0,0,675,681,3,70,35,0,676,677,5,99,0, + 0,677,678,3,64,32,0,678,679,5,100,0,0,679,681,1,0,0,0,680,675,1,0,0,0, + 680,676,1,0,0,0,681,67,1,0,0,0,682,684,5,34,0,0,683,685,5,35,0,0,684,683, + 1,0,0,0,684,685,1,0,0,0,685,689,1,0,0,0,686,689,5,36,0,0,687,689,5,37, + 0,0,688,682,1,0,0,0,688,686,1,0,0,0,688,687,1,0,0,0,689,69,1,0,0,0,690, + 692,5,1,0,0,691,693,3,72,36,0,692,691,1,0,0,0,692,693,1,0,0,0,693,695, + 1,0,0,0,694,696,3,78,39,0,695,694,1,0,0,0,695,696,1,0,0,0,696,697,1,0, + 0,0,697,699,3,82,41,0,698,700,3,86,43,0,699,698,1,0,0,0,699,700,1,0,0, + 0,700,702,1,0,0,0,701,703,3,96,48,0,702,701,1,0,0,0,702,703,1,0,0,0,703, + 705,1,0,0,0,704,706,3,74,37,0,705,704,1,0,0,0,705,706,1,0,0,0,706,708, + 1,0,0,0,707,709,3,76,38,0,708,707,1,0,0,0,708,709,1,0,0,0,709,711,1,0, + 0,0,710,712,3,98,49,0,711,710,1,0,0,0,711,712,1,0,0,0,712,71,1,0,0,0,713, + 714,7,4,0,0,714,73,1,0,0,0,715,716,5,23,0,0,716,717,5,25,0,0,717,722,3, + 102,51,0,718,719,5,101,0,0,719,721,3,102,51,0,720,718,1,0,0,0,721,724, + 1,0,0,0,722,720,1,0,0,0,722,723,1,0,0,0,723,75,1,0,0,0,724,722,1,0,0,0, + 725,726,5,26,0,0,726,727,3,102,51,0,727,77,1,0,0,0,728,729,5,4,0,0,729, + 734,3,80,40,0,730,731,7,5,0,0,731,733,3,80,40,0,732,730,1,0,0,0,733,736, + 1,0,0,0,734,732,1,0,0,0,734,735,1,0,0,0,735,738,1,0,0,0,736,734,1,0,0, + 0,737,739,5,32,0,0,738,737,1,0,0,0,738,739,1,0,0,0,739,79,1,0,0,0,740, + 747,5,107,0,0,741,747,5,105,0,0,742,743,5,99,0,0,743,744,3,102,51,0,744, + 745,5,100,0,0,745,747,1,0,0,0,746,740,1,0,0,0,746,741,1,0,0,0,746,742, + 1,0,0,0,747,81,1,0,0,0,748,758,5,86,0,0,749,754,3,84,42,0,750,751,5,101, + 0,0,751,753,3,84,42,0,752,750,1,0,0,0,753,756,1,0,0,0,754,752,1,0,0,0, + 754,755,1,0,0,0,755,758,1,0,0,0,756,754,1,0,0,0,757,748,1,0,0,0,757,749, + 1,0,0,0,758,83,1,0,0,0,759,760,3,112,56,0,760,761,5,102,0,0,761,762,5, + 86,0,0,762,771,1,0,0,0,763,768,3,102,51,0,764,766,5,5,0,0,765,764,1,0, + 0,0,765,766,1,0,0,0,766,767,1,0,0,0,767,769,3,112,56,0,768,765,1,0,0,0, + 768,769,1,0,0,0,769,771,1,0,0,0,770,759,1,0,0,0,770,763,1,0,0,0,771,85, + 1,0,0,0,772,773,5,2,0,0,773,778,3,88,44,0,774,775,5,101,0,0,775,777,3, + 88,44,0,776,774,1,0,0,0,777,780,1,0,0,0,778,776,1,0,0,0,778,779,1,0,0, + 0,779,87,1,0,0,0,780,778,1,0,0,0,781,785,3,90,45,0,782,784,3,92,46,0,783, + 782,1,0,0,0,784,787,1,0,0,0,785,783,1,0,0,0,785,786,1,0,0,0,786,89,1,0, + 0,0,787,785,1,0,0,0,788,793,3,112,56,0,789,791,5,5,0,0,790,789,1,0,0,0, + 790,791,1,0,0,0,791,792,1,0,0,0,792,794,3,112,56,0,793,790,1,0,0,0,793, + 794,1,0,0,0,794,809,1,0,0,0,795,796,5,99,0,0,796,797,3,64,32,0,797,802, + 5,100,0,0,798,800,5,5,0,0,799,798,1,0,0,0,799,800,1,0,0,0,800,801,1,0, + 0,0,801,803,3,112,56,0,802,799,1,0,0,0,802,803,1,0,0,0,803,809,1,0,0,0, + 804,805,5,99,0,0,805,806,3,88,44,0,806,807,5,100,0,0,807,809,1,0,0,0,808, + 788,1,0,0,0,808,795,1,0,0,0,808,804,1,0,0,0,809,91,1,0,0,0,810,811,3,94, + 47,0,811,812,5,19,0,0,812,813,3,90,45,0,813,814,5,21,0,0,814,815,3,102, + 51,0,815,93,1,0,0,0,816,818,5,15,0,0,817,816,1,0,0,0,817,818,1,0,0,0,818, + 828,1,0,0,0,819,821,5,16,0,0,820,822,5,18,0,0,821,820,1,0,0,0,821,822, + 1,0,0,0,822,828,1,0,0,0,823,825,5,17,0,0,824,826,5,18,0,0,825,824,1,0, + 0,0,825,826,1,0,0,0,826,828,1,0,0,0,827,817,1,0,0,0,827,819,1,0,0,0,827, + 823,1,0,0,0,828,95,1,0,0,0,829,830,5,3,0,0,830,831,3,102,51,0,831,97,1, + 0,0,0,832,833,5,22,0,0,833,834,5,25,0,0,834,839,3,100,50,0,835,836,5,101, + 0,0,836,838,3,100,50,0,837,835,1,0,0,0,838,841,1,0,0,0,839,837,1,0,0,0, + 839,840,1,0,0,0,840,99,1,0,0,0,841,839,1,0,0,0,842,844,3,102,51,0,843, + 845,7,1,0,0,844,843,1,0,0,0,844,845,1,0,0,0,845,101,1,0,0,0,846,847,6, + 51,-1,0,847,848,5,8,0,0,848,855,3,102,51,16,849,850,5,12,0,0,850,855,3, + 102,51,15,851,852,5,91,0,0,852,855,3,102,51,14,853,855,3,104,52,0,854, + 846,1,0,0,0,854,849,1,0,0,0,854,851,1,0,0,0,854,853,1,0,0,0,855,925,1, + 0,0,0,856,857,10,13,0,0,857,858,5,89,0,0,858,924,3,102,51,14,859,860,10, + 12,0,0,860,861,7,6,0,0,861,924,3,102,51,13,862,863,10,11,0,0,863,864,7, + 7,0,0,864,924,3,102,51,12,865,866,10,10,0,0,866,867,7,8,0,0,867,924,3, + 102,51,11,868,870,10,9,0,0,869,871,5,8,0,0,870,869,1,0,0,0,870,871,1,0, + 0,0,871,872,1,0,0,0,872,873,5,33,0,0,873,874,3,102,51,0,874,875,5,6,0, + 0,875,876,3,102,51,10,876,924,1,0,0,0,877,879,10,8,0,0,878,880,5,8,0,0, + 879,878,1,0,0,0,879,880,1,0,0,0,880,881,1,0,0,0,881,882,5,13,0,0,882,924, + 3,102,51,9,883,884,10,4,0,0,884,885,7,9,0,0,885,924,3,102,51,5,886,887, + 10,3,0,0,887,888,5,6,0,0,888,924,3,102,51,4,889,890,10,2,0,0,890,891,5, + 7,0,0,891,924,3,102,51,3,892,894,10,7,0,0,893,895,5,8,0,0,894,893,1,0, + 0,0,894,895,1,0,0,0,895,896,1,0,0,0,896,897,5,20,0,0,897,898,5,99,0,0, + 898,899,3,70,35,0,899,900,5,100,0,0,900,924,1,0,0,0,901,903,10,6,0,0,902, + 904,5,8,0,0,903,902,1,0,0,0,903,904,1,0,0,0,904,905,1,0,0,0,905,906,5, + 20,0,0,906,907,5,99,0,0,907,912,3,102,51,0,908,909,5,101,0,0,909,911,3, + 102,51,0,910,908,1,0,0,0,911,914,1,0,0,0,912,910,1,0,0,0,912,913,1,0,0, + 0,913,915,1,0,0,0,914,912,1,0,0,0,915,916,5,100,0,0,916,924,1,0,0,0,917, + 918,10,5,0,0,918,920,5,24,0,0,919,921,5,8,0,0,920,919,1,0,0,0,920,921, + 1,0,0,0,921,922,1,0,0,0,922,924,5,85,0,0,923,856,1,0,0,0,923,859,1,0,0, + 0,923,862,1,0,0,0,923,865,1,0,0,0,923,868,1,0,0,0,923,877,1,0,0,0,923, + 883,1,0,0,0,923,886,1,0,0,0,923,889,1,0,0,0,923,892,1,0,0,0,923,901,1, + 0,0,0,923,917,1,0,0,0,924,927,1,0,0,0,925,923,1,0,0,0,925,926,1,0,0,0, + 926,103,1,0,0,0,927,925,1,0,0,0,928,947,3,114,57,0,929,947,3,106,53,0, + 930,947,3,110,55,0,931,947,5,105,0,0,932,947,5,104,0,0,933,934,5,27,0, + 0,934,935,5,99,0,0,935,936,3,70,35,0,936,937,5,100,0,0,937,947,1,0,0,0, + 938,939,5,99,0,0,939,940,3,70,35,0,940,941,5,100,0,0,941,947,1,0,0,0,942, + 943,5,99,0,0,943,944,3,102,51,0,944,945,5,100,0,0,945,947,1,0,0,0,946, + 928,1,0,0,0,946,929,1,0,0,0,946,930,1,0,0,0,946,931,1,0,0,0,946,932,1, + 0,0,0,946,933,1,0,0,0,946,938,1,0,0,0,946,942,1,0,0,0,947,105,1,0,0,0, + 948,949,3,108,54,0,949,962,5,99,0,0,950,963,5,86,0,0,951,953,5,31,0,0, + 952,951,1,0,0,0,952,953,1,0,0,0,953,954,1,0,0,0,954,959,3,102,51,0,955, + 956,5,101,0,0,956,958,3,102,51,0,957,955,1,0,0,0,958,961,1,0,0,0,959,957, + 1,0,0,0,959,960,1,0,0,0,960,963,1,0,0,0,961,959,1,0,0,0,962,950,1,0,0, + 0,962,952,1,0,0,0,962,963,1,0,0,0,963,964,1,0,0,0,964,965,5,100,0,0,965, + 107,1,0,0,0,966,971,3,112,56,0,967,971,5,16,0,0,968,971,5,17,0,0,969,971, + 5,81,0,0,970,966,1,0,0,0,970,967,1,0,0,0,970,968,1,0,0,0,970,969,1,0,0, + 0,971,109,1,0,0,0,972,973,3,112,56,0,973,974,5,102,0,0,974,976,1,0,0,0, + 975,972,1,0,0,0,975,976,1,0,0,0,976,977,1,0,0,0,977,978,3,112,56,0,978, + 111,1,0,0,0,979,980,7,10,0,0,980,113,1,0,0,0,981,991,5,107,0,0,982,991, + 5,108,0,0,983,991,5,106,0,0,984,991,5,109,0,0,985,991,5,110,0,0,986,991, + 5,111,0,0,987,991,5,83,0,0,988,991,5,84,0,0,989,991,5,85,0,0,990,981,1, + 0,0,0,990,982,1,0,0,0,990,983,1,0,0,0,990,984,1,0,0,0,990,985,1,0,0,0, + 990,986,1,0,0,0,990,987,1,0,0,0,990,988,1,0,0,0,990,989,1,0,0,0,991,115, + 1,0,0,0,992,994,5,40,0,0,993,995,7,11,0,0,994,993,1,0,0,0,994,995,1,0, + 0,0,995,1005,1,0,0,0,996,998,5,41,0,0,997,999,7,11,0,0,998,997,1,0,0,0, + 998,999,1,0,0,0,999,1005,1,0,0,0,1000,1002,5,42,0,0,1001,1003,7,11,0,0, + 1002,1001,1,0,0,0,1002,1003,1,0,0,0,1003,1005,1,0,0,0,1004,992,1,0,0,0, + 1004,996,1,0,0,0,1004,1000,1,0,0,0,1005,117,1,0,0,0,1006,1007,3,102,51, + 0,1007,1008,5,0,0,1,1008,119,1,0,0,0,125,121,137,140,146,166,175,178,188, + 192,204,209,217,222,225,233,240,250,257,271,276,285,296,306,309,316,325, + 332,339,344,353,380,385,389,401,407,424,428,435,442,447,450,456,460,463, + 476,485,491,496,506,511,516,519,523,533,540,549,556,562,570,582,587,592, + 597,604,611,613,622,632,643,648,657,664,672,680,684,688,692,695,699,702, + 705,708,711,722,734,738,746,754,757,765,768,770,778,785,790,793,799,802, + 808,817,821,825,827,839,844,854,870,879,894,903,912,920,923,925,946,952, + 959,962,970,975,990,994,998,1002,1004 + }; + + public static readonly ATN _ATN = + new ATNDeserializer().Deserialize(_serializedATN); + + +} +} // namespace LibRed.Sql.Grammar diff --git a/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlVisitor.cs b/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlVisitor.cs new file mode 100644 index 00000000..f4739972 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Grammar/Generated/AccessSqlVisitor.cs @@ -0,0 +1,880 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// ANTLR Version: 4.13.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from AccessSql.g4 by ANTLR 4.13.1 + +// Unreachable code detected +#pragma warning disable 0162 +// The variable '...' is assigned but its value is never used +#pragma warning disable 0219 +// Missing XML comment for publicly visible type or member '...' +#pragma warning disable 1591 +// Ambiguous reference in cref attribute +#pragma warning disable 419 + +namespace LibRed.Sql.Grammar { +using Antlr4.Runtime.Misc; +using Antlr4.Runtime.Tree; +using IToken = Antlr4.Runtime.IToken; + +/// +/// This interface defines a complete generic visitor for a parse tree produced +/// by . +/// +/// The return type of the visit operation. +[System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.13.1")] +[System.CLSCompliant(false)] +public interface IAccessSqlVisitor : IParseTreeVisitor { + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitStatement([NotNull] AccessSqlParser.StatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitIfThenStatement([NotNull] AccessSqlParser.IfThenStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitThenBody([NotNull] AccessSqlParser.ThenBodyContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitExecuteStatement([NotNull] AccessSqlParser.ExecuteStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitUpdateStatement([NotNull] AccessSqlParser.UpdateStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitAssignment([NotNull] AccessSqlParser.AssignmentContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitDeleteStatement([NotNull] AccessSqlParser.DeleteStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitSystemVariableSelect([NotNull] AccessSqlParser.SystemVariableSelectContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitSysVarItem([NotNull] AccessSqlParser.SysVarItemContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitParametersClause([NotNull] AccessSqlParser.ParametersClauseContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitCreateTableStatement([NotNull] AccessSqlParser.CreateTableStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitCreateViewStatement([NotNull] AccessSqlParser.CreateViewStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitCreateProcedureStatement([NotNull] AccessSqlParser.CreateProcedureStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitProcParamList([NotNull] AccessSqlParser.ProcParamListContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitProcParam([NotNull] AccessSqlParser.ProcParamContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitProcParamName([NotNull] AccessSqlParser.ProcParamNameContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitAlterTableStatement([NotNull] AccessSqlParser.AlterTableStatementContext context); + /// + /// Visit a parse tree produced by the AddColumnAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitAddColumnAction([NotNull] AccessSqlParser.AddColumnActionContext context); + /// + /// Visit a parse tree produced by the AddConstraintAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitAddConstraintAction([NotNull] AccessSqlParser.AddConstraintActionContext context); + /// + /// Visit a parse tree produced by the AlterColumnAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitAlterColumnAction([NotNull] AccessSqlParser.AlterColumnActionContext context); + /// + /// Visit a parse tree produced by the AlterColumnSetDefaultAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitAlterColumnSetDefaultAction([NotNull] AccessSqlParser.AlterColumnSetDefaultActionContext context); + /// + /// Visit a parse tree produced by the AlterColumnDropDefaultAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitAlterColumnDropDefaultAction([NotNull] AccessSqlParser.AlterColumnDropDefaultActionContext context); + /// + /// Visit a parse tree produced by the DropColumnAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitDropColumnAction([NotNull] AccessSqlParser.DropColumnActionContext context); + /// + /// Visit a parse tree produced by the DropConstraintAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitDropConstraintAction([NotNull] AccessSqlParser.DropConstraintActionContext context); + /// + /// Visit a parse tree produced by the RenameTableAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitRenameTableAction([NotNull] AccessSqlParser.RenameTableActionContext context); + /// + /// Visit a parse tree produced by the RenameColumnAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitRenameColumnAction([NotNull] AccessSqlParser.RenameColumnActionContext context); + /// + /// Visit a parse tree produced by the RenameIndexAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitRenameIndexAction([NotNull] AccessSqlParser.RenameIndexActionContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitProcedureBody([NotNull] AccessSqlParser.ProcedureBodyContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitCreateIndexStatement([NotNull] AccessSqlParser.CreateIndexStatementContext context); + /// + /// Visit a parse tree produced by the DropTableStatement + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitDropTableStatement([NotNull] AccessSqlParser.DropTableStatementContext context); + /// + /// Visit a parse tree produced by the DropIndexStatement + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitDropIndexStatement([NotNull] AccessSqlParser.DropIndexStatementContext context); + /// + /// Visit a parse tree produced by the DropProcedureStatement + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitDropProcedureStatement([NotNull] AccessSqlParser.DropProcedureStatementContext context); + /// + /// Visit a parse tree produced by the DropViewStatement + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitDropViewStatement([NotNull] AccessSqlParser.DropViewStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitIndexColumn([NotNull] AccessSqlParser.IndexColumnContext context); + /// + /// Visit a parse tree produced by the WithPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitWithPrimary([NotNull] AccessSqlParser.WithPrimaryContext context); + /// + /// Visit a parse tree produced by the WithDisallowNull + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitWithDisallowNull([NotNull] AccessSqlParser.WithDisallowNullContext context); + /// + /// Visit a parse tree produced by the WithIgnoreNull + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitWithIgnoreNull([NotNull] AccessSqlParser.WithIgnoreNullContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitColumnDefinition([NotNull] AccessSqlParser.ColumnDefinitionContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitDataType([NotNull] AccessSqlParser.DataTypeContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitSignedInteger([NotNull] AccessSqlParser.SignedIntegerContext context); + /// + /// Visit a parse tree produced by the NotNullConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNotNullConstraint([NotNull] AccessSqlParser.NotNullConstraintContext context); + /// + /// Visit a parse tree produced by the NullableConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNullableConstraint([NotNull] AccessSqlParser.NullableConstraintContext context); + /// + /// Visit a parse tree produced by the DefaultConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitDefaultConstraint([NotNull] AccessSqlParser.DefaultConstraintContext context); + /// + /// Visit a parse tree produced by the CompressionConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitCompressionConstraint([NotNull] AccessSqlParser.CompressionConstraintContext context); + /// + /// Visit a parse tree produced by the CheckColumnConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitCheckColumnConstraint([NotNull] AccessSqlParser.CheckColumnConstraintContext context); + /// + /// Visit a parse tree produced by the PrimaryKeyConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitPrimaryKeyConstraint([NotNull] AccessSqlParser.PrimaryKeyConstraintContext context); + /// + /// Visit a parse tree produced by the UniqueColumnConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitUniqueColumnConstraint([NotNull] AccessSqlParser.UniqueColumnConstraintContext context); + /// + /// Visit a parse tree produced by the ColumnReferencesConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitColumnReferencesConstraint([NotNull] AccessSqlParser.ColumnReferencesConstraintContext context); + /// + /// Visit a parse tree produced by the PrimaryKeyTableConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitPrimaryKeyTableConstraint([NotNull] AccessSqlParser.PrimaryKeyTableConstraintContext context); + /// + /// Visit a parse tree produced by the UniqueTableConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitUniqueTableConstraint([NotNull] AccessSqlParser.UniqueTableConstraintContext context); + /// + /// Visit a parse tree produced by the ForeignKeyTableConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitForeignKeyTableConstraint([NotNull] AccessSqlParser.ForeignKeyTableConstraintContext context); + /// + /// Visit a parse tree produced by the CheckTableConstraint + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitCheckTableConstraint([NotNull] AccessSqlParser.CheckTableConstraintContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitCheckBody([NotNull] AccessSqlParser.CheckBodyContext context); + /// + /// Visit a parse tree produced by the OnUpdateAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitOnUpdateAction([NotNull] AccessSqlParser.OnUpdateActionContext context); + /// + /// Visit a parse tree produced by the OnDeleteAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitOnDeleteAction([NotNull] AccessSqlParser.OnDeleteActionContext context); + /// + /// Visit a parse tree produced by the CascadeAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitCascadeAction([NotNull] AccessSqlParser.CascadeActionContext context); + /// + /// Visit a parse tree produced by the NoActionAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNoActionAction([NotNull] AccessSqlParser.NoActionActionContext context); + /// + /// Visit a parse tree produced by the RestrictAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitRestrictAction([NotNull] AccessSqlParser.RestrictActionContext context); + /// + /// Visit a parse tree produced by the SetNullAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitSetNullAction([NotNull] AccessSqlParser.SetNullActionContext context); + /// + /// Visit a parse tree produced by the SetDefaultAction + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitSetDefaultAction([NotNull] AccessSqlParser.SetDefaultActionContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitInsertStatement([NotNull] AccessSqlParser.InsertStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitQueryExpression([NotNull] AccessSqlParser.QueryExpressionContext context); + /// + /// Visit a parse tree produced by the SelectTerm + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitSelectTerm([NotNull] AccessSqlParser.SelectTermContext context); + /// + /// Visit a parse tree produced by the ParenTerm + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitParenTerm([NotNull] AccessSqlParser.ParenTermContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitSetOperator([NotNull] AccessSqlParser.SetOperatorContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitSelectStatement([NotNull] AccessSqlParser.SelectStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitSelectPredicate([NotNull] AccessSqlParser.SelectPredicateContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitGroupByClause([NotNull] AccessSqlParser.GroupByClauseContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitHavingClause([NotNull] AccessSqlParser.HavingClauseContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitTopClause([NotNull] AccessSqlParser.TopClauseContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitTopOperand([NotNull] AccessSqlParser.TopOperandContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitSelectList([NotNull] AccessSqlParser.SelectListContext context); + /// + /// Visit a parse tree produced by the QualifiedStarSelectItem + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitQualifiedStarSelectItem([NotNull] AccessSqlParser.QualifiedStarSelectItemContext context); + /// + /// Visit a parse tree produced by the ExpressionSelectItem + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitExpressionSelectItem([NotNull] AccessSqlParser.ExpressionSelectItemContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitFromClause([NotNull] AccessSqlParser.FromClauseContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitTableSource([NotNull] AccessSqlParser.TableSourceContext context); + /// + /// Visit a parse tree produced by the NamedTablePrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNamedTablePrimary([NotNull] AccessSqlParser.NamedTablePrimaryContext context); + /// + /// Visit a parse tree produced by the SubqueryPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitSubqueryPrimary([NotNull] AccessSqlParser.SubqueryPrimaryContext context); + /// + /// Visit a parse tree produced by the ParenJoinPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitParenJoinPrimary([NotNull] AccessSqlParser.ParenJoinPrimaryContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitJoinClause([NotNull] AccessSqlParser.JoinClauseContext context); + /// + /// Visit a parse tree produced by the InnerJoin + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitInnerJoin([NotNull] AccessSqlParser.InnerJoinContext context); + /// + /// Visit a parse tree produced by the LeftJoin + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitLeftJoin([NotNull] AccessSqlParser.LeftJoinContext context); + /// + /// Visit a parse tree produced by the RightJoin + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitRightJoin([NotNull] AccessSqlParser.RightJoinContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitWhereClause([NotNull] AccessSqlParser.WhereClauseContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitOrderByClause([NotNull] AccessSqlParser.OrderByClauseContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitOrderByItem([NotNull] AccessSqlParser.OrderByItemContext context); + /// + /// Visit a parse tree produced by the AndExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitAndExpr([NotNull] AccessSqlParser.AndExprContext context); + /// + /// Visit a parse tree produced by the LikeExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitLikeExpr([NotNull] AccessSqlParser.LikeExprContext context); + /// + /// Visit a parse tree produced by the IsNullExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitIsNullExpr([NotNull] AccessSqlParser.IsNullExprContext context); + /// + /// Visit a parse tree produced by the ComparisonExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitComparisonExpr([NotNull] AccessSqlParser.ComparisonExprContext context); + /// + /// Visit a parse tree produced by the BetweenExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitBetweenExpr([NotNull] AccessSqlParser.BetweenExprContext context); + /// + /// Visit a parse tree produced by the BitNotExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitBitNotExpr([NotNull] AccessSqlParser.BitNotExprContext context); + /// + /// Visit a parse tree produced by the PowExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitPowExpr([NotNull] AccessSqlParser.PowExprContext context); + /// + /// Visit a parse tree produced by the OrExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitOrExpr([NotNull] AccessSqlParser.OrExprContext context); + /// + /// Visit a parse tree produced by the NegateExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNegateExpr([NotNull] AccessSqlParser.NegateExprContext context); + /// + /// Visit a parse tree produced by the InSubqueryExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitInSubqueryExpr([NotNull] AccessSqlParser.InSubqueryExprContext context); + /// + /// Visit a parse tree produced by the MulDivExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitMulDivExpr([NotNull] AccessSqlParser.MulDivExprContext context); + /// + /// Visit a parse tree produced by the BitwiseExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitBitwiseExpr([NotNull] AccessSqlParser.BitwiseExprContext context); + /// + /// Visit a parse tree produced by the PrimaryExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitPrimaryExpr([NotNull] AccessSqlParser.PrimaryExprContext context); + /// + /// Visit a parse tree produced by the NotExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNotExpr([NotNull] AccessSqlParser.NotExprContext context); + /// + /// Visit a parse tree produced by the InExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitInExpr([NotNull] AccessSqlParser.InExprContext context); + /// + /// Visit a parse tree produced by the AddConcatExpr + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitAddConcatExpr([NotNull] AccessSqlParser.AddConcatExprContext context); + /// + /// Visit a parse tree produced by the LiteralPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitLiteralPrimary([NotNull] AccessSqlParser.LiteralPrimaryContext context); + /// + /// Visit a parse tree produced by the FunctionCallPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitFunctionCallPrimary([NotNull] AccessSqlParser.FunctionCallPrimaryContext context); + /// + /// Visit a parse tree produced by the ColumnPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitColumnPrimary([NotNull] AccessSqlParser.ColumnPrimaryContext context); + /// + /// Visit a parse tree produced by the ParamPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitParamPrimary([NotNull] AccessSqlParser.ParamPrimaryContext context); + /// + /// Visit a parse tree produced by the SystemVariablePrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitSystemVariablePrimary([NotNull] AccessSqlParser.SystemVariablePrimaryContext context); + /// + /// Visit a parse tree produced by the ExistsPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitExistsPrimary([NotNull] AccessSqlParser.ExistsPrimaryContext context); + /// + /// Visit a parse tree produced by the ScalarSubqueryPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitScalarSubqueryPrimary([NotNull] AccessSqlParser.ScalarSubqueryPrimaryContext context); + /// + /// Visit a parse tree produced by the ParenPrimary + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitParenPrimary([NotNull] AccessSqlParser.ParenPrimaryContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitFunctionCall([NotNull] AccessSqlParser.FunctionCallContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitFunctionName([NotNull] AccessSqlParser.FunctionNameContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitColumnRef([NotNull] AccessSqlParser.ColumnRefContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitIdentifier([NotNull] AccessSqlParser.IdentifierContext context); + /// + /// Visit a parse tree produced by the IntLiteral + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitIntLiteral([NotNull] AccessSqlParser.IntLiteralContext context); + /// + /// Visit a parse tree produced by the NumberLiteral + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNumberLiteral([NotNull] AccessSqlParser.NumberLiteralContext context); + /// + /// Visit a parse tree produced by the HexLiteral + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitHexLiteral([NotNull] AccessSqlParser.HexLiteralContext context); + /// + /// Visit a parse tree produced by the StringLiteral + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitStringLiteral([NotNull] AccessSqlParser.StringLiteralContext context); + /// + /// Visit a parse tree produced by the DateLiteral + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitDateLiteral([NotNull] AccessSqlParser.DateLiteralContext context); + /// + /// Visit a parse tree produced by the GuidLiteral + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitGuidLiteral([NotNull] AccessSqlParser.GuidLiteralContext context); + /// + /// Visit a parse tree produced by the TrueLiteral + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitTrueLiteral([NotNull] AccessSqlParser.TrueLiteralContext context); + /// + /// Visit a parse tree produced by the FalseLiteral + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitFalseLiteral([NotNull] AccessSqlParser.FalseLiteralContext context); + /// + /// Visit a parse tree produced by the NullLiteral + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitNullLiteral([NotNull] AccessSqlParser.NullLiteralContext context); + /// + /// Visit a parse tree produced by the BeginTransactionStatement + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitBeginTransactionStatement([NotNull] AccessSqlParser.BeginTransactionStatementContext context); + /// + /// Visit a parse tree produced by the CommitTransactionStatement + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitCommitTransactionStatement([NotNull] AccessSqlParser.CommitTransactionStatementContext context); + /// + /// Visit a parse tree produced by the RollbackTransactionStatement + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitRollbackTransactionStatement([NotNull] AccessSqlParser.RollbackTransactionStatementContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitStandaloneExpression([NotNull] AccessSqlParser.StandaloneExpressionContext context); +} +} // namespace LibRed.Sql.Grammar diff --git a/src/LibRed/LibRed.Sql/Grammar/generate.ps1 b/src/LibRed/LibRed.Sql/Grammar/generate.ps1 new file mode 100644 index 00000000..2b52e73a --- /dev/null +++ b/src/LibRed/LibRed.Sql/Grammar/generate.ps1 @@ -0,0 +1,10 @@ +# Regenerates the C# ANTLR lexer/parser/visitor from AccessSql.g4 into Generated/. +# The output is committed so the build needs no Java/codegen. Run this after editing the +# grammar. Requires Java; downloads the matching ANTLR tool jar on first run. +$ver = "4.13.1" # must match the Antlr4.Runtime.Standard package version +$jar = "$PSScriptRoot\antlr-$ver-complete.jar" +if (-not (Test-Path $jar)) { + Invoke-WebRequest "https://www.antlr.org/download/antlr-$ver-complete.jar" -OutFile $jar +} +& java -jar $jar -Dlanguage=CSharp -visitor -no-listener -package LibRed.Sql.Grammar -o Generated AccessSql.g4 +Write-Output "regenerated Grammar/Generated" diff --git a/src/LibRed/LibRed.Sql/LibRed.Sql.csproj b/src/LibRed/LibRed.Sql/LibRed.Sql.csproj new file mode 100644 index 00000000..3c80e849 --- /dev/null +++ b/src/LibRed/LibRed.Sql/LibRed.Sql.csproj @@ -0,0 +1,27 @@ + + + + $(JetTargetFramework) + LibRed.Sql + LibRed.Sql + Jet/ACE SQL front end: lexer, parser, AST and binder. Has no dependency on the storage engine; binding resolves names through an injected schema abstraction. + + $(NoWarn);CS3021 + AnyCPU;x86;x64 + + + + + + + + + + + disable + + + + diff --git a/src/LibRed/LibRed.Sql/Parsing/AntlrSqlParser.cs b/src/LibRed/LibRed.Sql/Parsing/AntlrSqlParser.cs new file mode 100644 index 00000000..69ca9333 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Parsing/AntlrSqlParser.cs @@ -0,0 +1,57 @@ +using Antlr4.Runtime; +using LibRed.Sql.Ast; +using LibRed.Sql.Grammar; + +namespace LibRed.Sql.Parsing; + +/// +/// Default : runs the ANTLR-generated lexer/parser for the Access +/// SQL grammar and lowers the parse tree into the AST via . +/// +public sealed class AntlrSqlParser : ISqlParser +{ + public SqlStatement ParseStatement(string sql) + { + ArgumentException.ThrowIfNullOrWhiteSpace(sql); + + var errors = new ThrowingErrorListener(); + + var lexer = new AccessSqlLexer(new AntlrInputStream(sql)); + lexer.RemoveErrorListeners(); + lexer.AddErrorListener(errors); + + var parser = new AccessSqlParser(new CommonTokenStream(lexer)); + parser.RemoveErrorListeners(); + parser.AddErrorListener(errors); + + return new AstBuilder().Build(parser.statement()); + } + + public Expression ParseExpression(string sql) + { + ArgumentException.ThrowIfNullOrWhiteSpace(sql); + + var errors = new ThrowingErrorListener(); + + var lexer = new AccessSqlLexer(new AntlrInputStream(sql)); + lexer.RemoveErrorListeners(); + lexer.AddErrorListener(errors); + + var parser = new AccessSqlParser(new CommonTokenStream(lexer)); + parser.RemoveErrorListeners(); + parser.AddErrorListener(errors); + + return AstBuilder.BuildExpression(parser.standaloneExpression().expression()); + } + + private sealed class ThrowingErrorListener : IAntlrErrorListener, IAntlrErrorListener + { + public void SyntaxError(TextWriter output, IRecognizer recognizer, int offendingSymbol, + int line, int charPositionInLine, string msg, RecognitionException e) => + throw new SqlParseException(msg, line, charPositionInLine); + + public void SyntaxError(TextWriter output, IRecognizer recognizer, IToken offendingSymbol, + int line, int charPositionInLine, string msg, RecognitionException e) => + throw new SqlParseException(msg, line, charPositionInLine); + } +} diff --git a/src/LibRed/LibRed.Sql/Parsing/AstBuilder.cs b/src/LibRed/LibRed.Sql/Parsing/AstBuilder.cs new file mode 100644 index 00000000..cfe14e99 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Parsing/AstBuilder.cs @@ -0,0 +1,861 @@ +using System.Globalization; +using LibRed.Sql.Ast; +using static LibRed.Sql.Grammar.AccessSqlParser; + +namespace LibRed.Sql.Parsing; + +/// +/// Lowers an ANTLR parse tree into the engine's AST, so nothing +/// downstream depends on the generated grammar types. +/// +internal sealed class AstBuilder +{ + public SqlStatement Build(StatementContext ctx) + { + SqlStatement statement = BuildBody(ctx); + + // A leading PARAMETERS clause (Access) declares the query's parameters. References to a declared + // name in the body are lowered from column references to parameters, so the engine binds them from + // the supplied values. Emitted when a stored parameterized query is read back. + if (ctx.parametersClause() is { } pc) + { + var names = pc.procParam() + .Select(ParamName) + .ToHashSet(StringComparer.OrdinalIgnoreCase); + statement = LowerParameters(statement, names); + } + return statement; + } + + private SqlStatement BuildBody(StatementContext ctx) + { + if (ctx.ifThenStatement() is { } ifThen) return BuildIfThen(ifThen); + if (ctx.createTableStatement() is { } create) return BuildCreateTable(create); + if (ctx.createIndexStatement() is { } createIndex) return BuildCreateIndex(createIndex); + if (ctx.createViewStatement() is { } createView) return BuildCreateView(createView); + if (ctx.createProcedureStatement() is { } createProc) return BuildCreateProcedure(createProc); + if (ctx.alterTableStatement() is { } alter) return BuildAlterTable(alter); + if (ctx.dropStatement() is { } drop) return BuildDrop(drop); + if (ctx.insertStatement() is { } insert) return BuildInsert(insert); + if (ctx.updateStatement() is { } update) return BuildUpdate(update); + if (ctx.deleteStatement() is { } delete) return BuildDelete(delete); + if (ctx.transactionStatement() is { } txn) return BuildTransaction(txn); + if (ctx.executeStatement() is { } exec) return BuildExecute(exec); + if (ctx.systemVariableSelect() is { } sysSelect) return BuildSystemVariableSelect(sysSelect); + return BuildQueryExpression(ctx.queryExpression()); + } + + private static TransactionControlStatement BuildTransaction(TransactionStatementContext ctx) => ctx switch + { + BeginTransactionStatementContext => new TransactionControlStatement(TransactionControlKind.Begin), + CommitTransactionStatementContext => new TransactionControlStatement(TransactionControlKind.Commit), + RollbackTransactionStatementContext => new TransactionControlStatement(TransactionControlKind.Rollback), + _ => throw new NotSupportedException($"Unsupported transaction statement: {ctx.GetText()}"), + }; + + private SqlStatement BuildIfThen(IfThenStatementContext ctx) => + new IfThenStatement(ctx.not is not null, BuildSelect(ctx.selectStatement()), BuildThenBody(ctx.thenBody())); + + private SqlStatement BuildThenBody(ThenBodyContext ctx) + { + if (ctx.createTableStatement() is { } create) return BuildCreateTable(create); + if (ctx.createIndexStatement() is { } createIndex) return BuildCreateIndex(createIndex); + if (ctx.createViewStatement() is { } createView) return BuildCreateView(createView); + if (ctx.createProcedureStatement() is { } createProc) return BuildCreateProcedure(createProc); + if (ctx.alterTableStatement() is { } alter) return BuildAlterTable(alter); + if (ctx.dropStatement() is { } drop) return BuildDrop(drop); + if (ctx.insertStatement() is { } insert) return BuildInsert(insert); + if (ctx.updateStatement() is { } update) return BuildUpdate(update); + if (ctx.deleteStatement() is { } delete) return BuildDelete(delete); + if (ctx.executeStatement() is { } exec) return BuildExecute(exec); + return BuildQueryExpression(ctx.queryExpression()); + } + + private ExecuteStatement BuildExecute(ExecuteStatementContext ctx) => + new(Identifier(ctx.name), ctx.expression().Select(BuildExpression).ToList()); + + private static SqlStatement BuildDrop(DropStatementContext ctx) => ctx switch + { + DropTableStatementContext t => new DropTableStatement(Identifier(t.table)), + DropIndexStatementContext i => new DropIndexStatement(Identifier(i.index), Identifier(i.table)), + DropProcedureStatementContext p => new DropProcedureStatement(Identifier(p.proc)), + DropViewStatementContext v => new DropViewStatement(Identifier(v.view)), + _ => throw new NotSupportedException($"Unsupported DROP statement: {ctx.GetText()}"), + }; + + private static DeleteStatement BuildDelete(DeleteStatementContext ctx) => + new(OptionalIdentifier(ctx.target), + BuildTableSource(ctx.tableSource()), + ctx.whereClause() is { } w ? BuildExpression(w.expression()) : null); + + private static UpdateStatement BuildUpdate(UpdateStatementContext ctx) + { + var assignments = ctx.assignment() + .Select(a => new Assignment( + OptionalIdentifier(a.target.qualifier), Identifier(a.target.name), BuildExpression(a.expression()))) + .ToList(); + Expression? where = ctx.whereClause() is { } w ? BuildExpression(w.expression()) : null; + return new UpdateStatement(BuildTableSource(ctx.tableSource()), assignments, where); + } + + private static SystemVariableSelectStatement BuildSystemVariableSelect(SystemVariableSelectContext ctx) + { + var items = ctx.sysVarItem().Select(i => new SelectItem( + new SystemVariableExpression(i.SYSVAR().GetText().TrimStart('@')), + i.alias is null ? null : Identifier(i.alias))).ToList(); + return new SystemVariableSelectStatement(items); + } + + private static SqlStatement BuildCreateTable(CreateTableStatementContext ctx) + { + if (ctx.temp is not null) + throw new NotSupportedException("CREATE TEMPORARY TABLE is not supported."); + + var columns = ctx.columnDefinition().Select(BuildColumnDefinition).ToList(); + + // Primary key, foreign keys and unique constraints come from both column-level (single-field) + // and table-level (multi-field) constraints. + var primaryKey = columns.Where(c => c.PrimaryKey).Select(c => c.Name).ToList(); + var foreignKeys = new List(); + var uniques = new List(); + var checks = new List(); + // The PRIMARY KEY constraint's name, from whichever form declared it (column- or table-level). + string? primaryKeyName = null; + + // Column-level UNIQUE and REFERENCES (the single-field forms) apply to the column they follow. + foreach (ColumnDefinitionContext cd in ctx.columnDefinition()) + { + string columnName = Identifier(cd.name); + foreach (ColumnConstraintContext cc in cd.columnConstraint()) + { + switch (cc) + { + case PrimaryKeyConstraintContext p when p.cname is not null: + primaryKeyName = Identifier(p.cname); + break; + case UniqueColumnConstraintContext u: + uniques.Add(new UniqueConstraint(u.cname is null ? null : Identifier(u.cname), [columnName])); + break; + case ColumnReferencesConstraintContext r: + foreignKeys.Add(BuildColumnReferences(r, columnName)); + break; + } + } + } + + foreach (TableConstraintContext tc in ctx.tableConstraint()) + { + switch (tc) + { + case PrimaryKeyTableConstraintContext pk: + primaryKey.AddRange(pk._columns.Select(Identifier)); + if (pk.name is not null) primaryKeyName = Identifier(pk.name); + break; + case UniqueTableConstraintContext uq: + uniques.Add(new UniqueConstraint(uq.name is null ? null : Identifier(uq.name), uq._columns.Select(Identifier).ToList())); + break; + case ForeignKeyTableConstraintContext fk: + foreignKeys.Add(BuildForeignKey(fk)); + break; + case CheckTableConstraintContext ck: + checks.Add(new CheckConstraint( + ck.name is null ? null : Identifier(ck.name), OriginalText(ck.checkBody()))); + break; + } + } + + return new CreateTableStatement(Identifier(ctx.table), columns, primaryKey, foreignKeys, uniques, checks, primaryKeyName); + } + + /// The verbatim source text of a parse context (preserving spacing), via the input stream — + /// unlike GetText(), which concatenates token text with no whitespace. Used to store a CHECK + /// expression exactly as written (matching Access). + private static string OriginalText(Antlr4.Runtime.ParserRuleContext ctx) => + ctx.Start is null || ctx.Stop is null + ? ctx.GetText() + : ctx.Start.InputStream.GetText(Antlr4.Runtime.Misc.Interval.Of(ctx.Start.StartIndex, ctx.Stop.StopIndex)); + + private static SqlStatement BuildAlterTable(AlterTableStatementContext ctx) + { + AlterTableAction action = ctx.alterTableAction() switch + { + AddColumnActionContext a => new AddColumnAction(BuildColumnDefinition(a.columnDefinition())), + AddConstraintActionContext a => BuildAddConstraint(a.tableConstraint()), + AlterColumnActionContext a => new AlterColumnAction( + Identifier(a.field), TypeName(a.dataType()), Size(a.dataType()), Scale(a.dataType()), + a.columnConstraint().OfType().FirstOrDefault()?.expression().GetText(), + // NOT NULL → true, NULL → false, neither → null (leave the column's nullability unchanged). + a.columnConstraint().OfType().Any() ? true + : a.columnConstraint().OfType().Any() ? false : null), + AlterColumnSetDefaultActionContext a => new AlterColumnSetDefaultAction( + Identifier(a.field), OriginalText(a.expression())), + AlterColumnDropDefaultActionContext a => new AlterColumnDropDefaultAction(Identifier(a.field)), + DropColumnActionContext a => new DropColumnAction(Identifier(a.field)), + DropConstraintActionContext a => new DropConstraintAction(Identifier(a.cname)), + RenameTableActionContext a => new RenameTableAction(Identifier(a.newName)), + RenameColumnActionContext a => new RenameColumnAction(Identifier(a.field), Identifier(a.newName)), + RenameIndexActionContext a => new RenameIndexAction(Identifier(a.index), Identifier(a.newName)), + _ => throw new SqlParseException("Unsupported ALTER TABLE action."), + }; + return new AlterTableStatement(Identifier(ctx.table), action); + } + + private static AlterTableAction BuildAddConstraint(TableConstraintContext tc) => tc switch + { + PrimaryKeyTableConstraintContext pk => + new AddPrimaryKeyAction(pk.name is null ? null : Identifier(pk.name), pk._columns.Select(Identifier).ToList()), + UniqueTableConstraintContext uq => + new AddUniqueAction(new UniqueConstraint(uq.name is null ? null : Identifier(uq.name), uq._columns.Select(Identifier).ToList())), + ForeignKeyTableConstraintContext fk => new AddForeignKeyAction(BuildForeignKey(fk)), + CheckTableConstraintContext ck => + new AddCheckAction(new CheckConstraint(ck.name is null ? null : Identifier(ck.name), OriginalText(ck.checkBody()))), + _ => throw new SqlParseException("Unsupported ALTER TABLE ADD CONSTRAINT."), + }; + + private static int? Size(DataTypeContext type) => type.size is { } s ? int.Parse(s.GetText(), CultureInfo.InvariantCulture) : null; + private static int? Scale(DataTypeContext type) => type.scale is { } s ? int.Parse(s.GetText(), CultureInfo.InvariantCulture) : null; + + private static ForeignKeyConstraint BuildForeignKey(ForeignKeyTableConstraintContext ctx) + { + var columns = ctx._columns.Select(Identifier).ToList(); + var refColumns = ctx._refColumns.Select(Identifier).ToList(); + var (onUpdate, onDelete) = ReadForeignKeyActions(ctx.foreignKeyAction()); + return new ForeignKeyConstraint( + ctx.name is null ? null : Identifier(ctx.name), + columns, + Identifier(ctx.refTable), + refColumns, + onDelete, + onUpdate, + NoIndex: ctx.noIndex is not null); + } + + /// Builds a foreign key from a column-level REFERENCES constraint (child column = the + /// column it follows). A column-level FK never carries the NO INDEX modifier. + private static ForeignKeyConstraint BuildColumnReferences(ColumnReferencesConstraintContext ctx, string childColumn) + { + var refColumns = ctx._refColumns.Select(Identifier).ToList(); + var (onUpdate, onDelete) = ReadForeignKeyActions(ctx.foreignKeyAction()); + return new ForeignKeyConstraint( + ctx.cname is null ? null : Identifier(ctx.cname), + [childColumn], + Identifier(ctx.refTable), + refColumns, + onDelete, + onUpdate); + } + + /// Reads the ON UPDATE / ON DELETE clauses in either order (each optional). + private static (ReferentialAction OnUpdate, ReferentialAction OnDelete) ReadForeignKeyActions( + IEnumerable actions) + { + var onUpdate = ReferentialAction.NoAction; + var onDelete = ReferentialAction.NoAction; + foreach (ForeignKeyActionContext action in actions) + { + switch (action) + { + case OnUpdateActionContext u: onUpdate = ReferentialActionOf(u.referentialAction()); break; + case OnDeleteActionContext d: onDelete = ReferentialActionOf(d.referentialAction()); break; + } + } + return (onUpdate, onDelete); + } + + private static ReferentialAction ReferentialActionOf(ReferentialActionContext? ctx) => ctx switch + { + CascadeActionContext => ReferentialAction.Cascade, + SetNullActionContext => ReferentialAction.SetNull, + SetDefaultActionContext => ReferentialAction.SetDefault, + _ => ReferentialAction.NoAction, // null, NO ACTION, RESTRICT + }; + + private static ColumnDefinition BuildColumnDefinition(ColumnDefinitionContext ctx) + { + DataTypeContext type = ctx.dataType(); + int? size = type.size is { } s ? int.Parse(s.GetText(), CultureInfo.InvariantCulture) : null; + int? scale = type.scale is { } sc ? int.Parse(sc.GetText(), CultureInfo.InvariantCulture) : null; + + string typeName = TypeName(type); + + if (ctx.columnConstraint().OfType().Any()) + throw new NotSupportedException($"WITH COMPRESSION on column '{Identifier(ctx.name)}' is not supported."); + + bool notNull = ctx.columnConstraint().OfType().Any(); + bool primaryKey = ctx.columnConstraint().OfType().Any(); + // Capture the DEFAULT expression's source text (stored verbatim as the DefaultValue property, + // matching Access — e.g. "42", "'hi'"). Re-parsed and evaluated when a column is omitted on insert. + string? defaultSql = ctx.columnConstraint().OfType() + .FirstOrDefault()?.expression().GetText(); + + return new ColumnDefinition(Identifier(ctx.name), typeName, size, scale, notNull, primaryKey, defaultSql); + } + + private static SqlStatement BuildCreateIndex(CreateIndexStatementContext ctx) + { + var columns = ctx.indexColumn() + .Select(ic => (Identifier(ic.col), Descending: ic.dir is { } d && d.Type == DESC)) + .ToList(); + IndexWithOption withOption = ctx.withOption() switch + { + WithPrimaryContext => IndexWithOption.Primary, + WithDisallowNullContext => IndexWithOption.DisallowNull, + WithIgnoreNullContext => IndexWithOption.IgnoreNull, + _ => IndexWithOption.None, + }; + return new CreateIndexStatement( + Identifier(ctx.name), Identifier(ctx.table), ctx.unique is not null, columns, withOption); + } + + private static SqlStatement BuildCreateView(CreateViewStatementContext ctx) + { + var columns = ctx._columns.Select(Identifier).ToList(); + ViewDefinition definition = BuildViewDefinition(ctx.query); + return new CreateViewStatement(Identifier(ctx.name), columns, definition, OriginalText(ctx.query)); + } + + private static SqlStatement BuildCreateProcedure(CreateProcedureStatementContext ctx) + { + var parameters = (ctx.procParamList()?.procParam() ?? []) + .Select(p => new ProcedureParameter(ParamName(p), TypeName(p.dataType()))) + .ToList(); + + // A procedure body is a SELECT (stored as a parameterized query, like a view) or an action query + // (CREATE TABLE / INSERT — stored byte-faithfully in their own MSysQueries shape). + ProcedureBodyContext body = ctx.body; + string name = Identifier(ctx.name); + + if (body.createTableStatement() is { } ddl) + { + RejectParametersOnAction(parameters); + return new CreateActionProcedureStatement( + name, ProcedureActionKind.DataDefinition, OriginalText(ddl), null, null); + } + if (body.insertStatement() is { } insert) + { + RejectParametersOnAction(parameters); + return BuildAppendProcedure(name, insert); + } + + ViewDefinition definition = BuildViewDefinition(body.queryExpression()); + return new CreateProcedureStatement(name, parameters, definition, OriginalText(body.queryExpression())); + } + + private static void RejectParametersOnAction(IReadOnlyList parameters) + { + if (parameters.Count > 0) + throw new NotSupportedException("Parameters on an action-query procedure are not stored yet."); + } + + private static SqlStatement BuildAppendProcedure(string name, InsertStatementContext insert) + { + var columns = insert._columns; + var values = insert.expression(); + if (columns.Count == 0) + throw new NotSupportedException("An INSERT procedure body must list its target columns."); + if (columns.Count != values.Length) + throw new SqlParseException( + $"INSERT lists {columns.Count} columns but {values.Length} values."); + + var appendColumns = columns + .Select((col, i) => new AppendColumn(Identifier(col), OriginalText(values[i]))) + .ToList(); + return new CreateActionProcedureStatement( + name, ProcedureActionKind.Append, null, Identifier(insert.table), appendColumns); + } + + /// A declared parameter's name, with any leading @ stripped — Access stores the bare + /// name (e.g. @Beginning_Date is stored as Beginning_Date). + private static string ParamName(ProcParamContext p) => p.pname.PARAM() is { } at + ? at.GetText().TrimStart('@') + : Identifier(p.pname.identifier()); + + /// The declared type name of a data type — up to three words (e.g. "national character varying") + /// joined by single spaces. + private static string TypeName(DataTypeContext type) => string.Join(' ', + new[] { type.typeName, type.extra, type.extra2 } + .Where(t => t is not null) + .Select(Identifier)); + + // ---- PARAMETERS-clause lowering: unqualified references to a declared parameter become parameters ---- + + private static SqlStatement LowerParameters(SqlStatement s, HashSet names) => s switch + { + SelectStatement sel => LowerSelect(sel, names), + SetOperationStatement set => set with + { + Left = LowerParameters(set.Left, names), + Right = LowerParameters(set.Right, names), + }, + InsertStatement ins => ins with + { + Rows = ins.Rows + .Select(r => (IReadOnlyList)r.Select(e => LowerExpr(e, names)).ToList()) + .ToList(), + }, + _ => s, + }; + + private static SelectStatement LowerSelect(SelectStatement sel, HashSet names) => sel with + { + Projection = sel.Projection.Select(i => i with { Value = LowerExpr(i.Value, names) }).ToList(), + From = LowerFrom(sel.From, names), + Where = sel.Where is null ? null : LowerExpr(sel.Where, names), + GroupBy = sel.GroupBy.Select(e => LowerExpr(e, names)).ToList(), + Having = sel.Having is null ? null : LowerExpr(sel.Having, names), + OrderBy = sel.OrderBy.Select(o => o with { Value = LowerExpr(o.Value, names) }).ToList(), + }; + + private static TableReference? LowerFrom(TableReference? t, HashSet names) => t switch + { + null => null, // FROM-less SELECT + JoinTable j => j with + { + Left = LowerFrom(j.Left, names)!, // a join always has both sides + Right = LowerFrom(j.Right, names)!, + On = j.On is null ? null : LowerExpr(j.On, names), + }, + SubqueryTable sub => sub with { Query = LowerParameters(sub.Query, names) }, + _ => t, + }; + + private static Expression LowerExpr(Expression e, HashSet names) => e switch + { + ColumnReference { Table: null, Column: var c } when names.Contains(c) => new ParameterExpression(c), + BinaryExpression b => b with { Left = LowerExpr(b.Left, names), Right = LowerExpr(b.Right, names) }, + UnaryExpression u => u with { Operand = LowerExpr(u.Operand, names) }, + FunctionCall f => f with { Arguments = f.Arguments.Select(a => LowerExpr(a, names)).ToList() }, + ScalarSubquery s => new ScalarSubquery(LowerSelect(s.Query, names)), + ExistsExpression x => new ExistsExpression(LowerSelect(x.Query, names)), + InSubqueryExpression i => i with { Value = LowerExpr(i.Value, names), Query = LowerSelect(i.Query, names) }, + _ => e, + }; + + /// Decomposes a view's "simple SELECT" into the columns/tables/joins/where Access stores as + /// MSysQueries rows. Rejects anything Access itself rejects in a view (UNION, GROUP BY/aggregates, + /// HAVING, ORDER BY) or that we can't decompose (a derived-table/subquery source). + private static ViewDefinition BuildViewDefinition(QueryExpressionContext ctx) + { + if (ctx.setOperator().Length > 0) + throw new NotSupportedException("A UNION query is not a valid (simple) view."); + if (ctx.queryTerm(0) is not SelectTermContext term) + throw new NotSupportedException("A parenthesised query is not a valid (simple) view."); + + SelectStatementContext select = term.selectStatement(); + if (select.havingClause() is not null) + throw new NotSupportedException("A view with HAVING is not stored yet."); + var groupBy = select.groupByClause() is { } g + ? g.expression().Select(OriginalText).ToList() : (IReadOnlyList)[]; + var orderBy = select.orderByClause() is { } ob + ? ob.orderByItem().Select(i => new ViewOrderBy(OriginalText(i.expression()), i.dir?.Type == DESC)).ToList() + : (IReadOnlyList)[]; + // A stored view can only carry a literal TOP (Access stores it as text); reject a parameterized one. + int? top = select.topClause() is { } t + ? BuildTop(t) is LiteralExpression { Value: int n } + ? n + : throw new NotSupportedException("A view's TOP must be a literal integer.") + : null; + + // Output columns; SELECT * becomes a single "*", a qualified star stays "Table.*". + var columns = select.selectList().STAR() is not null && select.selectList().selectItem().Length == 0 + ? (IReadOnlyList)[new ViewColumn("*", null)] + : select.selectList().selectItem().Select(BuildViewColumn).ToList(); + + // Flatten the FROM into a flat list of source tables and joins, descending through any parenthesised + // join groups (Access stores them flat — one Attribute=5 per table, one Attribute=7 per join). + var tables = new List(); + var joins = new List(); + foreach (TableSourceContext ts in select.fromClause().tableSource()) + CollectSources(ts, tables, joins); + + string? where = select.whereClause() is { } w ? OriginalText(w.expression()) : null; + return new ViewDefinition(select.predicate?.DISTINCT() is not null, columns, tables, joins, where, groupBy, orderBy, top); + } + + private static void CollectSources(TableSourceContext ts, List tables, List joins) + { + CollectPrimary(ts.tablePrimary(), tables, joins); + foreach (JoinClauseContext jc in ts.joinClause()) + { + CollectPrimary(jc.tablePrimary(), tables, joins); + // Access records the join by the two tables named in its condition (Name1/Name2), not the + // structural left/right (which for a nested group is a whole subtree). + (string left, string right) = JoinSides(jc.expression()); + joins.Add(new ViewJoin(ViewJoinKindOf(jc.joinType()), OriginalText(jc.expression()), left, right)); + } + } + + private static void CollectPrimary(TablePrimaryContext tp, List tables, List joins) + { + if (tp is ParenJoinPrimaryContext p) + CollectSources(p.tableSource(), tables, joins); // a parenthesised join group flattens in place + else + tables.Add(BuildViewSource(tp).Source); + } + + /// The two table qualifiers of a join condition (T1.c = T2.c) — the first two distinct + /// column qualifiers, in order — which Access stores as the join's Name1/Name2. + private static (string Left, string Right) JoinSides(ExpressionContext condition) + { + var qualifiers = new List(); + void Walk(Expression e) + { + switch (e) + { + case ColumnReference { Table: { } q } when !qualifiers.Contains(q): qualifiers.Add(q); break; + case BinaryExpression b: Walk(b.Left); Walk(b.Right); break; + case UnaryExpression u: Walk(u.Operand); break; + case FunctionCall f: foreach (Expression a in f.Arguments) Walk(a); break; + } + } + Walk(BuildExpression(condition)); + return (qualifiers.ElementAtOrDefault(0) ?? "", qualifiers.ElementAtOrDefault(1) ?? ""); + } + + private static ViewColumn BuildViewColumn(SelectItemContext ctx) => ctx switch + { + ExpressionSelectItemContext e => new ViewColumn(OriginalText(e.expression()), OptionalIdentifier(e.alias)), + _ => new ViewColumn(OriginalText(ctx), null), // qualified star: "Table.*" + }; + + /// A view FROM source and the alias other clauses reference it by. A named table uses its + /// name as the alias when unaliased; a derived table (subquery) stores its verbatim inner SQL and + /// requires an explicit alias (as Access does). + private static (ViewSource Source, string Alias) BuildViewSource(TablePrimaryContext ctx) + { + switch (ctx) + { + case NamedTablePrimaryContext n: + string alias = n.alias is null ? Identifier(n.table) : Identifier(n.alias); + return (new ViewSource(Identifier(n.table), n.alias is null ? null : Identifier(n.alias)), alias); + case SubqueryPrimaryContext s when s.alias is not null: + string subAlias = Identifier(s.alias); + return (new ViewSource(Table: null, subAlias, OriginalText(s.queryExpression())), subAlias); + case SubqueryPrimaryContext: + throw new NotSupportedException("A derived-table source in a view requires an alias."); + default: + throw new NotSupportedException($"Unsupported view FROM source: {ctx.GetText()}"); + } + } + + private static ViewJoinKind ViewJoinKindOf(JoinTypeContext ctx) => ctx switch + { + LeftJoinContext => ViewJoinKind.Left, + RightJoinContext => ViewJoinKind.Right, + _ => ViewJoinKind.Inner, + }; + + private static SqlStatement BuildInsert(InsertStatementContext ctx) + { + string table = Identifier(ctx.table); + if (ctx.DEFAULT() is not null) + return new InsertStatement(table, [], [(IReadOnlyList)[]], DefaultValues: true); + + var columns = ctx._columns.Select(Identifier).ToList(); + var values = ctx.expression().Select(BuildExpression).ToList(); + return new InsertStatement(table, columns, [values]); + } + + private static SqlStatement BuildQueryExpression(QueryExpressionContext ctx) + { + QueryTermContext[] terms = ctx.queryTerm(); + SetOperatorContext[] operators = ctx.setOperator(); + if (operators.Length == 0) + return BuildQueryTerm(terms[0]); + + // A long chain of one associative operator — e.g. EF's 5000-way `UNION ALL` for a huge primitive + // collection — must be built as a *balanced* tree. A left-nested tree is O(n) deep, and the binder, + // planner and executor all recurse over it (plus the runtime nested LINQ Concat), overflowing the stack + // (an uncatchable StackOverflowException that kills the process). Balancing makes every walk O(log n). + // Set operators are left-associative, so this is only sound when every operator is the same and + // associative (UNION / UNION ALL / INTERSECT — EXCEPT is not); mixed/EXCEPT chains left-fold as before + // (they are correct that way and never occur thousands deep). + SetOperator first = SetOperatorOf(operators[0]); + if (IsAssociative(first) && operators.All(o => SetOperatorOf(o) == first)) + { + var operands = new SqlStatement[terms.Length]; + for (int i = 0; i < terms.Length; i++) + operands[i] = BuildQueryTerm(terms[i]); + return BuildBalanced(operands, first, 0, operands.Length - 1); + } + + SqlStatement result = BuildQueryTerm(terms[0]); + for (int i = 0; i < operators.Length; i++) + result = new SetOperationStatement(result, SetOperatorOf(operators[i]), BuildQueryTerm(terms[i + 1])); + return result; + } + + // UNION / UNION ALL / INTERSECT are associative (can be regrouped); EXCEPT is not. + private static bool IsAssociative(SetOperator op) => + op is SetOperator.Union or SetOperator.UnionAll or SetOperator.Intersect; + + // Builds a balanced binary set-operation tree over operands[lo..hi] — O(log n) depth, preserving the + // left-to-right operand order (so UNION ALL row order is unchanged). + private static SqlStatement BuildBalanced(SqlStatement[] operands, SetOperator op, int lo, int hi) + { + if (lo == hi) + return operands[lo]; + int mid = lo + (hi - lo) / 2; + return new SetOperationStatement( + BuildBalanced(operands, op, lo, mid), op, BuildBalanced(operands, op, mid + 1, hi)); + } + + /// A set-operation operand: a SELECT, or a parenthesised (possibly nested) query expression. + private static SqlStatement BuildQueryTerm(QueryTermContext ctx) => ctx switch + { + SelectTermContext s => BuildSelect(s.selectStatement()), + ParenTermContext p => BuildQueryExpression(p.queryExpression()), + _ => throw new SqlParseException($"Unsupported query term: {ctx.GetText()}"), + }; + + private static SetOperator SetOperatorOf(SetOperatorContext ctx) + { + if (ctx.INTERSECT() != null) return SetOperator.Intersect; + if (ctx.EXCEPT() != null) return SetOperator.Except; + return ctx.ALL() != null ? SetOperator.UnionAll : SetOperator.Union; + } + + private static SelectStatement BuildSelect(SelectStatementContext ctx) + { + SelectListContext list = ctx.selectList(); + bool star = list.STAR() != null; + var projection = star + ? (IReadOnlyList)[] + : list.selectItem().Select(BuildSelectItem).ToList(); + + TableReference? from = ctx.fromClause() is { } fc ? BuildFrom(fc) : null; + Expression? where = ctx.whereClause() is { } w ? BuildExpression(w.expression()) : null; + var groupBy = ctx.groupByClause() is { } g + ? g.expression().Select(BuildExpression).ToList() + : (IReadOnlyList)[]; + Expression? having = ctx.havingClause() is { } h ? BuildExpression(h.expression()) : null; + var orderBy = ctx.orderByClause() is { } o + ? o.orderByItem().Select(BuildOrderByItem).ToList() + : (IReadOnlyList)[]; + Expression? top = ctx.topClause() is { } t ? BuildTop(t) : null; + bool topPercent = ctx.topClause()?.percent is not null; + var predicate = ctx.predicate; + + return new SelectStatement(projection, star, from, where, groupBy, having, orderBy, top, + Distinct: predicate?.DISTINCT() is not null, + DistinctRow: predicate?.DISTINCTROW() is not null, + TopPercent: topPercent); + } + + /// The TOP count expression: a single operand, or a left-associative +/- chain of them (each + /// operand a literal, a parameter, or a parenthesised expression). Evaluated at execution. + private static Expression BuildTop(TopClauseContext ctx) + { + Expression Operand(TopOperandContext o) => + o.INTEGER_LITERAL() is { } lit ? new LiteralExpression(ParseInteger(lit.GetText())) + : o.PARAM() is { } p ? new ParameterExpression(p.GetText()) + : BuildExpression(o.expression()); + + var operands = ctx.topOperand(); + Expression result = Operand(operands[0]); + var ops = ctx.children.OfType() + .Where(t => t.Symbol.Type is PLUS or MINUS).ToList(); + for (int i = 1; i < operands.Length; i++) + result = new BinaryExpression( + ops[i - 1].Symbol.Type == PLUS ? BinaryOperator.Add : BinaryOperator.Subtract, + result, Operand(operands[i])); + return result; + } + + private static SelectItem BuildSelectItem(SelectItemContext ctx) => ctx switch + { + QualifiedStarSelectItemContext q => new SelectItem(new QualifiedStarExpression(Identifier(q.qualifier)), null), + ExpressionSelectItemContext e => new SelectItem(BuildExpression(e.expression()), OptionalIdentifier(e.alias)), + _ => throw new SqlParseException($"Unsupported select item: {ctx.GetText()}"), + }; + + private static TableReference BuildFrom(FromClauseContext ctx) + { + TableReference table = BuildTableSource(ctx.tableSource(0)); + // Comma between sources is an implicit cross join (no ON). + foreach (TableSourceContext src in ctx.tableSource().Skip(1)) + table = new JoinTable(table, BuildTableSource(src), JoinKind.Cross, null); + return table; + } + + private static TableReference BuildTableSource(TableSourceContext ctx) + { + TableReference table = BuildTablePrimary(ctx.tablePrimary()); + foreach (JoinClauseContext join in ctx.joinClause()) + { + TableReference right = BuildTablePrimary(join.tablePrimary()); + table = new JoinTable(table, right, JoinKindOf(join.joinType()), BuildExpression(join.expression())); + } + return table; + } + + private static TableReference BuildTablePrimary(TablePrimaryContext ctx) => ctx switch + { + NamedTablePrimaryContext n => new NamedTable(Identifier(n.table), OptionalIdentifier(n.alias)), + SubqueryPrimaryContext s => new SubqueryTable(BuildQueryExpression(s.queryExpression()), OptionalIdentifier(s.alias)), + ParenJoinPrimaryContext p => BuildTableSource(p.tableSource()), // a parenthesized join group is just nested + _ => throw new SqlParseException($"Unsupported table source: {ctx.GetText()}"), + }; + + private static JoinKind JoinKindOf(JoinTypeContext ctx) => ctx switch + { + LeftJoinContext => JoinKind.Left, + RightJoinContext => JoinKind.Right, + _ => JoinKind.Inner, + }; + + private static OrderByItem BuildOrderByItem(OrderByItemContext ctx) => + new(BuildExpression(ctx.expression()), + ctx.dir?.Type == DESC ? SortDirection.Descending : SortDirection.Ascending); + + internal static Expression BuildExpression(ExpressionContext ctx) => ctx switch + { + NotExprContext n => new UnaryExpression(UnaryOperator.Not, BuildExpression(n.expression())), + BitNotExprContext n => new UnaryExpression(UnaryOperator.BitNot, BuildExpression(n.expression())), + NegateExprContext n => new UnaryExpression(UnaryOperator.Negate, BuildExpression(n.expression())), + PowExprContext p => new BinaryExpression(BinaryOperator.Power, BuildExpression(p.left), BuildExpression(p.right)), + MulDivExprContext m => Binary(m.op, m.left, m.right), + AddConcatExprContext a => Binary(a.op, a.left, a.right), + ComparisonExprContext c => Binary(c.op, c.left, c.right), + BetweenExprContext b => BuildBetween(b), + InExprContext i => BuildIn(i), + InSubqueryExprContext i => new InSubqueryExpression( + BuildExpression(i.val), BuildSelect(i.sub), i.not is not null), + LikeExprContext l => l.not is null + ? new BinaryExpression(BinaryOperator.Like, BuildExpression(l.left), BuildExpression(l.right)) + : new UnaryExpression(UnaryOperator.Not, new BinaryExpression(BinaryOperator.Like, BuildExpression(l.left), BuildExpression(l.right))), + IsNullExprContext n => new UnaryExpression(n.not is null ? UnaryOperator.IsNull : UnaryOperator.IsNotNull, BuildExpression(n.operand)), + BitwiseExprContext b => Binary(b.op, b.left, b.right), + AndExprContext a => new BinaryExpression(BinaryOperator.And, BuildExpression(a.left), BuildExpression(a.right)), + OrExprContext o => new BinaryExpression(BinaryOperator.Or, BuildExpression(o.left), BuildExpression(o.right)), + PrimaryExprContext p => BuildPrimary(p.primary()), + _ => throw new SqlParseException($"Unsupported expression: {ctx.GetText()}"), + }; + + private static Expression BuildPrimary(PrimaryContext ctx) => ctx switch + { + LiteralPrimaryContext l => BuildLiteral(l.literal()), + ColumnPrimaryContext c => BuildColumn(c.columnRef()), + ParamPrimaryContext p => new ParameterExpression(p.PARAM().GetText()), + SystemVariablePrimaryContext s => new SystemVariableExpression(s.SYSVAR().GetText().TrimStart('@')), + FunctionCallPrimaryContext f => BuildFunctionCall(f.functionCall()), + ScalarSubqueryPrimaryContext s => new ScalarSubquery(BuildSelect(s.selectStatement())), + ExistsPrimaryContext e => new ExistsExpression(BuildSelect(e.selectStatement())), + ParenPrimaryContext p => BuildExpression(p.expression()), + _ => throw new SqlParseException($"Unsupported primary: {ctx.GetText()}"), + }; + + private static Expression BuildFunctionCall(FunctionCallContext ctx) + { + IReadOnlyList args = ctx.star is not null + ? [new StarExpression()] + : ctx.expression().Select(BuildExpression).ToList(); + return new FunctionCall(FunctionName(ctx.name), args, Distinct: ctx.distinct is not null); + } + + /// A function name: an identifier, or the LEFT/RIGHT keyword tokens as Left()/Right(). + private static string FunctionName(FunctionNameContext ctx) => + ctx.identifier() is { } id ? Identifier(id) : ctx.GetText(); + + private static Expression BuildColumn(ColumnRefContext ctx) => + new ColumnReference(OptionalIdentifier(ctx.qualifier), Identifier(ctx.name)); + + /// Lowers x [NOT] BETWEEN lo AND hi to (x >= lo AND x <= hi) (negated for NOT), + /// so no dedicated node is needed and the evaluator handles it via the comparison operators. + /// x IN (a, b, …) becomes a flat evaluated iteratively — NOT a + /// deep (x = a) OR (x = b) OR … tree, which recurses once per item and overflows the stack when EF Core + /// inlines a "huge number of values" Contains (thousands of constants). The evaluator reproduces the same + /// OR/=/NOT three-valued semantics in a loop. + private static Expression BuildIn(InExprContext ctx) + { + Expression value = BuildExpression(ctx.val); + var items = ctx._items.Select(BuildExpression).ToList(); + return new InListExpression(value, items, ctx.not is not null); + } + + private static Expression BuildBetween(BetweenExprContext ctx) + { + Expression value = BuildExpression(ctx.val), lo = BuildExpression(ctx.lo), hi = BuildExpression(ctx.hi); + Expression range = new BinaryExpression(BinaryOperator.And, + new BinaryExpression(BinaryOperator.GreaterThanOrEqual, value, lo), + new BinaryExpression(BinaryOperator.LessThanOrEqual, value, hi)); + return ctx.not is null ? range : new UnaryExpression(UnaryOperator.Not, range); + } + + /// Parses an Access #…# date literal (e.g. #1/1/1997#, month/day/year) to a + /// . + private static DateTime ParseDate(string text) => + DateTime.Parse(text.Trim('#'), CultureInfo.InvariantCulture); + + private static Expression BuildLiteral(LiteralContext ctx) => ctx switch + { + IntLiteralContext i => new LiteralExpression(ParseInteger(i.GetText())), + NumberLiteralContext n => new LiteralExpression(double.Parse(n.GetText(), CultureInfo.InvariantCulture)), + HexLiteralContext h => new LiteralExpression(ParseHexBytes(h.GetText())), + StringLiteralContext s => new LiteralExpression(Unquote(s.GetText())), + DateLiteralContext d => new LiteralExpression(ParseDate(d.GetText())), + GuidLiteralContext g => new LiteralExpression(Guid.Parse(g.GetText())), // Access {…} braces; Guid.Parse accepts them + TrueLiteralContext => new LiteralExpression(true), + FalseLiteralContext => new LiteralExpression(false), + NullLiteralContext => new LiteralExpression(null), + _ => throw new SqlParseException($"Unsupported literal: {ctx.GetText()}"), + }; + + private static BinaryExpression Binary(Antlr4.Runtime.IToken op, ExpressionContext left, ExpressionContext right) => + new(MapOperator(op.Type), BuildExpression(left), BuildExpression(right)); + + private static BinaryOperator MapOperator(int tokenType) => tokenType switch + { + EQ => BinaryOperator.Equal, + NEQ => BinaryOperator.NotEqual, + LT => BinaryOperator.LessThan, + LTE => BinaryOperator.LessThanOrEqual, + GT => BinaryOperator.GreaterThan, + GTE => BinaryOperator.GreaterThanOrEqual, + PLUS => BinaryOperator.Add, + MINUS => BinaryOperator.Subtract, + STAR => BinaryOperator.Multiply, + SLASH => BinaryOperator.Divide, + MOD => BinaryOperator.Modulo, + BACKSLASH => BinaryOperator.IntDivide, + AMP => BinaryOperator.Concat, + BAND => BinaryOperator.BitAnd, + BOR => BinaryOperator.BitOr, + BXOR => BinaryOperator.BitXor, + _ => throw new SqlParseException($"Unsupported operator token {tokenType}"), + }; + + private static object ParseInteger(string text) => + // Box each branch independently: a bare `? i : long.Parse(...)` would infer the + // conditional's type as `long` and silently widen the int branch, so every literal + // (even `1`) would arrive as a boxed long. + int.TryParse(text, out int i) ? i : (object)long.Parse(text, CultureInfo.InvariantCulture); + + /// A raw binary literal (0x…) → the decoded bytes. Access writes OLE / Long Binary values + /// this way (e.g. a Categories.Picture bitmap). An odd digit count is a malformed literal and throws. + private static byte[] ParseHexBytes(string text) + { + ReadOnlySpan digits = text.AsSpan(2); // drop the "0x" prefix + if (digits.Length % 2 != 0) + throw new SqlParseException($"Binary literal '0x…' has an odd number of hex digits."); + return Convert.FromHexString(digits); + } + + private static string Identifier(IdentifierContext ctx) + { + string text = ctx.GetText(); + // Strip delimiters: [bracketed] or `backtick`. + return text.Length >= 2 && ((text[0] == '[' && text[^1] == ']') || (text[0] == '`' && text[^1] == '`')) + ? text[1..^1] + : text; + } + + private static string? OptionalIdentifier(IdentifierContext? ctx) => ctx is null ? null : Identifier(ctx); + + private static string Unquote(string text) + { + char quote = text[0]; // ' or " + // Strip the surrounding quotes, then collapse each doubled quote to a single one (SQL escape). + return text[1..^1].Replace(new string(quote, 2), quote.ToString()); + } +} diff --git a/src/LibRed/LibRed.Sql/Parsing/ISqlParser.cs b/src/LibRed/LibRed.Sql/Parsing/ISqlParser.cs new file mode 100644 index 00000000..cab73222 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Parsing/ISqlParser.cs @@ -0,0 +1,19 @@ +using LibRed.Sql.Ast; + +namespace LibRed.Sql.Parsing; + +/// +/// Parses SQL text into an AST. The implementation lowers the ANTLR parse tree into +/// the hierarchy; callers depend only on this abstraction so the +/// grammar can evolve (or be swapped) freely. +/// +public interface ISqlParser +{ + /// Parses a single statement. Throws on syntax errors. + SqlStatement ParseStatement(string sql); + + /// Parses a complete bare scalar expression (e.g. a column DEFAULT value), consuming + /// the entire input apart from skipped whitespace/comments. Throws + /// on syntax errors or trailing tokens. + Expression ParseExpression(string sql); +} diff --git a/src/LibRed/LibRed.Sql/Parsing/SqlParseException.cs b/src/LibRed/LibRed.Sql/Parsing/SqlParseException.cs new file mode 100644 index 00000000..0bad9a37 --- /dev/null +++ b/src/LibRed/LibRed.Sql/Parsing/SqlParseException.cs @@ -0,0 +1,9 @@ +namespace LibRed.Sql.Parsing; + +/// Thrown when SQL text cannot be parsed. +public sealed class SqlParseException(string message, int line = 0, int column = 0) + : Exception(message) +{ + public int Line { get; } = line; + public int Column { get; } = column; +} diff --git a/src/LibRed/README.md b/src/LibRed/README.md new file mode 100644 index 00000000..911f3708 --- /dev/null +++ b/src/LibRed/README.md @@ -0,0 +1,222 @@ +# LibRed — native managed Jet/ACE engine + +A from-scratch, fully managed (cross-platform) implementation of the Microsoft +Jet/ACE database engine — the format behind Access `.mdb` and `.accdb` files. +Unlike the `EntityFrameworkCore.Jet` projects (which rely on Windows-only ODBC/OleDb), +LibRed reads and writes the file format directly. + +> **Format spec:** [`docs/format/`](docs/format/README.md) is LibRed's authoritative, verified +> reference for the on-disk Jet 4 / ACE format — one file per page type, plus an +> [`appendix-structures.md`](docs/format/appendix-structures.md) field-layout quick reference. +> Treat it as the source of truth (it supersedes ad-hoc reads of mdbtools/Jackcess) and update it +> whenever the format understanding changes. **Any change to `LibRed.Core`'s read/write code must +> check the relevant `docs/format/` file for needed updates in the same change** — see the rule in +> the repo-root `CLAUDE.md`. Record only facts verified against real files or Access's own engine. +> +> **SQL surface:** [`docs/functions.md`](docs/functions.md) catalogs the supported VBA/Access functions +> (usable in `SELECT`/`WHERE`/`ORDER BY`/`DEFAULT`/`CHECK`); [`docs/format/page-02c-default-values.md`](docs/format/page-02c-default-values.md) +> covers column `DEFAULT` semantics. + +## Projects + +| Project | Responsibility | Depends on | +| --- | --- | --- | +| **LibRed.Core** | File format: IO/page channel, version formats, typed pages, catalog, storage (tables, rows, indexes), crypto, memo/OLE | — | +| **LibRed.Sql** | SQL front end: ANTLR grammar, AST, parser, binder. No engine dependency; binds through an injected `ISchemaProvider` | — | +| **LibRed.Engine** | Plans and executes bound statements over Core; bridges the catalog to the SQL binder | Core, Sql | +| **LibRed.Ado** | ADO.NET surface: `DbConnection`/`DbCommand`/`DbDataReader`/`DbParameter`/`DbTransaction`/`DbProviderFactory` | Engine | +| **LibRed.EFCore** | EF Core provider over the ADO layer: `AddEntityFrameworkLibRed()` / `UseLibRed()`, connection, database creator, database-first scaffolding | Ado | + +Dependency graph (a clean DAG, no cycles): + +``` +EFCore → Ado → Engine → Sql + ↘ Core +``` + +## Layering inside LibRed.Core + +``` +Storage (Table, TableCursor, RowDecoder, UsageMap, Types/JetTypeCodec) + ↓ +Catalog (JetCatalog → TableDef / ColumnDef / IndexDef, JetDataType) + ↓ +Pages (DatabaseDefinition, TableDefinition, Data, Index, UsageMap, Lval) + ↓ +IO (PageChannel, PageBuffer) ← Crypto decrypts pages here + ↓ +Formats (JetFormatBase — Jet 4 / ACE offsets & constants; a future Jet3Format overrides) +``` + +## Status + +Well past scaffolding — LibRed reads and writes real `.accdb` files, runs SQL end-to-end, and an +EF Core `DbContext` round-trips through it. The binary layout is documented and **verified** in +[`docs/format/`](docs/format/README.md) (against real files and Access's own +engine), cross-checked with [mdbtools](https://github.com/mdbtools/mdbtools) and +[Jackcess](https://jackcess.sourceforge.io/). + +**Working today:** + +- **Read** — every page type; catalog bootstrap from `MSysObjects`; full table scan; index B-tree + traversal (leaf + node, prefix compression); row decode (fixed/variable split, null bitmap, + in-bitmap booleans); data types incl. Text (compressed-Unicode common case), Memo/OLE long + values, Currency, DateTime, GUID, Numeric/Decimal, and ACE-16 `BIGINT`/`DATETIME2`; inline and + reference usage maps. +- **Views & stored queries** — a query is written the way Access does: an `MSysObjects` type-5 row + (negative synthetic id) plus the query decomposed byte-faithfully into `MSysQueries` rows — and Access + opens the file and runs it. Covered: `CREATE VIEW` (`SELECT` with joins, `WHERE`, `DISTINCT`, `BETWEEN`, + `#date#` literals, column aliases, `Table.*`, nested/parenthesised joins), **GROUP BY totals**, **`TOP` + + `ORDER BY`**, and **derived-table / `UNION` sources** (the long subquery text lands on an LVAL page so + Access executes it); **`CREATE PROCEDURE`** (parameterized — bare or parenthesised list, `@name`), + including **action-query** bodies (`CREATE TABLE` / `INSERT … VALUES`); and **`EXECUTE`/`EXEC`**. + LibRed's own engine **reads them all back** — reconstructing the SQL from `MSysQueries` and expanding a + view referenced in `FROM` (or inside an expression subquery) to a derived table — so they run through + LibRed too. (`HAVING`, and the INSERT…SELECT/UPDATE/DELETE action-query write-back, are still TODO.) +- **Write** — row insert with order-preserving index-key encoding and **full B-tree maintenance** + (descend to the target leaf, insert with prefix compression, **leaf/node splitting and root growth**); + `CREATE TABLE` (heap + primary key) that **Access opens and round-trips**; AutoNumber generation + and high-water tracking; unique-index statistics; allocation through the global free-pages map; + `MSysObjects` / `MSysACEs` catalog rows; version-0 "General legacy" text index keys. +- **Constraints** — `CREATE TABLE` `PRIMARY KEY`, `UNIQUE` (column- and table-level), and foreign keys + in every documented Access form: table-level `FOREIGN KEY [NO INDEX] (…) REFERENCES …`, column-level + `… REFERENCES …`, and `ON UPDATE`/`ON DELETE` in either order. A relationship is persisted to + `MSysRelationships` with a child-side FK index and **byte-faithful** logical-index linkage on both + tables' TDEFs (Access opens the file and enumerates it), with referential-integrity enforcement on + `INSERT`. `UNIQUE` creates a unique non-primary index. Self-referencing foreign keys are handled + inline. Column `DEFAULT` values are persisted to the table's `LvProp` property blob (on an LVAL page), + read back onto the column, and applied when an insert omits the column — **and Access honors them too**. + Table-level `CHECK` constraints are persisted to the `LvProp` `CheckConstraints` property (verbatim + expression text) and read back onto `TableDef.CheckConstraints` — **and Access enforces them**. +- **SQL** — ANTLR front end (parser → binder via `ISchemaProvider` → planner → executor). Statements: + `CREATE TABLE`, `CREATE [UNIQUE] INDEX … [WITH {PRIMARY|DISALLOW NULL|IGNORE NULL}]`, `CREATE VIEW`, + `CREATE PROCEDURE`, `ALTER TABLE` (ADD/DROP COLUMN, ADD PK/FK/UNIQUE/CHECK, ALTER COLUMN incl. the + byte-faithful in-place type change, DROP CONSTRAINT), `DROP {TABLE|INDEX|VIEW|PROCEDURE}`, `INSERT` + (with AutoNumber), `UPDATE`, `DELETE`, `EXECUTE`, and `SELECT` with `WHERE`, joins, `GROUP BY`/aggregates, + `HAVING`, `ORDER BY`, `TOP`, `UNION`/`INTERSECT`/`EXCEPT`, subqueries, and parameters. Plan nodes: + Scan / IndexScan / Filter / Project / Join / Aggregate / Sort / Limit / SetOperation / DerivedTable. +- **ADO.NET** — connection / command / reader / parameter / transaction / factory over the engine. + Transactions commit/roll back for real via a page-level undo log in `PageChannel` (snapshot pages on + first write, restore on rollback, truncate pages the txn allocated) — this is what gives EF Core's + shared-database functional tests their per-test isolation. +- **EF Core** — `LibRed.EFCore` provider (`AddEntityFrameworkLibRed` / `UseLibRed`) over `LibRed.Ado`, + reusing most of `EFCore.Jet` and overriding the connection + scaffolding. Query round-trips and + database-first scaffolding pass (`LibRed.EFCore.Tests`). + +**Done since (previously listed here as "not yet"):** DML `UPDATE` / `DELETE` (in-place, row relocation, +index maintenance, multi-table over joins, `WHERE EXISTS`/scalar subquery, LVAL reclamation) and the +generated-AutoNumber `@@IDENTITY` round-trip up through Engine → Ado → EFCore; the **full `ALTER TABLE`** +surface (unblocking cyclic/self-referencing FKs EF emits as a separate operation) and +`DROP {TABLE|INDEX|VIEW|PROCEDURE}`; `CREATE PROCEDURE` / `EXECUTE`; foreign-key **enforcement + cascade / +set-null** referential actions on `UPDATE`/`DELETE`; leaf/node B-tree splitting with root growth; and +**transactions** (real commit/rollback via a page-level undo log — see above). + +**Not yet.** (Format-level details of each on-disk gap live in `docs/format/`; this is the working +worklist. Much of the earlier "not yet" list is now done — the whole of `ALTER TABLE` +(ADD/DROP COLUMN, ADD UNIQUE/CHECK, ALTER COLUMN incl. the byte-faithful in-place type change, DROP of +a PK/unique constraint), `CREATE INDEX` on non-empty tables with back-fill, chained multi-page LVAL, +LibRed-side `CHECK` enforcement, self-pointing self-references, and writing Memo/OLE values.) + +*On-disk / write gaps:* + +- **Composite index key encoding** — single-column keys are byte-verified vs ACE; a genuine + **multi-column** key is not (no column separator confirmed — Northwind's only composite is usually + empty). Verify against a created composite-key `.accdb` before relying on it. +- **`ON UPDATE SET NULL`** — pathway threaded but throws; its Jet storage bytes are unverified because the + ACE OLE DB provider rejects the DDL (needs a UI/DAO-created sample to probe). `ON DELETE SET NULL` and + both `CASCADE` directions work. +- **1:1 relationships** (`dbRelationUnique` = `0x01`) — never written; a 1:1 migration would render as + 1:many in Access (the unique index still enforces uniqueness). Probe a real 1:1's `grbit` first. +- **ACE-16 types** — `Int64`/BIGINT (`0x13`) index-key encoding is trivial but unverified; + `DateTimeExtended`/DATETIME2 (`0x14`) is **read-only** (no write codec), which also blocks indexing it. + The **ACE-16 auto-upgrade** (using BIGINT/DATETIME2 bumps the format version) is deliberately refused + until we probe what else the upgrade changes. +- **Version-1 "General" text collation** (Access 2010+) — the v1 weight table needs an Access-2010+ + fixture to reverse-engineer; the encoder gates (throws) on any non-legacy collation meanwhile. Also: + populate `JetDatabase.Collation` from the page-0 sort order (needs page-0 de-obfuscation). +- **Computed / calculated columns** (ACE 14) — the evaluation half exists; the gap is the on-disk + TDEF/`LvProp` storage of the expression (and persisted-vs-virtual semantics). +- **`LvProp` properties not modelled** — `ValidationRule`/`ValidationText` (UI-authored validation, + distinct from a SQL `CHECK`), `AllowZeroLength`, and `UnicodeCompression` (storage-affecting). Column-level + `CHECK` persistence is likewise unprobed (its ACE storage differs). +- **`DROP TABLE` leaks until Compact** — multi-page TDEFs, non-root index pages, LVAL pages, and dedicated + usage-map pages aren't freed; byte-faithful **child-in-relationship** `DROP TABLE` (ACE cascades the FK; + LibRed requires dropping the FK first). +- **Jet 3** format; **password/encryption** write; strict **DAO Compact & Repair** compatibility (checklist + captured — only relevant if targeting DAO C&R rather than "ACE opens + queries"). +- **`CREATE TEMPORARY TABLE` / `WITH COMPRESSION`** — parsed only to throw `NotSupportedException`. + +*SQL surface / engine gaps:* + +- **Stored action queries** — INSERT…VALUES + DDL bodies are written and read back; INSERT…SELECT / + UPDATE / DELETE bodies are not (UPDATE/DELETE also need grammar). `HAVING` in a stored view needs its + `MSysQueries` attribute probed. +- **`!` bang notation** (`[Table]![Col]`, `Forms![f]![ctl]`) — grammar gap; and the stored-query + reconstructor only rebuilds simple SELECTs + a few action kinds, so a real app's parameterized/combo-box + query layer reads back as unsupported. +- **Function surface** — the evaluator's whitelist isn't proven identical to ACE's JES; argument **arity** + isn't validated (extra args ignored where ACE errors); `Format` named date/currency formats are + locale-dependent by design (not byte-identical cross-locale). +- **Non-unique index statistics** — only unique indexes advance the live unique-entry count (`+4`) today. +- **Deferred-write transactions** — writes are eager (write-through + undo log); a future `PageChannel` + refactor could buffer changed pages and materialize only on commit (cheaper rollback, never half-applied). +- **Single-writer concurrency** — LibRed is a **single-writer engine that merely tolerates extra open + handles**, not a concurrent multi-user one. `PageChannel.Open` opens the file `FileShare.ReadWrite` + (a Jet/ACE file is a shared-file database — Access/ODBC/OLE DB all open it with multiple handles, and + EF's own test infra keeps a store connection open alongside per-context connections), but there is **no + concurrency control**: no lock file (Access coordinates multi-user access via a side-car `.laccdb`/`.ldb` + with page/record locks — LibRed writes and honours none of it), no read isolation, and the transaction + undo log is **per-`PageChannel`**. Safe: any number of readers with no writer; one writer plus readers + when access is **serialized** (the single-threaded app / EF case). Unsafe: truly concurrent readers and a + writer (torn/dirty reads — a reader can see a half-applied multi-page operation or another handle's + uncommitted transaction); **two or more concurrent writers → file corruption** (unarbitrated page writes, + racing usage-map allocation, and — worst — one channel's rollback *truncates the file* back to its own + transaction start, discarding pages another channel committed past that point). True multi-user support + is its own project: a lock file, page/record locking, and a shared or WAL-based write path. + +## SQL pipeline + +Always run through the full pipeline, even for trivial queries, so adding features +later (joins, aggregates, subqueries, then newer SQL) means adding node types rather +than rewriting: + +``` +text → ISqlParser → AST → Binder(ISchemaProvider) → BoundStatement + → QueryPlanner → PlanNode tree → QueryExecutor → ResultSet +``` + +### ANTLR grammar + +The grammar lives at `LibRed.Sql/Grammar/AccessSql.g4` and **is** the active parser +(`AntlrSqlParser` → `AccessSqlLexer`/`AccessSqlParser`). The lexer/parser/visitor are **pre-generated +and committed** under `Grammar/Generated/`, and only the managed `Antlr4.Runtime.Standard` package is +referenced — so the solution builds without the ANTLR code-generation tool. After editing +`AccessSql.g4`, regenerate the sources with `Grammar/generate.ps1` (which needs the ANTLR tool) and +commit them. + +## EF Core provider (LibRed.EFCore) + +`LibRed.EFCore` mirrors EFCore.Jet's DI registration and is wired up: `AddEntityFrameworkLibRed()` / +`UseLibRed()` register the provider, reusing EFCore.Jet's services (added via +`JetServiceCollectionExtensions.AddEntityFrameworkJet()`, +`src/EFCore.Jet/Extensions/JetServiceCollectionExtensions.cs`, through an +`EntityFrameworkRelationalServicesBuilder`) and **overriding only the LibRed-specific pieces on top**. +Query round-trips and database-first scaffolding pass today (`LibRed.EFCore.Tests`). + +**Overridden today:** + +- **The connection** (`IJetRelationalConnection` → `LibRedRelationalConnection`) — a LibRed + connection over `LibRed.Ado` instead of the OLE DB/ODBC `JetConnection`. +- **`IRelationalDatabaseCreator`** (→ `LibRedDatabaseCreator`) and the **database-first scaffolding** + (`LibRedDatabaseModelFactory`, catalog-backed, plus `LibRedDesignTimeServices`). + +So EF queries currently flow through EFCore.Jet's `JetQuerySqlGenerator` (which emits Jet SQL), and +LibRed.Ado parses that SQL with its ANTLR front end. + +**Planned next — `IQuerySqlGeneratorFactory`** (today `JetQuerySqlGeneratorFactory` → creates +`JetQuerySqlGenerator`), the biggest remaining override. Owning both SQL generation and the +engine/parser means the generator can drop the ACE-pleasing contortions (parenthesised multi-way +joins, comma-vs-JOIN quirks, `CBOOL`/`CLNG`/`TOP`-`SKIP` gymnastics) that exist only to satisfy the +OLE DB/ODBC → ACE path — subclass/customise rather than rewrite. Until then, grow the SQL layer +against the real EF-generated (Jet) queries it must accept. (Note: the Jet builder uses `TryAdd` / +add-if-absent, so confirm the override ordering.) diff --git a/src/LibRed/docs/design/transactions.md b/src/LibRed/docs/design/transactions.md new file mode 100644 index 00000000..a038f3bf --- /dev/null +++ b/src/LibRed/docs/design/transactions.md @@ -0,0 +1,256 @@ +# LibRed transaction & concurrency design + +Status: **draft / accepted direction** · Date: 2026-07-18 + +> **Implementation note (2026-07-24) — isolation is a deferred-write overlay, not undo + strict 2PL.** +> Isolation shipped by a simpler route than the write-through-undo-under-held-locks sketch in §3 L1 / §4. +> `PageChannel` now buffers a transaction's writes into a **private per-connection overlay** +> (`page → uncommitted bytes`) instead of writing them through to disk and the shared page cache. Reads on the +> owning channel see the overlay (read-your-writes); every other channel on the file sees only committed +> state — so a concurrent reader never observes an uncommitted page. **Commit** replays the overlay to +> disk + shared cache in ascending page order; **rollback** simply discards it (nothing to restore, truncate, +> or flush); **savepoints** snapshot the prior overlay state per frame (`Transaction`). This gives +> **read-committed** isolation **without holding exclusive locks for the transaction's lifetime** — so the +> writer-serialization / reader-blocking of strict 2PL (§4) is not needed for isolation, and EF's parallel +> shared-store tests (each mutating inside a rolled-back transaction) no longer leak into concurrent readers. +> The exclusive page lock is now held only for the duration of an individual committed page write, not the +> whole transaction. The undo log described below is gone. Everything else here — the lock-manager layering +> (L0), the ACE co-residency constraint (§2), commit-byte / cross-process protocol, cascade worklist — still +> stands as the roadmap. See `TransactionIsolationTests` and [[libred-parallel-dirty-read-flakiness]]. + +This is the ground-up design for LibRed's transaction support and the concurrency +infrastructure it sits on. It replaces the ad-hoc page-level undo log currently in +`PageChannel`, and is written so the localized atomicity gaps the production audit +found (`LIBRED_AUDIT_REPORT.md`, the P0s) are closed by *one* model rather than +patched site by site. + +## 1. Goals and non-goals + +**Goals** +- **Statement atomicity.** Every statement is all-or-nothing, even with no explicit + user transaction. A late constraint/I/O failure never leaves a half-written row, + index, usage map, LVAL chain, TDEF, or catalog entry. +- **Explicit transactions.** `BEGIN`/`COMMIT`/`ROLLBACK` (and the ADO + `LibRedTransaction`) group many statements atomically, with **savepoints** (nesting). +- **Cascade correctness.** Cascade delete/update runs as a bounded worklist inside the + transaction — no unbounded recursion, no double-mutate on diamond graphs. +- **Concurrency infrastructure, built in from day one.** Every read/write flows through + explicit lock-acquisition seams and per-connection transaction context, so the + real lock manager is a *fill-in*, not a later rewrite. + +**Non-goals (deferred, but not precluded)** +- **Byte-exact ACE lock interop.** The initial lock manager is **self-consistent** + (LibRed↔LibRed): a correct page-locking protocol using our own offsets. Reproducing + Jet's exact `LockFileEx` offset bands, the `.laccdb` per-user records, and the + page-0 commit-byte polling — so a live `MSACCESS.EXE` can share the file — is a later + swap of *values and detection*, not of *structure*. See [[jet-locking-user-registry]]. +- **Crash durability beyond Jet's.** We match Jet's model: detect-and-repair, not a + write-ahead log. A WAL is actively incompatible with ACE co-residency (§5). +- **Record-level locking.** Page-level only. ACCDB per-page encryption already forces + whole-page granularity — you cannot sub-page lock what you decrypt as a unit. +- **Multi-writer performance.** Writers serialize for now (priority order: + correctness → speed → concurrency, [[libred-priority-order]]). + +## 2. Why not a WAL / journal (the ACE-co-residency constraint) + +The hard requirement is that Access and LibRed can hold the **same file open at the +same time**. That rules out any LibRed-private durability side-channel: + +- Access writes pages under *its* protocol and never touches a LibRed journal, so our + recovery would roll its committed work back — corruption, not safety. +- Jet itself has no WAL. Durability = the page-0 **commit-byte table** (`0xE00`–`0xFFF`, + 256×2 bytes: idle `00 01`, **mid-write `00 00`**, corrupt `01 00`) plus the OS + byte-range locks. A `00 00` with no matching `.ldb` lock after a crash ⇒ Jet marks the + DB suspect and repairs. + +So LibRed **matches Jet's on-file commit protocol** and provides atomicity/rollback +**in-process** (while the process lives) via an undo log. Cross-process consistency +comes from the lock protocol; crash consistency is Jet's (weak-by-design) detect-and-repair. +We may be *more disciplined* about flush ordering within that protocol, but we add no +structure to the file that Access doesn't understand. + +## 3. Layered architecture + +``` + L4 ADO surface LibRedTransaction / LibRedCommand enforce against L2 + L3 Statement layer QueryEngine: implicit per-statement txn; cascade worklist + L2 Transaction manager per-connection Transaction: begin/commit/rollback + savepoints + L1 PageChannel write choke point: lock seams + in-process undo log + L0 Lock manager page locks, commit-byte map, .ldb — self-consistent now, Jet later +``` + +The invariant that makes L0 a later fill-in: **L1 already calls +`AcquireShared(page)` / `AcquireExclusive(page)` around every read/write and threads a +per-connection transaction context.** Today those calls resolve to a no-op (or a +process-local monitor) coordinator; the Jet coordinator is dropped in behind the same +interface. + +### L0 — Lock manager (`ILockManager`) + +Owns cross-connection/cross-process coordination. Interface (stable; implementations vary): + +``` +interface ILockManager : IDisposable +{ + IDisposable AcquireShared(int page); // read lock; multiple readers + IDisposable AcquireExclusive(int page); // write lock; single writer, excludes readers + void MarkCommitPending(); // set our commit-byte slot -> mid-write + void MarkCommitDone(); // clear -> idle + int RegisterUser(); // claim a slot; returns user index + void ReleaseUser(int index); +} +``` + +- **`SelfConsistentLockManager` (initial):** page locks via `FileStream.Lock` on the + main handle at *our own* deterministic offset band (`page → base + page*stride`); + a simple in-file or side-file presence map. Correct LibRed↔LibRed, Windows-and-Unix + where `FileStream.Lock` is supported; a `MonitorLockManager` (process-local + `ReaderWriterLockSlim` per page) covers single-process / cross-platform. +- **`JetLockManager` (later):** the exact Jet 4/ACE offsets (~10M/20M bands on the + `.laccdb` handle), the page-0 commit-byte table registration/polling, the `.laccdb` + 32+32-byte identity records. Windows-only. This is a values+detection swap; the L1 + call sites and L2 semantics do not change. Source facts: [[jet-locking-user-registry]]. + +### L1 — PageChannel (write choke point) + +- `ReadPage(p)`: `using (locks.AcquireShared(p))` → decode/return (existing parsed-page + cache unchanged). +- `WritePage(p, bytes)` under a transaction: + 1. `AcquireExclusive(p)`, + 2. snapshot the **before-image** into the active transaction's undo set (once per page + per savepoint frame), + 3. `MarkCommitPending()` on first dirty page of the txn, + 4. write the page (write-through, as today), + 5. keep the exclusive lock until commit/rollback (strict two-phase, §4). +- The undo store moves **off** `PageChannel` (no more single global `_undo`) into the + per-connection `Transaction` (§4). `PageChannel` becomes stateless w.r.t. transactions + beyond holding the file/lock handles. + +### L2 — Transaction manager + +`Transaction` is **per connection** (EF holds several connections on one shared +`PageChannel`; a single global undo log is the current bug). Contents: + +- `SavepointStack` — each frame holds its own `Dictionary` of before-images + and the set of exclusive locks first taken in that frame. `Begin` pushes; `Release` + merges a frame down; `RollbackTo` restores that frame's before-images in reverse and + releases its locks. +- **Commit:** flush (§5 ordering), `MarkCommitDone()`, release all locks, discard undo. +- **Rollback:** restore before-images newest→oldest, truncate to the transaction's + original page count (pages allocated in the txn are discarded), `MarkCommitDone()`, + release locks. +- **Writer serialization:** a transaction that takes its first exclusive lock is the + writer; others block (or fail-fast per isolation policy) until it ends. Readers proceed + under shared locks. + +### L3 — Statement + cascade layer + +- **Implicit transaction:** `QueryEngine.Route` runs each statement inside + `txn ??= connection.BeginImplicit()`; on success it commits the implicit txn, on any + throw it rolls back. If an explicit user transaction is open, statements are savepoints + within it instead. This single change closes the statement-atomicity P0 for *all* + writers (row insert, DDL, view create, LVAL) without per-site edits. +- **Cascade as a worklist:** delete/update collects affected child rows into a queue with + a `visited` (in-progress) set; cycles terminate, diamonds mutate once. All mutations + are in the one transaction, so a mid-cascade failure rolls the whole thing back. + +### L4 — ADO surface + +- `LibRedConnection.BeginTransaction()` → creates the connection's explicit `Transaction`; + `LibRedTransaction.Commit/Rollback` drive L2. +- `LibRedCommand` executes inside its connection's active transaction (explicit or the + per-statement implicit one). The "stored but unenforced transaction" gap is closed: + a command with a foreign/stale transaction is rejected. + +## 4. Transaction semantics + +- **Atomicity unit:** the statement (implicit) or the explicit `BEGIN…COMMIT` span. +- **Isolation (initial):** single-writer / many-readers via strict two-phase page + locking — exclusive locks held to commit. This yields serializable behavior for the + single-writer case. MVCC/snapshot is a later concurrency-phase option and is not + designed in here beyond "don't preclude" (before-images already exist). +- **Savepoints:** nesting via the frame stack; an inner statement inside an explicit txn + is a frame, so its failure rolls back just that statement, not the user's transaction. +- **Nested transactions** (SQL `BEGIN`/`COMMIT`/`ROLLBACK`, and any caller that nests) map + onto the one savepoint stack — there is a single physical transaction, never truly nested + ones. A per-connection **transaction controller** holds a depth counter shared by *both* + front doors (the ADO API and SQL statements), so they can't open parallel transactions: + - **BEGIN** at depth 0 opens the real L2 transaction; at depth ≥ 1 it pushes a savepoint. + Depth increments. + - **COMMIT** at depth 1 commits the real transaction; at depth ≥ 2 it *releases* the + innermost savepoint (merges its work into the enclosing level). Depth decrements. + - **ROLLBACK** at depth 1 rolls the transaction back and closes it; at depth ≥ 2 it rolls + back to the innermost savepoint (undoing just that level). Depth decrements. + - This follows **Jet/DAO nested semantics** — commit/rollback act on the *innermost* level + — which is our compatibility target, *not* SQL Server's "unqualified ROLLBACK unwinds + all levels". A named `SAVE`/`ROLLBACK TRANSACTION ` addresses a specific frame. + No new mechanism is needed: nesting is the Phase-1 savepoint stack, driven by the controller. +- **Durability:** commit flushes dirty pages then clears the commit-byte; a crash before + the clear leaves the Jet "suspect" signal (later, with `JetLockManager`) → repair path. + With the self-consistent manager, recovery is process-local (no cross-process crash + interop claimed yet). + +## 5. Flush / commit ordering (matching Jet, staying ACE-safe) + +On commit, in order: (1) write all dirty data/index/LVAL/usage-map pages; (2) fsync; +(3) write the page-0 header/commit-state update; (4) fsync; (5) clear commit-byte / +release locks. Never leave a header pointing at pages that aren't durable. No structure +is written that Access cannot parse — the commit-byte table and lock offsets are the only +concurrency-visible state, exactly as Jet uses them. + +## 6. Phased implementation plan + +Build correctness first with lock seams stubbed; drop the Jet lock manager in last. + +1. **L2 core.** ✅ done. `Transaction` + `SavepointStack` with before-image undo, moved out of + `PageChannel`. `PageChannel.WritePage` records into the active transaction. Unit tests + for commit/rollback/nested rollback, allocate-then-rollback truncation. +2. **L3 statement atomicity.** ✅ done. Wrap every `QueryEngine` statement in an implicit txn; + convert the audit's non-atomic writers (`RowInserter`, `TableCreator`, `ViewCreator`, + usage-map/LVAL) to rely on it. Regression: inject a late failure mid-statement, assert + no partial state. +3. **Cascade worklist.** ✅ done. Replace recursive cascade with the queue+visited worklist + inside the txn. Tests: cyclic FK, diamond FK, deep chain (former stack-overflow). +4. **L1 lock seams + `MonitorLockManager`.** ✅ done. Introduce `ILockManager`, route + read/write through it (cache-hit reads stay lock-free via copy-on-write `Store`), ship + the process-local monitor implementation. +5. **L4 ADO enforcement.** ✅ done. Wire `LibRedTransaction`/`LibRedCommand` to L2; reject + stale/foreign transactions; EF savepoint support (`SupportsSavepoints`). +6. **SQL transaction-control statements (with nesting).** Add engine-native `BEGIN`/`COMMIT`/ + `ROLLBACK [TRANSACTION|WORK]` (and Access's `BEGIN TRANS`), plus named `SAVE`/`ROLLBACK + TRANSACTION `. Parse to AST → a new `QueryEngine.Route` branch that drives a + per-connection **transaction controller** (the §4 depth counter) on the *same* L2 as the + ADO front door — so a SQL `BEGIN` and an ADO `BeginTransaction` can't open parallel + transactions, and the controller is the single source of `InTransaction`. Two must-haves: + (a) transaction-control statements are **exempt from the Phase-2 implicit wrap** — they + manage the transaction rather than run inside one; (b) nesting reuses the Phase-1 savepoint + stack (BEGIN→savepoint at depth ≥ 1; COMMIT→release; ROLLBACK→rollback-to). This is the + audit's deferred "ownership/liveness" item — the controller is where ADO and SQL reconcile. + Relevant to executing generated migration scripts and raw `BEGIN…COMMIT` batches; the EF + runtime path keeps using the ADO API. Tests: nested BEGIN/COMMIT/ROLLBACK depth behaviour, + SQL-then-ADO consistency, control statements not self-wrapped. +7. **L0 `SelfConsistentLockManager`.** Real byte-range page locks (our offsets) + presence + map; multi-*process* single-writer LibRed↔LibRed. +8. **(Concurrency phase) `JetLockManager`.** Jet-exact offsets, commit-byte polling, + `.laccdb` records → live co-residency with `MSACCESS.EXE`. Characterize the remaining + unknowns from [[jet-locking-user-registry]] (own-slot writes, poll interval, Jet-4 + `.laccdb` record shape) first. + +Steps 1–3 close every transaction-related P0 in the audit (✅). Step 5 completes the +in-process transaction contract (✅), and step 6 adds the SQL front door onto it. Steps 7–8 +are the cross-process concurrency ladder and land independently — the seams from step 4 +don't move. + +## 7. Open questions + +- **Reader isolation while a writer commits:** do readers under shared locks see the + pre-commit page (blocked until release) or is a dirty-read window acceptable initially? + Proposed: block (strict 2PL) — simplest correct default. +- **Implicit-txn cost:** per-statement begin/commit must be cheap for read-only statements + (no dirty pages ⇒ commit is just lock release). Ensure a read-only statement never + touches the commit-byte. +- **Deadlock policy** once multiple pages lock in different orders: initial mitigation is + a global writer lock (one writer at a time), so no page-order deadlock exists yet; + revisit when finer locking arrives. +- **`.ldb`/`.laccdb` lifecycle** (create on first open, delete on last close) — belongs to + step 6/7; not needed for in-process correctness. diff --git a/src/LibRed/docs/format/README.md b/src/LibRed/docs/format/README.md new file mode 100644 index 00000000..c6b73b3e --- /dev/null +++ b/src/LibRed/docs/format/README.md @@ -0,0 +1,129 @@ +# Jet / ACE file format — LibRed reference + +This is LibRed's own specification of the Microsoft Jet 4 / ACE (Access `.mdb` / `.accdb`) +on-disk format. **Every offset and structure here has been verified byte-for-byte against +real database files** (the Northwind ACE-2007 sample, a generated 200-column wide table, +and a generated ~150 MB large table) and cross-checked against mdbtools (its `HACKING.md`) +and Jackcess. Several structures are additionally verified from the **write** side: LibRed +produces them and Access's own OLE DB engine reads the result back (a LibRed-inserted row is +found by an Access indexed primary-key seek; encoded index keys match Access's stored bytes). +Where something is assumed or unverified, it says so explicitly. + +Unless noted, everything here describes **Jet 4 and ACE (12/14/16/17)**, which share one +structural layout. **Jet 3** (Access 97) differs in many of these and is *not yet +implemented* — see [Version differences](#version-differences). + +Implemented by `src/LibRed/LibRed.Core/`. The canonical offsets live in +`Formats/JetFormatBase.cs`. + +> **This reference is split across several files** — one per page type, plus cross-cutting topics; each is +> self-contained (its structures *and* its read/write mechanics live together). Most describe the **on-disk +> format**; [page-02c-default-values.md](page-02c-default-values.md) is the exception — it covers `DEFAULT` +> **semantics** (engine behaviour), sitting with the column pages because it's a column feature. This README +> is the map. For a bare field-layout lookup with no prose, see the [structures appendix](appendix-structures.md). + +--- + +## Files + +| File | Covers | +| --- | --- | +| [page-00-database.md](page-00-database.md) | Page 0 — the database-definition page (format id, version byte) | +| [page-01-data-and-rows.md](page-01-data-and-rows.md) | Data page (type `0x01`) header + slot directory, and the inline **row record** format | +| [page-02a-tdef.md](page-02a-tdef.md) | Table-definition page (type `0x02`): header, multi-page chaining, body layout, and writing a TDEF Access accepts | +| [page-02b-columns.md](page-02b-columns.md) | TDEF **columns**: the 25-byte descriptor, and column maintenance incl. the in-place **`ALTER COLUMN`** type/length change | +| [page-02c-default-values.md](page-02c-default-values.md) | Column **`DEFAULT`** value *semantics* — what an expression may contain, the DDL-parser-vs-expression-service split (engine behaviour; the on-disk `LvProp` storage is in [system-catalog.md](system-catalog.md)) | +| [page-02d-constraints.md](page-02d-constraints.md) | TDEF **indexes / keys / constraints**: index-data, index-info and stats blocks (PK / unique / FK metadata) | +| [page-03-04-index-btree.md](page-03-04-index-btree.md) | Index B-tree pages (types `0x03` node / `0x04` leaf): header, entries, prefix compression, key encoding, splitting | +| [page-05-usage-maps.md](page-05-usage-maps.md) | Per-table owned/free usage maps, `0x05` bitmap pages, and the global free-pages map (allocation) | +| [long-values.md](long-values.md) | Memo / OLE long values, LVAL pages, and the per-column usage-map list | +| [data-types.md](data-types.md) | Data-type codes and their decode, plus compressed Unicode | +| [system-catalog.md](system-catalog.md) | `MSysObjects` / `MSysACEs` / `MSysQueries` / `MSysRelationships`, the `LvProp` property blob, views & procedures, relationships | +| [appendix-structures.md](appendix-structures.md) | Consolidated field-layout tables for every on-disk structure — quick reference, no prose | + +The supported VBA/Access **functions** (usable in `SELECT`/`WHERE`/`ORDER BY`/`DEFAULT`/`CHECK`) are +catalogued one level up in [`../functions.md`](../functions.md). + +--- + +## 1. Conventions + +- **Endianness:** little-endian for all integers, **except** index-page key/pointer values, + which are big-endian (noted in the index B-tree file). +- **Page size:** 4096 bytes (Jet 4 / ACE). Jet 3 is 2048. +- **Pages** are numbered from 0; a page's byte offset in the file is `pageNumber * pageSize`. +- **Page type** is the first byte of every page: + + | Byte | Page type | LibRed | File | + | --- | --- | --- | --- | + | `0x00` | Database definition (page 0 only) | `DatabaseDefinitionPage` | [page-00](page-00-database.md) | + | `0x01` | Data page (also long-value/LVAL pages) | `DataPage` | [page-01](page-01-data-and-rows.md) / [long-values](long-values.md) | + | `0x02` | Table definition (TDEF) | `TableDefinitionPage` | [page-02a](page-02a-tdef.md) | + | `0x03` | Index B-tree node (intermediate) | `IndexCursor` | [page-03-04](page-03-04-index-btree.md) | + | `0x04` | Index B-tree leaf | `IndexCursor` | [page-03-04](page-03-04-index-btree.md) | + | `0x05` | Page-usage bitmap | `UsageMap` | [page-05](page-05-usage-maps.md) | + +--- + +## Section map + +Cross-references throughout use the original **§-numbers** from the single-file spec. This +table says which file each section now lives in. + +| § | Section | File | +| --- | --- | --- | +| §1 | Conventions | this README (above) | +| §2 | Page 0 — database definition | [page-00-database.md](page-00-database.md) | +| §3.1 | TDEF header | [page-02a-tdef.md](page-02a-tdef.md) | +| §3.2 | Multi-page TDEFs | [page-02a-tdef.md](page-02a-tdef.md) | +| §3.3 | TDEF body layout | [page-02a-tdef.md](page-02a-tdef.md) | +| §3.3.1 | Index statistics block | [page-02d-constraints.md](page-02d-constraints.md) | +| §3.3.2 | Column usage-map list | [long-values.md](long-values.md) | +| §3.4 | Column descriptor | [page-02b-columns.md](page-02b-columns.md) | +| §3.5 | Index-data block | [page-02d-constraints.md](page-02d-constraints.md) | +| §3.6 | Index-info block | [page-02d-constraints.md](page-02d-constraints.md) | +| §3.7 | Writing a TDEF | [page-02a-tdef.md](page-02a-tdef.md) | +| §3.8 | In-place `ALTER COLUMN` | [page-02b-columns.md](page-02b-columns.md) | +| §4 | Data page | [page-01-data-and-rows.md](page-01-data-and-rows.md) | +| §5 | Row record format | [page-01-data-and-rows.md](page-01-data-and-rows.md) | +| §6 | Data types | [data-types.md](data-types.md) | +| §7 | Compressed Unicode | [data-types.md](data-types.md) | +| §8 | Long values (Memo / OLE) | [long-values.md](long-values.md) | +| §9 | Usage maps | [page-05-usage-maps.md](page-05-usage-maps.md) | +| §9.1 | Global free-pages map | [page-05-usage-maps.md](page-05-usage-maps.md) | +| §10 | Index B-tree pages | [page-03-04-index-btree.md](page-03-04-index-btree.md) | +| §11 | System catalog | [system-catalog.md](system-catalog.md) | +| §12 | Version differences | this README (below) | + +--- + +## Version differences + +**Jet 3 (Access 97) is the odd one out** and is *not yet implemented*. Known differences from +the Jet 4 / ACE layout documented across these files: + +- 2048-byte pages. +- 18-byte column descriptors (vs 25). +- 1-byte ASCII name lengths (vs 2-byte UTF-16). +- 1-byte row column-count (vs 2-byte), and 1-byte variable-offset entries **with a jump table** + for rows > 256 bytes. +- Different data-page and TDEF header offsets. + +Jet 4 and all later ACE versions (12/14/16/17) share the structural layout documented here; +differences between *those* are additive at the type/feature level (new data types, encryption +schemes), not the page offsets. In LibRed this is reflected by `JetFormatBase` virtual members +with Jet 4/ACE defaults; a future `Jet3Format` overrides the ones that differ. + +--- + +## Provenance + +Verified against: `Northwind.accdb` (ACE 2007), a generated 200-column ACCDB (multi-page TDEF), +and a generated ~150 MB ACCDB (reference usage map). Cross-referenced with mdbtools +(`HACKING.md`, and its `table.c` / `data.c` / `index.c`) and Jackcess (`TableImpl`, `ColumnImpl`, +`IndexData`, `IndexCodes`) — consulted upstream, not vendored here. The LibRed test suite +(`test/LibRed.Core.Tests/`) pins these structures, including whole-database golden dumps. +Write-side structures (row insertion, order-preserving key encoding, leaf-entry layout) are +additionally cross-checked against Access's own engine via OLE DB: insert the same row through +LibRed and through Access, then confirm the row sets match and that Access seeks the +LibRed-written index entry. diff --git a/src/LibRed/docs/format/appendix-structures.md b/src/LibRed/docs/format/appendix-structures.md new file mode 100644 index 00000000..c8170980 --- /dev/null +++ b/src/LibRed/docs/format/appendix-structures.md @@ -0,0 +1,265 @@ +# Appendix — on-disk structures (quick reference) + +Field-layout tables for every on-disk structure, with **no prose** — a fast lookup. Each +structure links to the file with the verified detail (edge cases, write rules, provenance). +All integers little-endian unless noted; offsets are hex, relative to the structure's start. + +--- + +## Page header (first byte = page type) + +| Byte `0x00` | Page type | +| --- | --- | +| `0x00` | Database definition (page 0 only) | +| `0x01` | Data page (also LVAL long-value pages) | +| `0x02` | Table definition (TDEF) | +| `0x03` | Index B-tree node | +| `0x04` | Index B-tree leaf | +| `0x05` | Page-usage bitmap | + +--- + +## Page 0 — database definition → [page-00](page-00-database.md) + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 1 | Page type `0x00` | +| `0x01` | 3 | Unknown (observed `01 00 00`, constant) | +| `0x04` | 15 | Format id ASCII: `Standard Jet DB` (`0x00`/`0x01`) / `Jet System DB` (`0x01`) / `Standard ACE DB` (`0x02`+) | +| `0x13` | 1 | NUL terminator of the id string | +| `0x14` | 1 | Version byte (`0x00` Jet3, `0x01` Jet4, `0x02` ACE12, `0x03` ACE14, `0x04` ACE15/2013 reserved-unemitted, `0x05` ACE16, `0x06` ACE17) | +| `0x15` | 1 | Version minor/update byte (`0x01` on ACE14/Access 2010, else `0x00`) | +| `0x16` | 2 | Unknown (zero) | +| `0x18`–`0x98` | 128 | **Obfuscated header** — XOR'd with the fixed 128-byte mask; the `0x18`–`0x72` fields below are offsets into it (Jet3 masks 126) | +| `0x18`, `0x1C` | 4+4 | Fixed constants `0x00000100` / `0x00000101` | +| `0x20`–`0x2C` | 4×4 | Catalog bootstrap pointers — `MSysObjects`/`MSysACEs`/`MSysQueries`/`MSysRelationships` TDEF pages (`2`/`3`/`4`/`5`); `0x20` = catalog root | +| `0x30`–`0x3B` | 12 | Reserved (zero) | +| `0x3C` | 2 | ANSI code page (LE; `0x04E4` = 1252) | +| `0x3E` | 4 | Database/encryption key (`0` = not encrypted) | +| `0x42` | 40 | Password (Jet4; Jet3 = 20) — also XOR `(int)creationDate` | +| `0x6A` | 4 | Fixed constant `0x000011A6` | +| `0x6E` | 4 | Collation: LCID (2, LE) + sort-order version at `0x71` (`0` Legacy, `1` General) | +| `0x72` | 8 | Creation timestamp — OLE `double` (days from 1899-12-30) | +| `0x98` | 4 | Fixed constant `0x00000654` (past the masked window) | +| `0x9C` | 4 | Engine version string `"4.0"` (ASCII, NUL-term) | +| `0xA0`–`0x298` | … | Zero padding | +| `0x299` | 2 | `EncryptionInfo` blob length (LE) — nonzero ⇒ ACE encrypted, `0` ⇒ not | +| `0x29B` | *len* | `EncryptionInfo` descriptor — **binary** (Office Standard/CryptoAPI RC4·AES) or `04 00 04 00`-prefixed **XML** (Agile) | +| `0x29B+len`–`0xDFF` | … | Zero padding | +| `0xE00` | 512 | User commit-byte table (256 × 2 bytes; idle slot `00 01`) | + +--- + +## Data page — type `0x01` → [page-01](page-01-data-and-rows.md) + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 1 | Page type `0x01` | +| `0x01` | 1 | Flags (`0x01`) | +| `0x02` | 2 | Free space | +| `0x04` | 4 | Owning TDEF page — or ASCII `LVAL` (`0x4C41564C`) for long-value pages | +| `0x08` | 4 | Jet4-only, zero observed | +| `0x0C` | 2 | Row count | +| `0x0E` | 2×N | Row-slot directory | + +**Row-slot entry (2 bytes):** offset = `slot & 0x1FFF`; `0x8000` deleted; `0x4000` overflow/lookup. + +**Inline row record → [page-01](page-01-data-and-rows.md):** +``` +[colCount:2 = maxColumnId+1] [fixed data] [var data] [varOffsetTable:(numVar+1)×2] [numVar:2] [nullBitmap:ceil(colCount/8)] +``` +Variable section (`varOffsetTable`+`numVar`) omitted when the table has no variable columns. Null bitmap keyed by column id (set = present); dead ids' bits set. Booleans carry no data (the bit *is* the value). + +--- + +## TDEF header — type `0x02` → [page-02a](page-02a-tdef.md) + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 1 | Page type `0x02` | +| `0x01` | 1 | Flags (`0x01`) | +| `0x02` | 2 | Free space | +| `0x04` | 4 | Next TDEF page (0 = single page) | +| `0x08` | 4 | TDEF length (total logical bytes) | +| `0x0C` | 4 | Constant marker `0x00000659` | +| `0x10` | 4 | Row count | +| `0x14` | 4 | AutoNumber high-water = last assigned id (next = `+ 0x18`); seed `= 0x14 + increment` | +| `0x18` | 4 | AutoNumber increment (signed int32; default 1) | +| `0x1C` | 4 | Complex-type AutoNumber high-water | +| `0x20` | 8 | Unknown / reserved (zero) | +| `0x28` | 1 | Table type: `0x4E` 'N' user / `0x53` 'S' system | +| `0x29` | 2 | Maximum column count (id high-water; lifetime cap 255) | +| `0x2B` | 2 | Variable-length column count (high-water) | +| `0x2D` | 2 | Live column count | +| `0x2F` | 4 | Logical index count | +| `0x33` | 4 | Real index count (index-data blocks) | +| `0x37` | 4 | Owned-pages usage-map pointer (1-byte row + 3-byte page) | +| `0x3B` | 4 | Free-pages usage-map pointer | +| `0x3F` | — | Start of index-statistics blocks | + +**Continuation-page header (8 bytes, multi-page TDEF):** `[0x02][0x01][free:2][nextPage:4]`. + +**Body order** (after header): index stats (`0x33`×12) · column descriptors (`0x2D`×25) · column names · index-data blocks (`0x33`×52) · index-info blocks (`0x2F`×28) · index names · per-long-value-column usage maps (×10) + `0xFFFF` terminator. + +--- + +## Column descriptor — 25 bytes → [page-02b](page-02b-columns.md) + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 1 | Data type (see codes below) | +| `0x01` | 2 | Marker `0x0659` | +| `0x03` | 2 | Unknown (zero) | +| `0x05` | 2 | Column id | +| `0x07` | 2 | Variable-table index (0 for fixed) | +| `0x09` | 2 | Column number (= id, until an `ALTER COLUMN` burns a new id at `0x05`) | +| `0x0B` | 1 | Precision (Decimal) — else locale low byte `0x09` | +| `0x0C` | 1 | Scale (Decimal) — else locale high byte `0x04` | +| `0x0D` | 2 | Sort-order version (0 = General legacy) | +| `0x0F` | 1 | Flags: `0x01` fixed, `0x02` updatable, `0x04` auto-number, `0x40` auto-number GUID, `0x80` hyperlink | +| `0x10` | 1 | Extended flags: `0x01` compressed-Unicode capable, `0xC0` calculated | +| `0x11` | 4 | Unknown (zero) | +| `0x15` | 2 | Fixed-data offset within the row's fixed region | +| `0x17` | 2 | Length (bytes) | + +Nullability is **not** in the descriptor — it's the `Required` property in `LvProp` (see [system-catalog](system-catalog.md)). + +--- + +## Index statistics block — 12 bytes, one per real index → [page-02d](page-02d-constraints.md) + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 4 | Total entry count — compact-time only (`0` in a live-edited file) | +| `0x04` | 4 | Unique entry count — maintained live, cumulative, never decremented | +| `0x08` | 4 | Reserved (zero) | + +## Index-data block — 52 bytes, one per real index → [page-02d](page-02d-constraints.md) + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 4 | Marker `0x00000783` | +| `0x04` | 30 | 10 column slots × (2-byte id + 1-byte flags); id `0xFFFF` = unused, flag `0x01` = ascending | +| `0x22` | 1 | Usage-map row | +| `0x23` | 3 | Usage-map page | +| `0x26` | 4 | B-tree root page | +| `0x2A` | 4 | Unknown / reserved (zero) | +| `0x2E` | 2 | Flags: `0x01` unique, `0x02` ignore-nulls, `0x08` required, `0x80` always-set | +| `0x30` | 4 | Unknown / reserved (zero) — trailing bytes of the 52-byte block | + +## Index-info block — 28 bytes, one per logical index → [page-02d](page-02d-constraints.md) + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 4 | Marker `0x00000659` | +| `0x04` | 4 | Logical index number (`index_num`) | +| `0x08` | 4 | Real index-data block ordinal (`index_num2`) | +| `0x0C` | 1 | FK type: `0x00` none, `0x01` incoming, `0x02` outgoing, `0x03` outgoing NO INDEX | +| `0x0D` | 4 | Matching logical block's `index_num` on the other table (`0xFFFFFFFF` = none) | +| `0x11` | 4 | FK table page (other table's TDEF; non-zero ⇒ relationship) | +| `0x15` | 1 | Update action: `0x04` plain, `0x00`/`0x01` no-cascade/cascade | +| `0x16` | 1 | Delete action (same encoding) | +| `0x17` | 1 | Index type: `0x00` secondary, `0x01` primary, `0x02` foreign | +| `0x18` | 4 | Unknown / reserved (zero) — trailing bytes of the 28-byte block | + +--- + +## Long-value in-row descriptor — 12 bytes → [long-values](long-values.md) + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 3 | Length (24-bit) | +| `0x03` | 1 | Flags: `0x80` inline, `0x40` single LVAL page, `0x00` multi-page chain | +| `0x04` | 1 | Row | +| `0x05` | 3 | Page | +| `0x08` | 4 | Reserved | + +**Per-long-value-column usage-map list entry (10 bytes; list ends at `col_num == 0xFFFF`):** + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 2 | `col_num` (`0xFFFF` terminates) | +| `0x02` | 4 | `used_pages` pointer (row + page) | +| `0x06` | 4 | `free_pages` pointer (row + page) | + +--- + +## Usage maps → [page-05](page-05-usage-maps.md) + +**Inline (type `0x00`):** `[0x00][startPage:4][bitmap…]` — bit `i` ⇒ page `startPage+i` owned. +**Reference (type `0x01`, 69 bytes):** `[0x01][17 × 4-byte bitmap-page pointers]`. +**Bitmap page (type `0x05`):** header `[0x05][0x01][0][0]`, bitmap from offset 4. +Global free-pages map: **page 1, row 0**, inline — set bit = **free** (opposite of a table map). + +--- + +## Index B-tree page header — types `0x03` / `0x04` → [page-03-04](page-03-04-index-btree.md) + +| Offset | Size | Meaning | +| --- | --- | --- | +| `0x00` | 1 | Page type `0x03` node / `0x04` leaf | +| `0x01` | 1 | Flags (`0x01`) | +| `0x02` | 2 | Free space | +| `0x04` | 4 | Owning TDEF page | +| `0x08` | 4 | Jet4-inserted field (zero); shifts the following fields +4 vs Jet3 | +| `0x0C` | 4 | Previous leaf page (0 = leftmost) | +| `0x10` | 4 | Next leaf page (0 = rightmost) — load-bearing for Access's scan | +| `0x14` | 4 | Child-tail page (node: rightmost child) | +| `0x18` | 2 | Compressed-byte count (shared key-prefix length) | +| `0x1A` | 1 | B-tree level/height (leaf must be `0`) | +| `0x1B` | … | Entry-position bitmask (set bits = entry end-offsets) | +| `0x1E0` | — | Start of entry data | + +**Entry trailing pointer (4-byte big-endian):** leaf → row id (`page = ptr>>8`, `row = ptr&0xFF`); node → child page. + +**Key flag byte:** present `0x7F` asc / `0x80` desc; null `0x00` asc / `0xFF` desc. (Boolean: no flag; `0x00` true, `0xFF` false.) + +--- + +## Data-type codes → [data-types](data-types.md) + +| Code | Type | | Code | Type | +| --- | --- | --- | --- | --- | +| `0x01` | Boolean | | `0x0A` | Text | +| `0x02` | Byte | | `0x0B` | OLE (long value) | +| `0x03` | Int16 | | `0x0C` | Memo (long value) | +| `0x04` | Int32 | | `0x0F` | GUID (16 bytes) | +| `0x05` | Currency (int64/10000) | | `0x10` | FixedPoint (Numeric/Decimal, 17 bytes) | +| `0x06` | Single | | `0x12` | Complex (multi-value/attachment) | +| `0x07` | Double | | `0x13` | Int64 / BIGINT (ACE 16 / 2016, variable) | +| `0x08` | DateTime (double, 1899-12-30) | | `0x14` | DateTimeExtended / DATETIME2 (ACE 17 / 2019+, 42-byte ASCII) | +| `0x09` | Binary | | | | + +--- + +## Catalog tables → [system-catalog](system-catalog.md) + +- **MSysObjects** (TDEF page 2): `Id`, `Name`, `Type` (1 table, 5 query/view), `Flags`, `ParentId`, `Owner`, `DateCreate`/`DateUpdate`, `LvProp` (property blob). +- **MSysACEs** (4 cols): `ObjectId`, `SID`, `ACM`, `FInheritable` — two rows per object. +- **MSysQueries** (8 cols): `ObjectId`, `Attribute`, `Flag`, `Name1`, `Name2`, `Expression`, `Order`, `LvExtra`; PK `(ObjectId, Attribute, Order)`. +- **MSysRelationships**: `szRelationship`, `szObject`, `szColumn`, `szReferencedObject`, `szReferencedColumn`, `icolumn`, `ccolumn`, `grbit` (`0x02` don't-enforce, `0x100` cascade-update, `0x1000` cascade-delete, `0x2000` delete-set-null). +- **LvProp blob:** `MR2\0` signature, then `[int len][short type][body]` blocks; type `0x80` = name pool; per-owner entries are `[short entryLen][byte DDL flag][byte dataType][short nameIndex][short valueLen][value]`. DDL flag `0x01` marks a definition-protected/schema property and `0x00` an ordinary property; it is preserved per entry. Values include `DefaultValue`, `Required`, and `CheckConstraints`. + +--- + +## Limits + +Three distinct kinds (the useful mental model): **structural** — the byte layout can't represent more, so +guard in the serializer; **engine constant** — a fixed-size buffer in ACE's reader (the format holds more), +so guard with a validator; **query-engine** — ACE's SQL-engine limits that LibRed deliberately exceeds. + +| Limit | Value | Kind | +| --- | --- | --- | +| Object / table / field name | 64 chars | engine constant (ACE `WCHAR[64]`-style; >64 corrupts the file — [page-02a](page-02a-tdef.md) §3.3) | +| Fields per table | 255 | structural (the `0x29` column-id high-water; never reused — [page-02b](page-02b-columns.md)) | +| Indexes per table | 32 | structural (`0x33` real-index count) | +| Fields per index / PK | 10 | structural (the 52-byte index-data block's fixed 10-slot column array — [page-02d](page-02d-constraints.md) §3.5) | +| Short Text length | 255 chars | validator | +| Record (excl. Long Text/OLE) | ~4000 bytes | structural (page space) | +| DB / table size | 2 GB | structural (page numbering; the reference usage map's 17 slots span just past it — [page-05](page-05-usage-maps.md)) | + +`LvProp` property **values** (DefaultValue, CheckConstraints) are variable-length and length-tolerant — no +fixed-buffer overrun like the name pool, so no storage cap to guard (the Access "255-char property" and +"2048-char validation rule" caps are DAO/UI limits, not the file format). ACE's query-engine limits (tables +per query 32, joins 16, `AND`s in WHERE 99, nested queries 50, SQL length ~64k) are the capabilities LibRed +exists to beat and are deliberately **not** guarded. diff --git a/src/LibRed/docs/format/data-types.md b/src/LibRed/docs/format/data-types.md new file mode 100644 index 00000000..e4afc0ee --- /dev/null +++ b/src/LibRed/docs/format/data-types.md @@ -0,0 +1,76 @@ +# Data types and text encoding + +> Part of the [LibRed Jet / ACE file-format reference](README.md). Cross-references use the original **§-numbers**; the [section map](README.md#section-map) says which file each lives in. + +## 6. Data types + +| Code | Type | Storage / decode | +| --- | --- | --- | +| `0x01` | Boolean | A bit in the null bitmap (no data) | +| `0x02` | Byte | 1 byte | +| `0x03` | Int16 | 2 bytes LE | +| `0x04` | Int32 | 4 bytes LE | +| `0x05` | Currency | int64 LE, scaled: value / 10000 | +| `0x06` | Single | 4-byte IEEE | +| `0x07` | Double | 8-byte IEEE | +| `0x08` | DateTime | 8-byte IEEE double, OLE-automation epoch (1899-12-30) | +| `0x09` | Binary | raw bytes | +| `0x0A` | Text | UTF-16LE, or compressed Unicode (§7); inline ≤ 255 chars | +| `0x0B` | OLE | long value (§8) | +| `0x0C` | Memo | long value (§8); text once resolved | +| `0x0F` | GUID | 16 raw bytes | +| `0x10` | FixedPoint (Numeric/Decimal) | 17 bytes: sign byte (`0x80` = negative) + 128-bit magnitude (four 32-bit little-endian words, low word last); value = magnitude / 10^scale. Precision/scale from the column descriptor (§3.4) | +| `0x12` | Complex (multi-value / attachment) | descriptor parsed; contents not materialized (out of scope for SQL/EF) | +| `0x13` | Int64 — **BIGINT** (ACE 16 / Access 2016) | 8-byte little-endian signed integer. Stored as a *variable*-length column | +| `0x14` | DateTimeExtended — **DATETIME2** (ACE 17 / Access 2019+) | fixed 42-byte ASCII `:
.' field.", matching Access). Access + > **applies the default**, **enforces Required**, and **enforces the CHECK** on its own inserts — + > including on a LibRed-created table (verified: ACE rejects an insert omitting a LibRed `NOT NULL` column). `LvProp` is stored + > on a **single LVAL page** (`LongValueWriter`, descriptor flag `0x40`) — the form Access's property + > loader requires. **Verified:** Access opens the file and **applies the default** on its own insert + > that omits the column. (An *inline* value, flag `0x80`, is written and read fine by LibRed but is + > **not** recognised by Access's property loader — established by dumping the raw descriptors; nothing + > else differs, only `MSysObjects`+`MSysACEs` are touched.) + > + > **`ALTER COLUMN … SET DEFAULT expr` / `DROP DEFAULT`** are LvProp edits only — no TDEF/type change. Both + > read the `LvProp` blob, mutate the target column's map, and rewrite it: SET replaces (or adds) that + > column's `DefaultValue`; DROP removes **only** the `DefaultValue` property, leaving `Required` (and the + > column's type) intact. ACE-verified: after a LibRed `DROP DEFAULT`, ACE no longer applies the default on + > an omit-insert yet still rejects a null in a `NOT NULL` column; `SET DEFAULT` is applied on ACE's own + > insert. (EF Core emits `ALTER COLUMN c DROP DEFAULT` in migrations.) + > + > **`ALTER COLUMN … NOT NULL` / `NULL`** is likewise an LvProp edit: NOT NULL adds the boolean `Required` + > property (the write side of what CREATE does at §3.4), NULL removes it — LibRed keeps ACE's + > `DefaultValue`-before-`Required` order by applying a co-specified DEFAULT first. ACE-verified: after a + > LibRed `NOT NULL` ACE enforces it (rejects an omitted/NULL value) and reads the column back as + > non-nullable. **ACE quirk:** ACE's *own* OLE-DB `ALTER COLUMN … NULL` does **not** clear an existing + > `Required` (the column stays required); LibRed removes the property natively, so the column becomes + > genuinely nullable and ACE then reads/accepts it as such. + > + > **`ALTER COLUMN c COUNTER(seed, increment)` reseed** (KB 884185 fix) — when `c` is already an AutoNumber + > of the same type, this changes only the *next* id, so LibRed does an **in-place TDEF header edit** (`0x14` + > = seed − increment, `0x18` = increment), not a table rebuild; ACE reads the reseeded next id (verified). + > Both ACE and LibRed **reject** reseeding a counter that participates in a relationship ("Cannot change + > field 'X'. It is part of one or more relationships." — verified both sides). Changing the numeric type + > still goes through the full column rewrite. + > + > **Promoting a plain int column to a counter** (`ALTER COLUMN COUNTER(seed, inc)`) is a **deliberate + > superset**, and also an **in-place metadata edit** — a counter is stored identically to a Long Integer, so + > LibRed only sets the descriptor's `0x04` AutoNumber flag and the header seed/increment (`0x14`/`0x18`); the + > existing values are untouched, no rebuild. ACE rejects the conversion outright (*"Invalid field data + > type"*, as does SQL Server); PostgreSQL (`ADD GENERATED AS IDENTITY`) / MySQL (`MODIFY … AUTO_INCREMENT`) / + > LibRed allow it. Round-trip verified: ACE reads the promoted counter and assigns next id = seed. Guards: + > Jet permits only one AutoNumber per table (a second is rejected), and a column in a relationship is + > rejected (matching ACE). + > + > **Demoting a counter to a plain int** (`ALTER COLUMN LONG`) is the reverse in-place edit — clear + > the `0x04` flag and reset the header to a non-AutoNumber table's state (`0x14` = 0, `0x18` = 1); values are + > kept and the column stops auto-assigning. Unlike promotion this is **not** a divergence: ACE allows it too + > (matching the Access UI's AutoNumber→Number change). Round-trip verified: ACE reads the demoted column as a + > plain int and accepts explicit ids. + > + > **Default-value interaction** (a "Random" AutoNumber *is* a counter with a `GenUniqueID()` default, so the + > flag and default combine). The insert path skips defaults for AutoNumber columns and only reads + > `GenUniqueID()` to mean "random", so: **promotion** to a sequential `COUNTER(seed)` **clears a surviving + > `GenUniqueID()` default** (otherwise the column would silently become a Random AutoNumber and ignore the + > seed); a literal default is inert on a counter and left as-is. **Demotion preserves the default** (matching + > ACE — ALTER-type keeps it): demoting a Random AutoNumber yields a plain int that still generates random ids + > via its surviving `GenUniqueID()` default (ACE-verified). + > + > **"Random" AutoNumber (New Values = Random) is a `DefaultValue` = `GenUniqueID()`.** An AutoNumber column + > whose *New Values* property is **Random** (rather than Increment) is stored as an ordinary AutoNumber column + > (descriptor flag `0x04`, TDEF `0x14`/`0x18` at their plain-counter defaults `0`/`1` and **ignored**) plus a + > **column `DefaultValue` extended-property** holding the built-in expression **`GenUniqueID()`** — the + > function that returns a random Long. There is **no** dedicated flag or "New Values" property; the + > Increment-vs-Random distinction lives entirely in this default expression. Verified against a modern + > Office-365-authored file (`Table1(ID AutoNumber, New Values=Random)`): the ID descriptor and TDEF header are + > **byte-identical** to an increment counter, and LibRed already surfaces it (`ColumnDef.DefaultValue` = + > `"GenUniqueID()"`) via the ordinary DefaultValue read path — no special handling needed to detect it. A + > Random AutoNumber **can** be created in pure SQL (not UI/DAO-only): `CREATE TABLE T (Id COUNTER DEFAULT + > GenUniqueID(), ...)` — also `AUTOINCREMENT`/`COUNTER PRIMARY KEY` forms — is accepted by ACE and yields + > genuinely random signed-Long IDs on insert (verified: `-1637443712, 1680187777, 83315118`), reading back + > byte-identical to the UI-authored column. `GenUniqueID()` **is a real ACE default-expression**, not a marker: + > `SELECT GenUniqueID()` + > errors ("Undefined function"), yet an **unquoted** `col LONG DEFAULT GenUniqueID()` **is** accepted and + > generates a **random signed Long per row** (verified: `117617513`, `904519542`, `-1470084161`). It is + > accepted **only on a `LONG` (Int32) column** — the same width a `COUNTER` stores; **every other type is + > rejected** ("Cannot place this validation expression on this field"), verified across BYTE/SHORT/SINGLE/ + > DOUBLE/CURRENCY/DECIMAL/GUID/DATETIME/BIT/TEXT. Quoting it — + > `DEFAULT 'GenUniqueID()'` — makes it a plain literal string stored verbatim. So a Random AutoNumber is + > effectively an AutoNumber column carrying the unquoted `GenUniqueID()` default. **LibRed now creates and + > inserts these**: `CREATE TABLE ( Id COUNTER DEFAULT GenUniqueID(), … )` persists the `GenUniqueID()` default + > to the column's LvProp (byte-identical to a UI/ACE-authored one, so ACE reads it as a Random AutoNumber), and + > on insert LibRed assigns a random non-zero Int32 per row instead of the sequential counter, leaving the TDEF + > high-water (`0x14`) unadvanced (as ACE does). `ColumnDef.IsRandomAutoNumber` gates this off the default text. + > A **plain (non-AutoNumber) `LONG DEFAULT GenUniqueID()`** column works too: `GenUniqueID()` is a real + > evaluable function in LibRed's expression evaluator (a random non-zero Int32), so an omitted value defaults to + > a random Long while a supplied value is kept — matching ACE, which reads and applies a LibRed-written one. + > LibRed also **enforces the LONG-only restriction at CREATE/ADD-COLUMN time** (`GenUniqueID()` on any other + > type raises "Cannot place this validation expression on this field"), matching ACE. + +- **LVAL (long-value) page** — a data page (type `0x01`) whose owner field (`0x04`) is the ASCII marker + `"LVAL"` instead of a TDEF page number. A single-page long value stores the whole payload as row 0; the + in-row reference descriptor is `[length:3][flags:1][row:1][page:3][4 reserved]` with flag `0x40` = single + page (`0x80` = inline, payload follows the descriptor; `0x00` = chained across pages). LibRed writes the + single-page form (`LongValueWriter`); chained pages for payloads larger than one page are not written yet. + + > With those fields set, Access **enumerates** a LibRed-created table (it appears in the + > schema/Tables rowset) — verified via OLE DB. Maintaining MSysObjects' indexes (the composite + > `ParentId+Name` and `Id` indexes) then lets Access **resolve the table by name** and attempt + > to open it. Opening it then requires the table's own structures to be byte-valid to Access + > (see §3.7). + +- **Views / queries** are `MSysObjects` rows of **Type 5** with a **negative synthetic `Id`** (queries + increment from `0x80000000`), `ParentId 0x0F000001`, `Flags 0x10000000`, `LvProp` null. + + > **MSysQueries columns (8, verified vs Northwind).** The table has exactly: `ObjectId` (Int32, the + > query object's `Id`), `Attribute` (Byte, the row kind — see below), `Flag` (Int16, attribute-specific), + > `Name1` and `Name2` (Text, attribute-specific names), `Expression` (Memo, attribute-specific text — + > SQL fragments), `Order` (Binary, a 4-byte big-endian per-attribute sequence counter), and `LvExtra` + > (Int32) — a long-value/overflow field that is **null in every Northwind query row** and that LibRed + > leaves null (not needed for the queries it writes). Only index = composite PK `(ObjectId, Attribute, + > Order)`. + + The query itself is stored in **MSysQueries**, decomposed into rows keyed by `ObjectId`, each with an `Attribute` + byte (Jackcess "query rows", verified vs ACE for the "simple SELECT" a view may contain): `0x00` = + query type (`Flag 1` = SELECT), `0x02` = a **declared parameter** (`Name1`=parameter name, `Flag`=Jet + type code — same codes as on-disk column types, e.g. `8`=DateTime; one row per parameter, `Order` + 1-based), `0x03` = flags (`Flag 2` = DISTINCT; **`Flag 0x10` = TOP**, with `Name1` = the count as text, + e.g. `Name1=10`), `0x05` = FROM source, `0x06` = + output column (`Expression`=verbatim text; **`Name1`=the column's output alias** when it has one, e.g. + `Expression=Customers.CompanyName`, `Name1=CustomerName`; a computed column stores its whole verbatim + expression, `Expression=(FirstName + ' ' + LastName)`, `Name1=Salesperson`), `0x07` = join + (`Expression`=condition, `Flag`=kind, and **`Name1`/`Name2`=the two tables named in the condition** — + `Customers.CustomerID = Orders.CustomerID` → `Name1=Customers`, `Name2=Orders`), `0x08` = WHERE + (`Expression`), `0x09` = a **GROUP BY** column (`Expression`; one row per group column, in order — + their presence makes it a "totals" query, and the aggregate output columns are ordinary `0x06` rows, + e.g. `Expression=Sum(...)`), `0x0B` = an **ORDER BY** key (`Expression`=the sort column, `Name1`=`"d"` + for **descending**, absent for ascending; one row per key, `Order` 1-based — verified against Northwind's + "Ten Most Expensive Products", `SELECT TOP 10 … ORDER BY Products.UnitPrice DESC`), `0xFF` = end. A **FROM source** (`0x05`) is either a **named table** + (`Name1`=table, `Name2`=alias) or a **derived table / subquery** (`Expression`=the verbatim inner + subquery SQL — outer parens and `AS alias` stripped, whitespace preserved — `Name2`=alias, **no `Name1`**; + verified against Northwind's "Customer and Suppliers by City"). **Nested / parenthesised joins are stored + flat** — one `0x05` per base table and one `0x07` per join condition, no grouping — so Access re-derives + the join tree from the conditions (verified against "Invoices": 6 tables, 5 flat joins). `Order` is a 4-byte **big-endian** + per-attribute counter (stored in the Binary `Order` column). MSysQueries' only index is the composite PK + `(ObjectId Int32, Attribute Byte, Order Binary)`; its Binary key encodes as `0x7F` + the raw bytes + + `00 00 00 00` + a length byte. + + > **Row order matters.** Access writes the rows in the order **type, end, parameters (`0x02`), distinct/top, + > tables (`0x05`), columns (`0x06`), joins (`0x07`), where (`0x08`), group-by (`0x09`), order-by (`0x0B`)** — *tables before columns* (verified across five + > Northwind views). Access tolerates the wrong order for a **named** table, but a **derived** table + > defines an alias the column expressions reference, so its `0x05` row must precede the `0x06` rows or + > Access opens the database yet **fails to run the view**. + > + > **Long `Expression` lives on an LVAL page.** `Expression` is a Memo, so a subquery longer than the + > 64-byte inline limit is written to an LVAL page (§8) — required for Access to *run* the view (an + > inlined long value opens but won't execute). Verified: a LibRed derived-table UNION view returns the + > same rows in Access as the equivalent Northwind view. + > + > **CREATE PROCEDURE** is stored identically to a view (Type-5 `MSysObjects` row + `MSysQueries` rows) — + > a stored query is a stored query — with one `0x02` parameter row per declared parameter. The Access + > syntax accepts the parameter list either bare or **parenthesised**, and a parameter may be written + > `@name`; Access stores the **bare** name (the `@` is stripped — `@Beginning_Date` → `Name1=Beginning_Date`) + > while the body keeps the `@` reference verbatim: `CREATE PROCEDURE name (p1 datatype, p2 datatype) AS + > select` or `CREATE PROCEDURE name p1 datatype AS select`. Verified: a LibRed-written parameterized query + > runs in Access and honours supplied parameter values. **Read-back:** LibRed reconstructs a parameterized query with a leading `PARAMETERS + > name Type, …;` clause (the `0x02` rows) and lowers body references to a declared name into engine + > parameters, so LibRed's own engine executes the stored procedure when values are supplied. + > + > **Action-query procedure bodies** (a CREATE PROCEDURE body that is not a SELECT) are stored with a + > different MSysObjects `Flags` and an `Attribute=0x01` row (verified vs ACE): + > - **Data-definition** (CREATE TABLE / DROP TABLE): MSysObjects `Flags=0x10000060`; one `0x01` row with + > `Flag 7` and `Expression` = the **whole DDL statement** verbatim (ACE prepends a single space). + > - **Append** (INSERT): MSysObjects `Flags=0x10000040`; a `0x01` row with `Flag 3` and `Name1` = the + > target table, then one `0x06` column row per appended column — `Name2` = target column, `Expression` + > = the value; `Flag 0x8000` marks an INSERT … **VALUES** append (an INSERT … **SELECT** instead uses + > `Flag 0` on the `0x06` rows plus the usual `0x05` table / `0x08` where rows). + > + > (A plain view/SELECT query uses `Flags=0x10000000` and no `0x01` row.) LibRed writes CREATE TABLE and + > INSERT … VALUES bodies; INSERT … SELECT and UPDATE/DELETE are not written yet. **Read-back:** LibRed + > reconstructs a stored action query from these rows (DDL → the verbatim SQL; INSERT … VALUES → a rebuilt + > `INSERT INTO t (cols) VALUES (…)`) and executes it by name; kinds it can't run (INSERT … SELECT, etc.) + > read back with an "unsupported" reason and throw when executed. + +- **MSysRelationships** defines foreign keys (one row per relationship column): `szRelationship` + (name), `szObject` (child/referencing table), `szColumn` (child column), `szReferencedObject` + (parent table), `szReferencedColumn`, `icolumn` (0-based column order within the key), + `ccolumn` (total column count of the key, repeated on every row), `grbit` (flags: `0x02` + don't-enforce, `0x100` cascade-update, `0x1000` cascade-delete, `0x2000` delete-set-null). Verified against Northwind: an + enforced, no-cascade single-column FK stores `ccolumn = 1`, `icolumn = 0`, `grbit = 0`; the + cascade nav-pane relationships store `grbit = 0x1100` (update+delete cascade). + + > **Writing a relationship.** Access records a relationship purely in `MSysRelationships` (there is + > **no** `MSysObjects` row for it) **plus** a non-unique index on the child table's FK column(s) — + > enforcement requires the child FK to be indexed and the parent key to be uniquely indexed (the + > parent PK). LibRed writes the `MSysRelationships` rows, creates that child-side index, **and** the + > byte-faithful relationship logical-index linkage in *both* tables' TDEFs (§3.6: outgoing block on + > the child, incoming block on the parent, cross-referenced by `index_num`) at `CREATE TABLE` time. + > Verified: a LibRed-created relationship is byte-identical to an ACE-created one (bar index *names*), + > Access opens the file without repair, and `GetOleDbSchemaTable(Foreign_Keys)` enumerates it. + > + > **`ALTER TABLE … ADD CONSTRAINT … FOREIGN KEY`** writes the *same* linkage, but **surgically** onto the + > two existing (empty) TDEFs: it inserts the child's backing index + outgoing block into the child TDEF + > (the shared index-insert path, name-sorted) and appends the incoming block to the parent TDEF, then the + > `MSysRelationships` rows — no format difference from the inline case (and the child index is + > back-filled if the table already has rows). Verified: Access reads and **enforces** a LibRed-`ALTER`-added + > FK (RI rejects an orphan child row). A **self-reference** (child = parent, e.g. Employees.ReportsTo → + > EmployeeID) hosts both ends in the one TDEF: the outgoing block links to an incoming block numbered one + > past it (`Fk_number = outgoing index_num + 1`), and the incoming block's `index_num2` = the table's own + > referenced-key (PK) data block — verified read+enforced vs ACE. `FOREIGN KEY NO INDEX` via `ALTER` is + > not written yet. + > + > **`DROP INDEX` vs a relationship (ACE-verified).** ACE refuses to drop an index only if it *is* a + > relationship's enforcement index, keyed on the **specific index**, not its columns: on the child, the + > FK's own backing index (named after the relationship); on the parent, the referenced unique/primary key. + > A *redundant* index over the same column(s) — e.g. an explicit `IX_child_col` alongside the FK's index, + > which EF creates then drops once the FK provides its own — **is** droppable while the relationship + > stands (`"used in a relationship"` fires only for the enforcement index). LibRed matches this: the + > `DropIndex` guard protects the child index whose name equals a relationship name and the parent's + > unique/PK referenced key, and scaffolding hides the child FK index (so a database cleaner drops the + > relationship via the table, not by dropping that index). + > + > **Renaming a table or column (ACE-verified).** Because this table stores its tables and columns **by + > name**, a rename has to repoint them — and ACE does. Measured (Jet suite's `RenameFanOutProbeTest`, + > against a real ACE engine via the DAO/ADOX rename path): renaming a table rewrites `szObject` / + > `szReferencedObject`, renaming a column rewrites `szColumn` / `szReferencedColumn`, and in both cases the + > relationship keeps its own `szRelationship` name and its enforcement — the rename is **not** refused for a + > table in an enforced relationship. Nothing else moves: indexes (including the PK) keep their own names and + > need no fixup because they reference the table and its columns **by id**, and a renamed column keeps its + > `DEFAULT` (ACE rewrites the name-keyed entry in the table's `LvProp` blob). Stored queries are **not** + > rewritten — a view naming the old object is left dangling and fails with *"cannot find the input table or + > query"* (Name AutoCorrect is an Access *application* feature, so it never runs for an engine-level rename). + > LibRed reproduces exactly this, deliberately including the dangling query. + > + > **Name collisions.** Tables and saved queries share **one namespace**: ACE rejects renaming a table onto + > the name of an existing table *or* an existing query (both verified). Note the unique `(ParentId, Name)` + > index does **not** enforce the table/query half of that on its own — the two object kinds sit in different + > containers, so they differ in `ParentId`. A rename therefore has to pre-check `MSysObjects` for a matching + > `Name` with `Type` 1 (table) or 5 (query), which is what LibRed does — **excluding the object being + > renamed**, which cannot collide with itself: ACE allows renaming a table to its own name, and allows a + > case-only change (both verified). The self-rename case is not hypothetical — EF models "move a table to + > another schema" as a rename, and on a schema-less engine that degrades to `RENAME TO` the *same* name. + + +--- + +## Complex columns (attachment / multi-value) — `MSysComplexColumns`, `MSysComplexType_*`, `f__*` + +The Access **Complex** column (on-disk type `0x12`, len 4 — see [data-types](data-types.md)) implements +attachment and multi-value columns. Its in-row value is a 4-byte **complex id**; the actual data lives in a +per-column backing table, wired up through hidden system tables. Decoded from the dev-edition Northwind +fixture; LibRed **reads every piece as an ordinary table but does not yet auto-resolve** a `0x12` column to +its backing rows (a `SELECT` of it returns the raw 4-byte id as `byte[]`). + +Three layers, all ordinary hidden/system tables: + +1. **The user table** holds the `Complex` column; each row's value is the 4-byte complex id. +2. **`MSysComplexColumns`** maps each complex column to its backing table: + `(ColumnName, ComplexID, ComplexTypeObjectID, ConceptualTableID, FlatTableID)`. E.g. + `Attachments | 3 | 39 | 79 | 150` = the `Attachments` column of table `79`, element type **39** + (`MSysComplexType_Attachment`), backed by flat table **150** = `f__Attachments`. +3. **`MSysComplexType_*`** — nine schema templates, one per element subtype, matching the DAO `dbComplex*` + codes: `UnsignedByte, Short, Long, IEEESingle, IEEEDouble, GUID, Decimal, Text, Attachment`. + `MSysComplexType_Attachment` = `FileData:Ole, FileFlags:Int32, FileName:Text, FileTimeStamp:DateTime, + FileType:Text, FileURL:Memo`. +4. **`f__`** — the actual data, one row per value/attachment: `_:Int32` (PK), + `_:Int32` (FK back to the owning row), then the subtype's value columns. For an + Attachments column the rows are the real files (`FileData` = OLE `byte[]`, `FileName`, `FileType`); + a multi-value scalar column is the same shape with just the value column + FK. + +**To materialize** (if ever needed): read the row's `0x12` id → look up its column in `MSysComplexColumns` → +open `FlatTableID`'s `f_` table → select rows whose FK equals that id. All readable today by hand. diff --git a/src/LibRed/docs/functions.md b/src/LibRed/docs/functions.md new file mode 100644 index 00000000..a7fd1b8c --- /dev/null +++ b/src/LibRed/docs/functions.md @@ -0,0 +1,136 @@ +# Supported functions (VBA / Access expression surface) + +LibRed's expression evaluator (`LibRed.Engine/Execution/ExpressionEvaluator.cs`) implements the Access / +Jet scalar function surface. This is the authoritative catalog of what's supported. + +**Where functions can be used.** There is **one** `ExpressionEvaluator`, shared by every place an +expression appears — so a function added for one context is available in all of them: + +- `SELECT` projections, `WHERE`, `ORDER BY`, `GROUP BY` / `HAVING` +- column `DEFAULT` expressions (see [page-02c-default-values.md](format/page-02c-default-values.md)) +- table/column `CHECK` constraints + +The only difference between contexts is the **scope**: a query evaluates against a **row scope** (so +`IIf([N] > 10, …)` can read column `N`), while a `DEFAULT` / niladic-context evaluates against an **empty +scope** (a column reference throws "Column not found" — a default is row-blind by design). + +**Conventions.** All functions **propagate NULL** (a NULL argument yields NULL) unless noted; string +positions are **1-based**; string comparisons default to **case-insensitive** (Access "Option Compare +Database" = Text) and take an optional compare argument. Values follow VBA sign/rounding conventions +(`CInt`/`CLng`/`CByte` use banker's rounding). + +> **Two expression services — what "ACE has it" means.** Access has (1) the **Jet/ACE OLE DB Expression +> Service (JES)**, the built-in set the ACE OLE DB provider carries **standalone**, and (2) the **Access +> Application Expression Service**, the full VBA runtime available only inside `MSACCESS.EXE`. LibRed targets +> the **JES (standalone)** surface — the correct reference for a standalone engine. Functions that live only +> in the application service (`Nz`, `Split`, `Environ`, `CurDir`, `CurrentUser`, the domain aggregates +> `DCount`/`DLookup`/…) are therefore **correctly absent**, matching the OLE DB provider ("Undefined +> function"), not a gap. The whole surface below is **verified against ACE's JES** via a function-whitelist +> probe sweep (`FunctionWhitelist*Probe`); it is close but *not proven exhaustive* — re-run the sweep when in +> doubt. + +--- + +## Scalar functions + +**Type conversion** — `CBool` `CByte` `CInt` `CLng` `CSng` `CDbl` `CCur` `CDec` `CStr` `CDate` `CVar` +(`CVar` is a pass-through — LibRed has no distinct Variant type; `CCur` rounds to 4 dp). + +**Math** — `Abs` `Sgn` `Int` (floor, toward −∞) `Fix` (truncate, toward zero) `Round` (banker's) `Sqr` +`Exp` `Log` (natural) `Sin` `Cos` `Tan` `Atn` `Rnd` `Timer`. + +**String** — `Len` `LCase` `UCase` `Trim` `LTrim` `RTrim` `Left` `Right` `Mid` `InStr` `InStrRev` `Replace` +`Space` `String` `StrReverse` `StrComp` `StrConv` `Str` `Val` `Chr` `Asc` `Hex` `Oct`. + +**Formatting** — `Format` (VBA→.NET custom + named formats; culture-driven, so date/currency named formats +are locale-dependent by design) · `FormatCurrency` `FormatNumber` `FormatPercent` `FormatDateTime` · +`Partition` (a `"lower:upper"` range-bucket label). + +**Date / time** — `Now` `Date` `Time` · `DateAdd` `DateDiff` `DatePart` `DateSerial` `TimeSerial` +`DateValue` `TimeValue` · `Year` `Month` `Day` `Hour` `Minute` `Second` `Weekday` (Sunday = 1) · `MonthName` +`WeekdayName` · `IsDate`. (`Time`/`TimeValue` sit on the Jet epoch 1899-12-30.) + +**Logical / selection** — `IIf` `Choose` (1-based; out-of-range → NULL) `Switch` (first true condition's +value; even arg count required). + +**Inspection / predicates** — `IsNull` `IsNumeric` `IsDate` `IsError` (always False — LibRed has no error +value type) `TypeName` `VarType`. + +**Financial** (closed-form annuity/depreciation; `Rate` by Newton–Raphson; verified vs ACE to ~1e-6) — +`Pmt` `FV` `PV` `NPer` `IPmt` `PPmt` `Rate` `SLN` `SYD` `DDB`. (`IRR`/`NPV` need an array argument — no +scalar-SQL form.) + +**Colour** — `RGB` (`r + g·256 + b·65536`) · `QBColor` (16-entry BGR table). + +### Name variants (`$` / `B` / `W`) + +- **`$` — string-returning** (`Left$`, `UCase$`, `Chr$`, `Str$`, `Format$`, …): the lexer allows a trailing + `$` on an identifier and the evaluator strips it before dispatch, so **every** base function gains its `$` + form and computes the same value. (ACE exposes `$` only for classic functions; the alias is harmless where + ACE doesn't.) +- **`B` — byte-based** on the UTF-16 layout (2 bytes/char): `AscB` `LenB` `LeftB` `RightB` `MidB` `InStrB` + (`LenB('abc')` = 6). `ChrB` is intentionally **absent** (ACE's JES has none either). +- **`W` — wide / Unicode code point**: `AscW` (first char's code point) · `ChrW` (char for a code point, not + limited to a byte — `ChrW(233)` = 'é'). + +### Niladic (callable without parentheses) + +Only **`Now`** is niladic — ACE accepts bare `Now` (e.g. `DATETIME DEFAULT Now`). Bare `Date` / `Time` are +**reserved type keywords** in Jet SQL and must be written `Date()` / `Time()` (parsed as calls). A real +column named `Now` still shadows the function. + +### Default-only generators + +These are **not** callable in a `SELECT` (ACE errors "Undefined function") but are valid as a column +`DEFAULT`, evaluated per inserted row: + +- **`GenUniqueID()`** — a random signed `Long` (Int32); valid only on a `LONG` column. It is the mechanism + behind a **"Random" AutoNumber** (see [system-catalog](format/system-catalog.md)). +- **`GenGUID()`** — a fresh `Guid` per row; EF Core models it as `HasDefaultValueSql("GenGUID()")` for + store-generated GUID keys. + +(LibRed is slightly more permissive than ACE here — it *will* also evaluate `GenUniqueID()` / `CDec()` in a +`SELECT`, which ACE rejects. Harmless: it never produces a file ACE can't read.) + +--- + +## System variables + +Connection-scoped, written `@@NAME`, usable anywhere an expression is allowed: + +- **`@@IDENTITY`** — the last AutoNumber generated on this connection (NULL if none). Only overwritten by an + insert that actually generates one, so an intervening keyless insert leaves it intact — which is why EF + Core reads it in the `SELECT` immediately after an `INSERT`. +- **`@@ROWCOUNT`** — rows affected by the previous statement. + +A bare `SELECT @@IDENTITY` / `SELECT @@ROWCOUNT` (a comma list of system vars, optionally aliased) is +allowed without a `FROM` — the one all-`@@var` projection that may omit it, matching ACE. + +--- + +## Aggregate functions + +The complete Access SQL aggregate set (`QueryPlanner` + `QueryExecutor`), each supporting `DISTINCT`: + +`Count` · `Sum` · `Avg` · `Min` · `Max` · `First` / `Last` (first/last row's value in scan order — **not** +null-filtered) · `StDev` / `Var` (sample: ÷ n−1, NULL for n < 2) · `StDevP` / `VarP` (population: ÷ n). +`StdDev` / `StdDevP` are accepted spellings. + +**Result-type contract** (matches Access + LINQ so the EF provider round-trips without a cast): `Sum` +**preserves the input type** (int→int, long→long, decimal→decimal); `Avg` is `Double` unless the input is +Currency/Decimal; `Min`/`Max` keep the column's own value and type; `Sum`/`Avg`/`Min`/`Max` of no rows is +NULL (`Count` returns 0). + +--- + +## Not supported (by design) + +- **Access-application-only** (JES-undefined, so correctly absent): `Nz`, `Split`, `CurDir`, `CurrentUser`, + `Environ`, `Randomize`, and the domain aggregates. `Split` also returns a Variant array (no scalar-SQL + representation). +- **No scalar-SQL form:** `IRR` / `NPV` (array argument); `Array` / `Join` / `CVErr` (VBA-only). +- **Argument arity is not validated** — LibRed reads the arguments it needs and ignores extras, where ACE + errors "Wrong number of arguments". A cross-cutting lenience, not per-function. + +See [page-02c-default-values.md](format/page-02c-default-values.md) for how these functions behave specifically in a column +`DEFAULT` (the DDL-parser-vs-expression-service split, and the forbidden categories). diff --git a/src/LibRed/docs/jet-ace-file-format.md b/src/LibRed/docs/jet-ace-file-format.md new file mode 100644 index 00000000..c0f945f5 --- /dev/null +++ b/src/LibRed/docs/jet-ace-file-format.md @@ -0,0 +1,6 @@ +# Jet / ACE file format — LibRed reference + +> **This spec has moved.** It is now split by page type under [`format/`](format/README.md) — +> start at [`format/README.md`](format/README.md), which maps every page type and the original +> §-numbers to their new files. For a bare field-layout lookup, see +> [`format/appendix-structures.md`](format/appendix-structures.md). diff --git a/src/LibRed/docs/mdbtools-spec-diff-todo.md b/src/LibRed/docs/mdbtools-spec-diff-todo.md new file mode 100644 index 00000000..d533ef39 --- /dev/null +++ b/src/LibRed/docs/mdbtools-spec-diff-todo.md @@ -0,0 +1,109 @@ +# TODO — mdbtools `HACKING.md` vs our `jet-ace-file-format.md` + +Differences between the mdbtools format notes and our spec that warrant investigating or +confirming against real files. **Source:** mdbtools `HACKING.md` (github.com/mdbtools/mdbtools, +`dev`) cross-checked against `jet-ace-file-format.md`, 2026-06-30. + +> **Caveat — mdbtools rarely pins the data value.** Its tables list a field's *name, length, and +> order* but usually leave the "data" column as `????`. So a value we assert and mdbtools leaves +> blank is **not** a conflict — only treat genuine name/length/offset/semantic mismatches as items +> here. Most structures already agree (data/index/usage-map page headers, row format, column types, +> the §3.3.2 variable/LVAL-column-tracking terminator, index-info FK/cascade/type fields); those +> are omitted. + +## Items to confirm + +- [x] **TDEF `0x0C` — constant `0x659`, or a per-TDEF "definition id"?** **Resolved: a fixed + constant.** Surveyed `0x0C` across all 33 Northwind tables (user/system/complex-type/hidden) and + freshly ACE-created tables — every one reads `1625` (`0x659`), and the header value equals the + first column-descriptor marker in each. So mdbtools' "Matches definition block" is just a shared + constant appearing in several spots, not a table-scoped id. Our writer's fixed `0x659` is correct + (no write bug). The mdbtools "*or 0*" variant never appeared (possibly Jet 3 / degenerate). + Spec §3.1 note updated. + +- [x] **TDEF header `0x18`–`0x27` semantics.** **Investigated** (read Northwind + ACE-created + autonumber vs plain tables). Findings, now in §3.1: + - `0x18` is **not** a per-table autonumber flag — it's `0x01` on *every* table (autonumber, + non-autonumber, text-PK), i.e. a plain constant. mdbtools' "autonum_flag" label is misleading. + - `0x14` (which we already document) is the **highest AutoNumber assigned**, not the "next": + Categories (8 rows) = 8, an ACE table after 2 inserts = 2, non-autonumber tables = 0. Next id is + `+1`. Corrected the label. + - `0x1C` (`ct_autonum`, complex-type autonumber) split out as its own 4-byte field; `0` in every + table observed. **Not** positively confirmed non-zero — OLE DB DDL can't create a complex + (multi-value/attachment) column, so this needs a fixture built another way to see it populated. + - `0x20`–`0x27` reserved, zero observed. + +- [x] **Index-data block (§3.5) — flags offset.** mdbtools puts `flags`(1 byte) at block **`+0x2A`**; + we document the index flags at **`+0x2E`**. **Resolved:** in real files `+0x2A`–`+0x2D` is **zero** + (4 bytes) and the effective flags (`0x80` always-set on Orders' first index, `0x89` on a PK) are at + `+0x2E`. So our `+0x2E` is correct; mdbtools' `+0x2A` flags byte is zero/unused in ACE. §3.5 now + documents `+0x2A` (4 reserved) and `+0x30` (4 reserved) explicitly. + +- [x] **Index statistics block (§3.3.1) — field meaning.** **Resolved** via an ACE + insert/delete/insert probe. `+0x04` (mdbtools `num_idx_rows`) is the **unique-entry count**: + maintained live per insert, cumulative, never decremented (3 → 3 after delete → 4). `+0x00` + ("total") is **not** live-maintained — Access leaves it `0` through inserts and only writes the + row count on compact (saved Northwind reads `total == rowCount`, a live insert reads `0`), which + corrected our spec's "total = row count" claim. LibRed now maintains `+0x04` on insert and leaves + `+0x00` at 0 (fix committed). + +- [x] **Column descriptor `0x0D` — text sort-order version.** **Resolved.** `0x0B`–`0x0E` is a 4-byte + sort-order descriptor: locale `0x0409` at `0x0B`, **version** at `0x0D`. mdbtools states it + explicitly (note after its index-record section): the encoding is Access 2000–2007 **General** = + (1033, **version 0**); Access 2010 renamed that **"General legacy"** and made a *new* default + **General** = (1033, **version 1**) with different key bytes. Observed `0x0D = 0` on every ACE-2007 + Northwind column and on a text column freshly created by the ACE 16 engine (the file is ACE-2007 + format, so the engine writes v0). **Implication:** LibRed's `JetTextCollation` is the version-0 + order; a v1 file (Access 2010+, version byte ≥ 3) uses a different text-key encoding LibRed does not + handle. Documented in spec §3.4 + §10.4 and in `JetTextCollation`. See memory + `libred-text-collation-v1-gap`. (No v1 fixture available to reverse-engineer.) + +- [x] **Logical index block (§3.6) — `index_num` / `index_num2`.** **Resolved** against Northwind. + `+0x04` (`index_num`) is the logical index's unique id (`0..logicalCount-1`); `+0x08` (`index_num2`, + our reader's `DataNumber`) is the ordinal of the real index-data block it maps to + (`0..realIndexCount-1`). They differ because multiple logical indexes share one real block: a + relationship reuses the real index on *this table's* side of the FK (child column for outgoing, the + referenced PK for incoming), so the PK block is referenced by its own PRIMARY logical block *and* by + incoming relationships — verified on Orders (real block 3 = OrderID PK, shared). mdbtools' "index + into index cols list" = index into the real index-data blocks. Spec §3.6 note added. + +- [x] **§3.3.2 naming — "variable column" vs LVAL-only.** **Resolved: LVAL-only.** Correlated each + trailing-list entry with its column type: only Memo (`0x0C`) and OLE (`0x0B`) appear — never plain + Text (`0x0A`). Clincher: **Customers (11 Text columns, no memo/OLE) has an empty list**; Categories + → {col2 Memo, col3 OLE}, Employees → {col14 OLE, col15 Memo}, Suppliers → {col11 Memo}. Only + memo/OLE have LVAL page chains needing usage maps (Text is inline), so mdbtools' "Variable Column + Tracking" name is imprecise. Spec §3.3.2 note added. + +- [x] **Jet4 data-page header — the extra 4 bytes.** mdbtools notes the Jet4 data page adds an + unknown 4-byte field after `tdef_pg` (before `num_rows`) vs Jet3. **Resolved:** §4 now documents + `0x08` (4 bytes, Jet4-only, observed zero across all data/usage-map/LVAL pages; Jet3 has the row + count here). Our writer already leaves it zero. + +## Offset-gap audit (resolved) + +Audited every offset table in the spec for silent skips and made each explicit (observed values +verified against Northwind): + +- [x] **Index B-tree page header (§10.1) `0x10`–`0x13`** — zero in ACE; ACE's child-tail reads + correctly at `0x14` (e.g. 243), zero at `0x10`, whereas mdbtools puts `tail_page` at `0x10`. + **Corroborated:** mdbtools *version-labels* the entry bitmask offset — `0x16` (Jet3) / `0x1B` + (Jet4) — and that +5 Jet3→Jet4 shift is accounted for *exactly* by the inserted 4-byte field at + `0x10` plus the 1-byte field at `0x1A` (observed `0x01`). So `0x10`/`0x1A` are Jet4 insertions and + our `0x14` tail / `0x1B` bitmask offsets are confirmed. (A Jet3 file would still let us read the + pre-insertion layout directly.) +- [x] **Index-data block (§3.5) `0x2A`–`0x2D` and `0x30`–`0x33`** — both zero; documented (see flags + item above). +- [x] **Index-info block (§3.6) `0x18`–`0x1B`** — zero; documented as trailing reserved bytes. +- [x] **Page 0 (§2) `0x01`–`0x03`, `0x13`, `0x15`–`0x17`** — small gaps in the otherwise-undecoded + page-0 header; now shown explicitly (incl. the note that mdbtools reads the version as a 4-byte + word at `0x14`). + +## For later (not present in LibRed yet — record for when implemented) + +- [ ] **Memo/LVAL in-row descriptor (12 bytes).** For memo/OLE write+read: `memo_len`(3) / + `bitmask`(1: `0x80` inline, `0x40` unique-LVAL, `0x00` LVAL) / `lval_dp`(4) / unknown(4). Ties to + the §3.3.2 per-column usage maps and the LVAL ('LVAL'-owner) page chain. + +- [ ] **Jet3 row jump table.** mdbtools' Jet3 row format has a `jump_table` (used when a row exceeds + 256 bytes) and 1-byte `num_cols`/`eod`/`var_len`; Jet4 drops the jump table and widens those to + 2 bytes. Note for eventual Jet3 support (see the Jet3 fixture plan). diff --git a/test/EFCore.Jet.Data.Tests/RenameFanOutProbeTest.cs b/test/EFCore.Jet.Data.Tests/RenameFanOutProbeTest.cs new file mode 100644 index 00000000..259896f9 --- /dev/null +++ b/test/EFCore.Jet.Data.Tests/RenameFanOutProbeTest.cs @@ -0,0 +1,422 @@ +using System; +using System.Data; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace EntityFrameworkCore.Jet.Data.Tests +{ + /// + /// Measures what the ACE engine actually does to an object's dependents when a table or a column is + /// renamed through the DAO/ADOX path (what ALTER TABLE … RENAME … is intercepted into). LibRed has no + /// COM to delegate to and must do the catalog/TDEF surgery itself, so these measurements are the + /// specification for its native rename: it should fix up exactly what ACE fixes up, and no more. + /// + /// Measured behaviour, common to both (asserted below so it can't drift): + /// + /// Neither rename is refused, even with an enforced relationship involved. + /// MSysRelationships follows — it stores tables and columns by name, and ACE repoints + /// both, preserving the relationship's own name and its enforcement. + /// Indexes need no fixup: they ride along and keep their own names (they reference the table + /// and its columns by id, not by name). + /// A stored query/view breaks — ACE does not rewrite MSysQueries. Name AutoCorrect is an + /// Access application feature, so it never runs for a DAO/ADOX rename. LibRed must leave them + /// dangling too rather than "helpfully" fixing them, or the two providers diverge on the same migration. + /// + /// A renamed column keeps its DEFAULT: those properties live in the table's LvProp blob + /// keyed by column name, and ACE rewrites that key. + /// + /// + /// Everything is still written to the test output, which is what you want if a different ACE version + /// ever behaves differently. + /// + [TestClass] + [DoNotParallelize] + public class RenameFanOutProbeTest + { + private const string StoreName = nameof(RenameFanOutProbeTest) + ".accdb"; + + private JetConnection _connection; + + [TestInitialize] + public void Setup() + { + _connection = Helpers.CreateAndOpenDatabase(StoreName); + + using var command = _connection.CreateCommand( + """ + CREATE TABLE Parent (Id INT NOT NULL CONSTRAINT PK_Parent PRIMARY KEY, Name TEXT(50)); + CREATE TABLE Child (Id INT NOT NULL CONSTRAINT PK_Child PRIMARY KEY, ParentId INT, + CONSTRAINT FK_Child_Parent FOREIGN KEY (ParentId) REFERENCES Parent (Id)); + CREATE INDEX IX_Parent_Name ON Parent (Name); + CREATE VIEW vwParent AS SELECT Id, Name FROM Parent; + """); + command.ExecuteNonQuery(); + } + + [TestCleanup] + public void TearDown() + { + _connection?.Close(); + Helpers.DeleteDatabase(StoreName); + } + + [TestMethod] + public void Probe_what_a_table_rename_does_to_its_dependents() + { + Report("--- BEFORE ---"); + ReportRelations(); + ReportIndexes(); + ReportView(); + + // The rename goes through JetSchemaOperationsHandling → ISchemaOperationsProvider (ADOX/DAO). + Exception refused = null; + try + { + using var rename = _connection.CreateCommand("ALTER TABLE `Parent` RENAME TO `ParentRenamed`"); + rename.ExecuteNonQuery(); + } + catch (Exception e) + { + refused = e; + } + + ReOpenConnection(); + + Report("--- AFTER ---"); + if (refused is not null) + { + // Finding #1: ACE will not rename a table that participates in an enforced relationship. + // That is itself the behaviour LibRed must match (reject, don't silently break the FK). + Report($"RENAME REFUSED: {refused.GetType().Name}: {refused.Message}"); + Report("=> LibRed's native rename must reject this case too, rather than proceed."); + return; + } + + Report($"old name still present : {TableExists("Parent")}"); + Report($"new name present : {TableExists("ParentRenamed")}"); + ReportRelations(); + ReportIndexes(); + ReportView(); + + // Measured ACE behaviour — this is the contract LibRed's native rename must reproduce. + Assert.IsTrue(TableExists("ParentRenamed"), "Table was not renamed."); + Assert.IsFalse(TableExists("Parent"), "Old table name still resolves after the rename."); + + // The relationship follows the new name: ACE rewrites MSysRelationships, which stores tables by name. + Assert.AreEqual( + "ParentRenamed", + RelationValue("FK_Child_Parent", "PRINCIPAL_TABLE_NAME"), + "ACE did not repoint the relationship at the renamed table."); + Assert.AreEqual("True", RelationValue("FK_Child_Parent", "IS_ENFORCED"), ignoreCase: true, + "Relationship lost its enforcement across the rename."); + + // Indexes ride along with the table and keep their own names — a table rename never renames them. + Assert.IsTrue(IndexExists("ParentRenamed", "PK_Parent"), "Primary key did not follow the renamed table."); + Assert.IsTrue(IndexExists("ParentRenamed", "IX_Parent_Name"), "Secondary index did not follow the renamed table."); + + // Stored queries are NOT rewritten — Name AutoCorrect is an Access application feature, not an engine + // one, so a DAO/ADOX rename leaves the view dangling. LibRed must match this and not "helpfully" fix it. + Assert.IsFalse(ViewResolves("vwParent"), "The view still resolves — ACE rewrote the stored query, which would change LibRed's contract."); + } + + /// Whether the stored query still resolves — the direct test of whether ACE rewrote it. + private void ReportView() + { + try + { + using var command = _connection.CreateCommand("SELECT * FROM `vwParent`"); + using var reader = command.ExecuteReader(); + Report($"view vwParent : OK (resolves, {reader.FieldCount} columns)"); + } + catch (Exception e) + { + Report($"view vwParent : BROKEN — {e.Message.ReplaceLineEndings(" ")}"); + } + } + + /// + /// The column-rename counterpart. Open questions: does the column's DEFAULT (stored in the table's + /// LvProp blob, keyed by column name) survive; does an index over the column follow; does a + /// relationship that names the column follow; does a view naming it break. + /// + [TestMethod] + public void Probe_what_a_column_rename_does_to_its_dependents() + { + using (var setup = _connection.CreateCommand( + """ + CREATE TABLE Doc (Id INT NOT NULL CONSTRAINT PK_Doc PRIMARY KEY, Title TEXT(50) DEFAULT 'untitled'); + CREATE INDEX IX_Doc_Title ON Doc (Title); + CREATE VIEW vwDoc AS SELECT Id, Title FROM Doc; + CREATE TABLE DocChild (Id INT NOT NULL CONSTRAINT PK_DocChild PRIMARY KEY, DocId INT, + CONSTRAINT FK_DocChild_Doc FOREIGN KEY (DocId) REFERENCES Doc (Id)); + """)) + { + setup.ExecuteNonQuery(); + } + + Report("--- COLUMN: BEFORE ---"); + Report($"Doc.Title default : {ColumnDefault("Doc", "Title") ?? "(none)"}"); + ReportTable("relation columns", p => p.GetRelationColumns()); + ReportIndexes(); + + Exception refused = null; + try + { + // The plain column, and the FK column, renamed through the intercepted DAO/ADOX path. + using var c1 = _connection.CreateCommand("ALTER TABLE `Doc` RENAME COLUMN `Title` TO `Heading`"); + c1.ExecuteNonQuery(); + using var c2 = _connection.CreateCommand("ALTER TABLE `DocChild` RENAME COLUMN `DocId` TO `ParentDocId`"); + c2.ExecuteNonQuery(); + } + catch (Exception e) + { + refused = e; + } + + ReOpenConnection(); + + Report("--- COLUMN: AFTER ---"); + if (refused is not null) + { + Report($"RENAME COLUMN REFUSED: {refused.GetType().Name}: {refused.Message.ReplaceLineEndings(" ")}"); + return; + } + + Report($"Doc.Heading default : {ColumnDefault("Doc", "Heading") ?? "(none — DEFAULT was LOST)"}"); + Report($"Doc.Title still present: {ColumnExists("Doc", "Title")}"); + ReportTable("relation columns", p => p.GetRelationColumns()); + ReportIndexes(); + Report($"view vwDoc : {(ViewResolves("vwDoc") ? "OK (resolves)" : "BROKEN")}"); + + // Measured ACE behaviour — the contract LibRed's native column rename must reproduce. + Assert.IsTrue(ColumnExists("Doc", "Heading"), "Column was not renamed."); + Assert.IsFalse(ColumnExists("Doc", "Title"), "Old column name still resolves after the rename."); + + // The DEFAULT lives in the table's LvProp blob keyed by column NAME, and ACE rewrites that key — a + // renamed column keeps its default. LibRed's TDEF rewrite must carry the property blob across too. + Assert.IsTrue( + (ColumnDefault("Doc", "Heading") ?? "").Contains("untitled", StringComparison.OrdinalIgnoreCase), + "The column's DEFAULT did not survive the rename (LvProp key was not rewritten)."); + + // MSysRelationships stores the FK's columns by name, and ACE repoints them. + Assert.AreEqual( + "ParentDocId", + RelationColumnValue("FK_DocChild_Doc", "REFERENCING_COLUMN_NAME"), + "ACE did not repoint the relationship at the renamed column."); + + // The index over the renamed column survives and keeps its own name: indexes reference columns by + // id, not name, so a column rename needs no index fixup. + Assert.IsTrue(IndexExists("Doc", "IX_Doc_Title"), "Index over the renamed column did not survive."); + + // Stored queries are not rewritten, exactly as for a table rename. + Assert.IsFalse(ViewResolves("vwDoc"), "The view still resolves — ACE rewrote the stored query."); + } + + /// A single field of the named relationship's column mapping, or null if it is gone. + private string RelationColumnValue(string relationName, string columnName) + { + using var provider = SchemaProvider.CreateInstance(_connection.SchemaProviderType, _connection, false); + using DataTable relationColumns = provider.GetRelationColumns(); + foreach (DataRow row in relationColumns.Rows) + { + if (string.Equals(Convert.ToString(row["RELATION_NAME"]), relationName, StringComparison.OrdinalIgnoreCase)) + return Convert.ToString(row[columnName]); + } + + return null; + } + + /// + /// The column's DEFAULT as INFORMATION_SCHEMA reports it. Note the emulated INFORMATION_SCHEMA views only + /// support SELECT * (JetCommand rewrites them), so the projection happens client-side. + /// + private string ColumnDefault(string tableName, string columnName) + { + using var command = _connection.CreateCommand( + $"SELECT * FROM `INFORMATION_SCHEMA.COLUMNS` " + + $"WHERE `TABLE_NAME` = '{tableName}' AND `COLUMN_NAME` = '{columnName}'"); + using var reader = command.ExecuteReader(); + if (!reader.Read()) return "(column not found)"; + + int ordinal; + try + { + ordinal = reader.GetOrdinal("COLUMN_DEFAULT"); + } + catch (IndexOutOfRangeException) + { + return "(INFORMATION_SCHEMA.COLUMNS has no COLUMN_DEFAULT)"; + } + + return reader.IsDBNull(ordinal) ? null : Convert.ToString(reader.GetValue(ordinal)); + } + + private bool ColumnExists(string tableName, string columnName) + { + using var command = _connection.CreateCommand( + $"SELECT * FROM `INFORMATION_SCHEMA.COLUMNS` " + + $"WHERE `TABLE_NAME` = '{tableName}' AND `COLUMN_NAME` = '{columnName}'"); + using var reader = command.ExecuteReader(); + return reader.HasRows; + } + + /// + /// Does ACE reject renaming a table onto the name of an existing table? (Setup leaves Parent, + /// Child and the view vwParent in place, so Child → Parent is a straight collision.) + /// + [TestMethod] + public void Probe_rename_onto_an_existing_table_name() + { + string outcome = TryRename("Child", "Parent"); + Report($"rename onto TABLE name : {outcome}"); + Assert.IsTrue(outcome.StartsWith("REJECTED"), $"ACE allowed a table rename onto an existing table name: {outcome}"); + } + + /// + /// Does ACE reject renaming a table onto the name of an existing saved query? Access shares one + /// object namespace between tables and queries, so this should collide too — but they live in different + /// MSysObjects containers (different ParentId), so the unique (ParentId, Name) index would not stop it. + /// + [TestMethod] + public void Probe_rename_onto_an_existing_query_name() + { + string outcome = TryRename("Child", "vwParent"); + Report($"rename onto QUERY name : {outcome}"); + Assert.IsTrue(outcome.StartsWith("REJECTED"), $"ACE allowed a table rename onto an existing query name: {outcome}"); + } + + /// + /// A table renamed to its own name. EF's Move_table (a schema move) degrades to exactly this on a + /// schema-less engine — the generator emits RENAME TO the same name — so it has to be benign. + /// The case-only variant matters for the same reason: it's the same object, not a collision. + /// + [TestMethod] + public void Probe_rename_a_table_to_its_own_name() + { + string outcome = TryRename("Child", "Child"); + Report($"rename onto ITSELF : {outcome}"); + Assert.AreEqual("ALLOWED (no error)", outcome, + "ACE rejected renaming a table to its own name — EF's schema 'move' degrades to exactly this."); + } + + [TestMethod] + public void Probe_rename_a_table_changing_only_case() + { + string outcome = TryRename("Child", "CHILD"); + Report($"rename changing CASE : {outcome}"); + Assert.AreEqual("ALLOWED (no error)", outcome, "ACE rejected a case-only rename of a table."); + } + + private string TryRename(string from, string to) + { + try + { + using var command = _connection.CreateCommand($"ALTER TABLE `{from}` RENAME TO `{to}`"); + command.ExecuteNonQuery(); + return "ALLOWED (no error)"; + } + catch (Exception e) + { + return $"REJECTED — {e.GetType().Name}: {e.Message.ReplaceLineEndings(" ")}"; + } + } + + /// Whether the stored query still resolves (false = ACE left it dangling). + private bool ViewResolves(string viewName) + { + try + { + using var command = _connection.CreateCommand($"SELECT * FROM `{viewName}`"); + using var reader = command.ExecuteReader(); + return true; + } + catch (Exception) + { + return false; + } + } + + /// A single field of the named relationship, or null if the relationship is gone. + private string RelationValue(string relationName, string columnName) + { + using var provider = SchemaProvider.CreateInstance(_connection.SchemaProviderType, _connection, false); + using DataTable relations = provider.GetRelations(); + foreach (DataRow row in relations.Rows) + { + if (string.Equals(Convert.ToString(row["RELATION_NAME"]), relationName, StringComparison.OrdinalIgnoreCase)) + return Convert.ToString(row[columnName]); + } + + return null; + } + + private bool IndexExists(string tableName, string indexName) + { + using var provider = SchemaProvider.CreateInstance(_connection.SchemaProviderType, _connection, false); + using DataTable indexes = provider.GetIndexes(); + foreach (DataRow row in indexes.Rows) + { + if (string.Equals(Convert.ToString(row["TABLE_NAME"]), tableName, StringComparison.OrdinalIgnoreCase) && + string.Equals(Convert.ToString(row["INDEX_NAME"]), indexName, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + return false; + } + + private void ReportRelations() => ReportTable("relations", p => p.GetRelations()); + + private void ReportIndexes() => ReportTable("indexes", p => p.GetIndexes()); + + /// Dumps a schema DataTable generically, so the probe doesn't depend on column names. + private void ReportTable(string label, Func select) + { + try + { + using var provider = SchemaProvider.CreateInstance(_connection.SchemaProviderType, _connection, false); + using DataTable table = select(provider); + if (table.Rows.Count == 0) + { + Report($"{label,-23}: (none)"); + return; + } + + foreach (DataRow row in table.Rows) + { + var cells = new System.Text.StringBuilder(); + foreach (DataColumn column in table.Columns) + { + object value = row[column]; + if (value is null || value == DBNull.Value) continue; + if (cells.Length > 0) cells.Append(", "); + cells.Append($"{column.ColumnName}={value}"); + } + + Report($"{label,-23}: {cells}"); + } + } + catch (Exception e) + { + Report($"{label,-23}: FAILED to read — {e.Message.ReplaceLineEndings(" ")}"); + } + } + + private bool TableExists(string tableName) + { + using var command = _connection.CreateCommand( + $"SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = '{tableName}'"); + using var reader = command.ExecuteReader(); + return reader.HasRows; + } + + private void ReOpenConnection() + { + _connection.Close(); + JetConnection.ClearAllPools(); + _connection.Open(); + } + + private static void Report(string message) => Console.WriteLine(message); + } +} diff --git a/test/EFCore.Jet.FunctionalTests/BuiltInDataTypesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BuiltInDataTypesJetTest.cs index 86e639f4..fda2d225 100644 --- a/test/EFCore.Jet.FunctionalTests/BuiltInDataTypesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BuiltInDataTypesJetTest.cs @@ -1291,7 +1291,7 @@ public virtual void Can_insert_and_read_back_all_mapped_data_types_with_scale() @p1='102' (Precision = 3) @p2='101' (Precision = 3) @p3='103' (Precision = 3) - @p4='85.55' + @p4='85.55000305175781' @p5='85.5' @p6='83.33000183105469' @p7='83.30000305175781' @@ -2109,7 +2109,7 @@ public virtual void Can_insert_and_read_back_all_mapped_data_types_with_scale_wi @p0='102' (Precision = 3) @p1='101' (Precision = 3) @p2='103' (Precision = 3) - @p3='85.55' + @p3='85.55000305175781' @p4='85.5' @p5='83.33000183105469' @p6='83.30000305175781' @@ -3337,12 +3337,6 @@ protected class MappedDataTypes [Column(TypeName = "nvarchar(20)")] public StringEnumU16 EnumAsNvarchar20 { get; set; } - - /*[Column(TypeName = "sql_variant")] - public object SqlVariantString { get; set; } - - [Column(TypeName = "sql_variant")] - public object SqlVariantInt { get; set; }*/ } protected class MappedSizedDataTypes @@ -3794,12 +3788,6 @@ protected class MappedNullableDataTypes [Column(TypeName = "nvarchar(20)")] public StringEnumU16? EnumAsNvarchar20 { get; set; } - - /*[Column(TypeName = "sql_variant")] - public object SqlVariantString { get; set; } - - [Column(TypeName = "sql_variant")] - public object SqlVariantInt { get; set; }*/ } protected class MappedDataTypesWithIdentity @@ -3973,12 +3961,6 @@ protected class MappedDataTypesWithIdentity [Column(TypeName = "nvarchar(20)")] public StringEnumU16 EnumAsNvarchar20 { get; set; } - - /*[Column(TypeName = "sql_variant")] - public object SqlVariantString { get; set; } - - [Column(TypeName = "sql_variant")] - public object SqlVariantInt { get; set; }*/ } protected class MappedSizedDataTypesWithIdentity @@ -4290,12 +4272,6 @@ protected class MappedNullableDataTypesWithIdentity [Column(TypeName = "nvarchar(20)")] public StringEnumU16? EnumAsNvarchar20 { get; set; } - - /*[Column(TypeName = "sql_variant")] - public object SqlVariantString { get; set; } - - [Column(TypeName = "sql_variant")] - public object SqlVariantInt { get; set; }*/ } public class ColumnInfo diff --git a/test/EFCore.Jet.FunctionalTests/DbContextPoolingTest.cs b/test/EFCore.Jet.FunctionalTests/DbContextPoolingTest.cs index 79204e2f..325459db 100644 --- a/test/EFCore.Jet.FunctionalTests/DbContextPoolingTest.cs +++ b/test/EFCore.Jet.FunctionalTests/DbContextPoolingTest.cs @@ -2014,97 +2014,6 @@ public void Double_dispose_concurrency_test(bool useInterface) }); } - [ConditionalTheory] - [InlineData(false, false)] - [InlineData(true, false)] - [InlineData(false, true)] - [InlineData(true, true)] - public async Task Concurrency_test(bool useInterface, bool async) - { - PooledContext.InstanceCount = 0; - PooledContext.DisposedCount = 0; - - var results = WriteResults(); - - var serviceProvider = useInterface - ? BuildServiceProvider() - : BuildServiceProvider(); - - async Task ProcessRequest() - { - while (_stopwatch.IsRunning) - { - using var serviceScope = serviceProvider.CreateScope(); - var scopedProvider = serviceScope.ServiceProvider; - - var context = useInterface - ? (PooledContext)scopedProvider.GetService() - : scopedProvider.GetService(); - - await context!.Customers.AsNoTracking().FirstAsync(c => c.CustomerId == "ALFKI"); - - Interlocked.Increment(ref _requests); - } - } - - var tasks = new Task[32]; - - for (var i = 0; i < 32; i++) - { - tasks[i] = ProcessRequest(); - } - - await Task.WhenAll(tasks); - await results; - - Assert.Equal(_requests, PooledContext.DisposedCount); - Assert.InRange(PooledContext.InstanceCount, low: 32, high: 64); - } - - private readonly TimeSpan _duration = TimeSpan.FromSeconds(value: 10); - - private int _stopwatchStarted; - - private readonly Stopwatch _stopwatch = new(); - - private long _requests; - - private async Task WriteResults() - { - if (Interlocked.Exchange(ref _stopwatchStarted, value: 1) == 0) - { - _stopwatch.Start(); - } - - var lastRequests = (long)0; - var lastElapsed = TimeSpan.Zero; - - while (_stopwatch.IsRunning) - { - await Task.Delay(TimeSpan.FromSeconds(value: 1)); - - var currentRequests = _requests - lastRequests; - lastRequests = _requests; - - var elapsed = _stopwatch.Elapsed; - var currentElapsed = elapsed - lastElapsed; - lastElapsed = elapsed; - - _testOutputHelper? - .WriteLine( - $"[{DateTime.Now:HH:mm:ss.fff}] Requests: {_requests}, " - + $"RPS: {Math.Round(currentRequests / currentElapsed.TotalSeconds)}"); - - if (elapsed > _duration) - { - _testOutputHelper?.WriteLine(message: ""); - _testOutputHelper?.WriteLine($"Average RPS: {Math.Round(_requests / elapsed.TotalSeconds)}"); - - _stopwatch.Stop(); - } - } - } - [ConditionalTheory] [InlineData(false)] [InlineData(true)] diff --git a/test/EFCore.Jet.FunctionalTests/GraphUpdates/GraphUpdatesJetTestBase.cs b/test/EFCore.Jet.FunctionalTests/GraphUpdates/GraphUpdatesJetTestBase.cs index d1e37805..7e4b1067 100644 --- a/test/EFCore.Jet.FunctionalTests/GraphUpdates/GraphUpdatesJetTestBase.cs +++ b/test/EFCore.Jet.FunctionalTests/GraphUpdates/GraphUpdatesJetTestBase.cs @@ -14,9 +14,15 @@ namespace EntityFrameworkCore.Jet.FunctionalTests; #nullable disable -public abstract class GraphUpdatesJetTestBase(TFixture fixture) : GraphUpdatesTestBase(fixture) +public abstract class GraphUpdatesJetTestBase : GraphUpdatesTestBase where TFixture : GraphUpdatesJetTestBase.GraphUpdatesJetFixtureBase, new() { + protected GraphUpdatesJetTestBase(TFixture fixture) + : base(fixture) + // GraphUpdates fixtures execute thousands of commands and live for the entire class. Clear the + // formatted diagnostic log between tests so reader/command messages cannot exhaust the test host. + => fixture.TestSqlLoggerFactory.Clear(); + [ConditionalFact] // Issue #32638 public virtual void Key_and_index_properties_use_appropriate_comparer() { diff --git a/test/EFCore.Jet.FunctionalTests/GraphUpdates/ProxyGraphUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/GraphUpdates/ProxyGraphUpdatesJetTest.cs index 6fbcf9dc..df245ae8 100644 --- a/test/EFCore.Jet.FunctionalTests/GraphUpdates/ProxyGraphUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/GraphUpdates/ProxyGraphUpdatesJetTest.cs @@ -12,10 +12,14 @@ namespace EntityFrameworkCore.Jet.FunctionalTests { public abstract class ProxyGraphUpdatesJetTest { - public abstract class ProxyGraphUpdatesJetTestBase(TFixture fixture) - : ProxyGraphUpdatesTestBase(fixture) + public abstract class ProxyGraphUpdatesJetTestBase + : ProxyGraphUpdatesTestBase where TFixture : ProxyGraphUpdatesJetTestBase.ProxyGraphUpdatesJetFixtureBase, new() { + protected ProxyGraphUpdatesJetTestBase(TFixture fixture) + : base(fixture) + => fixture.TestSqlLoggerFactory.Clear(); + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) => facade.UseTransaction(transaction.GetDbTransaction()); diff --git a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt index 3a049b74..746a76e4 100644 --- a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt +++ b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt @@ -1208,7 +1208,6 @@ EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_custom EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_data_type EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_data_type_shadow EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_nullable_data_type -EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_nullable_data_type_as_literal EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_with_null_parameters_using_any_nullable_data_type EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_read_back_bool_mapped_as_int_through_navigation EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_read_back_mapped_enum_from_collection_first_or_default @@ -17539,7 +17538,6 @@ EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shared_type_entity_type -EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_avoid_attributes_when_discovering_properties(useAttributes: False) EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_Property_on_an_entity_with_fields EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_get_entity_builder_for_clr_type @@ -18254,7 +18252,6 @@ EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericT EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shared_type_entity_type -EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_avoid_attributes_when_discovering_properties(useAttributes: False) EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_Property_on_an_entity_with_fields EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_get_entity_builder_for_clr_type diff --git a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt index ae1b8b76..4733dec7 100644 --- a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt +++ b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt @@ -1303,7 +1303,6 @@ EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_custom EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_data_type EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_data_type_shadow EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_nullable_data_type -EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_nullable_data_type_as_literal EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_with_null_parameters_using_any_nullable_data_type EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_read_back_bool_mapped_as_int_through_navigation EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_read_back_mapped_enum_from_collection_first_or_default @@ -17711,7 +17710,6 @@ EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shared_type_entity_type -EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_avoid_attributes_when_discovering_properties(useAttributes: False) EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_Property_on_an_entity_with_fields EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_get_entity_builder_for_clr_type @@ -18426,7 +18424,6 @@ EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericT EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shared_type_entity_type -EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_avoid_attributes_when_discovering_properties(useAttributes: False) EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_Property_on_an_entity_with_fields EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_get_entity_builder_for_clr_type diff --git a/test/EFCore.Jet.FunctionalTests/JetEndToEndTest.cs b/test/EFCore.Jet.FunctionalTests/JetEndToEndTest.cs index 321437e3..c3e96203 100644 --- a/test/EFCore.Jet.FunctionalTests/JetEndToEndTest.cs +++ b/test/EFCore.Jet.FunctionalTests/JetEndToEndTest.cs @@ -588,6 +588,11 @@ public async Task Can_track_an_entity_with_more_than_10_properties() { context.Database.EnsureCreatedResiliently(); + // Drop constraint to work around Jet limitation regarding compound foreign keys and NULL: the + // Actor insert has GameId set but CurrentWeaponId null (a partial-null composite FK), which Jet + // rejects. Drop it so the row inserts. + context.Database.ExecuteSql($"ALTER TABLE `Actor` DROP CONSTRAINT `FK_Actor_Items_GameId_CurrentWeaponId`"); + context.Characters.Add( new PlayerCharacter( new Level { Game = new Game() })); @@ -974,6 +979,11 @@ public async Task Adding_an_item_to_a_collection_marks_it_as_modified() using var context = new GameDbContext(options); context.Database.EnsureCreatedResiliently(); + // Drop constraint to work around Jet limitation regarding compound foreign keys and NULL: the Actor + // insert has GameId set but CurrentWeaponId null (a partial-null composite FK), which Jet rejects. + // Drop it so the row inserts. + context.Database.ExecuteSql($"ALTER TABLE `Actor` DROP CONSTRAINT `FK_Actor_Items_GameId_CurrentWeaponId`"); + var player = new PlayerCharacter( new Level { Game = new Game() }); @@ -1000,6 +1010,12 @@ public async Task Can_set_reference_twice() { context.Database.EnsureCreatedResiliently(); + // Drop constraints to work around Jet limitation regarding compound foreign keys and NULL: the + // initial inserts carry a partial-null composite FK (GameId set, second column null), which Jet + // rejects — the Actor's CurrentWeapon FK and the Item's self-referencing Container FK. + context.Database.ExecuteSql($"ALTER TABLE `Actor` DROP CONSTRAINT `FK_Actor_Items_GameId_CurrentWeaponId`"); + context.Database.ExecuteSql($"ALTER TABLE `Items` DROP CONSTRAINT `FK_Items_Items_GameId_ContainerId`"); + var player = new PlayerCharacter( new Level { Game = new Game() }); @@ -1040,6 +1056,12 @@ public async Task Can_include_on_loaded_entity() { context.Database.EnsureCreatedResiliently(); + // Drop constraints to work around Jet limitation regarding compound foreign keys and NULL: the + // initial inserts carry a partial-null composite FK (GameId set, second column null), which Jet + // rejects — the Actor's CurrentWeapon FK and the Item's self-referencing Container FK. + context.Database.ExecuteSql($"ALTER TABLE `Actor` DROP CONSTRAINT `FK_Actor_Items_GameId_CurrentWeaponId`"); + context.Database.ExecuteSql($"ALTER TABLE `Items` DROP CONSTRAINT `FK_Items_Items_GameId_ContainerId`"); + var player = new PlayerCharacter( new Level { Game = new Game() }); diff --git a/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs index a864fbb7..cbff5388 100644 --- a/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs @@ -1446,13 +1446,6 @@ public class MigrationsInfrastructureJetFixture : MigrationsInfrastructureFixtur protected override ITestStoreFactory TestStoreFactory => JetTestStoreFactory.Instance; - public override async Task InitializeAsync() - { - await base.InitializeAsync(); - await ((JetTestStore)TestStore).ExecuteNonQueryAsync( - @"DROP DATABASE TransactionSuppressed"); - } - public override MigrationsContext CreateContext() { var options = AddOptions(TestStore.AddProviderOptions(new DbContextOptionsBuilder())) diff --git a/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsJetTest.cs index 3a51cfb1..ae4be0f1 100644 --- a/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsJetTest.cs @@ -648,7 +648,7 @@ public override async Task Add_column_with_collation() AssertSql(""); } - [ConditionalFact(Skip = "Jet does not support collation")] + [ConditionalTheory(Skip = "Jet does not support collation")] public override async Task Add_column_computed_with_collation(bool stored) { await base.Add_column_computed_with_collation(stored); diff --git a/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderTestBase.cs b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderTestBase.cs index 8d988c5d..41eab3b6 100644 --- a/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderTestBase.cs +++ b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderTestBase.cs @@ -264,38 +264,6 @@ public virtual void Can_set_collation_for_primitive_collection() Assert.Equal("Latin1_General_BIN", entityType.FindProperty("Down")!.GetCollation()); Assert.Equal("Latin1_General_CI_AI", entityType.FindProperty("Charm")!.GetCollation()); } - - [ConditionalTheory, InlineData(true), InlineData(false)] - public virtual void Can_avoid_attributes_when_discovering_properties(bool useAttributes) - { - var modelBuilder = CreateModelBuilder(c => c.Conventions.Replace(s => new PropertyDiscoveryConvention( - s.GetService()!, useAttributes))); - modelBuilder.Entity(); - - if (useAttributes) - { - var model = modelBuilder.FinalizeModel(); - var entityType = model.FindEntityType(typeof(SqlVariantEntity))!; - - Assert.Equal( - [nameof(SqlVariantEntity.Id), nameof(SqlVariantEntity.Value),], - entityType.GetProperties().Select(p => p.Name)); - } - else - { - Assert.Equal( - CoreStrings.PropertyNotAdded(nameof(SqlVariantEntity), nameof(SqlVariantEntity.Value), "object"), - Assert.Throws(modelBuilder.FinalizeModel).Message); - } - } - - protected class SqlVariantEntity - { - public int Id { get; set; } - - [Column(TypeName = "sql_variant")] - public object? Value { get; set; } - } } public abstract class JetComplexType(JetModelBuilderFixture fixture) diff --git a/test/EFCore.Jet.FunctionalTests/MonsterFixupChangedChangingJetTest.cs b/test/EFCore.Jet.FunctionalTests/MonsterFixupChangedChangingJetTest.cs index 37fc4af7..05a8f705 100644 --- a/test/EFCore.Jet.FunctionalTests/MonsterFixupChangedChangingJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/MonsterFixupChangedChangingJetTest.cs @@ -3,6 +3,7 @@ using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.TestModels; namespace EntityFrameworkCore.Jet.FunctionalTests { @@ -15,6 +16,21 @@ public class MonsterFixupChangedChangingJetFixture : MonsterFixupChangedChanging { protected override ITestStoreFactory TestStoreFactory => JetTestStoreFactory.Instance; + public override MonsterContext CreateContext(DbContextOptions options) + { + var context = base.CreateContext(options); + + void DropUnsupportedPartialNullCompositeForeignKey(object? sender, SavingChangesEventArgs eventArgs) + { + context.SavingChanges -= DropUnsupportedPartialNullCompositeForeignKey; + context.Database.ExecuteSql( + $"ALTER TABLE `ProductWebFeature` DROP CONSTRAINT `FK_ProductWebFeature_ProductPhoto_PhotoId_ProductId`"); + } + + context.SavingChanges += DropUnsupportedPartialNullCompositeForeignKey; + return context; + } + protected override void OnModelCreating( ModelBuilder builder) { diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocMiscellaneousQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocMiscellaneousQueryJetTest.cs index e7ba3d54..56c334ec 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/AdHocMiscellaneousQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocMiscellaneousQueryJetTest.cs @@ -236,61 +236,6 @@ public class Customer #endregion - #region 12482 - - [ConditionalFact] - public virtual async Task Batch_insert_with_sqlvariant_different_types() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - context.AddRange( - new Context12482.BaseEntity { Value = 10.0999 }, - new Context12482.BaseEntity { Value = -12345 }, - new Context12482.BaseEntity { Value = "String Value" }, - new Context12482.BaseEntity { Value = new DateTime(2020, 1, 1) }); - - context.SaveChanges(); - - AssertSql( - """ -@p0='10.0999' (Nullable = true) (DbType = Object) -@p1='-12345' (Nullable = true) (DbType = Object) -@p2='String Value' (Size = 12) (DbType = Object) -@p3='2020-01-01T00:00:00.0000000' (Nullable = true) (DbType = Object) - -SET IMPLICIT_TRANSACTIONS OFF; -SET NOCOUNT ON; -MERGE [BaseEntities] USING ( -VALUES (@p0, 0), -(@p1, 1), -(@p2, 2), -(@p3, 3)) AS i ([Value], _Position) ON 1=0 -WHEN NOT MATCHED THEN -INSERT ([Value]) -VALUES (i.[Value]) -OUTPUT INSERTED.[Id], i._Position; -"""); - } - - private class Context12482(DbContextOptions options) : DbContext(options) - { - public virtual DbSet BaseEntities { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity(); - - public class BaseEntity - { - public int Id { get; set; } - - [Column(TypeName = "sql_variant")] - public object Value { get; set; } - } - } - - #endregion - #region 12518 [ConditionalFact] @@ -980,7 +925,7 @@ public override async Task Enum_has_flag_applies_explicit_cast_for_constant() """ SELECT `e`.`Id`, `e`.`Permission`, `e`.`PermissionByte`, `e`.`PermissionShort` FROM `Entities` AS `e` -WHERE (`e`.`PermissionShort` BAND 4) = 4 +WHERE (`e`.`PermissionShort` BAND CINT(4)) = CINT(4) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateJetTest.cs index 39fbba65..3e760693 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateJetTest.cs @@ -19,7 +19,7 @@ public override async Task Delete_entity_with_associations() AssertSql( """ -@deletableEntity_Name='Root3_With_different_values' (Size = 255) +@deletableEntity_Name='?' (Size = 255) DELETE FROM `RootEntity` AS `r` WHERE `r`.`Name` = @deletableEntity_Name @@ -50,7 +50,7 @@ public override async Task Update_property_inside_associate() AssertExecuteUpdateSql( """ -@p='foo_updated' (Size = 255) +@p='?' (Size = 255) UPDATE `RootEntity` AS `r` SET `r`.`RequiredAssociate_String` = @p @@ -75,7 +75,7 @@ public override async Task Update_property_inside_nested_associate() AssertExecuteUpdateSql( """ -@p='foo_updated' (Size = 255) +@p='?' (Size = 255) UPDATE `RootEntity` AS `r` SET `r`.`RequiredAssociate_RequiredNestedAssociate_String` = @p @@ -87,8 +87,8 @@ public override async Task Update_property_on_projected_associate() await base.Update_property_on_projected_associate(); AssertExecuteUpdateSql( - """ -@p='foo_updated' (Size = 255) + """ +@p='?' (Size = 255) UPDATE `RootEntity` AS `r` SET `r`.`RequiredAssociate_String` = @p @@ -119,16 +119,16 @@ public override async Task Update_associate_to_parameter() AssertExecuteUpdateSql( """ -@complex_type_p_Id='1000' (Nullable = true) -@complex_type_p_Int='80' (Nullable = true) -@complex_type_p_Ints='[1,2,3]' (Size = 255) -@complex_type_p_Name='Updated associate name' (Size = 255) -@complex_type_p_String='Updated nested string' (Size = 255) -@complex_type_p_RequiredNestedAssociate_Id='1000' (Nullable = true) -@complex_type_p_RequiredNestedAssociate_Int='80' (Nullable = true) -@complex_type_p_RequiredNestedAssociate_Ints='[1,2,3]' (Size = 255) -@complex_type_p_RequiredNestedAssociate_Name='Updated nested name' (Size = 255) -@complex_type_p_RequiredNestedAssociate_String='Updated nested string' (Size = 255) +@complex_type_p_Id='?' (DbType = Int32) +@complex_type_p_Int='?' (DbType = Int32) +@complex_type_p_Ints='?' (Size = 255) +@complex_type_p_Name='?' (Size = 255) +@complex_type_p_String='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_Id='?' (DbType = Int32) +@complex_type_p_RequiredNestedAssociate_Int='?' (DbType = Int32) +@complex_type_p_RequiredNestedAssociate_Ints='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_Name='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_String='?' (Size = 255) UPDATE `RootEntity` AS `r` SET `r`.`RequiredAssociate_Id` = @complex_type_p_Id, @@ -155,11 +155,11 @@ public override async Task Update_nested_associate_to_parameter() AssertExecuteUpdateSql( """ -@complex_type_p_Id='1000' (Nullable = true) -@complex_type_p_Int='80' (Nullable = true) -@complex_type_p_Ints='[1,2,4]' (Size = 255) -@complex_type_p_Name='Updated nested name' (Size = 255) -@complex_type_p_String='Updated nested string' (Size = 255) +@complex_type_p_Id='?' (DbType = Int32) +@complex_type_p_Int='?' (DbType = Int32) +@complex_type_p_Ints='?' (Size = 255) +@complex_type_p_Name='?' (Size = 255) +@complex_type_p_String='?' (Size = 255) UPDATE `RootEntity` AS `r` SET `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = @complex_type_p_Id, @@ -216,16 +216,16 @@ public override async Task Update_associate_to_inline() AssertExecuteUpdateSql( """ -@complex_type_p_Id='1000' (Nullable = true) -@complex_type_p_Int='70' (Nullable = true) -@complex_type_p_Ints='[1,2,4]' (Size = 255) -@complex_type_p_Name='Updated associate name' (Size = 255) -@complex_type_p_String='Updated associate string' (Size = 255) -@complex_type_p_RequiredNestedAssociate_Id='1000' (Nullable = true) -@complex_type_p_RequiredNestedAssociate_Int='80' (Nullable = true) -@complex_type_p_RequiredNestedAssociate_Ints='[1,2,4]' (Size = 255) -@complex_type_p_RequiredNestedAssociate_Name='Updated nested name' (Size = 255) -@complex_type_p_RequiredNestedAssociate_String='Updated nested string' (Size = 255) +@complex_type_p_Id='?' (DbType = Int32) +@complex_type_p_Int='?' (DbType = Int32) +@complex_type_p_Ints='?' (Size = 255) +@complex_type_p_Name='?' (Size = 255) +@complex_type_p_String='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_Id='?' (DbType = Int32) +@complex_type_p_RequiredNestedAssociate_Int='?' (DbType = Int32) +@complex_type_p_RequiredNestedAssociate_Ints='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_Name='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_String='?' (Size = 255) UPDATE `RootEntity` AS `r` SET `r`.`RequiredAssociate_Id` = @complex_type_p_Id, @@ -435,7 +435,7 @@ public override async Task Update_primitive_collection_to_parameter() AssertExecuteUpdateSql( """ -@ints='[1,2,4]' (Size = 255) +@ints='?' (Size = 255) UPDATE `RootEntity` AS `r` SET `r`.`RequiredAssociate_Ints` = @ints @@ -479,9 +479,9 @@ public override async Task Update_multiple_properties_inside_same_associate() await base.Update_multiple_properties_inside_same_associate(); AssertExecuteUpdateSql( - """ -@p='foo_updated' (Size = 255) -@p1='20' + """ +@p='?' (Size = 255) +@p1='?' (DbType = Int32) UPDATE `RootEntity` AS `r` SET `r`.`RequiredAssociate_String` = @p, @@ -494,8 +494,8 @@ public override async Task Update_multiple_properties_inside_associates_and_on_e await base.Update_multiple_properties_inside_associates_and_on_entity_type(); AssertExecuteUpdateSql( - """ -@p='foo_updated' (Size = 255) + """ +@p='?' (Size = 255) UPDATE `RootEntity` AS `r` SET `r`.`Name` = `r`.`Name` & 'Modified', @@ -510,8 +510,8 @@ public override async Task Update_multiple_projected_associates_via_anonymous_ty await base.Update_multiple_projected_associates_via_anonymous_type(); AssertExecuteUpdateSql( - """ -@p='foo_updated' (Size = 255) + """ +@p='?' (Size = 255) UPDATE `RootEntity` AS `r` SET `r`.`RequiredAssociate_String` = `r`.`OptionalAssociate_String`, diff --git a/test/EFCore.Jet.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualityJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualityJetTest.cs index 15314899..1843999c 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualityJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualityJetTest.cs @@ -101,11 +101,11 @@ public override async Task Nested_associate_with_parameter() AssertSql( """ -@entity_equality_nested_Id='1000' (Nullable = true) -@entity_equality_nested_Int='8' (Nullable = true) -@entity_equality_nested_Ints='[1,2,3]' (Size = 255) -@entity_equality_nested_Name='Root1_RequiredAssociate_RequiredNestedAssociate' (Size = 255) -@entity_equality_nested_String='foo' (Size = 255) +@entity_equality_nested_Id='?' (DbType = Int32) +@entity_equality_nested_Int='?' (DbType = Int32) +@entity_equality_nested_Ints='?' (Size = 255) +@entity_equality_nested_Name='?' (Size = 255) +@entity_equality_nested_String='?' (Size = 255) SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` FROM `RootEntity` AS `r` diff --git a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs index f7438e12..ecc3db9b 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs @@ -991,7 +991,7 @@ LEFT JOIN ( FROM `LocustLeaders` AS `l0` WHERE `l0`.`Discriminator` = 'LocustCommander' ) AS `l1` ON `f`.`CommanderName` = `l1`.`Name` -WHERE IIF(`l`.`Name` IS NOT NULL, `l`.`ThreatLevel`, `l1`.`ThreatLevel`) = 4 +WHERE IIF(`l`.`Name` IS NOT NULL, `l`.`ThreatLevel`, `l1`.`ThreatLevel`) = CINT(4) """); } @@ -5882,7 +5882,7 @@ public override async Task SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` -WHERE IIF(`g`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, IIF(0 = -1, 0, 0) + 1, `g`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR IIF(0 = -1, 0, 0) IS NULL OR `g`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) +WHERE IIF(`g`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `g`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `g`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -5898,7 +5898,7 @@ await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_tak FROM (`Tags` AS `t` LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` -WHERE IIF(LEN(`s`.`Name`) IS NULL, NULL, MID(`t`.`Note`, IIF(0 = -1, 0, 0) + 1, IIF(LEN(`s`.`Name`) IS NULL, NULL, CLNG(LEN(`s`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR IIF(0 = -1, 0, 0) IS NULL OR `s`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) +WHERE IIF(LEN(`s`.`Name`) IS NULL, NULL, MID(`t`.`Note`, 0 + 1, IIF(LEN(`s`.`Name`) IS NULL, NULL, CLNG(LEN(`s`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -7906,7 +7906,7 @@ public override async Task Projecting_property_converted_to_nullable_with_functi AssertSql( """ -SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL), IIF(0 = -1, 0, 0) + 1, 3) +SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL), 0 + 1, 3) FROM `Tags` AS `t` LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` """); @@ -7918,7 +7918,7 @@ public override async Task Projecting_property_converted_to_nullable_with_functi AssertSql( """ -SELECT `t`.`Note`, MID(`t`.`Note`, IIF(0 = -1, 0, 0) + 1, IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL)) AS `Function` +SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL)) AS `Function` FROM `Tags` AS `t` LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` WHERE IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL) IS NOT NULL diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryJetTest.cs index 80aeda79..a36774e2 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryJetTest.cs @@ -1224,7 +1224,7 @@ public override async Task Include_references_then_include_collection_multi_leve INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` -WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < 10 +WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` """); } @@ -2112,7 +2112,7 @@ public override async Task Include_where_skip_take_projection(bool async) FROM ( SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` - WHERE `o`.`Quantity` = 10 + WHERE `o`.`Quantity` = CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID` ) AS `o2` ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindGroupByQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindGroupByQueryJetTest.cs index b53ce599..ea4451da 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindGroupByQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindGroupByQueryJetTest.cs @@ -1487,7 +1487,7 @@ public override async Task GroupBy_complex_key_aggregate(bool async) """ SELECT `s`.`Key`, COUNT(*) AS `Count` FROM ( - SELECT MID(`c`.`CustomerID`, IIF(0 = -1, 0, 0) + 1, 1) AS `Key` + SELECT MID(`c`.`CustomerID`, 0 + 1, 1) AS `Key` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` ) AS `s` diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryJetTest.cs index efcc8c01..8bdfb28a 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryJetTest.cs @@ -630,7 +630,7 @@ public override async Task Include_where_skip_take_projection(bool async) FROM ( SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` - WHERE `o`.`Quantity` = 10 + WHERE `o`.`Quantity` = CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID` ) AS `o2` ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeQueryJetTest.cs index 634dbb52..0420752e 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeQueryJetTest.cs @@ -805,7 +805,7 @@ public override async Task Include_where_skip_take_projection(bool async) FROM ( SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` - WHERE `o`.`Quantity` = 10 + WHERE `o`.`Quantity` = CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID` ) AS `o2` ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC @@ -1959,7 +1959,7 @@ public override async Task Include_references_then_include_collection_multi_leve INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` -WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < 10 +WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs index 7cd3b39a..111f4518 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs @@ -1050,7 +1050,7 @@ public override async Task OrderBy_condition_comparison(bool isAsync) """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` -ORDER BY NOT (`p`.`UnitsInStock` > 0), `p`.`ProductID` +ORDER BY NOT (`p`.`UnitsInStock` > CINT(0)), `p`.`ProductID` """); } @@ -2816,10 +2816,10 @@ public override async Task Where_subquery_on_collection(bool isAsync) await base.Where_subquery_on_collection(isAsync); AssertSql( -""" + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` -WHERE 5 IN ( +WHERE CINT(5) IN ( SELECT `o`.`Quantity` FROM `Order Details` AS `o` WHERE `o`.`ProductID` = `p`.`ProductID` @@ -4976,12 +4976,12 @@ public override async Task Let_subquery_with_multiple_occurrences(bool isAsync) SELECT ( SELECT COUNT(*) FROM `Order Details` AS `o1` - WHERE `o`.`OrderID` = `o1`.`OrderID` AND `o1`.`Quantity` < 10) AS `Count` + WHERE `o`.`OrderID` = `o1`.`OrderID` AND `o1`.`Quantity` < CINT(10)) AS `Count` FROM `Orders` AS `o` WHERE EXISTS ( SELECT 1 FROM `Order Details` AS `o0` - WHERE `o`.`OrderID` = `o0`.`OrderID` AND `o0`.`Quantity` < 10) + WHERE `o`.`OrderID` = `o0`.`OrderID` AND `o0`.`Quantity` < CINT(10)) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSelectQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSelectQueryJetTest.cs index 103f4e46..58b16ffa 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSelectQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSelectQueryJetTest.cs @@ -240,7 +240,7 @@ public override async Task Select_anonymous_conditional_expression(bool isAsync) AssertSql( """ -SELECT `p`.`ProductID`, `p`.`UnitsInStock` > 0 AS `IsAvailable` +SELECT `p`.`ProductID`, `p`.`UnitsInStock` > CINT(0) AS `IsAvailable` FROM `Products` AS `p` """); } @@ -1121,10 +1121,10 @@ public override async Task Select_short_constant(bool isAsync) await base.Select_short_constant(isAsync); AssertSql( - $""" - SELECT IIF(`c`.`CustomerID` = 'ALFKI', 1, 2) - FROM `Customers` AS `c` - """); + """ +SELECT IIF(`c`.`CustomerID` = 'ALFKI', CINT(1), CINT(2)) +FROM `Customers` AS `c` +"""); } public override async Task Select_bool_constant(bool isAsync) @@ -2141,7 +2141,7 @@ public override async Task Projection_Distinct_projection_preserves_columns_used """ SELECT (IIF(`c0`.`FirstLetter` IS NULL, '', `c0`.`FirstLetter`) & ' ') & `c0`.`Foo` AS `Aggregate` FROM ( - SELECT DISTINCT `c`.`CustomerID`, MID(`c`.`CustomerID`, IIF(0 = -1, 0, 0) + 1, 1) AS `FirstLetter`, 'Foo' AS `Foo` + SELECT DISTINCT `c`.`CustomerID`, MID(`c`.`CustomerID`, 0 + 1, 1) AS `FirstLetter`, 'Foo' AS `Foo` FROM `Customers` AS `c` ) AS `c0` """); diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryJetTest.cs index fd0a0b34..3b79dd2d 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryJetTest.cs @@ -538,7 +538,7 @@ public override async Task Include_where_skip_take_projection(bool async) FROM ( SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` - WHERE `o`.`Quantity` = 10 + WHERE `o`.`Quantity` = CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID` ) AS `o2` ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeQueryJetTest.cs index 0eebbdd2..4e5df344 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeQueryJetTest.cs @@ -1146,7 +1146,7 @@ public override async Task Include_where_skip_take_projection(bool async) FROM ( SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` - WHERE `o`.`Quantity` = 10 + WHERE `o`.`Quantity` = CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID` ) AS `o2` ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC @@ -2787,7 +2787,7 @@ public override async Task Include_references_then_include_collection_multi_leve FROM (`Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` -WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < 10 +WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` """, // @@ -2797,7 +2797,7 @@ public override async Task Include_references_then_include_collection_multi_leve INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` -WHERE ((`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < 10) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) +WHERE ((`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10)) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindStringIncludeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindStringIncludeQueryJetTest.cs index a5d92330..cdfbc562 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindStringIncludeQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindStringIncludeQueryJetTest.cs @@ -1206,7 +1206,7 @@ public override async Task Include_references_then_include_collection_multi_leve INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` -WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < 10 +WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` """); } @@ -2074,7 +2074,7 @@ public override async Task Include_where_skip_take_projection(bool async) FROM ( SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` - WHERE `o`.`Quantity` = 10 + WHERE `o`.`Quantity` = CINT(10) ORDER BY `o`.`OrderID`, `o`.`ProductID` ) AS `o2` ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindWhereQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindWhereQueryJetTest.cs index 7ab75708..0c02c54c 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindWhereQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindWhereQueryJetTest.cs @@ -1130,11 +1130,11 @@ public override async Task Where_short_member_comparison(bool isAsync) await base.Where_short_member_comparison(isAsync); AssertSql( - $""" - SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` - FROM `Products` AS `p` - WHERE `p`.`UnitsInStock` > 10 - """); + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`UnitsInStock` > CINT(10) +"""); } public override async Task Where_comparison_to_nullable_bool(bool isAsync) @@ -1226,11 +1226,11 @@ public override async Task Where_ternary_boolean_condition_true(bool isAsync) await base.Where_ternary_boolean_condition_true(isAsync); AssertSql( - $""" - SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` - FROM `Products` AS `p` - WHERE `p`.`UnitsInStock` >= 20 - """); + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`UnitsInStock` >= CINT(20) +"""); } public override async Task Where_ternary_boolean_condition_false(bool isAsync) @@ -1238,11 +1238,11 @@ public override async Task Where_ternary_boolean_condition_false(bool isAsync) await base.Where_ternary_boolean_condition_false(isAsync); AssertSql( - $""" - SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` - FROM `Products` AS `p` - WHERE `p`.`UnitsInStock` < 20 - """); + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`UnitsInStock` < CINT(20) +"""); } public override async Task Where_ternary_boolean_condition_with_another_condition(bool isAsync) @@ -1255,7 +1255,7 @@ public override async Task Where_ternary_boolean_condition_with_another_conditio SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` -WHERE `p`.`ProductID` < @productId AND `p`.`UnitsInStock` >= 20 +WHERE `p`.`ProductID` < @productId AND `p`.`UnitsInStock` >= CINT(20) """); } @@ -1264,11 +1264,11 @@ public override async Task Where_ternary_boolean_condition_with_false_as_result_ await base.Where_ternary_boolean_condition_with_false_as_result_true(isAsync); AssertSql( - $""" - SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` - FROM `Products` AS `p` - WHERE `p`.`UnitsInStock` >= 20 - """); + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`UnitsInStock` >= CINT(20) +"""); } public override async Task Where_ternary_boolean_condition_with_false_as_result_false(bool isAsync) @@ -1291,7 +1291,7 @@ public override async Task Where_ternary_boolean_condition_negated(bool async) """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` -WHERE IIF(`p`.`UnitsInStock` >= 20, TRUE, FALSE) +WHERE IIF(`p`.`UnitsInStock` >= CINT(20), TRUE, FALSE) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs index 0a1747d2..8215c108 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs @@ -3230,7 +3230,7 @@ public override async Task Null_semantics_function(bool async) """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE (MID(`e`.`NullableStringA`, IIF(0 = -1, 0, 0) + 1, `e`.`IntA`) <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR IIF(0 = -1, 0, 0) IS NULL OR `e`.`NullableStringB` IS NULL) AND ((`e`.`NullableStringA` IS NOT NULL AND IIF(0 = -1, 0, 0) IS NOT NULL) OR `e`.`NullableStringB` IS NOT NULL) +WHERE (MID(`e`.`NullableStringA`, 0 + 1, `e`.`IntA`) <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs index ab4d987c..fe67e00e 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs @@ -262,7 +262,7 @@ public override async Task Unary() """ SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` FROM `Blogs` AS `b` -WHERE CINT(`b`.`Id`) = 8 +WHERE CINT(`b`.`Id`) = CINT(8) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/SqlQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/SqlQueryJetTest.cs index 11cbfd83..cef2b524 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/SqlQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/SqlQueryJetTest.cs @@ -470,7 +470,7 @@ public override async Task SqlQueryRaw_composed_with_predicate(bool async) FROM ( SELECT * FROM `Customers` ) AS `m` -WHERE MID(`m`.`ContactName`, IIF(0 = -1, 0, 0) + 1, 1) = MID(`m`.`CompanyName`, IIF(0 = -1, 0, 0) + 1, 1) +WHERE MID(`m`.`ContactName`, 0 + 1, 1) = MID(`m`.`CompanyName`, 0 + 1, 1) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs index 07254eea..e7f49968 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs @@ -1388,7 +1388,7 @@ UNION ALL FROM `LocustCommanders` AS `l1` ) AS `u` ON `l`.`DeputyCommanderName` = `u`.`Name`) LEFT JOIN `LocustCommanders` AS `l2` ON `l`.`CommanderName` = `l2`.`Name` -WHERE IIF(`u`.`Name` IS NOT NULL, `u`.`ThreatLevel`, `l2`.`ThreatLevel`) = 4 +WHERE IIF(`u`.`Name` IS NOT NULL, `u`.`ThreatLevel`, `l2`.`ThreatLevel`) = CINT(4) """); } @@ -8002,7 +8002,7 @@ UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` ) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` -WHERE IIF(`u`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, IIF(0 = -1, 0, 0) + 1, `u`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR IIF(0 = -1, 0, 0) IS NULL OR `u`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) +WHERE IIF(`u`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `u`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `u`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -8024,7 +8024,7 @@ UNION ALL FROM `Officers` AS `o` ) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` -WHERE IIF(LEN(`s`.`Name`) IS NULL, NULL, MID(`t`.`Note`, IIF(0 = -1, 0, 0) + 1, IIF(LEN(`s`.`Name`) IS NULL, NULL, CLNG(LEN(`s`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR IIF(0 = -1, 0, 0) IS NULL OR `s`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) +WHERE IIF(LEN(`s`.`Name`) IS NULL, NULL, MID(`t`.`Note`, 0 + 1, IIF(LEN(`s`.`Name`) IS NULL, NULL, CLNG(LEN(`s`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -10625,7 +10625,7 @@ public override async Task Projecting_property_converted_to_nullable_with_functi AssertSql( """ -SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL), IIF(0 = -1, 0, 0) + 1, 3) +SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL), 0 + 1, 3) FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -10643,7 +10643,7 @@ public override async Task Projecting_property_converted_to_nullable_with_functi AssertSql( """ -SELECT `t`.`Note`, MID(`t`.`Note`, IIF(0 = -1, 0, 0) + 1, IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL)) AS `Function` +SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL)) AS `Function` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs index 6f6957e7..037a8135 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs @@ -1109,7 +1109,7 @@ LEFT JOIN ( FROM `LocustLeaders` AS `l1` INNER JOIN `LocustCommanders` AS `l2` ON `l1`.`Name` = `l2`.`Name` ) AS `s0` ON `l`.`CommanderName` = `s0`.`Name` -WHERE IIF(`s`.`Name` IS NOT NULL, `s`.`ThreatLevel`, `s0`.`ThreatLevel`) = 4 +WHERE IIF(`s`.`Name` IS NOT NULL, `s`.`ThreatLevel`, `s0`.`ThreatLevel`) = CINT(4) """); } @@ -6409,7 +6409,7 @@ LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` -WHERE IIF(`s`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, IIF(0 = -1, 0, 0) + 1, `s`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR IIF(0 = -1, 0, 0) IS NULL OR `s`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) +WHERE IIF(`s`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `s`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -6428,7 +6428,7 @@ LEFT JOIN ( FROM `Gears` AS `g` ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` -WHERE IIF(LEN(`s0`.`Name`) IS NULL, NULL, MID(`t`.`Note`, IIF(0 = -1, 0, 0) + 1, IIF(LEN(`s0`.`Name`) IS NULL, NULL, CLNG(LEN(`s0`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR IIF(0 = -1, 0, 0) IS NULL OR `s0`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) +WHERE IIF(LEN(`s0`.`Name`) IS NULL, NULL, MID(`t`.`Note`, 0 + 1, IIF(LEN(`s0`.`Name`) IS NULL, NULL, CLNG(LEN(`s0`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s0`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -8492,7 +8492,7 @@ public override async Task Projecting_property_converted_to_nullable_with_functi AssertSql( """ -SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL), IIF(0 = -1, 0, 0) + 1, 3) +SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL), 0 + 1, 3) FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -8507,7 +8507,7 @@ public override async Task Projecting_property_converted_to_nullable_with_functi AssertSql( """ -SELECT `t`.`Note`, MID(`t`.`Note`, IIF(0 = -1, 0, 0) + 1, IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL)) AS `Function` +SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL)) AS `Function` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` diff --git a/test/EFCore.Jet.FunctionalTests/Query/Translations/EnumTranslationsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/Translations/EnumTranslationsJetTest.cs index 1086b961..4ae7d61b 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/Translations/EnumTranslationsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/Translations/EnumTranslationsJetTest.cs @@ -150,7 +150,7 @@ public override async Task Bitwise_and_integral_constant() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE (CLNG(CINT(`b`.`FlagsEnum`)) BAND 8) = 8 +WHERE (CLNG(CINT(`b`.`FlagsEnum`)) BAND CINT(8)) = CINT(8) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/Translations/MathTranslationsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/Translations/MathTranslationsJetTest.cs index 3fae07d8..629a0f28 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/Translations/MathTranslationsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/Translations/MathTranslationsJetTest.cs @@ -425,7 +425,7 @@ public override async Task Log10() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`Double` > 0.0 AND (LOG(`b`.`Double`) / 2.30258509299405) <> 0.0 +WHERE `b`.`Double` > 0.0 AND (LOG(`b`.`Double`) / 2.302585092994046) <> 0.0 """); } @@ -437,7 +437,7 @@ public override async Task Log10_float() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`Float` > 0 AND (LOG(`b`.`Float`) / 2.302585) <> 0 +WHERE `b`.`Float` > 0 AND (LOG(`b`.`Float`) / 2.3025851) <> 0 """); } @@ -500,7 +500,7 @@ public override async Task Max() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE IIF(`b`.`Int` > (`b`.`Short` - 3), `b`.`Int`, `b`.`Short` - 3) = `b`.`Int` +WHERE IIF(`b`.`Int` > (`b`.`Short` - CINT(3)), `b`.`Int`, `b`.`Short` - CINT(3)) = `b`.`Int` """); } @@ -512,7 +512,7 @@ public override async Task Max_nested() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE IIF(IIF((`b`.`Short` - 3) > `b`.`Int`, `b`.`Short` - 3, `b`.`Int`) > 1, IIF((`b`.`Short` - 3) > `b`.`Int`, `b`.`Short` - 3, `b`.`Int`), 1) = `b`.`Int` +WHERE IIF(IIF((`b`.`Short` - CINT(3)) > `b`.`Int`, `b`.`Short` - CINT(3), `b`.`Int`) > 1, IIF((`b`.`Short` - CINT(3)) > `b`.`Int`, `b`.`Short` - CINT(3), `b`.`Int`), 1) = `b`.`Int` """); } @@ -524,7 +524,7 @@ public override async Task Max_nested_twice() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE IIF(IIF(IIF(1 > `b`.`Int`, 1, `b`.`Int`) > 2, IIF(1 > `b`.`Int`, 1, `b`.`Int`), 2) > (`b`.`Short` - 3), IIF(IIF(1 > `b`.`Int`, 1, `b`.`Int`) > 2, IIF(1 > `b`.`Int`, 1, `b`.`Int`), 2), `b`.`Short` - 3) = `b`.`Int` +WHERE IIF(IIF(IIF(1 > `b`.`Int`, 1, `b`.`Int`) > 2, IIF(1 > `b`.`Int`, 1, `b`.`Int`), 2) > (`b`.`Short` - CINT(3)), IIF(IIF(1 > `b`.`Int`, 1, `b`.`Int`) > 2, IIF(1 > `b`.`Int`, 1, `b`.`Int`), 2), `b`.`Short` - CINT(3)) = `b`.`Int` """); } @@ -536,7 +536,7 @@ public override async Task Min() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE IIF(`b`.`Int` < (`b`.`Short` + 3), `b`.`Int`, `b`.`Short` + 3) = `b`.`Int` +WHERE IIF(`b`.`Int` < (`b`.`Short` + CINT(3)), `b`.`Int`, `b`.`Short` + CINT(3)) = `b`.`Int` """); } @@ -548,7 +548,7 @@ public override async Task Min_nested() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE IIF(IIF((`b`.`Short` + 3) < `b`.`Int`, `b`.`Short` + 3, `b`.`Int`) < 99999, IIF((`b`.`Short` + 3) < `b`.`Int`, `b`.`Short` + 3, `b`.`Int`), 99999) = `b`.`Int` +WHERE IIF(IIF((`b`.`Short` + CINT(3)) < `b`.`Int`, `b`.`Short` + CINT(3), `b`.`Int`) < 99999, IIF((`b`.`Short` + CINT(3)) < `b`.`Int`, `b`.`Short` + CINT(3), `b`.`Int`), 99999) = `b`.`Int` """); } @@ -560,7 +560,7 @@ public override async Task Min_nested_twice() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE IIF(IIF(IIF(99999 < `b`.`Int`, 99999, `b`.`Int`) < 99998, IIF(99999 < `b`.`Int`, 99999, `b`.`Int`), 99998) < (`b`.`Short` + 3), IIF(IIF(99999 < `b`.`Int`, 99999, `b`.`Int`) < 99998, IIF(99999 < `b`.`Int`, 99999, `b`.`Int`), 99998), `b`.`Short` + 3) = `b`.`Int` +WHERE IIF(IIF(IIF(99999 < `b`.`Int`, 99999, `b`.`Int`) < 99998, IIF(99999 < `b`.`Int`, 99999, `b`.`Int`), 99998) < (`b`.`Short` + CINT(3)), IIF(IIF(99999 < `b`.`Int`, 99999, `b`.`Int`) < 99998, IIF(99999 < `b`.`Int`, 99999, `b`.`Int`), 99998), `b`.`Short` + CINT(3)) = `b`.`Int` """); } @@ -572,7 +572,7 @@ public override async Task Degrees() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE (`b`.`Double` * (180.0 / 3.14159265358979)) > 0.0 +WHERE (`b`.`Double` * (180.0 / 3.141592653589793)) > 0.0 """); } @@ -584,7 +584,7 @@ public override async Task Degrees_float() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE (`b`.`Float` * (180 / 3.141593)) > 0 +WHERE (`b`.`Float` * (180 / 3.1415927)) > 0 """); } @@ -596,7 +596,7 @@ public override async Task Radians() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE (`b`.`Double` * (3.14159265358979 / 180.0)) > 0.0 +WHERE (`b`.`Double` * (3.141592653589793 / 180.0)) > 0.0 """); } @@ -608,7 +608,7 @@ public override async Task Radians_float() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE (`b`.`Float` * (3.141593 / 180)) > 0 +WHERE (`b`.`Float` * (3.1415927 / 180)) > 0 """); } @@ -622,7 +622,7 @@ public override async Task Acos() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`Double` >= -1.0 AND `b`.`Double` <= 1.0 AND (1.5707963267949 + ATN(-`b`.`Double` / SQR(-(`b`.`Double` * `b`.`Double`) + 1.0))) > 1.0 +WHERE `b`.`Double` >= -1.0 AND `b`.`Double` <= 1.0 AND (1.5707963267948966 + ATN(-`b`.`Double` / SQR(-(`b`.`Double` * `b`.`Double`) + 1.0))) > 1.0 """); } @@ -634,7 +634,7 @@ public override async Task Acos_float() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`Float` >= -1 AND `b`.`Float` <= 1 AND (1.5707963267949 + ATN(-`b`.`Float` / SQR(-(`b`.`Float` * `b`.`Float`) + 1))) > 0.0 +WHERE `b`.`Float` >= -1 AND `b`.`Float` <= 1 AND (1.5707963267948966 + ATN(-`b`.`Float` / SQR(-(`b`.`Float` * `b`.`Float`) + 1))) > 0.0 """); } @@ -647,9 +647,9 @@ public override async Task Asin() AssertSql( """ -SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] -FROM [BasicTypesEntities] AS [b] -WHERE [b].[Double] >= -1.0E0 AND [b].[Double] <= 1.0E0 AND ASIN([b].[Double]) > -1.7976931348623157E+308 +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Double` >= -1.0 AND `b`.`Double` <= 1.0 AND ATN(`b`.`Double` / SQR(-(`b`.`Double` * `b`.`Double`) + 1.0)) > -1.7976931348623157E+308 """); } @@ -659,9 +659,9 @@ public override async Task Asin_float() AssertSql( """ -SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] -FROM [BasicTypesEntities] AS [b] -WHERE [b].[Float] >= CAST(-1 AS real) AND [b].[Float] <= CAST(1 AS real) AND CAST(ASIN([b].[Float]) AS float) > -1.7976931348623157E+308 +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Float` >= -1 AND `b`.`Float` <= 1 AND IIF(ATN(`b`.`Float` / SQR(-(`b`.`Float` * `b`.`Float`) + 1)) IS NULL, NULL, CDBL(ATN(`b`.`Float` / SQR(-(`b`.`Float` * `b`.`Float`) + 1)))) > -1.7976931348623157E+308 """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/Translations/MiscellaneousTranslationsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/Translations/MiscellaneousTranslationsJetTest.cs index 0ef87138..e2da968b 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/Translations/MiscellaneousTranslationsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/Translations/MiscellaneousTranslationsJetTest.cs @@ -147,61 +147,61 @@ public override async Task Convert_ToByte() await base.Convert_ToByte(); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` WHERE CBYTE(`b`.`Bool` * -1) = CBYTE(1) """, - // - """ + // + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` WHERE CBYTE(`b`.`Byte`) = CBYTE(8) """, - // - """ + // + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` WHERE `b`.`Decimal` >= 0.0 AND `b`.`Decimal` <= 255.0 AND CBYTE(`b`.`Decimal`) = CBYTE(12) """, - // - """ + // + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` WHERE `b`.`Double` >= 0.0 AND `b`.`Double` <= 255.0 AND CBYTE(`b`.`Double`) = CBYTE(12) """, - // - """ + // + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` WHERE `b`.`Float` >= 0 AND `b`.`Float` <= 255 AND CBYTE(`b`.`Float`) = CBYTE(12) """, - // - """ + // + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`Short` >= 0 AND `b`.`Short` <= 255 AND CBYTE(`b`.`Short`) = CBYTE(12) +WHERE `b`.`Short` >= CINT(0) AND `b`.`Short` <= CINT(255) AND CBYTE(`b`.`Short`) = CBYTE(12) """, - // - """ + // + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` WHERE `b`.`Int` >= 0 AND `b`.`Int` <= 255 AND CBYTE(`b`.`Int`) = CBYTE(12) """, - // - """ + // + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` WHERE `b`.`Long` >= 0 AND `b`.`Long` <= 255 AND CBYTE(`b`.`Long`) = CBYTE(12) """, - // - """ + // + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` WHERE `b`.`Int` >= 0 AND `b`.`Int` <= 255 AND CBYTE((`b`.`Int` & '')) = CBYTE(12) """, - // - """ + // + """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` WHERE `b`.`Int` >= 0 AND `b`.`Int` <= 255 AND CBYTE(`b`.`Int`) = CBYTE(12) @@ -348,61 +348,61 @@ public override async Task Convert_ToInt16() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT(`b`.`Bool` * -1) = 1 +WHERE CINT(`b`.`Bool` * -1) = CINT(1) """, // """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT(`b`.`Byte`) = 12 +WHERE CINT(`b`.`Byte`) = CINT(12) """, // """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT(`b`.`Decimal`) = 12 +WHERE CINT(`b`.`Decimal`) = CINT(12) """, // """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT(`b`.`Double`) = 12 +WHERE CINT(`b`.`Double`) = CINT(12) """, // """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT(`b`.`Float`) = 12 +WHERE CINT(`b`.`Float`) = CINT(12) """, // """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT(`b`.`Short`) = 12 +WHERE CINT(`b`.`Short`) = CINT(12) """, // """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT(`b`.`Int`) = 12 +WHERE CINT(`b`.`Int`) = CINT(12) """, // """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT(`b`.`Long`) = 12 +WHERE CINT(`b`.`Long`) = CINT(12) """, // """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT((`b`.`Int` & '')) = 12 +WHERE CINT((`b`.`Int` & '')) = CINT(12) """, // """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE CINT(`b`.`Int`) = 12 +WHERE CINT(`b`.`Int`) = CINT(12) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/Translations/Operators/BitwiseOperatorTranslationsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/Translations/Operators/BitwiseOperatorTranslationsJetTest.cs index 366f491a..fae5229d 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/Translations/Operators/BitwiseOperatorTranslationsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/Translations/Operators/BitwiseOperatorTranslationsJetTest.cs @@ -147,7 +147,7 @@ public override async Task And_or_over_boolean() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE (`b`.`Int` = 12 AND `b`.`Short` = 12) OR `b`.`String` = 'Seattle' +WHERE (`b`.`Int` = 12 AND `b`.`Short` = CINT(12)) OR `b`.`String` = 'Seattle' """); } @@ -159,7 +159,7 @@ public override async Task Or_with_logical_or() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`Int` = 12 OR `b`.`Short` = 12 OR `b`.`String` = 'Seattle' +WHERE `b`.`Int` = 12 OR `b`.`Short` = CINT(12) OR `b`.`String` = 'Seattle' """); } @@ -171,7 +171,7 @@ public override async Task And_with_logical_and() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`Int` = 8 AND `b`.`Short` = 8 AND `b`.`String` = 'Seattle' +WHERE `b`.`Int` = 8 AND `b`.`Short` = CINT(8) AND `b`.`String` = 'Seattle' """); } @@ -183,7 +183,7 @@ public override async Task Or_with_logical_and() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE (`b`.`Int` = 8 OR `b`.`Short` = 9) AND `b`.`String` = 'Seattle' +WHERE (`b`.`Int` = 8 OR `b`.`Short` = CINT(9)) AND `b`.`String` = 'Seattle' """); } @@ -195,7 +195,7 @@ public override async Task And_with_logical_or() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE (`b`.`Int` = 12 AND `b`.`Short` = 12) OR `b`.`String` = 'Seattle' +WHERE (`b`.`Int` = 12 AND `b`.`Short` = CINT(12)) OR `b`.`String` = 'Seattle' """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/Translations/StringTranslationsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/Translations/StringTranslationsJetTest.cs index 0ca51885..580becb3 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/Translations/StringTranslationsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/Translations/StringTranslationsJetTest.cs @@ -336,7 +336,7 @@ public override async Task Substring() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 3 AND MID(`b`.`String`, IIF(1 = -1, 0, 1) + 1, 2) = 'ea' +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 3 AND MID(`b`.`String`, 1 + 1, 2) = 'ea' """); } @@ -386,7 +386,7 @@ public override async Task Substring_with_two_args_with_zero_startIndex() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 3 AND MID(`b`.`String`, IIF(0 = -1, 0, 0) + 1, 3) = 'Sea' +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 3 AND MID(`b`.`String`, 0 + 1, 3) = 'Sea' """); } @@ -398,7 +398,7 @@ public override async Task Substring_with_two_args_with_zero_length() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 2 AND MID(`b`.`String`, IIF(2 = -1, 0, 2) + 1, 0) = '' +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 2 AND MID(`b`.`String`, 2 + 1, 0) = '' """); } @@ -1029,7 +1029,7 @@ public override async Task Compare_nested() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`String` <> MID(`b`.`String`, IIF(0 = -1, 0, 0) + 1, 0) +WHERE `b`.`String` <> MID(`b`.`String`, 0 + 1, 0) """, // """ @@ -1047,7 +1047,7 @@ public override async Task Compare_nested() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`String` > MID(`b`.`String`, IIF(0 = -1, 0, 0) + 1, 0) +WHERE `b`.`String` > MID(`b`.`String`, 0 + 1, 0) """, // """ @@ -1245,7 +1245,7 @@ public override async Task CompareTo_nested() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`String` <> MID(`b`.`String`, IIF(0 = -1, 0, 0) + 1, 0) +WHERE `b`.`String` <> MID(`b`.`String`, 0 + 1, 0) """, // """ @@ -1263,7 +1263,7 @@ public override async Task CompareTo_nested() """ SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` FROM `BasicTypesEntities` AS `b` -WHERE `b`.`String` > MID(`b`.`String`, IIF(0 = -1, 0, 0) + 1, 0) +WHERE `b`.`String` > MID(`b`.`String`, 0 + 1, 0) """, // """ diff --git a/test/EFCore.Jet.FunctionalTests/Query/Translations/Temporal/DateTimeOffsetTranslationsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/Translations/Temporal/DateTimeOffsetTranslationsJetTest.cs index a7e24513..4c6cb57e 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/Translations/Temporal/DateTimeOffsetTranslationsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/Translations/Temporal/DateTimeOffsetTranslationsJetTest.cs @@ -48,11 +48,9 @@ public override async Task Date() AssertSql( """ -@Date='0001-01-01T00:00:00.0000000' - -SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] -FROM [BasicTypesEntities] AS [b] -WHERE CONVERT(date, [b].[DateTimeOffset]) > @Date +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEVALUE(`b`.`DateTimeOffset`) > #0100-01-01# """); } diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesEntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesEntityType.cs index 2dfbab56..8b7ba773 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesEntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesEntityType.cs @@ -420,7 +420,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - boolToZeroOneConverterProperty.TypeMapping = ShortTypeMapping.Default.Clone( + boolToZeroOneConverterProperty.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (bool v1, bool v2) => v1 == v2, int (bool v) => ((object)v).GetHashCode(), @@ -1980,7 +1980,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - enum16.TypeMapping = ShortTypeMapping.Default.Clone( + enum16.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -2062,7 +2062,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -2377,7 +2377,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -3336,7 +3336,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - enum8.TypeMapping = ShortTypeMapping.Default.Clone( + enum8.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -3418,7 +3418,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -3733,7 +3733,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -6407,7 +6407,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - int16.TypeMapping = ShortTypeMapping.Default.Clone( + int16.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -6472,7 +6472,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -6812,7 +6812,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - int8.TypeMapping = ShortTypeMapping.Default.Clone( + int8.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (sbyte v1, sbyte v2) => v1 == v2, int (sbyte v) => ((int)v), @@ -6894,7 +6894,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (sbyte v) => ((short)v), sbyte (short v) => ((sbyte)v)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (sbyte v1, sbyte v2) => v1 == v2, int (sbyte v) => ((int)v), @@ -7978,7 +7978,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableEnum16.TypeMapping = ShortTypeMapping.Default.Clone( + nullableEnum16.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8061,7 +8061,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8119,7 +8119,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableEnum16AsString.TypeMapping = ShortTypeMapping.Default.Clone( + nullableEnum16AsString.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8202,7 +8202,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8287,7 +8287,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8372,7 +8372,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -9334,7 +9334,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableEnum8.TypeMapping = ShortTypeMapping.Default.Clone( + nullableEnum8.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9417,7 +9417,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9475,7 +9475,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableEnum8AsString.TypeMapping = ShortTypeMapping.Default.Clone( + nullableEnum8AsString.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9558,7 +9558,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9643,7 +9643,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9728,7 +9728,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -11996,7 +11996,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableInt16.TypeMapping = ShortTypeMapping.Default.Clone( + nullableInt16.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -12063,7 +12063,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -12347,7 +12347,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableInt8.TypeMapping = ShortTypeMapping.Default.Clone( + nullableInt8.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (sbyte v1, sbyte v2) => v1 == v2, int (sbyte v) => ((int)v), @@ -12430,7 +12430,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (sbyte v) => ((short)v), sbyte (short v) => ((sbyte)v)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (sbyte v1, sbyte v2) => v1 == v2, int (sbyte v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedType0EntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedType0EntityType.cs index bc926ca9..ce3305de 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedType0EntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedType0EntityType.cs @@ -807,7 +807,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeEntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeEntityType.cs index f9dd193e..af9ed25a 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeEntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeEntityType.cs @@ -812,7 +812,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseEntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseEntityType.cs index 18c025c1..9d7a85c1 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseEntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseEntityType.cs @@ -950,7 +950,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesEntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesEntityType.cs index 2dfbab56..8b7ba773 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesEntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesEntityType.cs @@ -420,7 +420,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - boolToZeroOneConverterProperty.TypeMapping = ShortTypeMapping.Default.Clone( + boolToZeroOneConverterProperty.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (bool v1, bool v2) => v1 == v2, int (bool v) => ((object)v).GetHashCode(), @@ -1980,7 +1980,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - enum16.TypeMapping = ShortTypeMapping.Default.Clone( + enum16.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -2062,7 +2062,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -2377,7 +2377,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -3336,7 +3336,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - enum8.TypeMapping = ShortTypeMapping.Default.Clone( + enum8.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -3418,7 +3418,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -3733,7 +3733,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -6407,7 +6407,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - int16.TypeMapping = ShortTypeMapping.Default.Clone( + int16.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -6472,7 +6472,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -6812,7 +6812,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - int8.TypeMapping = ShortTypeMapping.Default.Clone( + int8.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (sbyte v1, sbyte v2) => v1 == v2, int (sbyte v) => ((int)v), @@ -6894,7 +6894,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (sbyte v) => ((short)v), sbyte (short v) => ((sbyte)v)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (sbyte v1, sbyte v2) => v1 == v2, int (sbyte v) => ((int)v), @@ -7978,7 +7978,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableEnum16.TypeMapping = ShortTypeMapping.Default.Clone( + nullableEnum16.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8061,7 +8061,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8119,7 +8119,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableEnum16AsString.TypeMapping = ShortTypeMapping.Default.Clone( + nullableEnum16AsString.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8202,7 +8202,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8287,7 +8287,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -8372,7 +8372,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum16 value) => ((short)value), CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), @@ -9334,7 +9334,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableEnum8.TypeMapping = ShortTypeMapping.Default.Clone( + nullableEnum8.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9417,7 +9417,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9475,7 +9475,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableEnum8AsString.TypeMapping = ShortTypeMapping.Default.Clone( + nullableEnum8AsString.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9558,7 +9558,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9643,7 +9643,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -9728,7 +9728,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (CompiledModelTestBase.Enum8 value) => ((short)value), CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), @@ -11996,7 +11996,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableInt16.TypeMapping = ShortTypeMapping.Default.Clone( + nullableInt16.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -12063,7 +12063,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -12347,7 +12347,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas shadowIndex: -1, relationshipIndex: -1, storeGenerationIndex: -1); - nullableInt8.TypeMapping = ShortTypeMapping.Default.Clone( + nullableInt8.TypeMapping = JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (sbyte v1, sbyte v2) => v1 == v2, int (sbyte v) => ((int)v), @@ -12430,7 +12430,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas new ValueConverter( short (sbyte v) => ((short)v), sbyte (short v) => ((sbyte)v)))), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (sbyte v1, sbyte v2) => v1 == v2, int (sbyte v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedType0EntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedType0EntityType.cs index 570cd6e5..e4d03d4b 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedType0EntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedType0EntityType.cs @@ -796,7 +796,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeEntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeEntityType.cs index d462750b..fa18ae3b 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeEntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeEntityType.cs @@ -777,7 +777,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseEntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseEntityType.cs index eb7ad21d..98eaca43 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseEntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseEntityType.cs @@ -964,7 +964,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseEntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseEntityType.cs index 860bd05e..7ae549da 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseEntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseEntityType.cs @@ -948,7 +948,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -1829,7 +1829,7 @@ public static RuntimeComplexProperty Create(RuntimeEntityType declaringType) JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -3002,7 +3002,7 @@ public static RuntimeComplexProperty Create(RuntimeComplexType declaringType) JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedEntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedEntityType.cs index 62569f00..7c7c4d13 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedEntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedEntityType.cs @@ -979,7 +979,7 @@ public static RuntimeComplexProperty Create(RuntimeEntityType declaringType) JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), @@ -2289,7 +2289,7 @@ public static RuntimeComplexProperty Create(RuntimeComplexType declaringType) JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseEntityType.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseEntityType.cs index 2e2ddc68..3a73a5da 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseEntityType.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseEntityType.cs @@ -963,7 +963,7 @@ public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType bas JsonInt16ReaderWriter.Instance)), jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( JsonInt16ReaderWriter.Instance), - elementMapping: ShortTypeMapping.Default.Clone( + elementMapping: JetShortTypeMapping.Default.Clone( comparer: new ValueComparer( bool (short v1, short v2) => v1 == v2, int (short v) => ((int)v), diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs index 06f1c37f..dc6827c5 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs @@ -796,7 +796,6 @@ CREATE TABLE NoFacetTypes ( smalldatetimeColumn smalldatetime NULL, smallintColumn smallint NOT NULL, smallmoneyColumn smallmoney NOT NULL, - sql_variantColumn sql_variant NULL, textColumn text NULL, timeColumn time NULL, timestampColumn timestamp NULL, @@ -834,7 +833,6 @@ rowversionColumn varbinary(8) NULL Assert.Equal("smalldatetime", columns.Single(c => c.Name == "smalldatetimeColumn").StoreType); Assert.Equal("smallint", columns.Single(c => c.Name == "smallintColumn").StoreType); Assert.Equal("smallmoney", columns.Single(c => c.Name == "smallmoneyColumn").StoreType); - Assert.Equal("sql_variant", columns.Single(c => c.Name == "sql_variantColumn").StoreType); Assert.Equal("text", columns.Single(c => c.Name == "textColumn").StoreType); Assert.Equal("time", columns.Single(c => c.Name == "timeColumn").StoreType); Assert.Equal("tinyint", columns.Single(c => c.Name == "tinyintColumn").StoreType); diff --git a/test/EFCore.Jet.FunctionalTests/TPTTableSplittingJetTest.cs b/test/EFCore.Jet.FunctionalTests/TPTTableSplittingJetTest.cs index b43a4bc8..39f50b39 100644 --- a/test/EFCore.Jet.FunctionalTests/TPTTableSplittingJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/TPTTableSplittingJetTest.cs @@ -235,4 +235,8 @@ WHEN [t0].[Active] IS NOT NULL THEN [t0].[Name] ORDER BY [v].[Name] """); } + + public override Task Can_insert_dependent_with_just_one_parent() + // This scenario is not valid for TPT + => Task.CompletedTask; } diff --git a/test/EFCore.Jet.FunctionalTests/TestUtilities/JetTestStore.cs b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetTestStore.cs index 4216119c..b98e39c1 100644 --- a/test/EFCore.Jet.FunctionalTests/TestUtilities/JetTestStore.cs +++ b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetTestStore.cs @@ -116,7 +116,10 @@ protected override async Task InitializeAsync(Func createContext, Fun } public override DbContextOptionsBuilder AddProviderOptions(DbContextOptionsBuilder builder) - => builder.UseJet(Connection, b => b.ApplyConfiguration().UseShortTextForSystemString()).EnableSensitiveDataLogging(); + // Match EF Core's own SqlServer/Sqlite test stores, which do NOT enable sensitive-data logging at the + // store level (individual fixtures opt in where they need it). The blanket setting made the captured + // command logs balloon into large sensitive strings that pile up in the 32-bit test host. + => builder.UseJet(Connection, b => b.ApplyConfiguration().UseShortTextForSystemString()); private bool CreateDatabase(Func? clean) { diff --git a/test/EFCore.Jet.FunctionalTests/TransactionJetTest.cs b/test/EFCore.Jet.FunctionalTests/TransactionJetTest.cs index 4dbabb47..baefd880 100644 --- a/test/EFCore.Jet.FunctionalTests/TransactionJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/TransactionJetTest.cs @@ -5,6 +5,7 @@ using EntityFrameworkCore.Jet.Infrastructure; using EntityFrameworkCore.Jet.Storage.Internal; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; @@ -64,6 +65,10 @@ public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder build new JetDbContextOptionsBuilder( base.AddOptions(builder)) .ExecutionStrategy(c => new JetExecutionStrategy(c)); + // Jet doesn't support ambient transactions (like SQLite); the enlisted-transaction conformance + // test needs the warning logged rather than thrown so it can read it from the log. Configure it + // here (test-side), not in the provider — matching EFCore.Sqlite's TransactionSqliteTest fixture. + builder.ConfigureWarnings(w => w.Log(RelationalEventId.AmbientTransactionWarning)); return builder; } } diff --git a/test/EFCore.Jet.FunctionalTests/Update/JetUpdateSqlGeneratorTest.cs b/test/EFCore.Jet.FunctionalTests/Update/JetUpdateSqlGeneratorTest.cs index 9be16a13..55e60078 100644 --- a/test/EFCore.Jet.FunctionalTests/Update/JetUpdateSqlGeneratorTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Update/JetUpdateSqlGeneratorTest.cs @@ -117,7 +117,9 @@ public void AppendBulkInsertOperation_appends_merge_if_store_generated_columns_e WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; """, stringBuilder.ToString()); - Assert.Equal(ResultSetMapping.NotLastInResultSet | ResultSetMapping.IsPositionalResultMappingEnabled, grouping); + // Not IsPositionalResultMappingEnabled: Jet emits an INSERT + SELECT per command rather than a set-based + // MERGE ... OUTPUT, so the result rows carry no position column to correlate back to commands. + Assert.Equal(ResultSetMapping.NotLastInResultSet, grouping); } [ConditionalFact] diff --git a/test/EFCore.LibRed.FunctionalTests/AssemblyInfo.cs b/test/EFCore.LibRed.FunctionalTests/AssemblyInfo.cs new file mode 100644 index 00000000..34b3e624 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/AssemblyInfo.cs @@ -0,0 +1,17 @@ +using Xunit; + +// Runs in parallel (MaxParallelThreads = 0). Unlike EFCore.Jet.FunctionalTests — which must serialise because +// the ACE OLE DB provider crashes the host with 0xC0000005 under concurrent connections — LibRed uses no ACE +// and isolates concurrent connections itself: a transaction's writes are buffered in a private per-connection +// deferred-write overlay and published to the shared page cache only on commit (read-committed isolation), so +// the many xUnit collections EF's shared-store fixtures place on one physical .accdb run concurrently +// without one test's uncommitted (or rolled-back) writes leaking into another. See PageChannel's overlay and +// TransactionIsolationTests. +// +// Requires an x64 test host. testhost.x86.exe is not LargeAddressAware (2 GB cap), and LibRed — being an +// in-process, fully-managed engine — puts its whole working set (page caches, catalogs, query buffers) in the +// same managed address space as EF and the test platform, unlike out-of-process/native providers (SQL Server, +// ACE). Under this concurrency that overflows 32-bit; on x64 the full ~38k-test suite runs green in parallel. +[assembly: CollectionBehavior( + DisableTestParallelization = false, + MaxParallelThreads = 0)] diff --git a/test/EFCore.LibRed.FunctionalTests/BatchingTest.cs b/test/EFCore.LibRed.FunctionalTests/BatchingTest.cs new file mode 100644 index 00000000..fba6c2ec --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BatchingTest.cs @@ -0,0 +1,480 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +#nullable disable +// ReSharper disable UnusedAutoPropertyAccessor.Local +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class BatchingTest(BatchingTest.BatchingTestFixture fixture) + : IClassFixture + { + protected BatchingTestFixture Fixture { get; } = fixture; + + [ConditionalTheory] + [InlineData(true, true, true)] + [InlineData(false, true, true)] + [InlineData(true, false, true)] + [InlineData(false, false, true)] + [InlineData(true, true, false)] + [InlineData(false, true, false)] + [InlineData(true, false, false)] + [InlineData(false, false, false)] + public Task Inserts_are_batched_correctly(bool clientPk, bool clientFk, bool clientOrder) + { + var expectedBlogs = new List(); + return ExecuteWithStrategyInTransactionAsync( + context => + { + var owner1 = new Owner(); + var owner2 = new Owner(); + context.Owners.Add(owner1); + context.Owners.Add(owner2); + + for (var i = 1; i < 500; i++) + { + var blog = new Blog(); + if (clientPk) + { + blog.Id = Guid.NewGuid(); + } + + if (clientFk) + { + blog.Owner = i % 2 == 0 ? owner1 : owner2; + } + + if (clientOrder) + { + blog.Order = i; + } + + context.Set().Add(blog); + expectedBlogs.Add(blog); + } + + return context.SaveChangesAsync(); + }, + context => AssertDatabaseState(context, clientOrder, expectedBlogs)); + } + + [ConditionalFact] + public Task Inserts_and_updates_are_batched_correctly() + { + var expectedBlogs = new List(); + + return ExecuteWithStrategyInTransactionAsync( + async context => + { + var owner1 = new Owner { Name = "0" }; + var owner2 = new Owner { Name = "1" }; + context.Owners.Add(owner1); + context.Owners.Add(owner2); + + var blog1 = new Blog + { + Id = Guid.NewGuid(), + Owner = owner1, + Order = 1 + }; + + context.Set().Add(blog1); + expectedBlogs.Add(blog1); + + await context.SaveChangesAsync(); + + owner2.Name = "2"; + + blog1.Order = 0; + var blog2 = new Blog + { + Id = Guid.NewGuid(), + Owner = owner1, + Order = 1 + }; + + context.Set().Add(blog2); + expectedBlogs.Add(blog2); + + var blog3 = new Blog + { + Id = Guid.NewGuid(), + Owner = owner2, + Order = 2 + }; + + context.Set().Add(blog3); + expectedBlogs.Add(blog3); + + await context.SaveChangesAsync(); + }, + context => AssertDatabaseState(context, true, expectedBlogs)); + } + + [ConditionalTheory] + [InlineData(1)] + [InlineData(3)] + [InlineData(4)] + [InlineData(100)] + public Task Insertion_order_is_preserved(int maxBatchSize) + { + var blogId = new Guid(); + + return TestHelpers.ExecuteWithStrategyInTransactionAsync( + () => (BloggingContext)Fixture.CreateContext(maxBatchSize: maxBatchSize), + UseTransaction, async context => + { + var owner = new Owner(); + var blog = new Blog { Owner = owner }; + + for (var i = 0; i < 20; i++) + { + context.Add(new Post { Order = i, Blog = blog }); + } + + await context.SaveChangesAsync(); + + blogId = blog.Id; + }, async context => + { + var posts = context.Set().Where(p => p.BlogId == blogId).OrderBy(p => p.Order); + var lastId = 0; + foreach (var post in await posts.ToListAsync()) + { + Assert.True(post.PostId > lastId, $"Last ID: {lastId}, current ID: {post.PostId}"); + lastId = post.PostId; + } + }); + } + + [ConditionalFact] + public async Task Deadlock_on_inserts_and_deletes_with_dependents_is_handled_correctly() + { + var blogs = new List(); + + using (var context = CreateContext()) + { + var owner1 = new Owner { Name = "0" }; + var owner2 = new Owner { Name = "1" }; + context.Owners.Add(owner1); + context.Owners.Add(owner2); + + blogs.Add( + new Blog + { + Id = Guid.NewGuid(), + Owner = owner1, + Order = 1 + }); + blogs.Add( + new Blog + { + Id = Guid.NewGuid(), + Owner = owner2, + Order = 2 + }); + blogs.Add( + new Blog + { + Id = Guid.NewGuid(), + Owner = owner1, + Order = 3 + }); + blogs.Add( + new Blog + { + Id = Guid.NewGuid(), + Owner = owner2, + Order = 4 + }); + + context.AddRange(blogs); + + await context.SaveChangesAsync(); + } + + var tasks = new List(); + for (var i = 0; i < 10; i++) + { + foreach (var blog in blogs) + { + tasks.Add(RemoveAndAddPosts(blog)); + } + } + + Task.WaitAll(tasks.ToArray()); + + async Task RemoveAndAddPosts(Blog blog) + { + using var context = (BloggingContext)Fixture.CreateContext(useConnectionString: true); + + context.Attach(blog); + blog.Posts.Clear(); + + blog.Posts.Add(new Post { Comments = { new Comment() } }); + blog.Posts.Add(new Post { Comments = { new Comment() } }); + blog.Posts.Add(new Post { Comments = { new Comment() } }); + + await context.SaveChangesAsync(); + } + + await Fixture.ReseedAsync(); + } + + [ConditionalFact] + public async Task Deadlock_on_deletes_with_dependents_is_handled_correctly() + { + var owners = new[] { new Owner { Name = "0" }, new Owner { Name = "1" } }; + using (var context = CreateContext()) + { + context.Owners.AddRange(owners); + + for (var h = 0; h <= 40; h++) + { + var owner = owners[h % 2]; + var blog = new Blog + { + Id = Guid.NewGuid(), + Owner = owner, + Order = h + }; + + for (var i = 0; i <= 40; i++) + { + blog.Posts.Add(new Post { Comments = { new Comment() } }); + } + + context.Add(blog); + } + + await context.SaveChangesAsync(); + } + + async Task Action(Owner owner) + { + using var context = (BloggingContext)Fixture.CreateContext(useConnectionString: true); + + context.RemoveRange(await context.Blogs.Where(b => b.OwnerId == owner.Id).ToListAsync()); + + await context.SaveChangesAsync(); + } + + var tasks = new List(); + foreach (var owner in owners) + { + tasks.Add(Action(owner)); + } + + Task.WaitAll(tasks.ToArray()); + + using (var context = CreateContext()) + { + Assert.Empty(await context.Blogs.ToListAsync()); + } + + await Fixture.ReseedAsync(); + } + + [ConditionalFact] + public Task Inserts_when_database_type_is_different() + => ExecuteWithStrategyInTransactionAsync( + context => + { + var owner1 = new Owner { Id = "0", Name = "Zero" }; + var owner2 = new Owner { Id = "A", Name = string.Join("", Enumerable.Repeat('A', 255)) }; + context.Owners.Add(owner1); + context.Owners.Add(owner2); + + return context.SaveChangesAsync(); + }, async context => Assert.Equal(2, await context.Owners.CountAsync())); + + [ConditionalTheory] + [InlineData(3)] + [InlineData(4)] + public Task Inserts_are_batched_only_when_necessary(int minBatchSize) + { + var expectedBlogs = new List(); + return TestHelpers.ExecuteWithStrategyInTransactionAsync( + () => (BloggingContext)Fixture.CreateContext(minBatchSize), + UseTransaction, async context => + { + var owner = new Owner(); + context.Owners.Add(owner); + + for (var i = 1; i < 3; i++) + { + var blog = new Blog { Id = Guid.NewGuid(), Owner = owner }; + + context.Set().Add(blog); + expectedBlogs.Add(blog); + } + + Fixture.TestSqlLoggerFactory.Clear(); + + await context.SaveChangesAsync(); + + Assert.Contains( + minBatchSize == 3 + ? RelationalResources.LogBatchReadyForExecution(new TestLogger()) + .GenerateMessage(3) + : RelationalResources.LogBatchSmallerThanMinBatchSize(new TestLogger()) + .GenerateMessage(3, 4), + Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); + + Assert.Equal(minBatchSize <= 3 ? 1 : 3, Fixture.TestSqlLoggerFactory.SqlStatements.Count); + }, context => AssertDatabaseState(context, false, expectedBlogs)); + } + + private async Task AssertDatabaseState(DbContext context, bool clientOrder, List expectedBlogs) + { + expectedBlogs = clientOrder + ? [.. expectedBlogs.OrderBy(b => b.Order)] + : [.. expectedBlogs.OrderBy(b => b.Id)]; + var actualBlogs = clientOrder + ? await context.Set().OrderBy(b => b.Order).ToListAsync() + : [.. expectedBlogs.OrderBy(b => b.Id)]; + Assert.Equal(expectedBlogs.Count, actualBlogs.Count); + + for (var i = 0; i < actualBlogs.Count; i++) + { + var expected = expectedBlogs[i]; + var actual = actualBlogs[i]; + Assert.Equal(expected.Id, actual.Id); + Assert.Equal(expected.Order, actual.Order); + Assert.Equal(expected.OwnerId, actual.OwnerId); + Assert.Equal(expected.Version, actual.Version); + } + } + + private BloggingContext CreateContext() => (BloggingContext)Fixture.CreateContext(); + + private Task ExecuteWithStrategyInTransactionAsync( + Func testOperation, + Func nestedTestOperation) + => TestHelpers.ExecuteWithStrategyInTransactionAsync( + CreateContext, UseTransaction, testOperation, nestedTestOperation); + + protected void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + private class BloggingContext(DbContextOptions options) : PoolableDbContext(options) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).ValueGeneratedOnAdd(); + b.Property(e => e.Version).IsConcurrencyToken().ValueGeneratedOnAddOrUpdate(); + b.Property(e => e.Name).HasColumnType("nvarchar(255)"); + }); + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasDefaultValueSql("GenGUID()"); + b.Property(e => e.Version).IsConcurrencyToken().ValueGeneratedOnAddOrUpdate(); + }); + } + + // ReSharper disable once UnusedMember.Local + public DbSet Blogs { get; set; } + public DbSet Owners { get; set; } + } + + private class Blog + { + public Guid Id { get; set; } + public int Order { get; set; } + public string OwnerId { get; set; } + public Owner Owner { get; set; } + public byte[] Version { get; set; } + public ICollection Posts { get; } = []; + } + + private class Owner + { + public string Id { get; set; } + public string Name { get; set; } + public byte[] Version { get; set; } + } + + private class Post + { + public int PostId { get; set; } + public int? Order { get; set; } + public Guid BlogId { get; set; } + public Blog Blog { get; set; } + public ICollection Comments { get; } = []; + } + + private class Comment + { + public int CommentId { get; set; } + public int PostId { get; set; } + public Post Post { get; set; } + } + + public class BatchingTestFixture : SharedStoreFixtureBase + { + protected override string StoreName { get; } = "BatchingTest"; + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + protected override Type ContextType { get; } = typeof(BloggingContext); + + protected override bool ShouldLogCategory(string logCategory) + => logCategory == DbLoggerCategory.Update.Name; + + protected override async Task SeedAsync(PoolableDbContext context) + { + await context.Database.EnsureCreatedResilientlyAsync(); + await context.Database.ExecuteSqlRawAsync( + """ + + ALTER TABLE Owners + ALTER COLUMN Name nvarchar(255); + """); + } + + public DbContext CreateContext(int? minBatchSize = null, + int? maxBatchSize = null, + bool useConnectionString = false) + { + var options = CreateOptions(); + var optionsBuilder = new DbContextOptionsBuilder(options); + if (useConnectionString) + { + RelationalOptionsExtension extension = options.FindExtension() + ?? new LibRedOptionsExtension(); + + extension = extension.WithConnection(null).WithConnectionString(((LibRedTestStore)TestStore).ConnectionString); + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); + } + + if (minBatchSize.HasValue) + { + new LibRedDbContextOptionsBuilder(optionsBuilder).MinBatchSize(minBatchSize.Value); + } + + if (maxBatchSize.HasValue) + { + new LibRedDbContextOptionsBuilder(optionsBuilder).MinBatchSize(maxBatchSize.Value); + } + return new BloggingContext(optionsBuilder.Options); + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/BuiltInDataTypesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/BuiltInDataTypesLibRedTest.cs new file mode 100644 index 00000000..260de26e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BuiltInDataTypesLibRedTest.cs @@ -0,0 +1,5519 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Globalization; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +// ReSharper disable InconsistentNaming +// ReSharper disable ParameterOnlyUsedForPreconditionCheck.Local +// ReSharper disable CompareOfFloatsByEqualityOperator +// ReSharper disable UnusedParameter.Local +// ReSharper disable PossibleInvalidOperationException + +#nullable disable + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class BuiltInDataTypesLibRedTest : BuiltInDataTypesTestBase + { + private static readonly string _eol = Environment.NewLine; + + public BuiltInDataTypesLibRedTest(BuiltInDataTypesLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public void Sql_translation_uses_type_mapper_when_constant() + { + using var context = CreateContext(); + var results + = context.Set() + .Where(e => e.TimeSpanAsTime == new TimeSpan(0, 1, 2)) + .Select(e => e.Int) + .ToList(); + + Assert.Empty(results); + + AssertSql( + $""" + SELECT `m`.`Int` + FROM `MappedNullableDataTypes` AS `m` + WHERE `m`.`TimeSpanAsTime` = TIMEVALUE('00:01:02') + """); + } + + [ConditionalFact] + public void Sql_translation_uses_type_mapper_when_parameter() + { + using var context = CreateContext(); + var timeSpan = new TimeSpan(2, 1, 0); + + var results + = context.Set() + .Where(e => e.TimeSpanAsTime == timeSpan) + .Select(e => e.Int) + .ToList(); + + Assert.Empty(results); + AssertSql( + """ +@timeSpan='02:01:00' (Nullable = true) + +SELECT `m`.`Int` +FROM `MappedNullableDataTypes` AS `m` +WHERE `m`.`TimeSpanAsTime` = @timeSpan +"""); + } + + [ConditionalFact] + public virtual void Can_query_using_DateDiffHour_using_TimeSpan() + { + using var context = CreateContext(); + var timeSpan = new TimeSpan(2, 1, 0); + + var results + = context.Set() + .Where(e => EF.Functions.DateDiffHour(e.TimeSpanAsTime, timeSpan) == 0) + .Select(e => e.Int) + .ToList(); + + Assert.Empty(results); + AssertSql( + """ +@timeSpan='02:01:00' (Nullable = true) + +SELECT `m`.`Int` +FROM `MappedNullableDataTypes` AS `m` +WHERE DATEDIFF('h', `m`.`TimeSpanAsTime`, @timeSpan) = 0 +"""); + } + + [ConditionalFact] + public virtual void Can_query_using_DateDiffMinute_using_TimeSpan() + { + using var context = CreateContext(); + var timeSpan = new TimeSpan(2, 1, 0); + + var results + = context.Set() + .Where(e => EF.Functions.DateDiffMinute(e.TimeSpanAsTime, timeSpan) == 0) + .Select(e => e.Int) + .ToList(); + + Assert.Empty(results); + AssertSql( + """ +@timeSpan='02:01:00' (Nullable = true) + +SELECT `m`.`Int` +FROM `MappedNullableDataTypes` AS `m` +WHERE DATEDIFF('n', `m`.`TimeSpanAsTime`, @timeSpan) = 0 +"""); + } + + [ConditionalFact] + public virtual void Can_query_using_DateDiffSecond_using_TimeSpan() + { + using var context = CreateContext(); + var timeSpan = new TimeSpan(2, 1, 0); + + var results + = context.Set() + .Where(e => EF.Functions.DateDiffSecond(e.TimeSpanAsTime, timeSpan) == 0) + .Select(e => e.Int) + .ToList(); + + Assert.Empty(results); + AssertSql( + """ +@timeSpan='02:01:00' (Nullable = true) + +SELECT `m`.`Int` +FROM `MappedNullableDataTypes` AS `m` +WHERE DATEDIFF('s', `m`.`TimeSpanAsTime`, @timeSpan) = 0 +"""); + } + + [ConditionalFact] + public virtual void Can_query_using_any_mapped_data_type() + { + using (var context = CreateContext()) + { + context.Set().Add( + new MappedNullableDataTypes + { + Int = 999, + LongAsBigint = 78L, + ShortAsSmallint = 79, + ByteAsTinyint = 80, + UintAsInt = uint.MaxValue, + UlongAsBigint = ulong.MaxValue, + UShortAsSmallint = ushort.MaxValue, + SbyteAsTinyint = sbyte.MinValue, + BoolAsBit = true, + DecimalAsMoney = 81.1m, + //DecimalAsSmallmoney = 82.2m, + DoubleAsFloat = 83.3, + FloatAsReal = 84.4f, + DoubleAsDoublePrecision = 85.5, + DateOnlyAsDate = new DateOnly(1605, 1, 2), + DateTimeAsDate = new DateTime(1605, 1, 2, 10, 11, 12), + //DateTimeOffsetAsDatetimeoffset = new DateTimeOffset(new DateTime(), TimeSpan.Zero), + //DateTimeAsDatetime2 = new DateTime(), + //DateTimeAsSmalldatetime = new DateTime(2018, 1, 2, 13, 11, 12), + DateTimeAsDatetime = new DateTime(2019, 1, 2, 14, 11, 12), + TimeOnlyAsTime = new TimeOnly(11, 15, 12, 2), + TimeSpanAsTime = new TimeSpan(0, 11, 15, 12, 2), + StringAsVarcharMax = "C", + StringAsCharVaryingMax = "Your", + StringAsCharacterVaryingMax = "strong", + StringAsNvarcharMax = "don't", + StringAsNationalCharVaryingMax = "help", + StringAsNationalCharacterVaryingMax = "anyone!", + StringAsText = "Gumball Rules!", + StringAsNtext = "Gumball Rules OK!", + BytesAsVarbinaryMax = [89, 90, 91, 92], + BytesAsBinaryVaryingMax = [93, 94, 95, 96], + BytesAsImage = [97, 98, 99, 100], + Decimal = 101.7m, + DecimalAsDec = 102.8m, + DecimalAsNumeric = 103.9m, + GuidAsUniqueidentifier = new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"), + UintAsBigint = uint.MaxValue, + UlongAsDecimal200 = ulong.MaxValue, + UShortAsInt = ushort.MaxValue, + SByteAsSmallint = sbyte.MinValue, + CharAsVarchar = 'A', + CharAsAsCharVarying = 'B', + CharAsCharacterVaryingMax = 'C', + CharAsNvarchar = 'D', + CharAsNationalCharVarying = 'E', + CharAsNationalCharacterVaryingMax = 'F', + CharAsText = 'G', + CharAsNtext = 'H', + CharAsInt = 'I', + EnumAsNvarchar20 = StringEnumU16.Value4, + EnumAsVarcharMax = StringEnum16.Value2 + }); + + Assert.Equal(1, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + var entity = context.Set().Single(e => e.Int == 999); + + long? param1 = 78L; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.LongAsBigint == param1)); + + short? param2 = 79; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.ShortAsSmallint == param2)); + + byte? param3 = 80; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.ByteAsTinyint == param3)); + + bool? param4 = true; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.BoolAsBit == param4)); + + decimal? param5 = 81.1m; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.DecimalAsMoney == param5)); + + //decimal? param6 = 82.2m; + //Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.DecimalAsSmallmoney == param6)); + + double? param7a = 83.3; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.DoubleAsFloat == param7a)); + + float? param7b = 84.4f; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.FloatAsReal == param7b)); + + double? param7c = 85.5; + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.DoubleAsDoublePrecision == param7c)); + + DateOnly? param8a = new DateOnly(1605, 1, 2); + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.DateOnlyAsDate == param8a)); + + DateTime? param8b = new DateTime(1605, 1, 2); + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.DateTimeAsDate == param8b)); + + /*DateTimeOffset? param9 = new DateTimeOffset(new DateTime(), TimeSpan.Zero); + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.DateTimeOffsetAsDatetimeoffset == param9)); + + DateTime? param10 = new DateTime(); + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.DateTimeAsDatetime2 == param10)); + + DateTime? param11 = new DateTime(2019, 1, 2, 14, 11, 12); + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.DateTimeAsDatetime == param11)); + + DateTime? param12 = new DateTime(2018, 1, 2, 13, 11, 0); + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.DateTimeAsSmalldatetime == param12));*/ + + TimeOnly? param13a = new TimeOnly(11, 15, 12, 2); + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.TimeOnlyAsTime == param13a)); + + TimeSpan? param13b = new TimeSpan(0, 11, 15, 12, 2); + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.TimeSpanAsTime == param13b)); + + var param19 = "C"; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.StringAsVarcharMax == param19)); + + var param20 = "Your"; + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.StringAsCharVaryingMax == param20)); + + var param21 = "strong"; + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.StringAsCharacterVaryingMax == param21)); + + var param27 = "don't"; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.StringAsNvarcharMax == param27)); + + var param28 = "help"; + Assert.Same( + entity, + context.Set().Single(e => e.Int == 999 && e.StringAsNationalCharVaryingMax == param28)); + + var param29 = "anyone!"; + Assert.Same( + entity, + context.Set().Single(e => e.Int == 999 && e.StringAsNationalCharacterVaryingMax == param29)); + + var param35 = new byte[] { 89, 90, 91, 92 }; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.BytesAsVarbinaryMax == param35)); + + var param36 = new byte[] { 93, 94, 95, 96 }; + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.BytesAsBinaryVaryingMax == param36)); + + decimal? param38 = 102m; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.Decimal == param38)); + + decimal? param39 = 103m; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.DecimalAsDec == param39)); + + decimal? param40 = 104m; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.DecimalAsNumeric == param40)); + + uint? param41 = uint.MaxValue; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.UintAsInt == param41)); + + ulong? param42 = ulong.MaxValue; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.UlongAsBigint == param42)); + + ushort? param43 = ushort.MaxValue; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.UShortAsSmallint == param43)); + + sbyte? param44 = sbyte.MinValue; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.SbyteAsTinyint == param44)); + + uint? param45 = uint.MaxValue; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.UintAsBigint == param45)); + + ulong? param46 = ulong.MaxValue; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.UlongAsDecimal200 == param46)); + + ushort? param47 = ushort.MaxValue; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.UShortAsInt == param47)); + + sbyte? param48 = sbyte.MinValue; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.SByteAsSmallint == param48)); + + Guid? param49 = new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"); + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.GuidAsUniqueidentifier == param49)); + + char? param50 = 'A'; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.CharAsVarchar == param50)); + + char? param51 = 'B'; + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.CharAsAsCharVarying == param51)); + + char? param52 = 'C'; + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.CharAsCharacterVaryingMax == param52)); + + char? param53 = 'D'; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.CharAsNvarchar == param53)); + + char? param54 = 'E'; + Assert.Same( + entity, context.Set().Single(e => e.Int == 999 && e.CharAsNationalCharVarying == param54)); + + char? param55 = 'F'; + Assert.Same( + entity, + context.Set().Single(e => e.Int == 999 && e.CharAsNationalCharacterVaryingMax == param55)); + + char? param58 = 'I'; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.CharAsInt == param58)); + + StringEnumU16? param59 = StringEnumU16.Value4; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.EnumAsNvarchar20 == param59)); + + StringEnum16? param60 = StringEnum16.Value2; + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.EnumAsVarcharMax == param60)); + } + } + + [ConditionalFact] + public virtual void Can_query_using_any_mapped_data_types_with_nulls() + { + using (var context = CreateContext()) + { + context.Set().Add( + new MappedNullableDataTypes { Int = 911 }); + + Assert.Equal(1, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + var entity = context.Set().Single(e => e.Int == 911); + + long? param1 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.LongAsBigint == param1)); + + short? param2 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.ShortAsSmallint == param2)); + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && (long?)e.ShortAsSmallint == param2)); + + byte? param3 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.ByteAsTinyint == param3)); + + bool? param4 = false;//bit is never nullable + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.BoolAsBit == param4)); + + decimal? param5 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.DecimalAsMoney == param5)); + + //decimal? param6 = null; + //Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.DecimalAsSmallmoney == param6)); + + double? param7a = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.DoubleAsFloat == param7a)); + + float? param7b = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.FloatAsReal == param7b)); + + double? param7c = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.DoubleAsDoublePrecision == param7c)); + + DateOnly? param8a = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.DateOnlyAsDate == param8a)); + + DateTime? param8b = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.DateTimeAsDate == param8b)); + + /*DateTimeOffset? param9 = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.DateTimeOffsetAsDatetimeoffset == param9)); + + DateTime? param10 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.DateTimeAsDatetime2 == param10)); + + DateTime? param11 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.DateTimeAsDatetime == param11)); + + DateTime? param12 = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.DateTimeAsSmalldatetime == param12));*/ + + TimeOnly? param13a = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.TimeOnlyAsTime == param13a)); + + TimeSpan? param13b = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.TimeSpanAsTime == param13b)); + + string param19 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.StringAsVarcharMax == param19)); + + string param20 = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.StringAsCharVaryingMax == param20)); + + string param21 = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.StringAsCharacterVaryingMax == param21)); + + string param27 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.StringAsNvarcharMax == param27)); + + string param28 = null; + Assert.Same( + entity, + context.Set().Single(e => e.Int == 911 && e.StringAsNationalCharVaryingMax == param28)); + + string param29 = null; + Assert.Same( + entity, + context.Set().Single(e => e.Int == 911 && e.StringAsNationalCharacterVaryingMax == param29)); + + string param30 = null; + + Assert.Same( + entity, + context.Set().Single(e => e.Int == 911 && e.StringAsText == param30)); + + string param31 = null; + Assert.Same( + entity, + context.Set().Single(e => e.Int == 911 && e.StringAsNtext == param31)); + + byte[] param35 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.BytesAsVarbinaryMax == param35)); + + byte[] param36 = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.BytesAsBinaryVaryingMax == param36)); + + byte[] param37 = null; + Assert.Same( + entity, + context.Set().Single(e => e.Int == 911 && e.BytesAsImage == param37)); + + decimal? param38 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.Decimal == param38)); + + decimal? param39 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.DecimalAsDec == param39)); + + decimal? param40 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.DecimalAsNumeric == param40)); + + uint? param41 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.UintAsInt == param41)); + + ulong? param42 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.UlongAsBigint == param42)); + + ushort? param43 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.UShortAsSmallint == param43)); + + sbyte? param44 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.SbyteAsTinyint == param44)); + + uint? param45 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.UintAsBigint == param45)); + + ulong? param46 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.UlongAsDecimal200 == param46)); + + ushort? param47 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.UShortAsInt == param47)); + + sbyte? param48 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.SByteAsSmallint == param48)); + + Guid? param49 = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.GuidAsUniqueidentifier == param49)); + + char? param50 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.CharAsVarchar == param50)); + + char? param51 = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.CharAsAsCharVarying == param51)); + + char? param52 = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.CharAsCharacterVaryingMax == param52)); + + char? param53 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.CharAsNvarchar == param53)); + + char? param54 = null; + Assert.Same( + entity, context.Set().Single(e => e.Int == 911 && e.CharAsNationalCharVarying == param54)); + + char? param55 = null; + Assert.Same( + entity, + context.Set().Single(e => e.Int == 911 && e.CharAsNationalCharacterVaryingMax == param55)); + + //char? param56 = null; + //Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.CharAsText == param56)); + + //char? param57 = null; + //Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.CharAsNtext == param57)); + + char? param58 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.CharAsInt == param58)); + + StringEnumU16? param59 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.EnumAsNvarchar20 == param59)); + + StringEnum16? param60 = null; + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.EnumAsVarcharMax == param60)); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types() + { + var entity = CreateMappedDataTypes(77); + using (var context = CreateContext()) + { + context.Set().Add(entity); + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='77' + @p1='True' + @p2='80' (Size = 1) + @p3='0x5D5E5F60' (Nullable = false) (Size = 510) + @p4='0x61626364' (Nullable = false) (Size = 510) + @p5='0x595A5B5C' (Nullable = false) (Size = 510) + @p6='B' (Nullable = false) (Size = 1) + @p7='C' (Nullable = false) (Size = 255) + @p8='73' + @p9='E' (Nullable = false) (Size = 1) + @p10='F' (Nullable = false) (Size = 255) + @p11='H' (Nullable = false) (Size = 1) + @p12='D' (Nullable = false) (Size = 1) + @p13='G' (Nullable = false) (Size = 1) + @p14='A' (Nullable = false) (Size = 1) + @p15='2015-01-02T00:00:00.0000000' (DbType = Date) + @p16='2015-01-02T00:00:00.0000000' (DbType = DateTime) + @p17='2019-01-02T14:11:12.0000000' (DbType = DateTime) + @p18='101' (Precision = 18) + @p19='102' (Precision = 18) + @p20='81.1' (Precision = 3) (Scale = 1) (DbType = Currency) + @p21='103' (Precision = 18) + @p22='85.5' + @p23='83.3' + @p24='4' + @p25='Value2' (Nullable = false) (Size = 255) + @p26='84.4' + @p27='a8f9f951-145f-4545-ac60-b92ff57ada47' + @p28='78' + @p29='-128' + @p30='128' (Size = 1) + @p31='79' + @p32='Your' (Nullable = false) (Size = 255) + @p33='And now' (Nullable = false) (Size = 255) + @p34='strong' (Nullable = false) (Size = 255) + @p35='this...' (Nullable = false) (Size = 255) + @p36='help' (Nullable = false) (Size = 255) + @p37='anyone!' (Nullable = false) (Size = 255) + @p38='Gumball Rules OK!' (Nullable = false) (Size = 255) + @p39='DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' (Nullable = false) (Size = 255) + @p40='Gumball Rules!' (Nullable = false) (Size = 255) + @p41='CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC' (Nullable = false) (Size = 255) + @p42='EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE' (Nullable = false) (Size = 255) + @p43='11:15:12' + @p44='11:15:12' + @p45='65535' + @p46='-1' + @p47='4294967295' + @p48='-1' + @p49='18446744073709551615' (Precision = 20) + @p50='18446744073709551615' (Precision = 20) + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedDataTypes(context.Set().Single(e => e.Int == 77), 77); + } + } + + private string DumpParameters() + => Fixture.TestSqlLoggerFactory.Parameters.Single().Replace(", ", _eol); + + private static void AssertMappedDataTypes(MappedDataTypes entity, int id) + { + var expected = CreateMappedDataTypes(id); + Assert.Equal(id, entity.Int); + Assert.Equal(78, entity.LongAsBigInt); + Assert.Equal(79, entity.ShortAsSmallint); + Assert.Equal(80, entity.ByteAsTinyint); + Assert.Equal(uint.MaxValue, entity.UintAsInt); + Assert.Equal(ulong.MaxValue, entity.UlongAsBigint); + Assert.Equal(ushort.MaxValue, entity.UShortAsSmallint); + Assert.Equal(sbyte.MinValue, entity.SByteAsTinyint); + Assert.True(entity.BoolAsBit); + Assert.Equal(81.1m, entity.DecimalAsMoney); + //Assert.Equal(82.2m, entity.DecimalAsSmallmoney); + Assert.Equal(83.3, entity.DoubleAsFloat); + Assert.Equal(84.4f, entity.FloatAsReal); + Assert.Equal(85.5, entity.DoubleAsDoublePrecision); + Assert.Equal(new DateOnly(2015, 1, 2), entity.DateOnlyAsDate); + Assert.Equal(new DateTime(2015, 1, 2), entity.DateTimeAsDate); + /*Assert.Equal( + new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12).AddTicks(1234567), TimeSpan.Zero), + entity.DateTimeOffsetAsDatetimeoffset); + Assert.Equal(new DateTime(2017, 1, 2, 12, 11, 12).AddTicks(1234567), entity.DateTimeAsDatetime2); + Assert.Equal(new DateTime(2018, 1, 2, 13, 11, 00), entity.DateTimeAsSmalldatetime);*/ + Assert.Equal(new DateTime(2019, 1, 2, 14, 11, 12), entity.DateTimeAsDatetime); + Assert.Equal(new TimeOnly(11, 15, 12), entity.TimeOnlyAsTime); + Assert.Equal(new TimeSpan(11, 15, 12), entity.TimeSpanAsTime); + Assert.Equal(expected.StringAsVarcharMax, entity.StringAsVarcharMax); + Assert.Equal("Your", entity.StringAsCharVaryingMax); + Assert.Equal("strong", entity.StringAsCharacterVaryingMax); + Assert.Equal(expected.StringAsNvarcharMax, entity.StringAsNvarcharMax); + Assert.Equal("help", entity.StringAsNationalCharVaryingMax); + Assert.Equal("anyone!", entity.StringAsNationalCharacterVaryingMax); + Assert.Equal(expected.StringAsVarcharMaxUtf8, entity.StringAsVarcharMaxUtf8); + Assert.Equal("And now", entity.StringAsCharVaryingMaxUtf8); + Assert.Equal("this...", entity.StringAsCharacterVaryingMaxUtf8); + Assert.Equal("Gumball Rules!", entity.StringAsText); + Assert.Equal("Gumball Rules OK!", entity.StringAsNtext); + Assert.Equal(new byte[] { 89, 90, 91, 92 }, entity.BytesAsVarbinaryMax); + Assert.Equal(new byte[] { 93, 94, 95, 96 }, entity.BytesAsBinaryVaryingMax); + Assert.Equal(new byte[] { 97, 98, 99, 100 }, entity.BytesAsImage); + Assert.Equal(101m, entity.Decimal); + Assert.Equal(102m, entity.DecimalAsDec); + Assert.Equal(103m, entity.DecimalAsNumeric); + Assert.Equal(new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"), entity.GuidAsUniqueidentifier); + Assert.Equal(uint.MaxValue, entity.UintAsBigint); + Assert.Equal(ulong.MaxValue, entity.UlongAsDecimal200); + Assert.Equal(ushort.MaxValue, entity.UShortAsInt); + Assert.Equal(sbyte.MinValue, entity.SByteAsSmallint); + Assert.Equal('A', entity.CharAsVarchar); + Assert.Equal('B', entity.CharAsAsCharVarying); + Assert.Equal('C', entity.CharAsCharacterVaryingMax); + Assert.Equal('D', entity.CharAsNvarchar); + Assert.Equal('E', entity.CharAsNationalCharVarying); + Assert.Equal('F', entity.CharAsNationalCharacterVaryingMax); + Assert.Equal('G', entity.CharAsText); + Assert.Equal('H', entity.CharAsNtext); + Assert.Equal('I', entity.CharAsInt); + Assert.Equal(StringEnum16.Value2, entity.EnumAsVarcharMax); + Assert.Equal(StringEnumU16.Value4, entity.EnumAsNvarchar20); + } + + private static MappedDataTypes CreateMappedDataTypes(int id) + => new() + { + Int = id, + LongAsBigInt = 78L, + ShortAsSmallint = 79, + ByteAsTinyint = 80, + UintAsInt = uint.MaxValue, + UlongAsBigint = ulong.MaxValue, + UShortAsSmallint = ushort.MaxValue, + SByteAsTinyint = sbyte.MinValue, + BoolAsBit = true, + DecimalAsMoney = 81.1m, + //DecimalAsSmallmoney = 82.2m, + DoubleAsFloat = 83.3, + FloatAsReal = 84.4f, + DoubleAsDoublePrecision = 85.5, + DateOnlyAsDate = new DateOnly(2015, 1, 2), + DateTimeAsDate = new DateTime(2015, 1, 2, 10, 11, 12), + //DateTimeOffsetAsDatetimeoffset = new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12).AddTicks(1234567), TimeSpan.Zero), + //DateTimeAsDatetime2 = new DateTime(2017, 1, 2, 12, 11, 12).AddTicks(1234567), + //DateTimeAsSmalldatetime = new DateTime(2018, 1, 2, 13, 11, 12), + DateTimeAsDatetime = new DateTime(2019, 1, 2, 14, 11, 12), + TimeOnlyAsTime = new TimeOnly(11, 15, 12), + TimeSpanAsTime = new TimeSpan(11, 15, 12), + StringAsVarcharMax = string.Concat(Enumerable.Repeat("C", 255)), + StringAsCharVaryingMax = "Your", + StringAsCharacterVaryingMax = "strong", + StringAsNvarcharMax = string.Concat(Enumerable.Repeat("D", 255)), + StringAsNationalCharVaryingMax = "help", + StringAsNationalCharacterVaryingMax = "anyone!", + StringAsVarcharMaxUtf8 = string.Concat(Enumerable.Repeat("E", 255)), + StringAsCharVaryingMaxUtf8 = "And now", + StringAsCharacterVaryingMaxUtf8 = "this...", + StringAsText = "Gumball Rules!", + StringAsNtext = "Gumball Rules OK!", + BytesAsVarbinaryMax = [89, 90, 91, 92], + BytesAsBinaryVaryingMax = [93, 94, 95, 96], + BytesAsImage = [97, 98, 99, 100], + Decimal = 101m, + DecimalAsDec = 102m, + DecimalAsNumeric = 103m, + GuidAsUniqueidentifier = new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"), + UintAsBigint = uint.MaxValue, + UlongAsDecimal200 = ulong.MaxValue, + UShortAsInt = ushort.MaxValue, + SByteAsSmallint = sbyte.MinValue, + CharAsVarchar = 'A', + CharAsAsCharVarying = 'B', + CharAsCharacterVaryingMax = 'C', + CharAsNvarchar = 'D', + CharAsNationalCharVarying = 'E', + CharAsNationalCharacterVaryingMax = 'F', + CharAsText = 'G', + CharAsNtext = 'H', + CharAsInt = 'I', + EnumAsNvarchar20 = StringEnumU16.Value4, + EnumAsVarcharMax = StringEnum16.Value2 + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_nullable_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedNullableDataTypes(77)); + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='77' + @p1='True' (Nullable = true) + @p2='80' (Nullable = true) (Size = 1) + @p3='0x5D5E5F60' (Size = 510) + @p4='0x61626364' (Size = 510) + @p5='0x595A5B5C' (Size = 510) + @p6='B' (Size = 1) + @p7='C' (Size = 255) + @p8='73' (Nullable = true) + @p9='E' (Size = 1) + @p10='F' (Size = 255) + @p11='H' (Size = 1) + @p12='D' (Size = 1) + @p13='G' (Size = 1) + @p14='A' (Size = 1) + @p15='2015-01-02T00:00:00.0000000' (Nullable = true) (DbType = Date) + @p16='2015-01-02T00:00:00.0000000' (Nullable = true) (DbType = DateTime) + @p17='2019-01-02T14:11:12.0000000' (Nullable = true) (DbType = DateTime) + @p18='101' (Nullable = true) (Precision = 18) + @p19='102' (Nullable = true) (Precision = 18) + @p20='81.1' (Nullable = true) (Precision = 3) (Scale = 1) (DbType = Currency) + @p21='103' (Nullable = true) (Precision = 18) + @p22='85.5' (Nullable = true) + @p23='83.3' (Nullable = true) + @p24='4' (Nullable = true) + @p25='Value2' (Size = 255) + @p26='84.4' (Nullable = true) + @p27='a8f9f951-145f-4545-ac60-b92ff57ada47' (Nullable = true) + @p28='78' (Nullable = true) + @p29='-128' (Nullable = true) + @p30='128' (Nullable = true) (Size = 1) + @p31='79' (Nullable = true) + @p32='Your' (Size = 255) + @p33='And now' (Size = 255) + @p34='strong' (Size = 255) + @p35='this...' (Size = 255) + @p36='help' (Size = 255) + @p37='anyone!' (Size = 255) + @p38='Gumball Rules OK!' (Size = 255) + @p39='don't' (Size = 255) + @p40='Gumball Rules!' (Size = 255) + @p41='C' (Size = 255) + @p42='short' (Size = 255) + @p43='11:15:12' (Nullable = true) + @p44='11:15:12' (Nullable = true) + @p45='65535' (Nullable = true) + @p46='-1' (Nullable = true) + @p47='4294967295' (Nullable = true) + @p48='-1' (Nullable = true) + @p49='18446744073709551615' (Nullable = true) (Precision = 20) + @p50='18446744073709551615' (Nullable = true) (Precision = 20) + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedNullableDataTypes(context.Set().Single(e => e.Int == 77), 77); + } + } + + private static void AssertMappedNullableDataTypes(MappedNullableDataTypes entity, int id) + { + Assert.Equal(id, entity.Int); + Assert.Equal(78, entity.LongAsBigint); + Assert.Equal(79, entity.ShortAsSmallint.Value); + Assert.Equal(80, entity.ByteAsTinyint.Value); + Assert.Equal(uint.MaxValue, entity.UintAsInt); + Assert.Equal(ulong.MaxValue, entity.UlongAsBigint); + Assert.Equal(ushort.MaxValue, entity.UShortAsSmallint); + Assert.Equal(sbyte.MinValue, entity.SbyteAsTinyint); + Assert.True(entity.BoolAsBit); + Assert.Equal(81.1m, entity.DecimalAsMoney); + //Assert.Equal(82.2m, entity.DecimalAsSmallmoney); + Assert.Equal(83.3, entity.DoubleAsFloat); + Assert.Equal(84.4f, entity.FloatAsReal); + Assert.Equal(85.5, entity.DoubleAsDoublePrecision); + Assert.Equal(new DateOnly(2015, 1, 2), entity.DateOnlyAsDate); + Assert.Equal(new DateTime(2015, 1, 2), entity.DateTimeAsDate); + /*Assert.Equal( + new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12).AddTicks(9876543), TimeSpan.Zero), + entity.DateTimeOffsetAsDatetimeoffset); + Assert.Equal(new DateTime(2017, 1, 2, 12, 11, 12).AddTicks(9876543), entity.DateTimeAsDatetime2); + Assert.Equal(new DateTime(2018, 1, 2, 13, 11, 00), entity.DateTimeAsSmalldatetime);*/ + Assert.Equal(new DateTime(2019, 1, 2, 14, 11, 12), entity.DateTimeAsDatetime); + Assert.Equal(new TimeOnly(11, 15, 12), entity.TimeOnlyAsTime); + Assert.Equal(new TimeSpan(11, 15, 12), entity.TimeSpanAsTime); + Assert.Equal("C", entity.StringAsVarcharMax); + Assert.Equal("Your", entity.StringAsCharVaryingMax); + Assert.Equal("strong", entity.StringAsCharacterVaryingMax); + Assert.Equal("don't", entity.StringAsNvarcharMax); + Assert.Equal("help", entity.StringAsNationalCharVaryingMax); + Assert.Equal("anyone!", entity.StringAsNationalCharacterVaryingMax); + Assert.Equal("Gumball Rules!", entity.StringAsText); + Assert.Equal("Gumball Rules OK!", entity.StringAsNtext); + Assert.Equal(new byte[] { 89, 90, 91, 92 }, entity.BytesAsVarbinaryMax); + Assert.Equal(new byte[] { 93, 94, 95, 96 }, entity.BytesAsBinaryVaryingMax); + Assert.Equal(new byte[] { 97, 98, 99, 100 }, entity.BytesAsImage); + Assert.Equal(101m, entity.Decimal); + Assert.Equal(102m, entity.DecimalAsDec); + Assert.Equal(103m, entity.DecimalAsNumeric); + Assert.Equal(new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"), entity.GuidAsUniqueidentifier); + Assert.Equal(uint.MaxValue, entity.UintAsBigint); + Assert.Equal(ulong.MaxValue, entity.UlongAsDecimal200); + Assert.Equal(ushort.MaxValue, entity.UShortAsInt); + Assert.Equal(sbyte.MinValue, entity.SByteAsSmallint); + Assert.Equal('A', entity.CharAsVarchar); + Assert.Equal('B', entity.CharAsAsCharVarying); + Assert.Equal('C', entity.CharAsCharacterVaryingMax); + Assert.Equal('D', entity.CharAsNvarchar); + Assert.Equal('E', entity.CharAsNationalCharVarying); + Assert.Equal('F', entity.CharAsNationalCharacterVaryingMax); + Assert.Equal('G', entity.CharAsText); + Assert.Equal('H', entity.CharAsNtext); + Assert.Equal('I', entity.CharAsInt); + Assert.Equal(StringEnum16.Value2, entity.EnumAsVarcharMax); + Assert.Equal(StringEnumU16.Value4, entity.EnumAsNvarchar20); + } + + private static MappedNullableDataTypes CreateMappedNullableDataTypes(int id) + => new() + { + Int = id, + LongAsBigint = 78L, + ShortAsSmallint = 79, + ByteAsTinyint = 80, + UintAsInt = uint.MaxValue, + UlongAsBigint = ulong.MaxValue, + UShortAsSmallint = ushort.MaxValue, + SbyteAsTinyint = sbyte.MinValue, + BoolAsBit = true, + DecimalAsMoney = 81.1m, + //DecimalAsSmallmoney = 82.2m, + DoubleAsFloat = 83.3, + FloatAsReal = 84.4f, + DoubleAsDoublePrecision = 85.5, + DateOnlyAsDate = new DateOnly(2015, 1, 2), + DateTimeAsDate = new DateTime(2015, 1, 2, 10, 11, 12), + //DateTimeOffsetAsDatetimeoffset = new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12).AddTicks(9876543), TimeSpan.Zero), + //DateTimeAsDatetime2 = new DateTime(2017, 1, 2, 12, 11, 12).AddTicks(9876543), + //DateTimeAsSmalldatetime = new DateTime(2018, 1, 2, 13, 11, 12), + DateTimeAsDatetime = new DateTime(2019, 1, 2, 14, 11, 12), + TimeOnlyAsTime = new TimeOnly(11, 15, 12), + TimeSpanAsTime = new TimeSpan(11, 15, 12), + StringAsVarcharMax = "C", + StringAsCharVaryingMax = "Your", + StringAsCharacterVaryingMax = "strong", + StringAsNvarcharMax = "don't", + StringAsNationalCharVaryingMax = "help", + StringAsNationalCharacterVaryingMax = "anyone!", + StringAsVarcharMaxUtf8 = "short", + StringAsCharVaryingMaxUtf8 = "And now", + StringAsCharacterVaryingMaxUtf8 = "this...", + StringAsText = "Gumball Rules!", + StringAsNtext = "Gumball Rules OK!", + BytesAsVarbinaryMax = [89, 90, 91, 92], + BytesAsBinaryVaryingMax = [93, 94, 95, 96], + BytesAsImage = [97, 98, 99, 100], + Decimal = 101m, + DecimalAsDec = 102m, + DecimalAsNumeric = 103m, + GuidAsUniqueidentifier = new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"), + UintAsBigint = uint.MaxValue, + UlongAsDecimal200 = ulong.MaxValue, + UShortAsInt = ushort.MaxValue, + SByteAsSmallint = sbyte.MinValue, + CharAsVarchar = 'A', + CharAsAsCharVarying = 'B', + CharAsCharacterVaryingMax = 'C', + CharAsNvarchar = 'D', + CharAsNationalCharVarying = 'E', + CharAsNationalCharacterVaryingMax = 'F', + CharAsText = 'G', + CharAsNtext = 'H', + CharAsInt = 'I', + EnumAsNvarchar20 = StringEnumU16.Value4, + EnumAsVarcharMax = StringEnum16.Value2 + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_set_to_null() + { + using (var context = CreateContext()) + { + context.Set().Add(new MappedNullableDataTypes { Int = 78 }); + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='78' + @p1=NULL (DbType = Boolean) + @p2=NULL (DbType = Byte) + @p3=NULL (Size = 510) (DbType = Binary) + @p4=NULL (Size = 510) (DbType = Binary) + @p5=NULL (Size = 510) (DbType = Binary) + @p6=NULL (Size = 1) + @p7=NULL (Size = 255) + @p8=NULL (DbType = Int32) + @p9=NULL (Size = 1) + @p10=NULL (Size = 255) + @p11=NULL (Size = 1) + @p12=NULL (Size = 1) + @p13=NULL (Size = 1) + @p14=NULL (Size = 1) + @p15=NULL (DbType = Date) + @p16=NULL (DbType = DateTime) + @p17=NULL (DbType = DateTime) + @p18=NULL (Precision = 18) (DbType = Decimal) + @p19=NULL (Precision = 18) (DbType = Decimal) + @p20=NULL (DbType = Currency) + @p21=NULL (Precision = 18) (DbType = Decimal) + @p22=NULL (DbType = Double) + @p23=NULL (DbType = Double) + @p24=NULL (DbType = Int32) + @p25=NULL (Size = 255) + @p26=NULL (DbType = Single) + @p27=NULL (DbType = Guid) + @p28=NULL (DbType = Int64) + @p29=NULL (DbType = Int16) + @p30=NULL (DbType = Byte) + @p31=NULL (DbType = Int16) + @p32=NULL (Size = 255) + @p33=NULL (Size = 255) + @p34=NULL (Size = 255) + @p35=NULL (Size = 255) + @p36=NULL (Size = 255) + @p37=NULL (Size = 255) + @p38=NULL (Size = 255) + @p39=NULL (Size = 255) + @p40=NULL (Size = 255) + @p41=NULL (Size = 255) + @p42=NULL (Size = 255) + @p43=NULL (DbType = Time) + @p44=NULL (DbType = Time) + @p45=NULL (DbType = Int32) + @p46=NULL (DbType = Int16) + @p47=NULL (DbType = Int64) + @p48=NULL (DbType = Int32) + @p49=NULL (Precision = 20) (DbType = Decimal) + @p50=NULL (Precision = 20) (DbType = Decimal) + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertNullMappedNullableDataTypes(context.Set().Single(e => e.Int == 78), 78); + } + } + + private static void AssertNullMappedNullableDataTypes(MappedNullableDataTypes entity, int id) + { + Assert.Equal(id, entity.Int); + Assert.Null(entity.LongAsBigint); + Assert.Null(entity.ShortAsSmallint); + Assert.Null(entity.ByteAsTinyint); + Assert.Null(entity.UintAsInt); + Assert.Null(entity.UlongAsBigint); + Assert.Null(entity.UShortAsSmallint); + Assert.Null(entity.SbyteAsTinyint); + Assert.Equal(entity.BoolAsBit, false);//bits not null in jet + Assert.Null(entity.DecimalAsMoney); + //Assert.Null(entity.DecimalAsSmallmoney); + Assert.Null(entity.DoubleAsFloat); + Assert.Null(entity.FloatAsReal); + Assert.Null(entity.DoubleAsDoublePrecision); + Assert.Null(entity.DateOnlyAsDate); + Assert.Null(entity.DateTimeAsDate); + //Assert.Null(entity.DateTimeOffsetAsDatetimeoffset); + //Assert.Null(entity.DateTimeAsDatetime2); + //Assert.Null(entity.DateTimeAsSmalldatetime); + //Assert.Null(entity.DateTimeAsSmalldatetime); + Assert.Null(entity.DateTimeAsDatetime); + Assert.Null(entity.TimeOnlyAsTime); + Assert.Null(entity.TimeSpanAsTime); + Assert.Null(entity.StringAsVarcharMax); + Assert.Null(entity.StringAsCharVaryingMax); + Assert.Null(entity.StringAsCharacterVaryingMax); + Assert.Null(entity.StringAsNvarcharMax); + Assert.Null(entity.StringAsNationalCharVaryingMax); + Assert.Null(entity.StringAsNationalCharacterVaryingMax); + Assert.Null(entity.StringAsText); + Assert.Null(entity.StringAsNtext); + Assert.Null(entity.BytesAsVarbinaryMax); + Assert.Null(entity.BytesAsBinaryVaryingMax); + Assert.Null(entity.BytesAsImage); + Assert.Null(entity.Decimal); + Assert.Null(entity.DecimalAsDec); + Assert.Null(entity.DecimalAsNumeric); + Assert.Null(entity.GuidAsUniqueidentifier); + Assert.Null(entity.UintAsBigint); + Assert.Null(entity.UlongAsDecimal200); + Assert.Null(entity.UShortAsInt); + Assert.Null(entity.SByteAsSmallint); + Assert.Null(entity.CharAsVarchar); + Assert.Null(entity.CharAsAsCharVarying); + Assert.Null(entity.CharAsCharacterVaryingMax); + Assert.Null(entity.CharAsNvarchar); + Assert.Null(entity.CharAsNationalCharVarying); + Assert.Null(entity.CharAsNationalCharacterVaryingMax); + Assert.Null(entity.CharAsText); + Assert.Null(entity.CharAsNtext); + Assert.Null(entity.CharAsInt); + Assert.Null(entity.EnumAsNvarchar20); + Assert.Null(entity.EnumAsVarcharMax); + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_sized_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedSizedDataTypes(77)); + + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='77' + @p1='0x0A0B0C' (Size = 3) + @p2='0x0C0D0E' (Size = 3) + @p3='0x0B0C0D' (Size = 3) + @p4='B' (Size = 3) + @p5='C' (Size = 3) + @p6='E' (Size = 3) + @p7='F' (Size = 3) + @p8='D' (Size = 3) + @p9='A' (Size = 3) + @p10='Wor' (Size = 3) + @p11=NULL (Size = 3) + @p12='Thr' (Size = 3) + @p13=NULL (Size = 3) + @p14='Lon' (Size = 3) + @p15=NULL (Size = 3) + @p16='Let' (Size = 3) + @p17=NULL (Size = 3) + @p18='The' (Size = 3) + @p19='Squ' (Size = 3) + @p20='Col' (Size = 3) + @p21='Won' (Size = 3) + @p22='Int' (Size = 3) + @p23='Tha' (Size = 3) + @p24=NULL (Size = 3) + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedSizedDataTypes(context.Set().Single(e => e.Id == 77), 77); + } + } + + private static void AssertMappedSizedDataTypes(MappedSizedDataTypes entity, int id) + { + Assert.Equal(id, entity.Id); + Assert.Equal("Wor", entity.StringAsChar3); + Assert.Equal("Lon", entity.StringAsCharacter3); + Assert.Equal("Tha", entity.StringAsVarchar3); + Assert.Equal("Thr", entity.StringAsCharVarying3); + Assert.Equal("Let", entity.StringAsCharacterVarying3); + Assert.Equal("Won", entity.StringAsNchar3); + Assert.Equal("Squ", entity.StringAsNationalCharacter3); + Assert.Equal("Int", entity.StringAsNvarchar3); + Assert.Equal("The", entity.StringAsNationalCharVarying3); + Assert.Equal("Col", entity.StringAsNationalCharacterVarying3); + Assert.Equal(new byte[] { 10, 11, 12 }, entity.BytesAsBinary3); + Assert.Equal(new byte[] { 11, 12, 13 }, entity.BytesAsVarbinary3); + Assert.Equal(new byte[] { 12, 13, 14 }, entity.BytesAsBinaryVarying3); + Assert.Equal('A', entity.CharAsVarchar3); + Assert.Equal('B', entity.CharAsAsCharVarying3); + Assert.Equal('C', entity.CharAsCharacterVarying3); + Assert.Equal('D', entity.CharAsNvarchar3); + Assert.Equal('E', entity.CharAsNationalCharVarying3); + Assert.Equal('F', entity.CharAsNationalCharacterVarying3); + } + + private static MappedSizedDataTypes CreateMappedSizedDataTypes(int id) + => new() + { + Id = id, + StringAsChar3 = "Wor", + StringAsCharacter3 = "Lon", + StringAsVarchar3 = "Tha", + StringAsCharVarying3 = "Thr", + StringAsCharacterVarying3 = "Let", + StringAsNchar3 = "Won", + StringAsNationalCharacter3 = "Squ", + StringAsNvarchar3 = "Int", + StringAsNationalCharVarying3 = "The", + StringAsNationalCharacterVarying3 = "Col", + BytesAsBinary3 = [10, 11, 12], + BytesAsVarbinary3 = [11, 12, 13], + BytesAsBinaryVarying3 = [12, 13, 14], + CharAsVarchar3 = 'A', + CharAsAsCharVarying3 = 'B', + CharAsCharacterVarying3 = 'C', + CharAsNvarchar3 = 'D', + CharAsNationalCharVarying3 = 'E', + CharAsNationalCharacterVarying3 = 'F' + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add(new MappedSizedDataTypes { Id = 78 }); + + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='78' + @p1=NULL (Size = 3) (DbType = Binary) + @p2=NULL (Size = 3) (DbType = Binary) + @p3=NULL (Size = 3) (DbType = Binary) + @p4=NULL (Size = 3) + @p5=NULL (Size = 3) + @p6=NULL (Size = 3) + @p7=NULL (Size = 3) + @p8=NULL (Size = 3) + @p9=NULL (Size = 3) + @p10=NULL (Size = 3) + @p11=NULL (Size = 3) + @p12=NULL (Size = 3) + @p13=NULL (Size = 3) + @p14=NULL (Size = 3) + @p15=NULL (Size = 3) + @p16=NULL (Size = 3) + @p17=NULL (Size = 3) + @p18=NULL (Size = 3) + @p19=NULL (Size = 3) + @p20=NULL (Size = 3) + @p21=NULL (Size = 3) + @p22=NULL (Size = 3) + @p23=NULL (Size = 3) + @p24=NULL (Size = 3) + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertNullMappedSizedDataTypes(context.Set().Single(e => e.Id == 78), 78); + } + } + + private static void AssertNullMappedSizedDataTypes(MappedSizedDataTypes entity, int id) + { + Assert.Equal(id, entity.Id); + Assert.Null(entity.StringAsChar3); + Assert.Null(entity.StringAsCharacter3); + Assert.Null(entity.StringAsVarchar3); + Assert.Null(entity.StringAsCharVarying3); + Assert.Null(entity.StringAsCharacterVarying3); + Assert.Null(entity.StringAsNchar3); + Assert.Null(entity.StringAsNationalCharacter3); + Assert.Null(entity.StringAsNvarchar3); + Assert.Null(entity.StringAsNationalCharVarying3); + Assert.Null(entity.StringAsNationalCharacterVarying3); + Assert.Null(entity.BytesAsBinary3); + Assert.Null(entity.BytesAsVarbinary3); + Assert.Null(entity.BytesAsBinaryVarying3); + Assert.Null(entity.CharAsVarchar3); + Assert.Null(entity.CharAsAsCharVarying3); + Assert.Null(entity.CharAsCharacterVarying3); + Assert.Null(entity.CharAsNvarchar3); + Assert.Null(entity.CharAsNationalCharVarying3); + Assert.Null(entity.CharAsNationalCharacterVarying3); + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_scale() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedScaledDataTypes(77)); + + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='77' + @p1='102' (Precision = 3) + @p2='101' (Precision = 3) + @p3='103' (Precision = 3) + @p4='85.55000305175781' + @p5='85.5' + @p6='83.33000183105469' + @p7='83.30000305175781' + @p8='12:34:56' + @p9='12:34:56' + """, parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedScaledDataTypes(context.Set().Single(e => e.Id == 77), 77); + } + } + + private static void AssertMappedScaledDataTypes(MappedScaledDataTypes entity, int id) + { + Assert.Equal(id, entity.Id); + Assert.Equal(83.3f, entity.FloatAsFloat3); + Assert.Equal(85.5f, entity.FloatAsDoublePrecision3); + Assert.Equal(83.33f, entity.FloatAsFloat25); + Assert.Equal(85.55f, entity.FloatAsDoublePrecision25); + /*Assert.Equal( + new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12, 765), TimeSpan.Zero), entity.DateTimeOffsetAsDatetimeoffset3); + Assert.Equal(new DateTime(2017, 1, 2, 12, 11, 12, 321), entity.DateTimeAsDatetime23);*/ + Assert.Equal(TimeOnly.Parse("12:34:56", CultureInfo.InvariantCulture), entity.TimeOnlyAsTime3); + Assert.Equal(TimeSpan.Parse("12:34:56", CultureInfo.InvariantCulture), entity.TimeSpanAsTime3); + Assert.Equal(101m, entity.DecimalAsDecimal3); + Assert.Equal(102m, entity.DecimalAsDec3); + Assert.Equal(103m, entity.DecimalAsNumeric3); + } + + private static MappedScaledDataTypes CreateMappedScaledDataTypes(int id) + => new() + { + Id = id, + FloatAsFloat3 = 83.3f, + FloatAsDoublePrecision3 = 85.5f, + FloatAsFloat25 = 83.33f, + FloatAsDoublePrecision25 = 85.55f, + //DateTimeOffsetAsDatetimeoffset3 = new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12, 765), TimeSpan.Zero), + //DateTimeAsDatetime23 = new DateTime(2017, 1, 2, 12, 11, 12, 321), + DecimalAsDecimal3 = 101m, + DecimalAsDec3 = 102m, + DecimalAsNumeric3 = 103m, + TimeOnlyAsTime3 = TimeOnly.Parse("12:34:56", CultureInfo.InvariantCulture), + TimeSpanAsTime3 = TimeSpan.Parse("12:34:56", CultureInfo.InvariantCulture) + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedPrecisionAndScaledDataTypes(77)); + + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='77' + @p1='102.2' (Precision = 5) (Scale = 2) + @p2='101.1' (Precision = 5) (Scale = 2) + @p3='103.3' (Precision = 5) (Scale = 2) + """, +parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedPrecisionAndScaledDataTypes(context.Set().Single(e => e.Id == 77), 77); + } + } + + private static void AssertMappedPrecisionAndScaledDataTypes(MappedPrecisionAndScaledDataTypes entity, int id) + { + Assert.Equal(id, entity.Id); + Assert.Equal(101.1m, entity.DecimalAsDecimal52); + Assert.Equal(102.2m, entity.DecimalAsDec52); + Assert.Equal(103.3m, entity.DecimalAsNumeric52); + } + + private static MappedPrecisionAndScaledDataTypes CreateMappedPrecisionAndScaledDataTypes(int id) + => new() + { + Id = id, + DecimalAsDecimal52 = 101.1m, + DecimalAsDec52 = 102.2m, + DecimalAsNumeric52 = 103.3m + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_identity() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedDataTypesWithIdentity(77)); + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='True' + @p1='80' (Size = 1) + @p2='0x5D5E5F60' (Nullable = false) (Size = 255) + @p3='0x61626364' (Nullable = false) (Size = 510) + @p4='0x595A5B5C' (Nullable = false) (Size = 255) + @p5='B' (Nullable = false) (Size = 1) + @p6='C' (Nullable = false) (Size = 255) + @p7='73' + @p8='E' (Nullable = false) (Size = 1) + @p9='F' (Nullable = false) (Size = 255) + @p10='H' (Nullable = false) (Size = 1) + @p11='D' (Nullable = false) (Size = 1) + @p12='G' (Nullable = false) (Size = 1) + @p13='A' (Nullable = false) (Size = 1) + @p14='2015-01-02T00:00:00.0000000' (DbType = Date) + @p15='2015-01-02T00:00:00.0000000' (DbType = DateTime) + @p16='2019-01-02T14:11:12.0000000' (DbType = DateTime) + @p17='101' (Precision = 18) + @p18='102' (Precision = 18) + @p19='81.1' (Precision = 3) (Scale = 1) (DbType = Currency) + @p20='103' (Precision = 18) + @p21='85.5' + @p22='83.3' + @p23='4' + @p24='Value2' (Nullable = false) (Size = 255) + @p25='84.4' + @p26='a8f9f951-145f-4545-ac60-b92ff57ada47' + @p27='77' + @p28='78' + @p29='-128' + @p30='128' (Size = 1) + @p31='79' + @p32='Your' (Nullable = false) (Size = 255) + @p33='And now' (Nullable = false) (Size = 255) + @p34='strong' (Nullable = false) (Size = 255) + @p35='this...' (Nullable = false) (Size = 255) + @p36='help' (Nullable = false) (Size = 255) + @p37='anyone!' (Nullable = false) (Size = 255) + @p38='Gumball Rules OK!' (Nullable = false) (Size = 255) + @p39='don't' (Nullable = false) (Size = 255) + @p40='Gumball Rules!' (Nullable = false) (Size = 255) + @p41='C' (Nullable = false) (Size = 255) + @p42='short' (Nullable = false) (Size = 255) + @p43='11:15:12' + @p44='11:15:12' + @p45='65535' + @p46='-1' + @p47='4294967295' + @p48='-1' + @p49='18446744073709551615' (Precision = 20) + @p50='18446744073709551615' (Precision = 20) + """, +parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedDataTypesWithIdentity(context.Set().Single(e => e.Int == 77), 77); + } + } + + private static void AssertMappedDataTypesWithIdentity(MappedDataTypesWithIdentity entity, int id) + { + Assert.Equal(id, entity.Int); + Assert.Equal(78, entity.LongAsBigint); + Assert.Equal(79, entity.ShortAsSmallint); + Assert.Equal(80, entity.ByteAsTinyint); + Assert.Equal(uint.MaxValue, entity.UintAsInt); + Assert.Equal(ulong.MaxValue, entity.UlongAsBigint); + Assert.Equal(ushort.MaxValue, entity.UShortAsSmallint); + Assert.Equal(sbyte.MinValue, entity.SbyteAsTinyint); + Assert.True(entity.BoolAsBit); + Assert.Equal(81.1m, entity.DecimalAsMoney); + //Assert.Equal(82.2m, entity.DecimalAsSmallmoney); + Assert.Equal(83.3, entity.DoubleAsFloat); + Assert.Equal(84.4f, entity.FloatAsReal); + Assert.Equal(85.5, entity.DoubleAsDoublePrecision); + Assert.Equal(new DateOnly(2015, 1, 2), entity.DateOnlyAsDate); + Assert.Equal(new DateTime(2015, 1, 2), entity.DateTimeAsDate); + /*Assert.Equal( + new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12).AddTicks(7654321), TimeSpan.Zero), + entity.DateTimeOffsetAsDatetimeoffset); + Assert.Equal(new DateTime(2017, 1, 2, 12, 11, 12).AddTicks(7654321), entity.DateTimeAsDatetime2); + Assert.Equal(new DateTime(2018, 1, 2, 13, 11, 00), entity.DateTimeAsSmalldatetime);*/ + Assert.Equal(new DateTime(2019, 1, 2, 14, 11, 12), entity.DateTimeAsDatetime); + Assert.Equal(new TimeOnly(11, 15, 12), entity.TimeOnlyAsTime); + Assert.Equal(new TimeSpan(11, 15, 12), entity.TimeSpanAsTime); + Assert.Equal("C", entity.StringAsVarcharMax); + Assert.Equal("Your", entity.StringAsCharVaryingMax); + Assert.Equal("strong", entity.StringAsCharacterVaryingMax); + Assert.Equal("don't", entity.StringAsNvarcharMax); + Assert.Equal("help", entity.StringAsNationalCharVaryingMax); + Assert.Equal("anyone!", entity.StringAsNationalCharacterVaryingMax); + Assert.Equal("short", entity.StringAsVarcharMaxUtf8); + Assert.Equal("And now", entity.StringAsCharVaryingMaxUtf8); + Assert.Equal("this...", entity.StringAsCharacterVaryingMaxUtf8); + Assert.Equal("Gumball Rules!", entity.StringAsText); + Assert.Equal("Gumball Rules OK!", entity.StringAsNtext); + Assert.Equal(new byte[] { 89, 90, 91, 92 }, entity.BytesAsVarbinaryMax); + Assert.Equal(new byte[] { 93, 94, 95, 96 }, entity.BytesAsBinaryVaryingMax); + Assert.Equal(new byte[] { 97, 98, 99, 100 }, entity.BytesAsImage); + Assert.Equal(101m, entity.Decimal); + Assert.Equal(102m, entity.DecimalAsDec); + Assert.Equal(103m, entity.DecimalAsNumeric); + Assert.Equal(new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"), entity.GuidAsUniqueidentifier); + Assert.Equal(uint.MaxValue, entity.UintAsBigint); + Assert.Equal(ulong.MaxValue, entity.UlongAsDecimal200); + Assert.Equal(ushort.MaxValue, entity.UShortAsInt); + Assert.Equal(sbyte.MinValue, entity.SByteAsSmallint); + Assert.Equal('A', entity.CharAsVarchar); + Assert.Equal('B', entity.CharAsAsCharVarying); + Assert.Equal('C', entity.CharAsCharacterVaryingMax); + Assert.Equal('D', entity.CharAsNvarchar); + Assert.Equal('E', entity.CharAsNationalCharVarying); + Assert.Equal('F', entity.CharAsNationalCharacterVaryingMax); + Assert.Equal('G', entity.CharAsText); + Assert.Equal('H', entity.CharAsNtext); + Assert.Equal('I', entity.CharAsInt); + Assert.Equal(StringEnum16.Value2, entity.EnumAsVarcharMax); + Assert.Equal(StringEnumU16.Value4, entity.EnumAsNvarchar20); + } + + private static MappedDataTypesWithIdentity CreateMappedDataTypesWithIdentity(int id) + => new() + { + Int = id, + LongAsBigint = 78L, + ShortAsSmallint = 79, + ByteAsTinyint = 80, + UintAsInt = uint.MaxValue, + UlongAsBigint = ulong.MaxValue, + UShortAsSmallint = ushort.MaxValue, + SbyteAsTinyint = sbyte.MinValue, + BoolAsBit = true, + DecimalAsMoney = 81.1m, + //DecimalAsSmallmoney = 82.2m, + DoubleAsFloat = 83.3, + FloatAsReal = 84.4f, + DoubleAsDoublePrecision = 85.5, + DateOnlyAsDate = new DateOnly(2015, 1, 2), + DateTimeAsDate = new DateTime(2015, 1, 2, 10, 11, 12), + //DateTimeOffsetAsDatetimeoffset = new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12).AddTicks(7654321), TimeSpan.Zero), + //DateTimeAsDatetime2 = new DateTime(2017, 1, 2, 12, 11, 12).AddTicks(7654321), + //DateTimeAsSmalldatetime = new DateTime(2018, 1, 2, 13, 11, 12), + DateTimeAsDatetime = new DateTime(2019, 1, 2, 14, 11, 12), + TimeOnlyAsTime = new TimeOnly(11, 15, 12), + TimeSpanAsTime = new TimeSpan(11, 15, 12), + StringAsVarcharMax = "C", + StringAsCharVaryingMax = "Your", + StringAsCharacterVaryingMax = "strong", + StringAsNvarcharMax = "don't", + StringAsNationalCharVaryingMax = "help", + StringAsNationalCharacterVaryingMax = "anyone!", + StringAsVarcharMaxUtf8 = "short", + StringAsCharVaryingMaxUtf8 = "And now", + StringAsCharacterVaryingMaxUtf8 = "this...", + StringAsText = "Gumball Rules!", + StringAsNtext = "Gumball Rules OK!", + BytesAsVarbinaryMax = [89, 90, 91, 92], + BytesAsBinaryVaryingMax = [93, 94, 95, 96], + BytesAsImage = [97, 98, 99, 100], + Decimal = 101m, + DecimalAsDec = 102m, + DecimalAsNumeric = 103m, + GuidAsUniqueidentifier = new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"), + UintAsBigint = uint.MaxValue, + UlongAsDecimal200 = ulong.MaxValue, + UShortAsInt = ushort.MaxValue, + SByteAsSmallint = sbyte.MinValue, + CharAsVarchar = 'A', + CharAsAsCharVarying = 'B', + CharAsCharacterVaryingMax = 'C', + CharAsNvarchar = 'D', + CharAsNationalCharVarying = 'E', + CharAsNationalCharacterVaryingMax = 'F', + CharAsText = 'G', + CharAsNtext = 'H', + CharAsInt = 'I', + EnumAsNvarchar20 = StringEnumU16.Value4, + EnumAsVarcharMax = StringEnum16.Value2 + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_nullable_data_types_with_identity() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedNullableDataTypesWithIdentity(77)); + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='True' (Nullable = true) + @p1='80' (Nullable = true) (Size = 1) + @p2='0x61626364' (Size = 510) + @p3='0x595A5B5C' (Size = 510) + @p4='0x5D5E5F60' (Size = 510) + @p5='B' (Size = 1) + @p6='C' (Size = 255) + @p7='73' (Nullable = true) + @p8='E' (Size = 1) + @p9='F' (Size = 255) + @p10='H' (Size = 1) + @p11='D' (Size = 1) + @p12='G' (Size = 1) + @p13='A' (Size = 1) + @p14='2015-01-02T00:00:00.0000000' (Nullable = true) (DbType = Date) + @p15='2015-01-02T00:00:00.0000000' (Nullable = true) (DbType = DateTime) + @p16='2019-01-02T14:11:12.0000000' (Nullable = true) (DbType = DateTime) + @p17='101' (Nullable = true) (Precision = 18) + @p18='102' (Nullable = true) (Precision = 18) + @p19='81.1' (Nullable = true) (Precision = 3) (Scale = 1) (DbType = Currency) + @p20='103' (Nullable = true) (Precision = 18) + @p21='85.5' (Nullable = true) + @p22='83.3' (Nullable = true) + @p23='4' (Nullable = true) + @p24='Value2' (Size = 255) + @p25='84.4' (Nullable = true) + @p26='a8f9f951-145f-4545-ac60-b92ff57ada47' (Nullable = true) + @p27='77' (Nullable = true) + @p28='78' (Nullable = true) + @p29='-128' (Nullable = true) + @p30='128' (Nullable = true) (Size = 1) + @p31='79' (Nullable = true) + @p32='Your' (Size = 255) + @p33='And now' (Size = 255) + @p34='strong' (Size = 255) + @p35='this...' (Size = 255) + @p36='help' (Size = 255) + @p37='anyone!' (Size = 255) + @p38='Gumball Rules OK!' (Size = 255) + @p39='don't' (Size = 255) + @p40='Gumball Rules!' (Size = 255) + @p41='C' (Size = 255) + @p42='short' (Size = 255) + @p43='11:15:12' (Nullable = true) + @p44='11:15:12' (Nullable = true) + @p45='65535' (Nullable = true) + @p46='4294967295' (Nullable = true) + @p47='-1' (Nullable = true) + @p48='18446744073709551615' (Nullable = true) (Precision = 20) + @p49='18446744073709551615' (Nullable = true) (Precision = 20) + @p50='-1' (Nullable = true) + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedNullableDataTypesWithIdentity(context.Set().Single(e => e.Int == 77), 77); + } + } + + private static void AssertMappedNullableDataTypesWithIdentity(MappedNullableDataTypesWithIdentity entity, int id) + { + Assert.Equal(id, entity.Int); + Assert.Equal(78, entity.LongAsBigint); + Assert.Equal(79, entity.ShortAsSmallint.Value); + Assert.Equal(80, entity.ByteAsTinyint.Value); + Assert.Equal(uint.MaxValue, entity.UintAsInt); + Assert.Equal(ulong.MaxValue, entity.UlongAsBigint); + Assert.Equal(ushort.MaxValue, entity.UshortAsSmallint); + Assert.Equal(sbyte.MinValue, entity.SbyteAsTinyint); + Assert.True(entity.BoolAsBit); + Assert.Equal(81.1m, entity.DecimalAsMoney); + //Assert.Equal(82.2m, entity.DecimalAsSmallmoney); + Assert.Equal(83.3, entity.DoubleAsFloat); + Assert.Equal(84.4f, entity.FloatAsReal); + Assert.Equal(85.5, entity.DoubleAsDoublePrecision); + Assert.Equal(new DateTime(2015, 1, 2), entity.DateTimeAsDate); + Assert.Equal(new DateOnly(2015, 1, 2), entity.DateOnlyAsDate); + /*Assert.Equal( + new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12).AddTicks(2345678), TimeSpan.Zero), + entity.DateTimeOffsetAsDatetimeoffset); + Assert.Equal(new DateTime(2017, 1, 2, 12, 11, 12).AddTicks(2345678), entity.DateTimeAsDatetime2); + Assert.Equal(new DateTime(2018, 1, 2, 13, 11, 00), entity.DateTimeAsSmalldatetime);*/ + Assert.Equal(new DateTime(2019, 1, 2, 14, 11, 12), entity.DateTimeAsDatetime); + Assert.Equal(new TimeOnly(11, 15, 12), entity.TimeOnlyAsTime); + Assert.Equal(new TimeSpan(11, 15, 12), entity.TimeSpanAsTime); + Assert.Equal("C", entity.StringAsVarcharMax); + Assert.Equal("Your", entity.StringAsCharVaryingMax); + Assert.Equal("strong", entity.StringAsCharacterVaryingMax); + Assert.Equal("don't", entity.StringAsNvarcharMax); + Assert.Equal("help", entity.StringAsNationalCharVaryingMax); + Assert.Equal("anyone!", entity.StringAsNationalCharacterVaryingMax); + Assert.Equal("Gumball Rules!", entity.StringAsText); + Assert.Equal("Gumball Rules OK!", entity.StringAsNtext); + Assert.Equal(new byte[] { 89, 90, 91, 92 }, entity.BytesAsVarbinaryMax); + Assert.Equal(new byte[] { 93, 94, 95, 96 }, entity.BytesAsVaryingMax); + Assert.Equal(new byte[] { 97, 98, 99, 100 }, entity.BytesAsImage); + Assert.Equal(101m, entity.Decimal); + Assert.Equal(102m, entity.DecimalAsDec); + Assert.Equal(103m, entity.DecimalAsNumeric); + Assert.Equal(new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"), entity.GuidAsUniqueidentifier); + Assert.Equal(uint.MaxValue, entity.UintAsBigint); + Assert.Equal(ulong.MaxValue, entity.UlongAsDecimal200); + Assert.Equal(ushort.MaxValue, entity.UShortAsInt); + Assert.Equal(sbyte.MinValue, entity.SByteAsSmallint); + Assert.Equal('A', entity.CharAsVarchar); + Assert.Equal('B', entity.CharAsAsCharVarying); + Assert.Equal('C', entity.CharAsCharacterVaryingMax); + Assert.Equal('D', entity.CharAsNvarchar); + Assert.Equal('E', entity.CharAsNationalCharVarying); + Assert.Equal('F', entity.CharAsNationalCharacterVaryingMax); + Assert.Equal('G', entity.CharAsText); + Assert.Equal('H', entity.CharAsNtext); + Assert.Equal('I', entity.CharAsInt); + Assert.Equal(StringEnum16.Value2, entity.EnumAsVarcharMax); + Assert.Equal(StringEnumU16.Value4, entity.EnumAsNvarchar20); + } + + private static MappedNullableDataTypesWithIdentity CreateMappedNullableDataTypesWithIdentity(int id) + => new() + { + Int = id, + LongAsBigint = 78L, + ShortAsSmallint = 79, + ByteAsTinyint = 80, + UintAsInt = uint.MaxValue, + UlongAsBigint = ulong.MaxValue, + UshortAsSmallint = ushort.MaxValue, + SbyteAsTinyint = sbyte.MinValue, + BoolAsBit = true, + DecimalAsMoney = 81.1m, + //DecimalAsSmallmoney = 82.2m, + DoubleAsFloat = 83.3, + FloatAsReal = 84.4f, + DoubleAsDoublePrecision = 85.5, + DateOnlyAsDate = new DateOnly(2015, 1, 2), + DateTimeAsDate = new DateTime(2015, 1, 2, 10, 11, 12), + //DateTimeOffsetAsDatetimeoffset = new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12).AddTicks(2345678), TimeSpan.Zero), + //DateTimeAsDatetime2 = new DateTime(2017, 1, 2, 12, 11, 12).AddTicks(2345678), + //DateTimeAsSmalldatetime = new DateTime(2018, 1, 2, 13, 11, 12), + DateTimeAsDatetime = new DateTime(2019, 1, 2, 14, 11, 12), + TimeOnlyAsTime = new TimeOnly(11, 15, 12), + TimeSpanAsTime = new TimeSpan(11, 15, 12), + StringAsVarcharMax = "C", + StringAsCharVaryingMax = "Your", + StringAsCharacterVaryingMax = "strong", + StringAsNvarcharMax = "don't", + StringAsNationalCharVaryingMax = "help", + StringAsNationalCharacterVaryingMax = "anyone!", + StringAsVarcharMaxUtf8 = "short", + StringAsCharVaryingMaxUtf8 = "And now", + StringAsCharacterVaryingMaxUtf8 = "this...", + StringAsText = "Gumball Rules!", + StringAsNtext = "Gumball Rules OK!", + BytesAsVarbinaryMax = [89, 90, 91, 92], + BytesAsVaryingMax = [93, 94, 95, 96], + BytesAsImage = [97, 98, 99, 100], + Decimal = 101m, + DecimalAsDec = 102m, + DecimalAsNumeric = 103m, + GuidAsUniqueidentifier = new Guid("A8F9F951-145F-4545-AC60-B92FF57ADA47"), + UintAsBigint = uint.MaxValue, + UlongAsDecimal200 = ulong.MaxValue, + UShortAsInt = ushort.MaxValue, + SByteAsSmallint = sbyte.MinValue, + CharAsVarchar = 'A', + CharAsAsCharVarying = 'B', + CharAsCharacterVaryingMax = 'C', + CharAsNvarchar = 'D', + CharAsNationalCharVarying = 'E', + CharAsNationalCharacterVaryingMax = 'F', + CharAsText = 'G', + CharAsNtext = 'H', + CharAsInt = 'I', + EnumAsNvarchar20 = StringEnumU16.Value4, + EnumAsVarcharMax = StringEnum16.Value2 + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_set_to_null_with_identity() + { + using (var context = CreateContext()) + { + context.Set().Add(new MappedNullableDataTypesWithIdentity { Int = 78 }); + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0=NULL (DbType = Boolean) + @p1=NULL (DbType = Byte) + @p2=NULL (Size = 510) (DbType = Binary) + @p3=NULL (Size = 510) (DbType = Binary) + @p4=NULL (Size = 510) (DbType = Binary) + @p5=NULL (Size = 1) + @p6=NULL (Size = 255) + @p7=NULL (DbType = Int32) + @p8=NULL (Size = 1) + @p9=NULL (Size = 255) + @p10=NULL (Size = 1) + @p11=NULL (Size = 1) + @p12=NULL (Size = 1) + @p13=NULL (Size = 1) + @p14=NULL (DbType = Date) + @p15=NULL (DbType = DateTime) + @p16=NULL (DbType = DateTime) + @p17=NULL (Precision = 18) (DbType = Decimal) + @p18=NULL (Precision = 18) (DbType = Decimal) + @p19=NULL (DbType = Currency) + @p20=NULL (Precision = 18) (DbType = Decimal) + @p21=NULL (DbType = Double) + @p22=NULL (DbType = Double) + @p23=NULL (DbType = Int32) + @p24=NULL (Size = 255) + @p25=NULL (DbType = Single) + @p26=NULL (DbType = Guid) + @p27='78' (Nullable = true) + @p28=NULL (DbType = Int64) + @p29=NULL (DbType = Int16) + @p30=NULL (DbType = Byte) + @p31=NULL (DbType = Int16) + @p32=NULL (Size = 255) + @p33=NULL (Size = 255) + @p34=NULL (Size = 255) + @p35=NULL (Size = 255) + @p36=NULL (Size = 255) + @p37=NULL (Size = 255) + @p38=NULL (Size = 255) + @p39=NULL (Size = 255) + @p40=NULL (Size = 255) + @p41=NULL (Size = 255) + @p42=NULL (Size = 255) + @p43=NULL (DbType = Time) + @p44=NULL (DbType = Time) + @p45=NULL (DbType = Int32) + @p46=NULL (DbType = Int64) + @p47=NULL (DbType = Int32) + @p48=NULL (Precision = 20) (DbType = Decimal) + @p49=NULL (Precision = 20) (DbType = Decimal) + @p50=NULL (DbType = Int16) + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertNullMappedNullableDataTypesWithIdentity( + context.Set().Single(e => e.Int == 78), 78); + } + } + + private static void AssertNullMappedNullableDataTypesWithIdentity( + MappedNullableDataTypesWithIdentity entity, int id) + { + Assert.Equal(id, entity.Int); + Assert.Null(entity.LongAsBigint); + Assert.Null(entity.ShortAsSmallint); + Assert.Null(entity.ByteAsTinyint); + Assert.Null(entity.UintAsInt); + Assert.Null(entity.UlongAsBigint); + Assert.Null(entity.UshortAsSmallint); + Assert.Null(entity.SbyteAsTinyint); + Assert.Equal(entity.BoolAsBit, false);//Bit in LibRed is non nullable so can not be null + Assert.Null(entity.DecimalAsMoney); + //Assert.Null(entity.DecimalAsSmallmoney); + Assert.Null(entity.DoubleAsFloat); + Assert.Null(entity.FloatAsReal); + Assert.Null(entity.DoubleAsDoublePrecision); + Assert.Null(entity.DateOnlyAsDate); + Assert.Null(entity.DateTimeAsDate); + //Assert.Null(entity.DateTimeOffsetAsDatetimeoffset); + //Assert.Null(entity.DateTimeAsDatetime2); + //Assert.Null(entity.DateTimeAsSmalldatetime); + Assert.Null(entity.DateTimeAsDatetime); + Assert.Null(entity.TimeOnlyAsTime); + Assert.Null(entity.TimeSpanAsTime); + Assert.Null(entity.StringAsVarcharMax); + Assert.Null(entity.StringAsCharVaryingMax); + Assert.Null(entity.StringAsCharacterVaryingMax); + Assert.Null(entity.StringAsNvarcharMax); + Assert.Null(entity.StringAsNationalCharVaryingMax); + Assert.Null(entity.StringAsNationalCharacterVaryingMax); + Assert.Null(entity.StringAsText); + Assert.Null(entity.StringAsNtext); + Assert.Null(entity.BytesAsVarbinaryMax); + Assert.Null(entity.BytesAsVaryingMax); + Assert.Null(entity.BytesAsImage); + Assert.Null(entity.Decimal); + Assert.Null(entity.DecimalAsDec); + Assert.Null(entity.DecimalAsNumeric); + Assert.Null(entity.GuidAsUniqueidentifier); + Assert.Null(entity.UintAsBigint); + Assert.Null(entity.UlongAsDecimal200); + Assert.Null(entity.UShortAsInt); + Assert.Null(entity.SByteAsSmallint); + Assert.Null(entity.CharAsVarchar); + Assert.Null(entity.CharAsAsCharVarying); + Assert.Null(entity.CharAsCharacterVaryingMax); + Assert.Null(entity.CharAsNvarchar); + Assert.Null(entity.CharAsNationalCharVarying); + Assert.Null(entity.CharAsNationalCharacterVaryingMax); + Assert.Null(entity.CharAsText); + Assert.Null(entity.CharAsNtext); + Assert.Null(entity.CharAsInt); + Assert.Null(entity.EnumAsNvarchar20); + Assert.Null(entity.EnumAsVarcharMax); + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_sized_data_types_with_identity() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedSizedDataTypesWithIdentity(77)); + + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='0x0A0B0C' (Size = 3) + @p1='0x0C0D0E' (Size = 3) + @p2='0x0B0C0D' (Size = 3) + @p3='B' (Size = 3) + @p4='C' (Size = 3) + @p5='E' (Size = 3) + @p6='F' (Size = 3) + @p7='D' (Size = 3) + @p8='A' (Size = 3) + @p9='77' + @p10='Wor' (Size = 3) + @p11='Wha' (Size = 3) + @p12='Thr' (Size = 3) + @p13='tex' (Size = 3) + @p14='Lon' (Size = 3) + @p15='doe' (Size = 3) + @p16='Let' (Size = 3) + @p17='men' (Size = 3) + @p18='The' (Size = 3) + @p19='Squ' (Size = 3) + @p20='Col' (Size = 3) + @p21='Won' (Size = 3) + @p22='Int' (Size = 3) + @p23='Tha' (Size = 3) + @p24='the' (Size = 3) + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedSizedDataTypesWithIdentity(context.Set().Single(e => e.Int == 77), 77); + } + } + + private static void AssertMappedSizedDataTypesWithIdentity(MappedSizedDataTypesWithIdentity entity, int id) + { + Assert.Equal(id, entity.Int); + Assert.Equal("Wor", entity.StringAsChar3); + Assert.Equal("Lon", entity.StringAsCharacter3); + Assert.Equal("Tha", entity.StringAsVarchar3); + Assert.Equal("Thr", entity.StringAsCharVarying3); + Assert.Equal("Let", entity.StringAsCharacterVarying3); + Assert.Equal("Won", entity.StringAsNchar3); + Assert.Equal("Squ", entity.StringAsNationalCharacter3); + Assert.Equal("Int", entity.StringAsNvarchar3); + Assert.Equal("The", entity.StringAsNationalCharVarying3); + Assert.Equal("Col", entity.StringAsNationalCharacterVarying3); + Assert.Equal("Wha", entity.StringAsChar3Utf8); + Assert.Equal("doe", entity.StringAsCharacter3Utf8); + Assert.Equal("the", entity.StringAsVarchar3Utf8); + Assert.Equal("tex", entity.StringAsCharVarying3Utf8); + Assert.Equal("men", entity.StringAsCharacterVarying3Utf8); + Assert.Equal(new byte[] { 10, 11, 12 }, entity.BytesAsBinary3); + Assert.Equal(new byte[] { 11, 12, 13 }, entity.BytesAsVarbinary3); + Assert.Equal(new byte[] { 12, 13, 14 }, entity.BytesAsBinaryVarying3); + Assert.Equal('A', entity.CharAsVarchar3); + Assert.Equal('B', entity.CharAsAsCharVarying3); + Assert.Equal('C', entity.CharAsCharacterVarying3); + Assert.Equal('D', entity.CharAsNvarchar3); + Assert.Equal('E', entity.CharAsNationalCharVarying3); + Assert.Equal('F', entity.CharAsNationalCharacterVarying3); + } + + private static MappedSizedDataTypesWithIdentity CreateMappedSizedDataTypesWithIdentity(int id) + => new() + { + Int = id, + StringAsChar3 = "Wor", + StringAsCharacter3 = "Lon", + StringAsVarchar3 = "Tha", + StringAsCharVarying3 = "Thr", + StringAsCharacterVarying3 = "Let", + StringAsNchar3 = "Won", + StringAsNationalCharacter3 = "Squ", + StringAsNvarchar3 = "Int", + StringAsNationalCharVarying3 = "The", + StringAsNationalCharacterVarying3 = "Col", + StringAsChar3Utf8 = "Wha", + StringAsCharacter3Utf8 = "doe", + StringAsVarchar3Utf8 = "the", + StringAsCharVarying3Utf8 = "tex", + StringAsCharacterVarying3Utf8 = "men", + BytesAsBinary3 = [10, 11, 12], + BytesAsVarbinary3 = [11, 12, 13], + BytesAsBinaryVarying3 = [12, 13, 14], + CharAsVarchar3 = 'A', + CharAsAsCharVarying3 = 'B', + CharAsCharacterVarying3 = 'C', + CharAsNvarchar3 = 'D', + CharAsNationalCharVarying3 = 'E', + CharAsNationalCharacterVarying3 = 'F' + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types_with_identity() + { + using (var context = CreateContext()) + { + context.Set().Add(new MappedSizedDataTypesWithIdentity { Int = 78 }); + + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0=NULL (Size = 3) (DbType = Binary) + @p1=NULL (Size = 3) (DbType = Binary) + @p2=NULL (Size = 3) (DbType = Binary) + @p3=NULL (Size = 3) + @p4=NULL (Size = 3) + @p5=NULL (Size = 3) + @p6=NULL (Size = 3) + @p7=NULL (Size = 3) + @p8=NULL (Size = 3) + @p9='78' + @p10=NULL (Size = 3) + @p11=NULL (Size = 3) + @p12=NULL (Size = 3) + @p13=NULL (Size = 3) + @p14=NULL (Size = 3) + @p15=NULL (Size = 3) + @p16=NULL (Size = 3) + @p17=NULL (Size = 3) + @p18=NULL (Size = 3) + @p19=NULL (Size = 3) + @p20=NULL (Size = 3) + @p21=NULL (Size = 3) + @p22=NULL (Size = 3) + @p23=NULL (Size = 3) + @p24=NULL (Size = 3) + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertNullMappedSizedDataTypesWithIdentity(context.Set().Single(e => e.Int == 78), 78); + } + } + + private static void AssertNullMappedSizedDataTypesWithIdentity(MappedSizedDataTypesWithIdentity entity, int id) + { + Assert.Equal(id, entity.Int); + Assert.Null(entity.StringAsChar3); + Assert.Null(entity.StringAsCharacter3); + Assert.Null(entity.StringAsVarchar3); + Assert.Null(entity.StringAsCharVarying3); + Assert.Null(entity.StringAsCharacterVarying3); + Assert.Null(entity.StringAsNchar3); + Assert.Null(entity.StringAsNationalCharacter3); + Assert.Null(entity.StringAsNvarchar3); + Assert.Null(entity.StringAsNationalCharVarying3); + Assert.Null(entity.StringAsNationalCharacterVarying3); + Assert.Null(entity.StringAsChar3Utf8); + Assert.Null(entity.StringAsCharacter3Utf8); + Assert.Null(entity.StringAsVarchar3Utf8); + Assert.Null(entity.StringAsCharVarying3Utf8); + Assert.Null(entity.StringAsCharacterVarying3Utf8); + Assert.Null(entity.BytesAsBinary3); + Assert.Null(entity.BytesAsVarbinary3); + Assert.Null(entity.BytesAsBinaryVarying3); + Assert.Null(entity.CharAsVarchar3); + Assert.Null(entity.CharAsAsCharVarying3); + Assert.Null(entity.CharAsCharacterVarying3); + Assert.Null(entity.CharAsNvarchar3); + Assert.Null(entity.CharAsNationalCharVarying3); + Assert.Null(entity.CharAsNationalCharacterVarying3); + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_scale_with_identity() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedScaledDataTypesWithIdentity(77)); + + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='102' (Precision = 3) + @p1='101' (Precision = 3) + @p2='103' (Precision = 3) + @p3='85.55000305175781' + @p4='85.5' + @p5='83.33000183105469' + @p6='83.30000305175781' + @p7='77' + @p8='12:34:56' + @p9='12:34:56' + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedScaledDataTypesWithIdentity(context.Set().Single(e => e.Int == 77), 77); + } + } + + private static void AssertMappedScaledDataTypesWithIdentity(MappedScaledDataTypesWithIdentity entity, int id) + { + Assert.Equal(id, entity.Int); + Assert.Equal(83.3f, entity.FloatAsFloat3); + Assert.Equal(85.5f, entity.FloatAsDoublePrecision3); + Assert.Equal(83.33f, entity.FloatAsFloat25); + Assert.Equal(85.55f, entity.FloatAsDoublePrecision25); + /*Assert.Equal( + new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12, 567), TimeSpan.Zero), entity.DateTimeOffsetAsDatetimeoffset3); + Assert.Equal(new DateTime(2017, 1, 2, 12, 11, 12, 123), entity.DateTimeAsDatetime23);*/ + Assert.Equal(101m, entity.DecimalAsDecimal3); + Assert.Equal(102m, entity.DecimalAsDec3); + Assert.Equal(103m, entity.DecimalAsNumeric3); + Assert.Equal(TimeOnly.Parse("12:34:56", CultureInfo.InvariantCulture), entity.TimeOnlyAsTime3); + Assert.Equal(TimeSpan.Parse("12:34:56", CultureInfo.InvariantCulture), entity.TimeSpanAsTime3); + } + + private static MappedScaledDataTypesWithIdentity CreateMappedScaledDataTypesWithIdentity(int id) + => new() + { + Int = id, + FloatAsFloat3 = 83.3f, + FloatAsDoublePrecision3 = 85.5f, + FloatAsFloat25 = 83.33f, + FloatAsDoublePrecision25 = 85.55f, + //DateTimeOffsetAsDatetimeoffset3 = new DateTimeOffset(new DateTime(2016, 1, 2, 11, 11, 12, 567), TimeSpan.Zero), + //DateTimeAsDatetime23 = new DateTime(2017, 1, 2, 12, 11, 12, 123), + DecimalAsDecimal3 = 101m, + DecimalAsDec3 = 102m, + DecimalAsNumeric3 = 103m, + TimeOnlyAsTime3 = TimeOnly.Parse("12:34:56", CultureInfo.InvariantCulture), + TimeSpanAsTime3 = TimeSpan.Parse("12:34:56", CultureInfo.InvariantCulture) + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale_with_identity() + { + using (var context = CreateContext()) + { + context.Set().Add( + CreateMappedPrecisionAndScaledDataTypesWithIdentity(77)); + + Assert.Equal(1, context.SaveChanges()); + } + + var parameters = DumpParameters(); + Assert.Equal( + $""" + @p0='102.2' (Precision = 5) (Scale = 2) + @p1='101.1' (Precision = 5) (Scale = 2) + @p2='103.3' (Precision = 5) (Scale = 2) + @p3='77' + """, + parameters, + ignoreLineEndingDifferences: true); + + using (var context = CreateContext()) + { + AssertMappedPrecisionAndScaledDataTypesWithIdentity( + context.Set().Single(e => e.Int == 77), 77); + } + } + + private static void AssertMappedPrecisionAndScaledDataTypesWithIdentity( + MappedPrecisionAndScaledDataTypesWithIdentity entity, int id) + { + Assert.Equal(id, entity.Int); + Assert.Equal(101.1m, entity.DecimalAsDecimal52); + Assert.Equal(102.2m, entity.DecimalAsDec52); + Assert.Equal(103.3m, entity.DecimalAsNumeric52); + } + + private static MappedPrecisionAndScaledDataTypesWithIdentity CreateMappedPrecisionAndScaledDataTypesWithIdentity(int id) + => new() + { + Int = id, + DecimalAsDecimal52 = 101.1m, + DecimalAsDec52 = 102.2m, + DecimalAsNumeric52 = 103.3m + }; + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedDataTypes(177)); + context.Set().Add(CreateMappedDataTypes(178)); + context.Set().Add(CreateMappedDataTypes(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedDataTypes(context.Set().Single(e => e.Int == 177), 177); + AssertMappedDataTypes(context.Set().Single(e => e.Int == 178), 178); + AssertMappedDataTypes(context.Set().Single(e => e.Int == 179), 179); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_nullable_data_types_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedNullableDataTypes(177)); + context.Set().Add(CreateMappedNullableDataTypes(178)); + context.Set().Add(CreateMappedNullableDataTypes(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedNullableDataTypes(context.Set().Single(e => e.Int == 177), 177); + AssertMappedNullableDataTypes(context.Set().Single(e => e.Int == 178), 178); + AssertMappedNullableDataTypes(context.Set().Single(e => e.Int == 179), 179); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_set_to_null_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(new MappedNullableDataTypes { Int = 278 }); + context.Set().Add(new MappedNullableDataTypes { Int = 279 }); + context.Set().Add(new MappedNullableDataTypes { Int = 280 }); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertNullMappedNullableDataTypes(context.Set().Single(e => e.Int == 278), 278); + AssertNullMappedNullableDataTypes(context.Set().Single(e => e.Int == 279), 279); + AssertNullMappedNullableDataTypes(context.Set().Single(e => e.Int == 280), 280); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_sized_data_types_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedSizedDataTypes(177)); + context.Set().Add(CreateMappedSizedDataTypes(178)); + context.Set().Add(CreateMappedSizedDataTypes(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedSizedDataTypes(context.Set().Single(e => e.Id == 177), 177); + AssertMappedSizedDataTypes(context.Set().Single(e => e.Id == 178), 178); + AssertMappedSizedDataTypes(context.Set().Single(e => e.Id == 179), 179); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(new MappedSizedDataTypes { Id = 278 }); + context.Set().Add(new MappedSizedDataTypes { Id = 279 }); + context.Set().Add(new MappedSizedDataTypes { Id = 280 }); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertNullMappedSizedDataTypes(context.Set().Single(e => e.Id == 278), 278); + AssertNullMappedSizedDataTypes(context.Set().Single(e => e.Id == 279), 279); + AssertNullMappedSizedDataTypes(context.Set().Single(e => e.Id == 280), 280); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_scale_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedScaledDataTypes(177)); + context.Set().Add(CreateMappedScaledDataTypes(178)); + context.Set().Add(CreateMappedScaledDataTypes(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedScaledDataTypes(context.Set().Single(e => e.Id == 177), 177); + AssertMappedScaledDataTypes(context.Set().Single(e => e.Id == 178), 178); + AssertMappedScaledDataTypes(context.Set().Single(e => e.Id == 179), 179); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedPrecisionAndScaledDataTypes(177)); + context.Set().Add(CreateMappedPrecisionAndScaledDataTypes(178)); + context.Set().Add(CreateMappedPrecisionAndScaledDataTypes(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedPrecisionAndScaledDataTypes(context.Set().Single(e => e.Id == 177), 177); + AssertMappedPrecisionAndScaledDataTypes(context.Set().Single(e => e.Id == 178), 178); + AssertMappedPrecisionAndScaledDataTypes(context.Set().Single(e => e.Id == 179), 179); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_identity_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedDataTypesWithIdentity(177)); + context.Set().Add(CreateMappedDataTypesWithIdentity(178)); + context.Set().Add(CreateMappedDataTypesWithIdentity(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedDataTypesWithIdentity(context.Set().Single(e => e.Int == 177), 177); + AssertMappedDataTypesWithIdentity(context.Set().Single(e => e.Int == 178), 178); + AssertMappedDataTypesWithIdentity(context.Set().Single(e => e.Int == 179), 179); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_nullable_data_types_with_identity_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedNullableDataTypesWithIdentity(177)); + context.Set().Add(CreateMappedNullableDataTypesWithIdentity(178)); + context.Set().Add(CreateMappedNullableDataTypesWithIdentity(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedNullableDataTypesWithIdentity( + context.Set().Single(e => e.Int == 177), 177); + AssertMappedNullableDataTypesWithIdentity( + context.Set().Single(e => e.Int == 178), 178); + AssertMappedNullableDataTypesWithIdentity( + context.Set().Single(e => e.Int == 179), 179); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_set_to_null_with_identity_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(new MappedNullableDataTypesWithIdentity { Int = 278 }); + context.Set().Add(new MappedNullableDataTypesWithIdentity { Int = 279 }); + context.Set().Add(new MappedNullableDataTypesWithIdentity { Int = 280 }); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertNullMappedNullableDataTypesWithIdentity( + context.Set().Single(e => e.Int == 278), 278); + AssertNullMappedNullableDataTypesWithIdentity( + context.Set().Single(e => e.Int == 279), 279); + AssertNullMappedNullableDataTypesWithIdentity( + context.Set().Single(e => e.Int == 280), 280); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_sized_data_types_with_identity_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedSizedDataTypesWithIdentity(177)); + context.Set().Add(CreateMappedSizedDataTypesWithIdentity(178)); + context.Set().Add(CreateMappedSizedDataTypesWithIdentity(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedSizedDataTypesWithIdentity(context.Set().Single(e => e.Int == 177), 177); + AssertMappedSizedDataTypesWithIdentity(context.Set().Single(e => e.Int == 178), 178); + AssertMappedSizedDataTypesWithIdentity(context.Set().Single(e => e.Int == 179), 179); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types_with_identity_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(new MappedSizedDataTypesWithIdentity { Int = 278 }); + context.Set().Add(new MappedSizedDataTypesWithIdentity { Int = 279 }); + context.Set().Add(new MappedSizedDataTypesWithIdentity { Int = 280 }); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertNullMappedSizedDataTypesWithIdentity(context.Set().Single(e => e.Int == 278), 278); + AssertNullMappedSizedDataTypesWithIdentity(context.Set().Single(e => e.Int == 279), 279); + AssertNullMappedSizedDataTypesWithIdentity(context.Set().Single(e => e.Int == 280), 280); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_scale_with_identity_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedScaledDataTypesWithIdentity(177)); + context.Set().Add(CreateMappedScaledDataTypesWithIdentity(178)); + context.Set().Add(CreateMappedScaledDataTypesWithIdentity(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedScaledDataTypesWithIdentity(context.Set().Single(e => e.Int == 177), 177); + AssertMappedScaledDataTypesWithIdentity(context.Set().Single(e => e.Int == 178), 178); + AssertMappedScaledDataTypesWithIdentity(context.Set().Single(e => e.Int == 179), 179); + } + } + + [ConditionalFact] + public virtual void Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale_with_identity_in_batch() + { + using (var context = CreateContext()) + { + context.Set().Add(CreateMappedPrecisionAndScaledDataTypesWithIdentity(177)); + context.Set().Add(CreateMappedPrecisionAndScaledDataTypesWithIdentity(178)); + context.Set().Add(CreateMappedPrecisionAndScaledDataTypesWithIdentity(179)); + + Assert.Equal(3, context.SaveChanges()); + } + + using (var context = CreateContext()) + { + AssertMappedPrecisionAndScaledDataTypesWithIdentity( + context.Set().Single(e => e.Int == 177), 177); + AssertMappedPrecisionAndScaledDataTypesWithIdentity( + context.Set().Single(e => e.Int == 178), 178); + AssertMappedPrecisionAndScaledDataTypesWithIdentity( + context.Set().Single(e => e.Int == 179), 179); + } + } + + [ConditionalFact] + public virtual void Columns_have_expected_data_types() + { + var actual = QueryForColumnTypes( + CreateContext(), + nameof(ObjectBackedDataTypes), nameof(NullableBackedDataTypes), nameof(NonNullableBackedDataTypes)); + + const string expected = """ + #Dual.ID ---> [integer] + Animal.Id ---> [counter] + AnimalDetails.AnimalId ---> [nullable integer] + AnimalDetails.BoolField ---> [integer] + AnimalDetails.Id ---> [counter] + AnimalIdentification.AnimalId ---> [integer] + AnimalIdentification.Id ---> [counter] + AnimalIdentification.Method ---> [integer] + BinaryForeignKeyDataType.BinaryKeyDataTypeId ---> [nullable varbinary] [MaxLength = 510] + BinaryForeignKeyDataType.Id ---> [integer] + BinaryKeyDataType.Ex ---> [nullable varchar] [MaxLength = 255] + BinaryKeyDataType.Id ---> [varbinary] [MaxLength = 510] + BuiltInDataTypes.Enum16 ---> [smallint] + BuiltInDataTypes.Enum32 ---> [integer] + BuiltInDataTypes.Enum64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Enum8 ---> [byte] + BuiltInDataTypes.EnumS8 ---> [smallint] + BuiltInDataTypes.EnumU16 ---> [integer] + BuiltInDataTypes.EnumU32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.EnumU64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Id ---> [integer] + BuiltInDataTypes.PartitionId ---> [integer] + BuiltInDataTypes.TestBoolean ---> [smallint] + BuiltInDataTypes.TestByte ---> [byte] + BuiltInDataTypes.TestCharacter ---> [varchar] [MaxLength = 1] + BuiltInDataTypes.TestDateOnly ---> [datetime] + BuiltInDataTypes.TestDateTime ---> [datetime] + BuiltInDataTypes.TestDateTimeOffset ---> [datetime] + BuiltInDataTypes.TestDecimal ---> [decimal] [Precision = 18 Scale = 2] + BuiltInDataTypes.TestDouble ---> [double] + BuiltInDataTypes.TestInt16 ---> [smallint] + BuiltInDataTypes.TestInt32 ---> [integer] + BuiltInDataTypes.TestInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestSignedByte ---> [smallint] + BuiltInDataTypes.TestSingle ---> [single] + BuiltInDataTypes.TestTimeOnly ---> [datetime] + BuiltInDataTypes.TestTimeSpan ---> [datetime] + BuiltInDataTypes.TestUnsignedInt16 ---> [integer] + BuiltInDataTypes.TestUnsignedInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestUnsignedInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum16 ---> [smallint] + BuiltInDataTypesShadow.Enum32 ---> [integer] + BuiltInDataTypesShadow.Enum64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum8 ---> [byte] + BuiltInDataTypesShadow.EnumS8 ---> [smallint] + BuiltInDataTypesShadow.EnumU16 ---> [integer] + BuiltInDataTypesShadow.EnumU32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.EnumU64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Id ---> [integer] + BuiltInDataTypesShadow.PartitionId ---> [integer] + BuiltInDataTypesShadow.TestBoolean ---> [smallint] + BuiltInDataTypesShadow.TestByte ---> [byte] + BuiltInDataTypesShadow.TestCharacter ---> [varchar] [MaxLength = 1] + BuiltInDataTypesShadow.TestDateOnly ---> [datetime] + BuiltInDataTypesShadow.TestDateTime ---> [datetime] + BuiltInDataTypesShadow.TestDateTimeOffset ---> [datetime] + BuiltInDataTypesShadow.TestDecimal ---> [decimal] [Precision = 18 Scale = 2] + BuiltInDataTypesShadow.TestDouble ---> [double] + BuiltInDataTypesShadow.TestInt16 ---> [smallint] + BuiltInDataTypesShadow.TestInt32 ---> [integer] + BuiltInDataTypesShadow.TestInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestSignedByte ---> [smallint] + BuiltInDataTypesShadow.TestSingle ---> [single] + BuiltInDataTypesShadow.TestTimeOnly ---> [datetime] + BuiltInDataTypesShadow.TestTimeSpan ---> [datetime] + BuiltInDataTypesShadow.TestUnsignedInt16 ---> [integer] + BuiltInDataTypesShadow.TestUnsignedInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestUnsignedInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum16 ---> [nullable smallint] + BuiltInNullableDataTypes.Enum32 ---> [nullable integer] + BuiltInNullableDataTypes.Enum64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum8 ---> [nullable byte] + BuiltInNullableDataTypes.EnumS8 ---> [nullable smallint] + BuiltInNullableDataTypes.EnumU16 ---> [nullable integer] + BuiltInNullableDataTypes.EnumU32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.EnumU64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Id ---> [integer] + BuiltInNullableDataTypes.PartitionId ---> [integer] + BuiltInNullableDataTypes.TestByteArray ---> [nullable longbinary] + BuiltInNullableDataTypes.TestNullableBoolean ---> [nullable smallint] + BuiltInNullableDataTypes.TestNullableByte ---> [nullable byte] + BuiltInNullableDataTypes.TestNullableCharacter ---> [nullable varchar] [MaxLength = 1] + BuiltInNullableDataTypes.TestNullableDateOnly ---> [nullable datetime] + BuiltInNullableDataTypes.TestNullableDateTime ---> [nullable datetime] + BuiltInNullableDataTypes.TestNullableDateTimeOffset ---> [nullable datetime] + BuiltInNullableDataTypes.TestNullableDecimal ---> [nullable decimal] [Precision = 18 Scale = 2] + BuiltInNullableDataTypes.TestNullableDouble ---> [nullable double] + BuiltInNullableDataTypes.TestNullableInt16 ---> [nullable smallint] + BuiltInNullableDataTypes.TestNullableInt32 ---> [nullable integer] + BuiltInNullableDataTypes.TestNullableInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableSignedByte ---> [nullable smallint] + BuiltInNullableDataTypes.TestNullableSingle ---> [nullable single] + BuiltInNullableDataTypes.TestNullableTimeOnly ---> [nullable datetime] + BuiltInNullableDataTypes.TestNullableTimeSpan ---> [nullable datetime] + BuiltInNullableDataTypes.TestNullableUnsignedInt16 ---> [nullable integer] + BuiltInNullableDataTypes.TestNullableUnsignedInt32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableUnsignedInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestString ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.Enum16 ---> [nullable smallint] + BuiltInNullableDataTypesShadow.Enum32 ---> [nullable integer] + BuiltInNullableDataTypesShadow.Enum64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.Enum8 ---> [nullable byte] + BuiltInNullableDataTypesShadow.EnumS8 ---> [nullable smallint] + BuiltInNullableDataTypesShadow.EnumU16 ---> [nullable integer] + BuiltInNullableDataTypesShadow.EnumU32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.EnumU64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.Id ---> [integer] + BuiltInNullableDataTypesShadow.PartitionId ---> [integer] + BuiltInNullableDataTypesShadow.TestByteArray ---> [nullable longbinary] + BuiltInNullableDataTypesShadow.TestNullableBoolean ---> [nullable smallint] + BuiltInNullableDataTypesShadow.TestNullableByte ---> [nullable byte] + BuiltInNullableDataTypesShadow.TestNullableCharacter ---> [nullable varchar] [MaxLength = 1] + BuiltInNullableDataTypesShadow.TestNullableDateOnly ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableDateTime ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableDateTimeOffset ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableDecimal ---> [nullable decimal] [Precision = 18 Scale = 2] + BuiltInNullableDataTypesShadow.TestNullableDouble ---> [nullable double] + BuiltInNullableDataTypesShadow.TestNullableInt16 ---> [nullable smallint] + BuiltInNullableDataTypesShadow.TestNullableInt32 ---> [nullable integer] + BuiltInNullableDataTypesShadow.TestNullableInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableSignedByte ---> [nullable smallint] + BuiltInNullableDataTypesShadow.TestNullableSingle ---> [nullable single] + BuiltInNullableDataTypesShadow.TestNullableTimeOnly ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableTimeSpan ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt16 ---> [nullable integer] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestString ---> [nullable varchar] [MaxLength = 255] + DateTimeEnclosure.DateTimeOffset ---> [nullable datetime] + DateTimeEnclosure.Id ---> [counter] + EmailTemplate.Id ---> [guid] + EmailTemplate.TemplateType ---> [integer] + MappedDataTypes.BoolAsBit ---> [bit] + MappedDataTypes.ByteAsTinyint ---> [byte] + MappedDataTypes.BytesAsBinaryVaryingMax ---> [varbinary] [MaxLength = 510] + MappedDataTypes.BytesAsImage ---> [longbinary] + MappedDataTypes.BytesAsVarbinaryMax ---> [varbinary] [MaxLength = 510] + MappedDataTypes.CharAsAsCharVarying ---> [varchar] [MaxLength = 1] + MappedDataTypes.CharAsCharacterVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypes.CharAsInt ---> [integer] + MappedDataTypes.CharAsNationalCharacterVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypes.CharAsNationalCharVarying ---> [varchar] [MaxLength = 1] + MappedDataTypes.CharAsNtext ---> [longchar] + MappedDataTypes.CharAsNvarchar ---> [varchar] [MaxLength = 1] + MappedDataTypes.CharAsText ---> [varchar] [MaxLength = 1] + MappedDataTypes.CharAsVarchar ---> [varchar] [MaxLength = 1] + MappedDataTypes.DateOnlyAsDate ---> [datetime] + MappedDataTypes.DateTimeAsDate ---> [datetime] + MappedDataTypes.DateTimeAsDatetime ---> [datetime] + MappedDataTypes.Decimal ---> [decimal] [Precision = 18 Scale = 0] + MappedDataTypes.DecimalAsDec ---> [decimal] [Precision = 18 Scale = 0] + MappedDataTypes.DecimalAsMoney ---> [currency] + MappedDataTypes.DecimalAsNumeric ---> [decimal] [Precision = 18 Scale = 0] + MappedDataTypes.DoubleAsDoublePrecision ---> [double] + MappedDataTypes.DoubleAsFloat ---> [double] + MappedDataTypes.EnumAsNvarchar20 ---> [integer] + MappedDataTypes.EnumAsVarcharMax ---> [varchar] [MaxLength = 255] + MappedDataTypes.FloatAsReal ---> [single] + MappedDataTypes.GuidAsUniqueidentifier ---> [guid] + MappedDataTypes.Int ---> [integer] + MappedDataTypes.LongAsBigInt ---> [decimal] [Precision = 20 Scale = 0] + MappedDataTypes.SByteAsSmallint ---> [smallint] + MappedDataTypes.SByteAsTinyint ---> [byte] + MappedDataTypes.ShortAsSmallint ---> [smallint] + MappedDataTypes.StringAsCharacterVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypes.StringAsCharacterVaryingMaxUtf8 ---> [varchar] [MaxLength = 255] + MappedDataTypes.StringAsCharVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypes.StringAsCharVaryingMaxUtf8 ---> [varchar] [MaxLength = 255] + MappedDataTypes.StringAsNationalCharacterVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypes.StringAsNationalCharVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypes.StringAsNtext ---> [longchar] + MappedDataTypes.StringAsNvarcharMax ---> [varchar] [MaxLength = 255] + MappedDataTypes.StringAsText ---> [longchar] + MappedDataTypes.StringAsVarcharMax ---> [varchar] [MaxLength = 255] + MappedDataTypes.StringAsVarcharMaxUtf8 ---> [varchar] [MaxLength = 255] + MappedDataTypes.TimeOnlyAsTime ---> [datetime] + MappedDataTypes.TimeSpanAsTime ---> [datetime] + MappedDataTypes.UintAsBigint ---> [decimal] [Precision = 20 Scale = 0] + MappedDataTypes.UintAsInt ---> [integer] + MappedDataTypes.UlongAsBigint ---> [decimal] [Precision = 20 Scale = 0] + MappedDataTypes.UlongAsDecimal200 ---> [decimal] [Precision = 20 Scale = 0] + MappedDataTypes.UShortAsInt ---> [integer] + MappedDataTypes.UShortAsSmallint ---> [smallint] + MappedDataTypesWithIdentity.BoolAsBit ---> [bit] + MappedDataTypesWithIdentity.ByteAsTinyint ---> [byte] + MappedDataTypesWithIdentity.BytesAsBinaryVaryingMax ---> [varbinary] [MaxLength = 255] + MappedDataTypesWithIdentity.BytesAsImage ---> [longbinary] + MappedDataTypesWithIdentity.BytesAsVarbinaryMax ---> [varbinary] [MaxLength = 255] + MappedDataTypesWithIdentity.CharAsAsCharVarying ---> [varchar] [MaxLength = 1] + MappedDataTypesWithIdentity.CharAsCharacterVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.CharAsInt ---> [integer] + MappedDataTypesWithIdentity.CharAsNationalCharacterVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.CharAsNationalCharVarying ---> [varchar] [MaxLength = 1] + MappedDataTypesWithIdentity.CharAsNtext ---> [longchar] + MappedDataTypesWithIdentity.CharAsNvarchar ---> [varchar] [MaxLength = 1] + MappedDataTypesWithIdentity.CharAsText ---> [varchar] [MaxLength = 1] + MappedDataTypesWithIdentity.CharAsVarchar ---> [varchar] [MaxLength = 1] + MappedDataTypesWithIdentity.DateOnlyAsDate ---> [datetime] + MappedDataTypesWithIdentity.DateTimeAsDate ---> [datetime] + MappedDataTypesWithIdentity.DateTimeAsDatetime ---> [datetime] + MappedDataTypesWithIdentity.Decimal ---> [decimal] [Precision = 18 Scale = 0] + MappedDataTypesWithIdentity.DecimalAsDec ---> [decimal] [Precision = 18 Scale = 0] + MappedDataTypesWithIdentity.DecimalAsMoney ---> [currency] + MappedDataTypesWithIdentity.DecimalAsNumeric ---> [decimal] [Precision = 18 Scale = 0] + MappedDataTypesWithIdentity.DoubleAsDoublePrecision ---> [double] + MappedDataTypesWithIdentity.DoubleAsFloat ---> [double] + MappedDataTypesWithIdentity.EnumAsNvarchar20 ---> [integer] + MappedDataTypesWithIdentity.EnumAsVarcharMax ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.FloatAsReal ---> [single] + MappedDataTypesWithIdentity.GuidAsUniqueidentifier ---> [guid] + MappedDataTypesWithIdentity.Id ---> [counter] + MappedDataTypesWithIdentity.Int ---> [integer] + MappedDataTypesWithIdentity.LongAsBigint ---> [decimal] [Precision = 20 Scale = 0] + MappedDataTypesWithIdentity.SByteAsSmallint ---> [smallint] + MappedDataTypesWithIdentity.SbyteAsTinyint ---> [byte] + MappedDataTypesWithIdentity.ShortAsSmallint ---> [smallint] + MappedDataTypesWithIdentity.StringAsCharacterVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.StringAsCharacterVaryingMaxUtf8 ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.StringAsCharVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.StringAsCharVaryingMaxUtf8 ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.StringAsNationalCharacterVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.StringAsNationalCharVaryingMax ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.StringAsNtext ---> [longchar] + MappedDataTypesWithIdentity.StringAsNvarcharMax ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.StringAsText ---> [longchar] + MappedDataTypesWithIdentity.StringAsVarcharMax ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.StringAsVarcharMaxUtf8 ---> [varchar] [MaxLength = 255] + MappedDataTypesWithIdentity.TimeOnlyAsTime ---> [datetime] + MappedDataTypesWithIdentity.TimeSpanAsTime ---> [datetime] + MappedDataTypesWithIdentity.UintAsBigint ---> [decimal] [Precision = 20 Scale = 0] + MappedDataTypesWithIdentity.UintAsInt ---> [integer] + MappedDataTypesWithIdentity.UlongAsBigint ---> [decimal] [Precision = 20 Scale = 0] + MappedDataTypesWithIdentity.UlongAsDecimal200 ---> [decimal] [Precision = 20 Scale = 0] + MappedDataTypesWithIdentity.UShortAsInt ---> [integer] + MappedDataTypesWithIdentity.UShortAsSmallint ---> [smallint] + MappedNullableDataTypes.BoolAsBit ---> [nullable bit] + MappedNullableDataTypes.ByteAsTinyint ---> [nullable byte] + MappedNullableDataTypes.BytesAsBinaryVaryingMax ---> [nullable varbinary] [MaxLength = 510] + MappedNullableDataTypes.BytesAsImage ---> [nullable longbinary] + MappedNullableDataTypes.BytesAsVarbinaryMax ---> [nullable varbinary] [MaxLength = 510] + MappedNullableDataTypes.CharAsAsCharVarying ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypes.CharAsCharacterVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.CharAsInt ---> [nullable integer] + MappedNullableDataTypes.CharAsNationalCharacterVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.CharAsNationalCharVarying ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypes.CharAsNtext ---> [nullable longchar] + MappedNullableDataTypes.CharAsNvarchar ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypes.CharAsText ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypes.CharAsVarchar ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypes.DateOnlyAsDate ---> [nullable datetime] + MappedNullableDataTypes.DateTimeAsDate ---> [nullable datetime] + MappedNullableDataTypes.DateTimeAsDatetime ---> [nullable datetime] + MappedNullableDataTypes.Decimal ---> [nullable decimal] [Precision = 18 Scale = 0] + MappedNullableDataTypes.DecimalAsDec ---> [nullable decimal] [Precision = 18 Scale = 0] + MappedNullableDataTypes.DecimalAsMoney ---> [nullable currency] + MappedNullableDataTypes.DecimalAsNumeric ---> [nullable decimal] [Precision = 18 Scale = 0] + MappedNullableDataTypes.DoubleAsDoublePrecision ---> [nullable double] + MappedNullableDataTypes.DoubleAsFloat ---> [nullable double] + MappedNullableDataTypes.EnumAsNvarchar20 ---> [nullable integer] + MappedNullableDataTypes.EnumAsVarcharMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.FloatAsReal ---> [nullable single] + MappedNullableDataTypes.GuidAsUniqueidentifier ---> [nullable guid] + MappedNullableDataTypes.Int ---> [integer] + MappedNullableDataTypes.LongAsBigint ---> [nullable decimal] [Precision = 20 Scale = 0] + MappedNullableDataTypes.SByteAsSmallint ---> [nullable smallint] + MappedNullableDataTypes.SbyteAsTinyint ---> [nullable byte] + MappedNullableDataTypes.ShortAsSmallint ---> [nullable smallint] + MappedNullableDataTypes.StringAsCharacterVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.StringAsCharacterVaryingMaxUtf8 ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.StringAsCharVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.StringAsCharVaryingMaxUtf8 ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.StringAsNationalCharacterVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.StringAsNationalCharVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.StringAsNtext ---> [nullable longchar] + MappedNullableDataTypes.StringAsNvarcharMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.StringAsText ---> [nullable longchar] + MappedNullableDataTypes.StringAsVarcharMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.StringAsVarcharMaxUtf8 ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypes.TimeOnlyAsTime ---> [nullable datetime] + MappedNullableDataTypes.TimeSpanAsTime ---> [nullable datetime] + MappedNullableDataTypes.UintAsBigint ---> [nullable decimal] [Precision = 20 Scale = 0] + MappedNullableDataTypes.UintAsInt ---> [nullable integer] + MappedNullableDataTypes.UlongAsBigint ---> [nullable decimal] [Precision = 20 Scale = 0] + MappedNullableDataTypes.UlongAsDecimal200 ---> [nullable decimal] [Precision = 20 Scale = 0] + MappedNullableDataTypes.UShortAsInt ---> [nullable integer] + MappedNullableDataTypes.UShortAsSmallint ---> [nullable smallint] + MappedNullableDataTypesWithIdentity.BoolAsBit ---> [nullable bit] + MappedNullableDataTypesWithIdentity.ByteAsTinyint ---> [nullable byte] + MappedNullableDataTypesWithIdentity.BytesAsImage ---> [nullable longbinary] + MappedNullableDataTypesWithIdentity.BytesAsVarbinaryMax ---> [nullable varbinary] [MaxLength = 510] + MappedNullableDataTypesWithIdentity.BytesAsVaryingMax ---> [nullable varbinary] [MaxLength = 510] + MappedNullableDataTypesWithIdentity.CharAsAsCharVarying ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypesWithIdentity.CharAsCharacterVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.CharAsInt ---> [nullable integer] + MappedNullableDataTypesWithIdentity.CharAsNationalCharacterVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.CharAsNationalCharVarying ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypesWithIdentity.CharAsNtext ---> [nullable longchar] + MappedNullableDataTypesWithIdentity.CharAsNvarchar ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypesWithIdentity.CharAsText ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypesWithIdentity.CharAsVarchar ---> [nullable varchar] [MaxLength = 1] + MappedNullableDataTypesWithIdentity.DateOnlyAsDate ---> [nullable datetime] + MappedNullableDataTypesWithIdentity.DateTimeAsDate ---> [nullable datetime] + MappedNullableDataTypesWithIdentity.DateTimeAsDatetime ---> [nullable datetime] + MappedNullableDataTypesWithIdentity.Decimal ---> [nullable decimal] [Precision = 18 Scale = 0] + MappedNullableDataTypesWithIdentity.DecimalAsDec ---> [nullable decimal] [Precision = 18 Scale = 0] + MappedNullableDataTypesWithIdentity.DecimalAsMoney ---> [nullable currency] + MappedNullableDataTypesWithIdentity.DecimalAsNumeric ---> [nullable decimal] [Precision = 18 Scale = 0] + MappedNullableDataTypesWithIdentity.DoubleAsDoublePrecision ---> [nullable double] + MappedNullableDataTypesWithIdentity.DoubleAsFloat ---> [nullable double] + MappedNullableDataTypesWithIdentity.EnumAsNvarchar20 ---> [nullable integer] + MappedNullableDataTypesWithIdentity.EnumAsVarcharMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.FloatAsReal ---> [nullable single] + MappedNullableDataTypesWithIdentity.GuidAsUniqueidentifier ---> [nullable guid] + MappedNullableDataTypesWithIdentity.Id ---> [counter] + MappedNullableDataTypesWithIdentity.Int ---> [nullable integer] + MappedNullableDataTypesWithIdentity.LongAsBigint ---> [nullable decimal] [Precision = 20 Scale = 0] + MappedNullableDataTypesWithIdentity.SByteAsSmallint ---> [nullable smallint] + MappedNullableDataTypesWithIdentity.SbyteAsTinyint ---> [nullable byte] + MappedNullableDataTypesWithIdentity.ShortAsSmallint ---> [nullable smallint] + MappedNullableDataTypesWithIdentity.StringAsCharacterVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.StringAsCharacterVaryingMaxUtf8 ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.StringAsCharVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.StringAsCharVaryingMaxUtf8 ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.StringAsNationalCharacterVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.StringAsNationalCharVaryingMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.StringAsNtext ---> [nullable longchar] + MappedNullableDataTypesWithIdentity.StringAsNvarcharMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.StringAsText ---> [nullable longchar] + MappedNullableDataTypesWithIdentity.StringAsVarcharMax ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.StringAsVarcharMaxUtf8 ---> [nullable varchar] [MaxLength = 255] + MappedNullableDataTypesWithIdentity.TimeOnlyAsTime ---> [nullable datetime] + MappedNullableDataTypesWithIdentity.TimeSpanAsTime ---> [nullable datetime] + MappedNullableDataTypesWithIdentity.UintAsBigint ---> [nullable decimal] [Precision = 20 Scale = 0] + MappedNullableDataTypesWithIdentity.UintAsInt ---> [nullable integer] + MappedNullableDataTypesWithIdentity.UlongAsBigint ---> [nullable decimal] [Precision = 20 Scale = 0] + MappedNullableDataTypesWithIdentity.UlongAsDecimal200 ---> [nullable decimal] [Precision = 20 Scale = 0] + MappedNullableDataTypesWithIdentity.UShortAsInt ---> [nullable integer] + MappedNullableDataTypesWithIdentity.UshortAsSmallint ---> [nullable smallint] + MappedPrecisionAndScaledDataTypes.DecimalAsDec52 ---> [decimal] [Precision = 5 Scale = 2] + MappedPrecisionAndScaledDataTypes.DecimalAsDecimal52 ---> [decimal] [Precision = 5 Scale = 2] + MappedPrecisionAndScaledDataTypes.DecimalAsNumeric52 ---> [decimal] [Precision = 5 Scale = 2] + MappedPrecisionAndScaledDataTypes.Id ---> [integer] + MappedPrecisionAndScaledDataTypesWithIdentity.DecimalAsDec52 ---> [decimal] [Precision = 5 Scale = 2] + MappedPrecisionAndScaledDataTypesWithIdentity.DecimalAsDecimal52 ---> [decimal] [Precision = 5 Scale = 2] + MappedPrecisionAndScaledDataTypesWithIdentity.DecimalAsNumeric52 ---> [decimal] [Precision = 5 Scale = 2] + MappedPrecisionAndScaledDataTypesWithIdentity.Id ---> [counter] + MappedPrecisionAndScaledDataTypesWithIdentity.Int ---> [integer] + MappedScaledDataTypes.DecimalAsDec3 ---> [decimal] [Precision = 3 Scale = 0] + MappedScaledDataTypes.DecimalAsDecimal3 ---> [decimal] [Precision = 3 Scale = 0] + MappedScaledDataTypes.DecimalAsNumeric3 ---> [decimal] [Precision = 3 Scale = 0] + MappedScaledDataTypes.FloatAsDoublePrecision25 ---> [double] + MappedScaledDataTypes.FloatAsDoublePrecision3 ---> [double] + MappedScaledDataTypes.FloatAsFloat25 ---> [double] + MappedScaledDataTypes.FloatAsFloat3 ---> [double] + MappedScaledDataTypes.Id ---> [integer] + MappedScaledDataTypes.TimeOnlyAsTime3 ---> [datetime] + MappedScaledDataTypes.TimeSpanAsTime3 ---> [datetime] + MappedScaledDataTypesWithIdentity.DecimalAsDec3 ---> [decimal] [Precision = 3 Scale = 0] + MappedScaledDataTypesWithIdentity.DecimalAsDecimal3 ---> [decimal] [Precision = 3 Scale = 0] + MappedScaledDataTypesWithIdentity.DecimalAsNumeric3 ---> [decimal] [Precision = 3 Scale = 0] + MappedScaledDataTypesWithIdentity.FloatAsDoublePrecision25 ---> [double] + MappedScaledDataTypesWithIdentity.FloatAsDoublePrecision3 ---> [double] + MappedScaledDataTypesWithIdentity.FloatAsFloat25 ---> [double] + MappedScaledDataTypesWithIdentity.FloatAsFloat3 ---> [double] + MappedScaledDataTypesWithIdentity.Id ---> [counter] + MappedScaledDataTypesWithIdentity.Int ---> [integer] + MappedScaledDataTypesWithIdentity.TimeOnlyAsTime3 ---> [datetime] + MappedScaledDataTypesWithIdentity.TimeSpanAsTime3 ---> [datetime] + MappedSizedDataTypes.BytesAsBinary3 ---> [nullable varbinary] [MaxLength = 3] + MappedSizedDataTypes.BytesAsBinaryVarying3 ---> [nullable varbinary] [MaxLength = 3] + MappedSizedDataTypes.BytesAsVarbinary3 ---> [nullable varbinary] [MaxLength = 3] + MappedSizedDataTypes.CharAsAsCharVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.CharAsCharacterVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.CharAsNationalCharacterVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.CharAsNationalCharVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.CharAsNvarchar3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.CharAsVarchar3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.Id ---> [integer] + MappedSizedDataTypes.StringAsChar3 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypes.StringAsChar3Utf8 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypes.StringAsCharacter3 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypes.StringAsCharacter3Utf8 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypes.StringAsCharacterVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.StringAsCharacterVarying3Utf8 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.StringAsCharVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.StringAsCharVarying3Utf8 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.StringAsNationalCharacter3 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypes.StringAsNationalCharacterVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.StringAsNationalCharVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.StringAsNchar3 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypes.StringAsNvarchar3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.StringAsVarchar3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypes.StringAsVarchar3Utf8 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.BytesAsBinary3 ---> [nullable varbinary] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.BytesAsBinaryVarying3 ---> [nullable varbinary] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.BytesAsVarbinary3 ---> [nullable varbinary] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.CharAsAsCharVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.CharAsCharacterVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.CharAsNationalCharacterVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.CharAsNationalCharVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.CharAsNvarchar3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.CharAsVarchar3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.Id ---> [counter] + MappedSizedDataTypesWithIdentity.Int ---> [integer] + MappedSizedDataTypesWithIdentity.StringAsChar3 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsChar3Utf8 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsCharacter3 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsCharacter3Utf8 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsCharacterVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsCharacterVarying3Utf8 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsCharVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsCharVarying3Utf8 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsNationalCharacter3 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsNationalCharacterVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsNationalCharVarying3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsNchar3 ---> [nullable char] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsNvarchar3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsVarchar3 ---> [nullable varchar] [MaxLength = 3] + MappedSizedDataTypesWithIdentity.StringAsVarchar3Utf8 ---> [nullable varchar] [MaxLength = 3] + MaxLengthDataTypes.ByteArray5 ---> [nullable varbinary] [MaxLength = 5] + MaxLengthDataTypes.ByteArray9000 ---> [nullable varbinary] [MaxLength = 255] + MaxLengthDataTypes.Id ---> [integer] + MaxLengthDataTypes.String3 ---> [nullable varchar] [MaxLength = 3] + MaxLengthDataTypes.String9000 ---> [nullable varchar] [MaxLength = 255] + MaxLengthDataTypes.StringUnbounded ---> [nullable varchar] [MaxLength = 255] + StringEnclosure.Id ---> [counter] + StringEnclosure.Value ---> [nullable varchar] [MaxLength = 255] + StringForeignKeyDataType.Id ---> [integer] + StringForeignKeyDataType.StringKeyDataTypeId ---> [nullable varchar] [MaxLength = 255] + StringKeyDataType.Id ---> [varchar] [MaxLength = 255] + UnicodeDataTypes.Id ---> [integer] + UnicodeDataTypes.StringAnsi ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringAnsi3 ---> [nullable varchar] [MaxLength = 3] + UnicodeDataTypes.StringAnsi9000 ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringDefault ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringUnicode ---> [nullable varchar] [MaxLength = 255] + + """; + + Assert.Equal(expected, actual, ignoreLineEndingDifferences: true); + } + + [ConditionalFact] + public void Can_get_column_types_from_built_model() + { + using var context = CreateContext(); + var typeMapper = context.GetService(); + + foreach (var property in context.Model.GetEntityTypes().SelectMany(e => e.GetDeclaredProperties())) + { + var columnType = property.GetColumnType(); + Assert.NotNull(columnType); + + if (property[RelationalAnnotationNames.ColumnType] == null) + { + Assert.Equal( + columnType.ToLowerInvariant(), + typeMapper.FindMapping(property).StoreType.ToLowerInvariant()); + } + } + } + + public static string QueryForColumnTypes(DbContext context, params string[] tablesToIgnore) + { + const string query + = @"SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`"; + + var columns = new List(); + + using (context) + { + var connection = context.Database.GetDbConnection(); + + var command = connection.CreateCommand(); + command.CommandText = query; + + using (var reader = command.ExecuteReader()) + { + while (reader.Read()) + { + var columnInfo = new ColumnInfo + { + TableName = reader.GetString(0), + ColumnName = reader.GetString(1), + DataType = reader.GetString(3), + IsNullable = reader.IsDBNull(4) ? null : reader.GetBoolean(4), + MaxLength = reader.IsDBNull(5) ? null : reader.GetInt32(5), + NumericPrecision = reader.IsDBNull(6) ? null : reader.GetInt32(6), + NumericScale = reader.IsDBNull(7) ? null : reader.GetInt32(7), + //DateTimePrecision = reader.IsDBNull(7) ? null : (int?)reader.GetInt16(7) + }; + + if (!tablesToIgnore.Contains(columnInfo.TableName)) + { + columns.Add(columnInfo); + } + } + } + } + + var builder = new StringBuilder(); + + foreach (var column in columns.OrderBy(e => e.TableName).ThenBy(e => e.ColumnName)) + { + builder.Append(column.TableName); + builder.Append("."); + builder.Append(column.ColumnName); + builder.Append(" ---> ["); + + if (column.IsNullable == true) + { + builder.Append("nullable "); + } + + builder.Append(column.DataType); + builder.Append("]"); + + if (column.MaxLength.HasValue) + { + builder.Append(" [MaxLength = "); + builder.Append(column.MaxLength); + builder.Append("]"); + } + + if (column.NumericPrecision.HasValue) + { + builder.Append(" [Precision = "); + builder.Append(column.NumericPrecision); + } + + if (column.DateTimePrecision.HasValue) + { + builder.Append(" [Precision = "); + builder.Append(column.DateTimePrecision); + } + + if (column.NumericScale.HasValue) + { + builder.Append(" Scale = "); + builder.Append(column.NumericScale); + } + + if (column.NumericPrecision.HasValue + || column.DateTimePrecision.HasValue + || column.NumericScale.HasValue) + { + builder.Append("]"); + } + + builder.AppendLine(); + } + + var actual = builder.ToString(); + return actual; + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class BuiltInDataTypesLibRedFixture : BuiltInDataTypesFixtureBase + { + public override bool StrictEquality => true; + + public override bool SupportsAnsi => false; + + public override bool SupportsUnicodeToAnsiConversion => true; + + public override bool SupportsLargeStringComparisons => true; + + public override bool SupportsDecimalComparisons => true; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override bool ShouldLogCategory(string logCategory) + => logCategory == DbLoggerCategory.Query.Name; + + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity( + b => + { + b.HasKey(e => e.Int); + b.Property(e => e.Int).ValueGeneratedNever(); + }); + + modelBuilder.Entity( + b => + { + b.HasKey(e => e.Int); + b.Property(e => e.Int).ValueGeneratedNever(); + }); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity() + .Property(e => e.Id) + .ValueGeneratedNever(); + + modelBuilder.Entity() + .Property(e => e.Id) + .ValueGeneratedNever(); + + modelBuilder.Entity() + .Property(e => e.Id) + .ValueGeneratedNever(); + + MakeRequired(modelBuilder); + MakeRequired(modelBuilder); + + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + } + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + var options = base.AddOptions(builder).ConfigureWarnings( + c => c + .Log(JetEventId.DecimalTypeDefaultWarning)); + + new LibRedDbContextOptionsBuilder(options).MinBatchSize(1); + + return options; + } + + public override bool SupportsBinaryKeys => true; + + public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind { get; } + + public override int LongStringLength => 255; + + public override string ReallyLargeString + => string.Join("", Enumerable.Repeat("testphrase", 25)); + } + + [Flags] + protected enum StringEnum16 : short + { + Value1 = 1, + Value2 = 2, + Value4 = 4 + } + + [Flags] + protected enum StringEnumU16 : ushort + { + Value1 = 1, + Value2 = 2, + Value4 = 4 + } + + protected class MappedDataTypes + { + [Column(TypeName = "int")] + public int Int { get; set; } + + [Column(TypeName = "bigint")] + public long LongAsBigInt { get; set; } + + [Column(TypeName = "smallint")] + public short ShortAsSmallint { get; set; } + + [Column(TypeName = "tinyint")] + public byte ByteAsTinyint { get; set; } + + [Column(TypeName = "int")] + public uint UintAsInt { get; set; } + + [Column(TypeName = "bigint")] + public ulong UlongAsBigint { get; set; } + + [Column(TypeName = "smallint")] + public ushort UShortAsSmallint { get; set; } + + [Column(TypeName = "tinyint")] + public sbyte SByteAsTinyint { get; set; } + + [Column(TypeName = "bit")] + public bool BoolAsBit { get; set; } + + [Column(TypeName = "money")] + public decimal DecimalAsMoney { get; set; } + + /*[Column(TypeName = "smallmoney")] + public decimal DecimalAsSmallmoney { get; set; }*/ + + [Column(TypeName = "float")] + public double DoubleAsFloat { get; set; } + + [Column(TypeName = "real")] + public float FloatAsReal { get; set; } + + [Column(TypeName = "double precision")] + public double DoubleAsDoublePrecision { get; set; } + + [Column(TypeName = "date")] + public DateOnly DateOnlyAsDate { get; set; } + + [Column(TypeName = "date")] + public DateTime DateTimeAsDate { get; set; } + + /*[Column(TypeName = "datetimeoffset")] + public DateTimeOffset DateTimeOffsetAsDatetimeoffset { get; set; } + + [Column(TypeName = "datetime2")] + public DateTime DateTimeAsDatetime2 { get; set; } + + [Column(TypeName = "smalldatetime")] + public DateTime DateTimeAsSmalldatetime { get; set; }*/ + + [Column(TypeName = "datetime")] + public DateTime DateTimeAsDatetime { get; set; } + + [Column(TypeName = "time")] + public TimeOnly TimeOnlyAsTime { get; set; } + + [Column(TypeName = "time")] + public TimeSpan TimeSpanAsTime { get; set; } + + [Column(TypeName = "varchar(255)")] + public string StringAsVarcharMax { get; set; } + + [Column(TypeName = "char varying(255)")] + public string StringAsCharVaryingMax { get; set; } + + [Column(TypeName = "character varying(255)")] + public string StringAsCharacterVaryingMax { get; set; } + + [Column(TypeName = "nvarchar(255)")] + public string StringAsNvarcharMax { get; set; } + + [Column(TypeName = "national char varying(255)")] + public string StringAsNationalCharVaryingMax { get; set; } + + [Column(TypeName = "national character varying(255)")] + public string StringAsNationalCharacterVaryingMax { get; set; } + + [Column(TypeName = "varchar(255)")] + [Unicode] + public string StringAsVarcharMaxUtf8 { get; set; } + + [Column(TypeName = "char varying(255)")] + [Unicode] + public string StringAsCharVaryingMaxUtf8 { get; set; } + + [Column(TypeName = "character varying(255)")] + [Unicode] + public string StringAsCharacterVaryingMaxUtf8 { get; set; } + + [Column(TypeName = "text")] + public string StringAsText { get; set; } + + [Column(TypeName = "ntext")] + public string StringAsNtext { get; set; } + + [Column(TypeName = "varbinary(510)")] + public byte[] BytesAsVarbinaryMax { get; set; } + + [Column(TypeName = "binary varying(510)")] + public byte[] BytesAsBinaryVaryingMax { get; set; } + + [Column(TypeName = "image")] + public byte[] BytesAsImage { get; set; } + + [Column(TypeName = "decimal")] + public decimal Decimal { get; set; } + + [Column(TypeName = "dec")] + public decimal DecimalAsDec { get; set; } + + [Column(TypeName = "numeric")] + public decimal DecimalAsNumeric { get; set; } + + [Column(TypeName = "uniqueidentifier")] + public Guid GuidAsUniqueidentifier { get; set; } + + [Column(TypeName = "bigint")] + public uint UintAsBigint { get; set; } + + [Column(TypeName = "decimal(20,0)")] + public ulong UlongAsDecimal200 { get; set; } + + [Column(TypeName = "int")] + public ushort UShortAsInt { get; set; } + + [Column(TypeName = "smallint")] + public sbyte SByteAsSmallint { get; set; } + + [Column(TypeName = "varchar")] + public char CharAsVarchar { get; set; } + + [Column(TypeName = "char varying(1)")] + public char CharAsAsCharVarying { get; set; } + + [Column(TypeName = "character varying(255)")] + public char CharAsCharacterVaryingMax { get; set; } + + [Column(TypeName = "nvarchar")] + public char CharAsNvarchar { get; set; } + + [Column(TypeName = "national char varying(1)")] + public char CharAsNationalCharVarying { get; set; } + + [Column(TypeName = "national character varying(255)")] + public char CharAsNationalCharacterVaryingMax { get; set; } + + [Column(TypeName = "text")] + public char CharAsText { get; set; } + + [Column(TypeName = "ntext")] + public char CharAsNtext { get; set; } + + [Column(TypeName = "int")] + public char CharAsInt { get; set; } + + [Column(TypeName = "varchar(255)")] + public StringEnum16 EnumAsVarcharMax { get; set; } + + [Column(TypeName = "nvarchar(20)")] + public StringEnumU16 EnumAsNvarchar20 { get; set; } + } + + protected class MappedSizedDataTypes + { + public int Id { get; set; } + + [Column(TypeName = "char(3)")] + public string StringAsChar3 { get; set; } + + [Column(TypeName = "character(3)")] + public string StringAsCharacter3 { get; set; } + + [Column(TypeName = "varchar(3)")] + public string StringAsVarchar3 { get; set; } + + [Column(TypeName = "char varying(3)")] + public string StringAsCharVarying3 { get; set; } + + [Column(TypeName = "character varying(3)")] + public string StringAsCharacterVarying3 { get; set; } + + [Column(TypeName = "nchar(3)")] + public string StringAsNchar3 { get; set; } + + [Column(TypeName = "national character(3)")] + public string StringAsNationalCharacter3 { get; set; } + + [Column(TypeName = "nvarchar(3)")] + public string StringAsNvarchar3 { get; set; } + + [Column(TypeName = "national char varying(3)")] + public string StringAsNationalCharVarying3 { get; set; } + + [Column(TypeName = "national character varying(3)")] + public string StringAsNationalCharacterVarying3 { get; set; } + + [Column(TypeName = "char(3)")] + [Unicode] + public string StringAsChar3Utf8 { get; set; } + + [Column(TypeName = "character(3)")] + [Unicode] + public string StringAsCharacter3Utf8 { get; set; } + + [Column(TypeName = "varchar(3)")] + [Unicode] + public string StringAsVarchar3Utf8 { get; set; } + + [Column(TypeName = "char varying(3)")] + [Unicode] + public string StringAsCharVarying3Utf8 { get; set; } + + [Column(TypeName = "character varying(3)")] + [Unicode] + public string StringAsCharacterVarying3Utf8 { get; set; } + + [Column(TypeName = "binary(3)")] + public byte[] BytesAsBinary3 { get; set; } + + [Column(TypeName = "varbinary(3)")] + public byte[] BytesAsVarbinary3 { get; set; } + + [Column(TypeName = "binary varying(3)")] + public byte[] BytesAsBinaryVarying3 { get; set; } + + [Column(TypeName = "varchar(3)")] + public char? CharAsVarchar3 { get; set; } + + [Column(TypeName = "char varying(3)")] + public char? CharAsAsCharVarying3 { get; set; } + + [Column(TypeName = "character varying(3)")] + public char? CharAsCharacterVarying3 { get; set; } + + [Column(TypeName = "nvarchar(3)")] + public char? CharAsNvarchar3 { get; set; } + + [Column(TypeName = "national char varying(3)")] + public char? CharAsNationalCharVarying3 { get; set; } + + [Column(TypeName = "national character varying(3)")] + public char? CharAsNationalCharacterVarying3 { get; set; } + } + + protected class MappedSizedSeparatelyDataTypes + { + public int Id { get; set; } + + [Column(TypeName = "char")] + public string StringAsChar3 { get; set; } + + [Column(TypeName = "character")] + public string StringAsCharacter3 { get; set; } + + [Column(TypeName = "varchar")] + public string StringAsVarchar3 { get; set; } + + [Column(TypeName = "char varying")] + public string StringAsCharVarying3 { get; set; } + + [Column(TypeName = "character varying")] + public string StringAsCharacterVarying3 { get; set; } + + [Column(TypeName = "nchar")] + public string StringAsNchar3 { get; set; } + + [Column(TypeName = "national character")] + public string StringAsNationalCharacter3 { get; set; } + + [Column(TypeName = "nvarchar")] + public string StringAsNvarchar3 { get; set; } + + [Column(TypeName = "national char varying")] + public string StringAsNationalCharVarying3 { get; set; } + + [Column(TypeName = "national character varying")] + public string StringAsNationalCharacterVarying3 { get; set; } + + [Column(TypeName = "char")] + public string StringAsChar3Utf8 { get; set; } + + [Column(TypeName = "character")] + public string StringAsCharacter3Utf8 { get; set; } + + [Column(TypeName = "varchar")] + public string StringAsVarchar3Utf8 { get; set; } + + [Column(TypeName = "char varying")] + public string StringAsCharVarying3Utf8 { get; set; } + + [Column(TypeName = "character varying")] + public string StringAsCharacterVarying3Utf8 { get; set; } + + [Column(TypeName = "binary")] + public byte[] BytesAsBinary3 { get; set; } + + [Column(TypeName = "varbinary")] + public byte[] BytesAsVarbinary3 { get; set; } + + [Column(TypeName = "binary varying")] + public byte[] BytesAsBinaryVarying3 { get; set; } + + [Column(TypeName = "varchar")] + public char? CharAsVarchar3 { get; set; } + + [Column(TypeName = "char varying")] + public char? CharAsAsCharVarying3 { get; set; } + + [Column(TypeName = "character varying")] + public char? CharAsCharacterVarying3 { get; set; } + + [Column(TypeName = "nvarchar")] + public char? CharAsNvarchar3 { get; set; } + + [Column(TypeName = "national char varying")] + public char? CharAsNationalCharVarying3 { get; set; } + + [Column(TypeName = "national character varying")] + public char? CharAsNationalCharacterVarying3 { get; set; } + } + + protected class MappedScaledDataTypes + { + public int Id { get; set; } + + [Column(TypeName = "float(3)")] + [Precision(5)] + public float FloatAsFloat3 { get; set; } + + [Column(TypeName = "double precision(3)")] + public float FloatAsDoublePrecision3 { get; set; } + + [Column(TypeName = "float(25)")] + [Precision(5)] + public float FloatAsFloat25 { get; set; } + + [Column(TypeName = "double precision(25)")] + public float FloatAsDoublePrecision25 { get; set; } + + /*[Column(TypeName = "datetimeoffset(3)")] + [Precision(5)] + public DateTimeOffset DateTimeOffsetAsDatetimeoffset3 { get; set; } + + [Column(TypeName = "datetime2(3)")] + [Precision(5)] + public DateTime DateTimeAsDatetime23 { get; set; }*/ + + [Column(TypeName = "decimal(3)")] + [Precision(5)] + public decimal DecimalAsDecimal3 { get; set; } + + [Column(TypeName = "dec(3)")] + public decimal DecimalAsDec3 { get; set; } + + [Column(TypeName = "numeric(3)")] + [Precision(5)] + public decimal DecimalAsNumeric3 { get; set; } + + [Column(TypeName = "time(3)")] + public TimeOnly TimeOnlyAsTime3 { get; set; } + + [Column(TypeName = "time(3)")] + public TimeSpan TimeSpanAsTime3 { get; set; } + } + + protected class MappedScaledSeparatelyDataTypes + { + public int Id { get; set; } + + [Column(TypeName = "float")] + public float FloatAsFloat3 { get; set; } + + [Column(TypeName = "double precision")] + public float FloatAsDoublePrecision3 { get; set; } + + [Column(TypeName = "float")] + public float FloatAsFloat25 { get; set; } + + [Column(TypeName = "double precision")] + public float FloatAsDoublePrecision25 { get; set; } + + /*[Column(TypeName = "datetimeoffset")] + public DateTimeOffset DateTimeOffsetAsDatetimeoffset3 { get; set; } + + [Column(TypeName = "datetime2")] + public DateTime DateTimeAsDatetime23 { get; set; }*/ + + [Column(TypeName = "decimal")] + public decimal DecimalAsDecimal3 { get; set; } + + [Column(TypeName = "dec")] + public decimal DecimalAsDec3 { get; set; } + + [Column(TypeName = "numeric")] + public decimal DecimalAsNumeric3 { get; set; } + + [Column(TypeName = "time(3)")] + public TimeOnly TimeOnlyAsTime3 { get; set; } + + [Column(TypeName = "time(3)")] + public TimeSpan TimeSpanAsTime3 { get; set; } + } + + protected class DoubleDataTypes + { + public int Id { get; set; } + + public double Double3 { get; set; } + public double Double25 { get; set; } + } + + protected class MappedPrecisionAndScaledDataTypes + { + public int Id { get; set; } + + [Column(TypeName = "decimal(5,2)")] + [Precision(7, 3)] + public decimal DecimalAsDecimal52 { get; set; } + + [Column(TypeName = "dec(5,2)")] + public decimal DecimalAsDec52 { get; set; } + + [Column(TypeName = "numeric(5,2)")] + public decimal DecimalAsNumeric52 { get; set; } + } + + protected class MappedPrecisionAndScaledSeparatelyDataTypes + { + public int Id { get; set; } + + [Column(TypeName = "decimal")] + public decimal DecimalAsDecimal52 { get; set; } + + [Column(TypeName = "dec")] + public decimal DecimalAsDec52 { get; set; } + + [Column(TypeName = "numeric")] + public decimal DecimalAsNumeric52 { get; set; } + } + + protected class MappedNullableDataTypes + { + [Column(TypeName = "int")] + public int? Int { get; set; } + + [Column(TypeName = "bigint")] + public long? LongAsBigint { get; set; } + + [Column(TypeName = "smallint")] + public short? ShortAsSmallint { get; set; } + + [Column(TypeName = "tinyint")] + public byte? ByteAsTinyint { get; set; } + + [Column(TypeName = "int")] + public uint? UintAsInt { get; set; } + + [Column(TypeName = "bigint")] + public ulong? UlongAsBigint { get; set; } + + [Column(TypeName = "smallint")] + public ushort? UShortAsSmallint { get; set; } + + [Column(TypeName = "tinyint")] + public sbyte? SbyteAsTinyint { get; set; } + + [Column(TypeName = "bit")] + public bool? BoolAsBit { get; set; } + + [Column(TypeName = "money")] + public decimal? DecimalAsMoney { get; set; } + + /*[Column(TypeName = "smallmoney")] + public decimal? DecimalAsSmallmoney { get; set; }*/ + + [Column(TypeName = "float")] + public double? DoubleAsFloat { get; set; } + + [Column(TypeName = "real")] + public float? FloatAsReal { get; set; } + + [Column(TypeName = "double precision")] + public double? DoubleAsDoublePrecision { get; set; } + + [Column(TypeName = "date")] + public DateOnly? DateOnlyAsDate { get; set; } + + [Column(TypeName = "date")] + public DateTime? DateTimeAsDate { get; set; } + + /*[Column(TypeName = "datetimeoffset")] + public DateTimeOffset? DateTimeOffsetAsDatetimeoffset { get; set; } + + [Column(TypeName = "datetime2")] + public DateTime? DateTimeAsDatetime2 { get; set; } + + [Column(TypeName = "smalldatetime")] + public DateTime? DateTimeAsSmalldatetime { get; set; }*/ + + [Column(TypeName = "datetime")] + public DateTime? DateTimeAsDatetime { get; set; } + + [Column(TypeName = "time")] + public TimeOnly? TimeOnlyAsTime { get; set; } + + [Column(TypeName = "time")] + public TimeSpan? TimeSpanAsTime { get; set; } + + [Column(TypeName = "varchar(255)")] + public string StringAsVarcharMax { get; set; } + + [Column(TypeName = "char varying(255)")] + public string StringAsCharVaryingMax { get; set; } + + [Column(TypeName = "character varying(255)")] + public string StringAsCharacterVaryingMax { get; set; } + + [Column(TypeName = "nvarchar(255)")] + public string StringAsNvarcharMax { get; set; } + + [Column(TypeName = "national char varying(255)")] + [MaxLength(100)] + public string StringAsNationalCharVaryingMax { get; set; } + + [Column(TypeName = "national character varying(255)")] + [StringLength(100)] + public string StringAsNationalCharacterVaryingMax { get; set; } + + [Column(TypeName = "varchar(255)")] + [Unicode] + public string StringAsVarcharMaxUtf8 { get; set; } + + [Column(TypeName = "char varying(255)")] + [Unicode] + public string StringAsCharVaryingMaxUtf8 { get; set; } + + [Column(TypeName = "character varying(255)")] + [Unicode] + public string StringAsCharacterVaryingMaxUtf8 { get; set; } + + [Column(TypeName = "text")] + public string StringAsText { get; set; } + + [Column(TypeName = "ntext")] + public string StringAsNtext { get; set; } + + [Column(TypeName = "varbinary(510)")] + public byte[] BytesAsVarbinaryMax { get; set; } + + [Column(TypeName = "binary varying(510)")] + public byte[] BytesAsBinaryVaryingMax { get; set; } + + [Column(TypeName = "image")] + public byte[] BytesAsImage { get; set; } + + [Column(TypeName = "decimal")] + public decimal? Decimal { get; set; } + + [Column(TypeName = "dec")] + public decimal? DecimalAsDec { get; set; } + + [Column(TypeName = "numeric")] + public decimal? DecimalAsNumeric { get; set; } + + [Column(TypeName = "uniqueidentifier")] + public Guid? GuidAsUniqueidentifier { get; set; } + + [Column(TypeName = "bigint")] + public uint? UintAsBigint { get; set; } + + [Column(TypeName = "decimal(20,0)")] + public ulong? UlongAsDecimal200 { get; set; } + + [Column(TypeName = "int")] + public ushort? UShortAsInt { get; set; } + + [Column(TypeName = "smallint")] + public sbyte? SByteAsSmallint { get; set; } + + [Column(TypeName = "varchar(1)")] + public char? CharAsVarchar { get; set; } + + [Column(TypeName = "char varying")] + public char? CharAsAsCharVarying { get; set; } + + [Column(TypeName = "character varying(255)")] + public char? CharAsCharacterVaryingMax { get; set; } + + [Column(TypeName = "nvarchar")] + public char? CharAsNvarchar { get; set; } + + [Column(TypeName = "national char varying(1)")] + public char? CharAsNationalCharVarying { get; set; } + + [Column(TypeName = "national character varying(255)")] + public char? CharAsNationalCharacterVaryingMax { get; set; } + + [Column(TypeName = "text")] + public char? CharAsText { get; set; } + + [Column(TypeName = "ntext")] + public char? CharAsNtext { get; set; } + + [Column(TypeName = "int")] + public char? CharAsInt { get; set; } + + [Column(TypeName = "varchar(255)")] + public StringEnum16? EnumAsVarcharMax { get; set; } + + [Column(TypeName = "nvarchar(20)")] + public StringEnumU16? EnumAsNvarchar20 { get; set; } + } + + protected class MappedDataTypesWithIdentity + { + public int Id { get; set; } + + [Column(TypeName = "int")] + public int Int { get; set; } + + [Column(TypeName = "bigint")] + public long LongAsBigint { get; set; } + + [Column(TypeName = "smallint")] + public short ShortAsSmallint { get; set; } + + [Column(TypeName = "tinyint")] + public byte ByteAsTinyint { get; set; } + + [Column(TypeName = "int")] + public uint UintAsInt { get; set; } + + [Column(TypeName = "bigint")] + public ulong UlongAsBigint { get; set; } + + [Column(TypeName = "smallint")] + public ushort UShortAsSmallint { get; set; } + + [Column(TypeName = "tinyint")] + public sbyte SbyteAsTinyint { get; set; } + + [Column(TypeName = "bit")] + public bool BoolAsBit { get; set; } + + [Column(TypeName = "money")] + public decimal DecimalAsMoney { get; set; } + + /*[Column(TypeName = "smallmoney")] + public decimal DecimalAsSmallmoney { get; set; }*/ + + [Column(TypeName = "float")] + public double DoubleAsFloat { get; set; } + + [Column(TypeName = "real")] + public float FloatAsReal { get; set; } + + [Column(TypeName = "double precision")] + public double DoubleAsDoublePrecision { get; set; } + + [Column(TypeName = "date")] + public DateOnly DateOnlyAsDate { get; set; } + + [Column(TypeName = "date")] + public DateTime DateTimeAsDate { get; set; } + + /*[Column(TypeName = "datetimeoffset")] + public DateTimeOffset DateTimeOffsetAsDatetimeoffset { get; set; } + + [Column(TypeName = "datetime2")] + public DateTime DateTimeAsDatetime2 { get; set; } + + [Column(TypeName = "smalldatetime")] + public DateTime DateTimeAsSmalldatetime { get; set; }*/ + + [Column(TypeName = "datetime")] + public DateTime DateTimeAsDatetime { get; set; } + + [Column(TypeName = "time")] + public TimeOnly TimeOnlyAsTime { get; set; } + + [Column(TypeName = "time")] + public TimeSpan TimeSpanAsTime { get; set; } + + [Column(TypeName = "varchar(255)")] + public string StringAsVarcharMax { get; set; } + + [Column(TypeName = "char varying(255)")] + public string StringAsCharVaryingMax { get; set; } + + [Column(TypeName = "character varying(255)")] + public string StringAsCharacterVaryingMax { get; set; } + + [Column(TypeName = "nvarchar(255)")] + public string StringAsNvarcharMax { get; set; } + + [Column(TypeName = "national char varying(255)")] + public string StringAsNationalCharVaryingMax { get; set; } + + [Column(TypeName = "national character varying(255)")] + public string StringAsNationalCharacterVaryingMax { get; set; } + + [Column(TypeName = "varchar(255)")] + [Unicode] + public string StringAsVarcharMaxUtf8 { get; set; } + + [Column(TypeName = "char varying(255)")] + [Unicode] + public string StringAsCharVaryingMaxUtf8 { get; set; } + + [Column(TypeName = "character varying(255)")] + [Unicode] + public string StringAsCharacterVaryingMaxUtf8 { get; set; } + + [Column(TypeName = "text")] + public string StringAsText { get; set; } + + [Column(TypeName = "ntext")] + public string StringAsNtext { get; set; } + + [Column(TypeName = "varbinary(255)")] + public byte[] BytesAsVarbinaryMax { get; set; } + + [Column(TypeName = "binary varying(255)")] + public byte[] BytesAsBinaryVaryingMax { get; set; } + + [Column(TypeName = "image")] + public byte[] BytesAsImage { get; set; } + + [Column(TypeName = "decimal")] + public decimal Decimal { get; set; } + + [Column(TypeName = "dec")] + public decimal DecimalAsDec { get; set; } + + [Column(TypeName = "numeric")] + public decimal DecimalAsNumeric { get; set; } + + [Column(TypeName = "uniqueidentifier")] + public Guid GuidAsUniqueidentifier { get; set; } + + [Column(TypeName = "bigint")] + public uint UintAsBigint { get; set; } + + [Column(TypeName = "decimal(20,0)")] + public ulong UlongAsDecimal200 { get; set; } + + [Column(TypeName = "int")] + public ushort UShortAsInt { get; set; } + + [Column(TypeName = "smallint")] + public sbyte SByteAsSmallint { get; set; } + + [Column(TypeName = "varchar(1)")] + public char CharAsVarchar { get; set; } + + [Column(TypeName = "char varying")] + public char CharAsAsCharVarying { get; set; } + + [Column(TypeName = "character varying(255)")] + public char CharAsCharacterVaryingMax { get; set; } + + [Column(TypeName = "nvarchar")] + public char CharAsNvarchar { get; set; } + + [Column(TypeName = "national char varying(1)")] + public char CharAsNationalCharVarying { get; set; } + + [Column(TypeName = "national character varying(255)")] + public char CharAsNationalCharacterVaryingMax { get; set; } + + [Column(TypeName = "text")] + public char CharAsText { get; set; } + + [Column(TypeName = "ntext")] + public char CharAsNtext { get; set; } + + [Column(TypeName = "int")] + public char CharAsInt { get; set; } + + [Column(TypeName = "varchar(255)")] + public StringEnum16 EnumAsVarcharMax { get; set; } + + [Column(TypeName = "nvarchar(20)")] + public StringEnumU16 EnumAsNvarchar20 { get; set; } + } + + protected class MappedSizedDataTypesWithIdentity + { + public int Id { get; set; } + public int Int { get; set; } + + [Column(TypeName = "char(3)")] + public string StringAsChar3 { get; set; } + + [Column(TypeName = "character(3)")] + public string StringAsCharacter3 { get; set; } + + [Column(TypeName = "varchar(3)")] + public string StringAsVarchar3 { get; set; } + + [Column(TypeName = "char varying(3)")] + public string StringAsCharVarying3 { get; set; } + + [Column(TypeName = "character varying(3)")] + public string StringAsCharacterVarying3 { get; set; } + + [Column(TypeName = "nchar(3)")] + public string StringAsNchar3 { get; set; } + + [Column(TypeName = "national character(3)")] + public string StringAsNationalCharacter3 { get; set; } + + [Column(TypeName = "nvarchar(3)")] + public string StringAsNvarchar3 { get; set; } + + [Column(TypeName = "national char varying(3)")] + public string StringAsNationalCharVarying3 { get; set; } + + [Column(TypeName = "national character varying(3)")] + public string StringAsNationalCharacterVarying3 { get; set; } + + [Column(TypeName = "char(3)")] + [Unicode] + public string StringAsChar3Utf8 { get; set; } + + [Column(TypeName = "character(3)")] + [Unicode] + public string StringAsCharacter3Utf8 { get; set; } + + [Column(TypeName = "varchar(3)")] + [Unicode] + public string StringAsVarchar3Utf8 { get; set; } + + [Column(TypeName = "char varying(3)")] + [Unicode] + public string StringAsCharVarying3Utf8 { get; set; } + + [Column(TypeName = "character varying(3)")] + [Unicode] + public string StringAsCharacterVarying3Utf8 { get; set; } + + [Column(TypeName = "binary(3)")] + public byte[] BytesAsBinary3 { get; set; } + + [Column(TypeName = "varbinary(3)")] + public byte[] BytesAsVarbinary3 { get; set; } + + [Column(TypeName = "binary varying(3)")] + public byte[] BytesAsBinaryVarying3 { get; set; } + + [Column(TypeName = "varchar(3)")] + public char? CharAsVarchar3 { get; set; } + + [Column(TypeName = "char varying(3)")] + public char? CharAsAsCharVarying3 { get; set; } + + [Column(TypeName = "character varying(3)")] + public char? CharAsCharacterVarying3 { get; set; } + + [Column(TypeName = "nvarchar(3)")] + public char? CharAsNvarchar3 { get; set; } + + [Column(TypeName = "national char varying(3)")] + public char? CharAsNationalCharVarying3 { get; set; } + + [Column(TypeName = "national character varying(3)")] + public char? CharAsNationalCharacterVarying3 { get; set; } + } + + protected class MappedScaledDataTypesWithIdentity + { + public int Id { get; set; } + public int Int { get; set; } + + [Column(TypeName = "float(3)")] + public float FloatAsFloat3 { get; set; } + + [Column(TypeName = "double precision(3)")] + public float FloatAsDoublePrecision3 { get; set; } + + [Column(TypeName = "float(25)")] + public float FloatAsFloat25 { get; set; } + + [Column(TypeName = "double precision(25)")] + public float FloatAsDoublePrecision25 { get; set; } + + /*[Column(TypeName = "datetimeoffset(3)")] + public DateTimeOffset DateTimeOffsetAsDatetimeoffset3 { get; set; } + + [Column(TypeName = "datetime2(3)")] + public DateTime DateTimeAsDatetime23 { get; set; }*/ + + [Column(TypeName = "decimal(3)")] + public decimal DecimalAsDecimal3 { get; set; } + + [Column(TypeName = "dec(3)")] + public decimal DecimalAsDec3 { get; set; } + + [Column(TypeName = "numeric(3)")] + public decimal DecimalAsNumeric3 { get; set; } + + [Column(TypeName = "time(3)")] + public TimeOnly TimeOnlyAsTime3 { get; set; } + + [Column(TypeName = "time(3)")] + public TimeSpan TimeSpanAsTime3 { get; set; } + } + + protected class MappedPrecisionAndScaledDataTypesWithIdentity + { + public int Id { get; set; } + public int Int { get; set; } + + [Column(TypeName = "decimal(5,2)")] + public decimal DecimalAsDecimal52 { get; set; } + + [Column(TypeName = "dec(5,2)")] + [Precision(7, 3)] + public decimal DecimalAsDec52 { get; set; } + + [Column(TypeName = "numeric(5,2)")] + public decimal DecimalAsNumeric52 { get; set; } + } + + protected class MappedNullableDataTypesWithIdentity + { + public int Id { get; set; } + + [Column(TypeName = "int")] + public int? Int { get; set; } + + [Column(TypeName = "bigint")] + public long? LongAsBigint { get; set; } + + [Column(TypeName = "smallint")] + public short? ShortAsSmallint { get; set; } + + [Column(TypeName = "tinyint")] + public byte? ByteAsTinyint { get; set; } + + [Column(TypeName = "int")] + public uint? UintAsInt { get; set; } + + [Column(TypeName = "bigint")] + public ulong? UlongAsBigint { get; set; } + + [Column(TypeName = "smallint")] + public ushort? UshortAsSmallint { get; set; } + + [Column(TypeName = "tinyint")] + public sbyte? SbyteAsTinyint { get; set; } + + [Column(TypeName = "bit")] + public bool? BoolAsBit { get; set; } + + [Column(TypeName = "money")] + public decimal? DecimalAsMoney { get; set; } + + /*[Column(TypeName = "smallmoney")] + public decimal? DecimalAsSmallmoney { get; set; }*/ + + [Column(TypeName = "float")] + public double? DoubleAsFloat { get; set; } + + [Column(TypeName = "real")] + public float? FloatAsReal { get; set; } + + [Column(TypeName = "double precision")] + public double? DoubleAsDoublePrecision { get; set; } + + [Column(TypeName = "date")] + public DateOnly? DateOnlyAsDate { get; set; } + + [Column(TypeName = "date")] + public DateTime? DateTimeAsDate { get; set; } + + /*[Column(TypeName = "datetimeoffset")] + public DateTimeOffset? DateTimeOffsetAsDatetimeoffset { get; set; } + + [Column(TypeName = "datetime2")] + public DateTime? DateTimeAsDatetime2 { get; set; } + + [Column(TypeName = "smalldatetime")] + public DateTime? DateTimeAsSmalldatetime { get; set; }*/ + + [Column(TypeName = "datetime")] + public DateTime? DateTimeAsDatetime { get; set; } + + [Column(TypeName = "time")] + public TimeOnly? TimeOnlyAsTime { get; set; } + + [Column(TypeName = "time")] + public TimeSpan? TimeSpanAsTime { get; set; } + + [Column(TypeName = "varchar(255)")] + public string StringAsVarcharMax { get; set; } + + [Column(TypeName = "char varying(255)")] + public string StringAsCharVaryingMax { get; set; } + + [Column(TypeName = "character varying(255)")] + public string StringAsCharacterVaryingMax { get; set; } + + [Column(TypeName = "nvarchar(255)")] + public string StringAsNvarcharMax { get; set; } + + [Column(TypeName = "national char varying(255)")] + public string StringAsNationalCharVaryingMax { get; set; } + + [Column(TypeName = "national character varying(255)")] + public string StringAsNationalCharacterVaryingMax { get; set; } + + [Column(TypeName = "varchar(255)")] + [Unicode] + public string StringAsVarcharMaxUtf8 { get; set; } + + [Column(TypeName = "char varying(255)")] + [Unicode] + public string StringAsCharVaryingMaxUtf8 { get; set; } + + [Column(TypeName = "character varying(255)")] + [Unicode] + public string StringAsCharacterVaryingMaxUtf8 { get; set; } + + [Column(TypeName = "text")] + public string StringAsText { get; set; } + + [Column(TypeName = "ntext")] + public string StringAsNtext { get; set; } + + [Column(TypeName = "varbinary(510)")] + public byte[] BytesAsVarbinaryMax { get; set; } + + [Column(TypeName = "binary varying(510)")] + public byte[] BytesAsVaryingMax { get; set; } + + [Column(TypeName = "image")] + public byte[] BytesAsImage { get; set; } + + [Column(TypeName = "decimal")] + public decimal? Decimal { get; set; } + + [Column(TypeName = "dec")] + public decimal? DecimalAsDec { get; set; } + + [Column(TypeName = "numeric")] + public decimal? DecimalAsNumeric { get; set; } + + [Column(TypeName = "uniqueidentifier")] + public Guid? GuidAsUniqueidentifier { get; set; } + + [Column(TypeName = "bigint")] + public uint? UintAsBigint { get; set; } + + [Column(TypeName = "decimal(20,0)")] + public ulong? UlongAsDecimal200 { get; set; } + + [Column(TypeName = "int")] + public ushort? UShortAsInt { get; set; } + + [Column(TypeName = "smallint")] + public sbyte? SByteAsSmallint { get; set; } + + [Column(TypeName = "varchar")] + public char? CharAsVarchar { get; set; } + + [Column(TypeName = "char varying(1)")] + public char? CharAsAsCharVarying { get; set; } + + [Column(TypeName = "character varying(255)")] + public char? CharAsCharacterVaryingMax { get; set; } + + [Column(TypeName = "nvarchar(1)")] + public char? CharAsNvarchar { get; set; } + + [Column(TypeName = "national char varying")] + public char? CharAsNationalCharVarying { get; set; } + + [Column(TypeName = "national character varying(255)")] + public char? CharAsNationalCharacterVaryingMax { get; set; } + + [Column(TypeName = "text")] + public char? CharAsText { get; set; } + + [Column(TypeName = "ntext")] + public char? CharAsNtext { get; set; } + + [Column(TypeName = "int")] + public char? CharAsInt { get; set; } + + [Column(TypeName = "varchar(255)")] + public StringEnum16? EnumAsVarcharMax { get; set; } + + [Column(TypeName = "nvarchar(20)")] + public StringEnumU16? EnumAsNvarchar20 { get; set; } + } + + public class ColumnInfo + { + public string TableName { get; set; } + public string ColumnName { get; set; } + public string DataType { get; set; } + public bool? IsNullable { get; set; } + public int? MaxLength { get; set; } + public int? NumericPrecision { get; set; } + public int? NumericScale { get; set; } + public int? DateTimePrecision { get; set; } + } + + public override async Task Can_insert_and_read_back_all_non_nullable_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new BuiltInDataTypes + { + Id = 1, + PartitionId = 1, + TestInt16 = -1234, + TestInt32 = -123456789, + TestInt64 = -1234567890123456789L, + TestDouble = -1.23456789, + TestDecimal = -1234567890.01M, + TestDateTime = DateTime.Parse("01/01/2000 12:34:56", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal), + TestDateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TestTimeSpan = new TimeSpan(0, 10, 9, 8, 0), + TestDateOnly = new DateOnly(2020, 3, 1), + TestTimeOnly = new TimeOnly(12, 30, 45, 0), + TestSingle = -1.234F, + TestBoolean = true, + TestByte = 255, + TestUnsignedInt16 = 1234, + TestUnsignedInt32 = 1234565789U, + TestUnsignedInt64 = 1234567890123456789UL, + TestCharacter = 'a', + TestSignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(e => e.Id == 1).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(BuiltInDataTypes)); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.TestInt16); + AssertEqualIfMapped(entityType, -123456789, () => dt.TestInt32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.TestInt64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.TestDouble); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.TestDecimal); + AssertEqualIfMapped( + entityType, DateTime.Parse("01/01/2000 12:34:56", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal), + () => dt.TestDateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.TestDateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TestTimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.TestDateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TestTimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.TestSingle); + AssertEqualIfMapped(entityType, true, () => dt.TestBoolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.TestByte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.TestUnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.TestUnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.TestUnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.TestCharacter); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.TestSignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null() + { + using (var context = CreateContext()) + { + context.Set().Add( + new BuiltInNullableDataTypes + { + Id = 101, + PartitionId = 101, + TestString = "TestString", + TestByteArray = [10, 9, 8, 7, 6], + TestNullableInt16 = -1234, + TestNullableInt32 = -123456789, + TestNullableInt64 = -1234567890123456789L, + TestNullableDouble = -1.23456789, + TestNullableDecimal = -1234567890.01M, + TestNullableDateTime = DateTime.Parse("01/01/2000 12:34:56").ToUniversalTime(), + TestNullableDateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TestNullableDateOnly = new DateOnly(2020, 3, 1), + TestNullableTimeOnly = new TimeOnly(12, 30, 45, 0), + TestNullableTimeSpan = new TimeSpan(0, 10, 9, 8, 0), + TestNullableSingle = -1.234F, + TestNullableBoolean = false, + TestNullableByte = 255, + TestNullableUnsignedInt16 = 1234, + TestNullableUnsignedInt32 = 1234565789U, + TestNullableUnsignedInt64 = 1234567890123456789UL, + TestNullableCharacter = 'a', + TestNullableSignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(BuiltInNullableDataTypes)); + AssertEqualIfMapped(entityType, "TestString", () => dt.TestString); + AssertEqualIfMapped(entityType, [10, 9, 8, 7, 6], () => dt.TestByteArray); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.TestNullableInt16); + AssertEqualIfMapped(entityType, -123456789, () => dt.TestNullableInt32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.TestNullableInt64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.TestNullableDouble); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.TestNullableDecimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56").ToUniversalTime(), () => dt.TestNullableDateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.TestNullableDateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TestNullableTimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.TestNullableDateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TestNullableTimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.TestNullableSingle); + AssertEqualIfMapped(entityType, false, () => dt.TestNullableBoolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.TestNullableByte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.TestNullableUnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.TestNullableUnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.TestNullableUnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.TestNullableCharacter); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.TestNullableSignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_object_backed_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new ObjectBackedDataTypes + { + Id = 101, + PartitionId = 101, + String = "TestString", + Bytes = [10, 9, 8, 7, 6], + Int16 = -1234, + Int32 = -123456789, + Int64 = -1234567890123456789L, + Double = -1.23456789, + Decimal = -1234567890.01M, + DateTime = DateTime.Parse("01/01/2000 12:34:56"), + DateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TimeSpan = new TimeSpan(0, 10, 9, 8, 0), + DateOnly = new DateOnly(2020, 3, 1), + TimeOnly = new TimeOnly(12, 30, 45, 0), + Single = -1.234F, + Boolean = false, + Byte = 255, + UnsignedInt16 = 1234, + UnsignedInt32 = 1234565789U, + UnsignedInt64 = 1234567890123456789UL, + Character = 'a', + SignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(ObjectBackedDataTypes)); + AssertEqualIfMapped(entityType, "TestString", () => dt.String); + AssertEqualIfMapped(entityType, [10, 9, 8, 7, 6], () => dt.Bytes); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.Int16); + AssertEqualIfMapped(entityType, -123456789, () => dt.Int32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.Double); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.Decimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.DateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.DateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.DateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.Single); + AssertEqualIfMapped(entityType, false, () => dt.Boolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.Byte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.UnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.UnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.UnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.Character); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.SignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_nullable_backed_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new NullableBackedDataTypes + { + Id = 101, + PartitionId = 101, + Int16 = -1234, + Int32 = -123456789, + Int64 = -1234567890123456789L, + Double = -1.23456789, + Decimal = -1234567890.01M, + DateTime = DateTime.Parse("01/01/2000 12:34:56"), + DateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TimeSpan = new TimeSpan(0, 10, 9, 8, 0), + DateOnly = new DateOnly(2020, 3, 1), + TimeOnly = new TimeOnly(12, 30, 45, 0), + Single = -1.234F, + Boolean = false, + Byte = 255, + UnsignedInt16 = 1234, + UnsignedInt32 = 1234565789U, + UnsignedInt64 = 1234567890123456789UL, + Character = 'a', + SignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(NullableBackedDataTypes)); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.Int16); + AssertEqualIfMapped(entityType, -123456789, () => dt.Int32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.Double); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.Decimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.DateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.DateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.DateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.Single); + AssertEqualIfMapped(entityType, false, () => dt.Boolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.Byte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.UnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.UnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.UnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.Character); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.SignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_non_nullable_backed_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new NonNullableBackedDataTypes + { + Id = 101, + PartitionId = 101, + Int16 = -1234, + Int32 = -123456789, + Int64 = -1234567890123456789L, + Double = -1.23456789, + Decimal = -1234567890.01M, + DateTime = DateTime.Parse("01/01/2000 12:34:56"), + DateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TimeSpan = new TimeSpan(0, 10, 9, 8, 0), + DateOnly = new DateOnly(2020, 3, 1), + TimeOnly = new TimeOnly(12, 30, 45, 0), + Single = -1.234F, + Boolean = true, + Byte = 255, + UnsignedInt16 = 1234, + UnsignedInt32 = 1234565789U, + UnsignedInt64 = 1234567890123456789UL, + Character = 'a', + SignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(NonNullableBackedDataTypes)); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.Int16); + AssertEqualIfMapped(entityType, -123456789, () => dt.Int32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.Double); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.Decimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.DateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.DateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.DateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.Single); + AssertEqualIfMapped(entityType, true, () => dt.Boolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.Byte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.UnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.UnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.UnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.Character); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.SignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_query_using_any_data_type() + { + using var context = CreateContext(); + var source = AddTestBuiltInDataTypes(context.Set()); + + Assert.Equal(1, await context.SaveChangesAsync()); + + QueryBuiltInDataTypesTest(source); + } + + public override async Task Can_query_using_any_data_type_shadow() + { + using var context = CreateContext(); + var source = AddTestBuiltInDataTypes(context.Set()); + + Assert.Equal(1, await context.SaveChangesAsync()); + + QueryBuiltInDataTypesTest(source); + } + + private void QueryBuiltInDataTypesTest(EntityEntry source) + where TEntity : BuiltInDataTypesBase + { + using var context = CreateContext(); + var set = context.Set(); + var entity = set.Where(e => e.Id == 11).ToList().Single(); + var entityType = context.Model.FindEntityType(typeof(TEntity)); + + var param1 = (short)-1234; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestInt16)) == param1).ToList().Single()); + + var param2 = -123456789; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestInt32)) == param2).ToList().Single()); + + var param3 = -1234567890123456789L; + if (Fixture.IntegerPrecision == 64) + { + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestInt64)) == param3).ToList().Single()); + } + + double? param4 = -1.23456789; + if (Fixture.StrictEquality) + { + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInDataTypes.TestDouble)) == param4).ToList().Single()); + } + else if (Fixture.SupportsDecimalComparisons) + { + double? param4l = -1.234567891; + double? param4h = -1.234567889; + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && (EF.Property(e, nameof(BuiltInDataTypes.TestDouble)) == param4 + || (EF.Property(e, nameof(BuiltInDataTypes.TestDouble)) > param4l + && EF.Property(e, nameof(BuiltInDataTypes.TestDouble)) < param4h))) + .ToList().Single()); + } + + var param5 = -1234567890.01M; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestDecimal)) == param5).ToList() + .Single()); + + var param6 = Fixture.DefaultDateTime; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestDateTime)) == param6).ToList() + .Single()); + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestDateTimeOffset)) != null) + { + var param7 = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(0.0)); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestDateTimeOffset)) == param7) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestTimeSpan)) != null) + { + var param8 = new TimeSpan(0, 10, 9, 8, 7); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestTimeSpan)) == param8).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestDateOnly)) != null) + { + var param9 = new DateOnly(2020, 3, 1); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestDateOnly)) == param9).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestTimeOnly)) != null) + { + var param10 = new TimeOnly(12, 30, 45, 0); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestTimeOnly)) == param10).ToList() + .Single()); + } + + var param11 = -1.234F; + if (Fixture.StrictEquality) + { + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInDataTypes.TestSingle)) == param11).ToList().Single()); + } + else if (Fixture.SupportsDecimalComparisons) + { + var param11l = -1.2341F; + var param11h = -1.2339F; + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && (EF.Property(e, nameof(BuiltInDataTypes.TestSingle)) == param11 + || (EF.Property(e, nameof(BuiltInDataTypes.TestSingle)) > param11l + && EF.Property(e, nameof(BuiltInDataTypes.TestSingle)) < param11h))).ToList().Single()); + } + + var param12 = true; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestBoolean)) == param12).ToList().Single()); + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestByte)) != null) + { + var param13 = (byte)255; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestByte)) == param13).ToList().Single()); + } + + var param14 = Enum64.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum64)) == param14).ToList().Single()); + + var param15 = Enum32.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum32)) == param15).ToList().Single()); + + var param16 = Enum16.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum16)) == param16).ToList().Single()); + + if (entityType.FindProperty(nameof(BuiltInDataTypes.Enum8)) != null) + { + var param17 = Enum8.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum8)) == param17).ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestUnsignedInt16)) != null) + { + var param18 = (ushort)1234; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestUnsignedInt16)) == param18).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestUnsignedInt32)) != null) + { + var param19 = 1234565789U; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestUnsignedInt32)) == param19).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestUnsignedInt64)) != null) + { + var param20 = 1234567890123456789UL; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestUnsignedInt64)) == param20).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestCharacter)) != null) + { + var param21 = 'a'; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestCharacter)) == param21).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestSignedByte)) != null) + { + var param22 = (sbyte)-128; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestSignedByte)) == param22).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.EnumU64)) != null) + { + var param23 = EnumU64.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.EnumU64)) == param23).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.EnumU32)) != null) + { + var param24 = EnumU32.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.EnumU32)) == param24).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.EnumU16)) != null) + { + var param25 = EnumU16.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.EnumU16)) == param25).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.EnumS8)) != null) + { + var param26 = EnumS8.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.EnumS8)) == param26).ToList().Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInDataTypes.Enum64))?.GetProviderClrType()) == typeof(long)) + { + var param27 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum64)) == (Enum64)param27).ToList() + .Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInDataTypes.Enum64)) == param27).ToList() + .Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInDataTypes.Enum32))?.GetProviderClrType()) == typeof(int)) + { + var param28 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum32)) == (Enum32)param28).ToList() + .Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInDataTypes.Enum32)) == param28).ToList() + .Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInDataTypes.Enum16))?.GetProviderClrType()) == typeof(short)) + { + var param29 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum16)) == (Enum16)param29).ToList() + .Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInDataTypes.Enum16)) == param29).ToList() + .Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInDataTypes.Enum8))?.GetProviderClrType()) == typeof(byte)) + { + var param30 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum8)) == (Enum8)param30).ToList() + .Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInDataTypes.Enum8)) == param30).ToList() + .Single()); + } + + foreach (var propertyEntry in context.Entry(entity).Properties) + { + if (propertyEntry.Metadata.ValueGenerated != ValueGenerated.Never) + { + continue; + } + + // Normalize the expected value to what Jet/ACE can actually store before comparing: it has no + // sub-second precision and no time-zone offset, so a temporal seed carrying milliseconds or an + // offset can't round-trip. The provider genuinely can't preserve those (same as EFCore.Jet); + // fixing it on the expected side is the honest assertion. + Assert.Equal(NormalizeExpectedTemporal(source.Property(propertyEntry.Metadata).CurrentValue), propertyEntry.CurrentValue); + } + } + + // Reduce a temporal expected value to Jet/ACE's storage resolution: whole seconds, no offset — so a seed + // carrying milliseconds or a time-zone offset compares against what actually round-trips through the file. + private static object NormalizeExpectedTemporal(object value) + { + static long Sec(long ticks) => ticks - ticks % TimeSpan.TicksPerSecond; + return value switch + { + DateTimeOffset dto => new DateTimeOffset(new DateTime(Sec(dto.DateTime.Ticks)), TimeSpan.Zero), + DateTime dt => new DateTime(Sec(dt.Ticks), dt.Kind), + TimeSpan ts => new TimeSpan(Sec(ts.Ticks)), + TimeOnly to => new TimeOnly(Sec(to.Ticks)), + _ => value, + }; + } + + protected new EntityEntry AddTestBuiltInDataTypes(DbSet set) + where TEntity : BuiltInDataTypesBase, new() + { + var entityEntry = set.Add( + new TEntity { Id = 11 }); + + entityEntry.CurrentValues.SetValues( + new BuiltInDataTypes + { + Id = 11, + PartitionId = 1, + TestInt16 = -1234, + TestInt32 = -123456789, + TestInt64 = -1234567890123456789L, + TestDouble = -1.23456789, + TestDecimal = -1234567890.01M, + TestDateTime = Fixture.DefaultDateTime, + TestDateTimeOffset = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(-8.0)), + TestTimeSpan = new TimeSpan(0, 10, 9, 8, 7), + TestDateOnly = new DateOnly(2020, 3, 1), + TestTimeOnly = new TimeOnly(12, 30, 45, 0), + TestSingle = -1.234F, + TestBoolean = true, + TestByte = 255, + TestUnsignedInt16 = 1234, + TestUnsignedInt32 = 1234565789U, + TestUnsignedInt64 = 1234567890123456789UL, + TestCharacter = 'a', + TestSignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + return entityEntry; + } + + public override async Task Can_query_using_any_nullable_data_type() + { + using var context = CreateContext(); + var source = AddTestBuiltInNullableDataTypes(context.Set()); + + Assert.Equal(1, await context.SaveChangesAsync()); + + QueryBuiltInNullableDataTypesTest(source); + } + + public override async Task Can_query_using_any_data_type_nullable_shadow() + { + using var context = CreateContext(); + var source = AddTestBuiltInNullableDataTypes(context.Set()); + + Assert.Equal(1, await context.SaveChangesAsync()); + + QueryBuiltInNullableDataTypesTest(source); + } + + private void QueryBuiltInNullableDataTypesTest(EntityEntry source) + where TEntity : BuiltInNullableDataTypesBase + { + using var context = CreateContext(); + var set = context.Set(); + var entity = set.Where(e => e.Id == 11).ToList().Single(); + var entityType = context.Model.FindEntityType(typeof(TEntity)); + + short? param1 = -1234; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableInt16)) == param1) + .ToList().Single()); + + int? param2 = -123456789; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableInt32)) == param2) + .ToList().Single()); + + long? param3 = -1234567890123456789L; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableInt64)) == param3) + .ToList().Single()); + + double? param4 = -1.23456789; + if (Fixture.StrictEquality) + { + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDouble)) == param4).ToList() + .Single()); + } + else if (Fixture.SupportsDecimalComparisons) + { + double? param4l = -1.234567891; + double? param4h = -1.234567889; + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && (EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDouble)) == param4 + || (EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDouble)) > param4l + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDouble)) < param4h))) + .ToList().Single()); + } + + decimal? param5 = -1234567890.01M; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDecimal)) == param5) + .ToList().Single()); + + DateTime? param6 = Fixture.DefaultDateTime; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDateTime)) == param6) + .ToList().Single()); + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableDateTimeOffset)) != null) + { + DateTimeOffset? param7 = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(-8.0)); + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDateTimeOffset)) + == param7).ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableTimeSpan)) != null) + { + TimeSpan? param8 = new TimeSpan(0, 10, 9, 8, 7); + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableTimeSpan)) + == param8) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableDateOnly)) != null) + { + DateOnly? param9 = new DateOnly(2020, 3, 1); + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDateOnly)) + == param9) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableTimeOnly)) != null) + { + TimeOnly? param10 = new TimeOnly(12, 30, 45, 0); + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableTimeOnly)) + == param10) + .ToList().Single()); + } + + float? param11 = -1.234F; + if (Fixture.StrictEquality) + { + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSingle)) == param11).ToList() + .Single()); + } + else if (Fixture.SupportsDecimalComparisons) + { + float? param11l = -1.2341F; + float? param11h = -1.2339F; + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && (EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSingle)) == param11 + || (EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSingle)) > param11l + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSingle)) < param11h))) + .ToList().Single()); + } + + bool? param12 = true; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableBoolean)) == param12) + .ToList().Single()); + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableByte)) != null) + { + byte? param13 = 255; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableByte)) == param13) + .ToList().Single()); + } + + Enum64? param14 = Enum64.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum64)) == param14).ToList() + .Single()); + + Enum32? param15 = Enum32.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum32)) == param15).ToList() + .Single()); + + Enum16? param16 = Enum16.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum16)) == param16).ToList() + .Single()); + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum8)) != null) + { + Enum8? param17 = Enum8.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum8)) == param17).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt16)) != null) + { + ushort? param18 = 1234; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt16)) + == param18).ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt32)) != null) + { + uint? param19 = 1234565789U; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt32)) + == param19) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt64)) != null) + { + ulong? param20 = 1234567890123456789UL; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property( + e, nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt64)) + == param20).ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableCharacter)) != null) + { + char? param21 = 'a'; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableCharacter)) == param21) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableSignedByte)) != null) + { + sbyte? param22 = -128; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSignedByte)) + == param22) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumU64)) != null) + { + var param23 = EnumU64.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.EnumU64)) == param23).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumU32)) != null) + { + var param24 = EnumU32.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.EnumU32)) == param24).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumU16)) != null) + { + var param25 = EnumU16.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.EnumU16)) == param25).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumS8)) != null) + { + var param26 = EnumS8.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.EnumS8)) == param26).ToList() + .Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum64))?.GetProviderClrType()) + == typeof(long)) + { + int? param27 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum64)) == (Enum64)param27) + .ToList().Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInNullableDataTypes.Enum64)) == param27) + .ToList().Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum32))?.GetProviderClrType()) + == typeof(int)) + { + int? param28 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum32)) == (Enum32)param28) + .ToList().Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInNullableDataTypes.Enum32)) == param28) + .ToList().Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum16))?.GetProviderClrType()) + == typeof(short)) + { + int? param29 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum16)) == (Enum16)param29) + .ToList().Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInNullableDataTypes.Enum16)) == param29) + .ToList().Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum8))?.GetProviderClrType()) + == typeof(byte)) + { + int? param30 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum8)) == (Enum8)param30) + .ToList().Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInNullableDataTypes.Enum8)) == param30) + .ToList().Single()); + } + + foreach (var propertyEntry in context.Entry(entity).Properties) + { + if (propertyEntry.Metadata.ValueGenerated != ValueGenerated.Never) + { + continue; + } + + // See QueryBuiltInDataTypesTest: normalize the expected temporal to Jet/ACE's storage resolution + // (whole seconds, no offset) before comparing — a null CurrentValue passes through unchanged. + var expected = source.Property(propertyEntry.Metadata).CurrentValue; + Assert.Equal(expected is null ? null : NormalizeExpectedTemporal(expected), propertyEntry.CurrentValue); + } + } + + protected new virtual EntityEntry AddTestBuiltInNullableDataTypes(DbSet set) + where TEntity : BuiltInNullableDataTypesBase, new() + { + var entityEntry = set.Add( + new TEntity { Id = 11 }); + + entityEntry.CurrentValues.SetValues( + new BuiltInNullableDataTypes + { + Id = 11, + PartitionId = 1, + TestNullableInt16 = -1234, + TestNullableInt32 = -123456789, + TestNullableInt64 = -1234567890123456789L, + TestNullableDouble = -1.23456789, + TestNullableDecimal = -1234567890.01M, + TestNullableDateTime = Fixture.DefaultDateTime, + TestNullableDateTimeOffset = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(-8.0)), + TestNullableTimeSpan = new TimeSpan(0, 10, 9, 8, 7), + TestNullableDateOnly = new DateOnly(2020, 3, 1), + TestNullableTimeOnly = new TimeOnly(12, 30, 45, 0), + TestNullableSingle = -1.234F, + TestNullableBoolean = true, + TestNullableByte = 255, + TestNullableUnsignedInt16 = 1234, + TestNullableUnsignedInt32 = 1234565789U, + TestNullableUnsignedInt64 = 1234567890123456789UL, + TestNullableCharacter = 'a', + TestNullableSignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + return entityEntry; + } + + + + private void AssertEqualIfMapped(IEntityType entityType, T expected, Expression> actualExpression) + { + if (entityType.FindProperty(((MemberExpression)actualExpression.Body).Member.Name) != null) + { + var actual = actualExpression.Compile()(); + var type = UnwrapNullableEnumType(typeof(T)); + if (IsSignedInteger(type)) + { + Assert.True(Equal(Convert.ToInt64(expected), Convert.ToInt64(actual)), $"Expected:\t{expected}\r\nActual:\t{actual}"); + } + else if (IsUnsignedInteger(type)) + { + Assert.True(Equal(Convert.ToUInt64(expected), Convert.ToUInt64(actual)), $"Expected:\t{expected}\r\nActual:\t{actual}"); + } + else if (type == typeof(DateTime)) + { + Assert.True( + Equal((DateTime)(object)expected, (DateTime)(object)actual), $"Expected:\t{expected:O}\r\nActual:\t{actual:O}"); + } + else if (type == typeof(DateTimeOffset)) + { + Assert.True( + Equal((DateTimeOffset)(object)expected, (DateTimeOffset)(object)actual), + $"Expected:\t{expected:O}\r\nActual:\t{actual:O}"); + } + else + { + Assert.Equal(expected, actual); + } + } + } + + private bool Equal(long left, long right) + { + if (left >= 0 + && right >= 0) + { + return Equal((ulong)left, (ulong)right); + } + + if (left < 0 + && right < 0) + { + return Equal((ulong)-left, (ulong)-right); + } + + return false; + } + + private bool Equal(ulong left, ulong right) + { + if (Fixture.IntegerPrecision < 64) + { + var largestPrecise = 1ul << Fixture.IntegerPrecision; + while (left > largestPrecise) + { + left >>= 1; + right >>= 1; + } + } + + return left == right; + } + + private bool Equal(DateTime left, DateTime right) + => left.Equals(right) && (!Fixture.PreservesDateTimeKind || left.Kind == right.Kind); + + private bool Equal(DateTimeOffset left, DateTimeOffset right) + => left.EqualsExact(right); + + private static Type UnwrapNullableType(Type type) + => type == null ? null : Nullable.GetUnderlyingType(type) ?? type; + + private static bool IsSignedInteger(Type type) + => type == typeof(int) + || type == typeof(long) + || type == typeof(short) + || type == typeof(sbyte); + + private static bool IsUnsignedInteger(Type type) + => type == typeof(byte) + || type == typeof(uint) + || type == typeof(ulong) + || type == typeof(ushort) + || type == typeof(char); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesLibRedTest.cs new file mode 100644 index 00000000..331dc931 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesLibRedTest.cs @@ -0,0 +1,239 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class NonSharedModelBulkUpdatesLibRedTest(NonSharedFixture fixture) : NonSharedModelBulkUpdatesRelationalTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Delete_aggregate_root_when_eager_loaded_owned_collection(bool async) + { + await base.Delete_aggregate_root_when_eager_loaded_owned_collection(async); + + AssertSql( +""" +DELETE FROM `Owner` AS `o` +"""); + } + + public override async Task Delete_with_owned_collection_and_non_natively_translatable_query(bool async) + { + await base.Delete_with_owned_collection_and_non_natively_translatable_query(async); + + AssertSql( + """ +@__p_0='1' + +DELETE FROM [o] +FROM [Owner] AS [o] +WHERE [o].[Id] IN ( + SELECT [o0].[Id] + FROM [Owner] AS [o0] + ORDER BY [o0].[Title] + OFFSET @__p_0 ROWS +) +"""); + } + + public override async Task Delete_aggregate_root_when_table_sharing_with_owned(bool async) + { + await base.Delete_aggregate_root_when_table_sharing_with_owned(async); + + AssertSql( +""" +DELETE FROM `Owner` AS `o` +"""); + } + + public override async Task Delete_aggregate_root_when_table_sharing_with_non_owned_throws(bool async) + { + await base.Delete_aggregate_root_when_table_sharing_with_non_owned_throws(async); + + AssertSql(); + } + + public override async Task Replace_ColumnExpression_in_column_setter(bool async) + { + await base.Replace_ColumnExpression_in_column_setter(async); + + AssertSql( + """ +@p='SomeValue' (Size = 255) + +UPDATE `Owner` AS `o` +INNER JOIN `OwnedCollection` AS `o0` ON `o`.`Id` = `o0`.`OwnerId` +SET `o0`.`Value` = @p +"""); + } + + public override async Task Update_non_owned_property_on_entity_with_owned(bool async) + { + await base.Update_non_owned_property_on_entity_with_owned(async); + + AssertSql( + """ +@p='SomeValue' (Size = 255) + +UPDATE `Owner` AS `o` +SET `o`.`Title` = @p +"""); + } + + public override async Task Update_non_owned_property_on_entity_with_owned2(bool async) + { + await base.Update_non_owned_property_on_entity_with_owned2(async); + + AssertSql( +""" +UPDATE `Owner` AS `o` +SET `o`.`Title` = IIF(`o`.`Title` IS NULL, '', `o`.`Title`) & '_Suffix' +"""); + } + + public override async Task Update_non_owned_property_on_entity_with_owned_in_join(bool async) + { + await base.Update_non_owned_property_on_entity_with_owned_in_join(async); + + AssertSql( + """ +@p='NewValue' (Size = 255) + +UPDATE `Owner` AS `o` +INNER JOIN `Owner` AS `o0` ON `o`.`Id` = `o0`.`Id` +SET `o`.`Title` = @p +"""); + } + + public override async Task Update_owned_and_non_owned_properties_with_table_sharing(bool async) + { + await base.Update_owned_and_non_owned_properties_with_table_sharing(async); + + AssertSql( + """ +UPDATE `Owner` AS `o` +SET `o`.`Title` = IIF((`o`.`OwnedReference_Number` & '') IS NULL, '', (`o`.`OwnedReference_Number` & '')), + `o`.`OwnedReference_Number` = IIF(LEN(`o`.`Title`) IS NULL, NULL, CLNG(LEN(`o`.`Title`))) +"""); + } + + public override async Task Update_main_table_in_entity_with_entity_splitting(bool async) + { + await base.Update_main_table_in_entity_with_entity_splitting(async); + + AssertSql( + """ +UPDATE `Blogs` AS `b` +SET `b`.`CreationTimestamp` = #2020-01-01# +"""); + } + + public override async Task Update_non_main_table_in_entity_with_entity_splitting(bool async) + { + await base.Update_non_main_table_in_entity_with_entity_splitting(async); + + AssertSql( + """ +UPDATE `Blogs` AS `b` +INNER JOIN `BlogsPart1` AS `b0` ON `b`.`Id` = `b0`.`Id` +SET `b0`.`Title` = (`b0`.`Rating` & ''), + `b0`.`Rating` = IIF(LEN(`b0`.`Title`) IS NULL, NULL, CLNG(LEN(`b0`.`Title`))) +"""); + } + + public override async Task Delete_entity_with_auto_include(bool async) + { + await base.Delete_entity_with_auto_include(async); + + AssertSql( + """ +DELETE FROM `Context30572_Principal` AS `c` +WHERE `c`.`Id` IN ( + SELECT `c0`.`Id` + FROM `Context30572_Principal` AS `c0` + LEFT JOIN `Context30572_Dependent` AS `c1` ON `c0`.`DependentId` = `c1`.`Id` +) +"""); + } + + public override async Task Delete_predicate_based_on_optional_navigation(bool async) + { + await base.Delete_predicate_based_on_optional_navigation(async); + + AssertSql( + """ +DELETE FROM `Posts` AS `p` +WHERE `p`.`Id` IN ( + SELECT `p0`.`Id` + FROM `Posts` AS `p0` + LEFT JOIN `Blogs` AS `b` ON `p0`.`BlogId` = `b`.`Id` + WHERE `b`.`Title` LIKE 'Arthur%' +) +"""); + } + + public override async Task Update_with_alias_uniquification_in_setter_subquery(bool async) + { + await base.Update_with_alias_uniquification_in_setter_subquery(async); + + AssertSql( + """ +UPDATE `Orders` AS `o` +SET `o`.`Total` = ( + SELECT IIF(SUM(`o0`.`Amount`) IS NULL, 0, SUM(`o0`.`Amount`)) + FROM `OrderProduct` AS `o0` + WHERE `o`.`Id` = `o0`.`OrderId`) +WHERE `o`.`Id` = 1 +"""); + } + + public override async Task Delete_with_view_mapping(bool async) + { + await base.Delete_with_view_mapping(async); + + AssertSql( + """ +DELETE FROM `Blogs` AS `b` +"""); + } + + public override async Task Update_with_view_mapping(bool async) + { + await base.Update_with_view_mapping(async); +AssertSql( + """ +@p='Updated' (Size = 255) + +UPDATE `Blogs` AS `b` +SET `b`.`Data` = @p +"""); + } + + public override async Task Update_complex_type_with_view_mapping(bool async) + { + await base.Update_complex_type_with_view_mapping(async); + + // #34706 + AssertSql(); + } + + private void AssertSql(params string[] expected) + => TestSqlLoggerFactory.AssertBaseline(expected); + + private void AssertExecuteUpdateSql(params string[] expected) + => TestSqlLoggerFactory.AssertBaseline(expected, forUpdate: true); +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesLibRedFixture.cs new file mode 100644 index 00000000..a3f2a62e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesLibRedFixture.cs @@ -0,0 +1,32 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using EntityFrameworkCore.LibRed.FunctionalTests.TestModels.Northwind; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class NorthwindBulkUpdatesLibRedFixture : NorthwindBulkUpdatesRelationalFixture + where TModelCustomizer : ITestModelCustomizer, new() +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedNorthwindTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity() + .Property(p => p.UnitPrice) + .HasColumnType("money"); + } + + protected override Type ContextType + => typeof(NorthwindLibRedContext); +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesLibRedTest.cs new file mode 100644 index 00000000..3da37c2b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesLibRedTest.cs @@ -0,0 +1,1729 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class NorthwindBulkUpdatesLibRedTest( + NorthwindBulkUpdatesLibRedFixture fixture, + ITestOutputHelper testOutputHelper) : NorthwindBulkUpdatesRelationalTestBase>(fixture, testOutputHelper) +{ + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Delete_Where_TagWith(bool async) + { + await base.Delete_Where_TagWith(async); + + AssertSql( + """ +-- MyDelete + +DELETE FROM `Order Details` AS `o` +WHERE `o`.`OrderID` < 10300 +"""); + } + + public override async Task Delete_Where(bool async) + { + await base.Delete_Where(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE `o`.`OrderID` < 10300 +"""); + } + + public override async Task Delete_Where_parameter(bool async) + { + await base.Delete_Where_parameter(async); + + AssertSql( + """ +@quantity='1' (Nullable = true) (DbType = Int16) + +DELETE FROM `Order Details` AS `o` +WHERE `o`.`Quantity` = @quantity +""", + // + """ +DELETE FROM `Order Details` AS `o` +WHERE FALSE +"""); + } + + public override async Task Delete_Where_OrderBy(bool async) + { + await base.Delete_Where_OrderBy(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + WHERE `o0`.`OrderID` < 10300 AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Where_OrderBy_Skip(bool async) + { + await base.Delete_Where_OrderBy_Skip(async); + + AssertSql( +""" +@__p_0='100' + +DELETE FROM [o] +FROM [Order Details] AS [o] +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] + FROM [Order Details] AS [o0] + WHERE [o0].[OrderID] < 10300 + ORDER BY [o0].[OrderID] + OFFSET @__p_0 ROWS + ) AS [t] + WHERE [t].[OrderID] = [o].[OrderID] AND [t].[ProductID] = [o].[ProductID]) +"""); + } + + public override async Task Delete_Where_OrderBy_Take(bool async) + { + await base.Delete_Where_OrderBy_Take(async); + + AssertSql( + """ +@p='100' + +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT TOP @p `o0`.`OrderID`, `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o0`.`OrderID` < 10300 + ORDER BY `o0`.`OrderID` + ) AS `o1` + WHERE `o1`.`OrderID` = `o`.`OrderID` AND `o1`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Where_OrderBy_Skip_Take(bool async) + { + await base.Delete_Where_OrderBy_Skip_Take(async); + + AssertSql( +""" +@__p_0='100' + +DELETE FROM [o] +FROM [Order Details] AS [o] +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] + FROM [Order Details] AS [o0] + WHERE [o0].[OrderID] < 10300 + ORDER BY [o0].[OrderID] + OFFSET @__p_0 ROWS FETCH NEXT @__p_0 ROWS ONLY + ) AS [t] + WHERE [t].[OrderID] = [o].[OrderID] AND [t].[ProductID] = [o].[ProductID]) +"""); + } + + public override async Task Delete_Where_Skip(bool async) + { + await base.Delete_Where_Skip(async); + + AssertSql( +""" +@__p_0='100' + +DELETE FROM [o] +FROM [Order Details] AS [o] +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] + FROM [Order Details] AS [o0] + WHERE [o0].[OrderID] < 10300 + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS + ) AS [t] + WHERE [t].[OrderID] = [o].[OrderID] AND [t].[ProductID] = [o].[ProductID]) +"""); + } + + public override async Task Delete_Where_Take(bool async) + { + await base.Delete_Where_Take(async); + + AssertSql( + """ +@p='100' + +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT TOP @p `o0`.`OrderID`, `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o0`.`OrderID` < 10300 + ) AS `o1` + WHERE `o1`.`OrderID` = `o`.`OrderID` AND `o1`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Where_Skip_Take(bool async) + { + await base.Delete_Where_Skip_Take(async); + + AssertSql( +""" +@__p_0='100' + +DELETE FROM [o] +FROM [Order Details] AS [o] +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] + FROM [Order Details] AS [o0] + WHERE [o0].[OrderID] < 10300 + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS FETCH NEXT @__p_0 ROWS ONLY + ) AS [t] + WHERE [t].[OrderID] = [o].[OrderID] AND [t].[ProductID] = [o].[ProductID]) +"""); + } + + public override async Task Delete_Where_predicate_with_GroupBy_aggregate(bool async) + { + await base.Delete_Where_predicate_with_GroupBy_aggregate(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE `o`.`OrderID` < ( + SELECT TOP 1 ( + SELECT TOP 1 `o1`.`OrderID` + FROM `Orders` AS `o1` + WHERE `o0`.`CustomerID` = `o1`.`CustomerID` OR (`o0`.`CustomerID` IS NULL AND `o1`.`CustomerID` IS NULL)) + FROM `Orders` AS `o0` + GROUP BY `o0`.`CustomerID` + HAVING COUNT(*) > 11) +"""); + } + + public override async Task Delete_Where_predicate_with_GroupBy_aggregate_2(bool async) + { + await base.Delete_Where_predicate_with_GroupBy_aggregate_2(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o1`.`OrderID` IN ( + SELECT ( + SELECT TOP 1 `o3`.`OrderID` + FROM `Orders` AS `o3` + WHERE `o2`.`CustomerID` = `o3`.`CustomerID` OR (`o2`.`CustomerID` IS NULL AND `o3`.`CustomerID` IS NULL)) + FROM `Orders` AS `o2` + GROUP BY `o2`.`CustomerID` + HAVING COUNT(*) > 9 + ) AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_GroupBy_Where_Select(bool async) + { + await base.Delete_GroupBy_Where_Select(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_2(bool async) + { + await base.Delete_GroupBy_Where_Select_2(async); + + AssertSql(); + } + + public override async Task Delete_Where_Skip_Take_Skip_Take_causing_subquery(bool async) + { + await base.Delete_Where_Skip_Take_Skip_Take_causing_subquery(async); + + AssertSql( + """ +@p3='5' +@p2='20' +@p='100' + +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `o4`.`OrderID`, `o4`.`ProductID` + FROM ( + SELECT TOP @p3 `o3`.`OrderID`, `o3`.`ProductID` + FROM ( + SELECT TOP @p2 + @p3 `o0`.`OrderID`, `o0`.`ProductID` + FROM ( + SELECT `o6`.`OrderID`, `o6`.`ProductID` + FROM ( + SELECT TOP @p `o5`.`OrderID`, `o5`.`ProductID` + FROM ( + SELECT TOP @p + @p `o1`.`OrderID`, `o1`.`ProductID` + FROM `Order Details` AS `o1` + WHERE `o1`.`OrderID` < 10300 + ) AS `o5` + ) AS `o6` + ) AS `o0` + ) AS `o3` + ) AS `o4` + ) AS `o2` + WHERE `o2`.`OrderID` = `o`.`OrderID` AND `o2`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Where_Distinct(bool async) + { + await base.Delete_Where_Distinct(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE `o`.`OrderID` < 10300 +"""); + } + + public override async Task Delete_SelectMany(bool async) + { + await base.Delete_SelectMany(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + INNER JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o0`.`OrderID` < 10250 AND `o1`.`OrderID` = `o`.`OrderID` AND `o1`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_SelectMany_subquery(bool async) + { + await base.Delete_SelectMany_subquery(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + INNER JOIN ( + SELECT `o2`.`OrderID`, `o2`.`ProductID` + FROM `Order Details` AS `o2` + WHERE `o2`.`ProductID` > 0 + ) AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o0`.`OrderID` < 10250 AND `o1`.`OrderID` = `o`.`OrderID` AND `o1`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Where_using_navigation(bool async) + { + await base.Delete_Where_using_navigation(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE DATEPART('yyyy', `o1`.`OrderDate`) = 2000 AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Where_using_navigation_2(bool async) + { + await base.Delete_Where_using_navigation_2(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM (`Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o1`.`CustomerID` = `c`.`CustomerID` + WHERE (`c`.`CustomerID` LIKE 'F%') AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Union(bool async) + { + await base.Delete_Union(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Order Details` AS `o0` + WHERE `o0`.`OrderID` < 10250 + UNION + SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Order Details` AS `o1` + WHERE `o1`.`OrderID` > 11250 + ) AS `u` + WHERE `u`.`OrderID` = `o`.`OrderID` AND `u`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Concat(bool async) + { + await base.Delete_Concat(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `o0`.`OrderID`, `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o0`.`OrderID` < 10250 + UNION ALL + SELECT `o1`.`OrderID`, `o1`.`ProductID` + FROM `Order Details` AS `o1` + WHERE `o1`.`OrderID` > 11250 + ) AS `u` + WHERE `u`.`OrderID` = `o`.`OrderID` AND `u`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Intersect(bool async) + { + await base.Delete_Intersect(async); + + AssertSql( +""" +DELETE FROM [o] +FROM [Order Details] AS [o] +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] + FROM [Order Details] AS [o0] + WHERE [o0].[OrderID] < 10250 + INTERSECT + SELECT [o1].[OrderID], [o1].[ProductID], [o1].[Discount], [o1].[Quantity], [o1].[UnitPrice] + FROM [Order Details] AS [o1] + WHERE [o1].[OrderID] > 11250 + ) AS [t] + WHERE [t].[OrderID] = [o].[OrderID] AND [t].[ProductID] = [o].[ProductID]) +"""); + } + + public override async Task Delete_Except(bool async) + { + await base.Delete_Except(async); + + AssertSql( +""" +DELETE FROM [o] +FROM [Order Details] AS [o] +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] + FROM [Order Details] AS [o0] + WHERE [o0].[OrderID] < 10250 + EXCEPT + SELECT [o1].[OrderID], [o1].[ProductID], [o1].[Discount], [o1].[Quantity], [o1].[UnitPrice] + FROM [Order Details] AS [o1] + WHERE [o1].[OrderID] > 11250 + ) AS [t] + WHERE [t].[OrderID] = [o].[OrderID] AND [t].[ProductID] = [o].[ProductID]) +"""); + } + + public override async Task Delete_non_entity_projection(bool async) + { + await base.Delete_non_entity_projection(async); + + AssertSql(); + } + + public override async Task Delete_non_entity_projection_2(bool async) + { + await base.Delete_non_entity_projection_2(async); + + AssertSql(); + } + + public override async Task Delete_non_entity_projection_3(bool async) + { + await base.Delete_non_entity_projection_3(async); + + AssertSql(); + } + + public override async Task Delete_FromSql_converted_to_subquery(bool async) + { + await base.Delete_FromSql_converted_to_subquery(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `OrderID`, `ProductID`, `UnitPrice`, `Quantity`, `Discount` + FROM `Order Details` + WHERE `OrderID` < 10300 + ) AS `m` + WHERE `m`.`OrderID` = `o`.`OrderID` AND `m`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_Where_optional_navigation_predicate(bool async) + { + await base.Delete_Where_optional_navigation_predicate(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM (`Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o1`.`CustomerID` = `c`.`CustomerID` + WHERE (`c`.`City` LIKE 'Se%') AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_with_join(bool async) + { + await base.Delete_with_join(async); + + AssertSql( + """ +@p1='100' +@p='0' + +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + INNER JOIN ( + SELECT `o4`.`OrderID` + FROM ( + SELECT TOP @p1 `o3`.`OrderID` + FROM ( + SELECT TOP @p + @p1 `o2`.`OrderID` + FROM `Orders` AS `o2` + WHERE `o2`.`OrderID` < 10300 + ORDER BY `o2`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_with_LeftJoin(bool async) + { + await base.Delete_with_LeftJoin(async); + + AssertSql( + """ +@p1='100' +@p='0' + +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + LEFT JOIN ( + SELECT `o4`.`OrderID` + FROM ( + SELECT TOP @p1 `o3`.`OrderID` + FROM ( + SELECT TOP @p + @p1 `o2`.`OrderID` + FROM `Orders` AS `o2` + WHERE `o2`.`OrderID` < 10300 + ORDER BY `o2`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o0`.`OrderID` < 10276 AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_with_LeftJoin_via_flattened_GroupJoin(bool async) + { + await base.Delete_with_LeftJoin_via_flattened_GroupJoin(async); + + AssertSql( + """ +@p1='100' +@p='0' + +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + LEFT JOIN ( + SELECT `o4`.`OrderID` + FROM ( + SELECT TOP @p1 `o3`.`OrderID` + FROM ( + SELECT TOP @p + @p1 `o2`.`OrderID` + FROM `Orders` AS `o2` + WHERE `o2`.`OrderID` < 10300 + ORDER BY `o2`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o0`.`OrderID` < 10276 AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_with_cross_join(bool async) + { + await base.Delete_with_cross_join(async); + + AssertSql( + """ +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0`, + ( + SELECT 1 + FROM ( + SELECT TOP 100 `o3`.`OrderID` + FROM ( + SELECT TOP 0 + 100 `o2`.`OrderID` + FROM `Orders` AS `o2` + WHERE `o2`.`OrderID` < 10300 + ORDER BY `o2`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o1` + WHERE `o0`.`OrderID` < 10276 AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Delete_with_cross_apply(bool async) + { + await base.Delete_with_cross_apply(async); + + AssertSql( +""" +DELETE FROM [o] +FROM [Order Details] AS [o] +CROSS APPLY ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] < [o].[OrderID] + ORDER BY [o0].[OrderID] + OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY +) AS [t] +WHERE [o].[OrderID] < 10276 +"""); + } + + public override async Task Delete_with_outer_apply(bool async) + { + await base.Delete_with_outer_apply(async); + + AssertSql( +""" +DELETE FROM [o] +FROM [Order Details] AS [o] +OUTER APPLY ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] < [o].[OrderID] + ORDER BY [o0].[OrderID] + OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY +) AS [t] +WHERE [o].[OrderID] < 10276 +"""); + } + + public override async Task Delete_with_RightJoin(bool async) + { + await base.Delete_with_RightJoin(async); + + AssertSql( + """ +@p1='100' +@p='0' + +DELETE FROM `Order Details` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + RIGHT JOIN ( + SELECT `o4`.`OrderID` + FROM ( + SELECT TOP @p1 `o3`.`OrderID` + FROM ( + SELECT TOP @p + @p1 `o2`.`OrderID` + FROM `Orders` AS `o2` + WHERE `o2`.`OrderID` < 10300 + ORDER BY `o2`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o0`.`OrderID` < 10276 AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Update_Where_set_constant_TagWith(bool async) + { + await base.Update_Where_set_constant_TagWith(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +-- MyUpdate + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_constant(bool async) + { + await base.Update_Where_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_constant_via_lambda(bool async) + { + await base.Update_Where_set_constant_via_lambda(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = 'Updated' +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_nullable_int_constant_via_discard_lambda(bool async) + { + await base.Update_Where_set_nullable_int_constant_via_discard_lambda(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Products` AS `p` +SET `p`.`SupplierID` = 1 +WHERE `p`.`ProductID` < 5 +"""); + } + + public override async Task Update_Where_parameter_set_constant(bool async) + { + await base.Update_Where_parameter_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) +@customer='ALFKI' (Size = 5) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` = @customer +""", + // + """ +@customer='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customer +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +""", + // + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE FALSE +"""); + } + + public override async Task Update_Where_set_parameter(bool async) + { + await base.Update_Where_set_parameter(async); + + AssertExecuteUpdateSql( + """ +@p='Abc' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_parameter_from_closure_array(bool async) + { + await base.Update_Where_set_parameter_from_closure_array(async); + + AssertExecuteUpdateSql( + """ +@p='Abc' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_parameter_from_inline_list(bool async) + { + await base.Update_Where_set_parameter_from_inline_list(async); + + AssertExecuteUpdateSql( + """ +@p='Abc' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_parameter_from_multilevel_property_access(bool async) + { + await base.Update_Where_set_parameter_from_multilevel_property_access(async); + + AssertExecuteUpdateSql( + """ +@p='Abc' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_Skip_set_constant(bool async) + { + await base.Update_Where_Skip_set_constant(async); + + AssertExecuteUpdateSql( +""" +@__p_0='4' + +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +INNER JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE [c0].[CustomerID] LIKE N'F%' + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +"""); + } + + public override async Task Update_Where_Take_set_constant(bool async) + { + await base.Update_Where_Take_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='4' +@p1='Updated' (Size = 30) + +UPDATE `Customers` AS `c0` +INNER JOIN ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = @p1 +"""); + } + + public override async Task Update_Where_Skip_Take_set_constant(bool async) + { + await base.Update_Where_Skip_Take_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p1='4' +@p='2' +@p2='Updated' (Size = 30) + +UPDATE `Customers` AS `c0` +INNER JOIN ( + SELECT `c3`.`CustomerID` + FROM ( + SELECT TOP @p1 `c2`.`CustomerID` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' + ) AS `c2` + ) AS `c3` +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = @p2 +"""); + } + + public override async Task Update_Where_OrderBy_set_constant(bool async) + { + await base.Update_Where_OrderBy_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c0` +INNER JOIN ( + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = @p +"""); + } + + public override async Task Update_Where_OrderBy_Skip_set_constant(bool async) + { + await base.Update_Where_OrderBy_Skip_set_constant(async); + + AssertExecuteUpdateSql( +""" +@__p_0='4' + +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +INNER JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE [c0].[CustomerID] LIKE N'F%' + ORDER BY [c0].[City] + OFFSET @__p_0 ROWS +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +"""); + } + + public override async Task Update_Where_OrderBy_Take_set_constant(bool async) + { + await base.Update_Where_OrderBy_Take_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='4' +@p1='Updated' (Size = 30) + +UPDATE `Customers` AS `c0` +INNER JOIN ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`City` +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = @p1 +"""); + } + + public override async Task Update_Where_OrderBy_Skip_Take_set_constant(bool async) + { + await base.Update_Where_OrderBy_Skip_Take_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p1='4' +@p='2' +@p2='Updated' (Size = 30) + +UPDATE `Customers` AS `c0` +INNER JOIN ( + SELECT `c3`.`CustomerID` + FROM ( + SELECT TOP @p1 `c2`.`CustomerID`, `c2`.`City` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`City` + ) AS `c2` + ORDER BY `c2`.`City` DESC + ) AS `c3` + ORDER BY `c3`.`City` +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = @p2 +"""); + } + + public override async Task Update_Where_OrderBy_Skip_Take_Skip_Take_set_constant(bool async) + { + await base.Update_Where_OrderBy_Skip_Take_Skip_Take_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='2' +@p1='6' +@p4='Updated' (Size = 30) + +UPDATE `Customers` AS `c1` +INNER JOIN ( + SELECT `c4`.`CustomerID` + FROM ( + SELECT TOP @p `c3`.`CustomerID`, `c3`.`City` + FROM ( + SELECT TOP @p + @p `c0`.`CustomerID`, `c0`.`City` + FROM ( + SELECT TOP @p1 `c5`.`CustomerID`, `c5`.`City` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`City` + ) AS `c5` + ORDER BY `c5`.`City` DESC + ) AS `c0` + ORDER BY `c0`.`City` + ) AS `c3` + ORDER BY `c3`.`City` DESC + ) AS `c4` + ORDER BY `c4`.`City` +) AS `c2` ON `c1`.`CustomerID` = `c2`.`CustomerID` +SET `c1`.`ContactName` = @p4 +"""); + } + + public override async Task Update_Where_GroupBy_aggregate_set_constant(bool async) + { + await base.Update_Where_GroupBy_aggregate_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` = ( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 11) +"""); + } + + public override async Task Update_Where_GroupBy_First_set_constant(bool async) + { + await base.Update_Where_GroupBy_First_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` = ( + SELECT TOP 1 ( + SELECT TOP 1 `o0`.`CustomerID` + FROM `Orders` AS `o0` + WHERE `o`.`CustomerID` = `o0`.`CustomerID` OR (`o`.`CustomerID` IS NULL AND `o0`.`CustomerID` IS NULL)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 11) +"""); + } + + public override async Task Update_Where_GroupBy_First_set_constant_2(bool async) + { + await base.Update_Where_GroupBy_First_set_constant_2(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_Where_GroupBy_First_set_constant_3(bool async) + { + await base.Update_Where_GroupBy_First_set_constant_3(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` IN ( + SELECT ( + SELECT TOP 1 `c0`.`CustomerID` + FROM `Orders` AS `o0` + LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + WHERE `o`.`CustomerID` = `o0`.`CustomerID` OR (`o`.`CustomerID` IS NULL AND `o0`.`CustomerID` IS NULL)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 11 +) +"""); + } + + public override async Task Update_Where_Distinct_set_constant(bool async) + { + await base.Update_Where_Distinct_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c0` +INNER JOIN ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = @p +"""); + } + + public override async Task Update_Where_using_navigation_set_null(bool async) + { + await base.Update_Where_using_navigation_set_null(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +SET `o`.`OrderDate` = NULL +WHERE `c`.`City` = 'Seattle' +"""); + } + + public override async Task Update_Where_using_navigation_2_set_constant(bool async) + { + await base.Update_Where_using_navigation_2_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='1' + +UPDATE (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +SET `o`.`Quantity` = IIF(@p IS NULL, NULL, CINT(@p)) +WHERE `c`.`City` = 'Seattle' +"""); + } + + public override async Task Update_Where_SelectMany_set_null(bool async) + { + await base.Update_Where_SelectMany_set_null(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +SET `o`.`OrderDate` = NULL +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_property_plus_constant(bool async) + { + await base.Update_Where_set_property_plus_constant(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = IIF(`c`.`ContactName` IS NULL, '', `c`.`ContactName`) & 'Abc' +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_property_plus_parameter(bool async) + { + await base.Update_Where_set_property_plus_parameter(async); + + AssertExecuteUpdateSql( + """ +@value='Abc' (Size = 255) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = IIF(`c`.`ContactName` IS NULL, '', `c`.`ContactName`) & @value +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_property_plus_property(bool async) + { + await base.Update_Where_set_property_plus_property(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = IIF(`c`.`ContactName` IS NULL, '', `c`.`ContactName`) & `c`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_constant_using_ef_property(bool async) + { + await base.Update_Where_set_constant_using_ef_property(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_set_null(bool async) + { + await base.Update_Where_set_null(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = NULL +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_without_property_to_set_throws(bool async) + { + await base.Update_without_property_to_set_throws(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_Where_multiple_set(bool async) + { + await base.Update_Where_multiple_set(async); + + AssertExecuteUpdateSql( + """ +@value='Abc' (Size = 30) +@p='Seattle' (Size = 15) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @value, + `c`.`City` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_with_invalid_lambda_in_set_property_throws(bool async) + { + await base.Update_with_invalid_lambda_in_set_property_throws(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_multiple_tables_throws(bool async) + { + await base.Update_multiple_tables_throws(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_unmapped_property_throws(bool async) + { + await base.Update_unmapped_property_throws(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_Union_set_constant(bool async) + { + await base.Update_Union_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +INNER JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE [c0].[CustomerID] LIKE N'F%' + UNION + SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] + FROM [Customers] AS [c1] + WHERE [c1].[CustomerID] LIKE N'A%' +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +"""); + } + + public override async Task Update_Concat_set_constant(bool async) + { + await base.Update_Concat_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +INNER JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE [c0].[CustomerID] LIKE N'F%' + UNION ALL + SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] + FROM [Customers] AS [c1] + WHERE [c1].[CustomerID] LIKE N'A%' +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +"""); + } + + public override async Task Update_Except_set_constant(bool async) + { + await base.Update_Except_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +INNER JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE [c0].[CustomerID] LIKE N'F%' + EXCEPT + SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] + FROM [Customers] AS [c1] + WHERE [c1].[CustomerID] LIKE N'A%' +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +"""); + } + + public override async Task Update_Intersect_set_constant(bool async) + { + await base.Update_Intersect_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +INNER JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE [c0].[CustomerID] LIKE N'F%' + INTERSECT + SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] + FROM [Customers] AS [c1] + WHERE [c1].[CustomerID] LIKE N'A%' +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +"""); + } + + public override async Task Update_with_join_set_constant(bool async) + { + await base.Update_with_join_set_constant(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +INNER JOIN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_with_LeftJoin(bool async) + { + await base.Update_with_LeftJoin(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_with_LeftJoin_via_flattened_GroupJoin(bool async) + { + await base.Update_with_LeftJoin_via_flattened_GroupJoin(async); + + AssertExecuteUpdateSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +SET `c`.`ContactName` = @p +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_with_RightJoin(bool async) + { + await base.Update_with_RightJoin(async); + + AssertExecuteUpdateSql( + """ +@p='2020-01-01T00:00:00.0000000Z' (Nullable = true) (DbType = DateTime) + +UPDATE `Orders` AS `o` +RIGHT JOIN ( + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' +) AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` +SET `o`.`OrderDate` = CDATE(@p) +WHERE `o`.`OrderID` < 10300 +"""); + } + + public override async Task Update_with_cross_join_set_constant(bool async) + { + await base.Update_with_cross_join_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +CROSS JOIN ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10300 +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +"""); + } + + public override async Task Update_with_cross_apply_set_constant(bool async) + { + await base.Update_with_cross_apply_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10300 AND DATEPART(year, [o].[OrderDate]) < CAST(LEN([c].[ContactName]) AS int) +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +"""); + } + + public override async Task Update_with_outer_apply_set_constant(bool async) + { + await base.Update_with_outer_apply_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10300 AND DATEPART(year, [o].[OrderDate]) < CAST(LEN([c].[ContactName]) AS int) +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +"""); + } + + public override async Task Update_with_cross_join_left_join_set_constant(bool async) + { + await base.Update_with_cross_join_left_join_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +CROSS JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE ([c0].[City] IS NOT NULL) AND ([c0].[City] LIKE N'S%') +) AS [t] +LEFT JOIN ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10300 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +"""); + } + + public override async Task Update_with_cross_join_cross_apply_set_constant(bool async) + { + await base.Update_with_cross_join_cross_apply_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +CROSS JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE ([c0].[City] IS NOT NULL) AND ([c0].[City] LIKE N'S%') +) AS [t] +CROSS APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10300 AND DATEPART(year, [o].[OrderDate]) < CAST(LEN([c].[ContactName]) AS int) +) AS [t0] +WHERE [c].[CustomerID] LIKE N'F%' +"""); + } + + public override async Task Update_with_cross_join_outer_apply_set_constant(bool async) + { + await base.Update_with_cross_join_outer_apply_set_constant(async); + + AssertExecuteUpdateSql( +""" +UPDATE [c] +SET [c].[ContactName] = N'Updated' +FROM [Customers] AS [c] +CROSS JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE ([c0].[City] IS NOT NULL) AND ([c0].[City] LIKE N'S%') +) AS [t] +OUTER APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10300 AND DATEPART(year, [o].[OrderDate]) < CAST(LEN([c].[ContactName]) AS int) +) AS [t0] +WHERE [c].[CustomerID] LIKE N'F%' +"""); + } + + public override async Task Update_FromSql_set_constant(bool async) + { + await base.Update_FromSql_set_constant(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_Where_SelectMany_subquery_set_null(bool async) + { + await base.Update_Where_SelectMany_subquery_set_null(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Orders` AS `o1` +INNER JOIN ( + SELECT `o0`.`OrderID` + FROM `Customers` AS `c` + INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE DATEPART('yyyy', `o`.`OrderDate`) = 1997 + ) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +SET `o1`.`OrderDate` = NULL +"""); + } + + public override async Task Update_Where_Join_set_property_from_joined_single_result_table(bool async) + { + await base.Update_Where_Join_set_property_from_joined_single_result_table(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customers` AS `c` +SET `c`.`City` = (DATEPART('yyyy', ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC)) & '') +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Update_Where_Join_set_property_from_joined_table(bool async) + { + await base.Update_Where_Join_set_property_from_joined_table(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customers` AS `c2` +INNER JOIN ( + SELECT `c`.`CustomerID`, `c1`.`City` AS `City0` + FROM `Customers` AS `c`, + ( + SELECT `c0`.`City` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI' + ) AS `c1` + WHERE `c`.`CustomerID` LIKE 'F%' +) AS `s` ON `c2`.`CustomerID` = `s`.`CustomerID` +SET `c2`.`City` = `s`.`City0` +"""); + } + + public override async Task Update_Where_Join_set_property_from_joined_single_result_scalar(bool async) + { + await base.Update_Where_Join_set_property_from_joined_single_result_scalar(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customers` AS `c` +SET `c`.`City` = (DATEPART('yyyy', ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC)) & '') +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public override async Task Update_with_two_inner_joins(bool async) + { + await base.Update_with_two_inner_joins(async); + + AssertExecuteUpdateSql( + """ +@p='1' + +UPDATE (`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +SET `o`.`Quantity` = IIF(@p IS NULL, NULL, CINT(@p)) +WHERE `p`.`Discontinued` AND `o0`.`OrderDate` > #1990-01-01# +"""); + } + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public override async Task Update_with_PK_pushdown_and_join_and_multiple_setters(bool async) + { + await base.Update_with_PK_pushdown_and_join_and_multiple_setters(async); + + AssertExecuteUpdateSql( + """ +@p='1' +@p2='10' (DbType = Currency) + +UPDATE [o2] +SET [o2].[Quantity] = CAST(@p AS smallint), + [o2].[UnitPrice] = @p2 +FROM [Order Details] AS [o2] +INNER JOIN ( + SELECT [o1].[OrderID], [o1].[ProductID] + FROM ( + SELECT [o].[OrderID], [o].[ProductID] + FROM [Order Details] AS [o] + ORDER BY [o].[OrderID] + OFFSET @p ROWS + ) AS [o1] + INNER JOIN [Orders] AS [o0] ON [o1].[OrderID] = [o0].[OrderID] + WHERE [o0].[CustomerID] = N'ALFKI' +) AS [s] ON [o2].[OrderID] = [s].[OrderID] AND [o2].[ProductID] = [s].[ProductID] +"""); + } + + public override async Task Update_with_select_mixed_entity_scalar_anonymous_projection(bool async) + { + await base.Update_with_select_mixed_entity_scalar_anonymous_projection(async); + + AssertSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +"""); + } + + public override async Task Update_with_select_scalar_anonymous_projection(bool async) + { + await base.Update_with_select_scalar_anonymous_projection(async); + + AssertSql( + """ +@p='Updated' (Size = 30) + +UPDATE `Customers` AS `c` +SET `c`.`ContactName` = @p +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + private void AssertExecuteUpdateSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected, forUpdate: true); +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesLibRedFixture.cs new file mode 100644 index 00000000..1e71469c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesLibRedFixture.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPCFiltersInheritanceBulkUpdatesLibRedFixture : TPCInheritanceBulkUpdatesLibRedFixture +{ + protected override string StoreName + => "TPCFiltersInheritanceBulkUpdatesTest"; + + public override bool EnableFilters + => true; +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesLibRedTest.cs new file mode 100644 index 00000000..632b8715 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesLibRedTest.cs @@ -0,0 +1,235 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPCFiltersInheritanceBulkUpdatesLibRedTest( + TPCFiltersInheritanceBulkUpdatesLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : TPCFiltersInheritanceBulkUpdatesTestBase< + TPCFiltersInheritanceBulkUpdatesLibRedFixture>(fixture, testOutputHelper) +{ + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Delete_where_hierarchy(bool async) + { + await base.Delete_where_hierarchy(async); + + AssertSql(); + } + + public override async Task Delete_where_hierarchy_derived(bool async) + { + await base.Delete_where_hierarchy_derived(async); + + AssertSql( + """ +DELETE FROM `Kiwi` AS `k` +WHERE `k`.`CountryId` = 1 AND `k`.`Name` = 'Great spotted kiwi' +"""); + } + + public override async Task Delete_where_using_hierarchy(bool async) + { + await base.Delete_where_using_hierarchy(async); + + AssertSql( + """ +DELETE FROM `Countries` AS `c` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT `e`.`CountryId` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`CountryId` + FROM `Kiwi` AS `k` + ) AS `u` + WHERE `u`.`CountryId` = 1 AND `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Delete_where_using_hierarchy_derived(bool async) + { + await base.Delete_where_using_hierarchy_derived(async); + + AssertSql( + """ +DELETE FROM `Countries` AS `c` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT `k`.`CountryId` + FROM `Kiwi` AS `k` + ) AS `u` + WHERE `u`.`CountryId` = 1 AND `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Delete_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Delete_where_keyless_entity_mapped_to_sql_query(async); + + AssertSql(); + } + + public override async Task Delete_where_hierarchy_subquery(bool async) + { + await base.Delete_where_hierarchy_subquery(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First(bool async) + { + await base.Delete_GroupBy_Where_Select_First(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_2(bool async) + { + await base.Delete_GroupBy_Where_Select_First_2(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_3(bool async) + { + await base.Delete_GroupBy_Where_Select_First_3(async); + + AssertSql(); + } + + public override async Task Update_base_type(bool async) + { + await base.Update_base_type(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_base_type_with_OfType(bool async) + { + await base.Update_base_type_with_OfType(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_where_hierarchy_subquery(bool async) + { + await base.Update_where_hierarchy_subquery(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_base_property_on_derived_type(bool async) + { + await base.Update_base_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='SomeOtherKiwi' (Size = 255) + +UPDATE `Kiwi` AS `k` +SET `k`.`Name` = @p +WHERE `k`.`CountryId` = 1 +"""); + } + + public override async Task Update_derived_property_on_derived_type(bool async) + { + await base.Update_derived_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='0' (Size = 1) + +UPDATE `Kiwi` AS `k` +SET `k`.`FoundOn` = @p +WHERE `k`.`CountryId` = 1 +"""); + } + + public override async Task Update_where_using_hierarchy(bool async) + { + await base.Update_where_using_hierarchy(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT `e`.`CountryId` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`CountryId` + FROM `Kiwi` AS `k` + ) AS `u` + WHERE `u`.`CountryId` = 1 AND `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_base_and_derived_types(bool async) + { + await base.Update_base_and_derived_types(async); + + AssertExecuteUpdateSql( + """ +@p='Kiwi' (Size = 255) +@p1='0' (Size = 1) + +UPDATE `Kiwi` AS `k` +SET `k`.`Name` = @p, + `k`.`FoundOn` = @p1 +WHERE `k`.`CountryId` = 1 +"""); + } + + public override async Task Update_where_using_hierarchy_derived(bool async) + { + await base.Update_where_using_hierarchy_derived(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT `k`.`CountryId` + FROM `Kiwi` AS `k` + ) AS `u` + WHERE `u`.`CountryId` = 1 AND `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Update_where_keyless_entity_mapped_to_sql_query(async); + + AssertExecuteUpdateSql(); + } + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + private void AssertExecuteUpdateSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected, forUpdate: true); +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesLibRedFixture.cs new file mode 100644 index 00000000..4cd84333 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesLibRedFixture.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPCInheritanceBulkUpdatesLibRedFixture : TPCInheritanceBulkUpdatesFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override bool UseGeneratedKeys + => false; +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesLibRedTest.cs new file mode 100644 index 00000000..76a8011f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesLibRedTest.cs @@ -0,0 +1,257 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPCInheritanceBulkUpdatesLibRedTest( + TPCInheritanceBulkUpdatesLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : TPCInheritanceBulkUpdatesTestBase(fixture, testOutputHelper) +{ + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Delete_where_hierarchy(bool async) + { + await base.Delete_where_hierarchy(async); + + AssertSql(); + } + + public override async Task Delete_where_hierarchy_derived(bool async) + { + await base.Delete_where_hierarchy_derived(async); + + AssertSql( + """ +DELETE FROM `Kiwi` AS `k` +WHERE `k`.`Name` = 'Great spotted kiwi' +"""); + } + + public override async Task Delete_where_using_hierarchy(bool async) + { + await base.Delete_where_using_hierarchy(async); + + AssertSql( + """ +DELETE FROM `Countries` AS `c` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT `e`.`CountryId` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`CountryId` + FROM `Kiwi` AS `k` + ) AS `u` + WHERE `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Delete_where_using_hierarchy_derived(bool async) + { + await base.Delete_where_using_hierarchy_derived(async); + + AssertSql( + """ +DELETE FROM `Countries` AS `c` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT `k`.`CountryId` + FROM `Kiwi` AS `k` + ) AS `u` + WHERE `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Delete_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Delete_where_keyless_entity_mapped_to_sql_query(async); + + AssertSql(); + } + + public override async Task Delete_where_hierarchy_subquery(bool async) + { + await base.Delete_where_hierarchy_subquery(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First(bool async) + { + await base.Delete_GroupBy_Where_Select_First(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_2(bool async) + { + await base.Delete_GroupBy_Where_Select_First_2(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_3(bool async) + { + await base.Delete_GroupBy_Where_Select_First_3(async); + + AssertSql(); + } + + public override async Task Update_base_type(bool async) + { + await base.Update_base_type(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_base_type_with_OfType(bool async) + { + await base.Update_base_type_with_OfType(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_where_hierarchy_subquery(bool async) + { + await base.Update_where_hierarchy_subquery(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_base_property_on_derived_type(bool async) + { + await base.Update_base_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='SomeOtherKiwi' (Size = 255) + +UPDATE `Kiwi` AS `k` +SET `k`.`Name` = @p +"""); + } + + public override async Task Update_derived_property_on_derived_type(bool async) + { + await base.Update_derived_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='0' (Size = 1) + +UPDATE `Kiwi` AS `k` +SET `k`.`FoundOn` = @p +"""); + } + + public override async Task Update_where_using_hierarchy(bool async) + { + await base.Update_where_using_hierarchy(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT `e`.`CountryId` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`CountryId` + FROM `Kiwi` AS `k` + ) AS `u` + WHERE `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_base_and_derived_types(bool async) + { + await base.Update_base_and_derived_types(async); + + AssertExecuteUpdateSql( + """ +@p='Kiwi' (Size = 255) +@p1='0' (Size = 1) + +UPDATE `Kiwi` AS `k` +SET `k`.`Name` = @p, + `k`.`FoundOn` = @p1 +"""); + } + + public override async Task Update_where_using_hierarchy_derived(bool async) + { + await base.Update_where_using_hierarchy_derived(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT `k`.`CountryId` + FROM `Kiwi` AS `k` + ) AS `u` + WHERE `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_with_interface_in_property_expression(bool async) + { + await base.Update_with_interface_in_property_expression(async); + + AssertExecuteUpdateSql( + """ +@p='0' + +UPDATE `Coke` AS `c` +SET `c`.`SugarGrams` = @p +"""); + } + + public override async Task Update_with_interface_in_EF_Property_in_property_expression(bool async) + { + await base.Update_with_interface_in_EF_Property_in_property_expression(async); + + AssertExecuteUpdateSql( + """ +@p='0' + +UPDATE `Coke` AS `c` +SET `c`.`SugarGrams` = @p +"""); + } + + public override async Task Update_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Update_where_keyless_entity_mapped_to_sql_query(async); + + AssertExecuteUpdateSql(); + } + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + private void AssertExecuteUpdateSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected, forUpdate: true); +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesLibRedFixture.cs new file mode 100644 index 00000000..b676b742 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesLibRedFixture.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPHInheritanceBulkUpdatesLibRedFixture : TPHInheritanceBulkUpdatesFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesLibRedTest.cs new file mode 100644 index 00000000..83170fe5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesLibRedTest.cs @@ -0,0 +1,294 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPHInheritanceBulkUpdatesLibRedTest( + TPHInheritanceBulkUpdatesLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : TPHInheritanceBulkUpdatesTestBase(fixture, testOutputHelper) +{ + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Delete_where_hierarchy(bool async) + { + await base.Delete_where_hierarchy(async); + + AssertSql( + """ +DELETE FROM `Animals` AS `a` +WHERE `a`.`Name` = 'Great spotted kiwi' +"""); + } + + public override async Task Delete_where_hierarchy_derived(bool async) + { + await base.Delete_where_hierarchy_derived(async); + + AssertSql( + """ +DELETE FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' AND `a`.`Name` = 'Great spotted kiwi' +"""); + } + + public override async Task Delete_where_using_hierarchy(bool async) + { + await base.Delete_where_using_hierarchy(async); + + AssertSql( + """ +DELETE FROM `Countries` AS `c` +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + WHERE `c`.`Id` = `a`.`CountryId` AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Delete_where_using_hierarchy_derived(bool async) + { + await base.Delete_where_using_hierarchy_derived(async); + + AssertSql( + """ +DELETE FROM `Countries` AS `c` +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + WHERE `c`.`Id` = `a`.`CountryId` AND `a`.`Discriminator` = 'Kiwi' AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Delete_GroupBy_Where_Select_First(bool async) + { + await base.Delete_GroupBy_Where_Select_First(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_2(bool async) + { + await base.Delete_GroupBy_Where_Select_First_2(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_3(bool async) + { + await base.Delete_GroupBy_Where_Select_First_3(async); + + AssertSql( + """ +DELETE FROM `Animals` AS `a` +WHERE `a`.`Id` IN ( + SELECT ( + SELECT TOP 1 `a1`.`Id` + FROM `Animals` AS `a1` + WHERE `a0`.`CountryId` = `a1`.`CountryId`) + FROM `Animals` AS `a0` + GROUP BY `a0`.`CountryId` + HAVING COUNT(*) < 3 +) +"""); + } + + public override async Task Delete_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Delete_where_keyless_entity_mapped_to_sql_query(async); + + AssertSql(); + } + + public override async Task Delete_where_hierarchy_subquery(bool async) + { + await base.Delete_where_hierarchy_subquery(async); + + AssertSql( + """ +@p1='3' +@p='0' + +DELETE FROM `Animals` AS `a` +WHERE `a`.`Id` IN ( + SELECT `a2`.`Id` + FROM ( + SELECT TOP @p1 `a1`.`Id`, `a1`.`Name` + FROM ( + SELECT TOP @p + @p1 `a0`.`Id`, `a0`.`Name` + FROM `Animals` AS `a0` + WHERE `a0`.`Name` = 'Great spotted kiwi' + ORDER BY `a0`.`Name` + ) AS `a1` + ORDER BY `a1`.`Name` DESC + ) AS `a2` + ORDER BY `a2`.`Name` +) +"""); + } + + public override async Task Update_base_type(bool async) + { + await base.Update_base_type(async); + + AssertExecuteUpdateSql( + """ +@p='Animal' (Size = 255) + +UPDATE `Animals` AS `a` +SET `a`.`Name` = @p +WHERE `a`.`Name` = 'Great spotted kiwi' +"""); + } + + public override async Task Update_base_type_with_OfType(bool async) + { + await base.Update_base_type_with_OfType(async); + + AssertExecuteUpdateSql( + """ +@p='NewBird' (Size = 255) + +UPDATE `Animals` AS `a` +SET `a`.`Name` = @p +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Update_where_hierarchy_subquery(bool async) + { + await base.Update_where_hierarchy_subquery(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_base_property_on_derived_type(bool async) + { + await base.Update_base_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='SomeOtherKiwi' (Size = 255) + +UPDATE `Animals` AS `a` +SET `a`.`Name` = @p +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Update_derived_property_on_derived_type(bool async) + { + await base.Update_derived_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='0' (Size = 1) + +UPDATE `Animals` AS `a` +SET `a`.`FoundOn` = @p +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Update_where_using_hierarchy(bool async) + { + await base.Update_where_using_hierarchy(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + WHERE `c`.`Id` = `a`.`CountryId` AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_base_and_derived_types(bool async) + { + await base.Update_base_and_derived_types(async); + + AssertExecuteUpdateSql( + """ +@p='Kiwi' (Size = 255) +@p1='0' (Size = 1) + +UPDATE `Animals` AS `a` +SET `a`.`Name` = @p, + `a`.`FoundOn` = @p1 +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Update_where_using_hierarchy_derived(bool async) + { + await base.Update_where_using_hierarchy_derived(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + WHERE `c`.`Id` = `a`.`CountryId` AND `a`.`Discriminator` = 'Kiwi' AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Update_where_keyless_entity_mapped_to_sql_query(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_with_interface_in_property_expression(bool async) + { + await base.Update_with_interface_in_property_expression(async); + + AssertExecuteUpdateSql( + """ +@p='0' + +UPDATE `Drinks` AS `d` +SET `d`.`SugarGrams` = @p +WHERE `d`.`Discriminator` = 1 +"""); + } + + public override async Task Update_with_interface_in_EF_Property_in_property_expression(bool async) + { + await base.Update_with_interface_in_EF_Property_in_property_expression(async); + + AssertExecuteUpdateSql( + """ +@p='0' + +UPDATE `Drinks` AS `d` +SET `d`.`SugarGrams` = @p +WHERE `d`.`Discriminator` = 1 +"""); + } + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + private void AssertExecuteUpdateSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected, forUpdate: true); +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesLibRedFixture.cs new file mode 100644 index 00000000..93d7f46d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesLibRedFixture.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPTFiltersInheritanceBulkUpdatesLibRedFixture : TPTInheritanceBulkUpdatesLibRedFixture +{ + protected override string StoreName + => "TPTFiltersInheritanceBulkUpdatesTest"; + + public override bool EnableFilters + => true; +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesLibRedTest.cs new file mode 100644 index 00000000..6c8301ca --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesLibRedTest.cs @@ -0,0 +1,226 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +using Xunit.Sdk; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPTFiltersInheritanceBulkUpdatesLibRedTest( + TPTFiltersInheritanceBulkUpdatesLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : TPTFiltersInheritanceBulkUpdatesTestBase< + TPTFiltersInheritanceBulkUpdatesLibRedFixture>(fixture, testOutputHelper) +{ + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Delete_where_hierarchy(bool async) + { + await base.Delete_where_hierarchy(async); + + AssertSql(); + } + + public override async Task Delete_where_hierarchy_derived(bool async) + { + await base.Delete_where_hierarchy_derived(async); + + AssertSql(); + } + + public override async Task Delete_where_using_hierarchy(bool async) + { + await base.Delete_where_using_hierarchy(async); + + AssertSql( + """ +DELETE FROM `Countries` AS `c` +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + WHERE `a`.`CountryId` = 1 AND `c`.`Id` = `a`.`CountryId` AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Delete_where_using_hierarchy_derived(bool async) + { + await base.Delete_where_using_hierarchy_derived(async); + + AssertSql( + """ +DELETE FROM `Countries` AS `c` +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` + WHERE `a`.`CountryId` = 1 AND `c`.`Id` = `a`.`CountryId` AND `k`.`Id` IS NOT NULL AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Delete_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Delete_where_keyless_entity_mapped_to_sql_query(async); + + AssertSql(); + } + + public override async Task Delete_where_hierarchy_subquery(bool async) + { + await base.Delete_where_hierarchy_subquery(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First(bool async) + { + await base.Delete_GroupBy_Where_Select_First(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_2(bool async) + { + await base.Delete_GroupBy_Where_Select_First_2(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_3(bool async) + { + await base.Delete_GroupBy_Where_Select_First_3(async); + + AssertSql(); + } + + public override async Task Update_base_type(bool async) + { + await base.Update_base_type(async); + + AssertExecuteUpdateSql( + """ +@p='Animal' (Size = 255) + +UPDATE `Animals` AS `a` +SET `a`.`Name` = @p +WHERE `a`.`CountryId` = 1 AND `a`.`Name` = 'Great spotted kiwi' +"""); + } + + public override async Task Update_base_type_with_OfType(bool async) + { + await base.Update_base_type_with_OfType(async); + + AssertExecuteUpdateSql( + """ +@p='NewBird' (Size = 255) + +UPDATE `Animals` AS `a` +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +SET `a`.`Name` = @p +WHERE `a`.`CountryId` = 1 AND `k`.`Id` IS NOT NULL +"""); + } + + public override async Task Update_where_hierarchy_subquery(bool async) + { + await base.Update_where_hierarchy_subquery(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_base_property_on_derived_type(bool async) + { + await base.Update_base_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='SomeOtherKiwi' (Size = 255) + +UPDATE (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +SET `a`.`Name` = @p +WHERE `a`.`CountryId` = 1 +"""); + } + + public override async Task Update_derived_property_on_derived_type(bool async) + { + await base.Update_derived_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='0' (Size = 1) + +UPDATE (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +SET `k`.`FoundOn` = @p +WHERE `a`.`CountryId` = 1 +"""); + } + + public override async Task Update_base_and_derived_types(bool async) + { + await base.Update_base_and_derived_types(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_where_using_hierarchy(bool async) + { + await base.Update_where_using_hierarchy(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + WHERE `a`.`CountryId` = 1 AND `c`.`Id` = `a`.`CountryId` AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_where_using_hierarchy_derived(bool async) + { + await base.Update_where_using_hierarchy_derived(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` + WHERE `a`.`CountryId` = 1 AND `c`.`Id` = `a`.`CountryId` AND `k`.`Id` IS NOT NULL AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Update_where_keyless_entity_mapped_to_sql_query(async); + + AssertExecuteUpdateSql(); + } + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + private void AssertExecuteUpdateSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected, forUpdate: true); +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesLibRedFixture.cs new file mode 100644 index 00000000..65829d14 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesLibRedFixture.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPTInheritanceBulkUpdatesLibRedFixture : TPTInheritanceBulkUpdatesFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesLibRedTest.cs new file mode 100644 index 00000000..d90fb4e9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesLibRedTest.cs @@ -0,0 +1,236 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +using Xunit.Sdk; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.BulkUpdates; + +public class TPTInheritanceBulkUpdatesLibRedTest( + TPTInheritanceBulkUpdatesLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : TPTInheritanceBulkUpdatesTestBase(fixture, testOutputHelper) +{ + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Delete_where_hierarchy(bool async) + { + await base.Delete_where_hierarchy(async); + + AssertSql(); + } + + public override async Task Delete_where_hierarchy_derived(bool async) + { + await base.Delete_where_hierarchy_derived(async); + + AssertSql(); + } + + public override async Task Delete_where_using_hierarchy(bool async) + { + await base.Delete_where_using_hierarchy(async); + + AssertSql(); + } + + public override async Task Delete_where_using_hierarchy_derived(bool async) + { + await base.Delete_where_using_hierarchy_derived(async); + + AssertSql(); + } + + public override async Task Delete_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Delete_where_keyless_entity_mapped_to_sql_query(async); + + AssertSql(); + } + + public override async Task Delete_where_hierarchy_subquery(bool async) + { + await base.Delete_where_hierarchy_subquery(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First(bool async) + { + await base.Delete_GroupBy_Where_Select_First(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_2(bool async) + { + await base.Delete_GroupBy_Where_Select_First_2(async); + + AssertSql(); + } + + public override async Task Delete_GroupBy_Where_Select_First_3(bool async) + { + await base.Delete_GroupBy_Where_Select_First_3(async); + + AssertSql(); + } + + public override async Task Update_base_type(bool async) + { + await base.Update_base_type(async); + + AssertExecuteUpdateSql( + """ +@p='Animal' (Size = 255) + +UPDATE `Animals` AS `a` +SET `a`.`Name` = @p +WHERE `a`.`Name` = 'Great spotted kiwi' +"""); + } + + public override async Task Update_base_type_with_OfType(bool async) + { + await base.Update_base_type_with_OfType(async); + + AssertExecuteUpdateSql( + """ +@p='NewBird' (Size = 255) + +UPDATE `Animals` AS `a` +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +SET `a`.`Name` = @p +WHERE `k`.`Id` IS NOT NULL +"""); + } + + public override async Task Update_where_hierarchy_subquery(bool async) + { + await base.Update_where_hierarchy_subquery(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_base_property_on_derived_type(bool async) + { + await base.Update_base_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='SomeOtherKiwi' (Size = 255) + +UPDATE (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +SET `a`.`Name` = @p +"""); + } + + public override async Task Update_derived_property_on_derived_type(bool async) + { + await base.Update_derived_property_on_derived_type(async); + + AssertExecuteUpdateSql( + """ +@p='0' (Size = 1) + +UPDATE (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +SET `k`.`FoundOn` = @p +"""); + } + + public override async Task Update_base_and_derived_types(bool async) + { + await base.Update_base_and_derived_types(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_where_using_hierarchy(bool async) + { + await base.Update_where_using_hierarchy(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + WHERE `c`.`Id` = `a`.`CountryId` AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_where_using_hierarchy_derived(bool async) + { + await base.Update_where_using_hierarchy_derived(async); + + AssertExecuteUpdateSql( + """ +@p='Monovia' (Size = 255) + +UPDATE `Countries` AS `c` +SET `c`.`Name` = @p +WHERE ( + SELECT COUNT(*) + FROM `Animals` AS `a` + LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` + WHERE `c`.`Id` = `a`.`CountryId` AND `k`.`Id` IS NOT NULL AND `a`.`CountryId` > 0) > 0 +"""); + } + + public override async Task Update_where_keyless_entity_mapped_to_sql_query(bool async) + { + await base.Update_where_keyless_entity_mapped_to_sql_query(async); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_with_interface_in_property_expression(bool async) + { + await base.Update_with_interface_in_property_expression(async); + + AssertExecuteUpdateSql( + """ +@p='0' + +UPDATE `Drinks` AS `d` +INNER JOIN `Coke` AS `c` ON `d`.`Id` = `c`.`Id` +SET `c`.`SugarGrams` = @p +"""); + } + + public override async Task Update_with_interface_in_EF_Property_in_property_expression(bool async) + { + await base.Update_with_interface_in_EF_Property_in_property_expression(async); + + AssertExecuteUpdateSql( + """ +@p='0' + +UPDATE `Drinks` AS `d` +INNER JOIN `Coke` AS `c` ON `d`.`Id` = `c`.`Id` +SET `c`.`SugarGrams` = @p +"""); + } + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + private void AssertExecuteUpdateSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected, forUpdate: true); +} diff --git a/test/EFCore.LibRed.FunctionalTests/CommandConfigurationTest.cs b/test/EFCore.LibRed.FunctionalTests/CommandConfigurationTest.cs new file mode 100644 index 00000000..f2a60649 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/CommandConfigurationTest.cs @@ -0,0 +1,77 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +// ReSharper disable UnusedAutoPropertyAccessor.Local +// ReSharper disable InconsistentNaming + +#nullable disable + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class CommandConfigurationTest : IClassFixture + { + public CommandConfigurationTest(CommandConfigurationFixture fixture) + { + Fixture = fixture; + Fixture.TestSqlLoggerFactory.Clear(); + } + + protected CommandConfigurationFixture Fixture { get; set; } + + [ConditionalFact] + public void Constructed_select_query_CommandBuilder_throws_when_negative_CommandTimeout_is_used() + { + using var context = CreateContext(); + Assert.Throws(() => context.Database.SetCommandTimeout(-5)); + } + + private ChipsContext CreateContext() => (ChipsContext)Fixture.CreateContext(); + + protected void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public int CountSqlLinesContaining(string searchTerm, string sql) + => CountLinesContaining(sql, searchTerm); + + public int CountLinesContaining(string source, string searchTerm) + { + var text = source.Split([Environment.NewLine], StringSplitOptions.RemoveEmptyEntries); + + var matchQuery = from word in text + where word.Contains(searchTerm) + select word; + + return matchQuery.Count(); + } + + private class ChipsContext(DbContextOptions options) : PoolableDbContext(options) + { + public DbSet Chips { get; set; } + } + + private class KettleChips + { + // ReSharper disable once UnusedMember.Local + public int Id { get; set; } + + public string Name { get; set; } + public DateTime BestBuyDate { get; set; } + } + + public class CommandConfigurationFixture : SharedStoreFixtureBase + { + protected override string StoreName { get; } = "CommandConfiguration"; + protected override Type ContextType { get; } = typeof(ChipsContext); + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/CommandInterceptionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/CommandInterceptionLibRedTest.cs new file mode 100644 index 00000000..01520db0 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/CommandInterceptionLibRedTest.cs @@ -0,0 +1,93 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public abstract class CommandInterceptionLibRedTestBase( + CommandInterceptionLibRedTestBase.InterceptionLibRedFixtureBase fixture) + : CommandInterceptionTestBase(fixture) + { + public override async Task Intercept_query_passively(bool async, bool inject) + { + AssertSql( + $@"SELECT `s`.`Id`, `s`.`Type` FROM `Singularity` AS `s`", + await base.Intercept_query_passively(async, inject)); + + return null; + } + + public override async Task Intercept_query_to_mutate_command(bool async, bool inject) + { + AssertSql( + $@"SELECT `s`.`Id`, `s`.`Type` FROM `Brane` AS `s`", + await base.Intercept_query_to_mutate_command(async, inject)); + + return null; + } + + public override async Task Intercept_query_to_replace_execution(bool async, bool inject) + { + AssertSql( + $@"SELECT `s`.`Id`, `s`.`Type` FROM `Singularity` AS `s`", + await base.Intercept_query_to_replace_execution(async, inject)); + + return null; + } + + public abstract class InterceptionLibRedFixtureBase : InterceptionFixtureBase + { + protected override string StoreName => "CommandInterception"; + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + protected override IServiceCollection InjectInterceptors( + IServiceCollection serviceCollection, + IEnumerable injectedInterceptors) + => base.InjectInterceptors(serviceCollection.AddEntityFrameworkLibRed(), injectedInterceptors); + } + + public class CommandInterceptionLibRedTest(CommandInterceptionLibRedTest.InterceptionLibRedFixture fixture) + : CommandInterceptionLibRedTestBase(fixture), IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override bool ShouldSubscribeToDiagnosticListener => false; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + new LibRedDbContextOptionsBuilder(base.AddOptions(builder)) + .ExecutionStrategy(d => new LibRedExecutionStrategy(d)); + return builder; + } + } + } + + public class CommandInterceptionWithDiagnosticsLibRedTest( + CommandInterceptionWithDiagnosticsLibRedTest.InterceptionLibRedFixture fixture) + : CommandInterceptionLibRedTestBase(fixture), + IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override bool ShouldSubscribeToDiagnosticListener => true; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + new LibRedDbContextOptionsBuilder(base.AddOptions(builder)) + .ExecutionStrategy(d => new LibRedExecutionStrategy(d)); + return builder; + } + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ComplexTypesTrackingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ComplexTypesTrackingLibRedTest.cs new file mode 100644 index 00000000..79d135e3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ComplexTypesTrackingLibRedTest.cs @@ -0,0 +1,408 @@ +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using System.Threading.Tasks; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class ComplexTypesTrackingLibRedTest( + ComplexTypesTrackingLibRedTest.LibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : ComplexTypesTrackingLibRedTestBase(fixture, testOutputHelper) +{ + public class LibRedFixture : LibRedFixtureBase + { + protected override string StoreName + => nameof(ComplexTypesTrackingLibRedTest); + } +} + +public class ComplexTypesTrackingProxiesLibRedTest( + ComplexTypesTrackingProxiesLibRedTest.LibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : ComplexTypesTrackingLibRedTestBase(fixture, testOutputHelper) +{ + // Fields can't be proxied + public override Task Can_track_entity_with_complex_objects_with_fields(EntityState state, bool async) + => Task.CompletedTask; + + // Fields can't be proxied + public override void Can_mark_complex_type_properties_modified_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_read_original_values_for_properties_of_complex_types_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_write_original_values_for_properties_of_complex_types_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override Task Can_track_entity_with_complex_structs_with_fields(EntityState state, bool async) + => Task.CompletedTask; + + // Fields can't be proxied + public override void Can_mark_complex_readonly_struct_properties_modified_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_read_original_values_for_properties_of_structs_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_write_original_values_for_properties_of_structs_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override Task Can_track_entity_with_complex_readonly_structs_with_fields(EntityState state, bool async) + => Task.CompletedTask; + + // Fields can't be proxied + public override void Can_mark_complex_readonly_readonly_struct_properties_modified_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_read_original_values_for_properties_of_readonly_structs_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_write_original_values_for_properties_of_readonly_structs_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override Task Can_track_entity_with_complex_record_objects_with_fields(EntityState state, bool async) + => Task.CompletedTask; + + // Fields can't be proxied + public override void Can_mark_complex_record_type_properties_modified_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_read_original_values_for_properties_of_record_complex_types_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_write_original_values_for_properties_of_record_complex_types_with_fields(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_added_elements_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_track_entity_with_complex_type_collections(EntityState state, bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_mark_complex_type_collection_properties_modified(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_read_original_values_for_properties_of_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_write_original_values_for_properties_of_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_track_entity_with_complex_struct_collections(EntityState state, bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_mark_complex_struct_collection_properties_modified(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_read_original_values_for_properties_of_complex_struct_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_write_original_values_for_properties_of_complex_struct_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_track_entity_with_complex_readonly_struct_collections(EntityState state, bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_mark_complex_readonly_struct_collection_properties_modified(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_read_original_values_for_properties_of_readonly_struct_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_write_original_values_for_properties_of_readonly_struct_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_track_entity_with_complex_readonly_struct_collections_with_fields(EntityState state, bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_mark_complex_readonly_struct_collections_with_fields_properties_modified(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_read_original_values_for_properties_of_complex_readonly_struct_collections_with_fields(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_write_original_values_for_properties_of_complex_readonly_struct_collections_with_fields(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_reordered_elements_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_removed_elements_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_replaced_elements_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_duplicates_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_handle_null_elements_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_changes_to_struct_collection_elements(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_changes_to_readonly_struct_collection_elements(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_handle_collection_with_mixed_null_and_duplicate_elements(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_changes_to_record_collection_elements(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_nested_collection_changes_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_changes_to_nested_teams_members_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_changes_to_nested_struct_teams_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_changes_to_nested_readonly_struct_teams_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_read_original_values_for_properties_of_complex_record_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_write_original_values_for_properties_of_complex_record_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_mark_complex_record_collection_properties_modified(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_swapped_complex_objects_in_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_remove_from_complex_collection_with_nested_complex_collection(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_remove_from_complex_field_collection_with_nested_complex_collection(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Throws_when_accessing_complex_entries_using_incorrect_cardinality() + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_track_entity_with_complex_record_collections(EntityState state, bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_track_entity_with_complex_record_collections_with_fields(EntityState state, bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_mark_complex_record_collections_with_fields_properties_modified(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_read_original_values_for_properties_of_complex_record_collections_with_fields(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_write_original_values_for_properties_of_complex_record_collections_with_fields(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override Task Can_track_entity_with_complex_field_collections(EntityState state, bool async) + => Task.CompletedTask; + + // Fields can't be proxied + public override void Can_read_original_values_for_properties_of_complex_field_collections(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_mark_complex_field_collection_properties_modified(bool trackFromQuery) + { + } + + // Fields can't be proxied + public override void Can_write_original_values_for_properties_of_complex_field_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_detect_changes_to_record_teams_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_handle_empty_nested_teams_in_complex_type_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_mark_complex_property_bag_collection_properties_modified(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_read_original_values_for_properties_of_complex_property_bag_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_track_entity_with_complex_property_bag_collections(EntityState state, bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override void Can_write_original_values_for_properties_of_complex_property_bag_collections(bool trackFromQuery) + { + } + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_save_default_values_in_optional_complex_property_with_multiple_properties(bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_null_complex_property_with_default_values_and_multiple_properties(bool async) + => Task.CompletedTask; + + // Fields can't be proxied + public override Task Can_change_state_from_Deleted_with_complex_field_collection(EntityState newState, bool async) + => Task.CompletedTask; + + // Fields can't be proxied + public override Task Can_change_state_from_Deleted_with_complex_field_record_collection(EntityState newState, bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_change_state_from_Deleted_with_complex_collection(EntityState newState, bool async) + => Task.CompletedTask; + + // Issue #36175: Complex types with notification change tracking are not supported + public override Task Can_change_state_from_Deleted_with_complex_record_collection(EntityState newState, bool async) + => Task.CompletedTask; + + public class LibRedFixture : LibRedFixtureBase + { + protected override string StoreName + => nameof(ComplexTypesTrackingProxiesLibRedTest); + + public override bool UseProxies + => true; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base.AddOptions(builder.UseLazyLoadingProxies().UseChangeTrackingProxies()); + + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection.AddEntityFrameworkProxies()); + } +} + +public abstract class ComplexTypesTrackingLibRedTestBase : ComplexTypesTrackingRelationalTestBase + where TFixture : ComplexTypesTrackingLibRedTestBase.LibRedFixtureBase, new() +{ + protected ComplexTypesTrackingLibRedTestBase(TFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture, testOutputHelper) + { + } + + public abstract class LibRedFixtureBase : RelationalFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/CompositeKeyEndToEndLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/CompositeKeyEndToEndLibRedTest.cs new file mode 100644 index 00000000..03e505c5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/CompositeKeyEndToEndLibRedTest.cs @@ -0,0 +1,18 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class CompositeKeyEndToEndLibRedTest(CompositeKeyEndToEndLibRedTest.CompositeKeyEndToEndLibRedFixture fixture) + : CompositeKeyEndToEndTestBase< + CompositeKeyEndToEndLibRedTest.CompositeKeyEndToEndLibRedFixture>(fixture) + { + public class CompositeKeyEndToEndLibRedFixture : CompositeKeyEndToEndFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ConcurrencyDetectorDisabledLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ConcurrencyDetectorDisabledLibRedTest.cs new file mode 100644 index 00000000..4d40a73e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ConcurrencyDetectorDisabledLibRedTest.cs @@ -0,0 +1,40 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class ConcurrencyDetectorDisabledLibRedTest : ConcurrencyDetectorDisabledRelationalTestBase< + ConcurrencyDetectorDisabledLibRedTest.ConcurrencyDetectorLibRedFixture> +{ + public ConcurrencyDetectorDisabledLibRedTest(ConcurrencyDetectorLibRedFixture fixture) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + } + + protected override async Task ConcurrencyDetectorTest(Func> test) + { + await base.ConcurrencyDetectorTest(test); + + Assert.NotEmpty(Fixture.TestSqlLoggerFactory.SqlStatements); + } + + public class ConcurrencyDetectorLibRedFixture : ConcurrencyDetectorFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => builder.EnableThreadSafetyChecks(enableChecks: false); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ConcurrencyDetectorEnabledLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ConcurrencyDetectorEnabledLibRedTest.cs new file mode 100644 index 00000000..13ecf08a --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ConcurrencyDetectorEnabledLibRedTest.cs @@ -0,0 +1,37 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class ConcurrencyDetectorEnabledLibRedTest : ConcurrencyDetectorEnabledRelationalTestBase< + ConcurrencyDetectorEnabledLibRedTest.ConcurrencyDetectorLibRedFixture> +{ + public ConcurrencyDetectorEnabledLibRedTest(ConcurrencyDetectorLibRedFixture fixture) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + } + + protected override async Task ConcurrencyDetectorTest(Func> test) + { + await base.ConcurrencyDetectorTest(test); + + Assert.Empty(Fixture.TestSqlLoggerFactory.SqlStatements); + } + + public class ConcurrencyDetectorLibRedFixture : ConcurrencyDetectorFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ConferencePlannerLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ConferencePlannerLibRedTest.cs new file mode 100644 index 00000000..943ac8c6 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ConferencePlannerLibRedTest.cs @@ -0,0 +1,23 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class ConferencePlannerLibRedTest(ConferencePlannerLibRedTest.ConferencePlannerLibRedFixture fixture) + : ConferencePlannerTestBase(fixture) + { + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public class ConferencePlannerLibRedFixture : ConferencePlannerFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ConnectionInterceptionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ConnectionInterceptionLibRedTest.cs new file mode 100644 index 00000000..8677a1f7 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ConnectionInterceptionLibRedTest.cs @@ -0,0 +1,73 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Diagnostics.CodeAnalysis; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public abstract class ConnectionInterceptionLibRedTestBase( + ConnectionInterceptionLibRedTestBase.InterceptionLibRedFixtureBase fixture) + : ConnectionInterceptionTestBase(fixture) + { + public abstract class InterceptionLibRedFixtureBase : InterceptionFixtureBase + { + protected override string StoreName => "ConnectionInterception"; + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + protected override IServiceCollection InjectInterceptors( + IServiceCollection serviceCollection, + IEnumerable injectedInterceptors) + => base.InjectInterceptors(serviceCollection.AddEntityFrameworkLibRed(), injectedInterceptors); + } + protected override DbContextOptionsBuilder ConfigureProvider(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseLibRed(); + + protected override BadUniverseContext CreateBadUniverse(DbContextOptionsBuilder optionsBuilder) + => new(optionsBuilder.UseLibRed(new FakeDbConnection()).Options); + + public class FakeDbConnection : DbConnection + { + [AllowNull] + public override string ConnectionString { get; set; } + public override string Database => "Database"; + public override string DataSource => "DataSource"; + public override string ServerVersion => throw new NotImplementedException(); + public override ConnectionState State => ConnectionState.Closed; + public override void ChangeDatabase(string databaseName) => throw new NotImplementedException(); + public override void Close() => throw new NotImplementedException(); + public override void Open() => throw new NotImplementedException(); + protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel) => throw new NotImplementedException(); + protected override DbCommand CreateDbCommand() => throw new NotImplementedException(); + } + + public class ConnectionInterceptionLibRedTest(ConnectionInterceptionLibRedTest.InterceptionLibRedFixture fixture) + : ConnectionInterceptionLibRedTestBase(fixture), + IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override bool ShouldSubscribeToDiagnosticListener => false; + } + } + + public class ConnectionInterceptionWithDiagnosticsLibRedTest( + ConnectionInterceptionWithDiagnosticsLibRedTest.InterceptionLibRedFixture fixture) + : ConnectionInterceptionLibRedTestBase(fixture), + IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override bool ShouldSubscribeToDiagnosticListener => true; + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ConnectionSpecificationTest.cs b/test/EFCore.LibRed.FunctionalTests/ConnectionSpecificationTest.cs new file mode 100644 index 00000000..c323a49c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ConnectionSpecificationTest.cs @@ -0,0 +1,616 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using LibRed.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using System.Data; + +// ReSharper disable InconsistentNaming +// ReSharper disable ClassNeverInstantiated.Local +// ReSharper disable UnusedAutoPropertyAccessor.Local + +#nullable disable + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class ConnectionSpecificationTest + { + [ConditionalFact] + public async Task Can_specify_no_connection_string_in_OnConfiguring() + { + var serviceProvider + = new ServiceCollection() + .AddDbContext() + .BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + context.Database.SetConnectionString(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Can_specify_no_connection_string_in_OnConfiguring_with_default_service_provider() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await using var context = new NoneInOnConfiguringContext(); + + context.Database.SetConnectionString(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Throws_if_context_used_with_no_connection_or_connection_string() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await using var context = new NoneInOnConfiguringContext(); + + await Assert.ThrowsAsync(() => context.Customers.AnyAsync()); + } + } + + private class NoneInOnConfiguringContext : NorthwindContextBase + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseLibRed(b => b.ApplyConfiguration()); + } + + [ConditionalFact] + public async Task Can_specify_connection_string_in_OnConfiguring() + { + var serviceProvider + = new ServiceCollection() + .AddDbContext() + .BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Can_specify_connection_string_in_OnConfiguring_with_default_service_provider() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await using var context = new StringInOnConfiguringContext(); + Assert.True(await context.Customers.AnyAsync()); + } + } + + private class StringInOnConfiguringContext : NorthwindContextBase + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString, b => b.ApplyConfiguration()); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Can_specify_no_connection_in_OnConfiguring(bool contextOwnsConnection) + { + var serviceProvider + = new ServiceCollection() + .AddScoped(p => new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString)) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + LibRedConnection connection; + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + context.Database.SetDbConnection(connection, contextOwnsConnection); + + Assert.True(await context.Customers.AnyAsync()); + } + + if (contextOwnsConnection) + { + await Assert.ThrowsAsync(() => connection.OpenAsync()); // Disposed + } + else + { + await connection.OpenAsync(); + await connection.CloseAsync(); + await connection.DisposeAsync(); + } + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(bool contextOwnsConnection) + { + LibRedConnection connection; + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var context = new NoneInOnConfiguringContext(); + + connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + context.Database.SetDbConnection(connection, contextOwnsConnection); + + Assert.True(await context.Customers.AnyAsync()); + } + + if (contextOwnsConnection) + { + Assert.Throws(() => connection.Open()); // Disposed + } + else + { + connection.Open(); + connection.Close(); + connection.Dispose(); + } + } + + [ConditionalFact] + public async Task Can_specify_connection_in_OnConfiguring() + { + var serviceProvider + = new ServiceCollection() + .AddScoped(p => new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString)) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Can_specify_connection_in_OnConfiguring_with_default_service_provider() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + using var context = new ConnectionInOnConfiguringContext(connection); + + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Can_specify_owned_connection_in_OnConfiguring() + { + var serviceProvider + = new ServiceCollection() + .AddSingleton(_ => new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString)) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + LibRedConnection connection; + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + connection = serviceProvider.GetRequiredService(); + + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); + } + + Assert.Throws(() => connection.Open()); // Disposed + } + + [ConditionalFact] + public async Task Can_specify_owned_connection_in_OnConfiguring_with_default_service_provider() + { + LibRedConnection connection; + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + using var context = new OwnedConnectionInOnConfiguringContext(connection); + + Assert.True(await context.Customers.AnyAsync()); + } + + Assert.Throws(() => connection.Open()); // Disposed + } + + [ConditionalFact] + public async Task Can_specify_then_change_connection() + { + var connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + + var serviceProvider + = new ServiceCollection() + .AddScoped(p => connection) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + Assert.Same(connection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); + + using var newConnection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + context.Database.SetDbConnection(newConnection); + + Assert.Same(newConnection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Cannot_change_connection_when_open_and_owned() + { + var connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + + var serviceProvider + = new ServiceCollection() + .AddScoped(p => connection) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + context.Database.OpenConnection(); + Assert.Same(connection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); + + using var newConnection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + + Assert.Equal( + RelationalStrings.CannotChangeWhenOpen, + Assert.Throws(() => context.Database.SetDbConnection(newConnection)).Message); + } + } + + [ConditionalFact] + public async Task Can_change_connection_when_open_and_not_owned() + { + var connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + + var serviceProvider + = new ServiceCollection() + .AddScoped(p => connection) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + context.Database.OpenConnection(); + Assert.Same(connection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); + + using var newConnection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + context.Database.SetDbConnection(newConnection); + + Assert.Same(newConnection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); + } + } + + private class ConnectionInOnConfiguringContext(LibRedConnection connection) : NorthwindContextBase + { + private readonly LibRedConnection _connection = connection; + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseLibRed(_connection, b => b.ApplyConfiguration()); + + public override void Dispose() + { + _connection.Dispose(); + base.Dispose(); + } + } + + private class OwnedConnectionInOnConfiguringContext(LibRedConnection connection) : NorthwindContextBase + { + private readonly LibRedConnection _connection = connection; + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseLibRed(_connection, contextOwnsConnection: true, b => b.ApplyConfiguration()); + } + + [ConditionalFact] + public async Task Throws_if_no_connection_found_in_config_without_UseLibRed() + { + var serviceProvider + = new ServiceCollection() + .AddDbContext().BuildServiceProvider(validateScopes: true); + + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.Equal( + CoreStrings.NoProviderConfigured, + (await Assert.ThrowsAsync(() => context.Customers.AnyAsync())).Message); + } + + [ConditionalFact] + public async Task Throws_if_no_config_without_UseLibRed() + { + var serviceProvider + = new ServiceCollection() + .AddDbContext().BuildServiceProvider(validateScopes: true); + + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.Equal( + CoreStrings.NoProviderConfigured, + (await Assert.ThrowsAsync(() => context.Customers.AnyAsync())).Message); + } + + private class NoUseLibRedContext : NorthwindContextBase + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.EnableServiceProviderCaching(false); + } + + [ConditionalFact] + public async Task Can_depend_on_DbContextOptions() + { + var serviceProvider + = new ServiceCollection() + .AddScoped(p => new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString)) + .AddDbContext() + .BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Can_depend_on_DbContextOptions_with_default_service_provider() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + + using var context = new OptionsContext( + new DbContextOptions(), + connection); + + Assert.True(await context.Customers.AnyAsync()); + } + } + + private class OptionsContext(DbContextOptions options, LibRedConnection connection) : NorthwindContextBase(options) + { + private readonly LibRedConnection _connection = connection; + private readonly DbContextOptions _options = options; + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + Assert.Same(_options, optionsBuilder.Options); + + optionsBuilder + .EnableServiceProviderCaching(false) + .UseLibRed(_connection, b => b.ApplyConfiguration()); + + Assert.NotSame(_options, optionsBuilder.Options); + } + + public override void Dispose() + { + _connection.Dispose(); + base.Dispose(); + } + } + + [ConditionalFact] + public async Task Can_depend_on_non_generic_options_when_only_one_context() + { + var serviceProvider + = new ServiceCollection() + .AddDbContext() + .BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Can_depend_on_non_generic_options_when_only_one_context_with_default_service_provider() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var context = new NonGenericOptionsContext(new DbContextOptions()); + Assert.True(await context.Customers.AnyAsync()); + } + } + + private class NonGenericOptionsContext(DbContextOptions options) : NorthwindContextBase(options) + { + private readonly DbContextOptions _options = options; + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + Assert.Same(_options, optionsBuilder.Options); + + optionsBuilder + .EnableServiceProviderCaching(false) + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString, b => b.ApplyConfiguration()); + + Assert.NotSame(_options, optionsBuilder.Options); + } + } + + [ConditionalTheory] + [InlineData("MyConnectionString", "name=MyConnectionString")] + [InlineData("ConnectionStrings:DefaultConnection", "name=ConnectionStrings:DefaultConnection")] + [InlineData("ConnectionStrings:DefaultConnection", " NamE = ConnectionStrings:DefaultConnection ")] + public async Task Can_use_AddDbContext_and_get_connection_string_from_config(string key, string connectionString) + { + var configBuilder = new ConfigurationBuilder() + .AddInMemoryCollection( + new Dictionary { { key, LibRedNorthwindTestStoreFactory.NorthwindConnectionString } }); + + var serviceProvider + = new ServiceCollection() + .AddSingleton(configBuilder.Build()) + .AddDbContext( + b => b.UseLibRed(connectionString).EnableServiceProviderCaching(false)) + .BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + using var serviceScope = serviceProvider.GetRequiredService().CreateScope(); + using var context = serviceScope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); + } + } + + private class UseConfigurationContext(DbContextOptions options) : NorthwindContextBase(options); + + private class NorthwindContextBase : DbContext + { + protected NorthwindContextBase() + { + } + + protected NorthwindContextBase(DbContextOptions options) + : base(options) + { + } + + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity( + b => + { + b.HasKey(c => c.CustomerID); + b.ToTable("Customers"); + }); + } + + private class Customer + { + public string CustomerID { get; set; } + + // ReSharper disable UnusedMember.Local + public string CompanyName { get; set; } + + public string Fax { get; set; } + // ReSharper restore UnusedMember.Local + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public async Task Can_use_an_existing_closed_connection_test(bool openConnection) + { + var serviceProvider = new ServiceCollection() + .AddEntityFrameworkLibRed() + .BuildServiceProvider(validateScopes: true); + + await using var store = await LibRedTestStore.GetNorthwindStoreAsync(); + store.CloseConnection(); + + var openCount = 0; + var closeCount = 0; + var disposeCount = 0; + + using var connection = new LibRedConnection(store.ConnectionString); + if (openConnection) + { + await connection.OpenAsync(); + } + + connection.StateChange += (_, a) => + { + switch (a.CurrentState) + { + case ConnectionState.Open: + openCount++; + break; + case ConnectionState.Closed: + closeCount++; + break; + } + }; + connection.Disposed += (_, __) => disposeCount++; + + using (var context = new NorthwindContext(serviceProvider, connection)) + { + Assert.Equal(91, await context.Customers.CountAsync()); + } + + if (openConnection) + { + Assert.Equal(ConnectionState.Open, connection.State); + Assert.Equal(0, openCount); + Assert.Equal(0, closeCount); + } + else + { + Assert.Equal(ConnectionState.Closed, connection.State); + Assert.Equal(1, openCount); + Assert.Equal(1, closeCount); + } + + Assert.Equal(0, disposeCount); + } + + private class NorthwindContext(IServiceProvider serviceProvider, LibRedConnection connection) : DbContext + { + private readonly IServiceProvider _serviceProvider = serviceProvider; + private readonly LibRedConnection _connection = connection; + + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public DbSet Customers { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .UseLibRed(_connection, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(_serviceProvider); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity( + b => + { + b.HasKey(c => c.CustomerID); + b.ToTable("Customers"); + }); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ConvertToProviderTypesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ConvertToProviderTypesLibRedTest.cs new file mode 100644 index 00000000..9dac7e00 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ConvertToProviderTypesLibRedTest.cs @@ -0,0 +1,1455 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Globalization; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +#nullable disable + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class ConvertToProviderTypesLibRedTest(ConvertToProviderTypesLibRedTest.ConvertToProviderTypesLibRedFixture fixture) + : ConvertToProviderTypesTestBase< + ConvertToProviderTypesLibRedTest.ConvertToProviderTypesLibRedFixture>(fixture) + { + [ConditionalFact] + public virtual void Columns_have_expected_data_types() + { + var actual = BuiltInDataTypesLibRedTest.QueryForColumnTypes( + CreateContext(), + nameof(ObjectBackedDataTypes), nameof(NullableBackedDataTypes), nameof(NonNullableBackedDataTypes)); + + const string expected = """ + #Dual.ID ---> [integer] + Animal.Id ---> [counter] + AnimalDetails.AnimalId ---> [nullable integer] + AnimalDetails.BoolField ---> [integer] + AnimalDetails.Id ---> [counter] + AnimalIdentification.AnimalId ---> [integer] + AnimalIdentification.Id ---> [counter] + AnimalIdentification.Method ---> [varchar] [MaxLength = 6] + BinaryForeignKeyDataType.BinaryKeyDataTypeId ---> [nullable varchar] [MaxLength = 255] + BinaryForeignKeyDataType.Id ---> [integer] + BinaryKeyDataType.Ex ---> [nullable varchar] [MaxLength = 255] + BinaryKeyDataType.Id ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.Enum16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Enum32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Enum64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Enum8 ---> [char] [MaxLength = 17] + BuiltInDataTypes.EnumS8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.EnumU16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.EnumU32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.EnumU64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Id ---> [integer] + BuiltInDataTypes.PartitionId ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestBoolean ---> [varchar] [MaxLength = 1] + BuiltInDataTypes.TestByte ---> [integer] + BuiltInDataTypes.TestCharacter ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestDateOnly ---> [datetime] + BuiltInDataTypes.TestDateTime ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestDateTimeOffset ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestDecimal ---> [varbinary] [MaxLength = 16] + BuiltInDataTypes.TestDouble ---> [decimal] [Precision = 28 Scale = 17] + BuiltInDataTypes.TestInt16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestSignedByte ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestSingle ---> [decimal] [Precision = 28 Scale = 17] + BuiltInDataTypes.TestTimeOnly ---> [datetime] + BuiltInDataTypes.TestTimeSpan ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestUnsignedInt16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestUnsignedInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestUnsignedInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.EnumS8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.EnumU16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.EnumU32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.EnumU64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Id ---> [integer] + BuiltInDataTypesShadow.PartitionId ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestBoolean ---> [varchar] [MaxLength = 1] + BuiltInDataTypesShadow.TestByte ---> [integer] + BuiltInDataTypesShadow.TestCharacter ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestDateOnly ---> [datetime] + BuiltInDataTypesShadow.TestDateTime ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestDateTimeOffset ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestDecimal ---> [varbinary] [MaxLength = 16] + BuiltInDataTypesShadow.TestDouble ---> [decimal] [Precision = 28 Scale = 17] + BuiltInDataTypesShadow.TestInt16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestSignedByte ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestSingle ---> [decimal] [Precision = 28 Scale = 17] + BuiltInDataTypesShadow.TestTimeOnly ---> [datetime] + BuiltInDataTypesShadow.TestTimeSpan ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestUnsignedInt16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestUnsignedInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestUnsignedInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.EnumS8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.EnumU16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.EnumU32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.EnumU64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Id ---> [integer] + BuiltInNullableDataTypes.PartitionId ---> [decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestByteArray ---> [nullable longbinary] + BuiltInNullableDataTypes.TestNullableBoolean ---> [nullable varchar] [MaxLength = 1] + BuiltInNullableDataTypes.TestNullableByte ---> [nullable integer] + BuiltInNullableDataTypes.TestNullableCharacter ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableDateOnly ---> [nullable datetime] + BuiltInNullableDataTypes.TestNullableDateTime ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableDateTimeOffset ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableDecimal ---> [nullable varbinary] [MaxLength = 16] + BuiltInNullableDataTypes.TestNullableDouble ---> [nullable decimal] [Precision = 28 Scale = 17] + BuiltInNullableDataTypes.TestNullableInt16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableInt32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableSignedByte ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableSingle ---> [nullable decimal] [Precision = 28 Scale = 17] + BuiltInNullableDataTypes.TestNullableTimeOnly ---> [nullable datetime] + BuiltInNullableDataTypes.TestNullableTimeSpan ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableUnsignedInt16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableUnsignedInt32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableUnsignedInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestString ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.Enum16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.Enum32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.Enum64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.Enum8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.EnumS8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.EnumU16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.EnumU32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.EnumU64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.Id ---> [integer] + BuiltInNullableDataTypesShadow.PartitionId ---> [decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestByteArray ---> [nullable longbinary] + BuiltInNullableDataTypesShadow.TestNullableBoolean ---> [nullable varchar] [MaxLength = 1] + BuiltInNullableDataTypesShadow.TestNullableByte ---> [nullable integer] + BuiltInNullableDataTypesShadow.TestNullableCharacter ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableDateOnly ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableDateTime ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableDateTimeOffset ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableDecimal ---> [nullable varbinary] [MaxLength = 16] + BuiltInNullableDataTypesShadow.TestNullableDouble ---> [nullable decimal] [Precision = 28 Scale = 17] + BuiltInNullableDataTypesShadow.TestNullableInt16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableInt32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableSignedByte ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableSingle ---> [nullable decimal] [Precision = 28 Scale = 17] + BuiltInNullableDataTypesShadow.TestNullableTimeOnly ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableTimeSpan ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestString ---> [nullable varchar] [MaxLength = 255] + DateTimeEnclosure.DateTimeOffset ---> [nullable datetime] + DateTimeEnclosure.Id ---> [counter] + EmailTemplate.Id ---> [guid] + EmailTemplate.TemplateType ---> [integer] + MaxLengthDataTypes.ByteArray5 ---> [nullable varchar] [MaxLength = 8] + MaxLengthDataTypes.ByteArray9000 ---> [nullable longchar] + MaxLengthDataTypes.Id ---> [integer] + MaxLengthDataTypes.String3 ---> [nullable varbinary] [MaxLength = 3] + MaxLengthDataTypes.String9000 ---> [nullable longbinary] + MaxLengthDataTypes.StringUnbounded ---> [nullable longbinary] + StringEnclosure.Id ---> [counter] + StringEnclosure.Value ---> [nullable varchar] [MaxLength = 255] + StringForeignKeyDataType.Id ---> [integer] + StringForeignKeyDataType.StringKeyDataTypeId ---> [nullable varbinary] [MaxLength = 510] + StringKeyDataType.Id ---> [varbinary] [MaxLength = 510] + UnicodeDataTypes.Id ---> [integer] + UnicodeDataTypes.StringAnsi ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringAnsi3 ---> [nullable varchar] [MaxLength = 3] + UnicodeDataTypes.StringAnsi9000 ---> [nullable longchar] + UnicodeDataTypes.StringDefault ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringUnicode ---> [nullable varchar] [MaxLength = 255] + + """; + + Assert.Equal(expected, actual, ignoreLineEndingDifferences: true); + } + + public override async Task Can_insert_and_read_back_all_non_nullable_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new BuiltInDataTypes + { + Id = 1, + PartitionId = 1, + TestInt16 = -1234, + TestInt32 = -123456789, + TestInt64 = -1234567890123456789L, + TestDouble = -1.23456789, + TestDecimal = -1234567890.01M, + TestDateTime = DateTime.Parse("01/01/2000 12:34:56", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal), + TestDateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TestTimeSpan = new TimeSpan(0, 10, 9, 8, 0), + TestDateOnly = new DateOnly(2020, 3, 1), + TestTimeOnly = new TimeOnly(12, 30, 45, 0), + TestSingle = -1.234F, + TestBoolean = true, + TestByte = 255, + TestUnsignedInt16 = 1234, + TestUnsignedInt32 = 1234565789U, + TestUnsignedInt64 = 1234567890123456789UL, + TestCharacter = 'a', + TestSignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(e => e.Id == 1).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(BuiltInDataTypes)); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.TestInt16); + AssertEqualIfMapped(entityType, -123456789, () => dt.TestInt32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.TestInt64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.TestDouble); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.TestDecimal); + AssertEqualIfMapped( + entityType, DateTime.Parse("01/01/2000 12:34:56", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal), + () => dt.TestDateTime); + AssertEqualIfMapped( + entityType, new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + () => dt.TestDateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TestTimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.TestDateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TestTimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.TestSingle); + AssertEqualIfMapped(entityType, true, () => dt.TestBoolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.TestByte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.TestUnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.TestUnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.TestUnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.TestCharacter); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.TestSignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null() + { + using (var context = CreateContext()) + { + context.Set().Add( + new BuiltInNullableDataTypes + { + Id = 101, + PartitionId = 101, + TestString = "TestString", + TestByteArray = [10, 9, 8, 7, 6], + TestNullableInt16 = -1234, + TestNullableInt32 = -123456789, + TestNullableInt64 = -1234567890123456789L, + TestNullableDouble = -1.23456789, + TestNullableDecimal = -1234567890.01M, + TestNullableDateTime = DateTime.Parse("01/01/2000 12:34:56").ToUniversalTime(), + TestNullableDateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TestNullableDateOnly = new DateOnly(2020, 3, 1), + TestNullableTimeOnly = new TimeOnly(12, 30, 45, 0), + TestNullableTimeSpan = new TimeSpan(0, 10, 9, 8, 0), + TestNullableSingle = -1.234F, + TestNullableBoolean = false, + TestNullableByte = 255, + TestNullableUnsignedInt16 = 1234, + TestNullableUnsignedInt32 = 1234565789U, + TestNullableUnsignedInt64 = 1234567890123456789UL, + TestNullableCharacter = 'a', + TestNullableSignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(BuiltInNullableDataTypes)); + AssertEqualIfMapped(entityType, "TestString", () => dt.TestString); + AssertEqualIfMapped(entityType, [10, 9, 8, 7, 6], () => dt.TestByteArray); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.TestNullableInt16); + AssertEqualIfMapped(entityType, -123456789, () => dt.TestNullableInt32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.TestNullableInt64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.TestNullableDouble); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.TestNullableDecimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56").ToUniversalTime(), () => dt.TestNullableDateTime); + AssertEqualIfMapped( + entityType, new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + () => dt.TestNullableDateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TestNullableTimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.TestNullableDateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TestNullableTimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.TestNullableSingle); + AssertEqualIfMapped(entityType, false, () => dt.TestNullableBoolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.TestNullableByte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.TestNullableUnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.TestNullableUnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.TestNullableUnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.TestNullableCharacter); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.TestNullableSignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_object_backed_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new ObjectBackedDataTypes + { + Id = 101, + PartitionId = 101, + String = "TestString", + Bytes = [10, 9, 8, 7, 6], + Int16 = -1234, + Int32 = -123456789, + Int64 = -1234567890123456789L, + Double = -1.23456789, + Decimal = -1234567890.01M, + DateTime = DateTime.Parse("01/01/2000 12:34:56"), + DateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TimeSpan = new TimeSpan(0, 10, 9, 8, 0), + DateOnly = new DateOnly(2020, 3, 1), + TimeOnly = new TimeOnly(12, 30, 45, 0), + Single = -1.234F, + Boolean = false, + Byte = 255, + UnsignedInt16 = 1234, + UnsignedInt32 = 1234565789U, + UnsignedInt64 = 1234567890123456789UL, + Character = 'a', + SignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(ObjectBackedDataTypes)); + AssertEqualIfMapped(entityType, "TestString", () => dt.String); + AssertEqualIfMapped(entityType, [10, 9, 8, 7, 6], () => dt.Bytes); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.Int16); + AssertEqualIfMapped(entityType, -123456789, () => dt.Int32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.Double); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.Decimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.DateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.DateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.DateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.Single); + AssertEqualIfMapped(entityType, false, () => dt.Boolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.Byte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.UnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.UnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.UnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.Character); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.SignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_nullable_backed_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new NullableBackedDataTypes + { + Id = 101, + PartitionId = 101, + Int16 = -1234, + Int32 = -123456789, + Int64 = -1234567890123456789L, + Double = -1.23456789, + Decimal = -1234567890.01M, + DateTime = DateTime.Parse("01/01/2000 12:34:56"), + DateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TimeSpan = new TimeSpan(0, 10, 9, 8, 0), + DateOnly = new DateOnly(2020, 3, 1), + TimeOnly = new TimeOnly(12, 30, 45, 0), + Single = -1.234F, + Boolean = false, + Byte = 255, + UnsignedInt16 = 1234, + UnsignedInt32 = 1234565789U, + UnsignedInt64 = 1234567890123456789UL, + Character = 'a', + SignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(NullableBackedDataTypes)); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.Int16); + AssertEqualIfMapped(entityType, -123456789, () => dt.Int32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.Double); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.Decimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.DateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.DateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.DateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.Single); + AssertEqualIfMapped(entityType, false, () => dt.Boolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.Byte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.UnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.UnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.UnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.Character); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.SignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_non_nullable_backed_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new NonNullableBackedDataTypes + { + Id = 101, + PartitionId = 101, + Int16 = -1234, + Int32 = -123456789, + Int64 = -1234567890123456789L, + Double = -1.23456789, + Decimal = -1234567890.01M, + DateTime = DateTime.Parse("01/01/2000 12:34:56"), + DateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TimeSpan = new TimeSpan(0, 10, 9, 8, 0), + DateOnly = new DateOnly(2020, 3, 1), + TimeOnly = new TimeOnly(12, 30, 45, 0), + Single = -1.234F, + Boolean = true, + Byte = 255, + UnsignedInt16 = 1234, + UnsignedInt32 = 1234565789U, + UnsignedInt64 = 1234567890123456789UL, + Character = 'a', + SignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(NonNullableBackedDataTypes)); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.Int16); + AssertEqualIfMapped(entityType, -123456789, () => dt.Int32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.Double); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.Decimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.DateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.DateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.DateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.Single); + AssertEqualIfMapped(entityType, true, () => dt.Boolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.Byte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.UnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.UnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.UnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.Character); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.SignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_query_using_any_data_type() + { + using var context = CreateContext(); + var source = AddTestBuiltInDataTypes(context.Set()); + + Assert.Equal(1, await context.SaveChangesAsync()); + + QueryBuiltInDataTypesTest(source); + } + + public override async Task Can_query_using_any_data_type_shadow() + { + using var context = CreateContext(); + var source = AddTestBuiltInDataTypes(context.Set()); + + Assert.Equal(1, await context.SaveChangesAsync()); + + QueryBuiltInDataTypesTest(source); + } + + private void QueryBuiltInDataTypesTest(EntityEntry source) + where TEntity : BuiltInDataTypesBase + { + using var context = CreateContext(); + var set = context.Set(); + var entity = set.Where(e => e.Id == 11).ToList().Single(); + var entityType = context.Model.FindEntityType(typeof(TEntity)); + + var param1 = (short)-1234; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestInt16)) == param1).ToList().Single()); + + var param2 = -123456789; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestInt32)) == param2).ToList().Single()); + + var param3 = -1234567890123456789L; + if (Fixture.IntegerPrecision == 64) + { + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestInt64)) == param3).ToList().Single()); + } + + double? param4 = -1.23456789; + if (Fixture.StrictEquality) + { + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInDataTypes.TestDouble)) == param4).ToList().Single()); + } + else if (Fixture.SupportsDecimalComparisons) + { + double? param4l = -1.234567891; + double? param4h = -1.234567889; + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && (EF.Property(e, nameof(BuiltInDataTypes.TestDouble)) == param4 + || (EF.Property(e, nameof(BuiltInDataTypes.TestDouble)) > param4l + && EF.Property(e, nameof(BuiltInDataTypes.TestDouble)) < param4h))) + .ToList().Single()); + } + + var param5 = -1234567890.01M; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestDecimal)) == param5).ToList() + .Single()); + + var param6 = Fixture.DefaultDateTime; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestDateTime)) == param6).ToList() + .Single()); + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestDateTimeOffset)) != null) + { + var param7 = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(-8.0)); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestDateTimeOffset)) == param7) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestTimeSpan)) != null) + { + var param8 = new TimeSpan(0, 10, 9, 8, 7); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestTimeSpan)) == param8).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestDateOnly)) != null) + { + var param9 = new DateOnly(2020, 3, 1); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestDateOnly)) == param9).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestTimeOnly)) != null) + { + var param10 = new TimeOnly(12, 30, 45, 0); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestTimeOnly)) == param10).ToList() + .Single()); + } + + var param11 = -1.234F; + if (Fixture.StrictEquality) + { + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInDataTypes.TestSingle)) == param11).ToList().Single()); + } + else if (Fixture.SupportsDecimalComparisons) + { + var param11l = -1.2341F; + var param11h = -1.2339F; + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && (EF.Property(e, nameof(BuiltInDataTypes.TestSingle)) == param11 + || (EF.Property(e, nameof(BuiltInDataTypes.TestSingle)) > param11l + && EF.Property(e, nameof(BuiltInDataTypes.TestSingle)) < param11h))).ToList().Single()); + } + + var param12 = true; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestBoolean)) == param12).ToList().Single()); + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestByte)) != null) + { + var param13 = (byte)255; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestByte)) == param13).ToList().Single()); + } + + var param14 = Enum64.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum64)) == param14).ToList().Single()); + + var param15 = Enum32.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum32)) == param15).ToList().Single()); + + var param16 = Enum16.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum16)) == param16).ToList().Single()); + + if (entityType.FindProperty(nameof(BuiltInDataTypes.Enum8)) != null) + { + var param17 = Enum8.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum8)) == param17).ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestUnsignedInt16)) != null) + { + var param18 = (ushort)1234; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestUnsignedInt16)) == param18).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestUnsignedInt32)) != null) + { + var param19 = 1234565789U; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestUnsignedInt32)) == param19).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestUnsignedInt64)) != null) + { + var param20 = 1234567890123456789UL; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestUnsignedInt64)) == param20).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestCharacter)) != null) + { + var param21 = 'a'; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestCharacter)) == param21).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.TestSignedByte)) != null) + { + var param22 = (sbyte)-128; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestSignedByte)) == param22).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.EnumU64)) != null) + { + var param23 = EnumU64.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.EnumU64)) == param23).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.EnumU32)) != null) + { + var param24 = EnumU32.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.EnumU32)) == param24).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.EnumU16)) != null) + { + var param25 = EnumU16.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.EnumU16)) == param25).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInDataTypes.EnumS8)) != null) + { + var param26 = EnumS8.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.EnumS8)) == param26).ToList().Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInDataTypes.Enum64))?.GetProviderClrType()) == typeof(long)) + { + var param27 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum64)) == (Enum64)param27).ToList() + .Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInDataTypes.Enum64)) == param27).ToList() + .Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInDataTypes.Enum32))?.GetProviderClrType()) == typeof(int)) + { + var param28 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum32)) == (Enum32)param28).ToList() + .Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInDataTypes.Enum32)) == param28).ToList() + .Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInDataTypes.Enum16))?.GetProviderClrType()) == typeof(short)) + { + var param29 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum16)) == (Enum16)param29).ToList() + .Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInDataTypes.Enum16)) == param29).ToList() + .Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInDataTypes.Enum8))?.GetProviderClrType()) == typeof(byte)) + { + var param30 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.Enum8)) == (Enum8)param30).ToList() + .Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInDataTypes.Enum8)) == param30).ToList() + .Single()); + } + + foreach (var propertyEntry in context.Entry(entity).Properties) + { + if (propertyEntry.Metadata.ValueGenerated != ValueGenerated.Never) + { + continue; + } + + Assert.Equal( + source.Property(propertyEntry.Metadata).CurrentValue, + propertyEntry.CurrentValue); + } + } + + protected new EntityEntry AddTestBuiltInDataTypes(DbSet set) + where TEntity : BuiltInDataTypesBase, new() + { + var entityEntry = set.Add( + new TEntity { Id = 11 }); + + entityEntry.CurrentValues.SetValues( + new BuiltInDataTypes + { + Id = 11, + PartitionId = 1, + TestInt16 = -1234, + TestInt32 = -123456789, + TestInt64 = -1234567890123456789L, + TestDouble = -1.23456789, + TestDecimal = -1234567890.01M, + TestDateTime = Fixture.DefaultDateTime, + TestDateTimeOffset = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(-8.0)), + TestTimeSpan = new TimeSpan(0, 10, 9, 8, 7), + TestDateOnly = new DateOnly(2020, 3, 1), + TestTimeOnly = new TimeOnly(12, 30, 45, 0), + TestSingle = -1.234F, + TestBoolean = true, + TestByte = 255, + TestUnsignedInt16 = 1234, + TestUnsignedInt32 = 1234565789U, + TestUnsignedInt64 = 1234567890123456789UL, + TestCharacter = 'a', + TestSignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + return entityEntry; + } + + public override async Task Can_query_using_any_nullable_data_type() + { + using var context = CreateContext(); + var source = AddTestBuiltInNullableDataTypes(context.Set()); + + Assert.Equal(1, await context.SaveChangesAsync()); + + QueryBuiltInNullableDataTypesTest(source); + } + + public override async Task Can_query_using_any_data_type_nullable_shadow() + { + using var context = CreateContext(); + var source = AddTestBuiltInNullableDataTypes(context.Set()); + + Assert.Equal(1, await context.SaveChangesAsync()); + + QueryBuiltInNullableDataTypesTest(source); + } + + private void QueryBuiltInNullableDataTypesTest(EntityEntry source) + where TEntity : BuiltInNullableDataTypesBase + { + using var context = CreateContext(); + var set = context.Set(); + var entity = set.Where(e => e.Id == 11).ToList().Single(); + var entityType = context.Model.FindEntityType(typeof(TEntity)); + + short? param1 = -1234; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableInt16)) == param1) + .ToList().Single()); + + int? param2 = -123456789; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableInt32)) == param2) + .ToList().Single()); + + long? param3 = -1234567890123456789L; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableInt64)) == param3) + .ToList().Single()); + + double? param4 = -1.23456789; + if (Fixture.StrictEquality) + { + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDouble)) == param4).ToList() + .Single()); + } + else if (Fixture.SupportsDecimalComparisons) + { + double? param4l = -1.234567891; + double? param4h = -1.234567889; + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && (EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDouble)) == param4 + || (EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDouble)) > param4l + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDouble)) < param4h))) + .ToList().Single()); + } + + decimal? param5 = -1234567890.01M; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDecimal)) == param5) + .ToList().Single()); + + DateTime? param6 = Fixture.DefaultDateTime; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDateTime)) == param6) + .ToList().Single()); + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableDateTimeOffset)) != null) + { + DateTimeOffset? param7 = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(-8.0)); + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDateTimeOffset)) + == param7).ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableTimeSpan)) != null) + { + TimeSpan? param8 = new TimeSpan(0, 10, 9, 8, 7); + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableTimeSpan)) + == param8) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableDateOnly)) != null) + { + DateOnly? param9 = new DateOnly(2020, 3, 1); + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableDateOnly)) + == param9) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableTimeOnly)) != null) + { + TimeOnly? param10 = new TimeOnly(12, 30, 45, 0); + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableTimeOnly)) + == param10) + .ToList().Single()); + } + + float? param11 = -1.234F; + if (Fixture.StrictEquality) + { + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSingle)) == param11).ToList() + .Single()); + } + else if (Fixture.SupportsDecimalComparisons) + { + float? param11l = -1.2341F; + float? param11h = -1.2339F; + Assert.Same( + entity, set.Where( + e => e.Id == 11 + && (EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSingle)) == param11 + || (EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSingle)) > param11l + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSingle)) < param11h))) + .ToList().Single()); + } + + bool? param12 = true; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableBoolean)) == param12) + .ToList().Single()); + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableByte)) != null) + { + byte? param13 = 255; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableByte)) == param13) + .ToList().Single()); + } + + Enum64? param14 = Enum64.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum64)) == param14).ToList() + .Single()); + + Enum32? param15 = Enum32.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum32)) == param15).ToList() + .Single()); + + Enum16? param16 = Enum16.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum16)) == param16).ToList() + .Single()); + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum8)) != null) + { + Enum8? param17 = Enum8.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum8)) == param17).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt16)) != null) + { + ushort? param18 = 1234; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt16)) + == param18).ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt32)) != null) + { + uint? param19 = 1234565789U; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt32)) + == param19) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt64)) != null) + { + ulong? param20 = 1234567890123456789UL; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property( + e, nameof(BuiltInNullableDataTypes.TestNullableUnsignedInt64)) + == param20).ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableCharacter)) != null) + { + char? param21 = 'a'; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableCharacter)) == param21) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.TestNullableSignedByte)) != null) + { + sbyte? param22 = -128; + Assert.Same( + entity, + set.Where( + e => e.Id == 11 + && EF.Property(e, nameof(BuiltInNullableDataTypes.TestNullableSignedByte)) + == param22) + .ToList().Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumU64)) != null) + { + var param23 = EnumU64.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.EnumU64)) == param23).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumU32)) != null) + { + var param24 = EnumU32.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.EnumU32)) == param24).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumU16)) != null) + { + var param25 = EnumU16.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.EnumU16)) == param25).ToList() + .Single()); + } + + if (entityType.FindProperty(nameof(BuiltInNullableDataTypes.EnumS8)) != null) + { + var param26 = EnumS8.SomeValue; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.EnumS8)) == param26).ToList() + .Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum64))?.GetProviderClrType()) + == typeof(long)) + { + int? param27 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum64)) == (Enum64)param27) + .ToList().Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInNullableDataTypes.Enum64)) == param27) + .ToList().Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum32))?.GetProviderClrType()) + == typeof(int)) + { + int? param28 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum32)) == (Enum32)param28) + .ToList().Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInNullableDataTypes.Enum32)) == param28) + .ToList().Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum16))?.GetProviderClrType()) + == typeof(short)) + { + int? param29 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum16)) == (Enum16)param29) + .ToList().Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInNullableDataTypes.Enum16)) == param29) + .ToList().Single()); + } + + if (UnwrapNullableType(entityType.FindProperty(nameof(BuiltInNullableDataTypes.Enum8))?.GetProviderClrType()) + == typeof(byte)) + { + int? param30 = 1; + Assert.Same( + entity, + set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInNullableDataTypes.Enum8)) == (Enum8)param30) + .ToList().Single()); + Assert.Same( + entity, + set.Where(e => e.Id == 11 && (int)EF.Property(e, nameof(BuiltInNullableDataTypes.Enum8)) == param30) + .ToList().Single()); + } + + foreach (var propertyEntry in context.Entry(entity).Properties) + { + if (propertyEntry.Metadata.ValueGenerated != ValueGenerated.Never) + { + continue; + } + + Assert.Equal( + source.Property(propertyEntry.Metadata).CurrentValue, + propertyEntry.CurrentValue); + } + } + + protected new virtual EntityEntry AddTestBuiltInNullableDataTypes(DbSet set) + where TEntity : BuiltInNullableDataTypesBase, new() + { + var entityEntry = set.Add( + new TEntity { Id = 11 }); + + entityEntry.CurrentValues.SetValues( + new BuiltInNullableDataTypes + { + Id = 11, + PartitionId = 1, + TestNullableInt16 = -1234, + TestNullableInt32 = -123456789, + TestNullableInt64 = -1234567890123456789L, + TestNullableDouble = -1.23456789, + TestNullableDecimal = -1234567890.01M, + TestNullableDateTime = Fixture.DefaultDateTime, + TestNullableDateTimeOffset = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(-8.0)), + TestNullableTimeSpan = new TimeSpan(0, 10, 9, 8, 7), + TestNullableDateOnly = new DateOnly(2020, 3, 1), + TestNullableTimeOnly = new TimeOnly(12, 30, 45, 0), + TestNullableSingle = -1.234F, + TestNullableBoolean = true, + TestNullableByte = 255, + TestNullableUnsignedInt16 = 1234, + TestNullableUnsignedInt32 = 1234565789U, + TestNullableUnsignedInt64 = 1234567890123456789UL, + TestNullableCharacter = 'a', + TestNullableSignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + return entityEntry; + } + + + + private void AssertEqualIfMapped(IEntityType entityType, T expected, Expression> actualExpression) + { + if (entityType.FindProperty(((MemberExpression)actualExpression.Body).Member.Name) != null) + { + var actual = actualExpression.Compile()(); + var type = UnwrapNullableEnumType(typeof(T)); + if (IsSignedInteger(type)) + { + Assert.True(Equal(Convert.ToInt64(expected), Convert.ToInt64(actual)), $"Expected:\t{expected}\r\nActual:\t{actual}"); + } + else if (IsUnsignedInteger(type)) + { + Assert.True(Equal(Convert.ToUInt64(expected), Convert.ToUInt64(actual)), $"Expected:\t{expected}\r\nActual:\t{actual}"); + } + else if (type == typeof(DateTime)) + { + Assert.True( + Equal((DateTime)(object)expected, (DateTime)(object)actual), $"Expected:\t{expected:O}\r\nActual:\t{actual:O}"); + } + else if (type == typeof(DateTimeOffset)) + { + Assert.True( + Equal((DateTimeOffset)(object)expected, (DateTimeOffset)(object)actual), + $"Expected:\t{expected:O}\r\nActual:\t{actual:O}"); + } + else + { + Assert.Equal(expected, actual); + } + } + } + + private bool Equal(long left, long right) + { + if (left >= 0 + && right >= 0) + { + return Equal((ulong)left, (ulong)right); + } + + if (left < 0 + && right < 0) + { + return Equal((ulong)-left, (ulong)-right); + } + + return false; + } + + private bool Equal(ulong left, ulong right) + { + if (Fixture.IntegerPrecision < 64) + { + var largestPrecise = 1ul << Fixture.IntegerPrecision; + while (left > largestPrecise) + { + left >>= 1; + right >>= 1; + } + } + + return left == right; + } + + private bool Equal(DateTime left, DateTime right) + => left.Equals(right) && (!Fixture.PreservesDateTimeKind || left.Kind == right.Kind); + + private bool Equal(DateTimeOffset left, DateTimeOffset right) + => left.EqualsExact(right); + + private static Type UnwrapNullableType(Type type) + => type == null ? null : Nullable.GetUnderlyingType(type) ?? type; + + private static bool IsSignedInteger(Type type) + => type == typeof(int) + || type == typeof(long) + || type == typeof(short) + || type == typeof(sbyte); + + private static bool IsUnsignedInteger(Type type) + => type == typeof(byte) + || type == typeof(uint) + || type == typeof(ulong) + || type == typeof(ushort) + || type == typeof(char); + + public class ConvertToProviderTypesLibRedFixture : ConvertToProviderTypesFixtureBase + { + public override bool StrictEquality => true; + + public override bool SupportsAnsi => false; + + public override bool SupportsUnicodeToAnsiConversion => false; + + public override bool SupportsLargeStringComparisons => true; + + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + public override bool SupportsBinaryKeys => true; + + public override bool SupportsDecimalComparisons => true; + + public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind { get; } + + public override string ReallyLargeString + => string.Join("", Enumerable.Repeat("testphrase", 25)); + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base + .AddOptions(builder) + .ConfigureWarnings( + c => c.Log(JetEventId.DecimalTypeDefaultWarning)); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(e => e.Enum8).IsFixedLength(); + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/CustomConvertersLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/CustomConvertersLibRedTest.cs new file mode 100644 index 00000000..eb810b6c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/CustomConvertersLibRedTest.cs @@ -0,0 +1,713 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class CustomConvertersLibRedTest : CustomConvertersTestBase + { + public CustomConvertersLibRedTest(CustomConvertersLibRedFixture fixture) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + } + + [ConditionalFact] + public virtual void Columns_have_expected_data_types() + { + var actual = BuiltInDataTypesLibRedTest.QueryForColumnTypes( + CreateContext(), + nameof(ObjectBackedDataTypes), nameof(NullableBackedDataTypes), nameof(NonNullableBackedDataTypes)); + + const string expected = """ + #Dual.ID ---> [integer] + Animal.Id ---> [counter] + AnimalDetails.AnimalId ---> [nullable integer] + AnimalDetails.BoolField ---> [integer] + AnimalDetails.Id ---> [counter] + AnimalIdentification.AnimalId ---> [integer] + AnimalIdentification.Id ---> [counter] + AnimalIdentification.Method ---> [integer] + BinaryForeignKeyDataType.BinaryKeyDataTypeId ---> [nullable varbinary] [MaxLength = 510] + BinaryForeignKeyDataType.Id ---> [integer] + BinaryKeyDataType.Ex ---> [nullable varchar] [MaxLength = 255] + BinaryKeyDataType.Id ---> [varbinary] [MaxLength = 510] + Blog.BlogId ---> [counter] + Blog.Discriminator ---> [varchar] [MaxLength = 8] + Blog.IndexerVisible ---> [varchar] [MaxLength = 3] + Blog.IsVisible ---> [varchar] [MaxLength = 1] + Blog.RssUrl ---> [nullable varchar] [MaxLength = 255] + Blog.Url ---> [nullable varchar] [MaxLength = 255] + Book.Id ---> [integer] + Book.Value ---> [nullable varchar] [MaxLength = 255] + BuiltInDataTypes.Enum16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Enum32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Enum64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Enum8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.EnumS8 ---> [varchar] [MaxLength = 24] + BuiltInDataTypes.EnumU16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.EnumU32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.EnumU64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.Id ---> [integer] + BuiltInDataTypes.PartitionId ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestBoolean ---> [char] [MaxLength = 4] + BuiltInDataTypes.TestByte ---> [integer] + BuiltInDataTypes.TestCharacter ---> [integer] + BuiltInDataTypes.TestDateOnly ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.TestDateTime ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestDateTimeOffset ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestDecimal ---> [varbinary] [MaxLength = 16] + BuiltInDataTypes.TestDouble ---> [decimal] [Precision = 26 Scale = 16] + BuiltInDataTypes.TestInt16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestSignedByte ---> [decimal] [Precision = 18 Scale = 2] + BuiltInDataTypes.TestSingle ---> [double] + BuiltInDataTypes.TestTimeOnly ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestTimeSpan ---> [double] + BuiltInDataTypes.TestUnsignedInt16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestUnsignedInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypes.TestUnsignedInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Enum8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.EnumS8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.EnumU16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.EnumU32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.EnumU64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.Id ---> [integer] + BuiltInDataTypesShadow.PartitionId ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestBoolean ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.TestByte ---> [integer] + BuiltInDataTypesShadow.TestCharacter ---> [integer] + BuiltInDataTypesShadow.TestDateOnly ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.TestDateTime ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestDateTimeOffset ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestDecimal ---> [varbinary] [MaxLength = 16] + BuiltInDataTypesShadow.TestDouble ---> [decimal] [Precision = 26 Scale = 16] + BuiltInDataTypesShadow.TestInt16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestSignedByte ---> [decimal] [Precision = 18 Scale = 2] + BuiltInDataTypesShadow.TestSingle ---> [double] + BuiltInDataTypesShadow.TestTimeOnly ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestTimeSpan ---> [double] + BuiltInDataTypesShadow.TestUnsignedInt16 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestUnsignedInt32 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInDataTypesShadow.TestUnsignedInt64 ---> [decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Enum8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.EnumS8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.EnumU16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.EnumU32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.EnumU64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.Id ---> [integer] + BuiltInNullableDataTypes.PartitionId ---> [decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestByteArray ---> [nullable longbinary] + BuiltInNullableDataTypes.TestNullableBoolean ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.TestNullableByte ---> [nullable integer] + BuiltInNullableDataTypes.TestNullableCharacter ---> [nullable integer] + BuiltInNullableDataTypes.TestNullableDateOnly ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.TestNullableDateTime ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableDateTimeOffset ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableDecimal ---> [nullable varbinary] [MaxLength = 16] + BuiltInNullableDataTypes.TestNullableDouble ---> [nullable decimal] [Precision = 26 Scale = 16] + BuiltInNullableDataTypes.TestNullableInt16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableInt32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableSignedByte ---> [nullable decimal] [Precision = 18 Scale = 2] + BuiltInNullableDataTypes.TestNullableSingle ---> [nullable double] + BuiltInNullableDataTypes.TestNullableTimeOnly ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableTimeSpan ---> [nullable double] + BuiltInNullableDataTypes.TestNullableUnsignedInt16 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableUnsignedInt32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestNullableUnsignedInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypes.TestString ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.Enum16 ---> [nullable smallint] + BuiltInNullableDataTypesShadow.Enum32 ---> [nullable integer] + BuiltInNullableDataTypesShadow.Enum64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.Enum8 ---> [nullable byte] + BuiltInNullableDataTypesShadow.EnumS8 ---> [nullable smallint] + BuiltInNullableDataTypesShadow.EnumU16 ---> [nullable integer] + BuiltInNullableDataTypesShadow.EnumU32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.EnumU64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.Id ---> [integer] + BuiltInNullableDataTypesShadow.PartitionId ---> [integer] + BuiltInNullableDataTypesShadow.TestByteArray ---> [nullable longbinary] + BuiltInNullableDataTypesShadow.TestNullableBoolean ---> [nullable smallint] + BuiltInNullableDataTypesShadow.TestNullableByte ---> [nullable byte] + BuiltInNullableDataTypesShadow.TestNullableCharacter ---> [nullable varchar] [MaxLength = 1] + BuiltInNullableDataTypesShadow.TestNullableDateOnly ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableDateTime ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableDateTimeOffset ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableDecimal ---> [nullable decimal] [Precision = 18 Scale = 2] + BuiltInNullableDataTypesShadow.TestNullableDouble ---> [nullable double] + BuiltInNullableDataTypesShadow.TestNullableInt16 ---> [nullable smallint] + BuiltInNullableDataTypesShadow.TestNullableInt32 ---> [nullable integer] + BuiltInNullableDataTypesShadow.TestNullableInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableSignedByte ---> [nullable smallint] + BuiltInNullableDataTypesShadow.TestNullableSingle ---> [nullable single] + BuiltInNullableDataTypesShadow.TestNullableTimeOnly ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableTimeSpan ---> [nullable datetime] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt16 ---> [nullable integer] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt32 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt64 ---> [nullable decimal] [Precision = 20 Scale = 0] + BuiltInNullableDataTypesShadow.TestString ---> [nullable varchar] [MaxLength = 255] + CollectionEnum.Id ---> [counter] + CollectionEnum.Roles ---> [nullable varchar] [MaxLength = 255] + CollectionScalar.Id ---> [counter] + CollectionScalar.Tags ---> [nullable varchar] [MaxLength = 255] + Dashboard.Id ---> [counter] + Dashboard.Layouts ---> [nullable varchar] [MaxLength = 255] + Dashboard.Name ---> [nullable varchar] [MaxLength = 255] + DateTimeEnclosure.DateTimeOffset ---> [nullable datetime] + DateTimeEnclosure.Id ---> [counter] + EmailTemplate.Id ---> [guid] + EmailTemplate.TemplateType ---> [integer] + Entity.Id ---> [counter] + Entity.SomeEnum ---> [varchar] [MaxLength = 255] + EntityWithValueWrapper.Id ---> [counter] + EntityWithValueWrapper.Wrapper ---> [nullable varchar] [MaxLength = 255] + HolderClass.HoldingEnum ---> [integer] + HolderClass.Id ---> [counter] + Load.Fuel ---> [double] + Load.LoadId ---> [integer] + MaxLengthDataTypes.ByteArray5 ---> [nullable varbinary] [MaxLength = 7] + MaxLengthDataTypes.ByteArray9000 ---> [nullable longchar] + MaxLengthDataTypes.Id ---> [integer] + MaxLengthDataTypes.String3 ---> [nullable varchar] [MaxLength = 12] + MaxLengthDataTypes.String9000 ---> [nullable longbinary] + MaxLengthDataTypes.StringUnbounded ---> [nullable longbinary] + NonNullableDependent.Id ---> [integer] + NonNullableDependent.PrincipalId ---> [integer] + NullablePrincipal.Id ---> [integer] + Order.Id ---> [varchar] [MaxLength = 255] + Parent.Id ---> [counter] + Parent.OwnedWithConverter_Value ---> [nullable varchar] [MaxLength = 64] + Person.Id ---> [integer] + Person.Name ---> [nullable varchar] [MaxLength = 255] + Person.SSN ---> [nullable integer] + Post.BlogId ---> [nullable integer] + Post.PostId ---> [counter] + SimpleCounter.CounterId ---> [integer] + SimpleCounter.Discriminator ---> [nullable varchar] [MaxLength = 255] + SimpleCounter.IsTest ---> [smallint] + SimpleCounter.StyleKey ---> [nullable varchar] [MaxLength = 255] + StringEnclosure.Id ---> [counter] + StringEnclosure.Value ---> [nullable varchar] [MaxLength = 255] + StringForeignKeyDataType.Id ---> [integer] + StringForeignKeyDataType.StringKeyDataTypeId ---> [nullable varchar] [MaxLength = 255] + StringKeyDataType.Id ---> [varchar] [MaxLength = 255] + StringListDataType.Id ---> [integer] + StringListDataType.Strings ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.Id ---> [integer] + UnicodeDataTypes.StringAnsi ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringAnsi3 ---> [nullable varchar] [MaxLength = 3] + UnicodeDataTypes.StringAnsi9000 ---> [nullable longchar] + UnicodeDataTypes.StringDefault ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringUnicode ---> [nullable varchar] [MaxLength = 255] + User.Email ---> [nullable varchar] [MaxLength = 255] + User.Id ---> [guid] + User23059.Id ---> [counter] + User23059.IsSoftDeleted ---> [smallint] + User23059.MessageGroups ---> [nullable varchar] [MaxLength = 255] + + """; + + Assert.Equal(expected, actual, ignoreLineEndingDifferences: true); + } + + public override async Task Can_insert_and_read_back_object_backed_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new ObjectBackedDataTypes + { + Id = 101, + PartitionId = 101, + String = "TestString", + Bytes = [10, 9, 8, 7, 6], + Int16 = -1234, + Int32 = -123456789, + Int64 = -1234567890123456789L, + Double = -1.23456789, + Decimal = -1234567890.01M, + DateTime = DateTime.Parse("01/01/2000 12:34:56"), + DateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TimeSpan = new TimeSpan(0, 10, 9, 8, 0), + DateOnly = new DateOnly(2020, 3, 1), + TimeOnly = new TimeOnly(12, 30, 45, 0), + Single = -1.234F, + Boolean = false, + Byte = 255, + UnsignedInt16 = 1234, + UnsignedInt32 = 1234565789U, + UnsignedInt64 = 1234567890123456789UL, + Character = 'a', + SignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(ObjectBackedDataTypes)); + AssertEqualIfMapped(entityType, "TestString", () => dt.String); + AssertEqualIfMapped(entityType, [10, 9, 8, 7, 6], () => dt.Bytes); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.Int16); + AssertEqualIfMapped(entityType, -123456789, () => dt.Int32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.Double); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.Decimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.DateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.DateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.DateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.Single); + AssertEqualIfMapped(entityType, false, () => dt.Boolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.Byte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.UnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.UnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.UnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.Character); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.SignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_nullable_backed_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new NullableBackedDataTypes + { + Id = 101, + PartitionId = 101, + Int16 = -1234, + Int32 = -123456789, + Int64 = -1234567890123456789L, + Double = -1.23456789, + Decimal = -1234567890.01M, + DateTime = DateTime.Parse("01/01/2000 12:34:56"), + DateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TimeSpan = new TimeSpan(0, 10, 9, 8, 0), + DateOnly = new DateOnly(2020, 3, 1), + TimeOnly = new TimeOnly(12, 30, 45, 0), + Single = -1.234F, + Boolean = false, + Byte = 255, + UnsignedInt16 = 1234, + UnsignedInt32 = 1234565789U, + UnsignedInt64 = 1234567890123456789UL, + Character = 'a', + SignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(NullableBackedDataTypes)); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.Int16); + AssertEqualIfMapped(entityType, -123456789, () => dt.Int32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.Double); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.Decimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.DateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.DateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.DateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.Single); + AssertEqualIfMapped(entityType, false, () => dt.Boolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.Byte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.UnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.UnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.UnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.Character); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.SignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + public override async Task Can_insert_and_read_back_non_nullable_backed_data_types() + { + using (var context = CreateContext()) + { + context.Set().Add( + new NonNullableBackedDataTypes + { + Id = 101, + PartitionId = 101, + Int16 = -1234, + Int32 = -123456789, + Int64 = -1234567890123456789L, + Double = -1.23456789, + Decimal = -1234567890.01M, + DateTime = DateTime.Parse("01/01/2000 12:34:56"), + DateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + TimeSpan = new TimeSpan(0, 10, 9, 8, 0), + DateOnly = new DateOnly(2020, 3, 1), + TimeOnly = new TimeOnly(12, 30, 45, 0), + Single = -1.234F, + Boolean = true, + Byte = 255, + UnsignedInt16 = 1234, + UnsignedInt32 = 1234565789U, + UnsignedInt64 = 1234567890123456789UL, + Character = 'a', + SignedByte = -128, + Enum64 = Enum64.SomeValue, + Enum32 = Enum32.SomeValue, + Enum16 = Enum16.SomeValue, + Enum8 = Enum8.SomeValue, + EnumU64 = EnumU64.SomeValue, + EnumU32 = EnumU32.SomeValue, + EnumU16 = EnumU16.SomeValue, + EnumS8 = EnumS8.SomeValue + }); + + Assert.Equal(1, await context.SaveChangesAsync()); + } + + using (var context = CreateContext()) + { + var dt = context.Set().Where(ndt => ndt.Id == 101).ToList().Single(); + + var entityType = context.Model.FindEntityType(typeof(NonNullableBackedDataTypes)); + AssertEqualIfMapped(entityType, (short)-1234, () => dt.Int16); + AssertEqualIfMapped(entityType, -123456789, () => dt.Int32); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.Int64); + AssertEqualIfMapped(entityType, -1.23456789, () => dt.Double); + AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.Decimal); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.DateTime); + AssertEqualIfMapped( + entityType, LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0))), + () => dt.DateTimeOffset); + AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 0), () => dt.TimeSpan); + AssertEqualIfMapped(entityType, new DateOnly(2020, 3, 1), () => dt.DateOnly); + AssertEqualIfMapped(entityType, new TimeOnly(12, 30, 45, 0), () => dt.TimeOnly); + AssertEqualIfMapped(entityType, -1.234F, () => dt.Single); + AssertEqualIfMapped(entityType, true, () => dt.Boolean); + AssertEqualIfMapped(entityType, (byte)255, () => dt.Byte); + AssertEqualIfMapped(entityType, Enum64.SomeValue, () => dt.Enum64); + AssertEqualIfMapped(entityType, Enum32.SomeValue, () => dt.Enum32); + AssertEqualIfMapped(entityType, Enum16.SomeValue, () => dt.Enum16); + AssertEqualIfMapped(entityType, Enum8.SomeValue, () => dt.Enum8); + AssertEqualIfMapped(entityType, (ushort)1234, () => dt.UnsignedInt16); + AssertEqualIfMapped(entityType, 1234565789U, () => dt.UnsignedInt32); + AssertEqualIfMapped(entityType, 1234567890123456789UL, () => dt.UnsignedInt64); + AssertEqualIfMapped(entityType, 'a', () => dt.Character); + AssertEqualIfMapped(entityType, (sbyte)-128, () => dt.SignedByte); + AssertEqualIfMapped(entityType, EnumU64.SomeValue, () => dt.EnumU64); + AssertEqualIfMapped(entityType, EnumU32.SomeValue, () => dt.EnumU32); + AssertEqualIfMapped(entityType, EnumU16.SomeValue, () => dt.EnumU16); + AssertEqualIfMapped(entityType, EnumS8.SomeValue, () => dt.EnumS8); + } + } + + private void AssertEqualIfMapped(IEntityType entityType, T expected, Expression> actualExpression) + { + if (entityType.FindProperty(((MemberExpression)actualExpression.Body).Member.Name) != null) + { + var actual = actualExpression.Compile()(); + var type = UnwrapNullableEnumType(typeof(T)); + if (IsSignedInteger(type)) + { + Assert.True(Equal(Convert.ToInt64(expected), Convert.ToInt64(actual)), $"Expected:\t{expected}\r\nActual:\t{actual}"); + } + else if (IsUnsignedInteger(type)) + { + Assert.True(Equal(Convert.ToUInt64(expected), Convert.ToUInt64(actual)), $"Expected:\t{expected}\r\nActual:\t{actual}"); + } + else if (type == typeof(DateTime)) + { + Assert.True( + Equal((DateTime)(object)expected, (DateTime)(object)actual), $"Expected:\t{expected:O}\r\nActual:\t{actual:O}"); + } + else if (type == typeof(DateTimeOffset)) + { + Assert.True( + Equal((DateTimeOffset)(object)expected, (DateTimeOffset)(object)actual), + $"Expected:\t{expected:O}\r\nActual:\t{actual:O}"); + } + else + { + Assert.Equal(expected, actual); + } + } + } + + private bool Equal(long left, long right) + { + if (left >= 0 + && right >= 0) + { + return Equal((ulong)left, (ulong)right); + } + + if (left < 0 + && right < 0) + { + return Equal((ulong)-left, (ulong)-right); + } + + return false; + } + + private bool Equal(ulong left, ulong right) + { + if (Fixture.IntegerPrecision < 64) + { + var largestPrecise = 1ul << Fixture.IntegerPrecision; + while (left > largestPrecise) + { + left >>= 1; + right >>= 1; + } + } + + return left == right; + } + + private bool Equal(DateTime left, DateTime right) + => left.Equals(right) && (!Fixture.PreservesDateTimeKind || left.Kind == right.Kind); + + private bool Equal(DateTimeOffset left, DateTimeOffset right) + => left.EqualsExact(right); + + private static Type UnwrapNullableType(Type type) + => type == null ? null : Nullable.GetUnderlyingType(type) ?? type; + + private static bool IsSignedInteger(Type type) + => type == typeof(int) + || type == typeof(long) + || type == typeof(short) + || type == typeof(sbyte); + + private static bool IsUnsignedInteger(Type type) + => type == typeof(byte) + || type == typeof(uint) + || type == typeof(ulong) + || type == typeof(ushort) + || type == typeof(char); + + [ConditionalFact] + public override async Task Value_conversion_is_appropriately_used_for_join_condition() + { + await base.Value_conversion_is_appropriately_used_for_join_condition(); + + AssertSql( + """ +@__blogId_0='1' + +SELECT [b].[Url] +FROM [Blog] AS [b] +INNER JOIN [Post] AS [p] ON [b].[BlogId] = [p].[BlogId] AND [b].[IsVisible] = N'Y' AND [b].[BlogId] = @__blogId_0 +WHERE [b].[IsVisible] = N'Y' +"""); + } + + [ConditionalFact] + public override async Task Value_conversion_is_appropriately_used_for_left_join_condition() + { + await base.Value_conversion_is_appropriately_used_for_left_join_condition(); + + AssertSql( + """ +@__blogId_0='1' + +SELECT [b].[Url] +FROM [Blog] AS [b] +LEFT JOIN [Post] AS [p] ON [b].[BlogId] = [p].[BlogId] AND [b].[IsVisible] = N'Y' AND [b].[BlogId] = @__blogId_0 +WHERE [b].[IsVisible] = N'Y' +"""); + } + + [ConditionalFact] + public override async Task Where_bool_gets_converted_to_equality_when_value_conversion_is_used() + { + await base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used(); + + AssertSql( + """ +SELECT `b`.`BlogId`, `b`.`Discriminator`, `b`.`IndexerVisible`, `b`.`IsVisible`, `b`.`Url`, `b`.`RssUrl` +FROM `Blog` AS `b` +WHERE `b`.`IsVisible` = 'Y' +"""); + } + + [ConditionalFact] + public override async Task Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used() + { + await base.Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used(); + + AssertSql( + """ +SELECT `b`.`BlogId`, `b`.`Discriminator`, `b`.`IndexerVisible`, `b`.`IsVisible`, `b`.`Url`, `b`.`RssUrl` +FROM `Blog` AS `b` +WHERE `b`.`IsVisible` = 'N' +"""); + } + + public override async Task Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty() + { + await base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty(); + + AssertSql( + """ +SELECT `b`.`BlogId`, `b`.`Discriminator`, `b`.`IndexerVisible`, `b`.`IsVisible`, `b`.`Url`, `b`.`RssUrl` +FROM `Blog` AS `b` +WHERE `b`.`IsVisible` = 'Y' +"""); + } + + public override async Task Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer() + { + await base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer(); + + AssertSql( + """ +SELECT `b`.`BlogId`, `b`.`Discriminator`, `b`.`IndexerVisible`, `b`.`IsVisible`, `b`.`Url`, `b`.`RssUrl` +FROM `Blog` AS `b` +WHERE `b`.`IndexerVisible` = 'Nay' +"""); + } + + public override Task Object_to_string_conversion() + // Return values are not string + => Task.CompletedTask; + + public override async Task Id_object_as_entity_key() + { + await base.Id_object_as_entity_key(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Value` +FROM `Book` AS `b` +WHERE `b`.`Id` = 1 +"""); + } + + public override void Infer_type_mapping_from_in_subquery_to_item() + { + base.Infer_type_mapping_from_in_subquery_to_item(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Enum16`, `b`.`Enum32`, `b`.`Enum64`, `b`.`Enum8`, `b`.`EnumS8`, `b`.`EnumU16`, `b`.`EnumU32`, `b`.`EnumU64`, `b`.`PartitionId`, `b`.`TestBoolean`, `b`.`TestByte`, `b`.`TestCharacter`, `b`.`TestDateOnly`, `b`.`TestDateTime`, `b`.`TestDateTimeOffset`, `b`.`TestDecimal`, `b`.`TestDouble`, `b`.`TestInt16`, `b`.`TestInt32`, `b`.`TestInt64`, `b`.`TestSignedByte`, `b`.`TestSingle`, `b`.`TestTimeOnly`, `b`.`TestTimeSpan`, `b`.`TestUnsignedInt16`, `b`.`TestUnsignedInt32`, `b`.`TestUnsignedInt64` +FROM `BuiltInDataTypes` AS `b` +WHERE 'Yeps' IN ( + SELECT `b0`.`TestBoolean` + FROM `BuiltInDataTypes` AS `b0` +) AND `b`.`Id` = 13 +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public override void Value_conversion_on_enum_collection_contains() + => Assert.Contains( + CoreStrings.TranslationFailed("")[47..], + Assert.Throws(() => base.Value_conversion_on_enum_collection_contains()).Message); + + public class CustomConvertersLibRedFixture : CustomConvertersFixtureBase + { + public override bool StrictEquality => true; + + public override bool SupportsAnsi => false; + + public override bool SupportsUnicodeToAnsiConversion => false; + + public override bool SupportsLargeStringComparisons => true; + + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + public override bool SupportsBinaryKeys => true; + + public override bool SupportsDecimalComparisons => true; + + public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind { get; } + + public override string ReallyLargeString + => string.Join("", Enumerable.Repeat("testphrase", 25)); + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base + .AddOptions(builder) + .ConfigureWarnings( + c => c.Log(JetEventId.DecimalTypeDefaultWarning)); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(e => e.TestBoolean).IsFixedLength(); + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/DataAnnotationLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/DataAnnotationLibRedTest.cs new file mode 100644 index 00000000..0a408b81 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/DataAnnotationLibRedTest.cs @@ -0,0 +1,364 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Diagnostics.Internal; +using EntityFrameworkCore.Jet.Metadata; +using System; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +using System.Threading.Tasks; + +#nullable disable + +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class DataAnnotationLibRedTest : DataAnnotationRelationalTestBase + { + // ReSharper disable once UnusedParameter.Local + public DataAnnotationLibRedTest(DataAnnotationLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + protected override TestHelpers TestHelpers + => LibRedTestHelpers.Instance; + + [ConditionalFact] + public virtual ModelBuilder Default_for_key_string_column_throws() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().Property(l => l.UserName).HasDefaultValue("default"); + modelBuilder.Ignore(); + + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.ModelValidationKeyDefaultValueWarning, + RelationalResources.LogKeyHasDefaultValue(new TestLogger()) + .GenerateMessage(nameof(Login1.UserName), nameof(Login1)), + "RelationalEventId.ModelValidationKeyDefaultValueWarning"), + Assert.Throws(() => Validate(modelBuilder)).Message); + + return modelBuilder; + } + + public override IModel Non_public_annotations_are_enabled() + { + var modelBuilder = base.Non_public_annotations_are_enabled(); + + var relational = GetProperty(modelBuilder, "PersonFirstName"); + Assert.Equal("dsdsd", relational.GetColumnName()); + Assert.Equal("nvarchar(128)", relational.GetColumnType()); + + return modelBuilder; + } + + public override IModel Field_annotations_are_enabled() + { + var modelBuilder = base.Field_annotations_are_enabled(); + + var relational = GetProperty(modelBuilder, "_personFirstName"); + Assert.Equal("dsdsd", relational.GetColumnName()); + Assert.Equal("nvarchar(128)", relational.GetColumnType()); + + return modelBuilder; + } + + public override IModel Key_and_column_work_together() + { + var modelBuilder = base.Key_and_column_work_together(); + + var relational = GetProperty(modelBuilder, "PersonFirstName"); + Assert.Equal("dsdsd", relational.GetColumnName()); + Assert.Equal("nvarchar(128)", relational.GetColumnType()); + + return modelBuilder; + } + + public override IModel Key_and_MaxLength_64_produce_nvarchar_64() + { + var modelBuilder = base.Key_and_MaxLength_64_produce_nvarchar_64(); + + var property = GetProperty(modelBuilder, "PersonFirstName"); + + var storeType = property.GetRelationalTypeMapping().StoreType; + + Assert.Equal("varchar(64)", storeType); + + return modelBuilder; + } + + public override IModel Timestamp_takes_precedence_over_MaxLength() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity().Ignore(x => x.NonMaxTimestamp); + + var model = Validate(modelBuilder); + + Assert.Null(GetProperty(model, "MaxTimestamp").GetMaxLength()); + + return model; + } + + public override IModel TableNameAttribute_affects_table_name_in_TPH() + { + var modelBuilder = base.TableNameAttribute_affects_table_name_in_TPH(); + + Assert.Equal("A", modelBuilder.FindEntityType(typeof(TNAttrBase)).GetTableName()); + + return modelBuilder; + } + + public override IModel DatabaseGeneratedOption_configures_the_property_correctly() + { + var modelBuilder = base.DatabaseGeneratedOption_configures_the_property_correctly(); + + var identity = modelBuilder.FindEntityType(typeof(GeneratedEntity)).FindProperty(nameof(GeneratedEntity.Identity)); + Assert.Equal(JetValueGenerationStrategy.IdentityColumn, identity.GetValueGenerationStrategy()); + + return modelBuilder; + } + + public override IModel DatabaseGeneratedOption_Identity_does_not_throw_on_noninteger_properties() + { + var modelBuilder = base.DatabaseGeneratedOption_Identity_does_not_throw_on_noninteger_properties(); + + var entity = modelBuilder.FindEntityType(typeof(GeneratedEntityNonInteger)); + + var stringProperty = entity.FindProperty(nameof(GeneratedEntityNonInteger.String)); + Assert.Equal(JetValueGenerationStrategy.None, stringProperty.GetValueGenerationStrategy()); + + var dateTimeProperty = entity.FindProperty(nameof(GeneratedEntityNonInteger.DateTime)); + Assert.Equal(JetValueGenerationStrategy.None, dateTimeProperty.GetValueGenerationStrategy()); + + var guidProperty = entity.FindProperty(nameof(GeneratedEntityNonInteger.Guid)); + Assert.Equal(JetValueGenerationStrategy.None, guidProperty.GetValueGenerationStrategy()); + + return modelBuilder; + } + + public override async Task ConcurrencyCheckAttribute_throws_if_value_in_database_changed() + { + await base.ConcurrencyCheckAttribute_throws_if_value_in_database_changed(); + + AssertSql( + """ +SELECT TOP 1 `s`.`Unique_No`, `s`.`MaxLengthProperty`, `s`.`Name`, `s`.`RowVersion`, `s`.`AdditionalDetails_Name`, `s`.`AdditionalDetails_Value`, `s`.`Details_Name`, `s`.`Details_Value` +FROM `Sample` AS `s` +WHERE `s`.`Unique_No` = 1 +""", + // + """ +SELECT TOP 1 `s`.`Unique_No`, `s`.`MaxLengthProperty`, `s`.`Name`, `s`.`RowVersion`, `s`.`AdditionalDetails_Name`, `s`.`AdditionalDetails_Value`, `s`.`Details_Name`, `s`.`Details_Value` +FROM `Sample` AS `s` +WHERE `s`.`Unique_No` = 1 +""", + // + """ +@p2='1' +@p0='ModifiedData' (Nullable = false) (Size = 255) +@p1='00000000-0000-0000-0003-000000000001' +@p3='00000001-0000-0000-0000-000000000001' + +UPDATE `Sample` SET `Name` = @p0, `RowVersion` = @p1 +WHERE `Unique_No` = @p2 AND `RowVersion` = @p3; +SELECT @@ROWCOUNT; +""", + // + """ +@p2='1' +@p0='ChangedData' (Nullable = false) (Size = 255) +@p1='00000000-0000-0000-0002-000000000001' +@p3='00000001-0000-0000-0000-000000000001' + +UPDATE `Sample` SET `Name` = @p0, `RowVersion` = @p1 +WHERE `Unique_No` = @p2 AND `RowVersion` = @p3; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity() + { + await base.DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity(); + + AssertSql( + $""" + @p0=NULL (Size = 10) + {AssertSqlHelper.Declaration("@p1='Third' (Nullable = false) (Size = 255)")} + {AssertSqlHelper.Declaration("@p2='00000000-0000-0000-0000-000000000003'")} + {AssertSqlHelper.Declaration("@p3='Third Additional Name' (Size = 255)")} + {AssertSqlHelper.Declaration("@p4='0' (Nullable = true)")} + {AssertSqlHelper.Declaration("@p5='Third Name' (Size = 255)")} + {AssertSqlHelper.Declaration("@p6='0' (Nullable = true)")} + + INSERT INTO `Sample` (`MaxLengthProperty`, `Name`, `RowVersion`, `AdditionalDetails_Name`, `AdditionalDetails_Value`, `Details_Name`, `Details_Value`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}, {AssertSqlHelper.Parameter("@p3")}, {AssertSqlHelper.Parameter("@p4")}, {AssertSqlHelper.Parameter("@p5")}, {AssertSqlHelper.Parameter("@p6")}); + SELECT `Unique_No` + FROM `Sample` + WHERE @@ROWCOUNT = 1 AND `Unique_No` = @@identity; + """); + } + + public override async Task MaxLengthAttribute_throws_while_inserting_value_longer_than_max_length() + { + await base.MaxLengthAttribute_throws_while_inserting_value_longer_than_max_length(); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p0='Short' (Size = 10)")} + {AssertSqlHelper.Declaration("@p1='ValidString' (Nullable = false) (Size = 255)")} + {AssertSqlHelper.Declaration("@p2='00000000-0000-0000-0000-000000000001'")} + {AssertSqlHelper.Declaration("@p3='Third Additional Name' (Size = 255)")} + {AssertSqlHelper.Declaration("@p4='0' (Nullable = true)")} + {AssertSqlHelper.Declaration("@p5='Third Name' (Size = 255)")} + {AssertSqlHelper.Declaration("@p6='0' (Nullable = true)")} + + INSERT INTO `Sample` (`MaxLengthProperty`, `Name`, `RowVersion`, `AdditionalDetails_Name`, `AdditionalDetails_Value`, `Details_Name`, `Details_Value`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}, {AssertSqlHelper.Parameter("@p3")}, {AssertSqlHelper.Parameter("@p4")}, {AssertSqlHelper.Parameter("@p5")}, {AssertSqlHelper.Parameter("@p6")}); + SELECT `Unique_No` + FROM `Sample` + WHERE @@ROWCOUNT = 1 AND `Unique_No` = @@identity; + """, + // + $""" + {AssertSqlHelper.Declaration("@p0='VeryVeryVeryVeryVeryVeryLongString' (Size = -1)")} + {AssertSqlHelper.Declaration("@p1='ValidString' (Nullable = false) (Size = 255)")} + {AssertSqlHelper.Declaration("@p2='00000000-0000-0000-0000-000000000002'")} + {AssertSqlHelper.Declaration("@p3='Third Additional Name' (Size = 255)")} + {AssertSqlHelper.Declaration("@p4='0' (Nullable = true)")} + {AssertSqlHelper.Declaration("@p5='Third Name' (Size = 255)")} + {AssertSqlHelper.Declaration("@p6='0' (Nullable = true)")} + + INSERT INTO `Sample` (`MaxLengthProperty`, `Name`, `RowVersion`, `AdditionalDetails_Name`, `AdditionalDetails_Value`, `Details_Name`, `Details_Value`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}, {AssertSqlHelper.Parameter("@p3")}, {AssertSqlHelper.Parameter("@p4")}, {AssertSqlHelper.Parameter("@p5")}, {AssertSqlHelper.Parameter("@p6")}); + SELECT `Unique_No` + FROM `Sample` + WHERE @@ROWCOUNT = 1 AND `Unique_No` = @@identity; + """); + } + + public override async Task RequiredAttribute_for_navigation_throws_while_inserting_null_value() + { + await base.RequiredAttribute_for_navigation_throws_while_inserting_null_value(); + + AssertSql( + $""" + @p0=NULL (DbType = Int32) + {AssertSqlHelper.Declaration("@p1='1'")} + + INSERT INTO `BookDetails` (`AdditionalBookDetailsId`, `AnotherBookId`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}); + SELECT `Id` + FROM `BookDetails` + WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + """, + // + $""" + @p0=NULL (DbType = Int32) + @p1=NULL (Nullable = false) (DbType = Int32) + + INSERT INTO `BookDetails` (`AdditionalBookDetailsId`, `AnotherBookId`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}); + SELECT `Id` + FROM `BookDetails` + WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + """); + } + + public override async Task RequiredAttribute_for_property_throws_while_inserting_null_value() + { + await base.RequiredAttribute_for_property_throws_while_inserting_null_value(); + + AssertSql( + $""" + @p0=NULL (Size = 10) + {AssertSqlHelper.Declaration("@p1='ValidString' (Nullable = false) (Size = 255)")} + {AssertSqlHelper.Declaration("@p2='00000000-0000-0000-0000-000000000001'")} + {AssertSqlHelper.Declaration("@p3='Two' (Size = 255)")} + {AssertSqlHelper.Declaration("@p4='0' (Nullable = true)")} + {AssertSqlHelper.Declaration("@p5='One' (Size = 255)")} + {AssertSqlHelper.Declaration("@p6='0' (Nullable = true)")} + + INSERT INTO `Sample` (`MaxLengthProperty`, `Name`, `RowVersion`, `AdditionalDetails_Name`, `AdditionalDetails_Value`, `Details_Name`, `Details_Value`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}, {AssertSqlHelper.Parameter("@p3")}, {AssertSqlHelper.Parameter("@p4")}, {AssertSqlHelper.Parameter("@p5")}, {AssertSqlHelper.Parameter("@p6")}); + SELECT `Unique_No` + FROM `Sample` + WHERE @@ROWCOUNT = 1 AND `Unique_No` = @@identity; + """, + // + $""" + @p0=NULL (Size = 10) + @p1=NULL (Nullable = false) (Size = 255) + {AssertSqlHelper.Declaration("@p2='00000000-0000-0000-0000-000000000002'")} + {AssertSqlHelper.Declaration("@p3='Two' (Size = 255)")} + {AssertSqlHelper.Declaration("@p4='0' (Nullable = true)")} + {AssertSqlHelper.Declaration("@p5='One' (Size = 255)")} + {AssertSqlHelper.Declaration("@p6='0' (Nullable = true)")} + + INSERT INTO `Sample` (`MaxLengthProperty`, `Name`, `RowVersion`, `AdditionalDetails_Name`, `AdditionalDetails_Value`, `Details_Name`, `Details_Value`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}, {AssertSqlHelper.Parameter("@p3")}, {AssertSqlHelper.Parameter("@p4")}, {AssertSqlHelper.Parameter("@p5")}, {AssertSqlHelper.Parameter("@p6")}); + SELECT `Unique_No` + FROM `Sample` + WHERE @@ROWCOUNT = 1 AND `Unique_No` = @@identity; + """); + } + + public override async Task StringLengthAttribute_throws_while_inserting_value_longer_than_max_length() + { + await base.StringLengthAttribute_throws_while_inserting_value_longer_than_max_length(); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p0='ValidString' (Size = 16)")} + + INSERT INTO `Two` (`Data`) + VALUES ({AssertSqlHelper.Parameter("@p0")}); + SELECT `Id`, `Timestamp` + FROM `Two` + WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + """, + // + $""" + {AssertSqlHelper.Declaration("@p0='ValidButLongString' (Size = -1)")} + + INSERT INTO `Two` (`Data`) + VALUES ({AssertSqlHelper.Parameter("@p0")}); + SELECT `Id`, `Timestamp` + FROM `Two` + WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + """); + } + + public override async Task TimestampAttribute_throws_if_value_in_database_changed() + { + await base.TimestampAttribute_throws_if_value_in_database_changed(); + + // Not validating SQL because not significantly different from other tests and + // row version value is not stable. + } + + private static readonly string _eol = Environment.NewLine; + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class DataAnnotationLibRedFixture : DataAnnotationRelationalFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/DataBindingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/DataBindingLibRedTest.cs new file mode 100644 index 00000000..1ba97122 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/DataBindingLibRedTest.cs @@ -0,0 +1,8 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class DataBindingLibRedTest(F1LibRedFixture fixture) : DataBindingTestBase(fixture); +} diff --git a/test/EFCore.LibRed.FunctionalTests/DbContextPoolingTest.cs b/test/EFCore.LibRed.FunctionalTests/DbContextPoolingTest.cs new file mode 100644 index 00000000..7b94f6f6 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/DbContextPoolingTest.cs @@ -0,0 +1,2065 @@ +using System; +using System.Collections.ObjectModel; +using System.Collections.Specialized; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.Query; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Internal; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using Xunit.Abstractions; + +// ReSharper disable MethodHasAsyncOverload + +// ReSharper disable InconsistentNaming +// ReSharper disable UnusedAutoPropertyAccessor.Local +// ReSharper disable UnusedMember.Local +// ReSharper disable ClassNeverInstantiated.Local +// ReSharper disable VirtualMemberCallInConstructor +namespace EntityFrameworkCore.LibRed.FunctionalTests; +#nullable disable +#pragma warning disable CS9113 // Parameter is unread. +public class DbContextPoolingTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) : IClassFixture> +#pragma warning restore CS9113 // Parameter is unread. +{ + private static DbContextOptionsBuilder ConfigureOptions(DbContextOptionsBuilder optionsBuilder) + where TContext : DbContext + => optionsBuilder + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString) + .EnableServiceProviderCaching(false); + + private static DbContextOptionsBuilder ConfigureOptions(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString) + .EnableServiceProviderCaching(false); + + private static IServiceProvider BuildServiceProvider(Action optionsAction = null) + where TContextService : class + where TContext : DbContext, TContextService + => new ServiceCollection() + .AddDbContextPool( + ob => + { + var builder = ConfigureOptions(ob); + optionsAction?.Invoke(builder); + }) + .AddDbContextPool( + ob => + { + var builder = ConfigureOptions(ob); + optionsAction?.Invoke(builder); + }) + .BuildServiceProvider(validateScopes: true); + + private static IServiceProvider BuildServiceProvider(Action optionsAction = null) + where TContext : DbContext + => new ServiceCollection() + .AddDbContextPool( + ob => + { + var builder = ConfigureOptions(ob); + optionsAction?.Invoke(builder); + }) + .AddDbContextPool( + ob => + { + var builder = ConfigureOptions(ob); + optionsAction?.Invoke(builder); + }) + .BuildServiceProvider(validateScopes: true); + + private static IServiceProvider BuildServiceProviderWithFactory() + where TContext : DbContext + => new ServiceCollection() + .AddPooledDbContextFactory(ob => ConfigureOptions(ob)) + .AddDbContextPool(ob => ConfigureOptions(ob)) + .BuildServiceProvider(validateScopes: true); + + private static IServiceProvider BuildServiceProvider(int poolSize) + where TContextService : class + where TContext : DbContext, TContextService + => new ServiceCollection() + .AddDbContextPool(ob => ConfigureOptions(ob), poolSize) + .AddDbContextPool(ob => ConfigureOptions(ob), poolSize) + .BuildServiceProvider(validateScopes: true); + + private static IServiceProvider BuildServiceProvider(int poolSize) + where TContext : DbContext + => new ServiceCollection() + .AddDbContextPool(ob => ConfigureOptions(ob), poolSize) + .AddDbContextPool(ob => ConfigureOptions(ob), poolSize) + .BuildServiceProvider(validateScopes: true); + + private static IServiceProvider BuildServiceProviderWithFactory(int poolSize) + where TContext : DbContext + => new ServiceCollection() + .AddPooledDbContextFactory(ob => ConfigureOptions(ob), poolSize) + .AddDbContextPool(ob => ConfigureOptions(ob), poolSize) + .BuildServiceProvider(validateScopes: true); + + private static IDbContextFactory BuildFactory(bool withDependencyInjection) + where TContext : DbContext + => withDependencyInjection + ? BuildServiceProviderWithFactory().GetService>() + : new PooledDbContextFactory(ConfigureOptions(new DbContextOptionsBuilder()).Options); + + private static IDbContextFactory BuildFactory(bool withDependencyInjection, int poolSize) + where TContext : DbContext + => withDependencyInjection + ? BuildServiceProviderWithFactory(poolSize).GetService>() + : new PooledDbContextFactory(ConfigureOptions(new DbContextOptionsBuilder()).Options, poolSize); + + private interface IPooledContext + { + } + + private class DefaultOptionsPooledContext(DbContextOptions options) : DbContext(options); + + private class PooledContext : DbContext, IPooledContext + { + public static int DisposedCount; + public static int InstanceCount; + + public static bool ModifyOptions; + + public PooledContext(DbContextOptions options) + : base(options) + { + Interlocked.Increment(ref InstanceCount); + + ChangeTracker.AutoDetectChangesEnabled = false; + ChangeTracker.LazyLoadingEnabled = false; + Database.AutoTransactionBehavior = AutoTransactionBehavior.Never; + Database.AutoSavepointsEnabled = false; + ChangeTracker.CascadeDeleteTiming = CascadeTiming.Never; + ChangeTracker.DeleteOrphansTiming = CascadeTiming.Never; + SavingChanges += (sender, args) => { }; + SavedChanges += (sender, args) => { }; + SaveChangesFailed += (sender, args) => { }; + ChangeTracker.Tracking += (sender, args) => { }; + ChangeTracker.Tracked += (sender, args) => { }; + ChangeTracker.StateChanging += (sender, args) => { }; + ChangeTracker.StateChanged += (sender, args) => { }; + ChangeTracker.DetectingAllChanges += (sender, args) => { }; + ChangeTracker.DetectedAllChanges += (sender, args) => { }; + ChangeTracker.DetectingEntityChanges += (sender, args) => { }; + ChangeTracker.DetectedEntityChanges += (sender, args) => { }; + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + if (ModifyOptions) + { + optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); + } + } + + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("Customers"); + modelBuilder.Entity().ToTable("Orders"); + } + + public override void Dispose() + { + base.Dispose(); + + Interlocked.Increment(ref DisposedCount); + } + } + + private class PooledContextWithOverrides(DbContextOptions options) : DbContext(options), IPooledContext + { + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("Customers"); + modelBuilder.Entity().ToTable("Orders"); + } + } + + public class Customer + { + public string CustomerId { get; set; } + public string CompanyName { get; set; } + public ILazyLoader LazyLoader { get; set; } + public ObservableCollection Orders { get; } = []; + } + + public class Order + { + public int OrderId { get; set; } + public ILazyLoader LazyLoader { get; set; } + public string CustomerId { get; set; } + public Customer Customer { get; set; } + } + + private interface ISecondContext + { + } + + private class SecondContext(DbContextOptions options) : DbContext(options), ISecondContext + { + public DbSet Blogs { get; set; } + + public class Blog + { + public int Id { get; set; } + } + } + + [ConditionalFact] + public void Invalid_pool_size() + { + Assert.Throws( + () => BuildServiceProvider(poolSize: 0)); + + Assert.Throws( + () => BuildServiceProvider(poolSize: -1)); + + Assert.Throws( + () => BuildServiceProvider(poolSize: 0)); + + Assert.Throws( + () => BuildServiceProvider(poolSize: -1)); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public void Invalid_pool_size_with_factory(bool withDependencyInjection) + { + Assert.Throws( + () => BuildFactory(withDependencyInjection, poolSize: 0)); + + Assert.Throws( + () => BuildFactory(withDependencyInjection, poolSize: -1)); + } + + [ConditionalFact] + public void Validate_pool_size() + { + var serviceProvider = BuildServiceProvider(poolSize: 64); + + using var scope = serviceProvider.CreateScope(); + + Assert.Equal( + 64, + scope.ServiceProvider + .GetRequiredService() + .GetService() + .FindExtension()!.MaxPoolSize); + } + + [ConditionalFact] + public void Validate_pool_size_with_service_interface() + { + var serviceProvider = BuildServiceProvider(poolSize: 64); + + using var scope = serviceProvider.CreateScope(); + + Assert.Equal( + 64, + ((DbContext)scope.ServiceProvider + .GetRequiredService()) + .GetService() + .FindExtension()!.MaxPoolSize); + } + + [ConditionalFact] + public void Validate_pool_size_with_factory() + { + var serviceProvider = BuildServiceProviderWithFactory(poolSize: 64); + + using var context = serviceProvider.GetRequiredService>().CreateDbContext(); + + Assert.Equal( + 64, + context.GetService() + .FindExtension()!.MaxPoolSize); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public void Validate_pool_size_behavior_with_factory(bool withDependencyInjection) + { + var factory = BuildFactory(withDependencyInjection, poolSize: 1); + + var (ctx1, ctx2) = (factory.CreateDbContext(), factory.CreateDbContext()); + ctx1.Dispose(); + ctx2.Dispose(); + + using var ctx3 = factory.CreateDbContext(); + using var ctx4 = factory.CreateDbContext(); + Assert.Same(ctx1, ctx3); + Assert.NotSame(ctx2, ctx4); + } + + [ConditionalFact] + public void Validate_pool_size_default() + { + var serviceProvider = BuildServiceProvider(); + + using var scope = serviceProvider.CreateScope(); + + Assert.Equal( + 1024, + scope.ServiceProvider + .GetRequiredService() + .GetService() + .FindExtension()!.MaxPoolSize); + } + + [ConditionalFact] + public void Validate_pool_size_with_service_interface_default() + { + var serviceProvider = BuildServiceProvider(); + + using var scope = serviceProvider.CreateScope(); + + Assert.Equal( + 1024, + ((DbContext)scope.ServiceProvider + .GetRequiredService()) + .GetService() + .FindExtension()!.MaxPoolSize); + } + + [ConditionalFact] + public void Pool_can_get_context_by_concrete_type_even_when_service_interface_is_used() + { + var serviceProvider = BuildServiceProvider(); + + using var scope = serviceProvider.CreateScope(); + + Assert.Same( + scope.ServiceProvider.GetRequiredService(), + scope.ServiceProvider.GetRequiredService()); + } + + [ConditionalFact] + public void Validate_pool_size_with_factory_default() + { + var serviceProvider = BuildServiceProviderWithFactory(); + + using var context = serviceProvider.GetRequiredService>().CreateDbContext(); + + Assert.Equal( + 1024, + context.GetService() + .FindExtension()!.MaxPoolSize); + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public void Options_modified_in_on_configuring(bool useInterface) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + var scopedProvider = serviceProvider.CreateScope().ServiceProvider; + + PooledContext.ModifyOptions = true; + + try + { + Assert.Throws( + () => useInterface + ? scopedProvider.GetService() + : scopedProvider.GetService()); + } + finally + { + PooledContext.ModifyOptions = false; + } + } + + [ConditionalFact] + public void Options_modified_in_on_configuring_with_factory() + { + var serviceProvider = BuildServiceProviderWithFactory(); + var scopedProvider = serviceProvider.CreateScope().ServiceProvider; + + PooledContext.ModifyOptions = true; + + try + { + var factory = scopedProvider.GetService>(); + Assert.Throws(() => factory!.CreateDbContext()); + } + finally + { + PooledContext.ModifyOptions = false; + } + } + + private class BadCtorContext : DbContext + { + } + + [ConditionalFact] + public void Throws_when_used_with_parameterless_constructor_context() + { + var serviceCollection = new ServiceCollection(); + + Assert.Equal( + CoreStrings.DbContextMissingConstructor(nameof(BadCtorContext)), + Assert.Throws( + () => serviceCollection.AddDbContextPool( + _ => { })).Message); + + Assert.Equal( + CoreStrings.DbContextMissingConstructor(nameof(BadCtorContext)), + Assert.Throws( + () => serviceCollection.AddDbContextPool( + (_, __) => { })).Message); + + Assert.Equal( + CoreStrings.DbContextMissingConstructor(nameof(BadCtorContext)), + Assert.Throws( + () => serviceCollection.AddPooledDbContextFactory( + (_, __) => { })).Message); + } + + [ConditionalFact] + public void Throws_when_pooled_context_constructor_has_second_parameter_that_cannot_be_resolved_from_service_provider() + { + var serviceProvider + = new ServiceCollection().AddDbContextPool(_ => { }) + .BuildServiceProvider(validateScopes: true); + + using var scope = serviceProvider.CreateScope(); + + Assert.Throws(() => scope.ServiceProvider.GetService()); + } + + private class TwoParameterConstructorContext(DbContextOptions options, string x) : DbContext(options) + { + public string StringParameter { get; } = x; + } + + [ConditionalFact] + public void Throws_when_pooled_context_constructor_has_single_parameter_that_cannot_be_resolved_from_service_provider() + { + var serviceProvider + = new ServiceCollection().AddDbContextPool(_ => { }) + .BuildServiceProvider(validateScopes: true); + + using var scope = serviceProvider.CreateScope(); + + Assert.Throws(() => scope.ServiceProvider.GetService()); + } + +#pragma warning disable CS9113 // Parameter 'x' is unread + private class WrongParameterConstructorContext(string x) : DbContext(new DbContextOptions()); +#pragma warning restore CS9113 + + [ConditionalFact] + public void Throws_when_pooled_context_constructor_has_scoped_service() + { + var serviceProvider + = new ServiceCollection() + .AddDbContextPool(_ => { }) + .AddScoped(sp => "string") + .BuildServiceProvider(validateScopes: true); + + using var scope = serviceProvider.CreateScope(); + + Assert.Throws(() => scope.ServiceProvider.GetService()); + } + + [ConditionalFact] + public void Does_not_throw_when_pooled_context_constructor_has_singleton_service() + { + var serviceProvider + = new ServiceCollection() + .AddDbContextPool(_ => { }) + .AddSingleton("string") + .BuildServiceProvider(validateScopes: true); + + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetService(); + + Assert.Equal("string", context.StringParameter); + } + + [ConditionalFact] + public void Does_not_throw_when_parameterless_and_correct_constructor() + { + var serviceProvider + = new ServiceCollection().AddDbContextPool(_ => { }) + .BuildServiceProvider(validateScopes: true); + + using var scope = serviceProvider.CreateScope(); + + var context = scope.ServiceProvider.GetRequiredService(); + + Assert.Equal("Options", context.ConstructorUsed); + } + + [ConditionalFact] + public void Does_not_throw_when_parameterless_and_correct_constructor_using_factory_pool() + { + var serviceProvider + = new ServiceCollection().AddPooledDbContextFactory(_ => { }) + .BuildServiceProvider(validateScopes: true); + + using var scope = serviceProvider.CreateScope(); + + var factory = scope.ServiceProvider.GetRequiredService>(); + using var context = factory.CreateDbContext(); + + Assert.Equal("Options", context.ConstructorUsed); + } + + private class WithParameterlessConstructorContext : DbContext + { + public string ConstructorUsed { get; } + + public WithParameterlessConstructorContext() + { + ConstructorUsed = "Parameterless"; + } + + public WithParameterlessConstructorContext(DbContextOptions options) + : base(options) + { + ConstructorUsed = "Options"; + } + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Can_pool_non_derived_context(bool useFactory, bool async) + { + var serviceProvider = useFactory + ? BuildServiceProviderWithFactory() + : BuildServiceProvider(); + + var serviceScope1 = serviceProvider.CreateScope(); + var context1 = await GetContextAsync(serviceScope1); + + var serviceScope2 = serviceProvider.CreateScope(); + var context2 = await GetContextAsync(serviceScope2); + + Assert.NotSame(context1, context2); + + var id1 = context1.ContextId; + var id2 = context2.ContextId; + + Assert.NotEqual(default, id1.InstanceId); + Assert.NotEqual(id1, id2); + Assert.NotEqual(id1.InstanceId, id2.InstanceId); + Assert.Equal(1, id1.Lease); + Assert.Equal(1, id2.Lease); + + if (useFactory) + { + await Dispose(context1, async); + } + + await Dispose(serviceScope1, async); + await Dispose(serviceScope2, async); + + if (useFactory) + { + await Dispose(context2, async); + } + + var id1d = context1.ContextId; + var id2d = context2.ContextId; + + Assert.Equal(id1, id1d); + Assert.Equal(id1.InstanceId, id1d.InstanceId); + Assert.Equal(1, id1d.Lease); + Assert.Equal(1, id2d.Lease); + + var serviceScope3 = serviceProvider.CreateScope(); + var context3 = await GetContextAsync(serviceScope3); + + var id1r = context3.ContextId; + + Assert.Same(context1, context3); + Assert.Equal(id1.InstanceId, id1r.InstanceId); + Assert.NotEqual(default, id1r.InstanceId); + Assert.NotEqual(id1, id1r); + Assert.Equal(2, id1r.Lease); + + var serviceScope4 = serviceProvider.CreateScope(); + var context4 = await GetContextAsync(serviceScope4); + + var id2r = context4.ContextId; + + Assert.Same(context2, context4); + Assert.Equal(id2.InstanceId, id2r.InstanceId); + Assert.NotEqual(default, id2r.InstanceId); + Assert.NotEqual(id2, id2r); + Assert.Equal(2, id2r.Lease); + + async Task GetContextAsync(IServiceScope serviceScope) + => useFactory + ? async + ? await serviceScope.ServiceProvider.GetService>()!.CreateDbContextAsync() + : serviceScope.ServiceProvider.GetService>()!.CreateDbContext() + : serviceScope.ServiceProvider.GetService(); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task ContextIds_make_sense_when_not_pooling(bool async) + { + var serviceProvider = new ServiceCollection() + .AddDbContext( + ob + => ob.UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString) + .EnableServiceProviderCaching(false)) + .BuildServiceProvider(validateScopes: true); + + var serviceScope1 = serviceProvider.CreateScope(); + var context1 = serviceScope1.ServiceProvider.GetService(); + + var serviceScope2 = serviceProvider.CreateScope(); + var context2 = serviceScope2.ServiceProvider.GetService(); + + Assert.NotSame(context1, context2); + + var id1 = context1!.ContextId; + var id2 = context2!.ContextId; + + Assert.NotEqual(default, id1.InstanceId); + Assert.NotEqual(default, id2.InstanceId); + + Assert.NotEqual(id1, id2); + Assert.Equal(0, id1.Lease); + Assert.Equal(0, id2.Lease); + + await Dispose(serviceScope1, async); + await Dispose(serviceScope2, async); + + var id1d = context1.ContextId; + var id2d = context2.ContextId; + + Assert.Equal(id1.InstanceId, id1d.InstanceId); + Assert.Equal(id2.InstanceId, id2d.InstanceId); + Assert.Equal(0, id1d.Lease); + Assert.Equal(0, id2d.Lease); + + var serviceScope3 = serviceProvider.CreateScope(); + var context3 = serviceScope3.ServiceProvider.GetService(); + + var id1r = context3.ContextId; + + Assert.NotSame(context1, context3); + Assert.NotEqual(default, id1r.InstanceId); + Assert.NotEqual(id1.InstanceId, id1r.InstanceId); + Assert.NotEqual(id1, id1r); + Assert.Equal(0, id1r.Lease); + + var serviceScope4 = serviceProvider.CreateScope(); + var context4 = serviceScope4.ServiceProvider.GetService(); + + var id2r = context4.ContextId; + + Assert.NotSame(context2, context4); + Assert.NotEqual(default, id2r.InstanceId); + Assert.NotEqual(id2.InstanceId, id2r.InstanceId); + Assert.NotEqual(id2, id2r); + Assert.Equal(0, id2r.Lease); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Contexts_are_pooled(bool useInterface, bool async) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + var serviceScope1 = serviceProvider.CreateScope(); + var scopedProvider1 = serviceScope1.ServiceProvider; + + var context1 = useInterface + ? scopedProvider1.GetService() + : scopedProvider1.GetService(); + + var secondContext1 = useInterface + ? scopedProvider1.GetService() + : scopedProvider1.GetService(); + + var serviceScope2 = serviceProvider.CreateScope(); + var scopedProvider2 = serviceScope2.ServiceProvider; + + var context2 = useInterface + ? scopedProvider2.GetService() + : scopedProvider2.GetService(); + + var secondContext2 = useInterface + ? scopedProvider2.GetService() + : scopedProvider2.GetService(); + + Assert.NotSame(context1, context2); + Assert.NotSame(secondContext1, secondContext2); + + await Dispose(serviceScope1, async); + + await Dispose(serviceScope2, async); + + var serviceScope3 = serviceProvider.CreateScope(); + var scopedProvider3 = serviceScope3.ServiceProvider; + + var context3 = useInterface + ? scopedProvider3.GetService() + : scopedProvider3.GetService(); + + var secondContext3 = useInterface + ? scopedProvider3.GetService() + : scopedProvider3.GetService(); + + Assert.Same(context1, context3); + Assert.Same(secondContext1, secondContext3); + + var serviceScope4 = serviceProvider.CreateScope(); + var scopedProvider4 = serviceScope4.ServiceProvider; + + var context4 = useInterface + ? scopedProvider4.GetService() + : scopedProvider4.GetService(); + + var secondContext4 = useInterface + ? scopedProvider4.GetService() + : scopedProvider4.GetService(); + + Assert.Same(context2, context4); + Assert.Same(secondContext2, secondContext4); + + await Dispose(serviceScope3, async); + + await Dispose(serviceScope4, async); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Contexts_are_pooled_with_factory(bool async, bool withDependencyInjection) + { + var factory = BuildFactory(withDependencyInjection); + + var context1 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + var secondContext1 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + var context2 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + var secondContext2 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + Assert.NotSame(context1, context2); + Assert.NotSame(secondContext1, secondContext2); + + await Dispose(context1, async); + await Dispose(secondContext1, async); + await Dispose(context2, async); + await Dispose(secondContext2, async); + + var context3 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + var secondContext3 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + Assert.Same(context1, context3); + Assert.Same(secondContext1, secondContext3); + + var context4 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + var secondContext4 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + Assert.Same(context2, context4); + Assert.Same(secondContext2, secondContext4); + + await Dispose(context1, async); + await Dispose(secondContext1, async); + await Dispose(context2, async); + await Dispose(secondContext2, async); + } + + [ConditionalTheory] + [InlineData(false, false, null)] + [InlineData(true, false, null)] + [InlineData(false, true, null)] + [InlineData(true, true, null)] + [InlineData(false, false, QueryTrackingBehavior.TrackAll)] + [InlineData(true, false, QueryTrackingBehavior.TrackAll)] + [InlineData(false, true, QueryTrackingBehavior.TrackAll)] + [InlineData(true, true, QueryTrackingBehavior.TrackAll)] + [InlineData(false, false, QueryTrackingBehavior.NoTracking)] + [InlineData(true, false, QueryTrackingBehavior.NoTracking)] + [InlineData(false, true, QueryTrackingBehavior.NoTracking)] + [InlineData(true, true, QueryTrackingBehavior.NoTracking)] + [InlineData(false, false, QueryTrackingBehavior.NoTrackingWithIdentityResolution)] + [InlineData(true, false, QueryTrackingBehavior.NoTrackingWithIdentityResolution)] + [InlineData(false, true, QueryTrackingBehavior.NoTrackingWithIdentityResolution)] + [InlineData(true, true, QueryTrackingBehavior.NoTrackingWithIdentityResolution)] + public async Task Context_configuration_is_reset(bool useInterface, bool async, QueryTrackingBehavior? queryTrackingBehavior) + { + var serviceProvider = useInterface + ? BuildServiceProvider(b => UseQueryTrackingBehavior(b, queryTrackingBehavior)) + : BuildServiceProvider(b => UseQueryTrackingBehavior(b, queryTrackingBehavior)); + + var serviceScope = serviceProvider.CreateScope(); + var scopedProvider = serviceScope.ServiceProvider; + + var context1 = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + Assert.Null(context1!.Database.GetCommandTimeout()); + + var set = context1.Customers; + var localView = set.Local; + localView.PropertyChanged += LocalView_OnPropertyChanged; + localView.PropertyChanging += LocalView_OnPropertyChanging; + localView.CollectionChanged += LocalView_OnCollectionChanged; + var customer1 = new Customer { CustomerId = "C" }; + context1.Customers.Attach(customer1); + Assert.Equal(1, localView.Count); + Assert.Same(customer1, localView.ToBindingList().Single()); + Assert.Same(customer1, localView.ToObservableCollection().Single()); + Assert.True(_localView_OnPropertyChanging); + Assert.True(_localView_OnPropertyChanged); + Assert.True(_localView_OnCollectionChanged); + + context1.ChangeTracker.AutoDetectChangesEnabled = true; + context1.ChangeTracker.LazyLoadingEnabled = true; + context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; + context1.ChangeTracker.CascadeDeleteTiming = CascadeTiming.Immediate; + context1.ChangeTracker.DeleteOrphansTiming = CascadeTiming.Immediate; + context1.Database.AutoTransactionBehavior = AutoTransactionBehavior.WhenNeeded; + context1.Database.AutoSavepointsEnabled = true; + context1.Database.SetCommandTimeout(1); + context1.ChangeTracker.Tracking += ChangeTracker_OnTracking; + context1.ChangeTracker.Tracked += ChangeTracker_OnTracked; + context1.ChangeTracker.StateChanging += ChangeTracker_OnStateChanging; + context1.ChangeTracker.StateChanged += ChangeTracker_OnStateChanged; + context1.ChangeTracker.DetectingAllChanges += ChangeTracker_OnDetectingAllChanges; + context1.ChangeTracker.DetectedAllChanges += ChangeTracker_OnDetectedAllChanges; + context1.ChangeTracker.DetectingEntityChanges += ChangeTracker_OnDetectingEntityChanges; + context1.ChangeTracker.DetectedEntityChanges += ChangeTracker_OnDetectedEntityChanges; + context1.SavingChanges += Context_OnSavingChanges; + context1.SavedChanges += Context_OnSavedChanges; + context1.SaveChangesFailed += Context_OnSaveChangesFailed; + + _localView_OnPropertyChanging = false; + _localView_OnPropertyChanged = false; + _localView_OnCollectionChanged = false; + + await Dispose(serviceScope, async); + + serviceScope = serviceProvider.CreateScope(); + scopedProvider = serviceScope.ServiceProvider; + + var context2 = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + Assert.Same(context1, context2); + + Assert.False(context2!.ChangeTracker.AutoDetectChangesEnabled); + Assert.False(context2.ChangeTracker.LazyLoadingEnabled); + Assert.Equal(queryTrackingBehavior ?? QueryTrackingBehavior.TrackAll, context2.ChangeTracker.QueryTrackingBehavior); + Assert.Equal(CascadeTiming.Never, context2.ChangeTracker.CascadeDeleteTiming); + Assert.Equal(CascadeTiming.Never, context2.ChangeTracker.DeleteOrphansTiming); + Assert.Equal(AutoTransactionBehavior.Never, context2.Database.AutoTransactionBehavior); + Assert.False(context2.Database.AutoSavepointsEnabled); + Assert.Null(context1.Database.GetCommandTimeout()); + + Assert.Empty(localView); + Assert.Empty(localView.ToBindingList()); + Assert.Empty(localView.ToObservableCollection()); + + var customer2 = new Customer { CustomerId = "C" }; + context2.Customers.Attach(customer2).State = EntityState.Modified; + context2.Customers.Attach(customer2).State = EntityState.Unchanged; + + Assert.False(_changeTracker_OnTracking); + Assert.False(_changeTracker_OnTracked); + Assert.False(_changeTracker_OnStateChanging); + Assert.False(_changeTracker_OnStateChanged); + + context2.SaveChanges(); + + Assert.False(_changeTracker_OnDetectingAllChanges); + Assert.False(_changeTracker_OnDetectedAllChanges); + Assert.False(_changeTracker_OnDetectingEntityChanges); + Assert.False(_changeTracker_OnDetectedEntityChanges); + Assert.False(_context_OnSavedChanges); + Assert.False(_context_OnSavingChanges); + Assert.False(_context_OnSaveChangesFailed); + + Assert.Same(set, context2!.Customers); + Assert.Same(localView, context2!.Customers.Local); + Assert.Equal(1, localView.Count); + Assert.Same(customer2, localView.ToBindingList().Single()); + Assert.Same(customer2, localView.ToObservableCollection().Single()); + Assert.False(_localView_OnPropertyChanging); + Assert.False(_localView_OnPropertyChanged); + Assert.False(_localView_OnCollectionChanged); + } + + [ConditionalTheory] + [InlineData(false, null)] + [InlineData(true, null)] + [InlineData(false, QueryTrackingBehavior.TrackAll)] + [InlineData(true, QueryTrackingBehavior.TrackAll)] + [InlineData(false, QueryTrackingBehavior.NoTracking)] + [InlineData(true, QueryTrackingBehavior.NoTracking)] + [InlineData(false, QueryTrackingBehavior.NoTrackingWithIdentityResolution)] + [InlineData(true, QueryTrackingBehavior.NoTrackingWithIdentityResolution)] + public async Task Uninitialized_context_configuration_is_reset_properly(bool async, QueryTrackingBehavior? queryTrackingBehavior) + { + var serviceProvider = BuildServiceProvider(b => UseQueryTrackingBehavior(b, queryTrackingBehavior)); + + var serviceScope = serviceProvider.CreateScope(); + var ctx = serviceScope.ServiceProvider.GetRequiredService(); + await Dispose(ctx, async); + await Dispose(serviceScope, async); + + serviceScope = serviceProvider.CreateScope(); + var ctx2 = serviceScope.ServiceProvider.GetRequiredService(); + Assert.Same(ctx, ctx2); + ctx2.Blogs.Add(new SecondContext.Blog()); + await Dispose(ctx2, async); + await Dispose(serviceScope, async); + + serviceScope = serviceProvider.CreateScope(); + var ctx3 = serviceScope.ServiceProvider.GetRequiredService(); + Assert.Same(ctx, ctx3); + Assert.Empty(ctx3.ChangeTracker.Entries()); + await Dispose(ctx2, async); + await Dispose(serviceScope, async); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Context_configuration_is_reset_with_factory(bool async, bool withDependencyInjection) + { + var factory = BuildFactory(withDependencyInjection); + + var context1 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + var set = context1.Customers; + + var localView = set.Local; + localView.PropertyChanged += LocalView_OnPropertyChanged; + localView.PropertyChanging += LocalView_OnPropertyChanging; + localView.CollectionChanged += LocalView_OnCollectionChanged; + var customer1 = new Customer { CustomerId = "C" }; + context1.Customers.Attach(customer1); + Assert.Equal(1, localView.Count); + Assert.Same(customer1, localView.ToBindingList().Single()); + Assert.Same(customer1, localView.ToObservableCollection().Single()); + Assert.True(_localView_OnPropertyChanging); + Assert.True(_localView_OnPropertyChanged); + Assert.True(_localView_OnCollectionChanged); + + context1.ChangeTracker.AutoDetectChangesEnabled = true; + context1.ChangeTracker.LazyLoadingEnabled = true; + context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; + context1.ChangeTracker.CascadeDeleteTiming = CascadeTiming.Immediate; + context1.ChangeTracker.DeleteOrphansTiming = CascadeTiming.Immediate; + context1.Database.AutoTransactionBehavior = AutoTransactionBehavior.WhenNeeded; + context1.Database.AutoSavepointsEnabled = true; + context1.ChangeTracker.Tracking += ChangeTracker_OnTracking; + context1.ChangeTracker.Tracked += ChangeTracker_OnTracked; + context1.ChangeTracker.StateChanging += ChangeTracker_OnStateChanging; + context1.ChangeTracker.StateChanged += ChangeTracker_OnStateChanged; + context1.ChangeTracker.DetectingAllChanges += ChangeTracker_OnDetectingAllChanges; + context1.ChangeTracker.DetectedAllChanges += ChangeTracker_OnDetectedAllChanges; + context1.ChangeTracker.DetectingEntityChanges += ChangeTracker_OnDetectingEntityChanges; + context1.ChangeTracker.DetectedEntityChanges += ChangeTracker_OnDetectedEntityChanges; + context1.SavingChanges += Context_OnSavingChanges; + context1.SavedChanges += Context_OnSavedChanges; + context1.SaveChangesFailed += Context_OnSaveChangesFailed; + + _localView_OnPropertyChanging = false; + _localView_OnPropertyChanged = false; + _localView_OnCollectionChanged = false; + + await Dispose(context1, async); + + var context2 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + Assert.Same(context1, context2); + + Assert.Empty(localView); + Assert.Empty(localView.ToBindingList()); + Assert.Empty(localView.ToObservableCollection()); + + var customer2 = new Customer { CustomerId = "C" }; + context2.Customers.Attach(customer2).State = EntityState.Modified; + context2.Customers.Attach(customer2).State = EntityState.Unchanged; + + Assert.False(_changeTracker_OnTracking); + Assert.False(_changeTracker_OnTracked); + Assert.False(_changeTracker_OnStateChanging); + Assert.False(_changeTracker_OnStateChanged); + + context2.SaveChanges(); + + Assert.False(_changeTracker_OnDetectingAllChanges); + Assert.False(_changeTracker_OnDetectedAllChanges); + Assert.False(_changeTracker_OnDetectingEntityChanges); + Assert.False(_changeTracker_OnDetectedEntityChanges); + Assert.False(_context_OnSavedChanges); + Assert.False(_context_OnSavingChanges); + Assert.False(_context_OnSaveChangesFailed); + + Assert.Same(set, context2!.Customers); + Assert.Same(localView, context2!.Customers.Local); + Assert.Equal(1, localView.Count); + Assert.Same(customer2, localView.ToBindingList().Single()); + Assert.Same(customer2, localView.ToObservableCollection().Single()); + Assert.False(_localView_OnPropertyChanging); + Assert.False(_localView_OnPropertyChanged); + Assert.False(_localView_OnCollectionChanged); + } + + [ConditionalFact] + public void Change_tracker_can_be_cleared_without_resetting_context_config() + { + var context = new PooledContext( + new DbContextOptionsBuilder().UseLibRed( + LibRedNorthwindTestStoreFactory.NorthwindConnectionString).Options); + + context.ChangeTracker.AutoDetectChangesEnabled = true; + context.ChangeTracker.LazyLoadingEnabled = true; + context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; + context.ChangeTracker.CascadeDeleteTiming = CascadeTiming.Immediate; + context.ChangeTracker.DeleteOrphansTiming = CascadeTiming.Immediate; + context.Database.AutoTransactionBehavior = AutoTransactionBehavior.WhenNeeded; + context.Database.AutoSavepointsEnabled = true; + context.ChangeTracker.Tracking += ChangeTracker_OnTracking; + context.ChangeTracker.Tracked += ChangeTracker_OnTracked; + context.ChangeTracker.StateChanging += ChangeTracker_OnStateChanging; + context.ChangeTracker.StateChanged += ChangeTracker_OnStateChanged; + context.ChangeTracker.DetectingAllChanges += ChangeTracker_OnDetectingAllChanges; + context.ChangeTracker.DetectedAllChanges += ChangeTracker_OnDetectedAllChanges; + context.ChangeTracker.DetectingEntityChanges += ChangeTracker_OnDetectingEntityChanges; + context.ChangeTracker.DetectedEntityChanges += ChangeTracker_OnDetectedEntityChanges; + context.SavingChanges += Context_OnSavingChanges; + context.SavedChanges += Context_OnSavedChanges; + context.SaveChangesFailed += Context_OnSaveChangesFailed; + + context.ChangeTracker.Clear(); + + Assert.True(context.ChangeTracker.AutoDetectChangesEnabled); + Assert.True(context.ChangeTracker.LazyLoadingEnabled); + Assert.Equal(QueryTrackingBehavior.NoTracking, context.ChangeTracker.QueryTrackingBehavior); + Assert.Equal(CascadeTiming.Immediate, context.ChangeTracker.CascadeDeleteTiming); + Assert.Equal(CascadeTiming.Immediate, context.ChangeTracker.DeleteOrphansTiming); + Assert.Equal(AutoTransactionBehavior.WhenNeeded, context.Database.AutoTransactionBehavior); + Assert.True(context.Database.AutoSavepointsEnabled); + + Assert.False(_changeTracker_OnTracking); + Assert.False(_changeTracker_OnTracked); + Assert.False(_changeTracker_OnStateChanging); + Assert.False(_changeTracker_OnStateChanged); + Assert.False(_changeTracker_OnDetectingAllChanges); + Assert.False(_changeTracker_OnDetectedAllChanges); + Assert.False(_changeTracker_OnDetectingEntityChanges); + Assert.False(_changeTracker_OnDetectedEntityChanges); + + var customer = new Customer { CustomerId = "C" }; + context.Customers.Attach(customer).State = EntityState.Modified; + context.Customers.Attach(customer).State = EntityState.Unchanged; + + Assert.True(_changeTracker_OnTracking); + Assert.True(_changeTracker_OnTracked); + Assert.True(_changeTracker_OnStateChanging); + Assert.True(_changeTracker_OnStateChanged); + Assert.False(_changeTracker_OnDetectingAllChanges); + Assert.False(_changeTracker_OnDetectedAllChanges); + Assert.False(_changeTracker_OnDetectingEntityChanges); + Assert.False(_changeTracker_OnDetectedEntityChanges); + + context.SaveChanges(); + + Assert.True(_changeTracker_OnDetectingAllChanges); + Assert.True(_changeTracker_OnDetectedAllChanges); + Assert.True(_changeTracker_OnDetectingEntityChanges); + Assert.True(_changeTracker_OnDetectedEntityChanges); + Assert.True(_context_OnSavedChanges); + Assert.True(_context_OnSavingChanges); + Assert.False(_context_OnSaveChangesFailed); + } + + private void Context_OnSavingChanges(object sender, SavingChangesEventArgs e) + => _context_OnSavingChanges = true; + + private bool _context_OnSavingChanges; + + private void Context_OnSavedChanges(object sender, SavedChangesEventArgs e) + => _context_OnSavedChanges = true; + + private bool _context_OnSavedChanges; + + private void Context_OnSaveChangesFailed(object sender, SaveChangesFailedEventArgs e) + => _context_OnSaveChangesFailed = true; + + private bool _context_OnSaveChangesFailed; + + private bool _localView_OnPropertyChanged; + + private void LocalView_OnPropertyChanged(object sender, PropertyChangedEventArgs e) + => _localView_OnPropertyChanged = true; + + private bool _localView_OnPropertyChanging; + + private void LocalView_OnPropertyChanging(object sender, PropertyChangingEventArgs e) + => _localView_OnPropertyChanging = true; + + private bool _localView_OnCollectionChanged; + + private void LocalView_OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + => _localView_OnCollectionChanged = true; + + private bool _changeTracker_OnTracking; + + private void ChangeTracker_OnTracking(object sender, EntityTrackingEventArgs e) + => _changeTracker_OnTracking = true; + + private bool _changeTracker_OnTracked; + + private void ChangeTracker_OnTracked(object sender, EntityTrackedEventArgs e) + => _changeTracker_OnTracked = true; + + private bool _changeTracker_OnStateChanging; + + private void ChangeTracker_OnStateChanging(object sender, EntityStateChangingEventArgs e) + => _changeTracker_OnStateChanging = true; + + private bool _changeTracker_OnStateChanged; + + private void ChangeTracker_OnStateChanged(object sender, EntityStateChangedEventArgs e) + => _changeTracker_OnStateChanged = true; + + private bool _changeTracker_OnDetectingAllChanges; + + private void ChangeTracker_OnDetectingAllChanges(object sender, DetectChangesEventArgs e) + => _changeTracker_OnDetectingAllChanges = true; + + private bool _changeTracker_OnDetectedAllChanges; + + private void ChangeTracker_OnDetectedAllChanges(object sender, DetectedChangesEventArgs e) + => _changeTracker_OnDetectedAllChanges = true; + + private bool _changeTracker_OnDetectingEntityChanges; + + private void ChangeTracker_OnDetectingEntityChanges(object sender, DetectEntityChangesEventArgs e) + => _changeTracker_OnDetectingEntityChanges = true; + + private bool _changeTracker_OnDetectedEntityChanges; + + private void ChangeTracker_OnDetectedEntityChanges(object sender, DetectedEntityChangesEventArgs e) + => _changeTracker_OnDetectedEntityChanges = true; + + [ConditionalTheory] + [InlineData(false, null)] + [InlineData(true, null)] + [InlineData(false, QueryTrackingBehavior.TrackAll)] + [InlineData(true, QueryTrackingBehavior.TrackAll)] + [InlineData(false, QueryTrackingBehavior.NoTracking)] + [InlineData(true, QueryTrackingBehavior.NoTracking)] + [InlineData(false, QueryTrackingBehavior.NoTrackingWithIdentityResolution)] + [InlineData(true, QueryTrackingBehavior.NoTrackingWithIdentityResolution)] + public async Task Default_Context_configuration_is_reset(bool async, QueryTrackingBehavior? queryTrackingBehavior) + { + var serviceProvider = BuildServiceProvider(b => UseQueryTrackingBehavior(b, queryTrackingBehavior)); + + var serviceScope = serviceProvider.CreateScope(); + var scopedProvider = serviceScope.ServiceProvider; + + var context1 = scopedProvider.GetService(); + + context1!.ChangeTracker.AutoDetectChangesEnabled = false; + context1.ChangeTracker.LazyLoadingEnabled = false; + context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; + context1.Database.AutoTransactionBehavior = AutoTransactionBehavior.Never; + context1.Database.AutoSavepointsEnabled = false; + context1.ChangeTracker.CascadeDeleteTiming = CascadeTiming.Immediate; + context1.ChangeTracker.DeleteOrphansTiming = CascadeTiming.Immediate; + + await Dispose(serviceScope, async); + + serviceScope = serviceProvider.CreateScope(); + scopedProvider = serviceScope.ServiceProvider; + + var context2 = scopedProvider.GetService(); + + Assert.Same(context1, context2); + + Assert.True(context2!.ChangeTracker.AutoDetectChangesEnabled); + Assert.True(context2.ChangeTracker.LazyLoadingEnabled); + Assert.Equal(queryTrackingBehavior ?? QueryTrackingBehavior.TrackAll, context2.ChangeTracker.QueryTrackingBehavior); + Assert.Equal(CascadeTiming.Immediate, context2.ChangeTracker.CascadeDeleteTiming); + Assert.Equal(CascadeTiming.Immediate, context2.ChangeTracker.DeleteOrphansTiming); + Assert.Equal(AutoTransactionBehavior.WhenNeeded, context2.Database.AutoTransactionBehavior); + Assert.True(context2.Database.AutoSavepointsEnabled); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Default_Context_configuration_is_reset_with_factory(bool async, bool withDependencyInjection) + { + var factory = BuildFactory(withDependencyInjection); + + var context1 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + context1.ChangeTracker.AutoDetectChangesEnabled = false; + context1.ChangeTracker.LazyLoadingEnabled = false; + context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; + context1.Database.AutoTransactionBehavior = AutoTransactionBehavior.Never; + context1.Database.AutoSavepointsEnabled = false; + context1.ChangeTracker.CascadeDeleteTiming = CascadeTiming.Immediate; + context1.ChangeTracker.DeleteOrphansTiming = CascadeTiming.Immediate; + + await Dispose(context1, async); + + var context2 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + Assert.Same(context1, context2); + + Assert.True(context2.ChangeTracker.AutoDetectChangesEnabled); + Assert.True(context2.ChangeTracker.LazyLoadingEnabled); + Assert.Equal(QueryTrackingBehavior.TrackAll, context2.ChangeTracker.QueryTrackingBehavior); + Assert.Equal(CascadeTiming.Immediate, context2.ChangeTracker.CascadeDeleteTiming); + Assert.Equal(CascadeTiming.Immediate, context2.ChangeTracker.DeleteOrphansTiming); + Assert.Equal(AutoTransactionBehavior.WhenNeeded, context2.Database.AutoTransactionBehavior); + Assert.True(context2.Database.AutoSavepointsEnabled); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task State_manager_is_reset(bool useInterface, bool async) + { + var weakRef = await Scoper( + async () => + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + var serviceScope = serviceProvider.CreateScope(); + var scopedProvider = serviceScope.ServiceProvider; + + var context1 = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + var entity = context1.Customers.First(c => c.CustomerId == "ALFKI"); + + Assert.Single(context1.ChangeTracker.Entries()); + + await Dispose(serviceScope, async); + + serviceScope = serviceProvider.CreateScope(); + scopedProvider = serviceScope.ServiceProvider; + + var context2 = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + Assert.Same(context1, context2); + Assert.Empty(context2.ChangeTracker.Entries()); + + return new WeakReference(entity); + }); + + GC.Collect(); + + Assert.False(weakRef.IsAlive); + } + + private static async Task Scoper(Func> getter) + => await getter(); + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task State_manager_is_reset_with_factory(bool async, bool withDependencyInjection) + { + var weakRef = await Scoper( + async () => + { + var factory = BuildFactory(withDependencyInjection); + + var context1 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + var entity = context1.Customers.First(c => c.CustomerId == "ALFKI"); + + Assert.Single(context1.ChangeTracker.Entries()); + + await Dispose(context1, async); + + var context2 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + Assert.Same(context1, context2); + Assert.Empty(context2.ChangeTracker.Entries()); + + return new WeakReference(entity); + }); + + GC.Collect(); + + Assert.False(weakRef.IsAlive); + } + + [ConditionalTheory] // Issue #25486 + [InlineData(false, false, false)] + [InlineData(true, false, false)] + [InlineData(false, true, false)] + [InlineData(true, true, false)] + [InlineData(false, false, true)] + [InlineData(true, false, true)] + [InlineData(false, true, true)] + [InlineData(true, true, true)] + public async Task Service_properties_are_disposed(bool useInterface, bool async, bool load) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + var serviceScope = serviceProvider.CreateScope(); + var scopedProvider = serviceScope.ServiceProvider; + + var context1 = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + context1.ChangeTracker.LazyLoadingEnabled = true; + + var entity = context1.Customers.First(c => c.CustomerId == "ALFKI"); + var orderLoader = entity.LazyLoader; + if (load) + { + orderLoader.Load(entity, nameof(Customer.Orders)); + Assert.True(orderLoader.IsLoaded(entity, nameof(Customer.Orders))); + } + + Assert.Equal(load ? 7 : 1, context1.ChangeTracker.Entries().Count()); + + await Dispose(serviceScope, async); + + if (load) + { + orderLoader.Load(entity, nameof(Customer.Orders)); + Assert.True(orderLoader.IsLoaded(entity, nameof(Customer.Orders))); + orderLoader.SetLoaded(entity, nameof(Customer.Orders), loaded: false); + } + + AssertDisposed(() => orderLoader.Load(entity, nameof(Customer.Orders)), "Customer", "Orders"); + } + + [ConditionalTheory] // Issue #25486 + [InlineData(false, false, false)] + [InlineData(true, false, false)] + [InlineData(false, true, false)] + [InlineData(true, true, false)] + [InlineData(false, false, true)] + [InlineData(true, false, true)] + [InlineData(false, true, true)] + [InlineData(true, true, true)] + public async Task Service_properties_are_disposed_with_factory(bool async, bool withDependencyInjection, bool load) + { + var factory = BuildFactory(withDependencyInjection); + + var context1 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + context1.ChangeTracker.LazyLoadingEnabled = true; + + var entity = context1.Customers.First(c => c.CustomerId == "ALFKI"); + var orderLoader = entity.LazyLoader; + if (load) + { + orderLoader.Load(entity, nameof(Customer.Orders)); + Assert.True(orderLoader.IsLoaded(entity, nameof(Customer.Orders))); + } + + Assert.Equal(load ? 7 : 1, context1.ChangeTracker.Entries().Count()); + + await Dispose(context1, async); + + if (load) + { + orderLoader.Load(entity, nameof(Customer.Orders)); + Assert.True(orderLoader.IsLoaded(entity, nameof(Customer.Orders))); + orderLoader.SetLoaded(entity, nameof(Customer.Orders), loaded: false); + } + + AssertDisposed(() => orderLoader.Load(entity, nameof(Customer.Orders)), "Customer", "Orders"); + } + + private static void AssertDisposed(Action testCode, string entityTypeName, string navigationName) + => Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + CoreEventId.LazyLoadOnDisposedContextWarning.ToString(), + CoreResources.LogLazyLoadOnDisposedContext(new TestLogger()) + .GenerateMessage(entityTypeName, navigationName), + "CoreEventId.LazyLoadOnDisposedContextWarning"), + Assert.Throws( + testCode).Message); + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Pool_disposes_context_when_context_not_pooled(bool useInterface, bool async) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + var serviceScope1 = serviceProvider.CreateScope(); + var scopedProvider1 = serviceScope1.ServiceProvider; + + var context1 = useInterface + ? (PooledContext)scopedProvider1.GetService() + : scopedProvider1.GetService(); + + var serviceScope2 = serviceProvider.CreateScope(); + var scopedProvider2 = serviceScope2.ServiceProvider; + + var context2 = useInterface + ? (PooledContext)scopedProvider2.GetService() + : scopedProvider2.GetService(); + + await Dispose(serviceScope1, async); + await Dispose(serviceScope2, async); + + Assert.Throws(() => context1.Customers.ToList()); + Assert.Throws(() => context2.Customers.ToList()); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Pool_disposes_contexts_when_disposed(bool useInterface, bool async) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + var serviceScope = serviceProvider.CreateScope(); + var scopedProvider = serviceScope.ServiceProvider; + + var context = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + await Dispose(serviceScope, async); + + await Dispose((IDisposable)serviceProvider, async); + + Assert.Throws(() => context.Customers.ToList()); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Object_in_pool_is_disposed(bool useInterface, bool async) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + var serviceScope = serviceProvider.CreateScope(); + var scopedProvider = serviceScope.ServiceProvider; + + var context = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + await Dispose(serviceScope, async); + + Assert.Throws(() => context!.Customers.ToList()); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Double_dispose_does_not_enter_pool_twice(bool useInterface, bool async) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + var scope = serviceProvider.CreateScope(); + var lease = scope.ServiceProvider.GetRequiredService>(); + var context = lease.Context; + + await Dispose(scope, async); + + await Dispose(scope, async); + + using var scope1 = serviceProvider.CreateScope(); + var lease1 = scope1.ServiceProvider.GetRequiredService>(); + + using var scope2 = serviceProvider.CreateScope(); + var lease2 = scope2.ServiceProvider.GetRequiredService>(); + + Assert.Same(context, lease1.Context); + Assert.NotSame(lease1.Context, lease2.Context); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Double_dispose_with_standalone_lease_does_not_enter_pool_twice(bool useInterface, bool async) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + var pool = serviceProvider.GetRequiredService>(); + var lease = new DbContextLease(pool, standalone: true); + var context = (PooledContext)lease.Context; + ((IDbContextPoolable)context).SetLease(lease); + + await Dispose(context, async); + + await Dispose(context, async); + + using var context1 = new DbContextLease(pool, standalone: true).Context; + using var context2 = new DbContextLease(pool, standalone: true).Context; + + Assert.Same(context, context1); + Assert.NotSame(context1, context2); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Can_double_dispose_with_factory(bool async, bool withDependencyInjection) + { + var factory = BuildFactory(withDependencyInjection); + + var context = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + context.Customers.Load(); + + await Dispose(context, async); + + Assert.Throws(() => context.Customers.ToList()); + + await Dispose(context, async); + + Assert.Throws(() => context.Customers.ToList()); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Provider_services_are_reset(bool useInterface, bool async) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(o => o.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking)); + + var serviceScope = serviceProvider.CreateScope(); + var scopedProvider = serviceScope.ServiceProvider; + + var context1 = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + context1!.Database.BeginTransaction(); + + Assert.NotNull(context1.Database.CurrentTransaction); + + await Dispose(serviceScope, async); + + serviceScope = serviceProvider.CreateScope(); + scopedProvider = serviceScope.ServiceProvider; + + var context2 = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + Assert.Same(context1, context2); + Assert.Null(context2!.Database.CurrentTransaction); + + context2.Database.BeginTransaction(); + + Assert.NotNull(context2.Database.CurrentTransaction); + + await Dispose(serviceScope, async); + + serviceScope = serviceProvider.CreateScope(); + scopedProvider = serviceScope.ServiceProvider; + + var context3 = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + Assert.Same(context2, context3); + Assert.Null(context3!.Database.CurrentTransaction); + } + + [ConditionalTheory] + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Provider_services_are_reset_with_factory(bool async, bool withDependencyInjection) + { + var factory = BuildFactory(withDependencyInjection); + + var context1 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + context1.Database.BeginTransaction(); + + Assert.NotNull(context1.Database.CurrentTransaction); + + await Dispose(context1, async); + + var context2 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + Assert.Same(context1, context2); + Assert.Null(context2.Database.CurrentTransaction); + + context2.Database.BeginTransaction(); + + Assert.NotNull(context2.Database.CurrentTransaction); + + await Dispose(context2, async); + + var context3 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + + Assert.Same(context2, context3); + Assert.Null(context3.Database.CurrentTransaction); + } + + [ConditionalTheory] // Issue #27308. + [InlineData(false, false)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(true, true)] + public async Task Handle_open_connection_when_returning_to_pool_for_owned_connection(bool async, bool openWithEf) + { + var serviceProvider = new ServiceCollection() + .AddDbContextPool( + ob => ob.UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString) + .EnableServiceProviderCaching(false)) + .BuildServiceProvider(validateScopes: true); + + var serviceScope = serviceProvider.CreateScope(); + var scopedProvider = serviceScope.ServiceProvider; + + var context1 = scopedProvider.GetRequiredService(); + var connection1 = context1.Database.GetDbConnection(); + + if (async) + { + if (openWithEf) + { + await context1.Database.OpenConnectionAsync(); + } + else + { + await connection1.OpenAsync(); + } + } + else + { + if (openWithEf) + { + context1.Database.OpenConnection(); + } + else + { + connection1.Open(); + } + } + + Assert.Equal(ConnectionState.Open, connection1.State); + + await Dispose(serviceScope, async); + + Assert.Equal(ConnectionState.Closed, connection1.State); + + serviceScope = serviceProvider.CreateScope(); + scopedProvider = serviceScope.ServiceProvider; + + var context2 = scopedProvider.GetRequiredService(); + Assert.Same(context1, context2); + + var connection2 = context2.Database.GetDbConnection(); + Assert.Same(connection1, connection2); + + Assert.Equal(ConnectionState.Closed, connection1.State); + + await Dispose(serviceScope, async); + } + + [ConditionalTheory] // Issue #27308. + [InlineData(false, false, false)] + [InlineData(true, false, false)] + [InlineData(false, true, false)] + [InlineData(true, true, false)] + [InlineData(false, false, true)] + [InlineData(true, false, true)] + public async Task Handle_open_connection_when_returning_to_pool_for_external_connection(bool async, bool startsOpen, bool openWithEf) + { + using var connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + + if (startsOpen) + { + if (async) + { + await connection.OpenAsync(); + } + else + { + connection.Open(); + } + } + + var serviceProvider = new ServiceCollection() + .AddDbContextPool( + ob => ob.UseLibRed(connection) + .EnableServiceProviderCaching(false)) + .BuildServiceProvider(validateScopes: true); + + var serviceScope = serviceProvider.CreateScope(); + var scopedProvider = serviceScope.ServiceProvider; + + var context1 = scopedProvider.GetRequiredService(); + Assert.Same(connection, context1.Database.GetDbConnection()); + + if (!startsOpen) + { + if (async) + { + if (openWithEf) + { + await context1.Database.OpenConnectionAsync(); + } + else + { + await connection.OpenAsync(); + } + } + else + { + if (openWithEf) + { + context1.Database.OpenConnection(); + } + else + { + connection.Open(); + } + } + } + + Assert.Equal(ConnectionState.Open, connection.State); + + await Dispose(serviceScope, async); + + Assert.Equal(ConnectionState.Open, connection.State); + + serviceScope = serviceProvider.CreateScope(); + scopedProvider = serviceScope.ServiceProvider; + + var context2 = scopedProvider.GetRequiredService(); + Assert.Same(context1, context2); + + Assert.Same(connection, context2.Database.GetDbConnection()); + + Assert.Equal(ConnectionState.Open, connection.State); + + await Dispose(serviceScope, async); + } + + [ConditionalTheory] // Issue #27308. + [InlineData(false, false, false)] + [InlineData(true, false, false)] + [InlineData(false, true, false)] + [InlineData(true, true, false)] + [InlineData(false, false, true)] + [InlineData(true, false, true)] + [InlineData(false, true, true)] + [InlineData(true, true, true)] + public async Task Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory( + bool async, + bool openWithEf, + bool withDependencyInjection) + { + var options = new DbContextOptionsBuilder() + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString) + .EnableServiceProviderCaching(false) + .Options; + + var factory = + withDependencyInjection + ? new ServiceCollection() + .AddPooledDbContextFactory( + ob => ob.UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString) + .EnableServiceProviderCaching(false)) + .BuildServiceProvider(validateScopes: true) + .GetRequiredService>() + : new PooledDbContextFactory(options); + + var context1 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + var connection1 = context1.Database.GetDbConnection(); + + if (async) + { + if (openWithEf) + { + await context1.Database.OpenConnectionAsync(); + } + else + { + await connection1.OpenAsync(); + } + } + else + { + if (openWithEf) + { + context1.Database.OpenConnection(); + } + else + { + connection1.Open(); + } + } + + Assert.Equal(ConnectionState.Open, connection1.State); + + await Dispose(context1, async); + + Assert.Equal(ConnectionState.Closed, connection1.State); + + var context2 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + Assert.Same(context1, context2); + + var connection2 = context2.Database.GetDbConnection(); + Assert.Same(connection1, connection2); + + Assert.Equal(ConnectionState.Closed, connection1.State); + + await Dispose(context2, async); + } + + [ConditionalTheory] // Issue #27308. + [InlineData(false, false, false, false)] + [InlineData(true, false, false, false)] + [InlineData(false, true, false, false)] + [InlineData(true, true, false, false)] + [InlineData(false, false, true, false)] + [InlineData(true, false, true, false)] + [InlineData(false, false, false, true)] + [InlineData(true, false, false, true)] + [InlineData(false, true, false, true)] + [InlineData(true, true, false, true)] + [InlineData(false, false, true, true)] + [InlineData(true, false, true, true)] + public async Task Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory( + bool async, + bool startsOpen, + bool openWithEf, + bool withDependencyInjection) + { + using var connection = new LibRedConnection(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + + if (startsOpen) + { + if (async) + { + await connection.OpenAsync(); + } + else + { + connection.Open(); + } + } + + var options = new DbContextOptionsBuilder() + .UseLibRed(connection) + .EnableServiceProviderCaching(false) + .Options; + + var factory = + withDependencyInjection + ? new ServiceCollection() + .AddPooledDbContextFactory( + ob => ob.UseLibRed(connection) + .EnableServiceProviderCaching(false)) + .BuildServiceProvider(validateScopes: true) + .GetRequiredService>() + : new PooledDbContextFactory(options); + + var context1 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + Assert.Same(connection, context1.Database.GetDbConnection()); + + if (!startsOpen) + { + if (async) + { + if (openWithEf) + { + await context1.Database.OpenConnectionAsync(); + } + else + { + await connection.OpenAsync(); + } + } + else + { + if (openWithEf) + { + context1.Database.OpenConnection(); + } + else + { + connection.Open(); + } + } + } + + Assert.Equal(ConnectionState.Open, connection.State); + + await Dispose(context1, async); + + Assert.Equal(ConnectionState.Open, connection.State); + + var context2 = async ? await factory.CreateDbContextAsync() : factory.CreateDbContext(); + Assert.Same(context1, context2); + + Assert.Same(connection, context2.Database.GetDbConnection()); + + Assert.Equal(ConnectionState.Open, connection.State); + + await Dispose(context2, async); + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public void Double_dispose_concurrency_test(bool useInterface) + { + var serviceProvider = useInterface + ? BuildServiceProvider() + : BuildServiceProvider(); + + Parallel.For( + fromInclusive: 0, toExclusive: 32, body: s => + { + using var scope = serviceProvider.CreateScope(); + var scopedProvider = scope.ServiceProvider; + + var context = useInterface + ? (PooledContext)scopedProvider.GetService() + : scopedProvider.GetService(); + + var _ = context.Customers.ToList(); + + context.Dispose(); + }); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Concurrency_test2(bool async) + { + var factory = BuildFactory(withDependencyInjection: false); + + await Task.WhenAll( + Enumerable.Range(0, 10).Select( + _ => Task.Run( + async () => + { + for (var j = 0; j < 1_000_000; j++) + { + var ctx = factory.CreateDbContext(); + + if (async) + { + await ctx.DisposeAsync(); + } + else + { + ctx.Dispose(); + } + } + }))); + } + + private void UseQueryTrackingBehavior(DbContextOptionsBuilder optionsBuilder, QueryTrackingBehavior? queryTrackingBehavior) + { + if (queryTrackingBehavior.HasValue) + { + optionsBuilder.UseQueryTrackingBehavior(queryTrackingBehavior.Value); + } + } + + private async Task Dispose(IDisposable disposable, bool async) + { + if (async) + { + await ((IAsyncDisposable)disposable).DisposeAsync(); + } + else + { + disposable.Dispose(); + } + } + + private readonly ITestOutputHelper _testOutputHelper = testOutputHelper; +} diff --git a/test/EFCore.LibRed.FunctionalTests/DefaultValuesTest.cs b/test/EFCore.LibRed.FunctionalTests/DefaultValuesTest.cs new file mode 100644 index 00000000..3b76daff --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/DefaultValuesTest.cs @@ -0,0 +1,97 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class DefaultValuesTest : IAsyncLifetime + { + private readonly IServiceProvider _serviceProvider = new ServiceCollection() + .AddEntityFrameworkLibRed() + .BuildServiceProvider(); + + [ConditionalFact] + public void Can_use_SQL_Server_default_values() + { + using (var context = new ChipsContext(_serviceProvider, TestStore.Name)) + { + context.Database.EnsureCreatedResiliently(); + + context.Chippers.Add( + new Chipper { Id = "Default" }); + + context.SaveChanges(); + + var honeyDijon = context.Add( + new KettleChips { Name = "Honey Dijon" }).Entity; + var buffaloBleu = context.Add( + new KettleChips { Name = "Buffalo Bleu", BestBuyDate = new DateTime(2111, 1, 11) }).Entity; + + context.SaveChanges(); + + Assert.Equal(new DateTime(2035, 9, 25), honeyDijon.BestBuyDate); + Assert.Equal(new DateTime(2111, 1, 11), buffaloBleu.BestBuyDate); + } + + using (var context = new ChipsContext(_serviceProvider, TestStore.Name)) + { + Assert.Equal(new DateTime(2035, 9, 25), context.Chips.Single(c => c.Name == "Honey Dijon").BestBuyDate); + Assert.Equal(new DateTime(2111, 1, 11), context.Chips.Single(c => c.Name == "Buffalo Bleu").BestBuyDate); + } + } + + private class ChipsContext(IServiceProvider serviceProvider, string databaseName) : DbContext + { + public DbSet Chips { get; set; } + public DbSet Chippers { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .UseLibRed(LibRedTestStore.CreateConnectionString(databaseName), TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(serviceProvider); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity( + b => + { + b.Property(e => e.BestBuyDate) + .ValueGeneratedOnAdd() + .HasDefaultValue(new DateTime(2035, 9, 25)); + + b.Property(e => e.ChipperId) + .IsRequired() + .HasDefaultValue("Default"); + }); + } + + private class KettleChips + { + public int Id { get; set; } + public string Name { get; set; } + public DateTime BestBuyDate { get; set; } + public string ChipperId { get; set; } + + public Chipper Manufacturer { get; set; } + } + + private class Chipper + { + public string Id { get; set; } + } + + protected LibRedTestStore TestStore { get; private set; } + + public async Task InitializeAsync() + => TestStore = await LibRedTestStore.CreateInitializedAsync("DefaultValuesTest"); + + public async Task DisposeAsync() + => await TestStore.DisposeAsync(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/DesignTimeLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/DesignTimeLibRedTest.cs new file mode 100644 index 00000000..98b5d01c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/DesignTimeLibRedTest.cs @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + + +using EntityFrameworkCore.LibRed.Design.Internal; +using System.Reflection; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class DesignTimeLibRedTest(DesignTimeLibRedTest.DesignTimeLibRedFixture fixture) + : DesignTimeTestBase(fixture) +{ + protected override Assembly ProviderAssembly + => typeof(LibRedDesignTimeServices).Assembly; + + public class DesignTimeLibRedFixture : DesignTimeFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/EFCore.LibRed.FunctionalTests.csproj b/test/EFCore.LibRed.FunctionalTests/EFCore.LibRed.FunctionalTests.csproj new file mode 100644 index 00000000..6dc5cd3a --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/EFCore.LibRed.FunctionalTests.csproj @@ -0,0 +1,132 @@ + + + + $(JetTargetFramework) + EntityFrameworkCore.LibRed.FunctionalTests + EntityFrameworkCore.LibRed.FunctionalTests + AnyCPU;x86;x64 + true + disable + + $(NoWarn);CA1416 + + + + + %(RecursiveDir)%(Filename)%(Extension) + + + + + + + + + + + + + + + + + + + + + + + + + + + $(LocalEFCoreRepository)\artifacts\bin\EFCore.Relational.Specification.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.dll + + + $(LocalEFCoreRepository)\artifacts\bin\EFCore.Relational.Specification.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.Abstractions.dll + + + $(LocalEFCoreRepository)\artifacts\bin\EFCore.Relational.Specification.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.Analyzers.dll + + + $(LocalEFCoreRepository)\artifacts\bin\EFCore.Relational.Specification.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.Proxies.dll + + + $(LocalEFCoreRepository)\artifacts\bin\EFCore.Relational.Specification.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.Relational.dll + + + $(LocalEFCoreRepository)\artifacts\bin\EFCore.Relational.Specification.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.Relational.Specification.Tests.dll + + + $(LocalEFCoreRepository)\artifacts\bin\EFCore.Relational.Specification.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.Specification.Tests.dll + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + + + Always + + + + + + Northwind.sql + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/EFCore.LibRed.FunctionalTests/EntitySplittingSqlServerTest.cs b/test/EFCore.LibRed.FunctionalTests/EntitySplittingSqlServerTest.cs new file mode 100644 index 00000000..caea2ac4 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/EntitySplittingSqlServerTest.cs @@ -0,0 +1,50 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.Logging; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class EntitySplittingLibRedTest(NonSharedFixture fixture, ITestOutputHelper testOutputHelper) : EntitySplittingTestBase(fixture, testOutputHelper) +{ + public override async Task Can_roundtrip() + { + await base.Can_roundtrip(); + + AssertSql( +$""" +@p0='2' (Nullable = true) + +INSERT INTO `MeterReadings` (`ReadingStatus`) +VALUES ({AssertSqlHelper.Parameter("@p0")}); +SELECT `Id` +FROM `MeterReadings` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", +// +$""" +@p1='1' +@p2='100' (Size = 255) +@p3=NULL (Size = 255) + +INSERT INTO `MeterReadingDetails` (`Id`, `CurrentRead`, `PreviousRead`) +VALUES ({AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}, {AssertSqlHelper.Parameter("@p3")}); +""", +// +""" +SELECT TOP 2 `m`.`Id`, `m0`.`CurrentRead`, `m0`.`PreviousRead`, `m`.`ReadingStatus` +FROM `MeterReadings` AS `m` +INNER JOIN `MeterReadingDetails` AS `m0` ON `m`.`Id` = `m0`.`Id` +"""); + } + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/EverythingIsBytesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/EverythingIsBytesLibRedTest.cs new file mode 100644 index 00000000..e8926b1a --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/EverythingIsBytesLibRedTest.cs @@ -0,0 +1,326 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Storage.Internal; +using System; +using System.Collections.Generic; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Diagnostics; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using System.Linq; +using System.Threading.Tasks; +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class EverythingIsBytesLibRedTest(EverythingIsBytesLibRedTest.EverythingIsBytesLibRedFixture fixture) + : BuiltInDataTypesTestBase(fixture) + { + [ConditionalFact] + public virtual void Columns_have_expected_data_types() + { + var actual = BuiltInDataTypesLibRedTest.QueryForColumnTypes( + CreateContext(), + nameof(ObjectBackedDataTypes), + nameof(NullableBackedDataTypes), + nameof(NonNullableBackedDataTypes), + nameof(AnimalDetails)); + + const string expected = """ + #Dual.ID ---> [integer] + BinaryForeignKeyDataType.BinaryKeyDataTypeId ---> [nullable varbinary] [MaxLength = 255] + BinaryForeignKeyDataType.Id ---> [varbinary] [MaxLength = 4] + BinaryKeyDataType.Ex ---> [nullable varbinary] [MaxLength = 510] + BinaryKeyDataType.Id ---> [varbinary] [MaxLength = 255] + BuiltInDataTypes.Enum16 ---> [varbinary] [MaxLength = 2] + BuiltInDataTypes.Enum32 ---> [varbinary] [MaxLength = 4] + BuiltInDataTypes.Enum64 ---> [varbinary] [MaxLength = 8] + BuiltInDataTypes.Enum8 ---> [varbinary] [MaxLength = 1] + BuiltInDataTypes.EnumS8 ---> [varbinary] [MaxLength = 1] + BuiltInDataTypes.EnumU16 ---> [varbinary] [MaxLength = 2] + BuiltInDataTypes.EnumU32 ---> [varbinary] [MaxLength = 4] + BuiltInDataTypes.EnumU64 ---> [varbinary] [MaxLength = 8] + BuiltInDataTypes.Id ---> [varbinary] [MaxLength = 4] + BuiltInDataTypes.PartitionId ---> [varbinary] [MaxLength = 4] + BuiltInDataTypes.TestBoolean ---> [varbinary] [MaxLength = 1] + BuiltInDataTypes.TestByte ---> [varbinary] [MaxLength = 1] + BuiltInDataTypes.TestCharacter ---> [varbinary] [MaxLength = 2] + BuiltInDataTypes.TestDateOnly ---> [varbinary] [MaxLength = 510] + BuiltInDataTypes.TestDateTime ---> [varbinary] [MaxLength = 8] + BuiltInDataTypes.TestDateTimeOffset ---> [varbinary] [MaxLength = 12] + BuiltInDataTypes.TestDecimal ---> [varbinary] [MaxLength = 16] + BuiltInDataTypes.TestDouble ---> [varbinary] [MaxLength = 8] + BuiltInDataTypes.TestInt16 ---> [varbinary] [MaxLength = 2] + BuiltInDataTypes.TestInt32 ---> [varbinary] [MaxLength = 4] + BuiltInDataTypes.TestInt64 ---> [varbinary] [MaxLength = 8] + BuiltInDataTypes.TestSignedByte ---> [varbinary] [MaxLength = 1] + BuiltInDataTypes.TestSingle ---> [varbinary] [MaxLength = 4] + BuiltInDataTypes.TestTimeOnly ---> [varbinary] [MaxLength = 8] + BuiltInDataTypes.TestTimeSpan ---> [varbinary] [MaxLength = 8] + BuiltInDataTypes.TestUnsignedInt16 ---> [varbinary] [MaxLength = 2] + BuiltInDataTypes.TestUnsignedInt32 ---> [varbinary] [MaxLength = 4] + BuiltInDataTypes.TestUnsignedInt64 ---> [varbinary] [MaxLength = 8] + BuiltInDataTypesShadow.Enum16 ---> [varbinary] [MaxLength = 2] + BuiltInDataTypesShadow.Enum32 ---> [varbinary] [MaxLength = 4] + BuiltInDataTypesShadow.Enum64 ---> [varbinary] [MaxLength = 8] + BuiltInDataTypesShadow.Enum8 ---> [varbinary] [MaxLength = 1] + BuiltInDataTypesShadow.EnumS8 ---> [varbinary] [MaxLength = 1] + BuiltInDataTypesShadow.EnumU16 ---> [varbinary] [MaxLength = 2] + BuiltInDataTypesShadow.EnumU32 ---> [varbinary] [MaxLength = 4] + BuiltInDataTypesShadow.EnumU64 ---> [varbinary] [MaxLength = 8] + BuiltInDataTypesShadow.Id ---> [varbinary] [MaxLength = 4] + BuiltInDataTypesShadow.PartitionId ---> [varbinary] [MaxLength = 4] + BuiltInDataTypesShadow.TestBoolean ---> [varbinary] [MaxLength = 1] + BuiltInDataTypesShadow.TestByte ---> [varbinary] [MaxLength = 1] + BuiltInDataTypesShadow.TestCharacter ---> [varbinary] [MaxLength = 2] + BuiltInDataTypesShadow.TestDateOnly ---> [varbinary] [MaxLength = 510] + BuiltInDataTypesShadow.TestDateTime ---> [varbinary] [MaxLength = 8] + BuiltInDataTypesShadow.TestDateTimeOffset ---> [varbinary] [MaxLength = 12] + BuiltInDataTypesShadow.TestDecimal ---> [varbinary] [MaxLength = 16] + BuiltInDataTypesShadow.TestDouble ---> [varbinary] [MaxLength = 8] + BuiltInDataTypesShadow.TestInt16 ---> [varbinary] [MaxLength = 2] + BuiltInDataTypesShadow.TestInt32 ---> [varbinary] [MaxLength = 4] + BuiltInDataTypesShadow.TestInt64 ---> [varbinary] [MaxLength = 8] + BuiltInDataTypesShadow.TestSignedByte ---> [varbinary] [MaxLength = 1] + BuiltInDataTypesShadow.TestSingle ---> [varbinary] [MaxLength = 4] + BuiltInDataTypesShadow.TestTimeOnly ---> [varbinary] [MaxLength = 8] + BuiltInDataTypesShadow.TestTimeSpan ---> [varbinary] [MaxLength = 8] + BuiltInDataTypesShadow.TestUnsignedInt16 ---> [varbinary] [MaxLength = 2] + BuiltInDataTypesShadow.TestUnsignedInt32 ---> [varbinary] [MaxLength = 4] + BuiltInDataTypesShadow.TestUnsignedInt64 ---> [varbinary] [MaxLength = 8] + BuiltInNullableDataTypes.Enum16 ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypes.Enum32 ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypes.Enum64 ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypes.Enum8 ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypes.EnumS8 ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypes.EnumU16 ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypes.EnumU32 ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypes.EnumU64 ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypes.Id ---> [varbinary] [MaxLength = 4] + BuiltInNullableDataTypes.PartitionId ---> [varbinary] [MaxLength = 4] + BuiltInNullableDataTypes.TestByteArray ---> [nullable varbinary] [MaxLength = 510] + BuiltInNullableDataTypes.TestNullableBoolean ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypes.TestNullableByte ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypes.TestNullableCharacter ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypes.TestNullableDateOnly ---> [nullable varbinary] [MaxLength = 510] + BuiltInNullableDataTypes.TestNullableDateTime ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypes.TestNullableDateTimeOffset ---> [nullable varbinary] [MaxLength = 12] + BuiltInNullableDataTypes.TestNullableDecimal ---> [nullable varbinary] [MaxLength = 16] + BuiltInNullableDataTypes.TestNullableDouble ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypes.TestNullableInt16 ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypes.TestNullableInt32 ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypes.TestNullableInt64 ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypes.TestNullableSignedByte ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypes.TestNullableSingle ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypes.TestNullableTimeOnly ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypes.TestNullableTimeSpan ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypes.TestNullableUnsignedInt16 ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypes.TestNullableUnsignedInt32 ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypes.TestNullableUnsignedInt64 ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypes.TestString ---> [nullable varbinary] [MaxLength = 510] + BuiltInNullableDataTypesShadow.Enum16 ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypesShadow.Enum32 ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypesShadow.Enum64 ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypesShadow.Enum8 ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypesShadow.EnumS8 ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypesShadow.EnumU16 ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypesShadow.EnumU32 ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypesShadow.EnumU64 ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypesShadow.Id ---> [varbinary] [MaxLength = 4] + BuiltInNullableDataTypesShadow.PartitionId ---> [varbinary] [MaxLength = 4] + BuiltInNullableDataTypesShadow.TestByteArray ---> [nullable varbinary] [MaxLength = 510] + BuiltInNullableDataTypesShadow.TestNullableBoolean ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypesShadow.TestNullableByte ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypesShadow.TestNullableCharacter ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypesShadow.TestNullableDateOnly ---> [nullable varbinary] [MaxLength = 510] + BuiltInNullableDataTypesShadow.TestNullableDateTime ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypesShadow.TestNullableDateTimeOffset ---> [nullable varbinary] [MaxLength = 12] + BuiltInNullableDataTypesShadow.TestNullableDecimal ---> [nullable varbinary] [MaxLength = 16] + BuiltInNullableDataTypesShadow.TestNullableDouble ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypesShadow.TestNullableInt16 ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypesShadow.TestNullableInt32 ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypesShadow.TestNullableInt64 ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypesShadow.TestNullableSignedByte ---> [nullable varbinary] [MaxLength = 1] + BuiltInNullableDataTypesShadow.TestNullableSingle ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypesShadow.TestNullableTimeOnly ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypesShadow.TestNullableTimeSpan ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt16 ---> [nullable varbinary] [MaxLength = 2] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt32 ---> [nullable varbinary] [MaxLength = 4] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt64 ---> [nullable varbinary] [MaxLength = 8] + BuiltInNullableDataTypesShadow.TestString ---> [nullable varbinary] [MaxLength = 510] + DateTimeEnclosure.DateTimeOffset ---> [nullable varbinary] [MaxLength = 12] + DateTimeEnclosure.Id ---> [varbinary] [MaxLength = 4] + EmailTemplate.Id ---> [varbinary] [MaxLength = 16] + EmailTemplate.TemplateType ---> [varbinary] [MaxLength = 4] + MaxLengthDataTypes.ByteArray5 ---> [nullable varbinary] [MaxLength = 5] + MaxLengthDataTypes.ByteArray9000 ---> [nullable varbinary] [MaxLength = 255] + MaxLengthDataTypes.Id ---> [varbinary] [MaxLength = 4] + MaxLengthDataTypes.String3 ---> [nullable varbinary] [MaxLength = 3] + MaxLengthDataTypes.String9000 ---> [nullable varbinary] [MaxLength = 255] + MaxLengthDataTypes.StringUnbounded ---> [nullable varbinary] [MaxLength = 255] + StringEnclosure.Id ---> [varbinary] [MaxLength = 4] + StringEnclosure.Value ---> [nullable varbinary] [MaxLength = 510] + StringForeignKeyDataType.Id ---> [varbinary] [MaxLength = 4] + StringForeignKeyDataType.StringKeyDataTypeId ---> [nullable varbinary] [MaxLength = 255] + StringKeyDataType.Id ---> [varbinary] [MaxLength = 255] + UnicodeDataTypes.Id ---> [varbinary] [MaxLength = 4] + UnicodeDataTypes.StringAnsi ---> [nullable varbinary] [MaxLength = 510] + UnicodeDataTypes.StringAnsi3 ---> [nullable varbinary] [MaxLength = 3] + UnicodeDataTypes.StringAnsi9000 ---> [nullable varbinary] [MaxLength = 255] + UnicodeDataTypes.StringDefault ---> [nullable varbinary] [MaxLength = 510] + UnicodeDataTypes.StringUnicode ---> [nullable varbinary] [MaxLength = 510] + + """; + + Assert.Equal(expected, actual, ignoreLineEndingDifferences: true); + } + + public override Task Can_read_back_mapped_enum_from_collection_first_or_default() + // The query needs to generate TOP(1) + => Task.CompletedTask; + + public override Task Can_read_back_bool_mapped_as_int_through_navigation() + // Column is mapped as int rather than byte[] + => Task.CompletedTask; + + public override Task Object_to_string_conversion() + // Return values are string which byte[] cannot read + => Task.CompletedTask; + + public override Task Can_compare_enum_to_constant() + // Column is mapped as int rather than byte[] + => Task.CompletedTask; + + public override Task Can_compare_enum_to_parameter() + // Column is mapped as int rather than byte[] + => Task.CompletedTask; + + public class EverythingIsBytesLibRedFixture : BuiltInDataTypesFixtureBase + { + public override bool StrictEquality => true; + + public override bool SupportsAnsi => true; + + public override bool SupportsUnicodeToAnsiConversion => false; + + public override bool SupportsLargeStringComparisons => true; + + protected override string StoreName { get; } = "EverythingIsBytes"; + + protected override ITestStoreFactory TestStoreFactory => LibRedBytesTestStoreFactory.Instance; + + public override bool SupportsBinaryKeys => true; + + public override bool SupportsDecimalComparisons => true; + + public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind { get; } + + public override string ReallyLargeString + => string.Join("", Enumerable.Repeat("testphrase", 25)); + + public override int LongStringLength => 255; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base + .AddOptions(builder) + .ConfigureWarnings( + c => c.Log(JetEventId.DecimalTypeDefaultWarning)); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Ignore(); + modelBuilder.Ignore(); + modelBuilder.Ignore(); + } + } + + public class LibRedBytesTestStoreFactory : LibRedTestStoreFactory + { + public static new LibRedBytesTestStoreFactory Instance { get; } = new(); + + public override IServiceCollection AddProviderServices(IServiceCollection serviceCollection) + => base.AddProviderServices( + serviceCollection.AddSingleton()); + } + + public class LibRedBytesTypeMappingSource : RelationalTypeMappingSource + { + private readonly JetByteArrayTypeMapping _rowversion = new("rowversion", size: 8); + + private readonly JetByteArrayTypeMapping _variableLengthBinary = new(); + + private readonly JetByteArrayTypeMapping _fixedLengthBinary = new(fixedLength: true); + + private readonly Dictionary _storeTypeMappings; + + public LibRedBytesTypeMappingSource( + TypeMappingSourceDependencies dependencies, + RelationalTypeMappingSourceDependencies relationalDependencies) + : base(dependencies, relationalDependencies) + { + _storeTypeMappings + = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "binary varying", _variableLengthBinary }, + { "binary", _fixedLengthBinary }, + { "image", _variableLengthBinary }, + { "rowversion", _rowversion }, + { "varbinary", _variableLengthBinary } + }; + } + + protected override RelationalTypeMapping FindMapping(in RelationalTypeMappingInfo mappingInfo) + => FindRawMapping(mappingInfo)?.Clone(mappingInfo); + + private RelationalTypeMapping FindRawMapping(RelationalTypeMappingInfo mappingInfo) + { + var clrType = mappingInfo.ClrType; + var storeTypeName = mappingInfo.StoreTypeName; + var storeTypeNameBase = mappingInfo.StoreTypeNameBase; + + if (storeTypeName != null) + { + if (_storeTypeMappings.TryGetValue(storeTypeName, out var mapping) + || _storeTypeMappings.TryGetValue(storeTypeNameBase, out mapping)) + { + return clrType == null + || mapping.ClrType == clrType + ? mapping + : null; + } + } + + if (clrType == typeof(byte[])) + { + if (mappingInfo.IsRowVersion == true) + { + return _rowversion; + } + + var isFixedLength = mappingInfo.IsFixedLength == true; + + var size = mappingInfo.Size ?? (mappingInfo.IsKeyOrIndex ? 255 : null); + if (size > 510) + { + size = isFixedLength ? 510 : null; + } + + return new JetByteArrayTypeMapping( + "varbinary(" + (size == null ? "510" : size.ToString()) + ")", + size, + isFixedLength, + storeTypePostfix: size == null ? StoreTypePostfix.None : null); + } + + return null; + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/EverythingIsStringsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/EverythingIsStringsLibRedTest.cs new file mode 100644 index 00000000..f79b8c2c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/EverythingIsStringsLibRedTest.cs @@ -0,0 +1,334 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Storage.Internal; +using System; +using System.Collections.Generic; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using System.Linq; +using System.Threading.Tasks; + +// ReSharper disable InconsistentNaming +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class EverythingIsStringsLibRedTest(EverythingIsStringsLibRedTest.EverythingIsStringsLibRedFixture fixture) + : BuiltInDataTypesTestBase< + EverythingIsStringsLibRedTest.EverythingIsStringsLibRedFixture>(fixture) + { + [ConditionalFact] + public virtual void Columns_have_expected_data_types() + { + var actual = BuiltInDataTypesLibRedTest.QueryForColumnTypes( + CreateContext(), + nameof(ObjectBackedDataTypes), + nameof(NullableBackedDataTypes), + nameof(NonNullableBackedDataTypes), + nameof(AnimalDetails)); + + const string expected = """ + #Dual.ID ---> [integer] + Animal.Id ---> [varchar] [MaxLength = 64] + AnimalIdentification.AnimalId ---> [varchar] [MaxLength = 64] + AnimalIdentification.Id ---> [varchar] [MaxLength = 64] + AnimalIdentification.Method ---> [varchar] [MaxLength = 255] + BinaryForeignKeyDataType.BinaryKeyDataTypeId ---> [nullable varchar] [MaxLength = 255] + BinaryForeignKeyDataType.Id ---> [varchar] [MaxLength = 64] + BinaryKeyDataType.Ex ---> [nullable varchar] [MaxLength = 255] + BinaryKeyDataType.Id ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.Enum16 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.Enum32 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.Enum64 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.Enum8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.EnumS8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.EnumU16 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.EnumU32 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.EnumU64 ---> [varchar] [MaxLength = 255] + BuiltInDataTypes.Id ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.PartitionId ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestBoolean ---> [varchar] [MaxLength = 1] + BuiltInDataTypes.TestByte ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestCharacter ---> [varchar] [MaxLength = 1] + BuiltInDataTypes.TestDateOnly ---> [varchar] [MaxLength = 10] + BuiltInDataTypes.TestDateTime ---> [varchar] [MaxLength = 48] + BuiltInDataTypes.TestDateTimeOffset ---> [varchar] [MaxLength = 48] + BuiltInDataTypes.TestDecimal ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestDouble ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestInt16 ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestInt32 ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestInt64 ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestSignedByte ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestSingle ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestTimeOnly ---> [varchar] [MaxLength = 48] + BuiltInDataTypes.TestTimeSpan ---> [varchar] [MaxLength = 48] + BuiltInDataTypes.TestUnsignedInt16 ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestUnsignedInt32 ---> [varchar] [MaxLength = 64] + BuiltInDataTypes.TestUnsignedInt64 ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.Enum16 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.Enum32 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.Enum64 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.Enum8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.EnumS8 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.EnumU16 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.EnumU32 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.EnumU64 ---> [varchar] [MaxLength = 255] + BuiltInDataTypesShadow.Id ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.PartitionId ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestBoolean ---> [varchar] [MaxLength = 1] + BuiltInDataTypesShadow.TestByte ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestCharacter ---> [varchar] [MaxLength = 1] + BuiltInDataTypesShadow.TestDateOnly ---> [varchar] [MaxLength = 10] + BuiltInDataTypesShadow.TestDateTime ---> [varchar] [MaxLength = 48] + BuiltInDataTypesShadow.TestDateTimeOffset ---> [varchar] [MaxLength = 48] + BuiltInDataTypesShadow.TestDecimal ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestDouble ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestInt16 ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestInt32 ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestInt64 ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestSignedByte ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestSingle ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestTimeOnly ---> [varchar] [MaxLength = 48] + BuiltInDataTypesShadow.TestTimeSpan ---> [varchar] [MaxLength = 48] + BuiltInDataTypesShadow.TestUnsignedInt16 ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestUnsignedInt32 ---> [varchar] [MaxLength = 64] + BuiltInDataTypesShadow.TestUnsignedInt64 ---> [varchar] [MaxLength = 64] + BuiltInNullableDataTypes.Enum16 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.Enum32 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.Enum64 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.Enum8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.EnumS8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.EnumU16 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.EnumU32 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.EnumU64 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.Id ---> [varchar] [MaxLength = 64] + BuiltInNullableDataTypes.PartitionId ---> [varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestByteArray ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypes.TestNullableBoolean ---> [nullable varchar] [MaxLength = 1] + BuiltInNullableDataTypes.TestNullableByte ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableCharacter ---> [nullable varchar] [MaxLength = 1] + BuiltInNullableDataTypes.TestNullableDateOnly ---> [nullable varchar] [MaxLength = 10] + BuiltInNullableDataTypes.TestNullableDateTime ---> [nullable varchar] [MaxLength = 48] + BuiltInNullableDataTypes.TestNullableDateTimeOffset ---> [nullable varchar] [MaxLength = 48] + BuiltInNullableDataTypes.TestNullableDecimal ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableDouble ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableInt16 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableInt32 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableInt64 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableSignedByte ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableSingle ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableTimeOnly ---> [nullable varchar] [MaxLength = 48] + BuiltInNullableDataTypes.TestNullableTimeSpan ---> [nullable varchar] [MaxLength = 48] + BuiltInNullableDataTypes.TestNullableUnsignedInt16 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableUnsignedInt32 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestNullableUnsignedInt64 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypes.TestString ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.Enum16 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.Enum32 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.Enum64 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.Enum8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.EnumS8 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.EnumU16 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.EnumU32 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.EnumU64 ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.Id ---> [varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.PartitionId ---> [varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestByteArray ---> [nullable varchar] [MaxLength = 255] + BuiltInNullableDataTypesShadow.TestNullableBoolean ---> [nullable varchar] [MaxLength = 1] + BuiltInNullableDataTypesShadow.TestNullableByte ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableCharacter ---> [nullable varchar] [MaxLength = 1] + BuiltInNullableDataTypesShadow.TestNullableDateOnly ---> [nullable varchar] [MaxLength = 10] + BuiltInNullableDataTypesShadow.TestNullableDateTime ---> [nullable varchar] [MaxLength = 48] + BuiltInNullableDataTypesShadow.TestNullableDateTimeOffset ---> [nullable varchar] [MaxLength = 48] + BuiltInNullableDataTypesShadow.TestNullableDecimal ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableDouble ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableInt16 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableInt32 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableInt64 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableSignedByte ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableSingle ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableTimeOnly ---> [nullable varchar] [MaxLength = 48] + BuiltInNullableDataTypesShadow.TestNullableTimeSpan ---> [nullable varchar] [MaxLength = 48] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt16 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt32 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestNullableUnsignedInt64 ---> [nullable varchar] [MaxLength = 64] + BuiltInNullableDataTypesShadow.TestString ---> [nullable varchar] [MaxLength = 255] + DateTimeEnclosure.DateTimeOffset ---> [nullable varchar] [MaxLength = 48] + DateTimeEnclosure.Id ---> [varchar] [MaxLength = 64] + EmailTemplate.Id ---> [varchar] [MaxLength = 36] + EmailTemplate.TemplateType ---> [varchar] [MaxLength = 255] + MaxLengthDataTypes.ByteArray5 ---> [nullable varchar] [MaxLength = 8] + MaxLengthDataTypes.ByteArray9000 ---> [nullable varchar] [MaxLength = 255] + MaxLengthDataTypes.Id ---> [varchar] [MaxLength = 64] + MaxLengthDataTypes.String3 ---> [nullable varchar] [MaxLength = 3] + MaxLengthDataTypes.String9000 ---> [nullable varchar] [MaxLength = 255] + MaxLengthDataTypes.StringUnbounded ---> [nullable varchar] [MaxLength = 255] + StringEnclosure.Id ---> [varchar] [MaxLength = 64] + StringEnclosure.Value ---> [nullable varchar] [MaxLength = 255] + StringForeignKeyDataType.Id ---> [varchar] [MaxLength = 64] + StringForeignKeyDataType.StringKeyDataTypeId ---> [nullable varchar] [MaxLength = 255] + StringKeyDataType.Id ---> [varchar] [MaxLength = 255] + UnicodeDataTypes.Id ---> [varchar] [MaxLength = 64] + UnicodeDataTypes.StringAnsi ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringAnsi3 ---> [nullable varchar] [MaxLength = 3] + UnicodeDataTypes.StringAnsi9000 ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringDefault ---> [nullable varchar] [MaxLength = 255] + UnicodeDataTypes.StringUnicode ---> [nullable varchar] [MaxLength = 255] + + """; + + Assert.Equal(expected, actual, ignoreLineEndingDifferences: true); + } + + public override Task Can_read_back_mapped_enum_from_collection_first_or_default() + // The query needs to generate TOP(1) + => Task.CompletedTask; + + public override Task Can_read_back_bool_mapped_as_int_through_navigation() + // Column is mapped as int rather than string + => Task.CompletedTask; + + public override Task Can_compare_enum_to_constant() + // Column is mapped as int rather than string + => Task.CompletedTask; + + public override Task Can_compare_enum_to_parameter() + // Column is mapped as int rather than string + => Task.CompletedTask; + + public class EverythingIsStringsLibRedFixture : BuiltInDataTypesFixtureBase + { + public override bool StrictEquality => true; + + public override bool SupportsAnsi => false; + + public override bool SupportsUnicodeToAnsiConversion => false; + + public override bool SupportsLargeStringComparisons => true; + + protected override string StoreName { get; } = "EverythingIsStrings"; + + protected override ITestStoreFactory TestStoreFactory => LibRedStringsTestStoreFactory.Instance; + + public override bool SupportsBinaryKeys => true; + + public override bool SupportsDecimalComparisons => true; + + public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind { get; } + + public override string ReallyLargeString + => string.Join("", Enumerable.Repeat("testphrase", 25)); + + public override int LongStringLength => 255; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base + .AddOptions(builder) + .ConfigureWarnings( + c => c.Log(JetEventId.DecimalTypeDefaultWarning)); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(e => e.ByteArray5).HasMaxLength(8); + } + } + + public class LibRedStringsTestStoreFactory : LibRedTestStoreFactory + { + public static new LibRedStringsTestStoreFactory Instance { get; } = new(); + + public override IServiceCollection AddProviderServices(IServiceCollection serviceCollection) + => base.AddProviderServices( + serviceCollection.AddSingleton()); + } + + public class LibRedStringsTypeMappingSource : RelationalTypeMappingSource + { + private readonly JetStringTypeMapping _fixedLengthUnicodeString = new(unicode: true, fixedLength: true); + + private readonly JetStringTypeMapping _variableLengthUnicodeString = new(unicode: true); + + private readonly JetStringTypeMapping _fixedLengthAnsiString = new(fixedLength: true); + + private readonly JetStringTypeMapping _variableLengthAnsiString = new(); + + private readonly Dictionary _storeTypeMappings; + + public LibRedStringsTypeMappingSource( + TypeMappingSourceDependencies dependencies, + RelationalTypeMappingSourceDependencies relationalDependencies) + : base(dependencies, relationalDependencies) + { + _storeTypeMappings + = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "char varying", _variableLengthAnsiString }, + { "char", _fixedLengthAnsiString }, + { "character varying", _variableLengthAnsiString }, + { "character", _fixedLengthAnsiString }, + { "national char varying", _variableLengthUnicodeString }, + { "national character varying", _variableLengthUnicodeString }, + { "national character", _fixedLengthUnicodeString }, + { "nchar", _fixedLengthUnicodeString }, + { "ntext", _variableLengthUnicodeString }, + { "nvarchar", _variableLengthUnicodeString }, + { "text", _variableLengthAnsiString }, + { "varchar", _variableLengthAnsiString } + }; + } + + protected override RelationalTypeMapping FindMapping(in RelationalTypeMappingInfo mappingInfo) + => FindRawMapping(mappingInfo)?.Clone(mappingInfo); + + private RelationalTypeMapping FindRawMapping(RelationalTypeMappingInfo mappingInfo) + { + var clrType = mappingInfo.ClrType; + var storeTypeName = mappingInfo.StoreTypeName; + var storeTypeNameBase = mappingInfo.StoreTypeNameBase; + + if (storeTypeName != null) + { + if (_storeTypeMappings.TryGetValue(storeTypeName, out var mapping) + || _storeTypeMappings.TryGetValue(storeTypeNameBase, out mapping)) + { + return clrType == null + || mapping.ClrType == clrType + ? mapping + : null; + } + } + + //Note - 255 is the max short text length in LibRed + if (clrType == typeof(string)) + { + var isAnsi = mappingInfo.IsUnicode == false; + var isFixedLength = mappingInfo.IsFixedLength == true; + var baseName = isAnsi ? "varchar" : "nvarchar"; + var maxSize = 255; + + var size = mappingInfo.Size ?? (mappingInfo.IsKeyOrIndex ? isAnsi ? 255 : 255 : null); + if (size > maxSize) + { + size = isFixedLength ? maxSize : null; + } + + return new JetStringTypeMapping( + baseName + "(" + (size == null ? "255" : size.ToString()) + ")", + !isAnsi, + size, + isFixedLength, + storeTypePostfix: size == null ? StoreTypePostfix.None : null); + } + + return null; + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ExecutionStrategyTest.cs b/test/EFCore.LibRed.FunctionalTests/ExecutionStrategyTest.cs new file mode 100644 index 00000000..02bfca40 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ExecutionStrategyTest.cs @@ -0,0 +1,685 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Data; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Xunit; +using DbContext = Microsoft.EntityFrameworkCore.DbContext; + +// ReSharper disable MethodSupportsCancellation +// ReSharper disable AccessToDisposedClosure +// ReSharper disable InconsistentNaming +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class ExecutionStrategyTest : IClassFixture + { + public ExecutionStrategyTest(ExecutionStrategyFixture fixture) + { + Fixture = fixture; + Fixture.TestStore.CloseConnection(); + Fixture.TestSqlLoggerFactory.Clear(); + } + + protected ExecutionStrategyFixture Fixture { get; } + + [ConditionalTheory] + [MemberData(nameof(DataGenerator.GetBoolCombinations), 1, MemberType = typeof(DataGenerator))] + public void Handles_commit_failure(bool realFailure) + { + // Use all overloads of ExecuteInTransaction + Test_commit_failure( + realFailure, (e, db) => e.ExecuteInTransaction( + () => { db.SaveChanges(false); }, + () => db.Products.AsNoTracking().Any())); + + Test_commit_failure( + realFailure, (e, db) => e.ExecuteInTransaction( + () => db.SaveChanges(false), + () => db.Products.AsNoTracking().Any())); + + Test_commit_failure( + realFailure, (e, db) => e.ExecuteInTransaction( + db, + c => { c.SaveChanges(false); }, + c => c.Products.AsNoTracking().Any())); + + Test_commit_failure( + realFailure, (e, db) => e.ExecuteInTransaction( + db, + c => c.SaveChanges(false), + c => c.Products.AsNoTracking().Any())); + + Test_commit_failure( + realFailure, (e, db) => e.ExecuteInTransaction( + () => { db.SaveChanges(false); }, + () => db.Products.AsNoTracking().Any(), + IsolationLevel.Serializable)); + + Test_commit_failure( + realFailure, (e, db) => e.ExecuteInTransaction( + () => db.SaveChanges(false), + () => db.Products.AsNoTracking().Any(), + IsolationLevel.Serializable)); + + Test_commit_failure( + realFailure, (e, db) => e.ExecuteInTransaction( + db, + c => { c.SaveChanges(false); }, + c => c.Products.AsNoTracking().Any(), + IsolationLevel.Serializable)); + + Test_commit_failure( + realFailure, (e, db) => e.ExecuteInTransaction( + db, + c => c.SaveChanges(false), + c => c.Products.AsNoTracking().Any(), + IsolationLevel.Serializable)); + } + + private void Test_commit_failure(bool realFailure, Action execute) + { + CleanContext(); + + using (var context = CreateContext()) + { + var connection = (TestLibRedConnection)context.GetService(); + + connection.CommitFailures.Enqueue([realFailure]); + Fixture.TestSqlLoggerFactory.Clear(); + + context.Products.Add(new Product()); + execute(new TestLibRedRetryingExecutionStrategy(context), context); + context.ChangeTracker.AcceptAllChanges(); + + var retryMessage = "Bang!"; // LibRedException.Message; the OleDb "(0xHRESULT)" prefix does not apply + + if (realFailure) + { + var logEntry = Fixture.TestSqlLoggerFactory.Log.Single(l => l.Id == CoreEventId.ExecutionStrategyRetrying); + Assert.Contains(retryMessage, logEntry.Message); + Assert.Equal(LogLevel.Information, logEntry.Level); + } + else + { + Assert.Empty(Fixture.TestSqlLoggerFactory.Log.Where(l => l.Id == CoreEventId.ExecutionStrategyRetrying)); + } + + Assert.Equal(realFailure ? 3 : 2, connection.OpenCount); + } + + using (var context = CreateContext()) + { + Assert.Equal(1, context.Products.Count()); + } + } + + [ConditionalTheory] + [MemberData(nameof(DataGenerator.GetBoolCombinations), 1, MemberType = typeof(DataGenerator))] + public async Task Handles_commit_failure_async(bool realFailure) + { + // Use all overloads of ExecuteInTransactionAsync + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + () => db.SaveChangesAsync(false), + () => db.Products.AsNoTracking().AnyAsync())); + + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + async ct => { await db.SaveChangesAsync(false); }, + ct => db.Products.AsNoTracking().AnyAsync(), + CancellationToken.None)); + + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + ct => db.SaveChangesAsync(false, ct), + ct => db.Products.AsNoTracking().AnyAsync(), + CancellationToken.None)); + + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + db, + async (c, ct) => { await c.SaveChangesAsync(false, ct); }, + (c, ct) => c.Products.AsNoTracking().AnyAsync(), + CancellationToken.None)); + + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + db, + (c, ct) => c.SaveChangesAsync(false, ct), + (c, ct) => c.Products.AsNoTracking().AnyAsync(), + CancellationToken.None)); + + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + () => db.SaveChangesAsync(false), + () => db.Products.AsNoTracking().AnyAsync(), + IsolationLevel.Serializable)); + + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + async ct => { await db.SaveChangesAsync(false, ct); }, + ct => db.Products.AsNoTracking().AnyAsync(ct), + IsolationLevel.Serializable, + CancellationToken.None)); + + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + ct => db.SaveChangesAsync(false, ct), + ct => db.Products.AsNoTracking().AnyAsync(ct), + IsolationLevel.Serializable, + CancellationToken.None)); + + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + db, + async (c, ct) => { await c.SaveChangesAsync(false, ct); }, + (c, ct) => c.Products.AsNoTracking().AnyAsync(ct), + IsolationLevel.Serializable, + CancellationToken.None)); + + await Test_commit_failure_async( + realFailure, (e, db) => e.ExecuteInTransactionAsync( + db, + (c, ct) => c.SaveChangesAsync(false, ct), + (c, ct) => c.Products.AsNoTracking().AnyAsync(ct), + IsolationLevel.Serializable, + CancellationToken.None)); + } + + private async Task Test_commit_failure_async( + bool realFailure, Func execute) + { + CleanContext(); + + using (var context = CreateContext()) + { + var connection = (TestLibRedConnection)context.GetService(); + + connection.CommitFailures.Enqueue([realFailure]); + Fixture.TestSqlLoggerFactory.Clear(); + + context.Products.Add(new Product()); + await execute(new TestLibRedRetryingExecutionStrategy(context), context); + context.ChangeTracker.AcceptAllChanges(); + + var retryMessage = "Bang!"; // LibRedException.Message; the OleDb "(0xHRESULT)" prefix does not apply + + if (realFailure) + { + var logEntry = Fixture.TestSqlLoggerFactory.Log.Single(l => l.Id == CoreEventId.ExecutionStrategyRetrying); + Assert.Contains(retryMessage, logEntry.Message); + Assert.Equal(LogLevel.Information, logEntry.Level); + } + else + { + Assert.Empty(Fixture.TestSqlLoggerFactory.Log.Where(l => l.Id == CoreEventId.ExecutionStrategyRetrying)); + } + + Assert.Equal(realFailure ? 3 : 2, connection.OpenCount); + } + + using (var context = CreateContext()) + { + Assert.Equal(1, await context.Products.CountAsync()); + } + } + + [ConditionalTheory] + [MemberData(nameof(DataGenerator.GetBoolCombinations), 1, MemberType = typeof(DataGenerator))] + public void Handles_commit_failure_multiple_SaveChanges(bool realFailure) + { + CleanContext(); + + using var context1 = CreateContext(); + var connection = (TestLibRedConnection)context1.GetService(); + + using (var context2 = CreateContext()) + { + connection.CommitFailures.Enqueue([realFailure]); + + context1.Products.Add(new Product()); + context2.Products.Add(new Product()); + + new TestLibRedRetryingExecutionStrategy(context1).ExecuteInTransaction( + context1, + c1 => + { + context2.Database.UseTransaction(null); + context2.Database.UseTransaction(context1.Database.CurrentTransaction.GetDbTransaction()); + + c1.SaveChanges(false); + + return context2.SaveChanges(false); + }, + c => c.Products.AsNoTracking().Any()); + + context1.ChangeTracker.AcceptAllChanges(); + context2.ChangeTracker.AcceptAllChanges(); + } + + using (var context = CreateContext()) + { + Assert.Equal(2, context.Products.Count()); + } + } + + [ConditionalTheory] + [MemberData(nameof(DataGenerator.GetBoolCombinations), 4, MemberType = typeof(DataGenerator))] + public async Task Retries_SaveChanges_on_execution_failure( + bool realFailure, bool externalStrategy, bool openConnection, bool async) + { + CleanContext(); + + using (var context = CreateContext()) + { + var connection = (TestLibRedConnection)context.GetService(); + + connection.ExecutionFailures.Enqueue([null, realFailure]); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + + if (openConnection) + { + if (async) + { + await context.Database.OpenConnectionAsync(); + } + else + { + context.Database.OpenConnection(); + } + + Assert.Equal(ConnectionState.Open, context.Database.GetDbConnection().State); + } + + context.Products.Add(new Product()); + context.Products.Add(new Product()); + + if (async) + { + if (externalStrategy) + { + await new TestLibRedRetryingExecutionStrategy(context).ExecuteInTransactionAsync( + context, + (c, ct) => c.SaveChangesAsync(false, ct), + (c, _) => + { + Assert.True(false); + return Task.FromResult(false); + }); + + context.ChangeTracker.AcceptAllChanges(); + } + else + { + await context.SaveChangesAsync(); + } + } + else + { + if (externalStrategy) + { + new TestLibRedRetryingExecutionStrategy(context).ExecuteInTransaction( + context, + c => c.SaveChanges(false), + c => + { + Assert.True(false); + return false; + }); + + context.ChangeTracker.AcceptAllChanges(); + } + else + { + context.SaveChanges(); + } + } + + Assert.Equal(2, connection.OpenCount); + Assert.Equal(4, connection.ExecutionCount); + + Assert.Equal( + openConnection + ? ConnectionState.Open + : ConnectionState.Closed, context.Database.GetDbConnection().State); + + if (openConnection) + { + if (async) + { + context.Database.CloseConnection(); + } + else + { + await context.Database.CloseConnectionAsync(); + } + } + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + + using (var context = CreateContext()) + { + Assert.Equal(2, context.Products.Count()); + } + } + + [ConditionalTheory] + [MemberData(nameof(DataGenerator.GetBoolCombinations), 2, MemberType = typeof(DataGenerator))] + public async Task Retries_query_on_execution_failure(bool externalStrategy, bool async) + { + CleanContext(); + + using (var context = CreateContext()) + { + context.Products.Add(new Product()); + context.Products.Add(new Product()); + + context.SaveChanges(); + } + + using (var context = CreateContext()) + { + var connection = (TestLibRedConnection)context.GetService(); + + connection.ExecutionFailures.Enqueue([true]); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + + List list; + if (async) + { + if (externalStrategy) + { + list = await new TestLibRedRetryingExecutionStrategy(context) + .ExecuteAsync(context, (c, ct) => c.Products.ToListAsync(ct), null); + } + else + { + list = await context.Products.ToListAsync(); + } + } + else + { + if (externalStrategy) + { + list = new TestLibRedRetryingExecutionStrategy(context) + .Execute(context, c => c.Products.ToList(), null); + } + else + { + list = [.. context.Products]; + } + } + + Assert.Equal(2, list.Count); + Assert.Equal(1, connection.OpenCount); + Assert.Equal(2, connection.ExecutionCount); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + } + + [ConditionalTheory] + [MemberData(nameof(DataGenerator.GetBoolCombinations), 2, MemberType = typeof(DataGenerator))] + public async Task Retries_FromSqlRaw_on_execution_failure(bool externalStrategy, bool async) + { + CleanContext(); + + using (var context = CreateContext()) + { + context.Products.Add(new Product()); + context.Products.Add(new Product()); + + context.SaveChanges(); + } + + using (var context = CreateContext()) + { + var connection = (TestLibRedConnection)context.GetService(); + + connection.ExecutionFailures.Enqueue([true]); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + + List list; + if (async) + { + if (externalStrategy) + { + list = await new TestLibRedRetryingExecutionStrategy(context) + .ExecuteAsync( + context, (c, ct) => c.Set().FromSqlRaw( + """ + SELECT `ID`, `name` + FROM `Products` + """).ToListAsync(ct), null); + } + else + { + list = await context.Set().FromSqlRaw( + """ + SELECT `ID`, `name` + FROM `Products` + """).ToListAsync(); + } + } + else + { + if (externalStrategy) + { + list = new TestLibRedRetryingExecutionStrategy(context) + .Execute( + context, c => c.Set().FromSqlRaw( + """ + SELECT `ID`, `name` + FROM `Products` + """).ToList(), null); + } + else + { + list = [.. context.Set().FromSqlRaw( + """ + SELECT `ID`, `name` + FROM `Products` + """)]; + } + } + + Assert.Equal(2, list.Count); + Assert.Equal(1, connection.OpenCount); + Assert.Equal(2, connection.ExecutionCount); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + } + + [ConditionalTheory] + [MemberData(nameof(DataGenerator.GetBoolCombinations), 2, MemberType = typeof(DataGenerator))] + public async Task Retries_OpenConnection_on_execution_failure(bool externalStrategy, bool async) + { + using var context = CreateContext(); + var connection = (TestLibRedConnection)context.GetService(); + + connection.OpenFailures.Enqueue([true]); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + + if (async) + { + if (externalStrategy) + { + await new TestLibRedRetryingExecutionStrategy(context).ExecuteAsync( + context, + c => c.Database.OpenConnectionAsync()); + } + else + { + await context.Database.OpenConnectionAsync(); + } + } + else + { + if (externalStrategy) + { + new TestLibRedRetryingExecutionStrategy(context).Execute( + context, + c => c.Database.OpenConnection()); + } + else + { + context.Database.OpenConnection(); + } + } + + Assert.Equal(2, connection.OpenCount); + + if (async) + { + context.Database.CloseConnection(); + } + else + { + await context.Database.CloseConnectionAsync(); + } + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Retries_BeginTransaction_on_execution_failure(bool async) + { + using var context = CreateContext(); + var connection = (TestLibRedConnection)context.GetService(); + + connection.OpenFailures.Enqueue([true]); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + + if (async) + { + var transaction = await new TestLibRedRetryingExecutionStrategy(context).ExecuteAsync( + context, + c => context.Database.BeginTransactionAsync()); + + transaction.Dispose(); + } + else + { + var transaction = new TestLibRedRetryingExecutionStrategy(context).Execute( + context, + c => context.Database.BeginTransaction()); + + transaction.Dispose(); + } + + Assert.Equal(2, connection.OpenCount); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + + [ConditionalFact] + public void Verification_is_retried_using_same_retry_limit() + { + CleanContext(); + + using (var context = CreateContext()) + { + var connection = (TestLibRedConnection)context.GetService(); + + connection.ExecutionFailures.Enqueue([true, null, true, true]); + connection.CommitFailures.Enqueue([true, true, true, true]); + + context.Products.Add(new Product()); + Assert.Throws( + () => + new TestLibRedRetryingExecutionStrategy(context, TimeSpan.FromMilliseconds(100)) + .ExecuteInTransaction( + context, + c => c.SaveChanges(false), + c => false)); + context.ChangeTracker.AcceptAllChanges(); + + Assert.Equal(7, connection.OpenCount); + Assert.Equal(7, connection.ExecutionCount); + } + + using (var context = CreateContext()) + { + Assert.Equal(0, context.Products.Count()); + } + } + + protected class ExecutionStrategyContext(DbContextOptions options) : DbContext(options) + { + public DbSet Products { get; set; } + } + + protected class Product + { + public int Id { get; set; } + public string Name { get; set; } + } + + protected virtual ExecutionStrategyContext CreateContext() + => (ExecutionStrategyContext)Fixture.CreateContext(); + + private void CleanContext() + { + using var context = CreateContext(); + foreach (var product in context.Products.ToList()) + { + context.Remove(product); + context.SaveChanges(); + } + } + + public class ExecutionStrategyFixture : SharedStoreFixtureBase + { + protected override bool UsePooling => false; + protected override string StoreName { get; } = nameof(ExecutionStrategyTest); + public new RelationalTestStore TestStore => (RelationalTestStore)base.TestStore; + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + protected override Type ContextType { get; } = typeof(ExecutionStrategyContext); + + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection) + .AddSingleton() + // ILibRedRelationalConnection is the concrete registration the LibRed provider owns, and + // IJetRelationalConnection/IRelationalConnection forward to it (see + // LibRedServiceCollectionExtensions) — so overriding it here makes every resolution of the + // connection (including the one TestRelationalTransaction casts) the test connection. + .AddScoped() + .AddSingleton(); + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + var options = base.AddOptions(builder); + new LibRedDbContextOptionsBuilder(options).MaxBatchSize(1); + return options; + } + + protected override bool ShouldLogCategory(string logCategory) + => logCategory == DbLoggerCategory.Infrastructure.Name; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/F1LibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/F1LibRedFixture.cs new file mode 100644 index 00000000..73109f89 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/F1LibRedFixture.cs @@ -0,0 +1,111 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.TestModels.ConcurrencyModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; + +#nullable disable + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class F1LibRedFixture : F1LibRedFixtureBase + { + protected override void BuildModelExternal(ModelBuilder modelBuilder) + { + base.BuildModelExternal(modelBuilder); + + var converter = new BinaryVersionConverter(); + var comparer = new BinaryVersionComparer(); + + modelBuilder + .Entity() + .Property(e => e.BinaryVersion) + .HasConversion(converter, comparer) + .IsRowVersion(); + + modelBuilder + .Entity() + .Property(e => e.BinaryVersion) + .HasConversion(converter, comparer) + .IsRowVersion(); + + modelBuilder + .Entity() + .Property(e => e.BinaryVersion) + .HasConversion(converter, comparer) + .IsRowVersion(); + + modelBuilder + .Entity() + .Property(e => e.BinaryVersion) + .HasConversion(converter, comparer) + .IsRowVersion(); + + modelBuilder + .Entity() + .Property(e => e.BinaryVersion) + .HasConversion(converter, comparer) + .IsRowVersion(); + + modelBuilder + .Entity() + .Property(e => e.BinaryVersion) + .HasConversion(converter, comparer) + .IsRowVersion(); + } + + private class BinaryVersionConverter() : ValueConverter, byte[]>( + v => v == null ? null : v.ToArray(), + v => v == null ? null : v.ToList()); + + private class BinaryVersionComparer() : ValueComparer>( + (l, r) => (l == null && r == null) || (l != null && r != null && l.SequenceEqual(r)), + v => CalculateHashCode(v), + v => v == null ? null : v.ToList()) + { + private static int CalculateHashCode(List source) + { + if (source == null) + { + return 0; + } + + var hash = new HashCode(); + foreach (var el in source) + { + hash.Add(el); + } + + return hash.ToHashCode(); + } + } + } + + public abstract class F1LibRedFixtureBase : F1RelationalFixture + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override TestHelpers TestHelpers + => LibRedTestHelpers.Instance; + + protected override void BuildModelExternal(ModelBuilder modelBuilder) + { + base.BuildModelExternal(modelBuilder); + + modelBuilder.Entity() + .OwnsOne( + s => s.Details, eb => + { + eb.Property(d => d.Space).HasColumnType("decimal(18,2)"); + }); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/FieldMappingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/FieldMappingLibRedTest.cs new file mode 100644 index 00000000..9c25df7f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/FieldMappingLibRedTest.cs @@ -0,0 +1,22 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class FieldMappingLibRedTest(FieldMappingLibRedTest.FieldMappingLibRedFixture fixture) + : FieldMappingTestBase(fixture) + { + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public class FieldMappingLibRedFixture : FieldMappingFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/FieldsOnlyLoadLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/FieldsOnlyLoadLibRedTest.cs new file mode 100644 index 00000000..25054db5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/FieldsOnlyLoadLibRedTest.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class FieldsOnlyLoadLibRedTest(FieldsOnlyLoadLibRedTest.FieldsOnlyLoadLibRedFixture fixture) + : FieldsOnlyLoadTestBase(fixture) +{ + public class FieldsOnlyLoadLibRedFixture : FieldsOnlyLoadFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/FindLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/FindLibRedTest.cs new file mode 100644 index 00000000..24801e3c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/FindLibRedTest.cs @@ -0,0 +1,401 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public abstract class FindLibRedTest : FindTestBase + { + protected FindLibRedTest(FindLibRedFixture fixture) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + } + + public class FindLibRedTestSet(FindLibRedFixture fixture) : FindLibRedTest(fixture) + { + protected override TestFinder Finder { get; } = new FindViaSetFinder(); + } + + public class FindLibRedTestContext(FindLibRedFixture fixture) : FindLibRedTest(fixture) + { + protected override TestFinder Finder { get; } = new FindViaContextFinder(); + } + + public class FindLibRedTestNonGeneric(FindLibRedFixture fixture) : FindLibRedTest(fixture) + { + protected override TestFinder Finder { get; } = new FindViaNonGenericContextFinder(); + } + + public override void Find_int_key_tracked() + { + base.Find_int_key_tracked(); + + Assert.Equal("", Sql); + } + + public override void Find_int_key_from_store() + { + base.Find_int_key_from_store(); + + AssertSql( + """ +@p='77' + +SELECT `i3`.`Id`, `i3`.`Foo`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Prop`, `s`.`NestedOwned_Prop`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `s`.`Prop0`, `i3`.`OwnedReference_Prop`, `i3`.`OwnedReference_NestedOwned_Prop`, `i2`.`Owned1IntKeyId`, `i2`.`Id`, `i2`.`Prop` +FROM (( + SELECT TOP 1 `i`.`Id`, `i`.`Foo`, `i`.`OwnedReference_Prop`, `i`.`OwnedReference_NestedOwned_Prop` + FROM `IntKey` AS `i` + WHERE `i`.`Id` = @p +) AS `i3` +LEFT JOIN ( + SELECT `i0`.`IntKeyId`, `i0`.`Id`, `i0`.`Prop`, `i0`.`NestedOwned_Prop`, `i1`.`Owned1IntKeyId`, `i1`.`Owned1Id`, `i1`.`Id` AS `Id0`, `i1`.`Prop` AS `Prop0` + FROM `IntKey_OwnedCollection` AS `i0` + LEFT JOIN `IntKey_OwnedCollection_NestedOwnedCollection` AS `i1` ON `i0`.`IntKeyId` = `i1`.`Owned1IntKeyId` AND `i0`.`Id` = `i1`.`Owned1Id` +) AS `s` ON `i3`.`Id` = `s`.`IntKeyId`) +LEFT JOIN `IntKey_NestedOwnedCollection` AS `i2` ON IIF(`i3`.`OwnedReference_Prop` IS NOT NULL, `i3`.`Id`, NULL) = `i2`.`Owned1IntKeyId` +ORDER BY `i3`.`Id`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `i2`.`Owned1IntKeyId` +"""); + } + + public override void Returns_null_for_int_key_not_in_store() + { + base.Returns_null_for_int_key_not_in_store(); + + AssertSql( + """ +@p='99' + +SELECT `i3`.`Id`, `i3`.`Foo`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Prop`, `s`.`NestedOwned_Prop`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `s`.`Prop0`, `i3`.`OwnedReference_Prop`, `i3`.`OwnedReference_NestedOwned_Prop`, `i2`.`Owned1IntKeyId`, `i2`.`Id`, `i2`.`Prop` +FROM (( + SELECT TOP 1 `i`.`Id`, `i`.`Foo`, `i`.`OwnedReference_Prop`, `i`.`OwnedReference_NestedOwned_Prop` + FROM `IntKey` AS `i` + WHERE `i`.`Id` = @p +) AS `i3` +LEFT JOIN ( + SELECT `i0`.`IntKeyId`, `i0`.`Id`, `i0`.`Prop`, `i0`.`NestedOwned_Prop`, `i1`.`Owned1IntKeyId`, `i1`.`Owned1Id`, `i1`.`Id` AS `Id0`, `i1`.`Prop` AS `Prop0` + FROM `IntKey_OwnedCollection` AS `i0` + LEFT JOIN `IntKey_OwnedCollection_NestedOwnedCollection` AS `i1` ON `i0`.`IntKeyId` = `i1`.`Owned1IntKeyId` AND `i0`.`Id` = `i1`.`Owned1Id` +) AS `s` ON `i3`.`Id` = `s`.`IntKeyId`) +LEFT JOIN `IntKey_NestedOwnedCollection` AS `i2` ON IIF(`i3`.`OwnedReference_Prop` IS NOT NULL, `i3`.`Id`, NULL) = `i2`.`Owned1IntKeyId` +ORDER BY `i3`.`Id`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `i2`.`Owned1IntKeyId` +"""); + } + + public override void Find_nullable_int_key_tracked() + { + base.Find_int_key_tracked(); + + Assert.Equal("", Sql); + } + + public override void Find_nullable_int_key_from_store() + { + base.Find_int_key_from_store(); + + AssertSql( + """ +@p='77' + +SELECT `i3`.`Id`, `i3`.`Foo`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Prop`, `s`.`NestedOwned_Prop`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `s`.`Prop0`, `i3`.`OwnedReference_Prop`, `i3`.`OwnedReference_NestedOwned_Prop`, `i2`.`Owned1IntKeyId`, `i2`.`Id`, `i2`.`Prop` +FROM (( + SELECT TOP 1 `i`.`Id`, `i`.`Foo`, `i`.`OwnedReference_Prop`, `i`.`OwnedReference_NestedOwned_Prop` + FROM `IntKey` AS `i` + WHERE `i`.`Id` = @p +) AS `i3` +LEFT JOIN ( + SELECT `i0`.`IntKeyId`, `i0`.`Id`, `i0`.`Prop`, `i0`.`NestedOwned_Prop`, `i1`.`Owned1IntKeyId`, `i1`.`Owned1Id`, `i1`.`Id` AS `Id0`, `i1`.`Prop` AS `Prop0` + FROM `IntKey_OwnedCollection` AS `i0` + LEFT JOIN `IntKey_OwnedCollection_NestedOwnedCollection` AS `i1` ON `i0`.`IntKeyId` = `i1`.`Owned1IntKeyId` AND `i0`.`Id` = `i1`.`Owned1Id` +) AS `s` ON `i3`.`Id` = `s`.`IntKeyId`) +LEFT JOIN `IntKey_NestedOwnedCollection` AS `i2` ON IIF(`i3`.`OwnedReference_Prop` IS NOT NULL, `i3`.`Id`, NULL) = `i2`.`Owned1IntKeyId` +ORDER BY `i3`.`Id`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `i2`.`Owned1IntKeyId` +"""); + } + + public override void Returns_null_for_nullable_int_key_not_in_store() + { + base.Returns_null_for_int_key_not_in_store(); + + AssertSql( + """ +@p='99' + +SELECT `i3`.`Id`, `i3`.`Foo`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Prop`, `s`.`NestedOwned_Prop`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `s`.`Prop0`, `i3`.`OwnedReference_Prop`, `i3`.`OwnedReference_NestedOwned_Prop`, `i2`.`Owned1IntKeyId`, `i2`.`Id`, `i2`.`Prop` +FROM (( + SELECT TOP 1 `i`.`Id`, `i`.`Foo`, `i`.`OwnedReference_Prop`, `i`.`OwnedReference_NestedOwned_Prop` + FROM `IntKey` AS `i` + WHERE `i`.`Id` = @p +) AS `i3` +LEFT JOIN ( + SELECT `i0`.`IntKeyId`, `i0`.`Id`, `i0`.`Prop`, `i0`.`NestedOwned_Prop`, `i1`.`Owned1IntKeyId`, `i1`.`Owned1Id`, `i1`.`Id` AS `Id0`, `i1`.`Prop` AS `Prop0` + FROM `IntKey_OwnedCollection` AS `i0` + LEFT JOIN `IntKey_OwnedCollection_NestedOwnedCollection` AS `i1` ON `i0`.`IntKeyId` = `i1`.`Owned1IntKeyId` AND `i0`.`Id` = `i1`.`Owned1Id` +) AS `s` ON `i3`.`Id` = `s`.`IntKeyId`) +LEFT JOIN `IntKey_NestedOwnedCollection` AS `i2` ON IIF(`i3`.`OwnedReference_Prop` IS NOT NULL, `i3`.`Id`, NULL) = `i2`.`Owned1IntKeyId` +ORDER BY `i3`.`Id`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `i2`.`Owned1IntKeyId` +"""); + } + + public override void Find_string_key_tracked() + { + base.Find_string_key_tracked(); + + Assert.Equal("", Sql); + } + + public override void Find_string_key_from_store() + { + base.Find_string_key_from_store(); + + AssertSql( + """ +@p='Cat' (Size = 255) + +SELECT TOP 1 `s`.`Id`, `s`.`Foo` +FROM `StringKey` AS `s` +WHERE `s`.`Id` = @p +"""); + } + + public override void Returns_null_for_string_key_not_in_store() + { + base.Returns_null_for_string_key_not_in_store(); + + AssertSql( + """ +@p='Fox' (Size = 255) + +SELECT TOP 1 `s`.`Id`, `s`.`Foo` +FROM `StringKey` AS `s` +WHERE `s`.`Id` = @p +"""); + } + + public override void Find_composite_key_tracked() + { + base.Find_composite_key_tracked(); + + Assert.Equal("", Sql); + } + + public override void Find_composite_key_from_store() + { + base.Find_composite_key_from_store(); + + AssertSql( + """ +@p='77' +@p1='Dog' (Size = 255) + +SELECT TOP 1 `c`.`Id1`, `c`.`Id2`, `c`.`Foo` +FROM `CompositeKey` AS `c` +WHERE `c`.`Id1` = @p AND `c`.`Id2` = @p1 +"""); + } + + public override void Returns_null_for_composite_key_not_in_store() + { + base.Returns_null_for_composite_key_not_in_store(); + + AssertSql( + """ +@p='77' +@p1='Fox' (Size = 255) + +SELECT TOP 1 `c`.`Id1`, `c`.`Id2`, `c`.`Foo` +FROM `CompositeKey` AS `c` +WHERE `c`.`Id1` = @p AND `c`.`Id2` = @p1 +"""); + } + + public override void Find_base_type_tracked() + { + base.Find_base_type_tracked(); + + Assert.Equal("", Sql); + } + + public override async Task Find_base_type_tracked_async(CancellationType cancellationType) + { + await base.Find_base_type_tracked_async(cancellationType); + + Assert.Equal("", Sql); + } + + public override void Find_base_type_from_store() + { + base.Find_base_type_from_store(); + + AssertSql( + """ +@p='77' + +SELECT TOP 1 `b`.`Id`, `b`.`Discriminator`, `b`.`Foo`, `b`.`Boo` +FROM `BaseType` AS `b` +WHERE `b`.`Id` = @p +"""); + } + + public override async Task Find_base_type_from_store_async(CancellationType cancellationType) + { + await base.Find_base_type_from_store_async(cancellationType); + AssertSql( + """ +@p='77' + +SELECT TOP 1 `b`.`Id`, `b`.`Discriminator`, `b`.`Foo`, `b`.`Boo` +FROM `BaseType` AS `b` +WHERE `b`.`Id` = @p +"""); + } + + public override void Returns_null_for_base_type_not_in_store() + { + base.Returns_null_for_base_type_not_in_store(); + + AssertSql( + """ +@p='99' + +SELECT TOP 1 `b`.`Id`, `b`.`Discriminator`, `b`.`Foo`, `b`.`Boo` +FROM `BaseType` AS `b` +WHERE `b`.`Id` = @p +"""); + } + + public override void Find_derived_type_tracked() + { + base.Find_derived_type_tracked(); + + Assert.Equal("", Sql); + } + + public override void Find_derived_type_from_store() + { + base.Find_derived_type_from_store(); + + AssertSql( + """ +@p='78' + +SELECT TOP 1 `b`.`Id`, `b`.`Discriminator`, `b`.`Foo`, `b`.`Boo` +FROM `BaseType` AS `b` +WHERE `b`.`Discriminator` = 'DerivedType' AND `b`.`Id` = @p +"""); + } + + public override void Returns_null_for_derived_type_not_in_store() + { + base.Returns_null_for_derived_type_not_in_store(); + + AssertSql( + """ +@p='99' + +SELECT TOP 1 `b`.`Id`, `b`.`Discriminator`, `b`.`Foo`, `b`.`Boo` +FROM `BaseType` AS `b` +WHERE `b`.`Discriminator` = 'DerivedType' AND `b`.`Id` = @p +"""); + } + + public override void Find_base_type_using_derived_set_tracked() + { + base.Find_base_type_using_derived_set_tracked(); + + AssertSql( + """ +@p='88' + +SELECT TOP 1 `b`.`Id`, `b`.`Discriminator`, `b`.`Foo`, `b`.`Boo` +FROM `BaseType` AS `b` +WHERE `b`.`Discriminator` = 'DerivedType' AND `b`.`Id` = @p +"""); + } + + public override void Find_base_type_using_derived_set_from_store() + { + base.Find_base_type_using_derived_set_from_store(); + + AssertSql( + """ +@p='77' + +SELECT TOP 1 `b`.`Id`, `b`.`Discriminator`, `b`.`Foo`, `b`.`Boo` +FROM `BaseType` AS `b` +WHERE `b`.`Discriminator` = 'DerivedType' AND `b`.`Id` = @p +"""); + } + + public override void Find_derived_type_using_base_set_tracked() + { + base.Find_derived_type_using_base_set_tracked(); + + Assert.Equal("", Sql); + } + + public override void Find_derived_using_base_set_type_from_store() + { + base.Find_derived_using_base_set_type_from_store(); + + AssertSql( + """ +@p='78' + +SELECT TOP 1 `b`.`Id`, `b`.`Discriminator`, `b`.`Foo`, `b`.`Boo` +FROM `BaseType` AS `b` +WHERE `b`.`Id` = @p +"""); + } + + public override void Find_shadow_key_tracked() + { + base.Find_shadow_key_tracked(); + + Assert.Equal("", Sql); + } + + public override void Find_shadow_key_from_store() + { + base.Find_shadow_key_from_store(); + + AssertSql( + """ +@p='77' + +SELECT TOP 1 `s`.`Id`, `s`.`Foo` +FROM `ShadowKey` AS `s` +WHERE `s`.`Id` = @p +"""); + } + + public override void Returns_null_for_shadow_key_not_in_store() + { + base.Returns_null_for_shadow_key_not_in_store(); + + AssertSql( + """ +@p='99' + +SELECT TOP 1 `s`.`Id`, `s`.`Foo` +FROM `ShadowKey` AS `s` +WHERE `s`.`Id` = @p +"""); + } + + private string Sql => Fixture.TestSqlLoggerFactory.Sql; + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class FindLibRedFixture : FindFixtureBase + { + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedClientCascadeTest.cs b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedClientCascadeTest.cs new file mode 100644 index 00000000..63324e08 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedClientCascadeTest.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using System.Linq; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable + +public class GraphUpdatesLibRedClientCascadeTest(GraphUpdatesLibRedClientCascadeTest.LibRedFixture fixture) + : GraphUpdatesLibRedTestBase< + GraphUpdatesLibRedClientCascadeTest.LibRedFixture>(fixture) +{ + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public class LibRedFixture : GraphUpdatesLibRedFixtureBase + { + public override bool NoStoreCascades + => true; + + protected override string StoreName + => "GraphClientCascadeUpdatesTest"; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + foreach (var foreignKey in modelBuilder.Model + .GetEntityTypes() + .SelectMany(e => e.GetDeclaredForeignKeys()) + .Where(e => e.DeleteBehavior == DeleteBehavior.Cascade)) + { + foreignKey.DeleteBehavior = DeleteBehavior.ClientCascade; + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedClientNoActionTest.cs b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedClientNoActionTest.cs new file mode 100644 index 00000000..2baa02b2 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedClientNoActionTest.cs @@ -0,0 +1,40 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using System.Linq; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable + +public class GraphUpdatesLibRedClientNoActionTest(GraphUpdatesLibRedClientNoActionTest.LibRedFixture fixture) + : GraphUpdatesLibRedTestBase< + GraphUpdatesLibRedClientNoActionTest.LibRedFixture>(fixture) +{ + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public class LibRedFixture : GraphUpdatesLibRedFixtureBase + { + public override bool ForceClientNoAction + => true; + + protected override string StoreName + => "GraphClientNoActionUpdatesTest"; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + foreach (var foreignKey in modelBuilder.Model + .GetEntityTypes() + .SelectMany(e => e.GetDeclaredForeignKeys())) + { + foreignKey.DeleteBehavior = DeleteBehavior.ClientNoAction; + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedIdentityTest.cs b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedIdentityTest.cs new file mode 100644 index 00000000..31aedd90 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedIdentityTest.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable + +public class GraphUpdatesLibRedIdentityTest(GraphUpdatesLibRedIdentityTest.LibRedFixture fixture) + : GraphUpdatesLibRedTestBase(fixture) +{ + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public class LibRedFixture : GraphUpdatesLibRedFixtureBase + { + protected override string StoreName + => "GraphIdentityUpdatesTest"; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + modelBuilder.UseJetIdentityColumns(); + + base.OnModelCreating(modelBuilder, context); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedOwnedTest.cs b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedOwnedTest.cs new file mode 100644 index 00000000..cad4726c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedOwnedTest.cs @@ -0,0 +1,636 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable + +public class GraphUpdatesLibRedOwnedTest(GraphUpdatesLibRedOwnedTest.LibRedFixture fixture) + : GraphUpdatesLibRedTestBase(fixture) +{ + // No owned types + public override Task Update_root_by_collection_replacement_of_inserted_first_level(bool async) + => Task.CompletedTask; + + // No owned types + public override Task Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(bool async, bool useAdd) + => Task.CompletedTask; + + // No owned types + public override Task Mark_explicitly_set_stable_dependent_appropriately(bool async, bool useAdd) + => Task.CompletedTask; + + // No owned types + public override Task Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(bool async, bool useAdd) + => Task.CompletedTask; + + // No owned types + public override Task Update_root_by_collection_replacement_of_deleted_first_level(bool async) + => Task.CompletedTask; + + // No owned types + public override Task Update_root_by_collection_replacement_of_inserted_second_level(bool async) + => Task.CompletedTask; + + // No owned types + public override Task Update_root_by_collection_replacement_of_deleted_second_level(bool async) + => Task.CompletedTask; + + // No owned types + public override Task Update_root_by_collection_replacement_of_inserted_first_level_level(bool async) + => Task.CompletedTask; + + // No owned types + public override Task Update_root_by_collection_replacement_of_deleted_third_level(bool async) + => Task.CompletedTask; + + // No owned types + public override Task Sever_relationship_that_will_later_be_deleted(bool async) + => Task.CompletedTask; + + // No owned types + public override Task Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(bool async) + => Task.CompletedTask; + + // No owned types + public override Task Shadow_skip_navigation_in_base_class_is_handled(bool async) + => Task.CompletedTask; + + // Owned dependents are always loaded + public override Task Required_one_to_one_are_cascade_deleted_in_store( + CascadeTiming? cascadeDeleteTiming, + CascadeTiming? deleteOrphansTiming) + => Task.CompletedTask; + + public override Task Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store( + CascadeTiming? cascadeDeleteTiming, + CascadeTiming? deleteOrphansTiming) + => Task.CompletedTask; + + // No owned types + public override Task Can_insert_when_composite_FK_has_default_value_for_one_part(bool async) + => Task.CompletedTask; + + public override Task Required_one_to_one_relationships_are_one_to_one(CascadeTiming? deleteOrphansTiming) + => Task.CompletedTask; + + public override Task Required_one_to_one_with_AK_relationships_are_one_to_one(CascadeTiming? deleteOrphansTiming) + => Task.CompletedTask; + + // No owned types + public override Task Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(bool async, bool initialValue) + => Task.CompletedTask; + + // No owned types + public override Task Can_insert_when_int_PK_in_composite_key_has_sentinel_value(bool async, int initialValue) + => Task.CompletedTask; + + // No owned types + public override Task Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(bool async, bool? initialValue) + => Task.CompletedTask; + + // No owned types + public override Task Throws_for_single_property_bool_key_with_default_value_generation(bool async, bool initialValue) + => Task.CompletedTask; + + // No owned types + public override Task Throws_for_single_property_nullable_bool_key_with_default_value_generation(bool async, bool? initialValue) + => Task.CompletedTask; + + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public class LibRedFixture : GraphUpdatesLibRedFixtureBase + { + protected override string StoreName + => "GraphOwnedUpdatesTest"; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + modelBuilder.Entity( + b => + { + b.OwnsOne(e => e.OptionalSingle).OwnsOne(e => e.Single); + b.OwnsOne(e => e.RequiredSingle).OwnsOne(e => e.Single); + b.OwnsMany(e => e.OptionalChildren).OwnsMany(e => e.Children); + b.OwnsMany(e => e.RequiredChildren).OwnsMany(e => e.Children); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.AlternateId).ValueGeneratedOnAdd(); + + // TODO: Owned inheritance support #9630 + b.HasMany(e => e.RequiredChildren) + .WithOne(e => e.Parent) + .HasForeignKey(e => e.ParentId); + + modelBuilder.Entity() + .HasMany(e => e.Children) + .WithOne(e => e.Parent) + .HasForeignKey(e => e.ParentId); + + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + + b.HasMany(e => e.OptionalChildren) + .WithOne(e => e.Parent) + .HasForeignKey(e => e.ParentId) + .OnDelete(DeleteBehavior.SetNull); + + b.OwnsOne( + e => e.RequiredSingle, r => + { + r.WithOwner(e => e.Root) + .HasForeignKey(e => e.Id); + + r.OwnsOne(e => e.Single) + .WithOwner(e => e.Back) + .HasForeignKey(e => e.Id); + }); + + b.HasOne(e => e.OptionalSingle) + .WithOne(e => e.Root) + .HasForeignKey(e => e.RootId) + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne(e => e.OptionalSingleDerived) + .WithOne(e => e.DerivedRoot) + .HasForeignKey(e => e.DerivedRootId) + .OnDelete(DeleteBehavior.ClientSetNull); + + b.HasOne(e => e.OptionalSingleMoreDerived) + .WithOne(e => e.MoreDerivedRoot) + .HasForeignKey(e => e.MoreDerivedRootId) + .OnDelete(DeleteBehavior.ClientSetNull); + + // TODO: Owned inheritance support #9630 + b.HasOne(e => e.RequiredNonPkSingle) + .WithOne(e => e.Root) + .HasForeignKey(e => e.RootId); + + b.HasOne(e => e.RequiredNonPkSingleDerived) + .WithOne(e => e.DerivedRoot) + .HasForeignKey(e => e.DerivedRootId) + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne(e => e.RequiredNonPkSingleMoreDerived) + .WithOne(e => e.MoreDerivedRoot) + .HasForeignKey(e => e.MoreDerivedRootId) + .OnDelete(DeleteBehavior.Restrict); + + // TODO: Owned inheritance support #9630 + b.HasMany(e => e.RequiredChildrenAk) + .WithOne(e => e.Parent) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.ParentId); + + modelBuilder.Entity( + b => + { + b.Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + b.HasMany(e => e.Children) + .WithOne(e => e.Parent) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.ParentId); + + b.HasMany(e => e.CompositeChildren) + .WithOne(e => e.Parent) + .HasPrincipalKey( + e => new { e.Id, e.AlternateId }) + .HasForeignKey( + e => new { e.ParentId, e.ParentAlternateId }); + }); + + modelBuilder.Entity() + .Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + b.HasMany(e => e.OptionalChildrenAk) + .WithOne(e => e.Parent) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.ParentId) + .OnDelete(DeleteBehavior.SetNull); + + b.OwnsOne( + e => e.RequiredSingleAk, r => + { + r.WithOwner(e => e.Root) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.RootId); + + r.HasKey(e => e.Id); + + r.Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + r.OwnsOne( + e => e.Single, r2 => + { + r2.WithOwner(e => e.Back) + .HasForeignKey(e => e.BackId) + .HasPrincipalKey(e => e.AlternateId); + + r2.HasKey(e => e.Id); + + r2.Property(e => e.Id) + .ValueGeneratedOnAdd(); + + r2.Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + r2.ToTable("RequiredSingleAk2"); + }); + + r.OwnsOne( + e => e.SingleComposite, r2 => + { + r2.WithOwner(e => e.Back) + .HasForeignKey(e => new { e.BackId, e.BackAlternateId }) + .HasPrincipalKey(e => new { e.Id, e.AlternateId }); + + r2.HasKey(e => e.Id); + + r2.ToTable("RequiredSingleComposite2"); + }); + + // Table splitting using AK is not supported #23208 + r.ToTable("RequiredSingleAk1"); + }); + + b.HasOne(e => e.OptionalSingleAk) + .WithOne(e => e.Root) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.RootId) + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne(e => e.OptionalSingleAkDerived) + .WithOne(e => e.DerivedRoot) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.DerivedRootId) + .OnDelete(DeleteBehavior.ClientSetNull); + + b.HasOne(e => e.OptionalSingleAkMoreDerived) + .WithOne(e => e.MoreDerivedRoot) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.MoreDerivedRootId) + .OnDelete(DeleteBehavior.ClientSetNull); + + b.HasOne(e => e.RequiredNonPkSingleAk) + .WithOne(e => e.Root) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.RootId); + + b.HasOne(e => e.RequiredNonPkSingleAkDerived) + .WithOne(e => e.DerivedRoot) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.DerivedRootId) + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne(e => e.RequiredNonPkSingleAkMoreDerived) + .WithOne(e => e.MoreDerivedRoot) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.MoreDerivedRootId) + .OnDelete(DeleteBehavior.Restrict); + + b.HasMany(e => e.RequiredCompositeChildren) + .WithOne(e => e.Parent) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.ParentAlternateId); + }); + + modelBuilder.Entity( + b => + { + b.HasMany(e => e.Children) + .WithOne(e => e.Parent) + .HasForeignKey(e => e.ParentId) + .OnDelete(DeleteBehavior.SetNull); + + b.HasMany(e => e.CompositeChildren) + .WithOne(e => e.Parent2) + .HasForeignKey(e => new { e.Parent2Id }); + }); + + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity() + .HasOne(e => e.Single) + .WithOne(e => e.Back) + .HasForeignKey(e => e.BackId) + .OnDelete(DeleteBehavior.SetNull); + + modelBuilder.Entity( + b => + { + b.HasDiscriminator(e => e.Disc) + .HasValue(new MyDiscriminator(1)) + .HasValue(new MyDiscriminator(2)) + .HasValue(new MyDiscriminator(3)); + + b.Property(e => e.Disc) + .HasConversion( + v => v.Value, + v => new MyDiscriminator(v), + new ValueComparer( + (l, r) => l.Value == r.Value, + v => v.Value.GetHashCode(), + v => new MyDiscriminator(v.Value))) + .Metadata + .SetAfterSaveBehavior(PropertySaveBehavior.Save); + }); + + modelBuilder.Entity() + .HasOne(e => e.Single) + .WithOne(e => e.Back) + .HasForeignKey(e => e.BackId); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity( + b => + { + b.Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + b.HasOne(e => e.Single) + .WithOne(e => e.Back) + .HasForeignKey(e => e.BackId) + .HasPrincipalKey(e => e.AlternateId); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + b.HasMany(e => e.Children) + .WithOne(e => e.Parent) + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.ParentId) + .OnDelete(DeleteBehavior.SetNull); + + b.HasMany(e => e.CompositeChildren) + .WithOne(e => e.Parent) + .HasPrincipalKey( + e => new { e.Id, e.AlternateId }) + .HasForeignKey( + e => new { e.ParentId, e.ParentAlternateId }); + }); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity() + .Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity() + .Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity( + b => + { + b.Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + b.HasOne(e => e.Single) + .WithOne(e => e.Back) + .HasForeignKey(e => e.BackId) + .HasPrincipalKey(e => e.AlternateId) + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne(e => e.SingleComposite) + .WithOne(e => e.Back) + .HasForeignKey( + e => new { e.BackId, e.ParentAlternateId }) + .HasPrincipalKey( + e => new { e.Id, e.AlternateId }); + }); + + modelBuilder.Entity() + .Property(e => e.AlternateId) + .ValueGeneratedOnAdd(); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity( + eb => + { + eb.Property(e => e.Id).ValueGeneratedNever(); + + eb.HasKey( + e => new { e.Id, e.ParentAlternateId }); + + eb.HasMany(e => e.CompositeChildren) + .WithOne(e => e.Parent) + .HasPrincipalKey( + e => new { e.Id, e.ParentAlternateId }) + .HasForeignKey( + e => new { e.ParentId, e.ParentAlternateId }); + }); + + modelBuilder.Entity( + eb => + { + eb.Property(e => e.Id).ValueGeneratedNever(); + + eb.HasKey( + e => new { e.Id, e.ParentAlternateId }); + + eb.HasOne(e => e.Root) + .WithMany() + .HasPrincipalKey(e => e.AlternateId) + .HasForeignKey(e => e.ParentAlternateId); + }); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity(); + + modelBuilder.Entity() + .HasMany(qt => qt.Choices) + .WithOne() + .HasForeignKey(tc => tc.QuestTaskId); + + modelBuilder.Entity() + .HasMany(hat => hat.Choices) + .WithOne() + .HasForeignKey(tc => tc.QuestTaskId); + + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity(); + modelBuilder.Entity(); + + modelBuilder.Entity() + .HasIndex(e => e.BarCode) + .IsUnique(); + + modelBuilder.Entity( + builder => + { + builder.HasMany(x => x.Dependants).WithOne(x => x.Root) + .HasForeignKey(x => new { x.RootId }) + .HasPrincipalKey(x => x.Id) + .OnDelete(DeleteBehavior.Cascade); + + builder.HasMany(x => x.Parents).WithOne(x => x.Root) + .HasForeignKey(x => new { x.RootId }) + .HasPrincipalKey(x => x.Id) + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity( + builder => + { + builder.HasOne(x => x.Dependant).WithOne(x => x!.Parent).IsRequired(false) + .HasForeignKey(x => new { x.RootId, x.DependantId }) + .HasPrincipalKey(x => new { x.RootId, x.Id }) + .OnDelete(DeleteBehavior.ClientSetNull); + }); + + modelBuilder.Entity(); + + modelBuilder.Entity(); + + modelBuilder.Entity( + b => + { + b.Navigation(e => e.Owned).IsRequired(); + b.Navigation(e => e.OwnedWithKey).IsRequired(); + + b.OwnsMany( + e => e.OwnedCollectionPrivateKey, + b => b.HasKey("OwnerWithKeyedCollectionId", "PrivateKey")); + }); + + modelBuilder + .Entity() + .OwnsMany(e => e.Owned, owned => owned.HasKey("Id")); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).ValueGeneratedNever(); + + b.OwnsOne( + e => e.Owned, + b => b.Property("OwnerNoKeyGenerationId").ValueGeneratedNever()); + b.OwnsMany( + e => e.OwnedCollection, + b => + { + b.Property("OwnedNoKeyGenerationId").ValueGeneratedNever(); + b.Property("OwnerNoKeyGenerationId").ValueGeneratedNever(); + }); + }); + + modelBuilder.Entity().HasData( + new Provider { Id = "prov1" }, + new Provider { Id = "prov2" }); + + modelBuilder.Entity().HasData( + new Partner { Id = "partner1" }); + + modelBuilder.Entity( + b => + { + b.HasOne(p => p.Partner).WithMany().IsRequired().HasForeignKey("PartnerId"); + b.HasOne().WithMany().IsRequired().HasForeignKey("ProviderId"); + + b.HasDiscriminator("ProviderId") + .HasValue("prov1") + .HasValue("prov2"); + }); + + modelBuilder.Entity( + b => + { + b.Property("EntityZId"); + b.HasOne(e => e.EntityZ).WithMany().HasForeignKey("EntityZId").IsRequired(); + }); + + modelBuilder.Entity(); + + modelBuilder.Entity( + b => + { + b.Property(e => e.AccessStateId).ValueGeneratedNever(); + b.HasData(new AccessState { AccessStateId = 1 }); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.IdUserState).HasDefaultValue(1); + b.HasOne(e => e.UserState).WithMany(e => e.Users).HasForeignKey(e => e.IdUserState); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.AccessStateWithSentinelId).ValueGeneratedNever(); + b.HasData(new AccessStateWithSentinel { AccessStateWithSentinelId = 1 }); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.IdUserState).HasDefaultValue(1).HasSentinel(667); + b.HasOne(e => e.UserState).WithMany(e => e.Users).HasForeignKey(e => e.IdUserState); + }); + + modelBuilder.Entity( + b => + { + b.HasAlternateKey(e => e.AlternateId); + b.OwnsOne( + x => x.Child, b => + { + b.WithOwner(e => e.Parent).HasForeignKey(e => e.ParentId); + }); + }); + + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedTestBase.cs b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedTestBase.cs new file mode 100644 index 00000000..9c35350f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedTestBase.cs @@ -0,0 +1,249 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable + +public abstract class GraphUpdatesLibRedTestBase : GraphUpdatesTestBase + where TFixture : GraphUpdatesLibRedTestBase.GraphUpdatesLibRedFixtureBase, new() +{ + protected GraphUpdatesLibRedTestBase(TFixture fixture) + : base(fixture) + // GraphUpdates fixtures execute thousands of commands and live for the entire class. Without a + // per-test clear, TestSqlLoggerFactory retains every formatted EF diagnostic string and eventually + // exhausts the functional-test host (observed at >425 MB of live strings in a managed heap dump). + => fixture.TestSqlLoggerFactory.Clear(); + + [ConditionalFact] // Issue #32638 + public virtual void Key_and_index_properties_use_appropriate_comparer() + { + var parent = new StringKeyAndIndexParent + { + Id = "Parent", + AlternateId = "Parent", + Index = "Index", + UniqueIndex = "UniqueIndex" + }; + + var child = new StringKeyAndIndexChild { Id = "Child", ParentId = "parent" }; + + using var context = CreateContext(); + context.AttachRange(parent, child); + + Assert.Same(child, parent.Child); + Assert.Same(parent, child.Parent); + + parent.Id = "parent"; + parent.AlternateId = "parent"; + parent.Index = "index"; + parent.UniqueIndex = "uniqueIndex"; + child.Id = "child"; + child.ParentId = "Parent"; + + context.ChangeTracker.DetectChanges(); + + var parentEntry = context.Entry(parent); + Assert.Equal(EntityState.Modified, parentEntry.State); + Assert.False(parentEntry.Property(e => e.Id).IsModified); + Assert.False(parentEntry.Property(e => e.AlternateId).IsModified); + Assert.True(parentEntry.Property(e => e.Index).IsModified); + Assert.True(parentEntry.Property(e => e.UniqueIndex).IsModified); + + var childEntry = context.Entry(child); + + if (childEntry.Metadata.IsOwned()) + { + Assert.Equal(EntityState.Modified, childEntry.State); + Assert.True(childEntry.Property(e => e.Id).IsModified); // Not a key for the owned type + Assert.False(childEntry.Property(e => e.ParentId).IsModified); + } + else + { + Assert.Equal(EntityState.Unchanged, childEntry.State); + Assert.False(childEntry.Property(e => e.Id).IsModified); + Assert.False(childEntry.Property(e => e.ParentId).IsModified); + } + } + + protected class StringKeyAndIndexParent : NotifyingEntity + { + private string _id; + private string _alternateId; + private string _uniqueIndex; + private string _index; + private StringKeyAndIndexChild _child; + + public string Id + { + get => _id; + set => SetWithNotify(value, ref _id); + } + + public string AlternateId + { + get => _alternateId; + set => SetWithNotify(value, ref _alternateId); + } + + public string Index + { + get => _index; + set => SetWithNotify(value, ref _index); + } + + public string UniqueIndex + { + get => _uniqueIndex; + set => SetWithNotify(value, ref _uniqueIndex); + } + + public StringKeyAndIndexChild Child + { + get => _child; + set => SetWithNotify(value, ref _child); + } + } + + protected class StringKeyAndIndexChild : NotifyingEntity + { + private string _id; + private string _parentId; + private int _foo; + private StringKeyAndIndexParent _parent; + + public string Id + { + get => _id; + set => SetWithNotify(value, ref _id); + } + + public string ParentId + { + get => _parentId; + set => SetWithNotify(value, ref _parentId); + } + + public int Foo + { + get => _foo; + set => SetWithNotify(value, ref _foo); + } + + public StringKeyAndIndexParent Parent + { + get => _parent; + set => SetWithNotify(value, ref _parent); + } + } + + protected override IQueryable ModifyQueryRoot(IQueryable query) + => query.AsSplitQuery(); + + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public abstract class GraphUpdatesLibRedFixtureBase : GraphUpdatesFixtureBase + { + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity( + b => + { + b.Property(e => e.AccessStateId).ValueGeneratedNever(); + b.HasData(new AccessState { AccessStateId = 1 }); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.IdUserState).HasDefaultValue(1); + b.HasOne(e => e.UserState).WithMany(e => e.Users).HasForeignKey(e => e.IdUserState); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.AccessStateWithSentinelId).ValueGeneratedNever(); + b.HasData(new AccessStateWithSentinel { AccessStateWithSentinelId = 1 }); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.IdUserState).HasDefaultValue(1).HasSentinel(667); + b.HasOne(e => e.UserState).WithMany(e => e.Users).HasForeignKey(e => e.IdUserState); + }); + + modelBuilder.Entity().Property("CategoryId").HasDefaultValue(1); + modelBuilder.Entity().Property(e => e.CategoryId).HasDefaultValue(2); + + modelBuilder.Entity( + b => + { + b.HasOne(e => e.Child) + .WithOne(e => e.Parent) + .HasForeignKey(e => e.ParentId) + .HasPrincipalKey(e => e.AlternateId); + }); + + modelBuilder.Entity>( + b => + { + b.Property(e => e.PrimaryGroup).HasDefaultValue(1).HasSentinel(1); + }); + + modelBuilder.Entity>( + b => + { + b.Property(e => e.PrimaryGroup).HasDefaultValue(true); + }); + + modelBuilder.Entity>( + b => + { + b.Property(e => e.PrimaryGroup).HasDefaultValue(true); + }); + + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + + modelBuilder.Entity().Property(x => x.Id).HasConversion(); + } + + protected override async Task SeedAsync(PoolableDbContext context) + { + await base.SeedAsync(context); + + // Jet enforces MATCH FULL semantics for composite foreign keys: every column must be null + // or every column must be non-null and satisfy the reference. SQL Server (and EF Core's + // test suite) uses MATCH SIMPLE, where any null column bypasses the constraint. + // Optional relationships can produce a mixed-null FK state (one column null, one not), + // which is valid under MATCH SIMPLE but rejected by Jet, so those composite FK constraints + // are dropped here. Required and owned relationships are always fully null or fully non-null + // (owned FK columns are PK components and therefore non-nullable), so those FKs are kept. + await context.Database.ExecuteSqlAsync($"ALTER TABLE `OptionalComposite2` DROP CONSTRAINT `FK_OptionalComposite2_OptionalAk1_ParentId_ParentAlternateId`"); + await context.Database.ExecuteSqlAsync($"ALTER TABLE `OptionalOverlapping2` DROP CONSTRAINT `FK_OptionalOverlapping2_RequiredComposite1_ParentId_ParentAlter~`"); + await context.Database.ExecuteSqlAsync($"ALTER TABLE `OptionalSingleComposite2` DROP CONSTRAINT `FK_OptionalSingleComposite2_OptionalSingleAk1_BackId_ParentAlte~`"); + await context.Database.ExecuteSqlAsync($"ALTER TABLE `SharedFkParent` DROP CONSTRAINT `FK_SharedFkParent_SharedFkDependant_RootId_DependantId`"); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedTptIdentityTest.cs b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedTptIdentityTest.cs new file mode 100644 index 00000000..822f6f45 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/GraphUpdatesLibRedTptIdentityTest.cs @@ -0,0 +1,80 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable + +public class GraphUpdatesLibRedTptIdentityTest(GraphUpdatesLibRedTptIdentityTest.LibRedFixture fixture) + : GraphUpdatesLibRedTestBase(fixture) +{ + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public class LibRedFixture : GraphUpdatesLibRedFixtureBase + { + protected override string StoreName + => "GraphTptIdentityUpdatesTest"; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + modelBuilder.UseJetIdentityColumns(); + + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().ToTable(nameof(Root)); + modelBuilder.Entity().ToTable(nameof(Required1)); + modelBuilder.Entity().ToTable(nameof(Required1Derived)); + modelBuilder.Entity().ToTable(nameof(Required1MoreDerived)); + modelBuilder.Entity().ToTable(nameof(Required2Derived)); + modelBuilder.Entity().ToTable(nameof(Required2MoreDerived)); + modelBuilder.Entity().ToTable(nameof(Optional1)); + modelBuilder.Entity().ToTable(nameof(Optional1Derived)); + modelBuilder.Entity().ToTable(nameof(Optional1MoreDerived)); + modelBuilder.Entity().ToTable(nameof(Optional2Derived)); + modelBuilder.Entity().ToTable(nameof(Optional2MoreDerived)); + modelBuilder.Entity().ToTable(nameof(RequiredSingle1)); + modelBuilder.Entity().ToTable(nameof(OptionalSingle1)); + modelBuilder.Entity().ToTable(nameof(OptionalSingle2)); + modelBuilder.Entity().ToTable(nameof(RequiredNonPkSingle1)); + modelBuilder.Entity().ToTable(nameof(RequiredNonPkSingle2Derived)); + modelBuilder.Entity().ToTable(nameof(RequiredNonPkSingle2MoreDerived)); + modelBuilder.Entity().ToTable(nameof(RequiredAk1)); + modelBuilder.Entity().ToTable(nameof(RequiredAk1Derived)); + modelBuilder.Entity().ToTable(nameof(RequiredAk1MoreDerived)); + modelBuilder.Entity().ToTable(nameof(OptionalAk1)); + modelBuilder.Entity().ToTable(nameof(OptionalAk1Derived)); + modelBuilder.Entity().ToTable(nameof(OptionalAk1MoreDerived)); + modelBuilder.Entity().ToTable(nameof(RequiredSingleAk1)); + modelBuilder.Entity().ToTable(nameof(OptionalSingleAk1)); + modelBuilder.Entity().ToTable(nameof(OptionalSingleAk2Derived)); + modelBuilder.Entity().ToTable(nameof(OptionalSingleAk2MoreDerived)); + modelBuilder.Entity().ToTable(nameof(RequiredNonPkSingleAk1)); + modelBuilder.Entity().ToTable(nameof(RequiredAk2)); + modelBuilder.Entity().ToTable(nameof(RequiredAk2Derived)); + modelBuilder.Entity().ToTable(nameof(RequiredAk2MoreDerived)); + modelBuilder.Entity().ToTable(nameof(OptionalAk2)); + modelBuilder.Entity().ToTable(nameof(OptionalAk2Derived)); + modelBuilder.Entity().ToTable(nameof(OptionalAk2MoreDerived)); + modelBuilder.Entity().ToTable(nameof(RequiredSingleAk2)); + modelBuilder.Entity().ToTable(nameof(RequiredNonPkSingleAk2)); + modelBuilder.Entity().ToTable(nameof(RequiredNonPkSingleAk2Derived)); + modelBuilder.Entity().ToTable(nameof(RequiredNonPkSingleAk2MoreDerived)); + modelBuilder.Entity().ToTable(nameof(OptionalSingleAk2)); + modelBuilder.Entity().ToTable(nameof(RequiredComposite1)); + modelBuilder.Entity().ToTable(nameof(OptionalOverlapping2)); + modelBuilder.Entity().ToTable(nameof(BadCustomer)); + modelBuilder.Entity().ToTable(nameof(BadOrder)); + modelBuilder.Entity().ToTable(nameof(TaskChoice)); + modelBuilder.Entity().ToTable(nameof(ParentAsAChild)); + modelBuilder.Entity().ToTable(nameof(ChildAsAParent)); + modelBuilder.Entity().ToTable(nameof(Poost)); + modelBuilder.Entity().ToTable(nameof(Bloog)); + modelBuilder.Entity().ToTable(nameof(Produce)); + modelBuilder.Entity().ToTable(nameof(ParentEntity32084)); + modelBuilder.Entity().ToTable(nameof(ChildBaseEntity32084)); + modelBuilder.Entity().ToTable(nameof(ChildEntity32084)); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/GraphUpdates/ProxyGraphUpdatesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/ProxyGraphUpdatesLibRedTest.cs new file mode 100644 index 00000000..c12fd68f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/GraphUpdates/ProxyGraphUpdatesLibRedTest.cs @@ -0,0 +1,146 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public abstract class ProxyGraphUpdatesLibRedTest + { + public abstract class ProxyGraphUpdatesLibRedTestBase + : ProxyGraphUpdatesTestBase + where TFixture : ProxyGraphUpdatesLibRedTestBase.ProxyGraphUpdatesLibRedFixtureBase, new() + { + protected ProxyGraphUpdatesLibRedTestBase(TFixture fixture) + : base(fixture) + => fixture.TestSqlLoggerFactory.Clear(); + + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public abstract class ProxyGraphUpdatesLibRedFixtureBase : ProxyGraphUpdatesFixtureBase + { + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + } + + protected override async Task SeedAsync(DbContext context) + { + //context.Database.ExecuteSql($"ALTER TABLE `SharedFkDependant` DROP CONSTRAINT `AK_SharedFkDependant_RootId_Id`"); + await base.SeedAsync(context); + + await context.Database.ExecuteSqlAsync($"ALTER TABLE `OptionalComposite2` DROP CONSTRAINT `FK_OptionalComposite2_OptionalAk1_ParentId_ParentAlternateId`"); + //await context.Database.ExecuteSqlAsync($"ALTER TABLE `OptionalOverlapping2` DROP CONSTRAINT `FK_OptionalOverlapping2_RequiredComposite1_ParentId_ParentAlter~`"); + await context.Database.ExecuteSqlAsync($"ALTER TABLE `OptionalSingleComposite2` DROP CONSTRAINT `FK_OptionalSingleComposite2_OptionalSingleAk1_BackId_ParentAlte~`"); + //await context.Database.ExecuteSqlAsync($"ALTER TABLE `RequiredComposite2` DROP CONSTRAINT `FK_RequiredComposite2_RequiredAk1_ParentId_ParentAlternateId`"); + await context.Database.ExecuteSqlAsync($"ALTER TABLE `SharedFkParent` DROP CONSTRAINT `FK_SharedFkParent_SharedFkDependant_RootId_DependantId`"); + } + } + } + + public class LazyLoading(LazyLoading.ProxyGraphUpdatesWithLazyLoadingLibRedFixture fixture) + : ProxyGraphUpdatesLibRedTestBase(fixture) + { + protected override bool DoesLazyLoading => true; + protected override bool DoesChangeTracking => false; + + public class ProxyGraphUpdatesWithLazyLoadingLibRedFixture : ProxyGraphUpdatesLibRedFixtureBase + { + protected override string StoreName { get; } = "ProxyGraphLazyLoadingUpdatesTest"; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base.AddOptions(builder.UseLazyLoadingProxies()); + + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection.AddEntityFrameworkProxies()); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + modelBuilder.UseJetIdentityColumns(); + + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + } + } + } + + public class ChangeTracking(ChangeTracking.ProxyGraphUpdatesWithChangeTrackingLibRedFixture fixture) + : ProxyGraphUpdatesLibRedTestBase(fixture) + { + // Needs lazy loading + public override Task Save_two_entity_cycle_with_lazy_loading() + => Task.CompletedTask; + + protected override bool DoesLazyLoading => false; + protected override bool DoesChangeTracking => true; + + public class ProxyGraphUpdatesWithChangeTrackingLibRedFixture : ProxyGraphUpdatesLibRedFixtureBase + { + protected override string StoreName { get; } = "ProxyGraphChangeTrackingUpdatesTest"; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base.AddOptions(builder.UseChangeTrackingProxies()); + + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection.AddEntityFrameworkProxies()); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + modelBuilder.UseJetIdentityColumns(); + + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + } + } + } + + public class ChangeTrackingAndLazyLoading( + ChangeTrackingAndLazyLoading.ProxyGraphUpdatesWithChangeTrackingAndLazyLoadingLibRedFixture fixture) + : ProxyGraphUpdatesLibRedTestBase< + ChangeTrackingAndLazyLoading.ProxyGraphUpdatesWithChangeTrackingAndLazyLoadingLibRedFixture>(fixture) + { + protected override bool DoesLazyLoading => true; + protected override bool DoesChangeTracking => true; + + public class ProxyGraphUpdatesWithChangeTrackingAndLazyLoadingLibRedFixture : ProxyGraphUpdatesLibRedFixtureBase + { + protected override string StoreName => "ProxyGraphChangeTrackingAndLazyLoadingUpdatesTest"; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base.AddOptions(builder.UseLazyLoadingProxies().UseChangeTrackingProxies()); + + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection.AddEntityFrameworkProxies()); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + modelBuilder.UseJetIdentityColumns(); + + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); + } + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt b/test/EFCore.LibRed.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt new file mode 100644 index 00000000..ef940f6a --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt @@ -0,0 +1,31365 @@ +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Deadlock_on_inserts_and_deletes_with_dependents_is_handled_correctly +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 1) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 100) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 3) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 4) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_and_updates_are_batched_correctly +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: False, clientOrder: False) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: False, clientOrder: True) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: True, clientOrder: False) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: True, clientOrder: True) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: False) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: True) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: True, clientOrder: False) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: True, clientOrder: True) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_when_database_type_is_different +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_get_column_types_from_built_model +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_set_to_null_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_set_to_null_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_set_to_null_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_scale +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_scale_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_scale_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_scale_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_nullable_data_types_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_nullable_data_types_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_nullable_data_types_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_sized_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_sized_data_types_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_sized_data_types_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_sized_data_types_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_with_max_length_set +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_perform_query_with_ansi_strings_test +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_perform_query_with_max_length +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_any_mapped_data_types_with_nulls +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_DateDiffHour_using_TimeSpan +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_DateDiffMinute_using_TimeSpan +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_DateDiffSecond_using_TimeSpan +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Sql_translation_uses_type_mapper_when_constant +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Sql_translation_uses_type_mapper_when_parameter +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_eager_loaded_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_eager_loaded_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_table_sharing_with_non_owned_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_table_sharing_with_non_owned_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_table_sharing_with_owned(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_table_sharing_with_owned(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_entity_with_auto_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_entity_with_auto_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_predicate_based_on_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_predicate_based_on_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_with_view_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_with_view_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Replace_ColumnExpression_in_column_setter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Replace_ColumnExpression_in_column_setter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_complex_type_with_view_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_complex_type_with_view_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_main_table_in_entity_with_entity_splitting(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_main_table_in_entity_with_entity_splitting(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_main_table_in_entity_with_entity_splitting(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_main_table_in_entity_with_entity_splitting(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned_in_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned_in_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_owned_and_non_owned_properties_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_owned_and_non_owned_properties_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_with_view_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_with_view_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_SelectMany_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_SelectMany_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Union(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Union(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_optional_navigation_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_optional_navigation_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_predicate_with_GroupBy_aggregate_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_predicate_with_GroupBy_aggregate_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_predicate_with_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_predicate_with_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Skip_Take_Skip_Take_causing_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Skip_Take_Skip_Take_causing_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_TagWith(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_TagWith(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_using_navigation_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_using_navigation_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_using_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_using_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_cross_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_cross_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_LeftJoin_via_flattened_GroupJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_LeftJoin_via_flattened_GroupJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_LeftJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_LeftJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_RightJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_RightJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_FromSql_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_FromSql_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_multiple_tables_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_multiple_tables_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_unmapped_property_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_unmapped_property_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_aggregate_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_aggregate_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_First_set_constant_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_First_set_constant_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_First_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_First_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Join_set_property_from_joined_table(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Join_set_property_from_joined_table(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_multiple_set(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_multiple_set(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Skip_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Skip_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Skip_Take_Skip_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Skip_Take_Skip_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_parameter_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_parameter_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_SelectMany_set_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_SelectMany_set_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_SelectMany_subquery_set_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_SelectMany_subquery_set_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_TagWith(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_TagWith(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_using_ef_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_using_ef_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_via_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_via_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_closure_array(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_closure_array(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_inline_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_inline_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_multilevel_property_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_multilevel_property_access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Skip_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Skip_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_using_navigation_2_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_using_navigation_2_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_using_navigation_set_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_using_navigation_set_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_invalid_lambda_in_set_property_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_invalid_lambda_in_set_property_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_join_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_join_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_LeftJoin_via_flattened_GroupJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_LeftJoin_via_flattened_GroupJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_LeftJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_LeftJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_RightJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_RightJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_two_inner_joins(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_two_inner_joins(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_without_property_to_set_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_without_property_to_set_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandConfigurationTest.Constructed_select_query_CommandBuilder_throws_when_negative_CommandTimeout_is_used +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_call_DataReader_NextResult(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_call_DataReader_NextResult(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_call_DataReader_NextResult(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_call_DataReader_NextResult(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_close_of_reader(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_close_of_reader(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_close_of_reader(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_close_of_reader(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_command_creation(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_command_creation(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_command_creation(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_command_creation(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_call_DataReader_NextResult(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_call_DataReader_NextResult(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_call_DataReader_NextResult(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_call_DataReader_NextResult(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_close_of_reader(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_close_of_reader(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_close_of_reader(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_close_of_reader(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_command_creation(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_command_creation(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_command_creation(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_command_creation(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_added_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_added_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_nested_teams_members_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_nested_teams_members_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_record_collection_elements(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_record_collection_elements(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_record_teams_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_record_teams_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_duplicates_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_duplicates_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_nested_collection_changes_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_nested_collection_changes_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_removed_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_removed_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_reordered_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_reordered_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_replaced_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_replaced_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_swapped_complex_objects_in_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_swapped_complex_objects_in_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_collection_with_mixed_null_and_duplicate_elements(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_collection_with_mixed_null_and_duplicate_elements(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_empty_nested_teams_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_empty_nested_teams_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_null_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_null_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_field_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_field_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_property_bag_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_property_bag_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_readonly_struct_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_readonly_struct_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_struct_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_struct_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_struct_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_struct_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_collections_with_fields_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_collections_with_fields_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_type_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_type_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_type_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_type_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_field_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_field_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_record_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_record_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_readonly_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_readonly_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_record_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_record_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_structs_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_structs_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_null_second_level_complex_property_with_required_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_null_second_level_complex_property_with_required_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_null_third_level_complex_property_with_all_optional_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_null_third_level_complex_property_with_all_optional_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_field_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_field_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_record_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_record_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_readonly_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_readonly_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_record_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_record_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_structs_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_structs_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detect_changes_in_complex_struct_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detect_changes_in_complex_struct_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detect_changes_in_complex_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detect_changes_in_complex_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detects_changes_in_complex_readonly_struct_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detects_changes_in_complex_readonly_struct_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detects_changes_in_complex_record_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detects_changes_in_complex_record_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_only_when_saving_with_null_second_level_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_only_when_saving_with_null_second_level_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_only_when_saving_with_null_top_level_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_only_when_saving_with_null_top_level_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_when_accessing_complex_entries_using_incorrect_cardinality +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_added_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_added_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_nested_teams_members_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_nested_teams_members_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_record_collection_elements(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_record_collection_elements(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_record_teams_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_record_teams_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_duplicates_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_duplicates_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_nested_collection_changes_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_nested_collection_changes_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_removed_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_removed_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_reordered_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_reordered_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_replaced_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_replaced_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_swapped_complex_objects_in_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_swapped_complex_objects_in_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_collection_with_mixed_null_and_duplicate_elements(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_collection_with_mixed_null_and_duplicate_elements(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_empty_nested_teams_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_empty_nested_teams_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_null_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_null_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_field_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_field_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_property_bag_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_property_bag_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_readonly_struct_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_readonly_struct_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_struct_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_struct_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_struct_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_struct_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_collections_with_fields_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_collections_with_fields_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_type_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_type_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_type_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_type_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_field_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_field_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_record_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_record_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_readonly_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_readonly_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_record_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_record_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_structs_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_structs_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_save_null_second_level_complex_property_with_required_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_save_null_second_level_complex_property_with_required_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_save_null_third_level_complex_property_with_all_optional_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_save_null_third_level_complex_property_with_all_optional_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_field_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_field_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_record_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_record_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_readonly_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_readonly_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_record_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_record_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_structs_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_structs_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detect_changes_in_complex_struct_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detect_changes_in_complex_struct_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detect_changes_in_complex_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detect_changes_in_complex_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detects_changes_in_complex_readonly_struct_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detects_changes_in_complex_readonly_struct_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detects_changes_in_complex_record_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detects_changes_in_complex_record_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_only_when_saving_with_null_second_level_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_only_when_saving_with_null_second_level_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_only_when_saving_with_null_top_level_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_only_when_saving_with_null_top_level_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_when_accessing_complex_entries_using_incorrect_cardinality +EntityFrameworkCore.Jet.FunctionalTests.CompositeKeyEndToEndJetTest.Can_use_generated_values_in_composite_key_end_to_end +EntityFrameworkCore.Jet.FunctionalTests.CompositeKeyEndToEndJetTest.Can_use_two_non_generated_integers_as_composite_key_end_to_end +EntityFrameworkCore.Jet.FunctionalTests.CompositeKeyEndToEndJetTest.Only_one_part_of_a_composite_key_needs_to_vary_for_uniqueness +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Any(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Any(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Find(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Find(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.SaveChanges(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.SaveChanges(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Single(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Single(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.ToList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.ToList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Any(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Any(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Find(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Find(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.SaveChanges(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.SaveChanges(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Single(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Single(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.ToList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.ToList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_creation_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_creation_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_creation_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_creation_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_connection_after_creation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_connection_after_creation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_creation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_creation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_opening(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_opening(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_suppress_dispose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_suppress_dispose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_creation_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_creation_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_creation_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_creation_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_connection_after_creation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_connection_after_creation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_creation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_creation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_opening(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_opening(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_suppress_dispose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_suppress_dispose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_change_connection_when_open_and_not_owned +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_DbContextOptions +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_DbContextOptions_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_non_generic_options_when_only_one_context +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_non_generic_options_when_only_one_context_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_string_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_string_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(contextOwnsConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(contextOwnsConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring(contextOwnsConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring(contextOwnsConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_string_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_string_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_owned_connection_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_owned_connection_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_then_change_connection +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "ConnectionStrings:DefaultConnection", connectionString: " NamE = ConnectionStrings:DefaultConnection ") +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "ConnectionStrings:DefaultConnection", connectionString: "name=ConnectionStrings:DefaultConnection") +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "MyConnectionString", connectionString: "name=MyConnectionString") +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_an_existing_closed_connection_test(openConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_an_existing_closed_connection_test(openConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Cannot_change_connection_when_open_and_owned +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_context_used_with_no_connection_or_connection_string +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_no_config_without_UseJet +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_no_connection_found_in_config_without_UseJet +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_data_type +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_data_type_nullable_shadow +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_data_type_shadow +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Equals_method_over_enum_works +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Object_equals_method_over_enum_works +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_query_struct_to_string_converter_for_pk +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_case_insensitive_string_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_string_list +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_and_update_with_conversion_for_custom_struct +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_and_update_with_conversion_for_custom_type +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_and_update_with_nullable_converter_on_primary_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_and_update_with_nullable_converter_on_unique_index +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_custom_type_not_mapped_by_default_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_custom_type_not_mapped_by_default_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_data_type +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_data_type_shadow +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Collection_enum_as_string_Contains +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Collection_property_as_scalar_Any +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Collection_property_as_scalar_Count_member +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Composition_over_collection_of_complex_mapped_as_scalar +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Field_on_derived_type_retrieved_via_cast_applies_value_converter +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.GroupBy_converted_enum +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Id_object_as_entity_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Infer_type_mapping_from_in_subquery_to_item +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Optional_owned_with_converter_reading_non_nullable_column +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Select_bool_with_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Select_conditional_bool_with_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Value_conversion_on_enum_collection_contains +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Value_conversion_with_property_named_value +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_bool_gets_converted_to_equality_when_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_bool_with_value_conversion_inside_comparison_doesnt_get_converted_twice +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_conditional_bool_with_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Annotation_in_derived_class_when_base_class_processed_after_derived_class +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Attribute_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ConcurrencyCheckAttribute_throws_if_value_in_database_changed +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.DatabaseGeneratedOption_configures_the_property_correctly +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.DatabaseGeneratedOption_Identity_does_not_throw_on_noninteger_properties +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Default_for_key_string_column_throws +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Default_length_for_key_string_column +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Duplicate_column_order_is_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Explicit_configuration_on_derived_type_or_base_type_is_last_one_wins +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Explicit_configuration_on_derived_type_overrides_annotation_on_mapped_base_type +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Explicit_configuration_on_derived_type_overrides_annotation_on_unmapped_base_type +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Field_annotations_are_enabled +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Fluent_API_relationship_throws_for_Keyless_attribute +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_ForeignKey_on_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_ForeignKey_same_name +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_ForeignKey_same_name_one_shadow +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_nothing +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_configures_relationships_when_inverse_on_derived +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_configures_two_self_referencing_relationships +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_creates_two_relationships_if_applied_on_navigation_and_property_on_different_sides_and_values_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_creates_two_relationships_if_applied_on_navigations_on_both_sides_and_values_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_creates_two_relationships_if_applied_on_property_on_both_side +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_throws_if_applied_on_both_navigations_connected_by_inverse_property_but_values_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_throws_if_applied_on_property_on_both_side_but_navigations_are_connected_by_inverse_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_throws_if_applied_on_two_relationships_targetting_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Inverse_and_self_ref_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InverseProperty_with_case_sensitive_clr_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InverseProperty_with_potentially_ambigous_derived_types +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_from_ignored_base_can_be_ignored_to_remove_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_from_ignored_base_causes_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_is_noop_in_unambiguous_models +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_pointing_to_same_nav_on_base_causes_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_pointing_to_same_nav_on_base_with_one_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_pointing_to_same_skip_nav_on_base_causes_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_from_the_ambiguous_end +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_when_combined_with_other_attributes +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_with_base_type +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_with_base_type_bidirectional +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_with_base_type_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_and_column_work_together +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_and_MaxLength_64_produce_nvarchar_64 +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_fluent_api_and_keyless_attribute_do_not_cause_warning +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_from_base_type_is_recognized +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_from_base_type_is_recognized_if_base_discovered_first +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_from_base_type_is_recognized_if_discovered_through_relationship +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_on_nav_prop_is_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_property_is_not_used_for_FK_when_set_by_annotation +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_specified_on_multiple_properties_can_be_overridden +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Keyless_and_key_attributes_which_conflict_cause_warning +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Keyless_fluent_api_and_key_attribute_do_not_cause_warning +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.MaxLength_with_length_takes_precedence_over_StringLength +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.MaxLengthAttribute_throws_while_inserting_value_longer_than_max_length +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Multiple_self_ref_ForeignKey_and_Inverse +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Multiple_self_ref_ForeignKeys_on_navigations +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Multiple_self_ref_ForeignKeys_on_properties +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Non_public_annotations_are_enabled +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Nothing_to_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Nothing_to_Required_and_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_abstract_base_class_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_base_class_property_and_overridden_property_ignores_them +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_base_class_property_discovered_through_navigation_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_base_class_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_new_property_with_same_name_as_in_unmapped_base_class_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_overridden_property_is_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_unmapped_base_class_property_and_overridden_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_unmapped_base_class_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_unmapped_derived_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_should_propagate_down_inheritance_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_ignores_entityType +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_ignores_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_ignores_navigation +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_ignores_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_removes_ambiguity_in_relationship_building +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_removes_ambiguity_in_relationship_building_with_base +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.OwnedEntityTypeAttribute_configures_all_references_as_owned +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.OwnedEntityTypeAttribute_configures_one_reference_as_owned +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.PrecisionAttribute_sets_precision_for_properties_and_fields +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_ForeignKey_can_be_overridden +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_nothing +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_Required +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_Required_and_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_Required_and_ForeignKey_can_be_overridden +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_to_Nothing +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_to_Nothing_inverted +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_to_Required_and_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.RequiredAttribute_for_navigation_throws_while_inserting_null_value +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.RequiredAttribute_for_property_throws_while_inserting_null_value +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Shared_ForeignKey_to_different_principals +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.StringLength_with_value_takes_precedence_over_MaxLength +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.StringLengthAttribute_throws_while_inserting_value_longer_than_max_length +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Table_can_configure_TPT_with_Owned +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.TableNameAttribute_affects_table_name_in_TPH +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Timestamp_takes_precedence_over_MaxLength +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.UnicodeAttribute_sets_unicode_for_properties_and_fields +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_context_is_reflected_in_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_context_is_reflected_in_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_context_is_reflected_in_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_local_binding_list_that_is_Deleted_in_the_state_manager_makes_entity_Added +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_local_view_that_is_already_in_the_state_manager_and_not_Deleted_is_noop +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_local_view_that_is_Deleted_in_the_state_manager_makes_entity_Added(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_local_view_that_is_Deleted_in_the_state_manager_makes_entity_Added(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_different_type_than_local_keyless_type_has_no_effect_on_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_different_type_than_local_keyless_type_has_no_effect_on_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_different_type_than_local_keyless_type_has_no_effect_on_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_subtype_still_shows_up_in_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_subtype_still_shows_up_in_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_subtype_still_shows_up_in_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Attaching_entity_to_context_is_reflected_in_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Attaching_entity_to_context_is_reflected_in_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_calls_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_contains_Unchanged_Modified_and_Added_entities_but_not_Deleted_entities(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_contains_Unchanged_Modified_and_Added_entities_but_not_Deleted_entities(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_is_cached_on_the_set +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_ToBindingList_contains_Unchanged_Modified_and_Added_entities_but_not_Deleted_entities +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_ToBindingList_is_cached_on_the_set +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_added_to_local_binding_list_are_added_to_state_manager +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_added_to_local_view_are_added_to_state_manager(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_added_to_local_view_are_added_to_state_manager(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_and_owned_children_added_to_local_view_are_added_to_state_manager(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_and_owned_children_added_to_local_view_are_added_to_state_manager(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_deleted_from_context_are_removed_from_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_deleted_from_context_are_removed_from_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_deleted_from_context_are_removed_from_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_detached_from_context_are_removed_from_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_detached_from_context_are_removed_from_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_detached_from_context_are_removed_from_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_materialized_into_context_are_reflected_in_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_materialized_into_context_are_reflected_in_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_materialized_into_context_are_reflected_in_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_removed_from_the_local_binding_list_are_marked_deleted_in_the_state_manager +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_removed_from_the_local_view_are_marked_deleted_in_the_state_manager(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_removed_from_the_local_view_are_marked_deleted_in_the_state_manager(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_from_deleted_to_added_are_added_to_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_from_deleted_to_added_are_added_to_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_from_deleted_to_unchanged_are_added_to_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_from_deleted_to_unchanged_are_added_to_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_to_deleted_are_removed_from_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_to_deleted_are_removed_from_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_to_detached_are_removed_from_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_to_detached_are_removed_from_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_added_to_context_is_added_to_navigation_property_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_added_to_navigation_property_binding_list_is_added_to_context_after_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_removed_from_navigation_property_binding_list_is_removed_from_nav_property_but_not_marked_Deleted(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_removed_from_navigation_property_binding_list_is_removed_from_nav_property_but_not_marked_Deleted(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_removed_from_navigation_property_binding_list_is_removed_from_nav_property_but_not_marked_Deleted(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Load_executes_query_on_keyless_entity_type +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.LocalView_is_initialized_with_entities_from_the_context(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.LocalView_is_initialized_with_entities_from_the_context(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Remove_detached_entity_from_LocalView(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Remove_detached_entity_from_LocalView(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Sets_containing_instances_of_subtypes_can_still_be_sorted +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Sets_of_subtypes_can_still_be_sorted +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_double_dispose_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_double_dispose_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_double_dispose_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_double_dispose_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_pool_non_derived_context(useFactory: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_pool_non_derived_context(useFactory: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_pool_non_derived_context(useFactory: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_pool_non_derived_context(useFactory: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Change_tracker_can_be_cleared_without_resetting_context_config +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Concurrency_test2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Concurrency_test2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: False, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: True, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: False, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: True, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.ContextIds_make_sense_when_not_pooling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.ContextIds_make_sense_when_not_pooling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: False, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: True, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Does_not_throw_when_parameterless_and_correct_constructor +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Does_not_throw_when_parameterless_and_correct_constructor_using_factory_pool +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Does_not_throw_when_pooled_context_constructor_has_singleton_service +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_concurrency_test(useInterface: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_concurrency_test(useInterface: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_does_not_enter_pool_twice(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_does_not_enter_pool_twice(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_does_not_enter_pool_twice(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_does_not_enter_pool_twice(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_with_standalone_lease_does_not_enter_pool_twice(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_with_standalone_lease_does_not_enter_pool_twice(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_with_standalone_lease_does_not_enter_pool_twice(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_with_standalone_lease_does_not_enter_pool_twice(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: False, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: False, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: False, openWithEf: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: False, openWithEf: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: True, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: True, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: False, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: False, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: False, openWithEf: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: False, openWithEf: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: True, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: True, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: False, startsOpen: False, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: False, startsOpen: False, openWithEf: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: False, startsOpen: True, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: True, startsOpen: False, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: True, startsOpen: False, openWithEf: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: True, startsOpen: True, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: False, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: False, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: False, openWithEf: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: False, openWithEf: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: True, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: True, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: True, openWithEf: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: True, openWithEf: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection(async: False, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection(async: False, openWithEf: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection(async: True, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection(async: True, openWithEf: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Invalid_pool_size +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Invalid_pool_size_with_factory(withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Invalid_pool_size_with_factory(withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Object_in_pool_is_disposed(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Object_in_pool_is_disposed(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Object_in_pool_is_disposed(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Object_in_pool_is_disposed(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Options_modified_in_on_configuring_with_factory +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Options_modified_in_on_configuring(useInterface: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Options_modified_in_on_configuring(useInterface: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_can_get_context_by_concrete_type_even_when_service_interface_is_used +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_context_when_context_not_pooled(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_context_when_context_not_pooled(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_context_when_context_not_pooled(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_context_when_context_not_pooled(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_contexts_when_disposed(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_contexts_when_disposed(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_contexts_when_disposed(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_contexts_when_disposed(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: False, withDependencyInjection: False, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: False, withDependencyInjection: False, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: False, withDependencyInjection: True, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: False, withDependencyInjection: True, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: True, withDependencyInjection: False, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: True, withDependencyInjection: False, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: True, withDependencyInjection: True, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: True, withDependencyInjection: True, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: False, async: False, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: False, async: False, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: False, async: True, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: False, async: True, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: True, async: False, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: True, async: False, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: True, async: True, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: True, async: True, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Throws_when_pooled_context_constructor_has_scoped_service +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Throws_when_pooled_context_constructor_has_second_parameter_that_cannot_be_resolved_from_service_provider +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Throws_when_pooled_context_constructor_has_single_parameter_that_cannot_be_resolved_from_service_provider +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Throws_when_used_with_parameterless_constructor_context +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: False, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: True, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_behavior_with_factory(withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_behavior_with_factory(withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_default +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_with_factory +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_with_factory_default +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_with_service_interface +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_with_service_interface_default +EntityFrameworkCore.Jet.FunctionalTests.DefaultValuesTest.Can_use_SQL_Server_default_values +EntityFrameworkCore.Jet.FunctionalTests.DesignTimeJetTest.Can_get_migrations_services +EntityFrameworkCore.Jet.FunctionalTests.DesignTimeJetTest.Can_get_reverse_engineering_services +EntityFrameworkCore.Jet.FunctionalTests.EntitySplittingJetTest.Can_roundtrip +EntityFrameworkCore.Jet.FunctionalTests.EntitySplittingJetTest.ExecuteDelete_throws_for_entity_splitting(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EntitySplittingJetTest.ExecuteDelete_throws_for_entity_splitting(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_with_max_length_set +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_perform_query_with_ansi_strings_test +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_perform_query_with_max_length +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_data_type_nullable_shadow +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_data_type_shadow +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_perform_query_with_ansi_strings_test +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_data_type_nullable_shadow +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_data_type_shadow +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Can_define_a_backing_field_for_a_navigation_and_query_and_update_it +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Field_mapping_with_conversion_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_fields_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_fields_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_fields_only_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_fields_only_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_auto_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_fields_only +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_fields_only_only_for_navs_too +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_full_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_full_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_hiding_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_props_with_IReadOnlyCollection +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_read_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_read_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_write_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_write_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_auto_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_fields_only +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_fields_only_only_for_navs_too +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_full_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_full_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_hiding_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_props_with_IReadOnlyCollection +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_read_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_read_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_write_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_write_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_fields_only_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_fields_only_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_fields_only_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_fields_only_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_fields_only_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_fields_only_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_fields_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_fields_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_auto_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_fields_only +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_fields_only_only_for_navs_too +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_full_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_full_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_hiding_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_props_with_IReadOnlyCollection +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_read_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_read_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_write_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_write_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Can_change_IsLoaded_flag_for_collection +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Can_change_IsLoaded_flag_for_reference_only_if_null +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_string_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_string_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_string_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_string_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_with_navigation_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_with_navigation_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_with_navigation_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_with_navigation_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_using_string_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_using_string_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_using_string_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_using_string_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_with_navigation_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_with_navigation_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_with_navigation_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_with_navigation_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_principal_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_principal_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_principal_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_principal_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_using_string_to_principal_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_using_string_to_principal_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_using_string_to_principal_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_using_string_to_principal_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_with_navigation_to_principal_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_with_navigation_to_principal_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_with_navigation_to_principal_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_with_navigation_to_principal_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_using_string_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_using_string_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_with_navigation_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_with_navigation_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_using_string_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_using_string_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_with_navigation_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_with_navigation_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_principal_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_principal_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_using_string_to_principal_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_using_string_to_principal_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_with_navigation_to_principal_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_with_navigation_to_principal_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_using_base_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_using_base_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_using_base_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_using_base_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_using_base_set_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_using_base_set_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_using_base_set_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_using_base_set_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_base_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_base_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_base_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_base_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_composite_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_composite_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_composite_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_composite_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_derived_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_derived_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_derived_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_derived_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_in_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_in_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_in_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_in_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_values_array +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_values_array_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_values_array_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_values_array_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_nullable_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_nullable_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_shadow_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_string_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_string_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_string_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_string_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_with_different_namespace +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_multiple_values_passed_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_wrong_number_of_values_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_using_base_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_using_base_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_using_base_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_using_base_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_using_base_set_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_using_base_set_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_using_base_set_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_using_base_set_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_base_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_base_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_base_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_base_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_composite_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_composite_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_composite_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_composite_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_derived_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_derived_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_derived_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_derived_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_in_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_in_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_in_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_in_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_values_array +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_values_array_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_values_array_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_values_array_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_nullable_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_nullable_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_shadow_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_string_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_string_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_string_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_string_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_with_different_namespace +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_multiple_values_passed_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_wrong_number_of_values_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_using_base_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_using_base_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_using_base_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_using_base_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_using_base_set_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_using_base_set_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_using_base_set_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_using_base_set_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_base_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_base_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_base_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_base_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_composite_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_composite_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_composite_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_composite_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_derived_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_derived_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_derived_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_derived_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_in_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_in_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_in_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_in_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_values_array +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_values_array_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_values_array_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_values_array_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_nullable_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_nullable_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_shadow_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_string_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_string_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_string_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_string_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_with_different_namespace +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_multiple_values_passed_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Async_methods_should_have_overload_with_cancellation_token_and_end_with_async_suffix +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Builders_have_matching_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_builder_methods_have_matching_returns +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_builder_types_have_expected_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_metadata_methods_have_expected_shape +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_metadata_types_have_expected_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_metadata_types_have_matching_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Exceptions_are_valid +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Fluent_api_methods_should_not_return_void +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Generic_fluent_api_methods_should_return_generic_types +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Metadata_types_have_expected_structure +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Mutable_metadata_methods_have_expected_shape +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Mutable_metadata_types_have_matching_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Private_classes_should_be_sealed +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Public_api_bool_parameters_should_not_be_prefixed +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Public_inheritable_apis_should_be_virtual +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Readonly_metadata_methods_have_expected_name +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Runtime_metadata_types_have_matching_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Service_implementations_should_use_dependencies_parameter_object +EntityFrameworkCore.Jet.FunctionalTests.JetComplianceTest.All_query_test_fixtures_must_implement_ITestSqlLoggerFactory +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ConstructorArgsToBuilder.Can_pass_context_options_to_constructor_and_use_in_builder +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ConstructorArgsToOnConfiguring.Can_pass_connection_string_to_constructor_and_use_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ExplicitServicesAndConfig.Can_query_with_explicit_services_and_explicit_config +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ExplicitServicesAndNoConfig.Throws_on_attempt_to_use_SQL_Server_without_providing_connection_string +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ExplicitServicesImplicitConfig.Can_query_with_explicit_services_and_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ImplicitConfigButNoServices.Throws_on_attempt_to_use_store_with_no_store_services +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ImplicitServicesAndConfig.Can_query_with_implicit_services_and_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ImplicitServicesExplicitConfig.Can_query_with_implicit_services_and_explicit_config +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+InjectContext.Can_register_context_with_DI_container_and_have_it_injected +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+InjectContextAndConfiguration.Can_register_context_and_configuration_with_DI_container_and_have_both_injected +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+NestedContext.Can_use_one_context_nested_inside_another_of_the_same_type +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+NoServicesAndNoConfig.Throws_on_attempt_to_use_context_with_no_store +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_and_remove_entities_with_keys_of_different_type +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_table_splitting_dependent_after_principal +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_enumerate_entity_set +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_non_owner_principal_for_owned +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_TPT_dependents_with_identity +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_remove_multiple_byte_array_as_key +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_replace_identifying_FK_entity_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_changed_only_notification_entities +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_full_notification_entities +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_snapshot_change_tracking +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_run_linq_query_on_entity_set +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_run_linq_query_on_entity_set_with_value_buffer_reader +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_save_changes +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_save_changes_in_tracked_entities +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_use_string_enum_or_byte_array_as_key +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Throws_when_adding_table_splitting_dependent_without_principal +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Tracking_entities_asynchronously_returns_tracked_entities_back +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddCheckConstraint_generates_exec_when_idempotent +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_datetime_with_defaultValue_sql +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_fixed_length_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_maxLength_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_maxLength_overridden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_precision_and_scale_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_precision_and_scale_overridden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_rowversion_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_rowversion_overridden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_unicode_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_unicode_overridden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_without_column_type +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddForeignKeyOperation_without_principal_columns +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.All_tests_must_be_overriden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_add_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_remove_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_with_added_index +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_with_added_index_no_oldType +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_with_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_with_index_no_oldColumn +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_without_column_type +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.CreateDatabaseOperation +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.CreateIndex_generates_exec_when_filter_and_idempotent +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DefaultValue_with_line_breaks_2(isUnicode: False) +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DefaultValue_with_line_breaks_2(isUnicode: True) +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DefaultValue_with_line_breaks(isUnicode: False) +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DefaultValue_with_line_breaks(isUnicode: True) +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_all_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_all_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_required_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_required_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_throws_for_missing_column_types +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_throws_for_types_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_throws_for_values_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DropDatabaseOperation +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_required_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_required_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_required_args_multiple_rows +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_missing_column_types +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_missing_entity_type +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_missing_property +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_types_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_unsupported_column_types +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_values_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.RenameIndexOperations_throws_when_no_table +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.RenameTableOperation +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.RenameTableOperation_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.SqlOperation +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_all_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_all_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_all_args_composite_multi +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_all_args_multi +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args_composite_multi +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args_multi +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args_multiple_rows +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_key_types_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_key_values_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_missing_column_types +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_row_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_types_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_values_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Calling_AddEntityFramework_explicitly_does_not_change_services +EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Repeated_calls_to_add_do_not_modify_collection +EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Required_services_are_registered_with_expected_lifetimes +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_explicit_value_throws_when_readonly_before_save +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_int_enum_to_Identity_column +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_string_to_Identity_column_using_value_converter +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_uint_to_Identity_column_using_value_converter +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_client_generated_GUID_key +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_default_keys +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_non_default_keys +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_with_default_keys +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_Identity_column +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_implicit_default_keys +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_non_key_default_value +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_non_key_default_value_readonly +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_ValueGeneratedOnAdd_GUID_nonkey_property_throws +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_array_of_array_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_array_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_array_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_binary_JSON_values(expected: "{\"Prop\":[[\"AAEC\",\"AQ==\",\"TQ==\"],[],[\"Tg=="···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_as_collection +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "1,2,3,4", json: "{\"Prop\":\"AQIDBA==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "255,255,255,255", json: "{\"Prop\":\"/////w==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_bool_JSON_values(value: False, json: "{\"Prop\":false}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_bool_JSON_values(value: True, json: "{\"Prop\":true}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_enum_JSON_values(value: 255, json: "{\"Prop\":255}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_JSON_values(value: 255, json: "{\"Prop\":255}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: ' ', json: "{\"Prop\":\" \"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: '\0', json: "{\"Prop\":\"\\u0000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: "Z", json: "{\"Prop\":\"Z\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: 0xffff, json: "{\"Prop\":\"\\uFFFF\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ASCII_string_JSON_values(storeType: null) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_JSON_values(expected: "{\"Prop\":[\"AAAAAQ==\",\"/////w==\",\"\",\"AQIDBA"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_bool_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_bool_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_byte_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_byte_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_char_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_char_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateOnly_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateOnly_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00\",\"2023-05-29T10"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTimeOffset_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00+00:00\",\"2023-05"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,792281"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_with_precision_and_scale_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,792281"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_double_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_double_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_fixed_length_string_JSON_values(storeType: null) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_float_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_Guid_converted_to_bytes_JSON_values(expected: "{\"Prop\":[\"AAAAAAAAAAAAAAAAAAAAAA==\",\"LyREjD+O"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_GUID_JSON_values(expected: "{\"Prop\":[\"00000000-0000-0000-0000-000000000000\"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_enum_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_with_converter_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_IP_address_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_long_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_long_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_JSON_values(expected: "{\"Prop\":[\"AAAAAQ==\",null,\"/////w==\",\"\",\"A"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_bool_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_bool_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_byte_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_byte_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_char_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_char_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateOnly_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateOnly_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00\",null,\"2023-05-"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTimeOffset_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00+00:00\",\"2023-05"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_decimal_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,null,7"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_double_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_double_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_float_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_GUID_JSON_values(expected: "{\"Prop\":[\"00000000-0000-0000-0000-000000000000\"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_enum_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_with_converter_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_IP_address_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_long_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_long_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_physical_address_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_sbyte_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_sbyte_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_sbyte_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_short_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_short_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_string_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_TimeOnly_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_TimeSpan_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_uint_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_uint_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ulong_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ulong_enum_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ulong_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_URI_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ushort_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ushort_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_physical_address_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_sbyte_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_sbyte_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_sbyte_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_short_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_short_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_string_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_TimeOnly_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_TimeSpan_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_uint_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_uint_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ulong_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ulong_enum_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ulong_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_URI_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ushort_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ushort_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_converted_type_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_converted_type_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_converted_type_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_converted_type_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "0.0.0.0", json: "{\"Prop\":\"0.0.0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "1/1/0001", json: "{\"Prop\":\"0001-01-01\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "12/31/9999", json: "{\"Prop\":\"9999-12-31\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "5/29/2023", json: "{\"Prop\":\"2023-05-29\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTime_JSON_values(value: "0001-01-01T00:00:00.0000000", json: "{\"Prop\":\"0001-01-01T00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTime_JSON_values(value: "2023-05-29T10:52:47.2064353", json: "{\"Prop\":\"2023-05-29T10:52:47.2064353\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTime_JSON_values(value: "9999-12-31T23:59:59.9999999", json: "{\"Prop\":\"9999-12-31T23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01T00:00:00-01:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01T00:00:00-03:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTimeOffset_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29T11:11:15.5672854+04:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTimeOffset_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31T23:59:59.9999999+02:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_decimal_JSON_values(value: "-79228162514264337593543950335", json: "{\"Prop\":-79228162514264337593543950335}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_decimal_JSON_values(value: "0.0", json: "{\"Prop\":0.0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_decimal_JSON_values(value: "1.1", json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_decimal_JSON_values(value: "79228162514264337593543950335", json: "{\"Prop\":79228162514264337593543950335}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_double_JSON_values(value: -1.7976931348623157E+308, json: "{\"Prop\":-1.7976931348623157E+308}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_double_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_double_JSON_values(value: 1.1000000000000001, json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_double_JSON_values(value: 1.7976931348623157E+308, json: "{\"Prop\":1.7976931348623157E+308}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_enum_char_converted_type_JSON_values(value: FieldA, json: "{\"Prop\":\"A\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_enum_char_converted_type_JSON_values(value: FieldB, json: "{\"Prop\":\"B\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: -3.40282347E+38, json: "{\"Prop\":-3.4028235E+38}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 1.10000002, json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":3.4028235E+38}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "0.0.0.0", json: "{\"Prop\":\"0.0.0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_line_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_binary_JSON_values(expected: "{\"Prop\":[[\"AAEC\",\"AQ==\",\"TQ==\"],[],[\"Tg=="···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_array_of_binary_JSON_values(expected: "{\"Prop\":[[[[\"AAEC\",\"AQ==\",\"TQ==\"]],[],[[],"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_list_of_list_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_multi_line_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_multi_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "1,2,3,4", json: "{\"Prop\":\"AQIDBA==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "255,255,255,255", json: "{\"Prop\":\"/////w==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: "1,2,3,4", json: "{\"Prop\":\"AQIDBA==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: "255,255,255,255", json: "{\"Prop\":\"/////w==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_as_string_JSON_values(value: False, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_as_string_JSON_values(value: True, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_JSON_values(value: False, json: "{\"Prop\":false}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_JSON_values(value: True, json: "{\"Prop\":true}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_as_string_JSON_values(value: 255, json: "{\"Prop\":\"255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: 255, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_JSON_values(value: 255, json: "{\"Prop\":255}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_JSON_values(value: 255, json: "{\"Prop\":255}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: ' ', json: "{\"Prop\":\" \"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: '\0', json: "{\"Prop\":\"\\u0000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: 'Z', json: "{\"Prop\":\"Z\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: 0xffff, json: "{\"Prop\":\"\\uFFFF\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: ' ', json: "{\"Prop\":\" \"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: '\0', json: "{\"Prop\":\"\\u0000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: 'Z', json: "{\"Prop\":\"Z\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: 0xffff, json: "{\"Prop\":\"\\uFFFF\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_as_string_JSON_values(value: "1/1/0001", json: "{\"Prop\":\"0001-01-01\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_as_string_JSON_values(value: "12/31/9999", json: "{\"Prop\":\"9999-12-31\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_as_string_JSON_values(value: "5/29/2023", json: "{\"Prop\":\"2023-05-29\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_JSON_values(value: "1/1/0001", json: "{\"Prop\":\"0001-01-01\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_JSON_values(value: "12/31/9999", json: "{\"Prop\":\"9999-12-31\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_JSON_values(value: "5/29/2023", json: "{\"Prop\":\"2023-05-29\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000", json: "{\"Prop\":\"0001-01-01 00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_as_string_JSON_values(value: "2023-05-29T10:52:47.2064353", json: "{\"Prop\":\"2023-05-29 10:52:47.2064353\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_as_string_JSON_values(value: "9999-12-31T23:59:59.9999999", json: "{\"Prop\":\"9999-12-31 23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: "0001-01-01T00:00:00.0000000", json: "{\"Prop\":\"0001-01-01T00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: "2023-05-29T10:52:47.2064353", json: "{\"Prop\":\"2023-05-29T10:52:47.2064353\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: "9999-12-31T23:59:59.9999999", json: "{\"Prop\":\"9999-12-31T23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01 00:00:00-01:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01 00:00:00-03:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29 11:11:15.5672854\\u002B04:0"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31 23:59:59.9999999\\u002B02:0"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01T00:00:00-01:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01T00:00:00-03:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29T11:11:15.5672854+04:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31T23:59:59.9999999+02:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: "-79228162514264337593543950335", json: "{\"Prop\":\"-79228162514264337593543950335\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: "0.0", json: "{\"Prop\":\"0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: "1.1", json: "{\"Prop\":\"1.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: "79228162514264337593543950335", json: "{\"Prop\":\"79228162514264337593543950335\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: "-79228162514264337593543950335", json: "{\"Prop\":-79228162514264337593543950335}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: "0.0", json: "{\"Prop\":0.0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: "1.1", json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: "79228162514264337593543950335", json: "{\"Prop\":79228162514264337593543950335}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: -1.7976931348623157E+308, json: "{\"Prop\":\"-1.7976931348623157E\\u002B308\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: 1.1000000000000001, json: "{\"Prop\":\"1.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: 1.7976931348623157E+308, json: "{\"Prop\":\"1.7976931348623157E\\u002B308\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: -1.7976931348623157E+308, json: "{\"Prop\":-1.7976931348623157E+308}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: 1.1000000000000001, json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: 1.7976931348623157E+308, json: "{\"Prop\":1.7976931348623157E+308}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: -3.40282347E+38, json: "{\"Prop\":\"-3.4028235E\\u002B38\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: 1.10000002, json: "{\"Prop\":\"1.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":\"3.4028235E\\u002B38\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: -3.40282347E+38, json: "{\"Prop\":-3.4028235E+38}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 1.10000002, json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":3.4028235E+38}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: -2147483648, json: "{\"Prop\":\"-2147483648\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: 2147483647, json: "{\"Prop\":\"2147483647\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: -2147483648, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Default\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: 2147483647, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "0.0.0.0", json: "{\"Prop\":\"0.0.0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "0.0.0.0", json: "{\"Prop\":\"0.0.0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_line_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: -9223372036854775808, json: "{\"Prop\":\"-9223372036854775808\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: 9223372036854775807, json: "{\"Prop\":\"9223372036854775807\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: -9223372036854775808, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Default\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: 9223372036854775807, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_multi_line_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_multi_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_as_string_JSON_values(value: "00-11-22-33-44-55", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_as_string_JSON_values(value: "0011.2233.4455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_as_string_JSON_values(value: "001122334455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_JSON_values(value: "00-11-22-33-44-55", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_JSON_values(value: "0011.2233.4455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_JSON_values(value: "001122334455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_point +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_point_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_polygon +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_polygon_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: -128, json: "{\"Prop\":\"-128\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: 127, json: "{\"Prop\":\"127\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: -128, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Default\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: 127, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: -128, json: "{\"Prop\":-128}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: 127, json: "{\"Prop\":127}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: -128, json: "{\"Prop\":-128}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: 127, json: "{\"Prop\":127}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: -32768, json: "{\"Prop\":\"-32768\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: 32767, json: "{\"Prop\":\"32767\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: -32768, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Default\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: 32767, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: -32768, json: "{\"Prop\":-32768}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: 32767, json: "{\"Prop\":32767}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: -32768, json: "{\"Prop\":-32768}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: 32767, json: "{\"Prop\":32767}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_as_string_JSON_values(value: "00:00:00.0000000", json: "{\"Prop\":\"00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_as_string_JSON_values(value: "11:05:12.3456789", json: "{\"Prop\":\"11:05:12.3456789\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_as_string_JSON_values(value: "23:59:59.9999999", json: "{\"Prop\":\"23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_JSON_values(value: "00:00:00.0000000", json: "{\"Prop\":\"00:00:00.0000000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_JSON_values(value: "11:05:12.3456789", json: "{\"Prop\":\"11:05:12.3456789\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_JSON_values(value: "23:59:59.9999999", json: "{\"Prop\":\"23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: "-10675199.02:48:05.4775808", json: "{\"Prop\":\"-10675199.02:48:05.4775808\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: "00:00:00", json: "{\"Prop\":\"00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: "10675199.02:48:05.4775807", json: "{\"Prop\":\"10675199.02:48:05.4775807\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: "12:23:23.8018854", json: "{\"Prop\":\"12:23:23.8018854\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: "-10675199.02:48:05.4775808", json: "{\"Prop\":\"-10675199:2:48:05.4775808\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: "00:00:00", json: "{\"Prop\":\"0:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: "10675199.02:48:05.4775807", json: "{\"Prop\":\"10675199:2:48:05.4775807\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: "12:23:23.8018854", json: "{\"Prop\":\"12:23:23.8018854\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_as_string_JSON_values(value: 4294967295, json: "{\"Prop\":\"4294967295\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: 4294967295, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_JSON_values(value: 4294967295, json: "{\"Prop\":4294967295}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_JSON_values(value: 4294967295, json: "{\"Prop\":4294967295}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_as_string_JSON_values(value: 18446744073709551615, json: "{\"Prop\":\"18446744073709551615\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: 18446744073709551615, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 65535, json: "{\"Prop\":\"65535\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: 65535, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_JSON_values(value: 65535, json: "{\"Prop\":65535}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_JSON_values(value: 65535, json: "{\"Prop\":65535}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_physical_address_JSON_values(value: "00-11-22-33-44-55", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_physical_address_JSON_values(value: "0011.2233.4455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_physical_address_JSON_values(value: "001122334455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_M +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_M_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_Z +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_Z_and_M +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_Z_and_M_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_Z_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_typed_as_geometry +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_typed_as_geometry_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_typed_as_nullable_geometry +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_typed_as_nullable_geometry_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_enum_JSON_values(value: -128, json: "{\"Prop\":-128}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_enum_JSON_values(value: 127, json: "{\"Prop\":127}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_JSON_values(value: -128, json: "{\"Prop\":-128}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_JSON_values(value: 127, json: "{\"Prop\":127}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_enum_JSON_values(value: -32768, json: "{\"Prop\":-32768}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_enum_JSON_values(value: 32767, json: "{\"Prop\":32767}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: -32768, json: "{\"Prop\":-32768}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 32767, json: "{\"Prop\":32767}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeOnly_JSON_values(value: "00:00:00.0000000", json: "{\"Prop\":\"00:00:00.0000000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeOnly_JSON_values(value: "11:05:12.3456789", json: "{\"Prop\":\"11:05:12.3456789\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeOnly_JSON_values(value: "23:59:59.9999999", json: "{\"Prop\":\"23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeSpan_JSON_values(value: "-10675199.02:48:05.4775808", json: "{\"Prop\":\"-10675199:2:48:05.4775808\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeSpan_JSON_values(value: "00:00:00", json: "{\"Prop\":\"0:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeSpan_JSON_values(value: "10675199.02:48:05.4775807", json: "{\"Prop\":\"10675199:2:48:05.4775807\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeSpan_JSON_values(value: "12:23:23.8018854", json: "{\"Prop\":\"12:23:23.8018854\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_enum_JSON_values(value: 4294967295, json: "{\"Prop\":4294967295}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_JSON_values(value: 4294967295, json: "{\"Prop\":4294967295}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_enum_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 65535, json: "{\"Prop\":65535}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_JSON_values(value: 65535, json: "{\"Prop\":65535}") +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_bare_class_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_bare_class_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_class_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_class_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_class_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_class_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_binary_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_binary_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_binary_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_binary_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_enumerable_class_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_binary_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_binary_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_binary_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_binary_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_binary_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_binary_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_binary_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_binary_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_structural_struct_binary_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_structural_struct_binary_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_structural_struct_binary_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_structural_struct_binary_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_binary_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_comparable_bytes_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_comparable_int_class_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_comparable_int_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_generic_comparable_bytes_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_generic_comparable_int_class_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_generic_comparable_int_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_int_bare_class_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_int_class_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_int_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_structural_generic_comparable_bytes_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_value_converter +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Can_serialize_proxies_to_JSON +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Can_use_proxies_from_multiple_threads_when_navigations_already_loaded(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Can_use_proxies_from_multiple_threads_when_navigations_already_loaded(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Detected_dependent_reference_navigation_changes_are_detected_and_marked_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Detected_principal_reference_navigation_changes_are_detected_and_marked_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_many_non_virtual_collection_of_owned_types +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_many_non_virtual_collection_of_owned_types_with_explicit_lazy_load +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_many_virtual_collection_of_owned_types +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_many_virtual_collection_of_owned_types_with_explicit_lazy_load +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_one_non_virtual_reference_to_owned_type +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_one_virtual_reference_to_owned_type +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Entity_equality_with_proxy_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Entity_equality_with_proxy_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded_no_tracking(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded_no_tracking(queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_for_detached_is_no_op +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_for_no_tracking_does_not_throw_if_populated +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Added, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Added, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Added, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Deleted, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Deleted, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Deleted, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Detached, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Detached, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Detached, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Modified, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Modified, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Modified, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Unchanged, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Unchanged, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Unchanged, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_reference_to_dependent_for_detached_is_no_op +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_reference_to_dependent_for_no_tracking_does_not_throw_if_populated +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_reference_to_principal_for_detached_is_no_op +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_reference_to_principal_for_no_tracking_does_not_throw_if_populated +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_already_loaded_owned_types +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_alternate_model +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_multiple_queries +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_multiple_queries_using_Count +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_opaque_predicate_and_multiple_queries +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_handles_shadow_nullable_GUID_FK_in_TPH_model +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_shares_service_property_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_collection_is_not_lazy_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_one_to_many_reference_to_principal_is_not_lazy_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_one_to_one_reference_to_principal_is_not_lazy_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_reference_to_dependent_is_not_lazy_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Setting_reference_to_owned_type_to_null_is_allowed_on_non_virtual_navigation +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Setting_reference_to_owned_type_to_null_is_allowed_on_virtual_navigation +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Top_level_projection_track_entities_before_passing_to_client_method +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Can_change_IsLoaded_flag_for_collection +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Can_change_IsLoaded_flag_for_reference_only_if_null +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Fixup_one_to_one_reference_after_FK_change_without_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Fixup_reference_after_FK_change_without_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_is_thread_safe(noTracking: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_is_thread_safe(noTracking: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_is_thread_safe(noTracking: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_is_thread_safe(noTracking: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_uses_field_access_when_abstract_base_class_navigation +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Setting_navigation_to_null_is_detected_by_local_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.ForeignKeyPropertiesMappedToUnrelatedTables_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.IndexPropertiesBothMappedAndNotMappedToTable_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.InvalidIncludePathError_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_command_timeout +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_default_options +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_max_batch_size +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_migrations_assembly +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_migrations_history_table +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_migrations_history_table_schema +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_no_tracking +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_relational_nulls +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_sensitive_data_logging +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.StoredProcedureConcurrencyTokenNotMapped_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.UnnamedIndexPropertiesMappedToNonOverlappingTables_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_filtered_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_filtered_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include_for_inverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include_for_inverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include_for_same_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include_for_same_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_with_Include_marks_only_left_as_loaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_with_Include_marks_only_left_as_loaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Added, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Added, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Added, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Added, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Added, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Added, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Added, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Added, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include_and_projection_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include_and_projection_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_inverse_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_inverse_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_inverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_inverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_same_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_same_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_join_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_join_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws_unidirectional(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws_unidirectional(queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws_unidirectional(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_Include_marks_only_left_as_loaded_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_Include_marks_only_left_as_loaded_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_Include_marks_only_left_as_loaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_Include_marks_only_left_as_loaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Complex_collection_mapped_to_json_can_specify_column_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Complex_collection_mapped_to_json_uses_property_name_when_column_name_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.ComplexCollection_can_have_nested_complex_properties_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Throws_for_incompatible_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_call_PrimitiveCollection_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_call_Property_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_shadow_primitive_collections_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_map_a_tuple +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_view_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_view_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_can_be_configured_as_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_can_be_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_property_mapped_to_json_can_specify_column_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_property_mapped_to_json_uses_property_name_when_column_name_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_property_mapped_to_json_with_nested_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_type_discriminator_mapped_to_json_has_default_json_property_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_incompatible_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_primitive_collection_with_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_before_base_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Base_type_can_be_discovered_after_creating_foreign_keys_on_derived +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Base_types_are_mapped_correctly_if_discovered_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_add_check_constraints +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_create_relationship_between_base_type_and_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_get_set_discriminator_mapping_is_complete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_ignore_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_map_derived_self_ref_many_to_one +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_map_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_match_navigation_to_derived_type_with_inverse_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_override_TPC_with_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_promote_shadow_fk_to_the_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_reconfigure_inherited_intraHierarchical_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_remove_objects_in_derived_type_which_was_set_using_data_annotation_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_set_and_remove_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_specify_discriminator_values_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_specify_discriminator_without_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Cannot_remove_objects_in_derived_type_which_was_set_using_explicit_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_removed_when_covered_by_an_inherited_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_removed_when_covered_by_an_inherited_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Inherited_clr_properties_are_mapped_to_the_same_column +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Ordering_of_entityType_discovery_does_not_affect_key_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_many_to_one_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_with_fk_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_reverted_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_with_fk_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Relationships_are_discovered_on_the_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Relationships_on_derived_types_are_discovered_first_if_base_is_one_sided +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Removing_a_key_triggers_fk_discovery_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Removing_derived_removes_it_from_directly_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Setting_base_type_handles_require_value_generator_properly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Setting_base_type_to_null_fixes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPC_identifying_FKs_are_created_on_all_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPT_identifying_FK_is_created_only_on_declaring_table +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPT_index_can_use_inherited_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_join_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_shared_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_ignore_existing_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_ForeignKeyAttribute_with_InversePropertyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_default_name_and_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_default_name_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Discovers_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_implicit_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.FK_properties_matching_navigations_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.FK_properties_matching_types_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_configures_the_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_matching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_mismatching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.IsRequired_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_entity_type_uses_default_schema_if_related_are_different +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_entity_type_uses_same_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_type_is_automatically_configured_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_type_is_not_automatically_configured_when_navigations_are_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_a_shadow_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_no_navigations_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_only_Has_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_only_With_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Overrides_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Skip_navigation_field_can_be_set_via_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_conflicting_many_to_one_on_left +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_conflicting_many_to_one_on_right +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_self_ref_using_self +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_self_ref_with_same_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Unconfigured_many_to_many_navigations_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.UsingEntity_with_shared_type_passed_when_marked_as_shared_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.UsingEntity_with_shared_type_passes_when_configured_as_shared +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Access_mode_can_be_overridden_at_entity_and_navigation_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_does_not_use_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_finds_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_matches_shadow_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_overrides_existing_FK_if_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_with_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_no_navigations_with +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Explicitly_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Relationships_discovered_when_ambiguity_on_the_inverse_is_resolved +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_primitive_collection_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_contained_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_index_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_multiple_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_avoid_attributes_when_discovering_properties(useAttributes: False) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_Property_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_get_entity_builder_for_clr_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_field_on_a_keyless_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_field_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_property_that_is_part_of_explicit_entity_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_override_navigations_as_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_override_navigations_as_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_clr_property_when_property_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_collation_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_collation_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_entity_key_from_clr_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_entity_key_from_property_names_when_mixed_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_element_type_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_clr_property_when_property_ignored_on_keyless +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_with_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_fixed_length_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_fixed_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_model_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_store_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_store_type_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_upgrade_candidate_key_to_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_view_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_view_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Cannot_add_shared_type_when_non_shared_exists +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_removed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_removed_by_generic_method +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_replaced +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection_when_base_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_are_nullable_by_default_if_the_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_max_length +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_unicode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_default_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_default_unicode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_no_max_length_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Entity_key_on_secondary_property_is_discovered_by_convention_when_first_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Entity_key_on_shadow_property_is_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.EntityType_name_is_stored_culture_invariantly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_base_type_removes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_entity_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Indexes_can_have_same_name_across_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Int32_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_for_primitive_collection_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_two_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_throws_for_non_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Model_is_readonly_after_Finalize +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Nested_primitive_collection_are_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Object_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Object_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PrimitiveCollection_Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Private_primitive_collection_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Private_property_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Property_bag_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_alternate_key_makes_properties_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_sentinel_throws_for_noncompatible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_sentinel_throws_for_null_on_nonnullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_bad_value_generator_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_conflicting_base_configurations_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_int_keyed_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_primitive_collection_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_base_type_is_not_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_type_on_primitive_collection_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Ambiguous_relationship_candidate_does_not_block_creating_further_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Annotations_are_preserved_when_rebuilding +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Attempt_to_configure_Navigation_property_which_is_actually_a_Property_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_pointed_by_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_on_principal_type_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_semi_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_replaced_with_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_specify_requiredness_after_OnDelete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_matches_shadow_FK_property_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_entity_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_navigation_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_properties_are_on_both_sides +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_no_matching_properties_either_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_overlapping_foreign_keys_with_different_nullability +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_both_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_fk_configuring_using_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_no_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Do_not_match_non_unique_FK_when_overlap_with_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Explicit_principal_key_is_not_replaced_with_new_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasMany_with_a_collection_navigation_CLR_property_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasNoKey_call_on_principal_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasNoKey_call_on_principal_with_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Keyless_type_discovered_before_referenced_entity_type_does_not_leave_temp_id +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Keyless_type_with_unmapped_collection_navigations_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_overrides_NRT_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.One_to_many_relationship_has_no_ambiguity_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Principal_key_by_convention_is_not_replaced_with_new_incompatible_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Reference_navigation_from_keyless_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.RemoveKey_does_not_add_back_foreign_key_pointing_to_the_same_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Shadow_property_created_for_foreign_key_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_existing_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_keyless_type_as_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_when_foreign_key_references_shadow_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.WithMany_call_on_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.WithMany_pointing_to_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_be_defined_before_the_PK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_be_defined_before_the_PK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_foreign_key_attribute_is_used +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_navigations_have_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_user_specifies_principal_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_user_specify_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_self_referencing_relationship_without_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_two_FKs_using_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_dependent_side_specified_explicitly_on_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_fk_before_configuring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_fk_before_reconfiguring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_identifying_fk +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_pk_as_fk_if_principal_end_is_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_PK_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_FK_properties_as_PK_sets_DeleteBehavior_Cascade +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_inverts_the_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_throws_if_not_invertible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_throws_when_there_is_an_explicit_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_creates_new_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_new_FK_over_PK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_removes_existing_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_shadow_FK_if_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_field_backed_FK_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_index_even_if_covered_by_an_alternate_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_one_to_one_relationship_with_single_ref_as_principal_to_dependent_if_matching_properties_are_on_the_other_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_by_convention_inverted +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_on_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Does_not_use_existing_FK_when_principal_key_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Does_not_use_pk_as_fk_if_principal_end_is_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Foreign_key_properties_are_not_discovered_for_one_to_one_relationship_with_ambiguous_principal_end +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Ignoring_properties_on_principal_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Ignoring_properties_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Inverse_discovered_after_entity_unignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.IsRequired_throws_principal_end_is_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Multiple_self_referencing_navigations_throw_as_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.OneToOne_can_have_PK_explicitly_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_FK_if_specified_PK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_FK_if_specified_PK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_PK_if_specified_FK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_PK_if_specified_FK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_in_reverse_order_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_using_principal_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_FK_when_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_unidirectional_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_unidirectional_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Replaces_existing_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_PKs +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_mixed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property_anymore +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_ambiguous_FK_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_multiple_navigations_are_pointing_to_same_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_not_principal_or_dependent_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_FK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_FK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_PK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_PK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_duplicate_navigation_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_existing_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_existing_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_two_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_optional_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Uses_composite_PK_for_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Ambiguous_relationship_between_owned_types_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Attempt_to_create_OwnsMany_on_a_reference_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Attempt_to_create_OwnsOne_on_a_collection_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_call_Owner_fluent_api_after_calling_Entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_chain_owned_type_collection_configurations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_another_relationship_to_owner +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_chained_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_chained_ownerships_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_fk_on_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_on_derived_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_on_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_many_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_entity_and_property_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key_or_candidate +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Array) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable | Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic | Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_inverse +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_ownership_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_property_and_owned_entity_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_self_ownership +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_single_owned_type_using_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_have_multiple_owned_types_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_base_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_base_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_derived_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_derived_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_sproc_mapping_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_table_splitting_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_view_splitting_with_owned_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Changing_ownership_uniqueness_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.CLR_base_type_can_be_owned_when_not_in_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Configuring_base_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Deriving_from_owned_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_mapped_to_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_mapped_to_view_with_custom_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_custom_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_tph_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Navigations_on_owned_type_can_set_access_mode_using_expressions +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Navigations_on_owned_type_collection_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_type_collections_are_mapped_to_same_tables_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_types_use_table_splitting_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.OwnedType_can_derive_from_Collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owner_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 17, mainScale: 4, otherPrecision: 17, otherScale: 4, onePrecision: 17, oneScale: 4, manyPrecision: 17, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: null, mainScale: null, otherPrecision: null, otherScale: null, onePrecision: null, oneScale: null, manyPrecision: null, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained_on_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Reconfiguring_entity_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Reconfiguring_owned_type_as_non_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Removing_ambiguous_inverse_allows_navigations_to_be_discovered +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_can_be_used_as_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_entity_types_with_FK_to_another_entity_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_used_as_owned_type_throws_for_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Throws_on_FK_matching_two_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Complex_collection_mapped_to_json_can_specify_column_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Complex_collection_mapped_to_json_uses_property_name_when_column_name_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.ComplexCollection_can_have_nested_complex_properties_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Throws_for_incompatible_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_call_PrimitiveCollection_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_call_Property_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_shadow_primitive_collections_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_map_a_tuple +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_view_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_view_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_can_be_configured_as_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_can_be_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_property_mapped_to_json_can_specify_column_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_property_mapped_to_json_uses_property_name_when_column_name_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_property_mapped_to_json_with_nested_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_type_discriminator_mapped_to_json_has_default_json_property_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_incompatible_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_primitive_collection_with_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_before_base_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Base_type_can_be_discovered_after_creating_foreign_keys_on_derived +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Base_types_are_mapped_correctly_if_discovered_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_add_check_constraints +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_create_relationship_between_base_type_and_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_get_set_discriminator_mapping_is_complete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_ignore_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_map_derived_self_ref_many_to_one +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_map_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_match_navigation_to_derived_type_with_inverse_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_override_TPC_with_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_promote_shadow_fk_to_the_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_reconfigure_inherited_intraHierarchical_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_remove_objects_in_derived_type_which_was_set_using_data_annotation_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_set_and_remove_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_specify_discriminator_values_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_specify_discriminator_without_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Cannot_remove_objects_in_derived_type_which_was_set_using_explicit_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_removed_when_covered_by_an_inherited_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_removed_when_covered_by_an_inherited_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Inherited_clr_properties_are_mapped_to_the_same_column +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Ordering_of_entityType_discovery_does_not_affect_key_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_many_to_one_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_with_fk_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_reverted_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_with_fk_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Relationships_are_discovered_on_the_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Relationships_on_derived_types_are_discovered_first_if_base_is_one_sided +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Removing_a_key_triggers_fk_discovery_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Removing_derived_removes_it_from_directly_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Setting_base_type_handles_require_value_generator_properly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Setting_base_type_to_null_fixes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPC_identifying_FKs_are_created_on_all_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPT_identifying_FK_is_created_only_on_declaring_table +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPT_index_can_use_inherited_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_join_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_shared_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_ignore_existing_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_ForeignKeyAttribute_with_InversePropertyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_default_name_and_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_default_name_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Discovers_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_implicit_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.FK_properties_matching_navigations_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.FK_properties_matching_types_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_configures_the_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_matching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_mismatching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.IsRequired_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_entity_type_uses_default_schema_if_related_are_different +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_entity_type_uses_same_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_type_is_automatically_configured_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_type_is_not_automatically_configured_when_navigations_are_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_a_shadow_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_no_navigations_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_only_Has_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_only_With_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Overrides_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Skip_navigation_field_can_be_set_via_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_conflicting_many_to_one_on_left +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_conflicting_many_to_one_on_right +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_self_ref_using_self +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_self_ref_with_same_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Unconfigured_many_to_many_navigations_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.UsingEntity_with_shared_type_passed_when_marked_as_shared_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.UsingEntity_with_shared_type_passes_when_configured_as_shared +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Access_mode_can_be_overridden_at_entity_and_navigation_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_does_not_use_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_finds_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_matches_shadow_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_overrides_existing_FK_if_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_with_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_no_navigations_with +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Explicitly_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Relationships_discovered_when_ambiguity_on_the_inverse_is_resolved +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_primitive_collection_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_contained_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_index_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_multiple_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_avoid_attributes_when_discovering_properties(useAttributes: False) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_Property_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_get_entity_builder_for_clr_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_field_on_a_keyless_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_field_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_property_that_is_part_of_explicit_entity_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_override_navigations_as_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_override_navigations_as_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_clr_property_when_property_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_collation_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_collation_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_entity_key_from_clr_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_entity_key_from_property_names_when_mixed_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_element_type_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_clr_property_when_property_ignored_on_keyless +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_with_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_fixed_length_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_fixed_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_model_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_store_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_store_type_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_upgrade_candidate_key_to_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_view_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_view_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Cannot_add_shared_type_when_non_shared_exists +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_removed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_removed_by_generic_method +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_replaced +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection_when_base_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_are_nullable_by_default_if_the_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_max_length +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_unicode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_default_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_default_unicode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_no_max_length_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Entity_key_on_secondary_property_is_discovered_by_convention_when_first_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Entity_key_on_shadow_property_is_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.EntityType_name_is_stored_culture_invariantly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_base_type_removes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_entity_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Indexes_can_have_same_name_across_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Int32_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_for_primitive_collection_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_two_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_throws_for_non_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Model_is_readonly_after_Finalize +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Nested_primitive_collection_are_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Object_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Object_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PrimitiveCollection_Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Private_primitive_collection_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Private_property_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Property_bag_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_alternate_key_makes_properties_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_sentinel_throws_for_noncompatible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_sentinel_throws_for_null_on_nonnullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_bad_value_generator_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_conflicting_base_configurations_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_int_keyed_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_primitive_collection_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_base_type_is_not_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_type_on_primitive_collection_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Ambiguous_relationship_candidate_does_not_block_creating_further_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Annotations_are_preserved_when_rebuilding +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Attempt_to_configure_Navigation_property_which_is_actually_a_Property_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_pointed_by_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_on_principal_type_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_semi_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_replaced_with_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_specify_requiredness_after_OnDelete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_matches_shadow_FK_property_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_entity_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_navigation_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_properties_are_on_both_sides +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_no_matching_properties_either_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_overlapping_foreign_keys_with_different_nullability +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_both_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_fk_configuring_using_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_no_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Do_not_match_non_unique_FK_when_overlap_with_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Explicit_principal_key_is_not_replaced_with_new_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasMany_with_a_collection_navigation_CLR_property_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasNoKey_call_on_principal_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasNoKey_call_on_principal_with_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Keyless_type_discovered_before_referenced_entity_type_does_not_leave_temp_id +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Keyless_type_with_unmapped_collection_navigations_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_overrides_NRT_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.One_to_many_relationship_has_no_ambiguity_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Principal_key_by_convention_is_not_replaced_with_new_incompatible_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Reference_navigation_from_keyless_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.RemoveKey_does_not_add_back_foreign_key_pointing_to_the_same_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Shadow_property_created_for_foreign_key_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_existing_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_keyless_type_as_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_when_foreign_key_references_shadow_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.WithMany_call_on_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.WithMany_pointing_to_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_be_defined_before_the_PK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_be_defined_before_the_PK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_foreign_key_attribute_is_used +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_navigations_have_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_user_specifies_principal_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_user_specify_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_self_referencing_relationship_without_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_two_FKs_using_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_dependent_side_specified_explicitly_on_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_fk_before_configuring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_fk_before_reconfiguring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_identifying_fk +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_pk_as_fk_if_principal_end_is_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_PK_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_FK_properties_as_PK_sets_DeleteBehavior_Cascade +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_inverts_the_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_throws_if_not_invertible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_throws_when_there_is_an_explicit_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_creates_new_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_new_FK_over_PK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_removes_existing_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_shadow_FK_if_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_field_backed_FK_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_index_even_if_covered_by_an_alternate_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_one_to_one_relationship_with_single_ref_as_principal_to_dependent_if_matching_properties_are_on_the_other_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_by_convention_inverted +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_on_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Does_not_use_existing_FK_when_principal_key_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Does_not_use_pk_as_fk_if_principal_end_is_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Foreign_key_properties_are_not_discovered_for_one_to_one_relationship_with_ambiguous_principal_end +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Ignoring_properties_on_principal_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Ignoring_properties_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Inverse_discovered_after_entity_unignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.IsRequired_throws_principal_end_is_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Multiple_self_referencing_navigations_throw_as_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.OneToOne_can_have_PK_explicitly_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_FK_if_specified_PK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_FK_if_specified_PK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_PK_if_specified_FK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_PK_if_specified_FK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_in_reverse_order_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_using_principal_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_FK_when_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_unidirectional_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_unidirectional_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Replaces_existing_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_PKs +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_mixed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property_anymore +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_ambiguous_FK_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_multiple_navigations_are_pointing_to_same_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_not_principal_or_dependent_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_FK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_FK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_PK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_PK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_duplicate_navigation_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_existing_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_existing_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_two_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_optional_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Uses_composite_PK_for_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Ambiguous_relationship_between_owned_types_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Attempt_to_create_OwnsMany_on_a_reference_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Attempt_to_create_OwnsOne_on_a_collection_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_call_Owner_fluent_api_after_calling_Entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_chain_owned_type_collection_configurations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_another_relationship_to_owner +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_chained_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_chained_ownerships_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_fk_on_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_on_derived_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_on_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_many_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_entity_and_property_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key_or_candidate +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Array) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable | Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic | Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_inverse +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_ownership_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_property_and_owned_entity_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_self_ownership +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_single_owned_type_using_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_have_multiple_owned_types_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_base_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_base_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_derived_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_derived_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_sproc_mapping_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_table_splitting_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_view_splitting_with_owned_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Changing_ownership_uniqueness_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.CLR_base_type_can_be_owned_when_not_in_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Configuring_base_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Deriving_from_owned_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_mapped_to_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_mapped_to_view_with_custom_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_custom_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_tph_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Navigations_on_owned_type_can_set_access_mode_using_expressions +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Navigations_on_owned_type_collection_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_type_collections_are_mapped_to_same_tables_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_types_use_table_splitting_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.OwnedType_can_derive_from_Collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owner_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 17, mainScale: 4, otherPrecision: 17, otherScale: 4, onePrecision: 17, oneScale: 4, manyPrecision: 17, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: null, mainScale: null, otherPrecision: null, otherScale: null, onePrecision: null, oneScale: null, manyPrecision: null, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained_on_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Reconfiguring_entity_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Reconfiguring_owned_type_as_non_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Removing_ambiguous_inverse_allows_navigations_to_be_discovered +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_can_be_used_as_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_entity_types_with_FK_to_another_entity_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_used_as_owned_type_throws_for_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Throws_on_FK_matching_two_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.BasicManyToManyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyAlternateKeysTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyNamedForeignKeyColumnsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyNamedJoinTableTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithCustomSharedTypeEntityTypeTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithJoinClassHavingPrimaryKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNamedFksAndNavsToAndFromJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNavsAndAlternateKeysTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNavsToAndFromJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNavsToJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNoCascadeDeleteTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithPayloadAndNavsToJoinClassShadowFKsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithPayloadAndNavsToJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithPrimaryKeyInJoinEntityTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithoutCascadeDeleteNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithoutCascadeDeleteTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManySelfReferencingNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManySelfReferencingTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOneToOneRequiredWithShadowFkWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOneToOneRequiredWithShadowFkWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredPkToPkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredPkToPkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithoutCascadeDeleteNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithoutCascadeDeleteTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneSelfReferencingNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneSelfReferencingTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.SelfReferencingManyToManyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.SelfReferencingUnidirectionalManyToManyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.UnidirectionalManyToManyTest +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.AddressAndPayment_RedirectToCompleteWhenSuccessful +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.AddressAndPayment_ReturnsOrderIfInvalidPromoCode +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Browse_ReturnsViewWithGenre +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Can_add_items_to_cart +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.CartSummaryComponent_returns_items +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Complete_ReturnsErrorIfInvalidOrder +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Complete_ReturnsOrderIdIfValid +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Custom_projection_FirstOrDefault_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Custom_projection_FirstOrDefault_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Details_ReturnsAlbumDetail +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.GenreMenuComponent_Returns_NineGenres +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Index_CreatesViewWithGenres +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Music_store_project_to_mapped_entity +EntityFrameworkCore.Jet.FunctionalTests.NotificationEntitiesJetTest.Include_brings_collections_referenced_from_already_tracked_notification_entities_as_Unchanged +EntityFrameworkCore.Jet.FunctionalTests.NotificationEntitiesJetTest.Include_brings_entities_referenced_from_already_tracked_notification_entities_as_Unchanged +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Adding_the_same_entity_twice_results_in_DbUpdateException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Attempting_to_add_same_relationship_twice_for_many_to_many_results_in_independent_association_exception +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Attempting_to_delete_same_relationship_twice_for_many_to_many_results_in_independent_association_exception +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_GetDatabaseValues_on_owned_entity_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_GetDatabaseValues_on_owned_entity_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Deleted_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Deleted_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Deleted_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Deleted_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Detached_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Detached_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Detached_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Detached_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Modified_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Modified_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Modified_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Modified_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Added_entity_that_is_not_in_database_is_no_op(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Added_entity_that_is_not_in_database_is_no_op(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Added_entity_that_was_saved_elsewhere_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Added_entity_that_was_saved_elsewhere_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Unchanged_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Unchanged_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Unchanged_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Unchanged_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_owned_entity_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_owned_entity_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Concurrency_issue_where_the_FK_is_the_concurrency_token_can_be_handled +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Deleting_the_same_entity_twice_results_in_DbUpdateConcurrencyException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException_which_can_be_resolved_with_store_values +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.External_model_builder_uses_validation +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Nullable_client_side_concurrency_token_can_be_used +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Property_entry_original_value_is_set +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Adding_the_same_entity_twice_results_in_DbUpdateException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Attempting_to_add_same_relationship_twice_for_many_to_many_results_in_independent_association_exception +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Attempting_to_delete_same_relationship_twice_for_many_to_many_results_in_independent_association_exception +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_GetDatabaseValues_on_owned_entity_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_GetDatabaseValues_on_owned_entity_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Deleted_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Deleted_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Deleted_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Deleted_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Detached_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Detached_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Detached_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Detached_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Modified_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Modified_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Modified_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Modified_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Added_entity_that_is_not_in_database_is_no_op(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Added_entity_that_is_not_in_database_is_no_op(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Added_entity_that_was_saved_elsewhere_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Added_entity_that_was_saved_elsewhere_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Unchanged_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Unchanged_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Unchanged_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Unchanged_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_owned_entity_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_owned_entity_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Concurrency_issue_where_the_FK_is_the_concurrency_token_can_be_handled +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Deleting_the_same_entity_twice_results_in_DbUpdateConcurrencyException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException_which_can_be_resolved_with_store_values +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.External_model_builder_uses_validation +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Nullable_client_side_concurrency_token_can_be_used +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Property_entry_original_value_is_set +EntityFrameworkCore.Jet.FunctionalTests.OverzealousInitializationJetTest.Fixup_ignores_eagerly_initialized_reference_navs +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_collection_current_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_collection_original_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_current_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_original_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_store_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_store_values_can_be_accessed_asynchronously_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_cloned +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_from_a_non_generic_property_dictionary_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_into_a_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_into_a_non_generic_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_to_object_using_ToObject +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_and_set_for_an_object_in_the_Added_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_and_set_for_an_object_in_the_Modified_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_and_set_for_an_object_in_the_Unchanged_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_or_set_for_a_Detached_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_or_set_for_an_object_in_the_Deleted_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_an_object_using_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_an_object_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_dictionary_some_missing +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_dictionary_typed_int +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_dictionary_typed_string +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_DTO_object_missing_key_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_DTO_object_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_one_generic_dictionary_to_another_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_one_non_generic_dictionary_to_another_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_for_derived_object_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_for_join_entity_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValues_for_derived_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValues_for_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValues_for_the_wrong_type_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValuesAsync_for_derived_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValuesAsync_for_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValuesAsync_for_the_wrong_type_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_cloned_dictionary_cannot_be_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_original_values_cannot_be_set_to_null_in_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_shadow_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_shadow_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_shadow_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_shadow_property_in_original_values_cannot_be_set_to_null_in_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValues_for_derived_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValues_for_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValues_for_the_wrong_type_in_the_store_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValuesAsync_for_derived_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValuesAsync_for_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValuesAsync_for_the_wrong_type_in_the_store_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_cloned +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_into_a_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_into_a_non_generic_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_non_generic_property_dictionary_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_to_object_using_ToObject +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_and_set_for_an_object_in_the_Deleted_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_and_set_for_an_object_in_the_Modified_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_and_set_for_an_object_in_the_Unchanged_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_or_set_for_a_Detached_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_or_set_for_an_object_in_the_Added_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_an_object_using_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_an_object_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_dictionary_some_missing +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_dictionary_typed_int +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_dictionary_typed_string +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_DTO_object_missing_key_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_DTO_object_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_one_generic_dictionary_to_another_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_one_non_generic_dictionary_to_another_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_for_derived_object_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_for_join_entity_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_current_values_cannot_be_changed_by_setting_values_from_another_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_current_values_cannot_be_changed_by_setting_values_from_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_current_values_cannot_be_changed_in_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_original_values_cannot_be_changed_by_setting_values_from_another_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_original_values_cannot_be_changed_by_setting_values_from_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_original_values_cannot_be_changed_in_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_cloned_dictionary_returns_properties +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_current_values_returns_properties +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_original_values_returns_properties +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_store_values_returns_properties +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_store_values_returns_properties_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Property_in_cloned_dictionary_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Property_in_current_values_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Property_in_original_values_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_accessed_as_a_non_generic_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_set_using_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_set_using_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_set_using_a_property_dictionary_with_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_of_a_derived_object_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_of_a_derived_object_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_accessed_as_a_non_generic_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_set_using_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_set_using_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_set_using_a_property_dictionary_with_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_of_a_derived_object_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_of_a_derived_object_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_as_a_non_generic_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_asynchronously_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_asynchronously_as_a_non_generic_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_asynchronously_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_asynchronously_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_of_a_derived_object_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_of_a_derived_object_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_of_a_derived_object_can_be_accessed_asynchronously_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_of_a_derived_object_can_be_accessed_asynchronously_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_current_values_from_dictionary_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_current_values_from_dictionary_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_current_values_from_DTO_with_complex_metadata_access_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_current_values_from_object_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_original_values_from_dictionary_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_original_values_from_object_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_values_from_DTO_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_values_from_object_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_store_values_does_not_change_current_or_original_values +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_complex_collection_with_non_dictionary_item +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_complex_collection_with_non_list_value +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_complex_property_with_non_dictionary_value +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_nested_complex_collection_with_non_dictionary_item +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_nested_complex_collection_with_non_list_value +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Shadow_property_in_current_values_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Shadow_property_in_original_values_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_asynchronously_into_a_non_generic_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_asynchronously_non_generic_property_dictionary_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_a_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_a_cloned_dictionary_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_a_non_generic_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_an_object_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_non_generic_property_dictionary_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_to_object_using_ToObject +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_to_object_using_ToObject_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Deleted_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Deleted_state_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Modified_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Modified_state_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Unchanged_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Unchanged_state_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_or_set_for_a_Detached_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_or_set_for_a_Detached_object_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_or_set_for_an_object_in_the_Added_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_or_set_for_an_object_in_the_Added_state_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_for_derived_object_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_for_derived_object_can_be_copied_into_an_object_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_for_join_entity_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_for_join_entity_can_be_copied_into_an_object_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_really_are_store_values_not_current_or_original_values +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_really_are_store_values_not_current_or_original_values_async +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_IProperty_instances_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_IProperty_instances_throws_derived +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_property_names_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_property_names_throws_derived +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_complex_property_value_not_list_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_non_collection_complex_property_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_in_cloned_dictionary_can_be_set_with_IProperty +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_optional_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_optional_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_composite_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_non_PK_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_non_PK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_one_to_many_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_use_record_proxies_with_base_types_to_load_collection +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_use_record_proxies_with_base_types_to_load_reference +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.No_fixup_to_Deleted_entities +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_optional_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_optional_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_composite_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_non_PK_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_non_PK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_one_to_many_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_use_record_proxies_with_base_types_to_load_collection +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_use_record_proxies_with_base_types_to_load_reference +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.No_fixup_to_Deleted_entities +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_two_entity_cycle_with_lazy_loading +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_optional_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_optional_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_composite_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_non_PK_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_non_PK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_one_to_many_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_use_record_proxies_with_base_types_to_load_collection +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_use_record_proxies_with_base_types_to_load_reference +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.No_fixup_to_Deleted_entities +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_two_entity_cycle_with_lazy_loading +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Can_query_hierarchy_with_non_nullable_property_on_derived +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Casts_are_removed_from_expression_tree_when_redundant +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Double_convert_interface_created_expression_tree +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Expression_tree_constructed_via_interface_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_correlated_collection_along_with_non_mapped_property +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_expression_with_converter_with_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_expression_with_converter_with_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_one_of_two_similar_complex_types_picks_the_correct_one +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_property_with_converter_with_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_property_with_converter_with_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_property_with_converter_without_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_property_with_converter_without_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projection_failing_with_EnumToStringConverter +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: null, postfix: "") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: null, postfix: "") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: null, postfix: "") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Setting_IsUnicode_generates_unicode_literal_in_SQL +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Two_similar_complex_properties_projected_with_split_query1 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Two_similar_complex_properties_projected_with_split_query2 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Complex_type_equality_with_non_default_type_mapping +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Complex_type_equals_parameter_with_nested_types_with_property_of_same_name +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Optional_complex_type_with_discriminator +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Projecting_complex_property_does_not_auto_include_owned_types +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocManyToManyQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocManyToManyQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Average_with_cast +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Bool_discriminator_column_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Bool_discriminator_column_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Check_inlined_constants_redacting(async: False, enableSensitiveDataLogging: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Check_inlined_constants_redacting(async: False, enableSensitiveDataLogging: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Check_inlined_constants_redacting(async: True, enableSensitiveDataLogging: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Check_inlined_constants_redacting(async: True, enableSensitiveDataLogging: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.DateTime_Contains_with_smalldatetime_generates_correct_literal +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Discriminator_type_is_handled_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Entity_equality_with_Contains_and_Parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Entity_equality_with_Contains_and_Parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Enum_with_value_converter_matching_take_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Enum_with_value_converter_matching_take_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Explicitly_compiled_query_does_not_add_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.First_FirstOrDefault_ix_async +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Inlined_dbcontext_is_not_leaking +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.LeftJoin_with_missing_key_values_on_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.LeftJoin_with_missing_key_values_on_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Mapping_JsonElement_property_throws_a_meaningful_exception +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.New_instances_in_projection_are_not_shared_across_results +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Parameterless_ctor_on_inner_DTO_gets_called_for_every_row +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Projecting_column_with_value_converter_of_ulong_byte_array +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Projecting_entity_with_value_converter_and_include_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Query_cache_entries_are_evicted_as_necessary +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Relational_command_cache_creates_new_entry_when_parameter_nullability_changes +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Repeated_parameters_in_generated_query_sql +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Select_nested_projection +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Shadow_property_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.StoreType_for_UDF_used(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.StoreType_for_UDF_used(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Subquery_first_member_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Subquery_first_member_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Thread_safety_in_relational_command_cache +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Union_and_insert_works_correctly_together +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Variable_from_closure_is_parametrized +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Can_ignore_invalid_include_path_error +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Collection_without_setter_materialized_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Correlated_collection_correctly_associates_entities_with_byte_array_keys +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Customer_collections_materialize_properly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Cycles_in_auto_include +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_optional_reference_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_with_OfType_base +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_works_when_defined_on_intermediate_type +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_with_order_by_on_interface_key +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Nested_include_queries_do_not_populate_navigation_twice +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Reference_include_on_derived_type_with_sibling_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: False, split: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: False, split: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: True, split: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: True, split: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.ThenInclude_with_interface_navigations +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Using_explicit_interface_implementation_as_navigation_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_1 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_2 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_3 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_4 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Materialize_non_public +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Projecting_entity_with_property_requiring_converter_with_closure_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Projecting_expression_requiring_converter_without_closure_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Projecting_property_requiring_converter_with_closure_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Invoke_inside_query_filter_gets_correctly_evaluated_during_translation +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Keyless_type_used_inside_defining_query +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.MultiContext_query_filter_test +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_anonymous +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_anonymous_ignore +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_combined +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_ignore_all +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_ignore_some +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_overwriting +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_removing +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_contains_evaluates_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_context_accessor_with_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_context_accessor_with_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_db_set_should_not_block_other_filters +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_null_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_pk_fk_optimization +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Self_reference_in_query_filter_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Weak_entities_with_query_filter_subquery_flattening +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Can_configure_SingleQuery_at_context_level +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Can_configure_SplitQuery_at_context_level +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTracking_split_query_creates_only_required_instances(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTracking_split_query_creates_only_required_instances(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTrackingWithIdentityResolution_split_query_basic(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTrackingWithIdentityResolution_split_query_basic(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTrackingWithIdentityResolution_split_query_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTrackingWithIdentityResolution_split_query_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.SplitQuery_disposes_inner_data_readers +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Unconfigured_query_splitting_behavior_throws_a_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Using_AsSingleQuery_without_context_configuration_does_not_throw_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Delete_entity_with_associations +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Delete_optional_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Delete_required_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_another_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_inline_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_null_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_null_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_with_null_required_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_collection_referencing_the_original_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_collection_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_inside_structural_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_multiple_projected_associates_via_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_multiple_properties_inside_associates_and_on_entity_type +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_multiple_properties_inside_same_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_associate_to_another_nested_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_associate_to_inline_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_associate_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_collection_to_another_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_collection_to_inline_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_collection_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_primitive_collection_to_another_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_primitive_collection_to_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_primitive_collection_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_property_inside_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_property_inside_associate_with_special_chars +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_property_inside_nested_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_property_on_projected_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_required_nested_associate_to_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_HasValue_on_nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_on_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_on_nested_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_on_optional_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_property_on_non_nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_property_on_nullable_value_type_Value +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_non_nullable_value_type(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_non_nullable_value_type(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type_with_Value(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type_with_Value(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root_with_value_types(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root_with_value_types(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Associate_with_parameter_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Contains_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Contains_with_nested_and_composed_operators +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Contains_with_operators_composed_on_the_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Contains_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_associate_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_associate_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_collection_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_collection_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Not_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nullable_value_type_with_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Two_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Two_nested_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Two_nested_collections +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Count +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Distinct_over_projected_filtered_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Distinct_over_projected_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Index_column +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Index_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Index_out_of_bounds +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Index_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Select_within_Select_within_Select_with_aggregates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Where +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection_on_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection_on_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection_on_optional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection_on_optional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_optional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_optional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_optional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_optional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_required_optional_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_required_optional_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsMiscellaneousJetTest.Where_on_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsMiscellaneousJetTest.Where_on_nested_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsMiscellaneousJetTest.Where_on_optional_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_root(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_root(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsSetOperationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsSetOperationsJetTest.Over_associate_collection_projected(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsSetOperationsJetTest.Over_associate_collection_projected(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Associate_with_parameter_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Contains_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Contains_with_nested_and_composed_operators +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Contains_with_operators_composed_on_the_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Contains_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_associate_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_associate_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_collection_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_collection_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Not_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Two_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Two_nested_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Two_nested_collections +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Count +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Distinct_over_projected_filtered_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Distinct_over_projected_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Distinct_projected(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Index_column +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Index_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Index_out_of_bounds +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Index_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Select_within_Select_within_Select_with_aggregates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Where +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsMiscellaneousJetTest.Where_on_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsMiscellaneousJetTest.Where_on_nested_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsMiscellaneousJetTest.Where_on_optional_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_root(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_root(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_subquery_optional_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_subquery_required_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsSetOperationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsSetOperationsJetTest.Over_associate_collection_projected(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsSetOperationsJetTest.Over_associate_collection_projected(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsSetOperationsJetTest.Over_different_collection_properties +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Associate_with_parameter_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Contains_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Contains_with_nested_and_composed_operators +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Contains_with_operators_composed_on_the_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Contains_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_associate_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_associate_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_collection_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_collection_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Not_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Two_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Two_nested_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Two_nested_collections +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_subquery_optional_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_subquery_required_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Contains_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Contains_with_nested_and_composed_operators +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Contains_with_operators_composed_on_the_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Contains_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Nested_associate_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Nested_associate_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Nested_collection_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Nested_collection_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_basic_Where_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_basic_Where_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_basic_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_basic_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_calling_methods_directly_on_parameter_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_calling_methods_directly_on_parameter_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_include_parameter_used_inside_filter_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_include_parameter_used_inside_filter_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_OrderBy_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_OrderBy_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_ThenInclude_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_ThenInclude_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_with_Distinct_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_with_Distinct_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_ThenInclude_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_ThenInclude_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_reference_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_reference_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_multiple_SelectMany_and_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_multiple_SelectMany_and_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany_and_multiple_reference_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany_and_multiple_reference_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany_and_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany_and_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_projecting_the_included_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_projecting_the_included_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple_with_filter_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple_with_filter_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_ThenInclude_two_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_ThenInclude_two_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated_checked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated_checked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_methodcall(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_methodcall(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_nested_with_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_nested_with_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_partially_added_before_Where_and_then_build_upon(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_partially_added_before_Where_and_then_build_upon(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_collection_order_by_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_collection_order_by_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_followed_by_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_followed_by_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_ThenInclude_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_ThenInclude_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Including_reference_navigation_and_projecting_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Including_reference_navigation_and_projecting_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_include_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_include_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_self_ref_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_self_ref_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_self_ref(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_self_ref(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_include_with_multiple_optional_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_include_with_multiple_optional_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_optional_navigation_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_optional_navigation_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_optional_navigation_with_string_based_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_optional_navigation_with_string_based_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_SelectMany_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_SelectMany_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Null_check_in_anonymous_type_projection_should_not_be_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Null_check_in_anonymous_type_projection_should_not_be_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Null_check_in_Dto_projection_should_not_be_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Null_check_in_Dto_projection_should_not_be_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_Include_and_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_Include_and_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_order_by_and_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_order_by_and_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Orderby_SelectMany_with_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Orderby_SelectMany_with_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_nested_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_nested_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_root_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_root_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_nested_anonymous(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_nested_anonymous(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_using_ef_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_using_ef_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_navigation_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_navigation_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Projecting_collection_with_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Projecting_collection_with_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Queryable_in_subquery_works_when_final_projection_is_List(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Queryable_in_subquery_works_when_final_projection_is_List(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Required_navigation_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Required_navigation_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Required_navigation_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Required_navigation_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Select_nav_prop_collection_one_to_many_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Select_nav_prop_collection_one_to_many_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_navigation_property_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_navigation_property_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_over_conditional_empty_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_over_conditional_empty_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_over_conditional_null_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_over_conditional_null_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include_and_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include_and_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_navigation_and_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_navigation_and_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_order_by_and_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_order_by_and_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_basic_Where_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_basic_Where_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_basic_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_basic_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_calling_methods_directly_on_parameter_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_calling_methods_directly_on_parameter_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_include_parameter_used_inside_filter_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_include_parameter_used_inside_filter_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_OrderBy_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_OrderBy_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_ThenInclude_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_ThenInclude_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_with_Distinct_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_with_Distinct_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_ThenInclude_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_ThenInclude_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_reference_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_reference_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_multiple_SelectMany_and_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_multiple_SelectMany_and_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany_and_multiple_reference_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany_and_multiple_reference_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany_and_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany_and_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_projecting_the_included_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_projecting_the_included_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple_with_filter_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple_with_filter_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_ThenInclude_two_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_ThenInclude_two_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated_checked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated_checked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_methodcall(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_methodcall(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_nested_with_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_nested_with_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_partially_added_before_Where_and_then_build_upon(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_partially_added_before_Where_and_then_build_upon(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_collection_order_by_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_collection_order_by_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_followed_by_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_followed_by_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_ThenInclude_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_ThenInclude_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Including_reference_navigation_and_projecting_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Including_reference_navigation_and_projecting_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_include_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_include_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_self_ref_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_self_ref_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_self_ref(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_self_ref(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_include_with_multiple_optional_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_include_with_multiple_optional_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_optional_navigation_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_optional_navigation_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_optional_navigation_with_string_based_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_optional_navigation_with_string_based_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_SelectMany_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_SelectMany_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Null_check_in_anonymous_type_projection_should_not_be_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Null_check_in_anonymous_type_projection_should_not_be_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Null_check_in_Dto_projection_should_not_be_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Null_check_in_Dto_projection_should_not_be_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_Include_and_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_Include_and_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_order_by_and_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_order_by_and_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Orderby_SelectMany_with_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Orderby_SelectMany_with_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_nested_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_nested_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_root_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_root_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_nested_anonymous(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_nested_anonymous(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_using_ef_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_using_ef_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_navigation_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_navigation_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Projecting_collection_with_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Projecting_collection_with_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Queryable_in_subquery_works_when_final_projection_is_List(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Queryable_in_subquery_works_when_final_projection_is_List(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Required_navigation_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Required_navigation_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Required_navigation_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Required_navigation_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Select_nav_prop_collection_one_to_many_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Select_nav_prop_collection_one_to_many_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_navigation_property_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_navigation_property_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_over_conditional_empty_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_over_conditional_empty_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_over_conditional_null_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_over_conditional_null_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include_and_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include_and_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_navigation_and_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_navigation_and_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_order_by_and_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_order_by_and_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Accessing_optional_property_inside_result_operator_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Accessing_optional_property_inside_result_operator_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Collection_FirstOrDefault_property_accesses_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Collection_FirstOrDefault_property_accesses_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Comparing_collection_navigation_on_optional_reference_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Comparing_collection_navigation_on_optional_reference_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_navigations_with_predicate_projected_into_anonymous_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_navigations_with_predicate_projected_into_anonymous_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_navigations_with_predicate_projected_into_anonymous_type2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_navigations_with_predicate_projected_into_anonymous_type2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_query_with_let_collection_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_query_with_let_collection_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_query_with_optional_navigations_and_client_side_evaluation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_query_with_optional_navigations_and_client_side_evaluation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_entity_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_entity_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_with_subquery_optional_navigation_scalar_distinct_and_constant_item(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_with_subquery_optional_navigation_scalar_distinct_and_constant_item(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_nested_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_nested_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_nested_two_levels_up_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_nested_two_levels_up_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Distinct_take_without_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Distinct_take_without_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Element_selector_with_coalesce_repeated_in_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Element_selector_with_coalesce_repeated_in_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Entity_equality_empty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Entity_equality_empty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Entries_for_detached_entities_are_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Entries_for_detached_entities_are_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_multiple_result_operator_distinct_count_materializes_main_clause(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_multiple_result_operator_distinct_count_materializes_main_clause(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_scalar_result_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_scalar_result_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupBy_aggregate_where_required_relationship_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupBy_aggregate_where_required_relationship_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupBy_aggregate_where_required_relationship(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupBy_aggregate_where_required_relationship(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_client_method_in_OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_client_method_in_OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_client_method_on_outer(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_client_method_on_outer(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection_nested1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection_nested1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_result_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_result_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_inner(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_inner(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer_with_client_method(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer_with_client_method(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_with_orderby_on_inner_sequence_projecting_inner(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_with_orderby_on_inner_sequence_projecting_inner(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_left_side_being_a_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_left_side_being_a_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_right_side_being_a_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_right_side_being_a_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested_same_param(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested_same_param(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure_nested_same_param(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure_nested_same_param(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_without_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_without_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_multiple_collections_on_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_multiple_collections_on_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_reference_and_project_into_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_reference_and_project_into_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_with_all_method_include_gets_ignored(isAsnc: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_with_all_method_include_gets_ignored(isAsnc: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_with_optional_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_with_optional_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include10(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include10(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include11(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include11(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include12(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include12(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include13(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include13(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include14(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include14(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include17(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include17(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_1_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_1_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include19(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include19(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include6(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include6(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include7(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include7(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include8(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include8(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include9(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include9(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_condition_optimizations_applied_correctly_when_anonymous_type_with_multiple_properties(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_condition_optimizations_applied_correctly_when_anonymous_type_with_multiple_properties(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_deeply_nested_non_key_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_deeply_nested_non_key_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_deeply_nested_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_deeply_nested_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_inner_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_inner_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_key_access_optional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_key_access_optional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_key_access_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_key_access_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_non_key_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_non_key_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_self_ref(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_self_ref(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigations_in_inner_selector_translated_without_collision(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigations_in_inner_selector_translated_without_collision(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_navigations_in_the_result_selector1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_navigations_in_the_result_selector1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_navigations_in_the_result_selector2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_navigations_in_the_result_selector2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_orderby_on_inner_sequence_navigation_non_key_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_orderby_on_inner_sequence_navigation_non_key_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_result_selector_returning_queryable_throws_validation_error(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_result_selector_returning_queryable_throws_validation_error(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_navigation_converted_to_FK(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_navigation_converted_to_FK(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_two_conditions_on_same_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_two_conditions_on_same_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_two_conditions_on_same_navigation2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_two_conditions_on_same_navigation2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_required2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_required2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_when_sentinel_ef_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_when_sentinel_ef_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Level4_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Level4_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Manually_created_left_join_propagates_nullability_to_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Manually_created_left_join_propagates_nullability_to_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Max_in_multi_level_nested_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Max_in_multi_level_nested_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_dto_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_dto_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_chain_3_levels_deep(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_chain_3_levels_deep(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_with_collection_navigation_in_the_middle(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_with_collection_navigation_in_the_middle(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_with_multiple_collections(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_with_multiple_collections(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Method_call_on_optional_navigation_translates_to_null_conditional_properly_for_arguments(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Method_call_on_optional_navigation_translates_to_null_conditional_properly_for_arguments(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_include_with_short_circuiting(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_include_with_short_circuiting(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_navigation_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_navigation_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_navigation_with_same_navigation_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_navigation_with_same_navigation_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_collection_FirstOrDefault_followed_by_member_access_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_collection_FirstOrDefault_followed_by_member_access_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_complex_includes_from_sql +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_conditionals_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_conditionals_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_joins_groupby_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_joins_groupby_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_optional_navs_should_not_deadlock(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_optional_navs_should_not_deadlock(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_string_based_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_string_based_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_with_EF_Property_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_with_EF_Property_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_with_string_based_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_with_string_based_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigations_with_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigations_with_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_calls(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_calls(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_EF_Property_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_EF_Property_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_joined_together(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_joined_together(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_string_based_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_string_based_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nav_rewrite_doesnt_apply_null_protection_for_function_arguments(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nav_rewrite_doesnt_apply_null_protection_for_function_arguments(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_inside_method_call_translated_to_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_inside_method_call_translated_to_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_inside_method_call_translated_to_join2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_inside_method_call_translated_to_join2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_key_access_optional_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_key_access_optional_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_key_access_required_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_key_access_required_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_with_same_navigation_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_with_same_navigation_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_group_join_with_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_group_join_with_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_object_constructed_from_group_key_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_object_constructed_from_group_key_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_different_structure_does_not_remove_null_checks(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_different_structure_does_not_remove_null_checks(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_conditional_is_not_applied_explicitly_for_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_conditional_is_not_applied_explicitly_for_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex_client_eval(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex_client_eval(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex_materialization(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex_materialization(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_in_subquery_with_unrelated_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_in_subquery_with_unrelated_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_method_call_translated_to_join_keeps_original_nullability(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_method_call_translated_to_join_keeps_original_nullability(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_method_call_translated_to_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_method_call_translated_to_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability_also_for_arguments(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability_also_for_arguments(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_property_method_translated_to_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_property_method_translated_to_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_projected_into_DTO(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_projected_into_DTO(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_propagates_nullability_to_manually_created_left_join1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_propagates_nullability_to_manually_created_left_join1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_propagates_nullability_to_manually_created_left_join2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_propagates_nullability_to_manually_created_left_join2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_take_optional_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_take_optional_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_with_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_with_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_anonymous_type_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_anonymous_type_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_navigation_similar_to_projected_gets_optimized_into_FK_access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_navigation_similar_to_projected_gets_optimized_into_FK_access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.OrderBy_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.OrderBy_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.OrderBy_nav_prop_reference_optional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.OrderBy_nav_prop_reference_optional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_collection_navigation_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_collection_navigation_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties10(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties10(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projecting_columns_with_same_name_from_different_entities_making_sure_aliasing_works_after_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projecting_columns_with_same_name_from_different_entities_making_sure_aliasing_works_after_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_from_subquery_when_materialization_is_not_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_from_subquery_when_materialization_is_not_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_in_subquery_when_materialization_is_not_required_in_multiple_joins(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_in_subquery_when_materialization_is_not_required_in_multiple_joins(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_with_anonymous_projection_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_with_anonymous_projection_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_complex_projection_and_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_complex_projection_and_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_First_in_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_First_in_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_First_in_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_First_in_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average_with_identity_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average_with_identity_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average_without_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average_without_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_join_subquery_containing_filter_and_distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_join_subquery_containing_filter_and_distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_optional_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_optional_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_optional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_optional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_required2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_required2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_optional_navigation_property_string_concat(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_optional_navigation_property_string_concat(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_followed_by_Join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_followed_by_Join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_followed_by_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_followed_by_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_in_anonymous_projection_followed_by_Join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_in_anonymous_projection_followed_by_Join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_multi_level_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_multi_level_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_navigation1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_navigation1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_navigation2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_navigation2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_with_joined_where_clause_cast_using_as(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_with_joined_where_clause_cast_using_as(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_filter_after(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_filter_after(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_filter_before(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_filter_before(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_with_another_navigation_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_with_another_navigation_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_nested_navigation_property_optional_and_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_nested_navigation_property_optional_and_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_nested_navigation_property_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_nested_navigation_property_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_where_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_where_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_EF_Property_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_EF_Property_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigation_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigation_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_additional_joins_outside_of_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_additional_joins_outside_of_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_different_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_different_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_same_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_same_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_required_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_required_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_string_based_Include1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_string_based_Include1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_string_based_Include2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_string_based_Include2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_without_collection_selector_returning_queryable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_without_collection_selector_returning_queryable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_GroupBy_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_GroupBy_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_GroupBy_Having_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_GroupBy_Having_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_level3_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_level3_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_different_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_different_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_same_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_same_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_different_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_different_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_same_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_same_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigations_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigations_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Subquery_with_Distinct_Skip_FirstOrDefault_without_OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Subquery_with_Distinct_Skip_FirstOrDefault_without_OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Sum_with_filter_with_include_selector_cast_using_as(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Sum_with_filter_with_include_selector_cast_using_as(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Sum_with_selector_cast_using_as(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Sum_with_selector_cast_using_as(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Union_over_entities_with_different_nullability(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Union_over_entities_with_different_nullability(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_optional_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_optional_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_member_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_member_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_member_compared_to_value(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_member_compared_to_value(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection_of_original_entity_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection_of_original_entity_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_on_multilevel_reference_in_subquery_with_outer_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_on_multilevel_reference_in_subquery_with_outer_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_predicate_on_optional_reference_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_predicate_on_optional_reference_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_entity_type_containing_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_entity_type_containing_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_entity_type_containing_struct_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_entity_type_containing_struct_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_property_in_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_property_in_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_property_in_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_property_in_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_two_different_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_two_different_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_two_different_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_two_different_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Contains_over_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Contains_over_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Contains_over_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Contains_over_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_complex_type_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_complex_type_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_nested_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_nested_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_complex_type_on_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_complex_type_on_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_complex_type_on_required_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_complex_type_on_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_property_in_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_property_in_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_required_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_entity_with_complex_type_pushdown_and_then_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_entity_with_complex_type_pushdown_and_then_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_nullable_struct_complex_type_via_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_nullable_struct_complex_type_via_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_struct_nested_complex_type_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_struct_nested_complex_type_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_struct_nested_complex_type_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_struct_nested_complex_type_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_nested_complex_type_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_nested_complex_type_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_nested_complex_type_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_nested_complex_type_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_struct_nested_complex_type_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_struct_nested_complex_type_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_struct_nested_complex_type_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_struct_nested_complex_type_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_required_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_complex_from_optional_navigation_using_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_complex_from_optional_navigation_using_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_property_of_complex_type_using_left_join_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_property_of_complex_type_using_left_join_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Where_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Where_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_complex_type_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_complex_type_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_complex_type_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_complex_type_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Subquery_over_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Subquery_over_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Subquery_over_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Subquery_over_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_entity_type_containing_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_entity_type_containing_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_entity_type_containing_struct_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_entity_type_containing_struct_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_entity_with_nested_complex_type_projected_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_entity_with_nested_complex_type_projected_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_entity_with_nested_complex_type_projected_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_entity_with_nested_complex_type_projected_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_nested_complex_type_projected_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_nested_complex_type_projected_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_nested_complex_type_projected_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_nested_complex_type_projected_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_property_in_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_property_in_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_property_in_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_property_in_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_two_different_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_two_different_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_two_different_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_two_different_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_collections_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_collections_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_collections_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_collections_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Collate_is_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Collate_is_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_nullable_value_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_nullable_value_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_should_throw_on_client_eval +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_nullable_value_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_nullable_value_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_identity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_identity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_literal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_literal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.All_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.All_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Any_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Any_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Average_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Average_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Count_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Count_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Cross_Join_with_Group_Join_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Cross_Join_with_Group_Join_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Group_Join_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Group_Join_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_aggregate_on_the_group(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_aggregate_on_the_group(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_group_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_group_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_multiple_group_aggregates(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_multiple_group_aggregates(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_conditional_expression_containing_group_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_conditional_expression_containing_group_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_expression_containing_group_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_expression_containing_group_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_expression_with_multiple_function_aggregates(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_expression_with_multiple_function_aggregates(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_function_aggregate_with_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_function_aggregate_with_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_group_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_group_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_group_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_group_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Nested_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Nested_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_1_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_1_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_2_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_2_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_3_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_3_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_doesnt_produce_a_groupby_statement(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_doesnt_produce_a_groupby_statement(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_10(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_10(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Left_Outer_Join_with_Group_Join_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Left_Outer_Join_with_Group_Join_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.LongCount_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.LongCount_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Max_Elements_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Max_Elements_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Max_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Max_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Min_Elements_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Min_Elements_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Min_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Min_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Sum_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Sum_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_10(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_10(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_12(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_12(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_13(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_13(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_14(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_14(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_16(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_16(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_in_three(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_in_three(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_in_two(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_in_two(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_main_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_main_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_part_2_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_part_2_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_part_3_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_part_3_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Custom_projection_trim_when_multiple_tables(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Custom_projection_trim_when_multiple_tables(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_on_split_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_on_split_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_to_split_entity_including_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_to_split_entity_including_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_to_split_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_to_split_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_on_split_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_on_split_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_to_split_entity_including_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_to_split_entity_including_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_to_split_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_to_split_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_custom_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_custom_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_multiple_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_multiple_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_collection_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_collection_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_collection_on_middle(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_collection_on_middle(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_base_without_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_base_without_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_middle_without_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_middle_without_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_base_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_base_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_invalid_cast_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_invalid_cast_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_invalid_cast_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_invalid_cast_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Entity_equality_through_fromsql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Entity_equality_through_fromsql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_without_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_without_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_inline_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_inline_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_without_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_without_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_db_parameter_in_split_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_db_parameter_in_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_inlined_db_parameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_inlined_db_parameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_inlined_db_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_inlined_db_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_parameterization_issue_12213(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_parameterization_issue_12213(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_with_parameters_inline_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_with_parameters_inline_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_with_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_with_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_with_inlined_db_parameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_with_inlined_db_parameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_with_inlined_db_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_with_inlined_db_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_annotations_do_not_affect_successive_calls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_annotations_do_not_affect_successive_calls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_common_table_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_common_table_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_nullable_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_nullable_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_does_not_parameterize_interpolated_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_does_not_parameterize_interpolated_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_dbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_dbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_positional_dbParameter_with_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_positional_dbParameter_with_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_positional_dbParameter_without_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_positional_dbParameter_without_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_after_removing_whitespaces(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_after_removing_whitespaces(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_DbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_DbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_nameless_DbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_nameless_DbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_multiple_line_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_multiple_line_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed_with_closure_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed_with_closure_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_line_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_line_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_as_no_tracking_not_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_as_no_tracking_not_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_cache_key_includes_query_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_cache_key_includes_query_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order_and_extra_columns(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order_and_extra_columns(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_composed_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_composed_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_not_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_not_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_and_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_and_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_cache_key_includes_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_cache_key_includes_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_db_parameters_called_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_db_parameters_called_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_and_regular_parameter_with_same_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_and_regular_parameter_with_same_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_mixed_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_mixed_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_join_and_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_join_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_set_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_set_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Include_closed_connection_opened_by_it_when_buffering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Include_closed_connection_opened_by_it_when_buffering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Include_does_not_close_user_opened_connection_for_empty_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Include_does_not_close_user_opened_connection_for_empty_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Keyless_entity_with_all_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Keyless_entity_with_all_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Line_endings_after_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Line_endings_after_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_select_and_stored_procedure_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_select_and_stored_procedure_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_select_and_stored_procedure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_select_and_stored_procedure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_and_select_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_and_select_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_and_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_and_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_composed_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_composed_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_min_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_min_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_re_projection_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_re_projection_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_re_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_re_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_take_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_take_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_caller_info_tag_and_other_tags(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_caller_info_tag_and_other_tags(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_caller_info_tag(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_caller_info_tag(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_include_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_include_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter_composed_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter_composed_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_tag(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_tag(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_tags(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_tags(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_with_multiple_stored_procedures_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_with_multiple_stored_procedures_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_with_multiple_stored_procedures(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_with_multiple_stored_procedures(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_Contains_and_StartsWith_with_same_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_Contains_and_StartsWith_with_same_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_column_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_column_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_equals_nullable_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_equals_nullable_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_inside_conditional_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_inside_conditional_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_inside_conditional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_inside_conditional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_not_equals_nullable_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_not_equals_nullable_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_column_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_column_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_FirstOrDefault_and_LastOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_FirstOrDefault_and_LastOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_bracket(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_bracket(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_column_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_column_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_EF_Property +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_no_tracking +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_no_tracking_EF_Property +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_shadow +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_when_person_already_tracked +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_EF_Property +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_no_tracking +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_no_tracking_EF_Property +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_shadow +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_when_address_already_tracked +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Changes_in_derived_related_entities_are_detected +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Collection_projection_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Collection_projection_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Entity_can_make_separate_relationships_with_base_type_and_derived_type_both +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.All_customers +EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.All_employees +EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.All_orders +EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.Project_nullable_enum +EntityFrameworkCore.Jet.FunctionalTests.Query.NavigationTest.Duplicate_entries_are_not_created_for_navigations_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.Query.NavigationTest.Duplicate_entries_are_not_created_for_navigations_to_principal +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.All_true(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.All_true(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Array_cast_to_IEnumerable_Contains_with_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Array_cast_to_IEnumerable_Contains_with_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column_in_subquery_with_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column_in_subquery_with_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_nav_subquery_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_nav_subquery_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_default_returns_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_default_returns_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_no_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_no_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_non_matching_types_in_projection_doesnt_produce_second_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_non_matching_types_in_projection_doesnt_produce_second_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_unmapped_property_access_throws_meaningful_exception(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_unmapped_property_access_throws_meaningful_exception(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Cast_before_aggregate_is_preserved(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Cast_before_aggregate_is_preserved(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Cast_to_same_Type_Count_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Cast_to_same_Type_Count_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Collection_Last_member_access_in_projection_translated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Collection_Last_member_access_in_projection_translated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Collection_LastOrDefault_member_access_in_projection_translated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Collection_LastOrDefault_member_access_in_projection_translated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_aggregate_function_with_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_aggregate_function_with_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Average_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Average_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Count_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Count_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_LongCount_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_LongCount_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Max_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Max_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Min_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Min_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Sum_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Sum_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_materialize_when_composite(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_materialize_when_composite(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_materialize_when_composite2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_materialize_when_composite2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_rewrite_to_identity_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_rewrite_to_identity_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_keyless_entity_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_keyless_entity_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_non_nullable_scalar_with_null_in_subquery_simplifies_to_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_non_nullable_scalar_with_null_in_subquery_simplifies_to_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_nullable_scalar_with_null_in_subquery_translated_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_nullable_scalar_with_null_in_subquery_translated_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_scalar_with_null_should_rewrite_to_identity_equality_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_scalar_with_null_should_rewrite_to_identity_equality_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_constant_list_value_type_id(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_constant_list_value_type_id(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_anonymous_type_array_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_anonymous_type_array_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_array_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_array_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_array_inline(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_array_inline(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_and(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_and(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_not_matching_ins1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_not_matching_ins1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_not_matching_ins2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_not_matching_ins2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_or(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_or(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_empty_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_empty_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_empty_inline(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_empty_inline(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_sql_injection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_sql_injection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_closure_all_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_closure_all_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_inline_closure_mix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_inline_closure_mix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_closure_all_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_closure_all_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_inline_closure_mix(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_inline_closure_mix(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_inline(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_inline(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_non_primitive_list_closure_mix(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_non_primitive_list_closure_mix(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_non_primitive_list_inline_closure_mix(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_non_primitive_list_inline_closure_mix(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_nullable_uint_array_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_nullable_uint_array_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_enumerable_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_enumerable_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_list_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_list_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_ordered_enumerable_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_ordered_enumerable_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_read_only_collection_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_read_only_collection_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_closure_all_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_closure_all_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_inline_closure_mix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_inline_closure_mix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_read_only_collection_all_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_read_only_collection_all_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_inline_closure_mix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_inline_closure_mix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_tuple_array_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_tuple_array_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_uint_array_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_uint_array_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_parameter_list_value_type_id(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_parameter_list_value_type_id(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_static_IList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_static_IList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_subquery_and_local_array_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_subquery_and_local_array_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_after_client_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_after_client_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_on_projection_with_client_eval(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_on_projection_with_client_eval(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_no_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_no_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_Scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_Scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Enumerable_min_is_mapped_to_Queryable_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Enumerable_min_is_mapped_to_Queryable_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Enumerable_min_is_mapped_to_Queryable_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Enumerable_min_is_mapped_to_Queryable_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First_inside_subquery_gets_client_evaluated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First_inside_subquery_gets_client_evaluated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First_Predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First_Predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault_inside_subquery_gets_server_evaluated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault_inside_subquery_gets_server_evaluated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault_Predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault_Predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.HashSet_Contains_with_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.HashSet_Contains_with_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.IImmutableSet_Contains_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.IImmutableSet_Contains_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.ImmutableHashSet_Contains_with_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.ImmutableHashSet_Contains_with_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.IReadOnlySet_Contains_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.IReadOnlySet_Contains_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last_Predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last_Predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last_when_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last_when_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault_Predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault_Predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault_when_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault_when_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_over_entityType_should_rewrite_to_identity_equality(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_over_entityType_should_rewrite_to_identity_equality(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_with_constant_list(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_with_constant_list(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_with_parameter_list(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_with_parameter_list(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_default_returns_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_default_returns_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_no_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_no_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_default_returns_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_default_returns_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_no_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_no_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Not_Any_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Not_Any_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select_OfType_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select_OfType_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_client_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_client_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate_client_eval_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate_client_eval_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Take_Last_gives_correct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Take_Last_gives_correct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_client_eval_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_client_eval_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate_client_eval_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate_client_eval_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Project_constant_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Project_constant_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Return_type_of_singular_operator_is_preserved(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Return_type_of_singular_operator_is_preserved(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_All(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_All(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_Select_Distinct_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_Select_Distinct_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Single_Predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Single_Predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Single_Throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Single_Throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.SingleOrDefault_Predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.SingleOrDefault_Predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.SingleOrDefault_Throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.SingleOrDefault_Throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.String_FirstOrDefault_in_projection_does_not_do_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.String_FirstOrDefault_in_projection_does_not_do_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_Any_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_Any_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_empty_returns_zero(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_empty_returns_zero(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_explicit_cast_over_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_explicit_cast_over_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_scalar_returning_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_scalar_returning_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_uncorrelated_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_uncorrelated_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_arg_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_arg_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_data_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_data_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_data_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_data_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_Last(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_Last(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_LastOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_LastOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_OrderBy_Count_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_OrderBy_Count_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_OrderBy_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_OrderBy_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_Single(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_Single(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_SingleOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_SingleOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals_static(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals_static(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals_static(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals_static(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_where_all(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_where_all(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_where_any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_where_any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_after_navigation_expansion(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_after_navigation_expansion(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_body_clause_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_body_clause_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_body_clause(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_body_clause(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_multiple_body_clauses(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_multiple_body_clauses(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Can_get_current_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Can_get_current_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Entity_not_added_to_state_manager(useParam: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Entity_not_added_to_state_manager(useParam: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Entity_not_added_to_state_manager(useParam: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Entity_not_added_to_state_manager(useParam: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Query_fast_path_when_ctor_binding(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Query_fast_path_when_ctor_binding(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.SelectMany_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.SelectMany_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Where_simple_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Where_simple_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Applied_to_body_clause +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Applied_to_body_clause_with_projection +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Applied_to_multiple_body_clauses +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Applied_to_projection +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Entity_added_to_state_manager(useParam: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Entity_added_to_state_manager(useParam: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.AsTracking_switches_tracking_on_when_off_in_options +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking_query_caching +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking_query_caching_single_context +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking_query_caching_using_options +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking_starting_with_NoTracking +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_does_not_revert_when_attached_on_DbContext +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_does_not_revert_when_attached_on_DbSet +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_range_does_not_revert_when_attached_dbContext +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_range_does_not_revert_when_attached_dbSet +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_reverts_when_state_set_to_unchanged +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Multiple_entities_can_revert +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers2 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers3 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers4 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers5 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Compiled_query_when_does_not_end_in_query_operator +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Compiled_query_when_using_member_on_context +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Compiled_query_with_max_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.DbSet_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.DbSet_query_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.DbSet_query_first +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.DbSet_query_first_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.First_query_with_cancellation_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.First_query_with_single_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.First_query_with_single_parameter_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Keyless_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Keyless_query_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Keyless_query_first +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Keyless_query_first_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_ending_with_include +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_closure +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_closure_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_closure_async_null +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_closure_null +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_contains +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_single_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_single_parameter_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_single_parameter_with_include +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_three_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_three_parameters_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_two_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_two_parameters_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Untyped_context +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Untyped_context_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_non_existing_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_non_existing_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Client_evaluation_of_uncorrelated_method_call(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Client_evaluation_of_uncorrelated_method_call(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Order_by_length_twice_followed_by_projection_of_naked_collection_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Order_by_length_twice_followed_by_projection_of_naked_collection_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Order_by_length_twice(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Order_by_length_twice(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.StandardDeviation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.StandardDeviation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_int_compared_to_long(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_int_compared_to_long(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_nullable_datetime_compared_to_non_nullable(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_nullable_datetime_compared_to_non_nullable(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_round_works_correctly_in_projection_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_round_works_correctly_in_projection_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_round_works_correctly_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_round_works_correctly_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_truncate_works_correctly_in_projection_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_truncate_works_correctly_in_projection_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_truncate_works_correctly_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_truncate_works_correctly_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Variance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Variance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Where_functions_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Where_functions_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_after_GroupBy_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_after_GroupBy_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_after_GroupBy_aggregate2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_after_GroupBy_aggregate2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_with_predicate_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_with_predicate_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Anonymous_projection_Distinct_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Anonymous_projection_Distinct_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_after_GroupBy_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_after_GroupBy_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_with_predicate_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_with_predicate_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_after_GroupBy_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_after_GroupBy_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_after_GroupBy_without_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_after_GroupBy_without_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_with_predicate_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_with_predicate_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Distinct_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Distinct_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Distinct_GroupBy_OrderBy_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Distinct_GroupBy_OrderBy_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Element_selector_with_case_block_repeated_inside_another_case_block_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Element_selector_with_case_block_repeated_inside_another_case_block_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_complex_key_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_complex_key_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_multiple_properties_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_multiple_properties_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_nominal_type_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_nominal_type_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_anonymous_type_element_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_anonymous_type_element_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_non_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_non_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_projecting_collection_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_projecting_collection_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_projecting_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_projecting_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_TagWith(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_TagWith(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_column_project_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_column_project_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_with_arithmetic_operation_inside_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_with_arithmetic_operation_inside_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_with_projection_into_DTO(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_with_projection_into_DTO(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_after_anonymous_projection_and_distinct_followed_by_another_anonymous_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_after_anonymous_projection_and_distinct_followed_by_another_anonymous_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_after_skip_0_take_0(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_after_skip_0_take_0(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_Contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_Contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_followed_another_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_followed_another_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_followed_by_another_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_followed_by_another_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_from_right_side_of_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_from_right_side_of_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_another_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_another_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_Join_converted_from_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_Join_converted_from_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_with_group_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_with_group_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_with_grouping_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_with_grouping_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_Join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_Join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_LeftJoin_converted_from_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_LeftJoin_converted_from_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_over_a_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_over_a_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_projecting_conditional_expression_based_on_group_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_projecting_conditional_expression_based_on_group_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_projecting_conditional_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_projecting_conditional_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_without_selectMany_selecting_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_without_selectMany_selecting_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_key_type_mismatch_with_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_key_type_mismatch_with_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_with_alias_Select_Key_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_with_alias_Select_Key_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_based_on_renamed_property_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_based_on_renamed_property_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_based_on_renamed_property_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_based_on_renamed_property_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_complex_key_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_complex_key_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_composite_Key_as_part_of_element_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_composite_Key_as_part_of_element_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Dto_Sum_Min_Key_flattened_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Dto_Sum_Min_Key_flattened_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Key_flattened_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Key_flattened_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_part_Key_flattened_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_part_Key_flattened_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_conditional_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_conditional_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_constant_with_where_on_grouping_with_aggregate_operators(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_constant_with_where_on_grouping_with_aggregate_operators(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_count_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_count_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Dto_as_element_selector_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Dto_as_element_selector_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Dto_as_key_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Dto_as_key_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_empty_key_Aggregate_Key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_empty_key_Aggregate_Key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_empty_key_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_empty_key_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_count_OrderBy_count_Select_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_count_OrderBy_count_Select_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_group_Distinct_Select_Distinct_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_group_Distinct_Select_Distinct_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_group_Where_Select_Distinct_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_group_Where_Select_Distinct_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Key_as_part_of_element_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Key_as_part_of_element_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_let_orderby_projection_with_coalesce_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_let_orderby_projection_with_coalesce_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Min_Where_optional_relationship_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Min_Where_optional_relationship_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Min_Where_optional_relationship(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Min_Where_optional_relationship(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multi_navigation_members_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multi_navigation_members_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Sum_with_conditional_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Sum_with_conditional_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Sum_with_Select_conditional_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Sum_with_Select_conditional_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_nominal_type_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_nominal_type_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_optional_navigation_member_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_optional_navigation_member_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_count_Select_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_count_Select_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_orderby_projection_with_coalesce_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_orderby_projection_with_coalesce_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_with_grouping_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_with_grouping_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_principal_key_property_optimization(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_principal_key_property_optimization(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Average_with_group_enumerable_projected(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Average_with_group_enumerable_projected(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count_with_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count_with_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_key_multiple_times_and_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_key_multiple_times_and_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_with_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_with_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount_with_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount_with_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_required_navigation_member_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_required_navigation_member_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_scalar_aggregate_in_set_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_scalar_aggregate_in_set_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_scalar_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_scalar_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_array(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_array(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_composed_list_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_composed_list_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_composed_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_composed_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_selecting_grouping_key_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_selecting_grouping_key_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Shadow3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Shadow3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_skip_0_take_0_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_skip_0_take_0_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Sum_constant_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Sum_constant_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Sum_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Sum_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_LongCount(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_LongCount(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Select_Where_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Select_Where_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Select_Where_Select_Min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Select_Where_Select_Min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Where_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Where_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_with_grouping_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_with_grouping_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_aggregate_through_navigation_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_aggregate_through_navigation_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_cast_inside_grouping_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_cast_inside_grouping_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_access_thru_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_access_thru_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_access_thru_nested_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_access_thru_nested_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_navigation_with_entity_key_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_navigation_with_entity_key_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_nested_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_nested_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_grouping_key_DateTime_Day(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_grouping_key_DateTime_Day(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_grouping_key_using_Like(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_grouping_key_using_Like(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_orderby_take_skip_distinct_followed_by_group_key_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_orderby_take_skip_distinct_followed_by_group_key_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_result_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_result_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_complex_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_complex_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_complex_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_complex_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_distinct_single_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_distinct_single_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_multijoins(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_multijoins(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_on_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_on_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_single_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_single_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_with_another_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_with_another_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_with_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_with_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_groupby_anonymous_orderby_anonymous_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_groupby_anonymous_orderby_anonymous_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Key_plus_key_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Key_plus_key_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_after_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_after_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_after_GroupBy_without_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_after_GroupBy_without_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_with_predicate_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_with_predicate_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.MinMax_after_GroupBy_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.MinMax_after_GroupBy_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_SelectMany_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_SelectMany_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_Skip_Take_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_Skip_Take_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_Take_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_Take_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_anonymous_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_anonymous_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_collection_of_scalar_before_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_collection_of_scalar_before_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_changes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_changes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_does_not_change(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_does_not_change(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_GroupBy_All(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_GroupBy_All(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_GroupBy_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_GroupBy_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.SelectMany_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.SelectMany_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Self_join_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Self_join_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Union_simple_groupby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Union_simple_groupby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Where_select_function_groupby_followed_by_another_select_with_aggregates(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Where_select_function_groupby_followed_by_another_select_with_aggregates(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_right_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_right_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Client_Join_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Client_Join_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Condition_on_entity_with_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Condition_on_entity_with_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors_one_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors_one_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_as_final_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_as_final_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_multiple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_multiple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_Project(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_Project(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_ordering(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_ordering(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Subquery_with_Take_Then_SelectMany_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Subquery_with_Take_Then_SelectMany_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Where_OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Where_OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Inner_join_with_tautology_predicate_converts_to_cross_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Inner_join_with_tautology_predicate_converts_to_cross_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_complex_condition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_complex_condition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_entities_same_entity_twice(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_entities_same_entity_twice(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_entities(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_entities(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_anonymous_property_method_with_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_anonymous_property_method_with_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_anonymous_property_method(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_anonymous_property_method(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_predicate_with_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_predicate_with_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_with_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_with_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_GroupJoin_DefaultIfEmpty_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_GroupJoin_DefaultIfEmpty_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_same_collection_force_alias_uniquefication(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_same_collection_force_alias_uniquefication(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_same_collection_multiple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_same_collection_multiple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.LeftJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.LeftJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.RightJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.RightJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.SelectMany_with_client_eval_with_constructor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.SelectMany_with_client_eval_with_constructor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Auto_initialized_view_set(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Auto_initialized_view_set(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Collection_correlated_with_keyless_entity_in_predicate_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Collection_correlated_with_keyless_entity_in_predicate_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Collection_of_entities_projecting_correlated_collection_of_keyless_entities(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Collection_of_entities_projecting_correlated_collection_of_keyless_entities(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity_with_pushdown_empty_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity_with_pushdown_empty_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Entity_mapped_to_view_on_right_side_of_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Entity_mapped_to_view_on_right_side_of_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_by_database_view(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_by_database_view(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_groupby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_groupby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_select_where_navigation_multi_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_select_where_navigation_multi_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_select_where_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_select_where_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_where_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_where_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_defining_query_and_correlated_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_defining_query_and_correlated_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_defining_query(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_defining_query(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_included_nav(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_included_nav(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_included_navs_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_included_navs_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_mixed_tracking(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_mixed_tracking(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_nav_defining_query(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_nav_defining_query(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Projecting_collection_correlated_with_keyless_entity_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Projecting_collection_correlated_with_keyless_entity_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Add_minutes_on_constant_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Add_minutes_on_constant_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_and_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_and_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_or_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_or_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_on_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_on_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery_ef_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery_ef_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_subquery_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_subquery_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_on_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_on_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_with_multiple_conditions_still_uses_exists(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_with_multiple_conditions_still_uses_exists(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.AsEnumerable_over_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.AsEnumerable_over_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Can_cast_CreateQuery_result_to_IQueryable_T_bug_1730 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Can_convert_manually_build_expression_with_default(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Can_convert_manually_build_expression_with_default(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Cast_results_to_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Cast_results_to_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Cast_to_object_over_parameter_directly_in_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Cast_to_object_over_parameter_directly_in_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Checked_context_with_case_to_same_nullable_type_does_not_fail(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Checked_context_with_case_to_same_nullable_type_does_not_fail(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_unknown_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_unknown_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_in_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_in_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_in_static_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_in_static_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_method_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_method_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_OrderBy_GroupBy_Group_ordering_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_OrderBy_GroupBy_Group_ordering_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Coalesce_Correct_Multiple_Same_TypeMapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Coalesce_Correct_Multiple_Same_TypeMapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Coalesce_Correct_TypeMapping_String(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Coalesce_Correct_TypeMapping_String(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_constant_zero(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_constant_zero(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equal_to_null_for_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equal_to_null_for_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equality_rewrite_for_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equality_rewrite_for_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_projection_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_projection_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_projection_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_projection_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Column_access_inside_subquery_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Column_access_inside_subquery_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_collection_navigation_with_itself(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_collection_navigation_with_itself(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_using_equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_using_equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_with_different_property_chains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_with_different_property_chains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_with_different_query_sources(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_with_different_query_sources(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_collection_navigation_to_null_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_collection_navigation_to_null_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_collection_navigation_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_collection_navigation_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_different_entity_types_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_different_entity_types_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_entities_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_entities_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_entity_to_null_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_entity_to_null_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_navigations_using_static_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_navigations_using_static_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_collection_navigations_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_collection_navigations_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_entities_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_entities_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_to_fixed_string_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_to_fixed_string_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compiler_generated_local_closure_produces_valid_parameter_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compiler_generated_local_closure_produces_valid_parameter_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_query_model_compiles_correctly(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_query_model_compiles_correctly(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_constant_string_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_constant_string_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_int_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_int_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_parameter_string_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_parameter_string_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_string_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_string_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concurrent_async_queries_when_raw_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_on_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_on_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_columns_both_fixed_length(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_columns_both_fixed_length(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_columns_with_different_sizes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_columns_with_different_sizes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_parameter_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_parameter_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_with_DateTime_Date(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_with_DateTime_Date(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_with_subquery_involving_join_binds_to_correct_table(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_with_subquery_involving_join_binds_to_correct_table(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Context_based_client_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Context_based_client_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Convert_to_nullable_on_nullable_value_is_ignored(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Convert_to_nullable_on_nullable_value_is_ignored(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_top_level_arg_followed_by_projecting_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_top_level_arg_followed_by_projecting_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_top_level_arg(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_top_level_arg(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Dependent_to_principal_navigation_equal_to_null_for_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Dependent_to_principal_navigation_equal_to_null_for_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_followed_by_ordering_on_condition(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_followed_by_ordering_on_condition(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Take_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Take_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_subquery_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_subquery_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.EF_Property_include_on_incorrect_property_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.EF_Property_include_on_incorrect_property_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_contains_with_list_of_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_contains_with_list_of_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_double_check(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_double_check(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_inline_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_inline_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_inline(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_inline(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_not_null_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_not_null_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_null_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_null_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_on_subquery_with_null_check(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_on_subquery_with_null_check(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby_descending_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby_descending_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby_descending_subquery_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby_descending_subquery_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_self(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_self(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_DTO_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_DTO_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_nested_anonymous_type_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_nested_anonymous_type_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_subquery_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_subquery_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_with_null_coalesce_client_side(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_with_null_coalesce_client_side(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Environment_newline_is_funcletized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Environment_newline_is_funcletized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Filter_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Filter_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.First_client_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.First_client_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.First_on_collection_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.First_on_collection_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.FirstOrDefault_with_predicate_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.FirstOrDefault_with_predicate_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Funcletize_conditional_with_evaluatable_test(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Funcletize_conditional_with_evaluatable_test(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Include_with_orderby_skip_preserves_ordering(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Include_with_orderby_skip_preserves_ordering(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Inner_parameter_in_nested_lambdas_gets_preserved(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Inner_parameter_in_nested_lambdas_gets_preserved(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Int16_parameter_can_be_used_for_int_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Int16_parameter_can_be_used_for_int_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.IQueryable_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Skip_Take_followed_by_constant_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Skip_Take_followed_by_constant_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_OrderBy_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_OrderBy_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_take_count_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_take_count_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Where_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Where_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_with_entity_equality_local_on_both_sources(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_with_entity_equality_local_on_both_sources(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Late_subquery_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Late_subquery_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_any_subquery_anonymous(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_any_subquery_anonymous(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_entity_equality_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_entity_equality_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_entity_equality_to_other_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_entity_equality_to_other_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_subquery_with_multiple_occurrences(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_subquery_with_multiple_occurrences(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Lifting_when_subquery_nested_order_by_anonymous(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Lifting_when_subquery_nested_order_by_anonymous(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Lifting_when_subquery_nested_order_by_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Lifting_when_subquery_nested_order_by_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Load_should_track_results(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Load_should_track_results(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Local_dictionary(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Local_dictionary(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Manual_expression_tree_typed_null_equality(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Manual_expression_tree_typed_null_equality(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Max_on_empty_sequence_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Max_on_empty_sequence_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.MemberInitExpression_NewExpression_is_funcletized_even_when_bindings_are_not_evaluatable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.MemberInitExpression_NewExpression_is_funcletized_even_when_bindings_are_not_evaluatable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Mixed_sync_async_in_query_cache +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Mixed_sync_async_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_set(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_set(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_joins_Where_Order_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_joins_Where_Order_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Navigation_inside_interpolated_string_is_expanded(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Navigation_inside_interpolated_string_is_expanded(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_fully_translated_manually_constructed_LOJ(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_fully_translated_manually_constructed_LOJ(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Non_nullable_property_through_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Non_nullable_property_through_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_Coalesce_Short_Circuit_with_server_correlated_leftover(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_Coalesce_Short_Circuit_with_server_correlated_leftover(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_Coalesce_Short_Circuit(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_Coalesce_Short_Circuit(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_parameter_name_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_parameter_name_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Orderby_added_for_client_side_GroupJoin_principal_to_dependent_LOJ(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Orderby_added_for_client_side_GroupJoin_principal_to_dependent_LOJ(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_anon(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_anon(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_anon2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_anon2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_arithmetic(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_arithmetic(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_client_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_client_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_skip_take_distinct_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_skip_take_distinct_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_skip_take_distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_skip_take_distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_take_distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_take_distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_comparison_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_comparison_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_condition_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_condition_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_conditional_operator_where_condition_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_conditional_operator_where_condition_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_conditional_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_conditional_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_correlated_subquery1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_correlated_subquery1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Dto_projection_skip_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Dto_projection_skip_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_empty_list_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_empty_list_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_empty_list_does_not_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_empty_list_does_not_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_integer(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_integer(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_multiple_queries(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_multiple_queries(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_multiple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_multiple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_null_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_null_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_object_type_server_evals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_object_type_server_evals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_OrderBy_same_column_different_direction(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_OrderBy_same_column_different_direction(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_scalar_primitive(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_scalar_primitive(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_distinct_orderby_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_distinct_orderby_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_take_take_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_take_take_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Take_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Take_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ternary_conditions(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ternary_conditions(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_same_column_different_direction(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_same_column_different_direction(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending_ThenBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending_ThenBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending_ThenByDescending(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending_ThenByDescending(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_collection_Contains_with_projection_and_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_collection_Contains_with_projection_and_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_can_throw_exception_from_user_code_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_can_throw_exception_from_user_code_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_can_throw_exception_from_user_code(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_can_throw_exception_from_user_code(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Pending_selector_in_cardinality_reducing_method_is_applied_before_expanding_collection_navigation_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Pending_selector_in_cardinality_reducing_method_is_applied_before_expanding_collection_navigation_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances_across_joins(async: False, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances_across_joins(async: False, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances_across_joins(async: True, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances_across_joins(async: True, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances(async: False, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances(async: False, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances(async: True, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances(async: True, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projecting_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projecting_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projecting_collection_then_include_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projecting_collection_then_include_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_null_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_null_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_compiler_concurrency +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_composition_against_ienumerable_set +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_expression_with_to_string_and_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_expression_with_to_string_and_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_when_evaluatable_queryable_method_call_with_repository(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_when_evaluatable_queryable_method_call_with_repository(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_nested_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_nested_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_reprojection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_reprojection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous_projection_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous_projection_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Race_when_context_disposed_before_query_termination +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_filtered_returning_queryable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_filtered_returning_queryable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_filtered(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_filtered(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_ordered_returning_queryable_in_DTO_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_ordered_returning_queryable_in_DTO_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_ordered_returning_queryable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_ordered_returning_queryable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_long_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_long_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_Select_with_client_bindings(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_Select_with_client_bindings(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_collection_projection_translated_to_server_with_binding_after_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_collection_projection_translated_to_server_with_binding_after_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_collection_projection_translated_to_server(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_collection_projection_translated_to_server(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_navigation_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_navigation_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_distinct_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_distinct_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_used_in_projection_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_used_in_projection_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_above_the_range(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_above_the_range(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_below_the_range(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_below_the_range(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_large_number_divided(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_large_number_divided(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_year(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_year(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_hour(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_hour(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_minute(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_minute(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_month(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_month(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_second(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_second(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_ticks(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_ticks(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_int_to_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_int_to_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_long_to_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_long_to_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_other_to_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_other_to_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_references_are_updated_correctly_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_references_are_updated_correctly_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_many_cross_join_same_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_many_cross_join_same_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_count_using_DTO(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_count_using_DTO(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_in_anonymous_type_returning_ordered_queryable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_in_anonymous_type_returning_ordered_queryable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_in_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_in_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_with_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_with_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_null_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_null_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_long_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_long_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_OrderDescending(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_OrderDescending(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_non_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_non_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow_unconstrained_generic_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow_unconstrained_generic_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_subquery_recursive_trivial_returning_queryable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_subquery_recursive_trivial_returning_queryable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_long_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_long_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_null_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_null_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Deep_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Deep_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Deep_Single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Deep_Single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Equality(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Equality(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Selected_column_can_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Selected_column_can_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_after_client_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_after_client_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_cartesian_product_with_ordering(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_cartesian_product_with_ordering(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_subquery_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_subquery_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_with_DefaultIfEmpty_and_Select_value_type_in_selector_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_with_DefaultIfEmpty_and_Select_value_type_in_selector_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_customer_orders(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_customer_orders(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_entity_deep(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_entity_deep(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_nested_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_nested_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_OrderBy_ThenBy_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_OrderBy_ThenBy_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_primitive_select_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_primitive_select_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_primitive(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_primitive(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_projection1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_projection1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_projection2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_projection2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Shaper_command_caching_when_parameter_names_different(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Shaper_command_caching_when_parameter_names_different(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Single_Predicate_Cancellation +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_0_Take_0_works_when_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_0_Take_0_works_when_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_0_Take_0_works_when_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_0_Take_0_works_when_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_1_Take_0_works_when_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_1_Take_0_works_when_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_All(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_All(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Any_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Any_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SkipWhile_throws_meaningful_exception(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SkipWhile_throws_meaningful_exception(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Static_member_access_gets_parameterized_within_larger_evaluatable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Static_member_access_gets_parameterized_within_larger_evaluatable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_include_on_incorrect_property_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_include_on_incorrect_property_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_is_not_null_translated_correctly(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_is_not_null_translated_correctly(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_is_null_translated_correctly(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_is_null_translated_correctly(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_0_works_when_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_0_works_when_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_All(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_All(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Any_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Any_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Distinct_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Distinct_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_OrderBy_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_OrderBy_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple_parameterized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple_parameterized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_subquery_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_subquery_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Where_Distinct_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Where_Distinct_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_with_single_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_with_single_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_with_single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_with_single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Not_Null_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Not_Null_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Not_Null_endsWith_Non_Numeric_First_Part(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Not_Null_endsWith_Non_Numeric_First_Part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Null_Equals_Non_Numeric_First_Part(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Null_Equals_Non_Numeric_First_Part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Null_StartsWith(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Null_StartsWith(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_should_not_evaluate_both_sides_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_should_not_evaluate_both_sides_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_should_not_evaluate_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_should_not_evaluate_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Throws_on_concurrent_query_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Throws_on_concurrent_query_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Throws_on_concurrent_query_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Throws_on_concurrent_query_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToArray_over_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToArray_over_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToList_over_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToList_over_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToListAsync_can_be_canceled +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToListAsync_with_canceled_token +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToString_with_formatter_is_evaluated_on_the_client(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToString_with_formatter_is_evaluated_on_the_client(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Using_static_string_Equals_with_StringComparison_throws_informative_error(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Using_static_string_Equals_with_StringComparison_throws_informative_error(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Using_string_Equals_with_StringComparison_throws_informative_error(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Using_string_Equals_with_StringComparison_throws_informative_error(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists_Constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists_Constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists_Inequality(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists_Inequality(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Not_Exists(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Not_Exists(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_orderby_join_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_orderby_join_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Order_First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Order_First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_join_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_join_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_shadow_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_shadow_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_non_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_non_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_shadow_unconstrained_generic_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_shadow_unconstrained_generic_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_Single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_Single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_Single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_Single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_SingleOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_SingleOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_Single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_Single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_SingleOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_SingleOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2_FirstOrDefault_with_anonymous(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2_FirstOrDefault_with_anonymous(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or_with_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or_with_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_anon_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_anon_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_anon(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_anon(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_expression_same_parametername(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_expression_same_parametername(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_on_bool(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_on_bool(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_on_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_on_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_recursive_trivial(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_recursive_trivial(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_orderby_nav_prop_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_orderby_nav_prop_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_all_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_all_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_all(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_all(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_first_or_default_then_nav_prop_nested_using_property_method(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_first_or_default_then_nav_prop_nested_using_property_method(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_first_or_default_then_nav_prop_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_first_or_default_then_nav_prop_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_long_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_long_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_single_or_default_then_nav_prop_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_single_or_default_then_nav_prop_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_sum_plus_one(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_sum_plus_one(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_all_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_all_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_all(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_all(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_any_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_any_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_count_reverse(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_count_reverse(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Include_with_multiple_optional_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Include_with_multiple_optional_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_in_orderby_in_subquery_when_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_in_orderby_in_subquery_when_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_in_predicate_in_subquery_when_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_in_predicate_in_subquery_when_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_projected_in_subquery_when_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_projected_in_subquery_when_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Multiple_include_with_multiple_optional_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Multiple_include_with_multiple_optional_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_fk_based_inside_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_fk_based_inside_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_from_join_clause_inside_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_from_join_clause_inside_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_in_subquery_referencing_outer_query(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_in_subquery_referencing_outer_query(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_inside_contains_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_inside_contains_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_inside_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_inside_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_with_collection_with_nullable_type_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_with_collection_with_nullable_type_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Project_single_scalar_value_subquery_in_query_with_optional_navigation_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Project_single_scalar_value_subquery_in_query_with_optional_navigation_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Project_single_scalar_value_subquery_is_properly_inlined(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Project_single_scalar_value_subquery_is_properly_inlined(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_FirstOrDefault_project_single_column1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_FirstOrDefault_project_single_column1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_FirstOrDefault_project_single_column2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_FirstOrDefault_project_single_column2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_multi_part(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_multi_part(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_multi_part2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_multi_part2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple_followed_by_ordering_by_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple_followed_by_ordering_by_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_count_plus_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_count_plus_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_multiple_complex_projections(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_multiple_complex_projections(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigations_Where_Navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigations_Where_Navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Singleton_Navigation_With_Member_Access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Singleton_Navigation_With_Member_Access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Deep(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Deep(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Equals_Navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Equals_Navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Included(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Included(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Multiple_Access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Multiple_Access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null_Deep(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null_Deep(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null_Reverse(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null_Reverse(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Singleton_Navigation_With_Member_Access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Singleton_Navigation_With_Member_Access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Compiled_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Count_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Count_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Entity_Equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Entity_Equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Find(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Find(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.FromSql_is_composed +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.FromSql_is_composed_when_filter_has_navigation +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Include_query_opt_out(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Include_query_opt_out(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Include_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Include_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_many_to_one_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_many_to_one_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_many_to_one_query2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_many_to_one_query2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_one_to_many_query_with_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_one_to_many_query_with_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query_parameter_new_context(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query_parameter_new_context(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Navs_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Navs_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Project_reference_that_itself_has_query_filter_with_another_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Project_reference_that_itself_has_query_filter_with_another_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Projection_query_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Projection_query_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Projection_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Projection_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Duplicate_tags +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_multiline_tag +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_multiline_tag_with_empty_lines +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_multiple_multiline_tag +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_multiple_tags +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_tag +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Tag_on_include_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Tag_on_scalar_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Tags_on_subquery +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_AsNoTracking_Selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_AsNoTracking_Selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_with_repeated_property_being_ordered_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_with_repeated_property_being_ordered_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_with_repeated_property_being_ordered(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_with_repeated_property_being_ordered(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Cast_on_top_level_projection_brings_explicit_Cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Cast_on_top_level_projection_brings_explicit_Cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_method_in_projection_requiring_materialization_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_method_in_projection_requiring_materialization_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_method_in_projection_requiring_materialization_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_method_in_projection_requiring_materialization_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_projection_via_ctor_arguments(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_projection_via_ctor_arguments(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_projection_with_string_initialization_with_scalar_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_projection_with_string_initialization_with_scalar_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Coalesce_over_nullable_uint(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Coalesce_over_nullable_uint(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_FirstOrDefault_with_entity_equality_check_in_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_FirstOrDefault_with_entity_equality_check_in_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_FirstOrDefault_with_nullable_unsigned_int_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_FirstOrDefault_with_nullable_unsigned_int_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_projection_AsNoTracking_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_projection_AsNoTracking_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Custom_projection_reference_navigation_PK_to_FK_optimization(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Custom_projection_reference_navigation_PK_to_FK_optimization(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Entity_passed_to_DTO_constructor_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Entity_passed_to_DTO_constructor_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_is_tracked(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_is_tracked(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_with_to_list_is_tracked(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_with_to_list_is_tracked(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.FirstOrDefault_over_empty_collection_of_value_type_returns_correct_results(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.FirstOrDefault_over_empty_collection_of_value_type_returns_correct_results(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.LastOrDefault_member_access_in_projection_translates_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.LastOrDefault_member_access_in_projection_translates_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_from_result_of_single_result_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_from_result_of_single_result_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_from_result_of_single_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_from_result_of_single_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_of_list_of_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_of_list_of_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Member_binding_after_ctor_arguments_fails_with_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Member_binding_after_ctor_arguments_fails_with_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.MemberInit_in_projection_without_arguments(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.MemberInit_in_projection_without_arguments(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Multiple_select_many_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Multiple_select_many_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.New_date_time_in_anonymous_type_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.New_date_time_in_anonymous_type_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_non_nullable_value_after_FirstOrDefault_on_empty_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_non_nullable_value_after_FirstOrDefault_on_empty_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_followed_by_projection_of_length_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_followed_by_projection_of_length_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_to_int_array(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_to_int_array(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_to_object_array(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_to_object_array(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_uint_through_collection_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_uint_through_collection_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_collection_using_convert(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_collection_using_convert(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_Length_of_a_string_property_after_FirstOrDefault_on_correlated_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_Length_of_a_string_property_after_FirstOrDefault_on_correlated_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_multiple_collection_with_same_constant_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_multiple_collection_with_same_constant_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_nullable_struct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_nullable_struct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_AsEnumerable_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_AsEnumerable_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_containing_DateTime_subtraction(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_containing_DateTime_subtraction(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_custom_type_in_both_sides_of_ternary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_custom_type_in_both_sides_of_ternary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_Distinct_projection_preserves_columns_used_for_distinct_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_Distinct_projection_preserves_columns_used_for_distinct_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_entity_type_into_object_array(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_entity_type_into_object_array(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_entity_type_into_object_list(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_entity_type_into_object_list(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_multiple_entity_types_into_object_array(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_multiple_entity_types_into_object_array(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_take_predicate_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_take_predicate_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_take_projection_doesnt_project_intermittent_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_take_projection_doesnt_project_intermittent_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_expression_precedence(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_expression_precedence(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_expressions(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_expressions(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_mixed_subqueries(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_mixed_subqueries(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_mixed(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_mixed(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_client_evald_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_client_evald_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_null_value(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_null_value(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_with_parameterized_constructor_with_member_assignment(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_with_parameterized_constructor_with_member_assignment(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_with_parameterized_constructor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_with_parameterized_constructor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_multiple_orderbys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_multiple_orderbys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_orderBy_and_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_orderBy_and_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_orderby_thenby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_orderby_thenby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_changes_asc_order_to_desc(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_changes_asc_order_to_desc(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_changes_desc_order_to_asc(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_changes_desc_order_to_asc(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_inner(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_inner(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_outer_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_outer_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_outer(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_outer(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_projection_scalar_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_projection_scalar_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_subquery_via_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_subquery_via_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_without_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_without_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_bool_constant_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_bool_constant_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_conditional_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_conditional_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_constant_in_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_constant_in_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_literal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_literal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_one(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_one(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_three(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_three(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_two(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_two(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_with_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_with_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure_with_order_by_property_with_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure_with_order_by_property_with_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure_with_order_parameter_with_cast_to_nullable(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure_with_order_parameter_with_cast_to_nullable(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_byte_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_byte_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_drops_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_drops_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_results(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_results(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_tests(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_tests(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_terminates_at_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_terminates_at_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_with_null_comparison_in_test(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_with_null_comparison_in_test(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_int(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_int(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_null_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_null_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_customer_identity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_customer_identity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_customer_table(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_customer_table(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_day_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_day_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_day_of_year_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_day_of_year_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_DayOfWeek_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_DayOfWeek_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_hour_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_hour_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_millisecond_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_millisecond_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_minute_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_minute_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_month_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_month_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_second_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_second_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_Ticks_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_Ticks_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_TimeOfDay_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_TimeOfDay_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_year_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_year_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_entity_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_entity_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_GetValueOrDefault_on_DateTime_with_null_values(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_GetValueOrDefault_on_DateTime_with_null_values(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_GetValueOrDefault_on_DateTime(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_GetValueOrDefault_on_DateTime(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_into(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_into(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_local(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_local(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_count_using_anonymous_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_count_using_anonymous_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level6(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level6(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_anonymous_type_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_anonymous_type_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_binary_expression_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_binary_expression_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_binary_expression_nested_introduces_top_level_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_binary_expression_nested_introduces_top_level_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_length_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_length_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_method_call_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_method_call_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_int_to_long_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_int_to_long_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_int_to_nullable_int_doesnt_introduce_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_int_to_nullable_int_doesnt_introduce_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_nullable_int_to_int_doesnt_introduce_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_nullable_int_to_int_doesnt_introduce_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_nullable_int_to_long_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_nullable_int_to_long_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_over_10_nested_ternary_condition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_over_10_nested_ternary_condition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_project_filter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_project_filter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_project_filter2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_project_filter2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar_primitive_after_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar_primitive_after_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar_primitive(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar_primitive(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_short_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_short_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_with_complex_expression_that_can_be_funcletized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_with_complex_expression_that_can_be_funcletized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_with_multiple_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_with_multiple_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_with_collection_being_correlated_subquery_which_references_non_mapped_properties_from_inner_and_outer_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_with_collection_being_correlated_subquery_which_references_non_mapped_properties_from_inner_and_outer_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_with_nested_DefaultIfEmpty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_with_nested_DefaultIfEmpty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_without_result_selector_collection_navigation_composed(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_without_result_selector_collection_navigation_composed(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_without_result_selector_naked_collection_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_without_result_selector_naked_collection_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Ternary_in_client_eval_assigns_correct_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Ternary_in_client_eval_assigns_correct_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.ToList_Count_in_projection_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.ToList_Count_in_projection_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Using_enumerable_parameter_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Using_enumerable_parameter_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.VisitLambda_should_not_be_visited_trivially(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.VisitLambda_should_not_be_visited_trivially(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Client_eval_Union_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Client_eval_Union_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_after_set_operation_fails_if_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_after_set_operation_fails_if_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_after_set_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_after_set_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_before_set_operation_fails(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_before_set_operation_fails(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_non_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_non_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_distinct_on_both_source_and_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_distinct_on_both_source_and_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_distinct_on_one_source_and_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_distinct_on_one_source_and_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_one_side_being_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_one_side_being_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.GroupBy_Select_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.GroupBy_Select_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union_different_includes_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union_different_includes_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union_only_on_one_side_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union_only_on_one_side_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Nested_concat_with_distinct_in_the_middle_and_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Nested_concat_with_distinct_in_the_middle_and_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Nested_concat_with_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Nested_concat_with_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.OrderBy_Take_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.OrderBy_Take_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union_different_fields_in_anonymous_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union_different_fields_in_anonymous_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union_unrelated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union_unrelated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.SubSelect_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.SubSelect_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_inside_Concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_inside_Concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_non_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_non_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_plus_other_column_with_correlated_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_plus_other_column_with_correlated_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_with_correlated_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_with_correlated_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_OrderBy_Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_OrderBy_Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_columns_with_different_nullability(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_columns_with_different_nullability(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_Take1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_Take1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_Take2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_Take2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_without_Skip_Take1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_without_Skip_Take1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_without_Skip_Take2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_without_Skip_Take2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Select_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Select_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Take_Union_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Take_Union_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_anonymous_type_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_anonymous_type_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_different_store_types_is_fine_if_database_can_translate_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_different_store_types_is_fine_if_database_can_translate_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_type_mappings_to_same_store_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_type_mappings_to_same_store_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_skip_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_skip_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_skip_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_skip_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_multiple_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_multiple_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_collection_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_collection_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_collection_result_operator2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_collection_result_operator2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Repro9735(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Repro9735(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_skip_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_skip_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_skip_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_skip_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_multiple_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_multiple_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_collection_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_collection_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_collection_result_operator2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_collection_result_operator2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Repro9735(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Repro9735(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.ToQueryString_for_include_reference_and_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_composed_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_composed_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_composed_Join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_composed_Join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_over_int_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_over_int_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQueryRaw_over_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQueryRaw_over_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Filtered_include_with_multiple_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Filtered_include_with_multiple_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_non_existing_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_non_existing_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Array_of_parameters_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Array_of_parameters_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Case_block_simplification_works_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Case_block_simplification_works_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_AndAlso_another_Contains_gets_combined_to_one_in_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_AndAlso_another_Contains_gets_combined_to_one_in_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_another_Contains_gets_combined_to_one_in_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_another_Contains_gets_combined_to_one_in_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Decimal_cast_to_double_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Decimal_cast_to_double_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_does_not_parameterized_as_part_of_bigger_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_does_not_parameterized_as_part_of_bigger_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_non_evaluatable_argument_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_non_evaluatable_argument_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_MultipleParameters_with_non_evaluatable_argument_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_MultipleParameters_with_non_evaluatable_argument_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_non_evaluatable_argument_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_non_evaluatable_argument_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_const_member_does_not_generate_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_const_member_does_not_generate_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_readonly_member_generates_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_readonly_member_generates_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_settable_member_generates_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_settable_member_generates_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_non_nullable_value_after_FirstOrDefault_on_empty_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_non_nullable_value_after_FirstOrDefault_on_empty_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_EF_Property_using_closure_for_property_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_EF_Property_using_closure_for_property_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_EF_Property_using_function_for_property_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_EF_Property_using_function_for_property_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_property_compared_to_null_wrapped_in_explicit_convert_to_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_property_compared_to_null_wrapped_in_explicit_convert_to_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.First_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.First_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.First_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.First_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_scalar_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_scalar_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_scalar_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_scalar_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Generic_Ilist_contains_translates_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Generic_Ilist_contains_translates_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Implicit_cast_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Implicit_cast_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Interface_casting_though_generic_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Interface_casting_though_generic_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.LastOrDefault_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.LastOrDefault_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.LastOrDefault_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.LastOrDefault_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_AndAlso_on_same_column_converted_to_in_using_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_AndAlso_on_same_column_converted_to_in_using_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_converted_to_in_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_converted_to_in_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_with_null_constant_comparison_converted_to_in(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_with_null_constant_comparison_converted_to_in(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_with_null_parameter_comparison_converted_to_in(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_with_null_parameter_comparison_converted_to_in(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Parameter_array_Contains_OrElse_comparison_with_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Parameter_array_Contains_OrElse_comparison_with_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Parameter_array_Contains_OrElse_comparison_with_parameter_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Parameter_array_Contains_OrElse_comparison_with_parameter_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Simplifiable_coalesce_over_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Simplifiable_coalesce_over_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Single_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Single_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Single_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Single_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Distinct_evaluation_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Distinct_evaluation_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Where_evaluation_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Where_evaluation_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_parameters_with_same_case_insensitive_name_get_uniquified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_parameters_with_same_case_insensitive_name_get_uniquified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_parameters_with_same_name_get_uniquified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_parameters_with_same_name_get_uniquified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.TypeBinary_short_circuit(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.TypeBinary_short_circuit(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Using_same_parameter_twice_in_query_generates_one_sql_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Using_same_parameter_twice_in_query_generates_one_sql_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_array_index(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_array_index(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_array_of_object_contains_over_value_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_array_of_object_contains_over_value_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_as_queryable_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_as_queryable_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_client_side_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_client_side_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_and_parameter_compared_to_binary_expression_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_and_parameter_compared_to_binary_expression_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_compared_to_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_compared_to_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_equals_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_equals_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_false_shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_false_shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_in_complex_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_in_complex_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_negated_twice(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_negated_twice(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_parameter_compared_to_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_parameter_compared_to_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_chain(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_chain(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_and_server_non_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_and_server_non_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_and_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_and_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_deep_inside_predicate_and_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_deep_inside_predicate_and_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_or_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_or_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_AsEnumerable_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_AsEnumerable_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_AsEnumerable_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_AsEnumerable_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Length_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Length_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Count_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Count_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_multi_value_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_multi_value_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_multi_value_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_multi_value_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_null_with_cast_to_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_null_with_cast_to_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_multi_value_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_multi_value_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_multi_value_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_multi_value_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_multi_value_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_multi_value_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_multi_value_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_multi_value_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_with_both_cast_to_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_with_both_cast_to_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_nullable_type_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_nullable_type_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_nullable_type_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_nullable_type_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_to_nullable_bool(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_to_nullable_bool(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_complex_negated_expression_optimized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_complex_negated_expression_optimized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_constant_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_constant_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_constant_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_constant_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Contains_and_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Contains_and_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Contains_or_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Contains_or_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_de_morgan_and_optimized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_de_morgan_and_optimized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_de_morgan_or_optimized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_de_morgan_or_optimized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_default(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_default(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_dictionary_key_access_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_dictionary_key_access_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_method_int(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_method_int(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_matched_nullable_int_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_matched_nullable_int_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_int_nullable_int(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_int_nullable_int(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_nullable_int_long(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_nullable_int_long(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_nullable_long_nullable_int(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_nullable_long_nullable_int(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_null_nullable_int_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_null_nullable_int_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_using_int_overload_on_mismatched_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_using_int_overload_on_mismatched_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_using_object_overload_on_mismatched_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_using_object_overload_on_mismatched_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_field_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_field_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_identity_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_identity_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_in_optimization_multiple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_in_optimization_multiple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_indexer_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_indexer_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_conditional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_conditional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Is_on_same_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Is_on_same_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_list_object_contains_over_value_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_list_object_contains_over_value_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_nullable_type_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_nullable_type_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_nullable_type_reverse_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_nullable_type_reverse_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_multiple_contains_in_subquery_with_and(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_multiple_contains_in_subquery_with_and(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_multiple_contains_in_subquery_with_or(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_multiple_contains_in_subquery_with_or(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_named_tuple_item_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_named_tuple_item_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_navigation_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_navigation_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_negated_boolean_expression_compared_to_another_negated_boolean_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_negated_boolean_expression_compared_to_another_negated_boolean_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache_error_method_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache_error_method_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache_error_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache_error_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_property_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_property_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_new_instance_field_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_new_instance_field_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_new_instance_field_access_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_new_instance_field_access_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_bool_member_compared_to_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_bool_member_compared_to_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_bool_member_compared_to_not_bool_member(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_bool_member_compared_to_not_bool_member(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_null_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_null_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_null_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_null_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_poco_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_poco_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive_tracked2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive_tracked2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_property_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_property_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Contains_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Contains_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Length_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Length_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Count_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Count_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_select_many_and(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_select_many_and(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_shadow_subquery_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_shadow_subquery_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_short_member_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_short_member_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache_nullable_type_reverse(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache_nullable_type_reverse(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache_nullable_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache_nullable_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_reversed(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_reversed(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_projection_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_projection_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_static_field_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_static_field_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_static_property_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_static_property_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_correlated_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_correlated_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_correlated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_correlated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_compared_to_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_compared_to_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_another_condition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_another_condition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_false_as_result_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_false_as_result_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_false_as_result_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_false_as_result_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_tuple_item_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_tuple_item_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.Include_with_non_nullable_FKs_and_nullable_PK +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.Include_with_null_fKs_and_non_nullable_PK +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.Include_with_null_fKs_and_nullable_PK +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.Include_with_null_FKs_and_nullable_PK +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.One_to_one_self_ref_Include +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_equal_nullable_bool_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_equal_nullable_bool_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_equal_nullable_bool_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_equal_nullable_bool_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_logical_operation_with_nullable_bool_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_logical_operation_with_nullable_bool_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_int_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_int_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_deeply_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_deeply_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_on_self_gets_simplified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_on_self_gets_simplified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_not_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_not_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_not_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_not_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_equal_equal_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_equal_equal_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_equal_not_equal_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_equal_not_equal_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_equal_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_equal_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_equal_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_equal_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_not_equal_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_not_equal_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_not_equal_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_not_equal_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_constant_true_to_expression_which_evaluates_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_constant_true_to_expression_which_evaluates_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_negated_static(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_negated_static(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_static(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_static(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_not_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_not_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_not_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_not_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_nullable_with_non_null_parameter_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_nullable_with_non_null_parameter_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_nullable_with_null_parameter_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_nullable_with_null_parameter_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Comparison_compared_to_null_check_on_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Comparison_compared_to_null_check_on_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_comparison_dont_get_combined_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_comparison_dont_get_combined_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_false_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_false_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_with_multiple_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_with_multiple_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_nullable_array_closure_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_nullable_array_closure_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Empty_subquery_with_contains_negated_returns_true(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Empty_subquery_with_contains_negated_returns_true(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Empty_subquery_with_contains_returns_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Empty_subquery_with_contains_returns_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.False_compared_to_negated_is_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.False_compared_to_negated_is_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.From_sql_composed_with_relational_null_comparison +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_negative(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_negative(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_with_setup(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_with_setup(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_intersection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_intersection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_negative(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_negative(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.IsNull_on_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.IsNull_on_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Join_uses_database_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Join_uses_database_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like_with_escape_char(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like_with_escape_char(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_contains_calls_get_combined_into_one_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_contains_calls_get_combined_into_one_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_with_null_in_the_middle(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_with_null_in_the_middle(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_without_null_comparison_work_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_without_null_comparison_work_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_contains_with_comparison_dont_get_combined_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_contains_with_comparison_dont_get_combined_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_contains_with_comparison_without_null_get_combined_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_contains_with_comparison_without_null_get_combined_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_non_nullable_arguments_gets_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_non_nullable_arguments_gets_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_nullable_arguments_doesnt_get_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_nullable_arguments_doesnt_get_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nested_CompareTo_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nested_CompareTo_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_comparison_in_order_by_with_relational_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_comparison_in_order_by_with_relational_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_comparison_in_selector_with_relational_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_comparison_in_selector_with_relational_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_to_CompareTo_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_to_CompareTo_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_when_comparing_function_with_nullable_argument_to_a_nullable_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_when_comparing_function_with_nullable_argument_to_a_nullable_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_when_comparing_two_functions_with_nullable_arguments(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_when_comparing_two_functions_with_nullable_arguments(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_array_with_no_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_array_with_no_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_non_nullable_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_non_nullable_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_nullable_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_nullable_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_nullable_item_with_non_nullable_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_nullable_item_with_non_nullable_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_nullable_item_with_nullable_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_nullable_item_with_nullable_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_non_nullable_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_non_nullable_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_nullable_column_and_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_nullable_column_and_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_nullable_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_nullable_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_one_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_one_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_non_nullable_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_non_nullable_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_values_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_values_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_values_with_nullable_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_values_with_nullable_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_one_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_one_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_values_with_nullable_column_and_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_values_with_nullable_column_and_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_join_with_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_join_with_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_complex2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_complex2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullability_check_is_computed_correctly_for_chained_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullability_check_is_computed_correctly_for_chained_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullability_is_computed_correctly_for_chained_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullability_is_computed_correctly_for_chained_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_doesnt_propagate_between_projections(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_doesnt_propagate_between_projections(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_doesnt_propagate_inside_binary_OrElse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_doesnt_propagate_inside_binary_OrElse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_binary_AndAlso(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_binary_AndAlso(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_binary_OrElse_when_info_is_duplicated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_binary_OrElse_when_info_is_duplicated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagation_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagation_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_string_FirstOrDefault_compared_to_nullable_string_LastOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_string_FirstOrDefault_compared_to_nullable_string_LastOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_bool_with_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_bool_with_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_int_with_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_int_with_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Select_IndexOf(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Select_IndexOf(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.String_concat_with_both_arguments_being_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.String_concat_with_both_arguments_being_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Sum_function_is_always_considered_non_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Sum_function_is_always_considered_non_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Switching_null_semantics_produces_different_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Switching_parameter_value_to_null_produces_different_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_nonnull_constant_and_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_nonnull_constant_and_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_constant_and_nonnull_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_constant_and_nonnull_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_constant_and_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_constant_and_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_semantics_optimization_works_with_complex_predicates(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_semantics_optimization_works_with_complex_predicates(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_conditional_search_condition_in_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_conditional_search_condition_in_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_contains_on_parameter_array_with_just_null_with_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_contains_on_parameter_array_with_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_contains_on_parameter_empty_array_with_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_nullable_with_null_value_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_nullable_with_null_value_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_using_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_using_relational_null_semantics_complex_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_using_relational_null_semantics_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_and_and_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_and_and_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_coalesce_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_coalesce_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional_non_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional_non_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_IndexOf_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_IndexOf_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant_not_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant_not_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ors_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ors_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ors_with_nullable_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ors_with_nullable_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nested_conditional_search_condition_in_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nested_conditional_search_condition_in_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_nullable_with_null_value_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_nullable_with_null_value_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_using_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_using_relational_null_semantics_complex_in_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_using_relational_null_semantics_complex_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_using_relational_null_semantics_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_coalesce_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_coalesce_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_equal_with_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_equal_with_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_with_null_check(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_with_null_check(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Bitwise_and_on_expression_with_like_and_null_check_being_compared_to_false +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Complex_predicate_with_bitwise_and_arithmetic_operations +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Complex_predicate_with_bitwise_and_modulo_and_negation +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Double_negate_on_column +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_binary_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_binary_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_like_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_like_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Or_on_two_nested_binaries_and_another_simple_comparison +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Projection_with_not_and_negation_on_integer +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.An_optional_dependent_without_any_columns_and_nested_dependent_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Can_auto_include_navigation_from_model +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Can_have_required_owned_type_on_derived_type +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Include_collection_for_entity_with_owned_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multilevel_owned_entities_determine_correct_nullability +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Nested_owned_required_dependents_are_materialized +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_collection_basic_split_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_collection_basic_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_multiple_level_in_aggregate +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_non_null_in_conditional_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_non_null_in_conditional_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_null_in_conditional_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_null_in_conditional_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_materializes_when_not_containing_another_owned_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_materializes_when_not_containing_another_owned_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_property_access_when_not_containing_another_owned_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_property_access_when_not_containing_another_owned_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_reference_mapped_to_different_table_nested_updated_correctly_after_subquery_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_reference_mapped_to_different_table_nested_updated_correctly_after_subquery_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_reference_mapped_to_different_table_updated_correctly_after_subquery_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_reference_mapped_to_different_table_updated_correctly_after_subquery_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.OwnsMany_correlated_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.OwnsMany_correlated_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Projecting_owned_collection_and_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Projecting_owned_collection_and_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_with_predicate_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_with_predicate_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_without_predicate_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_without_predicate_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_indexer_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_indexer_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_owned_indexer_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_owned_indexer_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_indexer_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_indexer_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_owned_indexer_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_owned_indexer_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_join_on_indexer_property_on_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_join_on_indexer_property_on_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_owned_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_owned_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_owned_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_owned_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_indexer_property_on_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_indexer_property_on_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_properties_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_properties_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_property_when_property_name_from_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_property_when_property_name_from_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_owned_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_owned_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_owner_with_different_owned_types_having_same_property_name_in_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_owner_with_different_owned_types_having_same_property_name_in_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_skip_take_loads_owned_navigations_variation_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_skip_take_loads_owned_navigations_variation_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_skip_take_loads_owned_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_skip_take_loads_owned_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations_variation_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations_variation_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Contains_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Contains_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Count_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Count_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAt_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAt_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAtOrDefault_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAtOrDefault_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_function_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_function_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.FirstOrDefault_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.FirstOrDefault_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.GroupBy_aggregate_on_owned_navigation_in_aggregate_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.GroupBy_aggregate_on_owned_navigation_in_aggregate_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Indexer_property_is_pushdown_into_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Indexer_property_is_pushdown_into_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Left_join_on_entity_with_owned_navigations_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Left_join_on_entity_with_owned_navigations_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Left_join_on_entity_with_owned_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Left_join_on_entity_with_owned_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection_with_composition_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection_with_composition_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection_with_composition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection_with_composition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_and_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_and_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_in_predicate_and_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_in_predicate_and_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_filter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_filter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_projecting_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_projecting_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_projecting_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_projecting_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.No_ignored_include_warning_when_implicit_load(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.No_ignored_include_warning_when_implicit_load(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Non_nullable_property_through_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Non_nullable_property_through_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_does_not_throw_when_performing_identity_resolution(async: False, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_does_not_throw_when_performing_identity_resolution(async: False, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_does_not_throw_when_performing_identity_resolution(async: True, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_does_not_throw_when_performing_identity_resolution(async: True, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Ordering_by_identifying_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Ordering_by_identifying_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Owned_entity_without_owner_does_not_throw_for_identity_resolution(async: False, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Owned_entity_without_owner_does_not_throw_for_identity_resolution(async: False, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Owned_entity_without_owner_does_not_throw_for_identity_resolution(async: True, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Owned_entity_without_owner_does_not_throw_for_identity_resolution(async: True, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Preserve_includes_when_applying_skip_take_after_anonymous_type_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Preserve_includes_when_applying_skip_take_after_anonymous_type_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_with_expansion_on_owned_collections(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_with_expansion_on_owned_collections(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_does_not_own_additional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_does_not_own_additional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_owns_additional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_owns_additional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_collection_correlated_with_keyless_entity_after_navigation_works_using_parent_identifiers(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_collection_correlated_with_keyless_entity_after_navigation_works_using_parent_identifiers(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_base_type_loads_all_owned_navs_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_base_type_loads_all_owned_navs_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_base_type_loads_all_owned_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_base_type_loads_all_owned_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs_tracking(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs_tracking(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_leaf_type_loads_all_owned_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_leaf_type_loads_all_owned_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_loads_reference_nav_automatically_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_loads_reference_nav_automatically_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_on_collection_entry_works_for_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_on_collection_entry_works_for_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_when_subquery_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_when_subquery_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_when_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_when_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_with_OfType_eagerly_loads_correct_owned_navigations_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_with_OfType_eagerly_loads_correct_owned_navigations_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_with_OfType_eagerly_loads_correct_owned_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_with_OfType_eagerly_loads_correct_owned_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_with_result_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_with_result_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Set_throws_for_owned_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Set_throws_for_owned_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Simple_query_entity_with_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Simple_query_entity_with_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Skip_Take_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Skip_Take_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Throw_for_owned_entities_without_owner_in_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Throw_for_owned_entities_without_owner_in_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Trying_to_access_non_existent_indexer_property_throws_meaningful_exception(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Trying_to_access_non_existent_indexer_property_throws_meaningful_exception(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Unmapped_property_projection_loads_owned_navigations_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Unmapped_property_projection_loads_owned_navigations_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Unmapped_property_projection_loads_owned_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Unmapped_property_projection_loads_owned_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Using_from_sql_on_owner_generates_join_with_table_for_owned_shared_dependents(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Using_from_sql_on_owner_generates_join_with_table_for_owned_shared_dependents(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_AsEnumerable_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_AsEnumerable_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToArray_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToArray_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToArray_Length_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToArray_Length_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToList_Count_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToList_Count_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_owned_collection_navigation_ToList_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_owned_collection_navigation_ToList_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.BinaryExpression +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Concat +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Conditional_contains_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Conditional_no_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Contains_with_parameterized_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_field +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_local_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_method_invocation_result +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_property +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Dynamic_query_does_not_get_precompiled +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.EF_Constant_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Final_GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_async_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_sync_over_DbSet_property_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_sync_over_operator +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.FromSql_with_FormattableString_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.FromSqlRaw +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Include_single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Include_split +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Invoke_no_evaluatability_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_fully_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_no_evaluatability +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_with_evaluatable_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_with_evaluatable_without_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_contains_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_evaluatable_as_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_evaluatable_as_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_no_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_fully_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_no_evaluatability +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_with_evaluatable_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_with_evaluatable_without_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Multiple_queries_with_captured_variables +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.New_with_no_arguments +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NewArray +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NotParameterizedAttribute_is_not_supported_with_non_constant_argument +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NotParameterizedAttribute_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.OrderBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Query_compilation_failure +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Query_syntax_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Same_captured_variable_twice_in_different_lambdas +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Same_captured_variable_twice_in_same_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_anonymous_object +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_changes_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_New_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Take_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Take_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_All +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AllAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Any +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AnyAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsAsyncEnumerable_on_DbSet +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsAsyncEnumerable_on_IQueryable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsEnumerable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Average +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AverageAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ContainsAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Count +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_CountAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteDelete +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteDeleteAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdate_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdate_without_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdateAsync_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdateAsync_without_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_First +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_GetEnumerator +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Last +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LongCount +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LongCountAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Max +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_MaxAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Min +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_MinAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Sum +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SumAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToArray +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToArrayAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToDictionary +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToDictionaryAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToHashSet +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToHashSetAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToList +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToListAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToLookup +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_with_cancellation_token +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToDictionary_over_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToDictionaryAsync_over_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToList_over_objects_does_not_get_precompiled +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Two_captured_variables_in_different_lambdas +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Two_captured_variables_in_same_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Unary +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Union +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Unsafe_accessor_gets_generated_once_for_multiple_queries +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Where_New_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Do_not_cache_is_respected +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Final_GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Include_single_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Include_split_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Many_non_nullable_parameters_do_not_prevent_pregeneration +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.No_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Non_nullable_reference_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Non_nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_and_non_nullable_reference_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_and_non_nullable_value_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_reference_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Too_many_nullable_parameters_prevent_pregeneration +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Two_non_nullable_reference_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Two_nullable_reference_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Any +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Concat_parameter_collection_equality_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Contains_over_subquery +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_method +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_with_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Distinct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_ElementAt +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_inline_collection_with_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_parameter_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_First +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_FirstOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_in_subquery_Union_parameter_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_beyond_end +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_datetime +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Intersect_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Join_parameter_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Length +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_bools_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_ints_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_nullable_ints_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_nullable_ints_Contains_null +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_nullable_strings_contains_null +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_strings_contains_null +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_OrderByDescending_ElementAt +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_projection_from_top_level +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_filter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_Select_to_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SingleOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip_Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Union_parameter_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Count +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_ElementAt +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_equality_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip_Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Union +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_as_Any_with_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_all_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_constant_and_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_mixed_value_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_one_value +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_three_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_two_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_zero_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Count_with_one_value +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Count_with_three_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Count_with_two_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Count_with_zero_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Except_column_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Join_ordered_column_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_List_Contains_with_mixed_value_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_negated_Contains_as_All +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_ints_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_nullable_ints_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_nullable_ints_Contains_null +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_with_single_parameter_element_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_with_single_parameter_element_Count +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Json_representation_of_bool_array +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nested_contains_with_arrays_and_no_inferred_type_mapping +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nested_contains_with_Lists_and_no_inferred_type_mapping +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Non_nullable_reference_column_collection_index_equals_nullable_column +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nullable_reference_column_collection_index_equals_nullable_column +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Concat_column_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Contains_with_EF_Constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count_with_column_predicate_with_EF_Constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_HashSet_of_ints_Contains_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_ImmutableArray_of_ints_Contains_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_and_Convert_as_compiled_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Union_another_parameter_collection_as_compiled_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Union_column_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Union_column_collection_as_compiled_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Union_column_collection_nested +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_null_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_bools_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_DateTimes_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_enums_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_ints_Contains_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_ints_Contains_nullable_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_ints_Contains_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_ints_Contains_nullable_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_strings_Contains_nullable_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_strings_Contains_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_structs_Contains_nullable_struct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_structs_Contains_nullable_struct_with_nullable_comparer +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_structs_Contains_struct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_nullable_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_structs_Contains_nullable_struct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_structs_Contains_nullable_struct_with_nullable_comparer +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_structs_Contains_struct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Where_with_EF_Constant_Where_Any +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_with_type_inference_for_JsonScalarExpression +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_datetimes_filtered +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_ordered +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_simple +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_distinct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_ToList_and_FirstOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging2 +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging3 +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_empty_collection_of_nullables_and_collection_only_containing_nulls +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection_with_Concat +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_multiple_collections +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_primitive_collections_element +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Values_of_enum_casted_to_underlying_value +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_complex_expression_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_field_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_list_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_method_call_chain_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_method_call_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_based_filter_does_not_short_circuit +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_chain_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_method_call_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_parameter_does_not_clash_with_closure_parameter_name +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.EntityTypeConfiguration_DbContext_field_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.EntityTypeConfiguration_DbContext_method_call_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.EntityTypeConfiguration_DbContext_property_chain_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.EntityTypeConfiguration_DbContext_property_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Extension_method_DbContext_field_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Extension_method_DbContext_property_chain_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Local_method_DbContext_field_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Local_static_method_DbContext_property_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Local_variable_from_OnModelCreating_can_throw_exception +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Local_variable_from_OnModelCreating_is_inlined +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Method_parameter_is_inlined +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Remote_method_DbContext_property_method_call_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Static_member_from_dbContext_is_inlined +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Static_member_from_non_dbContext_is_inlined +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Using_Context_set_method_in_filter_works +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Using_DbSet_in_filter_works +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Using_multiple_context_in_filter_parametrize_only_current_context +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Using_multiple_entities_with_filters_reuses_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Distinct_used_after_order_by +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.FirstOrDefault_without_filter_order_by +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Include_collection_does_not_generate_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Include_navigation +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Queryable_simple +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Queryable_simple_split +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Queryable_with_parameter_outputs_parameter_value_logging_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.SelectExpression_does_not_use_an_old_logger +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Take_without_order_by +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Does_not_throws_when_group_join +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Doesnt_throw_when_from_sql_not_composed +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_all +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_first +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_from_sql_composed +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_orderby +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_orderby_multiple +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_single +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_single_or_default +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_subquery_main_from_clause +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_where +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_where_subquery_correlated +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Ad_hoc_query_for_default_shared_type_entity_type_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Ad_hoc_query_for_shared_type_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter_with_from_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter_with_from_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_generated_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_generated_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameter_with_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameter_with_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbParameters_interpolated_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbParameters_interpolated_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbParameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbParameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameters_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameters_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_custom_converter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_custom_converter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_positional_dbParameter_with_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_positional_dbParameter_with_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_positional_dbParameter_without_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_positional_dbParameter_without_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Throws_on_concurrent_command(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Throws_on_concurrent_command(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Ad_hoc_type_with_collection_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Ad_hoc_type_with_reference_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Ad_hoc_type_with_unmapped_property_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Line_endings_after_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Line_endings_after_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_parameterization_issue_12213(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_parameterization_issue_12213(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_with_parameters_inline_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_with_parameters_inline_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_with_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_with_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_with_inlined_db_parameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_with_inlined_db_parameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_with_inlined_db_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_with_inlined_db_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_annotations_do_not_affect_successive_calls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_annotations_do_not_affect_successive_calls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_common_table_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_common_table_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_empty_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_empty_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_does_not_parameterize_interpolated_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_does_not_parameterize_interpolated_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_dbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_dbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_positional_dbParameter_with_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_positional_dbParameter_with_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_positional_dbParameter_without_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_positional_dbParameter_without_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_after_removing_whitespaces(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_after_removing_whitespaces(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_DbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_DbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_nameless_DbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_nameless_DbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_multiple_line_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_multiple_line_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed_with_closure_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed_with_closure_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_line_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_line_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_as_no_tracking_not_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_as_no_tracking_not_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_cache_key_includes_query_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_cache_key_includes_query_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_extra_columns(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_extra_columns(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_mapped_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_mapped_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_not_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_not_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_and_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_and_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_cache_key_includes_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_cache_key_includes_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_then_String_ToUpper_String_Length(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_then_String_ToUpper_String_Length(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_db_parameters_called_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_db_parameters_called_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_set_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_set_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ToSqlQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_derived_set(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_derived_set(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_filter_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_filter_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_include_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_include_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_include_prey(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_include_prey(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_insert_update_delete +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_animal_views(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_animal_views(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_birds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_birds(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_plants(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_plants(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_just_kiwis(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_just_kiwis(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_just_roses(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_just_roses(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_backwards_is_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_backwards_is_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_rose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_rose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Member_access_on_intermediate_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Setting_foreign_key_to_a_different_type_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Subquery_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Subquery_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_from_sql_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Changes_in_derived_related_entities_are_detected +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Collection_projection_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Collection_projection_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Entity_can_make_separate_relationships_with_base_type_and_derived_type_both +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_filter_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_filter_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_include_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_include_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_include_prey(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_include_prey(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_insert_update_delete +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_animal_views(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_animal_views(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_birds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_birds(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_plants(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_plants(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_just_kiwis(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_just_kiwis(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_just_roses(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_just_roses(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_backwards_is_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_backwards_is_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_rose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_rose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Casting_to_base_type_joining_with_query_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Common_property_shares_column +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.FromSql_on_derived +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.FromSql_on_root +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Member_access_on_intermediate_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Setting_foreign_key_to_a_different_type_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Subquery_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Subquery_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_derived_set(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_derived_set(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_filter_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_filter_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_include_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_include_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_include_prey(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_include_prey(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_insert_update_delete +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_animal_views(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_animal_views(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_birds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_birds(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_plants(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_plants(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_just_kiwis(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_just_kiwis(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_just_roses(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_just_roses(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_backwards_is_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_backwards_is_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_rose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_rose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Member_access_on_intermediate_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Setting_foreign_key_to_a_different_type_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Subquery_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Subquery_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_from_sql_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Changes_in_derived_related_entities_are_detected +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Collection_projection_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Collection_projection_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Entity_can_make_separate_relationships_with_base_type_and_derived_type_both +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Comparing_collection_navigation_to_null_issues_possible_unintended_consequences_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Comparing_two_collections_together_issues_possible_unintended_reference_comparison_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Does_not_throw_for_top_level_single +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.FirstOrDefault_without_orderby_and_filter_issues_warning_subquery +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.FirstOrDefault_without_orderby_but_with_filter_doesnt_issue_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Last_with_order_by_does_not_issue_client_eval_warning_if_at_top_level +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.LastOrDefault_with_order_by_does_not_issue_client_eval_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Max_does_not_issue_client_eval_warning_when_at_top_level +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Paging_operation_without_orderby_issues_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Paging_operation_without_orderby_issues_warning_async +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Single_SingleOrDefault_without_orderby_doesnt_issue_warning +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_query_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_query_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_query_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_query_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_to_change_query_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_to_change_query_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Interceptor_does_not_leak_across_contexts(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Interceptor_does_not_leak_across_contexts(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_query_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_query_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_to_change_query_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_to_change_query_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Interceptor_does_not_leak_across_contexts(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Interceptor_does_not_leak_across_contexts(async: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Column_nullability_is_set +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Column_with_sysname_assigns_underlying_store_type_and_nullability +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.ConcurrencyToken_is_set_for_rowVersion +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_columns +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_composite_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_composite_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_composite_primary_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_composite_unique_constraint +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_foreign_key_referencing_unique_constraint +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_foreign_keys +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_indexes +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_multiple_foreign_key_in_same_table +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_multiple_indexes_on_same_column +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_primary_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_tables +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_unique_constraints +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_view_columns +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Decimal_numeric_types_have_precision_scale +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_database_collation_is_not_scaffolded +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_char_1 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_char_2 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_nchar_1 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_nchar_2 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_nchar_3 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_nvarchar +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_varchar +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Filter_tables +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Filter_tables_with_qualified_name +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Filter_tables_with_quote_in_name +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Ignore_columnstore_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_name_for_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_primary_key_name_from_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_referential_action_for_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_unique_constraint_name_from_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_unique_true_for_unique_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_bool_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_byte_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateOnly_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateTime_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateTimeOffset_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_decimal_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_double_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_float_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_Guid_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_int_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_long_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_short_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_string_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_TimeOnly_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Specific_max_length_are_add_to_store_type +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Warn_missing_principal_table_for_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Warn_missing_schema +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Warn_missing_table +EntityFrameworkCore.Jet.FunctionalTests.SeedingJetTest.Seeding_does_not_leave_context_contaminated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.SeedingJetTest.Seeding_does_not_leave_context_contaminated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.SeedingJetTest.Seeding_keyless_entity_throws_exception(async: False) +EntityFrameworkCore.Jet.FunctionalTests.SeedingJetTest.Seeding_keyless_entity_throws_exception(async: True) +EntityFrameworkCore.Jet.FunctionalTests.SequentialGuidEndToEndTest.Can_use_explicit_values +EntityFrameworkCore.Jet.FunctionalTests.SequentialGuidEndToEndTest.Can_use_sequential_GUID_end_to_end_async +EntityFrameworkCore.Jet.FunctionalTests.SequentialGuidEndToEndTest.CustomUuid7Test +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: False, ignoreLoops: False, writeIndented: False) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: False, ignoreLoops: False, writeIndented: True) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: True, ignoreLoops: False, writeIndented: False) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: True, ignoreLoops: False, writeIndented: True) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: True, ignoreLoops: True, writeIndented: False) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: True, ignoreLoops: True, writeIndented: True) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Multi_level_add_replace_and_save +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Remove_overlapping_principal +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Temp_values_are_replaced_on_save +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Temporary_value_equals_database_generated_value +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "NeverIgnoreBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "NeverThrowBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "NeverUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddOrUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddOrUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddOrUpdateUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnUpdate", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnUpdateUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "NeverIgnoreBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "NeverThrowBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "NeverUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnUpdate", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnUpdateUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "NeverIgnoreBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "NeverThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "NeverUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddIgnoreBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddOrUpdateIgnoreBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddOrUpdateThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddOrUpdateUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnUpdateIgnoreBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnUpdateThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnUpdateUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "NeverIgnoreBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "NeverThrowBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "NeverUseBeforeThrowAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateUseBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddUseBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnUpdateThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnUpdateUseBeforeThrowAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "Never", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "NeverIgnoreBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "NeverThrowBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "NeverUseBeforeUseAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAdd", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateUseBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddUseBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnUpdate", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnUpdateThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnUpdateUseBeforeUseAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "Never", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "NeverIgnoreBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "NeverThrowBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "NeverUseBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAdd", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddIgnoreBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddOrUpdateIgnoreBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddOrUpdateThrowBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddOrUpdateUseBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddThrowBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddUseBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnUpdateIgnoreBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnUpdateThrowBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnUpdateUseBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Added_entity_with_default_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Added_entity_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Added_entity_with_temporary_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Modified_entity_is_read_from_store_when_not_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Modified_entity_with_read_only_after_save_throws_if_value_is_in_modified_state +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Added_entity_with_default_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Added_entity_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Added_entity_with_temporary_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Modified_entity_is_not_included_in_the_update_when_not_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Modified_entity_with_read_only_after_save_throws_if_value_is_in_modified_state +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "NeverIgnoreBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "NeverIgnoreBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "NeverIgnoreBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddOrUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddOrUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddOrUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "NeverIgnoreBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "NeverIgnoreBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "NeverIgnoreBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddOrUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddOrUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddOrUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "NeverThrowBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "NeverThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "NeverThrowBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddOrUpdateThrowBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddOrUpdateThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddOrUpdateThrowBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddThrowBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddThrowBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnUpdateThrowBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnUpdateThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnUpdateThrowBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "NeverThrowBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "NeverThrowBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "NeverThrowBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddOrUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddOrUpdateThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddOrUpdateThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnUpdateThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnUpdateThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "Never") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "NeverUseBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "NeverUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "NeverUseBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAdd") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddOrUpdateUseBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddOrUpdateUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddOrUpdateUseBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddUseBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddUseBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnUpdate") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnUpdateUseBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnUpdateUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnUpdateUseBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "Never", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "NeverUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "NeverUseBeforeThrowAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "NeverUseBeforeUseAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAdd", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddOrUpdateUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddOrUpdateUseBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddOrUpdateUseBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddUseBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddUseBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnUpdate", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnUpdateUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnUpdateUseBeforeThrowAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnUpdateUseBeforeUseAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Change_state_of_entity_with_temp_non_key_does_not_throw(targetState: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Change_state_of_entity_with_temp_non_key_does_not_throw(targetState: Modified) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Clearing_optional_FK_does_not_leave_temporary_value +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Added_entity_can_have_value_set_explicitly +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Added_entity_with_default_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Added_entity_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Added_entity_with_temporary_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Modified_entity_is_included_in_update_when_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Modified_entity_is_read_from_store_when_not_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Modified_entity_with_read_only_after_save_throws_if_value_is_in_modified_state +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Fields_used_correctly_for_store_generated_values +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_key_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_can_have_value_set_explicitly +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_with_default_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_with_temporary_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_with_temporary_value_gets_value_from_store_even_if_same +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Modified_entity_is_included_in_update_when_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Modified_entity_is_not_included_in_update_when_not_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Modified_entity_with_read_only_after_save_throws_if_value_is_in_modified_state +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_enum_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_GuidAsString_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_StringAsGuid_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_Uri_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_wrapped_Guid_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_wrapped_int_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_wrapped_string_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_wrapped_Uri_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Nullable_fields_get_defaults_when_not_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Nullable_fields_store_any_value_when_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Nullable_fields_store_non_defaults_when_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Object_fields_get_defaults_when_not_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Object_fields_store_any_value_when_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Object_fields_store_non_defaults_when_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Properties_get_database_defaults_when_set_to_sentinel_values +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Properties_get_set_values_when_not_set_to_sentinel_values +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Value_generation_works_for_common_GUID_conversions +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_change_dependent_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_change_principal_and_dependent_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_change_principal_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_insert_dependent_with_just_one_parent +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_manipulate_entities_sharing_row_independently +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_derived_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_derived_nonhierarchy +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_derived_nonhierarchy_all_required +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_nonhierarchy +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_nonhierarchy_with_nonshared_dependent +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_share_required_columns +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_update_just_dependents +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_use_optional_dependents_with_shared_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_use_with_chained_relationships +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_use_with_fanned_relationships +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_use_with_redundant_relationships +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.ExecuteDelete_throws_for_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.ExecuteDelete_throws_for_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.ExecuteUpdate_works_for_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.ExecuteUpdate_works_for_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.No_warn_when_save_optional_dependent_at_least_one_none_null +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Optional_dependent_materialized_when_no_properties +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Optional_dependent_without_required_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Optional_dependent_without_required_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Warn_when_save_optional_dependent_with_null_values +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Warn_when_save_optional_dependent_with_null_values_sensitive +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_change_dependent_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_change_principal_and_dependent_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_change_principal_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_use_optional_dependents_with_shared_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_use_with_chained_relationships +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.ExecuteDelete_throws_for_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.ExecuteDelete_throws_for_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.No_warn_when_save_optional_dependent_at_least_one_none_null +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Optional_dependent_without_required_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Optional_dependent_without_required_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Warn_when_save_optional_dependent_with_null_values +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Warn_when_save_optional_dependent_with_null_values_sensitive +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.BeginTransaction_without_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.BeginTransaction_without_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_to_wrap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_to_wrap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Commit_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Commit_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Commit(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Commit(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_connection_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_error_on_commit_or_rollback(async: False, commit: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_error_on_commit_or_rollback(async: False, commit: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_error_on_commit_or_rollback(async: True, commit: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_error_on_commit_or_rollback(async: True, commit: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Rollback_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Rollback_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Rollback(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Rollback(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_UseTransaction_to_wrap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_UseTransaction_to_wrap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_UseTransaction(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_UseTransaction(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.UseTransaction_without_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.UseTransaction_without_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.BeginTransaction_without_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.BeginTransaction_without_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_to_wrap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_to_wrap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Commit_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Commit_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Commit(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Commit(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_error_on_commit_or_rollback(async: False, commit: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_error_on_commit_or_rollback(async: False, commit: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_error_on_commit_or_rollback(async: True, commit: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_error_on_commit_or_rollback(async: True, commit: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Rollback_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Rollback_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Rollback(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Rollback(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_UseTransaction_to_wrap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_UseTransaction_to_wrap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_UseTransaction(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_UseTransaction(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.UseTransaction_without_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.UseTransaction_without_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_can_be_used_after_ambient_transaction_ended +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_can_be_used_after_another_transaction_if_connection_closed +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_can_be_used_after_enlisted_transaction_ended +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_can_be_used_after_enlisted_transaction_if_connection_closed +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_throws_if_ambient_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_throws_if_another_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_throws_if_enlisted_in_transaction +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Can_use_open_connection_with_started_transaction(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Can_use_open_connection_with_started_transaction(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Can_use_open_connection_with_started_transaction(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.EnlistTransaction_throws_if_ambient_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.EnlistTransaction_throws_if_another_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Externally_closed_connections_are_handled_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Externally_closed_connections_are_handled_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Query_uses_explicit_transaction(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Query_uses_explicit_transaction(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Query_uses_explicit_transaction(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.QueryAsync_uses_explicit_transaction(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.QueryAsync_uses_explicit_transaction(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.QueryAsync_uses_explicit_transaction(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed_from_context(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed_from_context(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed_from_context(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back_from_context(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back_from_context(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back_from_context(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_allows_independent_ambient_transaction_commits +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_allows_nested_ambient_transactions +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionBehavior_Always(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionBehavior_Always(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionBehavior_Never(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionBehavior_Never(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionsEnabled_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionsEnabled_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_no_savepoint(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_no_savepoint(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_does_not_close_connection_opened_by_user(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_does_not_close_connection_opened_by_user(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_implicitly_creates_savepoint(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_implicitly_creates_savepoint(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_implicitly_starts_transaction_when_needed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_implicitly_starts_transaction_when_needed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_throws_for_suppressed_ambient_transactions(connectionString: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_throws_for_suppressed_ambient_transactions(connectionString: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_ambient_transaction +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_is_no_op_if_same_DbTransaction_is_used(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_is_no_op_if_same_DbTransaction_is_used(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_throws_if_ambient_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_throws_if_enlisted_in_transaction +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_throws_if_mismatched_connection +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_will_not_dispose_external_transaction +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_query_from_one_connection_and_save_changes_to_another +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_query_from_one_connection_string_and_save_changes_to_another +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_set_connection_string_in_interceptor(withConnectionString: True, withNullConnectionString: False) +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_set_connection_string_in_interceptor(withConnectionString: True, withNullConnectionString: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Add_element_to_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Add_element_to_nested_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Change_complex_collection_mapped_to_json_to_null_and_to_empty +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Clear_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Modify_element_in_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Modify_multiple_complex_properties_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Modify_nested_complex_property_in_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Move_elements_in_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Remove_element_from_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Replace_complex_collection_element_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Replace_complex_property_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Replace_entire_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Set_complex_collection_to_null_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Set_complex_property_mapped_to_json_to_null +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Set_null_complex_collection_to_non_empty_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Set_null_complex_property_to_non_null_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendBatchHeader_should_append_SET_NOCOUNT_ON +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendBulkInsertOperation_appends_insert_if_no_store_generated_columns_exist +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendBulkInsertOperation_appends_insert_if_no_store_generated_columns_exist_default_values_only +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendDeleteOperation_creates_full_delete_command_text +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendDeleteOperation_creates_full_delete_command_text_with_concurrency_check +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_for_all_store_generated_columns +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_for_only_identity +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_for_only_single_identity_columns +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_for_store_generated_columns_but_no_identity +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_insert_if_store_generated_columns_exist +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendUpdateOperation_appends_where_for_concurrency_token +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendUpdateOperation_for_computed_property +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendUpdateOperation_if_store_generated_columns_dont_exist +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendUpdateOperation_if_store_generated_columns_exist +EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.DbUpdateException_Entries_is_correct_with_multiple_inserts(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.DbUpdateException_Entries_is_correct_with_multiple_inserts(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.Principal_and_dependent_roundtrips_with_cycle_breaking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.Principal_and_dependent_roundtrips_with_cycle_breaking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_all_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_all_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_all_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_all_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_all_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_all_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Add_with_same_entity_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Add_with_same_entity_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Delete_with_different_entity_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Delete_with_different_entity_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Delete_with_same_entity_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Delete_with_same_entity_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_different_entity_types_and_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_different_entity_types_and_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_different_entity_types_and_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_different_entity_types_and_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_same_entity_type_and_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_same_entity_type_and_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_same_entity_type_and_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_same_entity_type_and_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_with_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_with_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_with_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_with_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Can_insert_and_read_back_with_conversions(valueOrder: [0, 2, 0, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_non_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_non_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_nulls_to_string_non_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_nulls_to_string_non_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_nulls_to_string_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_nulls_to_string_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_int_non_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_int_non_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_int_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_int_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_string_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_string_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_string_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_string_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_int_non_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_int_non_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_int_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_int_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_string_non_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_string_non_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_string_non_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_string_non_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsChar", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsInt", databaseType: "integer", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsNullableChar", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsNullableInt", databaseType: "integer", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsNullableString", databaseType: "varchar(3)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsString", databaseType: "varchar(3)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BytesAsNullableString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BytesAsString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "CharAsNullableString", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "CharAsString", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeOffsetToBinary", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeOffsetToNullableBinary", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeOffsetToNullableString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeOffsetToString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeToBinary", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeToNullableBinary", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeToNullableString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeToString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "EnumToNullableNumber", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "EnumToNullableString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "EnumToNumber", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "EnumToString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "GuidToBytes", databaseType: "varbinary(16)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "GuidToNullableBytes", databaseType: "varbinary(16)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "GuidToNullableString", databaseType: "varchar(36)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "GuidToString", databaseType: "varchar(36)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IntAsLong", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IntAsNullableLong", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IPAddressToBytes", databaseType: "varbinary(16)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IPAddressToNullableBytes", databaseType: "varbinary(16)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IPAddressToNullableString", databaseType: "varchar(45)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IPAddressToString", databaseType: "varchar(45)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "ListOfInt", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NonNullStringToNullString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsChar", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsInt", databaseType: "integer", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsNullableChar", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsNullableInt", databaseType: "integer", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsNullableString", databaseType: "varchar(3)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsString", databaseType: "varchar(3)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBytesAsNullableString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBytesAsString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableCharAsNullableString", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableCharAsString", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeOffsetToBinary", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeOffsetToNullableBinary", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeOffsetToNullableString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeOffsetToString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeToBinary", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeToNullableBinary", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeToNullableString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeToString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableEnumToNullableNumber", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableEnumToNullableString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableEnumToNumber", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableEnumToString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableGuidToBytes", databaseType: "varbinary(16)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableGuidToNullableBytes", databaseType: "varbinary(16)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableGuidToNullableString", databaseType: "varchar(36)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableGuidToString", databaseType: "varchar(36)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIntAsLong", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIntAsNullableLong", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIPAddressToBytes", databaseType: "varbinary(16)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIPAddressToNullableBytes", databaseType: "varbinary(16)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIPAddressToNullableString", databaseType: "varchar(45)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIPAddressToString", databaseType: "varchar(45)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableListOfInt", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableNumberToBytes", databaseType: "varbinary(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableNumberToNullableBytes", databaseType: "varbinary(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableNumberToNullableString", databaseType: "varchar(64)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableNumberToString", databaseType: "varchar(64)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullablePhysicalAddressToBytes", databaseType: "varbinary(8)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullablePhysicalAddressToNullableBytes", databaseType: "varbinary(8)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullablePhysicalAddressToNullableString", databaseType: "varchar(20)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullablePhysicalAddressToString", databaseType: "varchar(20)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToBool", databaseType: "smallint", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToBytes", databaseType: "longbinary", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToChar", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToDateTime", databaseType: "datetime", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToEnum", databaseType: "integer", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToGuid", databaseType: "uniqueidentifier", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableBool", databaseType: "smallint", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableBytes", databaseType: "longbinary", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableChar", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableDateTime", databaseType: "datetime", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableEnum", databaseType: "integer", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableGuid", databaseType: "uniqueidentifier", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableNumber", databaseType: "byte", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableTimeSpan", databaseType: "datetime", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNumber", databaseType: "byte", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToTimeSpan", databaseType: "datetime", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableTimeSpanToNullableString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableTimeSpanToNullableTicks", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableTimeSpanToString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableTimeSpanToTicks", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableUriToNullableString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableUriToString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullStringToNonNullString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NumberToBytes", databaseType: "varbinary(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NumberToNullableBytes", databaseType: "varbinary(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NumberToNullableString", databaseType: "varchar(64)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NumberToString", databaseType: "varchar(64)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "PhysicalAddressToBytes", databaseType: "varbinary(8)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "PhysicalAddressToNullableBytes", databaseType: "varbinary(8)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "PhysicalAddressToNullableString", databaseType: "varchar(20)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "PhysicalAddressToString", databaseType: "varchar(20)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToBool", databaseType: "smallint", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToBytes", databaseType: "longbinary", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToChar", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToDateTime", databaseType: "datetime", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToEnum", databaseType: "integer", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToGuid", databaseType: "uniqueidentifier", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableBool", databaseType: "smallint", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableBytes", databaseType: "longbinary", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableChar", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableDateTime", databaseType: "datetime", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableEnum", databaseType: "integer", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableGuid", databaseType: "uniqueidentifier", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableNumber", databaseType: "byte", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableTimeSpan", databaseType: "datetime", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNumber", databaseType: "byte", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToTimeSpan", databaseType: "datetime", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "TimeSpanToNullableString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "TimeSpanToNullableTicks", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "TimeSpanToString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "TimeSpanToTicks", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "UriToNullableString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "UriToString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Add_immutable_record +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_context +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_EntityType +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_lazy_loader +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_lazy_loader_delegate +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_lazy_loader_field +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_StateManager +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Detaching_entity_resets_lazy_loader_delegate_so_it_can_be_reattached +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Detaching_entity_resets_lazy_loader_field_so_it_can_be_reattached +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Detaching_entity_resets_lazy_loader_so_it_can_be_reattached +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_and_update_using_constructors_with_property_parameters +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_context_injected +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_context_injected_into_constructor_with_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_context_injected_into_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_EntityType_injected +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_EntityType_injected_into_constructor_with_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_EntityType_injected_into_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_keyless_type +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_for_collections_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_for_reference_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_for_collections_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_for_reference_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_via_constructor_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_via_constructor_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delgate_injected_into_property_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_for_collections_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_for_reference_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_field_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_field_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_property_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_property_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_property_via_constructor_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_property_via_constructor_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_POCO_loader_injected_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_POCO_loader_injected_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_StateManager_injected +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_StateManager_injected_into_constructor_with_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_StateManager_injected_into_property diff --git a/test/EFCore.LibRed.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt b/test/EFCore.LibRed.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt new file mode 100644 index 00000000..fbf3e98b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt @@ -0,0 +1,34965 @@ +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Deadlock_on_inserts_and_deletes_with_dependents_is_handled_correctly +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 1) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 100) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 3) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Insertion_order_is_preserved(maxBatchSize: 4) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_and_updates_are_batched_correctly +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: False, clientOrder: False) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: False, clientOrder: True) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: True, clientOrder: False) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: False, clientFk: True, clientOrder: True) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: False) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: True) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: True, clientOrder: False) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: True, clientOrder: True) +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_when_database_type_is_different +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_get_column_types_from_built_model +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_set_to_null_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_set_to_null_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_set_to_null_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_precision_and_scale_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_scale +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_scale_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_scale_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_data_types_with_scale_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_nullable_data_types_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_nullable_data_types_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_nullable_data_types_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_sized_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_sized_data_types_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_sized_data_types_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_mapped_sized_data_types_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types_with_identity +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_nulls_for_all_mapped_sized_data_types_with_identity_in_batch +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_and_read_with_max_length_set +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_perform_query_with_ansi_strings_test +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_perform_query_with_max_length +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_any_mapped_data_type +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_any_mapped_data_types_with_nulls +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_DateDiffHour_using_TimeSpan +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_DateDiffMinute_using_TimeSpan +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_using_DateDiffSecond_using_TimeSpan +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Sql_translation_uses_type_mapper_when_constant +EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Sql_translation_uses_type_mapper_when_parameter +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_eager_loaded_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_eager_loaded_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_table_sharing_with_non_owned_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_table_sharing_with_non_owned_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_table_sharing_with_owned(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_aggregate_root_when_table_sharing_with_owned(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_entity_with_auto_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_entity_with_auto_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_predicate_based_on_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_predicate_based_on_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_with_view_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_with_view_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Replace_ColumnExpression_in_column_setter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Replace_ColumnExpression_in_column_setter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_complex_type_with_view_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_complex_type_with_view_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_main_table_in_entity_with_entity_splitting(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_main_table_in_entity_with_entity_splitting(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_main_table_in_entity_with_entity_splitting(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_main_table_in_entity_with_entity_splitting(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned_in_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned_in_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_owned_and_non_owned_properties_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_owned_and_non_owned_properties_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_with_view_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_with_view_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_SelectMany_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_SelectMany_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Union(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Union(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_optional_navigation_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_optional_navigation_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_predicate_with_GroupBy_aggregate_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_predicate_with_GroupBy_aggregate_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_predicate_with_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_predicate_with_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Skip_Take_Skip_Take_causing_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Skip_Take_Skip_Take_causing_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_TagWith(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_TagWith(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_using_navigation_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_using_navigation_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_using_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where_using_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_cross_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_cross_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_LeftJoin_via_flattened_GroupJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_LeftJoin_via_flattened_GroupJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_LeftJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_LeftJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_RightJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_with_RightJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_FromSql_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_FromSql_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_multiple_tables_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_multiple_tables_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_unmapped_property_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_unmapped_property_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_aggregate_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_aggregate_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_First_set_constant_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_First_set_constant_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_First_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_GroupBy_First_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Join_set_property_from_joined_table(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Join_set_property_from_joined_table(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_multiple_set(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_multiple_set(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Skip_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Skip_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Skip_Take_Skip_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Skip_Take_Skip_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_OrderBy_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_parameter_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_parameter_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_SelectMany_set_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_SelectMany_set_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_SelectMany_subquery_set_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_SelectMany_subquery_set_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_TagWith(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_TagWith(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_using_ef_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_using_ef_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_via_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant_via_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_closure_array(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_closure_array(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_inline_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_inline_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_multilevel_property_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter_from_multilevel_property_access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_set_property_plus_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Skip_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Skip_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Take_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_Take_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_using_navigation_2_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_using_navigation_2_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_using_navigation_set_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_Where_using_navigation_set_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_invalid_lambda_in_set_property_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_invalid_lambda_in_set_property_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_join_set_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_join_set_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_LeftJoin_via_flattened_GroupJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_LeftJoin_via_flattened_GroupJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_LeftJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_LeftJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_RightJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_RightJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_two_inner_joins(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_with_two_inner_joins(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_without_property_to_set_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Update_without_property_to_set_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPCInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPHInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Delete_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTFiltersInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_GroupBy_Where_Select_First_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Delete_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_and_derived_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_type_with_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_derived_property_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_keyless_entity_mapped_to_sql_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy_derived(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_where_using_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_with_interface_in_EF_Property_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.TPTInheritanceBulkUpdatesJetTest.Update_with_interface_in_property_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandConfigurationTest.Constructed_select_query_CommandBuilder_throws_when_negative_CommandTimeout_is_used +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_non_query_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_call_DataReader_NextResult(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_call_DataReader_NextResult(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_call_DataReader_NextResult(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_call_DataReader_NextResult(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_close_of_reader(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_close_of_reader(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_close_of_reader(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_close_of_reader(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_command_creation(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_command_creation(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_command_creation(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_command_creation(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_query_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionJetTest.Intercept_scalar_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_query_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_CommandInitialized_to_mutate_scalar_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_non_query_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_call_DataReader_NextResult(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_call_DataReader_NextResult(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_call_DataReader_NextResult(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_call_DataReader_NextResult(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_close_of_reader(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_close_of_reader(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_close_of_reader(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_close_of_reader(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_command_creation(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_command_creation(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_command_creation(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_command_creation(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_query_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_passively(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_passively(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_passively(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_passively(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_that_throws(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_that_throws(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_that_throws(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_that_throws(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_mutate_command(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_mutate_command(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_mutate_command(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_mutate_command(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_result(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_result(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_result(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_replace_result(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_suppress_execution(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_suppress_execution(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_suppress_execution(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_suppress_execution(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_throw(async: False, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_throw(async: False, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_throw(async: True, inject: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_to_throw(async: True, inject: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_explicitly_composed_app_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_explicitly_composed_app_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_one_app_and_one_injected_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_one_app_and_one_injected_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_two_injected_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CommandInterceptionJetTestBase+CommandInterceptionWithDiagnosticsJetTest.Intercept_scalar_with_two_injected_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_added_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_added_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_nested_teams_members_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_nested_teams_members_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_record_collection_elements(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_record_collection_elements(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_record_teams_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_changes_to_record_teams_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_duplicates_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_duplicates_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_nested_collection_changes_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_nested_collection_changes_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_removed_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_removed_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_reordered_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_reordered_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_replaced_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_replaced_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_swapped_complex_objects_in_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_detect_swapped_complex_objects_in_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_collection_with_mixed_null_and_duplicate_elements(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_collection_with_mixed_null_and_duplicate_elements(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_empty_nested_teams_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_empty_nested_teams_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_null_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_handle_null_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_field_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_field_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_property_bag_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_property_bag_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_readonly_struct_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_readonly_struct_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_struct_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_struct_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_struct_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_readonly_struct_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_collections_with_fields_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_collections_with_fields_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_type_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_type_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_type_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_record_type_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_mark_complex_type_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_field_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_field_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_record_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_record_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_readonly_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_readonly_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_record_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_record_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_structs_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_structs_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_read_original_values_for_properties_of_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_default_values_in_optional_complex_property_with_multiple_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_default_values_in_optional_complex_property_with_multiple_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_null_second_level_complex_property_with_required_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_null_second_level_complex_property_with_required_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_null_third_level_complex_property_with_all_optional_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_save_null_third_level_complex_property_with_all_optional_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_field_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_objects(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_property_bag_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_readonly_structs(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_record_objects(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_structs(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_track_entity_with_complex_type_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_field_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_field_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_record_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_record_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_readonly_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_readonly_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_record_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_record_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_structs_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_structs_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Can_write_original_values_for_properties_of_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detect_changes_in_complex_struct_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detect_changes_in_complex_struct_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detect_changes_in_complex_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detect_changes_in_complex_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detects_changes_in_complex_readonly_struct_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detects_changes_in_complex_readonly_struct_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detects_changes_in_complex_record_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Detects_changes_in_complex_record_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_only_when_saving_with_null_second_level_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_only_when_saving_with_null_second_level_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_only_when_saving_with_null_top_level_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_only_when_saving_with_null_top_level_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingJetTest.Throws_when_accessing_complex_entries_using_incorrect_cardinality +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_added_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_added_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_nested_teams_members_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_nested_teams_members_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_record_collection_elements(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_record_collection_elements(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_record_teams_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_changes_to_record_teams_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_duplicates_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_duplicates_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_nested_collection_changes_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_nested_collection_changes_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_removed_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_removed_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_reordered_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_reordered_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_replaced_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_replaced_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_swapped_complex_objects_in_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_detect_swapped_complex_objects_in_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_collection_with_mixed_null_and_duplicate_elements(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_collection_with_mixed_null_and_duplicate_elements(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_empty_nested_teams_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_empty_nested_teams_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_null_elements_in_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_handle_null_elements_in_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_field_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_field_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_property_bag_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_property_bag_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_readonly_struct_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_readonly_struct_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_struct_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_struct_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_struct_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_readonly_struct_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_collections_with_fields_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_collections_with_fields_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_type_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_type_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_type_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_record_type_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_collection_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_collection_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_properties_modified_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_properties_modified_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_properties_modified(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_mark_complex_type_properties_modified(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_field_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_field_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_record_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_record_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_readonly_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_readonly_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_record_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_record_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_structs_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_structs_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_read_original_values_for_properties_of_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_save_null_second_level_complex_property_with_required_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_save_null_second_level_complex_property_with_required_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_save_null_third_level_complex_property_with_all_optional_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_save_null_third_level_complex_property_with_all_optional_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_field_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_objects(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_property_bag_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_readonly_structs(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_record_objects(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs_with_fields(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_structs(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_track_entity_with_complex_type_collections(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_field_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_field_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_property_bag_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_record_collections_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_record_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_record_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_type_collections(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_type_collections(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_readonly_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_readonly_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_record_complex_types_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_record_complex_types(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_record_complex_types(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_structs_with_fields(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_structs_with_fields(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_structs(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Can_write_original_values_for_properties_of_structs(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detect_changes_in_complex_struct_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detect_changes_in_complex_struct_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detect_changes_in_complex_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detect_changes_in_complex_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detects_changes_in_complex_readonly_struct_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detects_changes_in_complex_readonly_struct_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detects_changes_in_complex_record_type_properties(trackFromQuery: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Detects_changes_in_complex_record_type_properties(trackFromQuery: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_only_when_saving_with_null_second_level_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_only_when_saving_with_null_second_level_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_only_when_saving_with_null_top_level_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_only_when_saving_with_null_top_level_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ComplexTypesTrackingProxiesJetTest.Throws_when_accessing_complex_entries_using_incorrect_cardinality +EntityFrameworkCore.Jet.FunctionalTests.CompositeKeyEndToEndJetTest.Can_use_generated_values_in_composite_key_end_to_end +EntityFrameworkCore.Jet.FunctionalTests.CompositeKeyEndToEndJetTest.Can_use_two_non_generated_integers_as_composite_key_end_to_end +EntityFrameworkCore.Jet.FunctionalTests.CompositeKeyEndToEndJetTest.Only_one_part_of_a_composite_key_needs_to_vary_for_uniqueness +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Any(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Any(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Find(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Find(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.SaveChanges(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.SaveChanges(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Single(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.Single(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.ToList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorDisabledJetTest.ToList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Any(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Any(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Find(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Find(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.SaveChanges(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.SaveChanges(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Single(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.Single(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.ToList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConcurrencyDetectorEnabledJetTest.ToList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_AddSession +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_AddSession_bad_attendee +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_AddSession_bad_session +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_Get +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_GetSessions +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_Post_with_existing_attendee +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_Post_with_new_attendee +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_RemoveSession +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_RemoveSession_bad_attendee +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.AttendeesController_RemoveSession_bad_session +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SearchController_Search(searchTerm: "C#", totalCount: 3, sessionCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SearchController_Search(searchTerm: "ran", totalCount: 5, sessionCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SearchController_Search(searchTerm: "Scott", totalCount: 1, sessionCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SessionsController_Delete +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SessionsController_Delete_with_bad_ID +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SessionsController_Get +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SessionsController_Get_with_bad_ID +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SessionsController_Get_with_ID +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SessionsController_Post +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SessionsController_Put +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SessionsController_Put_with_bad_ID +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SpeakersController_GetSpeaker_with_bad_ID +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SpeakersController_GetSpeaker_with_ID +EntityFrameworkCore.Jet.FunctionalTests.ConferencePlannerJetTest.SpeakersController_GetSpeakers +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_creation_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_creation_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_creation_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_creation_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_connection_after_creation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_connection_after_creation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_creation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_creation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_opening(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_override_opening(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_suppress_dispose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_to_suppress_dispose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_creation_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_creation_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_creation_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_creation_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_connection_after_creation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_connection_after_creation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_creation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_creation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_opening(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_override_opening(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_suppress_dispose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_suppress_dispose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_change_connection_when_open_and_not_owned +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_DbContextOptions +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_DbContextOptions_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_non_generic_options_when_only_one_context +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_non_generic_options_when_only_one_context_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_string_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_string_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(contextOwnsConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(contextOwnsConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring(contextOwnsConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring(contextOwnsConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_string_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_string_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_owned_connection_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_owned_connection_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_then_change_connection +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "ConnectionStrings:DefaultConnection", connectionString: " NamE = ConnectionStrings:DefaultConnection ") +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "ConnectionStrings:DefaultConnection", connectionString: "name=ConnectionStrings:DefaultConnection") +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "MyConnectionString", connectionString: "name=MyConnectionString") +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_an_existing_closed_connection_test(openConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_an_existing_closed_connection_test(openConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Cannot_change_connection_when_open_and_owned +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_context_used_with_no_connection_or_connection_string +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_no_config_without_UseJet +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_no_connection_found_in_config_without_UseJet +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_and_read_with_max_length_set +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_perform_query_with_ansi_strings_test +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_perform_query_with_max_length +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_data_type +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_data_type_nullable_shadow +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_data_type_shadow +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Equals_method_over_enum_works +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Object_equals_method_over_enum_works +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_query_struct_to_string_converter_for_pk +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_case_insensitive_string_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_back_with_string_list +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_and_read_with_max_length_set +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_perform_query_with_ansi_strings_test +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_perform_query_with_max_length +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_and_update_with_conversion_for_custom_struct +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_and_update_with_conversion_for_custom_type +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_and_update_with_nullable_converter_on_primary_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_and_update_with_nullable_converter_on_unique_index +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_custom_type_not_mapped_by_default_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_custom_type_not_mapped_by_default_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_data_type +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_data_type_shadow +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Collection_enum_as_string_Contains +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Collection_property_as_scalar_Any +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Collection_property_as_scalar_Count_member +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Composition_over_collection_of_complex_mapped_as_scalar +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Field_on_derived_type_retrieved_via_cast_applies_value_converter +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.GroupBy_converted_enum +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Id_object_as_entity_key +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Infer_type_mapping_from_in_subquery_to_item +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Optional_owned_with_converter_reading_non_nullable_column +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Select_bool_with_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Select_conditional_bool_with_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Value_conversion_on_enum_collection_contains +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Value_conversion_with_property_named_value +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_bool_gets_converted_to_equality_when_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_bool_with_value_conversion_inside_comparison_doesnt_get_converted_twice +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_conditional_bool_with_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.CustomConvertersJetTest.Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Annotation_in_derived_class_when_base_class_processed_after_derived_class +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Attribute_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ConcurrencyCheckAttribute_throws_if_value_in_database_changed +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.DatabaseGeneratedOption_configures_the_property_correctly +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.DatabaseGeneratedOption_Identity_does_not_throw_on_noninteger_properties +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Default_for_key_string_column_throws +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Default_length_for_key_string_column +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Duplicate_column_order_is_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Explicit_configuration_on_derived_type_or_base_type_is_last_one_wins +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Explicit_configuration_on_derived_type_overrides_annotation_on_mapped_base_type +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Explicit_configuration_on_derived_type_overrides_annotation_on_unmapped_base_type +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Field_annotations_are_enabled +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Fluent_API_relationship_throws_for_Keyless_attribute +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_ForeignKey_on_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_ForeignKey_same_name +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_ForeignKey_same_name_one_shadow +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKey_to_nothing +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_configures_relationships_when_inverse_on_derived +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_configures_two_self_referencing_relationships +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_creates_two_relationships_if_applied_on_navigation_and_property_on_different_sides_and_values_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_creates_two_relationships_if_applied_on_navigations_on_both_sides_and_values_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_creates_two_relationships_if_applied_on_property_on_both_side +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_throws_if_applied_on_both_navigations_connected_by_inverse_property_but_values_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_throws_if_applied_on_property_on_both_side_but_navigations_are_connected_by_inverse_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_throws_if_applied_on_two_relationships_targetting_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Inverse_and_self_ref_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InverseProperty_with_case_sensitive_clr_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InverseProperty_with_potentially_ambigous_derived_types +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_from_ignored_base_can_be_ignored_to_remove_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_from_ignored_base_causes_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_is_noop_in_unambiguous_models +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_pointing_to_same_nav_on_base_causes_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_pointing_to_same_nav_on_base_with_one_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_pointing_to_same_skip_nav_on_base_causes_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_from_the_ambiguous_end +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_when_combined_with_other_attributes +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_with_base_type +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_with_base_type_bidirectional +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_removes_ambiguity_with_base_type_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_and_column_work_together +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_and_MaxLength_64_produce_nvarchar_64 +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_fluent_api_and_keyless_attribute_do_not_cause_warning +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_from_base_type_is_recognized +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_from_base_type_is_recognized_if_base_discovered_first +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_from_base_type_is_recognized_if_discovered_through_relationship +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_on_nav_prop_is_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_property_is_not_used_for_FK_when_set_by_annotation +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Key_specified_on_multiple_properties_can_be_overridden +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Keyless_and_key_attributes_which_conflict_cause_warning +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Keyless_fluent_api_and_key_attribute_do_not_cause_warning +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.MaxLength_with_length_takes_precedence_over_StringLength +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.MaxLengthAttribute_throws_while_inserting_value_longer_than_max_length +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Multiple_self_ref_ForeignKey_and_Inverse +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Multiple_self_ref_ForeignKeys_on_navigations +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Multiple_self_ref_ForeignKeys_on_properties +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Non_public_annotations_are_enabled +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Nothing_to_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Nothing_to_Required_and_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_abstract_base_class_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_base_class_property_and_overridden_property_ignores_them +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_base_class_property_discovered_through_navigation_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_base_class_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_new_property_with_same_name_as_in_unmapped_base_class_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_overridden_property_is_ignored +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_unmapped_base_class_property_and_overridden_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_unmapped_base_class_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_on_unmapped_derived_property_ignores_it +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMapped_should_propagate_down_inheritance_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_ignores_entityType +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_ignores_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_ignores_navigation +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_ignores_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_removes_ambiguity_in_relationship_building +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.NotMappedAttribute_removes_ambiguity_in_relationship_building_with_base +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.OwnedEntityTypeAttribute_configures_all_references_as_owned +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.OwnedEntityTypeAttribute_configures_one_reference_as_owned +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.PrecisionAttribute_sets_precision_for_properties_and_fields +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_ForeignKey_can_be_overridden +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_nothing +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_Required +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_Required_and_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_and_ForeignKey_to_Required_and_ForeignKey_can_be_overridden +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_to_Nothing +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_to_Nothing_inverted +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Required_to_Required_and_ForeignKey +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.RequiredAttribute_for_navigation_throws_while_inserting_null_value +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.RequiredAttribute_for_property_throws_while_inserting_null_value +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Shared_ForeignKey_to_different_principals +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.StringLength_with_value_takes_precedence_over_MaxLength +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.StringLengthAttribute_throws_while_inserting_value_longer_than_max_length +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Table_can_configure_TPT_with_Owned +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.TableNameAttribute_affects_table_name_in_TPH +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Timestamp_takes_precedence_over_MaxLength +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.UnicodeAttribute_sets_unicode_for_properties_and_fields +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_context_is_reflected_in_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_context_is_reflected_in_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_context_is_reflected_in_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_local_binding_list_that_is_Deleted_in_the_state_manager_makes_entity_Added +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_local_view_that_is_already_in_the_state_manager_and_not_Deleted_is_noop +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_local_view_that_is_Deleted_in_the_state_manager_makes_entity_Added(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_local_view_that_is_Deleted_in_the_state_manager_makes_entity_Added(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_different_type_than_local_keyless_type_has_no_effect_on_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_different_type_than_local_keyless_type_has_no_effect_on_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_different_type_than_local_keyless_type_has_no_effect_on_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_subtype_still_shows_up_in_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_subtype_still_shows_up_in_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Adding_entity_to_state_manager_of_subtype_still_shows_up_in_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Attaching_entity_to_context_is_reflected_in_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Attaching_entity_to_context_is_reflected_in_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_calls_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_contains_Unchanged_Modified_and_Added_entities_but_not_Deleted_entities(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_contains_Unchanged_Modified_and_Added_entities_but_not_Deleted_entities(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_is_cached_on_the_set +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_ToBindingList_contains_Unchanged_Modified_and_Added_entities_but_not_Deleted_entities +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.DbSet_Local_ToBindingList_is_cached_on_the_set +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_added_to_local_binding_list_are_added_to_state_manager +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_added_to_local_view_are_added_to_state_manager(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_added_to_local_view_are_added_to_state_manager(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_and_owned_children_added_to_local_view_are_added_to_state_manager(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_and_owned_children_added_to_local_view_are_added_to_state_manager(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_deleted_from_context_are_removed_from_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_deleted_from_context_are_removed_from_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_deleted_from_context_are_removed_from_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_detached_from_context_are_removed_from_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_detached_from_context_are_removed_from_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_detached_from_context_are_removed_from_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_materialized_into_context_are_reflected_in_local_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_materialized_into_context_are_reflected_in_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_materialized_into_context_are_reflected_in_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_removed_from_the_local_binding_list_are_marked_deleted_in_the_state_manager +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_removed_from_the_local_view_are_marked_deleted_in_the_state_manager(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_removed_from_the_local_view_are_marked_deleted_in_the_state_manager(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_from_deleted_to_added_are_added_to_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_from_deleted_to_added_are_added_to_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_from_deleted_to_unchanged_are_added_to_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_from_deleted_to_unchanged_are_added_to_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_to_deleted_are_removed_from_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_to_deleted_are_removed_from_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_to_detached_are_removed_from_local_view(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entities_with_state_changed_to_detached_are_removed_from_local_view(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_added_to_context_is_added_to_navigation_property_binding_list +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_added_to_navigation_property_binding_list_is_added_to_context_after_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_removed_from_navigation_property_binding_list_is_removed_from_nav_property_but_not_marked_Deleted(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_removed_from_navigation_property_binding_list_is_removed_from_nav_property_but_not_marked_Deleted(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Entity_removed_from_navigation_property_binding_list_is_removed_from_nav_property_but_not_marked_Deleted(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Load_executes_query_on_keyless_entity_type +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.LocalView_is_initialized_with_entities_from_the_context(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.LocalView_is_initialized_with_entities_from_the_context(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Remove_detached_entity_from_LocalView(toObservableCollection: False) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Remove_detached_entity_from_LocalView(toObservableCollection: True) +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Sets_containing_instances_of_subtypes_can_still_be_sorted +EntityFrameworkCore.Jet.FunctionalTests.DataBindingJetTest.Sets_of_subtypes_can_still_be_sorted +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_double_dispose_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_double_dispose_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_double_dispose_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_double_dispose_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_pool_non_derived_context(useFactory: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_pool_non_derived_context(useFactory: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_pool_non_derived_context(useFactory: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Can_pool_non_derived_context(useFactory: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Change_tracker_can_be_cleared_without_resetting_context_config +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Concurrency_test2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Concurrency_test2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: False, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: True, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: False, async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: False, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: True, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Context_configuration_is_reset(useInterface: True, async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.ContextIds_make_sense_when_not_pooling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.ContextIds_make_sense_when_not_pooling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Contexts_are_pooled(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: False, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: True, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Default_Context_configuration_is_reset(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Does_not_throw_when_parameterless_and_correct_constructor +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Does_not_throw_when_parameterless_and_correct_constructor_using_factory_pool +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Does_not_throw_when_pooled_context_constructor_has_singleton_service +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_concurrency_test(useInterface: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_concurrency_test(useInterface: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_does_not_enter_pool_twice(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_does_not_enter_pool_twice(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_does_not_enter_pool_twice(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_does_not_enter_pool_twice(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_with_standalone_lease_does_not_enter_pool_twice(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_with_standalone_lease_does_not_enter_pool_twice(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_with_standalone_lease_does_not_enter_pool_twice(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Double_dispose_with_standalone_lease_does_not_enter_pool_twice(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: False, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: False, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: False, openWithEf: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: False, openWithEf: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: True, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: False, startsOpen: True, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: False, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: False, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: False, openWithEf: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: False, openWithEf: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: True, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection_with_factory(async: True, startsOpen: True, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: False, startsOpen: False, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: False, startsOpen: False, openWithEf: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: False, startsOpen: True, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: True, startsOpen: False, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: True, startsOpen: False, openWithEf: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_external_connection(async: True, startsOpen: True, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: False, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: False, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: False, openWithEf: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: False, openWithEf: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: True, openWithEf: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: True, openWithEf: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: True, openWithEf: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection_with_factory(async: True, openWithEf: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection(async: False, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection(async: False, openWithEf: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection(async: True, openWithEf: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Handle_open_connection_when_returning_to_pool_for_owned_connection(async: True, openWithEf: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Invalid_pool_size +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Invalid_pool_size_with_factory(withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Invalid_pool_size_with_factory(withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Object_in_pool_is_disposed(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Object_in_pool_is_disposed(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Object_in_pool_is_disposed(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Object_in_pool_is_disposed(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Options_modified_in_on_configuring_with_factory +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Options_modified_in_on_configuring(useInterface: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Options_modified_in_on_configuring(useInterface: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_can_get_context_by_concrete_type_even_when_service_interface_is_used +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_context_when_context_not_pooled(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_context_when_context_not_pooled(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_context_when_context_not_pooled(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_context_when_context_not_pooled(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_contexts_when_disposed(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_contexts_when_disposed(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_contexts_when_disposed(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Pool_disposes_contexts_when_disposed(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Provider_services_are_reset(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: False, withDependencyInjection: False, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: False, withDependencyInjection: False, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: False, withDependencyInjection: True, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: False, withDependencyInjection: True, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: True, withDependencyInjection: False, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: True, withDependencyInjection: False, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: True, withDependencyInjection: True, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed_with_factory(async: True, withDependencyInjection: True, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: False, async: False, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: False, async: False, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: False, async: True, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: False, async: True, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: True, async: False, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: True, async: False, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: True, async: True, load: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Service_properties_are_disposed(useInterface: True, async: True, load: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset_with_factory(async: False, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset_with_factory(async: False, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset_with_factory(async: True, withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset_with_factory(async: True, withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset(useInterface: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset(useInterface: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset(useInterface: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.State_manager_is_reset(useInterface: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Throws_when_pooled_context_constructor_has_scoped_service +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Throws_when_pooled_context_constructor_has_second_parameter_that_cannot_be_resolved_from_service_provider +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Throws_when_pooled_context_constructor_has_single_parameter_that_cannot_be_resolved_from_service_provider +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Throws_when_used_with_parameterless_constructor_context +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: False, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: True, queryTrackingBehavior: null) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Uninitialized_context_configuration_is_reset_properly(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_behavior_with_factory(withDependencyInjection: False) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_behavior_with_factory(withDependencyInjection: True) +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_default +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_with_factory +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_with_factory_default +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_with_service_interface +EntityFrameworkCore.Jet.FunctionalTests.DbContextPoolingTest.Validate_pool_size_with_service_interface_default +EntityFrameworkCore.Jet.FunctionalTests.DefaultValuesTest.Can_use_SQL_Server_default_values +EntityFrameworkCore.Jet.FunctionalTests.DesignTimeJetTest.Can_get_migrations_services +EntityFrameworkCore.Jet.FunctionalTests.DesignTimeJetTest.Can_get_reverse_engineering_services +EntityFrameworkCore.Jet.FunctionalTests.EntitySplittingJetTest.Can_roundtrip +EntityFrameworkCore.Jet.FunctionalTests.EntitySplittingJetTest.ExecuteDelete_throws_for_entity_splitting(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EntitySplittingJetTest.ExecuteDelete_throws_for_entity_splitting(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_and_read_with_max_length_set +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_perform_query_with_ansi_strings_test +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_perform_query_with_max_length +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_data_type_nullable_shadow +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_data_type_shadow +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsBytesJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_compare_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_compare_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_filter_projection_with_captured_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_filter_projection_with_captured_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_filter_projection_with_inline_enum_variable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_filter_projection_with_inline_enum_variable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_all_non_nullable_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_non_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_nullable_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_object_backed_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_with_binary_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_with_null_binary_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_with_null_string_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_and_read_back_with_string_key +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_insert_query_multiline_string +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_perform_query_with_ansi_strings_test +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_data_type_nullable_shadow +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_data_type_shadow +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_using_any_nullable_data_type_as_literal +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_query_with_null_parameters_using_any_nullable_data_type +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_read_back_bool_mapped_as_int_through_navigation +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_read_back_mapped_enum_from_collection_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Columns_have_expected_data_types +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Object_to_string_conversion +EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Optional_datetime_reading_null_from_database +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Handles_commit_failure_async(realFailure: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Handles_commit_failure_async(realFailure: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Handles_commit_failure_multiple_SaveChanges(realFailure: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Handles_commit_failure_multiple_SaveChanges(realFailure: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Handles_commit_failure(realFailure: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Handles_commit_failure(realFailure: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_BeginTransaction_on_execution_failure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_BeginTransaction_on_execution_failure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_FromSqlRaw_on_execution_failure(externalStrategy: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_FromSqlRaw_on_execution_failure(externalStrategy: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_FromSqlRaw_on_execution_failure(externalStrategy: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_FromSqlRaw_on_execution_failure(externalStrategy: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_OpenConnection_on_execution_failure(externalStrategy: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_OpenConnection_on_execution_failure(externalStrategy: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_OpenConnection_on_execution_failure(externalStrategy: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_OpenConnection_on_execution_failure(externalStrategy: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_query_on_execution_failure(externalStrategy: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_query_on_execution_failure(externalStrategy: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_query_on_execution_failure(externalStrategy: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_query_on_execution_failure(externalStrategy: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: False, externalStrategy: False, openConnection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: False, externalStrategy: False, openConnection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: False, externalStrategy: False, openConnection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: False, externalStrategy: False, openConnection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: False, externalStrategy: True, openConnection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: False, externalStrategy: True, openConnection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: False, externalStrategy: True, openConnection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: False, externalStrategy: True, openConnection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: False, openConnection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: False, openConnection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: False, openConnection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: False, openConnection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: True, openConnection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: True, openConnection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: True, openConnection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: True, openConnection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Verification_is_retried_using_same_retry_limit +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Can_define_a_backing_field_for_a_navigation_and_query_and_update_it +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Field_mapping_with_conversion_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_fields_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_fields_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_fields_only_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_fields_only_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_reference_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_auto_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_fields_only +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_fields_only_only_for_navs_too +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_full_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_full_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_hiding_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_props_with_IReadOnlyCollection +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_read_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_read_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_write_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_collection_write_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_auto_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_fields_only +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_fields_only_only_for_navs_too +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_full_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_full_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_hiding_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_props_with_IReadOnlyCollection +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_read_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_read_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_write_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Load_reference_write_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_fields_only_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_fields_only_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Projection_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_fields_only_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_fields_only_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_constant_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_fields_only_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_fields_only_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Query_with_conditional_param_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_auto_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_auto_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_fields_only_for_navs_too(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_fields_only_for_navs_too(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_fields_only(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_fields_only(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_full_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_full_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_full_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_full_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_hiding_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_hiding_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_props_with_IReadOnlyCollection(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_props_with_IReadOnlyCollection(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_read_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_read_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_read_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_read_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_write_only_props_with_named_fields(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_write_only_props_with_named_fields(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_write_only_props(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Simple_query_write_only_props(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_auto_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_fields_only +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_fields_only_only_for_navs_too +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_full_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_full_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_hiding_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_props_with_IReadOnlyCollection +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_read_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_read_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_write_only_props +EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Update_write_only_props_with_named_fields +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Can_change_IsLoaded_flag_for_collection +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Can_change_IsLoaded_flag_for_reference_only_if_null +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_string_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_string_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_string_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_using_string_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_with_navigation_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_with_navigation_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_with_navigation_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection_with_navigation_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_many_to_one_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_dependent(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_one_to_one_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_using_string_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_using_string_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_using_string_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_using_string_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_with_navigation_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_with_navigation_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_with_navigation_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_dependent_with_navigation_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_principal_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_principal_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_principal_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_to_principal_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_using_string_to_principal_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_using_string_to_principal_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_using_string_to_principal_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_using_string_to_principal_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_with_navigation_to_principal_for_detached_throws(async: False, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_with_navigation_to_principal_for_detached_throws(async: False, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_with_navigation_to_principal_for_detached_throws(async: True, noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Load_reference_with_navigation_to_principal_for_detached_throws(async: True, noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_using_string_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_using_string_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_with_navigation_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_collection_with_navigation_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_using_string_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_using_string_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_with_navigation_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_dependent_with_navigation_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_principal_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_to_principal_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_using_string_to_principal_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_using_string_to_principal_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_with_navigation_to_principal_for_detached_throws(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.FieldsOnlyLoadJetTest.Query_reference_with_navigation_to_principal_for_detached_throws(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_base_type_using_derived_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_composite_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_using_base_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_using_base_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_using_base_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_type_using_base_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_using_base_set_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_using_base_set_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_using_base_set_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_derived_using_base_set_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_nullable_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_shadow_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Find_string_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_base_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_base_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_base_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_base_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_composite_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_composite_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_composite_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_composite_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_derived_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_derived_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_derived_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_derived_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_in_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_in_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_in_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_in_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_values_array +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_values_array_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_values_array_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_key_values_array_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_null_nullable_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_nullable_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_shadow_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_string_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_string_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_string_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Returns_null_for_string_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_with_different_namespace +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_bad_type_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_multiple_values_passed_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_wrong_number_of_values_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestContext.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_base_type_using_derived_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_composite_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_using_base_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_using_base_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_using_base_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_type_using_base_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_using_base_set_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_using_base_set_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_using_base_set_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_derived_using_base_set_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_nullable_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_shadow_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Find_string_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_base_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_base_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_base_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_base_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_composite_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_composite_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_composite_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_composite_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_derived_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_derived_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_derived_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_derived_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_in_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_in_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_in_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_in_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_values_array +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_values_array_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_values_array_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_key_values_array_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_null_nullable_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_nullable_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_shadow_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_string_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_string_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_string_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Returns_null_for_string_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_with_different_namespace +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_bad_type_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_multiple_values_passed_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_wrong_number_of_values_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestNonGeneric.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_base_type_using_derived_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_composite_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_using_base_set_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_using_base_set_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_using_base_set_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_type_using_base_set_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_using_base_set_type_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_using_base_set_type_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_using_base_set_type_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_derived_using_base_set_type_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_nullable_int_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_shadow_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_from_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_from_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_from_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_from_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_tracked +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_tracked_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_tracked_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Find_string_key_tracked_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_base_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_base_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_base_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_base_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_composite_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_composite_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_composite_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_composite_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_derived_type_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_derived_type_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_derived_type_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_derived_type_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_in_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_in_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_in_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_in_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_values_array +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_values_array_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_values_array_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_key_values_array_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_null_nullable_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_nullable_int_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_nullable_int_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_shadow_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_shadow_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_string_key_not_in_store +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_string_key_not_in_store_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_string_key_not_in_store_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Returns_null_for_string_key_not_in_store_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_with_different_namespace +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_entity_type_with_different_namespace_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_bad_type_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_multiple_values_passed_for_simple_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_multiple_values_passed_for_simple_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 0) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 1) +EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientCascadeTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetClientNoActionTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetIdentityTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetOwnedTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Alternate_key_over_foreign_key_doesnt_bypass_delete_behavior(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_add_multiple_dependents_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_add_valid_first_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_add_valid_second_dependent_when_multiple_possible_principal_sides +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_composite_FK_has_default_value_for_one_part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_FK_has_default_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_FK_has_default_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_FK_has_sentinel_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_FK_has_sentinel_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: False, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 0) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_int_PK_in_composite_key_has_sentinel_value(async: True, initialValue: 2) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Can_insert_when_nullable_bool_PK_in_composite_key_has_sentinel_value(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Changes_to_Added_relationships_are_picked_up(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_CLR_key_owned_collection(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: False, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: False, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Clearing_shadow_key_owned_collection_throws(async: True, useUpdate: True, addNew: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Delete_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Delete_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Delete_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Delete_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Detaching_dependent_entity_will_not_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Detaching_principal_entity_will_remove_references_to_it +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Discriminator_values_are_not_marked_as_unknown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Discriminator_values_are_not_marked_as_unknown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Key_and_index_properties_use_appropriate_comparer +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_dependent_appropriately_with_any_inheritance_and_stable_generator(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately_when_deep_in_graph(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: False, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_explicitly_set_stable_dependent_appropriately(async: True, useAdd: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mark_modified_one_to_many_overlapping(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mutating_discriminator_value_can_be_configured_to_allow_mutation +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Mutating_discriminator_value_throws_by_convention +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.New_FK_is_not_cleared_on_old_dependent_delete(loadNewParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.No_fixup_to_Deleted_entities(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Notification_entities_can_have_indexes +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Re_childing_parent_to_new_child_with_delete(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many_ak(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_dependent_one_to_many(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependent_leaves_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_leaf_can_be_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_AK_relationships_are_one_to_one(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Resetting_a_deleted_reference_fixes_up_again +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_owned_one_to_many +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_changed_owned_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_optional_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_removed_required_many_to_one_dependents(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Save_required_one_to_one_changed_by_reference(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Saving_multiple_modified_entities_with_the_same_key_does_not_overflow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Saving_unknown_key_value_marks_it_as_unmodified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Saving_unknown_key_value_marks_it_as_unmodified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 4, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 5, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 6, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_optional_one_to_one(changeMechanism: 7, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_relationship_that_will_later_be_deleted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_relationship_that_will_later_be_deleted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_non_PK_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 1, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 2, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sever_required_one_to_one(changeMechanism: 3, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Shadow_skip_navigation_in_base_class_is_handled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Shadow_skip_navigation_in_base_class_is_handled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: False, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Throws_for_single_property_nullable_bool_key_with_default_value_generation(async: True, initialValue: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_CLR_key_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_CLR_key_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: False, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_non_generated_shadow_key_owned_collection_throws(async: True, delete: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_shadow_key_owned_collection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_principal_with_shadow_key_owned_collection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_third_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_deleted_third_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_first_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_second_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.GraphUpdatesJetTptIdentityTest.Update_root_by_collection_replacement_of_inserted_second_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Async_methods_should_have_overload_with_cancellation_token_and_end_with_async_suffix +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Builders_have_matching_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_builder_methods_have_matching_returns +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_builder_types_have_expected_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_metadata_methods_have_expected_shape +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_metadata_types_have_expected_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Convention_metadata_types_have_matching_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Exceptions_are_valid +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Fluent_api_methods_should_not_return_void +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Generic_fluent_api_methods_should_return_generic_types +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Metadata_types_have_expected_structure +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Mutable_metadata_methods_have_expected_shape +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Mutable_metadata_types_have_matching_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Private_classes_should_be_sealed +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Public_api_bool_parameters_should_not_be_prefixed +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Public_inheritable_apis_should_be_virtual +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Readonly_metadata_methods_have_expected_name +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Runtime_metadata_types_have_matching_methods +EntityFrameworkCore.Jet.FunctionalTests.JetApiConsistencyTest.Service_implementations_should_use_dependencies_parameter_object +EntityFrameworkCore.Jet.FunctionalTests.JetComplianceTest.All_query_test_fixtures_must_implement_ITestSqlLoggerFactory +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ConstructorArgsToBuilder.Can_pass_context_options_to_constructor_and_use_in_builder +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ConstructorArgsToOnConfiguring.Can_pass_connection_string_to_constructor_and_use_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ExplicitServicesAndConfig.Can_query_with_explicit_services_and_explicit_config +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ExplicitServicesAndNoConfig.Throws_on_attempt_to_use_SQL_Server_without_providing_connection_string +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ExplicitServicesImplicitConfig.Can_query_with_explicit_services_and_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ImplicitConfigButNoServices.Throws_on_attempt_to_use_store_with_no_store_services +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ImplicitServicesAndConfig.Can_query_with_implicit_services_and_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ImplicitServicesExplicitConfig.Can_query_with_implicit_services_and_explicit_config +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+InjectContext.Can_register_context_with_DI_container_and_have_it_injected +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+InjectContextAndConfiguration.Can_register_context_and_configuration_with_DI_container_and_have_both_injected +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+NestedContext.Can_use_one_context_nested_inside_another_of_the_same_type +EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+NoServicesAndNoConfig.Throws_on_attempt_to_use_context_with_no_store +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_and_remove_entities_with_keys_of_different_type +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_table_splitting_dependent_after_principal +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_enumerate_entity_set +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 1, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 2, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 3, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 4, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 1) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 3) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 4) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 7, courseCount: 7) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_non_owner_principal_for_owned +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_TPT_dependents_with_identity +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_remove_multiple_byte_array_as_key +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_replace_identifying_FK_entity_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_changed_only_notification_entities +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_full_notification_entities +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_snapshot_change_tracking +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_run_linq_query_on_entity_set +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_run_linq_query_on_entity_set_with_value_buffer_reader +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_save_changes +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_save_changes_in_tracked_entities +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_use_string_enum_or_byte_array_as_key +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Throws_when_adding_table_splitting_dependent_without_principal +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Tracking_entities_asynchronously_returns_tracked_entities_back +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddCheckConstraint_generates_exec_when_idempotent +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_datetime_with_defaultValue_sql +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_fixed_length_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_maxLength_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_maxLength_overridden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_precision_and_scale_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_precision_and_scale_overridden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_rowversion_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_rowversion_overridden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_unicode_no_model +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_with_unicode_overridden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_without_column_type +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddForeignKeyOperation_without_principal_columns +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.All_tests_must_be_overriden +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_add_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_remove_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_with_added_index +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_with_added_index_no_oldType +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_with_identity_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_with_index_no_oldColumn +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AlterColumnOperation_without_column_type +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.CreateDatabaseOperation +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.CreateIndex_generates_exec_when_filter_and_idempotent +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DefaultValue_with_line_breaks_2(isUnicode: False) +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DefaultValue_with_line_breaks_2(isUnicode: True) +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DefaultValue_with_line_breaks(isUnicode: False) +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DefaultValue_with_line_breaks(isUnicode: True) +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_all_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_all_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_required_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_required_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_throws_for_missing_column_types +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_throws_for_types_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DeleteDataOperation_throws_for_values_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.DropDatabaseOperation +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_required_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_required_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_required_args_multiple_rows +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_missing_column_types +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_missing_entity_type +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_missing_property +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_types_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_unsupported_column_types +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.InsertDataOperation_throws_for_values_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.RenameIndexOperations_throws_when_no_table +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.RenameTableOperation +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.RenameTableOperation_legacy +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.SqlOperation +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_all_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_all_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_all_args_composite_multi +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_all_args_multi +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args_composite +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args_composite_multi +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args_multi +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_required_args_multiple_rows +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_key_types_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_key_values_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_missing_column_types +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_row_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_types_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.UpdateDataOperation_throws_for_values_count_mismatch +EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Calling_AddEntityFramework_explicitly_does_not_change_services +EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Repeated_calls_to_add_do_not_modify_collection +EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Required_services_are_registered_with_expected_lifetimes +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_explicit_value_throws_when_readonly_before_save +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_int_enum_to_Identity_column +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_string_to_Identity_column_using_value_converter +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_uint_to_Identity_column_using_value_converter +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_client_generated_GUID_key +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_default_keys +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_non_default_keys +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_with_default_keys +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_Identity_column +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_implicit_default_keys +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_non_key_default_value +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_non_key_default_value_readonly +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_ValueGeneratedOnAdd_GUID_nonkey_property_throws +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_array_of_array_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_array_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_array_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_binary_JSON_values(expected: "{\"Prop\":[[\"AAEC\",\"AQ==\",\"TQ==\"],[],[\"Tg=="···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_as_collection +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "1,2,3,4", json: "{\"Prop\":\"AQIDBA==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "255,255,255,255", json: "{\"Prop\":\"/////w==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_bool_JSON_values(value: False, json: "{\"Prop\":false}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_bool_JSON_values(value: True, json: "{\"Prop\":true}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_enum_JSON_values(value: 255, json: "{\"Prop\":255}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_byte_JSON_values(value: 255, json: "{\"Prop\":255}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: ' ', json: "{\"Prop\":\" \"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: '\0', json: "{\"Prop\":\"\\u0000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: "Z", json: "{\"Prop\":\"Z\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: 0xffff, json: "{\"Prop\":\"\\uFFFF\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ASCII_string_JSON_values(storeType: null) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_JSON_values(expected: "{\"Prop\":[\"AAAAAQ==\",\"/////w==\",\"\",\"AQIDBA"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_bool_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_bool_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_byte_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_byte_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_char_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_char_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateOnly_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateOnly_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00\",\"2023-05-29T10"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTimeOffset_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00+00:00\",\"2023-05"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,792281"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_with_precision_and_scale_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,792281"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_double_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_double_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_fixed_length_string_JSON_values(storeType: null) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_float_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_Guid_converted_to_bytes_JSON_values(expected: "{\"Prop\":[\"AAAAAAAAAAAAAAAAAAAAAA==\",\"LyREjD+O"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_GUID_JSON_values(expected: "{\"Prop\":[\"00000000-0000-0000-0000-000000000000\"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_enum_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_with_converter_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_IP_address_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_long_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_long_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_JSON_values(expected: "{\"Prop\":[\"AAAAAQ==\",null,\"/////w==\",\"\",\"A"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_bool_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_bool_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_byte_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_byte_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_char_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_char_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateOnly_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateOnly_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00\",null,\"2023-05-"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTimeOffset_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00+00:00\",\"2023-05"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_decimal_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,null,7"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_double_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_double_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_float_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_GUID_JSON_values(expected: "{\"Prop\":[\"00000000-0000-0000-0000-000000000000\"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_enum_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_with_converter_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_IP_address_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_long_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_long_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_physical_address_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_sbyte_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_sbyte_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_sbyte_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_short_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_short_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_string_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_TimeOnly_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_TimeSpan_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_uint_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_uint_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ulong_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ulong_enum_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ulong_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_URI_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ushort_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_ushort_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_physical_address_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_sbyte_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_sbyte_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_sbyte_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_short_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_short_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_string_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_TimeOnly_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_TimeSpan_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_uint_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_uint_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ulong_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ulong_enum_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ulong_values_with_converter_as_JSON_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_URI_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ushort_enum_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ushort_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_converted_type_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_converted_type_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_converted_type_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_converted_type_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "0.0.0.0", json: "{\"Prop\":\"0.0.0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "1/1/0001", json: "{\"Prop\":\"0001-01-01\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "12/31/9999", json: "{\"Prop\":\"9999-12-31\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "5/29/2023", json: "{\"Prop\":\"2023-05-29\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTime_JSON_values(value: "0001-01-01T00:00:00.0000000", json: "{\"Prop\":\"0001-01-01T00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTime_JSON_values(value: "2023-05-29T10:52:47.2064353", json: "{\"Prop\":\"2023-05-29T10:52:47.2064353\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTime_JSON_values(value: "9999-12-31T23:59:59.9999999", json: "{\"Prop\":\"9999-12-31T23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01T00:00:00-01:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01T00:00:00-03:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTimeOffset_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29T11:11:15.5672854+04:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateTimeOffset_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31T23:59:59.9999999+02:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_decimal_JSON_values(value: "-79228162514264337593543950335", json: "{\"Prop\":-79228162514264337593543950335}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_decimal_JSON_values(value: "0.0", json: "{\"Prop\":0.0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_decimal_JSON_values(value: "1.1", json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_decimal_JSON_values(value: "79228162514264337593543950335", json: "{\"Prop\":79228162514264337593543950335}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_double_JSON_values(value: -1.7976931348623157E+308, json: "{\"Prop\":-1.7976931348623157E+308}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_double_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_double_JSON_values(value: 1.1000000000000001, json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_double_JSON_values(value: 1.7976931348623157E+308, json: "{\"Prop\":1.7976931348623157E+308}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_enum_char_converted_type_JSON_values(value: FieldA, json: "{\"Prop\":\"A\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_enum_char_converted_type_JSON_values(value: FieldB, json: "{\"Prop\":\"B\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: -3.40282347E+38, json: "{\"Prop\":-3.4028235E+38}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 1.10000002, json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":3.4028235E+38}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "0.0.0.0", json: "{\"Prop\":\"0.0.0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_line_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_binary_JSON_values(expected: "{\"Prop\":[[\"AAEC\",\"AQ==\",\"TQ==\"],[],[\"Tg=="···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_array_of_binary_JSON_values(expected: "{\"Prop\":[[[[\"AAEC\",\"AQ==\",\"TQ==\"]],[],[[],"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_list_of_list_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_multi_line_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_multi_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "1,2,3,4", json: "{\"Prop\":\"AQIDBA==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "255,255,255,255", json: "{\"Prop\":\"/////w==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: "1,2,3,4", json: "{\"Prop\":\"AQIDBA==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: "255,255,255,255", json: "{\"Prop\":\"/////w==\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_as_string_JSON_values(value: False, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_as_string_JSON_values(value: True, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_JSON_values(value: False, json: "{\"Prop\":false}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_bool_JSON_values(value: True, json: "{\"Prop\":true}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_as_string_JSON_values(value: 255, json: "{\"Prop\":\"255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: 255, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_JSON_values(value: 255, json: "{\"Prop\":255}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_JSON_values(value: 255, json: "{\"Prop\":255}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_byte_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: ' ', json: "{\"Prop\":\" \"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: '\0', json: "{\"Prop\":\"\\u0000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: 'Z', json: "{\"Prop\":\"Z\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: 0xffff, json: "{\"Prop\":\"\\uFFFF\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: ' ', json: "{\"Prop\":\" \"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: '\0', json: "{\"Prop\":\"\\u0000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: 'Z', json: "{\"Prop\":\"Z\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: 0xffff, json: "{\"Prop\":\"\\uFFFF\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_char_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_converted_type_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_as_string_JSON_values(value: "1/1/0001", json: "{\"Prop\":\"0001-01-01\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_as_string_JSON_values(value: "12/31/9999", json: "{\"Prop\":\"9999-12-31\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_as_string_JSON_values(value: "5/29/2023", json: "{\"Prop\":\"2023-05-29\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_JSON_values(value: "1/1/0001", json: "{\"Prop\":\"0001-01-01\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_JSON_values(value: "12/31/9999", json: "{\"Prop\":\"9999-12-31\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_JSON_values(value: "5/29/2023", json: "{\"Prop\":\"2023-05-29\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateOnly_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000", json: "{\"Prop\":\"0001-01-01 00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_as_string_JSON_values(value: "2023-05-29T10:52:47.2064353", json: "{\"Prop\":\"2023-05-29 10:52:47.2064353\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_as_string_JSON_values(value: "9999-12-31T23:59:59.9999999", json: "{\"Prop\":\"9999-12-31 23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: "0001-01-01T00:00:00.0000000", json: "{\"Prop\":\"0001-01-01T00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: "2023-05-29T10:52:47.2064353", json: "{\"Prop\":\"2023-05-29T10:52:47.2064353\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: "9999-12-31T23:59:59.9999999", json: "{\"Prop\":\"9999-12-31T23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01 00:00:00-01:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01 00:00:00-03:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29 11:11:15.5672854\\u002B04:0"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31 23:59:59.9999999\\u002B02:0"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01T00:00:00-01:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01T00:00:00-03:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29T11:11:15.5672854+04:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31T23:59:59.9999999+02:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: "-79228162514264337593543950335", json: "{\"Prop\":\"-79228162514264337593543950335\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: "0.0", json: "{\"Prop\":\"0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: "1.1", json: "{\"Prop\":\"1.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: "79228162514264337593543950335", json: "{\"Prop\":\"79228162514264337593543950335\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: "-79228162514264337593543950335", json: "{\"Prop\":-79228162514264337593543950335}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: "0.0", json: "{\"Prop\":0.0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: "1.1", json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: "79228162514264337593543950335", json: "{\"Prop\":79228162514264337593543950335}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_decimal_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: -1.7976931348623157E+308, json: "{\"Prop\":\"-1.7976931348623157E\\u002B308\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: 1.1000000000000001, json: "{\"Prop\":\"1.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: 1.7976931348623157E+308, json: "{\"Prop\":\"1.7976931348623157E\\u002B308\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: -1.7976931348623157E+308, json: "{\"Prop\":-1.7976931348623157E+308}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: 1.1000000000000001, json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: 1.7976931348623157E+308, json: "{\"Prop\":1.7976931348623157E+308}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_double_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: -3.40282347E+38, json: "{\"Prop\":\"-3.4028235E\\u002B38\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: 1.10000002, json: "{\"Prop\":\"1.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":\"3.4028235E\\u002B38\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: -3.40282347E+38, json: "{\"Prop\":-3.4028235E+38}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 1.10000002, json: "{\"Prop\":1.1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":3.4028235E+38}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: -2147483648, json: "{\"Prop\":\"-2147483648\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: 2147483647, json: "{\"Prop\":\"2147483647\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: -2147483648, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Default\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: 2147483647, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: 2147483647, json: "{\"Prop\":2147483647}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "0.0.0.0", json: "{\"Prop\":\"0.0.0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "0.0.0.0", json: "{\"Prop\":\"0.0.0.0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_line_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: -9223372036854775808, json: "{\"Prop\":\"-9223372036854775808\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: 9223372036854775807, json: "{\"Prop\":\"9223372036854775807\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: -9223372036854775808, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Default\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: 9223372036854775807, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_long_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_multi_line_string +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_multi_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_as_string_JSON_values(value: "00-11-22-33-44-55", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_as_string_JSON_values(value: "0011.2233.4455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_as_string_JSON_values(value: "001122334455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_JSON_values(value: "00-11-22-33-44-55", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_JSON_values(value: "0011.2233.4455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_JSON_values(value: "001122334455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_physical_address_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_point +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_point_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_polygon +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_polygon_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: -128, json: "{\"Prop\":\"-128\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: 127, json: "{\"Prop\":\"127\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: -128, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Default\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: 127, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: -128, json: "{\"Prop\":-128}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: 127, json: "{\"Prop\":127}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: -128, json: "{\"Prop\":-128}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: 127, json: "{\"Prop\":127}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_sbyte_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: -32768, json: "{\"Prop\":\"-32768\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: 32767, json: "{\"Prop\":\"32767\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: -32768, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Default\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: 32767, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: -32768, json: "{\"Prop\":-32768}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: 32767, json: "{\"Prop\":32767}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: -32768, json: "{\"Prop\":-32768}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: 32767, json: "{\"Prop\":32767}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_as_string_JSON_values(value: "00:00:00.0000000", json: "{\"Prop\":\"00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_as_string_JSON_values(value: "11:05:12.3456789", json: "{\"Prop\":\"11:05:12.3456789\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_as_string_JSON_values(value: "23:59:59.9999999", json: "{\"Prop\":\"23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_JSON_values(value: "00:00:00.0000000", json: "{\"Prop\":\"00:00:00.0000000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_JSON_values(value: "11:05:12.3456789", json: "{\"Prop\":\"11:05:12.3456789\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_JSON_values(value: "23:59:59.9999999", json: "{\"Prop\":\"23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeOnly_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: "-10675199.02:48:05.4775808", json: "{\"Prop\":\"-10675199.02:48:05.4775808\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: "00:00:00", json: "{\"Prop\":\"00:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: "10675199.02:48:05.4775807", json: "{\"Prop\":\"10675199.02:48:05.4775807\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: "12:23:23.8018854", json: "{\"Prop\":\"12:23:23.8018854\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: "-10675199.02:48:05.4775808", json: "{\"Prop\":\"-10675199:2:48:05.4775808\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: "00:00:00", json: "{\"Prop\":\"0:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: "10675199.02:48:05.4775807", json: "{\"Prop\":\"10675199:2:48:05.4775807\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: "12:23:23.8018854", json: "{\"Prop\":\"12:23:23.8018854\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_TimeSpan_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_as_string_JSON_values(value: 4294967295, json: "{\"Prop\":\"4294967295\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: 4294967295, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_JSON_values(value: 4294967295, json: "{\"Prop\":4294967295}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_JSON_values(value: 4294967295, json: "{\"Prop\":4294967295}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_uint_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_as_string_JSON_values(value: 18446744073709551615, json: "{\"Prop\":\"18446744073709551615\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: 18446744073709551615, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 65535, json: "{\"Prop\":\"65535\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: 0, json: "{\"Prop\":\"Min\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: 1, json: "{\"Prop\":\"One\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: 65535, json: "{\"Prop\":\"Max\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: 77, json: "{\"Prop\":\"77\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_as_string_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_JSON_values(value: 65535, json: "{\"Prop\":65535}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_enum_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_JSON_values(value: 65535, json: "{\"Prop\":65535}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_JSON_values(value: null, json: "{\"Prop\":null}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_physical_address_JSON_values(value: "00-11-22-33-44-55", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_physical_address_JSON_values(value: "0011.2233.4455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_physical_address_JSON_values(value: "001122334455", json: "{\"Prop\":\"001122334455\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_M +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_M_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_Z +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_Z_and_M +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_Z_and_M_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_point_with_Z_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_typed_as_geometry +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_typed_as_geometry_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_typed_as_nullable_geometry +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_polygon_typed_as_nullable_geometry_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_enum_JSON_values(value: -128, json: "{\"Prop\":-128}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_enum_JSON_values(value: 127, json: "{\"Prop\":127}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_JSON_values(value: -128, json: "{\"Prop\":-128}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_sbyte_JSON_values(value: 127, json: "{\"Prop\":127}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_enum_JSON_values(value: -32768, json: "{\"Prop\":-32768}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_enum_JSON_values(value: 32767, json: "{\"Prop\":32767}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: -32768, json: "{\"Prop\":-32768}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 32767, json: "{\"Prop\":32767}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeOnly_JSON_values(value: "00:00:00.0000000", json: "{\"Prop\":\"00:00:00.0000000\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeOnly_JSON_values(value: "11:05:12.3456789", json: "{\"Prop\":\"11:05:12.3456789\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeOnly_JSON_values(value: "23:59:59.9999999", json: "{\"Prop\":\"23:59:59.9999999\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeSpan_JSON_values(value: "-10675199.02:48:05.4775808", json: "{\"Prop\":\"-10675199:2:48:05.4775808\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeSpan_JSON_values(value: "00:00:00", json: "{\"Prop\":\"0:00:00\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeSpan_JSON_values(value: "10675199.02:48:05.4775807", json: "{\"Prop\":\"10675199:2:48:05.4775807\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeSpan_JSON_values(value: "12:23:23.8018854", json: "{\"Prop\":\"12:23:23.8018854\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_enum_JSON_values(value: 4294967295, json: "{\"Prop\":4294967295}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_uint_JSON_values(value: 4294967295, json: "{\"Prop\":4294967295}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_enum_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 65535, json: "{\"Prop\":65535}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_JSON_values(value: 0, json: "{\"Prop\":0}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_JSON_values(value: 1, json: "{\"Prop\":1}") +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_JSON_values(value: 65535, json: "{\"Prop\":65535}") +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_bare_class_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_bare_class_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_class_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_class_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_class_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_class_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_binary_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_binary_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_binary_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_binary_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_comparable_struct_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_enumerable_class_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_binary_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_binary_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_binary_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_binary_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_generic_comparable_struct_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_binary_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_binary_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_binary_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_binary_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_struct_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_structural_struct_binary_key_and_optional_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_structural_struct_binary_key_and_optional_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_structural_struct_binary_key_and_required_dependents +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_insert_and_read_back_with_structural_struct_binary_key_and_required_dependents_with_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_binary_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_comparable_bytes_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_comparable_int_class_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_comparable_int_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_generic_comparable_bytes_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_generic_comparable_int_class_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_generic_comparable_int_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_int_bare_class_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_int_class_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_int_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_structural_generic_comparable_bytes_struct_key +EntityFrameworkCore.Jet.FunctionalTests.KeysWithConvertersJetTest.Can_query_and_update_owned_entity_with_value_converter +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Can_serialize_proxies_to_JSON +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Can_use_proxies_from_multiple_threads_when_navigations_already_loaded(noTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Can_use_proxies_from_multiple_threads_when_navigations_already_loaded(noTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Detected_dependent_reference_navigation_changes_are_detected_and_marked_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Detected_principal_reference_navigation_changes_are_detected_and_marked_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_many_non_virtual_collection_of_owned_types +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_many_non_virtual_collection_of_owned_types_with_explicit_lazy_load +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_many_virtual_collection_of_owned_types +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_many_virtual_collection_of_owned_types_with_explicit_lazy_load +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_one_non_virtual_reference_to_owned_type +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Eager_load_one_to_one_virtual_reference_to_owned_type +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Entity_equality_with_proxy_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Entity_equality_with_proxy_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded_no_tracking(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded_no_tracking(queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_for_detached_is_no_op +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_for_no_tracking_does_not_throw_if_populated +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_not_found(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Added, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Added, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Added, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Deleted, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Deleted, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Deleted, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Detached, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Detached, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Detached, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Modified, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Modified, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Modified, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Unchanged, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Unchanged, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_collection(state: Unchanged, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_found_FK(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_changed_non_found_FK(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, useAttach: False, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, useAttach: True, useDetach: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, useAttach: True, useDetach: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Detached) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_one_to_one_reference_with_recursive_property(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_reference_to_dependent_for_detached_is_no_op +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_reference_to_dependent_for_no_tracking_does_not_throw_if_populated +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_reference_to_principal_for_detached_is_no_op +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_load_reference_to_principal_for_no_tracking_does_not_throw_if_populated +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_already_loaded_owned_types +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_alternate_model +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_multiple_queries +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_multiple_queries_using_Count +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_finds_correct_entity_type_with_opaque_predicate_and_multiple_queries +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_handles_shadow_nullable_GUID_FK_in_TPH_model +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Lazy_loading_shares_service_property_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Load_collection(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_collection_is_not_lazy_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_one_to_many_reference_to_principal_is_not_lazy_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_one_to_one_reference_to_principal_is_not_lazy_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_reference_to_dependent_is_not_lazy_loaded +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Setting_reference_to_owned_type_to_null_is_allowed_on_non_virtual_navigation +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Setting_reference_to_owned_type_to_null_is_allowed_on_virtual_navigation +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Top_level_projection_track_entities_before_passing_to_client_method +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_dependents_are_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_references_to_principal_are_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Can_change_IsLoaded_flag_for_collection +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Can_change_IsLoaded_flag_for_reference_only_if_null +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Fixup_one_to_one_reference_after_FK_change_without_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Fixup_reference_after_FK_change_without_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_already_partially_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_many_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Added, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Deleted, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Detached, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Modified, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded_full_loader_constructor_injection(state: Unchanged, deleteOrphansTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Added, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Detached, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Modified, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: Immediate, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, cascadeDeleteTiming: OnSaveChanges, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_dependent(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_not_found(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_delegate_loader_with_state_property_injection(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_full_loader_constructor_injection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_null_FK(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Added, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Detached, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Modified, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_load_one_to_one_reference_to_principal(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_is_thread_safe(noTracking: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_is_thread_safe(noTracking: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_is_thread_safe(noTracking: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_is_thread_safe(noTracking: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Lazy_loading_uses_field_access_when_abstract_base_class_navigation +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_many_to_one_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_dependent(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_PK_to_PK_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_dependent(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Deleted, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Detached, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Detached, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Detached, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Detached, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Modified, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: False, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_already_loaded(state: Unchanged, async: True, cascadeDeleteTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_not_found(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_null_FK(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal_when_NoTracking_behavior(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Load_one_to_one_reference_to_principal(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Setting_navigation_to_null_is_detected_by_local_DetectChanges +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.ForeignKeyPropertiesMappedToUnrelatedTables_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.IndexPropertiesBothMappedAndNotMappedToTable_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.InvalidIncludePathError_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_command_timeout +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_default_options +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_max_batch_size +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_migrations_assembly +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_migrations_history_table +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_migrations_history_table_schema +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_no_tracking +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_relational_nulls +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_sensitive_data_logging +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.StoredProcedureConcurrencyTokenNotMapped_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.UnnamedIndexPropertiesMappedToNonOverlappingTables_throws_by_default +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_filtered_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_filtered_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include_for_inverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include_for_inverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include_for_same_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include_for_same_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query_with_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_with_Include_marks_only_left_as_loaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Query_with_Include_marks_only_left_as_loaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded_unidirectional(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Unchanged, lazy: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped_unidirectional(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Added, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Added, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Added, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Added, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Detached, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws_unidirectional(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: False, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_for_detached_throws(async: True, queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_unidirectional(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped_unidirectional(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Added, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Added, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Added, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Added, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Deleted, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Detached, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Modified, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: False, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded_untyped(state: Unchanged, async: True, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_already_loaded(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_composite_key(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_not_found_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped_unidirectional(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_untyped(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include_and_projection_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include_and_projection_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_filtered_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_inverse_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_inverse_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_inverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_inverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_same_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_for_same_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_join_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_join_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query_with_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection_using_Query(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Added, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Deleted, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Detached, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Modified, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTracking, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: NoTrackingWithIdentityResolution, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Load_collection(state: Unchanged, queryTrackingBehavior: TrackAll, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws_unidirectional(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws_unidirectional(queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws_unidirectional(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: NoTrackingWithIdentityResolution) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_collection_for_detached_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_filtered_Include_marks_only_left_as_loaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_Include_marks_only_left_as_loaded_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_Include_marks_only_left_as_loaded_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_Include_marks_only_left_as_loaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyLoadJetTest.Query_with_Include_marks_only_left_as_loaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingGeneratedKeysJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyGeneratedKeysJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Complex_collection_mapped_to_json_can_specify_column_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Complex_collection_mapped_to_json_uses_property_name_when_column_name_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.ComplexCollection_can_have_nested_complex_properties_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Throws_for_incompatible_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexCollection.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_call_PrimitiveCollection_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_call_Property_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_shadow_primitive_collections_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_map_a_tuple +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_view_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_view_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_can_be_configured_as_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_can_be_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_property_mapped_to_json_can_specify_column_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_property_mapped_to_json_uses_property_name_when_column_name_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_property_mapped_to_json_with_nested_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_type_discriminator_mapped_to_json_has_default_json_property_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_incompatible_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_primitive_collection_with_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_before_base_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Base_type_can_be_discovered_after_creating_foreign_keys_on_derived +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Base_types_are_mapped_correctly_if_discovered_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_add_check_constraints +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_create_relationship_between_base_type_and_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_get_set_discriminator_mapping_is_complete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_ignore_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_map_derived_self_ref_many_to_one +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_map_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_match_navigation_to_derived_type_with_inverse_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_override_TPC_with_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_promote_shadow_fk_to_the_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_reconfigure_inherited_intraHierarchical_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_remove_objects_in_derived_type_which_was_set_using_data_annotation_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_set_and_remove_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_specify_discriminator_values_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_specify_discriminator_without_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Cannot_remove_objects_in_derived_type_which_was_set_using_explicit_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_removed_when_covered_by_an_inherited_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_removed_when_covered_by_an_inherited_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Inherited_clr_properties_are_mapped_to_the_same_column +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Ordering_of_entityType_discovery_does_not_affect_key_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_many_to_one_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_with_fk_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_reverted_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_with_fk_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Relationships_are_discovered_on_the_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Relationships_on_derived_types_are_discovered_first_if_base_is_one_sided +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Removing_a_key_triggers_fk_discovery_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Removing_derived_removes_it_from_directly_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Setting_base_type_handles_require_value_generator_properly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Setting_base_type_to_null_fixes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPC_identifying_FKs_are_created_on_all_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPT_identifying_FK_is_created_only_on_declaring_table +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPT_index_can_use_inherited_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_join_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_shared_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_ignore_existing_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_ForeignKeyAttribute_with_InversePropertyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_default_name_and_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_default_name_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Discovers_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_implicit_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.FK_properties_matching_navigations_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.FK_properties_matching_types_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_configures_the_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_matching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_mismatching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.IsRequired_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_entity_type_uses_default_schema_if_related_are_different +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_entity_type_uses_same_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_type_is_automatically_configured_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_type_is_not_automatically_configured_when_navigations_are_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_a_shadow_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_no_navigations_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_only_Has_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_only_With_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Overrides_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Skip_navigation_field_can_be_set_via_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_conflicting_many_to_one_on_left +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_conflicting_many_to_one_on_right +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_self_ref_using_self +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_self_ref_with_same_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Unconfigured_many_to_many_navigations_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.UsingEntity_with_shared_type_passed_when_marked_as_shared_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.UsingEntity_with_shared_type_passes_when_configured_as_shared +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Access_mode_can_be_overridden_at_entity_and_navigation_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_does_not_use_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_finds_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_matches_shadow_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_overrides_existing_FK_if_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_with_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_no_navigations_with +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Explicitly_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Relationships_discovered_when_ambiguity_on_the_inverse_is_resolved +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_primitive_collection_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_contained_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_index_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_multiple_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_avoid_attributes_when_discovering_properties(useAttributes: False) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_Property_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_get_entity_builder_for_clr_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_field_on_a_keyless_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_field_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_property_that_is_part_of_explicit_entity_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_override_navigations_as_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_override_navigations_as_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_clr_property_when_property_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_collation_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_collation_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_entity_key_from_clr_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_entity_key_from_property_names_when_mixed_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_element_type_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_clr_property_when_property_ignored_on_keyless +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_with_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_fixed_length_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_fixed_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_model_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_store_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_store_type_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_upgrade_candidate_key_to_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_view_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_view_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Cannot_add_shared_type_when_non_shared_exists +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_removed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_removed_by_generic_method +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_replaced +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection_when_base_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_are_nullable_by_default_if_the_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_max_length +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_unicode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_default_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_default_unicode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_no_max_length_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Entity_key_on_secondary_property_is_discovered_by_convention_when_first_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Entity_key_on_shadow_property_is_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.EntityType_name_is_stored_culture_invariantly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_base_type_removes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_entity_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Indexes_can_have_same_name_across_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Int32_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_for_primitive_collection_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_two_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_throws_for_non_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Model_is_readonly_after_Finalize +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Nested_primitive_collection_are_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Object_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Object_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PrimitiveCollection_Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Private_primitive_collection_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Private_property_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Property_bag_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_alternate_key_makes_properties_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_sentinel_throws_for_noncompatible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_sentinel_throws_for_null_on_nonnullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_bad_value_generator_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_conflicting_base_configurations_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_int_keyed_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_primitive_collection_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_base_type_is_not_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_type_on_primitive_collection_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Ambiguous_relationship_candidate_does_not_block_creating_further_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Annotations_are_preserved_when_rebuilding +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Attempt_to_configure_Navigation_property_which_is_actually_a_Property_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_pointed_by_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_on_principal_type_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_semi_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_replaced_with_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_specify_requiredness_after_OnDelete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_matches_shadow_FK_property_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_entity_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_navigation_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_properties_are_on_both_sides +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_no_matching_properties_either_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_overlapping_foreign_keys_with_different_nullability +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_both_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_fk_configuring_using_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_no_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Do_not_match_non_unique_FK_when_overlap_with_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Explicit_principal_key_is_not_replaced_with_new_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasMany_with_a_collection_navigation_CLR_property_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasNoKey_call_on_principal_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasNoKey_call_on_principal_with_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Keyless_type_discovered_before_referenced_entity_type_does_not_leave_temp_id +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Keyless_type_with_unmapped_collection_navigations_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_overrides_NRT_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.One_to_many_relationship_has_no_ambiguity_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Principal_key_by_convention_is_not_replaced_with_new_incompatible_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Reference_navigation_from_keyless_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.RemoveKey_does_not_add_back_foreign_key_pointing_to_the_same_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Shadow_property_created_for_foreign_key_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_existing_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_keyless_type_as_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_when_foreign_key_references_shadow_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.WithMany_call_on_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.WithMany_pointing_to_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_be_defined_before_the_PK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_be_defined_before_the_PK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_foreign_key_attribute_is_used +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_navigations_have_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_user_specifies_principal_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_user_specify_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_self_referencing_relationship_without_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_two_FKs_using_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_dependent_side_specified_explicitly_on_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_fk_before_configuring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_fk_before_reconfiguring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_identifying_fk +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_pk_as_fk_if_principal_end_is_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_PK_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_FK_properties_as_PK_sets_DeleteBehavior_Cascade +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_inverts_the_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_throws_if_not_invertible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_throws_when_there_is_an_explicit_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_creates_new_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_new_FK_over_PK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_removes_existing_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_shadow_FK_if_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_field_backed_FK_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_index_even_if_covered_by_an_alternate_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_one_to_one_relationship_with_single_ref_as_principal_to_dependent_if_matching_properties_are_on_the_other_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_by_convention_inverted +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_on_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Does_not_use_existing_FK_when_principal_key_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Does_not_use_pk_as_fk_if_principal_end_is_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Foreign_key_properties_are_not_discovered_for_one_to_one_relationship_with_ambiguous_principal_end +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Ignoring_properties_on_principal_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Ignoring_properties_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Inverse_discovered_after_entity_unignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.IsRequired_throws_principal_end_is_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Multiple_self_referencing_navigations_throw_as_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.OneToOne_can_have_PK_explicitly_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_FK_if_specified_PK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_FK_if_specified_PK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_PK_if_specified_FK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_PK_if_specified_FK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_in_reverse_order_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_using_principal_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_FK_when_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_unidirectional_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_unidirectional_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Replaces_existing_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_PKs +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_mixed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property_anymore +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_ambiguous_FK_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_multiple_navigations_are_pointing_to_same_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_not_principal_or_dependent_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_FK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_FK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_PK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_PK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_duplicate_navigation_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_existing_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_existing_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_two_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_optional_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Uses_composite_PK_for_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Ambiguous_relationship_between_owned_types_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Attempt_to_create_OwnsMany_on_a_reference_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Attempt_to_create_OwnsOne_on_a_collection_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_call_Owner_fluent_api_after_calling_Entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_chain_owned_type_collection_configurations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_another_relationship_to_owner +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_chained_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_chained_ownerships_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_fk_on_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_on_derived_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_on_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_many_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_entity_and_property_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key_or_candidate +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Array) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable | Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic | Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_inverse +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_ownership_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_property_and_owned_entity_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_self_ownership +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_single_owned_type_using_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_have_multiple_owned_types_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_base_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_base_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_derived_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_derived_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_sproc_mapping_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_table_splitting_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_view_splitting_with_owned_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Changing_ownership_uniqueness_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.CLR_base_type_can_be_owned_when_not_in_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Configuring_base_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Deriving_from_owned_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_mapped_to_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_mapped_to_view_with_custom_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_custom_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_tph_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Navigations_on_owned_type_can_set_access_mode_using_expressions +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Navigations_on_owned_type_collection_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_type_collections_are_mapped_to_same_tables_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_types_use_table_splitting_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.OwnedType_can_derive_from_Collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owner_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 17, mainScale: 4, otherPrecision: 17, otherScale: 4, onePrecision: 17, oneScale: 4, manyPrecision: 17, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: null, mainScale: null, otherPrecision: null, otherScale: null, onePrecision: null, oneScale: null, manyPrecision: null, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained_on_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Reconfiguring_entity_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Reconfiguring_owned_type_as_non_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Removing_ambiguous_inverse_allows_navigations_to_be_discovered +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_can_be_used_as_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_entity_types_with_FK_to_another_entity_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_used_as_owned_type_throws_for_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Throws_on_FK_matching_two_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Complex_collection_mapped_to_json_can_specify_column_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Complex_collection_mapped_to_json_uses_property_name_when_column_name_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.ComplexCollection_can_have_nested_complex_properties_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Throws_for_incompatible_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexCollection.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_call_PrimitiveCollection_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_call_Property_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_shadow_primitive_collections_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_map_a_tuple +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_view_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_view_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_can_be_configured_as_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_can_be_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_property_mapped_to_json_can_specify_column_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_property_mapped_to_json_uses_property_name_when_column_name_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_property_mapped_to_json_with_nested_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_type_discriminator_mapped_to_json_has_default_json_property_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_incompatible_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_primitive_collection_with_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_before_base_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Base_type_can_be_discovered_after_creating_foreign_keys_on_derived +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Base_types_are_mapped_correctly_if_discovered_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_add_check_constraints +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_create_relationship_between_base_type_and_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_get_set_discriminator_mapping_is_complete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_ignore_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_map_derived_self_ref_many_to_one +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_map_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_match_navigation_to_derived_type_with_inverse_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_override_TPC_with_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_promote_shadow_fk_to_the_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_reconfigure_inherited_intraHierarchical_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_remove_objects_in_derived_type_which_was_set_using_data_annotation_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_set_and_remove_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_specify_discriminator_values_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_specify_discriminator_without_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Cannot_remove_objects_in_derived_type_which_was_set_using_explicit_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_removed_when_covered_by_an_inherited_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_removed_when_covered_by_an_inherited_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Inherited_clr_properties_are_mapped_to_the_same_column +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Ordering_of_entityType_discovery_does_not_affect_key_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_many_to_one_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_with_fk_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_reverted_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_with_fk_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Relationships_are_discovered_on_the_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Relationships_on_derived_types_are_discovered_first_if_base_is_one_sided +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Removing_a_key_triggers_fk_discovery_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Removing_derived_removes_it_from_directly_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Setting_base_type_handles_require_value_generator_properly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Setting_base_type_to_null_fixes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPC_identifying_FKs_are_created_on_all_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPT_identifying_FK_is_created_only_on_declaring_table +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPT_index_can_use_inherited_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_join_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_shared_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_ignore_existing_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_ForeignKeyAttribute_with_InversePropertyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_default_name_and_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_default_name_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Discovers_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_implicit_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.FK_properties_matching_navigations_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.FK_properties_matching_types_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_configures_the_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_matching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_mismatching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.IsRequired_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_entity_type_uses_default_schema_if_related_are_different +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_entity_type_uses_same_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_type_is_automatically_configured_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_type_is_not_automatically_configured_when_navigations_are_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_a_shadow_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_no_navigations_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_only_Has_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_only_With_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Overrides_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Skip_navigation_field_can_be_set_via_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_conflicting_many_to_one_on_left +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_conflicting_many_to_one_on_right +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_self_ref_using_self +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_self_ref_with_same_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Unconfigured_many_to_many_navigations_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.UsingEntity_with_shared_type_passed_when_marked_as_shared_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.UsingEntity_with_shared_type_passes_when_configured_as_shared +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Access_mode_can_be_overridden_at_entity_and_navigation_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_does_not_use_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_finds_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_matches_shadow_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_overrides_existing_FK_if_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_with_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_no_navigations_with +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Explicitly_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Relationships_discovered_when_ambiguity_on_the_inverse_is_resolved +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_primitive_collection_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_contained_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_index_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_multiple_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_avoid_attributes_when_discovering_properties(useAttributes: False) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_Property_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_get_entity_builder_for_clr_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_field_on_a_keyless_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_field_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_property_that_is_part_of_explicit_entity_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_override_navigations_as_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_override_navigations_as_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_clr_property_when_property_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_collation_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_collation_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_entity_key_from_clr_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_entity_key_from_property_names_when_mixed_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_element_type_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_clr_property_when_property_ignored_on_keyless +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_with_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_fixed_length_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_fixed_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_model_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_store_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_store_type_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_upgrade_candidate_key_to_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_view_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_view_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Cannot_add_shared_type_when_non_shared_exists +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_removed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_removed_by_generic_method +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_replaced +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection_when_base_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_are_nullable_by_default_if_the_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_max_length +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_unicode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_default_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_default_unicode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_no_max_length_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Entity_key_on_secondary_property_is_discovered_by_convention_when_first_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Entity_key_on_shadow_property_is_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.EntityType_name_is_stored_culture_invariantly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_base_type_removes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_entity_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Indexes_can_have_same_name_across_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Int32_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_for_primitive_collection_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_two_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_throws_for_non_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Model_is_readonly_after_Finalize +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Nested_primitive_collection_are_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Object_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Object_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PrimitiveCollection_Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Private_primitive_collection_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Private_property_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Property_bag_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_alternate_key_makes_properties_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_sentinel_throws_for_noncompatible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_sentinel_throws_for_null_on_nonnullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_bad_value_generator_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_conflicting_base_configurations_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_int_keyed_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_primitive_collection_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_base_type_is_not_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_type_on_primitive_collection_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Ambiguous_relationship_candidate_does_not_block_creating_further_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Annotations_are_preserved_when_rebuilding +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Attempt_to_configure_Navigation_property_which_is_actually_a_Property_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_pointed_by_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_on_principal_type_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_semi_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_replaced_with_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_specify_requiredness_after_OnDelete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_matches_shadow_FK_property_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_entity_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_navigation_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_properties_are_on_both_sides +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_no_matching_properties_either_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_overlapping_foreign_keys_with_different_nullability +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_both_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_fk_configuring_using_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_no_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Do_not_match_non_unique_FK_when_overlap_with_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Explicit_principal_key_is_not_replaced_with_new_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasMany_with_a_collection_navigation_CLR_property_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasNoKey_call_on_principal_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasNoKey_call_on_principal_with_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Keyless_type_discovered_before_referenced_entity_type_does_not_leave_temp_id +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Keyless_type_with_unmapped_collection_navigations_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_overrides_NRT_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.One_to_many_relationship_has_no_ambiguity_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Principal_key_by_convention_is_not_replaced_with_new_incompatible_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Reference_navigation_from_keyless_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.RemoveKey_does_not_add_back_foreign_key_pointing_to_the_same_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Shadow_property_created_for_foreign_key_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_existing_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_keyless_type_as_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_when_foreign_key_references_shadow_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.WithMany_call_on_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.WithMany_pointing_to_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_be_defined_before_the_PK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_be_defined_before_the_PK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_foreign_key_attribute_is_used +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_navigations_have_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_user_specifies_principal_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_user_specify_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_self_referencing_relationship_without_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_two_FKs_using_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_dependent_side_specified_explicitly_on_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_fk_before_configuring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_fk_before_reconfiguring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_identifying_fk +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_pk_as_fk_if_principal_end_is_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_PK_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_FK_properties_as_PK_sets_DeleteBehavior_Cascade +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_inverts_the_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_throws_if_not_invertible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_throws_when_there_is_an_explicit_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_creates_new_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_new_FK_over_PK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_removes_existing_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_shadow_FK_if_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_field_backed_FK_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_index_even_if_covered_by_an_alternate_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_one_to_one_relationship_with_single_ref_as_principal_to_dependent_if_matching_properties_are_on_the_other_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_by_convention_inverted +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_on_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Does_not_use_existing_FK_when_principal_key_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Does_not_use_pk_as_fk_if_principal_end_is_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Foreign_key_properties_are_not_discovered_for_one_to_one_relationship_with_ambiguous_principal_end +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Ignoring_properties_on_principal_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Ignoring_properties_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Inverse_discovered_after_entity_unignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.IsRequired_throws_principal_end_is_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Multiple_self_referencing_navigations_throw_as_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.OneToOne_can_have_PK_explicitly_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_FK_if_specified_PK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_FK_if_specified_PK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_PK_if_specified_FK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_PK_if_specified_FK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_in_reverse_order_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_using_principal_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_FK_when_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_unidirectional_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_unidirectional_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Replaces_existing_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_PKs +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_mixed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property_anymore +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_ambiguous_FK_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_multiple_navigations_are_pointing_to_same_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_not_principal_or_dependent_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_FK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_FK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_PK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_PK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_duplicate_navigation_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_existing_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_existing_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_two_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_optional_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Uses_composite_PK_for_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Ambiguous_relationship_between_owned_types_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Attempt_to_create_OwnsMany_on_a_reference_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Attempt_to_create_OwnsOne_on_a_collection_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_call_Owner_fluent_api_after_calling_Entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_chain_owned_type_collection_configurations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_another_relationship_to_owner +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_chained_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_chained_ownerships_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_fk_on_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_on_derived_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_on_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_many_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_entity_and_property_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key_or_candidate +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Array) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable | Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic | Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_inverse +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_ownership_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_property_and_owned_entity_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_self_ownership +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_single_owned_type_using_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_have_multiple_owned_types_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_base_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_base_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_derived_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_derived_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_sproc_mapping_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_table_splitting_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_view_splitting_with_owned_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Changing_ownership_uniqueness_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.CLR_base_type_can_be_owned_when_not_in_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Configuring_base_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Deriving_from_owned_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_mapped_to_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_mapped_to_view_with_custom_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_custom_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_tph_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Navigations_on_owned_type_can_set_access_mode_using_expressions +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Navigations_on_owned_type_collection_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_type_collections_are_mapped_to_same_tables_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_types_use_table_splitting_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.OwnedType_can_derive_from_Collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owner_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 17, mainScale: 4, otherPrecision: 17, otherScale: 4, onePrecision: 17, oneScale: 4, manyPrecision: 17, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: null, mainScale: null, otherPrecision: null, otherScale: null, onePrecision: null, oneScale: null, manyPrecision: null, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained_on_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Reconfiguring_entity_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Reconfiguring_owned_type_as_non_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Removing_ambiguous_inverse_allows_navigations_to_be_discovered +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_can_be_used_as_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_entity_types_with_FK_to_another_entity_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_used_as_owned_type_throws_for_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Throws_on_FK_matching_two_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.BasicManyToManyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyAlternateKeysTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyNamedForeignKeyColumnsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyNamedJoinTableTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithCustomSharedTypeEntityTypeTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithJoinClassHavingPrimaryKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNamedFksAndNavsToAndFromJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNavsAndAlternateKeysTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNavsToAndFromJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNavsToJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithNoCascadeDeleteTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithPayloadAndNavsToJoinClassShadowFKsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithPayloadAndNavsToJoinClassTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyWithPrimaryKeyInJoinEntityTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkAndNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyOptionalWithShadowFkWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithoutCascadeDeleteNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithoutCascadeDeleteTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkAndNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManyRequiredWithShadowFkWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManySelfReferencingNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToManySelfReferencingTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOneToOneRequiredWithShadowFkWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOneToOneRequiredWithShadowFkWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkAndNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneOptionalWithShadowFkWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredPkToPkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredPkToPkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithCompositeKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithCompositeKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithoutCascadeDeleteNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithoutCascadeDeleteTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationToDependentsNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationToDependentsTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationToPrincipalNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkAndNoNavigationToPrincipalTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkWithAlternateKeyNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneRequiredWithShadowFkWithAlternateKeyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneSelfReferencingNrtTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.OneToOneSelfReferencingTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.SelfReferencingManyToManyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.SelfReferencingUnidirectionalManyToManyTest +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.UnidirectionalManyToManyTest +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.AddressAndPayment_RedirectToCompleteWhenSuccessful +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.AddressAndPayment_ReturnsOrderIfInvalidPromoCode +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Browse_ReturnsViewWithGenre +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Can_add_items_to_cart +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.CartSummaryComponent_returns_items +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Complete_ReturnsErrorIfInvalidOrder +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Complete_ReturnsOrderIdIfValid +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Custom_projection_FirstOrDefault_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Custom_projection_FirstOrDefault_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Details_ReturnsAlbumDetail +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.GenreMenuComponent_Returns_NineGenres +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Index_CreatesViewWithGenres +EntityFrameworkCore.Jet.FunctionalTests.MusicStoreJetTest.Music_store_project_to_mapped_entity +EntityFrameworkCore.Jet.FunctionalTests.NotificationEntitiesJetTest.Include_brings_collections_referenced_from_already_tracked_notification_entities_as_Unchanged +EntityFrameworkCore.Jet.FunctionalTests.NotificationEntitiesJetTest.Include_brings_entities_referenced_from_already_tracked_notification_entities_as_Unchanged +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Adding_the_same_entity_twice_results_in_DbUpdateException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Attempting_to_add_same_relationship_twice_for_many_to_many_results_in_independent_association_exception +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Attempting_to_delete_same_relationship_twice_for_many_to_many_results_in_independent_association_exception +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_GetDatabaseValues_on_owned_entity_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_GetDatabaseValues_on_owned_entity_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Deleted_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Deleted_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Deleted_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Deleted_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Detached_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Detached_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Detached_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Detached_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Modified_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Modified_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Modified_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_a_Modified_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Added_entity_that_is_not_in_database_is_no_op(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Added_entity_that_is_not_in_database_is_no_op(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Added_entity_that_was_saved_elsewhere_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Added_entity_that_was_saved_elsewhere_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Unchanged_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Unchanged_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Unchanged_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_an_Unchanged_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_owned_entity_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Calling_Reload_on_owned_entity_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Concurrency_issue_where_the_FK_is_the_concurrency_token_can_be_handled +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Deleting_the_same_entity_twice_results_in_DbUpdateConcurrencyException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException_which_can_be_resolved_with_store_values +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.External_model_builder_uses_validation +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Nullable_client_side_concurrency_token_can_be_used +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Property_entry_original_value_is_set +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Adding_the_same_entity_twice_results_in_DbUpdateException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Attempting_to_add_same_relationship_twice_for_many_to_many_results_in_independent_association_exception +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Attempting_to_delete_same_relationship_twice_for_many_to_many_results_in_independent_association_exception +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_GetDatabaseValues_on_owned_entity_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_GetDatabaseValues_on_owned_entity_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Deleted_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Deleted_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Deleted_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Deleted_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Detached_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Detached_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Detached_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Detached_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Modified_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Modified_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Modified_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_a_Modified_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Added_entity_that_is_not_in_database_is_no_op(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Added_entity_that_is_not_in_database_is_no_op(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Added_entity_that_was_saved_elsewhere_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Added_entity_that_was_saved_elsewhere_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Unchanged_entity_makes_the_entity_unchanged(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Unchanged_entity_makes_the_entity_unchanged(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Unchanged_entity_that_is_not_in_database_detaches_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_an_Unchanged_entity_that_is_not_in_database_detaches_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_owned_entity_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Calling_Reload_on_owned_entity_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Concurrency_issue_where_the_FK_is_the_concurrency_token_can_be_handled +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Deleting_the_same_entity_twice_results_in_DbUpdateConcurrencyException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException_which_can_be_resolved_with_store_values +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.External_model_builder_uses_validation +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Nullable_client_side_concurrency_token_can_be_used +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Property_entry_original_value_is_set +EntityFrameworkCore.Jet.FunctionalTests.OverzealousInitializationJetTest.Fixup_ignores_eagerly_initialized_reference_navs +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_collection_current_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_collection_original_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_current_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_original_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_store_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_store_values_can_be_accessed_asynchronously_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_cloned +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_from_a_non_generic_property_dictionary_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_into_a_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_into_a_non_generic_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_copied_to_object_using_ToObject +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_and_set_for_an_object_in_the_Added_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_and_set_for_an_object_in_the_Modified_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_and_set_for_an_object_in_the_Unchanged_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_or_set_for_a_Detached_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_read_or_set_for_an_object_in_the_Deleted_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_an_object_using_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_an_object_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_dictionary_some_missing +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_dictionary_typed_int +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_dictionary_typed_string +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_DTO_object_missing_key_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_DTO_object_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_one_generic_dictionary_to_another_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_can_be_set_from_one_non_generic_dictionary_to_another_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_for_derived_object_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Current_values_for_join_entity_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValues_for_derived_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValues_for_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValues_for_the_wrong_type_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValuesAsync_for_derived_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValuesAsync_for_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.GetDatabaseValuesAsync_for_the_wrong_type_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_cloned_dictionary_cannot_be_set_to_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_property_in_original_values_cannot_be_set_to_null_in_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_shadow_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_shadow_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_shadow_property_in_current_values_results_in_conceptual_null(deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Non_nullable_shadow_property_in_original_values_cannot_be_set_to_null_in_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValues_for_derived_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValues_for_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValues_for_the_wrong_type_in_the_store_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValuesAsync_for_derived_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValuesAsync_for_entity_not_in_the_store_returns_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.NonGeneric_GetDatabaseValuesAsync_for_the_wrong_type_in_the_store_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Nullable_complex_property_with_null_value_returns_null_when_using_ToObject +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_cloned +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_into_a_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_into_a_non_generic_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_non_generic_property_dictionary_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_copied_to_object_using_ToObject +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_and_set_for_an_object_in_the_Deleted_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_and_set_for_an_object_in_the_Modified_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_and_set_for_an_object_in_the_Unchanged_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_or_set_for_a_Detached_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_read_or_set_for_an_object_in_the_Added_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_an_object_using_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_an_object_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_dictionary_some_missing +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_dictionary_typed_int +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_dictionary_typed_string +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_DTO_object_missing_key_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_DTO_object_using_non_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_one_generic_dictionary_to_another_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_can_be_set_from_one_non_generic_dictionary_to_another_generic_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_for_derived_object_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Original_values_for_join_entity_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_current_values_cannot_be_changed_by_setting_values_from_another_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_current_values_cannot_be_changed_by_setting_values_from_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_current_values_cannot_be_changed_in_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_original_values_cannot_be_changed_by_setting_values_from_another_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_original_values_cannot_be_changed_by_setting_values_from_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Primary_key_in_original_values_cannot_be_changed_in_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_cloned_dictionary_returns_properties +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_current_values_returns_properties +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_original_values_returns_properties +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_store_values_returns_properties +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Properties_for_store_values_returns_properties_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Property_in_cloned_dictionary_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Property_in_current_values_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Property_in_original_values_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Reload_when_entity_deleted_in_store_can_happen_for_any_state(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_accessed_as_a_non_generic_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_set_using_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_set_using_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_can_be_set_using_a_property_dictionary_with_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_of_a_derived_object_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_current_values_of_a_derived_object_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_accessed_as_a_non_generic_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_set_using_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_set_using_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_can_be_set_using_a_property_dictionary_with_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_of_a_derived_object_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_original_values_of_a_derived_object_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_as_a_non_generic_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_asynchronously_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_asynchronously_as_a_non_generic_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_asynchronously_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_can_be_accessed_asynchronously_as_a_property_dictionary_using_IProperty +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_of_a_derived_object_can_be_accessed_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_of_a_derived_object_can_be_accessed_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_of_a_derived_object_can_be_accessed_asynchronously_as_a_non_generic_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Scalar_store_values_of_a_derived_object_can_be_accessed_asynchronously_as_a_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_current_values_from_dictionary_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_current_values_from_dictionary_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_current_values_from_DTO_with_complex_metadata_access_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_current_values_from_object_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_original_values_from_dictionary_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_original_values_from_object_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_values_from_DTO_with_nulls_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_complex_collection_values_from_object_works +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_current_values_from_cloned_values_sets_nullable_complex_property_to_null +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Setting_store_values_does_not_change_current_or_original_values +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_complex_collection_with_non_dictionary_item +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_complex_collection_with_non_list_value +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_complex_property_with_non_dictionary_value +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_nested_complex_collection_with_non_dictionary_item +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.SetValues_throws_for_nested_complex_collection_with_non_list_value +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Shadow_property_in_current_values_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Shadow_property_in_original_values_cannot_be_set_to_instance_of_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_asynchronously_into_a_non_generic_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_asynchronously_non_generic_property_dictionary_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_a_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_a_cloned_dictionary_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_a_non_generic_cloned_dictionary +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_into_an_object_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_non_generic_property_dictionary_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_to_object_using_ToObject +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_copied_to_object_using_ToObject_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Deleted_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Deleted_state_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Modified_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Modified_state_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Unchanged_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_and_set_for_an_object_in_the_Unchanged_state_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_or_set_for_a_Detached_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_or_set_for_a_Detached_object_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_or_set_for_an_object_in_the_Added_state +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_can_be_read_or_set_for_an_object_in_the_Added_state_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_for_derived_object_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_for_derived_object_can_be_copied_into_an_object_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_for_join_entity_can_be_copied_into_an_object +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_for_join_entity_can_be_copied_into_an_object_asynchronously +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_really_are_store_values_not_current_or_original_values +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Store_values_really_are_store_values_not_current_or_original_values_async +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_IProperty_instances_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_IProperty_instances_throws_derived +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_property_names_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_property_names_throws_derived +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_complex_property_value_not_list_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_non_collection_complex_property_throws +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Unchanged, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_in_cloned_dictionary_can_be_set_with_IProperty +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_optional_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_optional_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_composite_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_non_PK_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_non_PK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_attach_full_required_one_to_many_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_use_record_proxies_with_base_types_to_load_collection +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Can_use_record_proxies_with_base_types_to_load_reference +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.No_fixup_to_Deleted_entities +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_optional_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_removed_required_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_required_one_to_one_changed_by_reference(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Save_two_entity_cycle_with_lazy_loading +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_optional_one_to_one(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_non_PK_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sever_required_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTracking.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_optional_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_optional_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_composite_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_non_PK_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_non_PK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_attach_full_required_one_to_many_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_use_record_proxies_with_base_types_to_load_collection +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Can_use_record_proxies_with_base_types_to_load_reference +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.No_fixup_to_Deleted_entities +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Save_two_entity_cycle_with_lazy_loading +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_optional_one_to_one(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sever_required_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+ChangeTrackingAndLazyLoading.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Avoid_nulling_shared_FK_property_when_deleting +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Avoid_nulling_shared_FK_property_when_nulling_navigation(nullPrincipal: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_optional_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_optional_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_composite_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_non_PK_AK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_non_PK_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_attach_full_required_one_to_many_graph_of_duplicates +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_use_record_proxies_with_base_types_to_load_collection +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Can_use_record_proxies_with_base_types_to_load_reference +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.No_fixup_to_Deleted_entities +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: null, deleteOrphansTiming: null) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned_with_Added_graph(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_many_to_one_dependents_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Optional_one_to_one_with_alternate_key_are_orphaned(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_one_to_many_overlapping(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_optional_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_non_PK_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one_with_alternate_key(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 1, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 2, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 3, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 4, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 5, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 6, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_required_one_to_one(changeMechanism: 7, useExistingRoot: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 1, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 2, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 3, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 4, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 5, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 6, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Reparent_to_different_one_to_many(changeMechanism: 7, useExistingParent: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_many_to_one_dependents_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_non_PK_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_AK_relationships_are_one_to_one +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_in_store(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted_starting_detached(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_deleted(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Immediate, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: Never, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Immediate) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: Never) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Required_one_to_one_with_alternate_key_are_cascade_detached_when_Added(cascadeDeleteTiming: OnSaveChanges, deleteOrphansTiming: OnSaveChanges) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key_in_store +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_changed_optional_one_to_one(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_optional_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_optional_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_removed_required_many_to_one_dependents(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_many_to_one_dependents(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 4, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 5, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 6, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_non_PK_one_to_one_changed_by_reference(changeMechanism: 7, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 1, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 2, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: False) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference_with_alternate_key(changeMechanism: 3, useExistingEntities: True) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_required_one_to_one_changed_by_reference(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Save_two_entity_cycle_with_lazy_loading +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one_with_alternate_key(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 4) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 5) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 6) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_optional_one_to_one(changeMechanism: 7) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_non_PK_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one_with_alternate_key(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one(changeMechanism: 1) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one(changeMechanism: 2) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sever_required_one_to_one(changeMechanism: 3) +EntityFrameworkCore.Jet.FunctionalTests.ProxyGraphUpdatesJetTest+LazyLoading.Sometimes_not_calling_DetectChanges_when_required_does_not_throw_for_null_ref +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Can_query_hierarchy_with_non_nullable_property_on_derived +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Casts_are_removed_from_expression_tree_when_redundant +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Double_convert_interface_created_expression_tree +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Expression_tree_constructed_via_interface_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_correlated_collection_along_with_non_mapped_property +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_expression_with_converter_with_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_expression_with_converter_with_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_one_of_two_similar_complex_types_picks_the_correct_one +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_property_with_converter_with_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_property_with_converter_with_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_property_with_converter_without_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_property_with_converter_without_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projection_failing_with_EnumToStringConverter +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: null, postfix: "") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: null, postfix: "") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: null, postfix: "") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Setting_IsUnicode_generates_unicode_literal_in_SQL +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Two_similar_complex_properties_projected_with_split_query1 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Two_similar_complex_properties_projected_with_split_query2 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Complex_type_equality_with_non_default_type_mapping +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Complex_type_equals_parameter_with_nested_types_with_property_of_same_name +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Non_optional_complex_type_with_all_nullable_properties +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Nullable_complex_type_with_discriminator_and_shadow_property +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Optional_complex_type_with_discriminator +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Projecting_complex_property_does_not_auto_include_owned_types +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocManyToManyQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocManyToManyQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Average_with_cast +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Bool_discriminator_column_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Bool_discriminator_column_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Check_inlined_constants_redacting(async: False, enableSensitiveDataLogging: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Check_inlined_constants_redacting(async: False, enableSensitiveDataLogging: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Check_inlined_constants_redacting(async: True, enableSensitiveDataLogging: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Check_inlined_constants_redacting(async: True, enableSensitiveDataLogging: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.DateTime_Contains_with_smalldatetime_generates_correct_literal +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Discriminator_type_is_handled_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Entity_equality_with_Contains_and_Parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Entity_equality_with_Contains_and_Parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Enum_with_value_converter_matching_take_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Enum_with_value_converter_matching_take_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Explicitly_compiled_query_does_not_add_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.First_FirstOrDefault_ix_async +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Inlined_dbcontext_is_not_leaking +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.LeftJoin_with_missing_key_values_on_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.LeftJoin_with_missing_key_values_on_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Mapping_JsonElement_property_throws_a_meaningful_exception +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.New_instances_in_projection_are_not_shared_across_results +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Parameterless_ctor_on_inner_DTO_gets_called_for_every_row +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Projecting_column_with_value_converter_of_ulong_byte_array +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Projecting_entity_with_value_converter_and_include_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Query_cache_entries_are_evicted_as_necessary +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Relational_command_cache_creates_new_entry_when_parameter_nullability_changes +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Repeated_parameters_in_generated_query_sql +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Select_nested_projection +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Shadow_property_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.StoreType_for_UDF_used(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.StoreType_for_UDF_used(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Subquery_first_member_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Subquery_first_member_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Thread_safety_in_relational_command_cache +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Union_and_insert_works_correctly_together +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Variable_from_closure_is_parametrized +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Can_ignore_invalid_include_path_error +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Collection_without_setter_materialized_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Correlated_collection_correctly_associates_entities_with_byte_array_keys +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Customer_collections_materialize_properly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Cycles_in_auto_include +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_optional_reference_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_with_OfType_base +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_works_when_defined_on_intermediate_type +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_with_order_by_on_interface_key +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Nested_include_queries_do_not_populate_navigation_twice +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Reference_include_on_derived_type_with_sibling_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: False, split: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: False, split: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: True, split: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: True, split: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.ThenInclude_with_interface_navigations +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Using_explicit_interface_implementation_as_navigation_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_1 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_2 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_3 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_4 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Materialize_non_public +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Projecting_entity_with_property_requiring_converter_with_closure_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Projecting_expression_requiring_converter_without_closure_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Projecting_property_requiring_converter_with_closure_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Invoke_inside_query_filter_gets_correctly_evaluated_during_translation +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Keyless_type_used_inside_defining_query +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.MultiContext_query_filter_test +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_anonymous +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_anonymous_ignore +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_caching +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_combined +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_ignore_all +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_ignore_some +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_overwriting +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Named_query_filters_removing +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_contains_evaluates_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_context_accessor_with_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_context_accessor_with_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_db_set_should_not_block_other_filters +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_null_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_pk_fk_optimization +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Self_reference_in_query_filter_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Weak_entities_with_query_filter_subquery_flattening +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Can_configure_SingleQuery_at_context_level +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Can_configure_SplitQuery_at_context_level +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTracking_split_query_creates_only_required_instances(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTracking_split_query_creates_only_required_instances(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTrackingWithIdentityResolution_split_query_basic(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTrackingWithIdentityResolution_split_query_basic(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTrackingWithIdentityResolution_split_query_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTrackingWithIdentityResolution_split_query_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.SplitQuery_disposes_inner_data_readers +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Unconfigured_query_splitting_behavior_throws_a_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Using_AsSingleQuery_without_context_configuration_does_not_throw_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Delete_entity_with_associations +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Delete_optional_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Delete_required_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_associate_to_another_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_associate_to_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_associate_to_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_associate_to_null_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_associate_to_null_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_associate_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_associate_with_null_required_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_collection_referencing_the_original_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_collection_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_inside_structural_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonBulkUpdateJetTest.Update_required_nested_associate_to_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonCollectionJetTest.Distinct +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonCollectionJetTest.Distinct_over_projected_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonMiscellaneousJetTest.FromSql_on_root +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonMiscellaneousJetTest.Where_HasValue_on_nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_non_nullable_value_type(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_non_nullable_value_type(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_nullable_value_type_with_Value(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_nullable_value_type_with_Value(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_nullable_value_type(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_nullable_value_type(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_root_with_value_types(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_root_with_value_types(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_root(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_root(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonSetOperationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonStructuralEqualityJetTest.Associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonStructuralEqualityJetTest.Associate_with_parameter_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonStructuralEqualityJetTest.Not_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonStructuralEqualityJetTest.Nullable_value_type_with_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexJson.ComplexJsonStructuralEqualityJetTest.Two_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Delete_entity_with_associations +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Delete_optional_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Delete_required_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_another_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_inline_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_null_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_null_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_associate_with_null_required_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_collection_referencing_the_original_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_collection_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_inside_structural_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_multiple_projected_associates_via_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_multiple_properties_inside_associates_and_on_entity_type +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_multiple_properties_inside_same_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_associate_to_another_nested_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_associate_to_inline_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_associate_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_collection_to_another_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_collection_to_inline_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_nested_collection_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_primitive_collection_to_another_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_primitive_collection_to_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_primitive_collection_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_property_inside_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_property_inside_associate_with_special_chars +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_property_inside_nested_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_property_on_projected_associate +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingBulkUpdateJetTest.Update_required_nested_associate_to_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.FromSql_on_root +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_HasValue_on_nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_on_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_on_nested_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_on_optional_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_property_on_non_nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingMiscellaneousJetTest.Where_property_on_nullable_value_type_Value +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_non_nullable_value_type(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_non_nullable_value_type(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type_with_Value(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type_with_Value(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_nullable_value_type(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root_with_value_types(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root_with_value_types(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_root(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Associate_with_parameter_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Contains_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Contains_with_nested_and_composed_operators +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Contains_with_operators_composed_on_the_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Contains_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_associate_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_associate_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_collection_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nested_collection_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Not_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Nullable_value_type_with_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Two_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Two_nested_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.ComplexTableSplitting.ComplexTableSplittingStructuralEqualityJetTest.Two_nested_collections +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Count +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Distinct_over_projected_filtered_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Distinct_over_projected_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Index_column +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Index_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Index_on_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Index_out_of_bounds +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Index_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Select_within_Select_within_Select_with_aggregates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsCollectionJetTest.Where +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection_on_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection_on_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection_on_optional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection_on_optional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_optional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested_optional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_optional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_optional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_required_optional_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_required_optional_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsIncludeJetTest.Include_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsMiscellaneousJetTest.FromSql_on_root +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsMiscellaneousJetTest.Where_on_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsMiscellaneousJetTest.Where_on_nested_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsMiscellaneousJetTest.Where_on_optional_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_root(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_root(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsSetOperationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsSetOperationsJetTest.Over_associate_collection_projected(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsSetOperationsJetTest.Over_associate_collection_projected(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Associate_with_parameter_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Contains_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Contains_with_nested_and_composed_operators +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Contains_with_operators_composed_on_the_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Contains_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_associate_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_associate_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_collection_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Nested_collection_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Not_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Two_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Two_nested_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.Navigations.NavigationsStructuralEqualityJetTest.Two_nested_collections +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonBulkUpdateJetTest.Delete_association +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonBulkUpdateJetTest.Update_association +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonBulkUpdateJetTest.Update_property_inside_association +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonMiscellaneousJetTest.FromSql_on_root +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_root(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_root(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_subquery_optional_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_subquery_required_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Associate_with_parameter_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Contains_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Nested_associate_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Nested_associate_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Nested_collection_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Nested_collection_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Not_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Two_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Two_nested_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedJson.OwnedJsonStructuralEqualityJetTest.Two_nested_collections +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Count +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Distinct_over_projected_filtered_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Distinct_over_projected_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Distinct_projected(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Index_column +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Index_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Index_on_nested_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Index_out_of_bounds +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Index_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Select_within_Select_within_Select_with_aggregates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsCollectionJetTest.Where +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsMiscellaneousJetTest.FromSql_on_root +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsMiscellaneousJetTest.Where_on_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsMiscellaneousJetTest.Where_on_nested_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsMiscellaneousJetTest.Where_on_optional_associate_scalar_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_root_duplicated(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_root(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_root(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_subquery_optional_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_subquery_required_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsSetOperationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsSetOperationsJetTest.Over_associate_collection_projected(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsSetOperationsJetTest.Over_associate_collection_projected(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsSetOperationsJetTest.Over_different_collection_properties +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Associate_with_parameter_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Contains_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Contains_with_nested_and_composed_operators +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Contains_with_operators_composed_on_the_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Contains_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_associate_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_associate_with_inline_null +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_associate_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_collection_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Nested_collection_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Not_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Two_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Two_nested_associates +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedNavigations.OwnedNavigationsStructuralEqualityJetTest.Two_nested_collections +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingMiscellaneousJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingPrimitiveCollectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_optional_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_property_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_associate_via_optional_navigation(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_nested_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_required_nested_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_scalar_property_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_subquery_optional_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_subquery_required_related_FirstOrDefault(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_unmapped_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_associate_collection(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: NoTracking) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingProjectionJetTest.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior: TrackAll) +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Contains_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Contains_with_nested_and_composed_operators +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Contains_with_operators_composed_on_the_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Contains_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Nested_associate_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Nested_associate_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Nested_collection_with_inline +EntityFrameworkCore.Jet.FunctionalTests.Query.Associations.OwnedTableSplitting.OwnedTableSplittingStructuralEqualityJetTest.Nested_collection_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_multi_include_with_order_by_and_paging(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_basic_Where_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_basic_Where_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_basic_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_basic_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_calling_methods_directly_on_parameter_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_calling_methods_directly_on_parameter_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_include_parameter_used_inside_filter_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_include_parameter_used_inside_filter_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_OrderBy_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_OrderBy_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_ThenInclude_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_ThenInclude_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_with_Distinct_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_include_with_Distinct_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_ThenInclude_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Filtered_ThenInclude_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_reference_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_reference_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Final_GroupBy_property_entity_Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_multiple_SelectMany_and_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_multiple_SelectMany_and_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany_and_multiple_reference_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany_and_multiple_reference_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany_and_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany_and_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_after_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_projecting_the_included_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_followed_by_projecting_the_included_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple_with_filter_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple_with_filter_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_ThenInclude_two_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_ThenInclude_two_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated_checked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated_checked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_methodcall(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_methodcall(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection_with_multiple_orderbys_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_nested_with_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_nested_with_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_partially_added_before_Where_and_then_build_upon(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_partially_added_before_Where_and_then_build_upon(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_collection_order_by_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_collection_order_by_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_followed_by_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_followed_by_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_ThenInclude_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_reference_ThenInclude_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Including_reference_navigation_and_projecting_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Including_reference_navigation_and_projecting_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_include_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_include_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_self_ref_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_self_ref_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_self_ref(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes_self_ref(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_complex_includes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_include_with_multiple_optional_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_include_with_multiple_optional_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_optional_navigation_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_optional_navigation_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_optional_navigation_with_string_based_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_optional_navigation_with_string_based_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_SelectMany_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Multiple_SelectMany_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Null_check_in_anonymous_type_projection_should_not_be_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Null_check_in_anonymous_type_projection_should_not_be_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Null_check_in_Dto_projection_should_not_be_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Null_check_in_Dto_projection_should_not_be_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_Include_and_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_Include_and_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_order_by_and_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Optional_navigation_with_order_by_and_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Orderby_SelectMany_with_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Orderby_SelectMany_with_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_nested_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_nested_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_root_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_root_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_nested_anonymous(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_nested_anonymous(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_using_ef_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_using_ef_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_navigation_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_navigation_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Projecting_collection_with_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Projecting_collection_with_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Queryable_in_subquery_works_when_final_projection_is_List(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Queryable_in_subquery_works_when_final_projection_is_List(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Required_navigation_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Required_navigation_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Required_navigation_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Required_navigation_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Select_nav_prop_collection_one_to_many_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Select_nav_prop_collection_one_to_many_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_navigation_property_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_navigation_property_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_over_conditional_empty_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_over_conditional_empty_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_over_conditional_null_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_over_conditional_null_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include_and_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include_and_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_Include2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_navigation_and_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_navigation_and_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_order_by_and_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.SelectMany_with_order_by_and_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_multi_include_with_order_by_and_paging(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_basic_Where_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_basic_Where_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_basic_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_basic_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_calling_methods_directly_on_parameter_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_calling_methods_directly_on_parameter_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_different_filter_set_on_same_navigation_twice(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_include_parameter_used_inside_filter_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_include_parameter_used_inside_filter_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_OrderBy_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_OrderBy_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_ThenInclude_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_ThenInclude_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_with_Distinct_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_include_with_Distinct_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_ThenInclude_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Filtered_ThenInclude_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_reference_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_reference_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Final_GroupBy_property_entity_Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_multiple_SelectMany_and_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_multiple_SelectMany_and_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany_and_multiple_reference_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany_and_multiple_reference_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany_and_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany_and_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_after_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_projecting_the_included_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_followed_by_projecting_the_included_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple_with_filter_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple_with_filter_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_ThenInclude_two_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_ThenInclude_two_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated_checked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated_checked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex_repeated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_methodcall(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_methodcall(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection_with_multiple_orderbys_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_nested_with_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_nested_with_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_partially_added_before_Where_and_then_build_upon(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_partially_added_before_Where_and_then_build_upon(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_collection_order_by_reference_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_collection_order_by_reference_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_followed_by_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_followed_by_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_ThenInclude_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_reference_ThenInclude_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Including_reference_navigation_and_projecting_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Including_reference_navigation_and_projecting_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_include_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_include_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_self_ref_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_self_ref_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_self_ref(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes_self_ref(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_complex_includes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_include_with_multiple_optional_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_include_with_multiple_optional_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_optional_navigation_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_optional_navigation_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_optional_navigation_with_string_based_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_optional_navigation_with_string_based_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_SelectMany_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Multiple_SelectMany_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Null_check_in_anonymous_type_projection_should_not_be_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Null_check_in_anonymous_type_projection_should_not_be_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Null_check_in_Dto_projection_should_not_be_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Null_check_in_Dto_projection_should_not_be_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_Include_and_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_Include_and_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_order_by_and_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Optional_navigation_with_order_by_and_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Orderby_SelectMany_with_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Orderby_SelectMany_with_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_nested_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_nested_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_root_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_root_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_nested_anonymous(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_nested_anonymous(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_using_ef_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_using_ef_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_navigation_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_navigation_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Projecting_collection_with_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Projecting_collection_with_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Queryable_in_subquery_works_when_final_projection_is_List(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Queryable_in_subquery_works_when_final_projection_is_List(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Required_navigation_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Required_navigation_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Required_navigation_with_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Required_navigation_with_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Select_nav_prop_collection_one_to_many_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Select_nav_prop_collection_one_to_many_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_navigation_property_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_navigation_property_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_over_conditional_empty_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_over_conditional_empty_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_over_conditional_null_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_over_conditional_null_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include_and_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include_and_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include_ThenInclude(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include_ThenInclude(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_Include2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_navigation_and_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_navigation_and_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_order_by_and_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.SelectMany_with_order_by_and_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Accessing_optional_property_inside_result_operator_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Accessing_optional_property_inside_result_operator_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Collection_FirstOrDefault_property_accesses_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Collection_FirstOrDefault_property_accesses_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Comparing_collection_navigation_on_optional_reference_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Comparing_collection_navigation_on_optional_reference_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_navigations_with_predicate_projected_into_anonymous_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_navigations_with_predicate_projected_into_anonymous_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_navigations_with_predicate_projected_into_anonymous_type2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_navigations_with_predicate_projected_into_anonymous_type2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_query_with_let_collection_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_query_with_let_collection_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_query_with_optional_navigations_and_client_side_evaluation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Complex_query_with_optional_navigations_and_client_side_evaluation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_entity_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_entity_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_over_optional_navigation_with_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_with_subquery_optional_navigation_scalar_distinct_and_constant_item(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Contains_with_subquery_optional_navigation_scalar_distinct_and_constant_item(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_nested_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_nested_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_nested_two_levels_up_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_nested_two_levels_up_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Distinct_take_without_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Distinct_take_without_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Element_selector_with_coalesce_repeated_in_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Element_selector_with_coalesce_repeated_in_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Entity_equality_empty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Entity_equality_empty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Entries_for_detached_entities_are_removed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Entries_for_detached_entities_are_removed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_multiple_result_operator_distinct_count_materializes_main_clause(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_multiple_result_operator_distinct_count_materializes_main_clause(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_scalar_result_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_scalar_result_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Explicit_GroupJoin_in_subquery_with_unrelated_projection4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupBy_aggregate_where_required_relationship_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupBy_aggregate_where_required_relationship_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupBy_aggregate_where_required_relationship(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupBy_aggregate_where_required_relationship(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_client_method_in_OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_client_method_in_OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_client_method_on_outer(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_client_method_on_outer(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection_nested1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection_nested1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_result_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_in_subquery_with_client_result_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_inner(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_inner(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer_with_client_method(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer_with_client_method(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_with_orderby_on_inner_sequence_projecting_inner(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_a_subquery_containing_another_GroupJoin_with_orderby_on_inner_sequence_projecting_inner(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_left_side_being_a_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_left_side_being_a_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_right_side_being_a_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_on_right_side_being_a_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested_same_param(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested_same_param(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure_nested_same_param(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure_nested_same_param(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_SelectMany_with_predicate_using_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_without_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.GroupJoin_without_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_multiple_collections_on_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_multiple_collections_on_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_reference_and_project_into_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_reference_and_project_into_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_with_all_method_include_gets_ignored(isAsnc: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_with_all_method_include_gets_ignored(isAsnc: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_with_optional_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include_with_optional_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include10(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include10(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include11(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include11(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include12(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include12(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include13(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include13(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include14(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include14(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include17(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include17(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_1_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_1_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3_3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18_4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include18(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include19(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include19(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include6(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include6(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include7(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include7(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include8(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include8(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include9(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Include9(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_condition_optimizations_applied_correctly_when_anonymous_type_with_multiple_properties(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_condition_optimizations_applied_correctly_when_anonymous_type_with_multiple_properties(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_deeply_nested_non_key_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_deeply_nested_non_key_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_deeply_nested_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_deeply_nested_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_inner_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_inner_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_in_outer_selector_translated_to_extra_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_key_access_optional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_key_access_optional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_key_access_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_key_access_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_non_key_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_non_key_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_self_ref(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigation_self_ref(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigations_in_inner_selector_translated_without_collision(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_navigations_in_inner_selector_translated_without_collision(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_navigations_in_the_result_selector1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_navigations_in_the_result_selector1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_navigations_in_the_result_selector2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_navigations_in_the_result_selector2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_orderby_on_inner_sequence_navigation_non_key_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_orderby_on_inner_sequence_navigation_non_key_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_result_selector_returning_queryable_throws_validation_error(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Join_with_result_selector_returning_queryable_throws_validation_error(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_navigation_converted_to_FK(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_navigation_converted_to_FK(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_two_conditions_on_same_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_two_conditions_on_same_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_two_conditions_on_same_navigation2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_two_conditions_on_same_navigation2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_and_member_expression3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_required2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_using_property_method_required2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_when_sentinel_ef_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Key_equality_when_sentinel_ef_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Level4_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Level4_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Manually_created_left_join_propagates_nullability_to_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Manually_created_left_join_propagates_nullability_to_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Max_in_multi_level_nested_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Max_in_multi_level_nested_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_dto_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_dto_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_chain_3_levels_deep(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_chain_3_levels_deep(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_with_collection_navigation_in_the_middle(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_with_collection_navigation_in_the_middle(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_with_multiple_collections(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_pushdown_with_multiple_collections(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Method_call_on_optional_navigation_translates_to_null_conditional_properly_for_arguments(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Method_call_on_optional_navigation_translates_to_null_conditional_properly_for_arguments(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_include_with_short_circuiting(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_include_with_short_circuiting(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_navigation_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_navigation_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_navigation_with_same_navigation_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multi_level_navigation_with_same_navigation_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_collection_FirstOrDefault_followed_by_member_access_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_collection_FirstOrDefault_followed_by_member_access_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_complex_includes_from_sql +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_conditionals_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_conditionals_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_joins_groupby_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_joins_groupby_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_optional_navs_should_not_deadlock(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_optional_navs_should_not_deadlock(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_string_based_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_string_based_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_with_EF_Property_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_with_EF_Property_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_with_string_based_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_with_string_based_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigations_with_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigations_with_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_calls(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_calls(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_EF_Property_Include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_EF_Property_Include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_joined_together(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_joined_together(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_string_based_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_SelectMany_with_string_based_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nav_rewrite_doesnt_apply_null_protection_for_function_arguments(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nav_rewrite_doesnt_apply_null_protection_for_function_arguments(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_inside_method_call_translated_to_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_inside_method_call_translated_to_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_inside_method_call_translated_to_join2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_inside_method_call_translated_to_join2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_key_access_optional_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_key_access_optional_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_key_access_required_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_key_access_required_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_with_same_navigation_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigation_with_same_navigation_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Navigations_compared_to_each_other5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_group_join_with_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_group_join_with_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_object_constructed_from_group_key_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_object_constructed_from_group_key_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_different_structure_does_not_remove_null_checks(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_different_structure_does_not_remove_null_checks(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_conditional_is_not_applied_explicitly_for_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_conditional_is_not_applied_explicitly_for_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex_client_eval(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex_client_eval(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex_materialization(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex_materialization(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_reference_protection_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_in_subquery_with_unrelated_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_in_subquery_with_unrelated_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_method_call_translated_to_join_keeps_original_nullability(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_method_call_translated_to_join_keeps_original_nullability(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_method_call_translated_to_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_method_call_translated_to_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability_also_for_arguments(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability_also_for_arguments(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_nested_method_call_translated_to_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_property_method_translated_to_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_inside_property_method_translated_to_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_projected_into_DTO(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_projected_into_DTO(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_propagates_nullability_to_manually_created_left_join1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_propagates_nullability_to_manually_created_left_join1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_propagates_nullability_to_manually_created_left_join2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_propagates_nullability_to_manually_created_left_join2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_take_optional_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_take_optional_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_with_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Optional_navigation_with_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_anonymous_type_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_anonymous_type_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_navigation_similar_to_projected_gets_optimized_into_FK_access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_navigation_similar_to_projected_gets_optimized_into_FK_access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.OrderBy_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.OrderBy_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.OrderBy_nav_prop_reference_optional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.OrderBy_nav_prop_reference_optional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_collection_navigation_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_collection_navigation_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties10(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties10(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Project_shadow_properties9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projecting_columns_with_same_name_from_different_entities_making_sure_aliasing_works_after_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projecting_columns_with_same_name_from_different_entities_making_sure_aliasing_works_after_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_from_subquery_when_materialization_is_not_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_from_subquery_when_materialization_is_not_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_in_subquery_when_materialization_is_not_required_in_multiple_joins(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_in_subquery_when_materialization_is_not_required_in_multiple_joins(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_with_anonymous_projection_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Projection_select_correct_table_with_anonymous_projection_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_complex_projection_and_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_complex_projection_and_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_First_in_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_First_in_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_First_in_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Required_navigation_on_a_subquery_with_First_in_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average_with_identity_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average_with_identity_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average_without_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average_without_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Result_operator_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_join_subquery_containing_filter_and_distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_join_subquery_containing_filter_and_distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_optional_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_optional_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_optional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_optional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_required2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_multiple_nav_prop_reference_required2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_nav_prop_reference_optional3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_optional_navigation_property_string_concat(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_optional_navigation_property_string_concat(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_followed_by_Join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_followed_by_Join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_followed_by_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_followed_by_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_in_anonymous_projection_followed_by_Join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_projecting_queryable_in_anonymous_projection_followed_by_Join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_multi_level_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_multi_level_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_navigation1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_navigation1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_navigation2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_subquery_with_client_eval_and_navigation2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_with_joined_where_clause_cast_using_as(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Select_with_joined_where_clause_cast_using_as(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_comparison3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_filter_after(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_filter_after(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_filter_before(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_filter_before(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_and_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_with_another_navigation_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property_with_another_navigation_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_navigation_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_nested_navigation_property_optional_and_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_nested_navigation_property_optional_and_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_nested_navigation_property_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_nested_navigation_property_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_where_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_where_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_EF_Property_Include1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_EF_Property_Include1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigation_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigation_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_additional_joins_outside_of_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_additional_joins_outside_of_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_different_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_different_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_same_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_same_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_required_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_nested_required_navigation_filter_and_explicit_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_string_based_Include1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_string_based_Include1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_string_based_Include2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_with_string_based_Include2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_without_collection_selector_returning_queryable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.SelectMany_without_collection_selector_returning_queryable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_GroupBy_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_GroupBy_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_GroupBy_Having_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_GroupBy_Having_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_level3_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1_level2_level3_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Simple_level1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_different_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_different_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_same_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_collection_navigation_with_same_name_and_same_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_different_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_different_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_same_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigation_with_same_name_and_same_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigations_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.String_include_multiple_derived_navigations_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Subquery_with_Distinct_Skip_FirstOrDefault_without_OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Subquery_with_Distinct_Skip_FirstOrDefault_without_OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Sum_with_filter_with_include_selector_cast_using_as(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Sum_with_filter_with_include_selector_cast_using_as(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Sum_with_selector_cast_using_as(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Sum_with_selector_cast_using_as(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Union_over_entities_with_different_nullability(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Union_over_entities_with_different_nullability(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_complex_predicate_with_with_nav_prop_and_OrElse4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_optional_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_optional_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_compared_to_null5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_member_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_member_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_member_compared_to_value(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_multiple_nav_prop_reference_optional_member_compared_to_value(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_nav_prop_reference_optional2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection_of_original_entity_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection_of_original_entity_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_navigation_property_to_collection2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_on_multilevel_reference_in_subquery_with_outer_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_on_multilevel_reference_in_subquery_with_outer_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_predicate_on_optional_reference_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Where_predicate_on_optional_reference_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Complex_type_equals_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_entity_type_containing_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_entity_type_containing_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_entity_type_containing_struct_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_entity_type_containing_struct_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_property_in_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_property_in_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_property_in_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_property_in_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_two_different_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_two_different_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_two_different_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Concat_two_different_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Contains_over_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Contains_over_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Contains_over_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Contains_over_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_complex_type_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_complex_type_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_nested_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_nested_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_property_inside_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_complex_type_on_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_complex_type_on_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_complex_type_on_required_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_complex_type_on_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_property_in_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_property_in_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_required_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_entity_with_complex_type_pushdown_and_then_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_entity_with_complex_type_pushdown_and_then_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_nullable_struct_complex_type_via_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_nullable_struct_complex_type_via_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_struct_nested_complex_type_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_struct_nested_complex_type_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_struct_nested_complex_type_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_struct_nested_complex_type_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_nested_complex_type_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_nested_complex_type_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_nested_complex_type_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_nested_complex_type_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_struct_nested_complex_type_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_struct_nested_complex_type_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_struct_nested_complex_type_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_struct_nested_complex_type_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_required_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_complex_from_optional_navigation_using_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_complex_from_optional_navigation_using_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_property_of_complex_type_using_left_join_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_property_of_complex_type_using_left_join_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Where_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Where_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_complex_type_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_complex_type_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_nested_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_complex_type_with_FromSql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_complex_type_with_FromSql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_single_property_on_nested_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type_Where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type_Where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Struct_complex_type_equals_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Subquery_over_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Subquery_over_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Subquery_over_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Subquery_over_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_entity_type_containing_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_entity_type_containing_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_entity_type_containing_struct_complex_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_entity_type_containing_struct_complex_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_entity_with_nested_complex_type_projected_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_entity_with_nested_complex_type_projected_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_entity_with_nested_complex_type_projected_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_entity_with_nested_complex_type_projected_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_nested_complex_type_projected_twice_with_double_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_nested_complex_type_projected_twice_with_double_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_nested_complex_type_projected_twice_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_of_same_nested_complex_type_projected_twice_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_property_in_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_property_in_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_property_in_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_property_in_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_two_different_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_two_different_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_two_different_struct_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Union_two_different_struct_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_collections_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_collections_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_collections_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_collections_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_same_level_top_level_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Collate_is_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Collate_is_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_nullable_value_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_nullable_value_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_should_throw_on_client_eval +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_nullable_value_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_nullable_value_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_identity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_identity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_literal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_literal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.All_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.All_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Any_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Any_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Average_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Average_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Count_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Count_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Cross_Join_with_Group_Join_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Cross_Join_with_Group_Join_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Group_Join_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Group_Join_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_aggregate_on_the_group(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_aggregate_on_the_group(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_group_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_group_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_multiple_group_aggregates(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_multiple_group_aggregates(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_conditional_expression_containing_group_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_conditional_expression_containing_group_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_expression_containing_group_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_expression_containing_group_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_expression_with_multiple_function_aggregates(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_expression_with_multiple_function_aggregates(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_function_aggregate_with_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_function_aggregate_with_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_group_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_group_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_group_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_group_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Nested_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Nested_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_1_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_1_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_2_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_2_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_3_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_Simple_3_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_doesnt_produce_a_groupby_statement(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_doesnt_produce_a_groupby_statement(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_10(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_10(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Grouping_by_all_columns_with_aggregate_function_works_9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Left_Outer_Join_with_Group_Join_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Left_Outer_Join_with_Group_Join_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.LongCount_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.LongCount_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Max_Elements_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Max_Elements_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Max_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Max_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Min_Elements_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Min_Elements_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Min_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Min_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Sum_Grouped_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Sum_Grouped_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_10(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_10(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_12(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_12(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_13(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_13(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_14(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_14(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_16(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_16(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Whats_new_2021_sample_9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_in_three(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_in_three(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_in_two(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_in_two(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_main_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_main_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_part_2_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_part_2_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_part_3_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Can_query_entity_which_is_split_selecting_only_part_3_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Custom_projection_trim_when_multiple_tables(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Custom_projection_trim_when_multiple_tables(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_on_split_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_on_split_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_to_split_entity_including_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_to_split_entity_including_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_to_split_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_collection_to_split_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_on_split_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_on_split_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_to_split_entity_including_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_to_split_entity_including_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_to_split_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Include_reference_to_split_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_custom_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_custom_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_multiple_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_multiple_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Normal_entity_owning_a_split_reference_with_main_fragment_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Split_entity_owning_a_split_reference_with_table_sharing_6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_collection_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_collection_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_collection_on_middle(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_collection_on_middle(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_base_without_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_base_without_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_middle_without_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpc_entity_owning_a_split_reference_on_middle_without_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_base_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_base_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.EntitySplittingQueryJetTest.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_invalid_cast_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_invalid_cast_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_invalid_cast_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_invalid_cast_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Entity_equality_through_fromsql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Entity_equality_through_fromsql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_without_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_without_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_inline_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_inline_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_without_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_without_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_db_parameter_in_split_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_db_parameter_in_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_inlined_db_parameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_inlined_db_parameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_inlined_db_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_inlined_db_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_parameterization_issue_12213(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_parameterization_issue_12213(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_with_parameters_inline_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_with_parameters_inline_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_with_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_queryable_with_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_with_inlined_db_parameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_with_inlined_db_parameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_with_inlined_db_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlInterpolated_with_inlined_db_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_annotations_do_not_affect_successive_calls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_annotations_do_not_affect_successive_calls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_common_table_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_common_table_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_nullable_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_nullable_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_does_not_parameterize_interpolated_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_does_not_parameterize_interpolated_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_dbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_dbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_positional_dbParameter_with_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_positional_dbParameter_with_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_positional_dbParameter_without_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_in_subquery_with_positional_dbParameter_without_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_after_removing_whitespaces(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_after_removing_whitespaces(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_DbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_DbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_nameless_DbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_nameless_DbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_compiled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_multiple_line_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_multiple_line_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed_with_closure_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed_with_closure_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_line_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_multiple_line_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_as_no_tracking_not_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_as_no_tracking_not_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_cache_key_includes_query_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_cache_key_includes_query_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order_and_extra_columns(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order_and_extra_columns(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_composed_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_composed_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_not_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_not_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_and_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_and_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_cache_key_includes_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_cache_key_includes_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_db_parameters_called_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_db_parameters_called_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_and_regular_parameter_with_same_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_and_regular_parameter_with_same_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_mixed_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_mixed_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_dbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_join_and_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_join_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_set_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_with_set_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Include_closed_connection_opened_by_it_when_buffering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Include_closed_connection_opened_by_it_when_buffering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Include_does_not_close_user_opened_connection_for_empty_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Include_does_not_close_user_opened_connection_for_empty_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Keyless_entity_with_all_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Keyless_entity_with_all_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Line_endings_after_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Line_endings_after_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_select_and_stored_procedure_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_select_and_stored_procedure_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_select_and_stored_procedure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_select_and_stored_procedure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_and_select_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_and_select_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_and_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_and_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_composed_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_composed_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_min_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_min_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_re_projection_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_re_projection_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_re_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_re_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_take_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_take_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_caller_info_tag_and_other_tags(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_caller_info_tag_and_other_tags(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_caller_info_tag(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_caller_info_tag(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_include_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_include_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter_composed_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter_composed_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_tag(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_tag(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_tags(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure_with_tags(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_stored_procedure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_with_multiple_stored_procedures_on_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_with_multiple_stored_procedures_on_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_with_multiple_stored_procedures(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlSprocQueryJetTest.From_sql_queryable_with_multiple_stored_procedures(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_Contains_and_StartsWith_with_same_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_Contains_and_StartsWith_with_same_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_column_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_column_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_contains_on_argument_with_wildcard_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_equals_nullable_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_equals_nullable_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_inside_conditional_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_inside_conditional_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_inside_conditional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_inside_conditional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_not_equals_nullable_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_not_equals_nullable_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_column_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_column_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_ends_with_on_argument_with_wildcard_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_FirstOrDefault_and_LastOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_FirstOrDefault_and_LastOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_bracket(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_bracket(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_column_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_column_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FunkyDataQueryJetTest.String_starts_with_on_argument_with_wildcard_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarFromSqlQueryJetTest.From_sql_queryable_simple_columns_out_of_order +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Accessing_derived_property_using_hard_and_soft_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Accessing_derived_property_using_hard_and_soft_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Accessing_property_of_optional_navigation_in_child_projection_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Accessing_property_of_optional_navigation_in_child_projection_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Accessing_reference_navigation_collection_composition_generates_single_query(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Accessing_reference_navigation_collection_composition_generates_single_query(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.All_with_optional_navigation_is_translated_to_sql(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.All_with_optional_navigation_is_translated_to_sql(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Basic_query_gears(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Basic_query_gears(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Bitwise_operation_with_null_arguments(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Bitwise_operation_with_null_arguments(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Bool_projection_from_subquery_treated_appropriately_in_where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Bool_projection_from_subquery_treated_appropriately_in_where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Byte_array_filter_by_length_literal2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Byte_array_filter_by_length_literal2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Byte_array_filter_by_length_parameter_compiled2 +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Byte_array_filter_by_length_parameter2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Byte_array_filter_by_length_parameter2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_OfType_works_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_OfType_works_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_ordered_subquery_to_base_type_using_typed_ToArray(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_ordered_subquery_to_base_type_using_typed_ToArray(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_subquery_to_base_type_using_typed_ToList(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_subquery_to_base_type_using_typed_ToList(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_to_derived_followed_by_include_and_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_to_derived_followed_by_include_and_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_to_derived_followed_by_multiple_includes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_to_derived_followed_by_multiple_includes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_to_derived_type_after_OfType_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_to_derived_type_after_OfType_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_to_derived_type_causes_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Cast_to_derived_type_causes_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Checked_context_throws_on_client_evaluation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Checked_context_throws_on_client_evaluation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Checked_context_with_addition_does_not_fail(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Checked_context_with_addition_does_not_fail(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Checked_context_with_cast_does_not_fail(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Checked_context_with_cast_does_not_fail(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_eval_followed_by_aggregate_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_eval_followed_by_aggregate_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_member_and_unsupported_string_Equals_in_the_same_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_member_and_unsupported_string_Equals_in_the_same_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_additional_from_clause(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_additional_from_clause(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_outer_join_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_outer_join_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_side_equality_with_parameter_works_with_optional_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Client_side_equality_with_parameter_works_with_optional_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_operator_in_predicate_with_other_conditions(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_operator_in_predicate_with_other_conditions(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_operator_in_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_operator_in_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_operator_in_projection_with_other_conditions(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_operator_in_projection_with_other_conditions(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_used_with_non_unicode_string_column_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_used_with_non_unicode_string_column_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_with_non_root_evaluatable_Convert(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Coalesce_with_non_root_evaluatable_Convert(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_navigation_ofType_filter_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_navigation_ofType_filter_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_joined(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_joined(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_source(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_source(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.CompareTo_used_with_non_unicode_string_column_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.CompareTo_used_with_non_unicode_string_column_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Comparing_entities_using_Equals_inheritance(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Comparing_entities_using_Equals_inheritance(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Comparing_two_collection_navigations_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Comparing_two_collection_navigations_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Comparing_two_collection_navigations_inheritance(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Comparing_two_collection_navigations_inheritance(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Comparison_with_value_converted_subclass(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Comparison_with_value_converted_subclass(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator_using_result_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator_using_result_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Complex_predicate_with_AndAlso_and_nullable_bool_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Complex_predicate_with_AndAlso_and_nullable_bool_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Composite_key_entity_equal_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Composite_key_entity_equal_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Composite_key_entity_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Composite_key_entity_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Composite_key_entity_not_equal_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Composite_key_entity_not_equal_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Composite_key_entity_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Composite_key_entity_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Concat_anonymous_with_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Concat_anonymous_with_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Concat_scalars_with_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Concat_scalars_with_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Concat_with_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Concat_with_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Concat_with_scalar_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Concat_with_scalar_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Related_Types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Related_Types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Same_Type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Same_Type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_Navigation_With_Trivial_Member_Access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_Navigation_With_Trivial_Member_Access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_false_gets_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_false_gets_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_true_gets_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_true_gets_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_collection_of_byte_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_collection_of_byte_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_nullable_array_produces_correct_sql(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_nullable_array_produces_correct_sql(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_readonly_enumerable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_on_readonly_enumerable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_with_local_nullable_guid_list_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Contains_with_local_nullable_guid_list_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_after_distinct_3_levels_without_original_identifiers(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_after_distinct_3_levels_without_original_identifiers(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_order_by_constant_null_of_non_mapped_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_order_by_constant_null_of_non_mapped_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_order_by_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_order_by_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_complex_OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_complex_OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_distinct_3_levels(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_distinct_3_levels(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_top_level_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_top_level_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_top_level_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_top_level_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_order_by_on_inner(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_order_by_on_inner(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_orderby_on_outer(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_orderby_on_outer(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_very_complex_order_by(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collection_with_very_complex_order_by(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant_bool(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant_bool(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projecting_single_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projecting_single_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_array(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_array(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_list(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_list(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection_ordered(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection_ordered(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_basic_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_complex_scenario1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_complex_scenario1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_complex_scenario2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_complex_scenario2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_deeply_nested_left_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_deeply_nested_left_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_different_collections_projected(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_different_collections_projected(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_left_join_with_self_reference(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_left_join_with_self_reference(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_multiple_nested_complex_collections(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_multiple_nested_complex_collections(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToArray(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToArray(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_nested_with_custom_ordering(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_nested_with_custom_ordering(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_null_value(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_null_value(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_on_RightJoin_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_on_RightJoin_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_project_anonymous_collection_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_project_anonymous_collection_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_projection_of_collection_thru_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_projection_of_collection_thru_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_same_collection_projected_multiple_times(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_same_collection_projected_multiple_times(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_similar_collection_projected_multiple_times(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_similar_collection_projected_multiple_times(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_with_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_with_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_Date_returns_datetime(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_Date_returns_datetime(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Derived_reference_is_skipped_when_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Derived_reference_is_skipped_when_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Distinct_with_optional_navigation_is_translated_to_sql(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Distinct_with_optional_navigation_is_translated_to_sql(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_on_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_on_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_on_Like(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_on_Like(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_on_nullable_bool_coming_from_optional_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_on_nullable_bool_coming_from_optional_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_on_string_compare(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Double_order_by_on_string_compare(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.EF_Property_based_Include_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.EF_Property_based_Include_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ElementAt_basic_with_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ElementAt_basic_with_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Entity_equality_empty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Entity_equality_empty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_array_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_array_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filter_with_complex_predicate_containing_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filter_with_complex_predicate_containing_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.FirstOrDefault_over_int_compared_to_zero(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.FirstOrDefault_over_int_compared_to_zero(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_in_filter_non_nullable_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_in_filter_non_nullable_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_in_filter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_in_filter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_in_order_by(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_in_order_by(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_in_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_in_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_on_DateTimeOffset(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_on_DateTimeOffset(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_with_argument_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_with_argument_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_with_argument(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GetValueOrDefault_with_argument(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_nullable_property_and_project_the_grouping_key_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_nullable_property_and_project_the_grouping_key_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_on_StartsWith_with_null_parameter_as_argument(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_on_StartsWith_with_null_parameter_as_argument(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_with_aggregate_max_on_entity_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_with_aggregate_max_on_entity_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_with_having_StartsWith_with_null_parameter_as_argument(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Group_by_with_having_StartsWith_with_null_parameter_as_argument(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Aggregate_with_anonymous_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Aggregate_with_anonymous_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Select_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_Select_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_with_boolean_groupin_key_thru_navigation_access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_with_boolean_groupin_key_thru_navigation_access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_with_boolean_grouping_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupBy_with_boolean_grouping_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupJoin_Composite_Key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupJoin_Composite_Key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_select_anonymous_projection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_select_anonymous_projection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_Select_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_Select_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_select_with_cast_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_select_with_cast_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_select_with_entity_projection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_select_with_entity_projection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_SelectMany_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_after_SelectMany_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_base_navigation_on_derived_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_base_navigation_on_derived_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_and_invalid_navigation_using_string_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_and_invalid_navigation_using_string_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_on_derived_type_using_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_on_derived_type_using_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda_with_soft_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda_with_soft_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_on_derived_type_using_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_on_derived_type_using_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_OrderBy_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_OrderBy_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_with_Cast_to_base(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_with_Cast_to_base(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_circular_with_filter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_circular_with_filter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_circular(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_circular(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_include_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_include_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many_self_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many_self_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_one_and_one_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_one_and_one_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_one_to_one_optional_and_one_to_one_required(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_multiple_one_to_one_optional_and_one_to_one_required(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_navigation_on_derived_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_navigation_on_derived_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_derived_entity_using_OfType(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_derived_entity_using_OfType(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_derived_entity_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_derived_entity_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_derived_multi_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_derived_multi_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_derived_type_with_order_by_and_paging(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_derived_type_with_order_by_and_paging(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result1 +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result2 +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_soft_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_soft_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_tracking(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_tracking(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_using_alternate_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_using_alternate_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_where_list_contains_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_where_list_contains_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_where_list_contains_navigation2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_where_list_contains_navigation2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_client_method_and_member_access_still_applies_includes(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_client_method_and_member_access_still_applies_includes(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_complex_order_by(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_complex_order_by(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_and_inheritance_with_orderby_before_and_after_include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_and_inheritance_with_orderby_before_and_after_include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_and_inheritance1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_and_inheritance1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_and_inheritance2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_and_inheritance2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_and_inheritance3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_and_inheritance3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_collection1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_collection1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_collection2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_collection2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_multi_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_multi_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_reference1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_reference1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_reference2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_join_reference2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_nested_navigation_in_order_by(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_nested_navigation_in_order_by(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_order_by_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_order_by_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_projection_of_unmapped_property_still_gets_applied(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_projection_of_unmapped_property_still_gets_applied(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_coalesce_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_coalesce_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_coalesce_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_coalesce_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_navigation_translated_to_subquery_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_navigation_translated_to_subquery_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inheritance(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inheritance(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_outer_key_is_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys_outer_key_is_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_on_entity_qsre_keys(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_complex_key_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_complex_key_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_single_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_single_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Left_join_projection_using_coalesce_tracking(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Left_join_projection_using_coalesce_tracking(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Left_join_projection_using_conditional_tracking(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Left_join_projection_using_conditional_tracking(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Left_join_with_GroupBy_with_composite_group_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Left_join_with_GroupBy_with_composite_group_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Logical_operation_with_non_null_parameter_optimizes_null_checks(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Logical_operation_with_non_null_parameter_optimizes_null_checks(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast_and_let(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast_and_let(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Member_access_on_derived_materialized_entity_using_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Member_access_on_derived_materialized_entity_using_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_derived_included_on_one_method(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_derived_included_on_one_method(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_expansion_inside_Contains_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_expansion_inside_Contains_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_expansion_with_member_pushdown_inside_Contains_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_expansion_with_member_pushdown_inside_Contains_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_rewrite_Distinct_with_convert +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_rewrite_Distinct_with_convert_anonymous +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_rewrite_with_convert1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_rewrite_with_convert1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_rewrite_with_convert2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_rewrite_with_convert2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_rewrite_with_convert3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nav_rewrite_with_convert3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_access_fk_on_derived_entity_using_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_access_fk_on_derived_entity_using_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_access_on_derived_entity_using_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_access_on_derived_entity_using_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_access_on_derived_materialized_entity_using_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_access_on_derived_materialized_entity_using_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_access_via_EFProperty_on_derived_entity_using_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_access_via_EFProperty_on_derived_entity_using_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_accessed_twice_outside_and_inside_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_accessed_twice_outside_and_inside_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_based_on_complex_expression1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_based_on_complex_expression1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_based_on_complex_expression2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_based_on_complex_expression2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_based_on_complex_expression3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_based_on_complex_expression3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_based_on_complex_expression4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_based_on_complex_expression4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_inside_interpolated_string_expanded(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_inside_interpolated_string_expanded(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nested_contains_with_enum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nested_contains_with_enum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column_right(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column_right(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization6(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_propagation_optimization6(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nullable_bool_comparison_is_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nullable_bool_comparison_is_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OfType_in_subquery_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OfType_in_subquery_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OfTypeNav1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OfTypeNav1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OfTypeNav2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OfTypeNav2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OfTypeNav3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OfTypeNav3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_Navigation_Null_Coalesce_To_Clr_Type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_Navigation_Null_Coalesce_To_Clr_Type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_all(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_all(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_array_initializers(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_array_initializers(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_and_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_and_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_conditional_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_conditional_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_DTOs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_DTOs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_list_initializers(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_list_initializers(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_negated_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_negated_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_skip(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_skip(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_with_collection_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Optional_navigation_with_collection_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_entity_qsre_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_entity_qsre_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_entity_qsre_with_inheritance(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_entity_qsre_with_inheritance(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_entity_qsre_with_other_orderbys(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_entity_qsre_with_other_orderbys(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_entity_qsre(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_entity_qsre(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OrderBy_bool_coming_from_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OrderBy_bool_coming_from_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OrderBy_Contains_empty_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OrderBy_Contains_empty_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OrderBy_StartsWith_with_null_parameter_as_argument(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.OrderBy_StartsWith_with_null_parameter_as_argument(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_collection_navigation_nested_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_collection_navigation_nested_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_derivied_entity_with_convert_to_parent(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_derivied_entity_with_convert_to_parent(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_discriminator_columns(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_discriminator_columns(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_equality_with_value_converted_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_equality_with_value_converted_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_one_value_type_converted_to_nullable_from_empty_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_one_value_type_converted_to_nullable_from_empty_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_one_value_type_from_empty_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_one_value_type_from_empty_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_shadow_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Project_shadow_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_nullable_bool_in_conditional_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_nullable_bool_in_conditional_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_new_array(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_new_array(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_required_string_column_compared_to_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_required_string_column_compared_to_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Property_access_on_derived_entity_using_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Property_access_on_derived_entity_using_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Reference_include_chain_loads_correctly_when_middle_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Reference_include_chain_loads_correctly_when_middle_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_as_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_as_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_coalesce_with_anonymous_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_coalesce_with_anonymous_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_comparison_with_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_comparison_with_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_conditional_with_anonymous_type_and_null_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_conditional_with_anonymous_type_and_null_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_conditional_with_anonymous_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_conditional_with_anonymous_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_correlated_filtered_collection_returning_queryable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_correlated_filtered_collection_returning_queryable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_correlated_filtered_collection_with_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_correlated_filtered_collection_with_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_correlated_filtered_collection_works_with_caching(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_correlated_filtered_collection_works_with_caching(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_correlated_filtered_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_correlated_filtered_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_datetimeoffset_comparison_in_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_datetimeoffset_comparison_in_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_inverted_boolean(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_inverted_boolean(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_inverted_nullable_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_inverted_nullable_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_length_of_string_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_length_of_string_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_multiple_conditions(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_multiple_conditions(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_nested_ternary_operations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_nested_ternary_operations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_conditional_with_inheritance_negative(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_conditional_with_inheritance_negative(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_conditional_with_inheritance(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_conditional_with_inheritance(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_parameter_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_parameter_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative6(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative6(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative7(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative7(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative8(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative8(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_negative9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_optimization7(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_optimization7(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_optimization8(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_optimization8(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_optimization9(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_optimization9(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_works_for_navigations_with_composite_keys(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_null_propagation_works_for_navigations_with_composite_keys(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_required_navigation_on_derived_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_required_navigation_on_derived_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_required_navigation_on_the_same_type_with_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_required_navigation_on_the_same_type_with_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Singleton_Navigation_With_Member_Access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Singleton_Navigation_With_Member_Access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_StartsWith_with_null_parameter_as_argument(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_StartsWith_with_null_parameter_as_argument(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_boolean_empty_with_pushdown(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_boolean_empty_with_pushdown(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_boolean_empty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_boolean_empty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_boolean_with_pushdown(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_boolean_with_pushdown(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_boolean(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_boolean(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean_empty2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean_empty2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_int_with_inside_cast_and_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_int_with_inside_cast_and_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_int_with_outside_cast_and_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_int_with_outside_cast_and_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_bool(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_bool(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_int(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_int(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_with_boolean(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_with_boolean(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_with_has_value_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_with_has_value_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_with_inverted_boolean(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_ternary_operation_with_inverted_boolean(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Equals_Navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Equals_Navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Included(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Included(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Null_Reverse(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Null_Reverse(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Select_Where_Navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Set_operator_with_navigation_in_projection_groupby_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Set_operator_with_navigation_in_projection_groupby_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Singleton_Navigation_With_Member_Access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Singleton_Navigation_With_Member_Access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_based_Include_navigation_on_derived_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_based_Include_navigation_on_derived_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_compare_with_null_conditional_argument(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_compare_with_null_conditional_argument(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_compare_with_null_conditional_argument2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_compare_with_null_conditional_argument2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_concat_nullable_expressions_are_coalesced(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_concat_nullable_expressions_are_coalesced(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_concat_on_various_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_concat_on_various_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_concat_with_null_conditional_argument(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_concat_with_null_conditional_argument(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_concat_with_null_conditional_argument2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.String_concat_with_null_conditional_argument2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_containing_join_gets_lifted_clashing_names(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_containing_join_gets_lifted_clashing_names(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_containing_join_projecting_main_from_clause_gets_lifted(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_containing_join_projecting_main_from_clause_gets_lifted(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_created_by_include_gets_lifted_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_created_by_include_gets_lifted_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_is_lifted_from_additional_from_clause(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_is_lifted_from_additional_from_clause(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_is_lifted_from_main_from_clause_of_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_is_lifted_from_main_from_clause_of_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_with_result_operator_is_not_lifted(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Subquery_with_result_operator_is_not_lifted(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Sum_with_no_data_nullable_double(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Sum_with_no_data_nullable_double(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Sum_with_optional_navigation_is_translated_to_sql(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Sum_with_optional_navigation_is_translated_to_sql(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Take_without_orderby_followed_by_orderBy_is_pushed_down3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Take_without_orderby_followed_by_orderBy_is_pushed_down3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_base_reference(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_base_reference(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_reference(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_reference(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_boolean_computed_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_boolean_computed_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_boolean_property_non_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_boolean_property_non_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_enum_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_string_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_string_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_join_key_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_join_key_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_throws_informative_error(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_throws_informative_error(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Unicode_string_literals_is_used_for_non_unicode_column_with_concat(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Unicode_string_literals_is_used_for_non_unicode_column_with_concat(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Using_indexer_on_byte_array_and_string_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Using_indexer_on_byte_array_and_string_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_any_subquery_without_collision(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_any_subquery_without_collision(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_bool_column_and_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_bool_column_and_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_bool_column_or_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_bool_column_or_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_coalesce_with_anonymous_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_coalesce_with_anonymous_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_compare_anonymous_types_with_uncorrelated_members(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_compare_anonymous_types_with_uncorrelated_members(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_compare_anonymous_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_compare_anonymous_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_conditional_equality_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_conditional_equality_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_conditional_equality_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_conditional_equality_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_conditional_equality_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_conditional_equality_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_contains_on_navigation_with_composite_keys(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_contains_on_navigation_with_composite_keys(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_count_subquery_without_collision(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_count_subquery_without_collision(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_is_properly_lifted_from_subquery_created_by_include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_is_properly_lifted_from_subquery_created_by_include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_member_access_on_anonymous_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_member_access_on_anonymous_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_null_parameter_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_null_parameter_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_required_navigation_on_derived_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_required_navigation_on_derived_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_boolean_with_pushdown(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_boolean_with_pushdown(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_boolean(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_boolean(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_distinct_singleordefault_boolean2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_distinct_singleordefault_boolean2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key_should_match_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key_should_match_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_with_enum_flags_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_with_enum_flags_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_EF_Property +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_no_tracking +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_no_tracking_EF_Property +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_shadow +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address_when_person_already_tracked +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_EF_Property +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_no_tracking +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_no_tracking_EF_Property +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_shadow +EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_person_when_address_already_tracked +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Changes_in_derived_related_entities_are_detected +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Collection_projection_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Collection_projection_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Entity_can_make_separate_relationships_with_base_type_and_derived_type_both +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_collection_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_reference_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.All_customers +EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.All_employees +EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.All_orders +EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.Project_nullable_enum +EntityFrameworkCore.Jet.FunctionalTests.Query.NavigationTest.Duplicate_entries_are_not_created_for_navigations_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.Query.NavigationTest.Duplicate_entries_are_not_created_for_navigations_to_principal +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.All_true(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.All_true(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Array_cast_to_IEnumerable_Contains_with_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Array_cast_to_IEnumerable_Contains_with_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column_in_subquery_with_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column_in_subquery_with_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_float_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_nav_subquery_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_nav_subquery_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_default_returns_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_default_returns_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_no_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_no_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_non_matching_types_in_projection_doesnt_produce_second_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_non_matching_types_in_projection_doesnt_produce_second_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_unmapped_property_access_throws_meaningful_exception(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_unmapped_property_access_throws_meaningful_exception(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Cast_before_aggregate_is_preserved(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Cast_before_aggregate_is_preserved(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Cast_to_same_Type_Count_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Cast_to_same_Type_Count_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Collection_Last_member_access_in_projection_translated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Collection_Last_member_access_in_projection_translated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Collection_LastOrDefault_member_access_in_projection_translated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Collection_LastOrDefault_member_access_in_projection_translated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_aggregate_function_with_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_aggregate_function_with_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Average_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Average_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Count_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Count_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_LongCount_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_LongCount_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Max_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Max_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Min_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Min_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Sum_without_GroupBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_inside_Sum_without_GroupBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_materialize_when_composite(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_materialize_when_composite(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_materialize_when_composite2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_materialize_when_composite2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_rewrite_to_identity_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_should_rewrite_to_identity_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_keyless_entity_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_keyless_entity_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_non_nullable_scalar_with_null_in_subquery_simplifies_to_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_non_nullable_scalar_with_null_in_subquery_simplifies_to_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_nullable_scalar_with_null_in_subquery_translated_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_nullable_scalar_with_null_in_subquery_translated_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_scalar_with_null_should_rewrite_to_identity_equality_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_over_scalar_with_null_should_rewrite_to_identity_equality_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_constant_list_value_type_id(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_constant_list_value_type_id(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_anonymous_type_array_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_anonymous_type_array_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_array_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_array_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_array_inline(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_array_inline(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_and(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_and(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_not_matching_ins1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_not_matching_ins1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_not_matching_ins2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_not_matching_ins2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_or(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_complex_predicate_or(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_empty_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_empty_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_empty_inline(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_empty_inline(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_sql_injection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_collection_sql_injection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_closure_all_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_closure_all_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_inline_closure_mix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_inline_closure_mix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_enumerable_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_closure_all_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_closure_all_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_inline_closure_mix(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_inline_closure_mix(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_inline(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_list_inline(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_non_primitive_list_closure_mix(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_non_primitive_list_closure_mix(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_non_primitive_list_inline_closure_mix(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_non_primitive_list_inline_closure_mix(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_nullable_uint_array_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_nullable_uint_array_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_enumerable_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_enumerable_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_list_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_list_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_ordered_enumerable_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_ordered_enumerable_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_read_only_collection_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_object_read_only_collection_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_closure_all_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_closure_all_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_inline_closure_mix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_inline_closure_mix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_enumerable_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_read_only_collection_all_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_ordered_read_only_collection_all_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_inline_closure_mix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_inline_closure_mix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_read_only_collection_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_tuple_array_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_tuple_array_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_uint_array_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_local_uint_array_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_parameter_list_value_type_id(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_parameter_list_value_type_id(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_static_IList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_static_IList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_subquery_and_local_array_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_subquery_and_local_array_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Contains_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_after_client_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_after_client_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_on_projection_with_client_eval(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_on_projection_with_client_eval(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_no_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_no_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Count_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_OrderBy3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_Scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct_Scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Enumerable_min_is_mapped_to_Queryable_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Enumerable_min_is_mapped_to_Queryable_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Enumerable_min_is_mapped_to_Queryable_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Enumerable_min_is_mapped_to_Queryable_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First_inside_subquery_gets_client_evaluated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First_inside_subquery_gets_client_evaluated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First_Predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First_Predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault_inside_subquery_gets_server_evaluated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault_inside_subquery_gets_server_evaluated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault_Predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault_Predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.HashSet_Contains_with_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.HashSet_Contains_with_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.IImmutableSet_Contains_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.IImmutableSet_Contains_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.ImmutableHashSet_Contains_with_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.ImmutableHashSet_Contains_with_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.IReadOnlySet_Contains_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.IReadOnlySet_Contains_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last_Predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last_Predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last_when_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last_when_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Last(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault_Predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault_Predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault_when_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault_when_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.LastOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_over_entityType_should_rewrite_to_identity_equality(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_over_entityType_should_rewrite_to_identity_equality(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_with_constant_list(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_with_constant_list(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_with_parameter_list(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.List_Contains_with_parameter_list(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_default_returns_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_default_returns_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_no_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_no_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_default_returns_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_default_returns_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_no_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_no_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Not_Any_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Not_Any_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select_OfType_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select_OfType_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_client_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_client_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate_client_eval_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate_client_eval_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Count_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Take_Last_gives_correct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Take_Last_gives_correct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_client_eval_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_client_eval_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate_client_eval_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate_client_eval_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Project_constant_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Project_constant_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Return_type_of_singular_operator_is_preserved(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Return_type_of_singular_operator_is_preserved(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_All(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_All(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_Select_Distinct_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_Select_Distinct_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Single_Predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Single_Predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Single_Throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Single_Throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.SingleOrDefault_Predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.SingleOrDefault_Predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.SingleOrDefault_Throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.SingleOrDefault_Throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.String_FirstOrDefault_in_projection_does_not_do_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.String_FirstOrDefault_in_projection_does_not_do_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_Any_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_Any_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_empty_returns_zero(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_empty_returns_zero(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_explicit_cast_over_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_explicit_cast_over_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_scalar_returning_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_scalar_returning_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_uncorrelated_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_uncorrelated_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_arg_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_arg_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_arg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_arg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_data_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_data_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_data_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_no_data_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_Last(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_Last(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_LastOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_LastOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_OrderBy_Count_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_OrderBy_Count_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_OrderBy_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_OrderBy_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_Single(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_Single(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_SingleOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_SingleOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals_static(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals_static(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_all_not_equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals_static(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals_static(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_any_equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_where_all(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_where_all(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_where_any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Where_subquery_where_any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_after_navigation_expansion(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_after_navigation_expansion(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_body_clause_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_body_clause_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_body_clause(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_body_clause(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_multiple_body_clauses(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_multiple_body_clauses(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Applied_to_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Can_get_current_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Can_get_current_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Entity_not_added_to_state_manager(useParam: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Entity_not_added_to_state_manager(useParam: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Entity_not_added_to_state_manager(useParam: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Entity_not_added_to_state_manager(useParam: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Query_fast_path_when_ctor_binding(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Query_fast_path_when_ctor_binding(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.SelectMany_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.SelectMany_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Where_simple_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsNoTrackingQueryJetTest.Where_simple_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Applied_to_body_clause +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Applied_to_body_clause_with_projection +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Applied_to_multiple_body_clauses +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Applied_to_projection +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Entity_added_to_state_manager(useParam: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAsTrackingQueryJetTest.Entity_added_to_state_manager(useParam: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.AsTracking_switches_tracking_on_when_off_in_options +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking_query_caching +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking_query_caching_single_context +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking_query_caching_using_options +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Can_disable_and_reenable_query_result_tracking_starting_with_NoTracking +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_does_not_revert_when_attached_on_DbContext +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_does_not_revert_when_attached_on_DbSet +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_range_does_not_revert_when_attached_dbContext +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_range_does_not_revert_when_attached_dbSet +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Entity_reverts_when_state_set_to_unchanged +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Multiple_entities_can_revert +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers2 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers3 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers4 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindChangeTrackingQueryJetTest.Precedence_of_tracking_modifiers5 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Compiled_query_when_does_not_end_in_query_operator +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Compiled_query_when_using_member_on_context +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Compiled_query_with_max_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.DbSet_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.DbSet_query_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.DbSet_query_first +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.DbSet_query_first_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.First_query_with_cancellation_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.First_query_with_single_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.First_query_with_single_parameter_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Keyless_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Keyless_query_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Keyless_query_first +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Keyless_query_first_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_ending_with_include +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_closure +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_closure_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_closure_async_null +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_closure_null +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_contains +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_single_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_single_parameter_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_single_parameter_with_include +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_three_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_three_parameters_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_two_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Query_with_two_parameters_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Untyped_context +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindCompiledQueryJetTest.Untyped_context_async +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_non_existing_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_non_existing_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindEFPropertyIncludeQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Client_evaluation_of_uncorrelated_method_call(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Client_evaluation_of_uncorrelated_method_call(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Order_by_length_twice_followed_by_projection_of_naked_collection_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Order_by_length_twice_followed_by_projection_of_naked_collection_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Order_by_length_twice(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Order_by_length_twice(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.StandardDeviation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.StandardDeviation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_int_compared_to_long(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_int_compared_to_long(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_nullable_datetime_compared_to_non_nullable(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_nullable_datetime_compared_to_non_nullable(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_round_works_correctly_in_projection_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_round_works_correctly_in_projection_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_round_works_correctly_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_round_works_correctly_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_truncate_works_correctly_in_projection_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_truncate_works_correctly_in_projection_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_truncate_works_correctly_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sum_over_truncate_works_correctly_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Variance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Variance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Where_functions_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Where_functions_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_after_GroupBy_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_after_GroupBy_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_after_GroupBy_aggregate2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_after_GroupBy_aggregate2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_with_predicate_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.All_with_predicate_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Anonymous_projection_Distinct_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Anonymous_projection_Distinct_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_after_GroupBy_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_after_GroupBy_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_with_predicate_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Any_with_predicate_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_after_GroupBy_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_after_GroupBy_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_after_GroupBy_without_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_after_GroupBy_without_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_with_predicate_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Count_with_predicate_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Distinct_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Distinct_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Distinct_GroupBy_OrderBy_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Distinct_GroupBy_OrderBy_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Element_selector_with_case_block_repeated_inside_another_case_block_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Element_selector_with_case_block_repeated_inside_another_case_block_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_complex_key_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_complex_key_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_multiple_properties_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_multiple_properties_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_nominal_type_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_nominal_type_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_anonymous_type_element_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_anonymous_type_element_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_non_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_non_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_projecting_collection_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_projecting_collection_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_projecting_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity_projecting_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_property_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_TagWith(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Final_GroupBy_TagWith(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_column_project_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_column_project_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_with_arithmetic_operation_inside_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_with_arithmetic_operation_inside_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_with_projection_into_DTO(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Group_by_with_projection_into_DTO(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_after_anonymous_projection_and_distinct_followed_by_another_anonymous_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_after_anonymous_projection_and_distinct_followed_by_another_anonymous_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_after_skip_0_take_0(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_after_skip_0_take_0(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_Contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_Contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_followed_another_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_followed_another_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_followed_by_another_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_followed_by_another_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_from_right_side_of_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_from_right_side_of_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_another_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_another_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_Join_converted_from_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_Join_converted_from_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_with_group_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_with_group_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_with_grouping_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_join_with_grouping_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_Join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_Join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_LeftJoin_converted_from_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Aggregate_LeftJoin_converted_from_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_over_a_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_over_a_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_projecting_conditional_expression_based_on_group_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_projecting_conditional_expression_based_on_group_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_projecting_conditional_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_projecting_conditional_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_without_selectMany_selecting_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_aggregate_without_selectMany_selecting_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_key_type_mismatch_with_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_key_type_mismatch_with_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_with_alias_Select_Key_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_anonymous_with_alias_Select_Key_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_based_on_renamed_property_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_based_on_renamed_property_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_based_on_renamed_property_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_based_on_renamed_property_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_complex_key_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_complex_key_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_composite_Key_as_part_of_element_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_composite_Key_as_part_of_element_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Dto_Sum_Min_Key_flattened_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Dto_Sum_Min_Key_flattened_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Key_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Key_flattened_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Key_flattened_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_part_Key_flattened_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum_Min_part_Key_flattened_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Composite_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_conditional_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_conditional_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Constant_with_element_selector_Select_Sum3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_constant_with_where_on_grouping_with_aggregate_operators(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_constant_with_where_on_grouping_with_aggregate_operators(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_count_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_count_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Dto_as_element_selector_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Dto_as_element_selector_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Dto_as_key_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Dto_as_key_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_element_selector_complex_aggregate4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_empty_key_Aggregate_Key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_empty_key_Aggregate_Key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_empty_key_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_empty_key_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_count_OrderBy_count_Select_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_count_OrderBy_count_Select_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_filter_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_group_Distinct_Select_Distinct_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_group_Distinct_Select_Distinct_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_group_Where_Select_Distinct_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_group_Where_Select_Distinct_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Key_as_part_of_element_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Key_as_part_of_element_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_let_orderby_projection_with_coalesce_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_let_orderby_projection_with_coalesce_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Min_Where_optional_relationship_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Min_Where_optional_relationship_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Min_Where_optional_relationship(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Min_Where_optional_relationship(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multi_navigation_members_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multi_navigation_members_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Sum_with_conditional_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Sum_with_conditional_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Sum_with_Select_conditional_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_multiple_Sum_with_Select_conditional_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_nominal_type_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_nominal_type_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_optional_navigation_member_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_optional_navigation_member_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_count_Select_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_count_Select_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_orderby_projection_with_coalesce_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_orderby_projection_with_coalesce_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_with_grouping_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_OrderBy_with_grouping_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_param_with_element_selector_Select_Sum3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_principal_key_property_optimization(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_principal_key_property_optimization(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_anonymous_element_selector_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_scalar_element_selector_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Average_with_group_enumerable_projected(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Average_with_group_enumerable_projected(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count_with_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count_with_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_key_multiple_times_and_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_key_multiple_times_and_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_with_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Key_with_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount_with_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount_with_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum_Min_Key_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum_Min_Key_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum_Min_Max_Avg(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum_Min_Max_Avg(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Property_Select_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_required_navigation_member_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_required_navigation_member_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_scalar_aggregate_in_set_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_scalar_aggregate_in_set_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_scalar_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_scalar_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_array(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_array(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_composed_list_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_composed_list_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_composed_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_composed_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_select_grouping_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_selecting_grouping_key_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_selecting_grouping_key_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Shadow3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Shadow3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_skip_0_take_0_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_skip_0_take_0_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Sum_constant_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Sum_constant_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Sum_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Sum_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_LongCount(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_LongCount(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Select_Where_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Select_Where_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Select_Where_Select_Min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Select_Where_Select_Min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Where_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_Where_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_with_grouping_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_Where_with_grouping_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_aggregate_through_navigation_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_aggregate_through_navigation_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_cast_inside_grouping_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_cast_inside_grouping_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_access_thru_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_access_thru_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_access_thru_nested_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_access_thru_nested_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_navigation_with_entity_key_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_navigation_with_entity_key_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_nested_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_group_key_being_nested_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_grouping_key_DateTime_Day(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_grouping_key_DateTime_Day(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_grouping_key_using_Like(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_grouping_key_using_Like(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_orderby_take_skip_distinct_followed_by_group_key_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_orderby_take_skip_distinct_followed_by_group_key_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_result_selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupBy_with_result_selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_complex_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_complex_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate_5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.GroupJoin_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_complex_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_complex_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_distinct_single_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_distinct_single_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_multijoins(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_multijoins(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_on_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_on_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_single_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_single_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_with_another_join(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_with_another_join(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_with_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate_with_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_groupby_anonymous_orderby_anonymous_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Join_groupby_anonymous_orderby_anonymous_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Key_plus_key_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Key_plus_key_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_after_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_after_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_after_GroupBy_without_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_after_GroupBy_without_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_with_predicate_after_GroupBy_without_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.LongCount_with_predicate_after_GroupBy_without_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.MinMax_after_GroupBy_aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.MinMax_after_GroupBy_aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_SelectMany_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_SelectMany_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_GroupBy_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_Skip_Take_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_Skip_Take_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_Take_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.OrderBy_Take_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_anonymous_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_anonymous_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_collection_of_scalar_before_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_collection_of_scalar_before_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_changes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_changes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_does_not_change(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_does_not_change(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_GroupBy_All(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_GroupBy_All(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_GroupBy_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Select_GroupBy_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.SelectMany_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.SelectMany_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Self_join_GroupBy_Aggregate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Self_join_GroupBy_Aggregate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Union_simple_groupby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Union_simple_groupby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Where_select_function_groupby_followed_by_another_select_with_aggregates(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindGroupByQueryJetTest.Where_select_function_groupby_followed_by_another_select_with_aggregates(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_right_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection_with_right_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeNoTrackingQuerySqlServerTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindIncludeQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Client_Join_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Client_Join_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Condition_on_entity_with_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Condition_on_entity_with_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors_one_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors_one_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_aggregate_anonymous_key_selectors2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_as_final_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_as_final_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_multiple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_multiple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_Project(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_Project(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_DefaultIfEmpty3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_ordering(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_ordering(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Subquery_with_Take_Then_SelectMany_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Subquery_with_Take_Then_SelectMany_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Where_OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Where_OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Inner_join_with_tautology_predicate_converts_to_cross_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Inner_join_with_tautology_predicate_converts_to_cross_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_complex_condition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_complex_condition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_entities_same_entity_twice(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_entities_same_entity_twice(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_entities(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_entities(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_anonymous_property_method_with_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_anonymous_property_method_with_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_anonymous_property_method(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_anonymous_property_method(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_predicate_with_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_predicate_with_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_with_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery_with_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_customers_orders_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_GroupJoin_DefaultIfEmpty_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_GroupJoin_DefaultIfEmpty_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_same_collection_force_alias_uniquefication(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_same_collection_force_alias_uniquefication(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_same_collection_multiple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_same_collection_multiple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.LeftJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.LeftJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.RightJoin(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.RightJoin(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.SelectMany_with_client_eval_with_constructor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.SelectMany_with_client_eval_with_constructor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Auto_initialized_view_set(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Auto_initialized_view_set(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Collection_correlated_with_keyless_entity_in_predicate_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Collection_correlated_with_keyless_entity_in_predicate_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Collection_of_entities_projecting_correlated_collection_of_keyless_entities(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Collection_of_entities_projecting_correlated_collection_of_keyless_entities(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity_with_pushdown_empty_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity_with_pushdown_empty_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Count_over_keyless_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Entity_mapped_to_view_on_right_side_of_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Entity_mapped_to_view_on_right_side_of_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_by_database_view(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_by_database_view(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_groupby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_groupby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_select_where_navigation_multi_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_select_where_navigation_multi_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_select_where_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_select_where_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_where_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_where_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_defining_query_and_correlated_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_defining_query_and_correlated_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_defining_query(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_defining_query(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_included_nav(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_included_nav(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_included_navs_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_included_navs_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_mixed_tracking(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_mixed_tracking(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_nav_defining_query(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.KeylessEntity_with_nav_defining_query(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Projecting_collection_correlated_with_keyless_entity_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Projecting_collection_correlated_with_keyless_entity_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Add_minutes_on_constant_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Add_minutes_on_constant_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_and_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_and_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_or_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_or_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_on_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_on_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery_ef_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery_ef_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_distinct_where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_complex_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_member_distinct_where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_subquery_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Anonymous_subquery_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested_negated3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_on_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_on_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_with_multiple_conditions_still_uses_exists(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_with_multiple_conditions_still_uses_exists(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.AsEnumerable_over_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.AsEnumerable_over_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Can_cast_CreateQuery_result_to_IQueryable_T_bug_1730 +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Can_convert_manually_build_expression_with_default(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Can_convert_manually_build_expression_with_default(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Cast_results_to_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Cast_results_to_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Cast_to_object_over_parameter_directly_in_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Cast_to_object_over_parameter_directly_in_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Checked_context_with_case_to_same_nullable_type_does_not_fail(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Checked_context_with_case_to_same_nullable_type_does_not_fail(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_unknown_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_unknown_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_in_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_in_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_in_static_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_in_static_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_method_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_code_using_instance_method_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_OrderBy_GroupBy_Group_ordering_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Client_OrderBy_GroupBy_Group_ordering_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Coalesce_Correct_Multiple_Same_TypeMapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Coalesce_Correct_Multiple_Same_TypeMapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Coalesce_Correct_TypeMapping_String(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Coalesce_Correct_TypeMapping_String(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_constant_zero(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_constant_zero(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equal_to_null_for_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equal_to_null_for_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equality_rewrite_for_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_navigation_equality_rewrite_for_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_projection_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_projection_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_projection_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Collection_projection_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Column_access_inside_subquery_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Column_access_inside_subquery_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_collection_navigation_with_itself(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_collection_navigation_with_itself(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_using_equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_using_equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_with_different_property_chains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_with_different_property_chains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_with_different_query_sources(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compare_two_collection_navigations_with_different_query_sources(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_collection_navigation_to_null_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_collection_navigation_to_null_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_collection_navigation_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_collection_navigation_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_different_entity_types_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_different_entity_types_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_entities_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_entities_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_entity_to_null_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_entity_to_null_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_navigations_using_static_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_navigations_using_static_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_collection_navigations_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_collection_navigations_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_entities_using_Equals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_entities_using_Equals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_to_fixed_string_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_to_fixed_string_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compiler_generated_local_closure_produces_valid_parameter_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compiler_generated_local_closure_produces_valid_parameter_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_query_model_compiles_correctly(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_query_model_compiles_correctly(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_constant_string_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_constant_string_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_int_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_int_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_parameter_string_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_parameter_string_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_string_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_string_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concurrent_async_queries_when_raw_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_on_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_on_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_columns_both_fixed_length(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_columns_both_fixed_length(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_columns_with_different_sizes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_columns_with_different_sizes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_parameter_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_parameter_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_with_DateTime_Date(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_with_DateTime_Date(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_with_subquery_involving_join_binds_to_correct_table(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_with_subquery_involving_join_binds_to_correct_table(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Context_based_client_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Context_based_client_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Convert_to_nullable_on_nullable_value_is_ignored(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Convert_to_nullable_on_nullable_value_is_ignored(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_in_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_in_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_top_level_arg_followed_by_projecting_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_top_level_arg_followed_by_projecting_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_top_level_arg(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DefaultIfEmpty_top_level_arg(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Dependent_to_principal_navigation_equal_to_null_for_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Dependent_to_principal_navigation_equal_to_null_for_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_followed_by_ordering_on_condition(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_followed_by_ordering_on_condition(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Take_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Take_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Distinct_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_distinct_where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_complex_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_result(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_member_distinct_where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_subquery_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.DTO_subquery_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.EF_Property_include_on_incorrect_property_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.EF_Property_include_on_incorrect_property_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_contains_with_list_of_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_contains_with_list_of_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_double_check(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_double_check(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_inline_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_inline_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_inline(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local_inline(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_local(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_not_null_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_not_null_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_null_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_null_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_on_subquery_with_null_check(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_on_subquery_with_null_check(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby_descending_composite_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby_descending_composite_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby_descending_subquery_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby_descending_subquery_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_orderby(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_self(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_self(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_DTO_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_DTO_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_nested_anonymous_type_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_nested_anonymous_type_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_subquery_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_subquery_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_through_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_with_null_coalesce_client_side(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Entity_equality_with_null_coalesce_client_side(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Environment_newline_is_funcletized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Environment_newline_is_funcletized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Filter_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Filter_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.First_client_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.First_client_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.First_on_collection_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.First_on_collection_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.FirstOrDefault_with_predicate_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.FirstOrDefault_with_predicate_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Funcletize_conditional_with_evaluatable_test(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Funcletize_conditional_with_evaluatable_test(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Include_with_orderby_skip_preserves_ordering(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Include_with_orderby_skip_preserves_ordering(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Inner_parameter_in_nested_lambdas_gets_preserved(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Inner_parameter_in_nested_lambdas_gets_preserved(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Int16_parameter_can_be_used_for_int_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Int16_parameter_can_be_used_for_int_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.IQueryable_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Skip_Take_followed_by_constant_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Skip_Take_followed_by_constant_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_OrderBy_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_OrderBy_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_take_count_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_take_count_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Where_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Where_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_with_entity_equality_local_on_both_sources(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_with_entity_equality_local_on_both_sources(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Late_subquery_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Late_subquery_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_any_subquery_anonymous(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_any_subquery_anonymous(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_entity_equality_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_entity_equality_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_entity_equality_to_other_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_entity_equality_to_other_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_subquery_with_multiple_occurrences(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Let_subquery_with_multiple_occurrences(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Lifting_when_subquery_nested_order_by_anonymous(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Lifting_when_subquery_nested_order_by_anonymous(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Lifting_when_subquery_nested_order_by_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Lifting_when_subquery_nested_order_by_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Load_should_track_results(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Load_should_track_results(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Local_dictionary(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Local_dictionary(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Manual_expression_tree_typed_null_equality(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Manual_expression_tree_typed_null_equality(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Max_on_empty_sequence_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Max_on_empty_sequence_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.MemberInitExpression_NewExpression_is_funcletized_even_when_bindings_are_not_evaluatable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.MemberInitExpression_NewExpression_is_funcletized_even_when_bindings_are_not_evaluatable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Mixed_sync_async_in_query_cache +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Mixed_sync_async_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_set(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances_set(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_context_instances(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_joins_Where_Order_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Multiple_joins_Where_Order_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Navigation_inside_interpolated_string_is_expanded(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Navigation_inside_interpolated_string_is_expanded(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_fully_translated_manually_constructed_LOJ(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.No_orderby_added_for_fully_translated_manually_constructed_LOJ(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Non_nullable_property_through_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Non_nullable_property_through_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_Coalesce_Short_Circuit_with_server_correlated_leftover(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_Coalesce_Short_Circuit_with_server_correlated_leftover(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_Coalesce_Short_Circuit(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_Coalesce_Short_Circuit(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_parameter_name_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Null_parameter_name_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Orderby_added_for_client_side_GroupJoin_principal_to_dependent_LOJ(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Orderby_added_for_client_side_GroupJoin_principal_to_dependent_LOJ(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_anon(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_anon(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_anon2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_anon2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_arithmetic(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_arithmetic(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_client_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_client_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_skip_take_distinct_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_skip_take_distinct_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_skip_take_distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_skip_take_distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_take_distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_coalesce_take_distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_comparison_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_comparison_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_condition_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_condition_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_conditional_operator_where_condition_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_conditional_operator_where_condition_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_conditional_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_conditional_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_correlated_subquery1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_correlated_subquery1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Dto_projection_skip_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Dto_projection_skip_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_empty_list_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_empty_list_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_empty_list_does_not_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_empty_list_does_not_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_integer(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_integer(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_multiple_queries(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_multiple_queries(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_multiple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_multiple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_null_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_null_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_object_type_server_evals(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_object_type_server_evals(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_OrderBy_same_column_different_direction(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_OrderBy_same_column_different_direction(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_scalar_primitive(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_scalar_primitive(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_SelectMany(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_SelectMany(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_distinct_orderby_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_distinct_orderby_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_take_take_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_take_take_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_skip_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Take_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_Take_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ternary_conditions(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ternary_conditions(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_same_column_different_direction(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy_same_column_different_direction(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_ThenBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderBy(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending_ThenBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending_ThenBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending_ThenByDescending(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending_ThenByDescending(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.OrderByDescending(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_collection_Contains_with_projection_and_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_collection_Contains_with_projection_and_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_can_throw_exception_from_user_code_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_can_throw_exception_from_user_code_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_can_throw_exception_from_user_code(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_can_throw_exception_from_user_code(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Parameter_extraction_short_circuits_3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Pending_selector_in_cardinality_reducing_method_is_applied_before_expanding_collection_navigation_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Pending_selector_in_cardinality_reducing_method_is_applied_before_expanding_collection_navigation_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances_across_joins(async: False, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances_across_joins(async: False, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances_across_joins(async: True, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances_across_joins(async: True, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances(async: False, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances(async: False, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances(async: True, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Perform_identity_resolution_reuses_same_instances(async: True, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projecting_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projecting_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projecting_collection_then_include_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projecting_collection_then_include_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_null_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_null_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Projection_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_compiler_concurrency +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_composition_against_ienumerable_set +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_expression_with_to_string_and_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_expression_with_to_string_and_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_when_evaluatable_queryable_method_call_with_repository(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Query_when_evaluatable_queryable_method_call_with_repository(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_nested_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_nested_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_reprojection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_reprojection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous_projection_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous_projection_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple_anonymous(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Queryable_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Race_when_context_disposed_before_query_termination +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_filtered_returning_queryable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_filtered_returning_queryable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_filtered(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_filtered(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_ordered_returning_queryable_in_DTO_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_ordered_returning_queryable_in_DTO_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_ordered_returning_queryable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_correlated_subquery_ordered_returning_queryable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_long_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_long_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_Select_with_client_bindings(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_Select_with_client_bindings(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_distinct_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_collection_projection_translated_to_server_with_binding_after_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_collection_projection_translated_to_server_with_binding_after_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_collection_projection_translated_to_server(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_collection_projection_translated_to_server(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_navigation_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_constructor_distinct_with_navigation_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_distinct_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_distinct_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_used_in_projection_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_in_subquery_used_in_projection_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_translated_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_DTO_with_member_init_distinct_translated_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_above_the_range(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_above_the_range(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_below_the_range(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_below_the_range(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_large_number_divided(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_milliseconds_large_number_divided(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_year(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_date_add_year(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_hour(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_hour(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_minute(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_minute(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_month(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_month(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_second(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_second(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_ticks(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_datetime_add_ticks(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_int_to_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_int_to_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_long_to_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_long_to_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_other_to_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_other_to_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_references_are_updated_correctly_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_expression_references_are_updated_correctly_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_many_cross_join_same_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_many_cross_join_same_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_count_using_DTO(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_count_using_DTO(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_in_anonymous_type_returning_ordered_queryable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_in_anonymous_type_returning_ordered_queryable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_in_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_in_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_with_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_with_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_null_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_null_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_long_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_long_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_OrderDescending(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_OrderDescending(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_non_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_non_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow_unconstrained_generic_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow_unconstrained_generic_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_subquery_recursive_trivial_returning_queryable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_subquery_recursive_trivial_returning_queryable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_average(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_average(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_long_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_long_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_max(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_max(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_min(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_min(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_null_coalesce_operator(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_null_coalesce_operator(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_take_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Deep_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Deep_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Deep_Single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Deep_Single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Equality(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Where_Subquery_Equality(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Selected_column_can_coalesce(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Selected_column_can_coalesce(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_after_client_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_after_client_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_cartesian_product_with_ordering(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_cartesian_product_with_ordering(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_subquery_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_subquery_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_with_DefaultIfEmpty_and_Select_value_type_in_selector_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_correlated_with_DefaultIfEmpty_and_Select_value_type_in_selector_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_customer_orders(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_customer_orders(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_entity_deep(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_entity_deep(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined_DefaultIfEmpty3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_Joined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_LongCount(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_LongCount(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_nested_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_nested_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_OrderBy_ThenBy_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_OrderBy_ThenBy_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_primitive_select_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_primitive_select_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_primitive(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_primitive(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_projection1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_projection1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_projection2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_projection2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SelectMany_simple2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Shaper_command_caching_when_parameter_names_different(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Shaper_command_caching_when_parameter_names_different(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Single_Predicate_Cancellation +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_0_Take_0_works_when_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_0_Take_0_works_when_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_0_Take_0_works_when_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_0_Take_0_works_when_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_1_Take_0_works_when_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_1_Take_0_works_when_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_All(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_All(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Any_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Any_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Distinct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take_Distinct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SkipWhile_throws_meaningful_exception(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SkipWhile_throws_meaningful_exception(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Static_member_access_gets_parameterized_within_larger_evaluatable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Static_member_access_gets_parameterized_within_larger_evaluatable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_include_on_incorrect_property_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_include_on_incorrect_property_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_is_not_null_translated_correctly(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_is_not_null_translated_correctly(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_is_null_translated_correctly(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_is_null_translated_correctly(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_0_works_when_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_0_works_when_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_All(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_All(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Any_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Any_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Distinct_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Distinct_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_OrderBy_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_OrderBy_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple_parameterized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple_parameterized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_subquery_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_subquery_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Where_Distinct_Count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Where_Distinct_Count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_with_single_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_with_single_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_with_single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_with_single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Not_Null_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Not_Null_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Not_Null_endsWith_Non_Numeric_First_Part(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Not_Null_endsWith_Non_Numeric_First_Part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Null_Equals_Non_Numeric_First_Part(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Null_Equals_Non_Numeric_First_Part(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Null_StartsWith(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_Null_StartsWith(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_should_not_evaluate_both_sides_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_should_not_evaluate_both_sides_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_should_not_evaluate_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Ternary_should_not_evaluate_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Throws_on_concurrent_query_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Throws_on_concurrent_query_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Throws_on_concurrent_query_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Throws_on_concurrent_query_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToArray_over_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToArray_over_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToList_over_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToList_over_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToListAsync_can_be_canceled +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToListAsync_with_canceled_token +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToString_with_formatter_is_evaluated_on_the_client(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.ToString_with_formatter_is_evaluated_on_the_client(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Using_static_string_Equals_with_StringComparison_throws_informative_error(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Using_static_string_Equals_with_StringComparison_throws_informative_error(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Using_string_Equals_with_StringComparison_throws_informative_error(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Using_string_Equals_with_StringComparison_throws_informative_error(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists_Constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists_Constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists_Inequality(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists_Inequality(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Exists(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Not_Exists(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Join_Not_Exists(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_orderby_join_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_orderby_join_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Order_First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Order_First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_join_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_join_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_shadow_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_shadow_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_non_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_non_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_shadow_unconstrained_generic_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_shadow_unconstrained_generic_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_shadow(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Property_when_shadow(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_Single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_Single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_Single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_Single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_SingleOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_no_elements_SingleOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_First(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_First(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_Single(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_Single(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_SingleOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_entity_equality_one_element_SingleOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2_FirstOrDefault_with_anonymous(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2_FirstOrDefault_with_anonymous(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_query_composition6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or_with_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or_with_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many_or4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_select_many(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_anon_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_anon_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_anon(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_anon(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_expression_same_parametername(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_expression_same_parametername(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_on_bool(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_on_bool(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_on_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_on_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_recursive_trivial(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_subquery_recursive_trivial(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_orderby_nav_prop_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_orderby_nav_prop_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_all_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_all_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_all(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_all(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_first_or_default_then_nav_prop_nested_using_property_method(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_first_or_default_then_nav_prop_nested_using_property_method(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_first_or_default_then_nav_prop_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_first_or_default_then_nav_prop_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_long_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_long_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_single_or_default_then_nav_prop_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_single_or_default_then_nav_prop_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_sum_plus_one(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_sum_plus_one(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_select_nav_prop_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_all_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_all_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_all(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_all(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_any_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_any_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_any(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_any(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_count_reverse(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_count_reverse(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_count(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_count(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Collection_where_nav_prop_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Include_with_multiple_optional_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Include_with_multiple_optional_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_in_orderby_in_subquery_when_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_in_orderby_in_subquery_when_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_in_predicate_in_subquery_when_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_in_predicate_in_subquery_when_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_projected_in_subquery_when_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Join_with_nav_projected_in_subquery_when_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Multiple_include_with_multiple_optional_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Multiple_include_with_multiple_optional_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_fk_based_inside_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_fk_based_inside_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_from_join_clause_inside_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_from_join_clause_inside_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_in_subquery_referencing_outer_query(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_in_subquery_referencing_outer_query(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_inside_contains_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_inside_contains_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_inside_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_inside_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_with_collection_with_nullable_type_key(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Navigation_with_collection_with_nullable_type_key(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Project_single_scalar_value_subquery_in_query_with_optional_navigation_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Project_single_scalar_value_subquery_in_query_with_optional_navigation_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Project_single_scalar_value_subquery_is_properly_inlined(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Project_single_scalar_value_subquery_is_properly_inlined(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_FirstOrDefault_project_single_column1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_FirstOrDefault_project_single_column1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_FirstOrDefault_project_single_column2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_FirstOrDefault_project_single_column2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_multi_part(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_multi_part(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_multi_part2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_multi_part2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple_followed_by_ordering_by_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple_followed_by_ordering_by_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_collection_navigation_simple2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_count_plus_sum(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_count_plus_sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_multiple_complex_projections(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_multiple_complex_projections(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigations_Where_Navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigations_Where_Navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Singleton_Navigation_With_Member_Access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Singleton_Navigation_With_Member_Access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Deep(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Deep(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Equals_Navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Equals_Navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Included(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Included(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Multiple_Access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Multiple_Access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null_Deep(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null_Deep(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null_Reverse(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null_Reverse(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Select_Where_Navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Singleton_Navigation_With_Member_Access(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Singleton_Navigation_With_Member_Access(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindNavigationsQueryJetTest.Where_subquery_on_navigation2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Compiled_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Count_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Count_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Entity_Equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Entity_Equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Find(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Find(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.FromSql_is_composed +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.FromSql_is_composed_when_filter_has_navigation +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Include_query_opt_out(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Include_query_opt_out(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Include_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Include_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_many_to_one_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_many_to_one_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_many_to_one_query2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_many_to_one_query2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_one_to_many_query_with_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Included_one_to_many_query_with_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query_parameter_new_context(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query_parameter_new_context(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Materialized_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Project_reference_that_itself_has_query_filter_with_another_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Project_reference_that_itself_has_query_filter_with_another_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Projection_query_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Projection_query_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Projection_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryFiltersQueryJetTest.Projection_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Duplicate_tags +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_multiline_tag +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_multiline_tag_with_empty_lines +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_multiple_multiline_tag +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_multiple_tags +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Single_query_tag +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Tag_on_include_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Tag_on_scalar_query +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindQueryTaggingQueryJetTest.Tags_on_subquery +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_AsNoTracking_Selector(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_AsNoTracking_Selector(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_with_repeated_property_being_ordered_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_with_repeated_property_being_ordered_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_with_repeated_property_being_ordered(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Anonymous_projection_with_repeated_property_being_ordered(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Cast_on_top_level_projection_brings_explicit_Cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Cast_on_top_level_projection_brings_explicit_Cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_method_in_projection_requiring_materialization_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_method_in_projection_requiring_materialization_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_method_in_projection_requiring_materialization_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_method_in_projection_requiring_materialization_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_projection_via_ctor_arguments(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_projection_via_ctor_arguments(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_projection_with_string_initialization_with_scalar_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Client_projection_with_string_initialization_with_scalar_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Coalesce_over_nullable_uint(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Coalesce_over_nullable_uint(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_FirstOrDefault_with_entity_equality_check_in_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_FirstOrDefault_with_entity_equality_check_in_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_FirstOrDefault_with_nullable_unsigned_int_column(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_FirstOrDefault_with_nullable_unsigned_int_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_projection_AsNoTracking_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_projection_AsNoTracking_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Custom_projection_reference_navigation_PK_to_FK_optimization(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Custom_projection_reference_navigation_PK_to_FK_optimization(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Entity_passed_to_DTO_constructor_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Entity_passed_to_DTO_constructor_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_is_tracked(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_is_tracked(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_with_to_list_is_tracked(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_with_to_list_is_tracked(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.FirstOrDefault_over_empty_collection_of_value_type_returns_correct_results(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.FirstOrDefault_over_empty_collection_of_value_type_returns_correct_results(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.LastOrDefault_member_access_in_projection_translates_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.LastOrDefault_member_access_in_projection_translates_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_from_result_of_single_result_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_from_result_of_single_result_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_from_result_of_single_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_from_result_of_single_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_of_list_of_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.List_of_list_of_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Member_binding_after_ctor_arguments_fails_with_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Member_binding_after_ctor_arguments_fails_with_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.MemberInit_in_projection_without_arguments(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.MemberInit_in_projection_without_arguments(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Multiple_select_many_with_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Multiple_select_many_with_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.New_date_time_in_anonymous_type_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.New_date_time_in_anonymous_type_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_non_nullable_value_after_FirstOrDefault_on_empty_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_non_nullable_value_after_FirstOrDefault_on_empty_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_followed_by_projection_of_length_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_followed_by_projection_of_length_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_to_int_array(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_to_int_array(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_to_object_array(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_to_object_array(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_uint_through_collection_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Project_uint_through_collection_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_collection_using_convert(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_collection_using_convert(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_count_of_navigation_which_is_generic_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_Length_of_a_string_property_after_FirstOrDefault_on_correlated_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_Length_of_a_string_property_after_FirstOrDefault_on_correlated_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_multiple_collection_with_same_constant_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_multiple_collection_with_same_constant_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_nullable_struct(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projecting_nullable_struct(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_AsEnumerable_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_AsEnumerable_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_containing_DateTime_subtraction(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_containing_DateTime_subtraction(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_custom_type_in_both_sides_of_ternary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_custom_type_in_both_sides_of_ternary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_Distinct_projection_preserves_columns_used_for_distinct_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_Distinct_projection_preserves_columns_used_for_distinct_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_entity_type_into_object_array(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_entity_type_into_object_array(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_entity_type_into_object_list(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_entity_type_into_object_list(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_multiple_entity_types_into_object_array(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_of_multiple_entity_types_into_object_array(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_take_predicate_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_take_predicate_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_take_projection_doesnt_project_intermittent_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_take_projection_doesnt_project_intermittent_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_expression_precedence(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_expression_precedence(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_expressions(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_expressions(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_mixed_subqueries(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_mixed_subqueries(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_mixed(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_arithmetic_mixed(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_client_evald_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_client_evald_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_null_value(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_when_null_value(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_with_parameterized_constructor_with_member_assignment(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_with_parameterized_constructor_with_member_assignment(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_with_parameterized_constructor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Projection_with_parameterized_constructor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_multiple_orderbys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_multiple_orderbys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_orderBy_and_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_orderBy_and_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_orderby_thenby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_after_orderby_thenby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_changes_asc_order_to_desc(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_changes_asc_order_to_desc(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_changes_desc_order_to_asc(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_changes_desc_order_to_asc(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_inner(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_inner(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_outer_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_outer_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_outer(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_join_outer(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_projection_scalar_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_projection_scalar_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_subquery_via_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_in_subquery_via_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_without_explicit_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Reverse_without_explicit_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_bool_constant_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_bool_constant_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_conditional_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_conditional_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_constant_in_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_constant_in_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_literal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_literal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_one(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_one(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_three(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_three(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_two(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_two(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_with_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_anonymous_with_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure_with_order_by_property_with_cast_to_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure_with_order_by_property_with_cast_to_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure_with_order_parameter_with_cast_to_nullable(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure_with_order_parameter_with_cast_to_nullable(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_bool_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_byte_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_byte_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_drops_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_drops_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_results(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_results(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_tests(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_tests(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_terminates_at_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_terminates_at_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_with_null_comparison_in_test(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_with_null_comparison_in_test(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_int(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_int(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_null_string(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_null_string(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_customer_identity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_customer_identity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_customer_table(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_customer_table(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_day_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_day_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_day_of_year_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_day_of_year_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_DayOfWeek_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_DayOfWeek_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_hour_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_hour_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_millisecond_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_millisecond_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_minute_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_minute_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_month_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_month_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_second_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_second_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_Ticks_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_Ticks_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_TimeOfDay_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_TimeOfDay_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_year_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_year_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_entity_compared_to_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_entity_compared_to_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_GetValueOrDefault_on_DateTime_with_null_values(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_GetValueOrDefault_on_DateTime_with_null_values(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_GetValueOrDefault_on_DateTime(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_GetValueOrDefault_on_DateTime(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_into(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_into(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_local(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_local(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_count_using_anonymous_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_count_using_anonymous_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level5(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level5(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level6(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection_multi_level6(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_nested_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_anonymous_type_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_anonymous_type_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_binary_expression_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_binary_expression_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_binary_expression_nested_introduces_top_level_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_binary_expression_nested_introduces_top_level_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_length_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_length_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_method_call_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_method_call_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_int_to_long_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_int_to_long_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_int_to_nullable_int_doesnt_introduce_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_int_to_nullable_int_doesnt_introduce_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_nullable_int_to_int_doesnt_introduce_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_nullable_int_to_int_doesnt_introduce_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_nullable_int_to_long_introduces_explicit_cast(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_non_matching_value_types_nullable_int_to_long_introduces_explicit_cast(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_over_10_nested_ternary_condition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_over_10_nested_ternary_condition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_project_filter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_project_filter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_project_filter2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_project_filter2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar_primitive_after_take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar_primitive_after_take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar_primitive(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar_primitive(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_short_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_short_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_with_complex_expression_that_can_be_funcletized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_with_complex_expression_that_can_be_funcletized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_with_multiple_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_with_multiple_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_with_collection_being_correlated_subquery_which_references_non_mapped_properties_from_inner_and_outer_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_with_collection_being_correlated_subquery_which_references_non_mapped_properties_from_inner_and_outer_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_with_nested_DefaultIfEmpty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_with_nested_DefaultIfEmpty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_without_result_selector_collection_navigation_composed(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_without_result_selector_collection_navigation_composed(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_without_result_selector_naked_collection_navigation(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.SelectMany_without_result_selector_naked_collection_navigation(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Ternary_in_client_eval_assigns_correct_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Ternary_in_client_eval_assigns_correct_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.ToList_Count_in_projection_works(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.ToList_Count_in_projection_works(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Using_enumerable_parameter_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Using_enumerable_parameter_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.VisitLambda_should_not_be_visited_trivially(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.VisitLambda_should_not_be_visited_trivially(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Client_eval_Union_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Client_eval_Union_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_after_set_operation_fails_if_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_after_set_operation_fails_if_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_after_set_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_after_set_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_before_set_operation_fails(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Collection_projection_before_set_operation_fails(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_non_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_non_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_distinct_on_both_source_and_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_distinct_on_both_source_and_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_distinct_on_one_source_and_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_distinct_on_one_source_and_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_one_side_being_GroupBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_one_side_being_GroupBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat_with_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Concat(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.GroupBy_Select_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.GroupBy_Select_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union_different_includes_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union_different_includes_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union_only_on_one_side_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union_only_on_one_side_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Include_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Nested_concat_with_distinct_in_the_middle_and_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Nested_concat_with_distinct_in_the_middle_and_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Nested_concat_with_pruning(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Nested_concat_with_pruning(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.OrderBy_Take_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.OrderBy_Take_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union_different_fields_in_anonymous_with_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union_different_fields_in_anonymous_with_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union_unrelated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union_unrelated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Select_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.SubSelect_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.SubSelect_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Include(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Include(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_inside_Concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_inside_Concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_non_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_non_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_plus_other_column_with_correlated_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_plus_other_column_with_correlated_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_with_correlated_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_with_correlated_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_OrderBy_Skip_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_OrderBy_Skip_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_binary_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_column_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_columns_with_different_nullability(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_columns_with_different_nullability(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_constant_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_function_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_Take1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_Take1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_Take2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_Take2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_without_Skip_Take1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_without_Skip_Take1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_without_Skip_Take2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_OrderBy_without_Skip_Take2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_scalarsubquery_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_binary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_binary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_scalarsubquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_scalarsubquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_over_unary_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Select_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Select_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Take_Union_Take(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Take_Union_Take(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Where(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_Where(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_anonymous_type_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_anonymous_type_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_different_store_types_is_fine_if_database_can_translate_it(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_different_store_types_is_fine_if_database_can_translate_it(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_type_mappings_to_same_store_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_with_type_mappings_to_same_store_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_skip_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_skip_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_skip_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_skip_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_multiple_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection_with_multiple_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_collection_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_collection_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_collection_result_operator2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_collection_result_operator2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Repro9735(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Repro9735(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeNoTrackingQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_skip_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_skip_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_skip_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_skip_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_multiple_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection_with_multiple_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_collection_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_collection_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_collection_result_operator2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_collection_result_operator2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Repro9735(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Repro9735(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSplitIncludeQueryJetTest.ToQueryString_for_include_reference_and_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_composed_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_composed_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_composed_Join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_composed_Join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_over_int_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQuery_over_int_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQueryRaw_over_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSqlQueryJetTest.SqlQueryRaw_over_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Filtered_include_with_multiple_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Filtered_include_with_multiple_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_closes_reader(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_closes_reader(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_force_alias_uniquefication(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_on_additional_from_clause2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_on_join_clause_with_order_by_and_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key_with_first_or_default(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_order_by_non_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_OrderBy_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_OrderBy_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_orderby_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_orderby_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_principal_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_principal_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_single_or_default_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_take_no_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_take_no_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection_then_include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_client_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_client_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_conditional_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_last_no_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_last(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_last(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_left_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection_with_right_join_clause_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_duplicate_reference3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_empty_reference_sets_IsLoaded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_collection_and_then_include_reference_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_reference_and_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multi_level_reference_then_include_collection_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_multi_level_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_multiple_references(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_non_existing_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_non_existing_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property_after_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property_after_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_alias_generation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_alias_generation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_and_collection_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_and_collection_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_and_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_and_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_dependent_already_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_distinct_is_server_evaluated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_single_or_default_when_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_when_entity_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_when_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_when_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_with_filter_reordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_with_filter_reordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_and_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_and_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_and_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection_multi_level_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_references_then_include_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_specified_on_non_entity_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_when_result_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_when_result_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_where_skip_take_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_where_skip_take_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_complex_projection_does_not_change_ordering_of_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_complex_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_complex_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Include_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Multi_level_includes_are_applied_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Then_include_collection_order_by_collection_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Then_include_property_expression_invalid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindStringIncludeQueryJetTest.Then_include_property_expression_invalid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Array_of_parameters_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Array_of_parameters_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Case_block_simplification_works_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Case_block_simplification_works_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_AndAlso_another_Contains_gets_combined_to_one_in_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_AndAlso_another_Contains_gets_combined_to_one_in_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_another_Contains_gets_combined_to_one_in_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_another_Contains_gets_combined_to_one_in_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Decimal_cast_to_double_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Decimal_cast_to_double_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_does_not_parameterized_as_part_of_bigger_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_does_not_parameterized_as_part_of_bigger_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_non_evaluatable_argument_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_non_evaluatable_argument_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_MultipleParameters_with_non_evaluatable_argument_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_MultipleParameters_with_non_evaluatable_argument_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_non_evaluatable_argument_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_non_evaluatable_argument_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_const_member_does_not_generate_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_const_member_does_not_generate_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_readonly_member_generates_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_readonly_member_generates_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_settable_member_generates_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_settable_member_generates_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_non_nullable_value_after_FirstOrDefault_on_empty_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_non_nullable_value_after_FirstOrDefault_on_empty_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_EF_Property_using_closure_for_property_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_EF_Property_using_closure_for_property_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_EF_Property_using_function_for_property_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_EF_Property_using_function_for_property_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_property_compared_to_null_wrapped_in_explicit_convert_to_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Filter_with_property_compared_to_null_wrapped_in_explicit_convert_to_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.First_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.First_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.First_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.First_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_scalar_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_scalar_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_scalar_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.FirstOrDefault_over_scalar_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Generic_Ilist_contains_translates_to_server(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Generic_Ilist_contains_translates_to_server(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Implicit_cast_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Implicit_cast_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Interface_casting_though_generic_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Interface_casting_though_generic_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.LastOrDefault_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.LastOrDefault_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.LastOrDefault_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.LastOrDefault_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_AndAlso_on_same_column_converted_to_in_using_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_AndAlso_on_same_column_converted_to_in_using_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_converted_to_in_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_converted_to_in_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_with_null_constant_comparison_converted_to_in(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_with_null_constant_comparison_converted_to_in(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_with_null_parameter_comparison_converted_to_in(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Multiple_OrElse_on_same_column_with_null_parameter_comparison_converted_to_in(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Parameter_array_Contains_OrElse_comparison_with_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Parameter_array_Contains_OrElse_comparison_with_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Parameter_array_Contains_OrElse_comparison_with_parameter_with_overlap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Parameter_array_Contains_OrElse_comparison_with_parameter_with_overlap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Simplifiable_coalesce_over_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Simplifiable_coalesce_over_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Single_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Single_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Single_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Single_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Distinct_evaluation_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Distinct_evaluation_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Where_evaluation_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Where_evaluation_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_parameters_with_same_case_insensitive_name_get_uniquified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_parameters_with_same_case_insensitive_name_get_uniquified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_parameters_with_same_name_get_uniquified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_parameters_with_same_name_get_uniquified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.TypeBinary_short_circuit(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.TypeBinary_short_circuit(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Using_same_parameter_twice_in_query_generates_one_sql_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Using_same_parameter_twice_in_query_generates_one_sql_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_array_index(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_array_index(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_array_of_object_contains_over_value_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_array_of_object_contains_over_value_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_as_queryable_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_as_queryable_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_client_side_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_client_side_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_and_parameter_compared_to_binary_expression_nested(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_and_parameter_compared_to_binary_expression_nested(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_compared_to_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_compared_to_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_equals_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_equals_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_false_shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_false_shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_in_complex_predicate(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_in_complex_predicate(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_negated_twice(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_negated_twice(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member_shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_member(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_parameter_compared_to_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_parameter_compared_to_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_parameter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_bool_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_chain(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_chain(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_and_server_non_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_and_server_non_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_and_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_and_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_deep_inside_predicate_and_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_deep_inside_predicate_and_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_or_server_top_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client_or_server_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_AsEnumerable_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_AsEnumerable_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_AsEnumerable_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_AsEnumerable_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Length_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToArray_Length_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Count_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Count_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_collection_navigation_ToList_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_multi_value_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_multi_value_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_multi_value_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_constructed_multi_value_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_null_with_cast_to_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_null_with_cast_to_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_multi_value_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_multi_value_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_multi_value_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_constructed_multi_value_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_multi_value_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_multi_value_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_multi_value_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_tuple_create_constructed_multi_value_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_with_both_cast_to_object(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_compare_with_both_cast_to_object(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_nullable_type_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_nullable_type_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_nullable_type_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_nullable_type_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_to_nullable_bool(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_comparison_to_nullable_bool(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_complex_negated_expression_optimized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_complex_negated_expression_optimized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_constant_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_constant_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_constant_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_constant_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Contains_and_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Contains_and_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Contains_or_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Contains_or_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_de_morgan_and_optimized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_de_morgan_and_optimized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_de_morgan_or_optimized(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_de_morgan_or_optimized(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_default(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_default(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_dictionary_key_access_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_dictionary_key_access_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_method_int(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_method_int(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_matched_nullable_int_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_matched_nullable_int_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_int_nullable_int(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_int_nullable_int(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_nullable_int_long(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_nullable_int_long(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_nullable_long_nullable_int(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_mismatched_types_nullable_long_nullable_int(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_null_nullable_int_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_on_null_nullable_int_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_using_int_overload_on_mismatched_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_using_int_overload_on_mismatched_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_using_object_overload_on_mismatched_types(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_equals_using_object_overload_on_mismatched_types(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_expression_invoke_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_field_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_field_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_identity_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_identity_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_in_optimization_multiple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_in_optimization_multiple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_indexer_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_indexer_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_conditional(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_conditional(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Is_on_same_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Is_on_same_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_list_object_contains_over_value_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_list_object_contains_over_value_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_nullable_type_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_nullable_type_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_nullable_type_reverse_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_method_call_nullable_type_reverse_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_multiple_contains_in_subquery_with_and(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_multiple_contains_in_subquery_with_and(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_multiple_contains_in_subquery_with_or(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_multiple_contains_in_subquery_with_or(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_named_tuple_item_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_named_tuple_item_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_navigation_contains(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_navigation_contains(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_negated_boolean_expression_compared_to_another_negated_boolean_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_negated_boolean_expression_compared_to_another_negated_boolean_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache_error_method_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache_error_method_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache_error_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache_error_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_field_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_property_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_nested_property_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_new_instance_field_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_new_instance_field_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_new_instance_field_access_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_new_instance_field_access_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_bool_member_compared_to_binary_expression(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_bool_member_compared_to_binary_expression(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_bool_member_compared_to_not_bool_member(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_bool_member_compared_to_not_bool_member(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization1(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization1(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization2(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization3(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization3(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization4(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_not_in_optimization4(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_null_is_not_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_null_is_not_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_null_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_null_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_poco_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_poco_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive_tracked(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive_tracked(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive_tracked2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive_tracked2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_primitive(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_property_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_property_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Contains_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Contains_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_AsEnumerable_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Length_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToArray_Length_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Count_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Count_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_Queryable_ToList_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_select_many_and(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_select_many_and(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_shadow_subquery_FirstOrDefault(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_shadow_subquery_FirstOrDefault(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_short_member_comparison(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_short_member_comparison(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_constant(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_constant(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache_nullable_type_reverse(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache_nullable_type_reverse(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache_nullable_type(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache_nullable_type(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_reversed(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_reversed(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_projection_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_projection_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple_shadow(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_static_field_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_static_field_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_static_property_access_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_static_property_access_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_closure_via_query_cache(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_closure_via_query_cache(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_correlated_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_correlated_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_correlated(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_correlated(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_compared_to_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_compared_to_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_is_null(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_is_null(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_another_condition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_another_condition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_false_as_result_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_false_as_result_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_false_as_result_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_false_as_result_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_true(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_tuple_item_closure(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_tuple_item_closure(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.Include_with_non_nullable_FKs_and_nullable_PK +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.Include_with_null_fKs_and_non_nullable_PK +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.Include_with_null_fKs_and_nullable_PK +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.Include_with_null_FKs_and_nullable_PK +EntityFrameworkCore.Jet.FunctionalTests.Query.NullKeysJetTest.One_to_one_self_ref_Include +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_equal_nullable_bool_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_equal_nullable_bool_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_equal_nullable_bool_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_equal_nullable_bool_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_logical_operation_with_nullable_bool_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_logical_operation_with_nullable_bool_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_int_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_int_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_deeply_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_deeply_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_on_self_gets_simplified(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_on_self_gets_simplified(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_not_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_not_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_bool_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_not_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_not_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_bool_with_negated_bool_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_equal_equal_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_equal_equal_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_equal_not_equal_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_equal_not_equal_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_equal_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_equal_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_equal_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_equal_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_not_equal_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_not_equal_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_not_equal_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_complex_not_equal_not_equal_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_constant_true_to_expression_which_evaluates_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_constant_true_to_expression_which_evaluates_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_negated_static(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_negated_static(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_static(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method_static(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_equals_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_not_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_not_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_bool_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_not_equal_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_not_equal_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_negated_bool_with_negated_bool_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_nullable_with_non_null_parameter_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_nullable_with_non_null_parameter_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_nullable_with_null_parameter_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Compare_nullable_with_null_parameter_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Comparison_compared_to_null_check_on_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Comparison_compared_to_null_check_on_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_comparison_dont_get_combined_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_comparison_dont_get_combined_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_false_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_false_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_with_multiple_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_with_multiple_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_array_closure_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_nullable_array_closure_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Contains_with_local_nullable_array_closure_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Empty_subquery_with_contains_negated_returns_true(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Empty_subquery_with_contains_negated_returns_true(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Empty_subquery_with_contains_returns_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Empty_subquery_with_contains_returns_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.False_compared_to_negated_is_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.False_compared_to_negated_is_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.From_sql_composed_with_relational_null_comparison +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_negative(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_negative(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_with_setup(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_with_setup(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_intersection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_intersection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_negative(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_negative(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Is_null_on_column_followed_by_OrElse_optimizes_nullability_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.IsNull_on_complex_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.IsNull_on_complex_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Join_uses_database_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Join_uses_database_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like_with_escape_char(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like_with_escape_char(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Like(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_contains_calls_get_combined_into_one_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_contains_calls_get_combined_into_one_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_with_null_in_the_middle(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_with_null_in_the_middle(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_without_null_comparison_work_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Multiple_non_equality_comparisons_without_null_comparison_work_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_contains_with_comparison_dont_get_combined_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_contains_with_comparison_dont_get_combined_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_contains_with_comparison_without_null_get_combined_for_relational_null_semantics(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_contains_with_comparison_without_null_get_combined_for_relational_null_semantics(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_non_nullable_arguments_gets_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_non_nullable_arguments_gets_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_nullable_arguments_doesnt_get_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_nullable_arguments_doesnt_get_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nested_CompareTo_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nested_CompareTo_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_comparison_in_order_by_with_relational_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_comparison_in_order_by_with_relational_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_comparison_in_selector_with_relational_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_comparison_in_selector_with_relational_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_to_CompareTo_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_to_CompareTo_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_when_comparing_function_with_nullable_argument_to_a_nullable_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_when_comparing_function_with_nullable_argument_to_a_nullable_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_when_comparing_two_functions_with_nullable_arguments(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_applied_when_comparing_two_functions_with_nullable_arguments(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_array_with_no_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_array_with_no_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_non_nullable_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_non_nullable_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_nullable_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_nullable_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_non_nullable_item_with_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_nullable_item_with_non_nullable_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_nullable_item_with_non_nullable_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_nullable_item_with_nullable_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_nullable_item_with_nullable_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_non_nullable_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_non_nullable_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_nullable_column_and_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_nullable_column_and_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_nullable_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_inline_values_with_nullable_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_one_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_non_nullable_item_and_one_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_non_nullable_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_non_nullable_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_values_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_values_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_values_with_nullable_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_inline_values_with_nullable_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_one_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_one_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_values_with_nullable_column_and_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains_with_nullable_item_and_values_with_nullable_column_and_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_function(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_function(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_join_with_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_join_with_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_complex2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_complex2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_semantics_with_null_check_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullability_check_is_computed_correctly_for_chained_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullability_check_is_computed_correctly_for_chained_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullability_is_computed_correctly_for_chained_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullability_is_computed_correctly_for_chained_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_doesnt_propagate_between_projections(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_doesnt_propagate_between_projections(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_doesnt_propagate_inside_binary_OrElse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_doesnt_propagate_inside_binary_OrElse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_binary_AndAlso(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_binary_AndAlso(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_binary_OrElse_when_info_is_duplicated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_binary_OrElse_when_info_is_duplicated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagates_inside_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagation_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_column_info_propagation_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_string_FirstOrDefault_compared_to_nullable_string_LastOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nullable_string_FirstOrDefault_compared_to_nullable_string_LastOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_bool_with_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_bool_with_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_int_with_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_int_with_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Select_IndexOf(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Select_IndexOf(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.String_concat_with_both_arguments_being_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.String_concat_with_both_arguments_being_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Sum_function_is_always_considered_non_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Sum_function_is_always_considered_non_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Switching_null_semantics_produces_different_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Switching_parameter_value_to_null_produces_different_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_nonnull_constant_and_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_nonnull_constant_and_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_constant_and_nonnull_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_constant_and_nonnull_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_constant_and_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_constant_and_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_semantics_optimization_works_with_complex_predicates(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_null_semantics_optimization_works_with_complex_predicates(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_conditional_search_condition_in_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_conditional_search_condition_in_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_contains_on_parameter_array_with_just_null_with_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_contains_on_parameter_array_with_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_contains_on_parameter_empty_array_with_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_nullable_with_null_value_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_nullable_with_null_value_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_using_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_using_relational_null_semantics_complex_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_using_relational_null_semantics_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_and_and_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_and_and_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_coalesce_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_coalesce_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional_non_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional_non_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_IndexOf_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_IndexOf_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant_not_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant_not_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ors_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ors_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ors_with_nullable_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ors_with_nullable_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nested_conditional_search_condition_in_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nested_conditional_search_condition_in_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_nullable_with_null_value_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_nullable_with_null_value_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_using_relational_null_semantics +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_using_relational_null_semantics_complex_in_equals +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_using_relational_null_semantics_complex_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_using_relational_null_semantics_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_coalesce_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_coalesce_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_not_equal_with_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_equal_with_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_equal_with_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_with_null_check(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_with_null_check(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Bitwise_and_on_expression_with_like_and_null_check_being_compared_to_false +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Complex_predicate_with_bitwise_and_arithmetic_operations +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Complex_predicate_with_bitwise_and_modulo_and_negation +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Double_negate_on_column +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_binary_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_binary_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_like_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_like_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Or_on_two_nested_binaries_and_another_simple_comparison +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Projection_with_not_and_negation_on_integer +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Basic_projection_entity_with_all_optional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Basic_projection_entity_with_all_optional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Basic_projection_entity_with_some_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Basic_projection_entity_with_some_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_all_optional_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_all_optional_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_all_optional_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_all_optional_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_some_required_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_some_required_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_some_required_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_some_required_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.An_optional_dependent_without_any_columns_and_nested_dependent_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Can_auto_include_navigation_from_model +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Can_have_required_owned_type_on_derived_type +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Include_collection_for_entity_with_owned_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multilevel_owned_entities_determine_correct_nullability +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Nested_owned_required_dependents_are_materialized +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_collection_basic_split_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_collection_basic_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_multiple_level_in_aggregate +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_non_null_in_conditional_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_non_null_in_conditional_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_null_in_conditional_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_null_in_conditional_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_materializes_when_not_containing_another_owned_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_materializes_when_not_containing_another_owned_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_property_access_when_not_containing_another_owned_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_property_access_when_not_containing_another_owned_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_reference_mapped_to_different_table_nested_updated_correctly_after_subquery_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_reference_mapped_to_different_table_nested_updated_correctly_after_subquery_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_reference_mapped_to_different_table_updated_correctly_after_subquery_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_reference_mapped_to_different_table_updated_correctly_after_subquery_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.OwnsMany_correlated_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.OwnsMany_correlated_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Projecting_owned_collection_and_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Projecting_owned_collection_and_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_with_predicate_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_with_predicate_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_without_predicate_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_without_predicate_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_indexer_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_indexer_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_owned_indexer_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_owned_indexer_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_indexer_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_indexer_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_owned_indexer_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_owned_indexer_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_join_on_indexer_property_on_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_join_on_indexer_property_on_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_owned_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_owned_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_owned_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_owned_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_indexer_property_on_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_indexer_property_on_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_properties_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_properties_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_property_when_property_name_from_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_indexer_property_when_property_name_from_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_owned_indexer_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_on_owned_indexer_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_owner_with_different_owned_types_having_same_property_name_in_hierarchy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_query_owner_with_different_owned_types_having_same_property_name_in_hierarchy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_skip_take_loads_owned_navigations_variation_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_skip_take_loads_owned_navigations_variation_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_skip_take_loads_owned_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_skip_take_loads_owned_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations_variation_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations_variation_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Contains_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Contains_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Count_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Count_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAt_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAt_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAtOrDefault_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAtOrDefault_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_function_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_function_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.FirstOrDefault_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.FirstOrDefault_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.GroupBy_aggregate_on_owned_navigation_in_aggregate_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.GroupBy_aggregate_on_owned_navigation_in_aggregate_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Indexer_property_is_pushdown_into_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Indexer_property_is_pushdown_into_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Left_join_on_entity_with_owned_navigations_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Left_join_on_entity_with_owned_navigations_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Left_join_on_entity_with_owned_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Left_join_on_entity_with_owned_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection_with_composition_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection_with_composition_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection_with_composition(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection_with_composition(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_and_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_and_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_in_predicate_and_projection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_in_predicate_and_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_property(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_property(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_filter(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_filter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_followed_by_regular_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_projecting_entity(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_projecting_entity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_projecting_scalar(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Navigation_rewrite_on_owned_reference_projecting_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.No_ignored_include_warning_when_implicit_load(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.No_ignored_include_warning_when_implicit_load(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Non_nullable_property_through_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Non_nullable_property_through_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_does_not_throw_when_performing_identity_resolution(async: False, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_does_not_throw_when_performing_identity_resolution(async: False, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_does_not_throw_when_performing_identity_resolution(async: True, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_does_not_throw_when_performing_identity_resolution(async: True, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.NoTracking_Include_with_cycles_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Ordering_by_identifying_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Ordering_by_identifying_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Owned_entity_without_owner_does_not_throw_for_identity_resolution(async: False, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Owned_entity_without_owner_does_not_throw_for_identity_resolution(async: False, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Owned_entity_without_owner_does_not_throw_for_identity_resolution(async: True, useAsTracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Owned_entity_without_owner_does_not_throw_for_identity_resolution(async: True, useAsTracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Preserve_includes_when_applying_skip_take_after_anonymous_type_select(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Preserve_includes_when_applying_skip_take_after_anonymous_type_select(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_with_expansion_on_owned_collections(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_with_expansion_on_owned_collections(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_does_not_own_additional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_does_not_own_additional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_owns_additional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_owns_additional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_collection_correlated_with_keyless_entity_after_navigation_works_using_parent_identifiers(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_collection_correlated_with_keyless_entity_after_navigation_works_using_parent_identifiers(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_base_type_loads_all_owned_navs_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_base_type_loads_all_owned_navs_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_base_type_loads_all_owned_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_base_type_loads_all_owned_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs_tracking(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs_tracking(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_branch_type_loads_all_owned_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_leaf_type_loads_all_owned_navs(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_for_leaf_type_loads_all_owned_navs(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_loads_reference_nav_automatically_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_loads_reference_nav_automatically_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_on_collection_entry_works_for_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_on_collection_entry_works_for_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_when_subquery_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_when_subquery_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_when_subquery(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_when_subquery(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_with_OfType_eagerly_loads_correct_owned_navigations_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_with_OfType_eagerly_loads_correct_owned_navigations_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_with_OfType_eagerly_loads_correct_owned_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Query_with_OfType_eagerly_loads_correct_owned_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_with_result_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_with_result_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Set_throws_for_owned_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Set_throws_for_owned_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Simple_query_entity_with_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Simple_query_entity_with_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Skip_Take_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Skip_Take_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Throw_for_owned_entities_without_owner_in_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Throw_for_owned_entities_without_owner_in_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Trying_to_access_non_existent_indexer_property_throws_meaningful_exception(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Trying_to_access_non_existent_indexer_property_throws_meaningful_exception(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Unmapped_property_projection_loads_owned_navigations_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Unmapped_property_projection_loads_owned_navigations_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Unmapped_property_projection_loads_owned_navigations(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Unmapped_property_projection_loads_owned_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Using_from_sql_on_owner_generates_join_with_table_for_owned_shared_dependents(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Using_from_sql_on_owner_generates_join_with_table_for_owned_shared_dependents(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_AsEnumerable_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_AsEnumerable_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToArray_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToArray_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToArray_Length_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToArray_Length_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToList_Count_member(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToList_Count_member(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_owned_collection_navigation_ToList_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_owned_collection_navigation_ToList_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.BinaryExpression +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Concat +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Conditional_contains_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Conditional_no_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Contains_with_parameterized_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_field +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_local_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_method_invocation_result +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_property +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Dynamic_query_does_not_get_precompiled +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.EF_Constant_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Final_GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_async_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_sync_over_DbSet_property_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_sync_over_operator +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.FromSql_with_FormattableString_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.FromSqlRaw +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Include_single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Include_split +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Invoke_no_evaluatability_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_fully_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_no_evaluatability +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_with_evaluatable_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_with_evaluatable_without_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_contains_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_evaluatable_as_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_evaluatable_as_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_no_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_fully_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_no_evaluatability +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_with_evaluatable_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_with_evaluatable_without_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Multiple_queries_with_captured_variables +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.New_with_no_arguments +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NewArray +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NotParameterizedAttribute_is_not_supported_with_non_constant_argument +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NotParameterizedAttribute_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.OrderBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Query_compilation_failure +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Query_syntax_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Same_captured_variable_twice_in_different_lambdas +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Same_captured_variable_twice_in_same_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_anonymous_object +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_changes_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_New_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Take_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Take_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_All +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AllAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Any +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AnyAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsAsyncEnumerable_on_DbSet +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsAsyncEnumerable_on_IQueryable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsEnumerable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Average +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AverageAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ContainsAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Count +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_CountAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteDelete +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteDeleteAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdate_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdate_without_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdateAsync_with_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdateAsync_without_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_First +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_GetEnumerator +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Last +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LongCount +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LongCountAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Max +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_MaxAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Min +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_MinAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Sum +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SumAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToArray +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToArrayAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToDictionary +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToDictionaryAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToHashSet +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToHashSetAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToList +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToListAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToLookup +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_with_cancellation_token +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToDictionary_over_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToDictionaryAsync_over_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToList_over_objects_does_not_get_precompiled +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Two_captured_variables_in_different_lambdas +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Two_captured_variables_in_same_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Unary +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Union +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Unsafe_accessor_gets_generated_once_for_multiple_queries +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Where_New_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Do_not_cache_is_respected +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Final_GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Include_single_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Include_split_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Many_non_nullable_parameters_do_not_prevent_pregeneration +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.No_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Non_nullable_reference_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Non_nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_and_non_nullable_reference_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_and_non_nullable_value_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_reference_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Too_many_nullable_parameters_prevent_pregeneration +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Two_non_nullable_reference_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Two_nullable_reference_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Any +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Concat_parameter_collection_equality_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Contains_over_subquery +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_method +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_with_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Distinct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_ElementAt +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_inline_collection_with_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_parameter_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_First +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_FirstOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_in_subquery_Union_parameter_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_beyond_end +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_datetime +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Intersect_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Join_parameter_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Length +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_bools_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_ints_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_nullable_ints_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_nullable_ints_Contains_null +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_nullable_strings_contains_null +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_of_strings_contains_null +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_OrderByDescending_ElementAt +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_projection_from_top_level +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_filter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_Select_to_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SingleOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip_Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Union_parameter_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Count +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_ElementAt +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_equality_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip_Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Union +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Contains_on_Enumerable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Contains_on_MemoryExtensions +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Contains_with_MemoryExtensions_with_null_comparer +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_as_Any_with_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_all_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_constant_and_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_mixed_value_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_one_value +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_three_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_two_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_zero_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Count_with_one_value +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Count_with_three_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Count_with_two_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Count_with_zero_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Except_column_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Join_ordered_column_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_List_Contains_with_mixed_value_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_negated_Contains_as_All +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_ints_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_nullable_ints_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_nullable_ints_Contains_null +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_with_single_parameter_element_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_with_single_parameter_element_Count +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Json_representation_of_bool_array +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nested_contains_with_arrays_and_no_inferred_type_mapping +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nested_contains_with_Lists_and_no_inferred_type_mapping +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Non_nullable_reference_column_collection_index_equals_nullable_column +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nullable_reference_column_collection_index_equals_nullable_column +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Concat_column_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Contains_with_EF_Constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count_with_column_predicate_with_EF_Constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_empty_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_empty_Join +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_HashSet_of_ints_Contains_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_ImmutableArray_of_ints_Contains_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_and_Convert_as_compiled_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Union_another_parameter_collection_as_compiled_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Union_column_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Union_column_collection_as_compiled_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Union_column_collection_nested +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_null_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_bools_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_DateTimes_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_enums_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_ints_Contains_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_same_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_ints_Contains_nullable_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_ints_Contains_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_ints_Contains_nullable_int +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_strings_Contains_nullable_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_strings_Contains_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_structs_Contains_nullable_struct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_structs_Contains_nullable_struct_with_nullable_comparer +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_nullable_structs_Contains_struct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_nullable_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_string +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_structs_Contains_nullable_struct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_structs_Contains_nullable_struct_with_nullable_comparer +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_structs_Contains_struct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Where_with_EF_Constant_Where_Any +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_with_type_inference_for_JsonScalarExpression +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_datetimes_filtered +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_ordered +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_simple +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_distinct +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_ToList_and_FirstOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging2 +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging3 +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_empty_collection_of_nullables_and_collection_only_containing_nulls +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection_with_Concat +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_multiple_collections +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_primitive_collections_element +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Values_of_enum_casted_to_underlying_value +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_complex_expression_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_field_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_list_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_method_call_chain_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_method_call_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_based_filter_does_not_short_circuit +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_chain_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_method_call_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_property_parameter_does_not_clash_with_closure_parameter_name +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.EntityTypeConfiguration_DbContext_field_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.EntityTypeConfiguration_DbContext_method_call_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.EntityTypeConfiguration_DbContext_property_chain_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.EntityTypeConfiguration_DbContext_property_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Extension_method_DbContext_field_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Extension_method_DbContext_property_chain_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Local_method_DbContext_field_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Local_static_method_DbContext_property_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Local_variable_from_OnModelCreating_can_throw_exception +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Local_variable_from_OnModelCreating_is_inlined +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Method_parameter_is_inlined +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Remote_method_DbContext_property_method_call_is_parameterized +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Static_member_from_dbContext_is_inlined +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Static_member_from_non_dbContext_is_inlined +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Using_Context_set_method_in_filter_works +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Using_DbSet_in_filter_works +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Using_multiple_context_in_filter_parametrize_only_current_context +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.Using_multiple_entities_with_filters_reuses_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Distinct_used_after_order_by +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.FirstOrDefault_without_filter_order_by +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Include_collection_does_not_generate_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Include_navigation +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Queryable_simple +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Queryable_simple_split +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Queryable_with_parameter_outputs_parameter_value_logging_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.SelectExpression_does_not_use_an_old_logger +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryLoggingJetTest.Take_without_order_by +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Does_not_throws_when_group_join +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Doesnt_throw_when_from_sql_not_composed +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_all +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_first +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_first_or_default +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_from_sql_composed +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_orderby +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_orderby_multiple +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_single +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_single_or_default +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_subquery_main_from_clause +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_where +EntityFrameworkCore.Jet.FunctionalTests.Query.QueryNoClientEvalJetTest.Throws_when_where_subquery_correlated +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Ad_hoc_query_for_default_shared_type_entity_type_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Ad_hoc_query_for_shared_type_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter_with_from_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter_with_from_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_generated_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_generated_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameter_with_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameter_with_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbParameters_interpolated_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbParameters_interpolated_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbParameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbParameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameters_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameters_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_custom_converter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_custom_converter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_positional_dbParameter_with_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_positional_dbParameter_with_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_positional_dbParameter_without_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_positional_dbParameter_without_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Throws_on_concurrent_command(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Throws_on_concurrent_command(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Ad_hoc_type_with_collection_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Ad_hoc_type_with_reference_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Ad_hoc_type_with_unmapped_property_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_invalid_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Bad_data_error_handling_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Line_endings_after_Select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.Line_endings_after_Select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_parameterization_issue_12213(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_parameterization_issue_12213(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_with_parameters_inline_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_with_parameters_inline_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_with_parameters_interpolated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_queryable_with_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_with_inlined_db_parameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_with_inlined_db_parameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_with_inlined_db_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQuery_with_inlined_db_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_annotations_do_not_affect_successive_calls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_annotations_do_not_affect_successive_calls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_common_table_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_common_table_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_empty_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_empty_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_does_not_parameterize_interpolated_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_does_not_parameterize_interpolated_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_dbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_dbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_positional_dbParameter_with_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_positional_dbParameter_with_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_positional_dbParameter_without_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_in_subquery_with_positional_dbParameter_without_name(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_after_removing_whitespaces(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_after_removing_whitespaces(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_DbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_DbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_nameless_DbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_nameless_DbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled_with_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_compiled(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_multiple_line_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed_multiple_line_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed_with_closure_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed_with_closure_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_line_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_multiple_line_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_as_no_tracking_not_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_as_no_tracking_not_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_cache_key_includes_query_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_cache_key_includes_query_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_extra_columns(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_extra_columns(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_mapped_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_mapped_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_not_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_not_composed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_and_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_and_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_cache_key_includes_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_cache_key_includes_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_inline(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_inline(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_then_String_ToUpper_String_Length(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_then_String_ToUpper_String_Length(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_db_parameters_called_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_db_parameters_called_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_without_name_prefix(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_without_name_prefix(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_set_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_set_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ToSqlQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_derived_set(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_derived_set(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCFiltersInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Accessing_derived_property_using_hard_and_soft_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Accessing_derived_property_using_hard_and_soft_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Accessing_property_of_optional_navigation_in_child_projection_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Accessing_property_of_optional_navigation_in_child_projection_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Accessing_reference_navigation_collection_composition_generates_single_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Accessing_reference_navigation_collection_composition_generates_single_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.All_with_optional_navigation_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.All_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Basic_query_gears(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Basic_query_gears(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Bitwise_operation_with_null_arguments(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Bitwise_operation_with_null_arguments(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Bool_projection_from_subquery_treated_appropriately_in_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Bool_projection_from_subquery_treated_appropriately_in_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Byte_array_filter_by_length_parameter_compiled2 +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Byte_array_filter_by_length_parameter2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Byte_array_filter_by_length_parameter2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_OfType_works_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_OfType_works_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_ordered_subquery_to_base_type_using_typed_ToArray(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_ordered_subquery_to_base_type_using_typed_ToArray(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_subquery_to_base_type_using_typed_ToList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_subquery_to_base_type_using_typed_ToList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_to_derived_followed_by_include_and_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_to_derived_followed_by_include_and_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_to_derived_followed_by_multiple_includes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_to_derived_followed_by_multiple_includes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_to_derived_type_after_OfType_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_to_derived_type_after_OfType_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_to_derived_type_causes_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Cast_to_derived_type_causes_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Checked_context_throws_on_client_evaluation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Checked_context_throws_on_client_evaluation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Checked_context_with_addition_does_not_fail(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Checked_context_with_addition_does_not_fail(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Checked_context_with_cast_does_not_fail(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Checked_context_with_cast_does_not_fail(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_eval_followed_by_aggregate_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_eval_followed_by_aggregate_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_member_and_unsupported_string_Equals_in_the_same_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_member_and_unsupported_string_Equals_in_the_same_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_additional_from_clause(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_additional_from_clause(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_outer_join_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_outer_join_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_side_equality_with_parameter_works_with_optional_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Client_side_equality_with_parameter_works_with_optional_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_operator_in_predicate_with_other_conditions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_operator_in_predicate_with_other_conditions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_operator_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_operator_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_operator_in_projection_with_other_conditions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_operator_in_projection_with_other_conditions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_used_with_non_unicode_string_column_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_used_with_non_unicode_string_column_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_with_non_root_evaluatable_Convert(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Coalesce_with_non_root_evaluatable_Convert(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_navigation_ofType_filter_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_navigation_ofType_filter_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_joined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_joined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.CompareTo_used_with_non_unicode_string_column_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.CompareTo_used_with_non_unicode_string_column_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Comparing_entities_using_Equals_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Comparing_entities_using_Equals_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Comparing_two_collection_navigations_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Comparing_two_collection_navigations_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Comparing_two_collection_navigations_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Comparing_two_collection_navigations_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Comparison_with_value_converted_subclass(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Comparison_with_value_converted_subclass(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator_using_result_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator_using_result_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Complex_predicate_with_AndAlso_and_nullable_bool_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Complex_predicate_with_AndAlso_and_nullable_bool_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Composite_key_entity_equal_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Composite_key_entity_equal_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Composite_key_entity_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Composite_key_entity_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Composite_key_entity_not_equal_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Composite_key_entity_not_equal_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Composite_key_entity_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Composite_key_entity_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Concat_anonymous_with_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Concat_anonymous_with_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Concat_scalars_with_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Concat_scalars_with_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Concat_with_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Concat_with_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Concat_with_scalar_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Concat_with_scalar_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Related_Types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Related_Types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Same_Type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Same_Type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_Navigation_With_Trivial_Member_Access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_Navigation_With_Trivial_Member_Access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_false_gets_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_false_gets_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_true_gets_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_true_gets_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_byte_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_byte_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_nullable_array_produces_correct_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_nullable_array_produces_correct_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_readonly_enumerable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_readonly_enumerable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_with_local_nullable_guid_list_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_with_local_nullable_guid_list_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_after_distinct_3_levels_without_original_identifiers(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_after_distinct_3_levels_without_original_identifiers(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_order_by_constant_null_of_non_mapped_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_order_by_constant_null_of_non_mapped_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_order_by_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_order_by_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_complex_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_complex_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_distinct_3_levels(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_distinct_3_levels(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_top_level_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_top_level_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_order_by_on_inner(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_order_by_on_inner(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_orderby_on_outer(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_orderby_on_outer(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_very_complex_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collection_with_very_complex_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_single_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_single_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_array(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_array(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection_ordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection_ordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_basic_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_complex_scenario1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_complex_scenario1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_complex_scenario2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_complex_scenario2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_deeply_nested_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_deeply_nested_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_different_collections_projected(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_different_collections_projected(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_left_join_with_self_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_left_join_with_self_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_multiple_nested_complex_collections(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_multiple_nested_complex_collections(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToArray(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToArray(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_nested_with_custom_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_nested_with_custom_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_null_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_null_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_on_RightJoin_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_on_RightJoin_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_project_anonymous_collection_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_project_anonymous_collection_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_projection_of_collection_thru_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_projection_of_collection_thru_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_same_collection_projected_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_same_collection_projected_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_similar_collection_projected_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_similar_collection_projected_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_with_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_with_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_Date_returns_datetime(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_Date_returns_datetime(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Derived_reference_is_skipped_when_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Derived_reference_is_skipped_when_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Distinct_with_optional_navigation_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Distinct_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_binary_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_binary_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_on_is_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_on_is_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_on_Like(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_on_Like(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_on_nullable_bool_coming_from_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_on_nullable_bool_coming_from_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_on_string_compare(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Double_order_by_on_string_compare(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.EF_Property_based_Include_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.EF_Property_based_Include_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ElementAt_basic_with_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ElementAt_basic_with_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Entity_equality_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Entity_equality_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_array_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_array_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filter_with_complex_predicate_containing_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filter_with_complex_predicate_containing_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.FirstOrDefault_over_int_compared_to_zero(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.FirstOrDefault_over_int_compared_to_zero(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_in_filter_non_nullable_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_in_filter_non_nullable_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_in_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_in_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_on_DateTimeOffset(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_on_DateTimeOffset(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_with_argument_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_with_argument_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_with_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GetValueOrDefault_with_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_nullable_property_and_project_the_grouping_key_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_nullable_property_and_project_the_grouping_key_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_on_StartsWith_with_null_parameter_as_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_on_StartsWith_with_null_parameter_as_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_with_aggregate_max_on_entity_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_with_aggregate_max_on_entity_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_with_having_StartsWith_with_null_parameter_as_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Group_by_with_having_StartsWith_with_null_parameter_as_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Aggregate_with_anonymous_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Aggregate_with_anonymous_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_LongCount(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_LongCount(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Select_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_Select_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_with_boolean_groupin_key_thru_navigation_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_with_boolean_groupin_key_thru_navigation_access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_with_boolean_grouping_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupBy_with_boolean_grouping_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupJoin_Composite_Key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupJoin_Composite_Key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_select_anonymous_projection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_select_anonymous_projection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_Select_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_Select_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_select_with_cast_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_select_with_cast_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_select_with_entity_projection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_select_with_entity_projection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_SelectMany_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_after_SelectMany_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_base_navigation_on_derived_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_base_navigation_on_derived_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_and_invalid_navigation_using_string_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_and_invalid_navigation_using_string_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda_with_soft_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda_with_soft_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_OrderBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_OrderBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_with_Cast_to_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_with_Cast_to_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_circular_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_circular_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_circular(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_circular(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_include_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_include_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many_self_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many_self_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_one_and_one_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_one_and_one_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_one_to_one_optional_and_one_to_one_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_multiple_one_to_one_optional_and_one_to_one_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_derived_entity_using_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_derived_entity_using_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_derived_entity_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_derived_entity_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_derived_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_derived_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_derived_type_with_order_by_and_paging(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_derived_type_with_order_by_and_paging(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result1 +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result2 +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_soft_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_soft_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_using_alternate_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_using_alternate_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_where_list_contains_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_where_list_contains_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_where_list_contains_navigation2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_where_list_contains_navigation2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_client_method_and_member_access_still_applies_includes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_client_method_and_member_access_still_applies_includes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_complex_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_complex_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_and_inheritance_with_orderby_before_and_after_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_and_inheritance_with_orderby_before_and_after_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_and_inheritance1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_and_inheritance1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_and_inheritance2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_and_inheritance2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_and_inheritance3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_and_inheritance3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_collection1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_collection1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_collection2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_collection2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_reference1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_reference1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_join_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_nested_navigation_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_nested_navigation_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_order_by_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_order_by_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_projection_of_unmapped_property_still_gets_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_projection_of_unmapped_property_still_gets_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_coalesce_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_coalesce_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_coalesce_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_coalesce_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_navigation_translated_to_subquery_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_navigation_translated_to_subquery_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_outer_key_is_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_outer_key_is_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_on_entity_qsre_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_complex_key_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_complex_key_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_single_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_single_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Left_join_projection_using_coalesce_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Left_join_projection_using_coalesce_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Left_join_projection_using_conditional_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Left_join_projection_using_conditional_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Left_join_with_GroupBy_with_composite_group_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Left_join_with_GroupBy_with_composite_group_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Logical_operation_with_non_null_parameter_optimizes_null_checks(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Logical_operation_with_non_null_parameter_optimizes_null_checks(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast_and_let(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast_and_let(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Member_access_on_derived_materialized_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Member_access_on_derived_materialized_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_derived_included_on_one_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_derived_included_on_one_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_expansion_inside_Contains_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_expansion_inside_Contains_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_expansion_with_member_pushdown_inside_Contains_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_expansion_with_member_pushdown_inside_Contains_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_rewrite_Distinct_with_convert +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_rewrite_Distinct_with_convert_anonymous +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_rewrite_with_convert1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_rewrite_with_convert1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_rewrite_with_convert2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_rewrite_with_convert2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_rewrite_with_convert3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nav_rewrite_with_convert3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_access_fk_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_access_fk_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_access_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_access_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_access_on_derived_materialized_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_access_on_derived_materialized_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_access_via_EFProperty_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_access_via_EFProperty_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_accessed_twice_outside_and_inside_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_accessed_twice_outside_and_inside_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_based_on_complex_expression1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_based_on_complex_expression1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_based_on_complex_expression2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_based_on_complex_expression2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_based_on_complex_expression3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_based_on_complex_expression3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_based_on_complex_expression4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_based_on_complex_expression4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_inside_interpolated_string_expanded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_inside_interpolated_string_expanded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nested_contains_with_enum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nested_contains_with_enum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column_right(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column_right(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_propagation_optimization6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nullable_bool_comparison_is_translated_to_server(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nullable_bool_comparison_is_translated_to_server(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OfType_in_subquery_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OfType_in_subquery_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OfTypeNav1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OfTypeNav1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OfTypeNav2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OfTypeNav2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OfTypeNav3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OfTypeNav3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_Navigation_Null_Coalesce_To_Clr_Type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_Navigation_Null_Coalesce_To_Clr_Type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_array_initializers(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_array_initializers(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_and_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_and_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_conditional_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_conditional_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_DTOs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_DTOs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_list_initializers(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_list_initializers(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_negated_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_negated_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_with_collection_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_with_collection_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_entity_qsre_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_entity_qsre_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_entity_qsre_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_entity_qsre_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_entity_qsre_with_other_orderbys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_entity_qsre_with_other_orderbys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_entity_qsre(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_entity_qsre(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OrderBy_bool_coming_from_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OrderBy_bool_coming_from_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OrderBy_Contains_empty_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OrderBy_Contains_empty_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OrderBy_StartsWith_with_null_parameter_as_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.OrderBy_StartsWith_with_null_parameter_as_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_collection_navigation_nested_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_collection_navigation_nested_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_derivied_entity_with_convert_to_parent(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_derivied_entity_with_convert_to_parent(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_discriminator_columns(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_discriminator_columns(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_equality_with_value_converted_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_equality_with_value_converted_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_one_value_type_converted_to_nullable_from_empty_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_one_value_type_converted_to_nullable_from_empty_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_one_value_type_from_empty_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_one_value_type_from_empty_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_shadow_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Project_shadow_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_nullable_bool_in_conditional_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_nullable_bool_in_conditional_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_new_array(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_new_array(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_required_string_column_compared_to_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_required_string_column_compared_to_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Property_access_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Property_access_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Reference_include_chain_loads_correctly_when_middle_is_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Reference_include_chain_loads_correctly_when_middle_is_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_as_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_as_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_coalesce_with_anonymous_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_coalesce_with_anonymous_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_comparison_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_comparison_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_conditional_with_anonymous_type_and_null_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_conditional_with_anonymous_type_and_null_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_conditional_with_anonymous_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_conditional_with_anonymous_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_correlated_filtered_collection_returning_queryable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_correlated_filtered_collection_returning_queryable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_correlated_filtered_collection_with_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_correlated_filtered_collection_with_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_correlated_filtered_collection_works_with_caching(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_correlated_filtered_collection_works_with_caching(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_correlated_filtered_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_correlated_filtered_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_datetimeoffset_comparison_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_datetimeoffset_comparison_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_inverted_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_inverted_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_inverted_nullable_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_inverted_nullable_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_length_of_string_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_length_of_string_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_multiple_conditions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_multiple_conditions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_nested_ternary_operations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_nested_ternary_operations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_conditional_with_inheritance_negative(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_conditional_with_inheritance_negative(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_conditional_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_conditional_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_parameter_is_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_parameter_is_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_negative9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_optimization7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_optimization7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_optimization8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_optimization8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_optimization9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_optimization9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_works_for_navigations_with_composite_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_works_for_navigations_with_composite_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_required_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_required_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_required_navigation_on_the_same_type_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_required_navigation_on_the_same_type_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Singleton_Navigation_With_Member_Access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Singleton_Navigation_With_Member_Access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_StartsWith_with_null_parameter_as_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_StartsWith_with_null_parameter_as_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_boolean_empty_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_boolean_empty_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_boolean_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_boolean_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_boolean_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_boolean_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean_empty2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean_empty2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_int_with_inside_cast_and_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_int_with_inside_cast_and_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_int_with_outside_cast_and_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_int_with_outside_cast_and_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_with_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_with_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_with_has_value_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_with_has_value_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_with_inverted_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_ternary_operation_with_inverted_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Equals_Navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Equals_Navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Included(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Included(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Null_Reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Null_Reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Where_Navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Set_operator_with_navigation_in_projection_groupby_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Set_operator_with_navigation_in_projection_groupby_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Singleton_Navigation_With_Member_Access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Singleton_Navigation_With_Member_Access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_based_Include_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_based_Include_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_compare_with_null_conditional_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_compare_with_null_conditional_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_compare_with_null_conditional_argument2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_compare_with_null_conditional_argument2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_concat_nullable_expressions_are_coalesced(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_concat_nullable_expressions_are_coalesced(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_concat_on_various_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_concat_on_various_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_concat_with_null_conditional_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_concat_with_null_conditional_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_concat_with_null_conditional_argument2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.String_concat_with_null_conditional_argument2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_containing_join_gets_lifted_clashing_names(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_containing_join_gets_lifted_clashing_names(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_containing_join_projecting_main_from_clause_gets_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_containing_join_projecting_main_from_clause_gets_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_created_by_include_gets_lifted_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_created_by_include_gets_lifted_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_is_lifted_from_additional_from_clause(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_is_lifted_from_additional_from_clause(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_is_lifted_from_main_from_clause_of_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_is_lifted_from_main_from_clause_of_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_with_result_operator_is_not_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Subquery_with_result_operator_is_not_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Sum_with_no_data_nullable_double(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Sum_with_no_data_nullable_double(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Sum_with_optional_navigation_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Sum_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Take_without_orderby_followed_by_orderBy_is_pushed_down3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Take_without_orderby_followed_by_orderBy_is_pushed_down3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_base_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_base_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_boolean_computed_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_boolean_computed_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_boolean_property_non_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_boolean_property_non_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_enum_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_string_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_string_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_join_key_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_join_key_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_throws_informative_error(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_throws_informative_error(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Unicode_string_literals_is_used_for_non_unicode_column_with_concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Unicode_string_literals_is_used_for_non_unicode_column_with_concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Using_indexer_on_byte_array_and_string_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Using_indexer_on_byte_array_and_string_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_any_subquery_without_collision(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_any_subquery_without_collision(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_bool_column_and_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_bool_column_and_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_bool_column_or_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_bool_column_or_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_coalesce_with_anonymous_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_coalesce_with_anonymous_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_compare_anonymous_types_with_uncorrelated_members(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_compare_anonymous_types_with_uncorrelated_members(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_compare_anonymous_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_compare_anonymous_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_conditional_equality_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_conditional_equality_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_conditional_equality_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_conditional_equality_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_conditional_equality_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_conditional_equality_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_contains_on_navigation_with_composite_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_contains_on_navigation_with_composite_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_count_subquery_without_collision(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_count_subquery_without_collision(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_is_properly_lifted_from_subquery_created_by_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_is_properly_lifted_from_subquery_created_by_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_member_access_on_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_member_access_on_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_null_parameter_is_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_null_parameter_is_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_required_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_required_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_boolean_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_boolean_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_distinct_singleordefault_boolean2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_distinct_singleordefault_boolean2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key_should_match_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key_should_match_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_with_enum_flags_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_with_enum_flags_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_filter_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_filter_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_include_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_include_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_include_prey(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_include_prey(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_insert_update_delete +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_animal_views(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_animal_views(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_birds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_birds(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_plants(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_plants(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_just_kiwis(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_just_kiwis(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_just_roses(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_just_roses(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_query_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_backwards_is_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_backwards_is_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_rose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Can_use_of_type_rose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Member_access_on_intermediate_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Setting_foreign_key_to_a_different_type_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Subquery_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Subquery_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_from_sql_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Changes_in_derived_related_entities_are_detected +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Collection_projection_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Collection_projection_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Entity_can_make_separate_relationships_with_base_type_and_derived_type_both +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_collection_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_filter_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_filter_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_include_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_include_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_include_prey(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_include_prey(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_insert_update_delete +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_animal_views(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_animal_views(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_birds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_birds(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_plants(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_plants(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_just_kiwis(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_just_kiwis(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_just_roses(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_just_roses(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_query_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_backwards_is_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_backwards_is_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_rose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Can_use_of_type_rose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Casting_to_base_type_joining_with_query_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Common_property_shares_column +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.FromSql_on_derived +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.FromSql_on_root +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Member_access_on_intermediate_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Setting_foreign_key_to_a_different_type_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Subquery_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Subquery_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPHInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_derived_set(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_derived_set(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTFiltersInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Accessing_derived_property_using_hard_and_soft_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Accessing_derived_property_using_hard_and_soft_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Accessing_property_of_optional_navigation_in_child_projection_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Accessing_property_of_optional_navigation_in_child_projection_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Accessing_reference_navigation_collection_composition_generates_single_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Accessing_reference_navigation_collection_composition_generates_single_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.All_with_optional_navigation_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.All_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Basic_query_gears(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Basic_query_gears(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Bitwise_operation_with_null_arguments(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Bitwise_operation_with_null_arguments(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Bool_projection_from_subquery_treated_appropriately_in_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Bool_projection_from_subquery_treated_appropriately_in_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Byte_array_filter_by_length_parameter_compiled2 +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_OfType_works_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_OfType_works_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_ordered_subquery_to_base_type_using_typed_ToArray(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_ordered_subquery_to_base_type_using_typed_ToArray(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_subquery_to_base_type_using_typed_ToList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_subquery_to_base_type_using_typed_ToList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_to_derived_followed_by_include_and_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_to_derived_followed_by_include_and_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_to_derived_followed_by_multiple_includes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_to_derived_followed_by_multiple_includes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_to_derived_type_after_OfType_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_to_derived_type_after_OfType_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_to_derived_type_causes_client_eval(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Cast_to_derived_type_causes_client_eval(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Checked_context_throws_on_client_evaluation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Checked_context_throws_on_client_evaluation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Checked_context_with_addition_does_not_fail(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Checked_context_with_addition_does_not_fail(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Checked_context_with_cast_does_not_fail(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Checked_context_with_cast_does_not_fail(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_eval_followed_by_aggregate_operation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_eval_followed_by_aggregate_operation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_member_and_unsupported_string_Equals_in_the_same_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_member_and_unsupported_string_Equals_in_the_same_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_additional_from_clause(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_additional_from_clause(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_outer_join_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_outer_join_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_method_on_collection_navigation_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_side_equality_with_parameter_works_with_optional_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Client_side_equality_with_parameter_works_with_optional_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_operator_in_predicate_with_other_conditions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_operator_in_predicate_with_other_conditions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_operator_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_operator_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_operator_in_projection_with_other_conditions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_operator_in_projection_with_other_conditions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_used_with_non_unicode_string_column_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_used_with_non_unicode_string_column_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_with_non_root_evaluatable_Convert(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Coalesce_with_non_root_evaluatable_Convert(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_navigation_access_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_navigation_ofType_filter_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_navigation_ofType_filter_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_joined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_joined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_source(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Collection_with_inheritance_and_join_include_source(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.CompareTo_used_with_non_unicode_string_column_and_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.CompareTo_used_with_non_unicode_string_column_and_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Comparing_entities_using_Equals_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Comparing_entities_using_Equals_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Comparing_two_collection_navigations_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Comparing_two_collection_navigations_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Comparison_with_value_converted_subclass(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Comparison_with_value_converted_subclass(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator_using_result_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator_using_result_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Complex_GroupBy_after_set_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Complex_predicate_with_AndAlso_and_nullable_bool_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Complex_predicate_with_AndAlso_and_nullable_bool_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Composite_key_entity_equal_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Composite_key_entity_equal_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Composite_key_entity_not_equal_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Composite_key_entity_not_equal_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Concat_anonymous_with_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Concat_anonymous_with_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Concat_scalars_with_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Concat_scalars_with_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Concat_with_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Concat_with_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Concat_with_scalar_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Concat_with_scalar_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Related_Types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Related_Types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Same_Type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_Navigation_With_Member_Access_On_Same_Type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_Navigation_With_Trivial_Member_Access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_Navigation_With_Trivial_Member_Access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_false_gets_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_false_gets_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_true_gets_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Conditional_with_conditions_evaluating_to_true_gets_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_collection_of_byte_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_collection_of_byte_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_nullable_array_produces_correct_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_nullable_array_produces_correct_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_readonly_enumerable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_on_readonly_enumerable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_with_local_nullable_guid_list_closure(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Contains_with_local_nullable_guid_list_closure(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_after_distinct_3_levels_without_original_identifiers(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_after_distinct_3_levels_without_original_identifiers(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_order_by_constant_null_of_non_mapped_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_order_by_constant_null_of_non_mapped_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_order_by_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_order_by_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_complex_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_complex_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_distinct_3_levels(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_distinct_3_levels(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_top_level_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_top_level_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_order_by_on_inner(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_order_by_on_inner(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_orderby_on_outer(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_top_level_Last_with_orderby_on_outer(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_very_complex_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collection_with_very_complex_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_single_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projecting_single_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_array(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_array(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection_explicit_to_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection_ordered(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection_ordered(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_basic_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_complex_scenario1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_complex_scenario1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_complex_scenario2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_complex_scenario2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_deeply_nested_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_deeply_nested_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_different_collections_projected(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_different_collections_projected(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_left_join_with_self_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_left_join_with_self_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_multiple_nested_complex_collections(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_multiple_nested_complex_collections(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToArray(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToArray(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_naked_navigation_with_ToList(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_nested_mixed_streaming_with_buffer2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_nested_with_custom_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_nested_with_custom_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_null_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_null_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_on_left_join_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_on_RightJoin_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_on_RightJoin_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_project_anonymous_collection_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_project_anonymous_collection_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_projection_of_collection_thru_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_projection_of_collection_thru_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_same_collection_projected_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_same_collection_projected_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_similar_collection_projected_multiple_times(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_similar_collection_projected_multiple_times(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_with_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_with_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_Date_returns_datetime(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_Date_returns_datetime(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Derived_reference_is_skipped_when_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Derived_reference_is_skipped_when_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Distinct_with_optional_navigation_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Distinct_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_binary_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_binary_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_on_is_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_on_is_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_on_Like(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_on_Like(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_on_nullable_bool_coming_from_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_on_nullable_bool_coming_from_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_on_string_compare(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Double_order_by_on_string_compare(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.EF_Property_based_Include_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.EF_Property_based_Include_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ElementAt_basic_with_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ElementAt_basic_with_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ElementAtOrDefault_basic_with_OrderBy(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Entity_equality_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Entity_equality_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_array_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_array_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filter_with_complex_predicate_containing_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filter_with_complex_predicate_containing_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.FirstOrDefault_over_int_compared_to_zero(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.FirstOrDefault_over_int_compared_to_zero(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_in_filter_non_nullable_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_in_filter_non_nullable_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_in_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_in_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_on_DateTimeOffset(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_on_DateTimeOffset(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_with_argument_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_with_argument_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_with_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GetValueOrDefault_with_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_nullable_property_and_project_the_grouping_key_HasValue(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_nullable_property_and_project_the_grouping_key_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_on_StartsWith_with_null_parameter_as_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_on_StartsWith_with_null_parameter_as_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_with_aggregate_max_on_entity_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_with_aggregate_max_on_entity_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_with_having_StartsWith_with_null_parameter_as_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Group_by_with_having_StartsWith_with_null_parameter_as_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Aggregate_with_anonymous_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Aggregate_with_anonymous_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_LongCount(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_LongCount(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Property_Include_Select_Sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Select_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_Select_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_with_boolean_groupin_key_thru_navigation_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_with_boolean_groupin_key_thru_navigation_access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_with_boolean_grouping_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupBy_with_boolean_grouping_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupJoin_Composite_Key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupJoin_Composite_Key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_select_anonymous_projection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_select_anonymous_projection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_Select_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_Select_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_select_with_cast_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_select_with_cast_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_select_with_entity_projection_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_select_with_entity_projection_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_SelectMany_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_after_SelectMany_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_base_navigation_on_derived_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_base_navigation_on_derived_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_and_invalid_navigation_using_string_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_and_invalid_navigation_using_string_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda_with_soft_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda_with_soft_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_on_derived_type_using_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_OrderBy_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_OrderBy_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_with_Cast_to_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_with_Cast_to_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_collection_with_complex_OrderBy3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_circular_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_circular_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_circular(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_circular(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_include_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_include_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many_self_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many_self_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_one_and_one_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_one_to_one_and_one_to_one_and_one_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_one_to_one_optional_and_one_to_one_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_multiple_one_to_one_optional_and_one_to_one_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_derived_entity_using_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_derived_entity_using_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_derived_entity_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_derived_entity_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_derived_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_derived_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_derived_type_with_order_by_and_paging(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_derived_type_with_order_by_and_paging(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result1 +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result2 +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_soft_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_soft_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string_nested2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_using_alternate_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_using_alternate_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_where_list_contains_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_where_list_contains_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_where_list_contains_navigation2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_where_list_contains_navigation2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_client_method_and_member_access_still_applies_includes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_client_method_and_member_access_still_applies_includes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_complex_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_complex_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_and_inheritance_with_orderby_before_and_after_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_and_inheritance_with_orderby_before_and_after_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_and_inheritance1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_and_inheritance1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_and_inheritance2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_and_inheritance2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_and_inheritance3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_and_inheritance3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_collection1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_collection1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_collection2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_collection2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_multi_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_multi_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_reference1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_reference1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_reference2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_join_reference2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_nested_navigation_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_nested_navigation_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_order_by_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_order_by_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_projection_of_unmapped_property_still_gets_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_projection_of_unmapped_property_still_gets_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_coalesce_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_coalesce_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_coalesce_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_coalesce_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_navigation_translated_to_subquery_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_navigation_translated_to_subquery_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_outer_key_is_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys_outer_key_is_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_on_entity_qsre_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_complex_key_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_complex_key_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_single_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_inner_being_a_subquery_projecting_single_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_with_order_by_without_skip_or_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Left_join_projection_using_coalesce_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Left_join_projection_using_coalesce_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Left_join_projection_using_conditional_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Left_join_projection_using_conditional_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Left_join_with_GroupBy_with_composite_group_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Left_join_with_GroupBy_with_composite_group_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Logical_operation_with_non_null_parameter_optimizes_null_checks(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Logical_operation_with_non_null_parameter_optimizes_null_checks(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast_and_let(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast_and_let(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Member_access_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Member_access_on_derived_materialized_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Member_access_on_derived_materialized_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_derived_included_on_one_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_derived_included_on_one_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_expansion_inside_Contains_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_expansion_inside_Contains_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_expansion_with_member_pushdown_inside_Contains_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_expansion_with_member_pushdown_inside_Contains_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_rewrite_Distinct_with_convert +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_rewrite_Distinct_with_convert_anonymous +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_rewrite_with_convert1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_rewrite_with_convert1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_rewrite_with_convert2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_rewrite_with_convert2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_rewrite_with_convert3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nav_rewrite_with_convert3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_access_fk_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_access_fk_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_access_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_access_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_access_on_derived_materialized_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_access_on_derived_materialized_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_access_via_EFProperty_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_access_via_EFProperty_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_accessed_twice_outside_and_inside_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_accessed_twice_outside_and_inside_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_based_on_complex_expression1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_based_on_complex_expression1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_based_on_complex_expression2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_based_on_complex_expression2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_based_on_complex_expression3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_based_on_complex_expression3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_inside_interpolated_string_expanded(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_inside_interpolated_string_expanded(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nested_contains_with_enum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nested_contains_with_enum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column_right(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column_right(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization5(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization5(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_propagation_optimization6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nullable_bool_comparison_is_translated_to_server(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nullable_bool_comparison_is_translated_to_server(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OfType_in_subquery_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OfType_in_subquery_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OfTypeNav1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OfTypeNav1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OfTypeNav2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OfTypeNav2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OfTypeNav3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OfTypeNav3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_Navigation_Null_Coalesce_To_Clr_Type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_Navigation_Null_Coalesce_To_Clr_Type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_array_initializers(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_array_initializers(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_and_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_and_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_conditional_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_conditional_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_DTOs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_DTOs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_list_initializers(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_list_initializers(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_negated_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_negated_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_orderby(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_orderby(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated_complex2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate_negated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_predicate2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_with_collection_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Optional_navigation_with_collection_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_entity_qsre_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_entity_qsre_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_entity_qsre_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_entity_qsre_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_entity_qsre_with_other_orderbys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_entity_qsre_with_other_orderbys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_entity_qsre(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_entity_qsre(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OrderBy_bool_coming_from_optional_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OrderBy_bool_coming_from_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OrderBy_Contains_empty_list(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OrderBy_Contains_empty_list(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OrderBy_StartsWith_with_null_parameter_as_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.OrderBy_StartsWith_with_null_parameter_as_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_collection_navigation_nested_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_collection_navigation_nested_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_collection_navigation_with_inheritance3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_derivied_entity_with_convert_to_parent(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_derivied_entity_with_convert_to_parent(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_discriminator_columns(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_discriminator_columns(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_equality_with_value_converted_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_equality_with_value_converted_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_one_value_type_converted_to_nullable_from_empty_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_one_value_type_converted_to_nullable_from_empty_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_one_value_type_from_empty_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_one_value_type_from_empty_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_shadow_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Project_shadow_properties(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_nullable_bool_in_conditional_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_nullable_bool_in_conditional_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_new_array(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_new_array(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_unary(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_unary(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_addition(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_with_function_call2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_required_string_column_compared_to_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_required_string_column_compared_to_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Property_access_on_derived_entity_using_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Property_access_on_derived_entity_using_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_reusing_parameter_doesnt_declare_duplicate_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Reference_include_chain_loads_correctly_when_middle_is_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Reference_include_chain_loads_correctly_when_middle_is_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_as_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_as_operator(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_coalesce_with_anonymous_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_coalesce_with_anonymous_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_comparison_with_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_comparison_with_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_conditional_with_anonymous_type_and_null_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_conditional_with_anonymous_type_and_null_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_conditional_with_anonymous_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_conditional_with_anonymous_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_correlated_filtered_collection_returning_queryable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_correlated_filtered_collection_returning_queryable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_correlated_filtered_collection_with_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_correlated_filtered_collection_with_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_correlated_filtered_collection_works_with_caching(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_correlated_filtered_collection_works_with_caching(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_correlated_filtered_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_correlated_filtered_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_datetimeoffset_comparison_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_datetimeoffset_comparison_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_inverted_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_inverted_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_inverted_nullable_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_inverted_nullable_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_length_of_string_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_length_of_string_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_multiple_conditions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_multiple_conditions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_nested_ternary_operations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_nested_ternary_operations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_conditional_with_inheritance_negative(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_conditional_with_inheritance_negative(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_conditional_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_conditional_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_parameter_is_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_parameter_is_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative6(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative6(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_negative9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_optimization7(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_optimization7(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_optimization8(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_optimization8(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_optimization9(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_optimization9(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_works_for_navigations_with_composite_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_null_propagation_works_for_navigations_with_composite_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_required_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_required_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_required_navigation_on_the_same_type_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_required_navigation_on_the_same_type_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Singleton_Navigation_With_Member_Access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Singleton_Navigation_With_Member_Access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_StartsWith_with_null_parameter_as_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_StartsWith_with_null_parameter_as_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_boolean_empty_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_boolean_empty_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_boolean_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_boolean_empty(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_boolean_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_boolean_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean_empty2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean_empty2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_distinct_singleordefault_boolean2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_int_with_inside_cast_and_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_int_with_inside_cast_and_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_int_with_outside_cast_and_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_int_with_outside_cast_and_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_int_with_pushdown_and_coalesce2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_int(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_string(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_subquery_projecting_single_constant_string(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_multiple_conditions(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_with_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_with_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_with_has_value_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_with_has_value_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_with_inverted_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_ternary_operation_with_inverted_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Client(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Client(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Equals_Navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Equals_Navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Included(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Included(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Null_Reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Null_Reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Select_Where_Navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Set_operator_with_navigation_in_projection_groupby_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Set_operator_with_navigation_in_projection_groupby_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Singleton_Navigation_With_Member_Access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Singleton_Navigation_With_Member_Access(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Streaming_correlated_collection_issue_11403(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_based_Include_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_based_Include_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_compare_with_null_conditional_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_compare_with_null_conditional_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_compare_with_null_conditional_argument2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_compare_with_null_conditional_argument2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_concat_nullable_expressions_are_coalesced(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_concat_nullable_expressions_are_coalesced(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_concat_on_various_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_concat_on_various_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_concat_with_null_conditional_argument(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_concat_with_null_conditional_argument(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_concat_with_null_conditional_argument2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.String_concat_with_null_conditional_argument2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_containing_join_gets_lifted_clashing_names(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_containing_join_gets_lifted_clashing_names(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_containing_join_projecting_main_from_clause_gets_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_containing_join_projecting_main_from_clause_gets_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_created_by_include_gets_lifted_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_created_by_include_gets_lifted_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_is_lifted_from_additional_from_clause(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_is_lifted_from_additional_from_clause(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_is_lifted_from_main_from_clause_of_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_is_lifted_from_main_from_clause_of_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_with_result_operator_is_not_lifted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Subquery_with_result_operator_is_not_lifted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Sum_with_no_data_nullable_double(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Sum_with_no_data_nullable_double(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Sum_with_optional_navigation_is_translated_to_sql(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Sum_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Take_without_orderby_followed_by_orderBy_is_pushed_down3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Take_without_orderby_followed_by_orderBy_is_pushed_down3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_base_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_base_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_boolean_computed_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_boolean_computed_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_boolean_property_non_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_boolean_property_non_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_enum_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_string_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_string_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_join_key_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_join_key_selector(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_inside_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_throws_informative_error(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_throws_informative_error(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Unicode_string_literals_is_used_for_non_unicode_column_with_concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Unicode_string_literals_is_used_for_non_unicode_column_with_concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Using_indexer_on_byte_array_and_string_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Using_indexer_on_byte_array_and_string_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_any_subquery_without_collision(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_any_subquery_without_collision(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_bool_column_and_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_bool_column_and_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_bool_column_or_Contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_bool_column_or_Contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_coalesce_with_anonymous_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_coalesce_with_anonymous_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_compare_anonymous_types_with_uncorrelated_members(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_compare_anonymous_types_with_uncorrelated_members(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_compare_anonymous_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_compare_anonymous_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_conditional_equality_1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_conditional_equality_1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_conditional_equality_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_conditional_equality_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_conditional_equality_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_conditional_equality_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_contains_on_navigation_with_composite_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_contains_on_navigation_with_composite_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_count_subquery_without_collision(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_count_subquery_without_collision(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_is_properly_lifted_from_subquery_created_by_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_is_properly_lifted_from_subquery_created_by_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_member_access_on_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_member_access_on_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_null_parameter_is_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_null_parameter_is_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_required_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_required_navigation_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_boolean_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_boolean_with_pushdown(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_boolean(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_boolean(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_distinct_singleordefault_boolean2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_distinct_singleordefault_boolean2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_equality_to_null_with_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key_should_match_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key_should_match_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_with_enum_flags_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_with_enum_flags_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_filter_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_filter_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_include_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_include_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_include_prey(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_include_prey(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_insert_update_delete +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_animal_views(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_animal_views(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_animals(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_animals(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_birds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_birds(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_plants(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_plants(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_all_types_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_just_kiwis(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_just_kiwis(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_just_roses(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_just_roses(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_when_shared_column(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_query_when_shared_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_backwards_is_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_backwards_is_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_backwards_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_with_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi_with_other_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_is_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_animal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_animal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_first(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_first(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird_with_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_bird(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi_where_north_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi_where_south_on_derived_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_kiwi(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_rose(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Can_use_of_type_rose(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_derived_type2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_used_when_projection_over_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Discriminator_with_cast_in_shadow_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Filter_on_property_inside_complex_type_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_abstract_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.GetType_in_hierarchy_in_leaf_type_with_sibling2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Is_operator_on_result_of_FirstOrDefault(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Member_access_on_intermediate_type_works +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Selecting_only_base_properties_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Selecting_only_base_properties_on_derived_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Setting_foreign_key_to_a_different_type_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Subquery_OfType(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Subquery_OfType(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_from_sql_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_is_operator_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Using_OfType_on_multiple_type_with_no_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyNoTrackingQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Contains_on_skip_collection_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filter_include_on_skip_navigation_combined(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_order_by(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Filtered_then_include_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_intermediate_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_leaf_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.GetType_in_hierarchy_in_querying_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_and_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_reference_and_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_then_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Include_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_cast_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_non_equality(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation_where(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_many_over_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation_multiple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation_multiple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Select_skip_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_all_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_all(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_all(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_any_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_contains_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_with_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_without_predicate_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_count_without_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_long_count_with_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_of_type_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_of_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_of_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_many_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_average_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_average(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_max(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_min(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Skip_navigation_select_subquery_sum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_include_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTManyToManyQueryJetTest.Throws_when_different_filtered_then_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Changes_in_derived_related_entities_are_detected +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Collection_projection_on_base_type_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Collection_projection_on_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Collection_projection_on_base_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Entity_can_make_separate_relationships_with_base_type_and_derived_type_both +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_on_derived3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_collection_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_on_derived_type_with_queryable_Cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived_with_filter4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_on_derived4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived1(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_on_derived2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_reference_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_collection_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection_split(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_on_base(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.ByteArrayTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.ByteArrayTranslationsJetTest.Contains_with_column +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.ByteArrayTranslationsJetTest.Contains_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.ByteArrayTranslationsJetTest.Contains_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.ByteArrayTranslationsJetTest.SequenceEqual +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Bitwise_and_enum_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Bitwise_and_integral_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Bitwise_and_nullable_enum_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Bitwise_or +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Bitwise_projects_values_in_select +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Equality_nullable_enum_to_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Equality_nullable_enum_to_null_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Equality_nullable_enum_to_null_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Equality_nullable_enum_to_nullable_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Equality_nullable_enum_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Equality_to_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Equality_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.HasFlag +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.HasFlag_with_non_nullable_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.HasFlag_with_nullable_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Where_bitwise_and_nullable_enum_with_non_nullable_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Where_bitwise_and_nullable_enum_with_null_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.EnumTranslationsJetTest.Where_bitwise_and_nullable_enum_with_nullable_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.GuidTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.GuidTranslationsJetTest.New_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.GuidTranslationsJetTest.New_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.GuidTranslationsJetTest.NewGuid +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Abs_decimal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Abs_double +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Abs_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Abs_int +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Acos +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Acos_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Acosh +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Asinh +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Atan +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Atan_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Atan2 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Atan2_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Atanh +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Ceiling +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Ceiling_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Cos +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Cos_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Cosh +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Degrees +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Degrees_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Exp +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Exp_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Floor_decimal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Floor_double +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Floor_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Log +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Log_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Log_with_newBase +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Log_with_newBase_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Log10 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Log10_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Log2 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Max +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Max_nested +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Max_nested_twice +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Min +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Min_nested +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Min_nested_twice +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Power +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Power_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Radians +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Radians_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Round_decimal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Round_double +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Round_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Round_with_digits_decimal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Round_with_digits_double +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Round_with_digits_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Sign +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Sign_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Sin +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Sin_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Sinh +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Sqrt +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Sqrt_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Tan +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Tan_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Tanh +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Truncate_decimal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Truncate_double +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Truncate_float +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Truncate_project_and_order_by_it_twice +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Truncate_project_and_order_by_it_twice2 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MathTranslationsJetTest.Truncate_project_and_order_by_it_twice3 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Convert_ToBoolean +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Convert_ToDouble +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Convert_ToInt16 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Convert_ToInt32 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Convert_ToString +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.DateTime_Compare_to_simple_zero(compareTo: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.DateTime_Compare_to_simple_zero(compareTo: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Int_Compare_to_simple_zero +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Random_new_Next_with_no_args +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Random_new_Next_with_one_arg +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Random_new_Next_with_two_args +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Random_on_EF_Functions +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Random_Shared_Next_with_no_args +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Random_Shared_Next_with_one_arg +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.Random_Shared_Next_with_two_args +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.TimeSpan_Compare_to_simple_zero(compareTo: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.MiscellaneousTranslationsJetTest.TimeSpan_Compare_to_simple_zero(compareTo: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ArithmeticOperatorTranslationsJetTest.Add +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ArithmeticOperatorTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ArithmeticOperatorTranslationsJetTest.Minus +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ArithmeticOperatorTranslationsJetTest.Modulo +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ArithmeticOperatorTranslationsJetTest.Multiply +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ArithmeticOperatorTranslationsJetTest.Subtract +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.And +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.And_or_over_boolean +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.And_over_boolean +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.And_with_logical_and +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.And_with_logical_or +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Complement +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Left_shift +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Or +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Or_multiple +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Or_over_boolean +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Or_with_logical_and +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Or_with_logical_or +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Right_shift +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Xor +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.BitwiseOperatorTranslationsJetTest.Xor_over_boolean +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ComparisonOperatorTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ComparisonOperatorTranslationsJetTest.Equal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ComparisonOperatorTranslationsJetTest.GreaterThan +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ComparisonOperatorTranslationsJetTest.GreaterThanOrEqual +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ComparisonOperatorTranslationsJetTest.LessThan +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ComparisonOperatorTranslationsJetTest.LessThanOrEqual +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.ComparisonOperatorTranslationsJetTest.NotEqual +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.LogicalOperatorTranslationsJetTest.And +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.LogicalOperatorTranslationsJetTest.And_with_bool_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.LogicalOperatorTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.LogicalOperatorTranslationsJetTest.Not +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.LogicalOperatorTranslationsJetTest.Not_with_bool_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.LogicalOperatorTranslationsJetTest.Or +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.LogicalOperatorTranslationsJetTest.Or_with_bool_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.MiscellaneousOperatorTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.MiscellaneousOperatorTranslationsJetTest.Coalesce +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Operators.MiscellaneousOperatorTranslationsJetTest.Conditional +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Compare_multi_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Compare_nested +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Compare_simple_more_than_one +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Compare_simple_one +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Compare_simple_zero +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Compare_to_multi_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Compare_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.CompareTo_nested +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.CompareTo_simple_more_than_one +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.CompareTo_simple_one +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.CompareTo_simple_zero +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.CompareTo_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_aggregate +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_method_comparison +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_method_comparison_2 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_method_comparison_3 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_operator +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_string_int_comparison1 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_string_int_comparison2 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_string_int_comparison3 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_string_int_comparison4 +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Concat_string_string_comparison +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Contains_Column +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Contains_constant_with_whitespace +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Contains_Literal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Contains_Literal_Char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Contains_negated +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Contains_parameter_with_whitespace +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Contains_with_StringComparison_Ordinal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Contains_with_StringComparison_OrdinalIgnoreCase +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Contains_with_StringComparison_unsupported +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.EndsWith_Column +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.EndsWith_Literal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.EndsWith_Literal_Char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.EndsWith_Parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.EndsWith_Parameter_Char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.EndsWith_with_StringComparison_Ordinal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.EndsWith_with_StringComparison_OrdinalIgnoreCase +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.EndsWith_with_StringComparison_unsupported +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Equals_with_Ordinal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Equals_with_OrdinalIgnoreCase +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.FirstOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_after_ToString +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_Char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_over_ToString +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_with_constant_starting_position +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_with_constant_starting_position_char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_with_empty_string +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_with_one_parameter_arg +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_with_one_parameter_arg_char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_with_parameter_starting_position +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IndexOf_with_parameter_starting_position_char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IsNullOrEmpty +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IsNullOrEmpty_negated +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.IsNullOrWhiteSpace +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Join_over_non_nullable_column +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Join_over_nullable_column +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Join_with_ordering +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Join_with_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.LastOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Length +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Like_with_non_string_column_using_double_cast +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Like_with_non_string_column_using_ToString +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Regex_IsMatch +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Regex_IsMatch_constant_input +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Replace +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Replace_Char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Replace_using_property_arguments +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Replace_with_empty_string +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.StartsWith_Column +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.StartsWith_Literal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.StartsWith_Literal_Char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.StartsWith_Parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.StartsWith_Parameter_Char +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.StartsWith_with_StringComparison_Ordinal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.StartsWith_with_StringComparison_OrdinalIgnoreCase +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.StartsWith_with_StringComparison_unsupported +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Static_Equals +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Static_Equals_with_Ordinal +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Static_Equals_with_OrdinalIgnoreCase +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Substring +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Substring_with_one_arg_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Substring_with_one_arg_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Substring_with_one_arg_with_zero_startIndex +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Substring_with_two_args_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Substring_with_two_args_with_zero_length +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Substring_with_two_args_with_zero_startIndex +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.ToLower +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.ToUpper +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Trim_with_char_argument_in_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Trim_with_char_array_argument_in_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Trim_without_argument_in_predicate +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.TrimEnd_with_char_argument +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.TrimEnd_with_char_array_argument +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.TrimEnd_without_arguments +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.TrimStart_with_char_argument +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.TrimStart_with_char_array_argument +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.TrimStart_without_arguments +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Where_Like_and_comparison +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.StringTranslationsJetTest.Where_Like_or_comparison +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.AddDays +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.AddMonths +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.AddYears +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.Day +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.DayNumber +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.DayNumber_subtraction +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.DayOfWeek +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.DayOfYear +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.FromDateTime +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.FromDateTime_compared_to_constant_and_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.FromDateTime_compared_to_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.Month +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.ToDateTime_with_complex_DateTime +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.ToDateTime_with_complex_TimeOnly +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateOnlyTranslationsJetTest.Year +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.AddDays +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.AddHours +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.AddMinutes +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.AddMonths +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.AddSeconds +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.AddYears +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.Day +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.DayOfYear +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.Milliseconds_parameter_and_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.Month +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.Now +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.Second +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.ToUnixTimeSecond +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeOffsetTranslationsJetTest.Year +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.AddYear +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Date +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Day +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.DayOfYear +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Hour +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Minute +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Month +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.New_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.New_with_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Now +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Parse_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Parse_with_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Second +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.subtract_and_TotalDays +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.TimeOfDay +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Today +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.DateTimeTranslationsJetTest.Year +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.Add_TimeSpan +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.AddHours +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.AddMinutes +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.FromDateTime_compared_to_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.FromDateTime_compared_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.FromDateTime_compared_to_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.FromTimeSpan_compared_to_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.FromTimeSpan_compared_to_property +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.Hour +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.IsBetween +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.Minute +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.Second +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeOnlyTranslationsJetTest.Subtract +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeSpanTranslationsJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeSpanTranslationsJetTest.Hours +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeSpanTranslationsJetTest.Minutes +EntityFrameworkCore.Jet.FunctionalTests.Query.Translations.Temporal.TimeSpanTranslationsJetTest.Seconds +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Comparing_collection_navigation_to_null_issues_possible_unintended_consequences_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Comparing_two_collections_together_issues_possible_unintended_reference_comparison_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Does_not_throw_for_top_level_single +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.FirstOrDefault_without_orderby_and_filter_issues_warning_subquery +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.FirstOrDefault_without_orderby_but_with_filter_doesnt_issue_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Last_with_order_by_does_not_issue_client_eval_warning_if_at_top_level +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.LastOrDefault_with_order_by_does_not_issue_client_eval_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Max_does_not_issue_client_eval_warning_when_at_top_level +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Paging_operation_without_orderby_issues_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Paging_operation_without_orderby_issues_warning_async +EntityFrameworkCore.Jet.FunctionalTests.Query.WarningsJetTest.Single_SingleOrDefault_without_orderby_doesnt_issue_warning +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_query_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_query_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_query_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_query_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_to_change_query_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Intercept_to_change_query_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Interceptor_does_not_leak_across_contexts(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionJetTest.Interceptor_does_not_leak_across_contexts(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_query_passively(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_query_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_query_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_to_change_query_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Intercept_to_change_query_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Interceptor_does_not_leak_across_contexts(async: False) +EntityFrameworkCore.Jet.FunctionalTests.QueryExpressionInterceptionJetTestBase+QueryExpressionInterceptionWithDiagnosticsJetTest.Interceptor_does_not_leak_across_contexts(async: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_passively(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_concurrency_with_relational_specific_data(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: False, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: False, inject: True, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: False, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: False, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: False, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: True, concurrencyError: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_failed(async: True, inject: True, noAcceptChanges: True, concurrencyError: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_passively(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_change_result(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_to_suppress_save(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_SaveChanges_with_multiple_interceptors(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: False, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: False, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: False, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: True, noAcceptChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.SaveChangesInterceptionJetTestBase+SaveChangesInterceptionWithDiagnosticsJetTest.Intercept_to_suppress_concurrency_exception(async: True, inject: True, noAcceptChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Column_nullability_is_set +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Column_with_sysname_assigns_underlying_store_type_and_nullability +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.ConcurrencyToken_is_set_for_rowVersion +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_columns +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_composite_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_composite_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_composite_primary_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_composite_unique_constraint +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_foreign_key_referencing_unique_constraint +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_foreign_keys +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_indexes +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_multiple_foreign_key_in_same_table +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_multiple_indexes_on_same_column +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_primary_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_tables +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_unique_constraints +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Create_view_columns +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Decimal_numeric_types_have_precision_scale +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_database_collation_is_not_scaffolded +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_char_1 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_char_2 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_nchar_1 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_nchar_2 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_nchar_3 +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_nvarchar +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Default_max_length_are_added_to_varchar +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Filter_tables +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Filter_tables_with_qualified_name +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Filter_tables_with_quote_in_name +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Identity_columns_are_not_nullable +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Ignore_columnstore_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_name_for_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_primary_key_name_from_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_referential_action_for_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_unique_constraint_name_from_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Set_unique_true_for_unique_index +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_bool_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_byte_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateOnly_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateTime_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateTimeOffset_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_decimal_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_double_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_float_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_Guid_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_int_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_long_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_short_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_string_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_TimeOnly_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Specific_max_length_are_add_to_store_type +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Warn_missing_principal_table_for_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Warn_missing_schema +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Warn_missing_table +EntityFrameworkCore.Jet.FunctionalTests.SeedingJetTest.Seeding_does_not_leave_context_contaminated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.SeedingJetTest.Seeding_does_not_leave_context_contaminated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.SeedingJetTest.Seeding_keyless_entity_throws_exception(async: False) +EntityFrameworkCore.Jet.FunctionalTests.SeedingJetTest.Seeding_keyless_entity_throws_exception(async: True) +EntityFrameworkCore.Jet.FunctionalTests.SequentialGuidEndToEndTest.Can_use_explicit_values +EntityFrameworkCore.Jet.FunctionalTests.SequentialGuidEndToEndTest.Can_use_sequential_GUID_end_to_end_async +EntityFrameworkCore.Jet.FunctionalTests.SequentialGuidEndToEndTest.CustomUuid7Test +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: False, ignoreLoops: False, writeIndented: False) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: False, ignoreLoops: False, writeIndented: True) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: True, ignoreLoops: False, writeIndented: False) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: True, ignoreLoops: False, writeIndented: True) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: True, ignoreLoops: True, writeIndented: False) +EntityFrameworkCore.Jet.FunctionalTests.SerializationJetTest.Can_round_trip_through_JSON(useNewtonsoft: True, ignoreLoops: True, writeIndented: True) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_many_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_but_not_principal_one_to_one_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_many_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_dependent_then_principal_one_to_one_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_many_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_but_not_dependent_one_to_one_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_many_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_dep_uni_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_dep_uni_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_dep_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_not_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_not_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_set_both_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_set_dependent_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_no_navs_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_prin_uni_FK_not_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_prin_uni_FK_set_no_navs_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Add_principal_then_dependent_one_to_one_prin_uni_FK_set_principal_nav_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Multi_level_add_replace_and_save +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Remove_overlapping_principal +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Temp_values_are_replaced_on_save +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedFixupJetTest.Temporary_value_equals_database_generated_value +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "NeverIgnoreBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "NeverThrowBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "NeverUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddOrUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddOrUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddOrUpdateUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnAddUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnUpdate", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_even_if_modified(propertyName: "OnUpdateUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "NeverIgnoreBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "NeverThrowBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "NeverUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnAddUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnUpdate", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_ignore_ignores_value_if_not_modified(propertyName: "OnUpdateUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "NeverIgnoreBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "NeverThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "NeverUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddIgnoreBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddOrUpdateIgnoreBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddOrUpdateThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddOrUpdateUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnAddUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnUpdateIgnoreBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnUpdateThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_always_throws_if_value_modified(propertyName: "OnUpdateUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "NeverIgnoreBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "NeverThrowBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "NeverUseBeforeThrowAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateUseBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnAddUseBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnUpdateThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_throw_ignores_value_if_not_modified(propertyName: "OnUpdateUseBeforeThrowAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "Never", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "NeverIgnoreBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "NeverThrowBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "NeverUseBeforeUseAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAdd", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddOrUpdateUseBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnAddUseBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnUpdate", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnUpdateThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_ignores_value_if_not_modified(propertyName: "OnUpdateUseBeforeUseAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "Never", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "NeverIgnoreBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "NeverThrowBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "NeverUseBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAdd", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddIgnoreBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddOrUpdateIgnoreBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddOrUpdateThrowBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddOrUpdateUseBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddThrowBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnAddUseBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnUpdateIgnoreBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnUpdateThrowBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.After_save_use_uses_value_if_modified(propertyName: "OnUpdateUseBeforeUseAfter", expectedValue: "Daisy") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Added_entity_with_default_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Added_entity_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Added_entity_with_temporary_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Modified_entity_is_read_from_store_when_not_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_computed_property_on_Modified_entity_with_read_only_after_save_throws_if_value_is_in_modified_state +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Added_entity_with_default_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Added_entity_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Added_entity_with_temporary_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Modified_entity_is_not_included_in_the_update_when_not_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Always_identity_property_on_Modified_entity_with_read_only_after_save_throws_if_value_is_in_modified_state +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "NeverIgnoreBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "NeverIgnoreBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "NeverIgnoreBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddOrUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddOrUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnAddOrUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_even_if_set(propertyName: "OnUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "NeverIgnoreBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "NeverIgnoreBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "NeverIgnoreBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddOrUpdate", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddOrUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddOrUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnAddOrUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnUpdateIgnoreBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnUpdateIgnoreBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_ignore_ignores_value_if_not_set(propertyName: "OnUpdateIgnoreBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "NeverThrowBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "NeverThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "NeverThrowBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddOrUpdateThrowBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddOrUpdateThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddOrUpdateThrowBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddThrowBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnAddThrowBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnUpdateThrowBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnUpdateThrowBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_always_throws_if_value_set(propertyName: "OnUpdateThrowBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "NeverThrowBeforeIgnoreAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "NeverThrowBeforeThrowAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "NeverThrowBeforeUseAfter", expectedValue: null) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddOrUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddOrUpdateThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddOrUpdateThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnAddThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnUpdateThrowBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnUpdateThrowBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_throw_ignores_value_if_not_set(propertyName: "OnUpdateThrowBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "Never") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "NeverUseBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "NeverUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "NeverUseBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAdd") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddOrUpdateUseBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddOrUpdateUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddOrUpdateUseBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddUseBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnAddUseBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnUpdate") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnUpdateUseBeforeIgnoreAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnUpdateUseBeforeThrowAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_always_uses_value_if_set(propertyName: "OnUpdateUseBeforeUseAfter") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "Never", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "NeverUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "NeverUseBeforeThrowAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "NeverUseBeforeUseAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAdd", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddOrUpdateUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddOrUpdateUseBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddOrUpdateUseBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddUseBeforeIgnoreAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddUseBeforeThrowAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnAddUseBeforeUseAfter", expectedValue: "Rabbit") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnUpdate", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnUpdateUseBeforeIgnoreAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnUpdateUseBeforeThrowAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Before_save_use_ignores_value_if_not_set(propertyName: "OnUpdateUseBeforeUseAfter", expectedValue: "S") +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Change_state_of_entity_with_temp_non_key_does_not_throw(targetState: Deleted) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Change_state_of_entity_with_temp_non_key_does_not_throw(targetState: Modified) +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Clearing_optional_FK_does_not_leave_temporary_value +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Added_entity_can_have_value_set_explicitly +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Added_entity_with_default_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Added_entity_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Added_entity_with_temporary_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Modified_entity_is_included_in_update_when_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Modified_entity_is_read_from_store_when_not_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Computed_property_on_Modified_entity_with_read_only_after_save_throws_if_value_is_in_modified_state +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Fields_used_correctly_for_store_generated_values +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_key_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_can_have_value_set_explicitly +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_with_default_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_with_read_only_before_save_throws_if_explicit_values_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_with_temporary_value_gets_value_from_store +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Added_entity_with_temporary_value_gets_value_from_store_even_if_same +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Modified_entity_is_included_in_update_when_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Modified_entity_is_not_included_in_update_when_not_modified +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Identity_property_on_Modified_entity_with_read_only_after_save_throws_if_value_is_in_modified_state +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_enum_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_GuidAsString_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_StringAsGuid_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_Uri_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_wrapped_Guid_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_wrapped_int_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_wrapped_string_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Insert_update_and_delete_with_wrapped_Uri_key +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Nullable_fields_get_defaults_when_not_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Nullable_fields_store_any_value_when_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Nullable_fields_store_non_defaults_when_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Object_fields_get_defaults_when_not_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Object_fields_store_any_value_when_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Object_fields_store_non_defaults_when_set +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Properties_get_database_defaults_when_set_to_sentinel_values +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Properties_get_set_values_when_not_set_to_sentinel_values +EntityFrameworkCore.Jet.FunctionalTests.StoreGeneratedJetTest.Value_generation_works_for_common_GUID_conversions +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_change_dependent_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_change_principal_and_dependent_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_change_principal_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_insert_dependent_with_just_one_parent +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_manipulate_entities_sharing_row_independently +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_derived_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_derived_nonhierarchy +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_derived_nonhierarchy_all_required +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_nonhierarchy +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_query_shared_nonhierarchy_with_nonshared_dependent +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_share_required_columns +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_update_just_dependents +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_use_optional_dependents_with_shared_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_use_with_chained_relationships +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_use_with_fanned_relationships +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Can_use_with_redundant_relationships +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.ExecuteDelete_throws_for_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.ExecuteDelete_throws_for_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.ExecuteUpdate_works_for_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.ExecuteUpdate_works_for_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.No_warn_when_save_optional_dependent_at_least_one_none_null +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Optional_dependent_materialized_when_no_properties +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Optional_dependent_without_required_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Optional_dependent_without_required_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Warn_when_save_optional_dependent_with_null_values +EntityFrameworkCore.Jet.FunctionalTests.TableSplittingJetTest.Warn_when_save_optional_dependent_with_null_values_sensitive +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TpcManyToManyTrackingJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_additional_pk_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_composite_with_navs(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_self(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared_with_payload(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_shared(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: False, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: False, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_inheritance(modifyLeft: True, modifyRight: True, useJoin: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship_with_payload(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: False, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: False, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: False, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_add_and_remove_a_new_relationship(modifyLeft: True, modifyRight: True, useJoin: True, useNavs: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_Attach_or_Update_a_many_to_many_with_mixed_set_and_unset_keys(useUpdate: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_delete_with_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_additional_pk_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_shared_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_composite_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention_generated_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_fully_by_convention(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_self_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_shared(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity_unidirectional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs_by_join_entity(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_navs(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_payload(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join_unidirectional(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: False, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: False, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many_with_suspected_dangling_join(async: True, useTrackGraph: True, useDetectChanges: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_many_to_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_update_delete_proxyable_shared_type_entity_type_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_insert_update_delete_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 2, 3]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [1, 3, 2]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 1, 3]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [2, 3, 1]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 1, 2]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_load_entities_in_any_order(order: [3, 2, 1]) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: False, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_replace_dependent_with_many_to_many(createNewCollection: True, async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_additional_pk_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_shared_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_composite_with_navs_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_self +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_self_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_self_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_shared +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_shared_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_shared_with_payload_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_with_inheritance_unidirectional +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_with_navs +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Can_update_many_to_many_with_payload +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Initial_tracking_uses_skip_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TptManyToManyTrackingJetTest.Many_to_many_delete_behaviors_are_set +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_change_dependent_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_change_principal_and_dependent_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_change_principal_instance_non_derived +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_use_optional_dependents_with_shared_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Can_use_with_chained_relationships +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.ExecuteDelete_throws_for_table_sharing(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.ExecuteDelete_throws_for_table_sharing(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.No_warn_when_save_optional_dependent_at_least_one_none_null +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Optional_dependent_without_required_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Optional_dependent_without_required_property(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Warn_when_save_optional_dependent_with_null_values +EntityFrameworkCore.Jet.FunctionalTests.TPTTableSplittingJetTest.Warn_when_save_optional_dependent_with_null_values_sensitive +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.BeginTransaction_without_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.BeginTransaction_without_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_to_wrap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_to_wrap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_with_isolation_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction_with_isolation_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_BeginTransaction(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Commit_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Commit_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Commit(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Commit(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_connection_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_error_on_commit_or_rollback(async: False, commit: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_error_on_commit_or_rollback(async: False, commit: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_error_on_commit_or_rollback(async: True, commit: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_error_on_commit_or_rollback(async: True, commit: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Rollback_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Rollback_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Rollback(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_Rollback(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_UseTransaction_to_wrap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_UseTransaction_to_wrap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_UseTransaction(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.Intercept_UseTransaction(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.UseTransaction_without_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionJetTest.UseTransaction_without_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.BeginTransaction_without_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.BeginTransaction_without_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_to_wrap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_to_wrap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_with_isolation_level(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction_with_isolation_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_BeginTransaction(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Commit_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Commit_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Commit(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Commit(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_error_on_commit_or_rollback(async: False, commit: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_error_on_commit_or_rollback(async: False, commit: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_error_on_commit_or_rollback(async: True, commit: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_error_on_commit_or_rollback(async: True, commit: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Rollback_to_suppress(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Rollback_to_suppress(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Rollback(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_Rollback(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_UseTransaction_to_wrap(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_UseTransaction_to_wrap(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_UseTransaction(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.Intercept_UseTransaction(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.UseTransaction_without_interceptor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionInterceptionJetTestBase+TransactionInterceptionWithDiagnosticsJetTest.UseTransaction_without_interceptor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_can_be_used_after_ambient_transaction_ended +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_can_be_used_after_another_transaction_if_connection_closed +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_can_be_used_after_enlisted_transaction_ended +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_can_be_used_after_enlisted_transaction_if_connection_closed +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_throws_if_ambient_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_throws_if_another_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.BeginTransaction_throws_if_enlisted_in_transaction +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Can_use_open_connection_with_started_transaction(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Can_use_open_connection_with_started_transaction(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Can_use_open_connection_with_started_transaction(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.EnlistTransaction_throws_if_ambient_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.EnlistTransaction_throws_if_another_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Externally_closed_connections_are_handled_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Externally_closed_connections_are_handled_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Query_uses_explicit_transaction(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Query_uses_explicit_transaction(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.Query_uses_explicit_transaction(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.QueryAsync_uses_explicit_transaction(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.QueryAsync_uses_explicit_transaction(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.QueryAsync_uses_explicit_transaction(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed_from_context(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed_from_context(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed_from_context(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_committed(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back_from_context(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back_from_context(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back_from_context(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back(autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back(autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.RelationalTransaction_can_be_rolled_back(autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_allows_independent_ambient_transaction_commits +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_allows_nested_ambient_transactions +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionBehavior_Always(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionBehavior_Always(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionBehavior_Never(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionBehavior_Never(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionsEnabled_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_AutoTransactionsEnabled_false(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_no_savepoint(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_can_be_used_with_no_savepoint(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_does_not_close_connection_opened_by_user(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_does_not_close_connection_opened_by_user(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_false_uses_explicit_transaction_without_committing_or_accepting_changes(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_implicitly_creates_savepoint(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_implicitly_creates_savepoint(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_implicitly_starts_transaction_when_needed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_implicitly_starts_transaction_when_needed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_throws_for_suppressed_ambient_transactions(connectionString: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_throws_for_suppressed_ambient_transactions(connectionString: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_ambient_transaction_with_connectionString(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_ambient_transaction +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_after_connection_closed(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_enlisted_transaction_connectionString(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_with_failure_behavior(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: False, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: False, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: False, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: True, autoTransactionBehavior: Always) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: True, autoTransactionBehavior: Never) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.SaveChanges_uses_explicit_transaction_without_committing(async: True, autoTransactionBehavior: WhenNeeded) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_is_no_op_if_same_DbTransaction_is_used(async: False) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_is_no_op_if_same_DbTransaction_is_used(async: True) +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_throws_if_ambient_transaction_started +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_throws_if_enlisted_in_transaction +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_throws_if_mismatched_connection +EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_will_not_dispose_external_transaction +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_query_from_one_connection_and_save_changes_to_another +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_query_from_one_connection_string_and_save_changes_to_another +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_set_connection_string_in_interceptor(withConnectionString: True, withNullConnectionString: False) +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_set_connection_string_in_interceptor(withConnectionString: True, withNullConnectionString: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Add_element_to_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Add_element_to_nested_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Change_complex_collection_mapped_to_json_to_null_and_to_empty +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Clear_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Complex_collection_with_empty_nested_collections_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Complex_collection_with_nested_complex_type_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Delete_complex_collection_owner_entity_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Modify_element_in_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Modify_multiple_complex_properties_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Modify_nested_complex_property_in_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Move_elements_in_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Remove_element_from_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Replace_complex_collection_element_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Replace_complex_property_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Replace_entire_complex_collection_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Set_complex_collection_to_null_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Set_complex_property_mapped_to_json_to_null +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Set_null_complex_collection_to_non_empty_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.ComplexCollectionJsonUpdateJetTest.Set_null_complex_property_to_non_null_mapped_to_json +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendBatchHeader_should_append_SET_NOCOUNT_ON +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendBulkInsertOperation_appends_insert_if_no_store_generated_columns_exist +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendBulkInsertOperation_appends_insert_if_no_store_generated_columns_exist_default_values_only +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendDeleteOperation_creates_full_delete_command_text +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendDeleteOperation_creates_full_delete_command_text_with_concurrency_check +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_for_all_store_generated_columns +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_for_only_identity +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_for_only_single_identity_columns +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_for_store_generated_columns_but_no_identity +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendInsertOperation_insert_if_store_generated_columns_exist +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendUpdateOperation_appends_where_for_concurrency_token +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendUpdateOperation_for_computed_property +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendUpdateOperation_if_store_generated_columns_dont_exist +EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendUpdateOperation_if_store_generated_columns_exist +EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.DbUpdateException_Entries_is_correct_with_multiple_inserts(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.DbUpdateException_Entries_is_correct_with_multiple_inserts(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.Principal_and_dependent_roundtrips_with_cycle_breaking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.Principal_and_dependent_roundtrips_with_cycle_breaking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoredProcedureUpdateJetTest.Delete(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoredProcedureUpdateJetTest.Delete(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_all_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_all_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_different_entity_types_and_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_all_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_all_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_Add_with_same_entity_type_and_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_all_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_all_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Add_with_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Add_with_same_entity_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Add_with_same_entity_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Delete_with_different_entity_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Delete_with_different_entity_types(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Delete_with_same_entity_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete_Delete_with_same_entity_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Delete(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_different_entity_types_and_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_different_entity_types_and_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_different_entity_types_and_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_different_entity_types_and_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_same_entity_type_and_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_same_entity_type_and_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_same_entity_type_and_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_Modify_with_same_entity_type_and_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_with_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_with_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_with_no_generated_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoreValueGenerationIdentityJetTest.Modify_with_no_generated_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Can_insert_and_read_back_with_conversions(valueOrder: [0, 2, 0, 2]) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_non_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_non_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_nulls_to_string_non_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_nulls_to_string_non_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_nulls_to_string_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_nulls_to_string_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_int_non_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_int_non_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_int_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_int_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_string_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_string_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_string_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_non_nulls_to_string_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_int_non_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_int_non_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_int_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_int_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_string_non_nulls_in_app +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_string_non_nulls_in_app_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_string_non_nulls_in_provider +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_string_nulls_to_string_non_nulls_in_provider_object +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsChar", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsInt", databaseType: "integer", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsNullableChar", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsNullableInt", databaseType: "integer", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsNullableString", databaseType: "varchar(3)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BoolAsString", databaseType: "varchar(3)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BytesAsNullableString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "BytesAsString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "CharAsNullableString", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "CharAsString", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeOffsetToBinary", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeOffsetToNullableBinary", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeOffsetToNullableString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeOffsetToString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeToBinary", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeToNullableBinary", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeToNullableString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "DateTimeToString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "EnumToNullableNumber", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "EnumToNullableString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "EnumToNumber", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "EnumToString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "GuidToBytes", databaseType: "varbinary(16)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "GuidToNullableBytes", databaseType: "varbinary(16)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "GuidToNullableString", databaseType: "varchar(36)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "GuidToString", databaseType: "varchar(36)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IntAsLong", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IntAsNullableLong", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IPAddressToBytes", databaseType: "varbinary(16)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IPAddressToNullableBytes", databaseType: "varbinary(16)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IPAddressToNullableString", databaseType: "varchar(45)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "IPAddressToString", databaseType: "varchar(45)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "ListOfInt", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NonNullStringToNullString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsChar", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsInt", databaseType: "integer", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsNullableChar", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsNullableInt", databaseType: "integer", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsNullableString", databaseType: "varchar(3)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBoolAsString", databaseType: "varchar(3)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBytesAsNullableString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableBytesAsString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableCharAsNullableString", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableCharAsString", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeOffsetToBinary", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeOffsetToNullableBinary", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeOffsetToNullableString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeOffsetToString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeToBinary", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeToNullableBinary", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeToNullableString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableDateTimeToString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableEnumToNullableNumber", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableEnumToNullableString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableEnumToNumber", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableEnumToString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableGuidToBytes", databaseType: "varbinary(16)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableGuidToNullableBytes", databaseType: "varbinary(16)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableGuidToNullableString", databaseType: "varchar(36)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableGuidToString", databaseType: "varchar(36)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIntAsLong", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIntAsNullableLong", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIPAddressToBytes", databaseType: "varbinary(16)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIPAddressToNullableBytes", databaseType: "varbinary(16)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIPAddressToNullableString", databaseType: "varchar(45)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableIPAddressToString", databaseType: "varchar(45)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableListOfInt", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableNumberToBytes", databaseType: "varbinary(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableNumberToNullableBytes", databaseType: "varbinary(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableNumberToNullableString", databaseType: "varchar(64)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableNumberToString", databaseType: "varchar(64)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullablePhysicalAddressToBytes", databaseType: "varbinary(8)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullablePhysicalAddressToNullableBytes", databaseType: "varbinary(8)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullablePhysicalAddressToNullableString", databaseType: "varchar(20)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullablePhysicalAddressToString", databaseType: "varchar(20)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToBool", databaseType: "smallint", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToBytes", databaseType: "longbinary", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToChar", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToDateTime", databaseType: "datetime", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToEnum", databaseType: "integer", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToGuid", databaseType: "uniqueidentifier", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableBool", databaseType: "smallint", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableBytes", databaseType: "longbinary", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableChar", databaseType: "varchar(1)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableDateTime", databaseType: "datetime", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableEnum", databaseType: "integer", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableGuid", databaseType: "uniqueidentifier", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableNumber", databaseType: "byte", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableTimeSpan", databaseType: "datetime", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNumber", databaseType: "byte", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToTimeSpan", databaseType: "datetime", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableTimeSpanToNullableString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableTimeSpanToNullableTicks", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableTimeSpanToString", databaseType: "varchar(48)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableTimeSpanToTicks", databaseType: "decimal(20,0)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableUriToNullableString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableUriToString", databaseType: "varchar(255)", isNullable: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullStringToNonNullString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NumberToBytes", databaseType: "varbinary(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NumberToNullableBytes", databaseType: "varbinary(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NumberToNullableString", databaseType: "varchar(64)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NumberToString", databaseType: "varchar(64)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "PhysicalAddressToBytes", databaseType: "varbinary(8)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "PhysicalAddressToNullableBytes", databaseType: "varbinary(8)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "PhysicalAddressToNullableString", databaseType: "varchar(20)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "PhysicalAddressToString", databaseType: "varchar(20)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToBool", databaseType: "smallint", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToBytes", databaseType: "longbinary", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToChar", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToDateTime", databaseType: "datetime", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToEnum", databaseType: "integer", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToGuid", databaseType: "uniqueidentifier", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableBool", databaseType: "smallint", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableBytes", databaseType: "longbinary", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableChar", databaseType: "varchar(1)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableDateTime", databaseType: "datetime", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableEnum", databaseType: "integer", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableGuid", databaseType: "uniqueidentifier", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableNumber", databaseType: "byte", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableTimeSpan", databaseType: "datetime", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNumber", databaseType: "byte", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToTimeSpan", databaseType: "datetime", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "TimeSpanToNullableString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "TimeSpanToNullableTicks", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "TimeSpanToString", databaseType: "varchar(48)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "TimeSpanToTicks", databaseType: "decimal(20,0)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "UriToNullableString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "UriToString", databaseType: "varchar(255)", isNullable: False) +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Add_immutable_record +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_context +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_EntityType +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_lazy_loader +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_lazy_loader_delegate +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_lazy_loader_field +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Attaching_entity_sets_StateManager +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Detaching_entity_resets_lazy_loader_delegate_so_it_can_be_reattached +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Detaching_entity_resets_lazy_loader_field_so_it_can_be_reattached +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Detaching_entity_resets_lazy_loader_so_it_can_be_reattached +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_and_update_using_constructors_with_property_parameters +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_context_injected +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_context_injected_into_constructor_with_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_context_injected_into_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_EntityType_injected +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_EntityType_injected_into_constructor_with_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_EntityType_injected_into_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_keyless_type +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_for_collections_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_for_reference_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_for_collections_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_for_reference_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_via_constructor_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delegate_injected_into_property_via_constructor_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_delgate_injected_into_property_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_for_collections_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_for_reference_async +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_field_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_field_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_property_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_property_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_property_via_constructor_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_loader_injected_into_property_via_constructor_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_POCO_loader_injected_for_collections +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_POCO_loader_injected_for_reference +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_StateManager_injected +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_StateManager_injected_into_constructor_with_property +EntityFrameworkCore.Jet.FunctionalTests.WithConstructorsJetTest.Query_with_StateManager_injected_into_property diff --git a/test/EFCore.LibRed.FunctionalTests/JsonTypesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/JsonTypesLibRedTest.cs new file mode 100644 index 00000000..21f18980 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/JsonTypesLibRedTest.cs @@ -0,0 +1,182 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#nullable enable + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Sdk; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class JsonTypesLibRedTest(NonSharedFixture fixture) : JsonTypesRelationalTestBase(fixture) +{ + public override async Task Can_read_write_ulong_enum_JSON_values(EnumU64 value, string json) + { + if (value == EnumU64.Max) + { + json = """{"Prop":-1}"""; // Because ulong is converted to long on LibRed + } + + await base.Can_read_write_ulong_enum_JSON_values(value, json); + } + + public override async Task Can_read_write_nullable_ulong_enum_JSON_values(object? value, string json) + { + if (Equals(value, ulong.MaxValue)) + { + json = """{"Prop":-1}"""; // Because ulong is converted to long on LibRed + } + + await base.Can_read_write_nullable_ulong_enum_JSON_values(value, json); + } + + public override async Task Can_read_write_collection_of_ulong_enum_JSON_values() + => await Can_read_and_write_JSON_value>( + nameof(EnumU64CollectionType.EnumU64), + [ + EnumU64.Min, + EnumU64.Max, + EnumU64.Default, + EnumU64.One, + (EnumU64)8 + ], + """{"Prop":[0,-1,0,1,8]}""", // Because ulong is converted to long on LibRed + mappedCollection: true); + + public override async Task Can_read_write_collection_of_nullable_ulong_enum_JSON_values() + => await Can_read_and_write_JSON_value>( + nameof(NullableEnumU64CollectionType.EnumU64), + [ + EnumU64.Min, + null, + EnumU64.Max, + EnumU64.Default, + EnumU64.One, + (EnumU64?)8 + ], + """{"Prop":[0,null,-1,0,1,8]}""", // Because ulong is converted to long on LibRed + mappedCollection: true); + + public override async Task Can_read_write_point() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point()); + + public override async Task Can_read_write_point_with_Z() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_Z()); + + public override async Task Can_read_write_point_with_M() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_M()); + + public override async Task Can_read_write_point_with_Z_and_M() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_Z_and_M()); + + public override async Task Can_read_write_line_string() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_line_string()); + + public override async Task Can_read_write_multi_line_string() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_multi_line_string()); + + public override async Task Can_read_write_polygon() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon()); + + public override async Task Can_read_write_polygon_typed_as_geometry() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_typed_as_geometry()); + + public override async Task Can_read_write_point_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point_as_GeoJson()); + + public override async Task Can_read_write_point_with_Z_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_Z_as_GeoJson()); + + public override async Task Can_read_write_point_with_M_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_M_as_GeoJson()); + + public override async Task Can_read_write_point_with_Z_and_M_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_Z_and_M_as_GeoJson()); + + public override async Task Can_read_write_line_string_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_line_string_as_GeoJson()); + + public override async Task Can_read_write_multi_line_string_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_multi_line_string_as_GeoJson()); + + public override async Task Can_read_write_polygon_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_as_GeoJson()); + + public override async Task Can_read_write_polygon_typed_as_geometry_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_typed_as_geometry_as_GeoJson()); + + public override async Task Can_read_write_nullable_point() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point()); + + public override async Task Can_read_write_nullable_line_string() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_line_string()); + + public override async Task Can_read_write_nullable_multi_line_string() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_multi_line_string()); + + public override async Task Can_read_write_nullable_polygon() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon()); + + public override async Task Can_read_write_nullable_point_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_point_as_GeoJson()); + + public override async Task Can_read_write_nullable_line_string_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_line_string_as_GeoJson()); + + public override async Task Can_read_write_nullable_multi_line_string_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_multi_line_string_as_GeoJson()); + + public override async Task Can_read_write_nullable_polygon_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_as_GeoJson()); + + public override async Task Can_read_write_polygon_typed_as_nullable_geometry() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_typed_as_nullable_geometry()); + + public override async Task Can_read_write_polygon_typed_as_nullable_geometry_as_GeoJson() + // No built-in JSON support for spatial types in the LibRed provider + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_typed_as_nullable_geometry_as_GeoJson()); + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + builder = base.AddOptions(builder) + .ConfigureWarnings(w => w.Ignore(JetEventId.DecimalTypeDefaultWarning)); + new LibRedDbContextOptionsBuilder(builder); + return builder; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/KeysWithConvertersLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/KeysWithConvertersLibRedTest.cs new file mode 100644 index 00000000..75f3335f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/KeysWithConvertersLibRedTest.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class KeysWithConvertersLibRedTest(KeysWithConvertersLibRedTest.KeysWithConvertersLibRedFixture fixture) + : KeysWithConvertersTestBase< + KeysWithConvertersLibRedTest.KeysWithConvertersLibRedFixture>(fixture) +{ + public class KeysWithConvertersLibRedFixture : KeysWithConvertersFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => builder.UseLibRed(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LazyLoadProxyLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/LazyLoadProxyLibRedTest.cs new file mode 100644 index 00000000..235da854 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LazyLoadProxyLibRedTest.cs @@ -0,0 +1,546 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.IO; +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class LazyLoadProxyLibRedTest : LazyLoadProxyRelationalTestBase + { + public LazyLoadProxyLibRedTest(LoadLibRedFixture fixture) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + } + + public override void Lazy_load_collection(EntityState state, bool useAttach, bool useDetach) + { + base.Lazy_load_collection(state, useAttach, useDetach); + + AssertSql( + state == EntityState.Detached && useAttach + ? "" + : $""" +@p='707' (Nullable = true) + +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `Child` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal(EntityState state, bool useAttach, bool useDetach) + { + base.Lazy_load_many_to_one_reference_to_principal(state, useAttach, useDetach); + + AssertSql( + state == EntityState.Detached && useAttach + ? "" + : $""" +@p='707' + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_principal(EntityState state, bool useAttach, bool useDetach) + { + base.Lazy_load_one_to_one_reference_to_principal(state, useAttach, useDetach); + + AssertSql( + state == EntityState.Detached && useAttach + ? "" + : $""" +@p='707' + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_dependent(EntityState state, bool useAttach, bool useDetach) + { + base.Lazy_load_one_to_one_reference_to_dependent(state, useAttach, useDetach); + + AssertSql( + state == EntityState.Detached && useAttach + ? "" + : $""" +@p='707' (Nullable = true) + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_PK_to_PK_reference_to_principal(EntityState state) + { + base.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state); + + AssertSql( + $""" +@p='707' + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(EntityState state) + { + base.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state); + + AssertSql( + $""" +@p='707' + +SELECT TOP 1 `s`.`Id`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `SinglePkToPk` AS `s` +WHERE `s`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_null_FK(EntityState state) + { + base.Lazy_load_many_to_one_reference_to_principal_null_FK(state); + + AssertSql(@""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_null_FK(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_principal_null_FK(state); + + AssertSql(@""); + } + + public override void Lazy_load_collection_not_found(EntityState state) + { + base.Lazy_load_collection_not_found(state); + + AssertSql( + $""" +@p='767' (Nullable = true) + +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `Child` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_not_found(EntityState state) + { + base.Lazy_load_many_to_one_reference_to_principal_not_found(state); + + AssertSql( + $""" +@p='787' + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_not_found(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_principal_not_found(state); + + AssertSql( + $""" +@p='787' + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_dependent_not_found(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_dependent_not_found(state); + + AssertSql( + $""" +@p='767' (Nullable = true) + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_collection_already_loaded(EntityState state, CascadeTiming cascadeDeleteTiming) + { + base.Lazy_load_collection_already_loaded(state, cascadeDeleteTiming); + + AssertSql(@""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_already_loaded( + EntityState state, + CascadeTiming cascadeDeleteTiming) + { + base.Lazy_load_many_to_one_reference_to_principal_already_loaded(state, cascadeDeleteTiming); + + AssertSql(@""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_already_loaded(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_principal_already_loaded(state); + + AssertSql(@""); + } + + public override void Lazy_load_one_to_one_reference_to_dependent_already_loaded( + EntityState state, + CascadeTiming cascadeDeleteTiming) + { + base.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state, cascadeDeleteTiming); + + AssertSql(@""); + } + + public override void Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(EntityState state) + { + base.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state); + + AssertSql(@""); + } + + public override void Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(EntityState state) + { + base.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state); + + AssertSql(@""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_alternate_key(EntityState state) + { + base.Lazy_load_many_to_one_reference_to_principal_alternate_key(state); + + AssertSql( + $""" +@p='Root' (Size = 255) + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_alternate_key(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_principal_alternate_key(state); + + AssertSql( + $""" +@p='Root' (Size = 255) + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_dependent_alternate_key(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state); + + AssertSql( + $""" +@p='Root' (Size = 255) + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `SingleAk` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(EntityState state) + { + base.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state); + + AssertSql(@""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state); + + AssertSql(@""); + } + + public override void Lazy_load_collection_shadow_fk(EntityState state) + { + base.Lazy_load_collection_shadow_fk(state); + + AssertSql( + $""" +@p='707' (Nullable = true) + +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `ChildShadowFk` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_shadow_fk(EntityState state) + { + base.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +@p='707' + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_shadow_fk(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +@p='707' + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_dependent_shadow_fk(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state); + + AssertSql( + $""" +@p='707' (Nullable = true) + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `SingleShadowFk` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(EntityState state) + { + base.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state); + + AssertSql(@""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state); + + AssertSql(@""); + } + + public override void Lazy_load_collection_composite_key(EntityState state) + { + base.Lazy_load_collection_composite_key(state); + + AssertSql( + $""" +@p='Root' (Size = 255) +@p1='707' (Nullable = true) + +SELECT `c`.`Id`, `c`.`ParentAlternateId`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `ChildCompositeKey` AS `c` +WHERE `c`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@p")} AND `c`.`ParentId` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_composite_key(EntityState state) + { + base.Lazy_load_many_to_one_reference_to_principal_composite_key(state); + + AssertSql( + $""" +@p='Root' (Size = 255) +@p1='707' + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_composite_key(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_principal_composite_key(state); + + AssertSql( + $""" +@p='Root' (Size = 255) +@p1='707' + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_dependent_composite_key(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_dependent_composite_key(state); + + AssertSql( + $""" +@p='Root' (Size = 255) +@p1='707' (Nullable = true) + +SELECT TOP 1 `s`.`Id`, `s`.`ParentAlternateId`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `SingleCompositeKey` AS `s` +WHERE `s`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@p")} AND `s`.`ParentId` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(EntityState state) + { + base.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state); + + AssertSql(@""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(EntityState state) + { + base.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state); + + AssertSql(@""); + } + + public override async Task Load_collection(EntityState state, bool async) + { + await base.Load_collection(state, async); + + if (!async) + { + AssertSql( + $""" +@p='707' (Nullable = true) + +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `Child` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + } + + [ConditionalFact] + public override void Top_level_projection_track_entities_before_passing_to_client_method() + { + base.Top_level_projection_track_entities_before_passing_to_client_method(); + + AssertSql( + $""" +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +ORDER BY `p`.`Id` + +@p='707' (Nullable = true) + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Entity_equality_with_proxy_parameter(bool async) + { + await base.Entity_equality_with_proxy_parameter(async); + + AssertSql( + $""" +@entity_equality_called_Id='707' (Nullable = true) + +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `Child` AS `c` +LEFT JOIN `Parent` AS `p` ON `c`.`ParentId` = `p`.`Id` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@entity_equality_called_Id")} +"""); + } + + private void AssertSql(string expected) + { + expected ??= ""; + var sql = Sql ?? ""; + try + { + Assert.Equal( + expected, sql, ignoreLineEndingDifferences: true); + } + catch + { + var methodCallLine = Environment.StackTrace.Split( + [Environment.NewLine], + StringSplitOptions.RemoveEmptyEntries)[2][6..]; + + var indexMethodEnding = methodCallLine.IndexOf(')') + 1; + var testName = methodCallLine.Substring(0, indexMethodEnding); + var parts = methodCallLine[indexMethodEnding..].Split(" ", StringSplitOptions.RemoveEmptyEntries); + var fileName = parts[1][..^5]; + var lineNumber = int.Parse(parts[2]); + + var currentDirectory = Directory.GetCurrentDirectory(); + var logFile = currentDirectory.Substring( + 0, + currentDirectory.LastIndexOf( + $"{Path.DirectorySeparatorChar}artifacts{Path.DirectorySeparatorChar}", + StringComparison.Ordinal) + + 1) + + "QueryBaseline.txt"; + + var testInfo = testName + " : " + lineNumber + FileNewLine; + var newBaseLine = $@" AssertSql( + {"@\"" + sql.Replace("\"", "\"\"") + "\""}); + +"; + + var contents = testInfo + newBaseLine + FileNewLine + "--------------------" + FileNewLine; + + File.AppendAllText(logFile, contents); + + throw; + } + } + + protected override void ClearLog() => Fixture.TestSqlLoggerFactory.Clear(); + + protected override void RecordLog() => Sql = Fixture.TestSqlLoggerFactory.Sql; + + private const string FileNewLine = """ + + + """; + + private string Sql { get; set; } + + public class LoadLibRedFixture : LoadRelationalFixtureBase + { + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedApiConsistencyTest.cs b/test/EFCore.LibRed.FunctionalTests/LibRedApiConsistencyTest.cs new file mode 100644 index 00000000..b371cb1a --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedApiConsistencyTest.cs @@ -0,0 +1,120 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.Extensions.DependencyInjection; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable +public class LibRedApiConsistencyTest(LibRedApiConsistencyTest.LibRedApiConsistencyFixture fixture) + : ApiConsistencyTestBase(fixture) +{ + protected override void AddServices(ServiceCollection serviceCollection) + => serviceCollection.AddEntityFrameworkLibRed(); + + protected override Assembly TargetAssembly + => typeof(LibRedRelationalConnection).Assembly; + + public class LibRedApiConsistencyFixture : ApiConsistencyFixtureBase + { + public override HashSet FluentApiTypes { get; } = + [ + typeof(LibRedDbContextOptionsBuilder), + //typeof(JetDbContextOptionsExtensions), + //typeof(JetMigrationBuilderExtensions), + //typeof(JetIndexBuilderExtensions), + //typeof(JetKeyBuilderExtensions), + typeof(JetModelBuilderExtensions), + typeof(JetPropertyBuilderExtensions), + //typeof(JetPrimitiveCollectionBuilderExtensions), + //typeof(JetComplexTypePrimitiveCollectionBuilderExtensions), + //typeof(JetEntityTypeBuilderExtensions), + typeof(JetServiceCollectionExtensions), + typeof(JetDbFunctionsExtensions), + //typeof(JetTableBuilderExtensions) + ]; + + public override + Dictionary MetadataExtensionTypes + { get; } + = new() + { + { + typeof(IReadOnlyModel), ( + typeof(JetModelExtensions), + typeof(JetModelExtensions), + typeof(JetModelExtensions), + typeof(JetModelBuilderExtensions), + null + ) + }, + { + typeof(IReadOnlyEntityType), ( + null,//typeof(JetEntityTypeExtensions), + null,//typeof(JetEntityTypeExtensions), + null,//typeof(JetEntityTypeExtensions), + null,//typeof(JetEntityTypeBuilderExtensions), + null + ) + }, + { + typeof(IReadOnlyKey), ( + null,//typeof(JetKeyExtensions), + null,//typeof(JetKeyExtensions), + null,//typeof(JetKeyExtensions), + null,//typeof(JetKeyBuilderExtensions), + null + ) + }, + { + typeof(IReadOnlyProperty), ( + typeof(JetPropertyExtensions), + typeof(JetPropertyExtensions), + typeof(JetPropertyExtensions), + typeof(JetPropertyBuilderExtensions), + null + ) + }, + { + typeof(IReadOnlyIndex), ( + typeof(JetIndexExtensions), + typeof(JetIndexExtensions), + typeof(JetIndexExtensions), + null,//typeof(JetIndexBuilderExtensions), + null + ) + }, + { + typeof(IReadOnlyElementType), ( + null, + null, + null, + null,//typeof(JetEntityTypeBuilderExtensions), + null + ) + } + }; + + protected override void Initialize() + { + /*MirrorTypes.Add(typeof(JetPropertyBuilderExtensions), typeof(JetComplexTypePropertyBuilderExtensions)); + MirrorTypes.Add(typeof(JetPrimitiveCollectionBuilderExtensions), typeof(JetPropertyBuilderExtensions)); + MirrorTypes.Add( + typeof(JetComplexTypePrimitiveCollectionBuilderExtensions), typeof(JetComplexTypePropertyBuilderExtensions)); + */ + base.Initialize(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedComplianceTest.cs b/test/EFCore.LibRed.FunctionalTests/LibRedComplianceTest.cs new file mode 100644 index 00000000..85a8b9e1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedComplianceTest.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexJson; +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexProperties; +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexTableSplitting; +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedJson; +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedTableSplitting; +using Microsoft.EntityFrameworkCore.Update; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class LibRedComplianceTest : RelationalComplianceTestBase + { + + protected override ICollection IgnoredTestBases { get; } = + [ + //No spatial type support in LibRed + typeof(SpatialQueryRelationalTestBase<>), + typeof(SpatialQueryTestBase<>), + typeof(SpatialTestBase<>), + //Only very limited support for primitive collections. + //Can read/write the whole field at a time but any query that needs access to a specific element will fail. + typeof(NonSharedPrimitiveCollectionsQueryTestBase), + typeof(NonSharedPrimitiveCollectionsQueryRelationalTestBase), + //No Json query support in LibRed + typeof(BadDataJsonDeserializationTestBase), + typeof(JsonQueryTestBase<>), + typeof(JsonQueryRelationalTestBase<>), + typeof(JsonUpdateTestBase<>), + typeof(AdHocJsonQueryRelationalTestBase), + typeof(AdHocJsonQueryTestBase), + typeof(OwnedJsonBulkUpdateRelationalTestBase<>), + typeof(OwnedJsonCollectionRelationalTestBase<>), + typeof(OwnedJsonMiscellaneousRelationalTestBase<>), + typeof(OwnedJsonPrimitiveCollectionRelationalTestBase<>), + typeof(OwnedJsonProjectionRelationalTestBase<>), + typeof(OwnedJsonStructuralEqualityRelationalTestBase<>), + typeof(ComplexJsonBulkUpdateRelationalTestBase<>), + typeof(ComplexPropertiesCollectionTestBase<>), + typeof(ComplexJsonCollectionRelationalTestBase<>), + typeof(ComplexJsonMiscellaneousRelationalTestBase<>), + typeof(ComplexJsonPrimitiveCollectionRelationalTestBase<>), + typeof(ComplexJsonProjectionRelationalTestBase<>), + typeof(ComplexPropertiesSetOperationsTestBase<>), + typeof(ComplexJsonSetOperationsRelationalTestBase<>), + typeof(ComplexJsonStructuralEqualityRelationalTestBase<>), + typeof(OwnedTableSplittingPrimitiveCollectionRelationalTestBase<>), + typeof(ComplexTableSplittingPrimitiveCollectionRelationalTestBase<>), + //Too complex table structure for Jet/MS Access. Too many indexes on table. + //Caused by having too many navs (foreign keys) on a single table. + //Also having a primary key (and its related foreign keys) being over more than 14 fields. + typeof(ComplexNavigationsSharedTypeQueryRelationalTestBase<>), + typeof(ComplexNavigationsSharedTypeQueryTestBase<>), + typeof(ComplexNavigationsCollectionsSharedTypeQueryRelationalTestBase<>), + typeof(ComplexNavigationsCollectionsSharedTypeQueryTestBase<>), + typeof(ComplexNavigationsCollectionsSplitSharedTypeQueryRelationalTestBase<>), + typeof(UpdatesTestBase<>), + typeof(UpdatesRelationalTestBase<>), + //No user defined functions in MS Access/LibRed + typeof(UdfDbFunctionTestBase<>), + typeof(StoredProcedureUpdateTestBase), + ]; + + protected override Assembly TargetAssembly { get; } = typeof(LibRedComplianceTest).Assembly; + + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedConfigPatternsTest.cs b/test/EFCore.LibRed.FunctionalTests/LibRedConfigPatternsTest.cs new file mode 100644 index 00000000..cb22ce00 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedConfigPatternsTest.cs @@ -0,0 +1,441 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +// ReSharper disable InconsistentNaming +// ReSharper disable UnusedAutoPropertyAccessor.Local +#pragma warning disable RCS1102 // Make class static. +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class LibRedConfigPatternsTest + { + public class ImplicitServicesAndConfig + { + [ConditionalFact] + public async Task Can_query_with_implicit_services_and_OnConfiguring() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await using var context = new NorthwindContext(); + Assert.Equal(91, await context.Customers.CountAsync()); + } + } + + private class NorthwindContext : DbContext + { + public DbSet Customers { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseLibRed( + LibRedNorthwindTestStoreFactory.NorthwindConnectionString, + TestEnvironment.DataAccessProviderFactory, + b => b.ApplyConfiguration()); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class ImplicitServicesExplicitConfig + { + [ConditionalFact] + public async Task Can_query_with_implicit_services_and_explicit_config() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await using var context = new NorthwindContext( + new DbContextOptionsBuilder() + .EnableServiceProviderCaching(false) + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString, + TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .Options); + Assert.Equal(91, await context.Customers.CountAsync()); + } + } + + private class NorthwindContext(DbContextOptions options) : DbContext(options) + { + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class ExplicitServicesImplicitConfig + { + [ConditionalFact] + public async Task Can_query_with_explicit_services_and_OnConfiguring() + { + await using var async = await LibRedTestStore.GetNorthwindStoreAsync(); + await using var context = new NorthwindContext( + new DbContextOptionsBuilder().UseInternalServiceProvider( + new ServiceCollection() + .AddEntityFrameworkLibRed() + .BuildServiceProvider()).Options); + Assert.Equal(91, await context.Customers.CountAsync()); + } + + private class NorthwindContext(DbContextOptions options) : DbContext(options) + { + public DbSet Customers { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseLibRed( + LibRedNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class ExplicitServicesAndConfig + { + [ConditionalFact] + public async Task Can_query_with_explicit_services_and_explicit_config() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await using var context = new NorthwindContext( + new DbContextOptionsBuilder() + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseInternalServiceProvider( + new ServiceCollection() + .AddEntityFrameworkLibRed() + .BuildServiceProvider()).Options); + Assert.Equal(91, await context.Customers.CountAsync()); + } + } + + private class NorthwindContext(DbContextOptions options) : DbContext(options) + { + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class ExplicitServicesAndNoConfig + { + [ConditionalFact] + public async Task Throws_on_attempt_to_use_SQL_Server_without_providing_connection_string() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + Assert.Equal( + CoreStrings.NoProviderConfigured, + Assert.Throws( + () => + { + using var context = new NorthwindContext( + new DbContextOptionsBuilder().UseInternalServiceProvider( + new ServiceCollection() + .AddEntityFrameworkLibRed() + .BuildServiceProvider(validateScopes: true)).Options); + Assert.Equal(91, context.Customers.Count()); + }).Message); + } + } + + private class NorthwindContext(DbContextOptions options) : DbContext(options) + { + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class NoServicesAndNoConfig + { + [ConditionalFact] + public async Task Throws_on_attempt_to_use_context_with_no_store() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + Assert.Equal( + CoreStrings.NoProviderConfigured, + Assert.Throws( + () => + { + using var context = new NorthwindContext(); + Assert.Equal(91, context.Customers.Count()); + }).Message); + } + } + + private class NorthwindContext : DbContext + { + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.EnableServiceProviderCaching(false); + } + } + + public class ImplicitConfigButNoServices + { + [ConditionalFact] + public async Task Throws_on_attempt_to_use_store_with_no_store_services() + { + var serviceCollection = new ServiceCollection(); + new EntityFrameworkServicesBuilder(serviceCollection).TryAddCoreServices(); + var serviceProvider = serviceCollection.BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + Assert.Equal( + CoreStrings.NoProviderConfigured, + Assert.Throws( + () => + { + using var context = new NorthwindContext( + new DbContextOptionsBuilder() + .UseInternalServiceProvider(serviceProvider).Options); + Assert.Equal(91, context.Customers.Count()); + }).Message); + } + } + + private class NorthwindContext(DbContextOptions options) : DbContext(options) + { + public DbSet Customers { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => + optionsBuilder.UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class InjectContext + { + [ConditionalFact] + public async Task Can_register_context_with_DI_container_and_have_it_injected() + { + var serviceProvider = new ServiceCollection() + .AddEntityFrameworkLibRed() + .AddTransient() + .AddTransient() + .AddSingleton(p => new DbContextOptionsBuilder().UseInternalServiceProvider(p).Options) + .BuildServiceProvider(validateScopes: true); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await serviceProvider.GetRequiredService().TestAsync(); + } + } + + private class MyController + { + private readonly NorthwindContext _context; + + public MyController(NorthwindContext context) + { + Assert.NotNull(context); + + _context = context; + } + + public async Task TestAsync() + => Assert.Equal(91, await _context.Customers.CountAsync()); + } + + private class NorthwindContext : DbContext + { + public NorthwindContext(DbContextOptions options) + : base(options) + { + Assert.NotNull(options); + } + + public DbSet Customers { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseLibRed( + LibRedNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class InjectContextAndConfiguration + { + [ConditionalFact] + public async Task Can_register_context_and_configuration_with_DI_container_and_have_both_injected() + { + var serviceProvider = new ServiceCollection() + .AddTransient() + .AddTransient() + .AddSingleton( + new DbContextOptionsBuilder() + .EnableServiceProviderCaching(false) + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .Options).BuildServiceProvider(); + + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await serviceProvider.GetRequiredService().TestAsync(); + } + } + + private class MyController + { + private readonly NorthwindContext _context; + + public MyController(NorthwindContext context) + { + Assert.NotNull(context); + + _context = context; + } + + public async Task TestAsync() + => Assert.Equal(91, await _context.Customers.CountAsync()); + } + + private class NorthwindContext : DbContext + { + public NorthwindContext(DbContextOptions options) + : base(options) + { + Assert.NotNull(options); + } + + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class ConstructorArgsToBuilder + { + [ConditionalFact] + public async Task Can_pass_context_options_to_constructor_and_use_in_builder() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await using var context = new NorthwindContext( + new DbContextOptionsBuilder() + .EnableServiceProviderCaching(false) + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .Options); + Assert.Equal(91, await context.Customers.CountAsync()); + } + } + + private class NorthwindContext(DbContextOptions options) : DbContext(options) + { + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class ConstructorArgsToOnConfiguring + { + [ConditionalFact] + public async Task Can_pass_connection_string_to_constructor_and_use_in_OnConfiguring() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + await using var context = new NorthwindContext(LibRedNorthwindTestStoreFactory.NorthwindConnectionString); + Assert.Equal(91, await context.Customers.CountAsync()); + } + } + + private class NorthwindContext(string connectionString) : DbContext + { + public DbSet Customers { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseLibRed(connectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + } + } + + public class NestedContext + { + [ConditionalFact] + public async Task Can_use_one_context_nested_inside_another_of_the_same_type() + { + await using (await LibRedTestStore.GetNorthwindStoreAsync()) + { + var serviceProvider = new ServiceCollection() + .AddEntityFrameworkLibRed() + .BuildServiceProvider(validateScopes: true); + + using var context1 = new NorthwindContext(serviceProvider); + var customers1 = await context1.Customers.ToListAsync(); + Assert.Equal(91, customers1.Count); + Assert.Equal(91, context1.ChangeTracker.Entries().Count()); + + using var context2 = new NorthwindContext(serviceProvider); + Assert.Empty(context2.ChangeTracker.Entries()); + + var customers2 = await context2.Customers.ToListAsync(); + Assert.Equal(91, customers2.Count); + Assert.Equal(91, context2.ChangeTracker.Entries().Count()); + + Assert.Equal(customers1[0].CustomerID, customers2[0].CustomerID); + Assert.NotSame(customers1[0], customers2[0]); + } + } + + private class NorthwindContext(IServiceProvider serviceProvider) : DbContext + { + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => ConfigureModel(modelBuilder); + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder + .UseInternalServiceProvider(serviceProvider) + .UseLibRed(LibRedNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); + } + } + + // ReSharper disable once ClassNeverInstantiated.Local + private class Customer + { + public string CustomerID { get; set; } + + // ReSharper disable UnusedMember.Local + public string CompanyName { get; set; } + + public string Fax { get; set; } + // ReSharper restore UnusedMember.Local + } + + private static void ConfigureModel(ModelBuilder builder) + => builder.Entity( + b => + { + b.HasKey(c => c.CustomerID); + b.ToTable("Customers"); + }); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedDatabaseCreatorTest.cs b/test/EFCore.LibRed.FunctionalTests/LibRedDatabaseCreatorTest.cs new file mode 100644 index 00000000..b058fafd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedDatabaseCreatorTest.cs @@ -0,0 +1,758 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Data; +using System.Data.Common; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using System.IO; +using Xunit; +using LibRedDatabaseCreator = EntityFrameworkCore.LibRed.Storage.Internal.LibRedDatabaseCreator; + +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + // Tests are split into classes to enable parallel execution + // Some combinations are skipped to reduce run time + [LibRedCondition(LibRedCondition.IsNotCI)] + public class LibRedDatabaseCreatorExistsTest : LibRedDatabaseCreatorTest + { + [ConditionalTheory] + [InlineData(true, true, false)] + [InlineData(false, false, false)] + [InlineData(true, true, true)] + [InlineData(false, false, true)] + public Task Returns_false_when_database_does_not_exist(bool async, bool ambientTransaction, bool useCanConnect) + { + return Returns_false_when_database_does_not_exist_test(async, ambientTransaction, useCanConnect); + } + + [ConditionalTheory] + [InlineData(true, false, false)] + [InlineData(false, true, false)] + [InlineData(true, false, true)] + [InlineData(false, true, true)] + public Task Returns_false_when_database_with_filename_does_not_exist(bool async, bool ambientTransaction, bool useCanConnect) + { + return Returns_false_when_database_does_not_exist_test(async, ambientTransaction, useCanConnect); + } + + private static async Task Returns_false_when_database_does_not_exist_test( + bool async, bool ambientTransaction, bool useCanConnect) + { + await using var testDatabase = LibRedTestStore.Create("NonExisting"); + using var context = new BloggingContext(testDatabase); + var creator = GetDatabaseCreator(context); + + await context.Database.CreateExecutionStrategy().ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) + { + if (useCanConnect) + { + Assert.False(async ? await creator.CanConnectAsync() : creator.CanConnect()); + } + else + { + Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); + } + } + }); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + + [ConditionalTheory] + [InlineData(true, false, false)] + [InlineData(false, true, false)] + [InlineData(true, false, true)] + [InlineData(false, true, true)] + public Task Returns_true_when_database_exists(bool async, bool ambientTransaction, bool useCanConnect) + { + return Returns_true_when_database_exists_test(async, ambientTransaction, useCanConnect); + } + + [ConditionalTheory] + [InlineData(true, true, false)] + [InlineData(false, false, false)] + [InlineData(true, true, true)] + [InlineData(false, false, true)] + public Task Returns_true_when_database_with_filename_exists(bool async, bool ambientTransaction, bool useCanConnect) + { + return Returns_true_when_database_exists_test(async, ambientTransaction, useCanConnect); + } + + private static async Task Returns_true_when_database_exists_test(bool async, bool ambientTransaction, bool useCanConnect) + { + await using var testDatabase = + await LibRedTestStore.CreateInitializedAsync("ExistingBloggingFile"); + await using var context = new BloggingContext(testDatabase); + var creator = GetDatabaseCreator(context); + + await context.Database.CreateExecutionStrategy().ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) + { + if (useCanConnect) + { + Assert.True(async ? await creator.CanConnectAsync() : creator.CanConnect()); + } + else + { + Assert.True(async ? await creator.ExistsAsync() : creator.Exists()); + } + } + }); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + } + + [LibRedCondition(LibRedCondition.IsNotCI)] + public class LibRedDatabaseCreatorEnsureDeletedTest : LibRedDatabaseCreatorTest + { + [ConditionalTheory] + [InlineData(true, true, true)] + [InlineData(false, false, true)] + [InlineData(true, false, false)] + [InlineData(false, true, false)] + public Task Deletes_database(bool async, bool open, bool ambientTransaction) + { + return Delete_database_test(async, open, ambientTransaction); + } + + [ConditionalTheory] + [InlineData(true, true, false)] + [InlineData(true, false, true)] + [InlineData(false, true, true)] + [InlineData(false, false, false)] + public Task Deletes_database_with_filename(bool async, bool open, bool ambientTransaction) + { + return Delete_database_test(async, open, ambientTransaction); + } + + private static async Task Delete_database_test(bool async, bool open, bool ambientTransaction) + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync("EnsureDeleteBloggingFile"); + if (!open) + { + testDatabase.CloseConnection(); + } + + using var context = new BloggingContext(testDatabase); + var creator = GetDatabaseCreator(context); + + Assert.True(async ? await creator.ExistsAsync() : creator.Exists()); + + await GetExecutionStrategy(testDatabase).ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) + { + if (async) + { + Assert.True(await context.Database.EnsureDeletedAsync()); + } + else + { + Assert.True(context.Database.EnsureDeleted()); + } + } + }); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + + Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public Task Noop_when_database_does_not_exist(bool async) + { + return Noop_when_database_does_not_exist_test(async); + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public Task Noop_when_database_with_filename_does_not_exist(bool async) + { + return Noop_when_database_does_not_exist_test(async); + } + + private static async Task Noop_when_database_does_not_exist_test(bool async) + { + await using var testDatabase = LibRedTestStore.Create("NonExisting"); + using var context = new BloggingContext(testDatabase); + var creator = GetDatabaseCreator(context); + + Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); + + if (async) + { + Assert.False(await creator.EnsureDeletedAsync()); + } + else + { + Assert.False(creator.EnsureDeleted()); + } + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + + Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + } + + [LibRedCondition(LibRedCondition.IsNotCI)] + public class LibRedDatabaseCreatorEnsureCreatedTest : LibRedDatabaseCreatorTest + { + [ConditionalTheory] + [InlineData(true, true)] + [InlineData(false, false)] + public Task Creates_schema_in_existing_database(bool async, bool ambientTransaction) + { + return Creates_schema_in_existing_database_test(async, ambientTransaction); + } + + [ConditionalTheory] + [InlineData(true, false)] + [InlineData(false, true)] + public Task Creates_schema_in_existing_database_with_filename(bool async, bool ambientTransaction) + { + return Creates_schema_in_existing_database_test(async, ambientTransaction); + } + + private static Task Creates_schema_in_existing_database_test(bool async, bool ambientTransaction) + { + return Creates_physical_database_and_schema_test((true, async, ambientTransaction)); + } + + [ConditionalTheory] + [InlineData(true, false)] + [InlineData(false, true)] + public Task Creates_physical_database_and_schema(bool async, bool ambientTransaction) + { + return Creates_new_physical_database_and_schema_test(async, ambientTransaction); + } + + [ConditionalTheory] + [InlineData(true, true)] + [InlineData(false, false)] + public Task Creates_physical_database_with_filename_and_schema(bool async, bool ambientTransaction) + { + return Creates_new_physical_database_and_schema_test(async, ambientTransaction); + } + + private static Task Creates_new_physical_database_and_schema_test(bool async, bool ambientTransaction) + { + return Creates_physical_database_and_schema_test((false, async, ambientTransaction)); + } + + private static async Task Creates_physical_database_and_schema_test( + (bool CreateDatabase, bool Async, bool ambientTransaction) options) + { + var (createDatabase, async, ambientTransaction) = options; + await using var testDatabase = LibRedTestStore.Create("EnsureCreatedTestFile"); + using var context = new BloggingContext(testDatabase); + if (createDatabase) + { + await testDatabase.InitializeAsync(null, (Func)null); + } + else + { + testDatabase.DeleteDatabase(); + } + + var creator = GetDatabaseCreator(context); + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + + using (CreateTransactionScope(ambientTransaction)) + { + if (async) + { + Assert.True(await creator.EnsureCreatedAsync()); + } + else + { + Assert.True(creator.EnsureCreated()); + } + } + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + + if (testDatabase.ConnectionState != ConnectionState.Open) + { + await testDatabase.OpenConnectionAsync(); + } + + var tables = testDatabase.Query( + "SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE TABLE_TYPE = 'BASE TABLE'").ToList(); + Assert.Single(tables); + Assert.Equal("Blogs", tables.Single()); + + /*var dcolumns = testDatabase.ExecuteScalar<>()( + "SELECT * FROM `INFORMATION_SCHEMA.COLUMNS` WHERE TABLE_NAME = 'Blogs' ORDER BY TABLE_NAME, COLUMN_NAME") + .ToArray();*/ + //Assert.Single(dcolumns); + //TABLE_NAME + '.' + COLUMN_NAME + ' (' + DATA_TYPE + ')' + /*dcolumns.Select( f => f.) + Assert.Equal(14, columns.Length); + + Assert.Equal( + new[] + { + "Blogs.AndChew (varbinary)", + "Blogs.AndRow (timestamp)", + "Blogs.Cheese (nvarchar)", + "Blogs.ErMilan (int)", + "Blogs.Fuse (smallint)", + "Blogs.George (bit)", + "Blogs.Key1 (nvarchar)", + "Blogs.Key2 (varbinary)", + "Blogs.NotFigTime (datetime2)", + "Blogs.On (real)", + "Blogs.OrNothing (float)", + "Blogs.TheGu (uniqueidentifier)", + "Blogs.ToEat (tinyint)", + "Blogs.WayRound (bigint)" + }, + columns);*/ + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public Task Noop_when_database_exists_and_has_schema(bool async) + { + return Noop_when_database_exists_and_has_schema_test(async); + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public Task Noop_when_database_with_filename_exists_and_has_schema(bool async) + { + return Noop_when_database_exists_and_has_schema_test(async); + } + + private static async Task Noop_when_database_exists_and_has_schema_test(bool async) + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync("InitializedBloggingFile"); + using var context = new BloggingContext(testDatabase); + context.Database.EnsureCreatedResiliently(); + + if (async) + { + Assert.False(await context.Database.EnsureCreatedResilientlyAsync()); + } + else + { + Assert.False(context.Database.EnsureCreatedResiliently()); + } + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + } + } + + [LibRedCondition(LibRedCondition.IsNotCI)] + public class LibRedDatabaseCreatorHasTablesTest : LibRedDatabaseCreatorTest + { + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public async Task Throws_when_database_does_not_exist(bool async) + { + await using var testDatabase = LibRedTestStore.GetOrCreate("NonExisting"); + var databaseCreator = GetDatabaseCreator(testDatabase); + await databaseCreator.ExecutionStrategy.ExecuteAsync( + databaseCreator, + async creator => + { + var errorNumber = async + ? (await Assert.ThrowsAnyAsync(() => creator.HasTablesAsyncBase())) + : Assert.ThrowsAny(() => creator.HasTablesBase()); + }); + } + + [ConditionalTheory] + [InlineData(true, true)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(false, false)] + public async Task Returns_false_when_database_exists_but_has_no_tables(bool async, bool ambientTransaction) + { + await using var testDatabase = await LibRedTestStore.GetOrCreateInitializedAsync("Empty"); + var creator = GetDatabaseCreator(testDatabase); + + await GetExecutionStrategy(testDatabase).ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) + { + Assert.False(async ? await creator.HasTablesAsyncBase() : creator.HasTablesBase()); + } + }); + } + + [ConditionalTheory] + [InlineData(true, true)] + [InlineData(true, false)] + [InlineData(false, true)] + [InlineData(false, false)] + public async Task Returns_true_when_database_exists_and_has_any_tables(bool async, bool ambientTransaction) + { + await using var testDatabase = await LibRedTestStore.GetOrCreate("ExistingTables") + .InitializeLibRedAsync(null, t => new BloggingContext(t), null); + var creator = GetDatabaseCreator(testDatabase); + + await GetExecutionStrategy(testDatabase).ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) + { + Assert.True(async ? await creator.HasTablesAsyncBase() : creator.HasTablesBase()); + } + }); + } + } + + [LibRedCondition(LibRedCondition.IsNotCI)] + public class LibRedDatabaseCreatorDeleteTest : LibRedDatabaseCreatorTest + { + [ConditionalTheory] + [InlineData(true, true)] + [InlineData(false, false)] + public static async Task Deletes_database(bool async, bool ambientTransaction) + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync("DeleteBlogging"); + testDatabase.CloseConnection(); + + var creator = GetDatabaseCreator(testDatabase); + + Assert.True(async ? await creator.ExistsAsync() : creator.Exists()); + + using (CreateTransactionScope(ambientTransaction)) + { + if (async) + { + await creator.DeleteAsync(); + } + else + { + creator.Delete(); + } + } + + Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public async Task Throws_when_database_does_not_exist(bool async) + { + await using var testDatabase = LibRedTestStore.GetOrCreate("NonExistingBlogging"); + var creator = GetDatabaseCreator(testDatabase); + + if (async) + { + await Assert.ThrowsAnyAsync(() => creator.DeleteAsync()); + } + else + { + Assert.ThrowsAny(() => creator.Delete()); + } + } + } + + [LibRedCondition(LibRedCondition.IsNotCI)] + public class LibRedDatabaseCreatorCreateTablesTest : LibRedDatabaseCreatorTest + { + [ConditionalTheory] + [InlineData(true, true)] + [InlineData(false, false)] + public async Task Creates_schema_in_existing_database_test(bool async, bool ambientTransaction) + { + await using var testDatabase = await LibRedTestStore.GetOrCreateInitializedAsync("ExistingBlogging" + (async ? "Async" : "")); + using var context = new BloggingContext(testDatabase); + var creator = GetDatabaseCreator(context); + + using (CreateTransactionScope(ambientTransaction)) + { + if (async) + { + await creator.CreateTablesAsync(); + } + else + { + creator.CreateTables(); + } + } + + if (testDatabase.ConnectionState != ConnectionState.Open) + { + await testDatabase.OpenConnectionAsync(); + } + + var tables = (await testDatabase.QueryAsync( + "SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE TABLE_TYPE = 'BASE TABLE'")).ToList(); + Assert.Single(tables); + Assert.Equal("Blogs", tables.Single()); + + var columns = (await testDatabase.QueryAsync( + "SELECT * FROM `INFORMATION_SCHEMA.COLUMNS` WHERE TABLE_NAME = 'Blogs'")).ToList(); + Assert.Equal(14, columns.Count); + Assert.Contains(columns, c => c == "Blogs.Key1"); + Assert.Contains(columns, c => c == "Blogs.Key2"); + Assert.Contains(columns, c => c == "Blogs.Cheese"); + Assert.Contains(columns, c => c == "Blogs.ErMilan"); + Assert.Contains(columns, c => c == "Blogs.George"); + Assert.Contains(columns, c => c == "Blogs.TheGu"); + Assert.Contains(columns, c => c == "Blogs.NotFigTime"); + Assert.Contains(columns, c => c == "Blogs.ToEat"); + Assert.Contains(columns, c => c == "Blogs.OrNothing"); + Assert.Contains(columns, c => c == "Blogs.Fuse"); + Assert.Contains(columns, c => c == "Blogs.WayRound"); + Assert.Contains(columns, c => c == "Blogs.On"); + Assert.Contains(columns, c => c == "Blogs.AndChew"); + Assert.Contains(columns, c => c == "Blogs.AndRow"); + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public async Task Throws_if_database_does_not_exist(bool async) + { + await using var testDatabase = LibRedTestStore.GetOrCreate("NonExisting"); + var creator = GetDatabaseCreator(testDatabase); + var exception = async + ? await Record.ExceptionAsync(() => creator.CreateTablesAsync()) + : Record.Exception(() => creator.CreateTables()); + // Copied from the Jet suite, where the only possible outcomes were OleDbException/OdbcException. + // LibRed is a native managed engine and raises neither: it opens the .accdb itself, so a database + // that isn't there fails on the file. + Assert.IsType(exception); + } + + [ConditionalFact] + public void GenerateCreateScript_works() + { + using var context = new BloggingContext("Data Source=foo"); + var script = context.Database.GenerateCreateScript(); + Assert.Equal( + "CREATE TABLE `Blogs` (" + + _eol + + " `Key1` varchar(255) NOT NULL," + + _eol + + " `Key2` varbinary(510) NOT NULL," + + _eol + + " `Cheese` longchar NULL," + + _eol + + " `ErMilan` integer NOT NULL," + + _eol + + " `George` smallint NOT NULL," + + _eol + + " `TheGu` uniqueidentifier NOT NULL," + + _eol + + " `NotFigTime` datetime NOT NULL," + + _eol + + " `ToEat` byte NOT NULL," + + _eol + + " `OrNothing` double NOT NULL," + + _eol + + " `Fuse` smallint NOT NULL," + + _eol + + " `WayRound` decimal(20,0) NOT NULL," + + _eol + + " `On` single NOT NULL," + + _eol + + " `AndChew` longbinary NULL," + + _eol + + " `AndRow` varbinary(8) NULL," + + _eol + + " CONSTRAINT `PK_Blogs` PRIMARY KEY (`Key1`, `Key2`)" + + _eol + + ");" + + _eol + + _eol + + _eol, + script); + } + + private static readonly string _eol = Environment.NewLine; + } + + [LibRedCondition(LibRedCondition.IsNotCI)] + public class LibRedDatabaseCreatorCreateTest : LibRedDatabaseCreatorTest + { + [ConditionalTheory] + [InlineData(true, false)] + [InlineData(false, true)] + public async Task Creates_physical_database_but_not_tables(bool async, bool ambientTransaction) + { + await using var testDatabase = LibRedTestStore.GetOrCreate("CreateTest"); + var creator = GetDatabaseCreator(testDatabase); + + creator.EnsureDeleted(); + + await GetExecutionStrategy(testDatabase).ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) + { + if (async) + { + await creator.CreateAsync(); + } + else + { + creator.Create(); + } + } + }); + + Assert.True(creator.Exists()); + + if (testDatabase.ConnectionState != ConnectionState.Open) + { + await testDatabase.OpenConnectionAsync(); + } + + Assert.Empty( + (await testDatabase.QueryAsync( + "SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE TABLE_TYPE = 'BASE TABLE'"))); + } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public async Task Throws_if_database_already_exists(bool async) + { + await using var testDatabase = await LibRedTestStore.GetOrCreateInitializedAsync("ExistingBlogging"); + var creator = GetDatabaseCreator(testDatabase); + + var ex = async + ? await Assert.ThrowsAsync(() => creator.CreateAsync()) + : Assert.Throws(() => creator.Create()); + //todo:check message + } + } + +#pragma warning disable RCS1102 // Make class static. + [LibRedCondition(LibRedCondition.IsNotCI)] + public class LibRedDatabaseCreatorTest + { + protected static IDisposable CreateTransactionScope(bool useTransaction) + => TestStore.CreateTransactionScope(useTransaction); + + protected static TestDatabaseCreator GetDatabaseCreator(LibRedTestStore testStore) + => GetDatabaseCreator(testStore.ConnectionString); + + protected static TestDatabaseCreator GetDatabaseCreator(string connectionString) + => GetDatabaseCreator(new BloggingContext(connectionString)); + + protected static TestDatabaseCreator GetDatabaseCreator(BloggingContext context) + => (TestDatabaseCreator)context.GetService(); + + protected static IExecutionStrategy GetExecutionStrategy(LibRedTestStore testStore) + => new BloggingContext(testStore).GetService().Create(); + + // ReSharper disable once ClassNeverInstantiated.Local + private class TestLibRedExecutionStrategyFactory(ExecutionStrategyDependencies dependencies) + : LibRedExecutionStrategyFactory(dependencies) + { + protected override IExecutionStrategy CreateDefaultStrategy(ExecutionStrategyDependencies dependencies) + { + return new NonRetryingExecutionStrategy(dependencies); + } + } + + private static IServiceProvider CreateServiceProvider() + { + return new ServiceCollection() + .AddEntityFrameworkLibRed() + .AddScoped() + .AddScoped() + .BuildServiceProvider(); + } + + protected class BloggingContext(string connectionString) : DbContext + { + public BloggingContext(LibRedTestStore testStore) + : this(testStore.ConnectionString) + { + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder + .UseLibRed(connectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(CreateServiceProvider()); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity( + b => + { + b.HasKey( + e => new { e.Key1, e.Key2 }); + b.Property(e => e.AndRow).IsConcurrencyToken().ValueGeneratedOnAddOrUpdate(); + }); + } + + public DbSet Blogs { get; set; } + } + + public class Blog + { + public string Key1 { get; set; } + public byte[] Key2 { get; set; } + public string Cheese { get; set; } + public int ErMilan { get; set; } + public bool George { get; set; } + public Guid TheGu { get; set; } + public DateTime NotFigTime { get; set; } + public byte ToEat { get; set; } + public double OrNothing { get; set; } + public short Fuse { get; set; } + public long WayRound { get; set; } + public float On { get; set; } + public byte[] AndChew { get; set; } + public byte[] AndRow { get; set; } + } + + public class TestDatabaseCreator( + RelationalDatabaseCreatorDependencies dependencies, + ILibRedRelationalConnection connection, + IRawSqlCommandBuilder rawSqlCommandBuilder) + : LibRedDatabaseCreator(dependencies, connection, rawSqlCommandBuilder) + { + public bool HasTablesBase() + => HasTables(); + + public Task HasTablesAsyncBase(CancellationToken cancellationToken = default) + => HasTablesAsync(cancellationToken); + + public IExecutionStrategy ExecutionStrategy + => Dependencies.ExecutionStrategy; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedEndToEndTest.cs b/test/EFCore.LibRed.FunctionalTests/LibRedEndToEndTest.cs new file mode 100644 index 00000000..bd11fb01 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedEndToEndTest.cs @@ -0,0 +1,2080 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.IO.Pipelines; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using static Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase; + +// ReSharper disable StringStartsWithIsCultureSpecific +// ReSharper disable VirtualMemberCallInConstructor +// ReSharper disable ClassNeverInstantiated.Local +// ReSharper disable UnusedAutoPropertyAccessor.Local +// ReSharper disable InconsistentNaming + +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class LibRedEndToEndTest : IClassFixture + { + private const string DatabaseName = "LibRedEndToEndTest"; + + protected LibRedFixture Fixture { get; } + + public LibRedEndToEndTest(LibRedFixture fixture) + { + Fixture = fixture; + Fixture.TestSqlLoggerFactory.Clear(); + } + + [ConditionalFact] + public async Task Can_use_string_enum_or_byte_array_as_key() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var sNum1 = new SNum { TheWalrus = "I" }; + var sNum2 = new SNum { TheWalrus = "Am" }; + + var enNum1 = new EnNum { TheWalrus = "Goo goo", Id = ENum.BNum }; + var enNum2 = new EnNum { TheWalrus = "g'joob", Id = ENum.CNum }; + + var bNum1 = new BNum { TheWalrus = "Eggman" }; + var bNum2 = new BNum { TheWalrus = "Eggmen" }; + + var options = Fixture.CreateOptions(testDatabase); + await using (var context = new ENumContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange(sNum1, sNum2, enNum1, enNum2, bNum1, bNum2); + + context.SaveChanges(); + } + + await using (var context = new ENumContext(options)) + { + Assert.Equal(sNum1.Id, context.SNums.Single(e => e.TheWalrus == "I").Id); + Assert.Equal(sNum2.Id, context.SNums.Single(e => e.TheWalrus == "Am").Id); + + Assert.Equal(enNum1.Id, context.EnNums.Single(e => e.TheWalrus == "Goo goo").Id); + Assert.Equal(enNum2.Id, context.EnNums.Single(e => e.TheWalrus == "g'joob").Id); + + Assert.Equal(bNum1.Id, context.BNums.Single(e => e.TheWalrus == "Eggman").Id); + Assert.Equal(bNum2.Id, context.BNums.Single(e => e.TheWalrus == "Eggmen").Id); + } + } + + [ConditionalFact] + public async Task Can_remove_multiple_byte_array_as_key() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var bNum1 = new BNum { TheWalrus = "Eggman" }; + var bNum2 = new BNum { TheWalrus = "Eggmen" }; + + var options = Fixture.CreateOptions(testDatabase); + await using (var context = new ENumContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange(bNum1, bNum2); + + context.SaveChanges(); + } + + await using (var context = new ENumContext(options)) + { + Assert.Equal(bNum1.Id, context.BNums.Single(e => e.TheWalrus == "Eggman").Id); + Assert.Equal(bNum2.Id, context.BNums.Single(e => e.TheWalrus == "Eggmen").Id); + + context.RemoveRange(context.BNums); + + context.SaveChanges(); + } + } + + private class ENumContext(DbContextOptions options) : DbContext(options) + { + public DbSet SNums { get; set; } + public DbSet EnNums { get; set; } + public DbSet BNums { get; set; } + } + + [ConditionalFact] + public async Task Can_add_table_splitting_dependent_after_principal() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + EvaluationAction evaluationAction = null; + await using (var context = new ProjectContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + evaluationAction = new EvaluationAction + { + Id = Guid.NewGuid().ToString(), + CreateId = "1", + UpdateId = "1" + }; + context.EvaluationActions.Add(evaluationAction); + context.SaveChanges(); + } + + await using (var context = new ProjectContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + var projectAction = new ProjectAction + { + Id = evaluationAction.Id, + CreateId = "1", + UpdateId = "1", + Name = "123123123123" + }; + context.ProjectActions.Add(projectAction); + context.SaveChanges(); + } + + await using (var context = new ProjectContext(options)) + { + Assert.NotNull(context.ProjectActions.Single()); + Assert.NotNull(context.EvaluationActions.Single()); + } + } + + [ConditionalFact] + public async Task Throws_when_adding_table_splitting_dependent_without_principal() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + using var context = new ProjectContext(options); + context.Database.EnsureCreatedResiliently(); + + var projectAction = new ProjectAction + { + Id = Guid.NewGuid().ToString(), + CreateId = "1", + UpdateId = "1", + Name = "123123123123" + }; + context.ProjectActions.Add(projectAction); + + Assert.Throws(() => context.SaveChanges()); + } + + private class ProjectContext(DbContextOptions options) : DbContext(options) + { + public DbSet EvaluationActions { get; set; } + public DbSet ProjectActions { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity() + .ToTable("projectaction") + .HasOne(o => o.EvaluationAction).WithOne(o => o.ProjectAction) + .HasForeignKey(o => o.Id); + + modelBuilder.Entity().Property(p => p.Name).IsRequired(); + + modelBuilder.Entity() + .ToTable("projectaction"); + } + } + + private class ProjectAction + { + public string Id { get; set; } + public string CreateId { get; set; } + public string UpdateId { get; set; } + public string Name { get; set; } + + public EvaluationAction EvaluationAction { get; set; } + } + + private class EvaluationAction + { + public string Id { get; set; } + public string CreateId { get; set; } + public string UpdateId { get; set; } + + public ProjectAction ProjectAction { get; set; } + } + + private class SNum + { + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public string Id { get; set; } + + public string TheWalrus { get; set; } + } + + private class EnNum + { + public ENum Id { get; set; } + + public string TheWalrus { get; set; } + } + + private enum ENum + { + // ReSharper disable once UnusedMember.Local + ANum, + BNum, + CNum + } + + private class BNum + { + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public byte[] Id { get; set; } + + public string TheWalrus { get; set; } + } + + [ConditionalFact] + public async Task Can_add_and_remove_entities_with_keys_of_different_type() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + using (var context = new CompositeKeysDbContext(options)) + { + context.Database.EnsureCreatedResiliently(); + var first = new Int32CompositeKeys { Id1 = 1, Id2 = 2 }; + + await context.AddAsync(first); + + var second = new Int64CompositeKeys { Id1 = 1, Id2 = 2 }; + + await context.AddAsync(second); + await context.SaveChangesAsync(); + } + + using (var context = new CompositeKeysDbContext(options)) + { + var first = context.Set().Single(); + context.Remove(first); + + var second = context.Set().Single(); + context.Remove(second); + + await context.SaveChangesAsync(); + } + } + + private class CompositeKeysDbContext(DbContextOptions options) : DbContext(options) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasKey(i => new { i.Id1, i.Id2 }); + modelBuilder.Entity().HasKey(l => new { l.Id1, l.Id2 }); + } + } + + private class Int32CompositeKeys + { + public int Id1 { get; set; } + public int Id2 { get; set; } + } + + private class Int64CompositeKeys + { + public long Id1 { get; set; } + public long Id2 { get; set; } + } + + [ConditionalFact] + public async Task Can_insert_non_owner_principal_for_owned() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + using var context = new FileContext(options); + context.Database.EnsureCreatedResiliently(); + + var category = new Category(); + context.Categories.Add(category); + + context.SaveChanges(); + + var fileMetadata = new FileMetadata(); + context.FileMetadata.Add(fileMetadata); + category.Picture = new FileSource { FileId = fileMetadata.Id }; + + context.SaveChanges(); + } + + private class FileContext(DbContextOptions options) : DbContext(options) + { + public DbSet FileMetadata { get; set; } + public DbSet Categories { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + builder => + { + builder.OwnsOne( + x => x.Picture, fileSource => + { + fileSource.HasOne().WithOne().HasForeignKey(x => x.FileId); + }); + }); + } + } + + private sealed class FileMetadata + { + public Guid Id { get; set; } + } + + private sealed class Category + { + public Guid Id { get; set; } + + public FileSource Picture { get; set; } + } + + private sealed class FileSource + { + public Guid? FileId { get; set; } + public bool Deleted { get; set; } + } + + [ConditionalFact] + public async Task Can_insert_TPT_dependents_with_identity() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + using var context = new CarContext(options); + context.Database.EnsureCreatedResiliently(); + + var ferrari = new Ferrari { Special = new Car() }; + await context.AddAsync(ferrari); + + await context.SaveChangesAsync(); + + Assert.NotNull(ferrari.Special); + } + + private class CarContext(DbContextOptions options) : DbContext(options) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("Car"); + modelBuilder.Entity().ToTable("Ferrari"); + } + } + + private class Car + { + public int Id { get; set; } + } + + private class Ferrari : Car + { + public Car Special { get; set; } + } + + [ConditionalFact] + public async Task Can_run_linq_query_on_entity_set() + { + await using var testStore = await LibRedTestStore.GetNorthwindStoreAsync(); + using var db = new NorthwindContext(Fixture.CreateOptions(testStore)); + var results = db.Customers + .Where(c => c.CompanyName.StartsWith("A")) + .OrderByDescending(c => c.CustomerID) + .ToList(); + + Assert.Equal(4, results.Count); + Assert.Equal("AROUT", results[0].CustomerID); + Assert.Equal("ANTON", results[1].CustomerID); + Assert.Equal("ANATR", results[2].CustomerID); + Assert.Equal("ALFKI", results[3].CustomerID); + + Assert.Equal("(171) 555-6750", results[0].Fax); + Assert.Null(results[1].Fax); + Assert.Equal("(5) 555-3745", results[2].Fax); + Assert.Equal("030-0076545", results[3].Fax); + } + + [ConditionalFact] + public async Task Can_run_linq_query_on_entity_set_with_value_buffer_reader() + { + await using var testStore = await LibRedTestStore.GetNorthwindStoreAsync(); + using var db = new NorthwindContext(Fixture.CreateOptions(testStore)); + var results = db.Customers + .Where(c => c.CompanyName.StartsWith("A")) + .OrderByDescending(c => c.CustomerID) + .ToList(); + + Assert.Equal(4, results.Count); + Assert.Equal("AROUT", results[0].CustomerID); + Assert.Equal("ANTON", results[1].CustomerID); + Assert.Equal("ANATR", results[2].CustomerID); + Assert.Equal("ALFKI", results[3].CustomerID); + + Assert.Equal("(171) 555-6750", results[0].Fax); + Assert.Null(results[1].Fax); + Assert.Equal("(5) 555-3745", results[2].Fax); + Assert.Equal("030-0076545", results[3].Fax); + } + + [ConditionalFact] + public async Task Can_enumerate_entity_set() + { + await using var testStore = await LibRedTestStore.GetNorthwindStoreAsync(); + await using var db = new NorthwindContext(Fixture.CreateOptions(testStore)); + var results = new List(); + foreach (var item in db.Customers) + { + results.Add(item); + } + + Assert.Equal(91, results.Count); + Assert.Equal("ALFKI", results[0].CustomerID); + Assert.Equal("Alfreds Futterkiste", results[0].CompanyName); + } + + [ConditionalFact] + public async Task Can_save_changes() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + using (var db = new BloggingContext(options)) + { + await CreateBlogDatabaseAsync(db); + } + + Fixture.TestSqlLoggerFactory.Clear(); + + using (var db = new BloggingContext(options)) + { + var toUpdate = db.Blogs.Single(b => b.Name == "Blog1"); + toUpdate.Name = "Blog is Updated"; + var updatedId = toUpdate.Id; + var toDelete = db.Blogs.Single(b => b.Name == "Blog2"); + toDelete.Name = "Blog to delete"; + var deletedId = toDelete.Id; + + db.Entry(toUpdate).State = EntityState.Modified; + db.Entry(toDelete).State = EntityState.Deleted; + + var toAdd = db.Add( + new Blog + { + Name = "Blog to Insert", + George = true, + TheGu = new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), + NotFigTime = new DateTime(1973, 9, 3, 0, 10, 33, 777), + ToEat = 64, + OrNothing = 0.123456789, + Fuse = 777, + WayRound = 9876543210, + Away = 0.12345f, + AndChew = new byte[16] + }).Entity; + + await db.SaveChangesAsync(); + + var addedId = toAdd.Id; + Assert.NotEqual(0, addedId); + + Assert.Equal(EntityState.Unchanged, db.Entry(toUpdate).State); + Assert.Equal(EntityState.Unchanged, db.Entry(toAdd).State); + Assert.DoesNotContain(toDelete, db.ChangeTracker.Entries().Select(e => e.Entity)); + + Assert.Equal(5, Fixture.TestSqlLoggerFactory.SqlStatements.Count); + Assert.Contains("SELECT", Fixture.TestSqlLoggerFactory.SqlStatements[0]); + Assert.Contains("SELECT", Fixture.TestSqlLoggerFactory.SqlStatements[1]); + Assert.Contains("@p0='" + deletedId, Fixture.TestSqlLoggerFactory.SqlStatements[2]); + Assert.Contains("DELETE", Fixture.TestSqlLoggerFactory.SqlStatements[2]); + Assert.Contains("UPDATE", Fixture.TestSqlLoggerFactory.SqlStatements[3]); + Assert.Contains("INSERT", Fixture.TestSqlLoggerFactory.SqlStatements[4]); + + var rows = await testDatabase.ExecuteScalarAsync( + $"SELECT Count(*) FROM `Blog` WHERE Id = {updatedId} AND Name = 'Blog is Updated'"); + + Assert.Equal(1, rows); + + rows = await testDatabase.ExecuteScalarAsync( + $"SELECT Count(*) FROM `Blog` WHERE Id = {deletedId}"); + + Assert.Equal(0, rows); + + rows = await testDatabase.ExecuteScalarAsync( + $"SELECT Count(*) FROM `Blog` WHERE Id = {addedId} AND Name = 'Blog to Insert'"); + + Assert.Equal(1, rows); + } + } + + [ConditionalFact] + public async Task Can_save_changes_in_tracked_entities() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + int updatedId; + int deletedId; + int addedId; + var options = Fixture.CreateOptions(testDatabase); + using (var db = new BloggingContext(options)) + { + var blogs = await CreateBlogDatabaseAsync(db); + + var toAdd = db.Blogs.Add( + new Blog + { + Name = "Blog to Insert", + George = true, + TheGu = new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), + NotFigTime = new DateTime(1973, 9, 3, 0, 10, 33, 777), + ToEat = 64, + OrNothing = 0.123456789, + Fuse = 777, + WayRound = 9876543210, + Away = 0.12345f, + AndChew = new byte[16] + }).Entity; + db.Entry(toAdd).State = EntityState.Detached; + + var toUpdate = blogs[0]; + toUpdate.Name = "Blog is Updated"; + updatedId = toUpdate.Id; + var toDelete = blogs[1]; + toDelete.Name = "Blog to delete"; + deletedId = toDelete.Id; + + db.Remove(toDelete); + db.Entry(toAdd).State = EntityState.Added; + + await db.SaveChangesAsync(); + + addedId = toAdd.Id; + Assert.NotEqual(0, addedId); + + Assert.Equal(EntityState.Unchanged, db.Entry(toUpdate).State); + Assert.Equal(EntityState.Unchanged, db.Entry(toAdd).State); + Assert.DoesNotContain(toDelete, db.ChangeTracker.Entries().Select(e => e.Entity)); + } + + using (var db = new BloggingContext(options)) + { + var toUpdate = db.Blogs.Single(b => b.Id == updatedId); + Assert.Equal("Blog is Updated", toUpdate.Name); + Assert.Equal(0, db.Blogs.Count(b => b.Id == deletedId)); + Assert.Equal("Blog to Insert", db.Blogs.Single(b => b.Id == addedId).Name); + } + } + + [ConditionalFact] + public async Task Can_track_an_entity_with_more_than_10_properties() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + using (var context = new GameDbContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + // Work around LibRed/ACE MATCH FULL: the Actor insert has GameId set but CurrentWeaponId null + // (a partial-null composite FK), which Jet/ACE reject. Drop it so the row inserts. + context.Database.ExecuteSql($"ALTER TABLE `Actor` DROP CONSTRAINT `FK_Actor_Items_GameId_CurrentWeaponId`"); + + context.Characters.Add( + new PlayerCharacter( + new Level { Game = new Game() })); + + context.SaveChanges(); + } + + using (var context = new GameDbContext(options)) + { + var character = context.Characters + .Include(c => c.Level.Game) + .OrderBy(c => c.Id) + .First(); + + Assert.NotNull(character.Game); + Assert.NotNull(character.Level); + Assert.NotNull(character.Level.Game); + } + } + + [ConditionalFact] + public async Task Can_replace_identifying_FK_entity_with_many_to_many() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + + using (var context = new SomeDbContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + context.Add(new EntityA { EntityB = new EntityB { EntitiesC = { new EntityC() }, } }); + + context.SaveChanges(); + } + + var expectedCId = 0; + using (var context = new SomeDbContext(options)) + { + var entityA = context.EntitiesA.Include(x => x.EntityB).ThenInclude(x => x.EntitiesC).OrderBy(x => x.Id).First(); + + entityA.EntityB = new EntityB { EntitiesC = { new EntityC() } }; + + context.SaveChanges(); + + expectedCId = entityA.EntityB.EntitiesC.Single().Id; + } + + using (var context = new SomeDbContext(options)) + { + var entityA = context.EntitiesA.Include(x => x.EntityB).ThenInclude(x => x.EntitiesC).OrderBy(x => x.Id).First(); + + Assert.Equal(expectedCId, entityA.EntityB.EntitiesC.Single().Id); + } + } + + [ConditionalTheory] + [MemberData( + nameof(DataGenerator.GetCombinations), + new object[] { 0, 1, 2, 3, 4, 7 }, + 2, + MemberType = typeof(DataGenerator))] + public async Task Can_insert_entities_with_generated_PKs(int studentCount, int courseCount) + { + var students = new Student[] + { + new() + { + FirstMidName = "Carson", + LastName = "Alexander", + EnrollmentDate = DateTime.Parse("2019-09-01") + }, + new() + { + FirstMidName = "Meredith", + LastName = "Alonso", + EnrollmentDate = DateTime.Parse("2017-09-01") + }, + new() + { + FirstMidName = "Arturo", + LastName = "Anand", + EnrollmentDate = DateTime.Parse("2018-09-01") + }, + new() + { + FirstMidName = "Gytis", + LastName = "Barzdukas", + EnrollmentDate = DateTime.Parse("2017-09-01") + }, + new() + { + FirstMidName = "Yan", + LastName = "Li", + EnrollmentDate = DateTime.Parse("2017-09-01") + }, + new() + { + FirstMidName = "Peggy", + LastName = "Justice", + EnrollmentDate = DateTime.Parse("2016-09-01") + }, + new() + { + FirstMidName = "Laura", + LastName = "Norman", + EnrollmentDate = DateTime.Parse("2018-09-01") + }, + new() + { + FirstMidName = "Nino", + LastName = "Olivetto", + EnrollmentDate = DateTime.Parse("2019-09-01") + } + }; + + var courses = new Course[] + { + new() { Title = "Chemistry", Credits = 3 }, + new() { Title = "Microeconomics", Credits = 3 }, + new() { Title = "Macroeconomics", Credits = 3 }, + new() { Title = "Calculus", Credits = 4 }, + new() { Title = "Trigonometry", Credits = 4 }, + new() { Title = "Composition", Credits = 3 }, + new() { Title = "Literature", Credits = 4 } + }; + + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + + var nextCourse = 0; + using (var context = new UniversityContext(options)) + { + context.Database.EnsureCreatedResiliently(); + for (var i = 0; i < studentCount; i++) + { + if (courseCount > 1) + { + students[i].Courses.Add(courses[nextCourse++]); + if (nextCourse >= courseCount) + { + nextCourse = 0; + } + + students[i].Courses.Add(courses[nextCourse++]); + if (nextCourse >= courseCount) + { + nextCourse = 0; + } + } + + context.Students.Add(students[i]); + } + + for (var i = 0; i < courseCount; i++) + { + context.Courses.Add(courses[i]); + } + + Assert.All( + context.Enrollments.Local, e => + { + var entry = context.Entry(e); + var student = e.Student; + var course = e.Course; + Assert.Equal(student.Id, e.StudentId); + Assert.Equal(course.Id, e.CourseId); + Assert.Equal(context.Entry(student).Property(e => e.Id).CurrentValue, entry.Property(e => e.StudentId).CurrentValue); + Assert.Equal(context.Entry(course).Property(e => e.Id).CurrentValue, entry.Property(e => e.CourseId).CurrentValue); + //We generate Guid's client side + Assert.False(entry.Property(e => e.StudentId).IsTemporary); + Assert.False(entry.Property(e => e.CourseId).IsTemporary); + Assert.False(context.Entry(student).Property(e => e.Id).IsTemporary); + Assert.False(context.Entry(course).Property(e => e.Id).IsTemporary); + }); + + context.SaveChanges(); + + Assert.All( + context.Enrollments.Local, e => + { + var entry = context.Entry(e); + var student = e.Student; + var course = e.Course; + Assert.Equal(student.Id, e.StudentId); + Assert.Equal(course.Id, e.CourseId); + Assert.False(entry.Property(e => e.StudentId).IsTemporary); + Assert.False(entry.Property(e => e.CourseId).IsTemporary); + }); + } + + using (var context = new UniversityContext(options)) + { + Assert.Equal(studentCount, context.Students.ToList().Count()); + Assert.Equal(courseCount, context.Courses.ToList().Count()); + + var enrollments = context.Enrollments.Include(e => e.Course).Include(e => e.Student).ToList(); + Assert.All( + enrollments, e => + { + var student = e.Student; + var course = e.Course; + Assert.Equal(student.Id, e.StudentId); + Assert.Equal(course.Id, e.CourseId); + }); + } + } + + public class Course + { + public Guid Id { get; set; } + + public string Title { get; set; } = string.Empty; + + public int Credits { get; set; } + + public virtual ICollection Enrollments { get; set; } = []; + + public virtual ICollection Students { get; set; } = []; + + public byte[] RowVersion { get; set; } = []; + } + + public class Student + { + public Guid Id { get; set; } + + public string LastName { get; set; } = string.Empty; + + public string FirstMidName { get; set; } = string.Empty; + + public DateTime EnrollmentDate { get; set; } + + public virtual ICollection Enrollments { get; } = []; + + public virtual ICollection Courses { get; set; } = []; + + public byte[] RowVersion { get; set; } = []; + } + + public enum Grade + { + A, B, C, D, F + } + + public class Enrollment + { + public Guid Id { get; set; } + + public Guid CourseId { get; set; } + + public Guid StudentId { get; set; } + + public Grade? Grade { get; set; } + + public virtual Course Course { get; set; } = new(); + + public virtual Student Student { get; set; } = new(); + + public byte[] RowVersion { get; set; } = []; + } + + private class UniversityContext(DbContextOptions options) : DbContext(options) + { + public DbSet Students { get; set; } + public DbSet Courses { get; set; } + public DbSet Enrollments { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity( + builder => + { + builder.ToTable("Courses"); + + builder.HasKey(x => x.Id); + + builder.Property(x => x.Id) + .ValueGeneratedOnAdd() + .HasDefaultValueSql("GenGUID()"); + + builder.Property(x => x.Title) + .IsRequired() + .HasMaxLength(50); + + builder.Property(x => x.RowVersion) + .IsRowVersion(); + + builder.HasMany(x => x.Students) + .WithMany(x => x.Courses) + .UsingEntity(); + }); + + modelBuilder.Entity( + builder => + { + builder.ToTable("Students"); + + builder.HasKey(x => x.Id); + + builder.Property(x => x.Id) + .ValueGeneratedOnAdd() + .HasDefaultValueSql("GenGUID()"); + + builder.Property(x => x.LastName) + .IsRequired() + .HasMaxLength(50); + + builder.Property(x => x.FirstMidName) + .IsRequired() + .HasMaxLength(50); + + builder.Property(x => x.RowVersion) + .IsRowVersion(); + }); + + modelBuilder.Entity( + builder => + { + builder.ToTable("Enrollments"); + + builder.HasKey(x => x.Id); + + builder.Property(x => x.Id) + .ValueGeneratedOnAdd() + .HasDefaultValueSql("GenGUID()"); + + builder.Property(x => x.RowVersion) + .IsRowVersion(); + + builder.HasOne(t => t.Course) + .WithMany(t => t.Enrollments) + .HasPrincipalKey(d => d.Id) + .HasForeignKey(d => d.CourseId) + .OnDelete(DeleteBehavior.Cascade); + + builder.HasOne(t => t.Student) + .WithMany(t => t.Enrollments) + .HasPrincipalKey(d => d.Id) + .HasForeignKey(d => d.StudentId) + .OnDelete(DeleteBehavior.Cascade); + }); + } + } + + private class EntityA + { + public int Id { get; set; } + public virtual EntityB EntityB { get; set; } + } + + private class EntityB + { + public int Id { get; set; } + public virtual EntityA EntityA { get; set; } + public virtual ICollection EntitiesC { get; } = []; + } + + private class EntityC + { + public int Id { get; set; } + public virtual ICollection EntitiesB { get; } = []; + } + + private class SomeDbContext(DbContextOptions options) : DbContext(options) + { + public DbSet EntitiesA { get; set; } + public DbSet EntitiesB { get; set; } + public DbSet EntitiesC { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder + .Entity() + .HasOne(e => e.EntityB) + .WithOne(e => e.EntityA) + .HasForeignKey(e => e.Id); + } + + [ConditionalFact] + public async Task Adding_an_item_to_a_collection_marks_it_as_modified() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + + using var context = new GameDbContext(options); + context.Database.EnsureCreatedResiliently(); + + // Work around LibRed/ACE MATCH FULL: the Actor insert has GameId set but CurrentWeaponId null + // (a partial-null composite FK), which Jet/ACE reject. Drop it so the row inserts. + context.Database.ExecuteSql($"ALTER TABLE `Actor` DROP CONSTRAINT `FK_Actor_Items_GameId_CurrentWeaponId`"); + + var player = new PlayerCharacter( + new Level { Game = new Game() }); + + var weapon = new Item { Id = 1, Game = player.Game }; + + context.Characters.Add(player); + + context.SaveChanges(); + + player.Items.Add(weapon); + + context.ChangeTracker.DetectChanges(); + + Assert.True(context.Entry(player).Collection(p => p.Items).IsModified); + } + + [ConditionalFact] + public async Task Can_set_reference_twice() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + + using (var context = new GameDbContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + // Drop constraints to work around LibRed/ACE limitation regarding compound foreign keys and NULL: + // the initial inserts have a partial-null composite FK (GameId set, the second column null) which + // Jet/ACE reject under MATCH FULL — the Actor's CurrentWeapon FK and the Item's self-referencing + // Container FK. Dropping them lets the test exercise its actual subject: assigning the CurrentWeapon + // reference repeatedly and round-tripping it. + context.Database.ExecuteSql($"ALTER TABLE `Actor` DROP CONSTRAINT `FK_Actor_Items_GameId_CurrentWeaponId`"); + context.Database.ExecuteSql($"ALTER TABLE `Items` DROP CONSTRAINT `FK_Items_Items_GameId_ContainerId`"); + + var player = new PlayerCharacter( + new Level { Game = new Game() }); + + var weapon = new Item { Id = 1, Game = player.Game }; + + player.Items.Add(weapon); + context.Characters.Add(player); + + context.SaveChanges(); + + player.CurrentWeapon = weapon; + context.SaveChanges(); + + player.CurrentWeapon = null; + context.SaveChanges(); + + player.CurrentWeapon = weapon; + context.SaveChanges(); + } + + using (var context = new GameDbContext(options)) + { + var player = context.Characters + .Include(c => c.Items) + .ToList().Single(); + + Assert.Equal(player.Items.Single(), player.CurrentWeapon); + } + } + + [ConditionalFact] + public async Task Can_include_on_loaded_entity() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + + using (var context = new GameDbContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + // Work around LibRed/ACE MATCH FULL: the initial inserts carry a partial-null composite FK + // (GameId set, second column null), which Jet/ACE reject — the Actor's CurrentWeapon FK and the + // Item's self-referencing Container FK. Drop both so the graph inserts. + context.Database.ExecuteSql($"ALTER TABLE `Actor` DROP CONSTRAINT `FK_Actor_Items_GameId_CurrentWeaponId`"); + context.Database.ExecuteSql($"ALTER TABLE `Items` DROP CONSTRAINT `FK_Items_Items_GameId_ContainerId`"); + + var player = new PlayerCharacter( + new Level { Game = new Game() }); + + var weapon = new Item { Id = 1, Game = player.Game }; + + player.Items.Add(weapon); + + player.Items.Add( + new Item { Id = 2, Game = player.Game }); + + context.Characters.Add(player); + + context.SaveChanges(); + + player.CurrentWeapon = weapon; + + context.SaveChanges(); + } + + using (var context = new GameDbContext(options)) + { + var player = context.Characters + .Include(p => p.CurrentWeapon) + .Single(); + + Assert.Equal(1, player.Items.Count); + + context.Attach(player); + + Assert.Equal(1, player.Items.Count); + + context.Levels + .Include(l => l.Actors) + .ThenInclude(a => a.Items) + .Load(); + + Assert.Equal(2, player.Items.Count); + } + + using (var context = new GameDbContext(options)) + { + var player = context.Characters + .Include(p => p.CurrentWeapon) + .AsNoTracking() + .Single(); + + Assert.Equal(0, player.Items.Count); + + context.Entry(player.CurrentWeapon).Property("ActorId").CurrentValue = 0; + + context.Attach(player); + + Assert.Equal(1, player.Items.Count); + + context.Levels + .Include(l => l.Actors) + .ThenInclude(a => a.Items) + .Load(); + + Assert.Equal(2, player.Items.Count); + } + } + + public abstract class Actor + { + protected Actor() + { + } + + protected Actor(Level level) + { + Level = level; + Game = level.Game; + } + + public virtual int Id { get; private set; } + public virtual Level Level { get; set; } + public virtual int GameId { get; private set; } + public virtual Game Game { get; set; } + public virtual ICollection Items { get; set; } = []; + } + + public class PlayerCharacter : Actor + { + public PlayerCharacter() + { + } + + public PlayerCharacter(Level level) + : base(level) + { + } + + public virtual string Name { get; set; } + + public virtual int Strength { get; set; } + public virtual int Dexterity { get; set; } + public virtual int Speed { get; set; } + public virtual int Constitution { get; set; } + public virtual int Intelligence { get; set; } + public virtual int Willpower { get; set; } + + public virtual int MaxHP { get; set; } + public virtual int HP { get; set; } + + public virtual int MaxMP { get; set; } + public virtual int MP { get; set; } + + public virtual Item CurrentWeapon { get; set; } + } + + public class Level + { + public virtual int Id { get; set; } + public virtual int GameId { get; set; } + public virtual Game Game { get; set; } + public virtual ICollection Actors { get; set; } = []; + public virtual ICollection Items { get; set; } = []; + } + + public class Item + { + public virtual int Id { get; set; } + public virtual int GameId { get; set; } + public virtual Game Game { get; set; } + public virtual Level Level { get; set; } + public virtual Actor Actor { get; set; } + } + + public class Container : Item + { + public virtual ICollection Items { get; set; } = []; + } + + public class Game + { + public virtual int Id { get; set; } + public virtual ICollection Actors { get; set; } = []; + public virtual ICollection Levels { get; set; } = []; + } + + public class GameDbContext(DbContextOptions options) : DbContext(options) + { + public DbSet Games { get; set; } + public DbSet Levels { get; set; } + public DbSet Characters { get; set; } + public DbSet Items { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity( + eb => + { + eb.Property(g => g.Id) + .ValueGeneratedNever(); + + eb.HasKey(l => new { l.GameId, l.Id }); + }); + + modelBuilder.Entity( + eb => + { + eb.Property(g => g.Id) + .ValueGeneratedNever(); + + eb.HasKey(a => new { a.GameId, a.Id }); + + eb.HasOne(a => a.Level) + .WithMany(l => l.Actors) + .HasForeignKey(nameof(Actor.GameId), "LevelId") + .IsRequired(); + + eb.HasMany(a => a.Items) + .WithOne(i => i.Actor) + .HasForeignKey(nameof(Item.GameId), "ActorId"); + }); + + modelBuilder.Entity( + eb => + { + eb.HasOne(p => p.CurrentWeapon) + .WithOne() + .HasForeignKey(nameof(PlayerCharacter.GameId), "CurrentWeaponId"); + }); + + modelBuilder.Entity( + eb => + { + eb.Property(g => g.Id) + .ValueGeneratedNever(); + + eb.HasKey(l => new { l.GameId, l.Id }); + }); + + modelBuilder.Entity( + eb => + { + eb.HasMany(c => c.Items) + .WithOne() + .HasForeignKey("GameId", "ContainerId"); + }); + + modelBuilder.Entity( + eb => + { + eb.Property(g => g.Id) + .ValueGeneratedOnAdd(); + eb.HasMany(g => g.Levels) + .WithOne(l => l.Game) + .HasForeignKey(l => l.GameId); + eb.HasMany(g => g.Actors) + .WithOne(a => a.Game) + .HasForeignKey(a => a.GameId) + .OnDelete(DeleteBehavior.Restrict); + }); + } + } + + [ConditionalFact] + public async Task Tracking_entities_asynchronously_returns_tracked_entities_back() + { + await using var testStore = await LibRedTestStore.GetNorthwindStoreAsync(); + await using var db = new NorthwindContext(Fixture.CreateOptions(testStore)); + var customer = await db.Customers.OrderBy(c => c.CustomerID).FirstOrDefaultAsync(); + + var trackedCustomerEntry = db.ChangeTracker.Entries().Single(); + Assert.Same(trackedCustomerEntry.Entity, customer); + + // if references are different this will throw + db.Customers.Remove(customer); + } + + [ConditionalFact(Skip = "LibRed does not support Schema")] // Issue #931 + public async Task Can_save_and_query_with_schema() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testStore); + + await testStore.ExecuteNonQueryAsync("CREATE SCHEMA Apple"); + await testStore.ExecuteNonQueryAsync("CREATE TABLE Apple.Jack (MyKey int)"); + await testStore.ExecuteNonQueryAsync("CREATE TABLE Apple.Black (MyKey int)"); + + await using (var context = new SchemaContext(options)) + { + await context.AddAsync( + new Jack { MyKey = 1 }); + await context.AddAsync( + new Black { MyKey = 2 }); + context.SaveChanges(); + } + + await using (var context = new SchemaContext(options)) + { + Assert.Equal(1, context.Jacks.Count()); + Assert.Equal(1, context.Blacks.Count()); + } + } + + private class SchemaContext(DbContextOptions options) : DbContext(options) + { + public DbSet Jacks { get; set; } + public DbSet Blacks { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder + .Entity() + .ToTable("Jack", "Apple") + .HasKey(e => e.MyKey); + + modelBuilder + .Entity() + .ToTable("Black", "Apple") + .HasKey(e => e.MyKey); + } + } + + private class Jack + { + public int MyKey { get; set; } + } + + private class Black + { + public int MyKey { get; set; } + } + + [ConditionalFact] + public Task Can_round_trip_changes_with_snapshot_change_tracking() + => RoundTripChanges(); + + [ConditionalFact] + public Task Can_round_trip_changes_with_full_notification_entities() + => RoundTripChanges(); + + [ConditionalFact] + public Task Can_round_trip_changes_with_changed_only_notification_entities() + => RoundTripChanges(); + + private async Task RoundTripChanges() + where TBlog : class, IBlog, new() + { + await using var testDatabase = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + + int blog1Id; + int blog2Id; + int blog3Id; + + using (var context = new BloggingContext(options)) + { + var blogs = await CreateBlogDatabaseAsync(context); + blog1Id = blogs[0].Id; + blog2Id = blogs[1].Id; + + Assert.NotEqual(0, blog1Id); + Assert.NotEqual(0, blog2Id); + Assert.NotEqual(blog1Id, blog2Id); + } + + using (var context = new BloggingContext(options)) + { + var blogs = context.Blogs.ToList(); + Assert.Equal(2, blogs.Count); + + var blog1 = blogs.Single(b => b.Name == "Blog1"); + Assert.Equal(blog1Id, blog1.Id); + + Assert.Equal("Blog1", blog1.Name); + Assert.True(blog1.George); + Assert.Equal(new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), blog1.TheGu); + Assert.Equal(new DateTime(1973, 9, 3, 0, 10, 33, 0), blog1.NotFigTime); + Assert.Equal(64, blog1.ToEat); + Assert.Equal(0.123456789, blog1.OrNothing); + Assert.Equal(777, blog1.Fuse); + Assert.Equal(9876543210, blog1.WayRound); + Assert.Equal(0.12345f, blog1.Away); + Assert.Equal(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, blog1.AndChew); + + blog1.Name = "New Name"; + + var blog2 = blogs.Single(b => b.Name == "Blog2"); + Assert.Equal(blog2Id, blog2.Id); + + blog2.Name = null; + blog2.NotFigTime = new DateTime(); + blog2.AndChew = null; + + var blog3 = (await context.AddAsync(new TBlog())).Entity; + + await context.SaveChangesAsync(); + + blog3Id = blog3.Id; + Assert.NotEqual(0, blog3Id); + } + + using (var context = new BloggingContext(options)) + { + var blogs = context.Blogs.ToList(); + Assert.Equal(3, blogs.Count); + + Assert.Equal("New Name", blogs.Single(b => b.Id == blog1Id).Name); + + var blog2 = blogs.Single(b => b.Id == blog2Id); + Assert.Null(blog2.Name); + Assert.Equal(blog2.NotFigTime, new DateTime()); + Assert.Null(blog2.AndChew); + + var blog3 = blogs.Single(b => b.Id == blog3Id); + Assert.Null(blog3.Name); + Assert.Equal(blog3.NotFigTime, new DateTime()); + Assert.Null(blog3.AndChew); + } + } + + private static async Task CreateBlogDatabaseAsync(DbContext context) + where TBlog : class, IBlog, new() + { + context.Database.EnsureCreatedResiliently(); + + var blog1 = (await context.AddAsync( + new TBlog + { + Name = "Blog1", + George = true, + TheGu = new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), + NotFigTime = new DateTime(1973, 9, 3, 0, 10, 33, 777), + ToEat = 64, + CupOfChar = 'C', + OrNothing = 0.123456789, + Fuse = 777, + WayRound = 9876543210, + NotToEat = -64, + Away = 0.12345f, + OrULong = 888, + OrUSkint = 8888888, + OrUShort = 888888888888888, + AndChew = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + })).Entity; + var blog2 = (await context.AddAsync( + new TBlog + { + Name = "Blog2", + George = false, + TheGu = new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9CF"), + NotFigTime = new DateTime(1973, 9, 3, 0, 10, 33, 778), + ToEat = 65, + CupOfChar = 'D', + OrNothing = 0.987654321, + Fuse = 778, + WayRound = 98765432100, + NotToEat = -64, + Away = 0.12345f, + OrULong = 888, + OrUSkint = 8888888, + OrUShort = 888888888888888, + AndChew = new byte[16] + })).Entity; + await context.SaveChangesAsync(); + + return [blog1, blog2]; + } + + private class NorthwindContext(DbContextOptions options) : DbContext(options) + { + public DbSet Customers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity( + b => + { + b.HasKey(c => c.CustomerID); + b.ToTable("Customers"); + }); + } + + private class Customer + { + public string CustomerID { get; set; } + public string CompanyName { get; set; } + public string Fax { get; set; } + } + + private class BloggingContext(DbContextOptions options) : BloggingContext(options); + + private class Blog : IBlog + { + public int Id { get; set; } + public string Name { get; set; } + public bool George { get; set; } + public Guid TheGu { get; set; } + public DateTime NotFigTime { get; set; } + + public byte ToEat { get; set; } + + public char CupOfChar { get; set; } + public double OrNothing { get; set; } + + public short Fuse { get; set; } + + public long WayRound { get; set; } + + public sbyte NotToEat { get; set; } + public float Away { get; set; } + + public ushort OrULong { get; set; } + public uint OrUSkint { get; set; } + public ulong OrUShort { get; set; } + public byte[] AndChew { get; set; } + } + + private class BloggingContext(DbContextOptions options) : DbContext(options) + where TBlog : class, IBlog + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + if (typeof(INotifyPropertyChanging).IsAssignableFrom(typeof(TBlog))) + { + modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangingAndChangedNotifications); + } + else if (typeof(INotifyPropertyChanged).IsAssignableFrom(typeof(TBlog))) + { + modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangedNotifications); + } + + modelBuilder.Entity().ToTable("Blog", "dbo"); + } + + public DbSet Blogs { get; set; } + } + + private interface IBlog + { + int Id { get; set; } + string Name { get; set; } + bool George { get; set; } + Guid TheGu { get; set; } + DateTime NotFigTime { get; set; } + + byte ToEat { get; set; } + + char CupOfChar { get; set; } + double OrNothing { get; set; } + + short Fuse { get; set; } + + long WayRound { get; set; } + + sbyte NotToEat { get; set; } + float Away { get; set; } + + ushort OrULong { get; set; } + uint OrUSkint { get; set; } + ulong OrUShort { get; set; } + byte[] AndChew { get; set; } + } + + private class ChangedChangingBlog : INotifyPropertyChanging, INotifyPropertyChanged, IBlog + { + private int _id; + private string _name; + private bool _george; + private Guid _theGu; + private DateTime _notFigTime; + + private byte _toEat; + + private char _cupOfChar; + private double _orNothing; + + private short _fuse; + + private long _wayRound; + + private sbyte _notToEat; + private float _away; + + private ushort _orULong; + private uint _orUSkint; + private ulong _orUShort; + private byte[] _andChew; + + public int Id + { + get => _id; + set + { + if (_id != value) + { + NotifyChanging(); + _id = value; + NotifyChanged(); + } + } + } + + public string Name + { + get => _name; + set + { + if (_name != value) + { + NotifyChanging(); + _name = value; + NotifyChanged(); + } + } + } + + public bool George + { + get => _george; + set + { + if (_george != value) + { + NotifyChanging(); + _george = value; + NotifyChanged(); + } + } + } + + public Guid TheGu + { + get => _theGu; + set + { + if (_theGu != value) + { + NotifyChanging(); + _theGu = value; + NotifyChanged(); + } + } + } + + public DateTime NotFigTime + { + get => _notFigTime; + set + { + if (_notFigTime != value) + { + NotifyChanging(); + _notFigTime = value; + NotifyChanged(); + } + } + } + + public byte ToEat + { + get => _toEat; + set + { + if (_toEat != value) + { + NotifyChanging(); + _toEat = value; + NotifyChanged(); + } + } + } + + public char CupOfChar + { + get => _cupOfChar; + set + { + if (_cupOfChar != value) + { + NotifyChanging(); + _cupOfChar = value; + NotifyChanged(); + } + } + } + + public double OrNothing + { + get => _orNothing; + set + { + if (_orNothing != value) + { + NotifyChanging(); + _orNothing = value; + NotifyChanged(); + } + } + } + + public short Fuse + { + get => _fuse; + set + { + if (_fuse != value) + { + NotifyChanging(); + _fuse = value; + NotifyChanged(); + } + } + } + + public long WayRound + { + get => _wayRound; + set + { + if (_wayRound != value) + { + NotifyChanging(); + _wayRound = value; + NotifyChanged(); + } + } + } + + public sbyte NotToEat + { + get => _notToEat; + set + { + if (_notToEat != value) + { + NotifyChanging(); + _notToEat = value; + NotifyChanged(); + } + } + } + + public float Away + { + get => _away; + set + { + if (_away != value) + { + NotifyChanging(); + _away = value; + NotifyChanged(); + } + } + } + + public ushort OrULong + { + get => _orULong; + set + { + if (_orULong != value) + { + NotifyChanging(); + _orULong = value; + NotifyChanged(); + } + } + } + + public uint OrUSkint + { + get => _orUSkint; + set + { + if (_orUSkint != value) + { + NotifyChanging(); + _orUSkint = value; + NotifyChanged(); + } + } + } + + public ulong OrUShort + { + get => _orUShort; + set + { + if (_orUShort != value) + { + NotifyChanging(); + _orUShort = value; + NotifyChanged(); + } + } + } + + public byte[] AndChew + { + get => _andChew; + set + { + if (_andChew != value) // Not a great way to compare byte arrays + { + NotifyChanging(); + _andChew = value; + NotifyChanged(); + } + } + } + + public event PropertyChangingEventHandler PropertyChanging; + public event PropertyChangedEventHandler PropertyChanged; + + private void NotifyChanged([CallerMemberName] string propertyName = "") + => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + + private void NotifyChanging([CallerMemberName] string propertyName = "") + => PropertyChanging?.Invoke(this, new PropertyChangingEventArgs(propertyName)); + } + + private class ChangedOnlyBlog : INotifyPropertyChanged, IBlog + { + private int _id; + private string _name; + private bool _george; + private Guid _theGu; + private DateTime _notFigTime; + + private byte _toEat; + + private char _cupOfChar; + private double _orNothing; + + private short _fuse; + + private long _wayRound; + + private sbyte _notToEat; + private float _away; + + private ushort _orULong; + private uint _orUSkint; + private ulong _orUShort; + private byte[] _andChew; + + public int Id + { + get => _id; + set + { + if (_id != value) + { + _id = value; + NotifyChanged(); + } + } + } + + public string Name + { + get => _name; + set + { + if (_name != value) + { + _name = value; + NotifyChanged(); + } + } + } + + public bool George + { + get => _george; + set + { + if (_george != value) + { + _george = value; + NotifyChanged(); + } + } + } + + public Guid TheGu + { + get => _theGu; + set + { + if (_theGu != value) + { + _theGu = value; + NotifyChanged(); + } + } + } + + public DateTime NotFigTime + { + get => _notFigTime; + set + { + if (_notFigTime != value) + { + _notFigTime = value; + NotifyChanged(); + } + } + } + + public byte ToEat + { + get => _toEat; + set + { + if (_toEat != value) + { + _toEat = value; + NotifyChanged(); + } + } + } + + public char CupOfChar + { + get => _cupOfChar; + set + { + if (_cupOfChar != value) + { + _cupOfChar = value; + NotifyChanged(); + } + } + } + + public double OrNothing + { + get => _orNothing; + set + { + if (_orNothing != value) + { + _orNothing = value; + NotifyChanged(); + } + } + } + + public short Fuse + { + get => _fuse; + set + { + if (_fuse != value) + { + _fuse = value; + NotifyChanged(); + } + } + } + + public long WayRound + { + get => _wayRound; + set + { + if (_wayRound != value) + { + _wayRound = value; + NotifyChanged(); + } + } + } + + public sbyte NotToEat + { + get => _notToEat; + set + { + if (_notToEat != value) + { + _notToEat = value; + NotifyChanged(); + } + } + } + + public float Away + { + get => _away; + set + { + if (_away != value) + { + _away = value; + NotifyChanged(); + } + } + } + + public ushort OrULong + { + get => _orULong; + set + { + if (_orULong != value) + { + _orULong = value; + NotifyChanged(); + } + } + } + + public uint OrUSkint + { + get => _orUSkint; + set + { + if (_orUSkint != value) + { + _orUSkint = value; + NotifyChanged(); + } + } + } + + public ulong OrUShort + { + get => _orUShort; + set + { + if (_orUShort != value) + { + _orUShort = value; + NotifyChanged(); + } + } + } + + public byte[] AndChew + { + get => _andChew; + set + { + if (_andChew != value) // Not a great way to compare byte arrays + { + _andChew = value; + NotifyChanged(); + } + } + } + + public event PropertyChangedEventHandler PropertyChanged; + + private void NotifyChanged([CallerMemberName] string propertyName = "") + => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/LibRedFixture.cs new file mode 100644 index 00000000..2bab6076 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedFixture.cs @@ -0,0 +1,29 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class LibRedFixture : ServiceProviderFixtureBase + { + public static IServiceProvider DefaultServiceProvider { get; } + = new ServiceCollection().AddEntityFrameworkLibRed().BuildServiceProvider(); + + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ServiceProvider.GetRequiredService(); + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base.AddOptions(builder).ConfigureWarnings( + w => + { + w.Log(JetEventId.ByteIdentityColumnWarning); + w.Log(JetEventId.DecimalTypeKeyWarning); + }); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedMigrationsSqlGeneratorTest.cs b/test/EFCore.LibRed.FunctionalTests/LibRedMigrationsSqlGeneratorTest.cs new file mode 100644 index 00000000..d441b3cf --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedMigrationsSqlGeneratorTest.cs @@ -0,0 +1,1018 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Internal; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Metadata.Internal; +using EntityFrameworkCore.Jet.Migrations.Operations; +using System; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Migrations.Operations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using Assert = Xunit.Assert; + +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + //Idempotent is ignored + public class LibRedMigrationsSqlGeneratorTest() : MigrationsSqlGeneratorTestBase(LibRedTestHelpers.Instance, + new ServiceCollection(), + LibRedTestHelpers.Instance.AddProviderOptions( + ((IRelationalDbContextOptionsBuilderInfrastructure) + new LibRedDbContextOptionsBuilder(new DbContextOptionsBuilder())) + .OptionsBuilder).Options) + { + [ConditionalFact] + public virtual void AddColumnOperation_identity_legacy() + { + Generate( + new AddColumnOperation + { + Table = "People", + Name = "Id", + ClrType = typeof(int), + ColumnType = "int", + DefaultValue = 0, + IsNullable = false, + [JetAnnotationNames.ValueGenerationStrategy] = + JetValueGenerationStrategy.IdentityColumn + }); + + AssertSql( + """ + ALTER TABLE `People` ADD `Id` counter NOT NULL; + + """); + } + + public override void AddColumnOperation_without_column_type() + { + base.AddColumnOperation_without_column_type(); + + AssertSql( + """ + ALTER TABLE `People` ADD `Alias` longchar NOT NULL; + + """); + } + + public override void AddColumnOperation_with_unicode_no_model() + { + base.AddColumnOperation_with_unicode_no_model(); + + AssertSql( + """ + ALTER TABLE `Person` ADD `Name` longchar NULL; + + """); + } + + public override void AddColumnOperation_with_fixed_length_no_model() + { + base.AddColumnOperation_with_fixed_length_no_model(); + + AssertSql( + """ + ALTER TABLE `Person` ADD `Name` char(100) NULL; + + """); + } + + public override void AddColumnOperation_with_maxLength_no_model() + { + base.AddColumnOperation_with_maxLength_no_model(); + + AssertSql( + """ + ALTER TABLE `Person` ADD `Name` varchar(30) NULL; + + """); + } + + public override void AddColumnOperation_with_maxLength_overridden() + { + base.AddColumnOperation_with_maxLength_overridden(); + + AssertSql( + """ + ALTER TABLE `Person` ADD `Name` varchar(32) NULL; + + """); + } + + public override void AddColumnOperation_with_precision_and_scale_overridden() + { + base.AddColumnOperation_with_precision_and_scale_overridden(); + + AssertSql( + """ + ALTER TABLE `Person` ADD `Pi` decimal(15,10) NOT NULL; + + """); + } + + public override void AddColumnOperation_with_precision_and_scale_no_model() + { + base.AddColumnOperation_with_precision_and_scale_no_model(); + + AssertSql( + """ + ALTER TABLE `Person` ADD `Pi` decimal(20,7) NOT NULL; + + """); + } + + public override void AddColumnOperation_with_unicode_overridden() + { + base.AddColumnOperation_with_unicode_overridden(); + + AssertSql( + """ + ALTER TABLE `Person` ADD `Name` longchar NULL; + + """); + } + + [ConditionalFact] + public virtual void AddColumnOperation_with_rowversion_overridden() + { + Generate( + modelBuilder => modelBuilder.Entity().Property("RowVersion"), + new AddColumnOperation + { + Table = "Person", + Name = "RowVersion", + ClrType = typeof(byte[]), + IsRowVersion = true, + IsNullable = true + }); + + AssertSql( + """ + ALTER TABLE `Person` ADD `RowVersion` varbinary(8) NULL; + + """); + } + + [ConditionalFact] + public virtual void AddColumnOperation_with_rowversion_no_model() + { + Generate( + new AddColumnOperation + { + Table = "Person", + Name = "RowVersion", + ClrType = typeof(byte[]), + IsRowVersion = true, + IsNullable = true + }); + + AssertSql( + """ + ALTER TABLE `Person` ADD `RowVersion` varbinary(8) NULL; + + """); + } + + public override void AlterColumnOperation_without_column_type() + { + base.AlterColumnOperation_without_column_type(); + + AssertSql( + """ + ALTER TABLE `People` ALTER COLUMN `LuckyNumber` DROP DEFAULT; + ALTER TABLE `People` ALTER COLUMN `LuckyNumber` integer NOT NULL; + + """); + } + + public override void AddForeignKeyOperation_without_principal_columns() + { + base.AddForeignKeyOperation_without_principal_columns(); + + AssertSql( + """ + ALTER TABLE `People` ADD FOREIGN KEY (`SpouseId`) REFERENCES `People`; + + """); + } + + [ConditionalFact] + public virtual void AlterColumnOperation_with_identity_legacy() + { + Generate( + new AlterColumnOperation + { + Table = "People", + Name = "Id", + ClrType = typeof(int), + [JetAnnotationNames.ValueGenerationStrategy] = + JetValueGenerationStrategy.IdentityColumn + }); + + AssertSql( + """ + ALTER TABLE `People` ALTER COLUMN `Id` DROP DEFAULT; + ALTER TABLE `People` ALTER COLUMN `Id` integer NOT NULL; + + """); + } + + [ConditionalFact] + public virtual void AlterColumnOperation_with_index_no_oldColumn() + { + Generate( + modelBuilder => modelBuilder + .HasAnnotation(CoreAnnotationNames.ProductVersion, "1.0.0-rtm") + .Entity( + x => + { + x.Property("Name").HasMaxLength(30); + x.HasIndex("Name"); + }), + new AlterColumnOperation + { + Table = "Person", + Name = "Name", + ClrType = typeof(string), + MaxLength = 30, + IsNullable = true, + OldColumn = new AddColumnOperation() + }); + + AssertSql( + """ + ALTER TABLE `Person` ALTER COLUMN `Name` DROP DEFAULT; + ALTER TABLE `Person` ALTER COLUMN `Name` varchar(30) NULL; + + """); + } + + [ConditionalFact] + public virtual void AlterColumnOperation_with_added_index() + { + Generate( + modelBuilder => modelBuilder + .HasAnnotation(CoreAnnotationNames.ProductVersion, "1.1.0") + .Entity( + x => + { + x.Property("Name").HasMaxLength(30); + x.HasIndex("Name"); + }), + new AlterColumnOperation + { + Table = "Person", + Name = "Name", + ClrType = typeof(string), + MaxLength = 30, + IsNullable = true, + OldColumn = new AddColumnOperation { ClrType = typeof(string), IsNullable = true } + }, + new CreateIndexOperation + { + Name = "IX_Person_Name", + Table = "Person", + Columns = ["Name"] + }); + + AssertSql( + """ + ALTER TABLE `Person` ALTER COLUMN `Name` DROP DEFAULT; + ALTER TABLE `Person` ALTER COLUMN `Name` varchar(30) NULL; + GO + + CREATE INDEX `IX_Person_Name` ON `Person` (`Name`); + + """); + } + + [ConditionalFact] + public virtual void AlterColumnOperation_with_added_index_no_oldType() + { + Generate( + modelBuilder => modelBuilder + .HasAnnotation(CoreAnnotationNames.ProductVersion, "2.1.0") + .Entity( + x => + { + x.Property("Name"); + x.HasIndex("Name"); + }), + new AlterColumnOperation + { + Table = "Person", + Name = "Name", + ClrType = typeof(string), + IsNullable = true, + OldColumn = new AddColumnOperation { ClrType = typeof(string), IsNullable = true } + }, + new CreateIndexOperation + { + Name = "IX_Person_Name", + Table = "Person", + Columns = ["Name"] + }); + + AssertSql( + """ + ALTER TABLE `Person` ALTER COLUMN `Name` DROP DEFAULT; + ALTER TABLE `Person` ALTER COLUMN `Name` varchar(255) NULL; + GO + + CREATE INDEX `IX_Person_Name` ON `Person` (`Name`); + + """); + } + + [ConditionalFact] + public virtual void AlterColumnOperation_identity_legacy() + { + Generate( + modelBuilder => modelBuilder.HasAnnotation(CoreAnnotationNames.ProductVersion, "1.1.0"), + new AlterColumnOperation + { + Table = "Person", + Name = "Id", + ClrType = typeof(long), + [JetAnnotationNames.ValueGenerationStrategy] = JetValueGenerationStrategy.IdentityColumn, + OldColumn = new AddColumnOperation + { + ClrType = typeof(int), + [JetAnnotationNames.ValueGenerationStrategy] = JetValueGenerationStrategy.IdentityColumn + } + }); + + AssertSql( + """ + ALTER TABLE `Person` ALTER COLUMN `Id` DROP DEFAULT; + ALTER TABLE `Person` ALTER COLUMN `Id` decimal(20,0) NOT NULL; + + """); + } + + [ConditionalFact] + public virtual void AlterColumnOperation_add_identity_legacy() + { + var ex = Assert.Throws( + () => Generate( + modelBuilder => modelBuilder.HasAnnotation(CoreAnnotationNames.ProductVersion, "1.1.0"), + new AlterColumnOperation + { + Table = "Person", + Name = "Id", + ClrType = typeof(int), + [JetAnnotationNames.ValueGenerationStrategy] = JetValueGenerationStrategy.IdentityColumn, + OldColumn = new AddColumnOperation { ClrType = typeof(int) } + })); + + Assert.Equal(JetStrings.AlterIdentityColumn, ex.Message); + } + + [ConditionalFact] + public virtual void AlterColumnOperation_remove_identity_legacy() + { + var ex = Assert.Throws( + () => Generate( + modelBuilder => modelBuilder.HasAnnotation(CoreAnnotationNames.ProductVersion, "1.1.0"), + new AlterColumnOperation + { + Table = "Person", + Name = "Id", + ClrType = typeof(int), + OldColumn = new AddColumnOperation + { + ClrType = typeof(int), + [JetAnnotationNames.ValueGenerationStrategy] = JetValueGenerationStrategy.IdentityColumn + } + })); + + Assert.Equal(JetStrings.AlterIdentityColumn, ex.Message); + } + + [ConditionalFact] + public virtual void CreateDatabaseOperation() + { + Generate( + new JetCreateDatabaseOperation { Name = "Northwind" }); + + AssertSql( + """ + CREATE DATABASE 'Northwind'; + + """); + } + + // [ConditionalFact] + // public virtual void CreateDatabaseOperation_with_filename() + // { + // Generate( + // new LibRedCreateDatabaseOperation { Name = "Northwind", FileName = "Narf.mdf" }); + // + // var expectedFile = Path.GetFullPath("Narf.mdf"); + // var expectedLog = Path.GetFullPath("Narf_log.ldf"); + // + // AssertSql( + // $@"CREATE DATABASE [Northwind] + // ON (NAME = 'Narf', FILENAME = '{expectedFile}') + // LOG ON (NAME = 'Narf_log', FILENAME = '{expectedLog}'); + // GO + // + // IF SERVERPROPERTY('EngineEdition') <> 5 + // BEGIN + // ALTER DATABASE [Northwind] SET READ_COMMITTED_SNAPSHOT ON; + // END; + // "); + // } + + // [ConditionalFact] + // public virtual void CreateDatabaseOperation_with_filename_and_datadirectory() + // { + // var baseDirectory = AppDomain.CurrentDomain.BaseDirectory; + // + // Generate( + // new LibRedCreateDatabaseOperation { Name = "Northwind", FileName = "|DataDirectory|Narf.mdf" }); + // + // var expectedFile = Path.Combine(baseDirectory, "Narf.mdf"); + // var expectedLog = Path.Combine(baseDirectory, "Narf_log.ldf"); + // + // AssertSql( + // $@"CREATE DATABASE [Northwind] + // ON (NAME = 'Narf', FILENAME = '{expectedFile}') + // LOG ON (NAME = 'Narf_log', FILENAME = '{expectedLog}'); + // GO + // + // IF SERVERPROPERTY('EngineEdition') <> 5 + // BEGIN + // ALTER DATABASE [Northwind] SET READ_COMMITTED_SNAPSHOT ON; + // END; + // "); + // } + + // [ConditionalFact] + // public virtual void CreateDatabaseOperation_with_filename_and_custom_datadirectory() + // { + // var dataDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data"); + // + // AppDomain.CurrentDomain.SetData("DataDirectory", dataDirectory); + // + // Generate( + // new LibRedCreateDatabaseOperation { Name = "Northwind", FileName = "|DataDirectory|Narf.mdf" }); + // + // AppDomain.CurrentDomain.SetData("DataDirectory", null); + // + // var expectedFile = Path.Combine(dataDirectory, "Narf.mdf"); + // var expectedLog = Path.Combine(dataDirectory, "Narf_log.ldf"); + // + // AssertSql( + // $@"CREATE DATABASE [Northwind] + // ON (NAME = 'Narf', FILENAME = '{expectedFile}') + // LOG ON (NAME = 'Narf_log', FILENAME = '{expectedLog}'); + // GO + // + // IF SERVERPROPERTY('EngineEdition') <> 5 + // BEGIN + // ALTER DATABASE [Northwind] SET READ_COMMITTED_SNAPSHOT ON; + // END; + // "); + // } + + [ConditionalFact] + public virtual void DropDatabaseOperation() + { + Generate( + new JetDropDatabaseOperation { Name = "Northwind" }); + + AssertSql( + """ + DROP DATABASE 'Northwind'; + + """); + } + + [ConditionalFact(Skip = "LibRed does not support sequences")] + public virtual void MoveSequenceOperation_legacy() + { + Generate( + new RenameSequenceOperation + { + Name = "EntityFrameworkHiLoSequence", + Schema = "dbo", + NewSchema = "my" + }); + + AssertSql( + """ + ALTER SCHEMA [my] TRANSFER [dbo].[EntityFrameworkHiLoSequence]; + + """); + } + + [ConditionalFact(Skip = "LibRed does not support schema")] + public virtual void MoveTableOperation_legacy() + { + Generate( + new RenameTableOperation + { + Name = "People", + Schema = "dbo", + NewSchema = "hr" + }); + + AssertSql( + """ + ALTER SCHEMA [hr] TRANSFER [dbo].`People`; + + """); + } + + [ConditionalFact] + public virtual void RenameIndexOperations_throws_when_no_table() + { + var migrationBuilder = new MigrationBuilder("LibRed"); + + migrationBuilder.RenameIndex( + name: "IX_OldIndex", + newName: "IX_NewIndex"); + + var ex = Assert.Throws( + () => Generate([.. migrationBuilder.Operations])); + + Assert.Equal(JetStrings.IndexTableRequired, ex.Message); + } + + [ConditionalFact(Skip = "LibRed does not support sequences")] + public virtual void RenameSequenceOperation_legacy() + { + Generate( + new RenameSequenceOperation + { + Name = "EntityFrameworkHiLoSequence", + Schema = "dbo", + NewName = "MySequence" + }); + + AssertSql( + """ + EXEC sp_rename N'[dbo].[EntityFrameworkHiLoSequence]', N'MySequence'; + + """); + } + + [ConditionalFact] + public override void RenameTableOperation_legacy() + { + base.RenameTableOperation_legacy(); + + AssertSql( + """ + ALTER TABLE `People` RENAME TO `Person`; + + """); + } + + public override void RenameTableOperation() + { + base.RenameTableOperation(); + + AssertSql( + """ + ALTER TABLE `People` RENAME TO `Person`; + + """); + } + + public override void SqlOperation() + { + base.SqlOperation(); + + AssertSql( + """ + -- I <3 DDL + + """); + } + + public override void InsertDataOperation_all_args_spatial() + { + base.InsertDataOperation_all_args_spatial(); + + AssertSql( + """ + IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE `Name` IN (N'Id', N'Full Name', N'Geometry') AND [object_id] = OBJECT_ID(N'[dbo].`People`')) + SET IDENTITY_INSERT [dbo].`People` ON; + INSERT INTO [dbo].`People` ([Id], [Full Name], [Geometry]) + VALUES (0, NULL, NULL), + (1, 'Daenerys Targaryen', NULL), + (2, 'John Snow', NULL), + (3, 'Arya Stark', NULL), + (4, 'Harry Strickland', NULL), + (5, 'The Imp', NULL), + (6, 'The Kingslayer', NULL), + (7, 'Aemon Targaryen', geography::Parse('GEOMETRYCOLLECTION (LINESTRING (1.1 2.2 NULL, 2.2 2.2 NULL, 2.2 1.1 NULL, 7.1 7.2 NULL), LINESTRING (7.1 7.2 NULL, 20.2 20.2 NULL, 20.2 1.1 NULL, 70.1 70.2 NULL), MULTIPOINT ((1.1 2.2 NULL), (2.2 2.2 NULL), (2.2 1.1 NULL)), POLYGON ((1.1 2.2 NULL, 2.2 2.2 NULL, 2.2 1.1 NULL, 1.1 2.2 NULL)), POLYGON ((10.1 20.2 NULL, 20.2 20.2 NULL, 20.2 10.1 NULL, 10.1 20.2 NULL)), POINT (1.1 2.2 3.3), MULTILINESTRING ((1.1 2.2 NULL, 2.2 2.2 NULL, 2.2 1.1 NULL, 7.1 7.2 NULL), (7.1 7.2 NULL, 20.2 20.2 NULL, 20.2 1.1 NULL, 70.1 70.2 NULL)), MULTIPOLYGON (((10.1 20.2 NULL, 20.2 20.2 NULL, 20.2 10.1 NULL, 10.1 20.2 NULL)), ((1.1 2.2 NULL, 2.2 2.2 NULL, 2.2 1.1 NULL, 1.1 2.2 NULL))))')); + IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE `Name` IN (N'Id', N'Full Name', N'Geometry') AND [object_id] = OBJECT_ID(N'[dbo].`People`')) + SET IDENTITY_INSERT [dbo].`People` OFF; + + """); + } + + // The test data we're using is geographic but is represented in NTS as a GeometryCollection + protected override string GetGeometryCollectionStoreType() + => "geography"; + + public override void InsertDataOperation_required_args() + { + base.InsertDataOperation_required_args(); + + AssertSql( + """ + INSERT INTO `People` (`First Name`) + VALUES ('John'); + + """); + } + + public override void InsertDataOperation_required_args_composite() + { + base.InsertDataOperation_required_args_composite(); + + AssertSql( + """ + INSERT INTO `People` (`First Name`, `Last Name`) + VALUES ('John', 'Snow'); + + """); + } + + public override void InsertDataOperation_required_args_multiple_rows() + { + base.InsertDataOperation_required_args_multiple_rows(); + + AssertSql( + """ + INSERT INTO `People` (`First Name`) + VALUES ('John'); + INSERT INTO `People` (`First Name`) + VALUES ('Daenerys'); + + """); + } + + public override void InsertDataOperation_throws_for_unsupported_column_types() + { + base.InsertDataOperation_throws_for_unsupported_column_types(); + } + + public override void DeleteDataOperation_all_args() + { + base.DeleteDataOperation_all_args(); + + AssertSql( + """ + DELETE FROM `People` + WHERE `First Name` = 'Hodor'; + SELECT @@ROWCOUNT; + + DELETE FROM `People` + WHERE `First Name` = 'Daenerys'; + SELECT @@ROWCOUNT; + + DELETE FROM `People` + WHERE `First Name` = 'John'; + SELECT @@ROWCOUNT; + + DELETE FROM `People` + WHERE `First Name` = 'Arya'; + SELECT @@ROWCOUNT; + + DELETE FROM `People` + WHERE `First Name` = 'Harry'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void DeleteDataOperation_all_args_composite() + { + base.DeleteDataOperation_all_args_composite(); + + AssertSql( + """ + DELETE FROM `People` + WHERE `First Name` = 'Hodor' AND `Last Name` IS NULL; + SELECT @@ROWCOUNT; + + DELETE FROM `People` + WHERE `First Name` = 'Daenerys' AND `Last Name` = 'Targaryen'; + SELECT @@ROWCOUNT; + + DELETE FROM `People` + WHERE `First Name` = 'John' AND `Last Name` = 'Snow'; + SELECT @@ROWCOUNT; + + DELETE FROM `People` + WHERE `First Name` = 'Arya' AND `Last Name` = 'Stark'; + SELECT @@ROWCOUNT; + + DELETE FROM `People` + WHERE `First Name` = 'Harry' AND `Last Name` = 'Strickland'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void DeleteDataOperation_required_args() + { + base.DeleteDataOperation_required_args(); + + AssertSql( + """ + DELETE FROM `People` + WHERE `Last Name` = 'Snow'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void DeleteDataOperation_required_args_composite() + { + base.DeleteDataOperation_required_args_composite(); + + AssertSql( + """ + DELETE FROM `People` + WHERE `First Name` = 'John' AND `Last Name` = 'Snow'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void UpdateDataOperation_all_args() + { + base.UpdateDataOperation_all_args(); + + AssertSql( + """ + UPDATE `People` SET `Birthplace` = 'Winterfell', `House Allegiance` = 'Stark', `Culture` = 'Northmen' + WHERE `First Name` = 'Hodor'; + SELECT @@ROWCOUNT; + + UPDATE `People` SET `Birthplace` = 'Dragonstone', `House Allegiance` = 'Targaryen', `Culture` = 'Valyrian' + WHERE `First Name` = 'Daenerys'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void UpdateDataOperation_all_args_composite() + { + base.UpdateDataOperation_all_args_composite(); + + AssertSql( + """ + UPDATE `People` SET `House Allegiance` = 'Stark' + WHERE `First Name` = 'Hodor' AND `Last Name` IS NULL; + SELECT @@ROWCOUNT; + + UPDATE `People` SET `House Allegiance` = 'Targaryen' + WHERE `First Name` = 'Daenerys' AND `Last Name` = 'Targaryen'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void UpdateDataOperation_all_args_composite_multi() + { + base.UpdateDataOperation_all_args_composite_multi(); + + AssertSql( + """ + UPDATE `People` SET `Birthplace` = 'Winterfell', `House Allegiance` = 'Stark', `Culture` = 'Northmen' + WHERE `First Name` = 'Hodor' AND `Last Name` IS NULL; + SELECT @@ROWCOUNT; + + UPDATE `People` SET `Birthplace` = 'Dragonstone', `House Allegiance` = 'Targaryen', `Culture` = 'Valyrian' + WHERE `First Name` = 'Daenerys' AND `Last Name` = 'Targaryen'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void UpdateDataOperation_all_args_multi() + { + base.UpdateDataOperation_all_args_multi(); + + AssertSql( + """ + UPDATE `People` SET `Birthplace` = 'Dragonstone', `House Allegiance` = 'Targaryen', `Culture` = 'Valyrian' + WHERE `First Name` = 'Daenerys'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void UpdateDataOperation_required_args() + { + base.UpdateDataOperation_required_args(); + + AssertSql( + """ + UPDATE `People` SET `House Allegiance` = 'Targaryen' + WHERE `First Name` = 'Daenerys'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void UpdateDataOperation_required_args_composite() + { + base.UpdateDataOperation_required_args_composite(); + + AssertSql( + """ + UPDATE `People` SET `House Allegiance` = 'Targaryen' + WHERE `First Name` = 'Daenerys' AND `Last Name` = 'Targaryen'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void UpdateDataOperation_required_args_composite_multi() + { + base.UpdateDataOperation_required_args_composite_multi(); + + AssertSql( + """ + UPDATE `People` SET `Birthplace` = 'Dragonstone', `House Allegiance` = 'Targaryen', `Culture` = 'Valyrian' + WHERE `First Name` = 'Daenerys' AND `Last Name` = 'Targaryen'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void UpdateDataOperation_required_args_multi() + { + base.UpdateDataOperation_required_args_multi(); + + AssertSql( + """ + UPDATE `People` SET `Birthplace` = 'Dragonstone', `House Allegiance` = 'Targaryen', `Culture` = 'Valyrian' + WHERE `First Name` = 'Daenerys'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void UpdateDataOperation_required_args_multiple_rows() + { + base.UpdateDataOperation_required_args_multiple_rows(); + + AssertSql( + """ + UPDATE `People` SET `House Allegiance` = 'Stark' + WHERE `First Name` = 'Hodor'; + SELECT @@ROWCOUNT; + + UPDATE `People` SET `House Allegiance` = 'Targaryen' + WHERE `First Name` = 'Daenerys'; + SELECT @@ROWCOUNT; + + + """); + } + + public override void DefaultValue_with_line_breaks(bool isUnicode) + { + base.DefaultValue_with_line_breaks(isUnicode); + + var expectedSql = $""" + CREATE TABLE `TestLineBreaks` ( + `TestDefaultValue` longchar NOT NULL DEFAULT '' & CHR(13) & CHR(10) & 'Various Line' & CHR(13) & 'Breaks' & CHR(10) & '' + ); + + """; + AssertSql(expectedSql); + } + + public override void DefaultValue_with_line_breaks_2(bool isUnicode) + { + base.DefaultValue_with_line_breaks_2(isUnicode); + + var unicodePrefixForType = string.Empty; + var expectedSql = $""" + CREATE TABLE `TestLineBreaks` ( + `TestDefaultValue` longchar NOT NULL DEFAULT '0' & CHR(13) & CHR(10) & '1' & CHR(13) & CHR(10) & '2' & CHR(13) & CHR(10) & '3' & CHR(13) & CHR(10) & '4' & CHR(13) & CHR(10) & '5' & CHR(13) & CHR(10) & '6' & CHR(13) & CHR(10) & '7' & CHR(13) & CHR(10) & '8' & CHR(13) & CHR(10) & '9' & CHR(13) & CHR(10) & '10' & CHR(13) & CHR(10) & '11' & CHR(13) & CHR(10) & '12' & CHR(13) & CHR(10) & '13' & CHR(13) & CHR(10) & '14' & CHR(13) & CHR(10) & '15' & CHR(13) & CHR(10) & '16' & CHR(13) & CHR(10) & '17' & CHR(13) & CHR(10) & '18' & CHR(13) & CHR(10) & '19' & CHR(13) & CHR(10) & '20' & CHR(13) & CHR(10) & '21' & CHR(13) & CHR(10) & '22' & CHR(13) & CHR(10) & '23' & CHR(13) & CHR(10) & '24' & CHR(13) & CHR(10) & '25' & CHR(13) & CHR(10) & '26' & CHR(13) & CHR(10) & '27' & CHR(13) & CHR(10) & '28' & CHR(13) & CHR(10) & '29' & CHR(13) & CHR(10) & '30' & CHR(13) & CHR(10) & '31' & CHR(13) & CHR(10) & '32' & CHR(13) & CHR(10) & '33' & CHR(13) & CHR(10) & '34' & CHR(13) & CHR(10) & '35' & CHR(13) & CHR(10) & '36' & CHR(13) & CHR(10) & '37' & CHR(13) & CHR(10) & '38' & CHR(13) & CHR(10) & '39' & CHR(13) & CHR(10) & '40' & CHR(13) & CHR(10) & '41' & CHR(13) & CHR(10) & '42' & CHR(13) & CHR(10) & '43' & CHR(13) & CHR(10) & '44' & CHR(13) & CHR(10) & '45' & CHR(13) & CHR(10) & '46' & CHR(13) & CHR(10) & '47' & CHR(13) & CHR(10) & '48' & CHR(13) & CHR(10) & '49' & CHR(13) & CHR(10) & '50' & CHR(13) & CHR(10) & '51' & CHR(13) & CHR(10) & '52' & CHR(13) & CHR(10) & '53' & CHR(13) & CHR(10) & '54' & CHR(13) & CHR(10) & '55' & CHR(13) & CHR(10) & '56' & CHR(13) & CHR(10) & '57' & CHR(13) & CHR(10) & '58' & CHR(13) & CHR(10) & '59' & CHR(13) & CHR(10) & '60' & CHR(13) & CHR(10) & '61' & CHR(13) & CHR(10) & '62' & CHR(13) & CHR(10) & '63' & CHR(13) & CHR(10) & '64' & CHR(13) & CHR(10) & '65' & CHR(13) & CHR(10) & '66' & CHR(13) & CHR(10) & '67' & CHR(13) & CHR(10) & '68' & CHR(13) & CHR(10) & '69' & CHR(13) & CHR(10) & '70' & CHR(13) & CHR(10) & '71' & CHR(13) & CHR(10) & '72' & CHR(13) & CHR(10) & '73' & CHR(13) & CHR(10) & '74' & CHR(13) & CHR(10) & '75' & CHR(13) & CHR(10) & '76' & CHR(13) & CHR(10) & '77' & CHR(13) & CHR(10) & '78' & CHR(13) & CHR(10) & '79' & CHR(13) & CHR(10) & '80' & CHR(13) & CHR(10) & '81' & CHR(13) & CHR(10) & '82' & CHR(13) & CHR(10) & '83' & CHR(13) & CHR(10) & '84' & CHR(13) & CHR(10) & '85' & CHR(13) & CHR(10) & '86' & CHR(13) & CHR(10) & '87' & CHR(13) & CHR(10) & '88' & CHR(13) & CHR(10) & '89' & CHR(13) & CHR(10) & '90' & CHR(13) & CHR(10) & '91' & CHR(13) & CHR(10) & '92' & CHR(13) & CHR(10) & '93' & CHR(13) & CHR(10) & '94' & CHR(13) & CHR(10) & '95' & CHR(13) & CHR(10) & '96' & CHR(13) & CHR(10) & '97' & CHR(13) & CHR(10) & '98' & CHR(13) & CHR(10) & '99' & CHR(13) & CHR(10) & '100' & CHR(13) & CHR(10) & '101' & CHR(13) & CHR(10) & '102' & CHR(13) & CHR(10) & '103' & CHR(13) & CHR(10) & '104' & CHR(13) & CHR(10) & '105' & CHR(13) & CHR(10) & '106' & CHR(13) & CHR(10) & '107' & CHR(13) & CHR(10) & '108' & CHR(13) & CHR(10) & '109' & CHR(13) & CHR(10) & '110' & CHR(13) & CHR(10) & '111' & CHR(13) & CHR(10) & '112' & CHR(13) & CHR(10) & '113' & CHR(13) & CHR(10) & '114' & CHR(13) & CHR(10) & '115' & CHR(13) & CHR(10) & '116' & CHR(13) & CHR(10) & '117' & CHR(13) & CHR(10) & '118' & CHR(13) & CHR(10) & '119' & CHR(13) & CHR(10) & '120' & CHR(13) & CHR(10) & '121' & CHR(13) & CHR(10) & '122' & CHR(13) & CHR(10) & '123' & CHR(13) & CHR(10) & '124' & CHR(13) & CHR(10) & '125' & CHR(13) & CHR(10) & '126' & CHR(13) & CHR(10) & '127' & CHR(13) & CHR(10) & '128' & CHR(13) & CHR(10) & '129' & CHR(13) & CHR(10) & '130' & CHR(13) & CHR(10) & '131' & CHR(13) & CHR(10) & '132' & CHR(13) & CHR(10) & '133' & CHR(13) & CHR(10) & '134' & CHR(13) & CHR(10) & '135' & CHR(13) & CHR(10) & '136' & CHR(13) & CHR(10) & '137' & CHR(13) & CHR(10) & '138' & CHR(13) & CHR(10) & '139' & CHR(13) & CHR(10) & '140' & CHR(13) & CHR(10) & '141' & CHR(13) & CHR(10) & '142' & CHR(13) & CHR(10) & '143' & CHR(13) & CHR(10) & '144' & CHR(13) & CHR(10) & '145' & CHR(13) & CHR(10) & '146' & CHR(13) & CHR(10) & '147' & CHR(13) & CHR(10) & '148' & CHR(13) & CHR(10) & '149' & CHR(13) & CHR(10) & '150' & CHR(13) & CHR(10) & '151' & CHR(13) & CHR(10) & '152' & CHR(13) & CHR(10) & '153' & CHR(13) & CHR(10) & '154' & CHR(13) & CHR(10) & '155' & CHR(13) & CHR(10) & '156' & CHR(13) & CHR(10) & '157' & CHR(13) & CHR(10) & '158' & CHR(13) & CHR(10) & '159' & CHR(13) & CHR(10) & '160' & CHR(13) & CHR(10) & '161' & CHR(13) & CHR(10) & '162' & CHR(13) & CHR(10) & '163' & CHR(13) & CHR(10) & '164' & CHR(13) & CHR(10) & '165' & CHR(13) & CHR(10) & '166' & CHR(13) & CHR(10) & '167' & CHR(13) & CHR(10) & '168' & CHR(13) & CHR(10) & '169' & CHR(13) & CHR(10) & '170' & CHR(13) & CHR(10) & '171' & CHR(13) & CHR(10) & '172' & CHR(13) & CHR(10) & '173' & CHR(13) & CHR(10) & '174' & CHR(13) & CHR(10) & '175' & CHR(13) & CHR(10) & '176' & CHR(13) & CHR(10) & '177' & CHR(13) & CHR(10) & '178' & CHR(13) & CHR(10) & '179' & CHR(13) & CHR(10) & '180' & CHR(13) & CHR(10) & '181' & CHR(13) & CHR(10) & '182' & CHR(13) & CHR(10) & '183' & CHR(13) & CHR(10) & '184' & CHR(13) & CHR(10) & '185' & CHR(13) & CHR(10) & '186' & CHR(13) & CHR(10) & '187' & CHR(13) & CHR(10) & '188' & CHR(13) & CHR(10) & '189' & CHR(13) & CHR(10) & '190' & CHR(13) & CHR(10) & '191' & CHR(13) & CHR(10) & '192' & CHR(13) & CHR(10) & '193' & CHR(13) & CHR(10) & '194' & CHR(13) & CHR(10) & '195' & CHR(13) & CHR(10) & '196' & CHR(13) & CHR(10) & '197' & CHR(13) & CHR(10) & '198' & CHR(13) & CHR(10) & '199' & CHR(13) & CHR(10) & '200' & CHR(13) & CHR(10) & '201' & CHR(13) & CHR(10) & '202' & CHR(13) & CHR(10) & '203' & CHR(13) & CHR(10) & '204' & CHR(13) & CHR(10) & '205' & CHR(13) & CHR(10) & '206' & CHR(13) & CHR(10) & '207' & CHR(13) & CHR(10) & '208' & CHR(13) & CHR(10) & '209' & CHR(13) & CHR(10) & '210' & CHR(13) & CHR(10) & '211' & CHR(13) & CHR(10) & '212' & CHR(13) & CHR(10) & '213' & CHR(13) & CHR(10) & '214' & CHR(13) & CHR(10) & '215' & CHR(13) & CHR(10) & '216' & CHR(13) & CHR(10) & '217' & CHR(13) & CHR(10) & '218' & CHR(13) & CHR(10) & '219' & CHR(13) & CHR(10) & '220' & CHR(13) & CHR(10) & '221' & CHR(13) & CHR(10) & '222' & CHR(13) & CHR(10) & '223' & CHR(13) & CHR(10) & '224' & CHR(13) & CHR(10) & '225' & CHR(13) & CHR(10) & '226' & CHR(13) & CHR(10) & '227' & CHR(13) & CHR(10) & '228' & CHR(13) & CHR(10) & '229' & CHR(13) & CHR(10) & '230' & CHR(13) & CHR(10) & '231' & CHR(13) & CHR(10) & '232' & CHR(13) & CHR(10) & '233' & CHR(13) & CHR(10) & '234' & CHR(13) & CHR(10) & '235' & CHR(13) & CHR(10) & '236' & CHR(13) & CHR(10) & '237' & CHR(13) & CHR(10) & '238' & CHR(13) & CHR(10) & '239' & CHR(13) & CHR(10) & '240' & CHR(13) & CHR(10) & '241' & CHR(13) & CHR(10) & '242' & CHR(13) & CHR(10) & '243' & CHR(13) & CHR(10) & '244' & CHR(13) & CHR(10) & '245' & CHR(13) & CHR(10) & '246' & CHR(13) & CHR(10) & '247' & CHR(13) & CHR(10) & '248' & CHR(13) & CHR(10) & '249' & CHR(13) & CHR(10) & '250' & CHR(13) & CHR(10) & '251' & CHR(13) & CHR(10) & '252' & CHR(13) & CHR(10) & '253' & CHR(13) & CHR(10) & '254' & CHR(13) & CHR(10) & '255' & CHR(13) & CHR(10) & '256' & CHR(13) & CHR(10) & '257' & CHR(13) & CHR(10) & '258' & CHR(13) & CHR(10) & '259' & CHR(13) & CHR(10) & '260' & CHR(13) & CHR(10) & '261' & CHR(13) & CHR(10) & '262' & CHR(13) & CHR(10) & '263' & CHR(13) & CHR(10) & '264' & CHR(13) & CHR(10) & '265' & CHR(13) & CHR(10) & '266' & CHR(13) & CHR(10) & '267' & CHR(13) & CHR(10) & '268' & CHR(13) & CHR(10) & '269' & CHR(13) & CHR(10) & '270' & CHR(13) & CHR(10) & '271' & CHR(13) & CHR(10) & '272' & CHR(13) & CHR(10) & '273' & CHR(13) & CHR(10) & '274' & CHR(13) & CHR(10) & '275' & CHR(13) & CHR(10) & '276' & CHR(13) & CHR(10) & '277' & CHR(13) & CHR(10) & '278' & CHR(13) & CHR(10) & '279' & CHR(13) & CHR(10) & '280' & CHR(13) & CHR(10) & '281' & CHR(13) & CHR(10) & '282' & CHR(13) & CHR(10) & '283' & CHR(13) & CHR(10) & '284' & CHR(13) & CHR(10) & '285' & CHR(13) & CHR(10) & '286' & CHR(13) & CHR(10) & '287' & CHR(13) & CHR(10) & '288' & CHR(13) & CHR(10) & '289' & CHR(13) & CHR(10) & '290' & CHR(13) & CHR(10) & '291' & CHR(13) & CHR(10) & '292' & CHR(13) & CHR(10) & '293' & CHR(13) & CHR(10) & '294' & CHR(13) & CHR(10) & '295' & CHR(13) & CHR(10) & '296' & CHR(13) & CHR(10) & '297' & CHR(13) & CHR(10) & '298' & CHR(13) & CHR(10) & '299' & CHR(13) & CHR(10) & '' + ); + + """; + AssertSql(expectedSql); + } + + [ConditionalFact] + public virtual void AddColumn_generates_exec_when_computed_and_idempotent() + { + Generate( + modelBuilder => { }, + migrationBuilder => migrationBuilder.AddColumn( + name: "Column2", + table: "Table1", + computedColumnSql: "[Column1] + 1"), + MigrationsSqlGenerationOptions.Idempotent); + + AssertSql( + """ + EXEC(N'ALTER TABLE [Table1] ADD [Column2] AS [Column1] + 1'); + + """); + } + + [ConditionalFact] + public virtual void AddCheckConstraint_generates_exec_when_idempotent() + { + Generate( + modelBuilder => { }, + migrationBuilder => migrationBuilder.AddCheckConstraint( + name: "CK_Table1", + table: "Table1", + "[Column1] BETWEEN 0 AND 100"), + MigrationsSqlGenerationOptions.Idempotent); + + AssertSql( + """ + ALTER TABLE `Table1` ADD CONSTRAINT `CK_Table1` CHECK ([Column1] BETWEEN 0 AND 100); + + """); + } + + [ConditionalFact] + public virtual void CreateIndex_generates_exec_when_filter_and_idempotent() + { + Generate( + modelBuilder => { }, + migrationBuilder => migrationBuilder.CreateIndex( + name: "IX_Table1_Column1", + table: "Table1", + column: "Column1", + filter: "[Column1] IS NOT NULL"), + MigrationsSqlGenerationOptions.Idempotent); + + AssertSql( + """ + CREATE INDEX `IX_Table1_Column1` ON `Table1` (`Column1`) WITH [Column1] IS NOT NULL; + + """); + } + [ConditionalTheory(Skip = "No sequences")] + public override void Sequence_restart_operation(long? startsAt) + { + base.Sequence_restart_operation(startsAt); + + var expectedSql = startsAt.HasValue + ? @$"ALTER SEQUENCE [dbo].[TestRestartSequenceOperation] RESTART WITH {startsAt};" + : @"ALTER SEQUENCE [dbo].[TestRestartSequenceOperation] RESTART;"; + AssertSql(expectedSql); + } + + [ConditionalFact] + public virtual void AddColumnOperation_datetime_with_defaultValue_sql() + { + Generate( + new AddColumnOperation + { + Table = "People", + Schema = null, + Name = "Birthday", + ClrType = typeof(DateTime), + ColumnType = "datetime", + IsNullable = false, + DefaultValueSql = "#2019-01-01#" + }); + + AssertSql( + $""" + ALTER TABLE `People` ADD `Birthday` datetime NOT NULL DEFAULT #2019-01-01#; + + """); + } + + /*.AddEntityFrameworkLibRedNetTopologySuite()*/ + /*.UseNetTopologySuite()*/ + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedServiceCollectionExtensionsTest.cs b/test/EFCore.LibRed.FunctionalTests/LibRedServiceCollectionExtensionsTest.cs new file mode 100644 index 00000000..4fc91930 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedServiceCollectionExtensionsTest.cs @@ -0,0 +1,11 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class LibRedServiceCollectionExtensionsTest() + : RelationalServiceCollectionExtensionsTestBase(LibRedTestHelpers.Instance); +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedValueGenerationScenariosTest.cs b/test/EFCore.LibRed.FunctionalTests/LibRedValueGenerationScenariosTest.cs new file mode 100644 index 00000000..49e3464b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedValueGenerationScenariosTest.cs @@ -0,0 +1,47 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class LibRedValueGenerationScenariosTest : LibRedValueGenerationScenariosTestBase + { + protected override string DatabaseName + => "LibRedValueGenerationScenariosTest"; + + protected override Guid GuidSentinel + => new(); + + protected override int IntSentinel + => 0; + + protected override uint UIntSentinel + => 0; + + protected override IntKey IntKeySentinel + => IntKey.Zero; + + /*protected override ULongKey ULongKeySentinel + => ULongKey.Zero;*/ + + protected override int? NullableIntSentinel + => null; + + protected override string StringSentinel + => null; + + protected override DateTime DateTimeSentinel + => new(); + + protected override NeedsConverter NeedsConverterSentinel + => new(0); + + /*protected override GeometryCollection GeometryCollectionSentinel + => null;*/ + + protected override byte[] TimestampSentinel + => null; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LibRedValueGenerationScenariosTestBase.cs b/test/EFCore.LibRed.FunctionalTests/LibRedValueGenerationScenariosTestBase.cs new file mode 100644 index 00000000..1f5d9be9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LibRedValueGenerationScenariosTestBase.cs @@ -0,0 +1,1559 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.ValueGeneration.Internal; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable + +public abstract class LibRedValueGenerationScenariosTestBase +{ + //protected static readonly GeometryFactory GeometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + + protected abstract string DatabaseName { get; } + + protected abstract Guid GuidSentinel { get; } + protected abstract int IntSentinel { get; } + protected abstract uint UIntSentinel { get; } + protected abstract IntKey IntKeySentinel { get; } + //protected abstract ULongKey ULongKeySentinel { get; } + protected abstract int? NullableIntSentinel { get; } + protected abstract string StringSentinel { get; } + protected abstract DateTime DateTimeSentinel { get; } + protected abstract NeedsConverter NeedsConverterSentinel { get; } + //protected abstract GeometryCollection GeometryCollectionSentinel { get; } + protected abstract byte[] TimestampSentinel { get; } + + // Positive cases + + [ConditionalFact] + public async Task Insert_with_Identity_column() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextIdentity(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange(CreateBlog("One Unicorn"), CreateBlog("Two Unicorns")); + + context.SaveChanges(); + } + + await using (var context = new BlogContextIdentity(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(1, blogs[0].Id); + Assert.Equal(2, blogs[1].Id); + } + } + + public class BlogContextIdentity(string databaseName, Action modelBuilder) : ContextBase(databaseName, modelBuilder); + + [ConditionalFact] + public async Task Insert_with_default_value_from_sequence() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextDefaultValue(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange(CreateBlog("One Unicorn"), CreateBlog("Two Unicorns")); + + context.SaveChanges(); + } + + await using (var context = new BlogContextDefaultValue(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(0, blogs[0].Id); + Assert.Equal(1, blogs[1].Id); + } + + await using (var context = new BlogContextDefaultValueNoMigrations(testStore.Name, OnModelCreating)) + { + context.AddRange(CreateBlog("One Unicorn"), CreateBlog("Two Unicorns")); + + context.SaveChanges(); + } + + await using (var context = new BlogContextDefaultValueNoMigrations(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(0, blogs[0].Id); + Assert.Equal(1, blogs[1].Id); + Assert.Equal(2, blogs[2].Id); + Assert.Equal(3, blogs[3].Id); + } + } + + public class BlogContextDefaultValue(string databaseName, Action modelBuilder) : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .HasSequence("MySequence") + .StartsAt(0); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValueSql("next value for MySequence"); + } + } + + public class BlogContextDefaultValueNoMigrations(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValue(); + } + } + + [ConditionalFact] + public async Task Insert_with_default_string_value_from_sequence() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextStringDefaultValue(testStore.Name, OnModelCreating, StringSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithStringKey { Id = StringSentinel, Name = "One Unicorn" }, + new BlogWithStringKey { Id = StringSentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + await using (var context = new BlogContextStringDefaultValue(testStore.Name, OnModelCreating, StringSentinel)) + { + var blogs = context.StringyBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal("i77", blogs[0].Id); + Assert.Equal("i78", blogs[1].Id); + } + } + + public class BlogContextStringDefaultValue(string databaseName, Action modelBuilder, string stringSentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly string _stringSentinel = stringSentinel; + + public DbSet StringyBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .HasSequence("MyStringSequence") + .StartsAt(77); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValueSql("'i' + CAST((NEXT VALUE FOR MyStringSequence) AS VARCHAR(20))") + .HasSentinel(_stringSentinel); + } + } + + public class BlogWithStringKey + { + public string Id { get; set; } + public string Name { get; set; } + } + + [ConditionalFact] + public async Task Insert_with_key_default_value_from_sequence() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextKeyColumnWithDefaultValue(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange(CreateBlog("One Unicorn"), CreateBlog("Two Unicorns")); + + context.SaveChanges(); + } + + await using (var context = new BlogContextKeyColumnWithDefaultValue(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(77, blogs[0].Id); + Assert.Equal(78, blogs[1].Id); + } + } + + public class BlogContextKeyColumnWithDefaultValue(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .HasSequence("MySequence") + .StartsAt(77); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValueSql("next value for MySequence") + .Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); + } + } + + [ConditionalFact] + public async Task Insert_uint_to_Identity_column_using_value_converter() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextUIntToIdentityUsingValueConverter(testStore.Name, OnModelCreating, UIntSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithUIntKey { Id = UIntSentinel, Name = "One Unicorn" }, + new BlogWithUIntKey { Id = UIntSentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + await using (var context = new BlogContextUIntToIdentityUsingValueConverter(testStore.Name, OnModelCreating, UIntSentinel)) + { + var blogs = context.UnsignedBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal((uint)1, blogs[0].Id); + Assert.Equal((uint)2, blogs[1].Id); + } + } + + public class BlogContextUIntToIdentityUsingValueConverter(string databaseName, Action modelBuilder, uint uintSentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly uint _uintSentinel = uintSentinel; + + public DbSet UnsignedBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasConversion() + .HasSentinel(_uintSentinel); + } + } + + public class BlogWithUIntKey + { + public uint Id { get; set; } + public string Name { get; set; } + } + + [ConditionalFact] + public async Task Insert_int_enum_to_Identity_column() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextIntEnumToIdentity(testStore.Name, OnModelCreating, IntKeySentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithIntEnumKey { Id = IntKeySentinel, Name = "One Unicorn" }, + new BlogWithIntEnumKey { Id = IntKeySentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + using (var context = new BlogContextIntEnumToIdentity(testStore.Name, OnModelCreating, IntKeySentinel)) + { + var blogs = context.EnumBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(1, (int)blogs[0].Id); + Assert.Equal(2, (int)blogs[1].Id); + } + } + + public class BlogContextIntEnumToIdentity(string databaseName, Action modelBuilder, IntKey sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly IntKey _sentinel = sentinel; + + public DbSet EnumBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedOnAdd() + .HasSentinel(_sentinel); + } + } + + public class BlogWithIntEnumKey + { + public IntKey Id { get; set; } + public string Name { get; set; } + } + + public enum IntKey + { + Zero, + One, + SixSixSeven, + } + + //Does not support ulong as identity + /*[ConditionalFact] + public async Task Insert_ulong_enum_to_Identity_column() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextULongEnumToIdentity(testStore.Name, OnModelCreating, ULongKeySentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithULongEnumKey { Id = ULongKeySentinel, Name = "One Unicorn" }, + new BlogWithULongEnumKey { Id = ULongKeySentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + await using (var context = new BlogContextULongEnumToIdentity(testStore.Name, OnModelCreating, ULongKeySentinel)) + { + var blogs = context.EnumBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(1, (int)blogs[0].Id); + Assert.Equal(2, (int)blogs[1].Id); + } + } + + public class BlogContextULongEnumToIdentity(string databaseName, Action modelBuilder, ULongKey sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly ULongKey _sentinel = sentinel; + + public DbSet EnumBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedOnAdd() + .HasSentinel(_sentinel); + } + } + + public class BlogWithULongEnumKey + { + public ULongKey Id { get; set; } + public string Name { get; set; } + } + + public enum ULongKey : ulong + { + Zero, + Sentinel + }*/ + + [ConditionalFact] + public async Task Insert_string_to_Identity_column_using_value_converter() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextStringToIdentityUsingValueConverter(testStore.Name, OnModelCreating, StringSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithStringKey { Id = StringSentinel, Name = "One Unicorn" }, + new BlogWithStringKey { Id = StringSentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + await using (var context = new BlogContextStringToIdentityUsingValueConverter(testStore.Name, OnModelCreating, StringSentinel)) + { + var blogs = context.StringyBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal("1", blogs[0].Id); + Assert.Equal("2", blogs[1].Id); + } + } + + public class BlogContextStringToIdentityUsingValueConverter(string databaseName, Action modelBuilder, string sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly string _sentinel = sentinel; + + public DbSet StringyBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + Guid guid; + modelBuilder + .Entity() + .Property(e => e.Id) + .HasValueGenerator() + .HasConversion( + v => Guid.TryParse(v, out guid) + ? default + : int.Parse(v), + v => v.ToString()) + .ValueGeneratedOnAdd() + .HasSentinel(_sentinel); + } + } + + [ConditionalFact] + public async Task Insert_with_explicit_non_default_keys() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextNoKeyGeneration(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = 66, Name = "One Unicorn" }, new Blog { Id = 67, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + await using (var context = new BlogContextNoKeyGeneration(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(66, blogs[0].Id); + Assert.Equal(67, blogs[1].Id); + } + } + + public class BlogContextNoKeyGeneration(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedNever(); + } + } + + [ConditionalFact] + public async Task Insert_with_explicit_with_default_keys() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextNoKeyGenerationNullableKey(testStore.Name, OnModelCreating, NullableIntSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new NullableKeyBlog { Id = 0, Name = "One Unicorn" }, + new NullableKeyBlog { Id = 1, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + await using (var context = new BlogContextNoKeyGenerationNullableKey(testStore.Name, OnModelCreating, NullableIntSentinel)) + { + var blogs = context.NullableKeyBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(0, blogs[0].Id); + Assert.Equal(1, blogs[1].Id); + } + } + + public class BlogContextNoKeyGenerationNullableKey(string databaseName, Action modelBuilder, int? sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly int? _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedNever() + .HasSentinel(_sentinel); + } + } + + [ConditionalFact] + public async Task Insert_with_non_key_default_value() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + + await using (var context = new BlogContextNonKeyDefaultValue(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + var blogs = new List + { + new() + { + Id = IntSentinel, + Name = "One Unicorn", + CreatedOn = DateTimeSentinel, + NeedsConverter = NeedsConverterSentinel + }, + new() + { + Id = IntSentinel, + Name = "Two Unicorns", + CreatedOn = new DateTime(1969, 8, 3, 0, 10, 0), + NeedsConverter = new NeedsConverter(111) + } + }; + + context.AddRange(blogs); + + context.SaveChanges(); + + Assert.NotEqual(new DateTime(), blogs[0].CreatedOn); + Assert.NotEqual(new DateTime(), blogs[1].CreatedOn); + Assert.Equal(111, blogs[1].NeedsConverter.Value); + } + + await using (var context = new BlogContextNonKeyDefaultValue(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Name).ToList(); + Assert.Equal(3, blogs.Count); + + Assert.NotEqual(new DateTime(), blogs[0].CreatedOn); + Assert.Equal(new DateTime(1969, 8, 3, 0, 10, 0), blogs[1].CreatedOn); + Assert.Equal(new DateTime(1974, 8, 3, 0, 10, 0), blogs[2].CreatedOn); + + blogs[0].CreatedOn = new DateTime(1973, 9, 3, 0, 10, 0); + + blogs[1].Name = "X Unicorns"; + blogs[1].NeedsConverter = new NeedsConverter(222); + + blogs[2].Name = "Y Unicorns"; + blogs[2].NeedsConverter = new NeedsConverter(333); + + context.SaveChanges(); + } + + await using (var context = new BlogContextNonKeyDefaultValue(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Name).ToList(); + Assert.Equal(3, blogs.Count); + + Assert.Equal(new DateTime(1973, 9, 3, 0, 10, 0), blogs[0].CreatedOn); + Assert.Equal(new DateTime(1969, 8, 3, 0, 10, 0), blogs[1].CreatedOn); + Assert.Equal(222, blogs[1].NeedsConverter.Value); + Assert.Equal(new DateTime(1974, 8, 3, 0, 10, 0), blogs[2].CreatedOn); + Assert.Equal(333, blogs[2].NeedsConverter.Value); + } + } + + /*[ConditionalFact] + public async Task Insert_with_non_key_default_spatial_value() + { + using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + + using (var context = new BlogContextNonKeyDefaultSpatialValue(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + var blogs = new List + { + new() + { + Id = IntSentinel, + Name = "One Unicorn", + GeometryCollection = GeometryCollectionSentinel + }, + new() + { + Id = IntSentinel, + Name = "Two Unicorns", + GeometryCollection = GeometryFactory.CreateGeometryCollection( + [GeometryFactory.CreatePoint(new Coordinate(1, 3))]) + } + }; + + context.AddRange(blogs); + + context.SaveChanges(); + + var point = ((Point)blogs[1].GeometryCollection.Geometries[0]); + Assert.Equal(1, point.X); + Assert.Equal(3, point.Y); + } + + using (var context = new BlogContextNonKeyDefaultSpatialValue(testStore.Name, OnModelCreating)) + { + var blogs = context.SpatialBlogs.OrderBy(e => e.Name).ToList(); + Assert.Equal(3, blogs.Count); + + var point1 = ((Point)blogs[1].GeometryCollection.Geometries[0]); + Assert.Equal(1, point1.X); + Assert.Equal(3, point1.Y); + + var point2 = ((Point)blogs[2].GeometryCollection.Geometries[0]); + Assert.Equal(1, point2.X); + Assert.Equal(2, point2.Y); + + blogs[1].GeometryCollection.Geometries[0] = GeometryFactory.CreatePoint(new Coordinate(1, 11)); + blogs[2].GeometryCollection.Geometries[0] = GeometryFactory.CreatePoint(new Coordinate(1, 22)); + + context.SaveChanges(); + } + + using (var context = new BlogContextNonKeyDefaultSpatialValue(testStore.Name, OnModelCreating)) + { + var blogs = context.SpatialBlogs.OrderBy(e => e.Name).ToList(); + Assert.Equal(3, blogs.Count); + + var point1 = ((Point)blogs[1].GeometryCollection.Geometries[0]); + Assert.Equal(1, point1.X); + Assert.Equal(11, point1.Y); + + var point2 = ((Point)blogs[2].GeometryCollection.Geometries[0]); + Assert.Equal(1, point2.X); + Assert.Equal(22, point2.Y); + } + }*/ + + public class BlogContextNonKeyDefaultValue(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.CreatedOn).HasDefaultValueSql("NOW()"); + + b.HasData( + new Blog + { + Id = 9979, + Name = "W Unicorns", + CreatedOn = new DateTime(1974, 8, 3, 0, 10, 0), + NeedsConverter = new NeedsConverter(111), + }); + }); + } + } + + /*public class BlogContextNonKeyDefaultSpatialValue(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.GeometryCollection).HasDefaultValue(GeometryFactory.CreateGeometryCollection()); + + b.HasData( + new BlogWithSpatial + { + Id = 9979, + Name = "W Unicorns", + GeometryCollection = GeometryFactory.CreateGeometryCollection( + [GeometryFactory.CreatePoint(new Coordinate(1, 2))]) + }); + }); + } + }*/ + + [ConditionalFact] + public async Task Insert_with_non_key_default_value_readonly() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name, OnModelCreating, IntSentinel, DateTimeSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog + { + Id = IntSentinel, + Name = "One Unicorn", + CreatedOn = DateTimeSentinel + }, + new Blog + { + Id = IntSentinel, + Name = "Two Unicorns", + CreatedOn = DateTimeSentinel + }); + + context.SaveChanges(); + + Assert.NotEqual(new DateTime(), context.Blogs.ToList()[0].CreatedOn); + } + + DateTime dateTime0; + + using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name, OnModelCreating, IntSentinel, DateTimeSentinel)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + dateTime0 = blogs[0].CreatedOn; + + Assert.NotEqual(new DateTime(), dateTime0); + Assert.NotEqual(new DateTime(), blogs[1].CreatedOn); + + blogs[0].Name = "One Pegasus"; + blogs[1].CreatedOn = new DateTime(1973, 9, 3, 0, 10, 0); + + context.SaveChanges(); + } + + using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name, OnModelCreating, IntSentinel, DateTimeSentinel)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(dateTime0, blogs[0].CreatedOn); + Assert.Equal(new DateTime(1973, 9, 3, 0, 10, 0), blogs[1].CreatedOn); + } + } + + public class BlogContextNonKeyReadOnlyDefaultValue( + string databaseName, + Action modelBuilder, + int intSentinel, + DateTime dateTimeSentinel) : ContextBase(databaseName, modelBuilder) + { + private readonly int _intSentinel = intSentinel; + private readonly DateTime _dateTimeSentinel = dateTimeSentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_intSentinel); + + var property = b.Property(e => e.CreatedOn).HasDefaultValueSql("NOW()").HasSentinel(_dateTimeSentinel); + property.Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); + }); + } + } + + [ConditionalFact] + public async Task Insert_and_update_with_computed_column() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + context.SaveChanges(); + + Assert.Equal("One Unicorn", blog.FullName); + } + + using (var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.FullNameBlogs.Single(); + + Assert.Equal("One Unicorn", blog.FullName); + + blog.LastName = "Pegasus"; + + context.SaveChanges(); + + Assert.Equal("One Pegasus", blog.FullName); + } + } + + public class BlogContextComputedColumn(string databaseName, Action modelBuilder, int intSentinel, string stringSentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly int _intSentinel = intSentinel; + private readonly string _stringSentinel = stringSentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_intSentinel); + + var property = b.Property(e => e.FullName) + .HasComputedColumnSql("FirstName + ' ' + LastName") + .HasSentinel(_stringSentinel) + .Metadata; + + property.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); + property.SetAfterSaveBehavior(PropertySaveBehavior.Throw); + }); + } + } + + public class BlogContextComputedColumnWithTriggerMetadata( + string databaseName, + Action modelBuilder, + int intSentinel, + string stringSentinel) : BlogContextComputedColumn(databaseName, modelBuilder, intSentinel, stringSentinel) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().ToTable(tb => tb.HasTrigger("SomeTrigger")); + } + } + + /*// #6044 + [ConditionalFact] + public async Task Insert_and_update_with_computed_column_with_function() + { + using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextComputedColumnWithFunction(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + context.Database.ExecuteSqlRaw + ( + @"CREATE FUNCTION +[dbo].[GetFullName](@First NVARCHAR(MAX), @Second NVARCHAR(MAX)) +RETURNS NVARCHAR(MAX) WITH SCHEMABINDING AS BEGIN RETURN @First + @Second END"); + + context.GetService().CreateTables(); + } + + using (var context = new BlogContextComputedColumnWithFunction(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + context.SaveChanges(); + + Assert.Equal("OneUnicorn", blog.FullName); + } + + using (var context = new BlogContextComputedColumnWithFunction(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.FullNameBlogs.Single(); + + Assert.Equal("OneUnicorn", blog.FullName); + + blog.LastName = "Pegasus"; + + context.SaveChanges(); + + Assert.Equal("OnePegasus", blog.FullName); + } + } + + public class BlogContextComputedColumnWithFunction( + string databaseName, + Action modelBuilder, + int intSentinel, + string stringSentinel) : ContextBase(databaseName, modelBuilder) + { + private readonly int _intSentinel = intSentinel; + private readonly string _stringSentinel = stringSentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_intSentinel); + + var property = modelBuilder.Entity() + .Property(e => e.FullName) + .HasComputedColumnSql("[dbo].[GetFullName]([FirstName], [LastName])") + .HasSentinel(_stringSentinel) + .Metadata; + + property.SetAfterSaveBehavior(PropertySaveBehavior.Throw); + }); + } + } + + // #6044 + [ConditionalFact] + public async Task Insert_and_update_with_computed_column_with_querying_function() + { + LibRedTestStore testStore = null; + try + { + testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextComputedColumnWithTriggerMetadata( + testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + context.GetService().CreateTables(); + + context.Database.ExecuteSqlRaw("ALTER TABLE dbo.FullNameBlogs DROP COLUMN FullName;"); + + context.Database.ExecuteSqlRaw( + @"CREATE FUNCTION [dbo].[GetFullName](@Id int) +RETURNS nvarchar(max) WITH SCHEMABINDING AS +BEGIN + DECLARE @FullName nvarchar(max); + SELECT @FullName = [FirstName] + [LastName] FROM [dbo].[FullNameBlogs] WHERE [Id] = @Id; + RETURN @FullName +END"); + + context.Database.ExecuteSqlRaw("ALTER TABLE dbo.FullNameBlogs ADD FullName AS [dbo].[GetFullName]([Id]); "); + } + + using (var context = new BlogContextComputedColumnWithTriggerMetadata( + testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + context.SaveChanges(); + + Assert.Equal("OneUnicorn", blog.FullName); + } + + using (var context = new BlogContextComputedColumnWithTriggerMetadata( + testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.FullNameBlogs.Single(); + + Assert.Equal("OneUnicorn", blog.FullName); + + blog.LastName = "Pegasus"; + + context.SaveChanges(); + + Assert.Equal("OnePegasus", blog.FullName); + } + + using (var context = new BlogContextComputedColumnWithTriggerMetadata( + testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog1 = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "Hank", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + var blog2 = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "Jeff", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + context.SaveChanges(); + + Assert.Equal("HankUnicorn", blog1.FullName); + Assert.Equal("JeffUnicorn", blog2.FullName); + } + } + finally + { + using var context = new BlogContextComputedColumnWithTriggerMetadata( + DatabaseName, OnModelCreating, IntSentinel, StringSentinel); + context.Database.ExecuteSqlRaw("ALTER TABLE dbo.FullNameBlogs DROP COLUMN FullName;"); + context.Database.ExecuteSqlRaw("DROP FUNCTION [dbo].[GetFullName];"); + testStore?.Dispose(); + } + }*/ + + [ConditionalFact] + public async Task Insert_with_client_generated_GUID_key() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + Guid afterSave; + await using (var context = new BlogContextClientGuidKey(testStore.Name, OnModelCreating, GuidSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new GuidBlog + { + Id = GuidSentinel, + Name = "One Unicorn", + NotId = GuidSentinel + }).Entity; + + var beforeSave = blog.Id; + var beforeSaveNotId = blog.NotId; + + Assert.NotEqual(default, beforeSave); + Assert.NotEqual(default, beforeSaveNotId); + + context.SaveChanges(); + + afterSave = blog.Id; + var afterSaveNotId = blog.NotId; + + Assert.Equal(beforeSave, afterSave); + Assert.Equal(beforeSaveNotId, afterSaveNotId); + } + + await using (var context = new BlogContextClientGuidKey(testStore.Name, OnModelCreating, GuidSentinel)) + { + Assert.Equal(afterSave, context.GuidBlogs.Single().Id); + } + } + + public class BlogContextClientGuidKey(string databaseName, Action modelBuilder, Guid sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly Guid _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + eb => + { + eb.HasAlternateKey(e => e.NotId); + eb.Property(e => e.NotId).ValueGeneratedOnAdd().HasSentinel(_sentinel); + eb.Property(e => e.Id).HasSentinel(_sentinel); + }); + } + } + + [ConditionalFact] + public async Task Insert_with_ValueGeneratedOnAdd_GUID_nonkey_property_throws() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using var context = new BlogContextClientGuidNonKey(testStore.Name, OnModelCreating, GuidSentinel); + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new GuidBlog + { + Id = GuidSentinel, + Name = "One Unicorn", + NotId = GuidSentinel + }).Entity; + + Assert.Equal(GuidSentinel, blog.NotId); + + // No value set on a required column + var updateException = Assert.Throws(() => context.SaveChanges()); + Assert.Single(updateException.Entries); + } + + public class BlogContextClientGuidNonKey(string databaseName, Action modelBuilder, Guid sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly Guid _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_sentinel); + b.Property(e => e.NotId).ValueGeneratedOnAdd().HasSentinel(_sentinel); + }); + } + } + + [ConditionalFact(Skip = "LibRed can't return server generated guid's when it is the key. Currently using client geerated guid's")] + public async Task Insert_with_server_generated_GUID_key() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + Guid afterSave; + await using (var context = new BlogContextServerGuidKey(testStore.Name, OnModelCreating, GuidSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new GuidBlog + { + Id = GuidSentinel, + Name = "One Unicorn", + NotId = GuidSentinel + }).Entity; + + var beforeSave = blog.Id; + var beforeSaveNotId = blog.NotId; + + Assert.Equal(GuidSentinel, beforeSave); + Assert.Equal(GuidSentinel, beforeSaveNotId); + + context.SaveChanges(); + + afterSave = blog.Id; + var afterSaveNotId = blog.NotId; + + Assert.NotEqual(GuidSentinel, afterSave); + Assert.NotEqual(GuidSentinel, afterSaveNotId); + Assert.NotEqual(beforeSave, afterSave); + Assert.NotEqual(beforeSaveNotId, afterSaveNotId); + } + + using (var context = new BlogContextServerGuidKey(testStore.Name, OnModelCreating, GuidSentinel)) + { + Assert.Equal(afterSave, context.GuidBlogs.Single().Id); + } + } + + public class BlogContextServerGuidKey(string databaseName, Action modelBuilder, Guid sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly Guid _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity( + eb => + { + eb.Property(e => e.Id).HasDefaultValueSql("GenGUID()").HasSentinel(_sentinel); + eb.Property(e => e.NotId).HasDefaultValueSql("GenGUID()").HasSentinel(_sentinel); + }); + } + } + + // Negative cases + [ConditionalFact] + public async Task Insert_with_explicit_non_default_keys_by_default() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using var context = new BlogContext(testStore.Name, OnModelCreating); + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = 1, Name = "One Unicorn" }, new Blog { Id = 2, Name = "Two Unicorns" }); + + // DbUpdateException : An error occurred while updating the entries. See the + // inner exception for details. + // SqlException : Cannot insert explicit value for identity column in table + // 'Blog' when IDENTITY_INSERT is set to OFF. + context.Database.CreateExecutionStrategy().Execute(context, c => Assert.Throws(() => c.SaveChanges())); + } + + [ConditionalFact] + public async Task Insert_with_explicit_default_keys() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using var context = new BlogContext(testStore.Name, OnModelCreating); + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = IntSentinel, Name = "One Unicorn" }, new Blog { Id = 1, Name = "Two Unicorns" }); + + // DbUpdateException : An error occurred while updating the entries. See the + // inner exception for details. + // SqlException : Cannot insert explicit value for identity column in table + // 'Blog' when IDENTITY_INSERT is set to OFF. + var updateException = Assert.Throws(() => context.SaveChanges()); + Assert.Single(updateException.Entries); + } + + public class BlogContext(string databaseName, Action modelBuilder) : ContextBase(databaseName, modelBuilder); + + [ConditionalFact] + public async Task Insert_with_implicit_default_keys() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextSpecifyKeysUsingDefault(testStore.Name, OnModelCreating, IntSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = 0, Name = "One Unicorn" }, new Blog { Id = 667, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + await using (var context = new BlogContextSpecifyKeysUsingDefault(testStore.Name, OnModelCreating, IntSentinel)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(0, blogs[0].Id); + Assert.Equal(667, blogs[1].Id); + } + } + + public class BlogContextSpecifyKeysUsingDefault(string databaseName, Action modelBuilder, int sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly int _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedNever() + .HasSentinel(_sentinel); + } + } + + [ConditionalFact] + public async Task Insert_explicit_value_throws_when_readonly_sequence_before_save() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using var context = new BlogContextReadOnlySequenceKeyColumnWithDefaultValue(testStore.Name, OnModelCreating, IntSentinel); + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = 1, Name = "One Unicorn" }, new Blog { Id = IntSentinel, Name = "Two Unicorns" }); + + // The property 'Id' on entity type 'Blog' is defined to be read-only before it is + // saved, but its value has been set to something other than a temporary or default value. + Assert.Equal( + CoreStrings.PropertyReadOnlyBeforeSave("Id", "Blog"), + Assert.Throws(() => context.SaveChanges()).Message); + } + + public class BlogContextReadOnlySequenceKeyColumnWithDefaultValue(string databaseName, Action modelBuilder, int sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly int _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.HasSequence("MySequence"); + + var property = modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValueSql("next value for MySequence") + .HasSentinel(_sentinel); + + property.Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); + } + } + + [ConditionalFact] + public async Task Insert_explicit_value_throws_when_readonly_before_save() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name, OnModelCreating, IntSentinel, DateTimeSentinel); + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog + { + Id = IntSentinel, + Name = "One Unicorn", + CreatedOn = DateTimeSentinel + }, + new Blog + { + Id = IntSentinel, + Name = "Two Unicorns", + CreatedOn = new DateTime(1973, 8, 3, 0, 10, 0) + }); + + // The property 'CreatedOn' on entity type 'Blog' is defined to be read-only before it is + // saved, but its value has been set to something other than a temporary or default value. + Assert.Equal( + CoreStrings.PropertyReadOnlyBeforeSave("CreatedOn", "Blog"), + Assert.Throws(() => context.SaveChanges()).Message); + } + + [ConditionalFact] + public async Task Insert_explicit_value_into_computed_column() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel); + context.Database.EnsureCreatedResiliently(); + + context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = "Gerald" + }); + + // The property 'FullName' on entity type 'FullNameBlog' is defined to be read-only before it is + // saved, but its value has been set to something other than a temporary or default value. + Assert.Equal( + CoreStrings.PropertyReadOnlyBeforeSave("FullName", "FullNameBlog"), + Assert.Throws(() => context.SaveChanges()).Message); + } + + [ConditionalFact] + public async Task Update_explicit_value_in_computed_column() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using (var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = StringSentinel + }); + + context.SaveChanges(); + } + + await using (var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.FullNameBlogs.Single(); + + blog.FullName = "The Gorilla"; + + // The property 'FullName' on entity type 'FullNameBlog' is defined to be read-only after it has been saved, + // but its value has been modified or marked as modified. + Assert.Equal( + CoreStrings.PropertyReadOnlyAfterSave("FullName", "FullNameBlog"), + Assert.Throws(() => context.SaveChanges()).Message); + } + } + + // Concurrency + [ConditionalFact] + public async Task Resolve_concurrency() + { + await using var testStore = await LibRedTestStore.CreateInitializedAsync(DatabaseName); + await using var context = new BlogContextConcurrencyWithRowversion(testStore.Name, OnModelCreating, IntSentinel, TimestampSentinel); + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new ConcurrentBlog + { + Id = IntSentinel, + Name = "One Unicorn", + Timestamp = TimestampSentinel + }).Entity; + + context.SaveChanges(); + + await using var innerContext = new BlogContextConcurrencyWithRowversion(testStore.Name, OnModelCreating, IntSentinel, TimestampSentinel); + var updatedBlog = innerContext.ConcurrentBlogs.Single(); + updatedBlog.Name = "One Pegasus"; + innerContext.SaveChanges(); + var currentTimestamp = updatedBlog.Timestamp.ToArray(); + + try + { + blog.Name = "One Earth Pony"; + context.SaveChanges(); + } + catch (DbUpdateConcurrencyException) + { + // Update original values (and optionally any current values) + // Would normally do this with just one method call + context.Entry(blog).Property(e => e.Id).OriginalValue = updatedBlog.Id; + context.Entry(blog).Property(e => e.Name).OriginalValue = updatedBlog.Name; + context.Entry(blog).Property(e => e.Timestamp).OriginalValue = updatedBlog.Timestamp; + + context.SaveChanges(); + + Assert.NotEqual(blog.Timestamp, currentTimestamp); + } + } + + public class BlogContextConcurrencyWithRowversion( + string databaseName, + Action modelBuilder, + int intSentinel, + byte[] timestampSentinel) : ContextBase(databaseName, modelBuilder) + { + private readonly int _intSentinel = intSentinel; + private readonly byte[] _timestampSentinel = timestampSentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_intSentinel); + b.Property(e => e.Timestamp) + .ValueGeneratedOnAddOrUpdate() + .IsConcurrencyToken() + .HasSentinel(_timestampSentinel); + }); + } + } + + protected Blog CreateBlog(string name) + => new() + { + Id = IntSentinel, + Name = name, + CreatedOn = DateTimeSentinel, + NeedsConverter = NeedsConverterSentinel, + OtherId = NullableIntSentinel + }; + + public class Blog + { + public int Id { get; set; } + public string Name { get; set; } + public DateTime CreatedOn { get; set; } + public NeedsConverter NeedsConverter { get; set; } + public int? OtherId { get; set; } + } + + /*protected BlogWithSpatial CreateBlogWithSpatial(string name) + => new() + { + Id = IntSentinel, + Name = name, + GeometryCollection = GeometryCollectionSentinel, + }; + + public class BlogWithSpatial + { + public int Id { get; set; } + public string Name { get; set; } + public GeometryCollection GeometryCollection { get; set; } + }*/ + + public class NeedsConverter(int value) + { + public int Value { get; } = value; + + public override bool Equals(object obj) + => throw new InvalidOperationException(); + + public override int GetHashCode() + => throw new InvalidOperationException(); + } + + public class NullableKeyBlog + { + public int? Id { get; set; } + public string Name { get; set; } + public DateTime CreatedOn { get; set; } + } + + public class FullNameBlog + { + public int Id { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } + public string FullName { get; set; } + } + + public class GuidBlog + { + public Guid Id { get; set; } + public string Name { get; set; } + public Guid NotId { get; set; } + } + + public class ConcurrentBlog + { + public int Id { get; set; } + public string Name { get; set; } + public byte[] Timestamp { get; set; } + } + + protected virtual void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity() + .Property(e => e.NeedsConverter) + .HasConversion( + v => v.Value, + v => new NeedsConverter(v), + new ValueComparer( + (l, r) => (l == null && r == null) || (l != null && r != null && l.Value == r.Value), + v => v.Value.GetHashCode(), + v => new NeedsConverter(v.Value))) + .HasDefaultValue(new NeedsConverter(999)); + + public abstract class ContextBase(string databaseName, Action builder) : DbContext + { + public DbSet Blogs { get; set; } + //public DbSet SpatialBlogs { get; set; } + public DbSet NullableKeyBlogs { get; set; } + public DbSet FullNameBlogs { get; set; } + public DbSet GuidBlogs { get; set; } + public DbSet ConcurrentBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => builder(modelBuilder); + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseLibRed( + LibRedTestStore.CreateConnectionString(databaseName), + b => b.ApplyConfiguration()); + } + + public static IEnumerable IsAsyncData = [[false], [true]]; +} diff --git a/test/EFCore.LibRed.FunctionalTests/LoadLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/LoadLibRedTest.cs new file mode 100644 index 00000000..85ff6349 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LoadLibRedTest.cs @@ -0,0 +1,1771 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.IO; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class LoadLibRedTest : LoadTestBase + { + public LoadLibRedTest(LoadLibRedFixture fixture) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + } + + public override async Task Lazy_load_collection(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_collection(state, queryTrackingBehavior, async); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + +SELECT `c`.`Id`, `c`.`ParentId` +FROM `Child` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Lazy_load_many_to_one_reference_to_principal(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_many_to_one_reference_to_principal(state, queryTrackingBehavior, async); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Lazy_load_one_to_one_reference_to_principal(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_one_to_one_reference_to_principal(state, queryTrackingBehavior, async); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Lazy_load_one_to_one_reference_to_dependent(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_one_to_one_reference_to_dependent(state, queryTrackingBehavior, async); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_PK_to_PK_reference_to_principal(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 1 `s`.`Id` +FROM `SinglePkToPk` AS `s` +WHERE `s`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Lazy_load_many_to_one_reference_to_principal_null_FK(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_many_to_one_reference_to_principal_null_FK(state, queryTrackingBehavior, async); + + AssertSql(); + } + + public override async Task Lazy_load_one_to_one_reference_to_principal_null_FK(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_one_to_one_reference_to_principal_null_FK(state, queryTrackingBehavior, async); + + AssertSql(); + } + + public override async Task Lazy_load_collection_not_found(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_collection_not_found(state, queryTrackingBehavior, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + +SELECT `c`.`Id`, `c`.`ParentId` +FROM `Child` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Lazy_load_many_to_one_reference_to_principal_not_found(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_many_to_one_reference_to_principal_not_found(state, queryTrackingBehavior, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='787'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Lazy_load_one_to_one_reference_to_principal_not_found(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_one_to_one_reference_to_principal_not_found(state, queryTrackingBehavior, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='787'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Lazy_load_one_to_one_reference_to_dependent_not_found(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_one_to_one_reference_to_dependent_not_found(state, queryTrackingBehavior, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Lazy_load_collection_already_loaded(EntityState state, CascadeTiming cascadeDeleteTiming, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_collection_already_loaded(state, cascadeDeleteTiming, queryTrackingBehavior, async); + + AssertSql(); + } + + public override async Task Lazy_load_many_to_one_reference_to_principal_already_loaded(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_many_to_one_reference_to_principal_already_loaded(state, queryTrackingBehavior, async); + + AssertSql(); + } + + public override async Task Lazy_load_one_to_one_reference_to_principal_already_loaded(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_one_to_one_reference_to_principal_already_loaded(state, queryTrackingBehavior, async); + + AssertSql(); + } + + public override async Task Lazy_load_one_to_one_reference_to_dependent_already_loaded( + EntityState state, CascadeTiming cascadeDeleteTiming, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state, cascadeDeleteTiming, queryTrackingBehavior, async); + + AssertSql(); + } + + public override void Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state, queryTrackingBehavior); + + AssertSql(); + } + + public override void Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state, queryTrackingBehavior); + + AssertSql(); + } + + public override void Lazy_load_many_to_one_reference_to_principal_alternate_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_many_to_one_reference_to_principal_alternate_key(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_alternate_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_reference_to_principal_alternate_key(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_dependent_alternate_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId` +FROM `SingleAk` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state, queryTrackingBehavior); + + AssertSql(); + } + + public override void Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state, queryTrackingBehavior); + + AssertSql(); + } + + public override void Lazy_load_collection_shadow_fk(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_collection_shadow_fk(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + +SELECT `c`.`Id`, `c`.`ParentId` +FROM `ChildShadowFk` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_shadow_fk(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached || queryTrackingBehavior != QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_shadow_fk(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached || queryTrackingBehavior != QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_dependent_shadow_fk(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId` +FROM `SingleShadowFk` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state, queryTrackingBehavior); + + AssertSql(); + } + + public override void Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state, queryTrackingBehavior); + + AssertSql(); + } + + public override void Lazy_load_collection_composite_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_collection_composite_key(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} +{AssertSqlHelper.Declaration("@p1='707' (Nullable = true)")} + +SELECT `c`.`Id`, `c`.`ParentAlternateId`, `c`.`ParentId` +FROM `ChildCompositeKey` AS `c` +WHERE `c`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@p")} AND `c`.`ParentId` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_composite_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_many_to_one_reference_to_principal_composite_key(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} +{AssertSqlHelper.Declaration("@p1='707'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_principal_composite_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_reference_to_principal_composite_key(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} +{AssertSqlHelper.Declaration("@p1='707'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override void Lazy_load_one_to_one_reference_to_dependent_composite_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_reference_to_dependent_composite_key(state, queryTrackingBehavior); + + AssertSql( + state == EntityState.Detached && queryTrackingBehavior == QueryTrackingBehavior.TrackAll + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} +{AssertSqlHelper.Declaration("@p1='707' (Nullable = true)")} + +SELECT TOP 1 `s`.`Id`, `s`.`ParentAlternateId`, `s`.`ParentId` +FROM `SingleCompositeKey` AS `s` +WHERE `s`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@p")} AND `s`.`ParentId` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override void Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state, queryTrackingBehavior); + + AssertSql(); + } + + public override void Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(EntityState state, QueryTrackingBehavior queryTrackingBehavior) + { + base.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state, queryTrackingBehavior); + + AssertSql(); + } + + public override async Task Load_collection(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Load_collection(state, queryTrackingBehavior, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT TOP 1 `s`.`Id`, `s`.`ParentId` + FROM `Single` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_PK_to_PK_reference_to_principal(EntityState state, bool async) + { + await base.Load_one_to_one_PK_to_PK_reference_to_principal(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_PK_to_PK_reference_to_dependent(EntityState state, bool async) + { + await base.Load_one_to_one_PK_to_PK_reference_to_dependent(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 1 `s`.`Id` + FROM `SinglePkToPk` AS `s` + WHERE `s`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_using_Query(EntityState state, bool async) + { + await base.Load_collection_using_Query(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_using_Query(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_using_Query(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + +SELECT TOP 2 `s`.`Id`, `s`.`ParentId` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(EntityState state, bool async) + { + await base.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(EntityState state, bool async) + { + await base.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 2 `s`.`Id` +FROM `SinglePkToPk` AS `s` +WHERE `s`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_many_to_one_reference_to_principal_null_FK(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_null_FK(state, async); + + AssertSql(); + } + + public override async Task Load_one_to_one_reference_to_principal_null_FK(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_null_FK(state, async); + + AssertSql(); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_null_FK(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_null_FK(state, async); + + AssertSql( + $""" + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE FALSE + """); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_null_FK(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_null_FK(state, async); + + AssertSql( + $""" + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE FALSE + """); + } + + public override async Task Load_collection_not_found(EntityState state, bool async) + { + await base.Load_collection_not_found(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_not_found(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_not_found(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='787'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_not_found(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_not_found(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='787'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_not_found(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_not_found(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + + SELECT TOP 1 `s`.`Id`, `s`.`ParentId` + FROM `Single` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_using_Query_not_found(EntityState state, bool async) + { + await base.Load_collection_using_Query_not_found(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_not_found(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_not_found(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='787'")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_not_found(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_not_found(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='787'")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_using_Query_not_found(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_using_Query_not_found(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + + SELECT TOP 2 `s`.`Id`, `s`.`ParentId` + FROM `Single` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_already_loaded(EntityState state, bool async, CascadeTiming cascadeDeleteTiming) + { + await base.Load_collection_already_loaded(state, async, cascadeDeleteTiming); + + AssertSql($@""); + } + + public override async Task Load_many_to_one_reference_to_principal_already_loaded(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_already_loaded(state, async); + + AssertSql($@""); + } + + public override async Task Load_one_to_one_reference_to_principal_already_loaded( + EntityState state, bool async, CascadeTiming cascadeDeleteTiming) + { + await base.Load_one_to_one_reference_to_principal_already_loaded(state, async, cascadeDeleteTiming); + + AssertSql($@""); + } + + public override async Task Load_one_to_one_reference_to_dependent_already_loaded( + EntityState state, bool async, CascadeTiming cascadeDeleteTiming) + { + await base.Load_one_to_one_reference_to_dependent_already_loaded(state, async, cascadeDeleteTiming); + + AssertSql($@""); + } + + public override async Task Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(EntityState state, bool async) + { + await base.Load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state, async); + + AssertSql($@""); + } + + public override async Task Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(EntityState state, bool async) + { + await base.Load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state, async); + + AssertSql($@""); + } + + public override async Task Load_collection_using_Query_already_loaded( + EntityState state, bool async, CascadeTiming cascadeDeleteTiming) + { + await base.Load_collection_using_Query_already_loaded(state, async, cascadeDeleteTiming); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_already_loaded(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_already_loaded(state, async); + + AssertSql( + state == EntityState.Deleted + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_already_loaded(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_already_loaded(state, async); + + AssertSql( + state == EntityState.Deleted + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_one_to_one_reference_to_dependent_using_Query_already_loaded( + EntityState state, bool async, CascadeTiming cascadeDeleteTiming) + { + await base.Load_one_to_one_reference_to_dependent_using_Query_already_loaded(state, async, cascadeDeleteTiming); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT TOP 2 `s`.`Id`, `s`.`ParentId` + FROM `Single` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(EntityState state, bool async) + { + await base.Load_one_to_one_PK_to_PK_reference_to_principal_using_Query_already_loaded(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(EntityState state, bool async) + { + await base.Load_one_to_one_PK_to_PK_reference_to_dependent_using_Query_already_loaded(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 2 `s`.`Id` + FROM `SinglePkToPk` AS `s` + WHERE `s`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_untyped(EntityState state, bool async) + { + await base.Load_collection_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_untyped(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT TOP 1 `s`.`Id`, `s`.`ParentId` + FROM `Single` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_using_Query_untyped(EntityState state, bool async) + { + await base.Load_collection_using_Query_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_untyped(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707'")} + + SELECT `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_using_Query_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_using_Query_untyped(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + +SELECT `s`.`Id`, `s`.`ParentId` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_collection_not_found_untyped(EntityState state, bool async) + { + await base.Load_collection_not_found_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_not_found_untyped(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_not_found_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='787'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_not_found_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_not_found_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='787'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_not_found_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_not_found_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + + SELECT TOP 1 `s`.`Id`, `s`.`ParentId` + FROM `Single` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_using_Query_not_found_untyped(EntityState state, bool async) + { + await base.Load_collection_using_Query_not_found_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_not_found_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='787'")} + + SELECT `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_not_found_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='787'")} + + SELECT `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_using_Query_not_found_untyped(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='767' (Nullable = true)")} + + SELECT `s`.`Id`, `s`.`ParentId` + FROM `Single` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_already_loaded_untyped(EntityState state, bool async, CascadeTiming cascadeDeleteTiming) + { + await base.Load_collection_already_loaded_untyped(state, async, cascadeDeleteTiming); + + AssertSql($@""); + } + + public override async Task Load_many_to_one_reference_to_principal_already_loaded_untyped(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_already_loaded_untyped(state, async); + + AssertSql($@""); + } + + public override async Task Load_one_to_one_reference_to_principal_already_loaded_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_already_loaded_untyped(state, async); + + AssertSql($@""); + } + + public override async Task Load_one_to_one_reference_to_dependent_already_loaded_untyped( + EntityState state, bool async, CascadeTiming cascadeDeleteTiming) + { + await base.Load_one_to_one_reference_to_dependent_already_loaded_untyped(state, async, cascadeDeleteTiming); + + AssertSql($@""); + } + + public override async Task Load_collection_using_Query_already_loaded_untyped( + EntityState state, bool async, CascadeTiming cascadeDeleteTiming) + { + await base.Load_collection_using_Query_already_loaded_untyped(state, async, cascadeDeleteTiming); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `Child` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_already_loaded_untyped(state, async); + + AssertSql( + state == EntityState.Deleted + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_already_loaded_untyped(state, async); + + AssertSql( + state == EntityState.Deleted + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped( + EntityState state, bool async, CascadeTiming cascadeDeleteTiming) + { + await base.Load_one_to_one_reference_to_dependent_using_Query_already_loaded_untyped(state, async, cascadeDeleteTiming); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT `s`.`Id`, `s`.`ParentId` + FROM `Single` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_alternate_key(EntityState state, bool async) + { + await base.Load_collection_alternate_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `ChildAk` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_alternate_key(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_alternate_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_alternate_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_alternate_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_alternate_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_alternate_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + + SELECT TOP 1 `s`.`Id`, `s`.`ParentId` + FROM `SingleAk` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_using_Query_alternate_key(EntityState state, bool async) + { + await base.Load_collection_using_Query_alternate_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `ChildAk` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_alternate_key(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_alternate_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_alternate_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_alternate_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_using_Query_alternate_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_using_Query_alternate_key(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + +SELECT TOP 2 `s`.`Id`, `s`.`ParentId` +FROM `SingleAk` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_many_to_one_reference_to_principal_null_FK_alternate_key(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_null_FK_alternate_key(state, async); + + AssertSql(); + } + + public override async Task Load_one_to_one_reference_to_principal_null_FK_alternate_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_null_FK_alternate_key(state, async); + + AssertSql(); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state, async); + + AssertSql( + $""" + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE FALSE + """); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_null_FK_alternate_key(state, async); + + AssertSql( + $""" + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE FALSE + """); + } + + public override async Task Load_collection_shadow_fk(EntityState state, bool async) + { + await base.Load_collection_shadow_fk(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `ChildShadowFk` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_shadow_fk(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_shadow_fk(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_one_to_one_reference_to_principal_shadow_fk(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_shadow_fk(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_one_to_one_reference_to_dependent_shadow_fk(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_shadow_fk(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT TOP 1 `s`.`Id`, `s`.`ParentId` + FROM `SingleShadowFk` AS `s` + WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_collection_using_Query_shadow_fk(EntityState state, bool async) + { + await base.Load_collection_using_Query_shadow_fk(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentId` + FROM `ChildShadowFk` AS `c` + WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@p")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_shadow_fk(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_shadow_fk(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_shadow_fk(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_shadow_fk(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707'")} + +SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_using_Query_shadow_fk(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='707' (Nullable = true)")} + +SELECT TOP 2 `s`.`Id`, `s`.`ParentId` +FROM `SingleShadowFk` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@p")} +"""); + } + + public override async Task Load_many_to_one_reference_to_principal_null_FK_shadow_fk(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_null_FK_shadow_fk(state, async); + + AssertSql(); + } + + public override async Task Load_one_to_one_reference_to_principal_null_FK_shadow_fk(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_null_FK_shadow_fk(state, async); + + AssertSql(); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : """ +SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE FALSE +"""); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_null_FK_shadow_fk(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : """ +SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE FALSE +"""); + } + + public override async Task Load_collection_composite_key(EntityState state, bool async) + { + await base.Load_collection_composite_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + {AssertSqlHelper.Declaration("@p1='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentAlternateId`, `c`.`ParentId` + FROM `ChildCompositeKey` AS `c` + WHERE `c`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@p")} AND `c`.`ParentId` = {AssertSqlHelper.Parameter("@p1")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_composite_key(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_composite_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + {AssertSqlHelper.Declaration("@p1='707'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@p1")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_composite_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_composite_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + {AssertSqlHelper.Declaration("@p1='707'")} + + SELECT TOP 1 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@p1")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_composite_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_composite_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + {AssertSqlHelper.Declaration("@p1='707' (Nullable = true)")} + + SELECT TOP 1 `s`.`Id`, `s`.`ParentAlternateId`, `s`.`ParentId` + FROM `SingleCompositeKey` AS `s` + WHERE `s`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@p")} AND `s`.`ParentId` = {AssertSqlHelper.Parameter("@p1")} + """); + } + + public override async Task Load_collection_using_Query_composite_key(EntityState state, bool async) + { + await base.Load_collection_using_Query_composite_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + {AssertSqlHelper.Declaration("@p1='707' (Nullable = true)")} + + SELECT `c`.`Id`, `c`.`ParentAlternateId`, `c`.`ParentId` + FROM `ChildCompositeKey` AS `c` + WHERE `c`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@p")} AND `c`.`ParentId` = {AssertSqlHelper.Parameter("@p1")} + """); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_composite_key(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_composite_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + {AssertSqlHelper.Declaration("@p1='707'")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@p1")} + """); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_composite_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_composite_key(state, async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} + {AssertSqlHelper.Declaration("@p1='707'")} + + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@p")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@p1")} + """); + } + + public override async Task Load_one_to_one_reference_to_dependent_using_Query_composite_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_dependent_using_Query_composite_key(state, async); + + AssertSql( + state == EntityState.Detached + ? "" + : $""" +{AssertSqlHelper.Declaration("@p='Root' (Size = 255)")} +{AssertSqlHelper.Declaration("@p1='707' (Nullable = true)")} + +SELECT TOP 2 `s`.`Id`, `s`.`ParentAlternateId`, `s`.`ParentId` +FROM `SingleCompositeKey` AS `s` +WHERE `s`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@p")} AND `s`.`ParentId` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task Load_many_to_one_reference_to_principal_null_FK_composite_key(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_null_FK_composite_key(state, async); + + AssertSql(); + } + + public override async Task Load_one_to_one_reference_to_principal_null_FK_composite_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_null_FK_composite_key(state, async); + + AssertSql(); + } + + public override async Task Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(EntityState state, bool async) + { + await base.Load_many_to_one_reference_to_principal_using_Query_null_FK_composite_key(state, async); + + AssertSql( + $""" +SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` +FROM `Parent` AS `p` +WHERE FALSE +"""); + } + + public override async Task Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(EntityState state, bool async) + { + await base.Load_one_to_one_reference_to_principal_using_Query_null_FK_composite_key(state, async); + + AssertSql( + $""" + SELECT TOP 2 `p`.`Id`, `p`.`AlternateId` + FROM `Parent` AS `p` + WHERE FALSE + """); + } + + protected override void ClearLog() => Fixture.TestSqlLoggerFactory.Clear(); + + protected override void RecordLog() => Sql = Fixture.TestSqlLoggerFactory.Sql; + + private const string FileNewLine = """ + + + """; + + private void AssertSql(string? expected = null) + { + var sql = Sql ?? ""; + expected ??= ""; + try + { + Assert.Equal( + expected, sql, ignoreLineEndingDifferences: true); + } + catch + { + var methodCallLine = Environment.StackTrace.Split( + [Environment.NewLine], + StringSplitOptions.RemoveEmptyEntries)[2][6..]; + + var indexMethodEnding = methodCallLine.IndexOf(')') + 1; + var testName = methodCallLine[..indexMethodEnding]; + var parts = methodCallLine[indexMethodEnding..].Split(" ", StringSplitOptions.RemoveEmptyEntries); + var fileName = parts[1][..^5]; + var lineNumber = int.Parse(parts[2]); + + var currentDirectory = Directory.GetCurrentDirectory(); + var logFile = currentDirectory[..(currentDirectory.LastIndexOf( + $"{Path.DirectorySeparatorChar}artifacts{Path.DirectorySeparatorChar}", + StringComparison.Ordinal) + + 1)] + + "QueryBaseline.txt"; + + var testInfo = testName + " : " + lineNumber + FileNewLine; + var newBaseLine = $""" + AssertSql( + {"@\"" + sql.Replace("\"", "\"\"") + "\""}); + + + """; + + var contents = testInfo + newBaseLine + FileNewLine + "--------------------" + FileNewLine; + + File.AppendAllText(logFile, contents); + + throw; + } + } + + private string? Sql { get; set; } + + public class LoadLibRedFixture : LoadFixtureBase + { + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/LoggingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/LoggingLibRedTest.cs new file mode 100644 index 00000000..a283058f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/LoggingLibRedTest.cs @@ -0,0 +1,71 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Diagnostics.Internal; +using System; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using Microsoft.EntityFrameworkCore.Infrastructure; +using EntityFrameworkCore.LibRed.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using System.Reflection; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics; + +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class LoggingLibRedTest : LoggingRelationalTestBase + { + [ConditionalFact] + public virtual void StoredProcedureConcurrencyTokenNotMapped_throws_by_default() + { + using var context = new StoredProcedureConcurrencyTokenNotMappedContext(CreateOptionsBuilder(new ServiceCollection())); + + var definition = RelationalResources.LogStoredProcedureConcurrencyTokenNotMapped(CreateTestLogger()); + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.StoredProcedureConcurrencyTokenNotMapped.ToString(), + definition.GenerateMessage(nameof(Animal), "Animal_Update", nameof(Animal.Name)), + "RelationalEventId.StoredProcedureConcurrencyTokenNotMapped"), + Assert.Throws( + () => context.Model).Message); + } + + protected class StoredProcedureConcurrencyTokenNotMappedContext(DbContextOptionsBuilder optionsBuilder) : DbContext(optionsBuilder.Options) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity( + b => + { + b.Ignore(a => a.FavoritePerson); + b.Property(e => e.Name).IsRowVersion(); + b.UpdateUsingStoredProcedure( + b => + { + b.HasOriginalValueParameter(e => e.Id); + b.HasParameter(e => e.Name, p => p.IsOutput()); + b.HasRowsAffectedReturnValue(); + }); + }); + } + + protected override DbContextOptionsBuilder CreateOptionsBuilder( + IServiceCollection services, + Action> relationalAction) + => new DbContextOptionsBuilder() + .UseInternalServiceProvider(services.AddEntityFrameworkLibRed().BuildServiceProvider(validateScopes: true)) + .UseLibRed("Data Source=LoggingLibRedTest.db", TestEnvironment.DataAccessProviderFactory, relationalAction); + + protected override TestLogger CreateTestLogger() + => new TestLogger(); + protected override string DefaultOptions => "DataAccessProviderFactory"; + protected override string ProviderName => "EntityFrameworkCore.LibRed"; + protected override string ProviderVersion + => typeof(LibRedOptionsExtension).Assembly + .GetCustomAttribute()?.InformationalVersion; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ManyToManyFieldsLoadSqlServerTest.cs b/test/EFCore.LibRed.FunctionalTests/ManyToManyFieldsLoadSqlServerTest.cs new file mode 100644 index 00000000..47786de5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ManyToManyFieldsLoadSqlServerTest.cs @@ -0,0 +1,323 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestModels.ManyToManyFieldsModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +using Xunit.Sdk; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable +public class ManyToManyFieldsLoadLibRedTest : ManyToManyFieldsLoadTestBase< + ManyToManyFieldsLoadLibRedTest.ManyToManyFieldsLoadLibRedFixture> +{ + public ManyToManyFieldsLoadLibRedTest(ManyToManyFieldsLoadLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Load_collection(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Load_collection(state, queryTrackingBehavior, async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s0`.`OneId`, `s0`.`TwoId`, `s0`.`Id`, `s0`.`Name` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId`) +LEFT JOIN ( + SELECT `j0`.`OneId`, `j0`.`TwoId`, `e1`.`Id`, `e1`.`Name` + FROM `JoinOneToTwo` AS `j0` + INNER JOIN `EntityOnes` AS `e1` ON `j0`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`TwoId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s0`.`OneId`, `s0`.`TwoId` +"""); + } + + public override async Task Load_collection_using_Query_with_Include_for_inverse(bool async) + { + await base.Load_collection_using_Query_with_Include_for_inverse(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` + FROM `EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` + WHERE `e3`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId` +"""); + } + + public override async Task Load_collection_using_Query_with_Include_for_same_collection(bool async) + { + await base.Load_collection_using_Query_with_Include_for_same_collection(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`Name`, `s1`.`OneSkipSharedId0`, `s1`.`TwoSkipSharedId0`, `s1`.`Id0`, `s1`.`CollectionInverseId`, `s1`.`Name0`, `s1`.`ReferenceInverseId` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name`, `s0`.`OneSkipSharedId` AS `OneSkipSharedId0`, `s0`.`TwoSkipSharedId` AS `TwoSkipSharedId0`, `s0`.`Id` AS `Id0`, `s0`.`CollectionInverseId`, `s0`.`Name` AS `Name0`, `s0`.`ReferenceInverseId` + FROM (`EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id`) + LEFT JOIN ( + SELECT `e4`.`OneSkipSharedId`, `e4`.`TwoSkipSharedId`, `e5`.`Id`, `e5`.`CollectionInverseId`, `e5`.`Name`, `e5`.`ReferenceInverseId` + FROM `EntityOneEntityTwo` AS `e4` + INNER JOIN `EntityTwos` AS `e5` ON `e4`.`TwoSkipSharedId` = `e5`.`Id` + ) AS `s0` ON `e3`.`Id` = `s0`.`OneSkipSharedId` + WHERE `e3`.`Id` = @p +) AS `s1` ON `s`.`Id` = `s1`.`TwoSkipSharedId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`OneSkipSharedId0`, `s1`.`TwoSkipSharedId0` +"""); + } + + public override async Task Load_collection_using_Query_with_Include(bool async) + { + await base.Load_collection_using_Query_with_Include(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name`, `s1`.`ThreeId`, `s1`.`TwoId`, `s1`.`Id`, `s1`.`CollectionInverseId`, `s1`.`Name`, `s1`.`ReferenceInverseId` +FROM ((`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` + FROM `EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` + WHERE `e3`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId`) +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` +) AS `s1` ON `s`.`Id` = `s1`.`TwoId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s1`.`ThreeId`, `s1`.`TwoId` +"""); + } + + public override async Task Load_collection_using_Query_with_filtered_Include(bool async) + { + await base.Load_collection_using_Query_with_filtered_Include(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name`, `s1`.`ThreeId`, `s1`.`TwoId`, `s1`.`Id`, `s1`.`CollectionInverseId`, `s1`.`Name`, `s1`.`ReferenceInverseId` +FROM ((`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` + FROM `EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` + WHERE `e3`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId`) +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` + WHERE `e4`.`Id` IN (13, 11) +) AS `s1` ON `s`.`Id` = `s1`.`TwoId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s1`.`ThreeId`, `s1`.`TwoId` +"""); + } + + public override async Task Load_collection_using_Query_with_filtered_Include_and_projection(bool async) + { + await base.Load_collection_using_Query_with_filtered_Include_and_projection(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`Name`, ( + SELECT COUNT(*) + FROM `EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` + WHERE `s`.`Id` = `e2`.`TwoSkipSharedId`) AS `Count1`, ( + SELECT COUNT(*) + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` + WHERE `s`.`Id` = `j`.`TwoId`) AS `Count3` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`Name`, `e0`.`OneSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId` +WHERE `e`.`Id` = @p +ORDER BY `s`.`Id` +"""); + } + + public override async Task Load_collection_using_Query_with_join(bool async) + { + await base.Load_collection_using_Query_with_join(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id0`, `s2`.`OneSkipSharedId`, `s2`.`TwoSkipSharedId`, `s2`.`Id`, `s2`.`Name`, `s1`.`CollectionInverseId`, `s1`.`Name0`, `s1`.`ReferenceInverseId` +FROM ((`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `s0`.`Id` AS `Id0`, `s0`.`CollectionInverseId`, `s0`.`Name` AS `Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId` + FROM `EntityOnes` AS `e2` + INNER JOIN ( + SELECT `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId`, `e3`.`OneSkipSharedId`, `e3`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e3` + INNER JOIN `EntityTwos` AS `e4` ON `e3`.`TwoSkipSharedId` = `e4`.`Id` + ) AS `s0` ON `e2`.`Id` = `s0`.`OneSkipSharedId` +) AS `s1` ON `s`.`Id` = `s1`.`Id0`) +LEFT JOIN ( + SELECT `e5`.`OneSkipSharedId`, `e5`.`TwoSkipSharedId`, `e6`.`Id`, `e6`.`Name` + FROM `EntityOneEntityTwo` AS `e5` + INNER JOIN `EntityOnes` AS `e6` ON `e5`.`OneSkipSharedId` = `e6`.`Id` + WHERE `e6`.`Id` = @p +) AS `s2` ON `s`.`Id` = `s2`.`TwoSkipSharedId` +WHERE (`e`.`Id` = @p) AND (`s`.`Id` IS NOT NULL AND `s1`.`Id0` IS NOT NULL) +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s1`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id0`, `s2`.`OneSkipSharedId`, `s2`.`TwoSkipSharedId` +"""); + } + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + + protected override void RecordLog() + => Sql = Fixture.TestSqlLoggerFactory.Sql; + + private const string FileNewLine = """ + + + """; + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + /*private void AssertSql(string expected) + { + try + { + Assert.Equal( + expected, + Sql, + ignoreLineEndingDifferences: true); + } + catch + { + var methodCallLine = Environment.StackTrace.Split( + new[] { Environment.NewLine }, + StringSplitOptions.RemoveEmptyEntries)[2][6..]; + + var indexMethodEnding = methodCallLine.IndexOf(')') + 1; + var testName = methodCallLine.Substring(0, indexMethodEnding); + var parts = methodCallLine[indexMethodEnding..].Split(" ", StringSplitOptions.RemoveEmptyEntries); + var fileName = parts[1][..^5]; + var lineNumber = int.Parse(parts[2]); + + var currentDirectory = Directory.GetCurrentDirectory(); + var logFile = currentDirectory.Substring( + 0, + currentDirectory.LastIndexOf("\\artifacts\\", StringComparison.Ordinal) + 1) + + "QueryBaseline.txt"; + + var testInfo = testName + " : " + lineNumber + FileNewLine; + + var newBaseLine = $@" AssertSql( + {"@\"" + Sql.Replace("\"", "\"\"") + "\""}); + +"; + + var contents = testInfo + newBaseLine + FileNewLine + "--------------------" + FileNewLine; + + File.AppendAllText(logFile, contents); + + throw; + } + }*/ + + private string Sql { get; set; } + + public class ManyToManyFieldsLoadLibRedFixture : ManyToManyFieldsLoadFixtureBase, ITestSqlLoggerFactory + { + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValueSql("DATE()"); + + modelBuilder + .SharedTypeEntity>("JoinOneToThreePayloadFullShared") + .IndexerProperty("Payload") + .HasDefaultValue("Generated"); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValue("Generated"); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ManyToManyLoadSqlServerTest.cs b/test/EFCore.LibRed.FunctionalTests/ManyToManyLoadSqlServerTest.cs new file mode 100644 index 00000000..5111f44e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ManyToManyLoadSqlServerTest.cs @@ -0,0 +1,314 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestModels.ManyToManyModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; +#nullable disable +public class ManyToManyLoadLibRedTest : ManyToManyLoadTestBase +{ + public ManyToManyLoadLibRedTest(ManyToManyLoadLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Load_collection(EntityState state, QueryTrackingBehavior queryTrackingBehavior, bool async) + { + await base.Load_collection(state, queryTrackingBehavior, async); + + AssertSql( + state == EntityState.Detached + ? $""" +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId`, `s0`.`TwoId` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Name`, `j0`.`OneId`, `j0`.`TwoId` + FROM `JoinOneToTwo` AS `j0` + INNER JOIN `EntityOnes` AS `e1` ON `j0`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`TwoId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s0`.`OneId`, `s0`.`TwoId` +""" + : $""" +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s0`.`OneId`, `s0`.`TwoId`, `s0`.`JoinOneToTwoExtraId`, `s0`.`Id`, `s0`.`Name` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId`) +LEFT JOIN ( + SELECT `j0`.`OneId`, `j0`.`TwoId`, `j0`.`JoinOneToTwoExtraId`, `e1`.`Id`, `e1`.`Name` + FROM `JoinOneToTwo` AS `j0` + INNER JOIN `EntityOnes` AS `e1` ON `j0`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`TwoId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s0`.`OneId`, `s0`.`TwoId` +"""); + } + + public override async Task Load_collection_using_Query_with_Include_for_inverse(bool async) + { + await base.Load_collection_using_Query_with_Include_for_inverse(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` + FROM `EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` + WHERE `e3`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId` +"""); + } + + public override async Task Load_collection_using_Query_with_Include_for_same_collection(bool async) + { + await base.Load_collection_using_Query_with_Include_for_same_collection(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`Name`, `s1`.`OneSkipSharedId0`, `s1`.`TwoSkipSharedId0`, `s1`.`Id0`, `s1`.`CollectionInverseId`, `s1`.`ExtraId`, `s1`.`Name0`, `s1`.`ReferenceInverseId` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name`, `s0`.`OneSkipSharedId` AS `OneSkipSharedId0`, `s0`.`TwoSkipSharedId` AS `TwoSkipSharedId0`, `s0`.`Id` AS `Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name` AS `Name0`, `s0`.`ReferenceInverseId` + FROM (`EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id`) + LEFT JOIN ( + SELECT `e4`.`OneSkipSharedId`, `e4`.`TwoSkipSharedId`, `e5`.`Id`, `e5`.`CollectionInverseId`, `e5`.`ExtraId`, `e5`.`Name`, `e5`.`ReferenceInverseId` + FROM `EntityOneEntityTwo` AS `e4` + INNER JOIN `EntityTwos` AS `e5` ON `e4`.`TwoSkipSharedId` = `e5`.`Id` + ) AS `s0` ON `e3`.`Id` = `s0`.`OneSkipSharedId` + WHERE `e3`.`Id` = @p +) AS `s1` ON `s`.`Id` = `s1`.`TwoSkipSharedId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`OneSkipSharedId0`, `s1`.`TwoSkipSharedId0` +"""); + } + + public override async Task Load_collection_using_Query_with_Include(bool async) + { + await base.Load_collection_using_Query_with_Include(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name`, `s1`.`ThreeId`, `s1`.`TwoId`, `s1`.`Id`, `s1`.`CollectionInverseId`, `s1`.`Name`, `s1`.`ReferenceInverseId` +FROM ((`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` + FROM `EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` + WHERE `e3`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId`) +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` +) AS `s1` ON `s`.`Id` = `s1`.`TwoId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s1`.`ThreeId`, `s1`.`TwoId` +"""); + } + + public override async Task Load_collection_using_Query_with_filtered_Include(bool async) + { + await base.Load_collection_using_Query_with_filtered_Include(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name`, `s1`.`ThreeId`, `s1`.`TwoId`, `s1`.`Id`, `s1`.`CollectionInverseId`, `s1`.`Name`, `s1`.`ReferenceInverseId` +FROM ((`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` + FROM `EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` + WHERE `e3`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId`) +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` + WHERE `e4`.`Id` IN (13, 11) +) AS `s1` ON `s`.`Id` = `s1`.`TwoId` +WHERE `e`.`Id` = @p +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s1`.`ThreeId`, `s1`.`TwoId` +"""); + } + + public override async Task Load_collection_using_Query_with_filtered_Include_and_projection(bool async) + { + await base.Load_collection_using_Query_with_filtered_Include_and_projection(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`Name`, ( + SELECT COUNT(*) + FROM `EntityOneEntityTwo` AS `e2` + INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` + WHERE `s`.`Id` = `e2`.`TwoSkipSharedId`) AS `Count1`, ( + SELECT COUNT(*) + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` + WHERE `s`.`Id` = `j`.`TwoId`) AS `Count3` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`Name`, `e0`.`OneSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId` +WHERE `e`.`Id` = @p +ORDER BY `s`.`Id` +"""); + } + + public override async Task Load_collection_using_Query_with_join(bool async) + { + await base.Load_collection_using_Query_with_join(async); + + AssertSql( + """ +@p='3' + +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id0`, `s2`.`OneSkipSharedId`, `s2`.`TwoSkipSharedId`, `s2`.`Id`, `s2`.`Name`, `s1`.`CollectionInverseId`, `s1`.`ExtraId`, `s1`.`Name0`, `s1`.`ReferenceInverseId` +FROM ((`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `s0`.`Id` AS `Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name` AS `Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId` + FROM `EntityOnes` AS `e2` + INNER JOIN ( + SELECT `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`ExtraId`, `e4`.`Name`, `e4`.`ReferenceInverseId`, `e3`.`OneSkipSharedId`, `e3`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e3` + INNER JOIN `EntityTwos` AS `e4` ON `e3`.`TwoSkipSharedId` = `e4`.`Id` + ) AS `s0` ON `e2`.`Id` = `s0`.`OneSkipSharedId` +) AS `s1` ON `s`.`Id` = `s1`.`Id0`) +LEFT JOIN ( + SELECT `e5`.`OneSkipSharedId`, `e5`.`TwoSkipSharedId`, `e6`.`Id`, `e6`.`Name` + FROM `EntityOneEntityTwo` AS `e5` + INNER JOIN `EntityOnes` AS `e6` ON `e5`.`OneSkipSharedId` = `e6`.`Id` + WHERE `e6`.`Id` = @p +) AS `s2` ON `s`.`Id` = `s2`.`TwoSkipSharedId` +WHERE (`e`.`Id` = @p) AND (`s`.`Id` IS NOT NULL AND `s1`.`Id0` IS NOT NULL) +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s1`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id0`, `s2`.`OneSkipSharedId`, `s2`.`TwoSkipSharedId` +"""); + } + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + + protected override void RecordLog() + => Sql = Fixture.TestSqlLoggerFactory.Sql; + + private const string FileNewLine = """ + + + """; + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + private string Sql { get; set; } + + public class ManyToManyLoadLibRedFixture : ManyToManyLoadFixtureBase, ITestSqlLoggerFactory + { + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValueSql("DATE()"); + + modelBuilder + .SharedTypeEntity>("JoinOneToThreePayloadFullShared") + .IndexerProperty("Payload") + .HasDefaultValue("Generated"); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValue("Generated"); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValueSql("DATE()"); + + modelBuilder + .SharedTypeEntity>("UnidirectionalJoinOneToThreePayloadFullShared") + .IndexerProperty("Payload") + .HasDefaultValue("Generated"); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValue("Generated"); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingGeneratedKeysSqlServerTest.cs b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingGeneratedKeysSqlServerTest.cs new file mode 100644 index 00000000..53e73aec --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingGeneratedKeysSqlServerTest.cs @@ -0,0 +1,44 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestModels.ManyToManyModel; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class ManyToManyTrackingGeneratedKeysLibRedTest( + ManyToManyTrackingGeneratedKeysLibRedTest.ManyToManyTrackingGeneratedKeysLibRedFixture fixture) + : ManyToManyTrackingLibRedTestBase( + fixture) +{ + public class ManyToManyTrackingGeneratedKeysLibRedFixture : ManyToManyTrackingLibRedFixtureBase + { + protected override string StoreName + => "ManyToManyTrackingGeneratedKeys"; + + public override bool UseGeneratedKeys + => true; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Key1).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.SharedTypeEntity("PST").IndexerProperty("Id").ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Key1).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingLibRedTest.cs new file mode 100644 index 00000000..d500a1b8 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingLibRedTest.cs @@ -0,0 +1,16 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class ManyToManyTrackingLibRedTest(ManyToManyTrackingLibRedTest.ManyToManyTrackingLibRedFixture fixture) + : ManyToManyTrackingLibRedTestBase(fixture) +{ + public class ManyToManyTrackingLibRedFixture : ManyToManyTrackingLibRedFixtureBase + { + protected override string StoreName + => "ManyToManyTrackingLibRedTest"; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingLibRedTestBase.cs b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingLibRedTestBase.cs new file mode 100644 index 00000000..be425ee6 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingLibRedTestBase.cs @@ -0,0 +1,72 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestModels.ManyToManyModel; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public abstract class ManyToManyTrackingLibRedTestBase(TFixture fixture) + : ManyToManyTrackingRelationalTestBase(fixture) + where TFixture : ManyToManyTrackingLibRedTestBase.ManyToManyTrackingLibRedFixtureBase +{ + protected override Dictionary CustomDeleteBehaviors { get; } = new() + { + { "EntityBranch.RootSkipShared", DeleteBehavior.ClientCascade }, + { "EntityBranch2.Leaf2SkipShared", DeleteBehavior.ClientCascade }, + { "EntityBranch2.SelfSkipSharedLeft", DeleteBehavior.ClientCascade }, + { "EntityOne.SelfSkipPayloadLeft", DeleteBehavior.ClientCascade }, + { "EntityTableSharing1.TableSharing2Shared", DeleteBehavior.ClientCascade }, + { "EntityTwo.SelfSkipSharedLeft", DeleteBehavior.ClientCascade }, + { "UnidirectionalEntityBranch.UnidirectionalEntityRoot", DeleteBehavior.ClientCascade }, + { "UnidirectionalEntityOne.SelfSkipPayloadLeft", DeleteBehavior.ClientCascade }, + { "UnidirectionalEntityTwo.SelfSkipSharedRight", DeleteBehavior.ClientCascade }, + }; + + public class ManyToManyTrackingLibRedFixtureBase : ManyToManyTrackingRelationalFixture, ITestSqlLoggerFactory + { + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValueSql("DATE()"); + + modelBuilder + .SharedTypeEntity>("JoinOneToThreePayloadFullShared") + .IndexerProperty("Payload") + .HasDefaultValue("Generated"); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValue("Generated"); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValueSql("DATE()"); + + modelBuilder + .SharedTypeEntity>("UnidirectionalJoinOneToThreePayloadFullShared") + .IndexerProperty("Payload") + .HasDefaultValue("Generated"); + + modelBuilder + .Entity() + .Property(e => e.Payload) + .HasDefaultValue("Generated"); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingProxyGeneratedKeysLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingProxyGeneratedKeysLibRedTest.cs new file mode 100644 index 00000000..a0fdd0b8 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingProxyGeneratedKeysLibRedTest.cs @@ -0,0 +1,84 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestModels.ManyToManyModel; +using Microsoft.Extensions.DependencyInjection; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class ManyToManyTrackingProxyGeneratedKeysLibRedTest( + ManyToManyTrackingProxyGeneratedKeysLibRedTest.ManyToManyTrackingProxyGeneratedKeysLibRedFixture fixture) + : ManyToManyTrackingLibRedTestBase< + ManyToManyTrackingProxyGeneratedKeysLibRedTest.ManyToManyTrackingProxyGeneratedKeysLibRedFixture>(fixture) +{ + public override Task Can_insert_many_to_many_shared_with_payload(bool async) + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + public override Task Can_update_many_to_many_shared_with_payload() + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + public override Task Can_insert_update_delete_shared_type_entity_type() + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + public override Task Can_insert_many_to_many_shared_with_payload_unidirectional(bool async) + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + public override Task Can_update_many_to_many_shared_with_payload_unidirectional() + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + protected override bool RequiresDetectChanges + => false; + + public class ManyToManyTrackingProxyGeneratedKeysLibRedFixture : ManyToManyTrackingLibRedFixtureBase + { + protected override string StoreName + => "ManyToManyTrackingProxyGeneratedKeys"; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base.AddOptions(builder).UseChangeTrackingProxies(); + + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection.AddEntityFrameworkProxies()); + + public override bool UseGeneratedKeys + => true; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder + .SharedTypeEntity>("JoinOneToThreePayloadFullShared") + .Ignore("Payload"); // Mutable properties aren't proxyable on Dictionary + + modelBuilder + .SharedTypeEntity>("UnidirectionalJoinOneToThreePayloadFullShared") + .Ignore("Payload"); // Mutable properties aren't proxyable on Dictionary + + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Key1).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.SharedTypeEntity("PST").IndexerProperty("Id").ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Key1).ValueGeneratedOnAdd(); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingProxyLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingProxyLibRedTest.cs new file mode 100644 index 00000000..676d5bb4 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ManyToManyTrackingProxyLibRedTest.cs @@ -0,0 +1,84 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestModels.ManyToManyModel; +using Microsoft.Extensions.DependencyInjection; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class ManyToManyTrackingProxyLibRedTest(ManyToManyTrackingProxyLibRedTest.ManyToManyTrackingProxyLibRedFixture fixture) + : ManyToManyTrackingLibRedTestBase(fixture) +{ + protected override Dictionary CustomDeleteBehaviors { get; } = new() + { + { "EntityBranch.RootSkipShared", DeleteBehavior.ClientCascade }, + { "EntityBranch2.Leaf2SkipShared", DeleteBehavior.ClientCascade }, + { "EntityBranch2.SelfSkipSharedLeft", DeleteBehavior.Restrict }, + { "EntityBranch2.SelfSkipSharedRight", DeleteBehavior.Restrict }, + { "EntityOne.SelfSkipPayloadLeft", DeleteBehavior.ClientCascade }, + { "EntityTwo.SelfSkipSharedLeft", DeleteBehavior.ClientCascade }, + { "EntityTableSharing1.TableSharing2Shared", DeleteBehavior.ClientCascade }, + { "UnidirectionalEntityBranch.UnidirectionalEntityRoot", DeleteBehavior.ClientCascade }, + { "UnidirectionalEntityOne.SelfSkipPayloadLeft", DeleteBehavior.ClientCascade }, + { "UnidirectionalEntityTwo.SelfSkipSharedRight", DeleteBehavior.ClientCascade } + }; + + public override Task Can_insert_many_to_many_shared_with_payload(bool async) + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + public override Task Can_update_many_to_many_shared_with_payload() + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + public override Task Can_insert_update_delete_shared_type_entity_type() + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + public override Task Can_insert_many_to_many_shared_with_payload_unidirectional(bool async) + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + public override Task Can_update_many_to_many_shared_with_payload_unidirectional() + // Mutable properties aren't proxyable on Dictionary + => Task.CompletedTask; + + protected override bool RequiresDetectChanges + => false; + + public class ManyToManyTrackingProxyLibRedFixture : ManyToManyTrackingLibRedFixtureBase + { + protected override string StoreName + => "ManyToManyTrackingProxies"; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base.AddOptions(builder).UseChangeTrackingProxies(); + + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection.AddEntityFrameworkProxies()); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity() + .HasMany(e => e.SelfSkipSharedLeft) + .WithMany(e => e.SelfSkipSharedRight) + .UsingEntity>( + "EntityBranch2EntityBranch2", + r => r.HasOne().WithMany().HasForeignKey("SelfSkipSharedRightId").OnDelete(DeleteBehavior.Restrict), + l => l.HasOne().WithMany().HasForeignKey("SelfSkipSharedLeftId").OnDelete(DeleteBehavior.Restrict)); + + modelBuilder + .SharedTypeEntity>("JoinOneToThreePayloadFullShared") + .Ignore("Payload"); // Mutable properties aren't proxyable on Dictionary + + modelBuilder + .SharedTypeEntity>("UnidirectionalJoinOneToThreePayloadFullShared") + .Ignore("Payload"); // Mutable properties aren't proxyable on Dictionary + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/MaterializationInterceptionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/MaterializationInterceptionLibRedTest.cs new file mode 100644 index 00000000..52d4aa79 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/MaterializationInterceptionLibRedTest.cs @@ -0,0 +1,33 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#nullable enable + +using System.Collections.Generic; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class MaterializationInterceptionLibRedTest(NonSharedFixture fixture) : + MaterializationInterceptionTestBase(fixture) +{ + public class LibRedLibraryContext(DbContextOptions options) : LibraryContext(options) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().OwnsMany(e => e.Settings, b => b.ToJson()); + } + } + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Migrations/MigrationsInfrastructureLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Migrations/MigrationsInfrastructureLibRedTest.cs new file mode 100644 index 00000000..362d8237 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Migrations/MigrationsInfrastructureLibRedTest.cs @@ -0,0 +1,1553 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Identity30.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestModels.AspNetIdentity; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Threading.Tasks; +using Xunit; +using static Microsoft.EntityFrameworkCore.Migrations.MigrationsInfrastructureFixtureBase; +using LibRedDatabaseCreator = EntityFrameworkCore.LibRed.Storage.Internal.LibRedDatabaseCreator; + +// ReSharper disable InconsistentNaming + +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests.Migrations +{ + [LibRedCondition(LibRedCondition.IsNotCI)] + public class MigrationsInfrastructureLibRedTest( + MigrationsInfrastructureLibRedTest.MigrationsInfrastructureLibRedFixture fixture) + : MigrationsInfrastructureTestBase(fixture) + { + public override async Task Can_generate_migration_from_initial_database_to_initial() + { + await base.Can_generate_migration_from_initial_database_to_initial(); + + Assert.Equal( + """ + IF NOT EXISTS (SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = '__EFMigrationsHistory') THEN CREATE TABLE `__EFMigrationsHistory` ( + `MigrationId` varchar(150) NOT NULL, + `ProductVersion` varchar(32) NOT NULL, + CONSTRAINT `PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`) + ); + ; + + + """, + Sql, + ignoreLineEndingDifferences: true); + } + + public override async Task Can_generate_no_migration_script() + { + await base.Can_generate_no_migration_script(); + + Assert.Equal( + """ + IF NOT EXISTS (SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = '__EFMigrationsHistory') THEN CREATE TABLE `__EFMigrationsHistory` ( + `MigrationId` varchar(150) NOT NULL, + `ProductVersion` varchar(32) NOT NULL, + CONSTRAINT `PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`) + ); + ; + + + """, + Sql, + ignoreLineEndingDifferences: true); + } + + public override async Task Can_generate_up_and_down_scripts() + { + await base.Can_generate_up_and_down_scripts(); + + Assert.Equal( + """ +IF NOT EXISTS (SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = '__EFMigrationsHistory') THEN CREATE TABLE `__EFMigrationsHistory` ( + `MigrationId` varchar(150) NOT NULL, + `ProductVersion` varchar(32) NOT NULL, + CONSTRAINT `PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`) + ); +; + +BEGIN TRANSACTION; +CREATE TABLE `Table1` ( + `Id` integer NOT NULL, + `Foo` integer NOT NULL, + `Description` varchar(255) NOT NULL, + CONSTRAINT `PK_Table1` PRIMARY KEY (`Id`) +); + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000001_Migration1', '7.0.0-test'); + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +ALTER TABLE `Table1` RENAME COLUMN `Foo` TO `Bar`; + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000002_Migration2', '7.0.0-test'); + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000003_Migration3', '7.0.0-test'); + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000004_Migration4', '7.0.0-test'); + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000005_Migration5', '7.0.0-test'); + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000006_Migration6', '7.0.0-test'); + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000007_Migration7', '7.0.0-test'); + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000007_Migration7'; + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000006_Migration6'; + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000005_Migration5'; + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000004_Migration4'; + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000003_Migration3'; + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +ALTER TABLE `Table1` RENAME COLUMN `Bar` TO `Foo`; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000002_Migration2'; + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +DROP TABLE `Table1`; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000001_Migration1'; + +COMMIT TRANSACTION; + + +""", + Sql, + ignoreLineEndingDifferences: true); + } + + public override async Task Can_generate_up_and_down_scripts_noTransactions() + { + await base.Can_generate_up_and_down_scripts_noTransactions(); + + Assert.Equal( + """ +IF NOT EXISTS (SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = '__EFMigrationsHistory') THEN CREATE TABLE `__EFMigrationsHistory` ( + `MigrationId` varchar(150) NOT NULL, + `ProductVersion` varchar(32) NOT NULL, + CONSTRAINT `PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`) + ); +; + +CREATE TABLE `Table1` ( + `Id` integer NOT NULL, + `Foo` integer NOT NULL, + `Description` varchar(255) NOT NULL, + CONSTRAINT `PK_Table1` PRIMARY KEY (`Id`) +); + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000001_Migration1', '7.0.0-test'); + +ALTER TABLE `Table1` RENAME COLUMN `Foo` TO `Bar`; + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000002_Migration2', '7.0.0-test'); + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000003_Migration3', '7.0.0-test'); + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000004_Migration4', '7.0.0-test'); + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000005_Migration5', '7.0.0-test'); + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000006_Migration6', '7.0.0-test'); + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000007_Migration7', '7.0.0-test'); + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000007_Migration7'; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000006_Migration6'; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000005_Migration5'; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000004_Migration4'; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000003_Migration3'; + +ALTER TABLE `Table1` RENAME COLUMN `Bar` TO `Foo`; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000002_Migration2'; + +DROP TABLE `Table1`; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000001_Migration1'; + + +""", + Sql, + ignoreLineEndingDifferences: true); + } + + public override async Task Can_generate_one_up_and_down_script() + { + await base.Can_generate_one_up_and_down_script(); + + Assert.Equal( + """ +BEGIN TRANSACTION; +ALTER TABLE `Table1` RENAME COLUMN `Foo` TO `Bar`; + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000002_Migration2', '7.0.0-test'); + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +ALTER TABLE `Table1` RENAME COLUMN `Bar` TO `Foo`; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000002_Migration2'; + +COMMIT TRANSACTION; + + +""", + Sql, + ignoreLineEndingDifferences: true); + } + + public override async Task Can_generate_up_and_down_script_using_names() + { + await base.Can_generate_up_and_down_script_using_names(); + + Assert.Equal( + """ +BEGIN TRANSACTION; +ALTER TABLE `Table1` RENAME COLUMN `Foo` TO `Bar`; + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('00000000000002_Migration2', '7.0.0-test'); + +COMMIT TRANSACTION; + +BEGIN TRANSACTION; +ALTER TABLE `Table1` RENAME COLUMN `Bar` TO `Foo`; + +DELETE FROM `__EFMigrationsHistory` +WHERE `MigrationId` = '00000000000002_Migration2'; + +COMMIT TRANSACTION; + + +""", + Sql, + ignoreLineEndingDifferences: true); + } + + public override async Task Can_generate_idempotent_up_and_down_scripts() + { + await Assert.ThrowsAsync(async () => await base.Can_generate_idempotent_up_and_down_scripts()); + } + + public override async Task Can_generate_idempotent_up_and_down_scripts_noTransactions() + { + await Assert.ThrowsAsync(async () => await base.Can_generate_idempotent_up_and_down_scripts_noTransactions()); + } + + public override void Can_get_active_provider() + { + base.Can_get_active_provider(); + + Assert.Equal("EntityFrameworkCore.LibRed", ActiveProvider); + } + + [ConditionalFact] + public void Throws_when_no_migrations() + { + using var context = new DbContext( + Fixture.TestStore.AddProviderOptions( + new DbContextOptionsBuilder().EnableServiceProviderCaching(false) + .ConfigureWarnings(e => e.Throw(RelationalEventId.MigrationsNotFound))).Options); + + context.Database.EnsureDeleted(); + GiveMeSomeTime(context); + + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.MigrationsNotFound.ToString(), + RelationalResources.LogNoMigrationsFound(new TestLogger()) + .GenerateMessage(typeof(DbContext).Assembly.GetName().Name), + "RelationalEventId.MigrationsNotFound"), + (Assert.Throws(context.Database.Migrate)).Message); + } + + [ConditionalFact] + public async Task Throws_when_no_migrations_async() + { + using var context = new DbContext( + Fixture.TestStore.AddProviderOptions( + new DbContextOptionsBuilder().EnableServiceProviderCaching(false) + .ConfigureWarnings(e => e.Throw(RelationalEventId.MigrationsNotFound))).Options); + + await context.Database.EnsureDeletedAsync(); + await GiveMeSomeTimeAsync(context); + + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.MigrationsNotFound.ToString(), + RelationalResources.LogNoMigrationsFound(new TestLogger()) + .GenerateMessage(typeof(DbContext).Assembly.GetName().Name), + "RelationalEventId.MigrationsNotFound"), + (await Assert.ThrowsAsync(() => context.Database.MigrateAsync())).Message); + } + + [ConditionalFact] + public void Throws_when_no_snapshot() + { + using var context = new MigrationsContext( + Fixture.TestStore.AddProviderOptions( + new DbContextOptionsBuilder().EnableServiceProviderCaching(false) + .ConfigureWarnings(e => e.Throw(RelationalEventId.ModelSnapshotNotFound))).Options); + + context.Database.EnsureDeleted(); + GiveMeSomeTime(context); + + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.ModelSnapshotNotFound.ToString(), + RelationalResources.LogNoModelSnapshotFound(new TestLogger()) + .GenerateMessage(typeof(MigrationsContext).Assembly.GetName().Name), + "RelationalEventId.ModelSnapshotNotFound"), + (Assert.Throws(context.Database.Migrate)).Message); + } + + [ConditionalFact] + public async Task Throws_when_no_snapshot_async() + { + using var context = new MigrationsContext( + Fixture.TestStore.AddProviderOptions( + new DbContextOptionsBuilder().EnableServiceProviderCaching(false) + .ConfigureWarnings(e => e.Throw(RelationalEventId.ModelSnapshotNotFound))).Options); + + await context.Database.EnsureDeletedAsync(); + await GiveMeSomeTimeAsync(context); + + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.ModelSnapshotNotFound.ToString(), + RelationalResources.LogNoModelSnapshotFound(new TestLogger()) + .GenerateMessage(typeof(MigrationsContext).Assembly.GetName().Name), + "RelationalEventId.ModelSnapshotNotFound"), + (await Assert.ThrowsAsync(() => context.Database.MigrateAsync())).Message); + } + + [ConditionalFact] + public void Throws_for_nondeterministic_HasData() + { + using var context = new BloggingContext( + Fixture.TestStore.AddProviderOptions( + new DbContextOptionsBuilder().EnableServiceProviderCaching(false)).Options, + randomData: true); + + context.Database.EnsureDeleted(); + GiveMeSomeTime(context); + + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.PendingModelChangesWarning.ToString(), + RelationalResources.LogNonDeterministicModel(new TestLogger()) + .GenerateMessage(nameof(BloggingContext)), + "RelationalEventId.PendingModelChangesWarning"), + (Assert.Throws(context.Database.Migrate)).Message); + } + + [ConditionalFact] + public async Task Throws_for_nondeterministic_HasData_async() + { + using var context = new BloggingContext( + Fixture.TestStore.AddProviderOptions( + new DbContextOptionsBuilder().EnableServiceProviderCaching(false)).Options, + randomData: true); + + await context.Database.EnsureDeletedAsync(); + await GiveMeSomeTimeAsync(context); + + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.PendingModelChangesWarning.ToString(), + RelationalResources.LogNonDeterministicModel(new TestLogger()) + .GenerateMessage(nameof(BloggingContext)), + "RelationalEventId.PendingModelChangesWarning"), + (await Assert.ThrowsAsync(() => context.Database.MigrateAsync())).Message); + } + + [ConditionalFact] + public void Throws_for_pending_model_changes() + { + using var context = new BloggingContext( + Fixture.TestStore.AddProviderOptions( + new DbContextOptionsBuilder().EnableServiceProviderCaching(false)).Options, + randomData: false); + + context.Database.EnsureDeleted(); + GiveMeSomeTime(context); + + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.PendingModelChangesWarning.ToString(), + RelationalResources.LogPendingModelChanges(new TestLogger()) + .GenerateMessage(nameof(BloggingContext)), + "RelationalEventId.PendingModelChangesWarning"), + (Assert.Throws(context.Database.Migrate)).Message); + } + + [ConditionalFact] + public async Task Throws_for_pending_model_changes_async() + { + using var context = new BloggingContext( + Fixture.TestStore.AddProviderOptions( + new DbContextOptionsBuilder().EnableServiceProviderCaching(false)).Options, + randomData: false); + + await context.Database.EnsureDeletedAsync(); + await GiveMeSomeTimeAsync(context); + + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.PendingModelChangesWarning.ToString(), + RelationalResources.LogPendingModelChanges(new TestLogger()) + .GenerateMessage(nameof(BloggingContext)), + "RelationalEventId.PendingModelChangesWarning"), + (await Assert.ThrowsAsync(() => context.Database.MigrateAsync())).Message); + } + + [ConditionalFact] + public async Task Empty_Migration_Creates_Database() + { + using var context = new BloggingContext( + Fixture.TestStore.AddProviderOptions( + new DbContextOptionsBuilder().EnableServiceProviderCaching(false)) + .ConfigureWarnings(e => e.Log(RelationalEventId.PendingModelChangesWarning)).Options); + + context.Database.EnsureDeleted(); + GiveMeSomeTime(context); + + var creator = (LibRedDatabaseCreator)context.GetService(); + //creator.RetryTimeout = TimeSpan.FromMinutes(10); + + await context.Database.MigrateAsync("Empty"); + + Assert.True(creator.Exists()); + } + + public override void Can_apply_all_migrations() // Issue efcore #33331 + => base.Can_apply_all_migrations(); + + public override Task Can_apply_all_migrations_async() // Issue efcore #33331 + => base.Can_apply_all_migrations_async(); + + [ConditionalFact(Skip ="For now")] + public override void Can_apply_one_migration_in_parallel() + { + base.Can_apply_one_migration_in_parallel(); + } + + [ConditionalFact(Skip = "For now")] + public override Task Can_apply_one_migration_in_parallel_async() + { + return base.Can_apply_one_migration_in_parallel_async(); + } + + [ConditionalFact(Skip = "For now")] + public override void Can_apply_second_migration_in_parallel() + { + base.Can_apply_second_migration_in_parallel(); + } + + [ConditionalFact(Skip = "For now")] + public override Task Can_apply_second_migration_in_parallel_async() + { + return base.Can_apply_second_migration_in_parallel_async(); + } + + private class BloggingContext(DbContextOptions options, bool? randomData = null) : DbContext(options) + { + // ReSharper disable once UnusedMember.Local + public DbSet Blogs { get; set; } + + // ReSharper disable once ClassNeverInstantiated.Local + public class Blog + { + // ReSharper disable UnusedMember.Local + public int Id { get; set; } + + public string Name { get; set; } + // ReSharper restore UnusedMember.Local + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + if (randomData != null) + { + modelBuilder.Entity().HasData( + new Blog { Id = randomData.Value ? (int)new Random().NextInt64(int.MaxValue) : 1, Name = "HalfADonkey" }); + } + } + } + + [DbContext(typeof(BloggingContext))] + partial class BloggingContextSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + JetModelBuilderExtensions.UseJetIdentityColumns(modelBuilder); + + modelBuilder.Entity("Microsoft.EntityFrameworkCore.Migrations.MigrationsInfrastructureLibRedTest+BloggingContext+Blog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + JetPropertyBuilderExtensions.UseJetIdentityColumn(b.Property("Id")); + + b.Property("Name") + .HasColumnType("nvarchar(255)"); + + b.HasKey("Id"); + + b.ToTable("Blogs"); + }); +#pragma warning restore 612, 618 + } + } + + [DbContext(typeof(BloggingContext))] + [Migration("00000000000000_Empty")] + public class EmptyMigration : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + } + } + + public override void Can_diff_against_2_2_model() + { + using var context = new ModelSnapshot22.BloggingContext(); + DiffSnapshot(new BloggingContextModelSnapshot22(), context); + } + + public class BloggingContextModelSnapshot22 : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.4-servicing-10062") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity( + "ModelSnapshot22.Blog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + b.Property("Name"); + + b.HasKey("Id"); + + b.ToTable("Blogs"); + + b.HasData( + new { Id = 1, Name = "HalfADonkey" }); + }); + + modelBuilder.Entity( + "ModelSnapshot22.Post", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + b.Property("BlogId"); + + b.Property("Content"); + + b.Property("EditDate"); + + b.Property("Title"); + + b.HasKey("Id"); + + b.HasIndex("BlogId"); + + b.ToTable("Post"); + }); + + modelBuilder.Entity( + "ModelSnapshot22.Post", b => + { + b.HasOne("ModelSnapshot22.Blog", "Blog") + .WithMany("Posts") + .HasForeignKey("BlogId"); + }); +#pragma warning restore 612, 618 + } + } + + public override void Can_diff_against_2_1_ASP_NET_Identity_model() + { + using var context = new ApplicationDbContext(); + DiffSnapshot(new AspNetIdentity21ModelSnapshot(), context); + } + + public class AspNetIdentity21ModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Name") + .HasMaxLength(256); + + b.Property("NormalizedName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex") // Don't change to HasDatabaseName + .HasFilter("IGNORE NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("RoleId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Email") + .HasMaxLength(256); + + b.Property("EmailConfirmed"); + + b.Property("LockoutEnabled"); + + b.Property("LockoutEnd"); + + b.Property("NormalizedEmail") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .HasMaxLength(256); + + b.Property("PasswordHash"); + + b.Property("PhoneNumber"); + + b.Property("PhoneNumberConfirmed"); + + b.Property("SecurityStamp"); + + b.Property("TwoFactorEnabled"); + + b.Property("UserName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex") + .HasFilter("IGNORE NULL"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasMaxLength(128); + + b.Property("ProviderDisplayName"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId"); + + b.Property("LoginProvider") + .HasMaxLength(128); + + b.Property("Name") + .HasMaxLength(128); + + b.Property("Value"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } + + public override void Can_diff_against_2_2_ASP_NET_Identity_model() + { + using var context = new ApplicationDbContext(); + DiffSnapshot(new AspNetIdentity22ModelSnapshot(), context); + } + + public class AspNetIdentity22ModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.0-preview1") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Name") + .HasMaxLength(256); + + b.Property("NormalizedName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex") + .HasFilter("IGNORE NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("RoleId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Email") + .HasMaxLength(256); + + b.Property("EmailConfirmed"); + + b.Property("LockoutEnabled"); + + b.Property("LockoutEnd"); + + b.Property("NormalizedEmail") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .HasMaxLength(256); + + b.Property("PasswordHash"); + + b.Property("PhoneNumber"); + + b.Property("PhoneNumberConfirmed"); + + b.Property("SecurityStamp"); + + b.Property("TwoFactorEnabled"); + + b.Property("UserName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex") + .HasFilter("IGNORE NULL"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasMaxLength(128); + + b.Property("ProviderDisplayName"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId"); + + b.Property("LoginProvider") + .HasMaxLength(128); + + b.Property("Name") + .HasMaxLength(128); + + b.Property("Value"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } + + public override void Can_diff_against_3_0_ASP_NET_Identity_model() + { + using var context = new ApplicationDbContext(); + DiffSnapshot(new AspNetIdentity30ModelSnapshot(), context); + } + + protected override Task ExecuteSqlAsync(string value) + { + ((LibRedTestStore)Fixture.TestStore).ExecuteScript(value); + return Task.CompletedTask; + } + + public class AspNetIdentity30ModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("longchar"); + + b.Property("Name") + .HasColumnType("longchar") + .HasMaxLength(255); + + b.Property("NormalizedName") + .HasColumnType("longchar") + .HasMaxLength(255); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex") + .HasFilter("IGNORE NULL"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType") + .HasColumnType("longchar"); + + b.Property("ClaimValue") + .HasColumnType("longchar"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("longchar"); + + b.Property("Email") + .HasColumnType("longchar") + .HasMaxLength(255); + + b.Property("EmailConfirmed") + .HasColumnType("smallint"); + + b.Property("LockoutEnabled") + .HasColumnType("smallint"); + + b.Property("LockoutEnd") + .HasColumnType("datetime"); + + b.Property("NormalizedEmail") + .HasColumnType("longchar") + .HasMaxLength(255); + + b.Property("NormalizedUserName") + .HasColumnType("longchar") + .HasMaxLength(255); + + b.Property("PasswordHash") + .HasColumnType("longchar"); + + b.Property("PhoneNumber") + .HasColumnType("longchar"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("smallint"); + + b.Property("SecurityStamp") + .HasColumnType("longchar"); + + b.Property("TwoFactorEnabled") + .HasColumnType("smallint"); + + b.Property("UserName") + .HasColumnType("longchar") + .HasMaxLength(255); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex") + .HasFilter("IGNORE NULL"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType") + .HasColumnType("longchar"); + + b.Property("ClaimValue") + .HasColumnType("longchar"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("varchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("varchar(128)") + .HasMaxLength(128); + + b.Property("ProviderDisplayName") + .HasColumnType("longchar"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("varchar(255)"); + + b.Property("RoleId") + .HasColumnType("varchar(255)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("varchar(255)"); + + b.Property("LoginProvider") + .HasColumnType("varchar(128)") + .HasMaxLength(128); + + b.Property("Name") + .HasColumnType("varchar(128)") + .HasMaxLength(128); + + b.Property("Value") + .HasColumnType("longchar"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity( + "Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } + + + public class MigrationsInfrastructureLibRedFixture : MigrationsInfrastructureFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override MigrationsContext CreateContext() + { + var options = AddOptions(TestStore.AddProviderOptions(new DbContextOptionsBuilder())) + .UseLibRed(TestStore.ConnectionString, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(ServiceProvider) + .Options; + return new MigrationsContext(options); + } + } + } +} + +namespace ModelSnapshot22 +{ + public class Blog + { + public int Id { get; set; } + public string Name { get; set; } + + public ICollection Posts { get; set; } + } + + public class Post + { + public int Id { get; set; } + public string Title { get; set; } + public string Content { get; set; } + public DateTime EditDate { get; set; } + + public Blog Blog { get; set; } + } + + public class BloggingContext : DbContext + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseLibRed(@"Server=(localdb)\mssqllocaldb;Database=Test;ConnectRetryCount=0", TestEnvironment.DataAccessProviderFactory); + + public DbSet Blogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasData( + new Blog { Id = 1, Name = "HalfADonkey" }); + } + } +} + +namespace Identity30.Data +{ + public class ApplicationDbContext : IdentityDbContext + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseLibRed(@"Server=(localdb)\mssqllocaldb;Database=Test;ConnectRetryCount=0", TestEnvironment.DataAccessProviderFactory); + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + + builder.Entity( + b => + { + b.HasIndex(u => u.NormalizedUserName).HasDatabaseName("UserNameIndex").IsUnique(); + b.HasIndex(u => u.NormalizedEmail).HasDatabaseName("EmailIndex"); + b.ToTable("AspNetUsers"); + }); + + builder.Entity>( + b => + { + b.ToTable("AspNetUserClaims"); + }); + + builder.Entity>( + b => + { + b.ToTable("AspNetUserLogins"); + }); + + builder.Entity>( + b => + { + b.ToTable("AspNetUserTokens"); + }); + + builder.Entity( + b => + { + b.HasIndex(r => r.NormalizedName).HasDatabaseName("RoleNameIndex").IsUnique(); + b.ToTable("AspNetRoles"); + }); + + builder.Entity>( + b => + { + b.ToTable("AspNetRoleClaims"); + }); + + builder.Entity>( + b => + { + b.ToTable("AspNetUserRoles"); + }); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Migrations/MigrationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Migrations/MigrationsLibRedTest.cs new file mode 100644 index 00000000..b16480de --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Migrations/MigrationsLibRedTest.cs @@ -0,0 +1,2217 @@ + +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.Jet.Internal; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Scaffolding.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Scaffolding.Metadata.Internal; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using Xunit.Abstractions; + +// ReSharper disable StringLiteralTypo +// ReSharper disable UnusedParameter.Local +// ReSharper disable ParameterOnlyUsedForPreconditionCheck.Local + +#nullable enable + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Migrations; + +[LibRedCondition(LibRedCondition.IsNotCI)] +public class MigrationsLibRedTest : MigrationsTestBase +{ + protected static string EOL + => Environment.NewLine; + + public MigrationsLibRedTest(MigrationsLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + // LibRed reuses EFCore.Jet's design-time code generators, so generated model snapshots + // reference Jet types (JetValueGenerationStrategy, using EntityFrameworkCore.Jet). The base + // compiles the snapshot against ActiveProvider only, which is now "EntityFrameworkCore.LibRed" + // (since LibRed owns its provider identity) and does not contain those Jet types. Add the Jet + // assembly explicitly. Remove once LibRed owns its own migrations annotation/code generators + // (same transitional coupling as this project's CA1416 suppression). + protected override ICollection GetAdditionalReferences() + => [.. base.GetAdditionalReferences(), BuildReference.ByName("EntityFrameworkCore.Jet")]; + + public override async Task Create_table() + { + await base.Create_table(); + + AssertSql( + """ +CREATE TABLE `People` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + CONSTRAINT `PK_People` PRIMARY KEY (`Id`) +); +"""); + } + + public override async Task Create_table_all_settings() + { + await base.Create_table_all_settings(); + + AssertSql( + """ +IF SCHEMA_ID(N'dbo2') IS NULL EXEC(N'CREATE SCHEMA [dbo2];'); +""", + // + """ +CREATE TABLE [dbo2].[People] ( + [CustomId] int NOT NULL IDENTITY, + [EmployerId] int NOT NULL, + [SSN] nvarchar(11) COLLATE German_PhoneBook_CI_AS NOT NULL, + CONSTRAINT [PK_People] PRIMARY KEY ([CustomId]), + CONSTRAINT [AK_People_SSN] UNIQUE ([SSN]), + CONSTRAINT [CK_People_EmployerId] CHECK ([EmployerId] > 0), + CONSTRAINT [FK_People_Employers_EmployerId] FOREIGN KEY ([EmployerId]) REFERENCES [Employers] ([Id]) ON DELETE CASCADE +); +DECLARE @description AS sql_variant; +SET @description = N'Table comment'; +EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', N'dbo2', 'TABLE', N'People'; +SET @description = N'Employer ID comment'; +EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', N'dbo2', 'TABLE', N'People', 'COLUMN', N'EmployerId'; +""", + // + """ +CREATE INDEX [IX_People_EmployerId] ON [dbo2].[People] ([EmployerId]); +"""); + } + + public override async Task Create_table_no_key() + { + await base.Create_table_no_key(); + + AssertSql( + """ +CREATE TABLE `Anonymous` ( + `SomeColumn` integer NOT NULL +); +"""); + } + + public override async Task Create_table_with_comments() + { + await base.Create_table_with_comments(); + + AssertSql( + """ +CREATE TABLE `People` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + CONSTRAINT `PK_People` PRIMARY KEY (`Id`) +); +"""); + } + + public override async Task Create_table_with_multiline_comments() + { + await base.Create_table_with_multiline_comments(); + + AssertSql( + """ +CREATE TABLE `People` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + CONSTRAINT `PK_People` PRIMARY KEY (`Id`) +); +"""); + } + + public override async Task Create_table_with_computed_column(bool? stored) + { + await base.Create_table_with_computed_column(stored); + + var storedSql = stored == true ? " PERSISTED" : ""; + + AssertSql( + $""" +CREATE TABLE [People] ( + [Id] int NOT NULL IDENTITY, + [Sum] AS [X] + [Y]{storedSql}, + [X] int NOT NULL, + [Y] int NOT NULL, + CONSTRAINT [PK_People] PRIMARY KEY ([Id]) +); +"""); + } + + public override async Task Create_table_with_json_column() + { + await base.Create_table_with_json_column(); + + AssertSql( + """ +CREATE TABLE `Entity` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + `OwnedCollection` longchar NULL, + `OwnedReference` longchar NULL, + `OwnedRequiredReference` longchar NOT NULL, + CONSTRAINT `PK_Entity` PRIMARY KEY (`Id`) +); +"""); + } + + public override async Task Create_table_with_json_column_explicit_json_column_names() + { + await base.Create_table_with_json_column_explicit_json_column_names(); + + AssertSql( + """ +CREATE TABLE `Entity` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + `json_collection` longchar NULL, + `json_reference` longchar NULL, + CONSTRAINT `PK_Entity` PRIMARY KEY (`Id`) +); +"""); + } + + [ConditionalFact] + public virtual async Task Create_table_with_identity_column_value_converter() + { + await Test( + _ => { }, + builder => builder.UseJetIdentityColumns() + .Entity("People").Property("IdentityColumn").HasConversion().ValueGeneratedOnAdd(), + model => + { + var table = Assert.Single(model.Tables); + var column = Assert.Single(table.Columns, c => c.Name == "IdentityColumn"); + Assert.Equal(ValueGenerated.OnAdd, column.ValueGenerated); + }); + + AssertSql( + """ +CREATE TABLE `People` ( + `IdentityColumn` counter NOT NULL +); +"""); + } + + public override async Task Drop_table() + { + await base.Drop_table(); + + AssertSql( + """ +DROP TABLE `People`; +"""); + } + + public override async Task Alter_table_add_comment() + { + await base.Alter_table_add_comment(); + + AssertSql( +); + } + + public override async Task Alter_table_add_comment_non_default_schema() + { + await base.Alter_table_add_comment_non_default_schema(); + + AssertSql( +); + } + + public override async Task Alter_table_change_comment() + { + await base.Alter_table_change_comment(); + + AssertSql( +); + } + + public override async Task Alter_table_remove_comment() + { + await base.Alter_table_remove_comment(); + + AssertSql( + ); + } + + public override async Task Rename_table() + { + await base.Rename_table(); + + AssertSql( + """ +ALTER TABLE `People` DROP CONSTRAINT `PK_People`; +""", + // + """ +ALTER TABLE `People` RENAME TO `Persons`; +""", + // + """ +ALTER TABLE `Persons` ADD CONSTRAINT `PK_Persons` PRIMARY KEY (`Id`); +"""); + } + + public override async Task Rename_table_with_primary_key() + { + await base.Rename_table_with_primary_key(); + + AssertSql( + """ +ALTER TABLE `People` DROP CONSTRAINT `PK_People`; +""", + // + """ +ALTER TABLE `People` RENAME TO `Persons`; +""", + // + """ +ALTER TABLE `Persons` ADD CONSTRAINT `PK_Persons` PRIMARY KEY (`Id`); +"""); + } + + public override async Task Rename_table_with_json_column() + { + await base.Rename_table_with_json_column(); + + AssertSql( + """ +ALTER TABLE `Entities` DROP CONSTRAINT `PK_Entities`; +""", + // + """ +ALTER TABLE `Entities` RENAME TO `NewEntities`; +""", + // + """ +ALTER TABLE `NewEntities` ADD CONSTRAINT `PK_NewEntities` PRIMARY KEY (`Id`); +"""); + } + + public override async Task Move_table() + { + await base.Move_table(); + + AssertSql( + """ +ALTER TABLE `TestTable` RENAME TO `TestTable`; +"""); + } + + public override async Task Create_schema() + { + await base.Create_schema(); + + AssertSql( + """ +CREATE TABLE `People` ( + `Id` counter NOT NULL, + CONSTRAINT `PK_People` PRIMARY KEY (`Id`) +); +"""); + } + + [ConditionalFact] + public virtual async Task Create_schema_dbo_is_ignored() + { + await Test( + builder => { }, + builder => builder.Entity("People") + .ToTable("People", "dbo") + .Property("Id"), + model => Assert.Equal(null, Assert.Single(model.Tables).Schema)); + + AssertSql( + """ +CREATE TABLE `People` ( + `Id` counter NOT NULL, + CONSTRAINT `PK_People` PRIMARY KEY (`Id`) +); +"""); + } + + public override async Task Add_column_with_defaultValue_string() + { + await base.Add_column_with_defaultValue_string(); + + AssertSql( + """ +ALTER TABLE `People` ADD `Name` varchar(255) NOT NULL DEFAULT 'John Doe'; +"""); + } + + public override async Task Add_column_with_defaultValue_datetime() + { + await base.Add_column_with_defaultValue_datetime(); + + AssertSql( + """ +ALTER TABLE `People` ADD `Birthday` datetime NOT NULL DEFAULT '2015-04-12 17:05:00'; +"""); + } + + [ConditionalTheory] + [InlineData(0, "", 1234567)] + [InlineData(1, ".1", 1234567)] + [InlineData(2, ".12", 1234567)] + [InlineData(3, ".123", 1234567)] + [InlineData(4, ".1234", 1234567)] + [InlineData(5, ".12345", 1234567)] + [InlineData(6, ".123456", 1234567)] + [InlineData(7, ".1234567", 1234567)] + [InlineData(7, ".1200000", 1200000)] //should this really output trailing zeros? + public async Task Add_column_with_defaultValue_datetime_with_explicit_precision(int precision, string fractionalSeconds, int ticksToAdd) + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => builder.Entity("People").Property("Birthday").HasPrecision(precision) + .HasDefaultValue(new DateTime(2015, 4, 12, 17, 5, 0).AddTicks(ticksToAdd)), + model => + { + var table = Assert.Single(model.Tables); + Assert.Equal(2, table.Columns.Count); + var birthdayColumn = Assert.Single(table.Columns, c => c.Name == "Birthday"); + Assert.False(birthdayColumn.IsNullable); + }); + + AssertSql( + $""" +ALTER TABLE `People` ADD `Birthday` datetime NOT NULL DEFAULT '2015-04-12 17:05:00'; +"""); + } + + [ConditionalTheory] + [InlineData(0, "", 1234567)] + [InlineData(1, ".1", 1234567)] + [InlineData(2, ".12", 1234567)] + [InlineData(3, ".123", 1234567)] + [InlineData(4, ".1234", 1234567)] + [InlineData(5, ".12345", 1234567)] + [InlineData(6, ".123456", 1234567)] + [InlineData(7, ".1234567", 1234567)] + [InlineData(7, ".1200000", 1200000)] //should this really output trailing zeros? + public async Task Add_column_with_defaultValue_datetimeoffset_with_explicit_precision( + int precision, + string fractionalSeconds, + int ticksToAdd) + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => builder.Entity("People").Property("Birthday").HasPrecision(precision) + .HasDefaultValue(new DateTimeOffset(new DateTime(2015, 4, 12, 17, 5, 0).AddTicks(ticksToAdd), TimeSpan.FromHours(10))), + model => + { + var table = Assert.Single(model.Tables); + Assert.Equal(2, table.Columns.Count); + var birthdayColumn = Assert.Single(table.Columns, c => c.Name == "Birthday"); + Assert.False(birthdayColumn.IsNullable); + }); + + AssertSql( + $""" +ALTER TABLE `People` ADD `Birthday` datetime NOT NULL DEFAULT CDATE('2015-04-12 07:05:00'); +"""); + } + + [ConditionalTheory] + [InlineData(0, "", 1234567)] + [InlineData(1, ".1", 1234567)] + [InlineData(2, ".12", 1234567)] + [InlineData(3, ".123", 1234567)] + [InlineData(4, ".1234", 1234567)] + [InlineData(5, ".12345", 1234567)] + [InlineData(6, ".123456", 1234567)] + [InlineData(7, ".1234567", 1234567)] + [InlineData(7, ".12", 1200000)] + public async Task Add_column_with_defaultValue_time_with_explicit_precision(int precision, string fractionalSeconds, int ticksToAdd) + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => builder.Entity("People").Property("Age").HasPrecision(precision) + .HasDefaultValue( + TimeSpan.Parse("12:34:56", CultureInfo.InvariantCulture).Add(TimeSpan.FromTicks(ticksToAdd))), + model => + { + var table = Assert.Single(model.Tables); + Assert.Equal(2, table.Columns.Count); + var birthdayColumn = Assert.Single(table.Columns, c => c.Name == "Age"); + Assert.False(birthdayColumn.IsNullable); + }); + + AssertSql( + """ +ALTER TABLE `People` ADD `Age` datetime NOT NULL DEFAULT TIMEVALUE('12:34:56'); +"""); + } + + [ConditionalFact] + public virtual async Task Add_column_with_defaultValue_datetime_store_type() + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => builder.Entity("People").Property("Birthday") + .HasColumnType("datetime") + .HasDefaultValue(new DateTime(2019, 1, 1)), + model => + { + var table = Assert.Single(model.Tables); + var column = Assert.Single(table.Columns, c => c.Name == "Birthday"); + Assert.Contains("2019", column.DefaultValueSql); + }); + + AssertSql( + """ +ALTER TABLE `People` ADD `Birthday` datetime NOT NULL DEFAULT '2019-01-01'; +"""); + } + + [ConditionalFact] + public virtual async Task Add_column_with_rowversion() + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => builder.Entity("People").Property("RowVersion").IsRowVersion(), + model => + { + var table = Assert.Single(model.Tables); + var column = Assert.Single(table.Columns, c => c.Name == "RowVersion"); + Assert.Equal("varbinary(8)", column.StoreType); + Assert.True(column.IsRowVersion()); + }); + + AssertSql( + """ +ALTER TABLE [People] ADD [RowVersion] rowversion NULL; +"""); + } + + [ConditionalFact] + public virtual async Task Add_column_with_rowversion_and_value_conversion() + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => builder.Entity("People").Property("RowVersion") + .IsRowVersion() + .HasConversion(), + model => + { + var table = Assert.Single(model.Tables); + var column = Assert.Single(table.Columns, c => c.Name == "RowVersion"); + Assert.Equal("rowversion", column.StoreType); + Assert.True(column.IsRowVersion()); + }); + + AssertSql( + """ +ALTER TABLE [People] ADD [RowVersion] rowversion NOT NULL; +"""); + } + + public override async Task Add_column_with_defaultValueSql() + { + await base.Add_column_with_defaultValueSql(); + + AssertSql( + """ +ALTER TABLE `People` ADD `Sum` integer NOT NULL DEFAULT 1 + 2; +"""); + } + + public override async Task Add_json_columns_to_existing_table() + { + await base.Add_json_columns_to_existing_table(); + + AssertSql( + """ +ALTER TABLE `Entity` ADD `OwnedCollection` longchar NULL; +""", + // + """ +ALTER TABLE `Entity` ADD `OwnedReference` longchar NULL; +""", + // + """ +ALTER TABLE `Entity` ADD `OwnedRequiredReference` longchar NOT NULL DEFAULT '{}'; +"""); + } + + public override async Task Add_column_with_computedSql(bool? stored) + { + await base.Add_column_with_computedSql(stored); + + var computedColumnTypeSql = stored == true ? " PERSISTED" : ""; + + AssertSql( + $""" +ALTER TABLE [People] ADD [Sum] AS [X] + [Y]{computedColumnTypeSql}; +"""); + } + + [ConditionalFact] + public virtual async Task Add_column_generates_exec_when_computed_and_idempotent() + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => builder.Entity("People").Property("IdPlusOne").HasComputedColumnSql("[Id] + 1"), + model => + { + var table = Assert.Single(model.Tables); + Assert.Equal(2, table.Columns.Count); + var column = Assert.Single(table.Columns, c => c.Name == "IdPlusOne"); + Assert.Equal("([Id]+(1))", column.ComputedColumnSql); + }, + migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); + + AssertSql( + """ +EXEC(N'ALTER TABLE [People] ADD [IdPlusOne] AS [Id] + 1'); +"""); + } + + public override async Task Add_column_with_required() + { + await base.Add_column_with_required(); + + AssertSql( + """ +ALTER TABLE `People` ADD `Name` varchar(255) NOT NULL DEFAULT ''; +"""); + } + + public override async Task Add_column_with_ansi() + { + await base.Add_column_with_ansi(); + + AssertSql( + """ +ALTER TABLE `People` ADD `Name` varchar(255) NULL; +"""); + } + + public override async Task Add_column_with_max_length() + { + await base.Add_column_with_max_length(); + + AssertSql( + """ +ALTER TABLE `People` ADD `Name` varchar(30) NULL; +"""); + } + + public override async Task Add_column_with_max_length_on_derived() + { + await base.Add_column_with_max_length_on_derived(); + + Assert.Empty(Fixture.TestSqlLoggerFactory.SqlStatements); + } + + public override async Task Add_column_with_fixed_length() + { + await base.Add_column_with_fixed_length(); + + AssertSql( + """ +ALTER TABLE `People` ADD `Name` char(100) NULL; +"""); + } + + public override async Task Add_column_with_comment() + { + await base.Add_column_with_comment(); + + AssertSql( + """ +ALTER TABLE `People` ADD `FullName` varchar(255) NULL; +"""); + } + + [ConditionalFact(Skip = "Jet does not support collation")] + public override async Task Add_column_with_collation() + { + await base.Add_column_with_collation(); + + AssertSql(""); + } + + [ConditionalTheory(Skip = "Jet does not support collation")] + public override async Task Add_column_computed_with_collation(bool stored) + { + await base.Add_column_computed_with_collation(stored); + + AssertSql(""); + } + + public override async Task Add_column_shared() + { + await base.Add_column_shared(); + + AssertSql(); + } + + public override async Task Add_column_with_check_constraint() + { + await base.Add_column_with_check_constraint(); + + AssertSql( + """ +ALTER TABLE `People` ADD `DriverLicense` integer NOT NULL DEFAULT 0; +""", + // + """ +ALTER TABLE `People` ADD CONSTRAINT `CK_People_Foo` CHECK (`DriverLicense` > 0); +"""); + } + + [ConditionalFact] + public virtual async Task Add_column_identity() + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => builder.Entity("People").Property("IdentityColumn").UseJetIdentityColumn(), + model => + { + var table = Assert.Single(model.Tables); + var column = Assert.Single(table.Columns, c => c.Name == "IdentityColumn"); + Assert.Equal(ValueGenerated.OnAdd, column.ValueGenerated); + }); + + AssertSql( + """ +ALTER TABLE `People` ADD `IdentityColumn` counter NOT NULL; +"""); + } + + [ConditionalFact] + public virtual async Task Add_column_identity_seed_increment() + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => builder.Entity("People").Property("IdentityColumn").UseJetIdentityColumn(100, 5), + model => + { + var table = Assert.Single(model.Tables); + var column = Assert.Single(table.Columns, c => c.Name == "IdentityColumn"); + Assert.Equal(ValueGenerated.OnAdd, column.ValueGenerated); + // TODO: Do we not reverse-engineer identity facets? + // Assert.Equal(100, column[SqlServerAnnotationNames.IdentitySeed]); + // Assert.Equal(5, column[SqlServerAnnotationNames.IdentityIncrement]); + }); + + AssertSql( + """ +ALTER TABLE `People` ADD `IdentityColumn` counter(100, 5) NOT NULL; +"""); + } + + [ConditionalFact] + public virtual async Task Add_column_identity_seed_increment_for_TPC() + { + await Test( + buildCommonAction: builder => + { + builder.Entity("Animal").UseTpcMappingStrategy().Property("Id"); + builder.Entity("Cat").HasBaseType("Animal").ToTable("Cats"); + builder.Entity("Dog").HasBaseType("Animal").ToTable("Dogs"); + }, + buildSourceAction:builder => { }, + buildTargetAction:builder => + { + builder.Entity("Animal") + .Property("IdentityColumn"); + builder.Entity("Cat").ToTable("Cats", tb => tb.Property("IdentityColumn").UseJetIdentityColumn(1, 2)); + builder.Entity("Dog").ToTable("Dogs", tb => tb.Property("IdentityColumn").UseJetIdentityColumn(2, 2)); + }, + asserter:model => + { + Assert.Collection( + model.Tables, + t => + { + Assert.Equal("Animal", t.Name); + var column = Assert.Single(t.Columns, c => c.Name == "IdentityColumn"); + Assert.Null(column.ValueGenerated); + }, + t => + { + Assert.Equal("Cats", t.Name); + var column = Assert.Single(t.Columns, c => c.Name == "IdentityColumn"); + Assert.Equal(ValueGenerated.OnAdd, column.ValueGenerated); + // TODO: Do we not reverse-engineer identity facets? + // Assert.Equal(100, column[SqlServerAnnotationNames.IdentitySeed]); + // Assert.Equal(5, column[SqlServerAnnotationNames.IdentityIncrement]); + }, + t => + { + Assert.Equal("Dogs", t.Name); + var column = Assert.Single(t.Columns, c => c.Name == "IdentityColumn"); + Assert.Equal(ValueGenerated.OnAdd, column.ValueGenerated); + // TODO: Do we not reverse-engineer identity facets? + // Assert.Equal(100, column[SqlServerAnnotationNames.IdentitySeed]); + // Assert.Equal(5, column[SqlServerAnnotationNames.IdentityIncrement]); + }); + }); + + AssertSql( + """ +ALTER TABLE `Dogs` ADD `IdentityColumn` counter(2, 2) NOT NULL; +""", + // + """ +ALTER TABLE `Cats` ADD `IdentityColumn` counter(1, 2) NOT NULL; +""", + // + """ +ALTER TABLE `Animal` ADD `IdentityColumn` integer NOT NULL DEFAULT 0; +"""); + } + + public override async Task Alter_column_change_type() + { + await base.Alter_column_change_type(); + + AssertSql( + """ +ALTER TABLE `People` ALTER COLUMN `SomeColumn` DROP DEFAULT; +ALTER TABLE `People` ALTER COLUMN `SomeColumn` decimal(20,0) NOT NULL; +"""); + } + + public override async Task Alter_column_make_required() + { + await base.Alter_column_make_required(); + + AssertSql( + """ +ALTER TABLE `People` ALTER COLUMN `SomeColumn` DROP DEFAULT; +UPDATE `People` SET `SomeColumn` = '' WHERE `SomeColumn` IS NULL; +ALTER TABLE `People` ALTER COLUMN `SomeColumn` varchar(255) NOT NULL DEFAULT ''; +"""); + } + + public override async Task Alter_column_make_required_with_null_data() + { + await base.Alter_column_make_required_with_null_data(); + + AssertSql( + """ +ALTER TABLE `People` ALTER COLUMN `SomeColumn` DROP DEFAULT; +UPDATE `People` SET `SomeColumn` = '' WHERE `SomeColumn` IS NULL; +ALTER TABLE `People` ALTER COLUMN `SomeColumn` varchar(255) NOT NULL DEFAULT ''; +"""); + } + + [ConditionalFact] + public override async Task Alter_column_make_required_with_index() + { + await base.Alter_column_make_required_with_index(); + + AssertSql( + """ +DROP INDEX `IX_People_SomeColumn` ON `People`; +ALTER TABLE `People` ALTER COLUMN `SomeColumn` DROP DEFAULT; +UPDATE `People` SET `SomeColumn` = '' WHERE `SomeColumn` IS NULL; +ALTER TABLE `People` ALTER COLUMN `SomeColumn` varchar(255) NOT NULL DEFAULT ''; +CREATE INDEX `IX_People_SomeColumn` ON `People` (`SomeColumn`); +"""); + } + + [ConditionalFact] + public override async Task Alter_column_make_required_with_composite_index() + { + await base.Alter_column_make_required_with_composite_index(); + + AssertSql( + """ +DROP INDEX `IX_People_FirstName_LastName` ON `People`; +ALTER TABLE `People` ALTER COLUMN `FirstName` DROP DEFAULT; +UPDATE `People` SET `FirstName` = '' WHERE `FirstName` IS NULL; +ALTER TABLE `People` ALTER COLUMN `FirstName` varchar(255) NOT NULL DEFAULT ''; +CREATE INDEX `IX_People_FirstName_LastName` ON `People` (`FirstName`, `LastName`); +"""); + } + + public override async Task Alter_column_make_computed(bool? stored) + { + await base.Alter_column_make_computed(stored); + + var computedColumnTypeSql = stored == true ? " PERSISTED" : ""; + + AssertSql( + $""" +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Sum'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] DROP COLUMN [Sum]; +ALTER TABLE [People] ADD [Sum] AS [X] + [Y]{computedColumnTypeSql}; +"""); + } + + public override async Task Alter_column_change_computed() + { + await base.Alter_column_change_computed(); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Sum'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] DROP COLUMN [Sum]; +ALTER TABLE [People] ADD [Sum] AS [X] - [Y]; +"""); + } + + public override async Task Alter_column_change_computed_recreates_indexes() + { + await base.Alter_column_change_computed_recreates_indexes(); + + AssertSql( + """ +DROP INDEX [IX_People_Sum] ON [People]; +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Sum'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] DROP COLUMN [Sum]; +ALTER TABLE [People] ADD [Sum] AS [X] - [Y]; +""", + // + """ +CREATE INDEX [IX_People_Sum] ON [People] ([Sum]); +"""); + } + + public override async Task Alter_column_change_computed_type() + { + await base.Alter_column_change_computed_type(); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Sum'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] DROP COLUMN [Sum]; +ALTER TABLE [People] ADD [Sum] AS [X] + [Y] PERSISTED; +"""); + } + + public override async Task Alter_column_make_non_computed() + { + await base.Alter_column_make_non_computed(); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Sum'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] DROP COLUMN [Sum]; +ALTER TABLE [People] ADD [Sum] int NOT NULL; +"""); + } + + [ConditionalFact] + public override async Task Alter_column_add_comment() + { + await base.Alter_column_add_comment(); + + AssertSql( + ); + } + + [ConditionalFact] + public override async Task Alter_computed_column_add_comment() + { + await base.Alter_computed_column_add_comment(); + + AssertSql( + ); + } + + [ConditionalFact] + public override async Task Alter_column_change_comment() + { + await base.Alter_column_change_comment(); + + AssertSql( + ); + } + + [ConditionalFact] + public override async Task Alter_column_remove_comment() + { + await base.Alter_column_remove_comment(); + + AssertSql( + ); + } + + public override async Task Convert_json_entities_to_regular_owned() + { + await base.Convert_json_entities_to_regular_owned(); + + AssertSql( + """ +ALTER TABLE `Entity` ALTER COLUMN `OwnedCollection` DROP DEFAULT; +ALTER TABLE `Entity` DROP COLUMN `OwnedCollection`; +""", + // + """ +ALTER TABLE `Entity` ALTER COLUMN `OwnedReference` DROP DEFAULT; +ALTER TABLE `Entity` DROP COLUMN `OwnedReference`; +""", + // + """ +ALTER TABLE `Entity` ADD `OwnedReference_Date` datetime NULL; +""", + // + """ +ALTER TABLE `Entity` ADD `OwnedReference_NestedReference_Number` integer NULL; +""", + // + """ +CREATE TABLE `Entity_NestedCollection` ( + `OwnedEntityId` integer NOT NULL, + `Id` counter NOT NULL, + `Number2` integer NOT NULL, + CONSTRAINT `PK_Entity_NestedCollection` PRIMARY KEY (`OwnedEntityId`, `Id`), + CONSTRAINT `FK_Entity_NestedCollection_Entity_OwnedEntityId` FOREIGN KEY (`OwnedEntityId`) REFERENCES `Entity` (`Id`) ON DELETE CASCADE +); +""", + // + """ +CREATE TABLE `Entity_OwnedCollection` ( + `EntityId` integer NOT NULL, + `Id` counter NOT NULL, + `Date2` datetime NOT NULL, + `NestedReference2_Number3` integer NULL, + CONSTRAINT `PK_Entity_OwnedCollection` PRIMARY KEY (`EntityId`, `Id`), + CONSTRAINT `FK_Entity_OwnedCollection_Entity_EntityId` FOREIGN KEY (`EntityId`) REFERENCES `Entity` (`Id`) ON DELETE CASCADE +); +""", + // + """ +CREATE TABLE `Entity_OwnedCollection_NestedCollection2` ( + `Owned2EntityId` integer NOT NULL, + `Owned2Id` integer NOT NULL, + `Id` counter NOT NULL, + `Number4` integer NOT NULL, + CONSTRAINT `PK_Entity_OwnedCollection_NestedCollection2` PRIMARY KEY (`Owned2EntityId`, `Owned2Id`, `Id`), + CONSTRAINT `FK_Entity_OwnedCollection_NestedCollection2_Entity_OwnedCollect~` FOREIGN KEY (`Owned2EntityId`, `Owned2Id`) REFERENCES `Entity_OwnedCollection` (`EntityId`, `Id`) ON DELETE CASCADE +); +"""); + } + + public override async Task Convert_regular_owned_entities_to_json() + { + await base.Convert_regular_owned_entities_to_json(); + + AssertSql( + """ +DROP TABLE `Entity_NestedCollection`; +""", + // + """ +DROP TABLE `Entity_OwnedCollection_NestedCollection2`; +""", + // + """ +DROP TABLE `Entity_OwnedCollection`; +""", + // + """ +ALTER TABLE `Entity` ALTER COLUMN `OwnedReference_Date` DROP DEFAULT; +ALTER TABLE `Entity` DROP COLUMN `OwnedReference_Date`; +""", + // + """ +ALTER TABLE `Entity` ALTER COLUMN `OwnedReference_NestedReference_Number` DROP DEFAULT; +ALTER TABLE `Entity` DROP COLUMN `OwnedReference_NestedReference_Number`; +""", + // + """ +ALTER TABLE `Entity` ADD `OwnedCollection` longchar NULL; +""", + // + """ +ALTER TABLE `Entity` ADD `OwnedReference` longchar NULL; +"""); + } + + public override async Task Convert_string_column_to_a_json_column_containing_reference() + { + await base.Convert_string_column_to_a_json_column_containing_reference(); + + AssertSql(); + } + + public override async Task Convert_string_column_to_a_json_column_containing_required_reference() + { + await base.Convert_string_column_to_a_json_column_containing_required_reference(); + + AssertSql( + """ +ALTER TABLE `Entity` ALTER COLUMN `Name` DROP DEFAULT; +UPDATE `Entity` SET `Name` = '{}' WHERE `Name` IS NULL; +ALTER TABLE `Entity` ALTER COLUMN `Name` longchar NOT NULL DEFAULT '{}'; +"""); + } + + public override async Task Convert_string_column_to_a_json_column_containing_collection() + { + await base.Convert_string_column_to_a_json_column_containing_collection(); + + AssertSql(); + } + + [ConditionalFact] + public virtual async Task Alter_column_with_index_no_narrowing() + { + await Test( + builder => builder.Entity( + "People", e => + { + e.Property("Id"); + e.Property("Name"); + e.HasIndex("Name"); + }), + builder => builder.Entity("People").Property("Name").IsRequired(), + builder => builder.Entity("People").Property("Name").IsRequired(false), + model => + { + var table = Assert.Single(model.Tables); + var column = Assert.Single(table.Columns, c => c.Name == "Name"); + Assert.True(column.IsNullable); + }); + + AssertSql( + """ +ALTER TABLE `People` ALTER COLUMN `Name` DROP DEFAULT; +ALTER TABLE `People` ALTER COLUMN `Name` varchar(255) NULL; +"""); + } + + [ConditionalFact] + public virtual async Task Alter_column_add_identity() + { + var ex = await TestThrows( + builder => builder.Entity("People").Property("SomeColumn"), + builder => builder.Entity("People").Property("SomeColumn").UseJetIdentityColumn()); + + Assert.Equal(JetStrings.AlterIdentityColumn, ex.Message); + } + + [ConditionalFact] + public virtual async Task Alter_column_remove_identity() + { + var ex = await TestThrows( + builder => builder.Entity("People").Property("SomeColumn").UseJetIdentityColumn(), + builder => builder.Entity("People").Property("SomeColumn")); + + Assert.Equal(JetStrings.AlterIdentityColumn, ex.Message); + } + + [ConditionalFact] + public virtual async Task Alter_column_change_identity_seed() + { + await Test( + builder => builder.Entity("People", e => e.Property("Id").UseJetIdentityColumn(seed: 10)), + builder => builder.Entity("People", e => e.Property("Id").UseJetIdentityColumn(seed: 100)), + model => + { + // DBCC CHECKIDENT RESEED doesn't actually change the table definition, it only resets the current identity value. + // For example, if the table is truncated, the identity is reset back to its original value (with the RESEED lost). + // Therefore we cannot check the value via scaffolding. + }); + + AssertSql( +); + } + + [ConditionalFact] + public virtual async Task Alter_column_change_default() + { + await Test( + builder => builder.Entity("People").Property("Name"), + builder => { }, + builder => builder.Entity("People").Property("Name") + .HasDefaultValue("Doe"), + model => + { + var nameColumn = Assert.Single(Assert.Single(model.Tables).Columns); + Assert.Equal("Doe", nameColumn.DefaultValue); + }); + + AssertSql( + """ +ALTER TABLE `People` ALTER COLUMN `Name` DROP DEFAULT; +ALTER TABLE `People` ALTER COLUMN `Name` varchar(255) NULL DEFAULT 'Doe'; +"""); + } + + public override async Task Drop_column() + { + await base.Drop_column(); + + AssertSql( + """ +ALTER TABLE `People` ALTER COLUMN `SomeColumn` DROP DEFAULT; +ALTER TABLE `People` DROP COLUMN `SomeColumn`; +"""); + } + + public override async Task Drop_column_primary_key() + { + await base.Drop_column_primary_key(); + + AssertSql( + """ +ALTER TABLE `People` DROP CONSTRAINT `PK_People`; +""", + // + """ +ALTER TABLE `People` ALTER COLUMN `Id` DROP DEFAULT; +ALTER TABLE `People` DROP COLUMN `Id`; +"""); + } + + public override async Task Drop_column_computed_and_non_computed_with_dependency() + { + await base.Drop_column_computed_and_non_computed_with_dependency(); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Y'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] DROP COLUMN [Y]; +""", + // + """ +DECLARE @var1 sysname; +SELECT @var1 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'X'); +IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var1 + '];'); +ALTER TABLE [People] DROP COLUMN [X]; +"""); + } + + public override async Task Drop_json_columns_from_existing_table() + { + await base.Drop_json_columns_from_existing_table(); + + AssertSql( + """ +ALTER TABLE `Entity` ALTER COLUMN `OwnedCollection` DROP DEFAULT; +ALTER TABLE `Entity` DROP COLUMN `OwnedCollection`; +""", + // + """ +ALTER TABLE `Entity` ALTER COLUMN `OwnedReference` DROP DEFAULT; +ALTER TABLE `Entity` DROP COLUMN `OwnedReference`; +"""); + } + + public override async Task Rename_column() + { + await base.Rename_column(); + + AssertSql( + """ +ALTER TABLE `People` RENAME COLUMN `SomeColumn` TO `SomeOtherColumn`; +"""); + } + + public override async Task Rename_json_column() + { + await base.Rename_json_column(); + + AssertSql( + """ +ALTER TABLE `Entity` RENAME COLUMN `json_reference` TO `new_json_reference`; +""", + // + """ +ALTER TABLE `Entity` RENAME COLUMN `json_collection` TO `new_json_collection`; +"""); + } + + public override async Task Create_index() + { + await base.Create_index(); + + AssertSql( + """ +CREATE INDEX `IX_People_FirstName` ON `People` (`FirstName`); +"""); + } + + public override async Task Create_index_unique() + { + await base.Create_index_unique(); + + AssertSql( + """ +CREATE UNIQUE INDEX `IX_People_FirstName_LastName` ON `People` (`FirstName`, `LastName`) WITH IGNORE NULL; +"""); + } + + public override async Task Create_index_descending() + { + await base.Create_index_descending(); + + AssertSql( + """ +CREATE INDEX `IX_People_X` ON `People` (`X` DESC); +"""); + } + + public override async Task Create_index_descending_mixed() + { + await base.Create_index_descending_mixed(); + + AssertSql( + """ +CREATE INDEX `IX_People_X_Y_Z` ON `People` (`X`, `Y` DESC, `Z`); +"""); + } + + public override async Task Alter_index_make_unique() + { + await base.Alter_index_make_unique(); + + AssertSql( + """ +DROP INDEX `IX_People_X` ON `People`; +""", + // + """ +CREATE UNIQUE INDEX `IX_People_X` ON `People` (`X`); +"""); + } + + public override async Task Alter_index_change_sort_order() + { + await base.Alter_index_change_sort_order(); + + AssertSql( + """ +DROP INDEX `IX_People_X_Y_Z` ON `People`; +""", + // + """ +CREATE INDEX `IX_People_X_Y_Z` ON `People` (`X`, `Y` DESC, `Z`); +"""); + } + + public override async Task Create_index_with_filter() + { + await base.Create_index_with_filter(); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; +""", + // + """ +CREATE INDEX [IX_People_Name] ON [People] ([Name]) WHERE [Name] IS NOT NULL; +"""); + } + + [ConditionalFact] + public virtual async Task CreateIndex_generates_exec_when_filter_and_idempotent() + { + await Test( + builder => builder.Entity( + "People", e => + { + e.Property("Id"); + e.Property("Name"); + }), + builder => { }, + builder => builder.Entity("People").HasIndex("Name").HasFilter("[Name] IS NOT NULL"), + model => + { + var table = Assert.Single(model.Tables); + var index = Assert.Single(table.Indexes); + Assert.Same(table.Columns.Single(c => c.Name == "Name"), Assert.Single(index.Columns)); + Assert.Contains("Name", index.Filter); + }, + migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; +""", + // + """ +EXEC(N'CREATE INDEX [IX_People_Name] ON [People] ([Name]) WHERE [Name] IS NOT NULL'); +"""); + } + + public override async Task Create_unique_index_with_filter() + { + await base.Create_unique_index_with_filter(); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; +""", + // + """ +CREATE UNIQUE INDEX [IX_People_Name] ON [People] ([Name]) WHERE [Name] IS NOT NULL AND [Name] <> ''; +"""); + } + + public override async Task Drop_index() + { + await base.Drop_index(); + + AssertSql( + """ +DROP INDEX `IX_People_SomeField` ON `People`; +"""); + } + + public override async Task Rename_index() + { + await base.Rename_index(); + + AssertSql( + """ +EXEC sp_rename N'[People].[Foo]', N'foo', 'INDEX'; +"""); + } + + public override async Task Add_primary_key_int() + { + var exception = await Assert.ThrowsAsync(() => base.Add_primary_key_int()); + + Assert.Equal(JetStrings.AlterIdentityColumn, exception.Message); + } + + public override async Task Add_primary_key_string() + { + await base.Add_primary_key_string(); + + AssertSql( + """ +ALTER TABLE `People` ADD CONSTRAINT `PK_People` PRIMARY KEY (`SomeField`); +"""); + } + + public override async Task Add_primary_key_with_name() + { + await base.Add_primary_key_with_name(); + + AssertSql( + """ +ALTER TABLE `People` ALTER COLUMN `SomeField` DROP DEFAULT; +UPDATE `People` SET `SomeField` = '' WHERE `SomeField` IS NULL; +ALTER TABLE `People` ALTER COLUMN `SomeField` varchar(255) NOT NULL DEFAULT ''; +""", + // + """ +ALTER TABLE `People` ADD CONSTRAINT `PK_Foo` PRIMARY KEY (`SomeField`); +"""); + } + + public override async Task Add_primary_key_composite_with_name() + { + await base.Add_primary_key_composite_with_name(); + + AssertSql( + """ +ALTER TABLE `People` ADD CONSTRAINT `PK_Foo` PRIMARY KEY (`SomeField1`, `SomeField2`); +"""); + } + + public override async Task Drop_primary_key_int() + { + var exception = await Assert.ThrowsAsync(() => base.Drop_primary_key_int()); + + Assert.Equal(JetStrings.AlterIdentityColumn, exception.Message); + } + + public override async Task Drop_primary_key_string() + { + await base.Drop_primary_key_string(); + + AssertSql( + """ +ALTER TABLE `People` DROP CONSTRAINT `PK_People`; +"""); + } + + public override async Task Add_foreign_key() + { + await base.Add_foreign_key(); + + AssertSql( + """ +CREATE INDEX `IX_Orders_CustomerId` ON `Orders` (`CustomerId`); +""", + // + """ +ALTER TABLE `Orders` ADD CONSTRAINT `FK_Orders_Customers_CustomerId` FOREIGN KEY (`CustomerId`) REFERENCES `Customers` (`Id`) ON DELETE CASCADE; +"""); + } + + public override async Task Add_foreign_key_with_name() + { + await base.Add_foreign_key_with_name(); + + // AssertSql( + // @"ALTER TABLE [Orders] DROP CONSTRAINT [FK_Orders_Customers_CustomerId];", + // // + // @"DROP INDEX [IX_Orders_CustomerId] ON [Orders];"); + + AssertSql( + """ +CREATE INDEX `IX_Orders_CustomerId` ON `Orders` (`CustomerId`); +""", + // + """ +ALTER TABLE `Orders` ADD CONSTRAINT `FK_Foo` FOREIGN KEY (`CustomerId`) REFERENCES `Customers` (`Id`) ON DELETE CASCADE; +"""); + } + + public override async Task Drop_foreign_key() + { + await base.Drop_foreign_key(); + + AssertSql( + """ +ALTER TABLE `Orders` DROP CONSTRAINT `FK_Orders_Customers_CustomerId`; +""", + // + """ +DROP INDEX `IX_Orders_CustomerId` ON `Orders`; +"""); + } + + public override async Task Add_unique_constraint() + { + await base.Add_unique_constraint(); + + AssertSql( + """ +ALTER TABLE `People` ADD CONSTRAINT `AK_People_AlternateKeyColumn` UNIQUE (`AlternateKeyColumn`); +"""); + } + + public override async Task Add_unique_constraint_composite_with_name() + { + await base.Add_unique_constraint_composite_with_name(); + + AssertSql( + """ +ALTER TABLE `People` ADD CONSTRAINT `AK_Foo` UNIQUE (`AlternateKeyColumn1`, `AlternateKeyColumn2`); +"""); + } + + public override async Task Drop_unique_constraint() + { + await base.Drop_unique_constraint(); + + AssertSql( + """ +ALTER TABLE `People` DROP CONSTRAINT `AK_People_AlternateKeyColumn`; +"""); + } + + public override async Task Add_check_constraint_with_name() + { + await base.Add_check_constraint_with_name(); + + AssertSql( + """ +ALTER TABLE `People` ADD CONSTRAINT `CK_People_Foo` CHECK (`DriverLicense` > 0); +"""); + } + + [ConditionalFact] + public virtual async Task Add_check_constraint_generates_exec_when_idempotent() + { + await Test( + builder => builder.Entity( + "People", e => + { + e.Property("Id"); + e.Property("DriverLicense"); + }), + builder => { }, + builder => builder.Entity("People").ToTable(tb => tb.HasCheckConstraint("CK_People_Foo", "[DriverLicense] > 0")), + model => + { + // TODO: no scaffolding support for check constraints, https://github.com/aspnet/EntityFrameworkCore/issues/15408 + }, + migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); + + AssertSql( + """ +ALTER TABLE `People` ADD CONSTRAINT `CK_People_Foo` CHECK ([DriverLicense] > 0); +"""); + } + + public override async Task Alter_check_constraint() + { + await base.Alter_check_constraint(); + + AssertSql( + """ +ALTER TABLE `People` DROP CONSTRAINT `CK_People_Foo`; +""", + // + """ +ALTER TABLE `People` ADD CONSTRAINT `CK_People_Foo` CHECK (`DriverLicense` > 1); +"""); + } + + public override async Task Drop_check_constraint() + { + await base.Drop_check_constraint(); + + AssertSql( + """ +ALTER TABLE `People` DROP CONSTRAINT `CK_People_Foo`; +"""); + } + + public override async Task Create_sequence() + { + await base.Create_sequence(); + + AssertSql( + """ +CREATE SEQUENCE [TestSequence] AS int START WITH 1 INCREMENT BY 1 NO CYCLE; +"""); + } + + public override async Task Create_sequence_long() + { + await base.Create_sequence_long(); + + AssertSql( + """ +CREATE SEQUENCE [TestSequence] START WITH 1 INCREMENT BY 1 NO CYCLE; +"""); + } + + public override async Task Create_sequence_short() + { + await base.Create_sequence_short(); + + AssertSql( + """ +CREATE SEQUENCE [TestSequence] AS smallint START WITH 1 INCREMENT BY 1 NO CYCLE; +"""); + } + + public override async Task Create_sequence_all_settings() + { + await base.Create_sequence_all_settings(); + + AssertSql( + """ +IF SCHEMA_ID(N'dbo2') IS NULL EXEC(N'CREATE SCHEMA [dbo2];'); +""", + // + """ +CREATE SEQUENCE [dbo2].[TestSequence] START WITH 3 INCREMENT BY 2 MINVALUE 2 MAXVALUE 916 CYCLE; +"""); + } + + public override async Task Alter_sequence_all_settings() + { + await base.Alter_sequence_all_settings(); + + AssertSql( + """ +ALTER SEQUENCE [foo] INCREMENT BY 2 MINVALUE -5 MAXVALUE 10 CYCLE; +""", + // + """ +ALTER SEQUENCE [foo] RESTART WITH -3; +"""); + } + + public override async Task Alter_sequence_increment_by() + { + await base.Alter_sequence_increment_by(); + + AssertSql( + """ +ALTER SEQUENCE [foo] INCREMENT BY 2 NO MINVALUE NO MAXVALUE NO CYCLE; +"""); + } + + public override async Task Alter_sequence_restart_with() + { + await base.Alter_sequence_restart_with(); + + AssertSql( + @"ALTER SEQUENCE [foo] RESTART WITH 3;"); + } + + public override async Task Drop_sequence() + { + await base.Drop_sequence(); + + AssertSql( + """ +DROP SEQUENCE [TestSequence]; +"""); + } + + public override async Task Rename_sequence() + { + await base.Rename_sequence(); + + AssertSql( + """ +EXEC sp_rename N'[TestSequence]', N'testsequence', 'OBJECT'; +"""); + } + + public override async Task Move_sequence() + { + await base.Move_sequence(); + + AssertSql( + """ +IF SCHEMA_ID(N'TestSequenceSchema') IS NULL EXEC(N'CREATE SCHEMA [TestSequenceSchema];'); +""", + // + """ +ALTER SCHEMA [TestSequenceSchema] TRANSFER [TestSequence]; +"""); + } + + [ConditionalFact] + public virtual async Task Move_sequence_into_default_schema() + { + await Test( + builder => builder.HasSequence("TestSequence", "TestSequenceSchema"), + builder => builder.HasSequence("TestSequence"), + model => + { + var sequence = Assert.Single(model.Sequences); + Assert.Equal("dbo", sequence.Schema); + Assert.Equal("TestSequence", sequence.Name); + }); + + AssertSql( + """ +DECLARE @defaultSchema sysname = SCHEMA_NAME(); +EXEC(N'ALTER SCHEMA [' + @defaultSchema + N'] TRANSFER [TestSequenceSchema].[TestSequence];'); +"""); + } + + [ConditionalFact] + public async Task Create_sequence_and_dependent_column() + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => { }, + builder => + { + builder.HasSequence("TestSequence"); + builder.Entity("People").Property("SeqProp").HasDefaultValueSql("NEXT VALUE FOR TestSequence"); + }, + model => + { + var sequence = Assert.Single(model.Sequences); + Assert.Equal("TestSequence", sequence.Name); + }); + + AssertSql( + """ +CREATE SEQUENCE [TestSequence] AS int START WITH 1 INCREMENT BY 1 NO CYCLE; +""", + // + """ +ALTER TABLE [People] ADD [SeqProp] int NOT NULL DEFAULT (NEXT VALUE FOR TestSequence); +"""); + } + + [ConditionalFact] + public async Task Drop_sequence_and_dependent_column() + { + await Test( + builder => builder.Entity("People").Property("Id"), + builder => + { + builder.HasSequence("TestSequence"); + builder.Entity("People").Property("SeqProp").HasDefaultValueSql("NEXT VALUE FOR TestSequence"); + }, + builder => { }, + model => Assert.Empty(model.Sequences)); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'SeqProp'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [People] DROP COLUMN [SeqProp]; +""", + // + """ +DROP SEQUENCE [TestSequence]; +"""); + } + + public override async Task InsertDataOperation() + { + await base.InsertDataOperation(); + + AssertSql( + """ +INSERT INTO `Person` (`Id`, `Name`) +VALUES (1, 'Daenerys Targaryen'); +INSERT INTO `Person` (`Id`, `Name`) +VALUES (2, 'John Snow'); +INSERT INTO `Person` (`Id`, `Name`) +VALUES (3, 'Arya Stark'); +INSERT INTO `Person` (`Id`, `Name`) +VALUES (4, 'Harry Strickland'); +INSERT INTO `Person` (`Id`, `Name`) +VALUES (5, NULL); +"""); + } + + public override async Task DeleteDataOperation_simple_key() + { + await base.DeleteDataOperation_simple_key(); + + // TODO remove rowcount + AssertSql( + """ +DELETE FROM `Person` +WHERE `Id` = 2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task DeleteDataOperation_composite_key() + { + await base.DeleteDataOperation_composite_key(); + + // TODO remove rowcount + AssertSql( + """ +DELETE FROM `Person` +WHERE `AnotherId` = 12 AND `Id` = 2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task UpdateDataOperation_simple_key() + { + await base.UpdateDataOperation_simple_key(); + + // TODO remove rowcount + AssertSql( + """ +UPDATE `Person` SET `Name` = 'Another John Snow' +WHERE `Id` = 2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task UpdateDataOperation_composite_key() + { + await base.UpdateDataOperation_composite_key(); + + // TODO remove rowcount + AssertSql( + """ +UPDATE `Person` SET `Name` = 'Another John Snow' +WHERE `AnotherId` = 11 AND `Id` = 2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task UpdateDataOperation_multiple_columns() + { + await base.UpdateDataOperation_multiple_columns(); + + // TODO remove rowcount + AssertSql( + """ +UPDATE `Person` SET `Age` = 21, `Name` = 'Another John Snow' +WHERE `Id` = 2; +SELECT @@ROWCOUNT; +"""); + } + + [ConditionalFact] + public virtual async Task InsertDataOperation_generates_exec_when_idempotent() + { + await Test( + builder => builder.Entity( + "Person", e => + { + e.Property("Id"); + e.Property("Name"); + e.HasKey("Id"); + }), + builder => { }, + builder => builder.Entity("Person") + .HasData( + new Person { Id = 1, Name = "Daenerys Targaryen" }, + new Person { Id = 2, Name = "John Snow" }, + new Person { Id = 3, Name = "Arya Stark" }, + new Person { Id = 4, Name = "Harry Strickland" }, + new Person { Id = 5, Name = null }), + model => { }, + migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); + + AssertSql( + """ +IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'Id', N'Name') AND [object_id] = OBJECT_ID(N'[Person]')) + SET IDENTITY_INSERT [Person] ON; +EXEC(N'INSERT INTO [Person] ([Id], [Name]) +VALUES (1, N''Daenerys Targaryen''), +(2, N''John Snow''), +(3, N''Arya Stark''), +(4, N''Harry Strickland''), +(5, NULL)'); +IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'Id', N'Name') AND [object_id] = OBJECT_ID(N'[Person]')) + SET IDENTITY_INSERT [Person] OFF; +"""); + } + + [ConditionalFact] + public virtual async Task DeleteDataOperation_generates_exec_when_idempotent() + { + await Test( + builder => builder.Entity( + "Person", e => + { + e.Property("Id"); + e.Property("Name"); + e.HasKey("Id"); + e.HasData(new Person { Id = 1, Name = "Daenerys Targaryen" }); + }), + builder => builder.Entity("Person").HasData(new Person { Id = 2, Name = "John Snow" }), + builder => { }, + model => { }, + migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); + + AssertSql( + """ +EXEC(N'DELETE FROM [Person] +WHERE [Id] = 2; +SELECT @@ROWCOUNT'); +"""); + } + + [ConditionalFact] + public virtual async Task UpdateDataOperation_generates_exec_when_idempotent() + { + await Test( + builder => builder.Entity( + "Person", e => + { + e.Property("Id"); + e.Property("Name"); + e.HasKey("Id"); + e.HasData(new Person { Id = 1, Name = "Daenerys Targaryen" }); + }), + builder => builder.Entity("Person").HasData(new Person { Id = 2, Name = "John Snow" }), + builder => builder.Entity("Person").HasData(new Person { Id = 2, Name = "Another John Snow" }), + model => { }, + migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); + + AssertSql( + """ +EXEC(N'UPDATE [Person] SET [Name] = N''Another John Snow'' +WHERE [Id] = 2; +SELECT @@ROWCOUNT'); +"""); + } + + [ConditionalFact] + public override async Task Add_required_primitive_collection_to_existing_table() + { + await base.Add_required_primitive_collection_to_existing_table(); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[]'; +"""); + } + + [ConditionalFact] + public override async Task Add_required_primitive_collection_with_custom_default_value_to_existing_table() + { + await base.Add_required_primitive_collection_with_custom_default_value_to_existing_table(); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[1,2,3]'; +"""); + } + + [ConditionalFact] + public override async Task Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table() + { + await base.Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table_core("'[3, 2, 1]'"); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[3, 2, 1]'; +"""); + } + + [ConditionalFact(Skip = "issue #33038")] + public override async Task Add_required_primitive_collection_with_custom_converter_to_existing_table() + { + await base.Add_required_primitive_collection_with_custom_converter_to_existing_table(); + + AssertSql( +""" +ALTER TABLE [Customers] ADD [Numbers] nvarchar(max) NOT NULL DEFAULT N'nothing'; +"""); + } + + [ConditionalFact] + public override async Task Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table() + { + await base.Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table(); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT 'some numbers'; +"""); + } + + [ConditionalFact] + public override async Task Add_optional_primitive_collection_to_existing_table() + { + await base.Add_optional_primitive_collection_to_existing_table(); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NULL; +"""); + } + + [ConditionalFact] + public override async Task Create_table_with_required_primitive_collection() + { + await base.Create_table_with_required_primitive_collection(); + + AssertSql( + """ +CREATE TABLE `Customers` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + `Numbers` varchar(255) NOT NULL, + CONSTRAINT `PK_Customers` PRIMARY KEY (`Id`) +); +"""); + } + + [ConditionalFact] + public override async Task Create_table_with_optional_primitive_collection() + { + await base.Create_table_with_optional_primitive_collection(); + + AssertSql( + """ +CREATE TABLE `Customers` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + `Numbers` varchar(255) NULL, + CONSTRAINT `PK_Customers` PRIMARY KEY (`Id`) +); +"""); + } + + [ConditionalFact] + public override async Task Create_table_with_complex_type_with_required_properties_on_derived_entity_in_TPH() + { + await base.Create_table_with_complex_type_with_required_properties_on_derived_entity_in_TPH(); + + AssertSql( + """ +CREATE TABLE `Contacts` ( + `Id` counter NOT NULL, + `Discriminator` varchar(8) NOT NULL, + `Name` varchar(255) NULL, + `Number` integer NULL, + `MyComplex_Prop` varchar(255) NULL, + `MyComplex_MyNestedComplex_Bar` datetime NULL, + `MyComplex_MyNestedComplex_Foo` integer NULL, + `MyComplex_Nested_Bar` datetime NULL, + `MyComplex_Nested_Foo` integer NULL, + `NestedCollection` longchar NULL, + CONSTRAINT `PK_Contacts` PRIMARY KEY (`Id`) +); +"""); + } + + [ConditionalFact] + public override async Task Add_required_primitve_collection_to_existing_table() + { + await base.Add_required_primitve_collection_to_existing_table(); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[]'; +"""); + } + + [ConditionalFact] + public override async Task Add_required_primitve_collection_with_custom_default_value_to_existing_table() + { + await base.Add_required_primitve_collection_with_custom_default_value_to_existing_table(); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[1,2,3]'; +"""); + } + + [ConditionalFact] + public override async Task Add_required_primitve_collection_with_custom_default_value_sql_to_existing_table() + { + await base.Add_required_primitve_collection_with_custom_default_value_sql_to_existing_table_core("'[3, 2, 1]'"); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[3, 2, 1]'; +"""); + } + + [ConditionalFact(Skip = "issue #33038")] + public override async Task Add_required_primitve_collection_with_custom_converter_to_existing_table() + { + await base.Add_required_primitve_collection_with_custom_converter_to_existing_table(); + + AssertSql( +""" +ALTER TABLE [Customers] ADD [Numbers] nvarchar(max) NOT NULL DEFAULT N'nothing'; +"""); + } + + [ConditionalFact] + public override async Task Add_required_primitve_collection_with_custom_converter_and_custom_default_value_to_existing_table() + { + await base.Add_required_primitve_collection_with_custom_converter_and_custom_default_value_to_existing_table(); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT 'some numbers'; +"""); + } + + protected override string NonDefaultCollation + => _nonDefaultCollation ??= GetDatabaseCollation() == "German_PhoneBook_CI_AS" + ? "French_CI_AS" + : "German_PhoneBook_CI_AS"; + + private string? _nonDefaultCollation; + + private string? GetDatabaseCollation() + { + using var ctx = CreateContext(); + var connection = ctx.Database.GetDbConnection(); + using var command = connection.CreateCommand(); + + command.CommandText = $""" + + SELECT collation_name + FROM sys.databases + WHERE name = '{connection.Database}'; + """; + + return command.ExecuteScalar() is string collation + ? collation + : null; + } + + protected override bool AssertComments => false; + protected override bool AssertSchemaNames => false; + + public class MigrationsLibRedFixture : MigrationsFixtureBase + { + protected override string StoreName + => nameof(MigrationsLibRedTest); + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override RelationalTestHelpers TestHelpers + => LibRedTestHelpers.Instance; + + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection) + .AddScoped(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedModelBuilderGenericTest.cs b/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedModelBuilderGenericTest.cs new file mode 100644 index 00000000..68a9674f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedModelBuilderGenericTest.cs @@ -0,0 +1,76 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using Microsoft.EntityFrameworkCore; +using NetTopologySuite.Features; +using System; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.ModelBuilding; + +public class LibRedModelBuilderGenericTest : LibRedModelBuilderTestBase +{ + public class LibRedGenericNonRelationship(LibRedModelBuilderFixture fixture) : LibRedNonRelationship(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class LibRedGenericComplexType(LibRedModelBuilderFixture fixture) : LibRedComplexType(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class LibRedGenericComplexCollection(LibRedModelBuilderFixture fixture) : LibRedComplexCollection(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class LibRedGenericInheritance(LibRedModelBuilderFixture fixture) : LibRedInheritance(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class LibRedGenericOneToMany(LibRedModelBuilderFixture fixture) : LibRedOneToMany(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class LibRedGenericManyToOne(LibRedModelBuilderFixture fixture) : LibRedManyToOne(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class LibRedGenericOneToOne(LibRedModelBuilderFixture fixture) : LibRedOneToOne(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class LibRedGenericManyToMany(LibRedModelBuilderFixture fixture) : LibRedManyToMany(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class LibRedGenericOwnedTypes(LibRedModelBuilderFixture fixture) : LibRedOwnedTypes(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedModelBuilderNonGenericTest.cs b/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedModelBuilderNonGenericTest.cs new file mode 100644 index 00000000..c79f7462 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedModelBuilderNonGenericTest.cs @@ -0,0 +1,67 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using Microsoft.EntityFrameworkCore; +using NetTopologySuite.Features; +using System; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.ModelBuilding; + +public class LibRedModelBuilderNonGenericTest : LibRedModelBuilderTestBase +{ + public class LibRedNonGenericNonRelationship(LibRedModelBuilderFixture fixture) : LibRedNonRelationship(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class LibRedNonGenericComplexType(LibRedModelBuilderFixture fixture) : LibRedComplexType(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class LibRedNonGenericComplexCollection(LibRedModelBuilderFixture fixture) : LibRedComplexCollection(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class LibRedNonGenericInheritance(LibRedModelBuilderFixture fixture) : LibRedInheritance(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class LibRedNonGenericOneToMany(LibRedModelBuilderFixture fixture) : LibRedOneToMany(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class LibRedNonGenericManyToOne(LibRedModelBuilderFixture fixture) : LibRedManyToOne(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class LibRedNonGenericOneToOne(LibRedModelBuilderFixture fixture) : LibRedOneToOne(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class LibRedNonGenericManyToMany(LibRedModelBuilderFixture fixture) : LibRedManyToMany(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class LibRedNonGenericOwnedTypes(LibRedModelBuilderFixture fixture) : LibRedOwnedTypes(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedModelBuilderTestBase.cs b/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedModelBuilderTestBase.cs new file mode 100644 index 00000000..068c4e20 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedModelBuilderTestBase.cs @@ -0,0 +1,1735 @@ +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Conventions; +using Microsoft.EntityFrameworkCore.Metadata.Conventions.Infrastructure; +using Microsoft.EntityFrameworkCore.ModelBuilding; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.ModelBuilding; + +public class LibRedModelBuilderTestBase : RelationalModelBuilderTest +{ + public abstract class LibRedNonRelationship(LibRedModelBuilderFixture fixture) + : RelationalNonRelationshipTestBase(fixture), IClassFixture + { + [ConditionalFact] + public virtual void Index_has_a_filter_if_nonclustered_unique_with_nullable_properties() + { + var modelBuilder = CreateModelBuilder(); + var entityTypeBuilder = modelBuilder + .Entity(); + var indexBuilder = entityTypeBuilder + .HasIndex(ix => ix.Name) + .IsUnique(); + + var entityType = modelBuilder.Model.FindEntityType(typeof(Customer))!; + var index = entityType.GetIndexes().Single(); + Assert.Equal("IGNORE NULL", index.GetFilter()); + + indexBuilder.IsUnique(false); + + Assert.Null(index.GetFilter()); + + indexBuilder.IsUnique(); + + Assert.Equal("[Name] IS NOT NULL", index.GetFilter()); + + /*indexBuilder.IsClustered(); + + Assert.Null(index.GetFilter()); + + indexBuilder.IsClustered(false);*/ + + Assert.Equal("[Name] IS NOT NULL", index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).IsRequired(); + + Assert.Null(index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).IsRequired(false); + + Assert.Equal("[Name] IS NOT NULL", index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).HasColumnName("RelationalName"); + + Assert.Equal("[RelationalName] IS NOT NULL", index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).HasColumnName("LibRedName"); + + Assert.Equal("[LibRedName] IS NOT NULL", index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).HasColumnName(null); + + Assert.Equal("[Name] IS NOT NULL", index.GetFilter()); + + indexBuilder.HasFilter("Foo"); + + Assert.Equal("Foo", index.GetFilter()); + + indexBuilder.HasFilter(null); + + Assert.Null(index.GetFilter()); + } + + [ConditionalFact] + public void Indexes_can_have_same_name_across_tables() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .HasIndex(e => e.Id, "Ix_Id") + .IsUnique(); + modelBuilder.Entity() + .HasIndex(e => e.CustomerId, "Ix_Id") + .IsUnique(); + + var model = modelBuilder.FinalizeModel(); + + var customerIndex = model.FindEntityType(typeof(Customer))!.GetIndexes().Single(); + Assert.Equal("Ix_Id", customerIndex.Name); + Assert.Equal("Ix_Id", customerIndex.GetDatabaseName()); + Assert.Equal( + "Ix_Id", customerIndex.GetDatabaseName( + StoreObjectIdentifier.Table("Customer"))); + + var detailsIndex = model.FindEntityType(typeof(CustomerDetails))!.GetIndexes().Single(); + Assert.Equal("Ix_Id", detailsIndex.Name); + Assert.Equal("Ix_Id", detailsIndex.GetDatabaseName()); + Assert.Equal( + "Ix_Id", detailsIndex.GetDatabaseName( + StoreObjectIdentifier.Table("CustomerDetails"))); + } + + [ConditionalFact] + public virtual void Can_set_store_type_for_property_type() + { + var modelBuilder = CreateModelBuilder(c => + { + c.Properties().HaveColumnType("smallint"); + c.Properties().HaveColumnType("nchar(max)"); + c.Properties(typeof(Nullable<>)).HavePrecision(2); + }); + + modelBuilder.Entity(b => + { + b.Property("Charm"); + b.Property("Strange"); + b.Property("Top"); + b.Property("Bottom"); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(Quarks))!; + + Assert.Equal("smallint", entityType.FindProperty(Customer.IdProperty.Name)!.GetColumnType()); + Assert.Equal("smallint", entityType.FindProperty("Up")!.GetColumnType()); + Assert.Equal("nchar(max)", entityType.FindProperty("Down")!.GetColumnType()); + var charm = entityType.FindProperty("Charm")!; + Assert.Equal("smallint", charm.GetColumnType()); + Assert.Null(charm.GetPrecision()); + Assert.Equal("nchar(max)", entityType.FindProperty("Strange")!.GetColumnType()); + var top = entityType.FindProperty("Top")!; + Assert.Equal("smallint", top.GetColumnType()); + Assert.Equal(2, top.GetPrecision()); + Assert.Equal("nchar(max)", entityType.FindProperty("Bottom")!.GetColumnType()); + } + + [ConditionalFact] + public virtual void Can_set_fixed_length_for_property_type() + { + var modelBuilder = CreateModelBuilder(c => + { + c.Properties().AreFixedLength(false); + c.Properties().AreFixedLength(); + }); + + modelBuilder.Entity(b => + { + b.Property("Charm"); + b.Property("Strange"); + b.Property("Top"); + b.Property("Bottom"); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(Quarks))!; + + Assert.False(entityType.FindProperty(Customer.IdProperty.Name)!.IsFixedLength()); + Assert.False(entityType.FindProperty("Up")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Down")!.IsFixedLength()); + Assert.False(entityType.FindProperty("Charm")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Strange")!.IsFixedLength()); + Assert.False(entityType.FindProperty("Top")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Bottom")!.IsFixedLength()); + } + + [ConditionalFact] + public virtual void Can_set_collation_for_property_type() + { + var modelBuilder = CreateModelBuilder(c => + { + c.Properties().UseCollation("Latin1_General_CS_AS_KS_WS"); + c.Properties().UseCollation("Latin1_General_BIN"); + }); + + modelBuilder.Entity(b => + { + b.Property("Charm"); + b.Property("Strange"); + b.Property("Top"); + b.Property("Bottom"); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(Quarks))!; + + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty(Customer.IdProperty.Name)!.GetCollation()); + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty("Up")!.GetCollation()); + Assert.Equal("Latin1_General_BIN", entityType.FindProperty("Down")!.GetCollation()); + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty("Charm")!.GetCollation()); + Assert.Equal("Latin1_General_BIN", entityType.FindProperty("Strange")!.GetCollation()); + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty("Top")!.GetCollation()); + Assert.Equal("Latin1_General_BIN", entityType.FindProperty("Bottom")!.GetCollation()); + } + + [ConditionalFact] + public virtual void Can_set_store_type_for_primitive_collection() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.PrimitiveCollection(e => e.Up).HasColumnType("national character varying(255)"); + b.PrimitiveCollection(e => e.Down).HasColumnType("nchar(10)"); + b.PrimitiveCollection("Charm").HasColumnType("nvarchar(25)"); + b.PrimitiveCollection("Strange").HasColumnType("text"); + b.PrimitiveCollection>("Top").HasColumnType("char(100)"); + b.PrimitiveCollection?>("Bottom").HasColumnType("varchar(max)"); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(CollectionQuarks))!; + + Assert.Equal("integer", entityType.FindProperty(nameof(CollectionQuarks.Id))!.GetColumnType()); + Assert.Equal("national character varying(255)", entityType.FindProperty("Up")!.GetColumnType()); + Assert.Equal("nchar(10)", entityType.FindProperty("Down")!.GetColumnType()); + Assert.Equal("nvarchar(25)", entityType.FindProperty("Charm")!.GetColumnType()); + Assert.Equal("text", entityType.FindProperty("Strange")!.GetColumnType()); + Assert.Equal("char(100)", entityType.FindProperty("Top")!.GetColumnType()); + Assert.Equal("varchar(max)", entityType.FindProperty("Bottom")!.GetColumnType()); + } + + [ConditionalFact] + public virtual void Can_set_fixed_length_for_primitive_collection() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.PrimitiveCollection(e => e.Up).IsFixedLength(false); + b.PrimitiveCollection(e => e.Down).IsFixedLength(); + b.PrimitiveCollection("Charm").IsFixedLength(); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(CollectionQuarks))!; + + Assert.False(entityType.FindProperty("Up")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Down")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Charm")!.IsFixedLength()); + } + + [ConditionalFact] + public virtual void Can_set_collation_for_primitive_collection() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.PrimitiveCollection(e => e.Up).UseCollation("Latin1_General_CS_AS_KS_WS"); + b.PrimitiveCollection(e => e.Down).UseCollation("Latin1_General_BIN"); + b.PrimitiveCollection("Charm").UseCollation("Latin1_General_CI_AI"); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(CollectionQuarks))!; + + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty("Up")!.GetCollation()); + Assert.Equal("Latin1_General_BIN", entityType.FindProperty("Down")!.GetCollation()); + Assert.Equal("Latin1_General_CI_AI", entityType.FindProperty("Charm")!.GetCollation()); + } + } + + public abstract class LibRedComplexType(LibRedModelBuilderFixture fixture) + : RelationalComplexTypeTestBase(fixture), IClassFixture; + + public abstract class LibRedComplexCollection(LibRedModelBuilderFixture fixture) + : RelationalComplexCollectionTestBase(fixture), IClassFixture; + + public abstract class LibRedInheritance(LibRedModelBuilderFixture fixture) + : RelationalInheritanceTestBase(fixture), IClassFixture + { + [ConditionalFact] // #7240 + public void Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(); + modelBuilder.Entity() + .HasOne(p => p.A) + .WithOne() + .HasForeignKey("ParentId"); + + var model = modelBuilder.FinalizeModel(); + + var property1 = model.FindEntityType(typeof(DisjointChildSubclass1))!.FindProperty("ParentId")!; + Assert.True(property1.IsForeignKey()); + Assert.Equal("ParentId", property1.GetColumnName()); + var property2 = model.FindEntityType(typeof(DisjointChildSubclass2))!.FindProperty("ParentId")!; + Assert.True(property2.IsForeignKey()); + Assert.Equal("ParentId", property2.GetColumnName()); + Assert.Equal("DisjointChildSubclass2_ParentId", property2.GetColumnName(StoreObjectIdentifier.Table(nameof(Child)))); + } + + [ConditionalFact] + public void Inherited_clr_properties_are_mapped_to_the_same_column() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(); + modelBuilder.Ignore(); + modelBuilder.Entity(); + modelBuilder.Entity(); + + var model = modelBuilder.FinalizeModel(); + + var property1 = model.FindEntityType(typeof(DisjointChildSubclass1))!.FindProperty(nameof(Child.Name))!; + Assert.Equal(nameof(Child.Name), property1.GetColumnName()); + var property2 = model.FindEntityType(typeof(DisjointChildSubclass2))!.FindProperty(nameof(Child.Name))!; + Assert.Equal(nameof(Child.Name), property2.GetColumnName()); + } + + [ConditionalFact] //Issue#10659 + public void Index_convention_run_for_fk_when_derived_type_discovered_before_base_type() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Ignore(); + modelBuilder.Entity(); + modelBuilder.Entity(); + + var index = modelBuilder.Model.FindEntityType(typeof(CustomerDetails))!.GetIndexes().Single(); + + Assert.Equal("[CustomerId] IS NOT NULL", index.GetFilter()); + } + + [ConditionalFact] + public void Index_convention_sets_filter_for_unique_index_when_base_type_changed() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Ignore(); + modelBuilder.Entity() + .HasIndex(e => e.CustomerId) + .IsUnique(); + + modelBuilder.Entity(); + + var index = modelBuilder.Model.FindEntityType(typeof(CustomerDetails))!.GetIndexes().Single(); + + Assert.Equal("[CustomerId] IS NOT NULL", index.GetFilter()); + + modelBuilder.Ignore(); + + Assert.Null(index.GetFilter()); + } + + [ConditionalFact] + public virtual void Can_override_TPC_with_TPH() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity

(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity() + .UseTpcMappingStrategy() + .UseTphMappingStrategy(); + + var model = modelBuilder.FinalizeModel(); + + Assert.Equal("Discriminator", model.FindEntityType(typeof(PBase))!.GetDiscriminatorPropertyName()); + Assert.Equal(nameof(PBase), model.FindEntityType(typeof(PBase))!.GetDiscriminatorValue()); + Assert.Equal(nameof(P), model.FindEntityType(typeof(P))!.GetDiscriminatorValue()); + Assert.Equal(nameof(Q), model.FindEntityType(typeof(Q))!.GetDiscriminatorValue()); + } + + [ConditionalFact] + public virtual void TPT_identifying_FK_is_created_only_on_declaring_table() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .Ignore(b => b.Bun) + .Ignore(b => b.Pickles); + modelBuilder.Entity(b => + { + b.ToTable("Ingredients"); + b.Ignore(i => i.BigMak); + }); + modelBuilder.Entity(b => + { + b.ToTable("Buns"); + b.HasOne(i => i.BigMak).WithOne().HasForeignKey(i => i.Id); + }); + modelBuilder.Entity(b => + { + b.ToTable("SesameBuns"); + }); + + var model = modelBuilder.FinalizeModel(); + + var principalType = model.FindEntityType(typeof(BigMak))!; + Assert.Empty(principalType.GetForeignKeys()); + Assert.Empty(principalType.GetIndexes()); + Assert.Null(principalType.FindDiscriminatorProperty()); + + var ingredientType = model.FindEntityType(typeof(Ingredient))!; + + var bunType = model.FindEntityType(typeof(Bun))!; + Assert.Empty(bunType.GetIndexes()); + Assert.Null(bunType.FindDiscriminatorProperty()); + var bunFk = bunType.GetDeclaredForeignKeys().Single(fk => !fk.IsBaseLinking()); + Assert.Equal("FK_Buns_BigMak_Id", bunFk.GetConstraintName()); + Assert.Equal( + "FK_Buns_BigMak_Id", bunFk.GetConstraintName( + StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(principalType, StoreObjectType.Table)!.Value)); + Assert.Single(bunFk.GetMappedConstraints()); + + var bunLinkingFk = bunType.GetDeclaredForeignKeys().Single(fk => fk.IsBaseLinking()); + Assert.Equal("FK_Buns_Ingredients_Id", bunLinkingFk.GetConstraintName()); + Assert.Equal( + "FK_Buns_Ingredients_Id", bunLinkingFk.GetConstraintName( + StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(ingredientType, StoreObjectType.Table)!.Value)); + Assert.Single(bunLinkingFk.GetMappedConstraints()); + + var sesameBunType = model.FindEntityType(typeof(SesameBun))!; + Assert.Empty(sesameBunType.GetIndexes()); + var sesameBunFk = sesameBunType.GetDeclaredForeignKeys().Single(); + Assert.True(sesameBunFk.IsBaseLinking()); + Assert.Equal("FK_SesameBuns_Buns_Id", sesameBunFk.GetConstraintName()); + Assert.Equal( + "FK_SesameBuns_Buns_Id", sesameBunFk.GetConstraintName( + StoreObjectIdentifier.Create(sesameBunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value)); + Assert.Single(sesameBunFk.GetMappedConstraints()); + } + + [ConditionalFact] + public virtual void TPC_identifying_FKs_are_created_on_all_tables() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .Ignore(b => b.Bun) + .Ignore(b => b.Pickles); + modelBuilder.Entity(b => + { + b.ToTable("Ingredients"); + b.Ignore(i => i.BigMak); + b.HasIndex(e => e.BurgerId); + b.UseTpcMappingStrategy(); + }); + modelBuilder.Entity(b => + { + b.ToTable("Buns"); + b.HasOne(i => i.BigMak).WithOne().HasForeignKey(i => i.Id); + b.UseTpcMappingStrategy(); + }); + modelBuilder.Entity(b => + { + b.ToTable("SesameBuns"); + }); + + var model = modelBuilder.FinalizeModel(); + + var principalType = model.FindEntityType(typeof(BigMak))!; + Assert.Empty(principalType.GetForeignKeys()); + Assert.Empty(principalType.GetIndexes()); + Assert.Null(principalType.FindDiscriminatorProperty()); + + var bunType = model.FindEntityType(typeof(Bun))!; + Assert.Empty(bunType.GetDeclaredIndexes()); + Assert.Null(bunType.FindDiscriminatorProperty()); + var bunFk = bunType.GetDeclaredForeignKeys().Single(); + Assert.Equal("FK_Buns_BigMak_Id", bunFk.GetConstraintName()); + Assert.Equal( + "FK_Buns_BigMak_Id", bunFk.GetConstraintName( + StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(principalType, StoreObjectType.Table)!.Value)); + Assert.Equal(2, bunFk.GetMappedConstraints().Count()); + + Assert.DoesNotContain(bunType.GetDeclaredForeignKeys(), fk => fk.IsBaseLinking()); + + var sesameBunType = model.FindEntityType(typeof(SesameBun))!; + Assert.Empty(sesameBunType.GetDeclaredIndexes()); + Assert.Empty(sesameBunType.GetDeclaredForeignKeys()); + Assert.Equal( + "FK_SesameBuns_BigMak_Id", bunFk.GetConstraintName( + StoreObjectIdentifier.Create(sesameBunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(principalType, StoreObjectType.Table)!.Value)); + + var ingredientType = model.FindEntityType(typeof(Ingredient))!; + var ingredientIndex = ingredientType.GetDeclaredIndexes().Single(); + Assert.Equal("IX_Ingredients_BurgerId", ingredientIndex.GetDatabaseName()); + Assert.Equal( + "IX_SesameBuns_BurgerId", + ingredientIndex.GetDatabaseName(StoreObjectIdentifier.Create(sesameBunType, StoreObjectType.Table)!.Value)); + Assert.Equal( + "IX_Buns_BurgerId", + ingredientIndex.GetDatabaseName(StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value)); + } + + [ConditionalFact] + public virtual void TPT_index_can_use_inherited_properties() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .Ignore(b => b.Bun) + .Ignore(b => b.Pickles); + modelBuilder.Entity(b => + { + b.ToTable("Ingredients"); + b.Property("NullableProp"); + b.Ignore(i => i.BigMak); + }); + modelBuilder.Entity(b => + { + b.ToTable("Buns"); + b.HasIndex(bun => bun.BurgerId); + b.HasIndex("NullableProp"); + b.HasOne(i => i.BigMak).WithOne().HasForeignKey(i => i.Id); + }); + + var model = modelBuilder.FinalizeModel(); + + var bunType = model.FindEntityType(typeof(Bun))!; + Assert.All(bunType.GetIndexes(), i => Assert.Null(i.GetFilter())); + } + + [ConditionalFact] + public void Can_add_check_constraints() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .HasBaseType(null) + .ToTable(tb => tb.HasCheckConstraint("CK_ChildBase_LargeId", "Id > 1000").HasName("CK_LargeId")); + modelBuilder.Entity() + .ToTable(tb => + { + tb.HasCheckConstraint("PositiveId", "Id > 0"); + tb.HasCheckConstraint("CK_ChildBase_LargeId", "Id > 1000"); + }); + modelBuilder.Entity() + .HasBaseType(); + modelBuilder.Entity(); + + var model = modelBuilder.FinalizeModel(); + + var @base = model.FindEntityType(typeof(ChildBase))!; + Assert.Equal(2, @base.GetCheckConstraints().Count()); + + var firstCheckConstraint = @base.FindCheckConstraint("PositiveId")!; + Assert.Equal("PositiveId", firstCheckConstraint.ModelName); + Assert.Equal("Id > 0", firstCheckConstraint.Sql); + Assert.Equal("PositiveId", firstCheckConstraint.Name); + + var secondCheckConstraint = @base.FindCheckConstraint("CK_ChildBase_LargeId")!; + Assert.Equal("CK_ChildBase_LargeId", secondCheckConstraint.ModelName); + Assert.Equal("Id > 1000", secondCheckConstraint.Sql); + Assert.Equal("CK_LargeId", secondCheckConstraint.Name); + + var child = model.FindEntityType(typeof(Child))!; + Assert.Equal(@base.GetCheckConstraints(), child.GetCheckConstraints()); + Assert.Empty(child.GetDeclaredCheckConstraints()); + } + + [ConditionalFact] + public void Adding_conflicting_check_constraint_to_derived_type_throws() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .ToTable(tb => tb.HasCheckConstraint("LargeId", "Id > 100").HasName("CK_LargeId")); + + Assert.Equal( + RelationalStrings.DuplicateCheckConstraint("LargeId", nameof(Child), nameof(ChildBase)), + Assert.Throws(() + => modelBuilder.Entity().ToTable(tb => tb.HasCheckConstraint("LargeId", "Id > 1000"))).Message); + } + + [ConditionalFact] + public void Adding_conflicting_check_constraint_to_derived_type_before_base_throws() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .HasBaseType(null) + .ToTable(tb => tb.HasCheckConstraint("LargeId", "Id > 1000")); + modelBuilder.Entity() + .ToTable(tb => tb.HasCheckConstraint("LargeId", "Id > 100").HasName("CK_LargeId")); + + Assert.Equal( + RelationalStrings.DuplicateCheckConstraint("LargeId", nameof(Child), nameof(ChildBase)), + Assert.Throws(() => modelBuilder.Entity().HasBaseType()).Message); + } + + protected class Parent + { + public int Id { get; set; } + public DisjointChildSubclass1? A { get; set; } + public IList? B { get; set; } + } + + protected abstract class ChildBase + { + public int Id { get; set; } + } + + protected abstract class Child : ChildBase + { + public string? Name { get; set; } + } + + protected class DisjointChildSubclass1 : Child; + + protected class DisjointChildSubclass2 : Child; + } + + public abstract class LibRedOneToMany(LibRedModelBuilderFixture fixture) + : RelationalOneToManyTestBase(fixture), IClassFixture + { + [ConditionalFact] + public virtual void Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().ToTable("Events"); + modelBuilder.Entity>().ToTable("CompanyActivities"); + modelBuilder.Entity>().ToTable("UserActivities"); + + var model = modelBuilder.FinalizeModel(); + + var companyActivityEventType = model.FindEntityType(typeof(ActivityEvent))!; + var eventTable = StoreObjectIdentifier.Create(companyActivityEventType, StoreObjectType.Table)!.Value; + var companyActivityEventFk = companyActivityEventType.GetForeignKeys().Single(); + var companyActivityEventFkProperty = companyActivityEventFk.Properties.Single(); + Assert.Equal("ActivityId", companyActivityEventFkProperty.GetColumnName(eventTable)); + Assert.Equal("FK_Events_CompanyActivities_ActivityId", companyActivityEventFk.GetConstraintName()); + Assert.Equal( + "FK_Events_CompanyActivities_ActivityId", companyActivityEventFk.GetConstraintName( + eventTable, + StoreObjectIdentifier.Create(companyActivityEventFk.PrincipalEntityType, StoreObjectType.Table)!.Value)); + + var userActivityEventType = model.FindEntityType(typeof(ActivityEvent))!; + var userActivityEventFk = userActivityEventType.GetForeignKeys().Single(); + var userActivityEventFkProperty = userActivityEventFk.Properties.Single(); + Assert.Equal("ActivityId", userActivityEventFkProperty.GetColumnName(eventTable)); + Assert.Equal("FK_Events_UserActivities_ActivityId", userActivityEventFk.GetConstraintName()); + Assert.Equal( + "FK_Events_UserActivities_ActivityId", userActivityEventFk.GetConstraintName( + eventTable, + StoreObjectIdentifier.Create(userActivityEventFk.PrincipalEntityType, StoreObjectType.Table)!.Value)); + } + + protected abstract class EventBase + { + public string? Id { get; set; } + } + + protected class Activity + { + public string? Id { get; set; } + public virtual List> Events { get; } = null!; + } + + protected class ActivityEvent : EventBase; + + protected class Company; + + protected class User; + } + + public abstract class LibRedManyToOne(LibRedModelBuilderFixture fixture) + : RelationalManyToOneTestBase(fixture), IClassFixture; + + public abstract class LibRedOneToOne(LibRedModelBuilderFixture fixture) + : RelationalOneToOneTestBase(fixture), IClassFixture; + + public abstract class LibRedManyToMany(LibRedModelBuilderFixture fixture) + : RelationalManyToManyTestBase(fixture), IClassFixture + { + [ConditionalFact] + public virtual void Join_entity_type_uses_same_schema() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().ToTable("Category", "mySchema").Ignore(c => c.ProductCategories); + modelBuilder.Entity().ToTable("Product", "mySchema"); + modelBuilder.Entity(); + + var model = modelBuilder.FinalizeModel(); + + var productType = model.FindEntityType(typeof(Product))!; + var categoryType = model.FindEntityType(typeof(Category))!; + + var categoriesNavigation = productType.GetSkipNavigations().Single(); + var productsNavigation = categoryType.GetSkipNavigations().Single(); + + var categoriesFk = categoriesNavigation.ForeignKey; + var productsFk = productsNavigation.ForeignKey; + var productCategoryType = categoriesFk.DeclaringEntityType; + + Assert.Equal(typeof(Dictionary), productCategoryType.ClrType); + Assert.Equal("mySchema", productCategoryType.GetSchema()); + Assert.Same(categoriesFk, productCategoryType.GetForeignKeys().Last()); + Assert.Same(productsFk, productCategoryType.GetForeignKeys().First()); + Assert.Equal(2, productCategoryType.GetForeignKeys().Count()); + } + + [ConditionalFact] + public virtual void Join_entity_type_uses_default_schema_if_related_are_different() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().ToTable("Category").Ignore(c => c.ProductCategories); + modelBuilder.Entity().ToTable("Product", "dbo"); + modelBuilder.Entity(); + + var model = modelBuilder.FinalizeModel(); + + var productType = model.FindEntityType(typeof(Product))!; + var categoryType = model.FindEntityType(typeof(Category))!; + + var categoriesNavigation = productType.GetSkipNavigations().Single(); + var productsNavigation = categoryType.GetSkipNavigations().Single(); + + var categoriesFk = categoriesNavigation.ForeignKey; + var productsFk = productsNavigation.ForeignKey; + var productCategoryType = categoriesFk.DeclaringEntityType; + + Assert.Equal(typeof(Dictionary), productCategoryType.ClrType); + Assert.Null(productCategoryType.GetSchema()); + Assert.Same(categoriesFk, productCategoryType.GetForeignKeys().Last()); + Assert.Same(productsFk, productCategoryType.GetForeignKeys().First()); + Assert.Equal(2, productCategoryType.GetForeignKeys().Count()); + } + } + + public abstract class LibRedOwnedTypes(LibRedModelBuilderFixture fixture) + : RelationalOwnedTypesTestBase(fixture), IClassFixture + { + [ConditionalFact] + public virtual void Owned_types_use_table_splitting_by_default() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().OwnsOne( + b => b.AlternateLabel, + b => + { + b.Ignore(l => l.Book); + b.OwnsOne( + l => l.AnotherBookLabel, + ab => + { + ab.Property(l => l.BookId).HasColumnName("BookId2"); + ab.Ignore(l => l.Book); + ab.OwnsOne( + s => s.SpecialBookLabel, + s => + { + s.Property(l => l.BookId).HasColumnName("BookId2"); + s.Ignore(l => l.Book); + s.Ignore(l => l.BookLabel); + }); + }); + }); + + modelBuilder.Entity().OwnsOne(b => b.Label) + .Ignore(l => l.Book) + .OwnsOne(l => l.SpecialBookLabel) + .Ignore(l => l.Book) + .OwnsOne(a => a.AnotherBookLabel) + .Ignore(l => l.Book); + + modelBuilder.Entity().OwnsOne(b => b.Label) + .OwnsOne(l => l.AnotherBookLabel) + .Ignore(l => l.Book) + .OwnsOne(a => a.SpecialBookLabel) + .Ignore(l => l.Book) + .Ignore(l => l.BookLabel); + + modelBuilder.Entity().OwnsOne( + b => b.AlternateLabel, + b => + { + b.Ignore(l => l.Book); + b.OwnsOne( + l => l.SpecialBookLabel, + ab => + { + ab.Property(l => l.BookId).HasColumnName("BookId2"); + ab.Ignore(l => l.Book); + ab.OwnsOne( + s => s.AnotherBookLabel, + s => + { + s.Property(l => l.BookId).HasColumnName("BookId2"); + s.Ignore(l => l.Book); + }); + }); + }); + + var model = (IModel)modelBuilder.Model; + var book = model.FindEntityType(typeof(Book))!; + var bookOwnership1 = book.FindNavigation(nameof(Book.Label))!.ForeignKey; + var bookOwnership2 = book.FindNavigation(nameof(Book.AlternateLabel))!.ForeignKey; + var bookLabel1Ownership1 = bookOwnership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))!.ForeignKey; + var bookLabel1Ownership2 = bookOwnership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))!.ForeignKey; + var bookLabel2Ownership1 = bookOwnership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))!.ForeignKey; + var bookLabel2Ownership2 = bookOwnership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))!.ForeignKey; + + Assert.Equal(book.GetTableName(), bookOwnership1.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookOwnership2.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookLabel1Ownership1.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookLabel1Ownership2.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookLabel2Ownership1.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookLabel2Ownership2.DeclaringEntityType.GetTableName()); + + Assert.NotSame(bookOwnership1.DeclaringEntityType, bookOwnership2.DeclaringEntityType); + Assert.Single(bookOwnership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookOwnership1.DeclaringEntityType.GetForeignKeys()); + + Assert.NotSame(bookLabel1Ownership1.DeclaringEntityType, bookLabel2Ownership1.DeclaringEntityType); + Assert.NotSame(bookLabel1Ownership2.DeclaringEntityType, bookLabel2Ownership2.DeclaringEntityType); + Assert.Single(bookLabel1Ownership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel1Ownership2.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership2.DeclaringEntityType.GetForeignKeys()); + + Assert.Equal(2, model.GetEntityTypes().Count(e => e.ClrType == typeof(BookLabel))); + Assert.Equal(4, model.GetEntityTypes().Count(e => e.ClrType == typeof(AnotherBookLabel))); + Assert.Equal(4, model.GetEntityTypes().Count(e => e.ClrType == typeof(SpecialBookLabel))); + + Assert.Null( + bookOwnership1.DeclaringEntityType.FindProperty(nameof(BookLabel.Id))! + .GetColumnName(StoreObjectIdentifier.Table("Label"))); + Assert.Null( + bookLabel2Ownership1.DeclaringEntityType.FindProperty(nameof(BookLabel.Id))! + .GetColumnName(StoreObjectIdentifier.Table("AlternateLabel"))); + + modelBuilder.Entity().OwnsOne(b => b.Label).ToTable("Label"); + modelBuilder.Entity().OwnsOne(b => b.AlternateLabel).ToTable("AlternateLabel"); + + model = modelBuilder.FinalizeModel(); + + Assert.Equal( + nameof(BookLabel.Id), + bookOwnership1.DeclaringEntityType.FindProperty(nameof(BookLabel.Id))! + .GetColumnName(StoreObjectIdentifier.Table("Label"))); + Assert.Equal( + nameof(BookLabel.AnotherBookLabel) + "_" + nameof(BookLabel.Id), + bookLabel2Ownership1.DeclaringEntityType.FindProperty(nameof(BookLabel.Id))! + .GetColumnName(StoreObjectIdentifier.Table("AlternateLabel"))); + + var alternateTable = model.GetRelationalModel().FindTable("AlternateLabel", null)!; + var bookId = alternateTable.FindColumn("BookId2")!; + + Assert.Equal(4, bookId.PropertyMappings.Count()); + Assert.All(bookId.PropertyMappings, m => Assert.Equal(ValueGenerated.OnUpdateSometimes, m.Property.ValueGenerated)); + } + + /*[ConditionalFact] + public virtual void Owned_types_can_be_mapped_to_different_tables() + { + var modelBuilder = CreateModelBuilder(); + var model = modelBuilder.Model; + + modelBuilder.Entity(bb => + { + bb.ToTable( + "BT", "BS", t => + { + t.ExcludeFromMigrations(); + + Assert.Equal("BT", t.Name); + Assert.Equal("BS", t.Schema); + }); + bb.OwnsOne( + b => b.AlternateLabel, tb => + { + tb.Ignore(l => l.Book); + tb.WithOwner() + .HasConstraintName("AlternateLabelFK"); + tb.ToTable("TT", "TS", tb => tb.IsMemoryOptimized()); + tb.OwnsOne( + l => l.AnotherBookLabel, ab => + { + ab.Ignore(l => l.Book); + ab.ToTable( + "AT1", "AS1", t => + { + t.ExcludeFromMigrations(false); + + Assert.Equal("AT1", t.Name); + Assert.Equal("AS1", t.Schema); + }); + ab.OwnsOne(s => s.SpecialBookLabel) + .ToTable("ST11", "SS11") + .Ignore(l => l.Book) + .Ignore(l => l.BookLabel); + + ab.OwnedEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))! + .AddAnnotation("Foo", "Bar"); + }); + tb.OwnsOne( + l => l.SpecialBookLabel, sb => + { + sb.Ignore(l => l.Book); + sb.ToTable("ST2", "SS2"); + sb.OwnsOne(s => s.AnotherBookLabel) + .ToTable("AT21", "AS21") + .Ignore(l => l.Book); + }); + }); + bb.OwnsOne( + b => b.Label, lb => + { + lb.Ignore(l => l.Book); + lb.ToTable("LT", "LS"); + lb.OwnsOne( + l => l.SpecialBookLabel, sb => + { + sb.Ignore(l => l.Book); + sb.ToTable("ST1", "SS1"); + sb.OwnsOne(a => a.AnotherBookLabel) + .ToTable("AT11", "AS11") + .Ignore(l => l.Book); + }); + lb.OwnsOne( + l => l.AnotherBookLabel, ab => + { + ab.Ignore(l => l.Book); + ab.ToTable("AT2", "AS2"); + ab.OwnsOne(a => a.SpecialBookLabel) + .ToTable("ST21", "SS21") + .Ignore(l => l.BookLabel) + .Ignore(l => l.Book); + }); + }); + }); + + modelBuilder.FinalizeModel(); + + var book = model.FindEntityType(typeof(Book))!; + var bookOwnership1 = book.FindNavigation(nameof(Book.Label))!.ForeignKey; + var bookOwnership2 = book.FindNavigation(nameof(Book.AlternateLabel))!.ForeignKey; + var bookLabel1Ownership1 = bookOwnership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))!.ForeignKey; + var bookLabel1Ownership2 = bookOwnership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))!.ForeignKey; + var bookLabel2Ownership1 = bookOwnership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))!.ForeignKey; + var bookLabel2Ownership2 = bookOwnership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))!.ForeignKey; + var bookLabel1Ownership11 = bookLabel1Ownership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))! + .ForeignKey; + var bookLabel1Ownership21 = bookLabel1Ownership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))! + .ForeignKey; + var bookLabel2Ownership11 = bookLabel2Ownership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))! + .ForeignKey; + var bookLabel2Ownership21 = bookLabel2Ownership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))! + .ForeignKey; + + Assert.Equal("AlternateLabelFK", bookOwnership2.GetConstraintName()); + + Assert.Equal("BS", book.GetSchema()); + Assert.Equal("BT", book.GetTableName()); + Assert.True(book.IsTableExcludedFromMigrations()); + Assert.Equal("LS", bookOwnership1.DeclaringEntityType.GetSchema()); + Assert.Equal("LT", bookOwnership1.DeclaringEntityType.GetTableName()); + //Assert.False(bookOwnership1.DeclaringEntityType.IsMemoryOptimized()); + Assert.True(bookOwnership1.DeclaringEntityType.IsTableExcludedFromMigrations()); + Assert.Equal("TS", bookOwnership2.DeclaringEntityType.GetSchema()); + Assert.Equal("TT", bookOwnership2.DeclaringEntityType.GetTableName()); + //Assert.True(bookOwnership2.DeclaringEntityType.IsMemoryOptimized()); + Assert.True(bookOwnership2.DeclaringEntityType.IsTableExcludedFromMigrations()); + Assert.Equal("AS2", bookLabel1Ownership1.DeclaringEntityType.GetSchema()); + Assert.Equal("AT2", bookLabel1Ownership1.DeclaringEntityType.GetTableName()); + Assert.Equal("SS1", bookLabel1Ownership2.DeclaringEntityType.GetSchema()); + Assert.Equal("ST1", bookLabel1Ownership2.DeclaringEntityType.GetTableName()); + Assert.Equal("AS1", bookLabel2Ownership1.DeclaringEntityType.GetSchema()); + Assert.Equal("AT1", bookLabel2Ownership1.DeclaringEntityType.GetTableName()); + Assert.False(bookLabel2Ownership1.DeclaringEntityType.IsTableExcludedFromMigrations()); + Assert.Equal("SS2", bookLabel2Ownership2.DeclaringEntityType.GetSchema()); + Assert.Equal("ST2", bookLabel2Ownership2.DeclaringEntityType.GetTableName()); + Assert.Equal("SS21", bookLabel1Ownership11.DeclaringEntityType.GetSchema()); + Assert.Equal("ST21", bookLabel1Ownership11.DeclaringEntityType.GetTableName()); + Assert.Equal("AS11", bookLabel1Ownership21.DeclaringEntityType.GetSchema()); + Assert.Equal("AT11", bookLabel1Ownership21.DeclaringEntityType.GetTableName()); + Assert.Equal("SS11", bookLabel2Ownership11.DeclaringEntityType.GetSchema()); + Assert.Equal("ST11", bookLabel2Ownership11.DeclaringEntityType.GetTableName()); + Assert.Equal("AS21", bookLabel2Ownership21.DeclaringEntityType.GetSchema()); + Assert.Equal("AT21", bookLabel2Ownership21.DeclaringEntityType.GetTableName()); + + Assert.Equal("Bar", bookLabel2Ownership11.PrincipalToDependent?["Foo"]); + + Assert.NotSame(bookOwnership1.DeclaringEntityType, bookOwnership2.DeclaringEntityType); + Assert.Single(bookOwnership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookOwnership2.DeclaringEntityType.GetForeignKeys()); + + Assert.NotSame(bookLabel1Ownership1.DeclaringEntityType, bookLabel2Ownership1.DeclaringEntityType); + Assert.NotSame(bookLabel1Ownership2.DeclaringEntityType, bookLabel2Ownership2.DeclaringEntityType); + Assert.Single(bookLabel1Ownership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel1Ownership2.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership2.DeclaringEntityType.GetForeignKeys()); + + Assert.NotSame(bookLabel1Ownership11.DeclaringEntityType, bookLabel2Ownership11.DeclaringEntityType); + Assert.NotSame(bookLabel1Ownership21.DeclaringEntityType, bookLabel2Ownership21.DeclaringEntityType); + Assert.Single(bookLabel1Ownership11.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel1Ownership21.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership11.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership21.DeclaringEntityType.GetForeignKeys()); + + Assert.Equal(2, model.GetEntityTypes().Count(e => e.ClrType == typeof(BookLabel))); + Assert.Equal(4, model.GetEntityTypes().Count(e => e.ClrType == typeof(AnotherBookLabel))); + Assert.Equal(4, model.GetEntityTypes().Count(e => e.ClrType == typeof(SpecialBookLabel))); + + Assert.Equal(ValueGenerated.Never, bookOwnership1.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal(ValueGenerated.Never, bookOwnership2.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + + Assert.Equal( + ValueGenerated.Never, bookLabel1Ownership1.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel1Ownership2.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel2Ownership1.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel2Ownership2.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + + Assert.Equal( + ValueGenerated.Never, bookLabel1Ownership11.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel1Ownership21.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel2Ownership11.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel2Ownership21.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + } + + [ConditionalFact] + public virtual void Owned_type_collections_can_be_mapped_to_different_tables() + { + var modelBuilder = CreateModelBuilder(); + var model = modelBuilder.Model; + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => + { + r.HasKey(o => o.OrderId); + r.ToTable(tb => tb.IsMemoryOptimized()); + r.Ignore(o => o.OrderCombination); + r.Ignore(o => o.Details); + }); + + var ownership = model.FindEntityType(typeof(Customer))!.FindNavigation(nameof(Customer.Orders))!.ForeignKey; + var owned = ownership.DeclaringEntityType; + Assert.True(ownership.IsOwnership); + Assert.Equal(nameof(Order.Customer), ownership.DependentToPrincipal?.Name); + Assert.Equal("FK_Order_Customer_CustomerId", ownership.GetConstraintName()); + + Assert.Single(owned.GetForeignKeys()); + Assert.Single(owned.GetIndexes()); + Assert.Equal( + [nameof(Order.OrderId), nameof(Order.AnotherCustomerId), nameof(Order.CustomerId)], + owned.GetProperties().Select(p => p.GetColumnName())); + Assert.Equal(nameof(Order), owned.GetTableName()); + Assert.Null(owned.GetSchema()); + Assert.True(owned.IsMemoryOptimized()); + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => + { + r.WithOwner(o => o.Customer).HasConstraintName("Owned"); + r.ToTable("bar", "foo"); + }); + + Assert.Equal("bar", owned.GetTableName()); + Assert.Equal("foo", owned.GetSchema()); + Assert.Equal("Owned", ownership.GetConstraintName()); + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => r.ToTable("blah")); + + modelBuilder.FinalizeModel(); + + Assert.Equal("blah", owned.GetTableName()); + Assert.Null(owned.GetSchema()); + }*/ + + [ConditionalFact] + public virtual void Owned_type_collections_are_mapped_to_same_tables_by_default() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity(b => + { + b.OwnsOne(x => x.OwnedReference1, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsOne(x => x.OwnedReference2, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsMany(x => x.OwnedCollection1, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsMany(x => x.OwnedCollection2, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + }); + + Assert.Equal(RelationalStrings.IncompatibleTableNoRelationship( + "JsonEntityWithNesting_Collection1", + "JsonEntityWithNesting.OwnedReference2#OwnedEntityExtraLevel.Collection1#OwnedEntity", + "JsonEntityWithNesting.OwnedReference1#OwnedEntityExtraLevel.Collection1#OwnedEntity"), + Assert.Throws(() => modelBuilder.FinalizeModel()).Message); + } + + [ConditionalFact] + public virtual void Owned_type_collections_can_be_mapped_to_a_view() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => + { + r.HasKey(o => o.OrderId); + r.Ignore(o => o.OrderCombination); + r.Ignore(o => o.Details); + r.ToView("bar", "foo"); + }); + + var model = modelBuilder.FinalizeModel(); + + var owner = model.FindEntityType(typeof(Customer))!; + var ownership = owner.FindNavigation(nameof(Customer.Orders))!.ForeignKey; + var owned = ownership.DeclaringEntityType; + Assert.True(ownership.IsOwnership); + Assert.Equal(nameof(Order.Customer), ownership.DependentToPrincipal?.Name); + Assert.Empty(ownership.GetMappedConstraints()); + + Assert.Equal(nameof(Customer), owner.GetTableName()); + Assert.Null(owner.GetSchema()); + + Assert.Null(owned.GetForeignKeys().Single().GetConstraintName()); + Assert.Single(owned.GetIndexes()); + Assert.Null(owned.FindPrimaryKey()!.GetName()); + Assert.Equal( + [nameof(Order.OrderId), nameof(Order.AnotherCustomerId), nameof(Order.CustomerId)], + owned.GetProperties().Select(p => p.GetColumnName())); + Assert.Null(owned.GetTableName()); + Assert.Null(owned.GetSchema()); + Assert.Equal("bar", owned.GetViewName()); + Assert.Equal("foo", owned.GetViewSchema()); + } + + [ConditionalFact] + public virtual void Owner_can_be_mapped_to_a_view() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => + { + r.HasKey(o => o.OrderId); + r.Ignore(o => o.OrderCombination); + r.Ignore(o => o.Details); + }) + .ToView("bar", "foo"); + + var model = modelBuilder.FinalizeModel(); + + var owner = model.FindEntityType(typeof(Customer))!; + var ownership = owner.FindNavigation(nameof(Customer.Orders))!.ForeignKey; + var owned = ownership.DeclaringEntityType; + Assert.True(ownership.IsOwnership); + Assert.Equal(nameof(Order.Customer), ownership.DependentToPrincipal?.Name); + Assert.Empty(ownership.GetMappedConstraints()); + + Assert.Null(owner.GetTableName()); + Assert.Null(owner.GetSchema()); + Assert.Equal("bar", owner.GetViewName()); + Assert.Equal("foo", owner.GetViewSchema()); + + Assert.Null(owned.GetForeignKeys().Single().GetConstraintName()); + Assert.Equal("IX_Order_CustomerId", owned.GetIndexes().Single().GetDatabaseName()); + Assert.Equal("PK_Order", owned.FindPrimaryKey()!.GetName()); + Assert.Equal( + [nameof(Order.OrderId), nameof(Order.AnotherCustomerId), nameof(Order.CustomerId)], + owned.GetProperties().Select(p => p.GetColumnName())); + Assert.Equal(nameof(Order), owned.GetTableName()); + Assert.Null(owned.GetSchema()); + } + + [ConditionalFact] + public virtual void Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity(b => + { + b.OwnsOne(x => x.OwnedReference1); + b.OwnsOne(x => x.OwnedReference2, bb => bb.ToJson("reference")); + b.OwnsMany(x => x.OwnedCollection1); + b.OwnsMany(x => x.OwnedCollection2, bb => bb.ToJson("collection")); + }); + + var model = modelBuilder.FinalizeModel(); + var owner = model.FindEntityType(typeof(JsonEntity))!; + Assert.False(owner.IsMappedToJson()); + Assert.True(owner.GetDeclaredProperties().All(x => x.GetJsonPropertyName() == null)); + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(4, ownedEntities.Count()); + Assert.Equal(2, ownedEntities.Where(e => e.IsMappedToJson()).Count()); + Assert.Equal(2, ownedEntities.Where(e => e.IsOwned() && !e.IsMappedToJson()).Count()); + var reference = ownedEntities.Where(e => e.GetContainerColumnName() == "reference").Single(); + Assert.Equal("Date", reference.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", reference.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", reference.GetProperty("Enum").GetJsonPropertyName()); + + var collection = ownedEntities.Where(e => e.GetContainerColumnName() == "collection").Single(); + Assert.Equal("Date", collection.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", collection.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", collection.GetProperty("Enum").GetJsonPropertyName()); + + var nonJson = ownedEntities.Where(e => !e.IsMappedToJson()).ToList(); + Assert.True(nonJson.All(x => x.GetProperty("Date").GetJsonPropertyName() == null)); + Assert.True(nonJson.All(x => x.GetProperty("Fraction").GetJsonPropertyName() == null)); + Assert.True(nonJson.All(x => x.GetProperty("Enum").GetJsonPropertyName() == null)); + } + + [ConditionalFact] + public virtual void Json_entity_with_tph_inheritance() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity(b => + { + b.OwnsOne(x => x.OwnedReferenceOnBase, bb => bb.ToJson("reference_on_base")); + b.OwnsMany(x => x.OwnedCollectionOnBase, bb => bb.ToJson("collection_on_base")); + }); + + modelBuilder.Entity(b => + { + b.HasBaseType(); + b.OwnsOne(x => x.OwnedReferenceOnDerived, bb => bb.ToJson("reference_on_derived")); + b.OwnsMany(x => x.OwnedCollectionOnDerived, bb => bb.ToJson("collection_on_derived")); + }); + + var model = modelBuilder.FinalizeModel(); + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)).ToList(); + Assert.Equal(4, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.Equal("Date", ownedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", ownedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", ownedEntity.GetProperty("Enum").GetJsonPropertyName()); + } + + var jsonColumnNames = ownedEntities.Select(x => x.GetContainerColumnName()).OrderBy(x => x).ToList(); + Assert.Equal("collection_on_base", jsonColumnNames[0]); + Assert.Equal("collection_on_derived", jsonColumnNames[1]); + Assert.Equal("reference_on_base", jsonColumnNames[2]); + Assert.Equal("reference_on_derived", jsonColumnNames[3]); + } + + [ConditionalFact] + public virtual void Json_entity_with_nested_structure_same_property_names() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.ToJson("ref1"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsOne( + x => x.OwnedReference2, bb => + { + bb.ToJson("ref2"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.ToJson("col1"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsMany( + x => x.OwnedCollection2, bb => + { + bb.ToJson("col2"); + bb.OwnsOne(x => x.Reference1) + .HasAnnotation(RelationalAnnotationNames.JsonPropertyName, null); + bb.OwnsOne(x => x.Reference2) + .ToTable("Ref2") + .HasAnnotation(RelationalAnnotationNames.ContainerColumnName, null); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + + Assert.Collection( + outerOwnedEntities, + e => Assert.Equal("col1", e.GetContainerColumnName()), + e => Assert.Equal("col2", e.GetContainerColumnName()), + e => Assert.Equal("ref1", e.GetContainerColumnName()), + e => Assert.Equal("ref2", e.GetContainerColumnName())); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.Equal("Date", outerOwnedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", outerOwnedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", outerOwnedEntity.GetProperty("Enum").GetJsonPropertyName()); + + var nestedOwnedTypes = outerOwnedEntity.GetNavigations().Select(n => n.TargetEntityType).ToList(); + Assert.Collection( + nestedOwnedTypes, + e => Assert.Equal("Collection1", e.GetJsonPropertyName()), + e => Assert.Equal("Collection2", e.GetJsonPropertyName()), + e => Assert.Equal( + outerOwnedEntity.GetContainerColumnName() == "col2" ? null : "Reference1", + e.GetJsonPropertyName()), + e => Assert.Equal( + outerOwnedEntity.GetContainerColumnName() == "col2" ? null : "Reference2", + e.GetJsonPropertyName())); + + Assert.Collection( + nestedOwnedTypes, + e => Assert.Equal(outerOwnedEntity.GetContainerColumnName(), e.GetContainerColumnName()), + e => Assert.Equal(outerOwnedEntity.GetContainerColumnName(), e.GetContainerColumnName()), + e => Assert.Equal(outerOwnedEntity.GetContainerColumnName(), e.GetContainerColumnName()), + e => Assert.Equal( + outerOwnedEntity.GetContainerColumnName() == "col2" ? null : outerOwnedEntity.GetContainerColumnName(), + e.GetContainerColumnName())); + + foreach (var ownedEntity in nestedOwnedTypes) + { + if (ownedEntity.GetContainerColumnName() == null) + { + continue; + } + + Assert.Equal("Date", ownedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", ownedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", ownedEntity.GetProperty("Enum").GetJsonPropertyName()); + } + } + + Assert.Equal(16, model.FindEntityTypes(typeof(OwnedEntity)).Count()); + } + + [ConditionalFact] + public virtual void Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.ToJson(); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.Ignore(x => x.OwnedReference2); + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.ToJson(); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(2, outerOwnedEntities.Count()); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.True(outerOwnedEntity.IsMappedToJson()); + var myEnum = outerOwnedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(8, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.True(ownedEntity.IsMappedToJson()); + var myEnum = ownedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + } + + [ConditionalFact] + public virtual void Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + bb.ToJson(); + }); + + b.Ignore(x => x.OwnedReference2); + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + bb.ToJson(); + }); + + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(2, outerOwnedEntities.Count()); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.True(outerOwnedEntity.IsMappedToJson()); + var myEnum = outerOwnedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(8, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.True(ownedEntity.IsMappedToJson()); + var myEnum = ownedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + } + + [ConditionalFact] + public virtual void Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.ToJson(); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + bb.ToJson(null); + }); + + b.Ignore(x => x.OwnedReference2); + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + bb.ToJson(); + bb.ToJson(null); + }); + + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(2, outerOwnedEntities.Count()); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.False(outerOwnedEntity.IsMappedToJson()); +#pragma warning disable CS0618 + Assert.Null(outerOwnedEntity.GetContainerColumnTypeMapping()); +#pragma warning restore CS0618 + var myEnum = outerOwnedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(8, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.False(ownedEntity.IsMappedToJson()); +#pragma warning disable CS0618 + Assert.Null(ownedEntity.GetContainerColumnTypeMapping()); +#pragma warning restore CS0618 + var myEnum = ownedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + } + + [ConditionalFact] + public virtual void Json_entity_mapped_to_view() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.ToView("MyView"); + b.OwnsOne(x => x.OwnedReference1, bb => bb.ToJson()); + b.Ignore(x => x.OwnedReference2); + b.OwnsMany(x => x.OwnedCollection1, bb => bb.ToJson()); + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + + var owner = model.FindEntityType(typeof(JsonEntity))!; + Assert.Equal("MyView", owner.GetViewName()); + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(2, ownedEntities.Count()); + Assert.Equal(2, ownedEntities.Where(e => e.IsMappedToJson()).Count()); + Assert.True(ownedEntities.All(x => x.GetViewName() == "MyView")); + } + + [ConditionalFact] + public virtual void Json_entity_mapped_to_view_with_custom_schema() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.ToView("MyView", "MySchema"); + b.OwnsOne(x => x.OwnedReference1, bb => bb.ToJson()); + b.Ignore(x => x.OwnedReference2); + b.OwnsMany(x => x.OwnedCollection1, bb => bb.ToJson()); + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + + var owner = model.FindEntityType(typeof(JsonEntity))!; + Assert.Equal("MyView", owner.GetViewName()); + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(2, ownedEntities.Count()); + Assert.Equal(2, ownedEntities.Where(e => e.IsMappedToJson()).Count()); + Assert.True(ownedEntities.All(x => x.GetViewName() == "MyView")); + Assert.True(ownedEntities.All(x => x.GetViewSchema() == "MySchema")); + } + + [ConditionalFact] + public virtual void Json_entity_with_custom_property_names() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.ToJson(); + bb.Property(x => x.Date).HasJsonPropertyName("OuterDate"); + bb.Property(x => x.Fraction).HasJsonPropertyName("OuterFraction"); + bb.Property(x => x.Enum).HasJsonPropertyName("OuterEnum"); + bb.OwnsOne( + x => x.Reference1, bbb => + { + bbb.HasJsonPropertyName("RenamedReference1"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsOne( + x => x.Reference2, bbb => + { + bbb.HasJsonPropertyName("RenamedReference2"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsMany( + x => x.Collection1, bbb => + { + bbb.HasJsonPropertyName("RenamedCollection1"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsMany( + x => x.Collection2, bbb => + { + bbb.HasJsonPropertyName("RenamedCollection2"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + }); + + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.Property(x => x.Date).HasJsonPropertyName("OuterDate"); + bb.Property(x => x.Fraction).HasJsonPropertyName("OuterFraction"); + bb.Property(x => x.Enum).HasJsonPropertyName("OuterEnum"); + bb.OwnsOne( + x => x.Reference1, bbb => + { + bbb.HasJsonPropertyName("RenamedReference1"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsOne( + x => x.Reference2, bbb => + { + bbb.HasJsonPropertyName("RenamedReference2"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsMany( + x => x.Collection1, bbb => + { + bbb.HasJsonPropertyName("RenamedCollection1"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsMany( + x => x.Collection2, bbb => + { + bbb.HasJsonPropertyName("RenamedCollection2"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.ToJson(); + }); + + b.Ignore(x => x.OwnedReference2); + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(2, outerOwnedEntities.Count()); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.Equal("OuterDate", outerOwnedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("OuterFraction", outerOwnedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("OuterEnum", outerOwnedEntity.GetProperty("Enum").GetJsonPropertyName()); + Assert.Equal( + "RenamedReference1", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Reference1").TargetEntityType.GetJsonPropertyName()); + Assert.Equal( + "RenamedReference2", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Reference2").TargetEntityType.GetJsonPropertyName()); + Assert.Equal( + "RenamedCollection1", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Collection1").TargetEntityType.GetJsonPropertyName()); + Assert.Equal( + "RenamedCollection2", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Collection2").TargetEntityType.GetJsonPropertyName()); + } + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(8, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.Equal("InnerDate", ownedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("InnerFraction", ownedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("InnerEnum", ownedEntity.GetProperty("Enum").GetJsonPropertyName()); + } + } + } + + public class LibRedModelBuilderFixture : RelationalModelBuilderFixture + { + public override TestHelpers TestHelpers + => LibRedTestHelpers.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedTestModelBuilderExtensions.cs b/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedTestModelBuilderExtensions.cs new file mode 100644 index 00000000..8851375f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ModelBuilding/LibRedTestModelBuilderExtensions.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Microsoft.EntityFrameworkCore.ModelBuilding; +using System; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.ModelBuilding; + +public static class LibRedTestModelBuilderExtensions +{ + +} diff --git a/test/EFCore.LibRed.FunctionalTests/ModelBuilding101LibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ModelBuilding101LibRedTest.cs new file mode 100644 index 00000000..dffc9fef --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ModelBuilding101LibRedTest.cs @@ -0,0 +1,10 @@ +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class ModelBuilding101LibRedTest : ModelBuilding101RelationalTestBase +{ + protected override DbContextOptionsBuilder ConfigureContext(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseLibRed(); +} diff --git a/test/EFCore.LibRed.FunctionalTests/MonsterFixupChangedChangingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/MonsterFixupChangedChangingLibRedTest.cs new file mode 100644 index 00000000..5d48e72f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/MonsterFixupChangedChangingLibRedTest.cs @@ -0,0 +1,64 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.TestModels; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class MonsterFixupChangedChangingLibRedTest( + MonsterFixupChangedChangingLibRedTest.MonsterFixupChangedChangingLibRedFixture fixture) + : + MonsterFixupTestBase(fixture) + { + public class MonsterFixupChangedChangingLibRedFixture : MonsterFixupChangedChangingFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + public override MonsterContext CreateContext(DbContextOptions options) + { + var context = base.CreateContext(options); + + void DropUnsupportedPartialNullCompositeForeignKey(object? sender, SavingChangesEventArgs eventArgs) + { + context.SavingChanges -= DropUnsupportedPartialNullCompositeForeignKey; + context.Database.ExecuteSql( + $"ALTER TABLE `ProductWebFeature` DROP CONSTRAINT `FK_ProductWebFeature_ProductPhoto_PhotoId_ProductId`"); + } + + context.SavingChanges += DropUnsupportedPartialNullCompositeForeignKey; + return context; + } + + protected override void OnModelCreating( + ModelBuilder builder) + { + base.OnModelCreating(builder); + + builder.Entity().Property(e => e.MessageId).UseJetIdentityColumn(); + + builder.Entity() + .OwnsOne( + c => (TDimensions)c.Dimensions, db => + { + db.Property(d => d.Depth).HasColumnType("decimal(18,2)"); + db.Property(d => d.Width).HasColumnType("decimal(18,2)"); + db.Property(d => d.Height).HasColumnType("decimal(18,2)"); + }); + + builder.Entity().Property(e => e.PhotoId).UseJetIdentityColumn(); + builder.Entity().Property(e => e.ReviewId).UseJetIdentityColumn(); + + builder.Entity() + .OwnsOne( + c => (TDimensions)c.Dimensions, db => + { + db.Property(d => d.Depth).HasColumnType("decimal(18,2)"); + db.Property(d => d.Width).HasColumnType("decimal(18,2)"); + db.Property(d => d.Height).HasColumnType("decimal(18,2)"); + }); + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/MusicStoreLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/MusicStoreLibRedTest.cs new file mode 100644 index 00000000..69f6199d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/MusicStoreLibRedTest.cs @@ -0,0 +1,17 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class MusicStoreLibRedTest(MusicStoreLibRedTest.MusicStoreLibRedFixture fixture) + : MusicStoreTestBase(fixture) + { + public class MusicStoreLibRedFixture : MusicStoreFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/NotificationEntitiesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/NotificationEntitiesLibRedTest.cs new file mode 100644 index 00000000..f4aae6e9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/NotificationEntitiesLibRedTest.cs @@ -0,0 +1,17 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class NotificationEntitiesLibRedTest(NotificationEntitiesLibRedTest.NotificationEntitiesLibRedFixture fixture) + : NotificationEntitiesTestBase(fixture) + { + public class NotificationEntitiesLibRedFixture : NotificationEntitiesFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/OptimisticConcurrencyLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/OptimisticConcurrencyLibRedTest.cs new file mode 100644 index 00000000..8bb3aec1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/OptimisticConcurrencyLibRedTest.cs @@ -0,0 +1,406 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestModels.ConcurrencyModel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +#nullable disable + +public class OptimisticConcurrencyLibRedTest(F1LibRedFixture fixture) + : OptimisticConcurrencyLibRedTestBase(fixture) +{ + [ConditionalTheory, InlineData(true), InlineData(false)] + public Task Row_version_with_TPH_and_owned_types(bool updateOwnedFirst) + => Row_version_with_owned_types>(updateOwnedFirst, Mapping.Tph, "BinaryVersion"); + + [ConditionalTheory, InlineData(true), InlineData(false)] + public Task Row_version_with_TPT_and_owned_types(bool updateOwnedFirst) + => Row_version_with_owned_types>(updateOwnedFirst, Mapping.Tpt, "BinaryVersion"); + + [ConditionalTheory, InlineData(true), InlineData(false)] + public Task Row_version_with_TPC_and_owned_types(bool updateOwnedFirst) + => Row_version_with_owned_types>(updateOwnedFirst, Mapping.Tpc, "BinaryVersion"); + + [ConditionalTheory, InlineData(true), InlineData(false)] + public Task Ulong_row_version_with_TPH_and_table_splitting(bool updateDependentFirst) + => Row_version_with_table_splitting>(updateDependentFirst, Mapping.Tph, "BinaryVersion"); + + [ConditionalTheory, InlineData(true), InlineData(false)] + public Task Ulong_row_version_with_TPT_and_table_splitting(bool updateDependentFirst) + => Row_version_with_table_splitting>(updateDependentFirst, Mapping.Tpt, "BinaryVersion"); + + [ConditionalTheory, InlineData(true), InlineData(false)] + public Task Ulong_row_version_with_TPC_and_table_splitting(bool updateDependentFirst) + => Row_version_with_table_splitting>(updateDependentFirst, Mapping.Tpc, "BinaryVersion"); +} + +public abstract class OptimisticConcurrencyLibRedTestBase(TFixture fixture) + : OptimisticConcurrencyRelationalTestBase(fixture) + where TFixture : F1RelationalFixture, new() +{ + protected enum Mapping + { + Tph, + Tpt, + Tpc + } + + protected async Task Row_version_with_owned_types(bool updateOwnedFirst, Mapping mapping, string propertyName) + where TEntity : class, ISuperFan + { + await using var c = CreateF1Context(); + + await c.Database.CreateExecutionStrategy().ExecuteAsync( + c, async context => + { + var synthesizedPropertyName = $"_TableSharingConcurrencyTokenConvention_{propertyName}"; + + await using var transaction = BeginTransaction(context.Database); + + var fan = context.Set().Single(e => e.Name == "Alice"); + + var fanEntry = c.Entry(fan); + var swagEntry = fanEntry.Reference(s => s.Swag).TargetEntry!; + var fanVersion1 = fanEntry.Property(propertyName).CurrentValue; + var swagVersion1 = default(TVersion); + + if (mapping != Mapping.Tpt) // Issue #22060 + { + swagVersion1 = swagEntry.Property(synthesizedPropertyName).CurrentValue; + + Assert.Equal(fanVersion1, swagVersion1); + } + + await using var innerContext = CreateF1Context(); + UseTransaction(innerContext.Database, transaction); + var fanInner = innerContext.Set().Single(e => e.Name == "Alice"); + + if (updateOwnedFirst) + { + fan.Swag.Stuff += "+"; + fanInner.Swag.Stuff += "-"; + } + else + { + fanInner.Name += "-"; + fan.Name += "+"; + } + + await innerContext.SaveChangesAsync(); + + if (updateOwnedFirst && mapping == Mapping.Tpt) // Issue #22060 + { + await context.SaveChangesAsync(); + return; + } + + await Assert.ThrowsAnyAsync(() => context.SaveChangesAsync()); + + await fanEntry.ReloadAsync(); + await swagEntry.ReloadAsync(); + + await context.SaveChangesAsync(); + + var fanVersion2 = fanEntry.Property(propertyName).CurrentValue; + Assert.NotEqual(fanVersion1, fanVersion2); + + var swagVersion2 = default(TVersion); + if (mapping != Mapping.Tpt) // Issue #22060 + { + swagVersion2 = swagEntry.Property(synthesizedPropertyName).CurrentValue; + Assert.Equal(fanVersion2, swagVersion2); + Assert.NotEqual(swagVersion1, swagVersion2); + } + + await innerContext.Entry(fanInner).ReloadAsync(); + await innerContext.Entry(fanInner.Swag).ReloadAsync(); + + if (updateOwnedFirst) + { + fanInner.Name += "-"; + fan.Name += "+"; + } + else + { + fan.Swag.Stuff += "+"; + fanInner.Swag.Stuff += "-"; + } + + await innerContext.SaveChangesAsync(); + + if (!updateOwnedFirst && mapping == Mapping.Tpt) // Issue #22060 + { + await context.SaveChangesAsync(); + return; + } + + await Assert.ThrowsAnyAsync(() => context.SaveChangesAsync()); + + await fanEntry.ReloadAsync(); + await swagEntry.ReloadAsync(); + + await context.SaveChangesAsync(); + + var fanVersion3 = fanEntry.Property(propertyName).CurrentValue; + Assert.NotEqual(fanVersion2, fanVersion3); + + if (mapping != Mapping.Tpt) // Issue #22060 + { + var swagVersion3 = swagEntry.Property(synthesizedPropertyName).CurrentValue; + Assert.Equal(fanVersion3, swagVersion3); + Assert.NotEqual(swagVersion2, swagVersion3); + } + }); + } + + protected async Task Row_version_with_table_splitting( + bool updateDependentFirst, + Mapping mapping, + string propertyName) + where TEntity : class, IStreetCircuit + where TCity : class, ICity + { + await using var c = CreateF1Context(); + + await c.Database.CreateExecutionStrategy().ExecuteAsync( + c, async context => + { + var synthesizedPropertyName = $"_TableSharingConcurrencyTokenConvention_{propertyName}"; + + await using var transaction = BeginTransaction(context.Database); + + var circuit = context.Set().Include(e => e.City).Single(e => e.Name == "Monaco"); + + var circuitEntry = c.Entry(circuit); + var cityEntry = circuitEntry.Reference(s => s.City).TargetEntry!; + var circuitVersion1 = circuitEntry.Property(propertyName).CurrentValue; + var cityVersion1 = default(TVersion); + + if (mapping != Mapping.Tpt) // Issue #22060 + { + cityVersion1 = cityEntry.Property(synthesizedPropertyName).CurrentValue; + + Assert.Equal(circuitVersion1, cityVersion1); + } + + await using var innerContext = CreateF1Context(); + UseTransaction(innerContext.Database, transaction); + var circuitInner = innerContext.Set().Include(e => e.City).Single(e => e.Name == "Monaco"); + + if (updateDependentFirst) + { + circuit.City.Name += "+"; + circuitInner.City.Name += "-"; + } + else + { + circuit.Name += "+"; + circuitInner.Name += "-"; + } + + await innerContext.SaveChangesAsync(); + + if (updateDependentFirst && mapping == Mapping.Tpt) // Issue #22060 + { + await context.SaveChangesAsync(); + return; + } + + await Assert.ThrowsAnyAsync(() => context.SaveChangesAsync()); + + await circuitEntry.ReloadAsync(); + await cityEntry.ReloadAsync(); + + await context.SaveChangesAsync(); + + var circuitVersion2 = circuitEntry.Property(propertyName).CurrentValue; + Assert.NotEqual(circuitVersion1, circuitVersion2); + + var cityVersion2 = default(TVersion); + if (mapping != Mapping.Tpt) // Issue #22060 + { + cityVersion2 = cityEntry.Property(synthesizedPropertyName).CurrentValue; + Assert.Equal(circuitVersion2, cityVersion2); + Assert.NotEqual(cityVersion1, cityVersion2); + } + + await innerContext.Entry(circuitInner).ReloadAsync(); + await innerContext.Entry(circuitInner.City).ReloadAsync(); + + if (updateDependentFirst) + { + circuit.Name += "+"; + circuitInner.Name += "-"; + } + else + { + circuit.City.Name += "+"; + circuitInner.City.Name += "-"; + } + + await innerContext.SaveChangesAsync(); + + if (!updateDependentFirst && mapping == Mapping.Tpt) // Issue #22060 + { + await context.SaveChangesAsync(); + return; + } + + await Assert.ThrowsAnyAsync(() => context.SaveChangesAsync()); + + await circuitEntry.ReloadAsync(); + await cityEntry.ReloadAsync(); + + await context.SaveChangesAsync(); + + var circuitVersion3 = circuitEntry.Property(propertyName).CurrentValue; + Assert.NotEqual(circuitVersion2, circuitVersion3); + + if (mapping != Mapping.Tpt) // Issue #22060 + { + var cityVersion3 = cityEntry.Property(synthesizedPropertyName).CurrentValue; + Assert.Equal(circuitVersion3, cityVersion3); + Assert.NotEqual(cityVersion2, cityVersion3); + } + }); + } + + [ConditionalFact] + public async Task Modifying_concurrency_token_only_is_noop() + { + using var c = CreateF1Context(); + await c.Database.CreateExecutionStrategy().ExecuteAsync( + c, async context => + { + using var transaction = context.Database.BeginTransaction(); + var driver = context.Drivers.Single(d => d.CarNumber == 1); + driver.Podiums = StorePodiums; + var firstVersion = context.Entry(driver).Property("Version").CurrentValue; + await context.SaveChangesAsync(); + + using var innerContext = CreateF1Context(); + innerContext.Database.UseTransaction(transaction.GetDbTransaction()); + driver = innerContext.Drivers.Single(d => d.CarNumber == 1); + Assert.NotEqual(firstVersion, innerContext.Entry(driver).Property("Version").CurrentValue); + Assert.Equal(StorePodiums, driver.Podiums); + + var secondVersion = innerContext.Entry(driver).Property("Version").CurrentValue; + innerContext.Entry(driver).Property("Version").CurrentValue = firstVersion; + await innerContext.SaveChangesAsync(); + using var validationContext = CreateF1Context(); + validationContext.Database.UseTransaction(transaction.GetDbTransaction()); + driver = validationContext.Drivers.Single(d => d.CarNumber == 1); + Assert.Equal(secondVersion, validationContext.Entry(driver).Property("Version").CurrentValue); + Assert.Equal(StorePodiums, driver.Podiums); + }); + } + + [ConditionalFact] + public async Task Database_concurrency_token_value_is_updated_for_all_sharing_entities() + { + using var c = CreateF1Context(); + await c.Database.CreateExecutionStrategy().ExecuteAsync( + c, async context => + { + using var transaction = context.Database.BeginTransaction(); + var sponsor = context.Set().Single(); + var sponsorEntry = c.Entry(sponsor); + var detailsEntry = sponsorEntry.Reference(s => s.Details).TargetEntry; + var sponsorVersion = sponsorEntry.Property("Version").CurrentValue; + var detailsVersion = detailsEntry.Property("Version").CurrentValue; + + Assert.Null(sponsorEntry.Property(Sponsor.ClientTokenPropertyName).CurrentValue); + sponsorEntry.Property(Sponsor.ClientTokenPropertyName).CurrentValue = 1; + + sponsor.Name = "Telecom"; + + Assert.Equal(sponsorVersion, detailsVersion); + + await context.SaveChangesAsync(); + + var newSponsorVersion = sponsorEntry.Property("Version").CurrentValue; + var newDetailsVersion = detailsEntry.Property("Version").CurrentValue; + + Assert.Equal(newSponsorVersion, newDetailsVersion); + Assert.NotEqual(sponsorVersion, newSponsorVersion); + + Assert.Equal(1, sponsorEntry.Property(Sponsor.ClientTokenPropertyName).CurrentValue); + Assert.Equal(1, detailsEntry.Property(Sponsor.ClientTokenPropertyName).CurrentValue); + }); + } + + [ConditionalFact] + public async Task Original_concurrency_token_value_is_used_when_replacing_owned_instance() + { + using var c = CreateF1Context(); + await c.Database.CreateExecutionStrategy().ExecuteAsync( + c, async context => + { + using var transaction = context.Database.BeginTransaction(); + var sponsor = context.Set().Single(); + var sponsorEntry = c.Entry(sponsor); + var sponsorVersion = sponsorEntry.Property("Version").CurrentValue; + + Assert.Null(sponsorEntry.Property(Sponsor.ClientTokenPropertyName).CurrentValue); + sponsorEntry.Property(Sponsor.ClientTokenPropertyName).CurrentValue = 1; + + sponsor.Details = new SponsorDetails { Days = 11, Space = 51m }; + + context.ChangeTracker.DetectChanges(); + + var detailsEntry = sponsorEntry.Reference(s => s.Details).TargetEntry; + detailsEntry.Property(Sponsor.ClientTokenPropertyName).CurrentValue = 1; + + await context.SaveChangesAsync(); + + var newSponsorVersion = sponsorEntry.Property("Version").CurrentValue; + var newDetailsVersion = detailsEntry.Property("Version").CurrentValue; + + Assert.Equal(newSponsorVersion, newDetailsVersion); + Assert.NotEqual(sponsorVersion, newSponsorVersion); + + Assert.Equal(1, sponsorEntry.Property(Sponsor.ClientTokenPropertyName).CurrentValue); + Assert.Equal(1, detailsEntry.Property(Sponsor.ClientTokenPropertyName).CurrentValue); + }); + } + + public override void Property_entry_original_value_is_set() + { + base.Property_entry_original_value_is_set(); + + AssertSql( + """ +SELECT TOP 1 `e`.`Id`, `e`.`EngineSupplierId`, `e`.`Name`, `e`.`StorageLocation_Latitude`, `e`.`StorageLocation_Longitude` +FROM `Engines` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +@p1='1' +@p2='Mercedes' (Size = 255) +@p0='FO 108X' (Size = 255) +@p3='ChangedEngine' (Size = 255) +@p4='47.64491' (Nullable = true) +@p5='-122.128101' (Nullable = true) + +UPDATE `Engines` SET `Name` = @p0 +WHERE `Id` = @p1 AND `EngineSupplierId` = @p2 AND `Name` = @p3 AND `StorageLocation_Latitude` = @p4 AND `StorageLocation_Longitude` = @p5; +SELECT @@ROWCOUNT; +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/OverzealousInitializationLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/OverzealousInitializationLibRedTest.cs new file mode 100644 index 00000000..ce75b031 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/OverzealousInitializationLibRedTest.cs @@ -0,0 +1,19 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class OverzealousInitializationLibRedTest( + OverzealousInitializationLibRedTest.OverzealousInitializationLibRedFixture fixture) + : OverzealousInitializationTestBase(fixture) +{ + public class OverzealousInitializationLibRedFixture : OverzealousInitializationFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Properties/AssemblyInfo.cs b/test/EFCore.LibRed.FunctionalTests/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..57b8756f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Properties/AssemblyInfo.cs @@ -0,0 +1,17 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities.Xunit; +using Xunit; + +// Set assembly wide conditions to control tests in accordance with the environment they are run in. +[assembly: LibRedConfiguredCondition] + +#if FIXED_TEST_ORDER + +[assembly: TestCollectionOrderer("EntityFrameworkCore.Jet.FunctionalTests.TestUtilities.Xunit." + nameof(AscendingTestCollectionOrderer), "EntityFrameworkCore.LibRed.FunctionalTests")] +[assembly: TestCaseOrderer("EntityFrameworkCore.Jet.FunctionalTests.TestUtilities.Xunit." + nameof(AscendingTestCaseOrderer), "EntityFrameworkCore.LibRed.FunctionalTests")] + +#endif + +[assembly: TestFramework("EntityFrameworkCore.Jet.FunctionalTests.TestUtilities.Xunit." + nameof(JetXunitTestFramework), "EntityFrameworkCore.LibRed.FunctionalTests")] \ No newline at end of file diff --git a/test/EFCore.LibRed.FunctionalTests/PropertyValuesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/PropertyValuesLibRedTest.cs new file mode 100644 index 00000000..6327b8cd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/PropertyValuesLibRedTest.cs @@ -0,0 +1,28 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class PropertyValuesLibRedTest(PropertyValuesLibRedTest.PropertyValuesLibRedFixture fixture) + : PropertyValuesRelationalTestBase(fixture) + { + public class PropertyValuesLibRedFixture : PropertyValuesRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity() + .Property(b => b.Value).HasColumnType("decimal(18,2)"); + + modelBuilder.Entity() + .Property(ce => ce.LeaveBalance).HasColumnType("decimal(18,2)"); + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocAdvancedMappingsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocAdvancedMappingsQueryLibRedTest.cs new file mode 100644 index 00000000..77886309 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocAdvancedMappingsQueryLibRedTest.cs @@ -0,0 +1,308 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +#nullable disable + +public class AdHocAdvancedMappingsQueryLibRedTest(NonSharedFixture fixture) : AdHocAdvancedMappingsQueryRelationalTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override async Task Setting_IsUnicode_generates_unicode_literal_in_SQL() + { + await base.Setting_IsUnicode_generates_unicode_literal_in_SQL(); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`Nombre` +FROM `TipoServicio` AS `t` +WHERE `t`.`Nombre` LIKE '%lla%' +"""); + } + + public override async Task Projecting_correlated_collection_along_with_non_mapped_property() + { + await base.Projecting_correlated_collection_along_with_non_mapped_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `p0`.`Id`, `p0`.`BlogId`, `p0`.`Name` +FROM `Blogs` AS `b` +LEFT JOIN ( + SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Name` + FROM `Posts` AS `p` + WHERE `p`.`Name` LIKE '%2%' +) AS `p0` ON `b`.`Id` = `p0`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, ( + SELECT TOP 1 `p`.`Name` + FROM `Posts` AS `p` + WHERE `b`.`Id` = `p`.`BlogId` + ORDER BY `p`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Projection_failing_with_EnumToStringConverter() + { + await base.Projection_failing_with_EnumToStringConverter(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Name`, IIF(`c`.`Id` IS NULL, 'Other', `c`.`Name`) AS `CategoryName`, IIF(`c`.`Id` IS NULL, 'Active', `c`.`Status`) AS `CategoryStatus` +FROM `Products` AS `p` +LEFT JOIN `Categories` AS `c` ON `p`.`CategoryId` = `c`.`Id` +"""); + } + + public override async Task Expression_tree_constructed_via_interface_works() + { + await base.Expression_tree_constructed_via_interface_works(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`IsRemoved`, `r`.`Removed`, `r`.`RemovedByUser`, `r`.`OwnedEntity_Exists`, `r`.`OwnedEntity_OwnedValue` +FROM `RemovableEntities` AS `r` +WHERE NOT (`r`.`IsRemoved`) +""", + // + """ +SELECT `p`.`Id`, `p`.`RemovableEntityId` +FROM `Parents` AS `p` +LEFT JOIN `RemovableEntities` AS `r` ON `p`.`RemovableEntityId` = `r`.`Id` +WHERE `r`.`IsRemoved` +""", + // + """ +SELECT `r`.`Id`, `r`.`IsRemoved`, `r`.`Removed`, `r`.`RemovedByUser`, `r`.`OwnedEntity_Exists`, `r`.`OwnedEntity_OwnedValue` +FROM `RemovableEntities` AS `r` +WHERE `r`.`OwnedEntity_OwnedValue` = 'Abc' +""", + // + """ +@id='1' + +SELECT `p`.`Id`, `p`.`RemovableEntityId` +FROM `Parents` AS `p` +WHERE `p`.`Id` = @id +"""); + } + + public override async Task Double_convert_interface_created_expression_tree() + { + await base.Double_convert_interface_created_expression_tree(); + + AssertSql( + """ +@action='1' + +SELECT COUNT(*) +FROM `Offers` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `OfferActions` AS `o0` + WHERE `o`.`Id` = `o0`.`OfferId` AND `o0`.`Action` = @action) +"""); + } + + public override async Task Casts_are_removed_from_expression_tree_when_redundant() + { + await base.Casts_are_removed_from_expression_tree_when_redundant(); + + AssertSql( + """ +@id='1' + +SELECT TOP 1 `m`.`Id`, `m`.`Name`, `m`.`NavigationEntityId` +FROM `MockEntities` AS `m` +WHERE `m`.`Id` = @id +""", + // + """ +SELECT COUNT(*) +FROM `MockEntities` AS `m` +"""); + } + + public override async Task Can_query_hierarchy_with_non_nullable_property_on_derived() + { + await base.Can_query_hierarchy_with_non_nullable_property_on_derived(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Type`, `b`.`IsOnline` +FROM `Businesses` AS `b` +"""); + } + + public override async Task Query_generates_correct_datetime2_parameter_definition(int? fractionalSeconds, string postfix) + { + await base.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds, postfix); + + AssertSql( + """ +@parameter='2021-11-12T13:14:15.1234567' (DbType = DateTime) + +SELECT TOP 1 `e`.`DateTime` +FROM `Entities` AS `e` +WHERE `e`.`DateTime` = CDATE(@parameter) +"""); + } + + public override async Task Query_generates_correct_datetimeoffset_parameter_definition(int? fractionalSeconds, string postfix) + { + await base.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds, postfix); + + AssertSql( + """ +@parameter='2021-11-12T03:14:15.1234567Z' (DbType = DateTime) + +SELECT TOP 1 `e`.`DateTimeOffset` +FROM `Entities` AS `e` +WHERE `e`.`DateTimeOffset` = @parameter +"""); + } + + public override async Task Query_generates_correct_timespan_parameter_definition(int? fractionalSeconds, string postfix) + { + await base.Query_generates_correct_timespan_parameter_definition(fractionalSeconds, postfix); + + AssertSql( + """ +@parameter='12:34:56.7890123' + +SELECT TOP 1 `e`.`TimeSpan` +FROM `Entities` AS `e` +WHERE `e`.`TimeSpan` = @parameter +"""); + } + + public override async Task Hierarchy_query_with_abstract_type_sibling(bool async) + { + await base.Hierarchy_query_with_abstract_type_sibling(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`Discriminator`, `a`.`Species`, `a`.`Name`, `a`.`EdcuationLevel`, `a`.`FavoriteToy` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` IN ('Cat', 'Dog') AND (`a`.`Species` LIKE 'F%') +"""); + } + + public override async Task Hierarchy_query_with_abstract_type_sibling_TPT(bool async) + { + await base.Hierarchy_query_with_abstract_type_sibling_TPT(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`Species`, `p`.`Name`, `c`.`EdcuationLevel`, `d`.`FavoriteToy`, IIF(`d`.`Id` IS NOT NULL, 'Dog', IIF(`c`.`Id` IS NOT NULL, 'Cat', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Pets` AS `p` ON `a`.`Id` = `p`.`Id`) +LEFT JOIN `Cats` AS `c` ON `a`.`Id` = `c`.`Id`) +LEFT JOIN `Dogs` AS `d` ON `a`.`Id` = `d`.`Id` +WHERE (`d`.`Id` IS NOT NULL OR `c`.`Id` IS NOT NULL) AND (`a`.`Species` LIKE 'F%') +"""); + } + + public override async Task Hierarchy_query_with_abstract_type_sibling_TPC(bool async) + { + await base.Hierarchy_query_with_abstract_type_sibling_TPC(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Species`, `u`.`Name`, `u`.`EdcuationLevel`, `u`.`FavoriteToy`, `u`.`Discriminator` +FROM ( + SELECT `c`.`Id`, `c`.`Species`, `c`.`Name`, `c`.`EdcuationLevel`, NULL AS `FavoriteToy`, 'Cat' AS `Discriminator` + FROM `Cats` AS `c` + UNION ALL + SELECT `d`.`Id`, `d`.`Species`, `d`.`Name`, NULL AS `EdcuationLevel`, `d`.`FavoriteToy`, 'Dog' AS `Discriminator` + FROM `Dogs` AS `d` +) AS `u` +WHERE `u`.`Species` LIKE 'F%' +"""); + } + + public override async Task Two_similar_complex_properties_projected_with_split_query1() + { + await base.Two_similar_complex_properties_projected_with_split_query1(); + + AssertSql( + """ +SELECT `o`.`Id` +FROM `Offers` AS `o` +ORDER BY `o`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`NestedId`, `s`.`OfferId`, `s`.`payment_brutto`, `s`.`payment_netto`, `s`.`Id0`, `s`.`payment_brutto0`, `s`.`payment_netto0`, `o`.`Id` +FROM `Offers` AS `o` +INNER JOIN ( + SELECT `v`.`Id`, `v`.`NestedId`, `v`.`OfferId`, `v`.`payment_brutto`, `v`.`payment_netto`, `n`.`Id` AS `Id0`, `n`.`payment_brutto` AS `payment_brutto0`, `n`.`payment_netto` AS `payment_netto0` + FROM `Variation` AS `v` + LEFT JOIN `NestedEntity` AS `n` ON `v`.`NestedId` = `n`.`Id` +) AS `s` ON `o`.`Id` = `s`.`OfferId` +ORDER BY `o`.`Id` +"""); + } + + public override async Task Two_similar_complex_properties_projected_with_split_query2() + { + await base.Two_similar_complex_properties_projected_with_split_query2(); + + AssertSql( + """ +SELECT TOP 2 `o`.`Id` +FROM `Offers` AS `o` +WHERE `o`.`Id` = 1 +ORDER BY `o`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`NestedId`, `s`.`OfferId`, `s`.`payment_brutto`, `s`.`payment_netto`, `s`.`Id0`, `s`.`payment_brutto0`, `s`.`payment_netto0`, `o0`.`Id` +FROM ( + SELECT TOP 1 `o`.`Id` + FROM `Offers` AS `o` + WHERE `o`.`Id` = 1 + ORDER BY `o`.`Id` +) AS `o0` +INNER JOIN ( + SELECT `v`.`Id`, `v`.`NestedId`, `v`.`OfferId`, `v`.`payment_brutto`, `v`.`payment_netto`, `n`.`Id` AS `Id0`, `n`.`payment_brutto` AS `payment_brutto0`, `n`.`payment_netto` AS `payment_netto0` + FROM `Variation` AS `v` + LEFT JOIN `NestedEntity` AS `n` ON `v`.`NestedId` = `n`.`Id` +) AS `s` ON `o0`.`Id` = `s`.`OfferId` +ORDER BY `o0`.`Id` +"""); + } + + public override async Task Projecting_one_of_two_similar_complex_types_picks_the_correct_one() + { + await base.Projecting_one_of_two_similar_complex_types_picks_the_correct_one(); + + AssertSql( + """ +@p='10' + +SELECT `a`.`Id`, `s`.`Info_Created0` AS `Created` +FROM ( + SELECT TOP @p `c`.`Id`, `b`.`AId`, `b`.`Info_Created` AS `Info_Created0` + FROM `Cs` AS `c` + INNER JOIN `Bs` AS `b` ON `c`.`BId` = `b`.`Id` + WHERE `b`.`AId` = 1 + ORDER BY `c`.`Id` +) AS `s` +LEFT JOIN `As` AS `a` ON `s`.`AId` = `a`.`Id` +ORDER BY `s`.`Id` +"""); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocComplexTypeQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocComplexTypeQueryLibRedTest.cs new file mode 100644 index 00000000..ebd6c6ee --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocComplexTypeQueryLibRedTest.cs @@ -0,0 +1,61 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class AdHocComplexTypeQueryLibRedTest(NonSharedFixture fixture) : AdHocComplexTypeQueryRelationalTestBase(fixture) +{ + public override async Task Complex_type_equals_parameter_with_nested_types_with_property_of_same_name() + { + await base.Complex_type_equals_parameter_with_nested_types_with_property_of_same_name(); + + AssertSql( + """ +@entity_equality_container_Id='1' (Nullable = true) +@entity_equality_container_Containee1_Id='2' (Nullable = true) +@entity_equality_container_Containee2_Id='3' (Nullable = true) + +SELECT TOP 2 `e`.`Id`, `e`.`ComplexContainer_Id`, `e`.`ComplexContainer_Containee1_Id`, `e`.`ComplexContainer_Containee2_Id` +FROM `EntityType` AS `e` +WHERE `e`.`ComplexContainer_Id` = @entity_equality_container_Id AND `e`.`ComplexContainer_Containee1_Id` = @entity_equality_container_Containee1_Id AND `e`.`ComplexContainer_Containee2_Id` = @entity_equality_container_Containee2_Id +"""); + } + + public override async Task Projecting_complex_property_does_not_auto_include_owned_types() + { + await base.Projecting_complex_property_does_not_auto_include_owned_types(); + + AssertSql( + """ +SELECT `e`.`Complex_Name`, `e`.`Complex_Number` +FROM `EntityType` AS `e` +"""); + } + + public override async Task Complex_type_equality_with_non_default_type_mapping() + { + await base.Complex_type_equality_with_non_default_type_mapping(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `EntityType` AS `e` +WHERE `e`.`ComplexThing_DateTime` = #2020-01-01 01:01:01# +"""); + } + + protected TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected void AssertSql(params string[] expected) + => TestSqlLoggerFactory.AssertBaseline(expected); + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocJsonQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocJsonQueryLibRedTest.cs new file mode 100644 index 00000000..226f4dc9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocJsonQueryLibRedTest.cs @@ -0,0 +1,17 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class AdHocJsonQueryLibRedTest(NonSharedFixture fixture) : AdHocJsonQueryLibRedTestBase(fixture) +{ + public override async Task Read_enum_property_with_legacy_values(bool async) + { + var exception = await Assert.ThrowsAsync(() => base.Read_enum_property_with_legacy_values_core(async)); + } + + protected override string JsonColumnType + => "nvarchar(max)"; +} \ No newline at end of file diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocJsonQueryLibRedTestBase.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocJsonQueryLibRedTestBase.cs new file mode 100644 index 00000000..a61cc04b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocJsonQueryLibRedTestBase.cs @@ -0,0 +1,689 @@ +using EntityFrameworkCore.LibRed.Diagnostics.Internal; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +#nullable disable + +public abstract class AdHocJsonQueryLibRedTestBase(NonSharedFixture fixture) : AdHocJsonQueryRelationalTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected void AssertSql(params string[] expected) + => TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ConfigureWarnings(WarningsConfigurationBuilder builder) + { + base.ConfigureWarnings(builder); + + builder.Log(CoreEventId.StringEnumValueInJson); + } + + public override async Task Project_root_with_missing_scalars(bool async) + { + await base.Project_root_with_missing_scalars(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Collection], [e].[OptionalReference], [e].[RequiredReference] +FROM [Entities] AS [e] +WHERE [e].[Id] < 4 +"""); + } + + public override async Task Project_top_level_json_entity_with_missing_scalars(bool async) + { + await base.Project_top_level_json_entity_with_missing_scalars(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[OptionalReference], [e].[RequiredReference], [e].[Collection] +FROM [Entities] AS [e] +WHERE [e].[Id] < 4 +"""); + } + + public override async Task Project_nested_json_entity_with_missing_scalars(bool async) + { + await base.Project_nested_json_entity_with_missing_scalars(async); + + AssertSql( + """ +SELECT [e].[Id], JSON_QUERY([e].[OptionalReference], '$.NestedOptionalReference'), JSON_QUERY([e].[RequiredReference], '$.NestedRequiredReference'), JSON_QUERY([e].[Collection], '$[0].NestedCollection') +FROM [Entities] AS [e] +WHERE [e].[Id] < 4 +"""); + } + + public override async Task Project_root_entity_with_missing_required_navigation(bool async) + { + await base.Project_root_entity_with_missing_required_navigation(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Collection], [e].[OptionalReference], [e].[RequiredReference] +FROM [Entities] AS [e] +WHERE [e].[Id] = 5 +"""); + } + + public override async Task Project_missing_required_navigation(bool async) + { + await base.Project_missing_required_navigation(async); + + AssertSql( + """ +SELECT JSON_QUERY([e].[RequiredReference], '$.NestedRequiredReference'), [e].[Id] +FROM [Entities] AS [e] +WHERE [e].[Id] = 5 +"""); + } + + public override async Task Project_root_entity_with_null_required_navigation(bool async) + { + await base.Project_root_entity_with_null_required_navigation(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Collection], [e].[OptionalReference], [e].[RequiredReference] +FROM [Entities] AS [e] +WHERE [e].[Id] = 6 +"""); + } + + public override async Task Project_null_required_navigation(bool async) + { + await base.Project_null_required_navigation(async); + + AssertSql( + """ +SELECT [e].[RequiredReference], [e].[Id] +FROM [Entities] AS [e] +WHERE [e].[Id] = 6 +"""); + } + + public override async Task Project_missing_required_scalar(bool async) + { + await base.Project_missing_required_scalar(async); + + switch (JsonColumnType) + { + case "json": + AssertSql( + """ +SELECT [e].[Id], JSON_VALUE([e].[RequiredReference], '$.Number' RETURNING float) AS [Number] +FROM [Entities] AS [e] +WHERE [e].[Id] = 2 +"""); + break; + case "nvarchar(max)": + AssertSql( + """ +SELECT [e].[Id], CAST(JSON_VALUE([e].[RequiredReference], '$.Number') AS float) AS [Number] +FROM [Entities] AS [e] +WHERE [e].[Id] = 2 +"""); + break; + default: + throw new UnreachableException(); + } + } + + public override async Task Project_null_required_scalar(bool async) + { + await base.Project_null_required_scalar(async); + + switch (JsonColumnType) + { + case "json": + AssertSql( + """ +SELECT [e].[Id], JSON_VALUE([e].[RequiredReference], '$.Number' RETURNING float) AS [Number] +FROM [Entities] AS [e] +WHERE [e].[Id] = 4 +"""); + break; + case "nvarchar(max)": + AssertSql( + """ +SELECT [e].[Id], CAST(JSON_VALUE([e].[RequiredReference], '$.Number') AS float) AS [Number] +FROM [Entities] AS [e] +WHERE [e].[Id] = 4 +"""); + break; + default: + throw new UnreachableException(); + } + } + + protected override async Task Seed21006(Context21006 context) + { + await base.Seed21006(context); + + // missing scalar on top level + await context.Database.ExecuteSqlAsync( + $$$""" +INSERT INTO [Entities] ([Collection], [OptionalReference], [RequiredReference], [Id], [Name]) +VALUES ( +'[{"Text":"e2 c1","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e2 c1 c1"},{"DoB":"2000-01-01T00:00:00","Text":"e2 c1 c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e2 c1 nor"},"NestedRequiredReference":{"DoB":"2000-01-01T00:00:00","Text":"e2 c1 nrr"}},{"Text":"e2 c2","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e2 c2 c1"},{"DoB":"2000-01-01T00:00:00","Text":"e2 c2 c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e2 c2 nor"},"NestedRequiredReference":{"DoB":"2000-01-01T00:00:00","Text":"e2 c2 nrr"}}]', +'{"Text":"e2 or","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e2 or c1"},{"DoB":"2000-01-01T00:00:00","Text":"e2 or c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e2 or nor"},"NestedRequiredReference":{"DoB":"2000-01-01T00:00:00","Text":"e2 or nrr"}}', +'{"Text":"e2 rr","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e2 rr c1"},{"DoB":"2000-01-01T00:00:00","Text":"e2 rr c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e2 rr nor"},"NestedRequiredReference":{"DoB":"2000-01-01T00:00:00","Text":"e2 rr nrr"}}', +2, +'e2') +"""); + + // missing scalar on nested level + await context.Database.ExecuteSqlAsync( + $$$""" +INSERT INTO [Entities] ([Collection], [OptionalReference], [RequiredReference], [Id], [Name]) +VALUES ( +'[{"Number":7,"Text":"e3 c1","NestedCollection":[{"Text":"e3 c1 c1"},{"Text":"e3 c1 c2"}],"NestedOptionalReference":{"Text":"e3 c1 nor"},"NestedRequiredReference":{"Text":"e3 c1 nrr"}},{"Number":7,"Text":"e3 c2","NestedCollection":[{"Text":"e3 c2 c1"},{"Text":"e3 c2 c2"}],"NestedOptionalReference":{"Text":"e3 c2 nor"},"NestedRequiredReference":{"Text":"e3 c2 nrr"}}]', +'{"Number":7,"Text":"e3 or","NestedCollection":[{"Text":"e3 or c1"},{"Text":"e3 or c2"}],"NestedOptionalReference":{"Text":"e3 or nor"},"NestedRequiredReference":{"Text":"e3 or nrr"}}', +'{"Number":7,"Text":"e3 rr","NestedCollection":[{"Text":"e3 rr c1"},{"Text":"e3 rr c2"}],"NestedOptionalReference":{"Text":"e3 rr nor"},"NestedRequiredReference":{"Text":"e3 rr nrr"}}', +3, +'e3') +"""); + + // null scalar on top level + await context.Database.ExecuteSqlAsync( + $$$""" +INSERT INTO [Entities] ([Collection], [OptionalReference], [RequiredReference], [Id], [Name]) +VALUES ( +'[{"Number":null,"Text":"e4 c1","NestedCollection":[{"Text":"e4 c1 c1"},{"Text":"e4 c1 c2"}],"NestedOptionalReference":{"Text":"e4 c1 nor"},"NestedRequiredReference":{"Text":"e4 c1 nrr"}},{"Number":null,"Text":"e4 c2","NestedCollection":[{"Text":"e4 c2 c1"},{"Text":"e4 c2 c2"}],"NestedOptionalReference":{"Text":"e4 c2 nor"},"NestedRequiredReference":{"Text":"e4 c2 nrr"}}]', +'{"Number":null,"Text":"e4 or","NestedCollection":[{"Text":"e4 or c1"},{"Text":"e4 or c2"}],"NestedOptionalReference":{"Text":"e4 or nor"},"NestedRequiredReference":{"Text":"e4 or nrr"}}', +'{"Number":null,"Text":"e4 rr","NestedCollection":[{"Text":"e4 rr c1"},{"Text":"e4 rr c2"}],"NestedOptionalReference":{"Text":"e4 rr nor"},"NestedRequiredReference":{"Text":"e4 rr nrr"}}', +4, +'e4') +"""); + + // missing required navigation + await context.Database.ExecuteSqlAsync( + $$$""" +INSERT INTO [Entities] ([Collection], [OptionalReference], [RequiredReference], [Id], [Name]) +VALUES ( +'[{"Number":7,"Text":"e5 c1","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e5 c1 c1"},{"DoB":"2000-01-01T00:00:00","Text":"e5 c1 c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e5 c1 nor"}},{"Number":7,"Text":"e5 c2","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e5 c2 c1"},{"DoB":"2000-01-01T00:00:00","Text":"e5 c2 c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e5 c2 nor"}}]', +'{"Number":7,"Text":"e5 or","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e5 or c1"},{"DoB":"2000-01-01T00:00:00","Text":"e5 or c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e5 or nor"}}', +'{"Number":7,"Text":"e5 rr","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e5 rr c1"},{"DoB":"2000-01-01T00:00:00","Text":"e5 rr c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e5 rr nor"}}', +5, +'e5') +"""); + + // null required navigation + await context.Database.ExecuteSqlAsync( + $$$""" +INSERT INTO [Entities] ([Collection], [OptionalReference], [RequiredReference], [Id], [Name]) +VALUES ( +'[{"Number":7,"Text":"e6 c1","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e6 c1 c1"},{"DoB":"2000-01-01T00:00:00","Text":"e6 c1 c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e6 c1 nor"},"NestedRequiredReference":null},{"Number":7,"Text":"e6 c2","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e6 c2 c1"},{"DoB":"2000-01-01T00:00:00","Text":"e6 c2 c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e6 c2 nor"},"NestedRequiredReference":null}]', +'{"Number":7,"Text":"e6 or","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e6 or c1"},{"DoB":"2000-01-01T00:00:00","Text":"e6 or c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e6 or nor"},"NestedRequiredReference":null}', +'{"Number":7,"Text":"e6 rr","NestedCollection":[{"DoB":"2000-01-01T00:00:00","Text":"e6 rr c1"},{"DoB":"2000-01-01T00:00:00","Text":"e6 rr c2"}],"NestedOptionalReference":{"DoB":"2000-01-01T00:00:00","Text":"e6 rr nor"},"NestedRequiredReference":null}', +6, +'e6') +"""); + } + + protected override async Task Seed29219(DbContext ctx) + { + await base.Seed29219(ctx); + + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Id], [Reference], [Collection]) +VALUES(3, '{ "NonNullableScalar" : 30 }', '[{ "NonNullableScalar" : 10001 }]') +"""); + } + + protected override async Task Seed30028(DbContext ctx) + { + // complete + await ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Id], [Json]) +VALUES( +1, +'{"RootName":"e1","Collection":[{"BranchName":"e1 c1","Nested":{"LeafName":"e1 c1 l"}},{"BranchName":"e1 c2","Nested":{"LeafName":"e1 c2 l"}}],"OptionalReference":{"BranchName":"e1 or","Nested":{"LeafName":"e1 or l"}},"RequiredReference":{"BranchName":"e1 rr","Nested":{"LeafName":"e1 rr l"}}}') +"""); + + // missing collection + await ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Id], [Json]) +VALUES( +2, +'{"RootName":"e2","OptionalReference":{"BranchName":"e2 or","Nested":{"LeafName":"e2 or l"}},"RequiredReference":{"BranchName":"e2 rr","Nested":{"LeafName":"e2 rr l"}}}') +"""); + + // missing optional reference + await ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Id], [Json]) +VALUES( +3, +'{"RootName":"e3","Collection":[{"BranchName":"e3 c1","Nested":{"LeafName":"e3 c1 l"}},{"BranchName":"e3 c2","Nested":{"LeafName":"e3 c2 l"}}],"RequiredReference":{"BranchName":"e3 rr","Nested":{"LeafName":"e3 rr l"}}}') +"""); + + // missing required reference + await ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Id], [Json]) +VALUES( +4, +'{"RootName":"e4","Collection":[{"BranchName":"e4 c1","Nested":{"LeafName":"e4 c1 l"}},{"BranchName":"e4 c2","Nested":{"LeafName":"e4 c2 l"}}],"OptionalReference":{"BranchName":"e4 or","Nested":{"LeafName":"e4 or l"}}}') +"""); + } + + protected override Task Seed33046(DbContext ctx) + => ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Reviews] ([Rounds], [Id]) +VALUES('[{"RoundNumber":11,"SubRounds":[{"SubRoundNumber":111},{"SubRoundNumber":112}]}]', 1) +"""); + + protected override async Task Seed34960(Context34960 ctx) + { + await base.Seed34960(ctx); + + // JSON nulls + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Collection], [Reference], [Id]) +VALUES( +'null', +'null', +4) +"""); + + // JSON object where collection should be + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Junk] ([Collection], [Reference], [Id]) +VALUES( +'{ "DoB":"2000-01-01T00:00:00","Text":"junk" }', +NULL, +1) +"""); + + // JSON array where entity should be + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Junk] ([Collection], [Reference], [Id]) +VALUES( +NULL, +'[{ "DoB":"2000-01-01T00:00:00","Text":"junk" }]', +2) +"""); + } + + protected override Task SeedJunkInJson(DbContext ctx) + => ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Collection], [CollectionWithCtor], [Reference], [ReferenceWithCtor], [Id]) +VALUES( +'[{"JunkReference":{"Something":"SomeValue" },"Name":"c11","JunkProperty1":50,"Number":11.5,"JunkCollection1":[],"JunkCollection2":[{"Foo":"junk value"}],"NestedCollection":[{"DoB":"2002-04-01T00:00:00","DummyProp":"Dummy value"},{"DoB":"2002-04-02T00:00:00","DummyReference":{"Foo":5}}],"NestedReference":{"DoB":"2002-03-01T00:00:00"}},{"Name":"c12","Number":12.5,"NestedCollection":[{"DoB":"2002-06-01T00:00:00"},{"DoB":"2002-06-02T00:00:00"}],"NestedDummy":59,"NestedReference":{"DoB":"2002-05-01T00:00:00"}}]', +'[{"MyBool":true,"Name":"c11 ctor","JunkReference":{"Something":"SomeValue","JunkCollection":[{"Foo":"junk value"}]},"NestedCollection":[{"DoB":"2002-08-01T00:00:00"},{"DoB":"2002-08-02T00:00:00"}],"NestedReference":{"DoB":"2002-07-01T00:00:00"}},{"MyBool":false,"Name":"c12 ctor","NestedCollection":[{"DoB":"2002-10-01T00:00:00"},{"DoB":"2002-10-02T00:00:00"}],"JunkCollection":[{"Foo":"junk value"}],"NestedReference":{"DoB":"2002-09-01T00:00:00"}}]', +'{"Name":"r1","JunkCollection":[{"Foo":"junk value"}],"JunkReference":{"Something":"SomeValue" },"Number":1.5,"NestedCollection":[{"DoB":"2000-02-01T00:00:00","JunkReference":{"Something":"SomeValue"}},{"DoB":"2000-02-02T00:00:00"}],"NestedReference":{"DoB":"2000-01-01T00:00:00"}}', +'{"MyBool":true,"JunkCollection":[{"Foo":"junk value"}],"Name":"r1 ctor","JunkReference":{"Something":"SomeValue" },"NestedCollection":[{"DoB":"2001-02-01T00:00:00"},{"DoB":"2001-02-02T00:00:00"}],"NestedReference":{"JunkCollection":[{"Foo":"junk value"}],"DoB":"2001-01-01T00:00:00"}}', +1) +"""); + + protected override Task SeedTrickyBuffering(DbContext ctx) + => ctx.Database.ExecuteSqlAsync( + $$$""" +INSERT INTO [Entities] ([Reference], [Id]) +VALUES( +'{"Name": "r1", "Number": 7, "JunkReference":{"Something": "SomeValue" }, "JunkCollection": [{"Foo": "junk value"}], "NestedReference": {"DoB": "2000-01-01T00:00:00"}, "NestedCollection": [{"DoB": "2000-02-01T00:00:00", "JunkReference": {"Something": "SomeValue"}}, {"DoB": "2000-02-02T00:00:00"}]}',1) +"""); + + protected override Task SeedShadowProperties(DbContext ctx) + => ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Collection], [CollectionWithCtor], [Reference], [ReferenceWithCtor], [Id], [Name]) +VALUES( +'[{"Name":"e1_c1","ShadowDouble":5.5},{"ShadowDouble":20.5,"Name":"e1_c2"}]', +'[{"Name":"e1_c1 ctor","ShadowNullableByte":6},{"ShadowNullableByte":null,"Name":"e1_c2 ctor"}]', +'{"Name":"e1_r", "ShadowString":"Foo"}', +'{"ShadowInt":143,"Name":"e1_r ctor"}', +1, +'e1') +"""); + + protected override async Task SeedNotICollection(DbContext ctx) + { + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Json], [Id]) +VALUES( +'{"Collection":[{"Bar":11,"Foo":"c11"},{"Bar":12,"Foo":"c12"},{"Bar":13,"Foo":"c13"}]}', +1) +"""); + + await ctx.Database.ExecuteSqlAsync( + $$$""" +INSERT INTO [Entities] ([Json], [Id]) +VALUES( +'{"Collection":[{"Bar":21,"Foo":"c21"},{"Bar":22,"Foo":"c22"}]}', +2) +"""); + } + + protected override async Task SeedBadJsonProperties(ContextBadJsonProperties ctx) + { + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Id], [Scenario], [OptionalReference], [RequiredReference], [Collection]) +VALUES( +1, +'baseline', +'{"NestedOptional": { "Text":"or no" }, "NestedRequired": { "Text":"or nr" }, "NestedCollection": [ { "Text":"or nc 1" }, { "Text":"or nc 2" } ] }', +'{"NestedOptional": { "Text":"rr no" }, "NestedRequired": { "Text":"rr nr" }, "NestedCollection": [ { "Text":"rr nc 1" }, { "Text":"rr nc 2" } ] }', +'[ +{"NestedOptional": { "Text":"c 1 no" }, "NestedRequired": { "Text":"c 1 nr" }, "NestedCollection": [ { "Text":"c 1 nc 1" }, { "Text":"c 1 nc 2" } ] }, +{"NestedOptional": { "Text":"c 2 no" }, "NestedRequired": { "Text":"c 2 nr" }, "NestedCollection": [ { "Text":"c 2 nc 1" }, { "Text":"c 2 nc 2" } ] } +]') +"""); + + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Id], [Scenario], [OptionalReference], [RequiredReference], [Collection]) +VALUES( +2, +'duplicated navigations', +'{"NestedOptional": { "Text":"or no" }, "NestedOptional": { "Text":"or no dupnav" }, "NestedRequired": { "Text":"or nr" }, "NestedCollection": [ { "Text":"or nc 1" }, { "Text":"or nc 2" } ], "NestedCollection": [ { "Text":"or nc 1 dupnav" }, { "Text":"or nc 2 dupnav" } ], "NestedRequired": { "Text":"or nr dupnav" } }', +'{"NestedOptional": { "Text":"rr no" }, "NestedOptional": { "Text":"rr no dupnav" }, "NestedRequired": { "Text":"rr nr" }, "NestedCollection": [ { "Text":"rr nc 1" }, { "Text":"rr nc 2" } ], "NestedCollection": [ { "Text":"rr nc 1 dupnav" }, { "Text":"rr nc 2 dupnav" } ], "NestedRequired": { "Text":"rr nr dupnav" } }', +'[ +{"NestedOptional": { "Text":"c 1 no" }, "NestedOptional": { "Text":"c 1 no dupnav" }, "NestedRequired": { "Text":"c 1 nr" }, "NestedCollection": [ { "Text":"c 1 nc 1" }, { "Text":"c 1 nc 2" } ], "NestedCollection": [ { "Text":"c 1 nc 1 dupnav" }, { "Text":"c 1 nc 2 dupnav" } ], "NestedRequired": { "Text":"c 1 nr dupnav" } }, +{"NestedOptional": { "Text":"c 2 no" }, "NestedOptional": { "Text":"c 2 no dupnav" }, "NestedRequired": { "Text":"c 2 nr" }, "NestedCollection": [ { "Text":"c 2 nc 1" }, { "Text":"c 2 nc 2" } ], "NestedCollection": [ { "Text":"c 2 nc 1 dupnav" }, { "Text":"c 2 nc 2 dupnav" } ], "NestedRequired": { "Text":"c 2 nr dupnav" } } +]') +"""); + + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Id], [Scenario], [OptionalReference], [RequiredReference], [Collection]) +VALUES( +3, +'duplicated scalars', +'{"NestedOptional": { "Text":"or no", "Text":"or no dupprop" }, "NestedRequired": { "Text":"or nr", "Text":"or nr dupprop" }, "NestedCollection": [ { "Text":"or nc 1", "Text":"or nc 1 dupprop" }, { "Text":"or nc 2", "Text":"or nc 2 dupprop" } ] }', +'{"NestedOptional": { "Text":"rr no", "Text":"rr no dupprop" }, "NestedRequired": { "Text":"rr nr", "Text":"rr nr dupprop" }, "NestedCollection": [ { "Text":"rr nc 1", "Text":"rr nc 1 dupprop" }, { "Text":"rr nc 2", "Text":"rr nc 2 dupprop" } ] }', +'[ +{"NestedOptional": { "Text":"c 1 no", "Text":"c 1 no dupprop" }, "NestedRequired": { "Text":"c 1 nr", "Text":"c 1 nr dupprop" }, "NestedCollection": [ { "Text":"c 1 nc 1", "Text":"c 1 nc 1 dupprop" }, { "Text":"c 1 nc 2", "Text":"c 1 nc 2 dupprop" } ] }, +{"NestedOptional": { "Text":"c 2 no", "Text":"c 2 no dupprop" }, "NestedRequired": { "Text":"c 2 nr", "Text":"c 2 nr dupprop" }, "NestedCollection": [ { "Text":"c 2 nc 1", "Text":"c 2 nc 1 dupprop" }, { "Text":"c 2 nc 2", "Text":"c 2 nc 2 dupprop" } ] } +]') +"""); + + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Id], [Scenario], [OptionalReference], [RequiredReference], [Collection]) +VALUES( +4, +'empty navigation property names', +'{"": { "Text":"or no" }, "": { "Text":"or nr" }, "": [ { "Text":"or nc 1" }, { "Text":"or nc 2" } ] }', +'{"": { "Text":"rr no" }, "": { "Text":"rr nr" }, "": [ { "Text":"rr nc 1" }, { "Text":"rr nc 2" } ] }', +'[ +{"": { "Text":"c 1 no" }, "": { "Text":"c 1 nr" }, "": [ { "Text":"c 1 nc 1" }, { "Text":"c 1 nc 2" } ] }, +{"": { "Text":"c 2 no" }, "": { "Text":"c 2 nr" }, "": [ { "Text":"c 2 nc 1" }, { "Text":"c 2 nc 2" } ] } +]') +"""); + + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Id], [Scenario], [OptionalReference], [RequiredReference], [Collection]) +VALUES( +5, +'empty scalar property names', +'{"NestedOptional": { "":"or no" }, "NestedRequired": { "":"or nr" }, "NestedCollection": [ { "":"or nc 1" }, { "":"or nc 2" } ] }', +'{"NestedOptional": { "":"rr no" }, "NestedRequired": { "":"rr nr" }, "NestedCollection": [ { "":"rr nc 1" }, { "":"rr nc 2" } ] }', +'[ +{"NestedOptional": { "":"c 1 no" }, "NestedRequired": { "":"c 1 nr" }, "NestedCollection": [ { "":"c 1 nc 1" }, { "":"c 1 nc 2" } ] }, +{"NestedOptional": { "":"c 2 no" }, "NestedRequired": { "":"c 2 nr" }, "NestedCollection": [ { "":"c 2 nc 1" }, { "":"c 2 nc 2" } ] } +]') +"""); + + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Id], [Scenario], [OptionalReference], [RequiredReference], [Collection]) +VALUES( +10, +'null navigation property names', +'{null: { "Text":"or no" }, null: { "Text":"or nr" }, null: [ { "Text":"or nc 1" }, { "Text":"or nc 2" } ] }', +'{null: { "Text":"rr no" }, null: { "Text":"rr nr" }, null: [ { "Text":"rr nc 1" }, { "Text":"rr nc 2" } ] }', +'[ +{null: { "Text":"c 1 no" }, null: { "Text":"c 1 nr" }, null: [ { "Text":"c 1 nc 1" }, { "Text":"c 1 nc 2" } ] }, +{null: { "Text":"c 2 no" }, null: { "Text":"c 2 nr" }, null: [ { "Text":"c 2 nc 1" }, { "Text":"c 2 nc 2" } ] } +]') +"""); + + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Id], [Scenario], [OptionalReference], [RequiredReference], [Collection]) +VALUES( +11, +'null scalar property names', +'{"NestedOptional": { null:"or no", "Text":"or no nonnull" }, "NestedRequired": { null:"or nr", "Text":"or nr nonnull" }, "NestedCollection": [ { null:"or nc 1", "Text":"or nc 1 nonnull" }, { null:"or nc 2", "Text":"or nc 2 nonnull" } ] }', +'{"NestedOptional": { null:"rr no", "Text":"rr no nonnull" }, "NestedRequired": { null:"rr nr", "Text":"rr nr nonnull" }, "NestedCollection": [ { null:"rr nc 1", "Text":"rr nc 1 nonnull" }, { null:"rr nc 2", "Text":"rr nc 2 nonnull" } ] }', +'[ +{"NestedOptional": { null:"c 1 no", "Text":"c 1 no nonnull" }, "NestedRequired": { null:"c 1 nr", "Text":"c 1 nr nonnull" }, "NestedCollection": [ { null:"c 1 nc 1", "Text":"c 1 nc 1 nonnull" }, { null:"c 1 nc 2", "Text":"c 1 nc 2 nonnull" } ] }, +{"NestedOptional": { null:"c 2 no", "Text":"c 2 no nonnull" }, "NestedRequired": { null:"c 2 nr", "Text":"c 2 nr nonnull" }, "NestedCollection": [ { null:"c 2 nc 1", "Text":"c 2 nc 1 nonnull" }, { null:"c 2 nc 2", "Text":"c 2 nc 2 nonnull" } ] } +]') +"""); + } + + #region EnumLegacyValues + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public abstract Task Read_enum_property_with_legacy_values(bool async); + + protected virtual async Task Read_enum_property_with_legacy_values_core(bool async) + { + var contextFactory = await InitializeAsync( + onModelCreating: BuildModelEnumLegacyValues, + onConfiguring: b => b.ConfigureWarnings(ConfigureWarnings), + seed: SeedEnumLegacyValues); + + using var context = contextFactory.CreateContext(); + + var query = context.Set().Select(x => new + { + x.Reference.IntEnum, + x.Reference.ByteEnum, + x.Reference.LongEnum, + x.Reference.NullableEnum + }); + + if (async) + { + await query.ToListAsync(); + } + else + { + query.ToList(); + } + } + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public virtual async Task Read_json_entity_with_enum_properties_with_legacy_values(bool async) + { + var contextFactory = await InitializeAsync( + onModelCreating: BuildModelEnumLegacyValues, + onConfiguring: b => b.ConfigureWarnings(ConfigureWarnings), + seed: SeedEnumLegacyValues, + shouldLogCategory: c => c == DbLoggerCategory.Query.Name); + + using (var context = contextFactory.CreateContext()) + { + var query = context.Set().Select(x => x.Reference).AsNoTracking(); + + var result = async + ? await query.ToListAsync() + : query.ToList(); + + Assert.Equal(1, result.Count); + Assert.Equal(ByteEnumLegacyValues.Redmond, result[0].ByteEnum); + Assert.Equal(IntEnumLegacyValues.Foo, result[0].IntEnum); + Assert.Equal(LongEnumLegacyValues.Three, result[0].LongEnum); + Assert.Equal(ULongEnumLegacyValues.Three, result[0].ULongEnum); + Assert.Equal(IntEnumLegacyValues.Bar, result[0].NullableEnum); + } + + var testLogger = new TestLogger(); + Assert.Single( + ListLoggerFactory.Log, + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ByteEnumLegacyValues))); + Assert.Single( + ListLoggerFactory.Log, + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(IntEnumLegacyValues))); + Assert.Single( + ListLoggerFactory.Log, + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(LongEnumLegacyValues))); + Assert.Single( + ListLoggerFactory.Log, + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ULongEnumLegacyValues))); + } + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public virtual async Task Read_json_entity_collection_with_enum_properties_with_legacy_values(bool async) + { + var contextFactory = await InitializeAsync( + onModelCreating: BuildModelEnumLegacyValues, + onConfiguring: b => b.ConfigureWarnings(ConfigureWarnings), + seed: SeedEnumLegacyValues, + shouldLogCategory: c => c == DbLoggerCategory.Query.Name); + + using (var context = contextFactory.CreateContext()) + { + var query = context.Set().Select(x => x.Collection).AsNoTracking(); + + var result = async + ? await query.ToListAsync() + : query.ToList(); + + Assert.Equal(1, result.Count); + Assert.Equal(2, result[0].Count); + Assert.Equal(ByteEnumLegacyValues.Bellevue, result[0][0].ByteEnum); + Assert.Equal(IntEnumLegacyValues.Foo, result[0][0].IntEnum); + Assert.Equal(LongEnumLegacyValues.One, result[0][0].LongEnum); + Assert.Equal(ULongEnumLegacyValues.One, result[0][0].ULongEnum); + Assert.Equal(IntEnumLegacyValues.Bar, result[0][0].NullableEnum); + Assert.Equal(ByteEnumLegacyValues.Seattle, result[0][1].ByteEnum); + Assert.Equal(IntEnumLegacyValues.Baz, result[0][1].IntEnum); + Assert.Equal(LongEnumLegacyValues.Two, result[0][1].LongEnum); + Assert.Equal(ULongEnumLegacyValues.Two, result[0][1].ULongEnum); + Assert.Null(result[0][1].NullableEnum); + } + + var testLogger = new TestLogger(); + Assert.Single( + ListLoggerFactory.Log, + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ByteEnumLegacyValues))); + Assert.Single( + ListLoggerFactory.Log, + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(IntEnumLegacyValues))); + Assert.Single( + ListLoggerFactory.Log, + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(LongEnumLegacyValues))); + Assert.Single( + ListLoggerFactory.Log, + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ULongEnumLegacyValues))); + } + + private Task SeedEnumLegacyValues(DbContext ctx) + => ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Collection], [Reference], [Id], [Name]) +VALUES( +N'[{"ByteEnum":"Bellevue","IntEnum":"Foo","LongEnum":"One","ULongEnum":"One","Name":"e1_c1","NullableEnum":"Bar"},{"ByteEnum":"Seattle","IntEnum":"Baz","LongEnum":"Two","ULongEnum":"Two","Name":"e1_c2","NullableEnum":null}]', +N'{"ByteEnum":"Redmond","IntEnum":"Foo","LongEnum":"Three","ULongEnum":"Three","Name":"e1_r","NullableEnum":"Bar"}', +1, +N'e1') +"""); + + protected virtual void BuildModelEnumLegacyValues(ModelBuilder modelBuilder) + => modelBuilder.Entity(b => + { + b.ToTable("Entities"); + b.Property(x => x.Id).ValueGeneratedNever(); + b.OwnsOne(x => x.Reference, b => b.ToJson().HasColumnType(JsonColumnType)); + b.OwnsMany(x => x.Collection, b => b.ToJson().HasColumnType(JsonColumnType)); + }); + + private class MyEntityEnumLegacyValues + { + public int Id { get; set; } + public string Name { get; set; } + + public MyJsonEntityEnumLegacyValues Reference { get; set; } + public List Collection { get; set; } + } + + private class MyJsonEntityEnumLegacyValues + { + public string Name { get; set; } + + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public IntEnumLegacyValues IntEnum { get; set; } + + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public ByteEnumLegacyValues ByteEnum { get; set; } + + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public LongEnumLegacyValues LongEnum { get; set; } + + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public ULongEnumLegacyValues ULongEnum { get; set; } + + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public IntEnumLegacyValues? NullableEnum { get; set; } + } + + private enum IntEnumLegacyValues + { + Foo = int.MinValue, + Bar, + Baz = int.MaxValue, + } + + private enum ByteEnumLegacyValues : byte + { + Seattle, + Redmond, + Bellevue = 255, + } + + private enum LongEnumLegacyValues : long + { + One = long.MinValue, + Two = 1, + Three = long.MaxValue, + } + + private enum ULongEnumLegacyValues : ulong + { + One = ulong.MinValue, + Two = 1, + Three = ulong.MaxValue, + } + + #endregion + + public override async Task Entity_splitting_with_owned_json() + { + await base.Entity_splitting_with_owned_json(); + + AssertSql( + """ +SELECT TOP 2 `m`.`Id`, `m`.`PropertyInMainTable`, `o`.`PropertyInOtherTable`, `m`.`Json` +FROM `MyEntity` AS `m` +INNER JOIN `OtherTable` AS `o` ON `m`.`Id` = `o`.`Id` +"""); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocManyToManyQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocManyToManyQueryLibRedTest.cs new file mode 100644 index 00000000..3f5230a5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocManyToManyQueryLibRedTest.cs @@ -0,0 +1,103 @@ +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +#nullable disable + +public class AdHocManyToManyQueryLibRedTest(NonSharedFixture fixture) : AdHocManyToManyQueryRelationalTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override async Task SelectMany_with_collection_selector_having_subquery() + { + await base.SelectMany_with_collection_selector_having_subquery(); + + AssertSql( + """ +SELECT `u`.`Id` AS `UserId`, `s`.`Id` AS `OrgId` +FROM `Users` AS `u`, +( + SELECT `o1`.`Id` + FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) + ) AS `e` + LEFT JOIN ( + SELECT `o`.`Id` + FROM `Organisations` AS `o` + WHERE EXISTS ( + SELECT 1 + FROM `OrganisationUser` AS `o0` + WHERE `o`.`Id` = `o0`.`OrganisationId`) + ) AS `o1` ON TRUE +) AS `s` +"""); + } + + public override async Task Many_to_many_load_works_when_join_entity_has_custom_key(bool async) + { + await base.Many_to_many_load_works_when_join_entity_has_custom_key(async); + + AssertSql( + """ +@p='1' + +SELECT TOP 1 `m`.`Id` +FROM `ManyM_DB` AS `m` +WHERE `m`.`Id` = @p +""", + // + """ +@p='1' + +SELECT `s`.`Id`, `m`.`Id`, `s`.`Id0`, `s0`.`Id`, `s0`.`ManyM_Id`, `s0`.`ManyN_Id`, `s0`.`Id0` +FROM (`ManyM_DB` AS `m` +INNER JOIN ( + SELECT `m1`.`Id`, `m0`.`Id` AS `Id0`, `m0`.`ManyM_Id` + FROM `ManyMN_DB` AS `m0` + LEFT JOIN `ManyN_DB` AS `m1` ON `m0`.`ManyN_Id` = `m1`.`Id` +) AS `s` ON `m`.`Id` = `s`.`ManyM_Id`) +LEFT JOIN ( + SELECT `m2`.`Id`, `m2`.`ManyM_Id`, `m2`.`ManyN_Id`, `m3`.`Id` AS `Id0` + FROM `ManyMN_DB` AS `m2` + INNER JOIN `ManyM_DB` AS `m3` ON `m2`.`ManyM_Id` = `m3`.`Id` + WHERE `m3`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`ManyN_Id` +WHERE `m`.`Id` = @p +ORDER BY `m`.`Id`, `s`.`Id0`, `s`.`Id`, `s0`.`Id` +""", + // + """ +@p='1' + +SELECT TOP 1 `m`.`Id` +FROM `ManyN_DB` AS `m` +WHERE `m`.`Id` = @p +""", + // + """ +@p='1' + +SELECT `s`.`Id`, `m`.`Id`, `s`.`Id0`, `s0`.`Id`, `s0`.`ManyM_Id`, `s0`.`ManyN_Id`, `s0`.`Id0` +FROM (`ManyN_DB` AS `m` +INNER JOIN ( + SELECT `m1`.`Id`, `m0`.`Id` AS `Id0`, `m0`.`ManyN_Id` + FROM `ManyMN_DB` AS `m0` + INNER JOIN `ManyM_DB` AS `m1` ON `m0`.`ManyM_Id` = `m1`.`Id` +) AS `s` ON `m`.`Id` = `s`.`ManyN_Id`) +LEFT JOIN ( + SELECT `m2`.`Id`, `m2`.`ManyM_Id`, `m2`.`ManyN_Id`, `m3`.`Id` AS `Id0` + FROM `ManyMN_DB` AS `m2` + INNER JOIN `ManyN_DB` AS `m3` ON `m2`.`ManyN_Id` = `m3`.`Id` + WHERE `m3`.`Id` = @p +) AS `s0` ON `s`.`Id` = `s0`.`ManyM_Id` +WHERE `m`.`Id` = @p +ORDER BY `m`.`Id`, `s`.`Id0`, `s`.`Id`, `s0`.`Id` +"""); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocMiscellaneousQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocMiscellaneousQueryLibRedTest.cs new file mode 100644 index 00000000..50d599ef --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocMiscellaneousQueryLibRedTest.cs @@ -0,0 +1,1835 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.TestUtilities; +using NetTopologySuite.Geometries; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +#nullable disable + +public class AdHocMiscellaneousQueryLibRedTest(NonSharedFixture fixture) : AdHocMiscellaneousQueryRelationalTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + protected override DbContextOptionsBuilder SetParameterizedCollectionMode( + DbContextOptionsBuilder optionsBuilder, + ParameterTranslationMode parameterizedCollectionMode) + { + new LibRedDbContextOptionsBuilder(optionsBuilder).UseParameterizedCollectionMode(parameterizedCollectionMode); + + return optionsBuilder; + } + + protected override Task Seed2951(Context2951 context) + => context.Database.ExecuteSqlRawAsync( + """ +CREATE TABLE ZeroKey (Id int); +INSERT ZeroKey VALUES (NULL) +"""); + + #region 5456 + + [ConditionalFact] + public virtual async Task Include_group_join_is_per_query_context() + { + var contextFactory = await InitializeAsync( + seed: c => c.SeedAsync(), + createTestStore: () => LibRedTestStore.Create(StoreName)); + + Parallel.For( + 0, 10, i => + { + using var ctx = contextFactory.CreateContext(); + var result = ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ToList(); + + Assert.Equal(198, result.Count); + }); + + Parallel.For( + 0, 10, i => + { + using var ctx = contextFactory.CreateContext(); + var result = ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).Include(x => x.Comments).ToList(); + + Assert.Equal(198, result.Count); + }); + + Parallel.For( + 0, 10, i => + { + using var ctx = contextFactory.CreateContext(); + var result = ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ThenInclude(b => b.Author).ToList(); + + Assert.Equal(198, result.Count); + }); + } + + [ConditionalFact] + public virtual async Task Include_group_join_is_per_query_context_async() + { + var contextFactory = await InitializeAsync( + seed: c => c.SeedAsync(), + createTestStore: () => LibRedTestStore.Create(StoreName)); + + await Parallel.ForAsync( + 0, 10, async (i, ct) => + { + using var ctx = contextFactory.CreateContext(); + var result = await ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ToListAsync(); + + Assert.Equal(198, result.Count); + }); + + await Parallel.ForAsync( + 0, 10, async (i, ct) => + { + using var ctx = contextFactory.CreateContext(); + var result = await ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).Include(x => x.Comments) + .ToListAsync(); + + Assert.Equal(198, result.Count); + }); + + await Parallel.ForAsync( + 0, 10, async (i, ct) => + { + using var ctx = contextFactory.CreateContext(); + var result = await ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ThenInclude(b => b.Author) + .ToListAsync(); + + Assert.Equal(198, result.Count); + }); + } + + private class Context5456(DbContextOptions options) : DbContext(options) + { + public DbSet Blogs { get; set; } + public DbSet Posts { get; set; } + public DbSet Comments { get; set; } + public DbSet Authors { get; set; } + + public Task SeedAsync() + { + for (var i = 0; i < 100; i++) + { + Add( + new Blog { Posts = [new Post { Comments = [new Comment(), new Comment()] }, new Post()], Author = new Author() }); + } + + return SaveChangesAsync(); + } + + public class Blog + { + public int Id { get; set; } + public List Posts { get; set; } + public Author Author { get; set; } + } + + public class Author + { + public int Id { get; set; } + public List Blogs { get; set; } + } + + public class Post + { + public int Id { get; set; } + public Blog Blog { get; set; } + public List Comments { get; set; } + } + + public class Comment + { + public int Id { get; set; } + public Post Blog { get; set; } + } + } + + #endregion + + #region 8864 + + [ConditionalFact] + public virtual async Task Select_nested_projection() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using (var context = contextFactory.CreateContext()) + { + var customers = context.Customers + .Select(c => new { Customer = c, CustomerAgain = Context8864.Get(context, c.Id) }) + .ToList(); + + Assert.Equal(2, customers.Count); + + foreach (var customer in customers) + { + Assert.Same(customer.Customer, customer.CustomerAgain); + } + } + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name` +FROM `Customers` AS `c` +""", + // + """ +@id='1' + +SELECT TOP 2 `c`.`Id`, `c`.`Name` +FROM `Customers` AS `c` +WHERE `c`.`Id` = @id +""", + // + """ +@id='2' + +SELECT TOP 2 `c`.`Id`, `c`.`Name` +FROM `Customers` AS `c` +WHERE `c`.`Id` = @id +"""); + } + + private class Context8864(DbContextOptions options) : DbContext(options) + { + public DbSet Customers { get; set; } + + public Task SeedAsync() + { + AddRange( + new Customer { Name = "Alan" }, + new Customer { Name = "Elon" }); + + return SaveChangesAsync(); + } + + public static Customer Get(Context8864 context, int id) + => context.Customers.Single(c => c.Id == id); + + public class Customer + { + public int Id { get; set; } + public string Name { get; set; } + } + } + + #endregion + + #region 12518 + + [ConditionalFact] + public virtual async Task Projecting_entity_with_value_converter_and_include_works() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var result = context.Parents.Include(p => p.Child).OrderBy(e => e.Id).FirstOrDefault(); + + AssertSql( + """ +SELECT TOP 1 `p`.`Id`, `p`.`ChildId`, `c`.`Id`, `c`.`ParentId`, `c`.`ULongRowVersion` +FROM `Parents` AS `p` +LEFT JOIN `Children` AS `c` ON `p`.`ChildId` = `c`.`Id` +ORDER BY `p`.`Id` +"""); + } + + [ConditionalFact] + public virtual async Task Projecting_column_with_value_converter_of_ulong_byte_array() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var result = context.Parents.OrderBy(e => e.Id).Select(p => (ulong?)p.Child.ULongRowVersion).FirstOrDefault(); + + AssertSql( + """ +SELECT TOP 1 `c`.`ULongRowVersion` +FROM `Parents` AS `p` +LEFT JOIN `Children` AS `c` ON `p`.`ChildId` = `c`.`Id` +ORDER BY `p`.`Id` +"""); + } + + protected class Context12518(DbContextOptions options) : DbContext(options) + { + public virtual DbSet Parents { get; set; } + public virtual DbSet Children { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + var child = modelBuilder.Entity(); + child.HasOne(_ => _.Parent) + .WithOne(_ => _.Child) + .HasForeignKey(_ => _.ChildId); + child.Property(x => x.ULongRowVersion) + .HasConversion(new NumberToBytesConverter()) + .IsRowVersion() + .IsRequired() + .HasColumnType("varbinary(8)"); + + modelBuilder.Entity(); + } + + public Task SeedAsync() + { + Parents.Add(new Parent12518()); + return SaveChangesAsync(); + } + + public class Parent12518 + { + public Guid Id { get; set; } = Guid.NewGuid(); + public Guid? ChildId { get; set; } + public Child12518 Child { get; set; } + } + + public class Child12518 + { + public Guid Id { get; set; } = Guid.NewGuid(); + public ulong ULongRowVersion { get; set; } + public Guid ParentId { get; set; } + public Parent12518 Parent { get; set; } + } + } + + #endregion + + #region 13118 + + [ConditionalFact] + public virtual async Task DateTime_Contains_with_smalldatetime_generates_correct_literal() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var testDateList = new List { new(2018, 10, 07) }; + var findRecordsWithDateInList = context.ReproEntity + .Where(a => testDateList.Contains(a.MyTime)) + .ToList(); + + Assert.Single((IEnumerable)findRecordsWithDateInList); + + AssertSql( + """ +@testDateList1='2018-10-07T00:00:00.0000000' (DbType = DateTime) + +SELECT `r`.`Id`, `r`.`MyTime` +FROM `ReproEntity` AS `r` +WHERE `r`.`MyTime` = CDATE(@testDateList1) +"""); + } + + private class Context13118(DbContextOptions options) : DbContext(options) + { + public virtual DbSet ReproEntity { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity(e => e.Property("MyTime").HasColumnType("smalldatetime")); + + public Task SeedAsync() + { + AddRange( + new ReproEntity13118 { MyTime = new DateTime(2018, 10, 07) }, + new ReproEntity13118 { MyTime = new DateTime(2018, 10, 08) }); + + return SaveChangesAsync(); + } + } + + private class ReproEntity13118 + { + public Guid Id { get; set; } + public DateTime MyTime { get; set; } + } + + #endregion + + #region 14095 + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Where_equals_DateTime_Now(bool async) + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using var context = contextFactory.CreateContext(); + var query = context.Dates.Where( + d => d.DateTime2_2 == DateTime.Now + || d.DateTime2_7 == DateTime.Now + || d.DateTime == DateTime.Now + || d.SmallDateTime == DateTime.Now); + + var results = async + ? await query.ToListAsync() + : [.. query]; + + Assert.Empty(results); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`DateTime`, `d`.`DateTime2`, `d`.`DateTime2_0`, `d`.`DateTime2_1`, `d`.`DateTime2_2`, `d`.`DateTime2_3`, `d`.`DateTime2_4`, `d`.`DateTime2_5`, `d`.`DateTime2_6`, `d`.`DateTime2_7`, `d`.`SmallDateTime` +FROM `Dates` AS `d` +WHERE `d`.`DateTime2_2` = NOW() OR `d`.`DateTime2_7` = NOW() OR `d`.`DateTime` = NOW() OR `d`.`SmallDateTime` = NOW() +"""); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Where_not_equals_DateTime_Now(bool async) + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using var context = contextFactory.CreateContext(); + var query = context.Dates.Where( + d => d.DateTime2_2 != DateTime.Now + && d.DateTime2_7 != DateTime.Now + && d.DateTime != DateTime.Now + && d.SmallDateTime != DateTime.Now); + + var results = async + ? await query.ToListAsync() + : [.. query]; + + Assert.Single((IEnumerable)results); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`DateTime`, `d`.`DateTime2`, `d`.`DateTime2_0`, `d`.`DateTime2_1`, `d`.`DateTime2_2`, `d`.`DateTime2_3`, `d`.`DateTime2_4`, `d`.`DateTime2_5`, `d`.`DateTime2_6`, `d`.`DateTime2_7`, `d`.`SmallDateTime` +FROM `Dates` AS `d` +WHERE `d`.`DateTime2_2` <> NOW() AND `d`.`DateTime2_7` <> NOW() AND `d`.`DateTime` <> NOW() AND `d`.`SmallDateTime` <> NOW() +"""); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Where_equals_new_DateTime(bool async) + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using var context = contextFactory.CreateContext(); + var query = context.Dates.Where( + d => d.SmallDateTime == new DateTime(1970, 9, 3, 12, 0, 0) + && d.DateTime == new DateTime(1971, 9, 3, 12, 0, 10, 220) + && d.DateTime2 == new DateTime(1972, 9, 3, 12, 0, 10, 333) + && d.DateTime2_0 == new DateTime(1973, 9, 3, 12, 0, 10) + && d.DateTime2_1 == new DateTime(1974, 9, 3, 12, 0, 10, 500) + && d.DateTime2_2 == new DateTime(1975, 9, 3, 12, 0, 10, 660) + && d.DateTime2_3 == new DateTime(1976, 9, 3, 12, 0, 10, 777) + && d.DateTime2_4 == new DateTime(1977, 9, 3, 12, 0, 10, 888) + && d.DateTime2_5 == new DateTime(1978, 9, 3, 12, 0, 10, 999) + && d.DateTime2_6 == new DateTime(1979, 9, 3, 12, 0, 10, 111) + && d.DateTime2_7 == new DateTime(1980, 9, 3, 12, 0, 10, 222)); + + var results = async + ? await query.ToListAsync() + : [.. query]; + + Assert.Single((IEnumerable)results); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`DateTime`, `d`.`DateTime2`, `d`.`DateTime2_0`, `d`.`DateTime2_1`, `d`.`DateTime2_2`, `d`.`DateTime2_3`, `d`.`DateTime2_4`, `d`.`DateTime2_5`, `d`.`DateTime2_6`, `d`.`DateTime2_7`, `d`.`SmallDateTime` +FROM `Dates` AS `d` +WHERE `d`.`SmallDateTime` = #1970-09-03 12:00:00# AND `d`.`DateTime` = #1971-09-03 12:00:10# AND `d`.`DateTime2` = #1972-09-03 12:00:10# AND `d`.`DateTime2_0` = #1973-09-03 12:00:10# AND `d`.`DateTime2_1` = #1974-09-03 12:00:10# AND `d`.`DateTime2_2` = #1975-09-03 12:00:10# AND `d`.`DateTime2_3` = #1976-09-03 12:00:10# AND `d`.`DateTime2_4` = #1977-09-03 12:00:10# AND `d`.`DateTime2_5` = #1978-09-03 12:00:10# AND `d`.`DateTime2_6` = #1979-09-03 12:00:10# AND `d`.`DateTime2_7` = #1980-09-03 12:00:10# +"""); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Where_contains_DateTime_literals(bool async) + { + var dateTimes = new[] + { + new DateTime(1970, 9, 3, 12, 0, 0), + new DateTime(1971, 9, 3, 12, 0, 10, 220), + new DateTime(1972, 9, 3, 12, 0, 10, 333), + new DateTime(1973, 9, 3, 12, 0, 10), + new DateTime(1974, 9, 3, 12, 0, 10, 500), + new DateTime(1975, 9, 3, 12, 0, 10, 660), + new DateTime(1976, 9, 3, 12, 0, 10, 777), + new DateTime(1977, 9, 3, 12, 0, 10, 888), + new DateTime(1978, 9, 3, 12, 0, 10, 999), + new DateTime(1979, 9, 3, 12, 0, 10, 111), + new DateTime(1980, 9, 3, 12, 0, 10, 222) + }; + + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using var context = contextFactory.CreateContext(); + var query = context.Dates.Where( + d => dateTimes.Contains(d.SmallDateTime) + && dateTimes.Contains(d.DateTime) + && dateTimes.Contains(d.DateTime2) + && dateTimes.Contains(d.DateTime2_0) + && dateTimes.Contains(d.DateTime2_1) + && dateTimes.Contains(d.DateTime2_2) + && dateTimes.Contains(d.DateTime2_3) + && dateTimes.Contains(d.DateTime2_4) + && dateTimes.Contains(d.DateTime2_5) + && dateTimes.Contains(d.DateTime2_6) + && dateTimes.Contains(d.DateTime2_7)); + + var results = async + ? await query.ToListAsync() + : [.. query]; + + Assert.Single((IEnumerable)results); + + AssertSql( + """ + SELECT `d`.`Id`, `d`.`DateTime`, `d`.`DateTime2`, `d`.`DateTime2_0`, `d`.`DateTime2_1`, `d`.`DateTime2_2`, `d`.`DateTime2_3`, `d`.`DateTime2_4`, `d`.`DateTime2_5`, `d`.`DateTime2_6`, `d`.`DateTime2_7`, `d`.`SmallDateTime` + FROM `Dates` AS `d` + WHERE `d`.`SmallDateTime` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime2` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime2_0` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime2_1` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime2_2` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime2_3` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime2_4` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime2_5` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime2_6` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) AND `d`.`DateTime2_7` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) + """); + } + + protected class Context14095(DbContextOptions options) : DbContext(options) + { + public DbSet Dates { get; set; } + + public Task SeedAsync() + { + Add( + new DatesAndPrunes14095 + { + SmallDateTime = new DateTime(1970, 9, 3, 12, 0, 0), + DateTime = new DateTime(1971, 9, 3, 12, 0, 10, 220), + DateTime2 = new DateTime(1972, 9, 3, 12, 0, 10, 333), + DateTime2_0 = new DateTime(1973, 9, 3, 12, 0, 10), + DateTime2_1 = new DateTime(1974, 9, 3, 12, 0, 10, 500), + DateTime2_2 = new DateTime(1975, 9, 3, 12, 0, 10, 660), + DateTime2_3 = new DateTime(1976, 9, 3, 12, 0, 10, 777), + DateTime2_4 = new DateTime(1977, 9, 3, 12, 0, 10, 888), + DateTime2_5 = new DateTime(1978, 9, 3, 12, 0, 10, 999), + DateTime2_6 = new DateTime(1979, 9, 3, 12, 0, 10, 111), + DateTime2_7 = new DateTime(1980, 9, 3, 12, 0, 10, 222) + }); + return SaveChangesAsync(); + } + + public class DatesAndPrunes14095 + { + public int Id { get; set; } + + [Column(TypeName = "smalldatetime")] + public DateTime SmallDateTime { get; set; } + + [Column(TypeName = "datetime")] + public DateTime DateTime { get; set; } + + [Column(TypeName = "datetime2")] + public DateTime DateTime2 { get; set; } + + [Column(TypeName = "datetime2(0)")] + public DateTime DateTime2_0 { get; set; } + + [Column(TypeName = "datetime2(1)")] + public DateTime DateTime2_1 { get; set; } + + [Column(TypeName = "datetime2(2)")] + public DateTime DateTime2_2 { get; set; } + + [Column(TypeName = "datetime2(3)")] + public DateTime DateTime2_3 { get; set; } + + [Column(TypeName = "datetime2(4)")] + public DateTime DateTime2_4 { get; set; } + + [Column(TypeName = "datetime2(5)")] + public DateTime DateTime2_5 { get; set; } + + [Column(TypeName = "datetime2(6)")] + public DateTime DateTime2_6 { get; set; } + + [Column(TypeName = "datetime2(7)")] + public DateTime DateTime2_7 { get; set; } + } + } + + #endregion + + #region 15518 + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public virtual async Task Nested_queries_does_not_cause_concurrency_exception_sync(bool tracking) + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using (var context = contextFactory.CreateContext()) + { + var query = context.Repos.OrderBy(r => r.Id).Where(r => r.Id > 0); + query = tracking ? query.AsTracking() : query.AsNoTracking(); + + foreach (var a in query) + { + foreach (var b in query) + { + } + } + } + + using (var context = contextFactory.CreateContext()) + { + var query = context.Repos.OrderBy(r => r.Id).Where(r => r.Id > 0); + query = tracking ? query.AsTracking() : query.AsNoTracking(); + + await foreach (var a in query.AsAsyncEnumerable()) + { + await foreach (var b in query.AsAsyncEnumerable()) + { + } + } + } + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +"""); + } + + private class Context15518(DbContextOptions options) : DbContext(options) + { + public DbSet Repos { get; set; } + + public Task SeedAsync() + { + AddRange( + new Repo { Name = "London" }, + new Repo { Name = "New York" }); + + return SaveChangesAsync(); + } + + public class Repo + { + public int Id { get; set; } + public string Name { get; set; } + } + } + + #endregion + + #region 19206 + + /*[ConditionalFact] + public virtual async Task From_sql_expression_compares_correctly() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using (var context = contextFactory.CreateContext()) + { + var query = from t1 in context.Tests.FromSqlInterpolated( + $"Select * from Tests Where Type = {Context19206.TestType19206.Unit}") + from t2 in context.Tests.FromSqlInterpolated( + $"Select * from Tests Where Type = {Context19206.TestType19206.Integration}") + select new { t1, t2 }; + + var result = query.ToList(); + + var item = Assert.Single((IEnumerable)result); + Assert.Equal(Context19206.TestType19206.Unit, item.t1.Type); + Assert.Equal(Context19206.TestType19206.Integration, item.t2.Type); + + AssertSql( + """ +p0='0' +p1='1' + +SELECT [m].[Id], [m].[Type], [m0].[Id], [m0].[Type] +FROM ( + Select * from Tests Where Type = @p0 +) AS [m] +CROSS JOIN ( + Select * from Tests Where Type = @p1 +) AS [m0] +"""); + } + }*/ + + private class Context19206(DbContextOptions options) : DbContext(options) + { + public DbSet Tests { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + } + + public Task SeedAsync() + { + Add(new Test { Type = TestType19206.Unit }); + Add(new Test { Type = TestType19206.Integration }); + return SaveChangesAsync(); + } + + public class Test + { + public int Id { get; set; } + public TestType19206 Type { get; set; } + } + + public enum TestType19206 + { + Unit, + Integration, + } + } + + #endregion + + #region 21666 + + [ConditionalFact] + public virtual async Task Thread_safety_in_relational_command_cache() + { + var contextFactory = await InitializeAsync( + onConfiguring: options => ((IDbContextOptionsBuilderInfrastructure)options).AddOrUpdateExtension( + options.Options.FindExtension() + .WithConnection(null) + .WithConnectionString(LibRedTestStore.CreateConnectionString(StoreName)))); + + var ids = new[] { 1, 2, 3 }; + + Parallel.For( + 0, 100, + i => + { + using var context = contextFactory.CreateContext(); + var query = context.Lists.Where(l => !l.IsDeleted && ids.Contains(l.Id)).ToList(); + }); + } + + private class Context21666(DbContextOptions options) : DbContext(options) + { + public DbSet Lists { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + } + + public class List + { + public int Id { get; set; } + public bool IsDeleted { get; set; } + } + } + + #endregion + + #region 27427 + + /*[ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Muliple_occurrences_of_FromSql_in_group_by_aggregate(bool async) + { + var contextFactory = await InitializeAsync(); + using var context = contextFactory.CreateContext(); + var query = context.DemoEntities + .FromSqlRaw("SELECT * FROM DemoEntities WHERE Id = {0}", new SqlParameter { Value = 1 }) + .Select(e => e.Id); + + var query2 = context.DemoEntities + .Where(e => query.Contains(e.Id)) + .GroupBy(e => e.Id) + .Select(g => new { g.Key, Aggregate = g.Count() }); + + if (async) + { + await query2.ToListAsync(); + } + else + { + query2.ToList(); + } + + AssertSql( + """ +p0='1' + +SELECT [d].[Id] AS [Key], COUNT(*) AS [Aggregate] +FROM [DemoEntities] AS [d] +WHERE [d].[Id] IN ( + SELECT [m].[Id] + FROM ( + SELECT * FROM DemoEntities WHERE Id = @p0 + ) AS [m] +) +GROUP BY [d].[Id] +"""); + }*/ + + protected class Context27427(DbContextOptions options) : DbContext(options) + { + public DbSet DemoEntities { get; set; } + } + + protected class DemoEntity + { + public int Id { get; set; } + } + + #endregion + + public override async Task First_FirstOrDefault_ix_async() + { + await base.First_FirstOrDefault_ix_async(); + //Dont test sql. parameter p0 is a bit flaky at times + /*AssertSql( + """ +SELECT TOP 1 `p`.`Id`, `p`.`Name` +FROM `Products` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +@p0='1' + +DELETE FROM `Products` +WHERE `Id` = @p0; +SELECT @@ROWCOUNT; +""", + // + """ +@p0='Product 1' (Size = 255) + +INSERT INTO `Products` (`Name`) +VALUES (@p0); +SELECT `Id` +FROM `Products` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +SELECT TOP 1 `p`.`Id`, `p`.`Name` +FROM `Products` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +@p0='2' + +DELETE FROM `Products` +WHERE `Id` = @p0; +SELECT @@ROWCOUNT; +""");*/ + } + + public override async Task Discriminator_type_is_handled_correctly() + { + await base.Discriminator_type_is_handled_correctly(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`Name` +FROM `Products` AS `p` +WHERE `p`.`Discriminator` = 1 +""", + // + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`Name` +FROM `Products` AS `p` +WHERE `p`.`Discriminator` = 1 +"""); + } + + public override async Task New_instances_in_projection_are_not_shared_across_results() + { + await base.New_instances_in_projection_are_not_shared_across_results(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title` +FROM `Posts` AS `p` +"""); + } + + public override async Task Enum_has_flag_applies_explicit_cast_for_constant() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + //Context8538.Permission is Int64 and ontext8538.Permission.READ_WRITE is 36 bit and jet/ace cant do maths on bigint/decimal + /*using (var context = contextFactory.CreateContext()) + { + var query = context.Entities.Where(e => e.Permission.HasFlag(Context8538.Permission.READ_WRITE)).ToList(); + Assert.Single(query); + }*/ + + using (var context = contextFactory.CreateContext()) + { + var query = context.Entities.Where(e => e.PermissionShort.HasFlag(Context8538.PermissionShort.READ_WRITE)).ToList(); + Assert.Single(query); + } + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Permission`, `e`.`PermissionByte`, `e`.`PermissionShort` +FROM `Entities` AS `e` +WHERE (`e`.`PermissionShort` BAND CINT(4)) = CINT(4) +"""); + } + + public override async Task Enum_has_flag_does_not_apply_explicit_cast_for_non_constant() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + /*using (var context = contextFactory.CreateContext()) + { + var query = context.Entities.Where(e => e.Permission.HasFlag(e.Permission)).ToList(); + Assert.Equal(3, query.Count); + }*/ + + using (var context = contextFactory.CreateContext()) + { + var query = context.Entities.Where(e => e.PermissionByte.HasFlag(e.PermissionByte)).ToList(); + Assert.Equal(3, query.Count); + } + + AssertSql( + """ + SELECT `e`.`Id`, `e`.`Permission`, `e`.`PermissionByte`, `e`.`PermissionShort` + FROM `Entities` AS `e` + WHERE (`e`.`PermissionByte` BAND `e`.`PermissionByte`) = `e`.`PermissionByte` + """); + } + + public override async Task Variable_from_closure_is_parametrized() + { + await base.Variable_from_closure_is_parametrized(); + + AssertSql( + """ +@id='1' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = @id +""", + // + """ +@id='2' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = @id +""", + // + """ +@id='1' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = @id +""", + // + """ +@id='2' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = @id +""", + // + """ +@id='1' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` IN ( + SELECT `e0`.`Id` + FROM `Entities` AS `e0` + WHERE `e0`.`Id` = @id +) +""", + // + """ +@id='2' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` IN ( + SELECT `e0`.`Id` + FROM `Entities` AS `e0` + WHERE `e0`.`Id` = @id +) +"""); + } + + public override async Task Relational_command_cache_creates_new_entry_when_parameter_nullability_changes() + { + await base.Relational_command_cache_creates_new_entry_when_parameter_nullability_changes(); + + AssertSql( + """ +@name='A' (Size = 255) + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Name` = @name +""", + // + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Name` IS NULL +"""); + } + + public override async Task Query_cache_entries_are_evicted_as_necessary() + { + await base.Query_cache_entries_are_evicted_as_necessary(); + + AssertSql(); + } + + public override async Task Explicitly_compiled_query_does_not_add_cache_entry() + { + await base.Explicitly_compiled_query_does_not_add_cache_entry(); + + AssertSql( + """ +SELECT TOP 2 `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = 1 +"""); + } + + public override async Task Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool() + { + await base.Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool(); + + AssertSql( + """ +SELECT IIF(`c0`.`Id` IS NOT NULL, NOT (`c0`.`Processed`), NULL) AS `Processing` +FROM `Carts` AS `c` +LEFT JOIN `Configuration` AS `c0` ON `c`.`ConfigurationId` = `c0`.`Id` +"""); + } + + public override async Task QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop() + { + await base.QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`IsTwo`, `b`.`MoreStuffId` +FROM `Bases` AS `b` +"""); + } + + public override async Task Average_with_cast() + { + await base.Average_with_cast(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`DecimalColumn`, `p`.`DoubleColumn`, `p`.`FloatColumn`, `p`.`IntColumn`, `p`.`LongColumn`, `p`.`NullableDecimalColumn`, `p`.`NullableDoubleColumn`, `p`.`NullableFloatColumn`, `p`.`NullableIntColumn`, `p`.`NullableLongColumn`, `p`.`Price` +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`Price`) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(CDBL(`p`.`IntColumn`)) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(IIF(`p`.`NullableIntColumn` IS NULL, NULL, CDBL(`p`.`NullableIntColumn`))) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(CDBL(`p`.`LongColumn`)) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(IIF(`p`.`NullableLongColumn` IS NULL, NULL, CDBL(`p`.`NullableLongColumn`))) +FROM `Prices` AS `p` +""", + // + """ +SELECT CSNG(AVG(`p`.`FloatColumn`)) +FROM `Prices` AS `p` +""", + // + """ +SELECT CSNG(AVG(`p`.`NullableFloatColumn`)) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`DoubleColumn`) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`NullableDoubleColumn`) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`DecimalColumn`) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`NullableDecimalColumn`) +FROM `Prices` AS `p` +"""); + } + + public override async Task Parameterless_ctor_on_inner_DTO_gets_called_for_every_row() + { + await base.Parameterless_ctor_on_inner_DTO_gets_called_for_every_row(); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +"""); + } + + public override async Task Union_and_insert_works_correctly_together() + { + await base.Union_and_insert_works_correctly_together(); + + AssertSql( + """ +@id1='1' +@id2='2' + +SELECT `t`.`Id` +FROM `Tables1` AS `t` +WHERE `t`.`Id` = @id1 +UNION +SELECT `t0`.`Id` +FROM `Tables2` AS `t0` +WHERE `t0`.`Id` = @id2 +""", + // + """ +INSERT INTO `Tables1` +DEFAULT VALUES; +SELECT `Id` +FROM `Tables1` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +INSERT INTO `Tables1` +DEFAULT VALUES; +SELECT `Id` +FROM `Tables1` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +INSERT INTO `Tables2` +DEFAULT VALUES; +SELECT `Id` +FROM `Tables2` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +INSERT INTO `Tables2` +DEFAULT VALUES; +SELECT `Id` +FROM `Tables2` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Repeated_parameters_in_generated_query_sql() + { + await base.Repeated_parameters_in_generated_query_sql(); + + AssertSql( + """ +@k='1' + +SELECT TOP 1 `a`.`Id`, `a`.`Name` +FROM `Autos` AS `a` +WHERE `a`.`Id` = @k +""", + // + """ +@p='2' + +SELECT TOP 1 `a`.`Id`, `a`.`Name` +FROM `Autos` AS `a` +WHERE `a`.`Id` = @p +""", + // + """ +@entity_equality_a_Id='1' (Nullable = true) +@entity_equality_b_Id='2' (Nullable = true) + +SELECT `e`.`Id`, `e`.`AnotherAutoId`, `e`.`AutoId` +FROM (`EqualAutos` AS `e` +LEFT JOIN `Autos` AS `a` ON `e`.`AutoId` = `a`.`Id`) +LEFT JOIN `Autos` AS `a0` ON `e`.`AnotherAutoId` = `a0`.`Id` +WHERE (`a`.`Id` = @entity_equality_a_Id AND `a0`.`Id` = @entity_equality_b_Id) OR (`a`.`Id` = @entity_equality_b_Id AND `a0`.`Id` = @entity_equality_a_Id) +"""); + } + + public override async Task Operators_combine_nullability_of_entity_shapers() + { + await base.Operators_combine_nullability_of_entity_shapers(); + + AssertSql( + """ +SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] +FROM [As] AS [a] +LEFT JOIN [Bs] AS [b] ON [a].[forkey] = [b].[forkey] +UNION ALL +SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] +FROM [Bs] AS [b0] +LEFT JOIN [As] AS [a0] ON [b0].[forkey] = [a0].[forkey] +WHERE [a0].[Id] IS NULL +""", + // + """ +SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] +FROM [As] AS [a] +LEFT JOIN [Bs] AS [b] ON [a].[forkey] = [b].[forkey] +UNION +SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] +FROM [Bs] AS [b0] +LEFT JOIN [As] AS [a0] ON [b0].[forkey] = [a0].[forkey] +WHERE [a0].[Id] IS NULL +""", + // + """ +SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] +FROM [As] AS [a] +LEFT JOIN [Bs] AS [b] ON [a].[forkey] = [b].[forkey] +EXCEPT +SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] +FROM [Bs] AS [b0] +LEFT JOIN [As] AS [a0] ON [b0].[forkey] = [a0].[forkey] +""", + // + """ +SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] +FROM [As] AS [a] +LEFT JOIN [Bs] AS [b] ON [a].[forkey] = [b].[forkey] +INTERSECT +SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] +FROM [Bs] AS [b0] +LEFT JOIN [As] AS [a0] ON [b0].[forkey] = [a0].[forkey] +"""); + } + + public override async Task Shadow_property_with_inheritance() + { + await base.Shadow_property_with_inheritance(); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Discriminator`, `c`.`IsPrimary`, `c`.`UserName`, `c`.`EmployerId`, `c`.`ServiceOperatorId` +FROM `Contacts` AS `c` +""", + // + """ +SELECT `c`.`Id`, `c`.`Discriminator`, `c`.`IsPrimary`, `c`.`UserName`, `c`.`ServiceOperatorId`, `s`.`Id` +FROM `Contacts` AS `c` +INNER JOIN `ServiceOperators` AS `s` ON `c`.`ServiceOperatorId` = `s`.`Id` +WHERE `c`.`Discriminator` = 'ServiceOperatorContact' +""", + // + """ +SELECT `c`.`Id`, `c`.`Discriminator`, `c`.`IsPrimary`, `c`.`UserName`, `c`.`ServiceOperatorId` +FROM `Contacts` AS `c` +WHERE `c`.`Discriminator` = 'ServiceOperatorContact' +"""); + } + + public override async Task Inlined_dbcontext_is_not_leaking() + { + await base.Inlined_dbcontext_is_not_leaking(); + + AssertSql( + """ +SELECT `b`.`Id` +FROM `Blogs` AS `b` +"""); + } + + public override async Task GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination() + { + await base.GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination(); + + AssertSql( + """ +SELECT `t1`.`AnotherEntity11818_Name` AS `Key`, COUNT(*) + 5 AS `cnt` +FROM `Table` AS `t` +LEFT JOIN ( + SELECT `t0`.`Id`, `t0`.`Exists`, `t0`.`AnotherEntity11818_Name` + FROM `Table` AS `t0` + WHERE `t0`.`Exists` IS NOT NULL +) AS `t1` ON `t`.`Id` = IIF(`t1`.`Exists` IS NOT NULL, `t1`.`Id`, NULL) +GROUP BY `t1`.`AnotherEntity11818_Name` +""", + // + """ +SELECT `t1`.`AnotherEntity11818_Name` AS `MyKey`, COUNT(*) + 5 AS `cnt` +FROM (`Table` AS `t` +LEFT JOIN ( + SELECT `t0`.`Id`, `t0`.`Exists`, `t0`.`AnotherEntity11818_Name` + FROM `Table` AS `t0` + WHERE `t0`.`Exists` IS NOT NULL +) AS `t1` ON `t`.`Id` = IIF(`t1`.`Exists` IS NOT NULL, `t1`.`Id`, NULL)) +LEFT JOIN ( + SELECT `t2`.`Id`, `t2`.`MaumarEntity11818_Exists`, `t2`.`MaumarEntity11818_Name` + FROM `Table` AS `t2` + WHERE `t2`.`MaumarEntity11818_Exists` IS NOT NULL +) AS `t3` ON `t`.`Id` = IIF(`t3`.`MaumarEntity11818_Exists` IS NOT NULL, `t3`.`Id`, NULL) +GROUP BY `t1`.`AnotherEntity11818_Name`, `t3`.`MaumarEntity11818_Name` +""", + // + """ +SELECT TOP 1 `t1`.`AnotherEntity11818_Name` AS `MyKey`, `t3`.`MaumarEntity11818_Name` AS `cnt` +FROM (`Table` AS `t` +LEFT JOIN ( + SELECT `t0`.`Id`, `t0`.`Exists`, `t0`.`AnotherEntity11818_Name` + FROM `Table` AS `t0` + WHERE `t0`.`Exists` IS NOT NULL +) AS `t1` ON `t`.`Id` = IIF(`t1`.`Exists` IS NOT NULL, `t1`.`Id`, NULL)) +LEFT JOIN ( + SELECT `t2`.`Id`, `t2`.`MaumarEntity11818_Exists`, `t2`.`MaumarEntity11818_Name` + FROM `Table` AS `t2` + WHERE `t2`.`MaumarEntity11818_Exists` IS NOT NULL +) AS `t3` ON `t`.`Id` = IIF(`t3`.`MaumarEntity11818_Exists` IS NOT NULL, `t3`.`Id`, NULL) +GROUP BY `t1`.`AnotherEntity11818_Name`, `t3`.`MaumarEntity11818_Name` +"""); + } + + public override async Task Comparing_enum_casted_to_byte_with_int_parameter(bool async) + { + await base.Comparing_enum_casted_to_byte_with_int_parameter(async); + + AssertSql( + """ +@bitterTaste='1' + +SELECT `i`.`IceCreamId`, `i`.`Name`, `i`.`Taste` +FROM `IceCreams` AS `i` +WHERE `i`.`Taste` = @bitterTaste +"""); + } + + public override async Task Comparing_enum_casted_to_byte_with_int_constant(bool async) + { + await base.Comparing_enum_casted_to_byte_with_int_constant(async); + + AssertSql( + """ +SELECT `i`.`IceCreamId`, `i`.`Name`, `i`.`Taste` +FROM `IceCreams` AS `i` +WHERE `i`.`Taste` = 1 +"""); + } + + public override async Task Comparing_byte_column_to_enum_in_vb_creating_double_cast(bool async) + { + await base.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`Taste` +FROM `Foods` AS `f` +WHERE `f`.`Taste` = CBYTE(1) +"""); + } + + public override async Task Null_check_removal_in_ternary_maintain_appropriate_cast(bool async) + { + await base.Null_check_removal_in_ternary_maintain_appropriate_cast(async); + + AssertSql( + """ +SELECT `f`.`Taste` AS `Bar` +FROM `Foods` AS `f` +"""); + } + + public override async Task SaveChangesAsync_accepts_changes_with_ConfigureAwait_true() + { + await base.SaveChangesAsync_accepts_changes_with_ConfigureAwait_true(); + + AssertSql( + """ +INSERT INTO `ObservableThings` +DEFAULT VALUES; +SELECT `Id` +FROM `ObservableThings` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Bool_discriminator_column_works(bool async) + { + await base.Bool_discriminator_column_works(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`BlogId`, `b`.`Id`, `b`.`IsPhotoBlog`, `b`.`Title`, `b`.`NumberOfPhotos` +FROM `Authors` AS `a` +LEFT JOIN `Blog` AS `b` ON `a`.`BlogId` = `b`.`Id` +"""); + } + + public override async Task Multiple_different_entity_type_from_different_namespaces(bool async) + { + await base.Multiple_different_entity_type_from_different_namespaces(async); + + AssertSql( + """ +SELECT cast(null as int) AS MyValue +"""); + } + + public override async Task Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(bool async) + { + await base.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async); + + AssertSql( + """ +@currentUserId='1' + +SELECT `u`.`Id` IN ( + SELECT `u0`.`Id` + FROM `Memberships` AS `m` + INNER JOIN `Users` AS `u0` ON `m`.`UserId` = `u0`.`Id` + WHERE `m`.`GroupId` IN ( + SELECT `m0`.`GroupId` + FROM `Memberships` AS `m0` + WHERE `m0`.`UserId` = @currentUserId + ) +) AS `HasAccess` +FROM `Users` AS `u` +"""); + } + + public override async Task Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(bool async) + { + await base.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async); + + AssertSql( + """ +@currentUserId='1' + +SELECT `u`.`Id` IN ( + SELECT `u0`.`Id` + FROM (`Memberships` AS `m` + INNER JOIN `Groups` AS `g` ON `m`.`GroupId` = `g`.`Id`) + INNER JOIN `Users` AS `u0` ON `m`.`UserId` = `u0`.`Id` + WHERE `g`.`Id` IN ( + SELECT `g0`.`Id` + FROM `Memberships` AS `m0` + INNER JOIN `Groups` AS `g0` ON `m0`.`GroupId` = `g0`.`Id` + WHERE `m0`.`UserId` = @currentUserId + ) +) AS `HasAccess` +FROM `Users` AS `u` +"""); + } + + public override async Task Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(bool async) + { + await base.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async); + + AssertSql( + """ +@currentUserId='1' + +SELECT EXISTS ( + SELECT 1 + FROM `Memberships` AS `m` + INNER JOIN `Users` AS `u0` ON `m`.`UserId` = `u0`.`Id` + WHERE `m`.`GroupId` IN ( + SELECT `m0`.`GroupId` + FROM `Memberships` AS `m0` + WHERE `m0`.`UserId` = @currentUserId + ) AND `u0`.`Id` = `u`.`Id`) AS `HasAccess` +FROM `Users` AS `u` +"""); + } + + public override async Task GroupBy_aggregate_on_right_side_of_join(bool async) + { + await base.GroupBy_aggregate_on_right_side_of_join(async); + + AssertSql( + """ +@orderId='123456' + +SELECT `o`.`Id`, `o`.`CancellationDate`, `o`.`OrderId`, `o`.`ShippingDate` +FROM `OrderItems` AS `o` +INNER JOIN ( + SELECT `o0`.`OrderId` AS `Key` + FROM `OrderItems` AS `o0` + WHERE `o0`.`OrderId` = @orderId + GROUP BY `o0`.`OrderId` +) AS `o1` ON `o`.`OrderId` = `o1`.`Key` +WHERE `o`.`OrderId` = @orderId +ORDER BY `o`.`OrderId` +"""); + } + + public override async Task Enum_with_value_converter_matching_take_value(bool async) + { + await base.Enum_with_value_converter_matching_take_value(async); + + AssertSql( + """ +@orderItemType='MyType1' (Nullable = false) (Size = 255) +@p='1' + +SELECT `o1`.`Id`, IIF(( + SELECT TOP 1 `o3`.`Price` + FROM `OrderItems` AS `o3` + WHERE `o1`.`Id` = `o3`.`OrderId` AND `o3`.`Type` = @orderItemType) IS NULL, 0.0, ( + SELECT TOP 1 `o3`.`Price` + FROM `OrderItems` AS `o3` + WHERE `o1`.`Id` = `o3`.`OrderId` AND `o3`.`Type` = @orderItemType)) AS `SpecialSum` +FROM ( + SELECT TOP @p `o`.`Id` + FROM `Orders` AS `o` + WHERE EXISTS ( + SELECT 1 + FROM `OrderItems` AS `o0` + WHERE `o`.`Id` = `o0`.`OrderId`) + ORDER BY `o`.`Id` +) AS `o2` +INNER JOIN `Orders` AS `o1` ON `o2`.`Id` = `o1`.`Id` +ORDER BY `o2`.`Id` +"""); + } + + public override async Task GroupBy_Aggregate_over_navigations_repeated(bool async) + { + await base.GroupBy_Aggregate_over_navigations_repeated(async); + + AssertSql( + """ +SELECT ( + SELECT MIN(`o`.`HourlyRate`) + FROM `TimeSheets` AS `t0` + LEFT JOIN `Order` AS `o` ON `t0`.`OrderId` = `o`.`Id` + WHERE `t0`.`OrderId` IS NOT NULL AND `t`.`OrderId` = `t0`.`OrderId`) AS `HourlyRate`, ( + SELECT MIN(`c`.`Id`) + FROM (`TimeSheets` AS `t1` + INNER JOIN `Project` AS `p` ON `t1`.`ProjectId` = `p`.`Id`) + LEFT JOIN `Customers` AS `c` ON `p`.`CustomerId` = `c`.`Id` + WHERE (`t1`.`OrderId` IS NOT NULL AND `t`.`OrderId` = `t1`.`OrderId`) AND (`p`.`CustomerId` IS NOT NULL AND `c`.`Id` IS NOT NULL)) AS `CustomerId`, ( + SELECT MIN(`c0`.`Name`) + FROM (`TimeSheets` AS `t2` + INNER JOIN `Project` AS `p0` ON `t2`.`ProjectId` = `p0`.`Id`) + LEFT JOIN `Customers` AS `c0` ON `p0`.`CustomerId` = `c0`.`Id` + WHERE (`t2`.`OrderId` IS NOT NULL AND `t`.`OrderId` = `t2`.`OrderId`) AND (`p0`.`CustomerId` IS NOT NULL AND `c0`.`Id` IS NOT NULL)) AS `CustomerName` +FROM `TimeSheets` AS `t` +WHERE `t`.`OrderId` IS NOT NULL +GROUP BY `t`.`OrderId` +"""); + } + + public override async Task Aggregate_over_subquery_in_group_by_projection(bool async) + { + await base.Aggregate_over_subquery_in_group_by_projection(async); + + AssertSql( + """ +SELECT `o`.`CustomerId`, ( + SELECT MIN(`o0`.`HourlyRate`) + FROM `Order` AS `o0` + WHERE `o0`.`CustomerId` = `o`.`CustomerId`) AS `CustomerMinHourlyRate`, MIN(`o`.`HourlyRate`) AS `HourlyRate`, COUNT(*) AS `Count` +FROM `Order` AS `o` +WHERE `o`.`Number` <> 'A1' OR `o`.`Number` IS NULL +GROUP BY `o`.`CustomerId`, `o`.`Number` +"""); + } + + public override async Task Aggregate_over_subquery_in_group_by_projection_2(bool async) + { + await base.Aggregate_over_subquery_in_group_by_projection_2(async); + + AssertSql( + """ +SELECT `t`.`Value` AS `A`, ( + SELECT MAX(`t0`.`Id`) + FROM `Tables` AS `t0` + WHERE `t0`.`Value` = (MAX(`t`.`Id`) * 6) OR (`t0`.`Value` IS NULL AND MAX(`t`.`Id`) IS NULL)) AS `B` +FROM `Tables` AS `t` +GROUP BY `t`.`Value` +"""); + } + + public override async Task Group_by_aggregate_in_subquery_projection_after_group_by(bool async) + { + await base.Group_by_aggregate_in_subquery_projection_after_group_by(async); + + AssertSql( + """ +SELECT `t`.`Value` AS `A`, IIF(SUM(`t`.`Id`) IS NULL, 0, SUM(`t`.`Id`)) AS `B`, IIF(( + SELECT TOP 1 IIF(SUM(`t`.`Id`) IS NULL, 0, SUM(`t`.`Id`)) + IIF(SUM(`t0`.`Id`) IS NULL, 0, SUM(`t0`.`Id`)) + FROM `Tables` AS `t0` + GROUP BY `t0`.`Value` + ORDER BY 1) IS NULL, 0, ( + SELECT TOP 1 IIF(SUM(`t`.`Id`) IS NULL, 0, SUM(`t`.`Id`)) + IIF(SUM(`t0`.`Id`) IS NULL, 0, SUM(`t0`.`Id`)) + FROM `Tables` AS `t0` + GROUP BY `t0`.`Value` + ORDER BY 1)) AS `C` +FROM `Tables` AS `t` +GROUP BY `t`.`Value` +"""); + } + + public override async Task Subquery_first_member_compared_to_null(bool async) + { + await base.Subquery_first_member_compared_to_null(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `c1`.`SomeOtherNullableDateTime` + FROM `Child` AS `c1` + WHERE `p`.`Id` = `c1`.`ParentId` AND `c1`.`SomeNullableDateTime` IS NULL + ORDER BY `c1`.`SomeInteger`) +FROM `Parents` AS `p` +WHERE EXISTS ( + SELECT 1 + FROM `Child` AS `c` + WHERE `p`.`Id` = `c`.`ParentId` AND `c`.`SomeNullableDateTime` IS NULL) AND ( + SELECT TOP 1 `c0`.`SomeOtherNullableDateTime` + FROM `Child` AS `c0` + WHERE `p`.`Id` = `c0`.`ParentId` AND `c0`.`SomeNullableDateTime` IS NULL + ORDER BY `c0`.`SomeInteger`) IS NOT NULL +"""); + } + + public override async Task SelectMany_where_Select(bool async) + { + await base.SelectMany_where_Select(async); + + AssertSql( + """ +SELECT [c1].[SomeNullableDateTime] +FROM [Parents] AS [p] +INNER JOIN ( + SELECT [c0].[ParentId], [c0].[SomeNullableDateTime], [c0].[SomeOtherNullableDateTime] + FROM ( + SELECT [c].[ParentId], [c].[SomeNullableDateTime], [c].[SomeOtherNullableDateTime], ROW_NUMBER() OVER(PARTITION BY [c].[ParentId] ORDER BY [c].[SomeInteger]) AS [row] + FROM [Child] AS [c] + WHERE [c].[SomeNullableDateTime] IS NULL + ) AS [c0] + WHERE [c0].[row] <= 1 +) AS [c1] ON [p].[Id] = [c1].[ParentId] +WHERE [c1].[SomeOtherNullableDateTime] IS NOT NULL +"""); + } + + public override async Task Flattened_GroupJoin_on_interface_generic(bool async) + { + await base.Flattened_GroupJoin_on_interface_generic(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`SomeInteger`, `c`.`SomeNullableDateTime`, `c`.`SomeOtherNullableDateTime` +FROM `Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`Id` +"""); + } + + public override async Task StoreType_for_UDF_used(bool async) + { + await base.StoreType_for_UDF_used(async); + + AssertSql( + """ +@date='2012-12-12T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`SomeDate` +FROM `MyEntities` AS `m` +WHERE `m`.`SomeDate` = CDATE(@date) +""", + // + """ +@date='2012-12-12T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`SomeDate` +FROM `MyEntities` AS `m` +WHERE `dbo`.`ModifyDate`(`m`.`SomeDate`) = CDATE(@date) +"""); + } + + public override async Task Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(bool async) + { + await base.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async); + + AssertSql( + """ +@p='123456' + +SELECT TOP @p `t`.`JSON` +FROM `TableDatas` AS `t` +INNER JOIN ( + SELECT DISTINCT `i`.`Parcel` + FROM `IndexDatas` AS `i` + WHERE `i`.`Parcel` = 'some condition' + GROUP BY `i`.`Parcel`, `i`.`RowId` + HAVING COUNT(*) = 1 +) AS `i0` ON `t`.`ParcelNumber` = `i0`.`Parcel` +WHERE `t`.`TableId` = 123 +ORDER BY `t`.`ParcelNumber` +"""); + } + + public override async Task Filter_on_nested_DTO_with_interface_gets_simplified_correctly(bool async) + { + await base.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`CompanyId`, `c0`.`Id` IS NOT NULL, `c0`.`Id`, `c0`.`CompanyName`, `c0`.`CountryId`, `c1`.`Id`, `c1`.`CountryName` +FROM (`Customers` AS `c` +LEFT JOIN `Companies` AS `c0` ON `c`.`CompanyId` = `c0`.`Id`) +LEFT JOIN `Countries` AS `c1` ON `c0`.`CountryId` = `c1`.`Id` +WHERE IIF(`c0`.`Id` IS NOT NULL, `c1`.`CountryName`, NULL) = 'COUNTRY' +"""); + } + + public override async Task Check_inlined_constants_redacting(bool async, bool enableSensitiveDataLogging) + { + await base.Check_inlined_constants_redacting(async, enableSensitiveDataLogging); + + if (!enableSensitiveDataLogging) + { + AssertSql( + """ +SELECT `t`.`Id`, `t`.`Name` +FROM `TestEntities` AS `t` +WHERE `t`.`Id` IN (?, ?, ?) +""", + // + """ +SELECT `t`.`Id`, `t`.`Name` +FROM `TestEntities` AS `t` +WHERE EXISTS ( + SELECT 1 + FROM (SELECT CLNG(?) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_0` + UNION + SELECT ? AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_1` + UNION + SELECT ? AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_2`) AS `i` + WHERE `i`.`Value` = `t`.`Id`) +""", + // + """ +SELECT `t`.`Id`, `t`.`Name` +FROM `TestEntities` AS `t` +WHERE ? = `t`.`Id` +"""); + } + else + { + AssertSql( + """ +SELECT `t`.`Id`, `t`.`Name` +FROM `TestEntities` AS `t` +WHERE `t`.`Id` IN (1, 2, 3) +""", + // + """ +SELECT `t`.`Id`, `t`.`Name` +FROM `TestEntities` AS `t` +WHERE EXISTS ( + SELECT 1 + FROM (SELECT CLNG(1) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_0` + UNION + SELECT 2 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_1` + UNION + SELECT 3 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_2`) AS `i` + WHERE `i`.`Value` = `t`.`Id`) +""", + // + """ +SELECT `t`.`Id`, `t`.`Name` +FROM `TestEntities` AS `t` +WHERE 1 = `t`.`Id` +"""); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocNavigationsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocNavigationsQueryLibRedTest.cs new file mode 100644 index 00000000..c969a3fb --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocNavigationsQueryLibRedTest.cs @@ -0,0 +1,634 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +#nullable disable + +public class AdHocNavigationsQueryLibRedTest(NonSharedFixture fixture) : AdHocNavigationsQueryRelationalTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + #region 10447 + + [ConditionalFact] + public virtual async Task Nested_include_queries_do_not_populate_navigation_twice() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var query = context.Blogs.Include(b => b.Posts); + + foreach (var blog in query) + { + query.ToList(); + } + + Assert.Collection( + query, + b => Assert.Equal(3, b.Posts.Count), + b => Assert.Equal(2, b.Posts.Count), + b => Assert.Single(b.Posts)); + + AssertSql( + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +"""); + } + + protected class Context10447(DbContextOptions options) : DbContext(options) + { + public DbSet Blogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + } + + public Task SeedAsync() + { + AddRange( + new Blog + { + Posts = + [ + new Post(), + new Post(), + new Post() + ] + }, + new Blog { Posts = [new Post(), new Post()] }, + new Blog { Posts = [new Post()] }); + + return SaveChangesAsync(); + } + + public class Blog + { + public int Id { get; set; } + public List Posts { get; set; } + } + + public class Post + { + public int Id { get; set; } + + public Blog Blog { get; set; } + } + } + + #endregion + + public override async Task ThenInclude_with_interface_navigations() + { + await base.ThenInclude_with_interface_navigations(); + + AssertSql( + """ +SELECT `p`.`Id`, `s`.`Id`, `s`.`ParentBackNavigationId`, `s`.`SelfReferenceBackNavigationId`, `s`.`Id0`, `s`.`ParentBackNavigationId0`, `s`.`SelfReferenceBackNavigationId0` +FROM `Parents` AS `p` +LEFT JOIN ( + SELECT `c`.`Id`, `c`.`ParentBackNavigationId`, `c`.`SelfReferenceBackNavigationId`, `c0`.`Id` AS `Id0`, `c0`.`ParentBackNavigationId` AS `ParentBackNavigationId0`, `c0`.`SelfReferenceBackNavigationId` AS `SelfReferenceBackNavigationId0` + FROM `Children` AS `c` + LEFT JOIN `Children` AS `c0` ON `c`.`Id` = `c0`.`SelfReferenceBackNavigationId` +) AS `s` ON `p`.`Id` = `s`.`ParentBackNavigationId` +ORDER BY `p`.`Id`, `s`.`Id` +""", + // + """ +SELECT `c0`.`Id`, `c0`.`ParentBackNavigationId`, `c0`.`SelfReferenceBackNavigationId`, `p`.`Id` +FROM (`Children` AS `c` +LEFT JOIN `Children` AS `c0` ON `c`.`SelfReferenceBackNavigationId` = `c0`.`Id`) +LEFT JOIN `Parents` AS `p` ON `c0`.`ParentBackNavigationId` = `p`.`Id` +""", + // + """ +SELECT `c0`.`Id`, `c0`.`ParentBackNavigationId`, `c0`.`SelfReferenceBackNavigationId`, `p`.`Id` +FROM (`Children` AS `c` +LEFT JOIN `Children` AS `c0` ON `c`.`SelfReferenceBackNavigationId` = `c0`.`Id`) +LEFT JOIN `Parents` AS `p` ON `c0`.`ParentBackNavigationId` = `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentBackNavigationId`, `c`.`SelfReferenceBackNavigationId`, `c0`.`Id`, `c0`.`ParentBackNavigationId`, `c0`.`SelfReferenceBackNavigationId`, `p`.`Id` +FROM (`Children` AS `c` +LEFT JOIN `Children` AS `c0` ON `c`.`SelfReferenceBackNavigationId` = `c0`.`Id`) +LEFT JOIN `Parents` AS `p` ON `c0`.`ParentBackNavigationId` = `p`.`Id` +"""); + } + + public override async Task Customer_collections_materialize_properly() + { + await base.Customer_collections_materialize_properly(); + + AssertSql( + """ +SELECT `c`.`Id`, `o`.`Id`, `o`.`CustomerId1`, `o`.`CustomerId2`, `o`.`CustomerId3`, `o`.`CustomerId4`, `o`.`Name` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`Id` = `o`.`CustomerId1` +ORDER BY `c`.`Id` +""", + // + """ +SELECT `c`.`Id`, `o`.`Id`, `o`.`CustomerId1`, `o`.`CustomerId2`, `o`.`CustomerId3`, `o`.`CustomerId4`, `o`.`Name` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`Id` = `o`.`CustomerId2` +ORDER BY `c`.`Id` +""", + // + """ +SELECT `c`.`Id`, `o`.`Id`, `o`.`CustomerId1`, `o`.`CustomerId2`, `o`.`CustomerId3`, `o`.`CustomerId4`, `o`.`Name` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`Id` = `o`.`CustomerId3` +ORDER BY `c`.`Id` +""", + // + """ +SELECT `c`.`Id`, `o`.`Id`, `o`.`CustomerId1`, `o`.`CustomerId2`, `o`.`CustomerId3`, `o`.`CustomerId4`, `o`.`Name` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`Id` = `o`.`CustomerId4` +ORDER BY `c`.`Id` +"""); + } + + public override async Task Reference_include_on_derived_type_with_sibling_works() + { + await base.Reference_include_on_derived_type_with_sibling_works(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`LeaveStart`, `p`.`LeaveTypeId`, `p0`.`Id` +FROM `Proposals` AS `p` +LEFT JOIN `ProposalLeaveType` AS `p0` ON `p`.`LeaveTypeId` = `p0`.`Id` +WHERE `p`.`Discriminator` = 'ProposalLeave' +"""); + } + + public override async Task Include_collection_optional_reference_collection() + { + await base.Include_collection_optional_reference_collection(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`FamilyId`, `p`.`Name`, `p`.`TeacherId`, `s`.`Id`, `s`.`Discriminator`, `s`.`FamilyId`, `s`.`Name`, `s`.`TeacherId`, `s`.`Grade`, `s`.`Id0`, `s`.`LastName`, `s`.`Id1`, `s`.`Discriminator0`, `s`.`FamilyId0`, `s`.`Name0`, `s`.`TeacherId0`, `s`.`Grade0` +FROM `People` AS `p` +LEFT JOIN ( + SELECT `p0`.`Id`, `p0`.`Discriminator`, `p0`.`FamilyId`, `p0`.`Name`, `p0`.`TeacherId`, `p0`.`Grade`, `f`.`Id` AS `Id0`, `f`.`LastName`, `p1`.`Id` AS `Id1`, `p1`.`Discriminator` AS `Discriminator0`, `p1`.`FamilyId` AS `FamilyId0`, `p1`.`Name` AS `Name0`, `p1`.`TeacherId` AS `TeacherId0`, `p1`.`Grade` AS `Grade0` + FROM (`People` AS `p0` + LEFT JOIN `Families` AS `f` ON `p0`.`FamilyId` = `f`.`Id`) + LEFT JOIN `People` AS `p1` ON `f`.`Id` = `p1`.`FamilyId` + WHERE `p0`.`Discriminator` = 'PersonKid9038' +) AS `s` ON `p`.`Id` = `s`.`TeacherId` +WHERE `p`.`Discriminator` = 'PersonTeacher9038' +ORDER BY `p`.`Id`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`FamilyId`, `p`.`Name`, `p`.`TeacherId`, `f`.`Id`, `f`.`LastName`, `p0`.`Id`, `p0`.`Discriminator`, `p0`.`FamilyId`, `p0`.`Name`, `p0`.`TeacherId`, `p0`.`Grade`, `p2`.`Id`, `p2`.`Discriminator`, `p2`.`FamilyId`, `p2`.`Name`, `p2`.`TeacherId`, `p2`.`Grade` +FROM ((`People` AS `p` +LEFT JOIN `Families` AS `f` ON `p`.`FamilyId` = `f`.`Id`) +LEFT JOIN `People` AS `p0` ON `f`.`Id` = `p0`.`FamilyId`) +LEFT JOIN ( + SELECT `p1`.`Id`, `p1`.`Discriminator`, `p1`.`FamilyId`, `p1`.`Name`, `p1`.`TeacherId`, `p1`.`Grade` + FROM `People` AS `p1` + WHERE `p1`.`Discriminator` = 'PersonKid9038' +) AS `p2` ON `p`.`Id` = `p2`.`TeacherId` +WHERE `p`.`Discriminator` = 'PersonTeacher9038' +ORDER BY `p`.`Id`, `f`.`Id`, `p0`.`Id` +"""); + } + + public override async Task Include_with_order_by_on_interface_key() + { + await base.Include_with_order_by_on_interface_key(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Name`, `c`.`Id`, `c`.`Name`, `c`.`Parent10635Id`, `c`.`ParentId` +FROM `Parents` AS `p` +LEFT JOIN `Children` AS `c` ON `p`.`Id` = `c`.`Parent10635Id` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`Name`, `c`.`Parent10635Id`, `c`.`ParentId` +FROM `Parents` AS `p` +LEFT JOIN `Children` AS `c` ON `p`.`Id` = `c`.`Parent10635Id` +ORDER BY `p`.`Id` +"""); + } + + public override async Task Collection_without_setter_materialized_correctly() + { + await base.Collection_without_setter_materialized_correctly(); + + AssertSql( + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId1`, `p`.`BlogId2`, `p`.`BlogId3`, `p`.`Name`, `p0`.`Id`, `p0`.`BlogId1`, `p0`.`BlogId2`, `p0`.`BlogId3`, `p0`.`Name`, `p1`.`Id`, `p1`.`BlogId1`, `p1`.`BlogId2`, `p1`.`BlogId3`, `p1`.`Name` +FROM ((`Blogs` AS `b` +LEFT JOIN `Posts` AS `p` ON `b`.`Id` = `p`.`BlogId1`) +LEFT JOIN `Posts` AS `p0` ON `b`.`Id` = `p0`.`BlogId2`) +LEFT JOIN `Posts` AS `p1` ON `b`.`Id` = `p1`.`BlogId3` +ORDER BY `b`.`Id`, `p`.`Id`, `p0`.`Id` +""", + // + """ +SELECT ( + SELECT TOP 1 ( + SELECT COUNT(*) + FROM `Comments` AS `c` + WHERE `p`.`Id` = `c`.`PostId`) + FROM `Posts` AS `p` + WHERE `b`.`Id` = `p`.`BlogId1` + ORDER BY `p`.`Id`) AS `Collection1`, ( + SELECT TOP 1 ( + SELECT COUNT(*) + FROM `Comments` AS `c0` + WHERE `p0`.`Id` = `c0`.`PostId`) + FROM `Posts` AS `p0` + WHERE `b`.`Id` = `p0`.`BlogId2` + ORDER BY `p0`.`Id`) AS `Collection2`, ( + SELECT TOP 1 ( + SELECT COUNT(*) + FROM `Comments` AS `c1` + WHERE `p1`.`Id` = `c1`.`PostId`) + FROM `Posts` AS `p1` + WHERE `b`.`Id` = `p1`.`BlogId3` + ORDER BY `p1`.`Id`) AS `Collection3` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Include_collection_works_when_defined_on_intermediate_type() + { + await base.Include_collection_works_when_defined_on_intermediate_type(); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`SchoolId` +FROM `Schools` AS `s` +LEFT JOIN `Students` AS `s0` ON `s`.`Id` = `s0`.`SchoolId` +ORDER BY `s`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s0`.`Id`, `s0`.`SchoolId` +FROM `Schools` AS `s` +LEFT JOIN `Students` AS `s0` ON `s`.`Id` = `s0`.`SchoolId` +ORDER BY `s`.`Id` +"""); + } + + public override async Task Let_multiple_references_with_reference_to_outer() + { + await base.Let_multiple_references_with_reference_to_outer(); + + AssertSql( + """ +SELECT ( + SELECT TOP(1) [c].[Id] + FROM [CompetitionSeasons] AS [c] + WHERE [c].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c].[EndDate]), [a].[Id], [a0].[Id], [s].[Id], [s].[ActivityTypeId], [s].[CompetitionSeasonId], [s].[Points], [s].[Id0] +FROM [Activities] AS [a] +INNER JOIN [ActivityType] AS [a0] ON [a].[ActivityTypeId] = [a0].[Id] +OUTER APPLY ( + SELECT [a1].[Id], [a1].[ActivityTypeId], [a1].[CompetitionSeasonId], [a1].[Points], [c0].[Id] AS [Id0] + FROM [ActivityTypePoints] AS [a1] + INNER JOIN [CompetitionSeasons] AS [c0] ON [a1].[CompetitionSeasonId] = [c0].[Id] + WHERE [a0].[Id] = [a1].[ActivityTypeId] AND [c0].[Id] = ( + SELECT TOP(1) [c1].[Id] + FROM [CompetitionSeasons] AS [c1] + WHERE [c1].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c1].[EndDate]) +) AS [s] +ORDER BY [a].[Id], [a0].[Id], [s].[Id] +""", + // + """ +SELECT [a].[Id], [a].[ActivityTypeId], [a].[DateTime], [a].[Points], ( + SELECT TOP(1) [c].[Id] + FROM [CompetitionSeasons] AS [c] + WHERE [c].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c].[EndDate]) AS [CompetitionSeasonId], COALESCE([a].[Points], ( + SELECT TOP(1) [a1].[Points] + FROM [ActivityTypePoints] AS [a1] + INNER JOIN [CompetitionSeasons] AS [c0] ON [a1].[CompetitionSeasonId] = [c0].[Id] + WHERE [a0].[Id] = [a1].[ActivityTypeId] AND [c0].[Id] = ( + SELECT TOP(1) [c1].[Id] + FROM [CompetitionSeasons] AS [c1] + WHERE [c1].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c1].[EndDate])), 0) AS [Points] +FROM [Activities] AS [a] +INNER JOIN [ActivityType] AS [a0] ON [a].[ActivityTypeId] = [a0].[Id] +"""); + } + + public override async Task Include_collection_with_OfType_base() + { + await base.Include_collection_with_OfType_base(); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `d`.`Id`, `d`.`Device`, `d`.`EmployeeId` +FROM `Employees` AS `e` +LEFT JOIN `Devices` AS `d` ON `e`.`Id` = `d`.`EmployeeId` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `e`.`Id`, `d0`.`Id`, `d0`.`Device`, `d0`.`EmployeeId` +FROM `Employees` AS `e` +LEFT JOIN ( + SELECT `d`.`Id`, `d`.`Device`, `d`.`EmployeeId` + FROM `Devices` AS `d` + WHERE `d`.`Device` <> 'foo' OR `d`.`Device` IS NULL +) AS `d0` ON `e`.`Id` = `d0`.`EmployeeId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Correlated_collection_correctly_associates_entities_with_byte_array_keys() + { + await base.Correlated_collection_correctly_associates_entities_with_byte_array_keys(); + + AssertSql( + """ +SELECT `b`.`Name`, `c`.`Id` +FROM `Blogs` AS `b` +LEFT JOIN `Comments` AS `c` ON `b`.`Name` = `c`.`BlogName` +ORDER BY `b`.`Name` +"""); + } + + public override async Task Can_ignore_invalid_include_path_error() + { + await base.Can_ignore_invalid_include_path_error(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`SubAId` +FROM `BaseClasses` AS `b` +WHERE `b`.`Discriminator` = 'ClassA' +"""); + } + + public override async Task SelectMany_and_collection_in_projection_in_FirstOrDefault() + { + await base.SelectMany_and_collection_in_projection_in_FirstOrDefault(); + + AssertSql( + """ +@__referenceId_0='a' (Size = 4000) +@__customerId_1='1115c816-6c4c-4016-94df-d8b60a22ffa1' + +SELECT [o0].[Id], [s0].[Id], [s0].[Image], [s0].[Id0], [s0].[Id00] +FROM ( + SELECT TOP(2) [o].[Id] + FROM [Orders] AS [o] + WHERE [o].[ExternalReferenceId] = @__referenceId_0 AND [o].[CustomerId] = @__customerId_1 +) AS [o0] +OUTER APPLY ( + SELECT [i].[Id], [s].[Image], [s].[Id] AS [Id0], [s].[Id0] AS [Id00] + FROM [IdentityDocument] AS [i] + OUTER APPLY ( + SELECT [i1].[Image], [i0].[Id], [i1].[Id] AS [Id0] + FROM [IdentityDocument] AS [i0] + INNER JOIN [IdentityDocumentImage] AS [i1] ON [i0].[Id] = [i1].[IdentityDocumentId] + WHERE [o0].[Id] = [i0].[OrderId] + ) AS [s] + WHERE [o0].[Id] = [i].[OrderId] +) AS [s0] +ORDER BY [o0].[Id], [s0].[Id], [s0].[Id0] +"""); + } + + public override async Task Using_explicit_interface_implementation_as_navigation_works() + { + await base.Using_explicit_interface_implementation_as_navigation_works(); + + AssertSql( + """ +SELECT TOP 2 EXISTS ( + SELECT 1 + FROM `CoverIllustrations` AS `c` + WHERE `b0`.`Id` = `c`.`CoverId` AND `c`.`State` >= 2), ( + SELECT TOP 1 `c0`.`Uri` + FROM `CoverIllustrations` AS `c0` + WHERE `b0`.`Id` = `c0`.`CoverId` AND `c0`.`State` >= 2) +FROM `Books` AS `b` +INNER JOIN `BookCovers` AS `b0` ON `b`.`FrontCoverId` = `b0`.`Id` +WHERE `b`.`Id` = 1 +"""); + } + + public override async Task Select_enumerable_navigation_backed_by_collection(bool async, bool split) + { + await base.Select_enumerable_navigation_backed_by_collection(async, split); + + if (split) + { + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `o`.`Id`, `o`.`AppEntityId`, `e`.`Id` +FROM `Entities` AS `e` +INNER JOIN `OtherEntity` AS `o` ON `e`.`Id` = `o`.`AppEntityId` +ORDER BY `e`.`Id` +"""); + } + else + { + AssertSql( + """ +SELECT `e`.`Id`, `o`.`Id`, `o`.`AppEntityId` +FROM `Entities` AS `e` +LEFT JOIN `OtherEntity` AS `o` ON `e`.`Id` = `o`.`AppEntityId` +ORDER BY `e`.`Id` +"""); + } + } + + public override async Task Cycles_in_auto_include() + { + await base.Cycles_in_auto_include(); + + AssertSql( + """ +SELECT `p`.`Id`, `d`.`Id`, `d`.`PrincipalId` +FROM `PrincipalOneToOne` AS `p` +LEFT JOIN `DependentOneToOne` AS `d` ON `p`.`Id` = `d`.`PrincipalId` +""", + // + """ +SELECT `d`.`Id`, `d`.`PrincipalId`, `p`.`Id` +FROM `DependentOneToOne` AS `d` +INNER JOIN `PrincipalOneToOne` AS `p` ON `d`.`PrincipalId` = `p`.`Id` +""", + // + """ +SELECT `p`.`Id`, `d`.`Id`, `d`.`PrincipalId` +FROM `PrincipalOneToMany` AS `p` +LEFT JOIN `DependentOneToMany` AS `d` ON `p`.`Id` = `d`.`PrincipalId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `d`.`Id`, `d`.`PrincipalId`, `p`.`Id`, `d0`.`Id`, `d0`.`PrincipalId` +FROM (`DependentOneToMany` AS `d` +INNER JOIN `PrincipalOneToMany` AS `p` ON `d`.`PrincipalId` = `p`.`Id`) +LEFT JOIN `DependentOneToMany` AS `d0` ON `p`.`Id` = `d0`.`PrincipalId` +ORDER BY `d`.`Id`, `p`.`Id` +""", + // + """ +SELECT `p`.`Id` +FROM `PrincipalManyToMany` AS `p` +""", + // + """ +SELECT `d`.`Id` +FROM `DependentManyToMany` AS `d` +""", + // + """ +SELECT `c`.`Id`, `c`.`CycleCId` +FROM `CycleA` AS `c` +""", + // + """ +SELECT `c`.`Id`, `c`.`CId`, `c`.`CycleAId` +FROM `CycleB` AS `c` +""", + // + """ +SELECT `c`.`Id`, `c`.`BId` +FROM `CycleC` AS `c` +"""); + } + + public override async Task Walking_back_include_tree_is_not_allowed_1() + { + await base.Walking_back_include_tree_is_not_allowed_1(); + + AssertSql(); + } + + public override async Task Walking_back_include_tree_is_not_allowed_2() + { + await base.Walking_back_include_tree_is_not_allowed_2(); + + AssertSql(); + } + + public override async Task Walking_back_include_tree_is_not_allowed_3() + { + await base.Walking_back_include_tree_is_not_allowed_3(); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`PrincipalId`, `p`.`Id`, `s0`.`Id`, `s0`.`PrincipalId`, `s0`.`Id0`, `s0`.`ManyDependentId`, `s0`.`PrincipalId0` +FROM (`ManyDependent` AS `m` +LEFT JOIN `Principal` AS `p` ON `m`.`PrincipalId` = `p`.`Id`) +LEFT JOIN ( + SELECT `m0`.`Id`, `m0`.`PrincipalId`, `s`.`Id` AS `Id0`, `s`.`ManyDependentId`, `s`.`PrincipalId` AS `PrincipalId0` + FROM `ManyDependent` AS `m0` + LEFT JOIN `SingleDependent` AS `s` ON `m0`.`Id` = `s`.`ManyDependentId` +) AS `s0` ON `p`.`Id` = `s0`.`PrincipalId` +ORDER BY `m`.`Id`, `p`.`Id`, `s0`.`Id` +"""); + } + + public override async Task Walking_back_include_tree_is_not_allowed_4() + { + await base.Walking_back_include_tree_is_not_allowed_4(); + + AssertSql(); + } + + public override async Task Projection_with_multiple_includes_and_subquery_with_set_operation() + { + await base.Projection_with_multiple_includes_and_subquery_with_set_operation(); + + AssertSql( + """ +@__id_0='1' + +SELECT [s].[Id], [s].[Name], [s].[Surname], [s].[Birthday], [s].[Hometown], [s].[Bio], [s].[AvatarUrl], [s].[Id0], [s].[Id1], [p0].[Id], [p0].[ImageUrl], [p0].[Height], [p0].[Width], [u].[Id], [u].[Name], [u].[PosterUrl], [u].[Rating] +FROM ( + SELECT TOP(1) [p].[Id], [p].[Name], [p].[Surname], [p].[Birthday], [p].[Hometown], [p].[Bio], [p].[AvatarUrl], [a].[Id] AS [Id0], [d].[Id] AS [Id1] + FROM [Persons] AS [p] + LEFT JOIN [ActorEntity] AS [a] ON [p].[Id] = [a].[PersonId] + LEFT JOIN [DirectorEntity] AS [d] ON [p].[Id] = [d].[PersonId] + WHERE [p].[Id] = @__id_0 +) AS [s] +LEFT JOIN [PersonImageEntity] AS [p0] ON [s].[Id] = [p0].[PersonId] +OUTER APPLY ( + SELECT [m0].[Id], [m0].[Budget], [m0].[Description], [m0].[DurationInMins], [m0].[Name], [m0].[PosterUrl], [m0].[Rating], [m0].[ReleaseDate], [m0].[Revenue] + FROM [MovieActorEntity] AS [m] + INNER JOIN [MovieEntity] AS [m0] ON [m].[MovieId] = [m0].[Id] + WHERE [s].[Id0] IS NOT NULL AND [s].[Id0] = [m].[ActorId] + UNION + SELECT [m2].[Id], [m2].[Budget], [m2].[Description], [m2].[DurationInMins], [m2].[Name], [m2].[PosterUrl], [m2].[Rating], [m2].[ReleaseDate], [m2].[Revenue] + FROM [MovieDirectorEntity] AS [m1] + INNER JOIN [MovieEntity] AS [m2] ON [m1].[MovieId] = [m2].[Id] + WHERE [s].[Id1] IS NOT NULL AND [s].[Id1] = [m1].[DirectorId] +) AS [u] +ORDER BY [s].[Id], [s].[Id0], [s].[Id1], [p0].[Id] +"""); + } + + public override async Task Count_member_over_IReadOnlyCollection_works(bool async) + { + await base.Count_member_over_IReadOnlyCollection_works(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM `Books` AS `b` + WHERE `a`.`AuthorId` = `b`.`AuthorId`) AS `BooksCount` +FROM `Authors` AS `a` +"""); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocPrecompiledQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocPrecompiledQueryLibRedTest.cs new file mode 100644 index 00000000..b086e6fe --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocPrecompiledQueryLibRedTest.cs @@ -0,0 +1,131 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class AdHocPrecompiledQueryLibRedTest(NonSharedFixture fixture, ITestOutputHelper testOutputHelper) + : AdHocPrecompiledQueryRelationalTestBase(fixture, testOutputHelper) +{ + protected override bool AlwaysPrintGeneratedSources + => false; + + [ConditionalTheory(Skip = "Not supported in LibRed")] + public override async Task Index_no_evaluatability() + { + await base.Index_no_evaluatability(); + + AssertSql(""" +SELECT [j].[Id], [j].[IntList], [j].[JsonThing] +FROM [JsonEntities] AS [j] +WHERE CAST(JSON_VALUE([j].[IntList], '$[' + CAST([j].[Id] AS nvarchar(max)) + ']') AS int) = 2 +"""); + } + + [ConditionalTheory(Skip = "Not supported in LibRed")] + public override async Task Index_with_captured_variable() + { + await base.Index_with_captured_variable(); + + AssertSql(""" +@__id_0='1' + +SELECT [j].[Id], [j].[IntList], [j].[JsonThing] +FROM [JsonEntities] AS [j] +WHERE CAST(JSON_VALUE([j].[IntList], '$[' + CAST(@__id_0 AS nvarchar(max)) + ']') AS int) = 2 +"""); + } + + [ConditionalFact(Skip = "Not supported in LibRed")] + public override async Task JsonScalar() + { + await base.JsonScalar(); + + AssertSql(""" +SELECT [j].[Id], [j].[IntList], [j].[JsonThing] +FROM [JsonEntities] AS [j] +WHERE JSON_VALUE([j].[JsonThing], '$.StringProperty') = N'foo' +"""); + } + + public override async Task Materialize_non_public() + { + await base.Materialize_non_public(); + + AssertSql( + """" +@p0='10' (Nullable = true) +@p1='9' (Nullable = true) +@p2='8' (Nullable = true) + +INSERT INTO `NonPublicEntities` (`PrivateAutoProperty`, `PrivateProperty`, `_privateField`) +VALUES (@p0, @p1, @p2); +SELECT `Id` +FROM `NonPublicEntities` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""", +// +"""" +SELECT TOP 2 `n`.`Id`, `n`.`PrivateAutoProperty`, `n`.`PrivateProperty`, `n`.`_privateField` +FROM `NonPublicEntities` AS `n` +""""); + } + + public override async Task Projecting_property_requiring_converter_with_closure_is_not_supported() + { + await base.Projecting_property_requiring_converter_with_closure_is_not_supported(); + + AssertSql(); + } + + public override async Task Projecting_expression_requiring_converter_without_closure_works() + { + await base.Projecting_expression_requiring_converter_without_closure_works(); + + AssertSql( + """ +SELECT `b`.`AudiobookDate` +FROM `Books` AS `b` +"""); + } + + public override async Task Projecting_entity_with_property_requiring_converter_with_closure_works() + { + await base.Projecting_entity_with_property_requiring_converter_with_closure_works(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`AudiobookDate`, `b`.`Name`, `b`.`PublishDate` +FROM `Books` AS `b` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override PrecompiledQueryTestHelpers PrecompiledQueryTestHelpers + => LibRedPrecompiledQueryTestHelpers.Instance; + + protected override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + builder = base.AddOptions(builder); + + // TODO: Figure out if there's a nice way to continue using the retrying strategy + var sqlServerOptionsBuilder = new LibRedDbContextOptionsBuilder(builder); + sqlServerOptionsBuilder.ExecutionStrategy(d => new NonRetryingExecutionStrategy(d)); + return builder; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocQueryFiltersQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocQueryFiltersQueryLibRedTest.cs new file mode 100644 index 00000000..4a4e0d12 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocQueryFiltersQueryLibRedTest.cs @@ -0,0 +1,364 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using System.Linq; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +#nullable disable + +public class AdHocQueryFiltersQueryLibRedTest(NonSharedFixture fixture) : AdHocQueryFiltersQueryRelationalTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + #region 11803 + + [ConditionalFact] + public virtual async Task Query_filter_with_db_set_should_not_block_other_filters() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var query = context.Factions.ToList(); + + Assert.Empty(query); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`Name` +FROM `Factions` AS `f` +WHERE EXISTS ( + SELECT 1 + FROM `Leaders` AS `l` + WHERE (`l`.`Name` LIKE 'Bran%') AND `l`.`Name` = 'Crach an Craite') +"""); + } + + [ConditionalFact] + public virtual async Task Keyless_type_used_inside_defining_query() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var query = context.LeadersQuery.ToList(); + + Assert.Single(query); + + AssertSql( + """ +SELECT [t].[Name] +FROM ( + SELECT [l].[Name] + FROM [Leaders] AS [l] + WHERE ([l].[Name] LIKE 'Bran' + '%' AND (LEFT([l].[Name], LEN('Bran')) = 'Bran')) AND (([l].[Name] <> 'Foo') OR [l].[Name] IS NULL) +) AS [t] +WHERE ([t].[Name] <> 'Bar') OR [t].[Name] IS NULL +"""); + } + + protected class Context11803(DbContextOptions options) : DbContext(options) + { + public DbSet Factions { get; set; } + public DbSet Leaders { get; set; } + public DbSet LeadersQuery { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasQueryFilter(l => l.Name.StartsWith("Bran")); // this one is ignored + modelBuilder.Entity().HasQueryFilter(f => Leaders.Any(l => l.Name == "Crach an Craite")); + + modelBuilder + .Entity() + .HasNoKey() + .ToSqlQuery( + """ +SELECT [t].[Name] +FROM ( + SELECT [l].[Name] + FROM [Leaders] AS [l] + WHERE ([l].[Name] LIKE 'Bran' + '%' AND (LEFT([l].[Name], LEN('Bran')) = 'Bran')) AND (([l].[Name] <> 'Foo') OR [l].[Name] IS NULL) +) AS [t] +WHERE ([t].[Name] <> 'Bar') OR [t].[Name] IS NULL +"""); + } + + public Task SeedAsync() + { + var f1 = new Faction11803 { Name = "Skeliege" }; + var f2 = new Faction11803 { Name = "Monsters" }; + var f3 = new Faction11803 { Name = "Nilfgaard" }; + var f4 = new Faction11803 { Name = "Northern Realms" }; + var f5 = new Faction11803 { Name = "Scioia'tael" }; + + var l11 = new Leader11803 { Faction = f1, Name = "Bran Tuirseach" }; + var l12 = new Leader11803 { Faction = f1, Name = "Crach an Craite" }; + var l13 = new Leader11803 { Faction = f1, Name = "Eist Tuirseach" }; + var l14 = new Leader11803 { Faction = f1, Name = "Harald the Cripple" }; + + Factions.AddRange(f1, f2, f3, f4, f5); + Leaders.AddRange(l11, l12, l13, l14); + + return SaveChangesAsync(); + } + + public class Faction11803 + { + public int Id { get; set; } + public string Name { get; set; } + + public List Leaders { get; set; } + } + + public class Leader11803 + { + public int Id { get; set; } + public string Name { get; set; } + public Faction11803 Faction { get; set; } + } + + public class LeaderQuery11803 + { + public string Name { get; set; } + } + } + + #endregion + + public override async Task Query_filter_with_contains_evaluates_correctly() + { + await base.Query_filter_with_contains_evaluates_correctly(); + + AssertSql( + """ +@ef_filter___ids1='1' +@ef_filter___ids2='7' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` NOT IN (@ef_filter___ids1, @ef_filter___ids2) +"""); + } + + public override async Task MultiContext_query_filter_test() + { + await base.MultiContext_query_filter_test(); + + AssertSql( + """ +@ef_filter__Tenant='0' + +SELECT `b`.`Id`, `b`.`SomeValue` +FROM `Blogs` AS `b` +WHERE `b`.`SomeValue` = @ef_filter__Tenant +""", + // + """ +@ef_filter__Tenant='1' + +SELECT `b`.`Id`, `b`.`SomeValue` +FROM `Blogs` AS `b` +WHERE `b`.`SomeValue` = @ef_filter__Tenant +""", + // + """ +@ef_filter__Tenant='2' + +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`SomeValue` = @ef_filter__Tenant +"""); + } + + public override async Task Weak_entities_with_query_filter_subquery_flattening() + { + await base.Weak_entities_with_query_filter_subquery_flattening(); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Definitions` AS `d` + WHERE `d`.`ChangeInfo_RemovedPoint_Timestamp` IS NULL) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Query_filter_with_pk_fk_optimization() + { + await base.Query_filter_with_pk_fk_optimization(); + + AssertSql( + """ +SELECT TOP 2 `e`.`Id`, `r0`.`Id` IS NULL, `r0`.`Id`, `r0`.`Public`, `e`.`RefEntityId` +FROM `Entities` AS `e` +LEFT JOIN ( + SELECT `r`.`Id`, `r`.`Public` + FROM `RefEntities` AS `r` + WHERE `r`.`Public` +) AS `r0` ON `e`.`RefEntityId` = `r0`.`Id` +WHERE `e`.`Id` = 1 +"""); + } + + public override async Task Self_reference_in_query_filter_works() + { + await base.Self_reference_in_query_filter_works(); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntitiesWithQueryFilterSelfReference` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntitiesWithQueryFilterSelfReference` AS `e0`) AND (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntitiesReferencingEntityWithQueryFilterSelfReference` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntitiesWithQueryFilterSelfReference` AS `e0` + WHERE EXISTS ( + SELECT 1 + FROM `EntitiesWithQueryFilterSelfReference` AS `e1`)) AND (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) +"""); + } + + public override async Task Invoke_inside_query_filter_gets_correctly_evaluated_during_translation() + { + await base.Invoke_inside_query_filter_gets_correctly_evaluated_during_translation(); + + AssertSql( + """ +@ef_filter__p='1' + +SELECT `e`.`Id`, `e`.`Name`, `e`.`TenantId` +FROM `Entities` AS `e` +WHERE (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) AND `e`.`TenantId` = @ef_filter__p +""", + // + """ +@ef_filter__p='2' + +SELECT `e`.`Id`, `e`.`Name`, `e`.`TenantId` +FROM `Entities` AS `e` +WHERE (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) AND `e`.`TenantId` = @ef_filter__p +"""); + } + + public override async Task Query_filter_with_null_constant() + { + await base.Query_filter_with_null_constant(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`UserDeleteId` +FROM `People` AS `p` +LEFT JOIN `User18759` AS `u` ON `p`.`UserDeleteId` = `u`.`Id` +WHERE `u`.`Id` IS NOT NULL +"""); + } + + public override async Task Group_by_multiple_aggregate_joining_different_tables(bool async) + { + await base.Group_by_multiple_aggregate_joining_different_tables(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT `c`.`Value1` + FROM ( + SELECT `p2`.`Child1Id`, 1 AS `Key` + FROM `Parents` AS `p2` + ) AS `p1` + LEFT JOIN `Child1` AS `c` ON `p1`.`Child1Id` = `c`.`Id` + WHERE `p0`.`Key` = `p1`.`Key` + ) AS `s`) AS `Test1`, ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT `c0`.`Value2` + FROM ( + SELECT `p4`.`Child2Id`, 1 AS `Key` + FROM `Parents` AS `p4` + ) AS `p3` + LEFT JOIN `Child2` AS `c0` ON `p3`.`Child2Id` = `c0`.`Id` + WHERE `p0`.`Key` = `p3`.`Key` + ) AS `s0`) AS `Test2` +FROM ( + SELECT 1 AS `Key` + FROM `Parents` AS `p` +) AS `p0` +GROUP BY `p0`.`Key` +"""); + } + + public override async Task Group_by_multiple_aggregate_joining_different_tables_with_query_filter(bool async) + { + await base.Group_by_multiple_aggregate_joining_different_tables_with_query_filter(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT `c0`.`Value1` + FROM ( + SELECT `p2`.`ChildFilter1Id`, 1 AS `Key` + FROM `Parents` AS `p2` + ) AS `p1` + LEFT JOIN ( + SELECT `c`.`Id`, `c`.`Value1` + FROM `ChildFilter1` AS `c` + WHERE `c`.`Filter1` = 'Filter1' + ) AS `c0` ON `p1`.`ChildFilter1Id` = `c0`.`Id` + WHERE `p0`.`Key` = `p1`.`Key` + ) AS `s`) AS `Test1`, ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT `c2`.`Value2` + FROM ( + SELECT `p4`.`ChildFilter2Id`, 1 AS `Key` + FROM `Parents` AS `p4` + ) AS `p3` + LEFT JOIN ( + SELECT `c1`.`Id`, `c1`.`Value2` + FROM `ChildFilter2` AS `c1` + WHERE `c1`.`Filter2` = 'Filter2' + ) AS `c2` ON `p3`.`ChildFilter2Id` = `c2`.`Id` + WHERE `p0`.`Key` = `p3`.`Key` + ) AS `s0`) AS `Test2` +FROM ( + SELECT 1 AS `Key` + FROM `Parents` AS `p` +) AS `p0` +GROUP BY `p0`.`Key` +"""); + } + + public override async Task IsDeleted_query_filter_with_conversion_to_int_works(bool async) + { + await base.IsDeleted_query_filter_with_conversion_to_int_works(async); + + AssertSql( + """ +SELECT `s`.`SupplierId`, `s`.`IsDeleted`, `s`.`LocationId`, `s`.`Name`, `l0`.`LocationId`, `l0`.`Address`, `l0`.`IsDeleted` +FROM `Suppliers` AS `s` +LEFT JOIN ( + SELECT `l`.`LocationId`, `l`.`Address`, `l`.`IsDeleted` + FROM `Locations` AS `l` + WHERE `l`.`IsDeleted` = 0 +) AS `l0` ON `s`.`LocationId` = `l0`.`LocationId` +WHERE `s`.`IsDeleted` = 0 +ORDER BY `s`.`Name` +"""); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/AdHocQuerySplittingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/AdHocQuerySplittingQueryLibRedTest.cs new file mode 100644 index 00000000..55a628dd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/AdHocQuerySplittingQueryLibRedTest.cs @@ -0,0 +1,326 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +#nullable disable + +public class AdHocQuerySplittingQueryLibRedTest(NonSharedFixture fixture) : AdHocQuerySplittingQueryTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + private static readonly FieldInfo _querySplittingBehaviorFieldInfo = + typeof(RelationalOptionsExtension).GetField("_querySplittingBehavior", BindingFlags.NonPublic | BindingFlags.Instance); + + protected override DbContextOptionsBuilder SetQuerySplittingBehavior( + DbContextOptionsBuilder optionsBuilder, + QuerySplittingBehavior splittingBehavior) + { + new LibRedDbContextOptionsBuilder(optionsBuilder).UseQuerySplittingBehavior(splittingBehavior); + + return optionsBuilder; + } + + protected override DbContextOptionsBuilder ClearQuerySplittingBehavior(DbContextOptionsBuilder optionsBuilder) + { + var extension = optionsBuilder.Options.FindExtension(); + if (extension == null) + { + extension = new LibRedOptionsExtension(); + } + else + { + _querySplittingBehaviorFieldInfo.SetValue(extension, null); + } + + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); + + return optionsBuilder; + } + + protected override TestStore CreateTestStore25225() + { + var testStore = LibRedTestStore.Create(StoreName); + testStore.UseConnectionString = true; + return testStore; + } + + public override async Task Can_configure_SingleQuery_at_context_level() + { + await base.Can_configure_SingleQuery_at_context_level(); + + AssertSql( + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId` +FROM `Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId`, `a`.`Id`, `a`.`ParentId` +FROM (`Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId`) +LEFT JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id`, `c`.`Id` +"""); + } + + public override async Task Can_configure_SplitQuery_at_context_level() + { + await base.Can_configure_SplitQuery_at_context_level(); + + AssertSql( + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId` +FROM `Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +"""); + } + + public override async Task Unconfigured_query_splitting_behavior_throws_a_warning() + { + await base.Unconfigured_query_splitting_behavior_throws_a_warning(); + + AssertSql( + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +"""); + } + + public override async Task Using_AsSingleQuery_without_context_configuration_does_not_throw_warning() + { + await base.Using_AsSingleQuery_without_context_configuration_does_not_throw_warning(); + + AssertSql( + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId`, `a`.`Id`, `a`.`ParentId` +FROM (`Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId`) +LEFT JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id`, `c`.`Id` +"""); + } + + public override async Task SplitQuery_disposes_inner_data_readers() + { + await base.SplitQuery_disposes_inner_data_readers(); + + AssertSql( + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT TOP 2 `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p0`.`Id` +FROM ( + SELECT TOP 1 `p`.`Id` + FROM `Parents` AS `p` + ORDER BY `p`.`Id` +) AS `p0` +INNER JOIN `Child` AS `c` ON `p0`.`Id` = `c`.`ParentId` +ORDER BY `p0`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p1`.`Id` +FROM ( + SELECT TOP 1 `p`.`Id` + FROM `Parents` AS `p` + ORDER BY `p`.`Id` +) AS `p1` +INNER JOIN `AnotherChild` AS `a` ON `p1`.`Id` = `a`.`ParentId` +ORDER BY `p1`.`Id` +""", + // + """ +SELECT TOP 2 `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p0`.`Id` +FROM ( + SELECT TOP 1 `p`.`Id` + FROM `Parents` AS `p` + ORDER BY `p`.`Id` +) AS `p0` +INNER JOIN `Child` AS `c` ON `p0`.`Id` = `c`.`ParentId` +ORDER BY `p0`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p1`.`Id` +FROM ( + SELECT TOP 1 `p`.`Id` + FROM `Parents` AS `p` + ORDER BY `p`.`Id` +) AS `p1` +INNER JOIN `AnotherChild` AS `a` ON `p1`.`Id` = `a`.`ParentId` +ORDER BY `p1`.`Id` +"""); + } + + [ConditionalFact] + public virtual async Task Using_AsSplitQuery_without_multiple_active_result_sets_works() + { + var contextFactory = await InitializeAsync( + seed: c => c.SeedAsync(), + createTestStore: () => LibRedTestStore.Create(StoreName)); + + using var context = contextFactory.CreateContext(); + context.Parents.Include(p => p.Children1).Include(p => p.Children2).AsSplitQuery().ToList(); + + AssertSql( + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +"""); + } + + public override async Task NoTracking_split_query_creates_only_required_instances(bool async) + { + await base.NoTracking_split_query_creates_only_required_instances(async); + + AssertSql( + """ +SELECT TOP 1 `t`.`Id`, `t`.`Value` +FROM `Tests` AS `t` +ORDER BY `t`.`Id` +"""); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateLibRedTest.cs new file mode 100644 index 00000000..3cca0108 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateLibRedTest.cs @@ -0,0 +1,528 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexTableSplitting; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.ComplexTableSplitting; + +public class ComplexTableSplittingBulkUpdateLibRedTest( + ComplexTableSplittingLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : ComplexTableSplittingBulkUpdateRelationalTestBase(fixture, testOutputHelper) +{ + #region Delete + + public override async Task Delete_entity_with_associations() + { + await base.Delete_entity_with_associations(); + + AssertSql( + """ +@deletableEntity_Name='?' (Size = 255) + +DELETE FROM `RootEntity` AS `r` +WHERE `r`.`Name` = @deletableEntity_Name +"""); + } + + public override async Task Delete_required_associate() + { + await base.Delete_required_associate(); + + AssertSql(); + } + + public override async Task Delete_optional_associate() + { + await base.Delete_optional_associate(); + + AssertSql(); + } + + #endregion Delete + + #region Update properties + + public override async Task Update_property_inside_associate() + { + await base.Update_property_inside_associate(); + + AssertExecuteUpdateSql( + """ +@p='?' (Size = 255) + +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_String` = @p +"""); + } + + public override async Task Update_property_inside_associate_with_special_chars() + { + await base.Update_property_inside_associate_with_special_chars(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_String` = '{ Some other/JSON:like text though it [isn''t]: ממש ממש לאéèéè }' +WHERE `r`.`RequiredAssociate_String` = '{ this may/look:like JSON but it [isn''t]: ממש ממש לאéèéè }' +"""); + } + + public override async Task Update_property_inside_nested_associate() + { + await base.Update_property_inside_nested_associate(); + + AssertExecuteUpdateSql( + """ +@p='?' (Size = 255) + +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_RequiredNestedAssociate_String` = @p +"""); + } + + public override async Task Update_property_on_projected_associate() + { + await base.Update_property_on_projected_associate(); + + AssertExecuteUpdateSql( + """ +@p='?' (Size = 255) + +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_String` = @p +"""); + } + + public override async Task Update_property_on_projected_associate_with_OrderBy_Skip() + { + await base.Update_property_on_projected_associate_with_OrderBy_Skip(); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_associate_with_null_required_property() + { + await base.Update_associate_with_null_required_property(); + + AssertExecuteUpdateSql(); + } + + #endregion Update properties + + #region Update association + + public override async Task Update_associate_to_parameter() + { + await base.Update_associate_to_parameter(); + + AssertExecuteUpdateSql( + """ +@complex_type_p_Id='?' (DbType = Int32) +@complex_type_p_Int='?' (DbType = Int32) +@complex_type_p_Ints='?' (Size = 255) +@complex_type_p_Name='?' (Size = 255) +@complex_type_p_String='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_Id='?' (DbType = Int32) +@complex_type_p_RequiredNestedAssociate_Int='?' (DbType = Int32) +@complex_type_p_RequiredNestedAssociate_Ints='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_Name='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_String='?' (Size = 255) + +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_Id` = @complex_type_p_Id, + `r`.`RequiredAssociate_Int` = @complex_type_p_Int, + `r`.`RequiredAssociate_Ints` = @complex_type_p_Ints, + `r`.`RequiredAssociate_Name` = @complex_type_p_Name, + `r`.`RequiredAssociate_String` = @complex_type_p_String, + `r`.`RequiredAssociate_OptionalNestedAssociate_Id` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_Int` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_Name` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_String` = NULL, + `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = @complex_type_p_RequiredNestedAssociate_Id, + `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = @complex_type_p_RequiredNestedAssociate_Int, + `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` = @complex_type_p_RequiredNestedAssociate_Ints, + `r`.`RequiredAssociate_RequiredNestedAssociate_Name` = @complex_type_p_RequiredNestedAssociate_Name, + `r`.`RequiredAssociate_RequiredNestedAssociate_String` = @complex_type_p_RequiredNestedAssociate_String +"""); + } + + public override async Task Update_nested_associate_to_parameter() + { + await base.Update_nested_associate_to_parameter(); + + AssertExecuteUpdateSql( + """ +@complex_type_p_Id='?' (DbType = Int32) +@complex_type_p_Int='?' (DbType = Int32) +@complex_type_p_Ints='?' (Size = 255) +@complex_type_p_Name='?' (Size = 255) +@complex_type_p_String='?' (Size = 255) + +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = @complex_type_p_Id, + `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = @complex_type_p_Int, + `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` = @complex_type_p_Ints, + `r`.`RequiredAssociate_RequiredNestedAssociate_Name` = @complex_type_p_Name, + `r`.`RequiredAssociate_RequiredNestedAssociate_String` = @complex_type_p_String +"""); + } + + public override async Task Update_associate_to_another_associate() + { + await base.Update_associate_to_another_associate(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`OptionalAssociate_Id` = `r`.`RequiredAssociate_Id`, + `r`.`OptionalAssociate_Int` = `r`.`RequiredAssociate_Int`, + `r`.`OptionalAssociate_Ints` = `r`.`RequiredAssociate_Ints`, + `r`.`OptionalAssociate_Name` = `r`.`RequiredAssociate_Name`, + `r`.`OptionalAssociate_String` = `r`.`RequiredAssociate_String`, + `r`.`OptionalAssociate_OptionalNestedAssociate_Id` = `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, + `r`.`OptionalAssociate_OptionalNestedAssociate_Int` = `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, + `r`.`OptionalAssociate_OptionalNestedAssociate_Ints` = `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, + `r`.`OptionalAssociate_OptionalNestedAssociate_Name` = `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, + `r`.`OptionalAssociate_OptionalNestedAssociate_String` = `r`.`OptionalAssociate_OptionalNestedAssociate_String`, + `r`.`OptionalAssociate_RequiredNestedAssociate_Id` = `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, + `r`.`OptionalAssociate_RequiredNestedAssociate_Int` = `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, + `r`.`OptionalAssociate_RequiredNestedAssociate_Ints` = `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, + `r`.`OptionalAssociate_RequiredNestedAssociate_Name` = `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, + `r`.`OptionalAssociate_RequiredNestedAssociate_String` = `r`.`OptionalAssociate_RequiredNestedAssociate_String` +"""); + } + + public override async Task Update_nested_associate_to_another_nested_associate() + { + await base.Update_nested_associate_to_another_nested_associate(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_OptionalNestedAssociate_Id` = `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, + `r`.`RequiredAssociate_OptionalNestedAssociate_Int` = `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, + `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` = `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, + `r`.`RequiredAssociate_OptionalNestedAssociate_Name` = `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, + `r`.`RequiredAssociate_OptionalNestedAssociate_String` = `r`.`RequiredAssociate_RequiredNestedAssociate_String` +"""); + } + + public override async Task Update_associate_to_inline() + { + await base.Update_associate_to_inline(); + + AssertExecuteUpdateSql( + """ +@complex_type_p_Id='?' (DbType = Int32) +@complex_type_p_Int='?' (DbType = Int32) +@complex_type_p_Ints='?' (Size = 255) +@complex_type_p_Name='?' (Size = 255) +@complex_type_p_String='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_Id='?' (DbType = Int32) +@complex_type_p_RequiredNestedAssociate_Int='?' (DbType = Int32) +@complex_type_p_RequiredNestedAssociate_Ints='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_Name='?' (Size = 255) +@complex_type_p_RequiredNestedAssociate_String='?' (Size = 255) + +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_Id` = @complex_type_p_Id, + `r`.`RequiredAssociate_Int` = @complex_type_p_Int, + `r`.`RequiredAssociate_Ints` = @complex_type_p_Ints, + `r`.`RequiredAssociate_Name` = @complex_type_p_Name, + `r`.`RequiredAssociate_String` = @complex_type_p_String, + `r`.`RequiredAssociate_OptionalNestedAssociate_Id` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_Int` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_Name` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_String` = NULL, + `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = @complex_type_p_RequiredNestedAssociate_Id, + `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = @complex_type_p_RequiredNestedAssociate_Int, + `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` = @complex_type_p_RequiredNestedAssociate_Ints, + `r`.`RequiredAssociate_RequiredNestedAssociate_Name` = @complex_type_p_RequiredNestedAssociate_Name, + `r`.`RequiredAssociate_RequiredNestedAssociate_String` = @complex_type_p_RequiredNestedAssociate_String +"""); + } + + public override async Task Update_associate_to_inline_with_lambda() + { + await base.Update_associate_to_inline_with_lambda(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_Id` = 1000, + `r`.`RequiredAssociate_Int` = 70, + `r`.`RequiredAssociate_Ints` = '[1,2,4]', + `r`.`RequiredAssociate_Name` = 'Updated associate name', + `r`.`RequiredAssociate_String` = 'Updated associate string', + `r`.`RequiredAssociate_OptionalNestedAssociate_Id` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_Int` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_Name` = NULL, + `r`.`RequiredAssociate_OptionalNestedAssociate_String` = NULL, + `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = 1000, + `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = 80, + `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` = '[1,2,4]', + `r`.`RequiredAssociate_RequiredNestedAssociate_Name` = 'Updated nested name', + `r`.`RequiredAssociate_RequiredNestedAssociate_String` = 'Updated nested string' +"""); + } + + public override async Task Update_nested_associate_to_inline_with_lambda() + { + await base.Update_nested_associate_to_inline_with_lambda(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = 1000, + `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = 80, + `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` = '[1,2,4]', + `r`.`RequiredAssociate_RequiredNestedAssociate_Name` = 'Updated nested name', + `r`.`RequiredAssociate_RequiredNestedAssociate_String` = 'Updated nested string' +"""); + } + + public override async Task Update_associate_to_null() + { + await base.Update_associate_to_null(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`OptionalAssociate_Id` = NULL, + `r`.`OptionalAssociate_Int` = NULL, + `r`.`OptionalAssociate_Ints` = NULL, + `r`.`OptionalAssociate_Name` = NULL, + `r`.`OptionalAssociate_String` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Id` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Int` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Ints` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Name` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_String` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Id` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Int` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Ints` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Name` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_String` = NULL +"""); + } + + public override async Task Update_associate_to_null_with_lambda() + { + await base.Update_associate_to_null_with_lambda(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`OptionalAssociate_Id` = NULL, + `r`.`OptionalAssociate_Int` = NULL, + `r`.`OptionalAssociate_Ints` = NULL, + `r`.`OptionalAssociate_Name` = NULL, + `r`.`OptionalAssociate_String` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Id` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Int` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Ints` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Name` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_String` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Id` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Int` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Ints` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Name` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_String` = NULL +"""); + } + + public override async Task Update_associate_to_null_parameter() + { + await base.Update_associate_to_null_parameter(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`OptionalAssociate_Id` = NULL, + `r`.`OptionalAssociate_Int` = NULL, + `r`.`OptionalAssociate_Ints` = NULL, + `r`.`OptionalAssociate_Name` = NULL, + `r`.`OptionalAssociate_String` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Id` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Int` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Ints` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_Name` = NULL, + `r`.`OptionalAssociate_OptionalNestedAssociate_String` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Id` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Int` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Ints` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_Name` = NULL, + `r`.`OptionalAssociate_RequiredNestedAssociate_String` = NULL +"""); + } + + public override async Task Update_required_nested_associate_to_null() + { + await base.Update_required_nested_associate_to_null(); + + AssertExecuteUpdateSql(); + } + + #endregion Update association + + #region Update collection + + public override async Task Update_collection_to_parameter() + { + await base.Update_collection_to_parameter(); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_nested_collection_to_parameter() + { + await base.Update_nested_collection_to_parameter(); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_nested_collection_to_inline_with_lambda() + { + await base.Update_nested_collection_to_inline_with_lambda(); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_collection_referencing_the_original_collection() + { + await base.Update_collection_referencing_the_original_collection(); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_nested_collection_to_another_nested_collection() + { + await base.Update_nested_collection_to_another_nested_collection(); + + AssertExecuteUpdateSql(); + } + + public override async Task Update_inside_structural_collection() + { + await base.Update_inside_structural_collection(); + + AssertExecuteUpdateSql(); + } + + #endregion Update collection + + #region Update primitive collection + + public override async Task Update_primitive_collection_to_constant() + { + await base.Update_primitive_collection_to_constant(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_Ints` = '[1,2,4]' +"""); + } + + public override async Task Update_primitive_collection_to_parameter() + { + await base.Update_primitive_collection_to_parameter(); + + AssertExecuteUpdateSql( + """ +@ints='?' (Size = 255) + +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_Ints` = @ints +"""); + } + + public override async Task Update_primitive_collection_to_another_collection() + { + await base.Update_primitive_collection_to_another_collection(); + + AssertExecuteUpdateSql( + """ +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` = `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` +"""); + } + + public override async Task Update_inside_primitive_collection() + { + await base.Update_inside_primitive_collection(); + + AssertExecuteUpdateSql( + """ +@p='99' + +UPDATE [r] +SET [r].[RequiredAssociate_Ints] = JSON_MODIFY([r].[RequiredAssociate_Ints], '$[1]', @p) +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r].[RequiredAssociate_Ints]) AS [r0]) >= 2 +"""); + } + + #endregion Update primitive collection + + #region Multiple updates + + public override async Task Update_multiple_properties_inside_same_associate() + { + await base.Update_multiple_properties_inside_same_associate(); + + AssertExecuteUpdateSql( + """ +@p='?' (Size = 255) +@p1='?' (DbType = Int32) + +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_String` = @p, + `r`.`RequiredAssociate_Int` = @p1 +"""); + } + + public override async Task Update_multiple_properties_inside_associates_and_on_entity_type() + { + await base.Update_multiple_properties_inside_associates_and_on_entity_type(); + + AssertExecuteUpdateSql( + """ +@p='?' (Size = 255) + +UPDATE `RootEntity` AS `r` +SET `r`.`Name` = `r`.`Name` & 'Modified', + `r`.`RequiredAssociate_String` = `r`.`OptionalAssociate_String`, + `r`.`OptionalAssociate_RequiredNestedAssociate_String` = @p +WHERE `r`.`OptionalAssociate_Id` IS NOT NULL +"""); + } + + public override async Task Update_multiple_projected_associates_via_anonymous_type() + { + await base.Update_multiple_projected_associates_via_anonymous_type(); + + AssertExecuteUpdateSql( + """ +@p='?' (Size = 255) + +UPDATE `RootEntity` AS `r` +SET `r`.`RequiredAssociate_String` = `r`.`OptionalAssociate_String`, + `r`.`OptionalAssociate_String` = @p +WHERE `r`.`OptionalAssociate_Id` IS NOT NULL +"""); + } + + #endregion Multiple updates + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingLibRedFixture.cs new file mode 100644 index 00000000..a4d5a344 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingLibRedFixture.cs @@ -0,0 +1,11 @@ +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexTableSplitting; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.ComplexTableSplitting; + +public class ComplexTableSplittingLibRedFixture : ComplexTableSplittingRelationalFixtureBase, ITestSqlLoggerFactory +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingMiscellaneousLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingMiscellaneousLibRedTest.cs new file mode 100644 index 00000000..cf26e022 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingMiscellaneousLibRedTest.cs @@ -0,0 +1,103 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexTableSplitting; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.ComplexTableSplitting; + +public class ComplexTableSplittingMiscellaneousLibRedTest( + ComplexTableSplittingLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : ComplexTableSplittingMiscellaneousRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Where_on_associate_scalar_property() + { + await base.Where_on_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`RequiredAssociate_Int` = 8 +"""); + } + + public override async Task Where_on_optional_associate_scalar_property() + { + await base.Where_on_optional_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`OptionalAssociate_Int` = 8 +"""); + } + + public override async Task Where_on_nested_associate_scalar_property() + { + await base.Where_on_nested_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = 8 +"""); + } + + #region Value types + + public override async Task Where_property_on_non_nullable_value_type() + { + await base.Where_property_on_non_nullable_value_type(); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`OptionalAssociate_Id`, `v`.`OptionalAssociate_Int`, `v`.`OptionalAssociate_Name`, `v`.`OptionalAssociate_String`, `v`.`OptionalAssociate_OptionalNested_Id`, `v`.`OptionalAssociate_OptionalNested_Int`, `v`.`OptionalAssociate_OptionalNested_Name`, `v`.`OptionalAssociate_OptionalNested_String`, `v`.`OptionalAssociate_RequiredNested_Id`, `v`.`OptionalAssociate_RequiredNested_Int`, `v`.`OptionalAssociate_RequiredNested_Name`, `v`.`OptionalAssociate_RequiredNested_String`, `v`.`RequiredAssociate_Id`, `v`.`RequiredAssociate_Int`, `v`.`RequiredAssociate_Name`, `v`.`RequiredAssociate_String`, `v`.`RequiredAssociate_OptionalNested_Id`, `v`.`RequiredAssociate_OptionalNested_Int`, `v`.`RequiredAssociate_OptionalNested_Name`, `v`.`RequiredAssociate_OptionalNested_String`, `v`.`RequiredAssociate_RequiredNested_Id`, `v`.`RequiredAssociate_RequiredNested_Int`, `v`.`RequiredAssociate_RequiredNested_Name`, `v`.`RequiredAssociate_RequiredNested_String` +FROM `ValueRootEntity` AS `v` +WHERE `v`.`RequiredAssociate_Int` = 8 +"""); + } + + public override async Task Where_property_on_nullable_value_type_Value() + { + await base.Where_property_on_nullable_value_type_Value(); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`OptionalAssociate_Id`, `v`.`OptionalAssociate_Int`, `v`.`OptionalAssociate_Name`, `v`.`OptionalAssociate_String`, `v`.`OptionalAssociate_OptionalNested_Id`, `v`.`OptionalAssociate_OptionalNested_Int`, `v`.`OptionalAssociate_OptionalNested_Name`, `v`.`OptionalAssociate_OptionalNested_String`, `v`.`OptionalAssociate_RequiredNested_Id`, `v`.`OptionalAssociate_RequiredNested_Int`, `v`.`OptionalAssociate_RequiredNested_Name`, `v`.`OptionalAssociate_RequiredNested_String`, `v`.`RequiredAssociate_Id`, `v`.`RequiredAssociate_Int`, `v`.`RequiredAssociate_Name`, `v`.`RequiredAssociate_String`, `v`.`RequiredAssociate_OptionalNested_Id`, `v`.`RequiredAssociate_OptionalNested_Int`, `v`.`RequiredAssociate_OptionalNested_Name`, `v`.`RequiredAssociate_OptionalNested_String`, `v`.`RequiredAssociate_RequiredNested_Id`, `v`.`RequiredAssociate_RequiredNested_Int`, `v`.`RequiredAssociate_RequiredNested_Name`, `v`.`RequiredAssociate_RequiredNested_String` +FROM `ValueRootEntity` AS `v` +WHERE `v`.`OptionalAssociate_Int` = 8 +"""); + } + + public override async Task Where_HasValue_on_nullable_value_type() + { + await base.Where_HasValue_on_nullable_value_type(); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`OptionalAssociate_Id`, `v`.`OptionalAssociate_Int`, `v`.`OptionalAssociate_Name`, `v`.`OptionalAssociate_String`, `v`.`OptionalAssociate_OptionalNested_Id`, `v`.`OptionalAssociate_OptionalNested_Int`, `v`.`OptionalAssociate_OptionalNested_Name`, `v`.`OptionalAssociate_OptionalNested_String`, `v`.`OptionalAssociate_RequiredNested_Id`, `v`.`OptionalAssociate_RequiredNested_Int`, `v`.`OptionalAssociate_RequiredNested_Name`, `v`.`OptionalAssociate_RequiredNested_String`, `v`.`RequiredAssociate_Id`, `v`.`RequiredAssociate_Int`, `v`.`RequiredAssociate_Name`, `v`.`RequiredAssociate_String`, `v`.`RequiredAssociate_OptionalNested_Id`, `v`.`RequiredAssociate_OptionalNested_Int`, `v`.`RequiredAssociate_OptionalNested_Name`, `v`.`RequiredAssociate_OptionalNested_String`, `v`.`RequiredAssociate_RequiredNested_Id`, `v`.`RequiredAssociate_RequiredNested_Int`, `v`.`RequiredAssociate_RequiredNested_Name`, `v`.`RequiredAssociate_RequiredNested_String` +FROM `ValueRootEntity` AS `v` +WHERE `v`.`OptionalAssociate_Id` IS NOT NULL +"""); + } + + #endregion Value types + + public override async Task FromSql_on_root() + { + await base.FromSql_on_root(); + + AssertSql( + """ +SELECT * FROM `RootEntity` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingProjectionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingProjectionLibRedTest.cs new file mode 100644 index 00000000..8e4cd752 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingProjectionLibRedTest.cs @@ -0,0 +1,365 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexTableSplitting; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.ComplexTableSplitting; + +public class ComplexTableSplittingProjectionLibRedTest( + ComplexTableSplittingLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : ComplexTableSplittingProjectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Select_root(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_root(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + #region Scalar properties + + public override async Task Select_scalar_property_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_scalar_property_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`RequiredAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_property_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_property_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`OptionalAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_value_type_property_on_null_associate_throws(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`OptionalAssociate_Int` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_nullable_value_type_property_on_null_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`OptionalAssociate_Int` +FROM `RootEntity` AS `r` +"""); + } + + #endregion Scalar properties + + #region Structural properties + + public override async Task Select_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_required_nested_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_nested_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_optional_nested_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_nested_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_required_nested_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_nested_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_optional_nested_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_nested_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_required_associate_via_optional_navigation(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_associate_via_optional_navigation(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r0`.`RequiredAssociate_Id`, `r0`.`RequiredAssociate_Int`, `r0`.`RequiredAssociate_Ints`, `r0`.`RequiredAssociate_Name`, `r0`.`RequiredAssociate_String`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r0`.`RequiredAssociate_OptionalNestedAssociate_String`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r0`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootReferencingEntity` AS `r` +LEFT JOIN `RootEntity` AS `r0` ON `r`.`RootEntityId` = `r0`.`Id` +"""); + } + + public override async Task Select_unmapped_associate_scalar_property(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_unmapped_associate_scalar_property(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_untranslatable_method_on_associate_scalar_property(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`RequiredAssociate_Int` +FROM `RootEntity` AS `r` +"""); + } + + #endregion Structural properties + + #region Structural collection properties + + public override async Task Select_associate_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_associate_collection(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +ORDER BY `r`.`Id` +"""); + } + + public override async Task Select_nested_collection_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + // Note that collections are not supported with table splitting, only JSON; + // the collection selected here is unmapped, and so the test does client evaluation. + await base.Select_nested_collection_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +ORDER BY `r`.`Id` +"""); + } + + public override async Task Select_nested_collection_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nested_collection_on_optional_associate(queryTrackingBehavior); + + // Note that collections are not supported with table splitting, only JSON; + // the collection selected here is unmapped, and so the test does client evaluation. + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +ORDER BY `r`.`Id` +"""); + } + + public override async Task SelectMany_associate_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_associate_collection(queryTrackingBehavior); + + AssertSql(); + } + + public override async Task SelectMany_nested_collection_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior); + + AssertSql(); + } + + public override async Task SelectMany_nested_collection_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior); + + AssertSql(); + } + + #endregion Structural collection properties + + #region Multiple + + public override async Task Select_root_duplicated(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_root_duplicated(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + #endregion Multiple + + #region Subquery + + public override async Task Select_subquery_FirstOrDefault_complex_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_FirstOrDefault_complex_collection(queryTrackingBehavior); + + AssertSql( + """ +SELECT [r1].[Id], [r1].[Name], [r1].[OptionalAssociate_Id], [r1].[OptionalAssociate_Int], [r1].[OptionalAssociate_Ints], [r1].[OptionalAssociate_Name], [r1].[OptionalAssociate_String], [r1].[OptionalAssociate_OptionalNestedAssociate_Id], [r1].[OptionalAssociate_OptionalNestedAssociate_Int], [r1].[OptionalAssociate_OptionalNestedAssociate_Ints], [r1].[OptionalAssociate_OptionalNestedAssociate_Name], [r1].[OptionalAssociate_OptionalNestedAssociate_String], [r1].[OptionalAssociate_RequiredNestedAssociate_Id], [r1].[OptionalAssociate_RequiredNestedAssociate_Int], [r1].[OptionalAssociate_RequiredNestedAssociate_Ints], [r1].[OptionalAssociate_RequiredNestedAssociate_Name], [r1].[OptionalAssociate_RequiredNestedAssociate_String], [r1].[RequiredAssociate_Id], [r1].[RequiredAssociate_Int], [r1].[RequiredAssociate_Ints], [r1].[RequiredAssociate_Name], [r1].[RequiredAssociate_String], [r1].[RequiredAssociate_OptionalNestedAssociate_Id], [r1].[RequiredAssociate_OptionalNestedAssociate_Int], [r1].[RequiredAssociate_OptionalNestedAssociate_Ints], [r1].[RequiredAssociate_OptionalNestedAssociate_Name], [r1].[RequiredAssociate_OptionalNestedAssociate_String], [r1].[RequiredAssociate_RequiredNestedAssociate_Id], [r1].[RequiredAssociate_RequiredNestedAssociate_Int], [r1].[RequiredAssociate_RequiredNestedAssociate_Ints], [r1].[RequiredAssociate_RequiredNestedAssociate_Name], [r1].[RequiredAssociate_RequiredNestedAssociate_String], [r1].[c] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) [r0].[Id], [r0].[Name], [r0].[OptionalAssociate_Id], [r0].[OptionalAssociate_Int], [r0].[OptionalAssociate_Ints], [r0].[OptionalAssociate_Name], [r0].[OptionalAssociate_String], [r0].[OptionalAssociate_OptionalNestedAssociate_Id], [r0].[OptionalAssociate_OptionalNestedAssociate_Int], [r0].[OptionalAssociate_OptionalNestedAssociate_Ints], [r0].[OptionalAssociate_OptionalNestedAssociate_Name], [r0].[OptionalAssociate_OptionalNestedAssociate_String], [r0].[OptionalAssociate_RequiredNestedAssociate_Id], [r0].[OptionalAssociate_RequiredNestedAssociate_Int], [r0].[OptionalAssociate_RequiredNestedAssociate_Ints], [r0].[OptionalAssociate_RequiredNestedAssociate_Name], [r0].[OptionalAssociate_RequiredNestedAssociate_String], [r0].[RequiredAssociate_Id], [r0].[RequiredAssociate_Int], [r0].[RequiredAssociate_Ints], [r0].[RequiredAssociate_Name], [r0].[RequiredAssociate_String], [r0].[RequiredAssociate_OptionalNestedAssociate_Id], [r0].[RequiredAssociate_OptionalNestedAssociate_Int], [r0].[RequiredAssociate_OptionalNestedAssociate_Ints], [r0].[RequiredAssociate_OptionalNestedAssociate_Name], [r0].[RequiredAssociate_OptionalNestedAssociate_String], [r0].[RequiredAssociate_RequiredNestedAssociate_Id], [r0].[RequiredAssociate_RequiredNestedAssociate_Int], [r0].[RequiredAssociate_RequiredNestedAssociate_Ints], [r0].[RequiredAssociate_RequiredNestedAssociate_Name], [r0].[RequiredAssociate_RequiredNestedAssociate_String], 1 AS [c] + FROM [RootEntity] AS [r0] + ORDER BY [r0].[Id] +) AS [r1] +ORDER BY [r].[Id] +"""); + } + + public override async Task Select_subquery_required_related_FirstOrDefault(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_required_related_FirstOrDefault(queryTrackingBehavior); + + AssertSql( + """ +SELECT [r1].[RequiredAssociate_RequiredNestedAssociate_Id], [r1].[RequiredAssociate_RequiredNestedAssociate_Int], [r1].[RequiredAssociate_RequiredNestedAssociate_Ints], [r1].[RequiredAssociate_RequiredNestedAssociate_Name], [r1].[RequiredAssociate_RequiredNestedAssociate_String] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) [r0].[RequiredAssociate_RequiredNestedAssociate_Id], [r0].[RequiredAssociate_RequiredNestedAssociate_Int], [r0].[RequiredAssociate_RequiredNestedAssociate_Ints], [r0].[RequiredAssociate_RequiredNestedAssociate_Name], [r0].[RequiredAssociate_RequiredNestedAssociate_String] + FROM [RootEntity] AS [r0] + ORDER BY [r0].[Id] +) AS [r1] +"""); + } + + public override async Task Select_subquery_optional_related_FirstOrDefault(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_optional_related_FirstOrDefault(queryTrackingBehavior); + + AssertSql( + """ +SELECT [r1].[OptionalAssociate_RequiredNestedAssociate_Id], [r1].[OptionalAssociate_RequiredNestedAssociate_Int], [r1].[OptionalAssociate_RequiredNestedAssociate_Ints], [r1].[OptionalAssociate_RequiredNestedAssociate_Name], [r1].[OptionalAssociate_RequiredNestedAssociate_String] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) [r0].[OptionalAssociate_RequiredNestedAssociate_Id], [r0].[OptionalAssociate_RequiredNestedAssociate_Int], [r0].[OptionalAssociate_RequiredNestedAssociate_Ints], [r0].[OptionalAssociate_RequiredNestedAssociate_Name], [r0].[OptionalAssociate_RequiredNestedAssociate_String] + FROM [RootEntity] AS [r0] + ORDER BY [r0].[Id] +) AS [r1] +"""); + } + + #endregion Subquery + + #region Value types + + public override async Task Select_root_with_value_types(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_root_with_value_types(queryTrackingBehavior); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`OptionalAssociate_Id`, `v`.`OptionalAssociate_Int`, `v`.`OptionalAssociate_Name`, `v`.`OptionalAssociate_String`, `v`.`OptionalAssociate_OptionalNested_Id`, `v`.`OptionalAssociate_OptionalNested_Int`, `v`.`OptionalAssociate_OptionalNested_Name`, `v`.`OptionalAssociate_OptionalNested_String`, `v`.`OptionalAssociate_RequiredNested_Id`, `v`.`OptionalAssociate_RequiredNested_Int`, `v`.`OptionalAssociate_RequiredNested_Name`, `v`.`OptionalAssociate_RequiredNested_String`, `v`.`RequiredAssociate_Id`, `v`.`RequiredAssociate_Int`, `v`.`RequiredAssociate_Name`, `v`.`RequiredAssociate_String`, `v`.`RequiredAssociate_OptionalNested_Id`, `v`.`RequiredAssociate_OptionalNested_Int`, `v`.`RequiredAssociate_OptionalNested_Name`, `v`.`RequiredAssociate_OptionalNested_String`, `v`.`RequiredAssociate_RequiredNested_Id`, `v`.`RequiredAssociate_RequiredNested_Int`, `v`.`RequiredAssociate_RequiredNested_Name`, `v`.`RequiredAssociate_RequiredNested_String` +FROM `ValueRootEntity` AS `v` +"""); + } + + public override async Task Select_non_nullable_value_type(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_non_nullable_value_type(queryTrackingBehavior); + + AssertSql( + """ +SELECT `v`.`RequiredAssociate_Id`, `v`.`RequiredAssociate_Int`, `v`.`RequiredAssociate_Name`, `v`.`RequiredAssociate_String`, `v`.`RequiredAssociate_OptionalNested_Id`, `v`.`RequiredAssociate_OptionalNested_Int`, `v`.`RequiredAssociate_OptionalNested_Name`, `v`.`RequiredAssociate_OptionalNested_String`, `v`.`RequiredAssociate_RequiredNested_Id`, `v`.`RequiredAssociate_RequiredNested_Int`, `v`.`RequiredAssociate_RequiredNested_Name`, `v`.`RequiredAssociate_RequiredNested_String` +FROM `ValueRootEntity` AS `v` +ORDER BY `v`.`Id` +"""); + } + + public override async Task Select_nullable_value_type(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nullable_value_type(queryTrackingBehavior); + + AssertSql( + """ +SELECT `v`.`OptionalAssociate_Id`, `v`.`OptionalAssociate_Int`, `v`.`OptionalAssociate_Name`, `v`.`OptionalAssociate_String`, `v`.`OptionalAssociate_OptionalNested_Id`, `v`.`OptionalAssociate_OptionalNested_Int`, `v`.`OptionalAssociate_OptionalNested_Name`, `v`.`OptionalAssociate_OptionalNested_String`, `v`.`OptionalAssociate_RequiredNested_Id`, `v`.`OptionalAssociate_RequiredNested_Int`, `v`.`OptionalAssociate_RequiredNested_Name`, `v`.`OptionalAssociate_RequiredNested_String` +FROM `ValueRootEntity` AS `v` +ORDER BY `v`.`Id` +"""); + } + + public override async Task Select_nullable_value_type_with_Value(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nullable_value_type_with_Value(queryTrackingBehavior); + + AssertSql( + """ +SELECT `v`.`OptionalAssociate_Id`, `v`.`OptionalAssociate_Int`, `v`.`OptionalAssociate_Name`, `v`.`OptionalAssociate_String`, `v`.`OptionalAssociate_OptionalNested_Id`, `v`.`OptionalAssociate_OptionalNested_Int`, `v`.`OptionalAssociate_OptionalNested_Name`, `v`.`OptionalAssociate_OptionalNested_String`, `v`.`OptionalAssociate_RequiredNested_Id`, `v`.`OptionalAssociate_RequiredNested_Int`, `v`.`OptionalAssociate_RequiredNested_Name`, `v`.`OptionalAssociate_RequiredNested_String` +FROM `ValueRootEntity` AS `v` +ORDER BY `v`.`Id` +"""); + } + + #endregion Value types + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualityLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualityLibRedTest.cs new file mode 100644 index 00000000..078caf01 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualityLibRedTest.cs @@ -0,0 +1,188 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexTableSplitting; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.ComplexTableSplitting; + +public class ComplexTableSplittingStructuralEqualityLibRedTest( + ComplexTableSplittingLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : ComplexTableSplittingStructuralEqualityRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Two_associates() + { + await base.Two_associates(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`RequiredAssociate_Id` = `r`.`OptionalAssociate_Id` AND `r`.`RequiredAssociate_Int` = `r`.`OptionalAssociate_Int` AND `r`.`RequiredAssociate_Ints` = `r`.`OptionalAssociate_Ints` AND `r`.`RequiredAssociate_Name` = `r`.`OptionalAssociate_Name` AND `r`.`RequiredAssociate_String` = `r`.`OptionalAssociate_String` AND (`r`.`RequiredAssociate_OptionalNestedAssociate_Id` = `r`.`RequiredAssociate_OptionalNestedAssociate_Id` OR `r`.`RequiredAssociate_OptionalNestedAssociate_Id` IS NULL) AND (`r`.`RequiredAssociate_OptionalNestedAssociate_Int` = `r`.`RequiredAssociate_OptionalNestedAssociate_Int` OR `r`.`RequiredAssociate_OptionalNestedAssociate_Int` IS NULL) AND (`r`.`RequiredAssociate_OptionalNestedAssociate_Ints` = `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` OR `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` IS NULL) AND (`r`.`RequiredAssociate_OptionalNestedAssociate_Name` = `r`.`RequiredAssociate_OptionalNestedAssociate_Name` OR `r`.`RequiredAssociate_OptionalNestedAssociate_Name` IS NULL) AND (`r`.`RequiredAssociate_OptionalNestedAssociate_String` = `r`.`RequiredAssociate_OptionalNestedAssociate_String` OR `r`.`RequiredAssociate_OptionalNestedAssociate_String` IS NULL) AND `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = `r`.`RequiredAssociate_RequiredNestedAssociate_Id` AND `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = `r`.`RequiredAssociate_RequiredNestedAssociate_Int` AND `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` = `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` AND `r`.`RequiredAssociate_RequiredNestedAssociate_Name` = `r`.`RequiredAssociate_RequiredNestedAssociate_Name` AND `r`.`RequiredAssociate_RequiredNestedAssociate_String` = `r`.`RequiredAssociate_RequiredNestedAssociate_String` +"""); + } + + public override async Task Two_nested_associates() + { + await base.Two_nested_associates(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = `r`.`OptionalAssociate_RequiredNestedAssociate_Id` AND `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = `r`.`OptionalAssociate_RequiredNestedAssociate_Int` AND `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` = `r`.`OptionalAssociate_RequiredNestedAssociate_Ints` AND `r`.`RequiredAssociate_RequiredNestedAssociate_Name` = `r`.`OptionalAssociate_RequiredNestedAssociate_Name` AND `r`.`RequiredAssociate_RequiredNestedAssociate_String` = `r`.`OptionalAssociate_RequiredNestedAssociate_String` +"""); + } + + public override async Task Not_equals() + { + await base.Not_equals(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`RequiredAssociate_Id` <> `r`.`OptionalAssociate_Id` OR `r`.`OptionalAssociate_Id` IS NULL OR `r`.`RequiredAssociate_Int` <> `r`.`OptionalAssociate_Int` OR `r`.`OptionalAssociate_Int` IS NULL OR `r`.`RequiredAssociate_Ints` <> `r`.`OptionalAssociate_Ints` OR `r`.`OptionalAssociate_Ints` IS NULL OR `r`.`RequiredAssociate_Name` <> `r`.`OptionalAssociate_Name` OR `r`.`OptionalAssociate_Name` IS NULL OR `r`.`RequiredAssociate_String` <> `r`.`OptionalAssociate_String` OR `r`.`OptionalAssociate_String` IS NULL OR ((`r`.`RequiredAssociate_OptionalNestedAssociate_Id` <> `r`.`RequiredAssociate_OptionalNestedAssociate_Id` OR `r`.`RequiredAssociate_OptionalNestedAssociate_Id` IS NULL) AND `r`.`RequiredAssociate_OptionalNestedAssociate_Id` IS NOT NULL) OR ((`r`.`RequiredAssociate_OptionalNestedAssociate_Int` <> `r`.`RequiredAssociate_OptionalNestedAssociate_Int` OR `r`.`RequiredAssociate_OptionalNestedAssociate_Int` IS NULL) AND `r`.`RequiredAssociate_OptionalNestedAssociate_Int` IS NOT NULL) OR ((`r`.`RequiredAssociate_OptionalNestedAssociate_Ints` <> `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` OR `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` IS NULL) AND `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` IS NOT NULL) OR ((`r`.`RequiredAssociate_OptionalNestedAssociate_Name` <> `r`.`RequiredAssociate_OptionalNestedAssociate_Name` OR `r`.`RequiredAssociate_OptionalNestedAssociate_Name` IS NULL) AND `r`.`RequiredAssociate_OptionalNestedAssociate_Name` IS NOT NULL) OR ((`r`.`RequiredAssociate_OptionalNestedAssociate_String` <> `r`.`RequiredAssociate_OptionalNestedAssociate_String` OR `r`.`RequiredAssociate_OptionalNestedAssociate_String` IS NULL) AND `r`.`RequiredAssociate_OptionalNestedAssociate_String` IS NOT NULL) OR `r`.`RequiredAssociate_RequiredNestedAssociate_Id` <> `r`.`RequiredAssociate_RequiredNestedAssociate_Id` OR `r`.`RequiredAssociate_RequiredNestedAssociate_Id` IS NULL OR `r`.`RequiredAssociate_RequiredNestedAssociate_Int` <> `r`.`RequiredAssociate_RequiredNestedAssociate_Int` OR `r`.`RequiredAssociate_RequiredNestedAssociate_Int` IS NULL OR `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` <> `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` OR `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` IS NULL OR `r`.`RequiredAssociate_RequiredNestedAssociate_Name` <> `r`.`RequiredAssociate_RequiredNestedAssociate_Name` OR `r`.`RequiredAssociate_RequiredNestedAssociate_Name` IS NULL OR `r`.`RequiredAssociate_RequiredNestedAssociate_String` <> `r`.`RequiredAssociate_RequiredNestedAssociate_String` OR `r`.`RequiredAssociate_RequiredNestedAssociate_String` IS NULL +"""); + } + + public override async Task Associate_with_inline_null() + { + await base.Associate_with_inline_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`OptionalAssociate_Id` IS NULL +"""); + } + + public override async Task Associate_with_parameter_null() + { + await base.Associate_with_parameter_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`OptionalAssociate_Id` IS NULL AND `r`.`OptionalAssociate_Int` IS NULL AND `r`.`OptionalAssociate_Ints` IS NULL AND `r`.`OptionalAssociate_Name` IS NULL AND `r`.`OptionalAssociate_String` IS NULL AND `r`.`OptionalAssociate_OptionalNestedAssociate_Id` IS NULL AND `r`.`OptionalAssociate_OptionalNestedAssociate_Int` IS NULL AND `r`.`OptionalAssociate_OptionalNestedAssociate_Ints` IS NULL AND `r`.`OptionalAssociate_OptionalNestedAssociate_Name` IS NULL AND `r`.`OptionalAssociate_OptionalNestedAssociate_String` IS NULL AND `r`.`OptionalAssociate_RequiredNestedAssociate_Id` IS NULL AND `r`.`OptionalAssociate_RequiredNestedAssociate_Int` IS NULL AND `r`.`OptionalAssociate_RequiredNestedAssociate_Ints` IS NULL AND `r`.`OptionalAssociate_RequiredNestedAssociate_Name` IS NULL AND `r`.`OptionalAssociate_RequiredNestedAssociate_String` IS NULL +"""); + } + + public override async Task Nested_associate_with_inline_null() + { + await base.Nested_associate_with_inline_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`RequiredAssociate_OptionalNestedAssociate_Id` IS NULL +"""); + } + + public override async Task Nested_associate_with_inline() + { + await base.Nested_associate_with_inline(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = 1000 AND `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = 8 AND `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` = '[1,2,3]' AND `r`.`RequiredAssociate_RequiredNestedAssociate_Name` = 'Root1_RequiredAssociate_RequiredNestedAssociate' AND `r`.`RequiredAssociate_RequiredNestedAssociate_String` = 'foo' +"""); + } + + public override async Task Nested_associate_with_parameter() + { + await base.Nested_associate_with_parameter(); + + AssertSql( + """ +@entity_equality_nested_Id='?' (DbType = Int32) +@entity_equality_nested_Int='?' (DbType = Int32) +@entity_equality_nested_Ints='?' (Size = 255) +@entity_equality_nested_Name='?' (Size = 255) +@entity_equality_nested_String='?' (Size = 255) + +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +WHERE `r`.`RequiredAssociate_RequiredNestedAssociate_Id` = @entity_equality_nested_Id AND `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = @entity_equality_nested_Int AND `r`.`RequiredAssociate_RequiredNestedAssociate_Ints` = @entity_equality_nested_Ints AND `r`.`RequiredAssociate_RequiredNestedAssociate_Name` = @entity_equality_nested_Name AND `r`.`RequiredAssociate_RequiredNestedAssociate_String` = @entity_equality_nested_String +"""); + } + + public override async Task Two_nested_collections() + { + await base.Two_nested_collections(); + + AssertSql(); + } + + public override async Task Nested_collection_with_inline() + { + await base.Nested_collection_with_inline(); + + AssertSql(); + } + + public override async Task Nested_collection_with_parameter() + { + await base.Nested_collection_with_parameter(); + + AssertSql(); + } + + #region Contains + + public override async Task Contains_with_inline() + { + await base.Contains_with_inline(); + + AssertSql(); + } + + public override async Task Contains_with_parameter() + { + await base.Contains_with_parameter(); + + AssertSql(); + } + + public override async Task Contains_with_operators_composed_on_the_collection() + { + await base.Contains_with_operators_composed_on_the_collection(); + + AssertSql(); + } + + public override async Task Contains_with_nested_and_composed_operators() + { + await base.Contains_with_nested_and_composed_operators(); + + AssertSql(); + } + + #endregion Contains + + #region Value types + + public override async Task Nullable_value_type_with_null() + { + await base.Nullable_value_type_with_null(); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`OptionalAssociate_Id`, `v`.`OptionalAssociate_Int`, `v`.`OptionalAssociate_Name`, `v`.`OptionalAssociate_String`, `v`.`OptionalAssociate_OptionalNested_Id`, `v`.`OptionalAssociate_OptionalNested_Int`, `v`.`OptionalAssociate_OptionalNested_Name`, `v`.`OptionalAssociate_OptionalNested_String`, `v`.`OptionalAssociate_RequiredNested_Id`, `v`.`OptionalAssociate_RequiredNested_Int`, `v`.`OptionalAssociate_RequiredNested_Name`, `v`.`OptionalAssociate_RequiredNested_String`, `v`.`RequiredAssociate_Id`, `v`.`RequiredAssociate_Int`, `v`.`RequiredAssociate_Name`, `v`.`RequiredAssociate_String`, `v`.`RequiredAssociate_OptionalNested_Id`, `v`.`RequiredAssociate_OptionalNested_Int`, `v`.`RequiredAssociate_OptionalNested_Name`, `v`.`RequiredAssociate_OptionalNested_String`, `v`.`RequiredAssociate_RequiredNested_Id`, `v`.`RequiredAssociate_RequiredNested_Int`, `v`.`RequiredAssociate_RequiredNested_Name`, `v`.`RequiredAssociate_RequiredNested_String` +FROM `ValueRootEntity` AS `v` +WHERE `v`.`OptionalAssociate_Id` IS NULL +"""); + } + + #endregion Value types + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsCollectionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsCollectionLibRedTest.cs new file mode 100644 index 00000000..e97f9720 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsCollectionLibRedTest.cs @@ -0,0 +1,290 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.Associations.Navigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.Navigations; + +public class NavigationsCollectionLibRedTest(NavigationsLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : NavigationsCollectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Count() + { + await base.Count(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a0`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a1` ON `r`.`RequiredAssociateId` = `a1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a1`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a1`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a2`.`Id`, `a2`.`CollectionRootId`, `a2`.`Int`, `a2`.`Ints`, `a2`.`Name`, `a2`.`OptionalNestedAssociateId`, `a2`.`RequiredNestedAssociateId`, `a2`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a2` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a2`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a2`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a2`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a1`.`Id` = `n7`.`CollectionAssociateId` +WHERE (( + SELECT COUNT(*) + FROM `AssociateType` AS `a` + WHERE `r`.`Id` = `a`.`CollectionRootId`) = 2) AND (`a1`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Where() + { + await base.Where(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a0`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a1` ON `r`.`RequiredAssociateId` = `a1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a1`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a1`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a2`.`Id`, `a2`.`CollectionRootId`, `a2`.`Int`, `a2`.`Ints`, `a2`.`Name`, `a2`.`OptionalNestedAssociateId`, `a2`.`RequiredNestedAssociateId`, `a2`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a2` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a2`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a2`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a2`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a1`.`Id` = `n7`.`CollectionAssociateId` +WHERE (( + SELECT COUNT(*) + FROM `AssociateType` AS `a` + WHERE `r`.`Id` = `a`.`CollectionRootId` AND `a`.`Int` <> 8) = 2) AND (`a1`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task OrderBy_ElementAt() + { + await base.OrderBy_ElementAt(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a0`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a1` ON `r`.`RequiredAssociateId` = `a1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a1`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a1`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a2`.`Id`, `a2`.`CollectionRootId`, `a2`.`Int`, `a2`.`Ints`, `a2`.`Name`, `a2`.`OptionalNestedAssociateId`, `a2`.`RequiredNestedAssociateId`, `a2`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a2` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a2`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a2`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a2`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a1`.`Id` = `n7`.`CollectionAssociateId` +WHERE (( + SELECT `a4`.`Int` + FROM ( + SELECT TOP 1 `a3`.`Int`, `a3`.`Id` + FROM ( + SELECT TOP 0 + 1 `a`.`Int`, `a`.`Id` + FROM `AssociateType` AS `a` + WHERE `r`.`Id` = `a`.`CollectionRootId` + ORDER BY `a`.`Id` + ) AS `a3` + ORDER BY `a3`.`Id` DESC + ) AS `a4` + ORDER BY `a4`.`Id`) = 8) AND (`a1`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + #region Distinct + + public override async Task Distinct() + { + await base.Distinct(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a1`.`Id`, `n`.`Id`, `n0`.`Id`, `a2`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a2`.`CollectionRootId`, `a2`.`Int`, `a2`.`Ints`, `a2`.`Name`, `a2`.`OptionalNestedAssociateId`, `a2`.`RequiredNestedAssociateId`, `a2`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a1` ON `r`.`OptionalAssociateId` = `a1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a1`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a1`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a2` ON `r`.`RequiredAssociateId` = `a2`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a2`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a2`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a3`.`Id`, `a3`.`CollectionRootId`, `a3`.`Int`, `a3`.`Ints`, `a3`.`Name`, `a3`.`OptionalNestedAssociateId`, `a3`.`RequiredNestedAssociateId`, `a3`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a3` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a3`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a3`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a3`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a1`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a2`.`Id` = `n7`.`CollectionAssociateId` +WHERE (( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT `a`.`Id`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String` + FROM `AssociateType` AS `a` + WHERE `r`.`Id` = `a`.`CollectionRootId` + ) AS `a0`) = 2) AND (`a2`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a1`.`Id`, `n`.`Id`, `n0`.`Id`, `a2`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Distinct_projected(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Distinct_projected(queryTrackingBehavior); + + AssertSql( + """ +SELECT [r].[Id], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedAssociateId], [s].[RequiredNestedAssociateId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionAssociateId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionAssociateId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionAssociateId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT [a0].[Id], [a0].[CollectionRootId], [a0].[Int], [a0].[Ints], [a0].[Name], [a0].[OptionalNestedAssociateId], [a0].[RequiredNestedAssociateId], [a0].[String], [n].[Id] AS [Id0], [n0].[Id] AS [Id1], [n1].[Id] AS [Id2], [n1].[CollectionAssociateId], [n1].[Int] AS [Int0], [n1].[Ints] AS [Ints0], [n1].[Name] AS [Name0], [n1].[String] AS [String0], [n].[CollectionAssociateId] AS [CollectionAssociateId0], [n].[Int] AS [Int1], [n].[Ints] AS [Ints1], [n].[Name] AS [Name1], [n].[String] AS [String1], [n0].[CollectionAssociateId] AS [CollectionAssociateId1], [n0].[Int] AS [Int2], [n0].[Ints] AS [Ints2], [n0].[Name] AS [Name2], [n0].[String] AS [String2] + FROM ( + SELECT DISTINCT [a].[Id], [a].[CollectionRootId], [a].[Int], [a].[Ints], [a].[Name], [a].[OptionalNestedAssociateId], [a].[RequiredNestedAssociateId], [a].[String] + FROM [AssociateType] AS [a] + WHERE [r].[Id] = [a].[CollectionRootId] + ) AS [a0] + LEFT JOIN [NestedAssociateType] AS [n] ON [a0].[OptionalNestedAssociateId] = [n].[Id] + INNER JOIN [NestedAssociateType] AS [n0] ON [a0].[RequiredNestedAssociateId] = [n0].[Id] + LEFT JOIN [NestedAssociateType] AS [n1] ON [a0].[Id] = [n1].[CollectionAssociateId] +) AS [s] +ORDER BY [r].[Id], [s].[Id], [s].[Id0], [s].[Id1] +"""); + } + + public override async Task Distinct_over_projected_nested_collection() + { + await base.Distinct_over_projected_nested_collection(); + + AssertSql(); + } + + public override async Task Distinct_over_projected_filtered_nested_collection() + { + await base.Distinct_over_projected_filtered_nested_collection(); + + AssertSql(); + } + + #endregion Distinct + + #region Index + + public override async Task Index_constant() + { + await base.Index_constant(); + + AssertSql(); + } + + public override async Task Index_parameter() + { + await base.Index_parameter(); + + AssertSql(); + } + + public override async Task Index_column() + { + await base.Index_column(); + + AssertSql(); + } + + public override async Task Index_on_nested_collection() + { + await base.Index_on_nested_collection(); + + AssertSql(); + } + + public override async Task Index_out_of_bounds() + { + await base.Index_out_of_bounds(); + + AssertSql(); + } + + #endregion Index + + #region GroupBy + + [ConditionalFact] + public override async Task GroupBy() + { + await base.GroupBy(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a0`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a1` ON `r`.`RequiredAssociateId` = `a1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a1`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a1`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a2`.`Id`, `a2`.`CollectionRootId`, `a2`.`Int`, `a2`.`Ints`, `a2`.`Name`, `a2`.`OptionalNestedAssociateId`, `a2`.`RequiredNestedAssociateId`, `a2`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a2` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a2`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a2`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a2`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a1`.`Id` = `n7`.`CollectionAssociateId` +WHERE (16 IN ( + SELECT IIF(SUM(`a`.`Int`) IS NULL, 0, SUM(`a`.`Int`)) + FROM `AssociateType` AS `a` + WHERE `r`.`Id` = `a`.`CollectionRootId` + GROUP BY `a`.`String` +)) AND (`a1`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + #endregion GroupBy + + public override async Task Select_within_Select_within_Select_with_aggregates() + { + await base.Select_within_Select_within_Select_with_aggregates(); + + AssertSql( + """ +SELECT ( + SELECT IIF(SUM(( + SELECT MAX(`n`.`Int`) + FROM `NestedAssociateType` AS `n` + WHERE `a`.`Id` = `n`.`CollectionAssociateId`)) IS NULL, 0, SUM(( + SELECT MAX(`n`.`Int`) + FROM `NestedAssociateType` AS `n` + WHERE `a`.`Id` = `n`.`CollectionAssociateId`))) + FROM `AssociateType` AS `a` + WHERE `r`.`Id` = `a`.`CollectionRootId`) +FROM `RootEntity` AS `r` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsIncludeLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsIncludeLibRedTest.cs new file mode 100644 index 00000000..e6470853 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsIncludeLibRedTest.cs @@ -0,0 +1,267 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.Navigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.Navigations; + +public class NavigationsIncludeLibRedTest(NavigationsLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : NavigationsIncludeRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Include_required(bool async) + { + await base.Include_required(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Include_optional(bool async) + { + await base.Include_optional(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Include_collection(bool async) + { + await base.Include_collection(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Include_required_optional_and_collection(bool async) + { + await base.Include_required_optional_and_collection(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Include_nested(bool async) + { + await base.Include_nested(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Include_nested_optional(bool async) + { + await base.Include_nested_optional(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Include_nested_collection(bool async) + { + await base.Include_nested_collection(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Include_nested_collection_on_optional(bool async) + { + await base.Include_nested_collection_on_optional(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Include_nested_collection_on_collection(bool async) + { + await base.Include_nested_collection_on_collection(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsLibRedFixture.cs new file mode 100644 index 00000000..c4e273d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsLibRedFixture.cs @@ -0,0 +1,11 @@ +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query.Associations.Navigations; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.Navigations; + +public class NavigationsLibRedFixture : NavigationsRelationalFixtureBase +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsMiscellaneousLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsMiscellaneousLibRedTest.cs new file mode 100644 index 00000000..99670a73 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsMiscellaneousLibRedTest.cs @@ -0,0 +1,135 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.Navigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.Navigations; + +public class NavigationsMiscellaneousLibRedTest( + NavigationsLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : NavigationsMiscellaneousRelationalTestBase(fixture, testOutputHelper) +{ + #region Simple filters + + public override async Task Where_on_associate_scalar_property() + { + await base.Where_on_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a0`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`a`.`Int` = 8) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Where_on_optional_associate_scalar_property() + { + await base.Where_on_optional_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`a`.`Int` = 8) AND (`a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Where_on_nested_associate_scalar_property() + { + await base.Where_on_nested_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`RequiredNestedAssociateId` = `n`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`OptionalNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`RequiredNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`OptionalNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`n`.`Int` = 8) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + #endregion Simple filters + + public override async Task FromSql_on_root() + { + await base.FromSql_on_root(); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`Name`, `m`.`OptionalAssociateId`, `m`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((( + SELECT * FROM `RootEntity` +) AS `m` +LEFT JOIN `AssociateType` AS `a` ON `m`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `m`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `m`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `m`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsProjectionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsProjectionLibRedTest.cs new file mode 100644 index 00000000..21613b2d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsProjectionLibRedTest.cs @@ -0,0 +1,433 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.Associations.Navigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.Navigations; + +public class NavigationsProjectionLibRedTest(NavigationsLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : NavigationsProjectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Select_root(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_root(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + #region Scalar properties + + public override async Task Select_scalar_property_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_scalar_property_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`String` +FROM `RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id` +"""); + } + + public override async Task Select_property_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_property_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`String` +FROM `RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id` +"""); + } + + public override async Task Select_value_type_property_on_null_associate_throws(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`Int` +FROM `RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id` +"""); + } + + public override async Task Select_nullable_value_type_property_on_null_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`Int` +FROM `RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id` +"""); + } + + #endregion Scalar properties + + #region Structural properties + + public override async Task Select_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `r`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String` +FROM (((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`Id` = `n1`.`CollectionAssociateId` +WHERE `a`.`RequiredNestedAssociateId` IS NOT NULL AND `n0`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id` +"""); + } + + public override async Task Select_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `r`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String` +FROM (((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`Id` = `n1`.`CollectionAssociateId` +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id` +"""); + } + + public override async Task Select_required_nested_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_nested_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM (`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`RequiredNestedAssociateId` = `n`.`Id` +WHERE `a`.`RequiredNestedAssociateId` IS NOT NULL AND `n`.`Id` IS NOT NULL +"""); + } + + public override async Task Select_optional_nested_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_nested_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM (`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id` +"""); + } + + public override async Task Select_required_nested_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_nested_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`RequiredNestedAssociateId` = `n`.`Id` +"""); + } + + public override async Task Select_optional_nested_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_nested_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id` +"""); + } + + public override async Task Select_required_associate_via_optional_navigation(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_associate_via_optional_navigation(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `r`.`Id`, `r0`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String` +FROM ((((`RootReferencingEntity` AS `r` +LEFT JOIN `RootEntity` AS `r0` ON `r`.`RootEntityId` = `r0`.`Id`) +LEFT JOIN `AssociateType` AS `a` ON `r0`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`Id` = `n1`.`CollectionAssociateId` +ORDER BY `r`.`Id`, `r0`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id` +"""); + } + + public override async Task Select_unmapped_associate_scalar_property(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_unmapped_associate_scalar_property(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `r`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String` +FROM (((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`Id` = `n1`.`CollectionAssociateId` +WHERE `a`.`RequiredNestedAssociateId` IS NOT NULL AND `n0`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id` +"""); + } + + public override async Task Select_untranslatable_method_on_associate_scalar_property(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`Int` +FROM `RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id` +"""); + } + + #endregion Structural properties + + #region Structural collection properties + + public override async Task Select_associate_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_associate_collection(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2` +FROM `RootEntity` AS `r` +LEFT JOIN ( + SELECT `a`.`Id`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n`.`Id` AS `Id0`, `n0`.`Id` AS `Id1`, `n1`.`Id` AS `Id2`, `n1`.`CollectionAssociateId`, `n1`.`Int` AS `Int0`, `n1`.`Ints` AS `Ints0`, `n1`.`Name` AS `Name0`, `n1`.`String` AS `String0`, `n`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n`.`Int` AS `Int1`, `n`.`Ints` AS `Ints1`, `n`.`Name` AS `Name1`, `n`.`String` AS `String1`, `n0`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n0`.`Int` AS `Int2`, `n0`.`Ints` AS `Ints2`, `n0`.`Name` AS `Name2`, `n0`.`String` AS `String2` + FROM ((`AssociateType` AS `a` + LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) + INNER JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`Id` = `n1`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId` +ORDER BY `r`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1` +"""); + } + + public override async Task Select_nested_collection_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nested_collection_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `a`.`Id`, `n`.`Id`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM (`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`Id` = `n`.`CollectionAssociateId` +ORDER BY `r`.`Id`, `a`.`Id` +"""); + } + + public override async Task Select_nested_collection_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nested_collection_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `a`.`Id`, `n`.`Id`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`Id` = `n`.`CollectionAssociateId` +ORDER BY `r`.`Id`, `a`.`Id` +"""); + } + + public override async Task SelectMany_associate_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_associate_collection(queryTrackingBehavior); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `r`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String` +FROM (((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`Id` = `a`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`Id` = `n1`.`CollectionAssociateId` +WHERE `a`.`RequiredNestedAssociateId` IS NOT NULL AND `n0`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id` +"""); + } + + public override async Task SelectMany_nested_collection_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM (`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`Id` = `n`.`CollectionAssociateId` +WHERE `a`.`Id` IS NOT NULL AND `n`.`CollectionAssociateId` IS NOT NULL +"""); + } + + public override async Task SelectMany_nested_collection_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`Id` = `n`.`CollectionAssociateId` +WHERE `a`.`Id` IS NOT NULL AND `n`.`CollectionAssociateId` IS NOT NULL +"""); + } + + #endregion Structural collection properties + + #region Multiple + + public override async Task Select_root_duplicated(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_root_duplicated(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String`, `s0`.`Id`, `s0`.`CollectionRootId`, `s0`.`Int`, `s0`.`Ints`, `s0`.`Name`, `s0`.`OptionalNestedAssociateId`, `s0`.`RequiredNestedAssociateId`, `s0`.`String`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `s0`.`CollectionAssociateId`, `s0`.`Int0`, `s0`.`Ints0`, `s0`.`Name0`, `s0`.`String0`, `s0`.`CollectionAssociateId0`, `s0`.`Int1`, `s0`.`Ints1`, `s0`.`Name1`, `s0`.`String1`, `s0`.`CollectionAssociateId1`, `s0`.`Int2`, `s0`.`Ints2`, `s0`.`Name2`, `s0`.`String2`, `n11`.`Id`, `n11`.`CollectionAssociateId`, `n11`.`Int`, `n11`.`Ints`, `n11`.`Name`, `n11`.`String`, `n12`.`Id`, `n12`.`CollectionAssociateId`, `n12`.`Int`, `n12`.`Ints`, `n12`.`Name`, `n12`.`String` +FROM (((((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId`) +LEFT JOIN ( + SELECT `a2`.`Id`, `a2`.`CollectionRootId`, `a2`.`Int`, `a2`.`Ints`, `a2`.`Name`, `a2`.`OptionalNestedAssociateId`, `a2`.`RequiredNestedAssociateId`, `a2`.`String`, `n8`.`Id` AS `Id0`, `n9`.`Id` AS `Id1`, `n10`.`Id` AS `Id2`, `n10`.`CollectionAssociateId`, `n10`.`Int` AS `Int0`, `n10`.`Ints` AS `Ints0`, `n10`.`Name` AS `Name0`, `n10`.`String` AS `String0`, `n8`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n8`.`Int` AS `Int1`, `n8`.`Ints` AS `Ints1`, `n8`.`Name` AS `Name1`, `n8`.`String` AS `String1`, `n9`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n9`.`Int` AS `Int2`, `n9`.`Ints` AS `Ints2`, `n9`.`Name` AS `Name2`, `n9`.`String` AS `String2` + FROM ((`AssociateType` AS `a2` + LEFT JOIN `NestedAssociateType` AS `n8` ON `a2`.`OptionalNestedAssociateId` = `n8`.`Id`) + INNER JOIN `NestedAssociateType` AS `n9` ON `a2`.`RequiredNestedAssociateId` = `n9`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n10` ON `a2`.`Id` = `n10`.`CollectionAssociateId` +) AS `s0` ON `r`.`Id` = `s0`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n11` ON `a`.`Id` = `n11`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n12` ON `a0`.`Id` = `n12`.`CollectionAssociateId` +WHERE `a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id`, `n7`.`Id`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `n11`.`Id` +"""); + } + + #endregion Multiple + + #region Subquery + + public override async Task Select_subquery_FirstOrDefault_complex_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_FirstOrDefault_complex_collection(queryTrackingBehavior); + + AssertSql( + """ +SELECT [r].[Id], [r1].[Id], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedAssociateId], [s].[RequiredNestedAssociateId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionAssociateId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionAssociateId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionAssociateId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[c] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) 1 AS [c], [r0].[Id] + FROM [RootEntity] AS [r0] + ORDER BY [r0].[Id] +) AS [r1] +LEFT JOIN ( + SELECT [a].[Id], [a].[CollectionRootId], [a].[Int], [a].[Ints], [a].[Name], [a].[OptionalNestedAssociateId], [a].[RequiredNestedAssociateId], [a].[String], [n].[Id] AS [Id0], [n0].[Id] AS [Id1], [n1].[Id] AS [Id2], [n1].[CollectionAssociateId], [n1].[Int] AS [Int0], [n1].[Ints] AS [Ints0], [n1].[Name] AS [Name0], [n1].[String] AS [String0], [n].[CollectionAssociateId] AS [CollectionAssociateId0], [n].[Int] AS [Int1], [n].[Ints] AS [Ints1], [n].[Name] AS [Name1], [n].[String] AS [String1], [n0].[CollectionAssociateId] AS [CollectionAssociateId1], [n0].[Int] AS [Int2], [n0].[Ints] AS [Ints2], [n0].[Name] AS [Name2], [n0].[String] AS [String2] + FROM [AssociateType] AS [a] + LEFT JOIN [NestedAssociateType] AS [n] ON [a].[OptionalNestedAssociateId] = [n].[Id] + INNER JOIN [NestedAssociateType] AS [n0] ON [a].[RequiredNestedAssociateId] = [n0].[Id] + LEFT JOIN [NestedAssociateType] AS [n1] ON [a].[Id] = [n1].[CollectionAssociateId] +) AS [s] ON [r1].[Id] = [s].[CollectionRootId] +ORDER BY [r].[Id], [r1].[Id], [s].[Id], [s].[Id0], [s].[Id1] +"""); + } + + public override async Task Select_subquery_required_related_FirstOrDefault(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_required_related_FirstOrDefault(queryTrackingBehavior); + + AssertSql( + """ +SELECT [s].[Id], [s].[CollectionAssociateId], [s].[Int], [s].[Ints], [s].[Name], [s].[String] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) [n].[Id], [n].[CollectionAssociateId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] + FROM [RootEntity] AS [r0] + INNER JOIN [AssociateType] AS [a] ON [r0].[RequiredAssociateId] = [a].[Id] + INNER JOIN [NestedAssociateType] AS [n] ON [a].[RequiredNestedAssociateId] = [n].[Id] + ORDER BY [r0].[Id] +) AS [s] +"""); + } + + public override async Task Select_subquery_optional_related_FirstOrDefault(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_optional_related_FirstOrDefault(queryTrackingBehavior); + + AssertSql( + """ +SELECT [s].[Id], [s].[CollectionAssociateId], [s].[Int], [s].[Ints], [s].[Name], [s].[String] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) [n].[Id], [n].[CollectionAssociateId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] + FROM [RootEntity] AS [r0] + LEFT JOIN [AssociateType] AS [a] ON [r0].[OptionalAssociateId] = [a].[Id] + LEFT JOIN [NestedAssociateType] AS [n] ON [a].[RequiredNestedAssociateId] = [n].[Id] + ORDER BY [r0].[Id] +) AS [s] +"""); + } + + #endregion Subquery + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsSetOperationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsSetOperationsLibRedTest.cs new file mode 100644 index 00000000..be8d4f64 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsSetOperationsLibRedTest.cs @@ -0,0 +1,168 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.Associations.Navigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.Navigations; + +public class NavigationsSetOperationsLibRedTest( + NavigationsLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : NavigationsSetOperationsRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Over_associate_collections() + { + await base.Over_associate_collections(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a1`.`Id`, `n`.`Id`, `n0`.`Id`, `a2`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a2`.`CollectionRootId`, `a2`.`Int`, `a2`.`Ints`, `a2`.`Name`, `a2`.`OptionalNestedAssociateId`, `a2`.`RequiredNestedAssociateId`, `a2`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a1` ON `r`.`OptionalAssociateId` = `a1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a1`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a1`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a2` ON `r`.`RequiredAssociateId` = `a2`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a2`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a2`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a3`.`Id`, `a3`.`CollectionRootId`, `a3`.`Int`, `a3`.`Ints`, `a3`.`Name`, `a3`.`OptionalNestedAssociateId`, `a3`.`RequiredNestedAssociateId`, `a3`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a3` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a3`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a3`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a3`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a1`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a2`.`Id` = `n7`.`CollectionAssociateId` +WHERE (( + SELECT COUNT(*) + FROM ( + SELECT 1 + FROM `AssociateType` AS `a` + WHERE `r`.`Id` = `a`.`CollectionRootId` AND `a`.`Int` = 8 + UNION ALL + SELECT 1 + FROM `AssociateType` AS `a0` + WHERE `r`.`Id` = `a0`.`CollectionRootId` AND `a0`.`String` = 'foo' + ) AS `u`) = 4) AND (`a2`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a1`.`Id`, `n`.`Id`, `n0`.`Id`, `a2`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Over_associate_collection_projected(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Over_associate_collection_projected(queryTrackingBehavior); + + AssertSql(); + } + + public override async Task Over_assocate_collection_Select_nested_with_aggregates_projected(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Over_assocate_collection_Select_nested_with_aggregates_projected(queryTrackingBehavior); + + AssertSql( + """ +SELECT ( + SELECT IIF(SUM(( + SELECT IIF(SUM(`n`.`Int`) IS NULL, 0, SUM(`n`.`Int`)) + FROM `NestedAssociateType` AS `n` + WHERE `u`.`Id` = `n`.`CollectionAssociateId`)) IS NULL, 0, SUM(( + SELECT IIF(SUM(`n`.`Int`) IS NULL, 0, SUM(`n`.`Int`)) + FROM `NestedAssociateType` AS `n` + WHERE `u`.`Id` = `n`.`CollectionAssociateId`))) + FROM ( + SELECT `a`.`Id` + FROM `AssociateType` AS `a` + WHERE `r`.`Id` = `a`.`CollectionRootId` AND `a`.`Int` = 8 + UNION ALL + SELECT `a0`.`Id` + FROM `AssociateType` AS `a0` + WHERE `r`.`Id` = `a0`.`CollectionRootId` AND `a0`.`String` = 'foo' + ) AS `u`) +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Over_nested_associate_collection() + { + await base.Over_nested_associate_collection(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `n3`.`Id`, `n4`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n8`.`Id`, `n8`.`CollectionAssociateId`, `n8`.`Int`, `n8`.`Ints`, `n8`.`Name`, `n8`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n9`.`Id`, `n9`.`CollectionAssociateId`, `n9`.`Int`, `n9`.`Ints`, `n9`.`Name`, `n9`.`String`, `n3`.`CollectionAssociateId`, `n3`.`Int`, `n3`.`Ints`, `n3`.`Name`, `n3`.`String`, `n4`.`CollectionAssociateId`, `n4`.`Int`, `n4`.`Ints`, `n4`.`Name`, `n4`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n3` ON `a`.`OptionalNestedAssociateId` = `n3`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n4` ON `a`.`RequiredNestedAssociateId` = `n4`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n5`.`Id` AS `Id0`, `n6`.`Id` AS `Id1`, `n7`.`Id` AS `Id2`, `n7`.`CollectionAssociateId`, `n7`.`Int` AS `Int0`, `n7`.`Ints` AS `Ints0`, `n7`.`Name` AS `Name0`, `n7`.`String` AS `String0`, `n5`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n5`.`Int` AS `Int1`, `n5`.`Ints` AS `Ints1`, `n5`.`Name` AS `Name1`, `n5`.`String` AS `String1`, `n6`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n6`.`Int` AS `Int2`, `n6`.`Ints` AS `Ints2`, `n6`.`Name` AS `Name2`, `n6`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`OptionalNestedAssociateId` = `n5`.`Id`) + INNER JOIN `NestedAssociateType` AS `n6` ON `a1`.`RequiredNestedAssociateId` = `n6`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n7` ON `a1`.`Id` = `n7`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n8` ON `a0`.`Id` = `n8`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n9` ON `a`.`Id` = `n9`.`CollectionAssociateId` +WHERE (( + SELECT COUNT(*) + FROM ( + SELECT 1 + FROM `NestedAssociateType` AS `n` + WHERE `a`.`Id` = `n`.`CollectionAssociateId` AND `n`.`Int` = 8 + UNION ALL + SELECT 1 + FROM `NestedAssociateType` AS `n0` + WHERE `a`.`Id` = `n0`.`CollectionAssociateId` AND `n0`.`String` = 'foo' + ) AS `u`) = 4) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n4`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `n3`.`Id`, `n4`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n8`.`Id` +"""); + } + + //skip this test as it crashes LibRed EF Core provider + [Fact(Skip = "JET EF Core provider issue")] + public override async Task Over_different_collection_properties() + { + await base.Over_different_collection_properties(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalAssociateId], [r].[RequiredAssociateId], [a].[Id], [a0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedAssociateId], [s].[RequiredNestedAssociateId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionAssociateId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionAssociateId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionAssociateId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [a0].[CollectionRootId], [a0].[Int], [a0].[Ints], [a0].[Name], [a0].[OptionalNestedAssociateId], [a0].[RequiredNestedAssociateId], [a0].[String], [n8].[Id], [n8].[CollectionAssociateId], [n8].[Int], [n8].[Ints], [n8].[Name], [n8].[String], [n1].[CollectionAssociateId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionAssociateId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [a].[CollectionRootId], [a].[Int], [a].[Ints], [a].[Name], [a].[OptionalNestedAssociateId], [a].[RequiredNestedAssociateId], [a].[String], [n9].[Id], [n9].[CollectionAssociateId], [n9].[Int], [n9].[Ints], [n9].[Name], [n9].[String], [n3].[CollectionAssociateId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n4].[CollectionAssociateId], [n4].[Int], [n4].[Ints], [n4].[Name], [n4].[String] +FROM [RootEntity] AS [r] +INNER JOIN [AssociateType] AS [a] ON [r].[RequiredAssociateId] = [a].[Id] +LEFT JOIN [AssociateType] AS [a0] ON [r].[OptionalAssociateId] = [a0].[Id] +LEFT JOIN [NestedAssociateType] AS [n1] ON [a0].[OptionalNestedAssociateId] = [n1].[Id] +LEFT JOIN [NestedAssociateType] AS [n2] ON [a0].[RequiredNestedAssociateId] = [n2].[Id] +LEFT JOIN [NestedAssociateType] AS [n3] ON [a].[OptionalNestedAssociateId] = [n3].[Id] +INNER JOIN [NestedAssociateType] AS [n4] ON [a].[RequiredNestedAssociateId] = [n4].[Id] +LEFT JOIN ( + SELECT [a1].[Id], [a1].[CollectionRootId], [a1].[Int], [a1].[Ints], [a1].[Name], [a1].[OptionalNestedAssociateId], [a1].[RequiredNestedAssociateId], [a1].[String], [n5].[Id] AS [Id0], [n6].[Id] AS [Id1], [n7].[Id] AS [Id2], [n7].[CollectionAssociateId], [n7].[Int] AS [Int0], [n7].[Ints] AS [Ints0], [n7].[Name] AS [Name0], [n7].[String] AS [String0], [n5].[CollectionAssociateId] AS [CollectionAssociateId0], [n5].[Int] AS [Int1], [n5].[Ints] AS [Ints1], [n5].[Name] AS [Name1], [n5].[String] AS [String1], [n6].[CollectionAssociateId] AS [CollectionAssociateId1], [n6].[Int] AS [Int2], [n6].[Ints] AS [Ints2], [n6].[Name] AS [Name2], [n6].[String] AS [String2] + FROM [AssociateType] AS [a1] + LEFT JOIN [NestedAssociateType] AS [n5] ON [a1].[OptionalNestedAssociateId] = [n5].[Id] + INNER JOIN [NestedAssociateType] AS [n6] ON [a1].[RequiredNestedAssociateId] = [n6].[Id] + LEFT JOIN [NestedAssociateType] AS [n7] ON [a1].[Id] = [n7].[CollectionAssociateId] +) AS [s] ON [r].[Id] = [s].[CollectionRootId] +LEFT JOIN [NestedAssociateType] AS [n8] ON [a0].[Id] = [n8].[CollectionAssociateId] +LEFT JOIN [NestedAssociateType] AS [n9] ON [a].[Id] = [n9].[CollectionAssociateId] +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT 1 AS empty + FROM [NestedAssociateType] AS [n] + WHERE [a].[Id] = [n].[CollectionAssociateId] + UNION ALL + SELECT 1 AS empty + FROM [NestedAssociateType] AS [n0] + WHERE [a0].[Id] IS NOT NULL AND [a0].[Id] = [n0].[CollectionAssociateId] + ) AS [u]) = 4 +ORDER BY [r].[Id], [a].[Id], [a0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [s].[Id], [s].[Id0], [s].[Id1], [s].[Id2], [n8].[Id] +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsStructuralEqualityLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsStructuralEqualityLibRedTest.cs new file mode 100644 index 00000000..aee54aad --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/Navigations/NavigationsStructuralEqualityLibRedTest.cs @@ -0,0 +1,421 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.Navigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.Navigations; + +public class NavigationsStructuralEqualityLibRedTest( + NavigationsLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : NavigationsStructuralEqualityRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Two_associates() + { + await base.Two_associates(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a0`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`a`.`Id` = `a0`.`Id`) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Two_nested_associates() + { + await base.Two_nested_associates(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`RequiredNestedAssociateId` = `n`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`OptionalNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`n`.`Id` = `n0`.`Id`) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Not_equals() + { + await base.Not_equals(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a0`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`a`.`Id` <> `a0`.`Id` OR `a0`.`Id` IS NULL) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Associate_with_inline_null() + { + await base.Associate_with_inline_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`a`.`Id` IS NULL) AND (`a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Associate_with_parameter_null() + { + await base.Associate_with_parameter_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a` ON `r`.`OptionalAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a0` ON `r`.`RequiredAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a0`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`a`.`Id` IS NULL) AND (`a0`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `n0`.`Id`, `a0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Nested_associate_with_inline_null() + { + await base.Nested_associate_with_inline_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`OptionalNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`RequiredNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`n`.`Id` IS NULL) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Nested_associate_with_inline() + { + await base.Nested_associate_with_inline(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`RequiredNestedAssociateId` = `n`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`OptionalNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`RequiredNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`OptionalNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`n`.`Id` = 1000) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Nested_associate_with_parameter() + { + await base.Nested_associate_with_parameter(); + + AssertSql( + """ +@entity_equality_nested_Id='1000' (Nullable = true) + +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a`.`RequiredNestedAssociateId` = `n`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`OptionalNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`RequiredNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`OptionalNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`n`.`Id` = @entity_equality_nested_Id) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `n`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Two_nested_collections() + { + await base.Two_nested_collections(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a0`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a1`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a1`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a1`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a`.`Id` = `n7`.`CollectionAssociateId` +WHERE (`a`.`Id` = `a0`.`Id`) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + public override async Task Nested_collection_with_inline() + { + await base.Nested_collection_with_inline(); + + AssertSql(); + } + + public override async Task Nested_collection_with_parameter() + { + await base.Nested_collection_with_parameter(); + + AssertSql(); + } + + #region Contains + + public override async Task Contains_with_inline() + { + await base.Contains_with_inline(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `n3`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n8`.`Id`, `n8`.`CollectionAssociateId`, `n8`.`Int`, `n8`.`Ints`, `n8`.`Name`, `n8`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String`, `n3`.`CollectionAssociateId`, `n3`.`Int`, `n3`.`Ints`, `n3`.`Name`, `n3`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`OptionalNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`RequiredNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`OptionalNestedAssociateId` = `n2`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n3` ON `a`.`RequiredNestedAssociateId` = `n3`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n4`.`Id` AS `Id0`, `n5`.`Id` AS `Id1`, `n6`.`Id` AS `Id2`, `n6`.`CollectionAssociateId`, `n6`.`Int` AS `Int0`, `n6`.`Ints` AS `Ints0`, `n6`.`Name` AS `Name0`, `n6`.`String` AS `String0`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n4`.`Int` AS `Int1`, `n4`.`Ints` AS `Ints1`, `n4`.`Name` AS `Name1`, `n4`.`String` AS `String1`, `n5`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n5`.`Int` AS `Int2`, `n5`.`Ints` AS `Ints2`, `n5`.`Name` AS `Name2`, `n5`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n4` ON `a1`.`OptionalNestedAssociateId` = `n4`.`Id`) + INNER JOIN `NestedAssociateType` AS `n5` ON `a1`.`RequiredNestedAssociateId` = `n5`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n6` ON `a1`.`Id` = `n6`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n8` ON `a`.`Id` = `n8`.`CollectionAssociateId` +WHERE (EXISTS ( + SELECT 1 + FROM `NestedAssociateType` AS `n` + WHERE `a`.`Id` = `n`.`CollectionAssociateId` AND `n`.`Id` = 1002)) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n3`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `n3`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n7`.`Id` +"""); + } + + public override async Task Contains_with_parameter() + { + await base.Contains_with_parameter(); + + AssertSql( + """ +@entity_equality_nested_Id='1002' (Nullable = true) + +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `n3`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n8`.`Id`, `n8`.`CollectionAssociateId`, `n8`.`Int`, `n8`.`Ints`, `n8`.`Name`, `n8`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String`, `n3`.`CollectionAssociateId`, `n3`.`Int`, `n3`.`Ints`, `n3`.`Name`, `n3`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`OptionalNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`RequiredNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`OptionalNestedAssociateId` = `n2`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n3` ON `a`.`RequiredNestedAssociateId` = `n3`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n4`.`Id` AS `Id0`, `n5`.`Id` AS `Id1`, `n6`.`Id` AS `Id2`, `n6`.`CollectionAssociateId`, `n6`.`Int` AS `Int0`, `n6`.`Ints` AS `Ints0`, `n6`.`Name` AS `Name0`, `n6`.`String` AS `String0`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n4`.`Int` AS `Int1`, `n4`.`Ints` AS `Ints1`, `n4`.`Name` AS `Name1`, `n4`.`String` AS `String1`, `n5`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n5`.`Int` AS `Int2`, `n5`.`Ints` AS `Ints2`, `n5`.`Name` AS `Name2`, `n5`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n4` ON `a1`.`OptionalNestedAssociateId` = `n4`.`Id`) + INNER JOIN `NestedAssociateType` AS `n5` ON `a1`.`RequiredNestedAssociateId` = `n5`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n6` ON `a1`.`Id` = `n6`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n8` ON `a`.`Id` = `n8`.`CollectionAssociateId` +WHERE (EXISTS ( + SELECT 1 + FROM `NestedAssociateType` AS `n` + WHERE `a`.`Id` = `n`.`CollectionAssociateId` AND `n`.`Id` = @entity_equality_nested_Id)) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n3`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `n3`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n7`.`Id` +"""); + } + + public override async Task Contains_with_operators_composed_on_the_collection() + { + await base.Contains_with_operators_composed_on_the_collection(); + + AssertSql( + """ +@get_Item_Int='106' +@entity_equality_get_Item_Id='3003' (Nullable = true) + +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `n3`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `a`.`CollectionRootId`, `a`.`Int`, `a`.`Ints`, `a`.`Name`, `a`.`OptionalNestedAssociateId`, `a`.`RequiredNestedAssociateId`, `a`.`String`, `n8`.`Id`, `n8`.`CollectionAssociateId`, `n8`.`Int`, `n8`.`Ints`, `n8`.`Name`, `n8`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String`, `n3`.`CollectionAssociateId`, `n3`.`Int`, `n3`.`Ints`, `n3`.`Name`, `n3`.`String` +FROM ((((((((`RootEntity` AS `r` +INNER JOIN `AssociateType` AS `a` ON `r`.`RequiredAssociateId` = `a`.`Id`) +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`OptionalNestedAssociateId` = `n0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a0`.`RequiredNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a`.`OptionalNestedAssociateId` = `n2`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n3` ON `a`.`RequiredNestedAssociateId` = `n3`.`Id`) +LEFT JOIN ( + SELECT `a1`.`Id`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n4`.`Id` AS `Id0`, `n5`.`Id` AS `Id1`, `n6`.`Id` AS `Id2`, `n6`.`CollectionAssociateId`, `n6`.`Int` AS `Int0`, `n6`.`Ints` AS `Ints0`, `n6`.`Name` AS `Name0`, `n6`.`String` AS `String0`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n4`.`Int` AS `Int1`, `n4`.`Ints` AS `Ints1`, `n4`.`Name` AS `Name1`, `n4`.`String` AS `String1`, `n5`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n5`.`Int` AS `Int2`, `n5`.`Ints` AS `Ints2`, `n5`.`Name` AS `Name2`, `n5`.`String` AS `String2` + FROM ((`AssociateType` AS `a1` + LEFT JOIN `NestedAssociateType` AS `n4` ON `a1`.`OptionalNestedAssociateId` = `n4`.`Id`) + INNER JOIN `NestedAssociateType` AS `n5` ON `a1`.`RequiredNestedAssociateId` = `n5`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n6` ON `a1`.`Id` = `n6`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a0`.`Id` = `n7`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n8` ON `a`.`Id` = `n8`.`CollectionAssociateId` +WHERE (EXISTS ( + SELECT 1 + FROM `NestedAssociateType` AS `n` + WHERE `a`.`Id` = `n`.`CollectionAssociateId` AND `n`.`Int` > @get_Item_Int AND `n`.`Id` = @entity_equality_get_Item_Id)) AND (`a`.`RequiredNestedAssociateId` IS NOT NULL AND `n3`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a`.`Id`, `a0`.`Id`, `n0`.`Id`, `n1`.`Id`, `n2`.`Id`, `n3`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n7`.`Id` +"""); + } + + public override async Task Contains_with_nested_and_composed_operators() + { + await base.Contains_with_nested_and_composed_operators(); + + AssertSql( + """ +@get_Item_Id='302' +@entity_equality_get_Item_Id='303' (Nullable = true) + +SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalAssociateId`, `r`.`RequiredAssociateId`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`OptionalNestedAssociateId`, `s`.`RequiredNestedAssociateId`, `s`.`String`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s`.`CollectionAssociateId`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`CollectionAssociateId0`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`CollectionAssociateId1`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `a0`.`CollectionRootId`, `a0`.`Int`, `a0`.`Ints`, `a0`.`Name`, `a0`.`OptionalNestedAssociateId`, `a0`.`RequiredNestedAssociateId`, `a0`.`String`, `n6`.`Id`, `n6`.`CollectionAssociateId`, `n6`.`Int`, `n6`.`Ints`, `n6`.`Name`, `n6`.`String`, `n`.`CollectionAssociateId`, `n`.`Int`, `n`.`Ints`, `n`.`Name`, `n`.`String`, `n0`.`CollectionAssociateId`, `n0`.`Int`, `n0`.`Ints`, `n0`.`Name`, `n0`.`String`, `a1`.`CollectionRootId`, `a1`.`Int`, `a1`.`Ints`, `a1`.`Name`, `a1`.`OptionalNestedAssociateId`, `a1`.`RequiredNestedAssociateId`, `a1`.`String`, `n7`.`Id`, `n7`.`CollectionAssociateId`, `n7`.`Int`, `n7`.`Ints`, `n7`.`Name`, `n7`.`String`, `n1`.`CollectionAssociateId`, `n1`.`Int`, `n1`.`Ints`, `n1`.`Name`, `n1`.`String`, `n2`.`CollectionAssociateId`, `n2`.`Int`, `n2`.`Ints`, `n2`.`Name`, `n2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `AssociateType` AS `a0` ON `r`.`OptionalAssociateId` = `a0`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n` ON `a0`.`OptionalNestedAssociateId` = `n`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n0` ON `a0`.`RequiredNestedAssociateId` = `n0`.`Id`) +INNER JOIN `AssociateType` AS `a1` ON `r`.`RequiredAssociateId` = `a1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n1` ON `a1`.`OptionalNestedAssociateId` = `n1`.`Id`) +LEFT JOIN `NestedAssociateType` AS `n2` ON `a1`.`RequiredNestedAssociateId` = `n2`.`Id`) +LEFT JOIN ( + SELECT `a2`.`Id`, `a2`.`CollectionRootId`, `a2`.`Int`, `a2`.`Ints`, `a2`.`Name`, `a2`.`OptionalNestedAssociateId`, `a2`.`RequiredNestedAssociateId`, `a2`.`String`, `n3`.`Id` AS `Id0`, `n4`.`Id` AS `Id1`, `n5`.`Id` AS `Id2`, `n5`.`CollectionAssociateId`, `n5`.`Int` AS `Int0`, `n5`.`Ints` AS `Ints0`, `n5`.`Name` AS `Name0`, `n5`.`String` AS `String0`, `n3`.`CollectionAssociateId` AS `CollectionAssociateId0`, `n3`.`Int` AS `Int1`, `n3`.`Ints` AS `Ints1`, `n3`.`Name` AS `Name1`, `n3`.`String` AS `String1`, `n4`.`CollectionAssociateId` AS `CollectionAssociateId1`, `n4`.`Int` AS `Int2`, `n4`.`Ints` AS `Ints2`, `n4`.`Name` AS `Name2`, `n4`.`String` AS `String2` + FROM ((`AssociateType` AS `a2` + LEFT JOIN `NestedAssociateType` AS `n3` ON `a2`.`OptionalNestedAssociateId` = `n3`.`Id`) + INNER JOIN `NestedAssociateType` AS `n4` ON `a2`.`RequiredNestedAssociateId` = `n4`.`Id`) + LEFT JOIN `NestedAssociateType` AS `n5` ON `a2`.`Id` = `n5`.`CollectionAssociateId` +) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`) +LEFT JOIN `NestedAssociateType` AS `n6` ON `a0`.`Id` = `n6`.`CollectionAssociateId`) +LEFT JOIN `NestedAssociateType` AS `n7` ON `a1`.`Id` = `n7`.`CollectionAssociateId` +WHERE (EXISTS ( + SELECT 1 + FROM `AssociateType` AS `a` + WHERE `r`.`Id` = `a`.`CollectionRootId` AND `a`.`Id` > @get_Item_Id AND `a`.`Id` = @entity_equality_get_Item_Id)) AND (`a1`.`RequiredNestedAssociateId` IS NOT NULL AND `n2`.`Id` IS NOT NULL) +ORDER BY `r`.`Id`, `a0`.`Id`, `n`.`Id`, `n0`.`Id`, `a1`.`Id`, `n1`.`Id`, `n2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `n6`.`Id` +"""); + } + + #endregion Contains + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsCollectionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsCollectionLibRedTest.cs new file mode 100644 index 00000000..ac77ceee --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsCollectionLibRedTest.cs @@ -0,0 +1,293 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedNavigations; + +public class OwnedNavigationsCollectionLibRedTest(OwnedNavigationsLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : OwnedNavigationsCollectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Count() + { + await base.Count(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`RootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r8`.`AssociateTypeRootEntityId`, `r8`.`Id`, `r8`.`Int`, `r8`.`Ints`, `r8`.`Name`, `r8`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r1` ON `r`.`Id` = `r1`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r2` ON `r1`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r3` ON `r1`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r4`.`RootEntityId`, `r4`.`Id`, `r4`.`Int`, `r4`.`Ints`, `r4`.`Name`, `r4`.`String`, `r5`.`AssociateTypeRootEntityId`, `r5`.`AssociateTypeId`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r6`.`AssociateTypeId` AS `AssociateTypeId0`, `r7`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r7`.`AssociateTypeId` AS `AssociateTypeId1`, `r7`.`Id` AS `Id0`, `r7`.`Int` AS `Int0`, `r7`.`Ints` AS `Ints0`, `r7`.`Name` AS `Name0`, `r7`.`String` AS `String0`, `r5`.`Id` AS `Id1`, `r5`.`Int` AS `Int1`, `r5`.`Ints` AS `Ints1`, `r5`.`Name` AS `Name1`, `r5`.`String` AS `String1`, `r6`.`Id` AS `Id2`, `r6`.`Int` AS `Int2`, `r6`.`Ints` AS `Ints2`, `r6`.`Name` AS `Name2`, `r6`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r4` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r5` ON `r4`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r6` ON `r4`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r6`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r7` ON `r4`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r7`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r8` ON `r1`.`RootEntityId` = `r8`.`AssociateTypeRootEntityId` +WHERE ( + SELECT COUNT(*) + FROM `RelatedCollection` AS `r0` + WHERE `r`.`Id` = `r0`.`RootEntityId`) = 2 +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`RootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r8`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Where() + { + await base.Where(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`RootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r8`.`AssociateTypeRootEntityId`, `r8`.`Id`, `r8`.`Int`, `r8`.`Ints`, `r8`.`Name`, `r8`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r1` ON `r`.`Id` = `r1`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r2` ON `r1`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r3` ON `r1`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r4`.`RootEntityId`, `r4`.`Id`, `r4`.`Int`, `r4`.`Ints`, `r4`.`Name`, `r4`.`String`, `r5`.`AssociateTypeRootEntityId`, `r5`.`AssociateTypeId`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r6`.`AssociateTypeId` AS `AssociateTypeId0`, `r7`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r7`.`AssociateTypeId` AS `AssociateTypeId1`, `r7`.`Id` AS `Id0`, `r7`.`Int` AS `Int0`, `r7`.`Ints` AS `Ints0`, `r7`.`Name` AS `Name0`, `r7`.`String` AS `String0`, `r5`.`Id` AS `Id1`, `r5`.`Int` AS `Int1`, `r5`.`Ints` AS `Ints1`, `r5`.`Name` AS `Name1`, `r5`.`String` AS `String1`, `r6`.`Id` AS `Id2`, `r6`.`Int` AS `Int2`, `r6`.`Ints` AS `Ints2`, `r6`.`Name` AS `Name2`, `r6`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r4` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r5` ON `r4`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r6` ON `r4`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r6`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r7` ON `r4`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r7`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r8` ON `r1`.`RootEntityId` = `r8`.`AssociateTypeRootEntityId` +WHERE ( + SELECT COUNT(*) + FROM `RelatedCollection` AS `r0` + WHERE `r`.`Id` = `r0`.`RootEntityId` AND `r0`.`Int` <> 8) = 2 +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`RootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r8`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task OrderBy_ElementAt() + { + await base.OrderBy_ElementAt(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`RootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r8`.`AssociateTypeRootEntityId`, `r8`.`Id`, `r8`.`Int`, `r8`.`Ints`, `r8`.`Name`, `r8`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r1` ON `r`.`Id` = `r1`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r2` ON `r1`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r3` ON `r1`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r4`.`RootEntityId`, `r4`.`Id`, `r4`.`Int`, `r4`.`Ints`, `r4`.`Name`, `r4`.`String`, `r5`.`AssociateTypeRootEntityId`, `r5`.`AssociateTypeId`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r6`.`AssociateTypeId` AS `AssociateTypeId0`, `r7`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r7`.`AssociateTypeId` AS `AssociateTypeId1`, `r7`.`Id` AS `Id0`, `r7`.`Int` AS `Int0`, `r7`.`Ints` AS `Ints0`, `r7`.`Name` AS `Name0`, `r7`.`String` AS `String0`, `r5`.`Id` AS `Id1`, `r5`.`Int` AS `Int1`, `r5`.`Ints` AS `Ints1`, `r5`.`Name` AS `Name1`, `r5`.`String` AS `String1`, `r6`.`Id` AS `Id2`, `r6`.`Int` AS `Int2`, `r6`.`Ints` AS `Ints2`, `r6`.`Name` AS `Name2`, `r6`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r4` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r5` ON `r4`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r6` ON `r4`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r6`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r7` ON `r4`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r7`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r8` ON `r1`.`RootEntityId` = `r8`.`AssociateTypeRootEntityId` +WHERE ( + SELECT `r10`.`Int` + FROM ( + SELECT TOP 1 `r9`.`Int`, `r9`.`Id` + FROM ( + SELECT TOP 0 + 1 `r0`.`Int`, `r0`.`Id` + FROM `RelatedCollection` AS `r0` + WHERE `r`.`Id` = `r0`.`RootEntityId` + ORDER BY `r0`.`Id` + ) AS `r9` + ORDER BY `r9`.`Id` DESC + ) AS `r10` + ORDER BY `r10`.`Id`) = 8 +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`RootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r8`.`AssociateTypeRootEntityId` +"""); + } + + #region Distinct + + public override async Task Distinct() + { + await base.Distinct(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`RootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r9`.`AssociateTypeRootEntityId`, `r9`.`Id`, `r9`.`Int`, `r9`.`Ints`, `r9`.`Name`, `r9`.`String`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`Id`, `r4`.`Int`, `r4`.`Ints`, `r4`.`Name`, `r4`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r2` ON `r`.`Id` = `r2`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r3` ON `r2`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r4` ON `r2`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r5`.`RootEntityId`, `r5`.`Id`, `r5`.`Int`, `r5`.`Ints`, `r5`.`Name`, `r5`.`String`, `r6`.`AssociateTypeRootEntityId`, `r6`.`AssociateTypeId`, `r7`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r7`.`AssociateTypeId` AS `AssociateTypeId0`, `r8`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r8`.`AssociateTypeId` AS `AssociateTypeId1`, `r8`.`Id` AS `Id0`, `r8`.`Int` AS `Int0`, `r8`.`Ints` AS `Ints0`, `r8`.`Name` AS `Name0`, `r8`.`String` AS `String0`, `r6`.`Id` AS `Id1`, `r6`.`Int` AS `Int1`, `r6`.`Ints` AS `Ints1`, `r6`.`Name` AS `Name1`, `r6`.`String` AS `String1`, `r7`.`Id` AS `Id2`, `r7`.`Int` AS `Int2`, `r7`.`Ints` AS `Ints2`, `r7`.`Name` AS `Name2`, `r7`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r5` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r6` ON `r5`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r5`.`Id` = `r6`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r7` ON `r5`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` AND `r5`.`Id` = `r7`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r8` ON `r5`.`RootEntityId` = `r8`.`AssociateTypeRootEntityId` AND `r5`.`Id` = `r8`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r9` ON `r2`.`RootEntityId` = `r9`.`AssociateTypeRootEntityId` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String` + FROM `RelatedCollection` AS `r0` + WHERE `r`.`Id` = `r0`.`RootEntityId` + ) AS `r1`) = 2 +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`RootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r9`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Distinct_projected(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Distinct_projected(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT [r].[Id], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[AssociateTypeRootEntityId], [s].[AssociateTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[AssociateTypeRootEntityId0], [s].[AssociateTypeId0], [s].[Id00], [s].[Int00], [s].[Ints00], [s].[Name00], [s].[String00], [s].[AssociateTypeRootEntityId00], [s].[AssociateTypeId00], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r4].[AssociateTypeRootEntityId], [r4].[AssociateTypeId], [r4].[Id] AS [Id0], [r4].[Int] AS [Int0], [r4].[Ints] AS [Ints0], [r4].[Name] AS [Name0], [r4].[String] AS [String0], [r1].[AssociateTypeRootEntityId] AS [AssociateTypeRootEntityId0], [r1].[AssociateTypeId] AS [AssociateTypeId0], [r1].[Id0] AS [Id00], [r1].[Int0] AS [Int00], [r1].[Ints0] AS [Ints00], [r1].[Name0] AS [Name00], [r1].[String0] AS [String00], [r1].[AssociateTypeRootEntityId0] AS [AssociateTypeRootEntityId00], [r1].[AssociateTypeId0] AS [AssociateTypeId00], [r1].[Id1], [r1].[Int1], [r1].[Ints1], [r1].[Name1], [r1].[String1] + FROM ( + SELECT DISTINCT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r2].[AssociateTypeRootEntityId], [r2].[AssociateTypeId], [r2].[Id] AS [Id0], [r2].[Int] AS [Int0], [r2].[Ints] AS [Ints0], [r2].[Name] AS [Name0], [r2].[String] AS [String0], [r3].[AssociateTypeRootEntityId] AS [AssociateTypeRootEntityId0], [r3].[AssociateTypeId] AS [AssociateTypeId0], [r3].[Id] AS [Id1], [r3].[Int] AS [Int1], [r3].[Ints] AS [Ints1], [r3].[Name] AS [Name1], [r3].[String] AS [String1] + FROM [RelatedCollection] AS [r0] + LEFT JOIN [RelatedCollection_OptionalNested] AS [r2] ON [r0].[RootEntityId] = [r2].[AssociateTypeRootEntityId] AND [r0].[Id] = [r2].[AssociateTypeId] + LEFT JOIN [RelatedCollection_RequiredNested] AS [r3] ON [r0].[RootEntityId] = [r3].[AssociateTypeRootEntityId] AND [r0].[Id] = [r3].[AssociateTypeId] + WHERE [r].[Id] = [r0].[RootEntityId] + ) AS [r1] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r4] ON [r1].[RootEntityId] = [r4].[AssociateTypeRootEntityId] AND [r1].[Id] = [r4].[AssociateTypeId] +) AS [s] +ORDER BY [r].[Id], [s].[RootEntityId], [s].[Id], [s].[AssociateTypeRootEntityId], [s].[AssociateTypeId] +"""); + } + } + + public override async Task Distinct_over_projected_nested_collection() + { + await base.Distinct_over_projected_nested_collection(); + + AssertSql(); + } + + public override async Task Distinct_over_projected_filtered_nested_collection() + { + await base.Distinct_over_projected_filtered_nested_collection(); + + AssertSql(); + } + + #endregion Distinct + + #region Index + + public override async Task Index_constant() + { + await base.Index_constant(); + + AssertSql(); + } + + public override async Task Index_parameter() + { + await base.Index_parameter(); + + AssertSql(); + } + + public override async Task Index_column() + { + await base.Index_column(); + + AssertSql(); + } + + public override async Task Index_on_nested_collection() + { + await base.Index_on_nested_collection(); + + AssertSql(); + } + + public override async Task Index_out_of_bounds() + { + await base.Index_out_of_bounds(); + + AssertSql(); + } + + #endregion Index + + #region GroupBy + + [ConditionalFact] + public override async Task GroupBy() + { + await base.GroupBy(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`RootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r8`.`AssociateTypeRootEntityId`, `r8`.`Id`, `r8`.`Int`, `r8`.`Ints`, `r8`.`Name`, `r8`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r1` ON `r`.`Id` = `r1`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r2` ON `r1`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r3` ON `r1`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r4`.`RootEntityId`, `r4`.`Id`, `r4`.`Int`, `r4`.`Ints`, `r4`.`Name`, `r4`.`String`, `r5`.`AssociateTypeRootEntityId`, `r5`.`AssociateTypeId`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r6`.`AssociateTypeId` AS `AssociateTypeId0`, `r7`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r7`.`AssociateTypeId` AS `AssociateTypeId1`, `r7`.`Id` AS `Id0`, `r7`.`Int` AS `Int0`, `r7`.`Ints` AS `Ints0`, `r7`.`Name` AS `Name0`, `r7`.`String` AS `String0`, `r5`.`Id` AS `Id1`, `r5`.`Int` AS `Int1`, `r5`.`Ints` AS `Ints1`, `r5`.`Name` AS `Name1`, `r5`.`String` AS `String1`, `r6`.`Id` AS `Id2`, `r6`.`Int` AS `Int2`, `r6`.`Ints` AS `Ints2`, `r6`.`Name` AS `Name2`, `r6`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r4` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r5` ON `r4`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r6` ON `r4`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r6`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r7` ON `r4`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` AND `r4`.`Id` = `r7`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r8` ON `r1`.`RootEntityId` = `r8`.`AssociateTypeRootEntityId` +WHERE 16 IN ( + SELECT IIF(SUM(`r0`.`Int`) IS NULL, 0, SUM(`r0`.`Int`)) + FROM `RelatedCollection` AS `r0` + WHERE `r`.`Id` = `r0`.`RootEntityId` + GROUP BY `r0`.`String` +) +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`RootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r8`.`AssociateTypeRootEntityId` +"""); + } + + #endregion GroupBy + + public override async Task Select_within_Select_within_Select_with_aggregates() + { + await base.Select_within_Select_within_Select_with_aggregates(); + + AssertSql( + """ +SELECT ( + SELECT IIF(SUM(( + SELECT MAX(`r1`.`Int`) + FROM `RelatedCollection_NestedCollection` AS `r1` + WHERE `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId`)) IS NULL, 0, SUM(( + SELECT MAX(`r1`.`Int`) + FROM `RelatedCollection_NestedCollection` AS `r1` + WHERE `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId`))) + FROM `RelatedCollection` AS `r0` + WHERE `r`.`Id` = `r0`.`RootEntityId`) +FROM `RootEntity` AS `r` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsLibRedFixture.cs new file mode 100644 index 00000000..beb5ed10 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsLibRedFixture.cs @@ -0,0 +1,11 @@ +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedNavigations; + +public class OwnedNavigationsLibRedFixture : OwnedNavigationsRelationalFixtureBase +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousLibRedTest.cs new file mode 100644 index 00000000..db8dfb60 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousLibRedTest.cs @@ -0,0 +1,134 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedNavigations; + +public class OwnedNavigationsMiscellaneousLibRedTest( + OwnedNavigationsLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : OwnedNavigationsMiscellaneousRelationalTestBase(fixture, testOutputHelper) +{ + #region Simple filters + + public override async Task Where_on_associate_scalar_property() + { + await base.Where_on_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r0`.`RootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE `r0`.`Int` = 8 +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Where_on_optional_associate_scalar_property() + { + await base.Where_on_optional_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE `o`.`Int` = 8 +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Where_on_nested_associate_scalar_property() + { + await base.Where_on_nested_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE `r1`.`Int` = 8 +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + #endregion Simple filters + + public override async Task FromSql_on_root() + { + await base.FromSql_on_root(); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r`.`RootEntityId`, `r0`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r`.`Id`, `r`.`Int`, `r`.`Ints`, `r`.`Name`, `r`.`String`, `r6`.`AssociateTypeRootEntityId`, `r6`.`Id`, `r6`.`Int`, `r6`.`Ints`, `r6`.`Name`, `r6`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String` +FROM ((((((((( + SELECT * FROM `RootEntity` +) AS `m` +LEFT JOIN `OptionalRelated` AS `o` ON `m`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r` ON `m`.`Id` = `r`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r0` ON `r`.`RootEntityId` = `r0`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r1` ON `r`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r2`.`RootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r3`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeId`, `r4`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r4`.`AssociateTypeId` AS `AssociateTypeId0`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r5`.`AssociateTypeId` AS `AssociateTypeId1`, `r5`.`Id` AS `Id0`, `r5`.`Int` AS `Int0`, `r5`.`Ints` AS `Ints0`, `r5`.`Name` AS `Name0`, `r5`.`String` AS `String0`, `r3`.`Id` AS `Id1`, `r3`.`Int` AS `Int1`, `r3`.`Ints` AS `Ints1`, `r3`.`Name` AS `Name1`, `r3`.`String` AS `String1`, `r4`.`Id` AS `Id2`, `r4`.`Int` AS `Int2`, `r4`.`Ints` AS `Ints2`, `r4`.`Name` AS `Name2`, `r4`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r2` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r3` ON `r2`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId` AND `r2`.`Id` = `r3`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r4` ON `r2`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r2`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r5` ON `r2`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r2`.`Id` = `r5`.`AssociateTypeId` +) AS `s` ON `m`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r6` ON `r`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` +ORDER BY `m`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r`.`RootEntityId`, `r0`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r6`.`AssociateTypeRootEntityId` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsProjectionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsProjectionLibRedTest.cs new file mode 100644 index 00000000..449980dc --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsProjectionLibRedTest.cs @@ -0,0 +1,478 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedNavigations; + +public class OwnedNavigationsProjectionLibRedTest(OwnedNavigationsLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : OwnedNavigationsProjectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Select_root(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_root(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + #region Scalar properties + + public override async Task Select_scalar_property_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_scalar_property_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r0`.`String` +FROM `RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId` +"""); + } + + public override async Task Select_property_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_property_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `o`.`String` +FROM `RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId` +"""); + } + + public override async Task Select_value_type_property_on_null_associate_throws(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior); + + AssertSql( + """ +SELECT `o`.`Int` +FROM `RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId` +"""); + } + + public override async Task Select_nullable_value_type_property_on_null_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `o`.`Int` +FROM `RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId` +"""); + } + + #endregion Scalar properties + + #region Structural properties + + public override async Task Select_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r`.`Id`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM (((`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r3` ON `r0`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `o`.`RootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`Id`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String` +FROM (((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `o2`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_required_nested_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_nested_on_required_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r1`.`AssociateTypeRootEntityId`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_optional_nested_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_nested_on_required_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r1`.`AssociateTypeRootEntityId`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_required_nested_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_nested_on_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `o0`.`AssociateTypeRootEntityId`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_optional_nested_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_nested_on_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `o0`.`AssociateTypeRootEntityId`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_required_associate_via_optional_navigation(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_associate_via_optional_navigation(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r1`.`RootEntityId`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r`.`Id`, `r0`.`Id`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeRootEntityId`, `r4`.`Id`, `r4`.`Int`, `r4`.`Ints`, `r4`.`Name`, `r4`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String` +FROM ((((`RootReferencingEntity` AS `r` +LEFT JOIN `RootEntity` AS `r0` ON `r`.`RootEntityId` = `r0`.`Id`) +LEFT JOIN `RequiredRelated` AS `r1` ON `r0`.`Id` = `r1`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r2` ON `r1`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r3` ON `r1`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r4` ON `r1`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `r0`.`Id`, `r1`.`RootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_unmapped_associate_scalar_property(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_unmapped_associate_scalar_property(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r`.`Id`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM (((`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r3` ON `r0`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_untranslatable_method_on_associate_scalar_property(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r0`.`Int` +FROM `RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId` +"""); + } + + #endregion Structural properties + + #region Structural collection properties + + public override async Task Select_associate_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_associate_collection(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2` +FROM `RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r2`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r2`.`AssociateTypeId` AS `AssociateTypeId0`, `r3`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r3`.`AssociateTypeId` AS `AssociateTypeId1`, `r3`.`Id` AS `Id0`, `r3`.`Int` AS `Int0`, `r3`.`Ints` AS `Ints0`, `r3`.`Name` AS `Name0`, `r3`.`String` AS `String0`, `r1`.`Id` AS `Id1`, `r1`.`Int` AS `Int1`, `r1`.`Ints` AS `Ints1`, `r1`.`Name` AS `Name1`, `r1`.`String` AS `String1`, `r2`.`Id` AS `Id2`, `r2`.`Int` AS `Int2`, `r2`.`Ints` AS `Ints2`, `r2`.`Name` AS `Name2`, `r2`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r2`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r3` ON `r0`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r3`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId` +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1` +"""); + } + } + + public override async Task Select_nested_collection_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nested_collection_on_required_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_nested_collection_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nested_collection_on_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task SelectMany_associate_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_associate_collection(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r`.`Id`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r2`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeId`, `r3`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM (((`RootEntity` AS `r` +INNER JOIN `RelatedCollection` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RelatedCollection_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId`) +LEFT JOIN `RelatedCollection_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r2`.`AssociateTypeId`) +LEFT JOIN `RelatedCollection_NestedCollection` AS `r3` ON `r0`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r3`.`AssociateTypeId` +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `r0`.`Id`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r2`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeId`, `r3`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeId` +"""); + } + } + + public override async Task SelectMany_nested_collection_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r1`.`AssociateTypeRootEntityId`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` +WHERE `r0`.`RootEntityId` IS NOT NULL AND `r1`.`AssociateTypeRootEntityId` IS NOT NULL +"""); + } + } + + public override async Task SelectMany_nested_collection_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `o0`.`AssociateTypeRootEntityId`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String` +FROM (`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId` +WHERE `o`.`RootEntityId` IS NOT NULL AND `o0`.`AssociateTypeRootEntityId` IS NOT NULL +"""); + } + } + + #endregion Structural collection properties + + #region Multiple + + public override async Task Select_root_duplicated(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_root_duplicated(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `s0`.`RootEntityId`, `s0`.`Id`, `s0`.`Int`, `s0`.`Ints`, `s0`.`Name`, `s0`.`String`, `s0`.`AssociateTypeRootEntityId`, `s0`.`AssociateTypeId`, `s0`.`AssociateTypeRootEntityId0`, `s0`.`AssociateTypeId0`, `s0`.`AssociateTypeRootEntityId1`, `s0`.`AssociateTypeId1`, `s0`.`Id0`, `s0`.`Int0`, `s0`.`Ints0`, `s0`.`Name0`, `s0`.`String0`, `s0`.`Id1`, `s0`.`Int1`, `s0`.`Ints1`, `s0`.`Name1`, `s0`.`String1`, `s0`.`Id2`, `s0`.`Int2`, `s0`.`Ints2`, `s0`.`Name2`, `s0`.`String2`, `o3`.`AssociateTypeRootEntityId`, `o3`.`Id`, `o3`.`Int`, `o3`.`Ints`, `o3`.`Name`, `o3`.`String`, `r12`.`AssociateTypeRootEntityId`, `r12`.`Id`, `r12`.`Int`, `r12`.`Ints`, `r12`.`Name`, `r12`.`String` +FROM (((((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r8`.`RootEntityId`, `r8`.`Id`, `r8`.`Int`, `r8`.`Ints`, `r8`.`Name`, `r8`.`String`, `r9`.`AssociateTypeRootEntityId`, `r9`.`AssociateTypeId`, `r10`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r10`.`AssociateTypeId` AS `AssociateTypeId0`, `r11`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r11`.`AssociateTypeId` AS `AssociateTypeId1`, `r11`.`Id` AS `Id0`, `r11`.`Int` AS `Int0`, `r11`.`Ints` AS `Ints0`, `r11`.`Name` AS `Name0`, `r11`.`String` AS `String0`, `r9`.`Id` AS `Id1`, `r9`.`Int` AS `Int1`, `r9`.`Ints` AS `Ints1`, `r9`.`Name` AS `Name1`, `r9`.`String` AS `String1`, `r10`.`Id` AS `Id2`, `r10`.`Int` AS `Int2`, `r10`.`Ints` AS `Ints2`, `r10`.`Name` AS `Name2`, `r10`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r8` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r9` ON `r8`.`RootEntityId` = `r9`.`AssociateTypeRootEntityId` AND `r8`.`Id` = `r9`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r10` ON `r8`.`RootEntityId` = `r10`.`AssociateTypeRootEntityId` AND `r8`.`Id` = `r10`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r11` ON `r8`.`RootEntityId` = `r11`.`AssociateTypeRootEntityId` AND `r8`.`Id` = `r11`.`AssociateTypeId` +) AS `s0` ON `r`.`Id` = `s0`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o3` ON `o`.`RootEntityId` = `o3`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r12` ON `r0`.`RootEntityId` = `r12`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `s0`.`RootEntityId`, `s0`.`Id`, `s0`.`AssociateTypeRootEntityId`, `s0`.`AssociateTypeId`, `s0`.`AssociateTypeRootEntityId0`, `s0`.`AssociateTypeId0`, `s0`.`AssociateTypeRootEntityId1`, `s0`.`AssociateTypeId1`, `s0`.`Id0`, `o3`.`AssociateTypeRootEntityId`, `o3`.`Id`, `r12`.`AssociateTypeRootEntityId` +"""); + } + + #endregion Multiple + + #region Subquery + + public override async Task Select_subquery_FirstOrDefault_complex_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_FirstOrDefault_complex_collection(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT [r].[Id], [r5].[Id], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[AssociateTypeRootEntityId], [s].[AssociateTypeId], [s].[AssociateTypeRootEntityId0], [s].[AssociateTypeId0], [s].[AssociateTypeRootEntityId1], [s].[AssociateTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r5].[c] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) 1 AS [c], [r0].[Id] + FROM [RootEntity] AS [r0] + ORDER BY [r0].[Id] +) AS [r5] +LEFT JOIN ( + SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[AssociateTypeRootEntityId], [r2].[AssociateTypeId], [r3].[AssociateTypeRootEntityId] AS [AssociateTypeRootEntityId0], [r3].[AssociateTypeId] AS [AssociateTypeId0], [r4].[AssociateTypeRootEntityId] AS [AssociateTypeRootEntityId1], [r4].[AssociateTypeId] AS [AssociateTypeId1], [r4].[Id] AS [Id0], [r4].[Int] AS [Int0], [r4].[Ints] AS [Ints0], [r4].[Name] AS [Name0], [r4].[String] AS [String0], [r2].[Id] AS [Id1], [r2].[Int] AS [Int1], [r2].[Ints] AS [Ints1], [r2].[Name] AS [Name1], [r2].[String] AS [String1], [r3].[Id] AS [Id2], [r3].[Int] AS [Int2], [r3].[Ints] AS [Ints2], [r3].[Name] AS [Name2], [r3].[String] AS [String2] + FROM [RelatedCollection] AS [r1] + LEFT JOIN [RelatedCollection_OptionalNested] AS [r2] ON [r1].[RootEntityId] = [r2].[AssociateTypeRootEntityId] AND [r1].[Id] = [r2].[AssociateTypeId] + LEFT JOIN [RelatedCollection_RequiredNested] AS [r3] ON [r1].[RootEntityId] = [r3].[AssociateTypeRootEntityId] AND [r1].[Id] = [r3].[AssociateTypeId] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r4] ON [r1].[RootEntityId] = [r4].[AssociateTypeRootEntityId] AND [r1].[Id] = [r4].[AssociateTypeId] +) AS [s] ON [r5].[Id] = [s].[RootEntityId] +ORDER BY [r].[Id], [r5].[Id], [s].[RootEntityId], [s].[Id], [s].[AssociateTypeRootEntityId], [s].[AssociateTypeId], [s].[AssociateTypeRootEntityId0], [s].[AssociateTypeId0], [s].[AssociateTypeRootEntityId1], [s].[AssociateTypeId1] +"""); + } + } + + public override async Task Select_subquery_required_related_FirstOrDefault(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_required_related_FirstOrDefault(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT [s].[AssociateTypeRootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) [r2].[AssociateTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] + FROM [RootEntity] AS [r0] + LEFT JOIN [RequiredRelated] AS [r1] ON [r0].[Id] = [r1].[RootEntityId] + LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r1].[RootEntityId] = [r2].[AssociateTypeRootEntityId] + ORDER BY [r0].[Id] +) AS [s] +"""); + } + } + + public override async Task Select_subquery_optional_related_FirstOrDefault(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_optional_related_FirstOrDefault(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT [s].[AssociateTypeRootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) [o0].[AssociateTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String] + FROM [RootEntity] AS [r0] + LEFT JOIN [OptionalRelated] AS [o] ON [r0].[Id] = [o].[RootEntityId] + LEFT JOIN [OptionalRelated_RequiredNested] AS [o0] ON [o].[RootEntityId] = [o0].[AssociateTypeRootEntityId] + ORDER BY [r0].[Id] +) AS [s] +"""); + } + } + + #endregion Subquery + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsSetOperationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsSetOperationsLibRedTest.cs new file mode 100644 index 00000000..e570401f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsSetOperationsLibRedTest.cs @@ -0,0 +1,132 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedNavigations; + +public class OwnedNavigationsSetOperationsLibRedTest( + OwnedNavigationsLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : OwnedNavigationsSetOperationsRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Over_associate_collections() + { + await base.Over_associate_collections(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`RootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r9`.`AssociateTypeRootEntityId`, `r9`.`Id`, `r9`.`Int`, `r9`.`Ints`, `r9`.`Name`, `r9`.`String`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`Id`, `r4`.`Int`, `r4`.`Ints`, `r4`.`Name`, `r4`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r2` ON `r`.`Id` = `r2`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r3` ON `r2`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r4` ON `r2`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r5`.`RootEntityId`, `r5`.`Id`, `r5`.`Int`, `r5`.`Ints`, `r5`.`Name`, `r5`.`String`, `r6`.`AssociateTypeRootEntityId`, `r6`.`AssociateTypeId`, `r7`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r7`.`AssociateTypeId` AS `AssociateTypeId0`, `r8`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r8`.`AssociateTypeId` AS `AssociateTypeId1`, `r8`.`Id` AS `Id0`, `r8`.`Int` AS `Int0`, `r8`.`Ints` AS `Ints0`, `r8`.`Name` AS `Name0`, `r8`.`String` AS `String0`, `r6`.`Id` AS `Id1`, `r6`.`Int` AS `Int1`, `r6`.`Ints` AS `Ints1`, `r6`.`Name` AS `Name1`, `r6`.`String` AS `String1`, `r7`.`Id` AS `Id2`, `r7`.`Int` AS `Int2`, `r7`.`Ints` AS `Ints2`, `r7`.`Name` AS `Name2`, `r7`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r5` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r6` ON `r5`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r5`.`Id` = `r6`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r7` ON `r5`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` AND `r5`.`Id` = `r7`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r8` ON `r5`.`RootEntityId` = `r8`.`AssociateTypeRootEntityId` AND `r5`.`Id` = `r8`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r9` ON `r2`.`RootEntityId` = `r9`.`AssociateTypeRootEntityId` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT 1 + FROM `RelatedCollection` AS `r0` + WHERE `r`.`Id` = `r0`.`RootEntityId` AND `r0`.`Int` = 8 + UNION ALL + SELECT 1 + FROM `RelatedCollection` AS `r1` + WHERE `r`.`Id` = `r1`.`RootEntityId` AND `r1`.`String` = 'foo' + ) AS `u`) = 4 +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`RootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r9`.`AssociateTypeRootEntityId` +"""); + } + + public override Task Over_associate_collection_projected(QueryTrackingBehavior queryTrackingBehavior) + => Assert.ThrowsAnyAsync(() => base.Over_associate_collection_projected(queryTrackingBehavior)); + + public override async Task Over_assocate_collection_Select_nested_with_aggregates_projected(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Over_assocate_collection_Select_nested_with_aggregates_projected(queryTrackingBehavior); + + AssertSql( + """ +SELECT ( + SELECT IIF(SUM(( + SELECT IIF(SUM(`r2`.`Int`) IS NULL, 0, SUM(`r2`.`Int`)) + FROM `RelatedCollection_NestedCollection` AS `r2` + WHERE `u`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId` AND `u`.`Id` = `r2`.`AssociateTypeId`)) IS NULL, 0, SUM(( + SELECT IIF(SUM(`r2`.`Int`) IS NULL, 0, SUM(`r2`.`Int`)) + FROM `RelatedCollection_NestedCollection` AS `r2` + WHERE `u`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId` AND `u`.`Id` = `r2`.`AssociateTypeId`))) + FROM ( + SELECT `r0`.`RootEntityId`, `r0`.`Id` + FROM `RelatedCollection` AS `r0` + WHERE `r`.`Id` = `r0`.`RootEntityId` AND `r0`.`Int` = 8 + UNION ALL + SELECT `r1`.`RootEntityId`, `r1`.`Id` + FROM `RelatedCollection` AS `r1` + WHERE `r`.`Id` = `r1`.`RootEntityId` AND `r1`.`String` = 'foo' + ) AS `u`) +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Over_nested_associate_collection() + { + await base.Over_nested_associate_collection(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r0`.`RootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r9`.`AssociateTypeRootEntityId`, `r9`.`Id`, `r9`.`Int`, `r9`.`Ints`, `r9`.`Name`, `r9`.`String`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`Id`, `r4`.`Int`, `r4`.`Ints`, `r4`.`Name`, `r4`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r3` ON `r0`.`RootEntityId` = `r3`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r4` ON `r0`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r5`.`RootEntityId`, `r5`.`Id`, `r5`.`Int`, `r5`.`Ints`, `r5`.`Name`, `r5`.`String`, `r6`.`AssociateTypeRootEntityId`, `r6`.`AssociateTypeId`, `r7`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r7`.`AssociateTypeId` AS `AssociateTypeId0`, `r8`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r8`.`AssociateTypeId` AS `AssociateTypeId1`, `r8`.`Id` AS `Id0`, `r8`.`Int` AS `Int0`, `r8`.`Ints` AS `Ints0`, `r8`.`Name` AS `Name0`, `r8`.`String` AS `String0`, `r6`.`Id` AS `Id1`, `r6`.`Int` AS `Int1`, `r6`.`Ints` AS `Ints1`, `r6`.`Name` AS `Name1`, `r6`.`String` AS `String1`, `r7`.`Id` AS `Id2`, `r7`.`Int` AS `Int2`, `r7`.`Ints` AS `Ints2`, `r7`.`Name` AS `Name2`, `r7`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r5` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r6` ON `r5`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r5`.`Id` = `r6`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r7` ON `r5`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` AND `r5`.`Id` = `r7`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r8` ON `r5`.`RootEntityId` = `r8`.`AssociateTypeRootEntityId` AND `r5`.`Id` = `r8`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r9` ON `r0`.`RootEntityId` = `r9`.`AssociateTypeRootEntityId` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT 1 + FROM `RequiredRelated_NestedCollection` AS `r1` + WHERE `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r1`.`Int` = 8 + UNION ALL + SELECT 1 + FROM `RequiredRelated_NestedCollection` AS `r2` + WHERE `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId` AND `r2`.`String` = 'foo' + ) AS `u`) = 4 +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r3`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r9`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Over_different_collection_properties() + { + await base.Over_different_collection_properties(); + + AssertSql(); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualityLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualityLibRedTest.cs new file mode 100644 index 00000000..32a7cfa0 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualityLibRedTest.cs @@ -0,0 +1,275 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedNavigations; + +public class OwnedNavigationsStructuralEqualityLibRedTest( + OwnedNavigationsLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : OwnedNavigationsStructuralEqualityRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Two_associates() + { + await base.Two_associates(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r0`.`RootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE FALSE +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Two_nested_associates() + { + await base.Two_nested_associates(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE FALSE +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Not_equals() + { + await base.Not_equals(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r0`.`RootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE FALSE +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Associate_with_inline_null() + { + await base.Associate_with_inline_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE `o`.`RootEntityId` IS NULL +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Associate_with_parameter_null() + { + await base.Associate_with_parameter_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE `o`.`RootEntityId` IS NULL +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Nested_associate_with_inline_null() + { + await base.Nested_associate_with_inline_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE `r1`.`AssociateTypeRootEntityId` IS NULL +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Nested_associate_with_inline() + { + await base.Nested_associate_with_inline(); + + AssertSql( + ); + } + + public override async Task Nested_associate_with_parameter() + { + await base.Nested_associate_with_parameter(); + + AssertSql( + ); + } + + public override async Task Two_nested_collections() + { + await base.Two_nested_collections(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`Id1`, `s`.`Int1`, `s`.`Ints1`, `s`.`Name1`, `s`.`String1`, `s`.`Id2`, `s`.`Int2`, `s`.`Ints2`, `s`.`Name2`, `s`.`String2`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `o2`.`Int`, `o2`.`Ints`, `o2`.`Name`, `o2`.`String`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `o1`.`Id`, `o1`.`Int`, `o1`.`Ints`, `o1`.`Name`, `o1`.`String`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r7`.`AssociateTypeRootEntityId`, `r7`.`Id`, `r7`.`Int`, `r7`.`Ints`, `r7`.`Name`, `r7`.`String`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String` +FROM ((((((((`RootEntity` AS `r` +LEFT JOIN `OptionalRelated` AS `o` ON `r`.`Id` = `o`.`RootEntityId`) +LEFT JOIN `OptionalRelated_OptionalNested` AS `o0` ON `o`.`RootEntityId` = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `OptionalRelated_RequiredNested` AS `o1` ON `o`.`RootEntityId` = `o1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RequiredRelated_OptionalNested` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_RequiredNested` AS `r2` ON `r0`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r5`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId0`, `r5`.`AssociateTypeId` AS `AssociateTypeId0`, `r6`.`AssociateTypeRootEntityId` AS `AssociateTypeRootEntityId1`, `r6`.`AssociateTypeId` AS `AssociateTypeId1`, `r6`.`Id` AS `Id0`, `r6`.`Int` AS `Int0`, `r6`.`Ints` AS `Ints0`, `r6`.`Name` AS `Name0`, `r6`.`String` AS `String0`, `r4`.`Id` AS `Id1`, `r4`.`Int` AS `Int1`, `r4`.`Ints` AS `Ints1`, `r4`.`Name` AS `Name1`, `r4`.`String` AS `String1`, `r5`.`Id` AS `Id2`, `r5`.`Int` AS `Int2`, `r5`.`Ints` AS `Ints2`, `r5`.`Name` AS `Name2`, `r5`.`String` AS `String2` + FROM ((`RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_OptionalNested` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_RequiredNested` AS `r5` ON `r3`.`RootEntityId` = `r5`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r5`.`AssociateTypeId`) + LEFT JOIN `RelatedCollection_NestedCollection` AS `r6` ON `r3`.`RootEntityId` = `r6`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r6`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o2` ON `o`.`RootEntityId` = `o2`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r7` ON `r0`.`RootEntityId` = `r7`.`AssociateTypeRootEntityId` +WHERE FALSE +ORDER BY `r`.`Id`, `o`.`RootEntityId`, `o0`.`AssociateTypeRootEntityId`, `o1`.`AssociateTypeRootEntityId`, `r0`.`RootEntityId`, `r1`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeRootEntityId`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`AssociateTypeRootEntityId0`, `s`.`AssociateTypeId0`, `s`.`AssociateTypeRootEntityId1`, `s`.`AssociateTypeId1`, `s`.`Id0`, `o2`.`AssociateTypeRootEntityId`, `o2`.`Id`, `r7`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Nested_collection_with_inline() + { + await base.Nested_collection_with_inline(); + + AssertSql(); + } + + public override async Task Nested_collection_with_parameter() + { + await base.Nested_collection_with_parameter(); + + AssertSql(); + } + + #region Contains + + public override async Task Contains_with_inline() + { + await base.Contains_with_inline(); + + AssertSql(); + } + + public override async Task Contains_with_parameter() + { + await base.Contains_with_parameter(); + + AssertSql(); + } + + public override async Task Contains_with_operators_composed_on_the_collection() + { + await base.Contains_with_operators_composed_on_the_collection(); + + AssertSql(); + } + + public override async Task Contains_with_nested_and_composed_operators() + { + await base.Contains_with_nested_and_composed_operators(); + + AssertSql(); + } + + #endregion Contains + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingLibRedFixture.cs new file mode 100644 index 00000000..c117a968 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingLibRedFixture.cs @@ -0,0 +1,11 @@ +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedTableSplitting; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedTableSplitting; + +public class OwnedTableSplittingLibRedFixture : OwnedTableSplittingRelationalFixtureBase +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingMiscellaneousLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingMiscellaneousLibRedTest.cs new file mode 100644 index 00000000..cb906d6f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingMiscellaneousLibRedTest.cs @@ -0,0 +1,104 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedTableSplitting; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedTableSplitting; + +public class OwnedTableSplittingMiscellaneousLibRedTest( + OwnedTableSplittingLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : OwnedTableSplittingMiscellaneousRelationalTestBase(fixture, testOutputHelper) +{ + #region Simple filters + + public override async Task Where_on_associate_scalar_property() + { + await base.Where_on_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE `r`.`RequiredAssociate_Int` = 8 +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Where_on_optional_associate_scalar_property() + { + await base.Where_on_optional_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE `r`.`OptionalAssociate_Int` = 8 +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Where_on_nested_associate_scalar_property() + { + await base.Where_on_nested_associate_scalar_property(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE `r`.`RequiredAssociate_RequiredNestedAssociate_Int` = 8 +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + #endregion Simple filters + + public override async Task FromSql_on_root() + { + await base.FromSql_on_root(); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`Name`, `r`.`Id`, `r0`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r0`.`RequiredAssociate_Id`, `r0`.`RequiredAssociate_Int`, `r0`.`RequiredAssociate_Ints`, `r0`.`RequiredAssociate_Name`, `r0`.`RequiredAssociate_String`, `r3`.`AssociateTypeRootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r0`.`RequiredAssociate_OptionalNestedAssociate_String`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r0`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((((( + SELECT * FROM `RootEntity` +) AS `m` +LEFT JOIN `RootEntity` AS `r` ON `m`.`Id` = `r`.`Id`) +LEFT JOIN `RootEntity` AS `r0` ON `m`.`Id` = `r0`.`Id`) +LEFT JOIN ( + SELECT `r1`.`RootEntityId`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`AssociateTypeId`, `r2`.`Id` AS `Id0`, `r2`.`Int` AS `Int0`, `r2`.`Ints` AS `Ints0`, `r2`.`Name` AS `Name0`, `r2`.`String` AS `String0`, `r1`.`OptionalNestedAssociate_Id`, `r1`.`OptionalNestedAssociate_Int`, `r1`.`OptionalNestedAssociate_Ints`, `r1`.`OptionalNestedAssociate_Name`, `r1`.`OptionalNestedAssociate_String`, `r1`.`RequiredNestedAssociate_Id`, `r1`.`RequiredNestedAssociate_Int`, `r1`.`RequiredNestedAssociate_Ints`, `r1`.`RequiredNestedAssociate_Name`, `r1`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r1` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r2` ON `r1`.`RootEntityId` = `r2`.`AssociateTypeRootEntityId` AND `r1`.`Id` = `r2`.`AssociateTypeId` +) AS `s` ON `m`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r3` ON `r0`.`Id` = `r3`.`AssociateTypeRootEntityId` +ORDER BY `m`.`Id`, `r`.`Id`, `r0`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r3`.`AssociateTypeRootEntityId` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingProjectionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingProjectionLibRedTest.cs new file mode 100644 index 00000000..67a5a700 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingProjectionLibRedTest.cs @@ -0,0 +1,420 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedTableSplitting; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedTableSplitting; + +public class OwnedTableSplittingProjectionLibRedTest(OwnedTableSplittingLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : OwnedTableSplittingProjectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Select_root(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_root(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + #region Scalar properties + + public override async Task Select_scalar_property_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_scalar_property_on_required_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`RequiredAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_property_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_property_on_optional_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`OptionalAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_value_type_property_on_null_associate_throws(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_value_type_property_on_null_associate_throws(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`OptionalAssociate_Int` +FROM `RootEntity` AS `r` +"""); + } + + public override async Task Select_nullable_value_type_property_on_null_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nullable_value_type_property_on_null_associate(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`OptionalAssociate_Int` +FROM `RootEntity` AS `r` +"""); + } + + #endregion Scalar properties + + #region Structural properties + + public override async Task Select_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r0`.`AssociateTypeRootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +LEFT JOIN `RequiredRelated_NestedCollection` AS `r0` ON `r`.`Id` = `r0`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `r0`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `o`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_required_nested_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_nested_on_required_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + } + + public override async Task Select_optional_nested_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_nested_on_required_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + } + + public override async Task Select_required_nested_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_nested_on_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + } + + public override async Task Select_optional_nested_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_optional_nested_on_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String` +FROM `RootEntity` AS `r` +"""); + } + } + + public override async Task Select_required_associate_via_optional_navigation(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_required_associate_via_optional_navigation(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r0`.`Id`, `r0`.`RequiredAssociate_Id`, `r0`.`RequiredAssociate_Int`, `r0`.`RequiredAssociate_Ints`, `r0`.`RequiredAssociate_Name`, `r0`.`RequiredAssociate_String`, `r`.`Id`, `r1`.`AssociateTypeRootEntityId`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r0`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r0`.`RequiredAssociate_OptionalNestedAssociate_String`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r0`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r0`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM (`RootReferencingEntity` AS `r` +LEFT JOIN `RootEntity` AS `r0` ON `r`.`RootEntityId` = `r0`.`Id`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r1` ON `r0`.`Id` = `r1`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `r0`.`Id`, `r1`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_unmapped_associate_scalar_property(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_unmapped_associate_scalar_property(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r0`.`AssociateTypeRootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +LEFT JOIN `RequiredRelated_NestedCollection` AS `r0` ON `r`.`Id` = `r0`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `r0`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_untranslatable_method_on_associate_scalar_property(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_untranslatable_method_on_associate_scalar_property(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`RequiredAssociate_Int` +FROM `RootEntity` AS `r` +"""); + } + + #endregion Structural properties + + #region Structural collection properties + + public override async Task Select_associate_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_associate_collection(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String` +FROM `RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId` +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId` +"""); + } + } + + public override async Task Select_nested_collection_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nested_collection_on_required_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `r0`.`AssociateTypeRootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String` +FROM `RootEntity` AS `r` +LEFT JOIN `RequiredRelated_NestedCollection` AS `r0` ON `r`.`Id` = `r0`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `r0`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task Select_nested_collection_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_nested_collection_on_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r`.`Id`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String` +FROM `RootEntity` AS `r` +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `o`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task SelectMany_associate_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_associate_collection(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r`.`Id`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id`, `r1`.`Int`, `r1`.`Ints`, `r1`.`Name`, `r1`.`String`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` +FROM (`RootEntity` AS `r` +INNER JOIN `RelatedCollection` AS `r0` ON `r`.`Id` = `r0`.`RootEntityId`) +LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +ORDER BY `r`.`Id`, `r0`.`RootEntityId`, `r0`.`Id`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId` +"""); + } + } + + public override async Task SelectMany_nested_collection_on_required_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_nested_collection_on_required_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `r0`.`AssociateTypeRootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String` +FROM `RootEntity` AS `r` +INNER JOIN `RequiredRelated_NestedCollection` AS `r0` ON `r`.`Id` = `r0`.`AssociateTypeRootEntityId` +"""); + } + } + + public override async Task SelectMany_nested_collection_on_optional_associate(QueryTrackingBehavior queryTrackingBehavior) + { + await base.SelectMany_nested_collection_on_optional_associate(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String` +FROM `RootEntity` AS `r` +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId` +WHERE `o`.`AssociateTypeRootEntityId` IS NOT NULL +"""); + } + } + + #endregion Structural collection properties + + #region Multiple + + public override async Task Select_root_duplicated(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_root_duplicated(queryTrackingBehavior); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String`, `s0`.`RootEntityId`, `s0`.`Id`, `s0`.`Int`, `s0`.`Ints`, `s0`.`Name`, `s0`.`String`, `s0`.`AssociateTypeRootEntityId`, `s0`.`AssociateTypeId`, `s0`.`Id0`, `s0`.`Int0`, `s0`.`Ints0`, `s0`.`Name0`, `s0`.`String0`, `s0`.`OptionalNestedAssociate_Id`, `s0`.`OptionalNestedAssociate_Int`, `s0`.`OptionalNestedAssociate_Ints`, `s0`.`OptionalNestedAssociate_Name`, `s0`.`OptionalNestedAssociate_String`, `s0`.`RequiredNestedAssociate_Id`, `s0`.`RequiredNestedAssociate_Int`, `s0`.`RequiredNestedAssociate_Ints`, `s0`.`RequiredNestedAssociate_Name`, `s0`.`RequiredNestedAssociate_String`, `o0`.`AssociateTypeRootEntityId`, `o0`.`Id`, `o0`.`Int`, `o0`.`Ints`, `o0`.`Name`, `o0`.`String`, `r5`.`AssociateTypeRootEntityId`, `r5`.`Id`, `r5`.`Int`, `r5`.`Ints`, `r5`.`Name`, `r5`.`String` +FROM (((((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId`) +LEFT JOIN ( + SELECT `r3`.`RootEntityId`, `r3`.`Id`, `r3`.`Int`, `r3`.`Ints`, `r3`.`Name`, `r3`.`String`, `r4`.`AssociateTypeRootEntityId`, `r4`.`AssociateTypeId`, `r4`.`Id` AS `Id0`, `r4`.`Int` AS `Int0`, `r4`.`Ints` AS `Ints0`, `r4`.`Name` AS `Name0`, `r4`.`String` AS `String0`, `r3`.`OptionalNestedAssociate_Id`, `r3`.`OptionalNestedAssociate_Int`, `r3`.`OptionalNestedAssociate_Ints`, `r3`.`OptionalNestedAssociate_Name`, `r3`.`OptionalNestedAssociate_String`, `r3`.`RequiredNestedAssociate_Id`, `r3`.`RequiredNestedAssociate_Int`, `r3`.`RequiredNestedAssociate_Ints`, `r3`.`RequiredNestedAssociate_Name`, `r3`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r3` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r4` ON `r3`.`RootEntityId` = `r4`.`AssociateTypeRootEntityId` AND `r3`.`Id` = `r4`.`AssociateTypeId` +) AS `s0` ON `r`.`Id` = `s0`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o0` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o0`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r5` ON `r`.`Id` = `r5`.`AssociateTypeRootEntityId` +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `s0`.`RootEntityId`, `s0`.`Id`, `s0`.`AssociateTypeRootEntityId`, `s0`.`AssociateTypeId`, `s0`.`Id0`, `o0`.`AssociateTypeRootEntityId`, `o0`.`Id`, `r5`.`AssociateTypeRootEntityId` +"""); + } + + #endregion Multiple + + #region Subquery + + public override async Task Select_subquery_FirstOrDefault_complex_collection(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_FirstOrDefault_complex_collection(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT [r].[Id], [r3].[Id], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[AssociateTypeRootEntityId], [s].[AssociateTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNestedAssociate_Id], [s].[OptionalNestedAssociate_Int], [s].[OptionalNestedAssociate_Ints], [s].[OptionalNestedAssociate_Name], [s].[OptionalNestedAssociate_String], [s].[RequiredNestedAssociate_Id], [s].[RequiredNestedAssociate_Int], [s].[RequiredNestedAssociate_Ints], [s].[RequiredNestedAssociate_Name], [s].[RequiredNestedAssociate_String], [r3].[c] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) 1 AS [c], [r0].[Id] + FROM [RootEntity] AS [r0] + ORDER BY [r0].[Id] +) AS [r3] +LEFT JOIN ( + SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[AssociateTypeRootEntityId], [r2].[AssociateTypeId], [r2].[Id] AS [Id0], [r2].[Int] AS [Int0], [r2].[Ints] AS [Ints0], [r2].[Name] AS [Name0], [r2].[String] AS [String0], [r1].[OptionalNestedAssociate_Id], [r1].[OptionalNestedAssociate_Int], [r1].[OptionalNestedAssociate_Ints], [r1].[OptionalNestedAssociate_Name], [r1].[OptionalNestedAssociate_String], [r1].[RequiredNestedAssociate_Id], [r1].[RequiredNestedAssociate_Int], [r1].[RequiredNestedAssociate_Ints], [r1].[RequiredNestedAssociate_Name], [r1].[RequiredNestedAssociate_String] + FROM [RelatedCollection] AS [r1] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r2] ON [r1].[RootEntityId] = [r2].[AssociateTypeRootEntityId] AND [r1].[Id] = [r2].[AssociateTypeId] +) AS [s] ON [r3].[Id] = [s].[RootEntityId] +ORDER BY [r].[Id], [r3].[Id], [s].[RootEntityId], [s].[Id], [s].[AssociateTypeRootEntityId], [s].[AssociateTypeId] +"""); + } + } + + public override async Task Select_subquery_required_related_FirstOrDefault(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_required_related_FirstOrDefault(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT [r1].[Id], [r1].[RequiredAssociate_RequiredNestedAssociate_Id], [r1].[RequiredAssociate_RequiredNestedAssociate_Int], [r1].[RequiredAssociate_RequiredNestedAssociate_Ints], [r1].[RequiredAssociate_RequiredNestedAssociate_Name], [r1].[RequiredAssociate_RequiredNestedAssociate_String] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) [r0].[Id], [r0].[RequiredAssociate_RequiredNestedAssociate_Id], [r0].[RequiredAssociate_RequiredNestedAssociate_Int], [r0].[RequiredAssociate_RequiredNestedAssociate_Ints], [r0].[RequiredAssociate_RequiredNestedAssociate_Name], [r0].[RequiredAssociate_RequiredNestedAssociate_String] + FROM [RootEntity] AS [r0] + ORDER BY [r0].[Id] +) AS [r1] +"""); + } + } + + public override async Task Select_subquery_optional_related_FirstOrDefault(QueryTrackingBehavior queryTrackingBehavior) + { + await base.Select_subquery_optional_related_FirstOrDefault(queryTrackingBehavior); + + if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) + { + AssertSql( + """ +SELECT [r1].[Id], [r1].[OptionalAssociate_RequiredNestedAssociate_Id], [r1].[OptionalAssociate_RequiredNestedAssociate_Int], [r1].[OptionalAssociate_RequiredNestedAssociate_Ints], [r1].[OptionalAssociate_RequiredNestedAssociate_Name], [r1].[OptionalAssociate_RequiredNestedAssociate_String] +FROM [RootEntity] AS [r] +OUTER APPLY ( + SELECT TOP(1) [r0].[Id], [r0].[OptionalAssociate_RequiredNestedAssociate_Id], [r0].[OptionalAssociate_RequiredNestedAssociate_Int], [r0].[OptionalAssociate_RequiredNestedAssociate_Ints], [r0].[OptionalAssociate_RequiredNestedAssociate_Name], [r0].[OptionalAssociate_RequiredNestedAssociate_String] + FROM [RootEntity] AS [r0] + ORDER BY [r0].[Id] +) AS [r1] +"""); + } + } + + #endregion Subquery + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualityLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualityLibRedTest.cs new file mode 100644 index 00000000..f9c30277 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualityLibRedTest.cs @@ -0,0 +1,219 @@ +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedTableSplitting; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Associations.OwnedTableSplitting; + +public class OwnedTableSplittingStructuralEqualityLibRedTest( + OwnedTableSplittingLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : OwnedTableSplittingStructuralEqualityRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Two_associates() + { + await base.Two_associates(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE FALSE +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Two_nested_associates() + { + await base.Two_nested_associates(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE FALSE +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Not_equals() + { + await base.Not_equals(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE FALSE +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Associate_with_inline_null() + { + await base.Associate_with_inline_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE `r`.`OptionalAssociate_Id` IS NULL OR `r`.`OptionalAssociate_Int` IS NULL OR `r`.`OptionalAssociate_Ints` IS NULL OR `r`.`OptionalAssociate_Name` IS NULL OR `r`.`OptionalAssociate_String` IS NULL +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Associate_with_parameter_null() + { + await base.Associate_with_parameter_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) IS NULL +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Nested_associate_with_inline_null() + { + await base.Nested_associate_with_inline_null(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE `r`.`RequiredAssociate_OptionalNestedAssociate_Id` IS NULL OR `r`.`RequiredAssociate_OptionalNestedAssociate_Int` IS NULL OR `r`.`RequiredAssociate_OptionalNestedAssociate_Ints` IS NULL OR `r`.`RequiredAssociate_OptionalNestedAssociate_Name` IS NULL OR `r`.`RequiredAssociate_OptionalNestedAssociate_String` IS NULL +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Nested_associate_with_inline() + { + await base.Nested_associate_with_inline(); + + AssertSql( + ); + } + + public override async Task Nested_associate_with_parameter() + { + await base.Nested_associate_with_parameter(); + + AssertSql( + ); + } + + public override async Task Two_nested_collections() + { + await base.Two_nested_collections(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`RootEntityId`, `s`.`Id`, `s`.`Int`, `s`.`Ints`, `s`.`Name`, `s`.`String`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `s`.`Int0`, `s`.`Ints0`, `s`.`Name0`, `s`.`String0`, `s`.`OptionalNestedAssociate_Id`, `s`.`OptionalNestedAssociate_Int`, `s`.`OptionalNestedAssociate_Ints`, `s`.`OptionalNestedAssociate_Name`, `s`.`OptionalNestedAssociate_String`, `s`.`RequiredNestedAssociate_Id`, `s`.`RequiredNestedAssociate_Int`, `s`.`RequiredNestedAssociate_Ints`, `s`.`RequiredNestedAssociate_Name`, `s`.`RequiredNestedAssociate_String`, `r`.`OptionalAssociate_Id`, `r`.`OptionalAssociate_Int`, `r`.`OptionalAssociate_Ints`, `r`.`OptionalAssociate_Name`, `r`.`OptionalAssociate_String`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `o`.`Int`, `o`.`Ints`, `o`.`Name`, `o`.`String`, `r`.`OptionalAssociate_OptionalNestedAssociate_Id`, `r`.`OptionalAssociate_OptionalNestedAssociate_Int`, `r`.`OptionalAssociate_OptionalNestedAssociate_Ints`, `r`.`OptionalAssociate_OptionalNestedAssociate_Name`, `r`.`OptionalAssociate_OptionalNestedAssociate_String`, `r`.`OptionalAssociate_RequiredNestedAssociate_Id`, `r`.`OptionalAssociate_RequiredNestedAssociate_Int`, `r`.`OptionalAssociate_RequiredNestedAssociate_Ints`, `r`.`OptionalAssociate_RequiredNestedAssociate_Name`, `r`.`OptionalAssociate_RequiredNestedAssociate_String`, `r`.`RequiredAssociate_Id`, `r`.`RequiredAssociate_Int`, `r`.`RequiredAssociate_Ints`, `r`.`RequiredAssociate_Name`, `r`.`RequiredAssociate_String`, `r2`.`AssociateTypeRootEntityId`, `r2`.`Id`, `r2`.`Int`, `r2`.`Ints`, `r2`.`Name`, `r2`.`String`, `r`.`RequiredAssociate_OptionalNestedAssociate_Id`, `r`.`RequiredAssociate_OptionalNestedAssociate_Int`, `r`.`RequiredAssociate_OptionalNestedAssociate_Ints`, `r`.`RequiredAssociate_OptionalNestedAssociate_Name`, `r`.`RequiredAssociate_OptionalNestedAssociate_String`, `r`.`RequiredAssociate_RequiredNestedAssociate_Id`, `r`.`RequiredAssociate_RequiredNestedAssociate_Int`, `r`.`RequiredAssociate_RequiredNestedAssociate_Ints`, `r`.`RequiredAssociate_RequiredNestedAssociate_Name`, `r`.`RequiredAssociate_RequiredNestedAssociate_String` +FROM ((`RootEntity` AS `r` +LEFT JOIN ( + SELECT `r0`.`RootEntityId`, `r0`.`Id`, `r0`.`Int`, `r0`.`Ints`, `r0`.`Name`, `r0`.`String`, `r1`.`AssociateTypeRootEntityId`, `r1`.`AssociateTypeId`, `r1`.`Id` AS `Id0`, `r1`.`Int` AS `Int0`, `r1`.`Ints` AS `Ints0`, `r1`.`Name` AS `Name0`, `r1`.`String` AS `String0`, `r0`.`OptionalNestedAssociate_Id`, `r0`.`OptionalNestedAssociate_Int`, `r0`.`OptionalNestedAssociate_Ints`, `r0`.`OptionalNestedAssociate_Name`, `r0`.`OptionalNestedAssociate_String`, `r0`.`RequiredNestedAssociate_Id`, `r0`.`RequiredNestedAssociate_Int`, `r0`.`RequiredNestedAssociate_Ints`, `r0`.`RequiredNestedAssociate_Name`, `r0`.`RequiredNestedAssociate_String` + FROM `RelatedCollection` AS `r0` + LEFT JOIN `RelatedCollection_NestedCollection` AS `r1` ON `r0`.`RootEntityId` = `r1`.`AssociateTypeRootEntityId` AND `r0`.`Id` = `r1`.`AssociateTypeId` +) AS `s` ON `r`.`Id` = `s`.`RootEntityId`) +LEFT JOIN `OptionalRelated_NestedCollection` AS `o` ON IIF(`r`.`OptionalAssociate_Id` IS NOT NULL AND `r`.`OptionalAssociate_Int` IS NOT NULL AND `r`.`OptionalAssociate_Ints` IS NOT NULL AND `r`.`OptionalAssociate_Name` IS NOT NULL AND `r`.`OptionalAssociate_String` IS NOT NULL, `r`.`Id`, NULL) = `o`.`AssociateTypeRootEntityId`) +LEFT JOIN `RequiredRelated_NestedCollection` AS `r2` ON `r`.`Id` = `r2`.`AssociateTypeRootEntityId` +WHERE FALSE +ORDER BY `r`.`Id`, `s`.`RootEntityId`, `s`.`Id`, `s`.`AssociateTypeRootEntityId`, `s`.`AssociateTypeId`, `s`.`Id0`, `o`.`AssociateTypeRootEntityId`, `o`.`Id`, `r2`.`AssociateTypeRootEntityId` +"""); + } + + public override async Task Nested_collection_with_inline() + { + await base.Nested_collection_with_inline(); + + AssertSql(); + } + + public override async Task Nested_collection_with_parameter() + { + await base.Nested_collection_with_parameter(); + + AssertSql(); + } + + #region Contains + + public override async Task Contains_with_inline() + { + await base.Contains_with_inline(); + + AssertSql(); + } + + public override async Task Contains_with_parameter() + { + await base.Contains_with_parameter(); + + AssertSql(); + } + + public override async Task Contains_with_operators_composed_on_the_collection() + { + await base.Contains_with_operators_composed_on_the_collection(); + + AssertSql(); + } + + public override async Task Contains_with_nested_and_composed_operators() + { + await base.Contains_with_nested_and_composed_operators(); + + AssertSql(); + } + + #endregion Contains + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsCollectionsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsCollectionsQueryLibRedTest.cs new file mode 100644 index 00000000..ef6af402 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsCollectionsQueryLibRedTest.cs @@ -0,0 +1,3000 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class ComplexNavigationsCollectionsQueryLibRedTest + : ComplexNavigationsCollectionsQueryRelationalTestBase +{ + public ComplexNavigationsCollectionsQueryLibRedTest( + ComplexNavigationsQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(bool async) + { + await base.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` +"""); + } + + public override async Task + Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(bool async) + { + await base + .Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s0`.`Id`, `s0`.`Date`, `s0`.`Level1_Optional_Id`, `s0`.`Level1_Required_Id`, `s0`.`Name`, `s0`.`OneToMany_Optional_Inverse2Id`, `s0`.`OneToMany_Optional_Self_Inverse2Id`, `s0`.`OneToMany_Required_Inverse2Id`, `s0`.`OneToMany_Required_Self_Inverse2Id`, `s0`.`OneToOne_Optional_PK_Inverse2Id`, `s0`.`OneToOne_Optional_Self2Id`, `s0`.`Id0`, `s0`.`Level2_Optional_Id`, `s0`.`Level2_Required_Id`, `s0`.`Name0`, `s0`.`OneToMany_Optional_Inverse3Id`, `s0`.`OneToMany_Optional_Self_Inverse3Id`, `s0`.`OneToMany_Required_Inverse3Id`, `s0`.`OneToMany_Required_Self_Inverse3Id`, `s0`.`OneToOne_Optional_PK_Inverse3Id`, `s0`.`OneToOne_Optional_Self3Id`, `s0`.`Id00`, `s0`.`Date0`, `s0`.`Level1_Optional_Id0`, `s0`.`Level1_Required_Id0`, `s0`.`Name00`, `s0`.`OneToMany_Optional_Inverse2Id0`, `s0`.`OneToMany_Optional_Self_Inverse2Id0`, `s0`.`OneToMany_Required_Inverse2Id0`, `s0`.`OneToMany_Required_Self_Inverse2Id0`, `s0`.`OneToOne_Optional_PK_Inverse2Id0`, `s0`.`OneToOne_Optional_Self2Id0`, `s0`.`Id1`, `s0`.`Level2_Optional_Id0`, `s0`.`Level2_Required_Id0`, `s0`.`Name1`, `s0`.`OneToMany_Optional_Inverse3Id0`, `s0`.`OneToMany_Optional_Self_Inverse3Id0`, `s0`.`OneToMany_Required_Inverse3Id0`, `s0`.`OneToMany_Required_Self_Inverse3Id0`, `s0`.`OneToOne_Optional_PK_Inverse3Id0`, `s0`.`OneToOne_Optional_Self3Id0` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `s`.`Id` AS `Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name` AS `Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0` AS `Id00`, `s`.`Date` AS `Date0`, `s`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `s`.`Level1_Required_Id` AS `Level1_Required_Id0`, `s`.`Name0` AS `Name00`, `s`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0`, `s`.`Id1`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0` + FROM `LevelTwo` AS `l0` + LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id1`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name1`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0` + FROM (`LevelThree` AS `l1` + INNER JOIN `LevelTwo` AS `l2` ON `l1`.`OneToMany_Required_Inverse3Id` = `l2`.`Id`) + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Optional_Inverse3Id` + ) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +) AS `s0` ON `l`.`Id` = `s0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id00` +"""); + } + + public override async Task Multiple_complex_includes(bool async) + { + await base.Multiple_complex_includes(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Multiple_complex_includes_self_ref(bool async) + { + await base.Multiple_complex_includes_self_ref(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Name0`, `s`.`OneToMany_Optional_Self_Inverse1Id0`, `s`.`OneToMany_Required_Self_Inverse1Id0`, `s`.`OneToOne_Optional_Self1Id0` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Self_Inverse1Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id`, `l3`.`Id` AS `Id0`, `l3`.`Date` AS `Date0`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l3`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l3`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` + FROM `LevelOne` AS `l2` + LEFT JOIN `LevelOne` AS `l3` ON `l2`.`OneToOne_Optional_Self1Id` = `l3`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Self_Inverse1Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_reference_and_collection_order_by(bool async) + { + await base.Include_reference_and_collection_order_by(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_reference_ThenInclude_collection_order_by(bool async) + { + await base.Include_reference_ThenInclude_collection_order_by(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_collection_then_reference(bool async) + { + await base.Include_collection_then_reference(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_collection_with_conditional_order_by(bool async) + { + await base.Include_collection_with_conditional_order_by(async); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY IIF(`l`.`Name` LIKE '%03', 1, 2), `l`.`Id` +"""); + } + + public override async Task Multiple_complex_include_select(bool async) + { + await base.Multiple_complex_include_select(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_nested_with_optional_navigation(bool async) + { + await base.Include_nested_with_optional_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + FROM `LevelThree` AS `l1` + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Required_Inverse3Id` +WHERE `l0`.`Name` <> 'L2 09' OR `l0`.`Name` IS NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `s`.`Id` +"""); + } + + public override async Task Complex_multi_include_with_order_by_and_paging(bool async) + { + await base.Complex_multi_include_with_order_by_and_paging(async); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` +FROM ((( + SELECT TOP @p1 `l4`.`Id`, `l4`.`Date`, `l4`.`Name`, `l4`.`OneToMany_Optional_Self_Inverse1Id`, `l4`.`OneToMany_Required_Self_Inverse1Id`, `l4`.`OneToOne_Optional_Self1Id` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`OneToMany_Required_Inverse3Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(bool async) + { + await base.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l4`.`Id`, `l4`.`Level2_Optional_Id`, `l4`.`Level2_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse3Id`, `l4`.`OneToMany_Optional_Self_Inverse3Id`, `l4`.`OneToMany_Required_Inverse3Id`, `l4`.`OneToMany_Required_Self_Inverse3Id`, `l4`.`OneToOne_Optional_PK_Inverse3Id`, `l4`.`OneToOne_Optional_Self3Id` +FROM (((( + SELECT TOP @p1 `l5`.`Id`, `l5`.`Date`, `l5`.`Name`, `l5`.`OneToMany_Optional_Self_Inverse1Id`, `l5`.`OneToMany_Required_Self_Inverse1Id`, `l5`.`OneToOne_Optional_Self1Id` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l5` + ORDER BY `l5`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l4` ON `l2`.`Id` = `l4`.`OneToMany_Required_Inverse3Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id`, `l3`.`Id` +"""); + } + + public override async Task Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(bool async) + { + await base.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id` +FROM ((( + SELECT TOP @p1 `l4`.`Id`, `l4`.`Date`, `l4`.`Name`, `l4`.`OneToMany_Optional_Self_Inverse1Id`, `l4`.`OneToMany_Required_Self_Inverse1Id`, `l4`.`OneToOne_Optional_Self1Id` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Multiple_include_with_multiple_optional_navigations(bool async) + { + await base.Multiple_include_with_multiple_optional_navigations(async); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l2`.`Id`, `l3`.`Id`, `l4`.`Id`, `l5`.`Id`, `l5`.`Level2_Optional_Id`, `l5`.`Level2_Required_Id`, `l5`.`Name`, `l5`.`OneToMany_Optional_Inverse3Id`, `l5`.`OneToMany_Optional_Self_Inverse3Id`, `l5`.`OneToMany_Required_Inverse3Id`, `l5`.`OneToMany_Required_Self_Inverse3Id`, `l5`.`OneToOne_Optional_PK_Inverse3Id`, `l5`.`OneToOne_Optional_Self3Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Optional_Self_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToMany_Required_Self_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l3`.`OneToOne_Optional_Self2Id`, `l4`.`Level2_Optional_Id`, `l4`.`Level2_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse3Id`, `l4`.`OneToMany_Optional_Self_Inverse3Id`, `l4`.`OneToMany_Required_Inverse3Id`, `l4`.`OneToMany_Required_Self_Inverse3Id`, `l4`.`OneToOne_Optional_PK_Inverse3Id`, `l4`.`OneToOne_Optional_Self3Id` +FROM (((((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l3` ON `l`.`Id` = `l3`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l4` ON `l3`.`Id` = `l4`.`Level2_Optional_Id`) +LEFT JOIN `LevelThree` AS `l5` ON `l0`.`Id` = `l5`.`OneToMany_Optional_Inverse3Id` +WHERE `l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `l3`.`Id`, `l4`.`Id` +"""); + } + + public override async Task SelectMany_with_Include1(bool async) + { + await base.SelectMany_with_Include1(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Orderby_SelectMany_with_Include1(bool async) + { + await base.Orderby_SelectMany_with_Include1(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task SelectMany_with_Include2(bool async) + { + await base.SelectMany_with_Include2(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +"""); + } + + public override async Task SelectMany_with_Include_ThenInclude(bool async) + { + await base.SelectMany_with_Include_ThenInclude(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Multiple_SelectMany_with_Include(bool async) + { + await base.Multiple_SelectMany_with_Include(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id` +FROM (((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l1`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Required_navigation_with_Include(bool async) + { + await base.Required_navigation_with_Include(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id` +FROM (`LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`OneToMany_Required_Inverse2Id` = `l1`.`Id` +WHERE `l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL +"""); + } + + public override async Task Required_navigation_with_Include_ThenInclude(bool async) + { + await base.Required_navigation_with_Include_ThenInclude(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id` +FROM ((`LevelFour` AS `l` +INNER JOIN `LevelThree` AS `l0` ON `l`.`Level3_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`OneToMany_Required_Inverse3Id` = `l1`.`Id`) +LEFT JOIN `LevelOne` AS `l2` ON `l1`.`OneToMany_Optional_Inverse2Id` = `l2`.`Id` +WHERE `l0`.`OneToMany_Required_Inverse3Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL +"""); + } + + public override async Task Optional_navigation_with_Include_ThenInclude(bool async) + { + await base.Optional_navigation_with_Include_ThenInclude(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + FROM `LevelThree` AS `l1` + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `s`.`Id` +"""); + } + + public override async Task Optional_navigation_with_order_by_and_Include(bool async) + { + await base.Optional_navigation_with_order_by_and_Include(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Optional_navigation_with_Include_and_order(bool async) + { + await base.Optional_navigation_with_Include_and_order(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task SelectMany_with_order_by_and_Include(bool async) + { + await base.SelectMany_with_order_by_and_Include(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task SelectMany_with_Include_and_order_by(bool async) + { + await base.SelectMany_with_Include_and_order_by(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task SelectMany_with_navigation_and_Distinct(bool async) + { + await base.SelectMany_with_navigation_and_Distinct(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` +FROM (`LevelOne` AS `l` +INNER JOIN ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` +"""); + } + + public override async Task SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(bool async) + { + await base.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` +FROM (`LevelOne` AS `l` +INNER JOIN ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` AS `FK` + FROM `LevelTwo` AS `l0` +) AS `l1` ON `l`.`Id` = `l1`.`FK`) +LEFT JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` +"""); + } + + public override async Task + Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(bool async) + { + await base.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top( + async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l16`.`Id`, `l16`.`Date`, `l16`.`Level1_Optional_Id`, `l16`.`Level1_Required_Id`, `l16`.`Name`, `l16`.`OneToMany_Optional_Inverse2Id`, `l16`.`OneToMany_Optional_Self_Inverse2Id`, `l16`.`OneToMany_Required_Inverse2Id`, `l16`.`OneToMany_Required_Self_Inverse2Id`, `l16`.`OneToOne_Optional_PK_Inverse2Id`, `l16`.`OneToOne_Optional_Self2Id`, `l14`.`Name` +FROM (((((((((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse4Id`) +LEFT JOIN ( + SELECT `l3`.`Id`, `l4`.`Id` AS `Id0`, `l5`.`Id` AS `Id1`, `l6`.`Id` AS `Id2` + FROM ((`LevelFour` AS `l3` + INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) + LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) + LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` +) AS `s` ON `l2`.`Id` = `s`.`Id2`) +LEFT JOIN ( + SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` + FROM ((`LevelFour` AS `l7` + INNER JOIN `LevelThree` AS `l8` ON `l7`.`Level3_Required_Id` = `l8`.`Id`) + LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) + LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` + WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) +LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id`) +LEFT JOIN ( + SELECT `l15`.`Id`, `l15`.`Date`, `l15`.`Level1_Optional_Id`, `l15`.`Level1_Required_Id`, `l15`.`Name`, `l15`.`OneToMany_Optional_Inverse2Id`, `l15`.`OneToMany_Optional_Self_Inverse2Id`, `l15`.`OneToMany_Required_Inverse2Id`, `l15`.`OneToMany_Required_Self_Inverse2Id`, `l15`.`OneToOne_Optional_PK_Inverse2Id`, `l15`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l15` + WHERE `l15`.`Id` <> 42 +) AS `l16` ON `s`.`Id2` = `l16`.`OneToMany_Optional_Self_Inverse2Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +"""); + } + + public override async Task Project_collection_navigation(bool async) + { + await base.Project_collection_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Project_collection_navigation_nested(bool async) + { + await base.Project_collection_navigation_nested(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Project_collection_navigation_using_ef_property(bool async) + { + await base.Project_collection_navigation_using_ef_property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Project_collection_navigation_nested_anonymous(bool async) + { + await base.Project_collection_navigation_nested_anonymous(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Project_collection_navigation_composed(bool async) + { + await base.Project_collection_navigation_composed(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +WHERE `l`.`Id` < 3 +ORDER BY `l`.`Id` +"""); + } + + public override async Task Project_collection_and_root_entity(bool async) + { + await base.Project_collection_and_root_entity(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Project_collection_and_include(bool async) + { + await base.Project_collection_and_include(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Project_navigation_and_collection(bool async) + { + await base.Project_navigation_and_collection(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_inside_subquery(bool async) + { + await base.Include_inside_subquery(async); + + AssertSql( +""" +SELECT [l].[Id], [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [t].[Id0], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name0], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [l1].[Id] AS [Id0], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name] AS [Name0], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id] + FROM [LevelTwo] AS [l0] + LEFT JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] + WHERE [l0].[Id] > 0 +) AS [t] +WHERE [l].[Id] < 3 +ORDER BY [l].[Id], [t].[Id] +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_member(bool async) + { + await base.Include_collection_with_multiple_orderbys_member(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` +FROM `LevelTwo` AS `l` +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Name`, `l`.`Level1_Required_Id`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_property(bool async) + { + await base.Include_collection_with_multiple_orderbys_property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` +FROM `LevelTwo` AS `l` +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_methodcall(bool async) + { + await base.Include_collection_with_multiple_orderbys_methodcall(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` +FROM `LevelTwo` AS `l` +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY ABS(`l`.`Level1_Required_Id`), `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_complex(bool async) + { + await base.Include_collection_with_multiple_orderbys_complex(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` +FROM `LevelTwo` AS `l` +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY ABS(`l`.`Level1_Required_Id`) + 7, `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_complex_repeated(bool async) + { + await base.Include_collection_with_multiple_orderbys_complex_repeated(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` +FROM `LevelTwo` AS `l` +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY -`l`.`Level1_Required_Id`, `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_groupby_in_subquery(bool async) + { + await base.Include_collection_with_groupby_in_subquery(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Name], [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + GROUP BY [l].[Name] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +LEFT JOIN [LevelTwo] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse2Id] +ORDER BY [t].[Name], [t0].[Id] +"""); + } + + public override async Task Include_collection_with_groupby_in_subquery_and_filter_before_groupby(bool async) + { + await base.Include_collection_with_groupby_in_subquery_and_filter_before_groupby(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Name], [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + WHERE [l].[Id] > 3 + GROUP BY [l].[Name] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + WHERE [l0].[Id] > 3 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +LEFT JOIN [LevelTwo] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse2Id] +ORDER BY [t].[Name], [t0].[Id] +"""); + } + + public override async Task Include_collection_with_groupby_in_subquery_and_filter_after_groupby(bool async) + { + await base.Include_collection_with_groupby_in_subquery_and_filter_after_groupby(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Name], [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + GROUP BY [l].[Name] + HAVING [l].[Name] <> N'Foo' OR ([l].[Name] IS NULL) +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +LEFT JOIN [LevelTwo] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse2Id] +ORDER BY [t].[Name], [t0].[Id] +"""); + } + + public override async Task Include_reference_collection_order_by_reference_navigation(bool async) + { + await base.Include_reference_collection_order_by_reference_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l0`.`Id`, `l`.`Id` +"""); + } + + public override async Task Include_after_SelectMany(bool async) + { + await base.Include_after_SelectMany(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_after_multiple_SelectMany_and_reference_navigation(bool async) + { + await base.Include_after_multiple_SelectMany_and_reference_navigation(async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id` +FROM (((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Required_Self_Inverse4Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Include_after_SelectMany_and_multiple_reference_navigations(bool async) + { + await base.Include_after_SelectMany_and_multiple_reference_navigations(async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id` +FROM (((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Optional_Self_Inverse4Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Null_check_in_anonymous_type_projection_should_not_be_removed(bool async) + { + await base.Null_check_in_anonymous_type_projection_should_not_be_removed(async); + + AssertSql( + """ +SELECT `l`.`Id`, `s`.`c`, `s`.`Name`, `s`.`Id`, `s`.`Id0` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l1`.`Id` IS NULL AS `c`, `l1`.`Name`, `l0`.`Id`, `l1`.`Id` AS `Id0`, `l0`.`OneToMany_Optional_Inverse2Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` +"""); + } + + public override async Task Null_check_in_Dto_projection_should_not_be_removed(bool async) + { + await base.Null_check_in_Dto_projection_should_not_be_removed(async); + + AssertSql( + """ +SELECT `l`.`Id`, `s`.`c`, `s`.`Name`, `s`.`Id`, `s`.`Id0` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l1`.`Id` IS NULL AS `c`, `l1`.`Name`, `l0`.`Id`, `l1`.`Id` AS `Id0`, `l0`.`OneToMany_Optional_Inverse2Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` +"""); + } + + public override async Task SelectMany_navigation_property_followed_by_select_collection_navigation(bool async) + { + await base.SelectMany_navigation_property_followed_by_select_collection_navigation(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(bool async) + { + await base.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l`.`Id`, `l0`.`Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(bool async) + { + await base.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Required_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Include_collection(bool async) + { + await base.Include_collection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_collection_followed_by_include_reference(bool async) + { + await base.Include_collection_followed_by_include_reference(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_reference_followed_by_include_collection(bool async) + { + await base.Include_reference_followed_by_include_collection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_collection_followed_by_projecting_the_included_collection(bool async) + { + await base.Include_collection_followed_by_projecting_the_included_collection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(bool async) + { + await base.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(bool async) + { + await base.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + FROM (`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Include_collection_ThenInclude_two_references(bool async) + { + await base.Include_collection_ThenInclude_two_references(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + FROM (`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(bool async) + { + await base.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0`, `s`.`Id3`, `s`.`Level3_Optional_Id0`, `s`.`Level3_Required_Id0`, `s`.`Name3`, `s`.`OneToMany_Optional_Inverse4Id0`, `s`.`OneToMany_Optional_Self_Inverse4Id0`, `s`.`OneToMany_Required_Inverse4Id0`, `s`.`OneToMany_Required_Self_Inverse4Id0`, `s`.`OneToOne_Optional_PK_Inverse4Id0`, `s`.`OneToOne_Optional_Self4Id0` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id` AS `Id2`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0`, `l4`.`Id` AS `Id3`, `l4`.`Level3_Optional_Id` AS `Level3_Optional_Id0`, `l4`.`Level3_Required_Id` AS `Level3_Required_Id0`, `l4`.`Name` AS `Name3`, `l4`.`OneToMany_Optional_Inverse4Id` AS `OneToMany_Optional_Inverse4Id0`, `l4`.`OneToMany_Optional_Self_Inverse4Id` AS `OneToMany_Optional_Self_Inverse4Id0`, `l4`.`OneToMany_Required_Inverse4Id` AS `OneToMany_Required_Inverse4Id0`, `l4`.`OneToMany_Required_Self_Inverse4Id` AS `OneToMany_Required_Self_Inverse4Id0`, `l4`.`OneToOne_Optional_PK_Inverse4Id` AS `OneToOne_Optional_PK_Inverse4Id0`, `l4`.`OneToOne_Optional_Self4Id` AS `OneToOne_Optional_Self4Id0` + FROM (((`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) + LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id`) + LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`OneToMany_Optional_Inverse4Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` +"""); + } + + public override async Task Include_collection_multiple(bool async) + { + await base.Include_collection_multiple(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0`, `s`.`Id3`, `s`.`Level3_Optional_Id0`, `s`.`Level3_Required_Id0`, `s`.`Name3`, `s`.`OneToMany_Optional_Inverse4Id0`, `s`.`OneToMany_Optional_Self_Inverse4Id0`, `s`.`OneToMany_Required_Inverse4Id0`, `s`.`OneToMany_Required_Self_Inverse4Id0`, `s`.`OneToOne_Optional_PK_Inverse4Id0`, `s`.`OneToOne_Optional_Self4Id0` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id` AS `Id2`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0`, `l4`.`Id` AS `Id3`, `l4`.`Level3_Optional_Id` AS `Level3_Optional_Id0`, `l4`.`Level3_Required_Id` AS `Level3_Required_Id0`, `l4`.`Name` AS `Name3`, `l4`.`OneToMany_Optional_Inverse4Id` AS `OneToMany_Optional_Inverse4Id0`, `l4`.`OneToMany_Optional_Self_Inverse4Id` AS `OneToMany_Optional_Self_Inverse4Id0`, `l4`.`OneToMany_Required_Inverse4Id` AS `OneToMany_Required_Inverse4Id0`, `l4`.`OneToMany_Required_Self_Inverse4Id` AS `OneToMany_Required_Self_Inverse4Id0`, `l4`.`OneToOne_Optional_PK_Inverse4Id` AS `OneToOne_Optional_PK_Inverse4Id0`, `l4`.`OneToOne_Optional_Self4Id` AS `OneToOne_Optional_Self4Id0` + FROM (((`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) + LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id`) + LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`OneToMany_Optional_Inverse4Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` +"""); + } + + public override async Task Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(bool async) + { + await base.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async); + + AssertSql( + """ +SELECT `l`.`Id`, `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id1` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l0`.`Id` AS `Id1`, `l0`.`OneToMany_Optional_Inverse2Id` + FROM (`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id1`, `s`.`Id` +"""); + } + + public override async Task Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(bool async) + { + await base.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s0`.`Id`, `s0`.`Date`, `s0`.`Level1_Optional_Id`, `s0`.`Level1_Required_Id`, `s0`.`Name`, `s0`.`OneToMany_Optional_Inverse2Id`, `s0`.`OneToMany_Optional_Self_Inverse2Id`, `s0`.`OneToMany_Required_Inverse2Id`, `s0`.`OneToMany_Required_Self_Inverse2Id`, `s0`.`OneToOne_Optional_PK_Inverse2Id`, `s0`.`OneToOne_Optional_Self2Id`, `s0`.`Id0`, `s0`.`Level2_Optional_Id`, `s0`.`Level2_Required_Id`, `s0`.`Name0`, `s0`.`OneToMany_Optional_Inverse3Id`, `s0`.`OneToMany_Optional_Self_Inverse3Id`, `s0`.`OneToMany_Required_Inverse3Id`, `s0`.`OneToMany_Required_Self_Inverse3Id`, `s0`.`OneToOne_Optional_PK_Inverse3Id`, `s0`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id` +) AS `s0` ON `l`.`Id` = `s0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s0`.`Id` +"""); + } + + public override async Task Include_collection_multiple_with_filter(bool async) + { + await base.Include_collection_multiple_with_filter(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l4`.`Id` AS `Id1`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name` AS `Name1`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id` + FROM (`LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +WHERE ( + SELECT COUNT(*) + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` + WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` AND (`l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL)) > 0 +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Lift_projection_mapping_when_pushing_down_subquery(bool async) + { + await base.Lift_projection_mapping_when_pushing_down_subquery(async); + + AssertSql( +""" +@__p_0='25' + +SELECT [t].[Id], [t0].[Id], [l1].[Id], [t0].[c] +FROM ( + SELECT TOP(@__p_0) [l].[Id] + FROM [LevelOne] AS [l] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[c], [t1].[OneToMany_Required_Inverse2Id] + FROM ( + SELECT [l0].[Id], 1 AS [c], [l0].[OneToMany_Required_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Required_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Id] = [t0].[OneToMany_Required_Inverse2Id] +LEFT JOIN [LevelTwo] AS [l1] ON [t].[Id] = [l1].[OneToMany_Required_Inverse2Id] +ORDER BY [t].[Id], [t0].[Id] +"""); + } + + public override async Task Including_reference_navigation_and_projecting_collection_navigation(bool async) + { + await base.Including_reference_navigation_and_projecting_collection_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Required_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(bool async) + { + await base.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async); + + AssertSql( + """ +@validIds1='L1 01' (Size = 255) +@validIds2='L1 02' (Size = 255) + +SELECT IIF(`l0`.`Id` IS NULL, 0, `l0`.`Id`), `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Required_Inverse3Id` +WHERE `l`.`Name` IN (@validIds1, @validIds2) +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Select_subquery_single_nested_subquery(bool async) + { + await base.Select_subquery_single_nested_subquery(async); + + AssertSql( +""" +SELECT [l].[Id], [t0].[Id], [l1].[Id], [t0].[c] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[c], [t].[Id], [t].[OneToMany_Optional_Inverse2Id] + FROM ( + SELECT 1 AS [c], [l0].[Id], [l0].[OneToMany_Optional_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +LEFT JOIN [LevelThree] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [t0].[Id], [l1].[Id] +"""); + } + + public override async Task Select_subquery_single_nested_subquery2(bool async) + { + await base.Select_subquery_single_nested_subquery2(async); + + AssertSql( +""" +SELECT [l].[Id], [t1].[Id], [t1].[Id0], [t1].[Id1], [t1].[c] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [l0].[Id], [t0].[Id] AS [Id0], [l1].[Id] AS [Id1], [t0].[c], [l0].[OneToMany_Optional_Inverse2Id] + FROM [LevelTwo] AS [l0] + LEFT JOIN ( + SELECT [t].[c], [t].[Id], [t].[OneToMany_Optional_Inverse3Id] + FROM ( + SELECT 1 AS [c], [l2].[Id], [l2].[OneToMany_Optional_Inverse3Id], ROW_NUMBER() OVER(PARTITION BY [l2].[OneToMany_Optional_Inverse3Id] ORDER BY [l2].[Id]) AS [row] + FROM [LevelThree] AS [l2] + ) AS [t] + WHERE [t].[row] <= 1 + ) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] + LEFT JOIN [LevelFour] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse4Id] +) AS [t1] ON [l].[Id] = [t1].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t1].[Id], [t1].[Id0], [t1].[Id1] +"""); + } + + public override async Task Filtered_include_basic_Where(bool async) + { + await base.Filtered_include_basic_Where(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` > 5 +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Filtered_include_OrderBy(bool async) + { + await base.Filtered_include_OrderBy(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Name` +"""); + } + + public override async Task Filtered_ThenInclude_OrderBy(bool async) + { + await base.Filtered_ThenInclude_OrderBy(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Name0` +"""); + } + + public override async Task Filtered_include_ThenInclude_OrderBy(bool async) + { + await base.Filtered_include_ThenInclude_OrderBy(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Name`, `s`.`Id`, `s`.`Name0` DESC +"""); + } + + public override async Task Filtered_include_basic_OrderBy_Take(bool async) + { + await base.Filtered_include_basic_OrderBy_Take(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_basic_OrderBy_Skip(bool async) + { + await base.Filtered_include_basic_OrderBy_Skip(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE 1 < [t].[row] +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_basic_OrderBy_Skip_Take(bool async) + { + await base.Filtered_include_basic_OrderBy_Skip_Take(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_Skip_without_OrderBy(bool async) + { + await base.Filtered_include_Skip_without_OrderBy(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE 1 < [t].[row] +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id] +"""); + } + + public override async Task Filtered_include_Take_without_OrderBy(bool async) + { + await base.Filtered_include_Take_without_OrderBy(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id] +"""); + } + + public override async Task Filtered_include_on_ThenInclude(bool async) + { + await base.Filtered_include_on_ThenInclude(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +LEFT JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Name]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_after_reference_navigation(bool async) + { + await base.Filtered_include_after_reference_navigation(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +LEFT JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Name]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_after_different_filtered_include_same_level(bool async) + { + await base.Filtered_include_after_different_filtered_include_same_level(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +LEFT JOIN ( + SELECT [t2].[Id], [t2].[Date], [t2].[Level1_Optional_Id], [t2].[Level1_Required_Id], [t2].[Name], [t2].[OneToMany_Optional_Inverse2Id], [t2].[OneToMany_Optional_Self_Inverse2Id], [t2].[OneToMany_Required_Inverse2Id], [t2].[OneToMany_Required_Self_Inverse2Id], [t2].[OneToOne_Optional_PK_Inverse2Id], [t2].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Required_Inverse2Id] ORDER BY [l1].[Name] DESC) AS [row] + FROM [LevelTwo] AS [l1] + WHERE [l1].[Name] <> N'Bar' OR ([l1].[Name] IS NULL) + ) AS [t2] + WHERE 1 < [t2].[row] +) AS [t1] ON [l].[Id] = [t1].[OneToMany_Required_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name], [t0].[Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[Name] DESC +"""); + } + + public override async Task Filtered_include_after_different_filtered_include_different_level(bool async) + { + await base.Filtered_include_after_different_filtered_include_different_level(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t2].[Id], [t2].[Date], [t2].[Level1_Optional_Id], [t2].[Level1_Required_Id], [t2].[Name], [t2].[OneToMany_Optional_Inverse2Id], [t2].[OneToMany_Optional_Self_Inverse2Id], [t2].[OneToMany_Required_Inverse2Id], [t2].[OneToMany_Required_Self_Inverse2Id], [t2].[OneToOne_Optional_PK_Inverse2Id], [t2].[OneToOne_Optional_Self2Id], [t2].[Id0], [t2].[Level2_Optional_Id], [t2].[Level2_Required_Id], [t2].[Name0], [t2].[OneToMany_Optional_Inverse3Id], [t2].[OneToMany_Optional_Self_Inverse3Id], [t2].[OneToMany_Required_Inverse3Id], [t2].[OneToMany_Required_Self_Inverse3Id], [t2].[OneToOne_Optional_PK_Inverse3Id], [t2].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [t0].[Id] AS [Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name] AS [Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(3) [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l0] + WHERE [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] AND ([l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL)) + ORDER BY [l0].[Name] + ) AS [t] + LEFT JOIN ( + SELECT [t1].[Id], [t1].[Level2_Optional_Id], [t1].[Level2_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse3Id], [t1].[OneToMany_Optional_Self_Inverse3Id], [t1].[OneToMany_Required_Inverse3Id], [t1].[OneToMany_Required_Self_Inverse3Id], [t1].[OneToOne_Optional_PK_Inverse3Id], [t1].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Required_Inverse3Id] ORDER BY [l1].[Name] DESC) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Bar' OR ([l1].[Name] IS NULL) + ) AS [t1] + WHERE 1 < [t1].[row] + ) AS [t0] ON [t].[Id] = [t0].[OneToMany_Required_Inverse3Id] +) AS [t2] +ORDER BY [l].[Id], [t2].[Name], [t2].[Id], [t2].[OneToMany_Required_Inverse3Id], [t2].[Name0] DESC +"""); + } + + public override async Task Filtered_include_same_filter_set_on_same_navigation_twice(bool async) + { + await base.Filtered_include_same_filter_set_on_same_navigation_twice(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id] DESC) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] DESC +"""); + } + + public override async Task Filtered_include_same_filter_set_on_same_navigation_twice_followed_by_ThenIncludes(bool async) + { + await base.Filtered_include_same_filter_set_on_same_navigation_twice_followed_by_ThenIncludes(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Id1], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [t0].[Level2_Optional_Id0], [t0].[Level2_Required_Id0], [t0].[Name1], [t0].[OneToMany_Optional_Inverse3Id0], [t0].[OneToMany_Optional_Self_Inverse3Id0], [t0].[OneToMany_Required_Inverse3Id0], [t0].[OneToMany_Required_Self_Inverse3Id0], [t0].[OneToOne_Optional_PK_Inverse3Id0], [t0].[OneToOne_Optional_Self3Id0] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l1].[Id] AS [Id1], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name] AS [Name0], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], [l0].[Level2_Optional_Id] AS [Level2_Optional_Id0], [l0].[Level2_Required_Id] AS [Level2_Required_Id0], [l0].[Name] AS [Name1], [l0].[OneToMany_Optional_Inverse3Id] AS [OneToMany_Optional_Inverse3Id0], [l0].[OneToMany_Optional_Self_Inverse3Id] AS [OneToMany_Optional_Self_Inverse3Id0], [l0].[OneToMany_Required_Inverse3Id] AS [OneToMany_Required_Inverse3Id0], [l0].[OneToMany_Required_Self_Inverse3Id] AS [OneToMany_Required_Self_Inverse3Id0], [l0].[OneToOne_Optional_PK_Inverse3Id] AS [OneToOne_Optional_PK_Inverse3Id0], [l0].[OneToOne_Optional_Self3Id] AS [OneToOne_Optional_Self3Id0] + FROM ( + SELECT TOP(2) [l2].[Id], [l2].[Date], [l2].[Level1_Optional_Id], [l2].[Level1_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse2Id], [l2].[OneToMany_Optional_Self_Inverse2Id], [l2].[OneToMany_Required_Inverse2Id], [l2].[OneToMany_Required_Self_Inverse2Id], [l2].[OneToOne_Optional_PK_Inverse2Id], [l2].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l2] + WHERE [l].[Id] = [l2].[OneToMany_Optional_Inverse2Id] AND ([l2].[Name] <> N'Foo' OR ([l2].[Name] IS NULL)) + ORDER BY [l2].[Id] + ) AS [t] + LEFT JOIN [LevelThree] AS [l0] ON [t].[Id] = [l0].[Level2_Required_Id] + LEFT JOIN [LevelThree] AS [l1] ON [t].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +) AS [t0] +ORDER BY [l].[Id], [t0].[Id], [t0].[Id0] +"""); + } + + public override async Task + Filtered_include_multiple_multi_level_includes_with_first_level_using_filter_include_on_one_of_the_chains_only(bool async) + { + await base + .Filtered_include_multiple_multi_level_includes_with_first_level_using_filter_include_on_one_of_the_chains_only(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Id1], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [t0].[Level2_Optional_Id0], [t0].[Level2_Required_Id0], [t0].[Name1], [t0].[OneToMany_Optional_Inverse3Id0], [t0].[OneToMany_Optional_Self_Inverse3Id0], [t0].[OneToMany_Required_Inverse3Id0], [t0].[OneToMany_Required_Self_Inverse3Id0], [t0].[OneToOne_Optional_PK_Inverse3Id0], [t0].[OneToOne_Optional_Self3Id0] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l1].[Id] AS [Id1], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name] AS [Name0], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], [l0].[Level2_Optional_Id] AS [Level2_Optional_Id0], [l0].[Level2_Required_Id] AS [Level2_Required_Id0], [l0].[Name] AS [Name1], [l0].[OneToMany_Optional_Inverse3Id] AS [OneToMany_Optional_Inverse3Id0], [l0].[OneToMany_Optional_Self_Inverse3Id] AS [OneToMany_Optional_Self_Inverse3Id0], [l0].[OneToMany_Required_Inverse3Id] AS [OneToMany_Required_Inverse3Id0], [l0].[OneToMany_Required_Self_Inverse3Id] AS [OneToMany_Required_Self_Inverse3Id0], [l0].[OneToOne_Optional_PK_Inverse3Id] AS [OneToOne_Optional_PK_Inverse3Id0], [l0].[OneToOne_Optional_Self3Id] AS [OneToOne_Optional_Self3Id0] + FROM ( + SELECT TOP(2) [l2].[Id], [l2].[Date], [l2].[Level1_Optional_Id], [l2].[Level1_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse2Id], [l2].[OneToMany_Optional_Self_Inverse2Id], [l2].[OneToMany_Required_Inverse2Id], [l2].[OneToMany_Required_Self_Inverse2Id], [l2].[OneToOne_Optional_PK_Inverse2Id], [l2].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l2] + WHERE [l].[Id] = [l2].[OneToMany_Optional_Inverse2Id] AND ([l2].[Name] <> N'Foo' OR ([l2].[Name] IS NULL)) + ORDER BY [l2].[Id] + ) AS [t] + LEFT JOIN [LevelThree] AS [l0] ON [t].[Id] = [l0].[Level2_Required_Id] + LEFT JOIN [LevelThree] AS [l1] ON [t].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +) AS [t0] +ORDER BY [l].[Id], [t0].[Id], [t0].[Id0] +"""); + } + + public override async Task Filtered_include_and_non_filtered_include_on_same_navigation1(bool async) + { + await base.Filtered_include_and_non_filtered_include_on_same_navigation1(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_and_non_filtered_include_on_same_navigation2(bool async) + { + await base.Filtered_include_and_non_filtered_include_on_same_navigation2(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_and_non_filtered_include_followed_by_then_include_on_same_navigation(bool async) + { + await base.Filtered_include_and_non_filtered_include_followed_by_then_include_on_same_navigation(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [t1].[Id0], [t1].[Level2_Optional_Id], [t1].[Level2_Required_Id], [t1].[Name0], [t1].[OneToMany_Optional_Inverse3Id], [t1].[OneToMany_Optional_Self_Inverse3Id], [t1].[OneToMany_Required_Inverse3Id], [t1].[OneToMany_Required_Self_Inverse3Id], [t1].[OneToOne_Optional_PK_Inverse3Id], [t1].[OneToOne_Optional_Self3Id], [t1].[Id1], [t1].[Level3_Optional_Id], [t1].[Level3_Required_Id], [t1].[Name1], [t1].[OneToMany_Optional_Inverse4Id], [t1].[OneToMany_Optional_Self_Inverse4Id], [t1].[OneToMany_Required_Inverse4Id], [t1].[OneToMany_Required_Self_Inverse4Id], [t1].[OneToOne_Optional_PK_Inverse4Id], [t1].[OneToOne_Optional_Self4Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id], [t0].[Id] AS [Id1], [t0].[Level3_Optional_Id], [t0].[Level3_Required_Id], [t0].[Name] AS [Name1], [t0].[OneToMany_Optional_Inverse4Id], [t0].[OneToMany_Optional_Self_Inverse4Id], [t0].[OneToMany_Required_Inverse4Id], [t0].[OneToMany_Required_Self_Inverse4Id], [t0].[OneToOne_Optional_PK_Inverse4Id], [t0].[OneToOne_Optional_Self4Id] + FROM ( + SELECT TOP(1) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] AND ([l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL)) + ORDER BY [l1].[Id] + ) AS [t] + LEFT JOIN [LevelThree] AS [l0] ON [t].[Id] = [l0].[OneToOne_Optional_PK_Inverse3Id] + LEFT JOIN ( + SELECT [l2].[Id], [l2].[Level3_Optional_Id], [l2].[Level3_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse4Id], [l2].[OneToMany_Optional_Self_Inverse4Id], [l2].[OneToMany_Required_Inverse4Id], [l2].[OneToMany_Required_Self_Inverse4Id], [l2].[OneToOne_Optional_PK_Inverse4Id], [l2].[OneToOne_Optional_Self4Id] + FROM [LevelFour] AS [l2] + WHERE [l2].[Id] > 1 + ) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse4Id] +) AS [t1] +ORDER BY [l].[Id], [t1].[Id], [t1].[Id0] +"""); + } + + public override async Task Filtered_include_complex_three_level_with_middle_having_filter1(bool async) + { + await base.Filtered_include_complex_three_level_with_middle_having_filter1(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [t1].[Id0], [t1].[Level2_Optional_Id], [t1].[Level2_Required_Id], [t1].[Name0], [t1].[OneToMany_Optional_Inverse3Id], [t1].[OneToMany_Optional_Self_Inverse3Id], [t1].[OneToMany_Required_Inverse3Id], [t1].[OneToMany_Required_Self_Inverse3Id], [t1].[OneToOne_Optional_PK_Inverse3Id], [t1].[OneToOne_Optional_Self3Id], [t1].[Id00], [t1].[Level3_Optional_Id], [t1].[Level3_Required_Id], [t1].[Name00], [t1].[OneToMany_Optional_Inverse4Id], [t1].[OneToMany_Optional_Self_Inverse4Id], [t1].[OneToMany_Required_Inverse4Id], [t1].[OneToMany_Required_Self_Inverse4Id], [t1].[OneToOne_Optional_PK_Inverse4Id], [t1].[OneToOne_Optional_Self4Id], [t1].[Id1], [t1].[Level3_Optional_Id0], [t1].[Level3_Required_Id0], [t1].[Name1], [t1].[OneToMany_Optional_Inverse4Id0], [t1].[OneToMany_Optional_Self_Inverse4Id0], [t1].[OneToMany_Required_Inverse4Id0], [t1].[OneToMany_Required_Self_Inverse4Id0], [t1].[OneToOne_Optional_PK_Inverse4Id0], [t1].[OneToOne_Optional_Self4Id0] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [t0].[Id] AS [Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name] AS [Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [t0].[Id0] AS [Id00], [t0].[Level3_Optional_Id], [t0].[Level3_Required_Id], [t0].[Name0] AS [Name00], [t0].[OneToMany_Optional_Inverse4Id], [t0].[OneToMany_Optional_Self_Inverse4Id], [t0].[OneToMany_Required_Inverse4Id], [t0].[OneToMany_Required_Self_Inverse4Id], [t0].[OneToOne_Optional_PK_Inverse4Id], [t0].[OneToOne_Optional_Self4Id], [t0].[Id1], [t0].[Level3_Optional_Id0], [t0].[Level3_Required_Id0], [t0].[Name1], [t0].[OneToMany_Optional_Inverse4Id0], [t0].[OneToMany_Optional_Self_Inverse4Id0], [t0].[OneToMany_Required_Inverse4Id0], [t0].[OneToMany_Required_Self_Inverse4Id0], [t0].[OneToOne_Optional_PK_Inverse4Id0], [t0].[OneToOne_Optional_Self4Id0] + FROM [LevelTwo] AS [l0] + OUTER APPLY ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id], [l1].[Id] AS [Id0], [l1].[Level3_Optional_Id], [l1].[Level3_Required_Id], [l1].[Name] AS [Name0], [l1].[OneToMany_Optional_Inverse4Id], [l1].[OneToMany_Optional_Self_Inverse4Id], [l1].[OneToMany_Required_Inverse4Id], [l1].[OneToMany_Required_Self_Inverse4Id], [l1].[OneToOne_Optional_PK_Inverse4Id], [l1].[OneToOne_Optional_Self4Id], [l2].[Id] AS [Id1], [l2].[Level3_Optional_Id] AS [Level3_Optional_Id0], [l2].[Level3_Required_Id] AS [Level3_Required_Id0], [l2].[Name] AS [Name1], [l2].[OneToMany_Optional_Inverse4Id] AS [OneToMany_Optional_Inverse4Id0], [l2].[OneToMany_Optional_Self_Inverse4Id] AS [OneToMany_Optional_Self_Inverse4Id0], [l2].[OneToMany_Required_Inverse4Id] AS [OneToMany_Required_Inverse4Id0], [l2].[OneToMany_Required_Self_Inverse4Id] AS [OneToMany_Required_Self_Inverse4Id0], [l2].[OneToOne_Optional_PK_Inverse4Id] AS [OneToOne_Optional_PK_Inverse4Id0], [l2].[OneToOne_Optional_Self4Id] AS [OneToOne_Optional_Self4Id0] + FROM ( + SELECT TOP(1) [l3].[Id], [l3].[Level2_Optional_Id], [l3].[Level2_Required_Id], [l3].[Name], [l3].[OneToMany_Optional_Inverse3Id], [l3].[OneToMany_Optional_Self_Inverse3Id], [l3].[OneToMany_Required_Inverse3Id], [l3].[OneToMany_Required_Self_Inverse3Id], [l3].[OneToOne_Optional_PK_Inverse3Id], [l3].[OneToOne_Optional_Self3Id] + FROM [LevelThree] AS [l3] + WHERE [l0].[Id] = [l3].[OneToMany_Optional_Inverse3Id] AND ([l3].[Name] <> N'Foo' OR ([l3].[Name] IS NULL)) + ORDER BY [l3].[Id] + ) AS [t] + LEFT JOIN [LevelFour] AS [l1] ON [t].[Id] = [l1].[OneToMany_Optional_Inverse4Id] + LEFT JOIN [LevelFour] AS [l2] ON [t].[Id] = [l2].[OneToMany_Required_Inverse4Id] + ) AS [t0] +) AS [t1] ON [l].[Id] = [t1].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t1].[Id], [t1].[Id0], [t1].[Id00] +"""); + } + + public override async Task Filtered_include_complex_three_level_with_middle_having_filter2(bool async) + { + await base.Filtered_include_complex_three_level_with_middle_having_filter2(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [t1].[Id0], [t1].[Level2_Optional_Id], [t1].[Level2_Required_Id], [t1].[Name0], [t1].[OneToMany_Optional_Inverse3Id], [t1].[OneToMany_Optional_Self_Inverse3Id], [t1].[OneToMany_Required_Inverse3Id], [t1].[OneToMany_Required_Self_Inverse3Id], [t1].[OneToOne_Optional_PK_Inverse3Id], [t1].[OneToOne_Optional_Self3Id], [t1].[Id00], [t1].[Level3_Optional_Id], [t1].[Level3_Required_Id], [t1].[Name00], [t1].[OneToMany_Optional_Inverse4Id], [t1].[OneToMany_Optional_Self_Inverse4Id], [t1].[OneToMany_Required_Inverse4Id], [t1].[OneToMany_Required_Self_Inverse4Id], [t1].[OneToOne_Optional_PK_Inverse4Id], [t1].[OneToOne_Optional_Self4Id], [t1].[Id1], [t1].[Level3_Optional_Id0], [t1].[Level3_Required_Id0], [t1].[Name1], [t1].[OneToMany_Optional_Inverse4Id0], [t1].[OneToMany_Optional_Self_Inverse4Id0], [t1].[OneToMany_Required_Inverse4Id0], [t1].[OneToMany_Required_Self_Inverse4Id0], [t1].[OneToOne_Optional_PK_Inverse4Id0], [t1].[OneToOne_Optional_Self4Id0] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [t0].[Id] AS [Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name] AS [Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [t0].[Id0] AS [Id00], [t0].[Level3_Optional_Id], [t0].[Level3_Required_Id], [t0].[Name0] AS [Name00], [t0].[OneToMany_Optional_Inverse4Id], [t0].[OneToMany_Optional_Self_Inverse4Id], [t0].[OneToMany_Required_Inverse4Id], [t0].[OneToMany_Required_Self_Inverse4Id], [t0].[OneToOne_Optional_PK_Inverse4Id], [t0].[OneToOne_Optional_Self4Id], [t0].[Id1], [t0].[Level3_Optional_Id0], [t0].[Level3_Required_Id0], [t0].[Name1], [t0].[OneToMany_Optional_Inverse4Id0], [t0].[OneToMany_Optional_Self_Inverse4Id0], [t0].[OneToMany_Required_Inverse4Id0], [t0].[OneToMany_Required_Self_Inverse4Id0], [t0].[OneToOne_Optional_PK_Inverse4Id0], [t0].[OneToOne_Optional_Self4Id0] + FROM [LevelTwo] AS [l0] + OUTER APPLY ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id], [l1].[Id] AS [Id0], [l1].[Level3_Optional_Id], [l1].[Level3_Required_Id], [l1].[Name] AS [Name0], [l1].[OneToMany_Optional_Inverse4Id], [l1].[OneToMany_Optional_Self_Inverse4Id], [l1].[OneToMany_Required_Inverse4Id], [l1].[OneToMany_Required_Self_Inverse4Id], [l1].[OneToOne_Optional_PK_Inverse4Id], [l1].[OneToOne_Optional_Self4Id], [l2].[Id] AS [Id1], [l2].[Level3_Optional_Id] AS [Level3_Optional_Id0], [l2].[Level3_Required_Id] AS [Level3_Required_Id0], [l2].[Name] AS [Name1], [l2].[OneToMany_Optional_Inverse4Id] AS [OneToMany_Optional_Inverse4Id0], [l2].[OneToMany_Optional_Self_Inverse4Id] AS [OneToMany_Optional_Self_Inverse4Id0], [l2].[OneToMany_Required_Inverse4Id] AS [OneToMany_Required_Inverse4Id0], [l2].[OneToMany_Required_Self_Inverse4Id] AS [OneToMany_Required_Self_Inverse4Id0], [l2].[OneToOne_Optional_PK_Inverse4Id] AS [OneToOne_Optional_PK_Inverse4Id0], [l2].[OneToOne_Optional_Self4Id] AS [OneToOne_Optional_Self4Id0] + FROM ( + SELECT TOP(1) [l3].[Id], [l3].[Level2_Optional_Id], [l3].[Level2_Required_Id], [l3].[Name], [l3].[OneToMany_Optional_Inverse3Id], [l3].[OneToMany_Optional_Self_Inverse3Id], [l3].[OneToMany_Required_Inverse3Id], [l3].[OneToMany_Required_Self_Inverse3Id], [l3].[OneToOne_Optional_PK_Inverse3Id], [l3].[OneToOne_Optional_Self3Id] + FROM [LevelThree] AS [l3] + WHERE [l0].[Id] = [l3].[OneToMany_Optional_Inverse3Id] AND ([l3].[Name] <> N'Foo' OR ([l3].[Name] IS NULL)) + ORDER BY [l3].[Id] + ) AS [t] + LEFT JOIN [LevelFour] AS [l1] ON [t].[Id] = [l1].[OneToMany_Optional_Inverse4Id] + LEFT JOIN [LevelFour] AS [l2] ON [t].[Id] = [l2].[OneToMany_Required_Inverse4Id] + ) AS [t0] +) AS [t1] ON [l].[Id] = [t1].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t1].[Id], [t1].[Id0], [t1].[Id00] +"""); + } + + public override async Task Filtered_include_variable_used_inside_filter(bool async) + { + await base.Filtered_include_variable_used_inside_filter(async); + + AssertSql( +""" +@__prm_0='Foo' (Size = 4000) + +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> @__prm_0 OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_context_accessed_inside_filter(bool async) + { + await base.Filtered_include_context_accessed_inside_filter(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM [LevelOne] AS [l] +""", +// +""" +@__p_0='True' + +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE @__p_0 = CAST(1 AS bit) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_context_accessed_inside_filter_correlated(bool async) + { + await base.Filtered_include_context_accessed_inside_filter_correlated(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE ( + SELECT COUNT(*) + FROM [LevelOne] AS [l1] + WHERE [l1].[Id] <> [l0].[Id]) > 1 + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_outer_parameter_used_inside_filter(bool async) + { + await base.Filtered_include_outer_parameter_used_inside_filter(async); + + AssertSql( +""" +SELECT [l].[Id], [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [t].[Id0], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name0], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [l1].[Id] AS [Id0], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name] AS [Name0], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id] + FROM [LevelTwo] AS [l0] + LEFT JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +) AS [t] +OUTER APPLY ( + SELECT [l2].[Id], [l2].[Date], [l2].[Level1_Optional_Id], [l2].[Level1_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse2Id], [l2].[OneToMany_Optional_Self_Inverse2Id], [l2].[OneToMany_Required_Inverse2Id], [l2].[OneToMany_Required_Self_Inverse2Id], [l2].[OneToOne_Optional_PK_Inverse2Id], [l2].[OneToOne_Optional_Self2Id], [t1].[Id] AS [Id0], [t1].[Level2_Optional_Id], [t1].[Level2_Required_Id], [t1].[Name] AS [Name0], [t1].[OneToMany_Optional_Inverse3Id], [t1].[OneToMany_Optional_Self_Inverse3Id], [t1].[OneToMany_Required_Inverse3Id], [t1].[OneToMany_Required_Self_Inverse3Id], [t1].[OneToOne_Optional_PK_Inverse3Id], [t1].[OneToOne_Optional_Self3Id] + FROM [LevelTwo] AS [l2] + LEFT JOIN ( + SELECT [l3].[Id], [l3].[Level2_Optional_Id], [l3].[Level2_Required_Id], [l3].[Name], [l3].[OneToMany_Optional_Inverse3Id], [l3].[OneToMany_Optional_Self_Inverse3Id], [l3].[OneToMany_Required_Inverse3Id], [l3].[OneToMany_Required_Self_Inverse3Id], [l3].[OneToOne_Optional_PK_Inverse3Id], [l3].[OneToOne_Optional_Self3Id] + FROM [LevelThree] AS [l3] + WHERE [l3].[Id] <> [l].[Id] + ) AS [t1] ON [l2].[Id] = [t1].[OneToMany_Optional_Inverse3Id] +) AS [t0] +ORDER BY [l].[Id], [t].[Id], [t].[Id0], [t0].[Id] +"""); + } + + public override async Task Complex_query_with_let_collection_projection_FirstOrDefault(bool async) + { + await base.Complex_query_with_let_collection_projection_FirstOrDefault(async); + + AssertSql( +""" +SELECT [l].[Id], [t0].[Id], [t1].[Name], [t1].[Id], [t0].[c] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[c], [t].[Id], [t].[OneToMany_Optional_Inverse2Id] + FROM ( + SELECT 1 AS [c], [l0].[Id], [l0].[OneToMany_Optional_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +OUTER APPLY ( + SELECT [l1].[Name], [l1].[Id] + FROM [LevelOne] AS [l1] + WHERE EXISTS ( + SELECT 1 + FROM [LevelTwo] AS [l2] + WHERE [l1].[Id] = [l2].[OneToMany_Optional_Inverse2Id] AND [l2].[Id] = [t0].[Id]) +) AS [t1] +ORDER BY [l].[Id], [t0].[Id] +"""); + } + + public override async Task SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(bool async) + { + await base.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l16`.`Id`, `l16`.`Date`, `l16`.`Level1_Optional_Id`, `l16`.`Level1_Required_Id`, `l16`.`Name`, `l16`.`OneToMany_Optional_Inverse2Id`, `l16`.`OneToMany_Optional_Self_Inverse2Id`, `l16`.`OneToMany_Required_Inverse2Id`, `l16`.`OneToMany_Required_Self_Inverse2Id`, `l16`.`OneToOne_Optional_PK_Inverse2Id`, `l16`.`OneToOne_Optional_Self2Id`, `l14`.`Name` +FROM (((((((((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse4Id`) +LEFT JOIN ( + SELECT `l3`.`Id`, `l4`.`Id` AS `Id0`, `l5`.`Id` AS `Id1`, `l6`.`Id` AS `Id2` + FROM ((`LevelFour` AS `l3` + INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) + LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) + LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` +) AS `s` ON `l2`.`Id` = `s`.`Id2`) +LEFT JOIN ( + SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` + FROM ((`LevelFour` AS `l7` + INNER JOIN `LevelThree` AS `l8` ON `l7`.`Level3_Required_Id` = `l8`.`Id`) + LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) + LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` + WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) +LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id`) +LEFT JOIN ( + SELECT `l15`.`Id`, `l15`.`Date`, `l15`.`Level1_Optional_Id`, `l15`.`Level1_Required_Id`, `l15`.`Name`, `l15`.`OneToMany_Optional_Inverse2Id`, `l15`.`OneToMany_Optional_Self_Inverse2Id`, `l15`.`OneToMany_Required_Inverse2Id`, `l15`.`OneToMany_Required_Self_Inverse2Id`, `l15`.`OneToOne_Optional_PK_Inverse2Id`, `l15`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l15` + WHERE `l15`.`Id` <> 42 +) AS `l16` ON `s`.`Id2` = `l16`.`OneToMany_Optional_Self_Inverse2Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +"""); + } + + public override async Task Take_Select_collection_Take(bool async) + { + await base.Take_Select_collection_Take(async); + + AssertSql( +""" +@__p_0='1' + +SELECT [t].[Id], [t].[Name], [t0].[Id], [t0].[Name], [t0].[Level1Id], [t0].[Level2Id], [t0].[Id0], [t0].[Date], [t0].[Name0], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id] +FROM ( + SELECT TOP(@__p_0) [l].[Id], [l].[Name] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] +) AS [t] +OUTER APPLY ( + SELECT [t1].[Id], [t1].[Name], [t1].[OneToMany_Required_Inverse2Id] AS [Level1Id], [t1].[Level1_Required_Id] AS [Level2Id], [l0].[Id] AS [Id0], [l0].[Date], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id] + FROM ( + SELECT TOP(3) [l1].[Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Required_Inverse2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Required_Inverse2Id] + ORDER BY [l1].[Id] + ) AS [t1] + INNER JOIN [LevelOne] AS [l0] ON [t1].[Level1_Required_Id] = [l0].[Id] +) AS [t0] +ORDER BY [t].[Id], [t0].[Id] +"""); + } + + public override async Task Skip_Take_Select_collection_Skip_Take(bool async) + { + await base.Skip_Take_Select_collection_Skip_Take(async); + + AssertSql( +""" +@__p_0='1' + +SELECT [t].[Id], [t].[Name], [t0].[Id], [t0].[Name], [t0].[Level1Id], [t0].[Level2Id], [t0].[Id0], [t0].[Date], [t0].[Name0], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id] +FROM ( + SELECT [l].[Id], [l].[Name] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] + OFFSET @__p_0 ROWS FETCH NEXT @__p_0 ROWS ONLY +) AS [t] +OUTER APPLY ( + SELECT [t1].[Id], [t1].[Name], [t1].[OneToMany_Required_Inverse2Id] AS [Level1Id], [t1].[Level1_Required_Id] AS [Level2Id], [l0].[Id] AS [Id0], [l0].[Date], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l1].[Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Required_Inverse2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Required_Inverse2Id] + ORDER BY [l1].[Id] + OFFSET 1 ROWS FETCH NEXT 3 ROWS ONLY + ) AS [t1] + INNER JOIN [LevelOne] AS [l0] ON [t1].[Level1_Required_Id] = [l0].[Id] +) AS [t0] +ORDER BY [t].[Id], [t0].[Id] +"""); + } + + public override async Task Projecting_collection_with_FirstOrDefault(bool async) + { + await base.Projecting_collection_with_FirstOrDefault(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM ( + SELECT TOP 1 `l`.`Id` + FROM `LevelOne` AS `l` + WHERE `l`.`Id` = 1 +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l1`.`Id` +"""); + } + + public override async Task Filtered_include_Take_with_another_Take_on_top_level(bool async) + { + await base.Filtered_include_Take_with_another_Take_on_top_level(async); + + AssertSql( +""" +@__p_0='5' + +SELECT [t].[Id], [t].[Date], [t].[Name], [t].[OneToMany_Optional_Self_Inverse1Id], [t].[OneToMany_Required_Self_Inverse1Id], [t].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM ( + SELECT TOP(@__p_0) [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] +) AS [t] +OUTER APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(4) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Name] DESC + ) AS [t1] + LEFT JOIN [LevelThree] AS [l0] ON [t1].[Id] = [l0].[Level2_Optional_Id] +) AS [t0] +ORDER BY [t].[Id], [t0].[Name] DESC, [t0].[Id] +"""); + } + + public override async Task Filtered_include_Skip_Take_with_another_Skip_Take_on_top_level(bool async) + { + await base.Filtered_include_Skip_Take_with_another_Skip_Take_on_top_level(async); + + AssertSql( +""" +@__p_0='10' +@__p_1='5' + +SELECT [t].[Id], [t].[Date], [t].[Name], [t].[OneToMany_Optional_Self_Inverse1Id], [t].[OneToMany_Required_Self_Inverse1Id], [t].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM ( + SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] DESC + OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY +) AS [t] +OUTER APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Name] DESC + OFFSET 2 ROWS FETCH NEXT 4 ROWS ONLY + ) AS [t1] + LEFT JOIN [LevelThree] AS [l0] ON [t1].[Id] = [l0].[Level2_Optional_Id] +) AS [t0] +ORDER BY [t].[Id] DESC, [t0].[Name] DESC, [t0].[Id] +"""); + } + + public override async Task Filtered_include_with_Take_without_order_by_followed_by_ThenInclude_and_FirstOrDefault_on_top_level( + bool async) + { + await base.Filtered_include_with_Take_without_order_by_followed_by_ThenInclude_and_FirstOrDefault_on_top_level(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[Date], [t].[Name], [t].[OneToMany_Optional_Self_Inverse1Id], [t].[OneToMany_Required_Self_Inverse1Id], [t].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM ( + SELECT TOP(1) [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] +) AS [t] +OUTER APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(40) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ) AS [t1] + LEFT JOIN [LevelThree] AS [l0] ON [t1].[Id] = [l0].[Level2_Optional_Id] +) AS [t0] +ORDER BY [t].[Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_with_Take_without_order_by_followed_by_ThenInclude_and_unordered_Take_on_top_level( + bool async) + { + await base.Filtered_include_with_Take_without_order_by_followed_by_ThenInclude_and_unordered_Take_on_top_level(async); + + AssertSql( +""" +@__p_0='30' + +SELECT [t].[Id], [t].[Date], [t].[Name], [t].[OneToMany_Optional_Self_Inverse1Id], [t].[OneToMany_Required_Self_Inverse1Id], [t].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM ( + SELECT TOP(@__p_0) [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] +) AS [t] +OUTER APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(40) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ) AS [t1] + LEFT JOIN [LevelThree] AS [l0] ON [t1].[Id] = [l0].[Level2_Optional_Id] +) AS [t0] +ORDER BY [t].[Id], [t0].[Id] +"""); + } + + public override async Task Skip_on_grouping_element(bool async) + { + await base.Skip_on_grouping_element(async); + + AssertSql( +""" +SELECT [t].[Date], [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE 1 < [t1].[row] +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] +"""); + } + + public override async Task Take_on_grouping_element(bool async) + { + await base.Take_on_grouping_element(async); + + AssertSql( +""" +SELECT [t].[Date], [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name] DESC) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 10 +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] DESC +"""); + } + + public override async Task Skip_Take_on_grouping_element(bool async) + { + await base.Skip_Take_on_grouping_element(async); + + AssertSql( +""" +SELECT [t].[Date], [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 6 +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] +"""); + } + + public override async Task Skip_Take_Distinct_on_grouping_element(bool async) + { + await base.Skip_Take_Distinct_on_grouping_element(async); + + AssertSql( +""" +SELECT [t].[Date], [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +OUTER APPLY ( + SELECT DISTINCT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l0] + WHERE [t].[Date] = [l0].[Date] + ORDER BY [l0].[Name] + OFFSET 1 ROWS FETCH NEXT 5 ROWS ONLY + ) AS [t1] +) AS [t0] +ORDER BY [t].[Date] +"""); + } + + public override async Task Skip_Take_ToList_on_grouping_element(bool async) + { + await base.Skip_Take_ToList_on_grouping_element(async); + + AssertSql( +""" +SELECT [t].[Date], [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 6 +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] +"""); + } + + public override async Task Skip_Take_on_grouping_element_into_non_entity(bool async) + { + await base.Skip_Take_on_grouping_element_into_non_entity(async); + + AssertSql( +""" +SELECT [t].[Date], [t0].[Name], [t0].[Id] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Name], [t1].[Id], [t1].[Date] + FROM ( + SELECT [l0].[Name], [l0].[Id], [l0].[Date], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 6 +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] +"""); + } + + public override async Task Skip_Take_on_grouping_element_with_collection_include(bool async) + { + await base.Skip_Take_on_grouping_element_with_collection_include(async); + + AssertSql( +""" +SELECT [t].[Date], [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t0].[Id0], [t0].[Date0], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +OUTER APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id], [l0].[Id] AS [Id0], [l0].[Date] AS [Date0], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l1].[Id], [l1].[Date], [l1].[Name], [l1].[OneToMany_Optional_Self_Inverse1Id], [l1].[OneToMany_Required_Self_Inverse1Id], [l1].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l1] + WHERE [t].[Date] = [l1].[Date] + ORDER BY [l1].[Name] + OFFSET 1 ROWS FETCH NEXT 5 ROWS ONLY + ) AS [t1] + LEFT JOIN [LevelTwo] AS [l0] ON [t1].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +) AS [t0] +ORDER BY [t].[Date], [t0].[Name], [t0].[Id] +"""); + } + + public override async Task Skip_Take_on_grouping_element_with_reference_include(bool async) + { + await base.Skip_Take_on_grouping_element_with_reference_include(async); + + AssertSql( +""" +SELECT [t].[Date], [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t0].[Id0], [t0].[Date0], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +OUTER APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id], [l0].[Id] AS [Id0], [l0].[Date] AS [Date0], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l1].[Id], [l1].[Date], [l1].[Name], [l1].[OneToMany_Optional_Self_Inverse1Id], [l1].[OneToMany_Required_Self_Inverse1Id], [l1].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l1] + WHERE [t].[Date] = [l1].[Date] + ORDER BY [l1].[Name] + OFFSET 1 ROWS FETCH NEXT 5 ROWS ONLY + ) AS [t1] + LEFT JOIN [LevelTwo] AS [l0] ON [t1].[Id] = [l0].[Level1_Optional_Id] +) AS [t0] +ORDER BY [t].[Date], [t0].[Name], [t0].[Id] +"""); + } + + public override async Task Skip_Take_on_grouping_element_inside_collection_projection(bool async) + { + await base.Skip_Take_on_grouping_element_inside_collection_projection(async); + + AssertSql( +""" +SELECT [l].[Id], [t2].[Date], [t2].[Id], [t2].[Date0], [t2].[Name], [t2].[OneToMany_Optional_Self_Inverse1Id], [t2].[OneToMany_Required_Self_Inverse1Id], [t2].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [t].[Date], [t0].[Id], [t0].[Date] AS [Date0], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Date] + FROM [LevelOne] AS [l0] + WHERE [l0].[Name] = [l].[Name] OR (([l0].[Name] IS NULL) AND ([l].[Name] IS NULL)) + GROUP BY [l0].[Date] + ) AS [t] + LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l1].[Id], [l1].[Date], [l1].[Name], [l1].[OneToMany_Optional_Self_Inverse1Id], [l1].[OneToMany_Required_Self_Inverse1Id], [l1].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l1].[Date] ORDER BY [l1].[Name]) AS [row] + FROM [LevelOne] AS [l1] + WHERE [l1].[Name] = [l].[Name] OR (([l1].[Name] IS NULL) AND ([l].[Name] IS NULL)) + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 6 + ) AS [t0] ON [t].[Date] = [t0].[Date] +) AS [t2] +ORDER BY [l].[Id], [t2].[Date], [t2].[Date0], [t2].[Name] +"""); + } + + public override async Task Collection_projection_over_GroupBy_over_parameter(bool async) + { + await base.Collection_projection_over_GroupBy_over_parameter(async); + + AssertSql( + """ +@validIds1='L1 01' (Size = 255) +@validIds2='L1 02' (Size = 255) + +SELECT `l1`.`Date`, `l2`.`Id` +FROM ( + SELECT `l`.`Date` + FROM `LevelOne` AS `l` + WHERE `l`.`Name` IN (@validIds1, @validIds2) + GROUP BY `l`.`Date` +) AS `l1` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date` + FROM `LevelOne` AS `l0` + WHERE `l0`.`Name` IN (@validIds1, @validIds2) +) AS `l2` ON `l1`.`Date` = `l2`.`Date` +ORDER BY `l1`.`Date` +"""); + } + + public override async Task Include_partially_added_before_Where_and_then_build_upon(bool async) + { + await base.Include_partially_added_before_Where_and_then_build_upon(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Id` AS `Id0`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id` + FROM `LevelThree` AS `l2` + LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`Level3_Optional_Id` +) AS `s` ON `l1`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` < 3 OR `l1`.`Id` > 8 +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_partially_added_before_Where_and_then_build_upon_with_filtered_include(bool async) + { + await base.Include_partially_added_before_Where_and_then_build_upon_with_filtered_include(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id], [l0].[Id], [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [t1].[Id], [t1].[Level2_Optional_Id], [t1].[Level2_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse3Id], [t1].[OneToMany_Optional_Self_Inverse3Id], [t1].[OneToMany_Required_Inverse3Id], [t1].[OneToMany_Required_Self_Inverse3Id], [t1].[OneToOne_Optional_PK_Inverse3Id], [t1].[OneToOne_Optional_Self3Id], [t1].[Id0], [t1].[Level3_Optional_Id], [t1].[Level3_Required_Id], [t1].[Name0], [t1].[OneToMany_Optional_Inverse4Id], [t1].[OneToMany_Optional_Self_Inverse4Id], [t1].[OneToMany_Required_Inverse4Id], [t1].[OneToMany_Required_Self_Inverse4Id], [t1].[OneToOne_Optional_PK_Inverse4Id], [t1].[OneToOne_Optional_Self4Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToOne_Optional_PK_Inverse2Id] +LEFT JOIN [LevelTwo] AS [l1] ON [l].[Id] = [l1].[Level1_Optional_Id] +LEFT JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l2].[Id], [l2].[Level2_Optional_Id], [l2].[Level2_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse3Id], [l2].[OneToMany_Optional_Self_Inverse3Id], [l2].[OneToMany_Required_Inverse3Id], [l2].[OneToMany_Required_Self_Inverse3Id], [l2].[OneToOne_Optional_PK_Inverse3Id], [l2].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l2].[OneToMany_Optional_Inverse3Id] ORDER BY [l2].[Id]) AS [row] + FROM [LevelThree] AS [l2] + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l1].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +LEFT JOIN ( + SELECT [l3].[Id], [l3].[Level2_Optional_Id], [l3].[Level2_Required_Id], [l3].[Name], [l3].[OneToMany_Optional_Inverse3Id], [l3].[OneToMany_Optional_Self_Inverse3Id], [l3].[OneToMany_Required_Inverse3Id], [l3].[OneToMany_Required_Self_Inverse3Id], [l3].[OneToOne_Optional_PK_Inverse3Id], [l3].[OneToOne_Optional_Self3Id], [l4].[Id] AS [Id0], [l4].[Level3_Optional_Id], [l4].[Level3_Required_Id], [l4].[Name] AS [Name0], [l4].[OneToMany_Optional_Inverse4Id], [l4].[OneToMany_Optional_Self_Inverse4Id], [l4].[OneToMany_Required_Inverse4Id], [l4].[OneToMany_Required_Self_Inverse4Id], [l4].[OneToOne_Optional_PK_Inverse4Id], [l4].[OneToOne_Optional_Self4Id] + FROM [LevelThree] AS [l3] + LEFT JOIN [LevelFour] AS [l4] ON [l3].[Id] = [l4].[Level3_Optional_Id] +) AS [t1] ON [l1].[Id] = [t1].[OneToMany_Required_Inverse3Id] +WHERE [l0].[Id] < 3 OR [l1].[Id] > 8 +ORDER BY [l].[Id], [l0].[Id], [l1].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Id], [t1].[Id] +"""); + } + + public override async Task Take_on_correlated_collection_in_projection(bool async) + { + await base.Take_on_correlated_collection_in_projection(async); + + AssertSql( +""" +SELECT [l].[Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 50 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id] +"""); + } + + public override async Task FirstOrDefault_with_predicate_on_correlated_collection_in_projection(bool async) + { + await base.FirstOrDefault_with_predicate_on_correlated_collection_in_projection(async); + + AssertSql( +""" +SELECT [l].[Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id], [l0].[Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] AND [l].[Id] = [t0].[Id] +"""); + } + + public override async Task SelectMany_with_predicate_and_DefaultIfEmpty_projecting_root_collection_element_and_another_collection( + bool async) + { + await base.SelectMany_with_predicate_and_DefaultIfEmpty_projecting_root_collection_element_and_another_collection(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Level1_Required_Id] = ([l].[Id] * 2) OR CAST(LEN([l0].[Name]) AS int) = [l0].[Id] +) AS [t] +LEFT JOIN [LevelTwo] AS [l1] ON [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t].[Id] +"""); + } + + public override async Task Complex_query_issue_21665(bool async) + { + await base.Complex_query_issue_21665(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[Date], [t].[Name], [t].[OneToMany_Optional_Self_Inverse1Id], [t].[OneToMany_Required_Self_Inverse1Id], [t].[OneToOne_Optional_Self1Id], [t].[Name0], [t].[c], [t].[c0], [t].[c1], [t].[Id0], [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t0].[ChildCount], [t0].[Level2Name], [t0].[Level2Count], [t0].[IsLevel2There], [t0].[Id0] +FROM ( + SELECT TOP(1) [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l0].[Name] AS [Name0], ( + SELECT COUNT(*) + FROM [LevelOne] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Self_Inverse1Id]) AS [c], ( + SELECT COUNT(*) + FROM [LevelTwo] AS [l2] + WHERE [l].[Id] = [l2].[OneToMany_Optional_Inverse2Id]) AS [c0], CASE + WHEN EXISTS ( + SELECT 1 + FROM [LevelTwo] AS [l3] + WHERE [l].[Id] = [l3].[OneToMany_Optional_Inverse2Id] AND [l3].[Id] = 2) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c1], [l0].[Id] AS [Id0] + FROM [LevelOne] AS [l] + LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] + WHERE [l].[Id] = 2 + ORDER BY [l].[Name] +) AS [t] +OUTER APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id], ( + SELECT COUNT(*) + FROM [LevelOne] AS [l5] + WHERE [t1].[Id] = [l5].[OneToMany_Optional_Self_Inverse1Id]) AS [ChildCount], [l4].[Name] AS [Level2Name], ( + SELECT COUNT(*) + FROM [LevelTwo] AS [l6] + WHERE [t1].[Id] = [l6].[OneToMany_Optional_Inverse2Id]) AS [Level2Count], CASE + WHEN EXISTS ( + SELECT 1 + FROM [LevelTwo] AS [l7] + WHERE [t1].[Id] = [l7].[OneToMany_Optional_Inverse2Id] AND [l7].[Id] = 2) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [IsLevel2There], [l4].[Id] AS [Id0] + FROM ( + SELECT [l8].[Id], [l8].[Date], [l8].[Name], [l8].[OneToMany_Optional_Self_Inverse1Id], [l8].[OneToMany_Required_Self_Inverse1Id], [l8].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l8] + WHERE [t].[Id] = [l8].[OneToMany_Optional_Self_Inverse1Id] + ORDER BY [l8].[Name] + OFFSET 1 ROWS FETCH NEXT 5 ROWS ONLY + ) AS [t1] + LEFT JOIN [LevelTwo] AS [l4] ON [t1].[Id] = [l4].[Level1_Optional_Id] +) AS [t0] +ORDER BY [t].[Name], [t].[Id], [t].[Id0], [t0].[Name], [t0].[Id] +"""); + } + + public override async Task SelectMany_over_conditional_null_source(bool async) + { + await base.SelectMany_over_conditional_null_source(async); + + AssertSql(); + } + + public override async Task SelectMany_over_conditional_empty_source(bool async) + { + await base.SelectMany_over_conditional_empty_source(async); + + AssertSql(); + } + + public override async Task Queryable_in_subquery_works_when_final_projection_is_List(bool async) + { + await base.Queryable_in_subquery_works_when_final_projection_is_List(async); + + AssertSql(); + } + + public override async Task Include_after_Select(bool async) + { + await base.Include_after_Select(async); + + AssertSql(); + } + + public override async Task Include_after_SelectMany_and_reference_navigation(bool async) + { + await base.Include_after_SelectMany_and_reference_navigation(async); + + AssertSql(); + } + + public override async Task Filtered_include_different_filter_set_on_same_navigation_twice(bool async) + { + await base.Filtered_include_different_filter_set_on_same_navigation_twice(async); + + AssertSql(); + } + + public override async Task Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(bool async) + { + await base.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async); + + AssertSql(); + } + + public override async Task Filtered_include_include_parameter_used_inside_filter_throws(bool async) + { + await base.Filtered_include_include_parameter_used_inside_filter_throws(async); + + AssertSql(); + } + + public override async Task Filtered_include_with_Distinct_throws(bool async) + { + await base.Filtered_include_with_Distinct_throws(async); + + AssertSql(); + } + + public override async Task Filtered_include_calling_methods_directly_on_parameter_throws(bool async) + { + await base.Filtered_include_calling_methods_directly_on_parameter_throws(async); + + AssertSql(); + } + + public override async Task Filtered_include_is_considered_loaded(bool async) + { + await base.Filtered_include_is_considered_loaded(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Select_nav_prop_collection_one_to_many_required(bool async) + { + await base.Select_nav_prop_collection_one_to_many_required(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Project_collection_navigation_nested_with_take(bool async) + { + await base.Project_collection_navigation_nested_with_take(async); + + AssertSql( +""" +SELECT [l].[Id], [l0].[Id], [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +LEFT JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + ) AS [t] + WHERE [t].[row] <= 50 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id] +"""); + } + + public override async Task Multiple_optional_navigation_with_Include(bool async) + { + await base.Multiple_optional_navigation_with_Include(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Complex_query_with_let_collection_projection_FirstOrDefault_with_ToList_on_inner_and_outer(bool async) + { + await base.Complex_query_with_let_collection_projection_FirstOrDefault_with_ToList_on_inner_and_outer(async); + + AssertSql( +""" +SELECT [l].[Id], [t].[Id], [t0].[Name], [t0].[Id], [t].[c] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT TOP(1) 1 AS [c], [l0].[Id] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) +) AS [t] +OUTER APPLY ( + SELECT [l1].[Name], [l1].[Id] + FROM [LevelOne] AS [l1] + WHERE EXISTS ( + SELECT 1 + FROM [LevelTwo] AS [l2] + WHERE [l1].[Id] = [l2].[OneToMany_Optional_Inverse2Id] AND [l2].[Id] = [t].[Id]) +) AS [t0] +ORDER BY [l].[Id], [t].[Id] +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_complex_repeated_checked(bool async) + { + await base.Include_collection_with_multiple_orderbys_complex_repeated_checked(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` +FROM `LevelTwo` AS `l` +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY -`l`.`Level1_Required_Id`, `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Multiple_optional_navigation_with_string_based_Include(bool async) + { + await base.Multiple_optional_navigation_with_string_based_Include(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Projecting_collection_after_optional_reference_correlated_with_parent(bool async) + { + await base.Projecting_collection_after_optional_reference_correlated_with_parent(async); + + AssertSql( +""" +SELECT [l].[Id], [l0].[Id], [t].[ChildId], [t].[ParentName] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +OUTER APPLY ( + SELECT [l1].[Id] AS [ChildId], [l0].[Name] AS [ParentName] + FROM [LevelThree] AS [l1] + WHERE ([l0].[Id] IS NOT NULL) AND [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +) AS [t] +ORDER BY [l].[Id], [l0].[Id] +"""); + } + + public override async Task Projecting_collection_with_group_by_after_optional_reference_correlated_with_parent(bool async) + { + await base.Projecting_collection_with_group_by_after_optional_reference_correlated_with_parent(async); + + AssertSql( +""" +SELECT [l].[Id], [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], [l0].[Id], [t].[Key], [t].[Count] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +LEFT JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[Level2_Optional_Id] +OUTER APPLY ( + SELECT [l2].[Name] AS [Key], COUNT(*) AS [Count] + FROM [LevelThree] AS [l2] + WHERE ([l0].[Id] IS NOT NULL) AND [l0].[Id] = [l2].[OneToMany_Optional_Inverse3Id] + GROUP BY [l2].[Name] +) AS [t] +ORDER BY [l].[Id], [l0].[Id], [l1].[Id] +"""); + } + + public override async Task Multiple_complex_includes_EF_Property(bool async) + { + await base.Multiple_complex_includes_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Multiple_complex_includes_self_ref_EF_Property(bool async) + { + await base.Multiple_complex_includes_self_ref_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Name0`, `s`.`OneToMany_Optional_Self_Inverse1Id0`, `s`.`OneToMany_Required_Self_Inverse1Id0`, `s`.`OneToOne_Optional_Self1Id0` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Self_Inverse1Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id`, `l3`.`Id` AS `Id0`, `l3`.`Date` AS `Date0`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l3`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l3`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` + FROM `LevelOne` AS `l2` + LEFT JOIN `LevelOne` AS `l3` ON `l2`.`OneToOne_Optional_Self1Id` = `l3`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Self_Inverse1Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_collection_multiple_with_filter_EF_Property(bool async) + { + await base.Include_collection_multiple_with_filter_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l4`.`Id` AS `Id1`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name` AS `Name1`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id` + FROM (`LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +WHERE ( + SELECT COUNT(*) + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` + WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` AND (`l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL)) > 0 +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filtered_include_basic_Where_EF_Property(bool async) + { + await base.Filtered_include_basic_Where_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` > 5 +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Filtered_include_OrderBy_EF_Property(bool async) + { + await base.Filtered_include_OrderBy_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Name` +"""); + } + + public override async Task Filtered_include_basic_OrderBy_Skip_Take_EF_Property(bool async) + { + await base.Filtered_include_basic_OrderBy_Skip_Take_EF_Property(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_on_ThenInclude_EF_Property(bool async) + { + await base.Filtered_include_on_ThenInclude_EF_Property(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +LEFT JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Name]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Name] +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection_nested(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection_nested(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id`, `s`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection_reference(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection_reference(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id`, `s`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection_multiple(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection_multiple(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Required_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection_reference_same_level(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection_reference_same_level(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_reference(bool async) + { + await base.Final_GroupBy_property_entity_Include_reference(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_reference_multiple(bool async) + { + await base.Final_GroupBy_property_entity_Include_reference_multiple(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Required_Id` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Project_collection_and_nested_conditional(bool async) + { + await base.Project_collection_and_nested_conditional(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Name`, `l0`.`Id`, IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +WHERE IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) = '02' +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsCollectionsSplitQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsCollectionsSplitQueryLibRedTest.cs new file mode 100644 index 00000000..90e63f4b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsCollectionsSplitQueryLibRedTest.cs @@ -0,0 +1,4497 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class ComplexNavigationsCollectionsSplitQueryLibRedTest + : ComplexNavigationsCollectionsSplitQueryRelationalTestBase +{ + public ComplexNavigationsCollectionsSplitQueryLibRedTest( + ComplexNavigationsQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Filtered_include_basic_Where(bool async) + { + await base.Filtered_include_basic_Where(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` > 5 +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Filtered_include_OrderBy(bool async) + { + await base.Filtered_include_OrderBy(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Name` +"""); + } + + public override async Task Filtered_ThenInclude_OrderBy(bool async) + { + await base.Filtered_ThenInclude_OrderBy(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Name` +"""); + } + + public override async Task Filtered_include_ThenInclude_OrderBy(bool async) + { + await base.Filtered_include_ThenInclude_OrderBy(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Name`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Name`, `l0`.`Id`, `l1`.`Name` DESC +"""); + } + + public override async Task Filtered_include_basic_OrderBy_Take(bool async) + { + await base.Filtered_include_basic_OrderBy_Take(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_basic_OrderBy_Skip(bool async) + { + await base.Filtered_include_basic_OrderBy_Skip(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE 1 < [t].[row] +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_basic_OrderBy_Skip_Take(bool async) + { + await base.Filtered_include_basic_OrderBy_Skip_Take(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_Skip_without_OrderBy(bool async) + { + await base.Filtered_include_Skip_without_OrderBy(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE 1 < [t].[row] +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id] +"""); + } + + public override async Task Filtered_include_Take_without_OrderBy(bool async) + { + await base.Filtered_include_Take_without_OrderBy(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id] +"""); + } + + public override async Task Filtered_include_on_ThenInclude(bool async) + { + await base.Filtered_include_on_ThenInclude(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +INNER JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Name]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_after_reference_navigation(bool async) + { + await base.Filtered_include_after_reference_navigation(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +INNER JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Name]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_after_different_filtered_include_same_level(bool async) + { + await base.Filtered_include_after_different_filtered_include_same_level(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Required_Inverse2Id] ORDER BY [l0].[Name] DESC) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Bar' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE 1 < [t].[row] +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Required_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[Name] DESC +"""); + } + + public override async Task Filtered_include_after_different_filtered_include_different_level(bool async) + { + await base.Filtered_include_after_different_filtered_include_different_level(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name], [t0].[Id] +""", +// +""" +SELECT [t1].[Id], [t1].[Level2_Optional_Id], [t1].[Level2_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse3Id], [t1].[OneToMany_Optional_Self_Inverse3Id], [t1].[OneToMany_Required_Inverse3Id], [t1].[OneToMany_Required_Self_Inverse3Id], [t1].[OneToOne_Optional_PK_Inverse3Id], [t1].[OneToOne_Optional_Self3Id], [l].[Id], [t0].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id] + FROM ( + SELECT [l0].[Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +INNER JOIN ( + SELECT [t2].[Id], [t2].[Level2_Optional_Id], [t2].[Level2_Required_Id], [t2].[Name], [t2].[OneToMany_Optional_Inverse3Id], [t2].[OneToMany_Optional_Self_Inverse3Id], [t2].[OneToMany_Required_Inverse3Id], [t2].[OneToMany_Required_Self_Inverse3Id], [t2].[OneToOne_Optional_PK_Inverse3Id], [t2].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Required_Inverse3Id] ORDER BY [l1].[Name] DESC) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Bar' OR ([l1].[Name] IS NULL) + ) AS [t2] + WHERE 1 < [t2].[row] +) AS [t1] ON [t0].[Id] = [t1].[OneToMany_Required_Inverse3Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name], [t0].[Id], [t1].[OneToMany_Required_Inverse3Id], [t1].[Name] DESC +"""); + } + + public override async Task Filtered_include_same_filter_set_on_same_navigation_twice(bool async) + { + await base.Filtered_include_same_filter_set_on_same_navigation_twice(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id] DESC) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] DESC +"""); + } + + public override async Task Filtered_include_same_filter_set_on_same_navigation_twice_followed_by_ThenIncludes(bool async) + { + await base.Filtered_include_same_filter_set_on_same_navigation_twice_followed_by_ThenIncludes(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(2) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] AND ([l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL)) + ORDER BY [l1].[Id] + ) AS [t] + LEFT JOIN [LevelThree] AS [l0] ON [t].[Id] = [l0].[Level2_Required_Id] +) AS [t0] +ORDER BY [l].[Id], [t0].[Id], [t0].[Id0] +""", +// +""" +SELECT [l2].[Id], [l2].[Level2_Optional_Id], [l2].[Level2_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse3Id], [l2].[OneToMany_Optional_Self_Inverse3Id], [l2].[OneToMany_Required_Inverse3Id], [l2].[OneToMany_Required_Self_Inverse3Id], [l2].[OneToOne_Optional_PK_Inverse3Id], [l2].[OneToOne_Optional_Self3Id], [l].[Id], [t0].[Id], [t0].[Id0] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [t].[Id], [l0].[Id] AS [Id0] + FROM ( + SELECT TOP(2) [l1].[Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] AND ([l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL)) + ORDER BY [l1].[Id] + ) AS [t] + LEFT JOIN [LevelThree] AS [l0] ON [t].[Id] = [l0].[Level2_Required_Id] +) AS [t0] +INNER JOIN [LevelThree] AS [l2] ON [t0].[Id] = [l2].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [t0].[Id], [t0].[Id0] +"""); + } + + public override async Task + Filtered_include_multiple_multi_level_includes_with_first_level_using_filter_include_on_one_of_the_chains_only(bool async) + { + await base + .Filtered_include_multiple_multi_level_includes_with_first_level_using_filter_include_on_one_of_the_chains_only(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(2) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] AND ([l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL)) + ORDER BY [l1].[Id] + ) AS [t] + LEFT JOIN [LevelThree] AS [l0] ON [t].[Id] = [l0].[Level2_Required_Id] +) AS [t0] +ORDER BY [l].[Id], [t0].[Id], [t0].[Id0] +""", +// +""" +SELECT [l2].[Id], [l2].[Level2_Optional_Id], [l2].[Level2_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse3Id], [l2].[OneToMany_Optional_Self_Inverse3Id], [l2].[OneToMany_Required_Inverse3Id], [l2].[OneToMany_Required_Self_Inverse3Id], [l2].[OneToOne_Optional_PK_Inverse3Id], [l2].[OneToOne_Optional_Self3Id], [l].[Id], [t0].[Id], [t0].[Id0] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [t].[Id], [l0].[Id] AS [Id0] + FROM ( + SELECT TOP(2) [l1].[Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] AND ([l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL)) + ORDER BY [l1].[Id] + ) AS [t] + LEFT JOIN [LevelThree] AS [l0] ON [t].[Id] = [l0].[Level2_Required_Id] +) AS [t0] +INNER JOIN [LevelThree] AS [l2] ON [t0].[Id] = [l2].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [t0].[Id], [t0].[Id0] +"""); + } + + public override async Task Filtered_include_and_non_filtered_include_on_same_navigation1(bool async) + { + await base.Filtered_include_and_non_filtered_include_on_same_navigation1(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_and_non_filtered_include_on_same_navigation2(bool async) + { + await base.Filtered_include_and_non_filtered_include_on_same_navigation2(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_and_non_filtered_include_followed_by_then_include_on_same_navigation(bool async) + { + await base.Filtered_include_and_non_filtered_include_followed_by_then_include_on_same_navigation(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [l].[Id] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(1) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] AND ([l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL)) + ORDER BY [l1].[Id] + ) AS [t] + LEFT JOIN [LevelThree] AS [l0] ON [t].[Id] = [l0].[OneToOne_Optional_PK_Inverse3Id] +) AS [t0] +ORDER BY [l].[Id], [t0].[Id], [t0].[Id0] +""", +// +""" +SELECT [t1].[Id], [t1].[Level3_Optional_Id], [t1].[Level3_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse4Id], [t1].[OneToMany_Optional_Self_Inverse4Id], [t1].[OneToMany_Required_Inverse4Id], [t1].[OneToMany_Required_Self_Inverse4Id], [t1].[OneToOne_Optional_PK_Inverse4Id], [t1].[OneToOne_Optional_Self4Id], [l].[Id], [t0].[Id], [t0].[Id0] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [t].[Id], [l0].[Id] AS [Id0] + FROM ( + SELECT TOP(1) [l1].[Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] AND ([l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL)) + ORDER BY [l1].[Id] + ) AS [t] + LEFT JOIN [LevelThree] AS [l0] ON [t].[Id] = [l0].[OneToOne_Optional_PK_Inverse3Id] +) AS [t0] +INNER JOIN ( + SELECT [l2].[Id], [l2].[Level3_Optional_Id], [l2].[Level3_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse4Id], [l2].[OneToMany_Optional_Self_Inverse4Id], [l2].[OneToMany_Required_Inverse4Id], [l2].[OneToMany_Required_Self_Inverse4Id], [l2].[OneToOne_Optional_PK_Inverse4Id], [l2].[OneToOne_Optional_Self4Id] + FROM [LevelFour] AS [l2] + WHERE [l2].[Id] > 1 +) AS [t1] ON [t0].[Id0] = [t1].[OneToMany_Optional_Inverse4Id] +ORDER BY [l].[Id], [t0].[Id], [t0].[Id0] +"""); + } + + public override async Task Filtered_include_complex_three_level_with_middle_having_filter1(bool async) + { + await base.Filtered_include_complex_three_level_with_middle_having_filter1(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +INNER JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Id] +""", +// +""" +SELECT [l2].[Id], [l2].[Level3_Optional_Id], [l2].[Level3_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse4Id], [l2].[OneToMany_Optional_Self_Inverse4Id], [l2].[OneToMany_Required_Inverse4Id], [l2].[OneToMany_Required_Self_Inverse4Id], [l2].[OneToOne_Optional_PK_Inverse4Id], [l2].[OneToOne_Optional_Self4Id], [l].[Id], [l0].[Id], [t0].[Id] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +INNER JOIN ( + SELECT [t].[Id], [t].[OneToMany_Optional_Inverse3Id] + FROM ( + SELECT [l1].[Id], [l1].[OneToMany_Optional_Inverse3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +INNER JOIN [LevelFour] AS [l2] ON [t0].[Id] = [l2].[OneToMany_Optional_Inverse4Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Id] +""", +// +""" +SELECT [l2].[Id], [l2].[Level3_Optional_Id], [l2].[Level3_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse4Id], [l2].[OneToMany_Optional_Self_Inverse4Id], [l2].[OneToMany_Required_Inverse4Id], [l2].[OneToMany_Required_Self_Inverse4Id], [l2].[OneToOne_Optional_PK_Inverse4Id], [l2].[OneToOne_Optional_Self4Id], [l].[Id], [l0].[Id], [t0].[Id] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +INNER JOIN ( + SELECT [t].[Id], [t].[OneToMany_Optional_Inverse3Id] + FROM ( + SELECT [l1].[Id], [l1].[OneToMany_Optional_Inverse3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +INNER JOIN [LevelFour] AS [l2] ON [t0].[Id] = [l2].[OneToMany_Required_Inverse4Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_complex_three_level_with_middle_having_filter2(bool async) + { + await base.Filtered_include_complex_three_level_with_middle_having_filter2(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +INNER JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Id] +""", +// +""" +SELECT [l2].[Id], [l2].[Level3_Optional_Id], [l2].[Level3_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse4Id], [l2].[OneToMany_Optional_Self_Inverse4Id], [l2].[OneToMany_Required_Inverse4Id], [l2].[OneToMany_Required_Self_Inverse4Id], [l2].[OneToOne_Optional_PK_Inverse4Id], [l2].[OneToOne_Optional_Self4Id], [l].[Id], [l0].[Id], [t0].[Id] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +INNER JOIN ( + SELECT [t].[Id], [t].[OneToMany_Optional_Inverse3Id] + FROM ( + SELECT [l1].[Id], [l1].[OneToMany_Optional_Inverse3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +INNER JOIN [LevelFour] AS [l2] ON [t0].[Id] = [l2].[OneToMany_Optional_Inverse4Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Id] +""", +// +""" +SELECT [l2].[Id], [l2].[Level3_Optional_Id], [l2].[Level3_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse4Id], [l2].[OneToMany_Optional_Self_Inverse4Id], [l2].[OneToMany_Required_Inverse4Id], [l2].[OneToMany_Required_Self_Inverse4Id], [l2].[OneToOne_Optional_PK_Inverse4Id], [l2].[OneToOne_Optional_Self4Id], [l].[Id], [l0].[Id], [t0].[Id] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +INNER JOIN ( + SELECT [t].[Id], [t].[OneToMany_Optional_Inverse3Id] + FROM ( + SELECT [l1].[Id], [l1].[OneToMany_Optional_Inverse3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +INNER JOIN [LevelFour] AS [l2] ON [t0].[Id] = [l2].[OneToMany_Required_Inverse4Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_variable_used_inside_filter(bool async) + { + await base.Filtered_include_variable_used_inside_filter(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +@__prm_0='Foo' (Size = 4000) + +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> @__prm_0 OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_context_accessed_inside_filter(bool async) + { + await base.Filtered_include_context_accessed_inside_filter(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM [LevelOne] AS [l] +""", +// +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +@__p_0='True' + +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE @__p_0 = CAST(1 AS bit) + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_context_accessed_inside_filter_correlated(bool async) + { + await base.Filtered_include_context_accessed_inside_filter_correlated(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE ( + SELECT COUNT(*) + FROM [LevelOne] AS [l1] + WHERE [l1].[Id] <> [l0].[Id]) > 1 + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_outer_parameter_used_inside_filter(bool async) + { + await base.Filtered_include_outer_parameter_used_inside_filter(async); + + AssertSql( +""" +SELECT [l].[Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +CROSS APPLY [LevelTwo] AS [l0] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +CROSS APPLY [LevelTwo] AS [l0] +INNER JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +CROSS APPLY [LevelTwo] AS [l0] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +CROSS APPLY [LevelTwo] AS [l0] +INNER JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] AND [l].[Id] <> [l1].[Id] +ORDER BY [l].[Id], [l0].[Id] +"""); + } + + public override async Task Select_nav_prop_collection_one_to_many_required(bool async) + { + await base.Select_nav_prop_collection_one_to_many_required(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Required_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task + Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(bool async) + { + await base.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top( + async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l14`.`Name` +FROM ((((((((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse4Id`) +LEFT JOIN ( + SELECT `l3`.`Id`, `l4`.`Id` AS `Id0`, `l5`.`Id` AS `Id1`, `l6`.`Id` AS `Id2` + FROM ((`LevelFour` AS `l3` + INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) + LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) + LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` +) AS `s` ON `l2`.`Id` = `s`.`Id2`) +LEFT JOIN ( + SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` + FROM ((`LevelFour` AS `l7` + INNER JOIN `LevelThree` AS `l8` ON `l7`.`Level3_Required_Id` = `l8`.`Id`) + LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) + LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` + WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) +LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +""", + // + """ +SELECT `l18`.`Id`, `l18`.`Date`, `l18`.`Level1_Optional_Id`, `l18`.`Level1_Required_Id`, `l18`.`Name`, `l18`.`OneToMany_Optional_Inverse2Id`, `l18`.`OneToMany_Optional_Self_Inverse2Id`, `l18`.`OneToMany_Required_Inverse2Id`, `l18`.`OneToMany_Required_Self_Inverse2Id`, `l18`.`OneToOne_Optional_PK_Inverse2Id`, `l18`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id` +FROM (((((((((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse4Id`) +LEFT JOIN ( + SELECT `l3`.`Id`, `l4`.`Id` AS `Id0`, `l5`.`Id` AS `Id1`, `l6`.`Id` AS `Id2` + FROM ((`LevelFour` AS `l3` + INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) + LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) + LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` +) AS `s` ON `l2`.`Id` = `s`.`Id2`) +LEFT JOIN ( + SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` + FROM ((`LevelFour` AS `l7` + INNER JOIN `LevelThree` AS `l8` ON `l7`.`Level3_Required_Id` = `l8`.`Id`) + LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) + LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` + WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) +LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id`) +LEFT JOIN ( + SELECT `l17`.`Id`, `l17`.`Date`, `l17`.`Level1_Optional_Id`, `l17`.`Level1_Required_Id`, `l17`.`Name`, `l17`.`OneToMany_Optional_Inverse2Id`, `l17`.`OneToMany_Optional_Self_Inverse2Id`, `l17`.`OneToMany_Required_Inverse2Id`, `l17`.`OneToMany_Required_Self_Inverse2Id`, `l17`.`OneToOne_Optional_PK_Inverse2Id`, `l17`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l17` + WHERE `l17`.`Id` <> 42 +) AS `l18` ON `s`.`Id2` = `l18`.`OneToMany_Optional_Self_Inverse2Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL AND `s`.`Id2` IS NOT NULL AND `l18`.`OneToMany_Optional_Self_Inverse2Id` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +"""); + } + + public override async Task Project_collection_navigation(bool async) + { + await base.Project_collection_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Project_collection_navigation_nested(bool async) + { + await base.Project_collection_navigation_nested(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Project_collection_navigation_nested_with_take(bool async) + { + await base.Project_collection_navigation_nested_with_take(async); + + AssertSql( +""" +SELECT [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +INNER JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + ) AS [t] + WHERE [t].[row] <= 50 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id] +"""); + } + + public override async Task Project_collection_navigation_using_ef_property(bool async) + { + await base.Project_collection_navigation_using_ef_property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Project_collection_navigation_nested_anonymous(bool async) + { + await base.Project_collection_navigation_nested_anonymous(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Project_collection_navigation_composed(bool async) + { + await base.Project_collection_navigation_composed(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +WHERE `l`.`Id` < 3 +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l3`.`Id`, `l3`.`Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Optional_Self_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToMany_Required_Self_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l3`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l2` + WHERE `l2`.`Name` <> 'Foo' OR `l2`.`Name` IS NULL +) AS `l3` ON `l`.`Id` = `l3`.`OneToMany_Optional_Inverse2Id` +WHERE `l`.`Id` < 3 +ORDER BY `l`.`Id` +"""); + } + + public override async Task Project_collection_and_root_entity(bool async) + { + await base.Project_collection_and_root_entity(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Project_collection_and_include(bool async) + { + await base.Project_collection_and_include(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Project_navigation_and_collection(bool async) + { + await base.Project_navigation_and_collection(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_inside_subquery(bool async) + { + await base.Include_inside_subquery(async); + + AssertSql( +""" +SELECT [l].[Id] +FROM [LevelOne] AS [l] +WHERE [l].[Id] < 3 +ORDER BY [l].[Id] +""", +// +""" +SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Id] > 0 +) AS [t] +WHERE [l].[Id] < 3 +ORDER BY [l].[Id], [t].[Id] +""", +// +""" +SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], [l].[Id], [t].[Id] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [l0].[Id] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Id] > 0 +) AS [t] +INNER JOIN [LevelThree] AS [l1] ON [t].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +WHERE [l].[Id] < 3 +ORDER BY [l].[Id], [t].[Id] +"""); + } + + public override async Task Null_check_in_anonymous_type_projection_should_not_be_removed(bool async) + { + await base.Null_check_in_anonymous_type_projection_should_not_be_removed(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`c`, `s`.`Name`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l5`.`Id` IS NULL AS `c`, `l5`.`Name`, `l4`.`OneToMany_Optional_Inverse2Id` + FROM `LevelTwo` AS `l4` + LEFT JOIN `LevelThree` AS `l5` ON `l4`.`Id` = `l5`.`Level2_Required_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Null_check_in_Dto_projection_should_not_be_removed(bool async) + { + await base.Null_check_in_Dto_projection_should_not_be_removed(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`c`, `s`.`Name`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l5`.`Id` IS NULL AS `c`, `l5`.`Name`, `l4`.`OneToMany_Optional_Inverse2Id` + FROM `LevelTwo` AS `l4` + LEFT JOIN `LevelThree` AS `l5` ON `l4`.`Id` = `l5`.`Level2_Required_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task SelectMany_navigation_property_followed_by_select_collection_navigation(bool async) + { + await base.SelectMany_navigation_property_followed_by_select_collection_navigation(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(bool async) + { + await base.Multiple_SelectMany_navigation_property_followed_by_select_collection_navigation(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(bool async) + { + await base.SelectMany_navigation_property_with_include_and_followed_by_select_collection_navigation(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Required_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Required_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Lift_projection_mapping_when_pushing_down_subquery(bool async) + { + await base.Lift_projection_mapping_when_pushing_down_subquery(async); + + AssertSql( +""" +@__p_0='25' + +SELECT [t].[Id], [t0].[Id], [t0].[c] +FROM ( + SELECT TOP(@__p_0) [l].[Id] + FROM [LevelOne] AS [l] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[c], [t1].[OneToMany_Required_Inverse2Id] + FROM ( + SELECT [l0].[Id], 1 AS [c], [l0].[OneToMany_Required_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Required_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Id] = [t0].[OneToMany_Required_Inverse2Id] +ORDER BY [t].[Id] +""", +// +""" +@__p_0='25' + +SELECT [l0].[Id], [t].[Id] +FROM ( + SELECT TOP(@__p_0) [l].[Id] + FROM [LevelOne] AS [l] +) AS [t] +INNER JOIN [LevelTwo] AS [l0] ON [t].[Id] = [l0].[OneToMany_Required_Inverse2Id] +ORDER BY [t].[Id] +"""); + } + + public override async Task Select_subquery_single_nested_subquery(bool async) + { + await base.Select_subquery_single_nested_subquery(async); + + AssertSql( +""" +SELECT [l].[Id], [t0].[Id], [t0].[c] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[c], [t].[Id], [t].[OneToMany_Optional_Inverse2Id] + FROM ( + SELECT 1 AS [c], [l0].[Id], [l0].[OneToMany_Optional_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[Id] +""", +// +""" +SELECT [l1].[Id], [l].[Id], [t0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[OneToMany_Optional_Inverse2Id] + FROM ( + SELECT [l0].[Id], [l0].[OneToMany_Optional_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +INNER JOIN [LevelThree] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [t0].[Id], [l1].[Id] +"""); + } + + public override async Task Select_subquery_single_nested_subquery2(bool async) + { + await base.Select_subquery_single_nested_subquery2(async); + + AssertSql( +""" +SELECT [l].[Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [l].[Id], [l0].[Id], [t0].[Id], [t0].[c] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +LEFT JOIN ( + SELECT [t].[c], [t].[Id], [t].[OneToMany_Optional_Inverse3Id] + FROM ( + SELECT 1 AS [c], [l1].[Id], [l1].[OneToMany_Optional_Inverse3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[Id] +""", +// +""" +SELECT [l2].[Id], [l].[Id], [l0].[Id], [t0].[Id] +FROM [LevelOne] AS [l] +INNER JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +LEFT JOIN ( + SELECT [t].[Id], [t].[OneToMany_Optional_Inverse3Id] + FROM ( + SELECT [l1].[Id], [l1].[OneToMany_Optional_Inverse3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Id]) AS [row] + FROM [LevelThree] AS [l1] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +INNER JOIN [LevelFour] AS [l2] ON [t0].[Id] = [l2].[OneToMany_Optional_Inverse4Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[Id], [l2].[Id] +"""); + } + + public override async Task Queryable_in_subquery_works_when_final_projection_is_List(bool async) + { + await base.Queryable_in_subquery_works_when_final_projection_is_List(async); + + AssertSql(); + } + + public override async Task Complex_query_with_let_collection_projection_FirstOrDefault_with_ToList_on_inner_and_outer(bool async) + { + await base.Complex_query_with_let_collection_projection_FirstOrDefault_with_ToList_on_inner_and_outer(async); + + AssertSql( +""" +SELECT [l].[Id], [t].[Id], [t].[c] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT TOP(1) 1 AS [c], [l0].[Id] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) +) AS [t] +ORDER BY [l].[Id], [t].[Id] +""", +// +""" +SELECT [t0].[Name], [l].[Id], [t].[Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT TOP(1) [l0].[Id] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) +) AS [t] +CROSS APPLY ( + SELECT [l1].[Name] + FROM [LevelOne] AS [l1] + WHERE EXISTS ( + SELECT 1 + FROM [LevelTwo] AS [l2] + WHERE [l1].[Id] = [l2].[OneToMany_Optional_Inverse2Id] AND [l2].[Id] = [t].[Id]) +) AS [t0] +ORDER BY [l].[Id], [t].[Id] +"""); + } + + public override async Task Complex_query_with_let_collection_projection_FirstOrDefault(bool async) + { + await base.Complex_query_with_let_collection_projection_FirstOrDefault(async); + + AssertSql( +""" +SELECT [l].[Id], [t0].[Id], [t0].[c] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[c], [t].[Id], [t].[OneToMany_Optional_Inverse2Id] + FROM ( + SELECT 1 AS [c], [l0].[Id], [l0].[OneToMany_Optional_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[Id] +""", +// +""" +SELECT [t1].[Name], [l].[Id], [t0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[OneToMany_Optional_Inverse2Id] + FROM ( + SELECT [l0].[Id], [l0].[OneToMany_Optional_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] <> N'Foo' OR ([l0].[Name] IS NULL) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +CROSS APPLY ( + SELECT [l1].[Name] + FROM [LevelOne] AS [l1] + WHERE EXISTS ( + SELECT 1 + FROM [LevelTwo] AS [l2] + WHERE [l1].[Id] = [l2].[OneToMany_Optional_Inverse2Id] AND [l2].[Id] = [t0].[Id]) +) AS [t1] +ORDER BY [l].[Id], [t0].[Id] +"""); + } + + public override async Task SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(bool async) + { + await base.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l14`.`Name` +FROM ((((((((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse4Id`) +LEFT JOIN ( + SELECT `l3`.`Id`, `l4`.`Id` AS `Id0`, `l5`.`Id` AS `Id1`, `l6`.`Id` AS `Id2` + FROM ((`LevelFour` AS `l3` + INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) + LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) + LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` +) AS `s` ON `l2`.`Id` = `s`.`Id2`) +LEFT JOIN ( + SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` + FROM ((`LevelFour` AS `l7` + INNER JOIN `LevelThree` AS `l8` ON `l7`.`Level3_Required_Id` = `l8`.`Id`) + LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) + LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` + WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) +LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +""", + // + """ +SELECT `l18`.`Id`, `l18`.`Date`, `l18`.`Level1_Optional_Id`, `l18`.`Level1_Required_Id`, `l18`.`Name`, `l18`.`OneToMany_Optional_Inverse2Id`, `l18`.`OneToMany_Optional_Self_Inverse2Id`, `l18`.`OneToMany_Required_Inverse2Id`, `l18`.`OneToMany_Required_Self_Inverse2Id`, `l18`.`OneToOne_Optional_PK_Inverse2Id`, `l18`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id` +FROM (((((((((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse4Id`) +LEFT JOIN ( + SELECT `l3`.`Id`, `l4`.`Id` AS `Id0`, `l5`.`Id` AS `Id1`, `l6`.`Id` AS `Id2` + FROM ((`LevelFour` AS `l3` + INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) + LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) + LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` +) AS `s` ON `l2`.`Id` = `s`.`Id2`) +LEFT JOIN ( + SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` + FROM ((`LevelFour` AS `l7` + INNER JOIN `LevelThree` AS `l8` ON `l7`.`Level3_Required_Id` = `l8`.`Id`) + LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) + LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` + WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) +LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id`) +LEFT JOIN ( + SELECT `l17`.`Id`, `l17`.`Date`, `l17`.`Level1_Optional_Id`, `l17`.`Level1_Required_Id`, `l17`.`Name`, `l17`.`OneToMany_Optional_Inverse2Id`, `l17`.`OneToMany_Optional_Self_Inverse2Id`, `l17`.`OneToMany_Required_Inverse2Id`, `l17`.`OneToMany_Required_Self_Inverse2Id`, `l17`.`OneToOne_Optional_PK_Inverse2Id`, `l17`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l17` + WHERE `l17`.`Id` <> 42 +) AS `l18` ON `s`.`Id2` = `l18`.`OneToMany_Optional_Self_Inverse2Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL AND `s`.`Id2` IS NOT NULL AND `l18`.`OneToMany_Optional_Self_Inverse2Id` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +"""); + } + + public override async Task Take_Select_collection_Take(bool async) + { + await base.Take_Select_collection_Take(async); + + AssertSql( +""" +@__p_0='1' + +SELECT TOP(@__p_0) [l].[Id], [l].[Name] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +@__p_0='1' + +SELECT [t0].[Id], [t0].[Name], [t0].[Level1Id], [t0].[Level2Id], [t0].[Id0], [t0].[Date], [t0].[Name0], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Id] +FROM ( + SELECT TOP(@__p_0) [l].[Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] +) AS [t] +CROSS APPLY ( + SELECT [t1].[Id], [t1].[Name], [t1].[OneToMany_Required_Inverse2Id] AS [Level1Id], [t1].[Level1_Required_Id] AS [Level2Id], [l0].[Id] AS [Id0], [l0].[Date], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id] + FROM ( + SELECT TOP(3) [l1].[Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Required_Inverse2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Required_Inverse2Id] + ORDER BY [l1].[Id] + ) AS [t1] + INNER JOIN [LevelOne] AS [l0] ON [t1].[Level1_Required_Id] = [l0].[Id] +) AS [t0] +ORDER BY [t].[Id], [t0].[Id] +"""); + } + + public override async Task Skip_Take_Select_collection_Skip_Take(bool async) + { + await base.Skip_Take_Select_collection_Skip_Take(async); + + AssertSql( +""" +@__p_0='1' + +SELECT [l].[Id], [l].[Name] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +OFFSET @__p_0 ROWS FETCH NEXT @__p_0 ROWS ONLY +""", +// +""" +@__p_0='1' + +SELECT [t0].[Id], [t0].[Name], [t0].[Level1Id], [t0].[Level2Id], [t0].[Id0], [t0].[Date], [t0].[Name0], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Id] +FROM ( + SELECT [l].[Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] + OFFSET @__p_0 ROWS FETCH NEXT @__p_0 ROWS ONLY +) AS [t] +CROSS APPLY ( + SELECT [t1].[Id], [t1].[Name], [t1].[OneToMany_Required_Inverse2Id] AS [Level1Id], [t1].[Level1_Required_Id] AS [Level2Id], [l0].[Id] AS [Id0], [l0].[Date], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l1].[Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Required_Inverse2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Required_Inverse2Id] + ORDER BY [l1].[Id] + OFFSET 1 ROWS FETCH NEXT 3 ROWS ONLY + ) AS [t1] + INNER JOIN [LevelOne] AS [l0] ON [t1].[Level1_Required_Id] = [l0].[Id] +) AS [t0] +ORDER BY [t].[Id], [t0].[Id] +"""); + } + + public override async Task Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(bool async) + { + await base.Multi_level_include_one_to_many_optional_and_one_to_many_optional_produces_valid_sql(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task + Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(bool async) + { + await base + .Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` + FROM `LevelThree` AS `l1` + INNER JOIN `LevelTwo` AS `l2` ON `l1`.`OneToMany_Required_Inverse3Id` = `l2`.`Id` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `s`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id`, `s`.`Id`, `s`.`Id0` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`OneToMany_Optional_Inverse3Id`, `l2`.`Id` AS `Id0` + FROM `LevelThree` AS `l1` + INNER JOIN `LevelTwo` AS `l2` ON `l1`.`OneToMany_Required_Inverse3Id` = `l2`.`Id` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l3` ON `s`.`Id0` = `l3`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `s`.`OneToMany_Optional_Inverse3Id` IS NOT NULL AND `s`.`Id0` IS NOT NULL AND `l3`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Multiple_complex_includes(bool async) + { + await base.Multiple_complex_includes(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +INNER JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Multiple_complex_includes_self_ref(bool async) + { + await base.Multiple_complex_includes_self_ref(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Self_Inverse1Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Self_Inverse1Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Name0`, `s`.`OneToMany_Optional_Self_Inverse1Id0`, `s`.`OneToMany_Required_Self_Inverse1Id0`, `s`.`OneToOne_Optional_Self1Id0`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) +INNER JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id`, `l3`.`Id` AS `Id0`, `l3`.`Date` AS `Date0`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l3`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l3`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` + FROM `LevelOne` AS `l2` + LEFT JOIN `LevelOne` AS `l3` ON `l2`.`OneToOne_Optional_Self1Id` = `l3`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Self_Inverse1Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_reference_and_collection_order_by(bool async) + { + await base.Include_reference_and_collection_order_by(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_reference_ThenInclude_collection_order_by(bool async) + { + await base.Include_reference_ThenInclude_collection_order_by(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_collection_then_reference(bool async) + { + await base.Include_collection_then_reference(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_collection_with_conditional_order_by(bool async) + { + await base.Include_collection_with_conditional_order_by(async); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY IIF(`l`.`Name` LIKE '%03', 1, 2), `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY IIF(`l`.`Name` LIKE '%03', 1, 2), `l`.`Id` +"""); + } + + public override async Task Multiple_complex_include_select(bool async) + { + await base.Multiple_complex_include_select(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +INNER JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_nested_with_optional_navigation(bool async) + { + await base.Include_nested_with_optional_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Name` <> 'L2 09' OR `l0`.`Name` IS NULL +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + FROM `LevelThree` AS `l1` + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Required_Inverse3Id` +WHERE (`l0`.`Name` <> 'L2 09' OR `l0`.`Name` IS NULL) AND (`l0`.`Id` IS NOT NULL AND `s`.`OneToMany_Required_Inverse3Id` IS NOT NULL) +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Complex_multi_include_with_order_by_and_paging(bool async) + { + await base.Complex_multi_include_with_order_by_and_paging(async); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM ( + SELECT TOP @p1 `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l2` + ORDER BY `l2`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Required_Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id` +""", + // + """ +@p1='10' +@p='0' + +SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l0`.`Id` +FROM (( + SELECT TOP @p1 `l4`.`Id`, `l4`.`Name` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Name` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id` +""", + // + """ +@p1='10' +@p='0' + +SELECT `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l0`.`Id` +FROM (( + SELECT TOP @p1 `l4`.`Id`, `l4`.`Name` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Name` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`OneToMany_Required_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l3`.`OneToMany_Required_Inverse3Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(bool async) + { + await base.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` +FROM (( + SELECT TOP @p1 `l3`.`Id`, `l3`.`Date`, `l3`.`Name`, `l3`.`OneToMany_Optional_Self_Inverse1Id`, `l3`.`OneToMany_Required_Self_Inverse1Id`, `l3`.`OneToOne_Optional_Self1Id` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l3` + ORDER BY `l3`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Required_Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +""", + // + """ +@p1='10' +@p='0' + +SELECT `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +FROM ((( + SELECT TOP @p1 `l5`.`Id`, `l5`.`Name` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Name` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l5` + ORDER BY `l5`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l3`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +""", + // + """ +@p1='10' +@p='0' + +SELECT `l4`.`Id`, `l4`.`Level2_Optional_Id`, `l4`.`Level2_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse3Id`, `l4`.`OneToMany_Optional_Self_Inverse3Id`, `l4`.`OneToMany_Required_Inverse3Id`, `l4`.`OneToMany_Required_Self_Inverse3Id`, `l4`.`OneToOne_Optional_PK_Inverse3Id`, `l4`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +FROM ((( + SELECT TOP @p1 `l5`.`Id`, `l5`.`Name` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Name` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l5` + ORDER BY `l5`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l4` ON `l2`.`Id` = `l4`.`OneToMany_Required_Inverse3Id` +WHERE `l2`.`Id` IS NOT NULL AND `l4`.`OneToMany_Required_Inverse3Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(bool async) + { + await base.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` +FROM (( + SELECT TOP @p1 `l3`.`Id`, `l3`.`Date`, `l3`.`Name`, `l3`.`OneToMany_Optional_Self_Inverse1Id`, `l3`.`OneToMany_Required_Self_Inverse1Id`, `l3`.`OneToOne_Optional_Self1Id` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l3` + ORDER BY `l3`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Required_Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +""", + // + """ +@p1='10' +@p='0' + +SELECT `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +FROM ((( + SELECT TOP @p1 `l4`.`Id`, `l4`.`Name` + FROM ( + SELECT TOP @p + @p1 `l`.`Id`, `l`.`Name` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Name` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id` +WHERE `l2`.`Id` IS NOT NULL AND `l3`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Multiple_include_with_multiple_optional_navigations(bool async) + { + await base.Multiple_include_with_multiple_optional_navigations(async); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l2`.`Id`, `l3`.`Id`, `l4`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Optional_Self_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToMany_Required_Self_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l3`.`OneToOne_Optional_Self2Id`, `l4`.`Level2_Optional_Id`, `l4`.`Level2_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse3Id`, `l4`.`OneToMany_Optional_Self_Inverse3Id`, `l4`.`OneToMany_Required_Inverse3Id`, `l4`.`OneToMany_Required_Self_Inverse3Id`, `l4`.`OneToOne_Optional_PK_Inverse3Id`, `l4`.`OneToOne_Optional_Self3Id` +FROM ((((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l3` ON `l`.`Id` = `l3`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l4` ON `l3`.`Id` = `l4`.`Level2_Optional_Id` +WHERE `l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `l3`.`Id`, `l4`.`Id` +""", + // +""" +SELECT `l5`.`Id`, `l5`.`Level2_Optional_Id`, `l5`.`Level2_Required_Id`, `l5`.`Name`, `l5`.`OneToMany_Optional_Inverse3Id`, `l5`.`OneToMany_Optional_Self_Inverse3Id`, `l5`.`OneToMany_Required_Inverse3Id`, `l5`.`OneToMany_Required_Self_Inverse3Id`, `l5`.`OneToOne_Optional_PK_Inverse3Id`, `l5`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `l3`.`Id`, `l4`.`Id` +FROM (((((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l3` ON `l`.`Id` = `l3`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l4` ON `l3`.`Id` = `l4`.`Level2_Optional_Id`) +LEFT JOIN `LevelThree` AS `l5` ON `l0`.`Id` = `l5`.`OneToMany_Optional_Inverse3Id` +WHERE (`l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL) AND (`l0`.`Id` IS NOT NULL AND `l5`.`OneToMany_Optional_Inverse3Id` IS NOT NULL) +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `l3`.`Id`, `l4`.`Id` +"""); + } + + public override async Task SelectMany_with_Include1(bool async) + { + await base.SelectMany_with_Include1(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Orderby_SelectMany_with_Include1(bool async) + { + await base.Orderby_SelectMany_with_Include1(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task SelectMany_with_Include2(bool async) + { + await base.SelectMany_with_Include2(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +"""); + } + + public override async Task SelectMany_with_Include_ThenInclude(bool async) + { + await base.SelectMany_with_Include_ThenInclude(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +WHERE `l1`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Multiple_SelectMany_with_Include(bool async) + { + await base.Multiple_SelectMany_with_Include(async); + + AssertSql( +""" +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +""", + // + """ +SELECT `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +FROM (((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l1`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL AND `l3`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Required_navigation_with_Include(bool async) + { + await base.Required_navigation_with_Include(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id` +FROM (`LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`OneToMany_Required_Inverse2Id` = `l1`.`Id` +WHERE `l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL +"""); + } + + public override async Task Required_navigation_with_Include_ThenInclude(bool async) + { + await base.Required_navigation_with_Include_ThenInclude(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id` +FROM ((`LevelFour` AS `l` +INNER JOIN `LevelThree` AS `l0` ON `l`.`Level3_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`OneToMany_Required_Inverse3Id` = `l1`.`Id`) +LEFT JOIN `LevelOne` AS `l2` ON `l1`.`OneToMany_Optional_Inverse2Id` = `l2`.`Id` +WHERE `l0`.`OneToMany_Required_Inverse3Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL +"""); + } + + public override async Task Optional_navigation_with_Include_ThenInclude(bool async) + { + await base.Optional_navigation_with_Include_ThenInclude(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + FROM `LevelThree` AS `l1` + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `s`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Multiple_optional_navigation_with_Include(bool async) + { + await base.Multiple_optional_navigation_with_Include(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +WHERE `l1`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Multiple_optional_navigation_with_string_based_Include(bool async) + { + await base.Multiple_optional_navigation_with_string_based_Include(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +WHERE `l1`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Optional_navigation_with_order_by_and_Include(bool async) + { + await base.Optional_navigation_with_order_by_and_Include(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Optional_navigation_with_Include_and_order(bool async) + { + await base.Optional_navigation_with_Include_and_order(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task SelectMany_with_order_by_and_Include(bool async) + { + await base.SelectMany_with_order_by_and_Include(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task SelectMany_with_Include_and_order_by(bool async) + { + await base.SelectMany_with_Include_and_order_by(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l0`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task SelectMany_with_navigation_and_Distinct(bool async) + { + await base.SelectMany_with_navigation_and_Distinct(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id`) +INNER JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` +"""); + } + + public override async Task SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(bool async) + { + await base.SelectMany_with_navigation_and_Distinct_projecting_columns_including_join_key(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` AS `FK` + FROM `LevelTwo` AS `l0` +) AS `l1` ON `l`.`Id` = `l1`.`FK` +ORDER BY `l`.`Id`, `l1`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` AS `FK` + FROM `LevelTwo` AS `l0` +) AS `l1` ON `l`.`Id` = `l1`.`FK`) +INNER JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_member(bool async) + { + await base.Include_collection_with_multiple_orderbys_member(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` +FROM `LevelTwo` AS `l` +ORDER BY `l`.`Name`, `l`.`Level1_Required_Id`, `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelTwo` AS `l` +INNER JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Name`, `l`.`Level1_Required_Id`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_property(bool async) + { + await base.Include_collection_with_multiple_orderbys_property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` +FROM `LevelTwo` AS `l` +ORDER BY `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelTwo` AS `l` +INNER JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_methodcall(bool async) + { + await base.Include_collection_with_multiple_orderbys_methodcall(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` +FROM `LevelTwo` AS `l` +ORDER BY ABS(`l`.`Level1_Required_Id`), `l`.`Name`, `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelTwo` AS `l` +INNER JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY ABS(`l`.`Level1_Required_Id`), `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_complex(bool async) + { + await base.Include_collection_with_multiple_orderbys_complex(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` +FROM `LevelTwo` AS `l` +ORDER BY ABS(`l`.`Level1_Required_Id`) + 7, `l`.`Name`, `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelTwo` AS `l` +INNER JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY ABS(`l`.`Level1_Required_Id`) + 7, `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_multiple_orderbys_complex_repeated(bool async) + { + await base.Include_collection_with_multiple_orderbys_complex_repeated(async); + + AssertSql( + """ + SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l` + ORDER BY -`l`.`Level1_Required_Id`, `l`.`Name`, `l`.`Id` + """, + // + """ + SELECT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `l`.`Id` + FROM `LevelTwo` AS `l` + INNER JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` + ORDER BY -`l`.`Level1_Required_Id`, `l`.`Name`, `l`.`Id` + """); + } + + public override async Task Include_collection_with_multiple_orderbys_complex_repeated_checked(bool async) + { + await base.Include_collection_with_multiple_orderbys_complex_repeated_checked(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` +FROM `LevelTwo` AS `l` +ORDER BY -`l`.`Level1_Required_Id`, `l`.`Name`, `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelTwo` AS `l` +INNER JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id` +ORDER BY -`l`.`Level1_Required_Id`, `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Include_collection_with_groupby_in_subquery(bool async) + { + await base.Include_collection_with_groupby_in_subquery(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Name] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + GROUP BY [l].[Name] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +ORDER BY [t].[Name], [t0].[Id] +""", +// +""" +SELECT [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id], [t].[Name], [t0].[Id] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + GROUP BY [l].[Name] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Name] + FROM ( + SELECT [l0].[Id], [l0].[Name], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +INNER JOIN [LevelTwo] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse2Id] +ORDER BY [t].[Name], [t0].[Id] +"""); + } + + public override async Task Include_collection_with_groupby_in_subquery_and_filter_before_groupby(bool async) + { + await base.Include_collection_with_groupby_in_subquery_and_filter_before_groupby(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Name] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + WHERE [l].[Id] > 3 + GROUP BY [l].[Name] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + WHERE [l0].[Id] > 3 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +ORDER BY [t].[Name], [t0].[Id] +""", +// +""" +SELECT [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id], [t].[Name], [t0].[Id] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + WHERE [l].[Id] > 3 + GROUP BY [l].[Name] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Name] + FROM ( + SELECT [l0].[Id], [l0].[Name], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + WHERE [l0].[Id] > 3 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +INNER JOIN [LevelTwo] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse2Id] +ORDER BY [t].[Name], [t0].[Id] +"""); + } + + public override async Task Include_collection_with_groupby_in_subquery_and_filter_after_groupby(bool async) + { + await base.Include_collection_with_groupby_in_subquery_and_filter_after_groupby(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Name] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + GROUP BY [l].[Name] + HAVING [l].[Name] <> N'Foo' OR ([l].[Name] IS NULL) +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +ORDER BY [t].[Name], [t0].[Id] +""", +// +""" +SELECT [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id], [t].[Name], [t0].[Id] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + GROUP BY [l].[Name] + HAVING [l].[Name] <> N'Foo' OR ([l].[Name] IS NULL) +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Name] + FROM ( + SELECT [l0].[Id], [l0].[Name], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +INNER JOIN [LevelTwo] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse2Id] +ORDER BY [t].[Name], [t0].[Id] +"""); + } + + public override async Task Include_reference_collection_order_by_reference_navigation(bool async) + { + await base.Include_reference_collection_order_by_reference_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l0`.`Id`, `l`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l0`.`Id`, `l`.`Id` +"""); + } + + public override async Task Include_after_SelectMany(bool async) + { + await base.Include_after_SelectMany(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_after_multiple_SelectMany_and_reference_navigation(bool async) + { + await base.Include_after_multiple_SelectMany_and_reference_navigation(async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +""", + // + """ +SELECT `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +FROM (((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Required_Self_Inverse4Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL AND `l2`.`Id` IS NOT NULL AND `l3`.`OneToMany_Required_Self_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Include_after_SelectMany_and_multiple_reference_navigations(bool async) + { + await base.Include_after_SelectMany_and_multiple_reference_navigations(async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +""", + // + """ +SELECT `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +FROM (((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Optional_Self_Inverse4Id` +WHERE `l2`.`Id` IS NOT NULL AND `l3`.`OneToMany_Optional_Self_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` +"""); + } + + public override async Task Include_collection(bool async) + { + await base.Include_collection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_collection_followed_by_include_reference(bool async) + { + await base.Include_collection_followed_by_include_reference(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_reference_followed_by_include_collection(bool async) + { + await base.Include_reference_followed_by_include_collection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_collection_followed_by_projecting_the_included_collection(bool async) + { + await base.Include_collection_followed_by_projecting_the_included_collection(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(bool async) + { + await base.Include_and_ThenInclude_collections_followed_by_projecting_the_first_collection(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(bool async) + { + await base.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + FROM (`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_collection_ThenInclude_two_references(bool async) + { + await base.Include_collection_ThenInclude_two_references(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + FROM (`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(bool async) + { + await base.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id` AS `Id2`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0` + FROM ((`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) + LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` +""", + // + """ +SELECT `l4`.`Id`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` +FROM (`LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`OneToMany_Optional_Inverse2Id`, `l1`.`Id` AS `Id0`, `l2`.`Id` AS `Id1`, `l3`.`Id` AS `Id2` + FROM ((`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) + LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelFour` AS `l4` ON `s`.`Id2` = `l4`.`OneToMany_Optional_Inverse4Id` +WHERE `s`.`Id2` IS NOT NULL AND `l4`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` +"""); + } + + public override async Task Include_collection_multiple(bool async) + { + await base.Include_collection_multiple(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id` AS `Id2`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0` + FROM ((`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) + LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` +""", + // + """ +SELECT `l4`.`Id`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` +FROM (`LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`OneToMany_Optional_Inverse2Id`, `l1`.`Id` AS `Id0`, `l2`.`Id` AS `Id1`, `l3`.`Id` AS `Id2` + FROM ((`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) + LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelFour` AS `l4` ON `s`.`Id2` = `l4`.`OneToMany_Optional_Inverse4Id` +WHERE `s`.`Id2` IS NOT NULL AND `l4`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` +"""); + } + + public override async Task Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(bool async) + { + await base.Include_ThenInclude_ThenInclude_followed_by_two_nested_selects(async); + + AssertSql( + """ +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l7`.`Id`, `l7`.`Level2_Optional_Id`, `l7`.`Level2_Required_Id`, `l7`.`Name`, `l7`.`OneToMany_Optional_Inverse3Id`, `l7`.`OneToMany_Optional_Self_Inverse3Id`, `l7`.`OneToMany_Required_Inverse3Id`, `l7`.`OneToMany_Required_Self_Inverse3Id`, `l7`.`OneToOne_Optional_PK_Inverse3Id`, `l7`.`OneToOne_Optional_Self3Id`, `l8`.`Id` AS `Id0`, `l8`.`Level3_Optional_Id`, `l8`.`Level3_Required_Id`, `l8`.`Name` AS `Name0`, `l8`.`OneToMany_Optional_Inverse4Id`, `l8`.`OneToMany_Optional_Self_Inverse4Id`, `l8`.`OneToMany_Required_Inverse4Id`, `l8`.`OneToMany_Required_Self_Inverse4Id`, `l8`.`OneToOne_Optional_PK_Inverse4Id`, `l8`.`OneToOne_Optional_Self4Id`, `l6`.`OneToMany_Optional_Inverse2Id` + FROM (`LevelTwo` AS `l6` + LEFT JOIN `LevelThree` AS `l7` ON `l6`.`Id` = `l7`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l8` ON `l7`.`Id` = `l8`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(bool async) + { + await base.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Date`, `s0`.`Level1_Optional_Id`, `s0`.`Level1_Required_Id`, `s0`.`Name`, `s0`.`OneToMany_Optional_Inverse2Id`, `s0`.`OneToMany_Optional_Self_Inverse2Id`, `s0`.`OneToMany_Required_Inverse2Id`, `s0`.`OneToMany_Required_Self_Inverse2Id`, `s0`.`OneToOne_Optional_PK_Inverse2Id`, `s0`.`OneToOne_Optional_Self2Id`, `s0`.`Id0`, `s0`.`Level2_Optional_Id`, `s0`.`Level2_Required_Id`, `s0`.`Name0`, `s0`.`OneToMany_Optional_Inverse3Id`, `s0`.`OneToMany_Optional_Self_Inverse3Id`, `s0`.`OneToMany_Required_Inverse3Id`, `s0`.`OneToMany_Required_Self_Inverse3Id`, `s0`.`OneToOne_Optional_PK_Inverse3Id`, `s0`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id` +) AS `s0` ON `l`.`Id` = `s0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_collection_multiple_with_filter(bool async) + { + await base.Include_collection_multiple_with_filter(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +WHERE ( + SELECT COUNT(*) + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` + WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` AND (`l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL)) > 0 +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l4`.`Id` AS `Id1`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name` AS `Name1`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id` + FROM (`LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +WHERE ( + SELECT COUNT(*) + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` + WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` AND (`l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL)) > 0 +ORDER BY `l`.`Id` +"""); + } + + public override async Task Including_reference_navigation_and_projecting_collection_navigation(bool async) + { + await base.Including_reference_navigation_and_projecting_collection_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +INNER JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Required_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(bool async) + { + await base.LeftJoin_with_Any_on_outer_source_and_projecting_collection_from_inner(async); + + AssertSql( + """ +@validIds1='L1 01' (Size = 255) +@validIds2='L1 02' (Size = 255) + +SELECT IIF(`l0`.`Id` IS NULL, 0, `l0`.`Id`), `l`.`Id`, `l0`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` +WHERE `l`.`Name` IN (@validIds1, @validIds2) +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +@validIds3='L1 01' (Size = 255) +@validIds4='L1 02' (Size = 255) + +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Required_Inverse3Id` +WHERE (`l`.`Name` IN (@validIds3, @validIds4)) AND (`l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Required_Inverse3Id` IS NOT NULL) +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Filtered_include_different_filter_set_on_same_navigation_twice(bool async) + { + await base.Filtered_include_different_filter_set_on_same_navigation_twice(async); + + AssertSql(); + } + + public override async Task Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(bool async) + { + await base.Filtered_include_different_filter_set_on_same_navigation_twice_multi_level(async); + + AssertSql(); + } + + public override async Task Filtered_include_include_parameter_used_inside_filter_throws(bool async) + { + await base.Filtered_include_include_parameter_used_inside_filter_throws(async); + + AssertSql(); + } + + public override async Task Filtered_include_is_considered_loaded(bool async) + { + await base.Filtered_include_is_considered_loaded(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Id] +"""); + } + + public override async Task Filtered_include_with_Distinct_throws(bool async) + { + await base.Filtered_include_with_Distinct_throws(async); + + AssertSql(); + } + + public override async Task Filtered_include_calling_methods_directly_on_parameter_throws(bool async) + { + await base.Filtered_include_calling_methods_directly_on_parameter_throws(async); + + AssertSql(); + } + + public override async Task Filtered_include_Take_with_another_Take_on_top_level(bool async) + { + await base.Filtered_include_Take_with_another_Take_on_top_level(async); + + AssertSql( +""" +@__p_0='5' + +SELECT TOP(@__p_0) [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +@__p_0='5' + +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [t].[Id] +FROM ( + SELECT TOP(@__p_0) [l].[Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] +) AS [t] +CROSS APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(4) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Name] DESC + ) AS [t1] + LEFT JOIN [LevelThree] AS [l0] ON [t1].[Id] = [l0].[Level2_Optional_Id] +) AS [t0] +ORDER BY [t].[Id], [t0].[Name] DESC +"""); + } + + public override async Task Filtered_include_Skip_Take_with_another_Skip_Take_on_top_level(bool async) + { + await base.Filtered_include_Skip_Take_with_another_Skip_Take_on_top_level(async); + + AssertSql( +""" +@__p_0='10' +@__p_1='5' + +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] DESC +OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY +""", +// +""" +@__p_0='10' +@__p_1='5' + +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [t].[Id] +FROM ( + SELECT [l].[Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] DESC + OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY +) AS [t] +CROSS APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Name] DESC + OFFSET 2 ROWS FETCH NEXT 4 ROWS ONLY + ) AS [t1] + LEFT JOIN [LevelThree] AS [l0] ON [t1].[Id] = [l0].[Level2_Optional_Id] +) AS [t0] +ORDER BY [t].[Id] DESC, [t0].[Name] DESC +"""); + } + + public override async Task Filtered_include_with_Take_without_order_by_followed_by_ThenInclude_and_FirstOrDefault_on_top_level( + bool async) + { + await base.Filtered_include_with_Take_without_order_by_followed_by_ThenInclude_and_FirstOrDefault_on_top_level(async); + + AssertSql( +""" +SELECT TOP(1) [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [t].[Id] +FROM ( + SELECT TOP(1) [l].[Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] +) AS [t] +CROSS APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(40) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ) AS [t1] + LEFT JOIN [LevelThree] AS [l0] ON [t1].[Id] = [l0].[Level2_Optional_Id] +) AS [t0] +ORDER BY [t].[Id] +"""); + } + + public override async Task Filtered_include_with_Take_without_order_by_followed_by_ThenInclude_and_unordered_Take_on_top_level( + bool async) + { + await base.Filtered_include_with_Take_without_order_by_followed_by_ThenInclude_and_unordered_Take_on_top_level(async); + + AssertSql( +""" +@__p_0='30' + +SELECT TOP(@__p_0) [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +@__p_0='30' + +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t0].[Id0], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [t].[Id] +FROM ( + SELECT TOP(@__p_0) [l].[Id] + FROM [LevelOne] AS [l] + ORDER BY [l].[Id] +) AS [t] +CROSS APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id], [l0].[Id] AS [Id0], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM ( + SELECT TOP(40) [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l1] + WHERE [t].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ) AS [t1] + LEFT JOIN [LevelThree] AS [l0] ON [t1].[Id] = [l0].[Level2_Optional_Id] +) AS [t0] +ORDER BY [t].[Id] +"""); + } + + public override async Task Projecting_collection_with_FirstOrDefault(bool async) + { + await base.Projecting_collection_with_FirstOrDefault(async); + + AssertSql( + """ +SELECT TOP 1 `l`.`Id` +FROM `LevelOne` AS `l` +WHERE `l`.`Id` = 1 +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` +FROM ( + SELECT TOP 1 `l`.`Id` + FROM `LevelOne` AS `l` + WHERE `l`.`Id` = 1 + ORDER BY `l`.`Id` +) AS `l3` +INNER JOIN `LevelTwo` AS `l2` ON `l3`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l3`.`Id` +"""); + } + + public override async Task Skip_on_grouping_element(bool async) + { + await base.Skip_on_grouping_element(async); + + AssertSql( +""" +SELECT [l].[Date] +FROM [LevelOne] AS [l] +GROUP BY [l].[Date] +ORDER BY [l].[Date] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Date] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +INNER JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE 1 < [t1].[row] +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] +"""); + } + + public override async Task Take_on_grouping_element(bool async) + { + await base.Take_on_grouping_element(async); + + AssertSql( +""" +SELECT [l].[Date] +FROM [LevelOne] AS [l] +GROUP BY [l].[Date] +ORDER BY [l].[Date] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Date] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +INNER JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name] DESC) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE [t1].[row] <= 10 +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] DESC +"""); + } + + public override async Task Skip_Take_on_grouping_element(bool async) + { + await base.Skip_Take_on_grouping_element(async); + + AssertSql( +""" +SELECT [l].[Date] +FROM [LevelOne] AS [l] +GROUP BY [l].[Date] +ORDER BY [l].[Date] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Date] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +INNER JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 6 +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] +"""); + } + + public override async Task Skip_Take_Distinct_on_grouping_element(bool async) + { + await base.Skip_Take_Distinct_on_grouping_element(async); + + AssertSql( +""" +SELECT [l].[Date] +FROM [LevelOne] AS [l] +GROUP BY [l].[Date] +ORDER BY [l].[Date] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Date] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +CROSS APPLY ( + SELECT DISTINCT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l0] + WHERE [t].[Date] = [l0].[Date] + ORDER BY [l0].[Name] + OFFSET 1 ROWS FETCH NEXT 5 ROWS ONLY + ) AS [t1] +) AS [t0] +ORDER BY [t].[Date] +"""); + } + + public override async Task Skip_Take_ToList_on_grouping_element(bool async) + { + await base.Skip_Take_ToList_on_grouping_element(async); + + AssertSql( +""" +SELECT [l].[Date] +FROM [LevelOne] AS [l] +GROUP BY [l].[Date] +ORDER BY [l].[Date] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Date] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +INNER JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 6 +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] +"""); + } + + public override async Task Skip_Take_on_grouping_element_into_non_entity(bool async) + { + await base.Skip_Take_on_grouping_element_into_non_entity(async); + + AssertSql( +""" +SELECT [l].[Date] +FROM [LevelOne] AS [l] +GROUP BY [l].[Date] +ORDER BY [l].[Date] +""", +// +""" +SELECT [t0].[Name], [t].[Date] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +INNER JOIN ( + SELECT [t1].[Name], [t1].[Date] + FROM ( + SELECT [l0].[Name], [l0].[Date], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 6 +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name] +"""); + } + + public override async Task Skip_Take_on_grouping_element_with_collection_include(bool async) + { + await base.Skip_Take_on_grouping_element_with_collection_include(async); + + AssertSql( +""" +SELECT [l].[Date] +FROM [LevelOne] AS [l] +GROUP BY [l].[Date] +ORDER BY [l].[Date] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t].[Date] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +INNER JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Date] ORDER BY [l0].[Name]) AS [row] + FROM [LevelOne] AS [l0] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 6 +) AS [t0] ON [t].[Date] = [t0].[Date] +ORDER BY [t].[Date], [t0].[Date], [t0].[Name], [t0].[Id] +"""); + } + + public override async Task Skip_Take_on_grouping_element_with_reference_include(bool async) + { + await base.Skip_Take_on_grouping_element_with_reference_include(async); + + AssertSql( +""" +SELECT [l].[Date] +FROM [LevelOne] AS [l] +GROUP BY [l].[Date] +ORDER BY [l].[Date] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t0].[Id0], [t0].[Date0], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t].[Date] +FROM ( + SELECT [l].[Date] + FROM [LevelOne] AS [l] + GROUP BY [l].[Date] +) AS [t] +CROSS APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id], [l0].[Id] AS [Id0], [l0].[Date] AS [Date0], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name] AS [Name0], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l1].[Id], [l1].[Date], [l1].[Name], [l1].[OneToMany_Optional_Self_Inverse1Id], [l1].[OneToMany_Required_Self_Inverse1Id], [l1].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l1] + WHERE [t].[Date] = [l1].[Date] + ORDER BY [l1].[Name] + OFFSET 1 ROWS FETCH NEXT 5 ROWS ONLY + ) AS [t1] + LEFT JOIN [LevelTwo] AS [l0] ON [t1].[Id] = [l0].[Level1_Optional_Id] +) AS [t0] +ORDER BY [t].[Date], [t0].[Name] +"""); + } + + public override async Task Skip_Take_on_grouping_element_inside_collection_projection(bool async) + { + await base.Skip_Take_on_grouping_element_inside_collection_projection(async); + + AssertSql( +""" +SELECT [l].[Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t].[Date], [l].[Id] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [l0].[Date] + FROM [LevelOne] AS [l0] + WHERE [l0].[Name] = [l].[Name] OR (([l0].[Name] IS NULL) AND ([l].[Name] IS NULL)) + GROUP BY [l0].[Date] +) AS [t] +ORDER BY [l].[Id], [t].[Date] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [l].[Id], [t].[Date] +FROM [LevelOne] AS [l] +CROSS APPLY ( + SELECT [l0].[Date] + FROM [LevelOne] AS [l0] + WHERE [l0].[Name] = [l].[Name] OR (([l0].[Name] IS NULL) AND ([l].[Name] IS NULL)) + GROUP BY [l0].[Date] +) AS [t] +INNER JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id] + FROM ( + SELECT [l1].[Id], [l1].[Date], [l1].[Name], [l1].[OneToMany_Optional_Self_Inverse1Id], [l1].[OneToMany_Required_Self_Inverse1Id], [l1].[OneToOne_Optional_Self1Id], ROW_NUMBER() OVER(PARTITION BY [l1].[Name], [l1].[Date] ORDER BY [l1].[Name]) AS [row] + FROM [LevelOne] AS [l1] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 6 +) AS [t0] ON ([l].[Name] = [t0].[Name] OR (([l].[Name] IS NULL) AND ([t0].[Name] IS NULL))) AND [t].[Date] = [t0].[Date] +ORDER BY [l].[Id], [t].[Date], [t0].[Name], [t0].[Date] +"""); + } + + public override async Task Collection_projection_over_GroupBy_over_parameter(bool async) + { + await base.Collection_projection_over_GroupBy_over_parameter(async); + + AssertSql( + """ +@validIds1='L1 01' (Size = 255) +@validIds2='L1 02' (Size = 255) + +SELECT `l`.`Date` +FROM `LevelOne` AS `l` +WHERE `l`.`Name` IN (@validIds1, @validIds2) +GROUP BY `l`.`Date` +ORDER BY `l`.`Date` +""", + // + """ +@validIds3='L1 01' (Size = 255) +@validIds4='L1 02' (Size = 255) + +SELECT `l5`.`Id`, `l4`.`Date` +FROM ( + SELECT `l`.`Date` + FROM `LevelOne` AS `l` + WHERE `l`.`Name` IN (@validIds3, @validIds4) + GROUP BY `l`.`Date` +) AS `l4` +INNER JOIN ( + SELECT `l3`.`Id`, `l3`.`Date` + FROM `LevelOne` AS `l3` + WHERE `l3`.`Name` IN (@validIds3, @validIds4) +) AS `l5` ON `l4`.`Date` = `l5`.`Date` +ORDER BY `l4`.`Date` +"""); + } + + public override async Task Include_partially_added_before_Where_and_then_build_upon(bool async) + { + await base.Include_partially_added_before_Where_and_then_build_upon(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` +WHERE `l0`.`Id` < 3 OR `l1`.`Id` > 8 +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Id` AS `Id0`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id` + FROM `LevelThree` AS `l2` + LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`Level3_Optional_Id` +) AS `s` ON `l1`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +WHERE (`l0`.`Id` < 3 OR `l1`.`Id` > 8) AND (`l1`.`Id` IS NOT NULL AND `s`.`OneToMany_Optional_Inverse3Id` IS NOT NULL) +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Include_partially_added_before_Where_and_then_build_upon_with_filtered_include(bool async) + { + await base.Include_partially_added_before_Where_and_then_build_upon_with_filtered_include(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id], [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToOne_Optional_PK_Inverse2Id] +LEFT JOIN [LevelTwo] AS [l1] ON [l].[Id] = [l1].[Level1_Optional_Id] +WHERE [l0].[Id] < 3 OR [l1].[Id] > 8 +ORDER BY [l].[Id], [l0].[Id], [l1].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [l].[Id], [l0].[Id], [l1].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToOne_Optional_PK_Inverse2Id] +LEFT JOIN [LevelTwo] AS [l1] ON [l].[Id] = [l1].[Level1_Optional_Id] +INNER JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l2].[Id], [l2].[Level2_Optional_Id], [l2].[Level2_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse3Id], [l2].[OneToMany_Optional_Self_Inverse3Id], [l2].[OneToMany_Required_Inverse3Id], [l2].[OneToMany_Required_Self_Inverse3Id], [l2].[OneToOne_Optional_PK_Inverse3Id], [l2].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l2].[OneToMany_Optional_Inverse3Id] ORDER BY [l2].[Id]) AS [row] + FROM [LevelThree] AS [l2] + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [l1].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +WHERE [l0].[Id] < 3 OR [l1].[Id] > 8 +ORDER BY [l].[Id], [l0].[Id], [l1].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Id] +""", +// +""" +SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id], [t].[Id0], [t].[Level3_Optional_Id], [t].[Level3_Required_Id], [t].[Name0], [t].[OneToMany_Optional_Inverse4Id], [t].[OneToMany_Optional_Self_Inverse4Id], [t].[OneToMany_Required_Inverse4Id], [t].[OneToMany_Required_Self_Inverse4Id], [t].[OneToOne_Optional_PK_Inverse4Id], [t].[OneToOne_Optional_Self4Id], [l].[Id], [l0].[Id], [l1].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[OneToOne_Optional_PK_Inverse2Id] +LEFT JOIN [LevelTwo] AS [l1] ON [l].[Id] = [l1].[Level1_Optional_Id] +INNER JOIN ( + SELECT [l2].[Id], [l2].[Level2_Optional_Id], [l2].[Level2_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse3Id], [l2].[OneToMany_Optional_Self_Inverse3Id], [l2].[OneToMany_Required_Inverse3Id], [l2].[OneToMany_Required_Self_Inverse3Id], [l2].[OneToOne_Optional_PK_Inverse3Id], [l2].[OneToOne_Optional_Self3Id], [l3].[Id] AS [Id0], [l3].[Level3_Optional_Id], [l3].[Level3_Required_Id], [l3].[Name] AS [Name0], [l3].[OneToMany_Optional_Inverse4Id], [l3].[OneToMany_Optional_Self_Inverse4Id], [l3].[OneToMany_Required_Inverse4Id], [l3].[OneToMany_Required_Self_Inverse4Id], [l3].[OneToOne_Optional_PK_Inverse4Id], [l3].[OneToOne_Optional_Self4Id] + FROM [LevelThree] AS [l2] + LEFT JOIN [LevelFour] AS [l3] ON [l2].[Id] = [l3].[Level3_Optional_Id] +) AS [t] ON [l1].[Id] = [t].[OneToMany_Required_Inverse3Id] +WHERE [l0].[Id] < 3 OR [l1].[Id] > 8 +ORDER BY [l].[Id], [l0].[Id], [l1].[Id] +"""); + } + + public override async Task Take_on_correlated_collection_in_projection(bool async) + { + await base.Take_on_correlated_collection_in_projection(async); + + AssertSql( +""" +SELECT [l].[Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 50 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id] +"""); + } + + public override async Task FirstOrDefault_with_predicate_on_correlated_collection_in_projection(bool async) + { + await base.FirstOrDefault_with_predicate_on_correlated_collection_in_projection(async); + + AssertSql( +""" +SELECT [l].[Id], [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id], [l0].[Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] AND [l].[Id] = [t0].[Id] +"""); + } + + public override async Task SelectMany_with_predicate_and_DefaultIfEmpty_projecting_root_collection_element_and_another_collection( + bool async) + { + await base.SelectMany_with_predicate_and_DefaultIfEmpty_projecting_root_collection_element_and_another_collection(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Level1_Required_Id] = ([l].[Id] * 2) OR CAST(LEN([l0].[Name]) AS int) = [l0].[Id] +) AS [t] +ORDER BY [l].[Id], [t].[Id] +""", +// +""" +SELECT [l1].[Id], [l1].[Date], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id], [l].[Id], [t].[Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [l0].[Id] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Level1_Required_Id] = ([l].[Id] * 2) OR CAST(LEN([l0].[Name]) AS int) = [l0].[Id] +) AS [t] +INNER JOIN [LevelTwo] AS [l1] ON [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t].[Id] +"""); + } + + public override async Task Complex_query_issue_21665(bool async) + { + await base.Complex_query_issue_21665(async); + + AssertSql( +""" +SELECT TOP(1) [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l0].[Name], ( + SELECT COUNT(*) + FROM [LevelOne] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Self_Inverse1Id]), ( + SELECT COUNT(*) + FROM [LevelTwo] AS [l2] + WHERE [l].[Id] = [l2].[OneToMany_Optional_Inverse2Id]), CASE + WHEN EXISTS ( + SELECT 1 + FROM [LevelTwo] AS [l3] + WHERE [l].[Id] = [l3].[OneToMany_Optional_Inverse2Id] AND [l3].[Id] = 2) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END, [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +WHERE [l].[Id] = 2 +ORDER BY [l].[Name], [l].[Id], [l0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t0].[ChildCount], [t0].[Level2Name], [t0].[Level2Count], [t0].[IsLevel2There], [t].[Id], [t].[Id0] +FROM ( + SELECT TOP(1) [l].[Id], [l0].[Id] AS [Id0], [l].[Name] + FROM [LevelOne] AS [l] + LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] + WHERE [l].[Id] = 2 + ORDER BY [l].[Name] +) AS [t] +CROSS APPLY ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id], ( + SELECT COUNT(*) + FROM [LevelOne] AS [l2] + WHERE [t1].[Id] = [l2].[OneToMany_Optional_Self_Inverse1Id]) AS [ChildCount], [l1].[Name] AS [Level2Name], ( + SELECT COUNT(*) + FROM [LevelTwo] AS [l3] + WHERE [t1].[Id] = [l3].[OneToMany_Optional_Inverse2Id]) AS [Level2Count], CASE + WHEN EXISTS ( + SELECT 1 + FROM [LevelTwo] AS [l4] + WHERE [t1].[Id] = [l4].[OneToMany_Optional_Inverse2Id] AND [l4].[Id] = 2) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [IsLevel2There] + FROM ( + SELECT [l5].[Id], [l5].[Date], [l5].[Name], [l5].[OneToMany_Optional_Self_Inverse1Id], [l5].[OneToMany_Required_Self_Inverse1Id], [l5].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l5] + WHERE [t].[Id] = [l5].[OneToMany_Optional_Self_Inverse1Id] + ORDER BY [l5].[Name] + OFFSET 1 ROWS FETCH NEXT 5 ROWS ONLY + ) AS [t1] + LEFT JOIN [LevelTwo] AS [l1] ON [t1].[Id] = [l1].[Level1_Optional_Id] +) AS [t0] +ORDER BY [t].[Name], [t].[Id], [t].[Id0], [t0].[Name] +"""); + } + + public override async Task SelectMany_over_conditional_null_source(bool async) + { + await base.SelectMany_over_conditional_null_source(async); + + AssertSql(); + } + + public override async Task SelectMany_over_conditional_empty_source(bool async) + { + await base.SelectMany_over_conditional_empty_source(async); + + AssertSql(); + } + + public override async Task Include_after_Select(bool async) + { + await base.Include_after_Select(async); + + AssertSql(); + } + + public override async Task Include_after_SelectMany_and_reference_navigation(bool async) + { + await base.Include_after_SelectMany_and_reference_navigation(async); + + AssertSql(); + } + + public override async Task Projecting_collection_after_optional_reference_correlated_with_parent(bool async) + { + await base.Projecting_collection_after_optional_reference_correlated_with_parent(async); + + AssertSql( +""" +SELECT [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [t].[ChildId], [t].[ParentName], [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +CROSS APPLY ( + SELECT [l1].[Id] AS [ChildId], [l0].[Name] AS [ParentName] + FROM [LevelThree] AS [l1] + WHERE ([l0].[Id] IS NOT NULL) AND [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +) AS [t] +ORDER BY [l].[Id], [l0].[Id] +"""); + } + + public override async Task Projecting_collection_with_group_by_after_optional_reference_correlated_with_parent(bool async) + { + await base.Projecting_collection_with_group_by_after_optional_reference_correlated_with_parent(async); + + AssertSql( +""" +SELECT [l].[Id], [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +LEFT JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[Level2_Optional_Id] +ORDER BY [l].[Id], [l0].[Id], [l1].[Id] +""", +// +""" +SELECT [t].[Key], [t].[Count], [l].[Id], [l0].[Id], [l1].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +LEFT JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[Level2_Optional_Id] +CROSS APPLY ( + SELECT [l2].[Name] AS [Key], COUNT(*) AS [Count] + FROM [LevelThree] AS [l2] + WHERE ([l0].[Id] IS NOT NULL) AND [l0].[Id] = [l2].[OneToMany_Optional_Inverse3Id] + GROUP BY [l2].[Name] +) AS [t] +ORDER BY [l].[Id], [l0].[Id], [l1].[Id] +"""); + } + + public override async Task Multiple_complex_includes_EF_Property(bool async) + { + await base.Multiple_complex_includes_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +INNER JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Multiple_complex_includes_self_ref_EF_Property(bool async) + { + await base.Multiple_complex_includes_self_ref_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id` +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Self_Inverse1Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Self_Inverse1Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Name0`, `s`.`OneToMany_Optional_Self_Inverse1Id0`, `s`.`OneToMany_Required_Self_Inverse1Id0`, `s`.`OneToOne_Optional_Self1Id0`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) +INNER JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id`, `l3`.`Id` AS `Id0`, `l3`.`Date` AS `Date0`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l3`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l3`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` + FROM `LevelOne` AS `l2` + LEFT JOIN `LevelOne` AS `l3` ON `l2`.`OneToOne_Optional_Self1Id` = `l3`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Self_Inverse1Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Include_collection_multiple_with_filter_EF_Property(bool async) + { + await base.Include_collection_multiple_with_filter_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +WHERE ( + SELECT COUNT(*) + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` + WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` AND (`l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL)) > 0 +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l4`.`Id` AS `Id1`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name` AS `Name1`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id` + FROM (`LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +WHERE ( + SELECT COUNT(*) + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` + WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` AND (`l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL)) > 0 +ORDER BY `l`.`Id` +"""); + } + + public override async Task Filtered_include_basic_Where_EF_Property(bool async) + { + await base.Filtered_include_basic_Where_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` > 5 +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Filtered_include_OrderBy_EF_Property(bool async) + { + await base.Filtered_include_OrderBy_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Name` +"""); + } + + public override async Task Filtered_include_basic_OrderBy_Skip_Take_EF_Property(bool async) + { + await base.Filtered_include_basic_OrderBy_Skip_Take_EF_Property(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id] +FROM [LevelOne] AS [l] +ORDER BY [l].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Date], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [l].[Id] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Id], [t].[Date], [t].[Level1_Optional_Id], [t].[Level1_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse2Id], [t].[OneToMany_Optional_Self_Inverse2Id], [t].[OneToMany_Required_Inverse2Id], [t].[OneToMany_Required_Self_Inverse2Id], [t].[OneToOne_Optional_PK_Inverse2Id], [t].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Name]) AS [row] + FROM [LevelTwo] AS [l0] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +ORDER BY [l].[Id], [t0].[OneToMany_Optional_Inverse2Id], [t0].[Name] +"""); + } + + public override async Task Filtered_include_on_ThenInclude_EF_Property(bool async) + { + await base.Filtered_include_on_ThenInclude_EF_Property(async); + + AssertSql( +""" +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [l0].[Id], [l0].[Date], [l0].[Level1_Optional_Id], [l0].[Level1_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse2Id], [l0].[OneToMany_Optional_Self_Inverse2Id], [l0].[OneToMany_Required_Inverse2Id], [l0].[OneToMany_Required_Self_Inverse2Id], [l0].[OneToOne_Optional_PK_Inverse2Id], [l0].[OneToOne_Optional_Self2Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +ORDER BY [l].[Id], [l0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id], [l].[Id], [l0].[Id] +FROM [LevelOne] AS [l] +LEFT JOIN [LevelTwo] AS [l0] ON [l].[Id] = [l0].[Level1_Optional_Id] +INNER JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], ROW_NUMBER() OVER(PARTITION BY [l1].[OneToMany_Optional_Inverse3Id] ORDER BY [l1].[Name]) AS [row] + FROM [LevelThree] AS [l1] + WHERE [l1].[Name] <> N'Foo' OR ([l1].[Name] IS NULL) + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 4 +) AS [t0] ON [l0].[Id] = [t0].[OneToMany_Optional_Inverse3Id] +ORDER BY [l].[Id], [l0].[Id], [t0].[OneToMany_Optional_Inverse3Id], [t0].[Name] +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Name`, `l`.`Id` +""", + // + """ +SELECT `l`.`Name`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection_nested(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection_nested(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Name`, `l`.`Id` +""", + // + """ +SELECT `l`.`Name`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l`.`Name`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection_reference(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection_reference(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Name`, `l`.`Id` +""", + // + """ +SELECT `l`.`Name`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection_multiple(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection_multiple(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +ORDER BY `l`.`Name`, `l`.`Id` +""", + // + """ +SELECT `l`.`Name`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id` +""", + // + """ +SELECT `l`.`Name`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Required_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection_reference_same_level(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection_reference_same_level(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +""", + // + """ +SELECT `l`.`Name`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +INNER JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_reference(bool async) + { + await base.Final_GroupBy_property_entity_Include_reference(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_reference_multiple(bool async) + { + await base.Final_GroupBy_property_entity_Include_reference_multiple(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Required_Id` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Project_collection_and_nested_conditional(bool async) + { + await base.Project_collection_and_nested_conditional(async); + + AssertSql( + """ +SELECT `l`.`Id`, IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) +FROM `LevelOne` AS `l` +WHERE IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) = '02' +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l2`.`Name`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +WHERE IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) = '02' +ORDER BY `l`.`Id`, `l2`.`Id` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsQueryLibRedFixture.cs new file mode 100644 index 00000000..825e1c12 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsQueryLibRedFixture.cs @@ -0,0 +1,13 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class ComplexNavigationsQueryLibRedFixture : ComplexNavigationsQueryRelationalFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsQueryLibRedTest.cs new file mode 100644 index 00000000..b2261688 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsQueryLibRedTest.cs @@ -0,0 +1,4899 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +using Xunit.Sdk; +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class ComplexNavigationsQueryLibRedTest : ComplexNavigationsQueryRelationalTestBase + { + public ComplexNavigationsQueryLibRedTest( + ComplexNavigationsQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + private bool SupportsOffset => true; + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Distinct_skip_without_orderby(bool async) + { + await AssertQuery( + async, + ss => from l1 in ss.Set() + where l1.Id < 3 + select (from l3 in ss.Set() + select l3).Distinct().Skip(1).OrderBy(e => e.Id).FirstOrDefault().Name); + + AssertSql( + """ +SELECT ( + SELECT TOP(1) [l2].[Name] + FROM ( + SELECT [l1].[Id], [l1].[Name] + FROM ( + SELECT DISTINCT [l0].[Id], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM [LevelThree] AS [l0] + ) AS [l1] + ORDER BY (SELECT 1) + OFFSET 1 ROWS + ) AS [l2] + ORDER BY [l2].[Id]) +FROM [LevelOne] AS [l] +WHERE [l].[Id] < 3 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Distinct_take_without_orderby(bool async) + { + await AssertQuery( + async, + ss => from l1 in ss.Set() + where l1.Id < 3 + select (from l3 in ss.Set() + select l3).Distinct().Take(1).OrderBy(e => e.Id).FirstOrDefault().Name); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `l0`.`Name` + FROM `LevelThree` AS `l0`) +FROM `LevelOne` AS `l` +WHERE `l`.`Id` < 3 +"""); + } + + public override async Task Entity_equality_empty(bool isAsync) + { + await base.Entity_equality_empty(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE `l0`.`Id` = 0 + """); + } + + public override async Task Key_equality_when_sentinel_ef_property(bool isAsync) + { + await base.Key_equality_when_sentinel_ef_property(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE `l0`.`Id` = 0 + """); + } + + public override async Task Key_equality_using_property_method_required(bool isAsync) + { + await base.Key_equality_using_property_method_required(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + WHERE `l0`.`Id` > 7 + """); + } + + public override async Task Key_equality_using_property_method_required2(bool isAsync) + { + await base.Key_equality_using_property_method_required2(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`Level1_Required_Id` = `l0`.`Id` + WHERE `l0`.`Id` > 7 + """); + } + + public override async Task Key_equality_using_property_method_nested(bool isAsync) + { + await base.Key_equality_using_property_method_nested(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + WHERE `l0`.`Id` = 7 + """); + } + + public override async Task Key_equality_using_property_method_nested2(bool isAsync) + { + await base.Key_equality_using_property_method_nested2(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`Level1_Required_Id` = `l0`.`Id` + WHERE `l0`.`Id` = 7 + """); + } + + public override async Task Key_equality_using_property_method_and_member_expression1(bool isAsync) + { + await base.Key_equality_using_property_method_and_member_expression1(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + WHERE `l0`.`Id` = 7 + """); + } + + public override async Task Key_equality_using_property_method_and_member_expression2(bool isAsync) + { + await base.Key_equality_using_property_method_and_member_expression2(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + WHERE `l0`.`Id` = 7 + """); + } + + public override async Task Key_equality_using_property_method_and_member_expression3(bool isAsync) + { + await base.Key_equality_using_property_method_and_member_expression3(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`Level1_Required_Id` = `l0`.`Id` + WHERE `l0`.`Id` = 7 + """); + } + + public override async Task Key_equality_navigation_converted_to_FK(bool isAsync) + { + await base.Key_equality_navigation_converted_to_FK(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`Level1_Required_Id` = `l0`.`Id` + WHERE `l0`.`Id` = 1 + """); + } + + public override async Task Key_equality_two_conditions_on_same_navigation(bool isAsync) + { + await base.Key_equality_two_conditions_on_same_navigation(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + WHERE `l0`.`Id` IN (1, 2) + """); + } + + public override async Task Key_equality_two_conditions_on_same_navigation2(bool isAsync) + { + await base.Key_equality_two_conditions_on_same_navigation2(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`Level1_Required_Id` = `l0`.`Id` + WHERE `l0`.`Id` IN (1, 2) + """); + } + + public override async Task Multi_level_include_with_short_circuiting(bool isAsync) + { + await base.Multi_level_include_with_short_circuiting(isAsync); + + AssertSql( + """ +SELECT `f`.`Name`, `f`.`LabelDefaultText`, `f`.`PlaceholderDefaultText`, `m`.`DefaultText`, `m0`.`DefaultText`, `s`.`Text`, `s`.`ComplexNavigationStringDefaultText`, `s`.`LanguageName`, `s`.`Name`, `s`.`CultureString`, `s0`.`Text`, `s0`.`ComplexNavigationStringDefaultText`, `s0`.`LanguageName`, `s0`.`Name`, `s0`.`CultureString` +FROM (((`Fields` AS `f` +LEFT JOIN `MultilingualStrings` AS `m` ON `f`.`LabelDefaultText` = `m`.`DefaultText`) +LEFT JOIN `MultilingualStrings` AS `m0` ON `f`.`PlaceholderDefaultText` = `m0`.`DefaultText`) +LEFT JOIN ( + SELECT `g`.`Text`, `g`.`ComplexNavigationStringDefaultText`, `g`.`LanguageName`, `l`.`Name`, `l`.`CultureString` + FROM `Globalizations` AS `g` + LEFT JOIN `Languages` AS `l` ON `g`.`LanguageName` = `l`.`Name` +) AS `s` ON `m`.`DefaultText` = `s`.`ComplexNavigationStringDefaultText`) +LEFT JOIN ( + SELECT `g0`.`Text`, `g0`.`ComplexNavigationStringDefaultText`, `g0`.`LanguageName`, `l0`.`Name`, `l0`.`CultureString` + FROM `Globalizations` AS `g0` + LEFT JOIN `Languages` AS `l0` ON `g0`.`LanguageName` = `l0`.`Name` +) AS `s0` ON `m0`.`DefaultText` = `s0`.`ComplexNavigationStringDefaultText` +ORDER BY `f`.`Name`, `m`.`DefaultText`, `m0`.`DefaultText`, `s`.`Text`, `s`.`Name`, `s0`.`Text` +"""); + } + + public override async Task Join_navigation_key_access_optional(bool isAsync) + { + await base.Join_navigation_key_access_optional(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id1`, `s`.`Id` AS `Id2` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Optional_Id` = `l1`.`Id` +) AS `s` ON `l`.`Id` = `s`.`Id0` +"""); + } + + public override async Task Join_navigation_key_access_required(bool isAsync) + { + await base.Join_navigation_key_access_required(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id1`, `s`.`Id` AS `Id2` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` + FROM `LevelTwo` AS `l0` + INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` +) AS `s` ON `l`.`Id` = `s`.`Id0` +"""); + } + + public override async Task Navigation_key_access_optional_comparison(bool isAsync) + { + await base.Navigation_key_access_optional_comparison(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id` + FROM `LevelTwo` AS `l` + LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_PK_Inverse2Id` = `l0`.`Id` + WHERE `l0`.`Id` > 5 + """); + } + + public override async Task Navigation_key_access_required_comparison(bool isAsync) + { + await base.Navigation_key_access_required_comparison(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id` + FROM `LevelTwo` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`Id` = `l0`.`Id` + WHERE `l0`.`Id` > 5 + """); + } + + public override async Task Navigation_inside_method_call_translated_to_join(bool isAsync) + { + await base.Navigation_inside_method_call_translated_to_join(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` +WHERE `l0`.`Name` LIKE 'L%' +"""); + } + + public override async Task Navigation_inside_method_call_translated_to_join2(bool isAsync) + { + await base.Navigation_inside_method_call_translated_to_join2(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Level2_Optional_Id`, `l`.`Level2_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse3Id`, `l`.`OneToMany_Optional_Self_Inverse3Id`, `l`.`OneToMany_Required_Inverse3Id`, `l`.`OneToMany_Required_Self_Inverse3Id`, `l`.`OneToOne_Optional_PK_Inverse3Id`, `l`.`OneToOne_Optional_Self3Id` +FROM `LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id` +WHERE `l0`.`Name` LIKE 'L%' +"""); + } + + public override async Task Optional_navigation_inside_method_call_translated_to_join(bool isAsync) + { + await base.Optional_navigation_inside_method_call_translated_to_join(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Name` LIKE 'L%' +"""); + } + + public override async Task Optional_navigation_inside_property_method_translated_to_join(bool isAsync) + { + await base.Optional_navigation_inside_property_method_translated_to_join(isAsync); + + AssertSql( + """ + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE `l0`.`Name` = 'L2 01' + """); + } + + public override async Task Optional_navigation_inside_nested_method_call_translated_to_join(bool isAsync) + { + await base.Optional_navigation_inside_nested_method_call_translated_to_join(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE UCASE(`l0`.`Name`) LIKE 'L%' +"""); + } + + public override async Task Method_call_on_optional_navigation_translates_to_null_conditional_properly_for_arguments(bool isAsync) + { + await base.Method_call_on_optional_navigation_translates_to_null_conditional_properly_for_arguments(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Name` IS NOT NULL AND LEFT(`l0`.`Name`, IIF(LEN(`l0`.`Name`) IS NULL, 0, LEN(`l0`.`Name`))) = `l0`.`Name` +"""); + } + + public override async Task Optional_navigation_inside_method_call_translated_to_join_keeps_original_nullability(bool isAsync) + { + await base.Optional_navigation_inside_method_call_translated_to_join_keeps_original_nullability(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE DATEADD('d', 10.0, `l0`.`Date`) > #2000-02-01# + """); + } + + public override async Task Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability(bool isAsync) + { + await base.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE DATEADD('m', 2, DATEADD('d', 15.0, DATEADD('d', 10.0, `l0`.`Date`))) > #2002-02-01# + """); + } + + public override async Task + Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability_also_for_arguments(bool isAsync) + { + await base.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability_also_for_arguments( + isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE DATEADD('d', CDBL(IIF(`l0`.`Id` IS NULL, 0, `l0`.`Id`)), DATEADD('d', 15.0, `l0`.`Date`)) > #2002-02-01# +"""); + } + + public override async Task Join_navigation_in_outer_selector_translated_to_extra_join(bool isAsync) + { + await base.Join_navigation_in_outer_selector_translated_to_extra_join(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL +"""); + } + + public override async Task Join_navigation_in_outer_selector_translated_to_extra_join_nested(bool isAsync) + { + await base.Join_navigation_in_outer_selector_translated_to_extra_join_nested(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id1`, `l2`.`Id` AS `Id3` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Id` +WHERE `l1`.`Id` IS NOT NULL AND `l2`.`Id` IS NOT NULL +"""); + } + + public override async Task Join_navigation_in_outer_selector_translated_to_extra_join_nested2(bool isAsync) + { + await base.Join_navigation_in_outer_selector_translated_to_extra_join_nested2(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id3`, `l2`.`Id` AS `Id1` +FROM ((`LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Optional_Id` = `l1`.`Id`) +LEFT JOIN `LevelOne` AS `l2` ON `l1`.`Id` = `l2`.`Id` +WHERE `l1`.`Id` IS NOT NULL AND `l2`.`Id` IS NOT NULL +"""); + } + + public override async Task Join_navigation_in_inner_selector(bool isAsync) + { + await base.Join_navigation_in_inner_selector(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id2`, `s`.`Id` AS `Id1` +FROM `LevelTwo` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`Id0` +"""); + } + + public override async Task Join_navigations_in_inner_selector_translated_without_collision(bool isAsync) + { + await base.Join_navigations_in_inner_selector_translated_without_collision(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id2`, `s`.`Id` AS `Id1`, `s0`.`Id` AS `Id3` +FROM (`LevelTwo` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`Id0`) +INNER JOIN ( + SELECT `l2`.`Id`, `l3`.`Id` AS `Id0` + FROM `LevelThree` AS `l2` + LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Level2_Optional_Id` = `l3`.`Id` +) AS `s0` ON `l`.`Id` = `s0`.`Id0` +"""); + } + + public override async Task Join_navigation_non_key_join(bool isAsync) + { + await base.Join_navigation_non_key_join(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id2`, `l`.`Name` AS `Name2`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` +FROM `LevelTwo` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Name`, `l1`.`Name` AS `Name0` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` +) AS `s` ON `l`.`Name` = `s`.`Name0` +"""); + } + + public override async Task Join_with_orderby_on_inner_sequence_navigation_non_key_join(bool isAsync) + { + await base.Join_with_orderby_on_inner_sequence_navigation_non_key_join(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id2`, `l`.`Name` AS `Name2`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` +FROM `LevelTwo` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Name`, `l1`.`Name` AS `Name0` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` +) AS `s` ON `l`.`Name` = `s`.`Name0` +"""); + } + + public override async Task Join_navigation_self_ref(bool isAsync) + { + await base.Join_navigation_self_ref(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id1`, `s`.`Id` AS `Id2` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelOne` AS `l1` ON `l0`.`OneToMany_Optional_Self_Inverse1Id` = `l1`.`Id` +) AS `s` ON `l`.`Id` = `s`.`Id0` +"""); + } + + public override async Task Join_navigation_nested(bool isAsync) + { + await base.Join_navigation_nested(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id3`, `s`.`Id` AS `Id1` +FROM `LevelThree` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l2`.`Id` AS `Id1` + FROM (`LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Required_Id`) + LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`Id1` +"""); + } + + public override async Task Join_navigation_nested2(bool isAsync) + { + await base.Join_navigation_nested2(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id3`, `s`.`Id` AS `Id1` +FROM `LevelThree` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l2`.`Id` AS `Id1` + FROM (`LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Required_Id`) + LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`Id1` +"""); + } + + public override async Task Join_navigation_deeply_nested_non_key_join(bool isAsync) + { + await base.Join_navigation_deeply_nested_non_key_join(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Id4`, `l`.`Name` AS `Name4`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` +FROM `LevelFour` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Name`, `l3`.`Name` AS `Name2` + FROM ((`LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Required_Id`) + LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id`) + LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`Id` +) AS `s` ON `l`.`Name` = `s`.`Name2` +"""); + } + + public override async Task Join_navigation_deeply_nested_required(bool isAsync) + { + await base.Join_navigation_deeply_nested_required(isAsync); + + AssertSql( + """ +SELECT `s`.`Id` AS `Id4`, `s`.`Name` AS `Name4`, `l`.`Id` AS `Id1`, `l`.`Name` AS `Name1` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Name`, `l3`.`Name` AS `Name2` + FROM ((`LevelFour` AS `l0` + INNER JOIN `LevelThree` AS `l1` ON `l0`.`Level3_Required_Id` = `l1`.`Id`) + LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Level2_Required_Id` = `l2`.`Id`) + LEFT JOIN `LevelOne` AS `l3` ON `l2`.`Id` = `l3`.`Id` + WHERE `l1`.`Level2_Required_Id` IS NOT NULL AND `l2`.`Id` IS NOT NULL AND `l2`.`Id` IS NOT NULL AND `l3`.`Id` IS NOT NULL +) AS `s` ON `l`.`Name` = `s`.`Name2` +"""); + } + + public override async Task Include_reference_and_project_into_anonymous_type(bool async) + { + await base.Include_reference_and_project_into_anonymous_type(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +"""); + } + + public override async Task Select_nav_prop_reference_optional1(bool isAsync) + { + await base.Select_nav_prop_reference_optional1(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Name` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Select_nav_prop_reference_optional1_via_DefaultIfEmpty(bool isAsync) + { + await base.Select_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Name` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Select_nav_prop_reference_optional2(bool isAsync) + { + await base.Select_nav_prop_reference_optional2(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Select_nav_prop_reference_optional2_via_DefaultIfEmpty(bool isAsync) + { + await base.Select_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Select_nav_prop_reference_optional3(bool isAsync) + { + await base.Select_nav_prop_reference_optional3(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Name` + FROM `LevelTwo` AS `l` + LEFT JOIN `LevelOne` AS `l0` ON `l`.`Level1_Optional_Id` = `l0`.`Id` + """); + } + + public override async Task Where_nav_prop_reference_optional1(bool isAsync) + { + await base.Where_nav_prop_reference_optional1(isAsync); + + AssertSql( + """ + SELECT `l`.`Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE `l0`.`Name` IN ('L2 05', 'L2 07') + """); + } + + public override async Task Where_nav_prop_reference_optional1_via_DefaultIfEmpty(bool isAsync) + { + await base.Where_nav_prop_reference_optional1_via_DefaultIfEmpty(isAsync); + + AssertSql( + """ + SELECT `l`.`Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` + WHERE `l0`.`Name` = 'L2 05' OR `l1`.`Name` = 'L2 07' + """); + } + + public override async Task Where_nav_prop_reference_optional2(bool isAsync) + { + await base.Where_nav_prop_reference_optional2(isAsync); + + AssertSql( +""" +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Name` = 'L2 05' OR `l0`.`Name` <> 'L2 42' OR `l0`.`Name` IS NULL +"""); + } + + public override async Task Where_nav_prop_reference_optional2_via_DefaultIfEmpty(bool isAsync) + { + await base.Where_nav_prop_reference_optional2_via_DefaultIfEmpty(isAsync); + + AssertSql( +""" +SELECT `l`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` +WHERE `l0`.`Name` = 'L2 05' OR `l1`.`Name` <> 'L2 42' OR `l1`.`Name` IS NULL +"""); + } + + public override async Task Select_multiple_nav_prop_reference_optional(bool isAsync) + { + await base.Select_multiple_nav_prop_reference_optional(isAsync); + + AssertSql( + $""" + SELECT `l1`.`Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` + """); + } + + public override async Task Where_multiple_nav_prop_reference_optional_member_compared_to_value(bool isAsync) + { + await base.Where_multiple_nav_prop_reference_optional_member_compared_to_value(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` +WHERE `l1`.`Name` <> 'L3 05' OR `l1`.`Name` IS NULL +"""); + } + + public override async Task Where_multiple_nav_prop_reference_optional_member_compared_to_null(bool isAsync) + { + await base.Where_multiple_nav_prop_reference_optional_member_compared_to_null(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` + WHERE `l1`.`Name` IS NOT NULL + """); + } + + public override async Task Where_multiple_nav_prop_reference_optional_compared_to_null1(bool isAsync) + { + await base.Where_multiple_nav_prop_reference_optional_compared_to_null1(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` + WHERE `l1`.`Id` IS NULL + """); + } + + public override async Task Where_multiple_nav_prop_reference_optional_compared_to_null2(bool isAsync) + { + await base.Where_multiple_nav_prop_reference_optional_compared_to_null2(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Level2_Optional_Id`, `l`.`Level2_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse3Id`, `l`.`OneToMany_Optional_Self_Inverse3Id`, `l`.`OneToMany_Required_Inverse3Id`, `l`.`OneToMany_Required_Self_Inverse3Id`, `l`.`OneToOne_Optional_PK_Inverse3Id`, `l`.`OneToOne_Optional_Self3Id` + FROM (`LevelThree` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Optional_Id` = `l0`.`Id`) + LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Optional_Id` = `l1`.`Id` + WHERE `l1`.`Id` IS NULL + """); + } + + public override async Task Where_multiple_nav_prop_reference_optional_compared_to_null3(bool isAsync) + { + await base.Where_multiple_nav_prop_reference_optional_compared_to_null3(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` + WHERE `l1`.`Id` IS NOT NULL + """); + } + + public override async Task Where_multiple_nav_prop_reference_optional_compared_to_null4(bool isAsync) + { + await base.Where_multiple_nav_prop_reference_optional_compared_to_null4(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Level2_Optional_Id`, `l`.`Level2_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse3Id`, `l`.`OneToMany_Optional_Self_Inverse3Id`, `l`.`OneToMany_Required_Inverse3Id`, `l`.`OneToMany_Required_Self_Inverse3Id`, `l`.`OneToOne_Optional_PK_Inverse3Id`, `l`.`OneToOne_Optional_Self3Id` + FROM (`LevelThree` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Optional_Id` = `l0`.`Id`) + LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Optional_Id` = `l1`.`Id` + WHERE `l1`.`Id` IS NOT NULL + """); + } + + public override async Task Where_multiple_nav_prop_reference_optional_compared_to_null5(bool isAsync) + { + await base.Where_multiple_nav_prop_reference_optional_compared_to_null5(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM ((`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` + WHERE `l2`.`Id` IS NULL + """); + } + + public override async Task Select_multiple_nav_prop_reference_required(bool isAsync) + { + await base.Select_multiple_nav_prop_reference_required(isAsync); + + AssertSql( + $""" + SELECT `l1`.`Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` + """); + } + + public override async Task Select_multiple_nav_prop_reference_required2(bool isAsync) + { + await base.Select_multiple_nav_prop_reference_required2(isAsync); + + AssertSql( + """ +SELECT `l1`.`Id` +FROM (`LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` +WHERE `l0`.`Level1_Required_Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL +"""); + } + + public override async Task Select_multiple_nav_prop_optional_required(bool isAsync) + { + await base.Select_multiple_nav_prop_optional_required(isAsync); + + AssertSql( + $""" + SELECT `l1`.`Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` + """); + } + + public override async Task Where_multiple_nav_prop_optional_required(bool isAsync) + { + await base.Where_multiple_nav_prop_optional_required(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +WHERE `l1`.`Name` <> 'L3 05' OR `l1`.`Name` IS NULL +"""); + } + + public override async Task SelectMany_navigation_comparison1(bool isAsync) + { + await base.SelectMany_navigation_comparison1(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id` AS `Id1`, `l0`.`Id` AS `Id2` + FROM `LevelOne` AS `l`, + `LevelOne` AS `l0` + WHERE `l`.`Id` = `l0`.`Id` + """); + } + + public override async Task SelectMany_navigation_comparison2(bool isAsync) + { + await base.SelectMany_navigation_comparison2(isAsync); + + AssertSql( + """ +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` +FROM ( + SELECT `l`.`Id`, `l0`.`Id` AS `Id0`, `l0`.`Level1_Optional_Id` + FROM `LevelOne` AS `l`, + `LevelTwo` AS `l0` +) AS `s` +LEFT JOIN `LevelOne` AS `l1` ON `s`.`Level1_Optional_Id` = `l1`.`Id` +WHERE `s`.`Id` = `l1`.`Id` +"""); + } + + public override async Task SelectMany_navigation_comparison3(bool isAsync) + { + await base.SelectMany_navigation_comparison3(isAsync); + + AssertSql( + """ +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` +FROM ( + SELECT `l`.`Id`, `l0`.`Id` AS `Id0` + FROM `LevelOne` AS `l`, + `LevelTwo` AS `l0` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +WHERE `l1`.`Id` = `s`.`Id0` +"""); + } + + public override async Task Where_complex_predicate_with_with_nav_prop_and_OrElse1(bool isAsync) + { + await base.Where_complex_predicate_with_with_nav_prop_and_OrElse1(isAsync); + + AssertSql( + """ +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` +FROM (( + SELECT `l`.`Id`, `l0`.`Id` AS `Id0`, `l0`.`Level1_Required_Id` + FROM `LevelOne` AS `l`, + `LevelTwo` AS `l0` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id`) +INNER JOIN `LevelOne` AS `l2` ON `s`.`Level1_Required_Id` = `l2`.`Id` +WHERE `l1`.`Name` = 'L2 01' OR `l2`.`Name` <> 'Bar' OR `l2`.`Name` IS NULL +"""); + } + + public override async Task Where_complex_predicate_with_with_nav_prop_and_OrElse2(bool isAsync) + { + await base.Where_complex_predicate_with_with_nav_prop_and_OrElse2(isAsync); + + AssertSql( +""" +SELECT `l`.`Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +WHERE `l1`.`Name` = 'L3 05' OR `l0`.`Name` <> 'L2 05' OR `l0`.`Name` IS NULL +"""); + } + + public override async Task Where_complex_predicate_with_with_nav_prop_and_OrElse3(bool isAsync) + { + await base.Where_complex_predicate_with_with_nav_prop_and_OrElse3(isAsync); + + AssertSql( +""" +SELECT `l`.`Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` +WHERE `l0`.`Name` <> 'L2 05' OR `l0`.`Name` IS NULL OR `l2`.`Name` = 'L3 05' +"""); + } + + public override async Task Where_complex_predicate_with_with_nav_prop_and_OrElse4(bool isAsync) + { + await base.Where_complex_predicate_with_with_nav_prop_and_OrElse4(isAsync); + + AssertSql( +""" +SELECT `l`.`Id` +FROM ((`LevelThree` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Optional_Id` = `l0`.`Id`) +INNER JOIN `LevelTwo` AS `l1` ON `l`.`Level2_Required_Id` = `l1`.`Id`) +LEFT JOIN `LevelOne` AS `l2` ON `l1`.`Level1_Optional_Id` = `l2`.`Id` +WHERE `l0`.`Name` <> 'L2 05' OR `l0`.`Name` IS NULL OR `l2`.`Name` = 'L1 05' +"""); + } + + public override async Task Complex_navigations_with_predicate_projected_into_anonymous_type(bool isAsync) + { + await base.Complex_navigations_with_predicate_projected_into_anonymous_type(isAsync); + + AssertSql( +""" +SELECT `l`.`Name`, `l2`.`Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Optional_Id` +WHERE (`l1`.`Id` = `l2`.`Id` OR (`l1`.`Id` IS NULL AND `l2`.`Id` IS NULL)) AND (`l2`.`Id` <> 7 OR `l2`.`Id` IS NULL) +"""); + } + + public override async Task Complex_navigations_with_predicate_projected_into_anonymous_type2(bool isAsync) + { + await base.Complex_navigations_with_predicate_projected_into_anonymous_type2(isAsync); + + AssertSql( + """ +SELECT `l`.`Name`, `l2`.`Id` +FROM ((`LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id`) +LEFT JOIN `LevelOne` AS `l2` ON `l0`.`Level1_Optional_Id` = `l2`.`Id` +WHERE ((`l1`.`Id` <> `l2`.`Id` OR `l2`.`Id` IS NULL) AND (`l2`.`Id` <> 7 OR `l2`.`Id` IS NULL)) AND (`l0`.`Level1_Required_Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL) +"""); + } + + public override async Task Optional_navigation_projected_into_DTO(bool isAsync) + { + await base.Optional_navigation_projected_into_DTO(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l0`.`Id` IS NOT NULL, `l0`.`Id`, `l0`.`Name` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +"""); + } + + public override async Task OrderBy_nav_prop_reference_optional(bool isAsync) + { + await base.OrderBy_nav_prop_reference_optional(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + ORDER BY `l0`.`Name`, `l`.`Id` + """); + } + + public override async Task OrderBy_nav_prop_reference_optional_via_DefaultIfEmpty(bool isAsync) + { + await base.OrderBy_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + ORDER BY `l0`.`Name`, `l`.`Id` + """); + } + + public override async Task Result_operator_nav_prop_reference_optional_Sum(bool isAsync) + { + await base.Result_operator_nav_prop_reference_optional_Sum(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`l0`.`Level1_Required_Id`) IS NULL, 0, SUM(`l0`.`Level1_Required_Id`)) + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Result_operator_nav_prop_reference_optional_Min(bool isAsync) + { + await base.Result_operator_nav_prop_reference_optional_Min(isAsync); + + AssertSql( + $""" + SELECT MIN(`l0`.`Level1_Required_Id`) + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Result_operator_nav_prop_reference_optional_Max(bool isAsync) + { + await base.Result_operator_nav_prop_reference_optional_Max(isAsync); + + AssertSql( + $""" + SELECT MAX(`l0`.`Level1_Required_Id`) + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Result_operator_nav_prop_reference_optional_Average(bool isAsync) + { + await base.Result_operator_nav_prop_reference_optional_Average(isAsync); + + AssertSql( + $""" + SELECT AVG(IIF(`l0`.`Level1_Required_Id` IS NULL, NULL, CDBL(`l0`.`Level1_Required_Id`))) + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Result_operator_nav_prop_reference_optional_Average_with_identity_selector(bool isAsync) + { + await base.Result_operator_nav_prop_reference_optional_Average_with_identity_selector(isAsync); + + AssertSql( + $""" + SELECT AVG(IIF(`l0`.`Level1_Required_Id` IS NULL, NULL, CDBL(`l0`.`Level1_Required_Id`))) + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Result_operator_nav_prop_reference_optional_Average_without_selector(bool isAsync) + { + await base.Result_operator_nav_prop_reference_optional_Average_without_selector(isAsync); + + AssertSql( + $""" + SELECT AVG(IIF(`l0`.`Level1_Required_Id` IS NULL, NULL, CDBL(`l0`.`Level1_Required_Id`))) + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Result_operator_nav_prop_reference_optional_via_DefaultIfEmpty(bool isAsync) + { + await base.Result_operator_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(IIF(`l0`.`Id` IS NULL, 0, `l0`.`Level1_Required_Id`)) IS NULL, 0, SUM(IIF(`l0`.`Id` IS NULL, 0, `l0`.`Level1_Required_Id`))) + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Include_with_optional_navigation(bool isAsync) + { + await base.Include_with_optional_navigation(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Name` <> 'L2 05' OR `l0`.`Name` IS NULL +"""); + } + + public override async Task Join_flattening_bug_4539(bool isAsync) + { + await base.Join_flattening_bug_4539(isAsync); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`), +(`LevelTwo` AS `l1` +INNER JOIN `LevelOne` AS `l2` ON `l1`.`Level1_Required_Id` = `l2`.`Id`) +"""); + } + + public override async Task Query_source_materialization_bug_4547(bool isAsync) + { + await base.Query_source_materialization_bug_4547(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id` + FROM `LevelThree` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`Id` = ( + SELECT TOP 1 `l2`.`Id` + FROM `LevelTwo` AS `l1` + LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` + ORDER BY `l2`.`Id`) + """); + } + + public override async Task SelectMany_navigation_property(bool isAsync) + { + await base.SelectMany_navigation_property(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` + """); + } + + public override async Task SelectMany_navigation_property_and_projection(bool isAsync) + { + await base.SelectMany_navigation_property_and_projection(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Name` + FROM `LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` + """); + } + + public override async Task SelectMany_navigation_property_and_filter_before(bool isAsync) + { + await base.SelectMany_navigation_property_and_filter_before(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` + WHERE `l`.`Id` = 1 + """); + } + + public override async Task SelectMany_navigation_property_and_filter_after(bool isAsync) + { + await base.SelectMany_navigation_property_and_filter_after(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` + WHERE `l0`.`Id` <> 6 + """); + } + + public override async Task SelectMany_nested_navigation_property_required(bool isAsync) + { + await base.SelectMany_nested_navigation_property_required(isAsync); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +"""); + } + + public override async Task SelectMany_nested_navigation_property_optional_and_projection(bool isAsync) + { + await base.SelectMany_nested_navigation_property_optional_and_projection(isAsync); + + AssertSql( + """ +SELECT `l1`.`Name` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +"""); + } + + public override async Task Multiple_SelectMany_calls(bool isAsync) + { + await base.Multiple_SelectMany_calls(isAsync); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +"""); + } + + public override async Task SelectMany_navigation_property_with_another_navigation_in_subquery(bool isAsync) + { + await base.SelectMany_navigation_property_with_another_navigation_in_subquery(isAsync); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l0`.`OneToMany_Optional_Inverse2Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +"""); + } + + [ConditionalFact] + public void Multiple_complex_includes_from_sql() + { + using var context = CreateContext(); + var query = context.LevelOne.FromSqlRaw("SELECT * FROM `LevelOne`") + .Include(e => e.OneToOne_Optional_FK1) + .ThenInclude(e => e.OneToMany_Optional2) + .Include(e => e.OneToMany_Optional1) + .ThenInclude(e => e.OneToOne_Optional_FK2); + + var results = query.ToList(); + + Assert.Equal(13, results.Count); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`Date`, `m`.`Name`, `m`.`OneToMany_Optional_Self_Inverse1Id`, `m`.`OneToMany_Required_Self_Inverse1Id`, `m`.`OneToOne_Optional_Self1Id`, `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM ((( + SELECT * FROM `LevelOne` +) AS `m` +LEFT JOIN `LevelTwo` AS `l` ON `m`.`Id` = `l`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l2`.`Id` AS `Id0`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l1` + LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` +) AS `s` ON `m`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `m`.`Id`, `l`.`Id`, `l0`.`Id`, `s`.`Id` +"""); + } + + public override async Task Where_navigation_property_to_collection(bool isAsync) + { + await base.Where_navigation_property_to_collection(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` +WHERE EXISTS ( + SELECT 1 + FROM `LevelThree` AS `l1` + WHERE `l0`.`Id` IS NOT NULL AND `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +"""); + } + + public override async Task Where_navigation_property_to_collection2(bool isAsync) + { + await base.Where_navigation_property_to_collection2(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Level2_Optional_Id`, `l`.`Level2_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse3Id`, `l`.`OneToMany_Optional_Self_Inverse3Id`, `l`.`OneToMany_Required_Inverse3Id`, `l`.`OneToMany_Required_Self_Inverse3Id`, `l`.`OneToOne_Optional_PK_Inverse3Id`, `l`.`OneToOne_Optional_Self3Id` +FROM `LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id` +WHERE EXISTS ( + SELECT 1 + FROM `LevelThree` AS `l1` + WHERE `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +"""); + } + + public override async Task Where_navigation_property_to_collection_of_original_entity_type(bool isAsync) + { + await base.Where_navigation_property_to_collection_of_original_entity_type(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`OneToMany_Required_Inverse2Id` = `l0`.`Id` + WHERE ( + SELECT COUNT(*) + FROM `LevelTwo` AS `l1` + WHERE `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id`) > 0 + """); + } + + public override async Task Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level(bool isAsync) + { + await base.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `l`.`Name` + FROM `LevelOne` AS `l` + WHERE EXISTS ( + SELECT 1 + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Level1_Required_Id` = `l`.`Id`) + """); + } + + public override async Task Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level_join(bool isAsync) + { + await base.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level_join(isAsync); + + AssertSql( + """ +SELECT `l`.`Name` AS `Name1`, `s`.`Id` AS `Id2` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Optional_Id` = `l1`.`Id` +) AS `s` ON `l`.`Id` = `s`.`Id0` +WHERE EXISTS ( + SELECT 1 + FROM `LevelTwo` AS `l2` + WHERE `l2`.`Level1_Required_Id` = `l`.`Id`) +"""); + } + + public override async Task Correlated_nested_subquery_doesnt_project_unnecessary_columns_in_top_level(bool isAsync) + { + await base.Correlated_nested_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `l`.`Name` + FROM `LevelOne` AS `l` + WHERE EXISTS ( + SELECT 1 + FROM `LevelTwo` AS `l0` + WHERE EXISTS ( + SELECT 1 + FROM `LevelThree` AS `l1`)) + """); + } + + public override async Task Correlated_nested_two_levels_up_subquery_doesnt_project_unnecessary_columns_in_top_level(bool isAsync) + { + await base.Correlated_nested_two_levels_up_subquery_doesnt_project_unnecessary_columns_in_top_level(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `l`.`Name` + FROM `LevelOne` AS `l` + WHERE EXISTS ( + SELECT 1 + FROM `LevelTwo` AS `l0` + WHERE EXISTS ( + SELECT 1 + FROM `LevelThree` AS `l1`)) + """); + } + + public override async Task SelectMany_where_with_subquery(bool isAsync) + { + await base.SelectMany_where_with_subquery(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id` + WHERE EXISTS ( + SELECT 1 + FROM `LevelThree` AS `l1` + WHERE `l0`.`Id` = `l1`.`OneToMany_Required_Inverse3Id`) + """); + } + + public override async Task Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access1(bool isAsync) + { + await base.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access1(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelThree` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id` + ORDER BY `l0`.`Id` + """); + } + + public override async Task Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access2(bool isAsync) + { + await base.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access2(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelThree` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id` + ORDER BY `l0`.`Id` + """); + } + + public override async Task Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access3(bool isAsync) + { + await base.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access3(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelThree` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id` + ORDER BY `l0`.`Id` + """); + } + + public override async Task Order_by_key_of_navigation_similar_to_projected_gets_optimized_into_FK_access(bool isAsync) + { + await base.Order_by_key_of_navigation_similar_to_projected_gets_optimized_into_FK_access(isAsync); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id` +FROM (`LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` +WHERE `l0`.`Level1_Required_Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL +ORDER BY `l0`.`Id` +"""); + } + + public override async Task Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(bool isAsync) + { + await base.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync); + + AssertSql( + """ +@p='10' + +SELECT `l1`.`Name` +FROM ( + SELECT TOP @p `l0`.`Id` AS `Id0`, `l0`.`Level1_Required_Id` + FROM `LevelThree` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id` + ORDER BY `l0`.`Id` +) AS `s` +INNER JOIN `LevelOne` AS `l1` ON `s`.`Level1_Required_Id` = `l1`.`Id` +ORDER BY `s`.`Id0` +"""); + } + + public override async Task Order_by_key_of_anonymous_type_projected_navigation_doesnt_get_optimized_into_FK_access_subquery( + bool isAsync) + { + await base.Order_by_key_of_anonymous_type_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `l0`.`Name` +FROM `LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id` +ORDER BY `l0`.`Id` +"""); + } + + public override async Task Optional_navigation_take_optional_navigation(bool isAsync) + { + await base.Optional_navigation_take_optional_navigation(isAsync); + + AssertSql( + """ +@p='10' + +SELECT `l1`.`Name` +FROM ( + SELECT TOP @p `l0`.`Id` AS `Id0` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + ORDER BY `l0`.`Id` +) AS `s` +LEFT JOIN `LevelThree` AS `l1` ON `s`.`Id0` = `l1`.`Level2_Optional_Id` +ORDER BY `s`.`Id0` +"""); + } + + public override async Task Projection_select_correct_table_from_subquery_when_materialization_is_not_required(bool isAsync) + { + await base.Projection_select_correct_table_from_subquery_when_materialization_is_not_required(isAsync); + + AssertSql( + """ +@p='3' + +SELECT TOP @p `l`.`Name` +FROM `LevelTwo` AS `l` +INNER JOIN `LevelOne` AS `l0` ON `l`.`Level1_Required_Id` = `l0`.`Id` +WHERE `l0`.`Name` = 'L1 03' +ORDER BY `l`.`Id` +"""); + } + + public override async Task Projection_select_correct_table_with_anonymous_projection_in_subquery(bool isAsync) + { + await base.Projection_select_correct_table_with_anonymous_projection_in_subquery(isAsync); + + AssertSql( + """ +@p='3' + +SELECT TOP @p `l`.`Name` +FROM (`LevelTwo` AS `l` +INNER JOIN `LevelOne` AS `l0` ON `l`.`Level1_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`Level2_Required_Id` IS NOT NULL +ORDER BY `l0`.`Id` +"""); + } + + public override async Task Projection_select_correct_table_in_subquery_when_materialization_is_not_required_in_multiple_joins( + bool isAsync) + { + await base.Projection_select_correct_table_in_subquery_when_materialization_is_not_required_in_multiple_joins(isAsync); + + AssertSql( + """ +@p='3' + +SELECT TOP @p `l0`.`Name` +FROM (`LevelTwo` AS `l` +INNER JOIN `LevelOne` AS `l0` ON `l`.`Level1_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`Level2_Required_Id` IS NOT NULL +ORDER BY `l0`.`Id` +"""); + } + + public override async Task Where_predicate_on_optional_reference_navigation(bool isAsync) + { + await base.Where_predicate_on_optional_reference_navigation(isAsync); + + AssertSql( + """ +@p='3' + +SELECT TOP @p `l`.`Name` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` +WHERE `l0`.`Name` = 'L2 03' +ORDER BY `l`.`Id` +"""); + } + + public override async Task SelectMany_with_string_based_Include1(bool isAsync) + { + await base.SelectMany_with_string_based_Include1(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM (`LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` + """); + } + + public override async Task SelectMany_with_string_based_Include2(bool isAsync) + { + await base.SelectMany_with_string_based_Include2(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + FROM ((`LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` + """); + } + + public override async Task Multiple_SelectMany_with_string_based_Include(bool isAsync) + { + await base.Multiple_SelectMany_with_string_based_Include(isAsync); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +"""); + } + + public override async Task Multiple_required_navigations_with_Include(bool isAsync) + { + await base.Multiple_required_navigations_with_Include(isAsync); + + AssertSql(); + } + + public override async Task Multiple_required_navigation_using_multiple_selects_with_Include(bool isAsync) + { + await base.Multiple_required_navigation_using_multiple_selects_with_Include(isAsync); + + AssertSql(); + } + + public override async Task Multiple_required_navigation_with_string_based_Include(bool isAsync) + { + await base.Multiple_required_navigation_with_string_based_Include(isAsync); + + AssertSql(); + } + + public override async Task Multiple_required_navigation_using_multiple_selects_with_string_based_Include(bool isAsync) + { + await base.Multiple_required_navigation_using_multiple_selects_with_string_based_Include(isAsync); + + AssertSql(); + } + + public override async Task Optional_navigation_with_Include(bool isAsync) + { + await base.Optional_navigation_with_Include(isAsync); + + AssertSql(); + } + + public override async Task SelectMany_with_navigation_and_explicit_DefaultIfEmpty(bool isAsync) + { + await base.SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` + WHERE `l0`.`Id` IS NOT NULL + """); + } + + public override async Task SelectMany_with_navigation_filter_and_explicit_DefaultIfEmpty(bool isAsync) + { + await base.SelectMany_with_navigation_filter_and_explicit_DefaultIfEmpty(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`OneToMany_Optional_Inverse2Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` > 5 +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +WHERE `l1`.`Id` IS NOT NULL +"""); + } + + public override async Task SelectMany_with_nested_navigation_and_explicit_DefaultIfEmpty(bool isAsync) + { + await base.SelectMany_with_nested_navigation_and_explicit_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` + WHERE `l1`.`Id` IS NOT NULL + """); + } + + public override async Task SelectMany_with_nested_navigation_filter_and_explicit_DefaultIfEmpty(bool isAsync) + { + await base.SelectMany_with_nested_navigation_filter_and_explicit_DefaultIfEmpty(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`OneToMany_Optional_Inverse3Id` + FROM `LevelThree` AS `l1` + WHERE `l1`.`Id` > 5 +) AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` +WHERE `l2`.`Id` IS NOT NULL +"""); + } + + public override async Task SelectMany_with_nested_required_navigation_filter_and_explicit_DefaultIfEmpty(bool isAsync) + { + await base.SelectMany_with_nested_required_navigation_filter_and_explicit_DefaultIfEmpty(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0` + FROM `LevelThree` AS `l1` + WHERE `l1`.`Id` > 5 +) AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Required_Inverse3Id0` +WHERE `l2`.`Id` IS NOT NULL +"""); + } + + public override async Task SelectMany_with_nested_navigations_and_additional_joins_outside_of_SelectMany(bool isAsync) + { + await base.SelectMany_with_nested_navigations_and_additional_joins_outside_of_SelectMany(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id2`, `s`.`Date0`, `s`.`Level1_Optional_Id0`, `s`.`Level1_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id0` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l3`.`Id` AS `Id2`, `l3`.`Date` AS `Date0`, `l3`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `l3`.`Level1_Required_Id` AS `Level1_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `l3`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `l3`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `l3`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `l3`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `l3`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0` + FROM ((`LevelFour` AS `l0` + INNER JOIN `LevelThree` AS `l1` ON `l0`.`Level3_Required_Id` = `l1`.`Id`) + LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Level2_Optional_Id` = `l2`.`Id`) + LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Required_Self_Inverse2Id` + WHERE `l2`.`Id` IS NOT NULL AND `l3`.`OneToMany_Required_Self_Inverse2Id` IS NOT NULL +) AS `s` ON `l`.`Id` = `s`.`Level1_Optional_Id0` +"""); + } + + public override async Task SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany( + bool isAsync) + { + await base.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id2`, `s`.`Date0`, `s`.`Level1_Optional_Id0`, `s`.`Level1_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id0` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l3`.`Id` AS `Id2`, `l3`.`Date` AS `Date0`, `l3`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `l3`.`Level1_Required_Id` AS `Level1_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `l3`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `l3`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `l3`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `l3`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `l3`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0` + FROM ((`LevelFour` AS `l0` + INNER JOIN `LevelThree` AS `l1` ON `l0`.`Level3_Required_Id` = `l1`.`Id`) + LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Level2_Optional_Id` = `l2`.`Id`) + LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Required_Self_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`Level1_Optional_Id0` +"""); + } + + public override async Task SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany2( + bool isAsync) + { + await base.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany2(isAsync); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id`, `l3`.`Date`, `l3`.`Name`, `l3`.`OneToMany_Optional_Self_Inverse1Id`, `l3`.`OneToMany_Required_Self_Inverse1Id`, `l3`.`OneToOne_Optional_Self1Id` +FROM (((`LevelFour` AS `l` +INNER JOIN `LevelThree` AS `l0` ON `l`.`Level3_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Level2_Optional_Id` = `l1`.`Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Self_Inverse2Id`) +LEFT JOIN `LevelOne` AS `l3` ON `l2`.`Level1_Optional_Id` = `l3`.`Id` +WHERE `l2`.`Level1_Optional_Id` IS NOT NULL AND `l3`.`Id` IS NOT NULL +"""); + } + + public override async Task SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany3( + bool isAsync) + { + await base.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany3(isAsync); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id`, `l3`.`Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Optional_Self_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToMany_Required_Self_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l3`.`OneToOne_Optional_Self2Id` +FROM (((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse4Id`) +LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`Id` +WHERE `l2`.`Id` IS NOT NULL AND `l3`.`Id` IS NOT NULL +"""); + } + + public override async Task SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany4( + bool isAsync) + { + await base.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany4(isAsync); + + AssertSql( +""" +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id`, `l3`.`Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Optional_Self_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToMany_Required_Self_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l3`.`OneToOne_Optional_Self2Id` +FROM (((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse4Id`) +LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`Id` +"""); + } + + public override async Task Multiple_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_joined_together(bool isAsync) + { + await base.Multiple_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_joined_together(isAsync); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Date0`, `s`.`Level1_Optional_Id0`, `s`.`Level1_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id0` +FROM (((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse4Id`) +LEFT JOIN ( + SELECT `l6`.`Id` AS `Id2`, `l6`.`Date` AS `Date0`, `l6`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `l6`.`Level1_Required_Id` AS `Level1_Required_Id0`, `l6`.`Name` AS `Name2`, `l6`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `l6`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `l6`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `l6`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `l6`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `l6`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0` + FROM ((`LevelFour` AS `l3` + INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) + LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) + LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` +) AS `s` ON `l2`.`Id` = `s`.`Id2` +WHERE `l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL +"""); + } + + public override async Task + SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_same_navs( + bool isAsync) + { + await base + .SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_same_navs( + isAsync); + + AssertSql( + """ +SELECT `l4`.`Id`, `l4`.`Date`, `l4`.`Name`, `l4`.`OneToMany_Optional_Self_Inverse1Id`, `l4`.`OneToMany_Required_Self_Inverse1Id`, `l4`.`OneToOne_Optional_Self1Id` +FROM ((((`LevelFour` AS `l` +INNER JOIN `LevelThree` AS `l0` ON `l`.`Level3_Required_Id` = `l0`.`Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Level2_Required_Id` = `l1`.`Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse3Id`) +LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Level2_Required_Id` = `l3`.`Id`) +LEFT JOIN `LevelOne` AS `l4` ON `l3`.`Id` = `l4`.`Id` +WHERE `l0`.`Level2_Required_Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL +"""); + } + + public override async Task + SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_different_navs( + bool isAsync) + { + await base + .SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_followed_by_Select_required_navigation_using_different_navs( + isAsync); + + AssertSql( + $""" + SELECT `l3`.`Id`, `l3`.`Date`, `l3`.`Name`, `l3`.`OneToMany_Optional_Self_Inverse1Id`, `l3`.`OneToMany_Required_Self_Inverse1Id`, `l3`.`OneToOne_Optional_Self1Id` + FROM (((`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) + LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Level2_Required_Id` = `l2`.`Id`) + LEFT JOIN `LevelOne` AS `l3` ON `l2`.`Id` = `l3`.`Id` + """); + } + + public override async Task Multiple_SelectMany_with_navigation_and_explicit_DefaultIfEmpty(bool isAsync) + { + await base.Multiple_SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`OneToMany_Optional_Inverse3Id` + FROM `LevelThree` AS `l1` + WHERE `l1`.`Id` > 5 +) AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` +WHERE `l2`.`Id` IS NOT NULL +"""); + } + + public override async Task SelectMany_with_navigation_filter_paging_and_explicit_DefaultIfEmpty(bool isAsync) + { + await base.SelectMany_with_navigation_filter_paging_and_explicit_DefaultIfEmpty(isAsync); + + AssertSql( + """ + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN ( + SELECT `t`.`Id`, `t`.`OneToMany_Required_Inverse2Id` + FROM ( + SELECT `l0`.`Id`, `l0`.`OneToMany_Required_Inverse2Id`, ROW_NUMBER() OVER(PARTITION BY `l0`.`OneToMany_Required_Inverse2Id` ORDER BY `l0`.`Id`) AS `row` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` > 5 + ) AS `t` + WHERE `t`.`row` <= 3 + ) AS `t0` ON `l`.`Id` = `t0`.`OneToMany_Required_Inverse2Id` + WHERE `t0`.`Id` IS NOT NULL + """); + } + + public override async Task Select_join_subquery_containing_filter_and_distinct(bool isAsync) + { + await base.Select_join_subquery_containing_filter_and_distinct(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` > 2 +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` +"""); + } + + public override async Task Select_join_with_key_selector_being_a_subquery(bool isAsync) + { + await base.Select_join_with_key_selector_being_a_subquery(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = IIF(( + SELECT TOP 1 `l1`.`Id` + FROM `LevelTwo` AS `l1` + ORDER BY `l1`.`Id`) IS NULL, 0, ( + SELECT TOP 1 `l1`.`Id` + FROM `LevelTwo` AS `l1` + ORDER BY `l1`.`Id`)) +"""); + } + + public override async Task Contains_with_subquery_optional_navigation_and_constant_item(bool isAsync) + { + await base.Contains_with_subquery_optional_navigation_and_constant_item(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE 6 IN ( + SELECT `l2`.`Id` + FROM ( + SELECT DISTINCT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM `LevelThree` AS `l1` + WHERE `l0`.`Id` IS NOT NULL AND `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` + ) AS `l2` +) +"""); + } + + public override async Task Contains_with_subquery_optional_navigation_scalar_distinct_and_constant_item(bool async) + { + await base.Contains_with_subquery_optional_navigation_scalar_distinct_and_constant_item(async); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE 5 IN ( + SELECT IIF(LEN(`l1`.`Name`) IS NULL, NULL, CLNG(LEN(`l1`.`Name`))) + FROM `LevelThree` AS `l1` + WHERE `l0`.`Id` IS NOT NULL AND `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` +) +"""); + } + + public override async Task Required_navigation_on_a_subquery_with_First_in_projection(bool isAsync) + { + await base.Required_navigation_on_a_subquery_with_First_in_projection(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `l1`.`Name` + FROM `LevelTwo` AS `l0` + INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` + ORDER BY `l0`.`Id`) +FROM `LevelTwo` AS `l` +WHERE `l`.`Id` = 7 +"""); + } + + public override async Task Required_navigation_on_a_subquery_with_complex_projection_and_First(bool isAsync) + { + await base.Required_navigation_on_a_subquery_with_complex_projection_and_First(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `l2`.`Name` + FROM (`LevelTwo` AS `l0` + INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id`) + INNER JOIN `LevelOne` AS `l2` ON `l0`.`Level1_Required_Id` = `l2`.`Id` + ORDER BY `l0`.`Id`) +FROM `LevelTwo` AS `l` +WHERE `l`.`Id` = 7 +"""); + } + + public override async Task Required_navigation_on_a_subquery_with_First_in_predicate(bool isAsync) + { + await base.Required_navigation_on_a_subquery_with_First_in_predicate(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` +FROM `LevelTwo` AS `l` +WHERE `l`.`Id` = 7 AND (( + SELECT TOP 1 `l1`.`Name` + FROM `LevelTwo` AS `l0` + INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` + ORDER BY `l0`.`Id`) = 'L1 10' OR ( + SELECT TOP 1 `l3`.`Name` + FROM `LevelTwo` AS `l2` + INNER JOIN `LevelOne` AS `l3` ON `l2`.`Level1_Required_Id` = `l3`.`Id` + ORDER BY `l2`.`Id`) = 'L1 01') +"""); + } + + public override async Task Manually_created_left_join_propagates_nullability_to_navigations(bool isAsync) + { + await base.Manually_created_left_join_propagates_nullability_to_navigations(isAsync); + + AssertSql( +""" +SELECT `l1`.`Name` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` +WHERE `l1`.`Name` <> 'L3 02' OR `l1`.`Name` IS NULL +"""); + } + + public override async Task Optional_navigation_propagates_nullability_to_manually_created_left_join1(bool isAsync) + { + await base.Optional_navigation_propagates_nullability_to_manually_created_left_join1(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id` AS `Id1`, `l1`.`Id` AS `Id2` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` + """); + } + + public override async Task Optional_navigation_propagates_nullability_to_manually_created_left_join2(bool isAsync) + { + await base.Optional_navigation_propagates_nullability_to_manually_created_left_join2(isAsync); + + AssertSql( + """ +SELECT `l`.`Name` AS `Name1`, `s`.`Name0` AS `Name2` +FROM `LevelThree` AS `l` +LEFT JOIN ( + SELECT `l1`.`Id` AS `Id0`, `l1`.`Name` AS `Name0` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` +) AS `s` ON `l`.`Level2_Required_Id` = `s`.`Id0` +"""); + } + + public override async Task Null_reference_protection_complex(bool isAsync) + { + await base.Null_reference_protection_complex(isAsync); + + AssertSql( + """ +SELECT `s`.`Name0` +FROM `LevelThree` AS `l` +LEFT JOIN ( + SELECT `l1`.`Id` AS `Id0`, `l1`.`Name` AS `Name0` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` +) AS `s` ON `l`.`Level2_Required_Id` = `s`.`Id0` +"""); + } + + public override async Task Null_reference_protection_complex_materialization(bool isAsync) + { + await base.Null_reference_protection_complex_materialization(isAsync); + + AssertSql( + """ +SELECT `s`.`Id0`, `s`.`Date0`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id` +FROM `LevelThree` AS `l` +LEFT JOIN ( + SELECT `l1`.`Id` AS `Id0`, `l1`.`Date` AS `Date0`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` +) AS `s` ON `l`.`Level2_Required_Id` = `s`.`Id0` +"""); + } + + public override async Task Null_reference_protection_complex_client_eval(bool isAsync) + { + await base.Null_reference_protection_complex_client_eval(isAsync); + + AssertSql( + """ +SELECT `s`.`Name0` +FROM `LevelThree` AS `l` +LEFT JOIN ( + SELECT `l1`.`Id` AS `Id0`, `l1`.`Name` AS `Name0` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` +) AS `s` ON `l`.`Level2_Required_Id` = `s`.`Id0` +"""); + } + + public override async Task GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened(bool isAsync) + { + await base.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened(isAsync); + + AssertSql( + """ +SELECT `s`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelTwo` AS `l0` + INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` +) AS `s` ON `l`.`Id` = `s`.`Level1_Optional_Id` +"""); + } + + public override async Task GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened2(bool isAsync) + { + await base.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened2(isAsync); + + AssertSql( + """ +SELECT `s`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelTwo` AS `l0` + INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` +) AS `s` ON `l`.`Id` = `s`.`Level1_Optional_Id` +"""); + } + + public override async Task GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened3(bool isAsync) + { + await base.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened3(isAsync); + + AssertSql( + """ +SELECT `s`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Level1_Required_Id` + FROM `LevelTwo` AS `l0` + LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` +) AS `s` ON `l`.`Id` = `s`.`Level1_Required_Id` +"""); + } + + public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer(bool isAsync) + { + await base.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer(isAsync); + + AssertSql( + """ +@p='2' + +SELECT `l1`.`Name` +FROM ( + SELECT TOP @p `l`.`Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + ORDER BY `l`.`Id` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Id` +"""); + } + + public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer_with_client_method(bool isAsync) + { + await base.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer_with_client_method(isAsync); + + AssertSql(); + } + + public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_inner(bool isAsync) + { + await base.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_inner(isAsync); + + AssertSql( + """ +@p='2' + +SELECT `l1`.`Name` +FROM ( + SELECT TOP @p `l`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + ORDER BY `l`.`Id` +) AS `s` +LEFT JOIN `LevelOne` AS `l1` ON `s`.`Level1_Optional_Id` = `l1`.`Id` +ORDER BY `s`.`Id` +"""); + } + + public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_with_orderby_on_inner_sequence_projecting_inner( + bool isAsync) + { + await base.GroupJoin_on_a_subquery_containing_another_GroupJoin_with_orderby_on_inner_sequence_projecting_inner(isAsync); + + AssertSql( + """ +@p='2' + +SELECT `l1`.`Name` +FROM ( + SELECT TOP @p `l`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + ORDER BY `l`.`Id` +) AS `s` +LEFT JOIN `LevelOne` AS `l1` ON `s`.`Level1_Optional_Id` = `l1`.`Id` +ORDER BY `s`.`Id` +"""); + } + + public override async Task GroupJoin_on_left_side_being_a_subquery(bool isAsync) + { + await base.GroupJoin_on_left_side_being_a_subquery(isAsync); + + AssertSql( + """ +@p='2' + +SELECT TOP @p `l`.`Id`, `l0`.`Name` AS `Brand` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l0`.`Name`, `l`.`Id` +"""); + } + + public override async Task GroupJoin_on_right_side_being_a_subquery(bool isAsync) + { + await base.GroupJoin_on_right_side_being_a_subquery(isAsync); + + AssertSql( + """ +@p='2' + +SELECT `l`.`Id`, `s`.`Name` +FROM `LevelTwo` AS `l` +LEFT JOIN ( + SELECT TOP @p `l0`.`Id`, `l0`.`Name` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` + ORDER BY `l1`.`Name` +) AS `s` ON `l`.`Level1_Optional_Id` = `s`.`Id` +"""); + } + + public override async Task GroupJoin_in_subquery_with_client_result_operator(bool isAsync) + { + await base.GroupJoin_in_subquery_with_client_result_operator(isAsync); + + AssertSql( + """ +SELECT `l`.`Name` +FROM `LevelOne` AS `l` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` + ) AS `s`) > 7 AND `l`.`Id` < 3 +"""); + } + + public override async Task GroupJoin_in_subquery_with_client_projection(bool isAsync) + { + await base.GroupJoin_in_subquery_with_client_projection(isAsync); + + AssertSql( +""" +SELECT `l`.`Name` +FROM `LevelOne` AS `l` +WHERE ( + SELECT COUNT(*) + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id`) > 7 AND `l`.`Id` < 3 +"""); + } + + public override async Task GroupJoin_in_subquery_with_client_projection_nested1(bool isAsync) + { + await base.GroupJoin_in_subquery_with_client_projection_nested1(isAsync); + + AssertSql( + """ +SELECT `l`.`Name` +FROM `LevelOne` AS `l` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT TOP 10 1 + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` + WHERE ( + SELECT COUNT(*) + FROM `LevelOne` AS `l2` + LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`Level1_Optional_Id`) > 7 + ORDER BY `l0`.`Id` + ) AS `s`) > 4 AND `l`.`Id` < 2 +"""); + } + + public override async Task GroupJoin_in_subquery_with_client_projection_nested2(bool isAsync) + { + await base.GroupJoin_in_subquery_with_client_projection_nested2(isAsync); + + AssertSql( +""" +SELECT `l`.`Name` +FROM `LevelOne` AS `l` +WHERE ( + SELECT COUNT(*) + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` + WHERE ( + SELECT COUNT(*) + FROM `LevelOne` AS `l2` + LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`Level1_Optional_Id`) > 7) > 4 AND `l`.`Id` < 2 +"""); + } + + public override async Task GroupJoin_client_method_on_outer(bool isAsync) + { + await base.GroupJoin_client_method_on_outer(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task GroupJoin_client_method_in_OrderBy(bool isAsync) + { + await AssertTranslationFailedWithDetails( + () => base.GroupJoin_client_method_in_OrderBy(isAsync), + CoreStrings.QueryUnableToTranslateMethod( + "Microsoft.EntityFrameworkCore.Query.ComplexNavigationsQueryTestBase", + "ClientMethodNullableInt")); + + AssertSql(); + } + + public override async Task GroupJoin_without_DefaultIfEmpty(bool isAsync) + { + await base.GroupJoin_without_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id` + FROM `LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task GroupJoin_with_subquery_on_inner(bool isAsync) + { + await base.GroupJoin_with_subquery_on_inner(isAsync); + + AssertSql( + $""" + SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l1` + LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Optional_Id` + ORDER BY `l1`.`Id` + """); + } + + public override async Task GroupJoin_with_subquery_on_inner_and_no_DefaultIfEmpty(bool isAsync) + { + await base.GroupJoin_with_subquery_on_inner_and_no_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l1` + LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Optional_Id` + ORDER BY `l1`.`Id` + """); + } + + public override async Task Optional_navigation_in_subquery_with_unrelated_projection(bool isAsync) + { + await base.Optional_navigation_in_subquery_with_unrelated_projection(isAsync); + + AssertSql( + """ +@p='15' + +SELECT TOP @p `l`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL +ORDER BY `l`.`Id` +"""); + } + + public override async Task Explicit_GroupJoin_in_subquery_with_unrelated_projection(bool isAsync) + { + await base.Explicit_GroupJoin_in_subquery_with_unrelated_projection(isAsync); + + AssertSql( + """ +@p='15' + +SELECT TOP @p `l`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL +ORDER BY `l`.`Id` +"""); + } + + public override async Task Explicit_GroupJoin_in_subquery_with_unrelated_projection2(bool isAsync) + { + await base.Explicit_GroupJoin_in_subquery_with_unrelated_projection2(isAsync); + + AssertSql( + """ +SELECT `s`.`Id` +FROM ( + SELECT DISTINCT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL +) AS `s` +"""); + } + + public override async Task Explicit_GroupJoin_in_subquery_with_unrelated_projection3(bool isAsync) + { + await base.Explicit_GroupJoin_in_subquery_with_unrelated_projection3(isAsync); + + AssertSql( +""" +SELECT DISTINCT `l`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL +"""); + } + + public override async Task Explicit_GroupJoin_in_subquery_with_unrelated_projection4(bool isAsync) + { + await base.Explicit_GroupJoin_in_subquery_with_unrelated_projection4(isAsync); + + AssertSql( + """ +@p='20' + +SELECT TOP @p `s`.`Id` +FROM ( + SELECT DISTINCT `l`.`Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL +) AS `s` +ORDER BY `s`.`Id` +"""); + } + + public override async Task Explicit_GroupJoin_in_subquery_with_scalar_result_operator(bool isAsync) + { + await base.Explicit_GroupJoin_in_subquery_with_scalar_result_operator(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + WHERE ( + SELECT COUNT(*) + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id`) > 4 + """); + } + + public override async Task Explicit_GroupJoin_in_subquery_with_multiple_result_operator_distinct_count_materializes_main_clause( + bool isAsync) + { + await base.Explicit_GroupJoin_in_subquery_with_multiple_result_operator_distinct_count_materializes_main_clause(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l0` + LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` + ) AS `s`) > 4 +"""); + } + + public override async Task Where_on_multilevel_reference_in_subquery_with_outer_projection(bool isAsync) + { + await base.Where_on_multilevel_reference_in_subquery_with_outer_projection(isAsync); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `s0`.`Name` +FROM ( + SELECT TOP @p1 `s`.`Name`, `s`.`Level2_Required_Id` + FROM ( + SELECT TOP @p + @p1 `l`.`Name`, `l`.`Level2_Required_Id` + FROM (`LevelThree` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`OneToMany_Required_Inverse3Id` = `l0`.`Id`) + LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` + WHERE (`l1`.`Name` IN ('L1 10', 'L1 01')) AND (`l0`.`Level1_Required_Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL) + ORDER BY `l`.`Level2_Required_Id` + ) AS `s` + ORDER BY `s`.`Level2_Required_Id` DESC +) AS `s0` +ORDER BY `s0`.`Level2_Required_Id` +"""); + } + + public override async Task Join_condition_optimizations_applied_correctly_when_anonymous_type_with_single_property(bool isAsync) + { + await base.Join_condition_optimizations_applied_correctly_when_anonymous_type_with_single_property(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`OneToMany_Optional_Self_Inverse1Id` = `l0`.`Level1_Optional_Id` OR (`l`.`OneToMany_Optional_Self_Inverse1Id` IS NULL AND `l0`.`Level1_Optional_Id` IS NULL) +"""); + } + + public override async Task Join_condition_optimizations_applied_correctly_when_anonymous_type_with_multiple_properties(bool isAsync) + { + await base.Join_condition_optimizations_applied_correctly_when_anonymous_type_with_multiple_properties(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON (`l`.`OneToMany_Optional_Self_Inverse1Id` = `l0`.`Level1_Optional_Id` OR (`l`.`OneToMany_Optional_Self_Inverse1Id` IS NULL AND `l0`.`Level1_Optional_Id` IS NULL)) AND (`l`.`OneToOne_Optional_Self1Id` = `l0`.`OneToMany_Optional_Self_Inverse2Id` OR (`l`.`OneToOne_Optional_Self1Id` IS NULL AND `l0`.`OneToMany_Optional_Self_Inverse2Id` IS NULL)) +"""); + } + + public override async Task Nested_group_join_with_take(bool isAsync) + { + await base.Nested_group_join_with_take(isAsync); + + AssertSql( + """ +@p='2' + +SELECT `l1`.`Name` +FROM ( + SELECT TOP @p `l`.`Id`, `l0`.`Id` AS `Id0` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + ORDER BY `l`.`Id` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id0` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Id` +"""); + } + + public override async Task Navigation_with_same_navigation_compared_to_null(bool isAsync) + { + await base.Navigation_with_same_navigation_compared_to_null(isAsync); + + AssertSql( +""" +SELECT `l`.`Id` +FROM `LevelTwo` AS `l` +INNER JOIN `LevelOne` AS `l0` ON `l`.`OneToMany_Required_Inverse2Id` = `l0`.`Id` +WHERE `l0`.`Name` <> 'L1 07' OR `l0`.`Name` IS NULL +"""); + } + + public override async Task Multi_level_navigation_compared_to_null(bool isAsync) + { + await base.Multi_level_navigation_compared_to_null(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id` + FROM (`LevelThree` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`OneToMany_Optional_Inverse3Id` = `l0`.`Id`) + LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` + WHERE `l1`.`Id` IS NOT NULL + """); + } + + public override async Task Multi_level_navigation_with_same_navigation_compared_to_null(bool isAsync) + { + await base.Multi_level_navigation_with_same_navigation_compared_to_null(isAsync); + + AssertSql( +""" +SELECT `l`.`Id` +FROM (`LevelThree` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`OneToMany_Optional_Inverse3Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` +WHERE (`l1`.`Name` <> 'L1 07' OR `l1`.`Name` IS NULL) AND `l1`.`Id` IS NOT NULL +"""); + } + + public override async Task Navigations_compared_to_each_other1(bool isAsync) + { + await base.Navigations_compared_to_each_other1(isAsync); + + AssertSql( + $""" + SELECT `l`.`Name` + FROM `LevelTwo` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`OneToMany_Required_Inverse2Id` = `l0`.`Id` + """); + } + + public override async Task Navigations_compared_to_each_other2(bool isAsync) + { + await base.Navigations_compared_to_each_other2(isAsync); + + AssertSql( + $""" + SELECT `l`.`Name` + FROM (`LevelTwo` AS `l` + INNER JOIN `LevelOne` AS `l0` ON `l`.`OneToMany_Required_Inverse2Id` = `l0`.`Id`) + LEFT JOIN `LevelOne` AS `l1` ON `l`.`OneToOne_Optional_PK_Inverse2Id` = `l1`.`Id` + WHERE `l0`.`Id` = `l1`.`Id` + """); + } + + public override async Task Navigations_compared_to_each_other3(bool isAsync) + { + await base.Navigations_compared_to_each_other3(isAsync); + + AssertSql( + $""" + SELECT `l`.`Name` + FROM `LevelTwo` AS `l` + WHERE EXISTS ( + SELECT 1 + FROM `LevelThree` AS `l0` + WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id`) + """); + } + + public override async Task Navigations_compared_to_each_other4(bool isAsync) + { + await base.Navigations_compared_to_each_other4(isAsync); + + AssertSql( +""" +SELECT `l`.`Name` +FROM `LevelTwo` AS `l` +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`Level2_Required_Id` +WHERE EXISTS ( + SELECT 1 + FROM `LevelFour` AS `l1` + WHERE `l0`.`Id` IS NOT NULL AND `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse4Id`) +"""); + } + + public override async Task Navigations_compared_to_each_other5(bool isAsync) + { + await base.Navigations_compared_to_each_other5(isAsync); + + AssertSql( +""" +SELECT `l`.`Name` +FROM (`LevelTwo` AS `l` +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`Level2_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` +WHERE EXISTS ( + SELECT 1 + FROM `LevelFour` AS `l2` + WHERE `l0`.`Id` IS NOT NULL AND `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id`) +"""); + } + + public override async Task Level4_Include(bool isAsync) + { + await base.Level4_Include(isAsync); + + AssertSql(); + } + + public override async Task Comparing_collection_navigation_on_optional_reference_to_null(bool isAsync) + { + await base.Comparing_collection_navigation_on_optional_reference_to_null(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE `l0`.`Id` IS NULL + """); + } + + public override async Task Select_subquery_with_client_eval_and_navigation1(bool isAsync) + { + await base.Select_subquery_with_client_eval_and_navigation1(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `l1`.`Name` + FROM `LevelTwo` AS `l0` + INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` + ORDER BY `l0`.`Id`) +FROM `LevelTwo` AS `l` +"""); + } + + public override async Task Select_subquery_with_client_eval_and_navigation2(bool isAsync) + { + await base.Select_subquery_with_client_eval_and_navigation2(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `l1`.`Name` + FROM `LevelTwo` AS `l0` + INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` + ORDER BY `l0`.`Id`) = 'L1 02' AND ( + SELECT TOP 1 `l1`.`Name` + FROM `LevelTwo` AS `l0` + INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` + ORDER BY `l0`.`Id`) IS NOT NULL +FROM `LevelTwo` AS `l` +"""); + } + + public override async Task Select_subquery_with_client_eval_and_multi_level_navigation(bool isAsync) + { + await base.Select_subquery_with_client_eval_and_multi_level_navigation(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `l2`.`Name` + FROM (`LevelThree` AS `l0` + INNER JOIN `LevelTwo` AS `l1` ON `l0`.`Level2_Required_Id` = `l1`.`Id`) + LEFT JOIN `LevelOne` AS `l2` ON `l1`.`Level1_Required_Id` = `l2`.`Id` + WHERE `l1`.`Level1_Required_Id` IS NOT NULL AND `l2`.`Id` IS NOT NULL + ORDER BY `l0`.`Id`) +FROM `LevelThree` AS `l` +"""); + } + + public override async Task Member_doesnt_get_pushed_down_into_subquery_with_result_operator(bool isAsync) + { + await base.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync); + + AssertSql( + """ +SELECT ( + SELECT `l3`.`Name` + FROM ( + SELECT TOP 1 `l2`.`Name`, `l2`.`Id` + FROM ( + SELECT TOP 1 + 1 `l1`.`Name`, `l1`.`Id` + FROM ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` + FROM `LevelThree` AS `l0` + ) AS `l1` + ORDER BY `l1`.`Id` + ) AS `l2` + ORDER BY `l2`.`Id` DESC + ) AS `l3` + ORDER BY `l3`.`Id`) +FROM `LevelOne` AS `l` +WHERE `l`.`Id` < 3 +"""); + } + + public override async Task Subquery_with_Distinct_Skip_FirstOrDefault_without_OrderBy(bool isAsync) + { + await base.Subquery_with_Distinct_Skip_FirstOrDefault_without_OrderBy(isAsync); + + AssertSql( + """ +SELECT `l`.`Id` AS `Key`, ( + SELECT `l3`.`Name` + FROM ( + SELECT TOP 1 `l2`.`Name` + FROM ( + SELECT TOP 1 + 1 `l1`.`Name` + FROM ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` + FROM `LevelThree` AS `l0` + ) AS `l1` + ) AS `l2` + ) AS `l3`) AS `Subquery` +FROM `LevelOne` AS `l` +WHERE `l`.`Id` < 3 +"""); + } + + public override async Task Project_collection_navigation_count(bool isAsync) + { + await base.Project_collection_navigation_count(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, ( + SELECT COUNT(*) + FROM `LevelThree` AS `l1` + WHERE `l0`.`Id` IS NOT NULL AND `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) AS `Count` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +"""); + } + + public override async Task Select_optional_navigation_property_string_concat(bool isAsync) + { + await base.Select_optional_navigation_property_string_concat(isAsync); + + AssertSql( + """ +SELECT (IIF(`l`.`Name` IS NULL, '', `l`.`Name`) & ' ') & IIF(IIF(`l1`.`Id` IS NOT NULL, `l1`.`Name`, 'NULL') IS NULL, '', IIF(`l1`.`Id` IS NOT NULL, `l1`.`Name`, 'NULL')) +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` > 5 +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +"""); + } + + public override async Task Include_reference_with_groupby_in_subquery(bool async) + { + await base.Include_reference_with_groupby_in_subquery(async); + + AssertSql( + """ +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t0].[Id0], [t0].[Date0], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + GROUP BY [l].[Name] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id], [t1].[Id0], [t1].[Date0], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name0], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], [l1].[Id] AS [Id0], [l1].[Date] AS [Date0], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name] AS [Name0], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + LEFT JOIN [LevelTwo] AS [l1] ON [l0].[Id] = [l1].[Level1_Optional_Id] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +"""); + } + + public override async Task Multi_include_with_groupby_in_subquery(bool async) + { + await base.Multi_include_with_groupby_in_subquery(async); + + AssertSql( + """ +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id], [t0].[Id0], [t0].[Date0], [t0].[Level1_Optional_Id], [t0].[Level1_Required_Id], [t0].[Name0], [t0].[OneToMany_Optional_Inverse2Id], [t0].[OneToMany_Optional_Self_Inverse2Id], [t0].[OneToMany_Required_Inverse2Id], [t0].[OneToMany_Required_Self_Inverse2Id], [t0].[OneToOne_Optional_PK_Inverse2Id], [t0].[OneToOne_Optional_Self2Id], [t].[Name], [l2].[Id], [l2].[Level2_Optional_Id], [l2].[Level2_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse3Id], [l2].[OneToMany_Optional_Self_Inverse3Id], [l2].[OneToMany_Required_Inverse3Id], [l2].[OneToMany_Required_Self_Inverse3Id], [l2].[OneToOne_Optional_PK_Inverse3Id], [l2].[OneToOne_Optional_Self3Id] +FROM ( + SELECT [l].[Name] + FROM [LevelOne] AS [l] + GROUP BY [l].[Name] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Date], [t1].[Name], [t1].[OneToMany_Optional_Self_Inverse1Id], [t1].[OneToMany_Required_Self_Inverse1Id], [t1].[OneToOne_Optional_Self1Id], [t1].[Id0], [t1].[Date0], [t1].[Level1_Optional_Id], [t1].[Level1_Required_Id], [t1].[Name0], [t1].[OneToMany_Optional_Inverse2Id], [t1].[OneToMany_Optional_Self_Inverse2Id], [t1].[OneToMany_Required_Inverse2Id], [t1].[OneToMany_Required_Self_Inverse2Id], [t1].[OneToOne_Optional_PK_Inverse2Id], [t1].[OneToOne_Optional_Self2Id] + FROM ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id], [l1].[Id] AS [Id0], [l1].[Date] AS [Date0], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name] AS [Name0], [l1].[OneToMany_Optional_Inverse2Id], [l1].[OneToMany_Optional_Self_Inverse2Id], [l1].[OneToMany_Required_Inverse2Id], [l1].[OneToMany_Required_Self_Inverse2Id], [l1].[OneToOne_Optional_PK_Inverse2Id], [l1].[OneToOne_Optional_Self2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[Name] ORDER BY [l0].[Id]) AS [row] + FROM [LevelOne] AS [l0] + LEFT JOIN [LevelTwo] AS [l1] ON [l0].[Id] = [l1].[Level1_Optional_Id] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Name] = [t0].[Name] +LEFT JOIN [LevelThree] AS [l2] ON [t0].[Id0] = [l2].[OneToMany_Optional_Inverse3Id] +ORDER BY [t].[Name], [t0].[Id], [t0].[Id0] +"""); + } + + public override async Task String_include_multiple_derived_navigation_with_same_name_and_same_type(bool isAsync) + { + await base.String_include_multiple_derived_navigation_with_same_name_and_same_type(isAsync); + + AssertSql( + $""" + SELECT `i`.`Id`, `i`.`Discriminator`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1`, `i`.`Name`, `i0`.`Id`, `i0`.`DifferentTypeReference_InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id1`, `i0`.`InheritanceDerived2Id`, `i0`.`Name`, `i0`.`SameTypeReference_InheritanceDerived1Id`, `i0`.`SameTypeReference_InheritanceDerived2Id`, `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id1`, `i1`.`InheritanceDerived2Id`, `i1`.`Name`, `i1`.`SameTypeReference_InheritanceDerived1Id`, `i1`.`SameTypeReference_InheritanceDerived2Id` + FROM (`InheritanceOne` AS `i` + LEFT JOIN `InheritanceLeafOne` AS `i0` ON `i`.`Id` = `i0`.`SameTypeReference_InheritanceDerived1Id`) + LEFT JOIN `InheritanceLeafOne` AS `i1` ON `i`.`Id` = `i1`.`SameTypeReference_InheritanceDerived2Id` + """); + } + + public override async Task String_include_multiple_derived_navigation_with_same_name_and_different_type(bool isAsync) + { + await base.String_include_multiple_derived_navigation_with_same_name_and_different_type(isAsync); + + AssertSql( + $""" + SELECT `i`.`Id`, `i`.`Discriminator`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1`, `i`.`Name`, `i0`.`Id`, `i0`.`DifferentTypeReference_InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id1`, `i0`.`InheritanceDerived2Id`, `i0`.`Name`, `i0`.`SameTypeReference_InheritanceDerived1Id`, `i0`.`SameTypeReference_InheritanceDerived2Id`, `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived2Id`, `i1`.`InheritanceDerived2Id`, `i1`.`Name` + FROM (`InheritanceOne` AS `i` + LEFT JOIN `InheritanceLeafOne` AS `i0` ON `i`.`Id` = `i0`.`DifferentTypeReference_InheritanceDerived1Id`) + LEFT JOIN `InheritanceLeafTwo` AS `i1` ON `i`.`Id` = `i1`.`DifferentTypeReference_InheritanceDerived2Id` + """); + } + + public override async Task + String_include_multiple_derived_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains( + bool isAsync) + { + await base + .String_include_multiple_derived_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains( + isAsync); + + AssertSql( + """ + SELECT `i`.`Id`, `i`.`Discriminator`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1`, `i`.`Name`, `i0`.`Id`, `i0`.`DifferentTypeReference_InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id1`, `i0`.`InheritanceDerived2Id`, `i0`.`Name`, `i0`.`SameTypeReference_InheritanceDerived1Id`, `i0`.`SameTypeReference_InheritanceDerived2Id`, `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived2Id`, `i1`.`InheritanceDerived2Id`, `i1`.`Name`, `i2`.`Id`, `i2`.`InheritanceLeaf2Id`, `i2`.`Name` + FROM ((`InheritanceOne` AS `i` + LEFT JOIN `InheritanceLeafOne` AS `i0` ON `i`.`Id` = `i0`.`DifferentTypeReference_InheritanceDerived1Id`) + LEFT JOIN `InheritanceLeafTwo` AS `i1` ON `i`.`Id` = `i1`.`DifferentTypeReference_InheritanceDerived2Id`) + LEFT JOIN `InheritanceTwo` AS `i2` ON `i1`.`Id` = `i2`.`InheritanceLeaf2Id` + ORDER BY `i`.`Id`, `i0`.`Id`, `i1`.`Id` + """); + } + + public override async Task String_include_multiple_derived_collection_navigation_with_same_name_and_same_type(bool isAsync) + { + await base.String_include_multiple_derived_collection_navigation_with_same_name_and_same_type(isAsync); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`Discriminator`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1`, `i`.`Name`, `i0`.`Id`, `i0`.`DifferentTypeReference_InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id1`, `i0`.`InheritanceDerived2Id`, `i0`.`Name`, `i0`.`SameTypeReference_InheritanceDerived1Id`, `i0`.`SameTypeReference_InheritanceDerived2Id`, `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id1`, `i1`.`InheritanceDerived2Id`, `i1`.`Name`, `i1`.`SameTypeReference_InheritanceDerived1Id`, `i1`.`SameTypeReference_InheritanceDerived2Id` +FROM (`InheritanceOne` AS `i` +LEFT JOIN `InheritanceLeafOne` AS `i0` ON `i`.`Id` = `i0`.`InheritanceDerived1Id1`) +LEFT JOIN `InheritanceLeafOne` AS `i1` ON `i`.`Id` = `i1`.`InheritanceDerived2Id` +ORDER BY `i`.`Id`, `i0`.`Id` +"""); + } + + public override async Task String_include_multiple_derived_collection_navigation_with_same_name_and_different_type(bool isAsync) + { + await base.String_include_multiple_derived_collection_navigation_with_same_name_and_different_type(isAsync); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`Discriminator`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1`, `i`.`Name`, `i0`.`Id`, `i0`.`DifferentTypeReference_InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id1`, `i0`.`InheritanceDerived2Id`, `i0`.`Name`, `i0`.`SameTypeReference_InheritanceDerived1Id`, `i0`.`SameTypeReference_InheritanceDerived2Id`, `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived2Id`, `i1`.`InheritanceDerived2Id`, `i1`.`Name` +FROM (`InheritanceOne` AS `i` +LEFT JOIN `InheritanceLeafOne` AS `i0` ON `i`.`Id` = `i0`.`InheritanceDerived1Id`) +LEFT JOIN `InheritanceLeafTwo` AS `i1` ON `i`.`Id` = `i1`.`InheritanceDerived2Id` +ORDER BY `i`.`Id`, `i0`.`Id` +"""); + } + + public override async Task + String_include_multiple_derived_collection_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains( + bool isAsync) + { + await base + .String_include_multiple_derived_collection_navigation_with_same_name_and_different_type_nested_also_includes_partially_matching_navigation_chains( + isAsync); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`Discriminator`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1`, `i`.`Name`, `i0`.`Id`, `i0`.`DifferentTypeReference_InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id1`, `i0`.`InheritanceDerived2Id`, `i0`.`Name`, `i0`.`SameTypeReference_InheritanceDerived1Id`, `i0`.`SameTypeReference_InheritanceDerived2Id`, `s`.`Id`, `s`.`DifferentTypeReference_InheritanceDerived2Id`, `s`.`InheritanceDerived2Id`, `s`.`Name`, `s`.`Id0`, `s`.`InheritanceLeaf2Id`, `s`.`Name0` +FROM (`InheritanceOne` AS `i` +LEFT JOIN `InheritanceLeafOne` AS `i0` ON `i`.`Id` = `i0`.`InheritanceDerived1Id`) +LEFT JOIN ( + SELECT `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived2Id`, `i1`.`InheritanceDerived2Id`, `i1`.`Name`, `i2`.`Id` AS `Id0`, `i2`.`InheritanceLeaf2Id`, `i2`.`Name` AS `Name0` + FROM `InheritanceLeafTwo` AS `i1` + LEFT JOIN `InheritanceTwo` AS `i2` ON `i1`.`Id` = `i2`.`InheritanceLeaf2Id` +) AS `s` ON `i`.`Id` = `s`.`InheritanceDerived2Id` +ORDER BY `i`.`Id`, `i0`.`Id`, `s`.`Id` +"""); + } + + public override async Task String_include_multiple_derived_navigations_complex(bool isAsync) + { + await base.String_include_multiple_derived_navigations_complex(isAsync); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`InheritanceLeaf2Id`, `i`.`Name`, `i0`.`Id`, `i0`.`Discriminator`, `i0`.`InheritanceBase2Id`, `i0`.`InheritanceBase2Id1`, `i0`.`Name`, `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id1`, `i1`.`InheritanceDerived2Id`, `i1`.`Name`, `i1`.`SameTypeReference_InheritanceDerived1Id`, `i1`.`SameTypeReference_InheritanceDerived2Id`, `i2`.`Id`, `i2`.`DifferentTypeReference_InheritanceDerived2Id`, `i2`.`InheritanceDerived2Id`, `i2`.`Name`, `s`.`Id`, `s`.`Discriminator`, `s`.`InheritanceBase2Id`, `s`.`InheritanceBase2Id1`, `s`.`Name`, `s`.`Id0`, `s`.`DifferentTypeReference_InheritanceDerived1Id`, `s`.`InheritanceDerived1Id`, `s`.`InheritanceDerived1Id1`, `s`.`InheritanceDerived2Id`, `s`.`Name0`, `s`.`SameTypeReference_InheritanceDerived1Id`, `s`.`SameTypeReference_InheritanceDerived2Id`, `s`.`Id1`, `s`.`DifferentTypeReference_InheritanceDerived1Id0`, `s`.`InheritanceDerived1Id0`, `s`.`InheritanceDerived1Id10`, `s`.`InheritanceDerived2Id0`, `s`.`Name1`, `s`.`SameTypeReference_InheritanceDerived1Id0`, `s`.`SameTypeReference_InheritanceDerived2Id0` +FROM (((`InheritanceTwo` AS `i` +LEFT JOIN `InheritanceOne` AS `i0` ON `i`.`Id` = `i0`.`InheritanceBase2Id`) +LEFT JOIN `InheritanceLeafOne` AS `i1` ON `i0`.`Id` = `i1`.`InheritanceDerived1Id`) +LEFT JOIN `InheritanceLeafTwo` AS `i2` ON `i0`.`Id` = `i2`.`InheritanceDerived2Id`) +LEFT JOIN ( + SELECT `i3`.`Id`, `i3`.`Discriminator`, `i3`.`InheritanceBase2Id`, `i3`.`InheritanceBase2Id1`, `i3`.`Name`, `i4`.`Id` AS `Id0`, `i4`.`DifferentTypeReference_InheritanceDerived1Id`, `i4`.`InheritanceDerived1Id`, `i4`.`InheritanceDerived1Id1`, `i4`.`InheritanceDerived2Id`, `i4`.`Name` AS `Name0`, `i4`.`SameTypeReference_InheritanceDerived1Id`, `i4`.`SameTypeReference_InheritanceDerived2Id`, `i5`.`Id` AS `Id1`, `i5`.`DifferentTypeReference_InheritanceDerived1Id` AS `DifferentTypeReference_InheritanceDerived1Id0`, `i5`.`InheritanceDerived1Id` AS `InheritanceDerived1Id0`, `i5`.`InheritanceDerived1Id1` AS `InheritanceDerived1Id10`, `i5`.`InheritanceDerived2Id` AS `InheritanceDerived2Id0`, `i5`.`Name` AS `Name1`, `i5`.`SameTypeReference_InheritanceDerived1Id` AS `SameTypeReference_InheritanceDerived1Id0`, `i5`.`SameTypeReference_InheritanceDerived2Id` AS `SameTypeReference_InheritanceDerived2Id0` + FROM (`InheritanceOne` AS `i3` + LEFT JOIN `InheritanceLeafOne` AS `i4` ON `i3`.`Id` = `i4`.`SameTypeReference_InheritanceDerived1Id`) + LEFT JOIN `InheritanceLeafOne` AS `i5` ON `i3`.`Id` = `i5`.`SameTypeReference_InheritanceDerived2Id` +) AS `s` ON `i`.`Id` = `s`.`InheritanceBase2Id1` +ORDER BY `i`.`Id`, `i0`.`Id`, `i1`.`Id`, `i2`.`Id`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Nav_rewrite_doesnt_apply_null_protection_for_function_arguments(bool isAsync) + { + await base.Nav_rewrite_doesnt_apply_null_protection_for_function_arguments(isAsync); + + AssertSql( + """ +SELECT IIF(`l0`.`Level1_Required_Id` > 7, `l0`.`Level1_Required_Id`, 7) +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id` +WHERE `l0`.`Id` IS NOT NULL +"""); + } + + public override async Task Accessing_optional_property_inside_result_operator_subquery(bool isAsync) + { + await base.Accessing_optional_property_inside_result_operator_subquery(isAsync); + + AssertSql( + """ +@names1='Name1' (Size = 255) +@names2='Name2' (Size = 255) + +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Name` NOT IN (@names1, @names2) OR `l0`.`Name` IS NULL +"""); + } + + public override async Task Include1(bool isAsync) + { + await base.Include1(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Include2(bool isAsync) + { + await base.Include2(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Include3(bool isAsync) + { + await base.Include3(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse2Id` + """); + } + + public override async Task Include4(bool isAsync) + { + await base.Include4(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` + """); + } + + public override async Task Include5(bool isAsync) + { + await base.Include5(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` + """); + } + + public override async Task Include6(bool isAsync) + { + await base.Include6(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` + """); + } + + public override async Task Include7(bool isAsync) + { + await base.Include7(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id` + """); + } + + public override async Task Include8(bool isAsync) + { + await base.Include8(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` +FROM `LevelTwo` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`Level1_Optional_Id` = `l0`.`Id` +WHERE `l0`.`Name` <> 'Fubar' OR `l0`.`Name` IS NULL +"""); + } + + public override async Task Include9(bool isAsync) + { + await base.Include9(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` +FROM `LevelTwo` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`Level1_Optional_Id` = `l0`.`Id` +WHERE `l0`.`Name` <> 'Fubar' OR `l0`.`Name` IS NULL +"""); + } + + public override async Task Include10(bool isAsync) + { + await base.Include10(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l4`.`Id`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id` + FROM ((((`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToOne_Optional_PK_Inverse2Id`) + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id`) + LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`OneToOne_Optional_PK_Inverse4Id` + """); + } + + public override async Task Include11(bool isAsync) + { + await base.Include11(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Id`, `l3`.`Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Optional_Self_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToMany_Required_Self_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l3`.`OneToOne_Optional_Self2Id`, `l4`.`Id`, `l4`.`Level2_Optional_Id`, `l4`.`Level2_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse3Id`, `l4`.`OneToMany_Optional_Self_Inverse3Id`, `l4`.`OneToMany_Required_Inverse3Id`, `l4`.`OneToMany_Required_Self_Inverse3Id`, `l4`.`OneToOne_Optional_PK_Inverse3Id`, `l4`.`OneToOne_Optional_Self3Id`, `l5`.`Id`, `l5`.`Level3_Optional_Id`, `l5`.`Level3_Required_Id`, `l5`.`Name`, `l5`.`OneToMany_Optional_Inverse4Id`, `l5`.`OneToMany_Optional_Self_Inverse4Id`, `l5`.`OneToMany_Required_Inverse4Id`, `l5`.`OneToMany_Required_Self_Inverse4Id`, `l5`.`OneToOne_Optional_PK_Inverse4Id`, `l5`.`OneToOne_Optional_Self4Id`, `l6`.`Id`, `l6`.`Level3_Optional_Id`, `l6`.`Level3_Required_Id`, `l6`.`Name`, `l6`.`OneToMany_Optional_Inverse4Id`, `l6`.`OneToMany_Optional_Self_Inverse4Id`, `l6`.`OneToMany_Required_Inverse4Id`, `l6`.`OneToMany_Required_Self_Inverse4Id`, `l6`.`OneToOne_Optional_PK_Inverse4Id`, `l6`.`OneToOne_Optional_Self4Id`, `l7`.`Id`, `l7`.`Level2_Optional_Id`, `l7`.`Level2_Required_Id`, `l7`.`Name`, `l7`.`OneToMany_Optional_Inverse3Id`, `l7`.`OneToMany_Optional_Self_Inverse3Id`, `l7`.`OneToMany_Required_Inverse3Id`, `l7`.`OneToMany_Required_Self_Inverse3Id`, `l7`.`OneToOne_Optional_PK_Inverse3Id`, `l7`.`OneToOne_Optional_Self3Id` + FROM (((((((`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) + LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelTwo` AS `l3` ON `l`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse2Id`) + LEFT JOIN `LevelThree` AS `l4` ON `l3`.`Id` = `l4`.`Level2_Optional_Id`) + LEFT JOIN `LevelFour` AS `l5` ON `l4`.`Id` = `l5`.`Level3_Optional_Id`) + LEFT JOIN `LevelFour` AS `l6` ON `l4`.`Id` = `l6`.`OneToOne_Optional_PK_Inverse4Id`) + LEFT JOIN `LevelThree` AS `l7` ON `l3`.`Id` = `l7`.`OneToOne_Optional_PK_Inverse3Id` + """); + } + + public override async Task Include12(bool isAsync) + { + await base.Include12(isAsync); + + AssertSql( + $""" + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` + """); + } + + public override async Task Include13(bool isAsync) + { + await base.Include13(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + """); + } + + public override async Task Include14(bool isAsync) + { + await base.Include14(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + FROM ((`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse2Id`) + LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Optional_Id` + """); + } + + public override async Task Include17(bool isAsync) + { + await base.Include17(isAsync); + + AssertSql(); + } + + public override async Task Include18_1(bool isAsync) + { + await base.Include18_1(isAsync); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM ( + SELECT DISTINCT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id` +"""); + } + + public override async Task Include18_1_1(bool isAsync) + { + await base.Include18_1_1(isAsync); + + AssertSql( + """ +@p='10' + +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM ( + SELECT TOP @p `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Name` AS `Name0` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + ORDER BY `l0`.`Name` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Name0` +"""); + } + + public override async Task Include18_2(bool isAsync) + { + await base.Include18_2(isAsync); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM ( + SELECT DISTINCT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +"""); + } + + public override async Task Include18_3(bool isAsync) + { + await base.Include18_3(isAsync); + + // issue #15783 + AssertSql( + """ +@p='10' + +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM ( + SELECT TOP @p `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Name` AS `Name0` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + ORDER BY `l0`.`Name` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Name0` +"""); + } + + public override async Task Include18_3_1(bool isAsync) + { + await base.Include18_3_1(isAsync); + + // issue #15783 + AssertSql( + """ +@p='10' + +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM ( + SELECT TOP @p `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Name` AS `Name0` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + ORDER BY `l0`.`Name` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Name0` +"""); + } + + public override async Task Include18_3_2(bool isAsync) + { + await base.Include18_3_2(isAsync); + + // issue #15783 + AssertSql( + """ +@p='10' + +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM ( + SELECT TOP @p `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Name` AS `Name0` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + ORDER BY `l0`.`Name` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Name0` +"""); + } + + public override async Task Include18_3_3(bool isAsync) + { + await base.Include18_3_3(isAsync); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +) AS `s` +LEFT JOIN `LevelThree` AS `l1` ON `s`.`Id` = `l1`.`Level2_Optional_Id` +"""); + } + + public override async Task Include18_4(bool isAsync) + { + await base.Include18_4(isAsync); + + // issue #15783 + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` +FROM (( + SELECT DISTINCT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Optional_Id` +"""); + } + + public override async Task Include18(bool isAsync) + { + await base.Include18(isAsync); + + AssertSql( + """ +@p='10' + +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM (( + SELECT TOP @p `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Id` +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Optional_Id` +ORDER BY `l1`.`Id` +"""); + } + + public override async Task Include19(bool isAsync) + { + await base.Include19(isAsync); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Level1_Optional_Id0`, `s`.`Level1_Required_Id0`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id0` +FROM ( + SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Date` AS `Date0`, `l1`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `l1`.`Level1_Required_Id` AS `Level1_Required_Id0`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `l1`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `l1`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `l1`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `l1`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `l1`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse2Id` +) AS `s` +"""); + } + + public override async Task Include_with_all_method_include_gets_ignored(bool isAsnc) + { + await base.Include_with_all_method_include_gets_ignored(isAsnc); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `LevelOne` AS `l` + WHERE `l`.`Name` = 'Foo') +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Join_with_navigations_in_the_result_selector1(bool isAsync) + { + await base.Join_with_navigations_in_the_result_selector1(isAsync); + + AssertSql( + $""" + SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM (`LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) + LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` + """); + } + + public override async Task Join_with_navigations_in_the_result_selector2(bool isAsync) + { + await base.Join_with_navigations_in_the_result_selector2(isAsync); + + AssertSql( + """ + SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` + FROM ((`LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) + LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` + ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` + """); + } + + public override async Task Member_pushdown_chain_3_levels_deep(bool isAsync) + { + await base.Member_pushdown_chain_3_levels_deep(isAsync); + + AssertSql( +""" +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +WHERE ( + SELECT TOP 1 ( + SELECT TOP 1 ( + SELECT TOP 1 `l2`.`Name` + FROM `LevelFour` AS `l2` + WHERE `l2`.`Level3_Required_Id` = `l1`.`Id` + ORDER BY `l2`.`Id`) + FROM `LevelThree` AS `l1` + WHERE `l1`.`Level2_Required_Id` = `l0`.`Id` + ORDER BY `l1`.`Id`) + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Level1_Optional_Id` = `l`.`Id` + ORDER BY `l0`.`Id`) <> 'Foo' OR ( + SELECT TOP 1 ( + SELECT TOP 1 ( + SELECT TOP 1 `l2`.`Name` + FROM `LevelFour` AS `l2` + WHERE `l2`.`Level3_Required_Id` = `l1`.`Id` + ORDER BY `l2`.`Id`) + FROM `LevelThree` AS `l1` + WHERE `l1`.`Level2_Required_Id` = `l0`.`Id` + ORDER BY `l1`.`Id`) + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Level1_Optional_Id` = `l`.`Id` + ORDER BY `l0`.`Id`) IS NULL +ORDER BY `l`.`Id` +"""); + } + + public override async Task Member_pushdown_chain_3_levels_deep_entity(bool isAsync) + { + await base.Member_pushdown_chain_3_levels_deep_entity(isAsync); + + AssertSql( + """ + SELECT `t0`.`c`, `t1`.`c`, `t3`.`Id`, `t3`.`Level3_Optional_Id`, `t3`.`Level3_Required_Id`, `t3`.`Name`, `t3`.`OneToMany_Optional_Inverse4Id`, `t3`.`OneToMany_Optional_Self_Inverse4Id`, `t3`.`OneToMany_Required_Inverse4Id`, `t3`.`OneToMany_Required_Self_Inverse4Id`, `t3`.`OneToOne_Optional_PK_Inverse4Id`, `t3`.`OneToOne_Optional_Self4Id` + FROM `LevelOne` AS `l` + LEFT JOIN ( + SELECT `t`.`c`, `t`.`Id`, `t`.`Level1_Optional_Id` + FROM ( + SELECT 1 AS `c`, `l0`.`Id`, `l0`.`Level1_Optional_Id`, ROW_NUMBER() OVER(PARTITION BY `l0`.`Level1_Optional_Id` ORDER BY `l0`.`Id`) AS `row` + FROM `LevelTwo` AS `l0` + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `l`.`Id` = `t0`.`Level1_Optional_Id` + LEFT JOIN ( + SELECT `t2`.`c`, `t2`.`Id`, `t2`.`Level2_Required_Id` + FROM ( + SELECT 1 AS `c`, `l1`.`Id`, `l1`.`Level2_Required_Id`, ROW_NUMBER() OVER(PARTITION BY `l1`.`Level2_Required_Id` ORDER BY `l1`.`Id`) AS `row` + FROM `LevelThree` AS `l1` + ) AS `t2` + WHERE `t2`.`row` <= 1 + ) AS `t1` ON `t0`.`Id` = `t1`.`Level2_Required_Id` + LEFT JOIN ( + SELECT `t4`.`Id`, `t4`.`Level3_Optional_Id`, `t4`.`Level3_Required_Id`, `t4`.`Name`, `t4`.`OneToMany_Optional_Inverse4Id`, `t4`.`OneToMany_Optional_Self_Inverse4Id`, `t4`.`OneToMany_Required_Inverse4Id`, `t4`.`OneToMany_Required_Self_Inverse4Id`, `t4`.`OneToOne_Optional_PK_Inverse4Id`, `t4`.`OneToOne_Optional_Self4Id` + FROM ( + SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, ROW_NUMBER() OVER(PARTITION BY `l2`.`Level3_Required_Id` ORDER BY `l2`.`Id`) AS `row` + FROM `LevelFour` AS `l2` + ) AS `t4` + WHERE `t4`.`row` <= 1 + ) AS `t3` ON `t1`.`Id` = `t3`.`Level3_Required_Id` + ORDER BY `l`.`Id` + """); + } + + public override async Task Member_pushdown_with_collection_navigation_in_the_middle(bool isAsync) + { + await base.Member_pushdown_with_collection_navigation_in_the_middle(isAsync); + + AssertSql( + """ + SELECT ( + SELECT TOP 1 ( + SELECT TOP 1 ( + SELECT TOP 1 `l2`.`Name` + FROM `LevelFour` AS `l2` + WHERE `l2`.`Level3_Required_Id` = `l1`.`Id` + ORDER BY `l2`.`Id`) + FROM `LevelThree` AS `l1` + WHERE `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Level1_Required_Id` = `l`.`Id` + ORDER BY `l0`.`Id`) + FROM `LevelOne` AS `l` + ORDER BY `l`.`Id` + """); + } + + public override async Task Member_pushdown_with_multiple_collections(bool isAsync) + { + await base.Member_pushdown_with_multiple_collections(isAsync); + + AssertSql( +""" +SELECT ( + SELECT TOP 1 `l0`.`Name` + FROM `LevelThree` AS `l0` + WHERE ( + SELECT TOP 1 `l1`.`Id` + FROM `LevelTwo` AS `l1` + WHERE `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` + ORDER BY `l1`.`Id`) IS NOT NULL AND (( + SELECT TOP 1 `l2`.`Id` + FROM `LevelTwo` AS `l2` + WHERE `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` + ORDER BY `l2`.`Id`) = `l0`.`OneToMany_Optional_Inverse3Id` OR (( + SELECT TOP 1 `l2`.`Id` + FROM `LevelTwo` AS `l2` + WHERE `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` + ORDER BY `l2`.`Id`) IS NULL AND `l0`.`OneToMany_Optional_Inverse3Id` IS NULL)) + ORDER BY `l0`.`Id`) +FROM `LevelOne` AS `l` +"""); + } + + public override async Task Null_check_removal_applied_recursively(bool isAsync) + { + await base.Null_check_removal_applied_recursively(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToOne_Optional_PK_Inverse4Id` +WHERE `l2`.`Name` = 'L4 01' +"""); + } + + public override async Task Null_check_different_structure_does_not_remove_null_checks(bool isAsync) + { + await base.Null_check_different_structure_does_not_remove_null_checks(isAsync); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToOne_Optional_PK_Inverse4Id` +WHERE IIF(`l0`.`Id` IS NULL, NULL, IIF(`l1`.`Id` IS NULL, NULL, `l2`.`Name`)) = 'L4 01' +"""); + } + + public override async Task Union_over_entities_with_different_nullability(bool isAsync) + { + await base.Union_over_entities_with_different_nullability(isAsync); + + AssertSql( +""" +SELECT `l`.`Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +UNION ALL +SELECT `l2`.`Id` +FROM `LevelTwo` AS `l1` +LEFT JOIN `LevelOne` AS `l2` ON `l1`.`Level1_Optional_Id` = `l2`.`Id` +WHERE `l2`.`Id` IS NULL +"""); + } + + public override async Task Including_reference_navigation_and_projecting_collection_navigation_2(bool isAsync) + { + await base.Including_reference_navigation_and_projecting_collection_navigation_2(isAsync); + + AssertSql( + $""" + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `t0`.`Id`, `t0`.`Date`, `t0`.`Level1_Optional_Id`, `t0`.`Level1_Required_Id`, `t0`.`Name`, `t0`.`OneToMany_Optional_Inverse2Id`, `t0`.`OneToMany_Optional_Self_Inverse2Id`, `t0`.`OneToMany_Required_Inverse2Id`, `t0`.`OneToMany_Required_Self_Inverse2Id`, `t0`.`OneToOne_Optional_PK_Inverse2Id`, `t0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` + LEFT JOIN ( + SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id` + FROM ( + SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, ROW_NUMBER() OVER(PARTITION BY `l1`.`OneToMany_Required_Inverse2Id` ORDER BY `l1`.`Id` DESC) AS `row` + FROM `LevelTwo` AS `l1` + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `l`.`Id` = `t0`.`OneToMany_Required_Inverse2Id` + LEFT JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Required_Inverse2Id` + ORDER BY `l`.`Id`, `l2`.`Id` + """); + } + + public override async Task OrderBy_collection_count_ThenBy_reference_navigation(bool async) + { + await base.OrderBy_collection_count_ThenBy_reference_navigation(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `s`.`c`, `s`.`Name0` +FROM ( + SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, ( + SELECT COUNT(*) + FROM `LevelThree` AS `l2` + WHERE `l0`.`Id` IS NOT NULL AND `l0`.`Id` = `l2`.`OneToMany_Required_Inverse3Id`) AS `c`, `l1`.`Name` AS `Name0` + FROM (`LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +) AS `s` +ORDER BY `s`.`c`, `s`.`Name0` +"""); + } + + public override async Task Null_conditional_is_not_applied_explicitly_for_optional_navigation(bool async) + { + await base.Null_conditional_is_not_applied_explicitly_for_optional_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE `l0`.`Id` IS NOT NULL AND `l0`.`Name` = 'L2 01' +"""); + } + + public override async Task Sum_with_selector_cast_using_as(bool async) + { + await base.Sum_with_selector_cast_using_as(async); + + AssertSql( + """ +SELECT IIF(SUM(`l`.`Id`) IS NULL, 0, SUM(`l`.`Id`)) +FROM `LevelOne` AS `l` +"""); + } + + public override async Task Sum_with_filter_with_include_selector_cast_using_as(bool async) + { + await base.Sum_with_filter_with_include_selector_cast_using_as(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +WHERE `l`.`Id` > ( + SELECT IIF(SUM(`l0`.`Id`) IS NULL, 0, SUM(`l0`.`Id`)) + FROM `LevelTwo` AS `l0` + WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +"""); + } + + public override async Task Select_with_joined_where_clause_cast_using_as(bool async) + { + await base.Select_with_joined_where_clause_cast_using_as(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +WHERE (`l`.`Id` + 7) = `l0`.`Id` +"""); + } + + public override async Task SelectMany_with_outside_reference_to_joined_table_correctly_translated_to_apply(bool async) + { + await base.SelectMany_with_outside_reference_to_joined_table_correctly_translated_to_apply(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM (((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id`) +LEFT JOIN `LevelOne` AS `l3` ON `l0`.`Id` >= `l3`.`Id` AND (`l2`.`Name` = `l3`.`Name` OR (`l2`.`Name` IS NULL AND `l3`.`Name` IS NULL)) +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`Level2_Required_Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL AND `l2`.`Level3_Required_Id` IS NOT NULL +"""); + } + + public override async Task Nested_SelectMany_correlated_with_join_table_correctly_translated_to_apply(bool async) + { + // DefaultIfEmpty on child collection. Issue #19095. + await Assert.ThrowsAsync( + async () => await base.Nested_SelectMany_correlated_with_join_table_correctly_translated_to_apply(async)); + + AssertSql( + """ +SELECT [t0].[l1Name], [t0].[l2Name], [t0].[l3Name] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [t].[l1Name], [t].[l2Name], [t].[l3Name] + FROM [LevelTwo] AS [l0] + LEFT JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[Id] + CROSS APPLY ( + SELECT [l].[Name] AS [l1Name], [l1].[Name] AS [l2Name], [l3].[Name] AS [l3Name] + FROM [LevelFour] AS [l2] + LEFT JOIN [LevelThree] AS [l3] ON [l2].[OneToOne_Optional_PK_Inverse4Id] = [l3].[Id] + WHERE [l1].[Id] IS NOT NULL AND [l1].[Id] = [l2].[OneToMany_Optional_Inverse4Id] + ) AS [t] + WHERE [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] +) AS [t0] +"""); + } + + public override async Task Contains_over_optional_navigation_with_null_constant(bool async) + { + await base.Contains_over_optional_navigation_with_null_constant(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE `l0`.`Id` IS NULL) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Contains_over_optional_navigation_with_null_parameter(bool async) + { + await base.Contains_over_optional_navigation_with_null_parameter(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `LevelOne` AS `l` + LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` + WHERE `l0`.`Id` IS NULL) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Contains_over_optional_navigation_with_null_column(bool async) + { + await base.Contains_over_optional_navigation_with_null_column(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l0`.`Name` AS `OptionalName`, EXISTS ( + SELECT 1 + FROM `LevelOne` AS `l1` + LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Optional_Id` + WHERE `l2`.`Name` = `l0`.`Name` OR (`l2`.`Name` IS NULL AND `l0`.`Name` IS NULL)) AS `Contains` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +"""); + } + + public override async Task Contains_over_optional_navigation_with_null_entity_reference(bool async) + { + await base.Contains_over_optional_navigation_with_null_entity_reference(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l0`.`Name` AS `OptionalName`, EXISTS ( + SELECT 1 + FROM `LevelOne` AS `l2` + LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`Level1_Optional_Id` + WHERE `l3`.`Id` = `l1`.`Id` OR (`l3`.`Id` IS NULL AND `l1`.`Id` IS NULL)) AS `Contains` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse2Id` +"""); + } + + public override async Task Element_selector_with_coalesce_repeated_in_aggregate(bool async) + { + await base.Element_selector_with_coalesce_repeated_in_aggregate(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Id` +GROUP BY `l1`.`Name` +HAVING ( + SELECT MIN(IIF(`l5`.`Id` IS NULL, 0, `l5`.`Id`) + IIF(`l5`.`Id` IS NULL, 0, `l5`.`Id`)) + FROM ((`LevelOne` AS `l2` + LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`Id`) + LEFT JOIN `LevelThree` AS `l4` ON `l3`.`Id` = `l4`.`Id`) + LEFT JOIN `LevelTwo` AS `l5` ON `l2`.`Id` = `l5`.`Id` + WHERE `l1`.`Name` = `l4`.`Name` OR (`l1`.`Name` IS NULL AND `l4`.`Name` IS NULL)) > 0 +"""); + } + + public override async Task Nested_object_constructed_from_group_key_properties(bool async) + { + await base.Nested_object_constructed_from_group_key_properties(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l`.`Date`, `l0`.`Id`, `l1`.`Name`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, IIF(SUM(IIF(LEN(`l`.`Name`) IS NULL, NULL, CLNG(LEN(`l`.`Name`)))) IS NULL, 0, SUM(IIF(LEN(`l`.`Name`) IS NULL, NULL, CLNG(LEN(`l`.`Name`))))) AS `Aggregate` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Required_Id` +WHERE `l0`.`Id` IS NOT NULL +GROUP BY `l`.`Id`, `l`.`Date`, `l`.`Name`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l1`.`Name` +"""); + } + + public override async Task GroupBy_aggregate_where_required_relationship(bool async) + { + await base.GroupBy_aggregate_where_required_relationship(async); + + AssertSql( + """ +SELECT `l0`.`Id` AS `Key`, MAX(`l`.`Id`) AS `Max` +FROM `LevelTwo` AS `l` +INNER JOIN `LevelOne` AS `l0` ON `l`.`OneToMany_Required_Inverse2Id` = `l0`.`Id` +GROUP BY `l0`.`Id` +HAVING MAX(`l`.`Id`) <> 2 OR MAX(`l`.`Id`) IS NULL +"""); + } + + public override async Task GroupBy_aggregate_where_required_relationship_2(bool async) + { + await base.GroupBy_aggregate_where_required_relationship_2(async); + + AssertSql( + """ +SELECT `l0`.`Id` AS `Key`, MAX(`l`.`Id`) AS `Max` +FROM `LevelTwo` AS `l` +INNER JOIN `LevelOne` AS `l0` ON `l`.`OneToMany_Required_Inverse2Id` = `l0`.`Id` +GROUP BY `l0`.`Id` +HAVING MAX(`l`.`Id`) < 2 OR MAX(`l`.`Id`) > 2 +"""); + } + + public override async Task Member_over_null_check_ternary_and_nested_dto_type(bool async) + { + await base.Member_over_null_check_ternary_and_nested_dto_type(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l0`.`Id` IS NULL, `l0`.`Id`, `l0`.`Name` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` +ORDER BY `l0`.`Name`, `l`.`Id` +"""); + } + + public override async Task Member_over_null_check_ternary_and_nested_anonymous_type(bool async) + { + await base.Member_over_null_check_ternary_and_nested_anonymous_type(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l0`.`Id` IS NULL, `l0`.`Id`, `l0`.`Name`, `l1`.`Id` IS NULL, `l1`.`Id`, `l1`.`Name` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` +WHERE IIF(`l0`.`Id` IS NULL, NULL, `l1`.`Name`) <> 'L' OR IIF(`l0`.`Id` IS NULL, NULL, `l1`.`Name`) IS NULL +"""); + } + + public override async Task Let_let_contains_from_outer_let(bool async) + { + await base.Let_let_contains_from_outer_let(async); + + AssertSql( + """ +SELECT [l].[Id], [l].[Date], [l].[Name], [l].[OneToMany_Optional_Self_Inverse1Id], [l].[OneToMany_Required_Self_Inverse1Id], [l].[OneToOne_Optional_Self1Id], [t].[Id], [l2].[Id], [l2].[Date], [l2].[Level1_Optional_Id], [l2].[Level1_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_Inverse2Id], [l2].[OneToMany_Optional_Self_Inverse2Id], [l2].[OneToMany_Required_Inverse2Id], [l2].[OneToMany_Required_Self_Inverse2Id], [l2].[OneToOne_Optional_PK_Inverse2Id], [l2].[OneToOne_Optional_Self2Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [l0].[Id], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM [LevelThree] AS [l0] + WHERE [l0].[Level2_Required_Id] IN ( + SELECT [l1].[Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Required_Inverse2Id] + ) +) AS [t] +LEFT JOIN [LevelTwo] AS [l2] ON [l].[Id] = [l2].[OneToMany_Required_Inverse2Id] +ORDER BY [l].[Id], [t].[Id] +"""); + } + + public override async Task Multiple_conditionals_in_projection(bool async) + { + await base.Multiple_conditionals_in_projection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Name`, `l1`.`Id` IS NULL +FROM (`LevelTwo` AS `l` +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`Level2_Optional_Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l`.`Level1_Optional_Id` = `l1`.`Id` +"""); + } + + public override async Task Composite_key_join_on_groupby_aggregate_projecting_only_grouping_key(bool async) + { + await base.Composite_key_join_on_groupby_aggregate_projecting_only_grouping_key(async); + + AssertSql( + """ +SELECT [t0].[Key] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [t].[Key], COALESCE(SUM([t].[Id]), 0) AS [Sum] + FROM ( + SELECT [l0].[Id], [l0].[Id] % 3 AS [Key] + FROM [LevelTwo] AS [l0] + ) AS [t] + GROUP BY [t].[Key] +) AS [t0] ON [l].[Id] = [t0].[Key] AND CAST(1 AS bit) = CASE + WHEN [t0].[Sum] > 10 THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END +"""); + } + + public override async Task Composite_key_join_on_groupby_aggregate_projecting_only_grouping_key2(bool async) + { + await base.Composite_key_join_on_groupby_aggregate_projecting_only_grouping_key2(async); + + AssertSql( + """ +SELECT `l2`.`Key` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l1`.`Key`, IIF(SUM(`l1`.`Id`) IS NULL, 0, SUM(`l1`.`Id`)) AS `Sum` + FROM ( + SELECT `l0`.`Id`, `l0`.`Id` MOD 3 AS `Key` + FROM `LevelTwo` AS `l0` + ) AS `l1` + GROUP BY `l1`.`Key` +) AS `l2` ON `l`.`Id` = `l2`.`Key` AND IIF(`l2`.`Sum` <= 10, FALSE, TRUE) +"""); + } + + public override async Task Multiple_joins_groupby_predicate(bool async) + { + await base.Multiple_joins_groupby_predicate(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, IIF(`l0`.`Id` IS NULL, 'Foo', 'Bar') AS `Foo` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l1`.`Name` AS `Key`, COUNT(*) AS `Count` + FROM `LevelThree` AS `l1` + GROUP BY `l1`.`Name` +) AS `l2` ON `l`.`Name` = `l2`.`Key` +WHERE `l0`.`Name` IS NOT NULL OR `l2`.`Count` > 0 +"""); + } + + public override async Task Collection_FirstOrDefault_property_accesses_in_projection(bool async) + { + await base.Collection_FirstOrDefault_property_accesses_in_projection(async); + + AssertSql( + """ +SELECT `l`.`Id`, ( + SELECT TOP 1 `l0`.`Name` + FROM `LevelTwo` AS `l0` + WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` AND `l0`.`Name` = 'L2 02') AS `Pushdown` +FROM `LevelOne` AS `l` +WHERE `l`.`Id` < 3 +"""); + } + + public override async Task Collection_FirstOrDefault_entity_reference_accesses_in_projection(bool async) + { + await base.Collection_FirstOrDefault_entity_reference_accesses_in_projection(async); + + AssertSql( + """ +SELECT [l].[Id], [t0].[Id], [t0].[Level2_Optional_Id], [t0].[Level2_Required_Id], [t0].[Name], [t0].[OneToMany_Optional_Inverse3Id], [t0].[OneToMany_Optional_Self_Inverse3Id], [t0].[OneToMany_Required_Inverse3Id], [t0].[OneToMany_Required_Self_Inverse3Id], [t0].[OneToOne_Optional_PK_Inverse3Id], [t0].[OneToOne_Optional_Self3Id] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id], [t].[OneToMany_Optional_Inverse2Id] + FROM ( + SELECT [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], [l0].[OneToMany_Optional_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id], [l1].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + LEFT JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[Level2_Optional_Id] + WHERE [l0].[Name] = N'L2 02' + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +WHERE [l].[Id] < 3 +"""); + } + + public override async Task Collection_FirstOrDefault_entity_collection_accesses_in_projection(bool async) + { + await base.Collection_FirstOrDefault_entity_collection_accesses_in_projection(async); + + AssertSql( + """ +SELECT [l].[Id], [t0].[Id], [l1].[Id], [l1].[Level2_Optional_Id], [l1].[Level2_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_Inverse3Id], [l1].[OneToMany_Optional_Self_Inverse3Id], [l1].[OneToMany_Required_Inverse3Id], [l1].[OneToMany_Required_Self_Inverse3Id], [l1].[OneToOne_Optional_PK_Inverse3Id], [l1].[OneToOne_Optional_Self3Id], [t0].[c] +FROM [LevelOne] AS [l] +LEFT JOIN ( + SELECT [t].[c], [t].[Id], [t].[OneToMany_Optional_Inverse2Id] + FROM ( + SELECT 1 AS [c], [l0].[Id], [l0].[OneToMany_Optional_Inverse2Id], ROW_NUMBER() OVER(PARTITION BY [l0].[OneToMany_Optional_Inverse2Id] ORDER BY [l0].[Id]) AS [row] + FROM [LevelTwo] AS [l0] + WHERE [l0].[Name] = N'L2 02' + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [l].[Id] = [t0].[OneToMany_Optional_Inverse2Id] +LEFT JOIN [LevelThree] AS [l1] ON [t0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] +WHERE [l].[Id] < 2 +ORDER BY [l].[Id], [t0].[Id] +"""); + } + + public override async Task Multiple_collection_FirstOrDefault_followed_by_member_access_in_projection(bool async) + { + await base.Multiple_collection_FirstOrDefault_followed_by_member_access_in_projection(async); + + AssertSql( + """ +SELECT `l`.`Id`, ( + SELECT TOP 1 `l0`.`Name` + FROM `LevelThree` AS `l0` + WHERE ( + SELECT TOP 1 `l1`.`Id` + FROM `LevelTwo` AS `l1` + WHERE `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` AND `l1`.`Name` = 'L2 02') IS NOT NULL AND (( + SELECT TOP 1 `l2`.`Id` + FROM `LevelTwo` AS `l2` + WHERE `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` AND `l2`.`Name` = 'L2 02') = `l0`.`OneToMany_Optional_Inverse3Id` OR (( + SELECT TOP 1 `l2`.`Id` + FROM `LevelTwo` AS `l2` + WHERE `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` AND `l2`.`Name` = 'L2 02') IS NULL AND `l0`.`OneToMany_Optional_Inverse3Id` IS NULL)) + ORDER BY `l0`.`Id`) AS `Pushdown` +FROM `LevelOne` AS `l` +WHERE `l`.`Id` < 2 +"""); + } + + public override async Task Projecting_columns_with_same_name_from_different_entities_making_sure_aliasing_works_after_Distinct( + bool async) + { + await base.Projecting_columns_with_same_name_from_different_entities_making_sure_aliasing_works_after_Distinct(async); + + AssertSql( + """ +@p='10' + +SELECT `s`.`Id1` AS `Foo`, `s`.`Id2` AS `Bar`, `s`.`Id3` AS `Baz` +FROM ( + SELECT DISTINCT TOP @p `l`.`Id` AS `Id1`, `l0`.`Id` AS `Id2`, `l1`.`Id` AS `Id3`, `l`.`Name` AS `Name1`, `l0`.`Name` AS `Name2` + FROM (`LevelOne` AS `l` + INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` + WHERE `l0`.`Id` IS NOT NULL AND `l1`.`Level2_Optional_Id` IS NOT NULL +) AS `s` +"""); + } + + public override async Task Complex_query_with_let_collection_SelectMany(bool async) + { + await base.Complex_query_with_let_collection_SelectMany(async); + + AssertSql(); + } + + public override async Task SelectMany_without_collection_selector_returning_queryable(bool async) + { + await base.SelectMany_without_collection_selector_returning_queryable(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l`, +( + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` < 10 +) AS `l1` +"""); + } + + public override async Task Select_projecting_queryable_followed_by_SelectMany(bool async) + { + await base.Select_projecting_queryable_followed_by_SelectMany(async); + + AssertSql(); + } + + public override async Task Select_projecting_queryable_followed_by_Join(bool async) + { + await base.Select_projecting_queryable_followed_by_Join(async); + + AssertSql(); + } + + public override async Task Select_projecting_queryable_in_anonymous_projection_followed_by_Join(bool async) + { + await base.Select_projecting_queryable_in_anonymous_projection_followed_by_Join(async); + + AssertSql(); + } + + public override async Task Complex_query_with_optional_navigations_and_client_side_evaluation(bool async) + { + await base.Complex_query_with_optional_navigations_and_client_side_evaluation(async); + + AssertSql(); + } + + public override async Task Join_with_result_selector_returning_queryable_throws_validation_error(bool async) + { + // Expression cannot be used for return type. Issue #23302. + await Assert.ThrowsAsync( + () => base.Join_with_result_selector_returning_queryable_throws_validation_error(async)); + + AssertSql(); + } + + public override async Task Prune_does_not_throw_null_ref(bool async) + { + await base.Prune_does_not_throw_null_ref(async); + + AssertSql( + """ +SELECT [t0].[Id], [t0].[Date], [t0].[Name], [t0].[OneToMany_Optional_Self_Inverse1Id], [t0].[OneToMany_Required_Self_Inverse1Id], [t0].[OneToOne_Optional_Self1Id] +FROM ( + SELECT NULL AS [empty] +) AS [e] +LEFT JOIN ( + SELECT [l].[Level1_Required_Id] + FROM [LevelTwo] AS [l] + WHERE [l].[Id] < 5 +) AS [t] ON 1 = 1 +CROSS APPLY ( + SELECT [l0].[Id], [l0].[Date], [l0].[Name], [l0].[OneToMany_Optional_Self_Inverse1Id], [l0].[OneToMany_Required_Self_Inverse1Id], [l0].[OneToOne_Optional_Self1Id] + FROM [LevelOne] AS [l0] + WHERE [l0].[Id] <> COALESCE([t].[Level1_Required_Id], 0) +) AS [t0] +"""); + } + + public override async Task Entries_for_detached_entities_are_removed(bool async) + { + await base.Entries_for_detached_entities_are_removed(async); + + AssertSql( + """ +SELECT TOP 1 `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id` +FROM `LevelTwo` AS `l` +ORDER BY `l`.`Id` +"""); + } + + public override async Task SelectMany_subquery_with_custom_projection(bool async) + { + await base.SelectMany_subquery_with_custom_projection(async); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `l0`.`Name` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id` +"""); + } + + public override async Task Include_multiple_collections_on_same_level(bool async) + { + await base.Include_multiple_collections_on_same_level(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Required_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + + public override async Task Simple_level1_include(bool async) + { + await base.Simple_level1_include(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Id` +"""); + } + + public override async Task Simple_level1(bool async) + { + await base.Simple_level1(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` +FROM `LevelOne` AS `l` +"""); + } + + public override async Task Simple_level1_level2_include(bool async) + { + await base.Simple_level1_level2_include(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Id` +"""); + } + + public override async Task Simple_level1_level2_GroupBy_Count(bool async) + { + await base.Simple_level1_level2_GroupBy_Count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Id` +GROUP BY `l1`.`Name` +"""); + } + + public override async Task Simple_level1_level2_GroupBy_Having_Count(bool async) + { + await base.Simple_level1_level2_GroupBy_Having_Count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM (`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Id` +GROUP BY `l1`.`Name` +HAVING ( + SELECT MIN(IIF(`l5`.`Id` IS NULL, 0, `l5`.`Id`)) + FROM ((`LevelOne` AS `l2` + LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`Id`) + LEFT JOIN `LevelThree` AS `l4` ON `l3`.`Id` = `l4`.`Id`) + LEFT JOIN `LevelTwo` AS `l5` ON `l2`.`Id` = `l5`.`Id` + WHERE `l1`.`Name` = `l4`.`Name` OR (`l1`.`Name` IS NULL AND `l4`.`Name` IS NULL)) > 0 +"""); + } + + public override async Task Simple_level1_level2_level3_include(bool async) + { + await base.Simple_level1_level2_level3_include(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` +FROM ((`LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Id` +"""); + } + + public override async Task Project_shadow_properties6(bool async) + { + await base.Project_shadow_properties6(async); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1` +FROM `InheritanceOne` AS `i` +WHERE `i`.`Discriminator` = 'InheritanceDerived1' +"""); + } + + public override async Task Project_shadow_properties3(bool async) + { + await base.Project_shadow_properties3(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`OneToOne_Optional_PK_Inverse3Id`, `l`.`OneToMany_Required_Inverse3Id`, `l`.`OneToMany_Optional_Inverse3Id`, `l`.`OneToOne_Optional_Self3Id`, `l`.`OneToMany_Required_Self_Inverse3Id`, `l`.`OneToMany_Optional_Self_Inverse3Id` +FROM `LevelThree` AS `l` +"""); + } + + public override async Task Project_shadow_properties9(bool async) + { + await base.Project_shadow_properties9(async); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`DifferentTypeReference_InheritanceDerived1Id`, `i`.`InheritanceDerived1Id`, `i`.`InheritanceDerived1Id1`, `i`.`InheritanceDerived2Id`, `i`.`SameTypeReference_InheritanceDerived1Id`, `i`.`SameTypeReference_InheritanceDerived2Id` +FROM `InheritanceLeafOne` AS `i` +"""); + } + + public override async Task Project_shadow_properties4(bool async) + { + await base.Project_shadow_properties4(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`OneToOne_Optional_PK_Inverse4Id`, `l`.`OneToMany_Required_Inverse4Id`, `l`.`OneToMany_Optional_Inverse4Id`, `l`.`OneToOne_Optional_Self4Id`, `l`.`OneToMany_Required_Self_Inverse4Id`, `l`.`OneToMany_Optional_Self_Inverse4Id` +FROM `LevelFour` AS `l` +"""); + } + + public override async Task Project_shadow_properties10(bool async) + { + await base.Project_shadow_properties10(async); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`DifferentTypeReference_InheritanceDerived2Id`, `i`.`InheritanceDerived2Id` +FROM `InheritanceLeafTwo` AS `i` +"""); + } + + public override async Task Project_shadow_properties5(bool async) + { + await base.Project_shadow_properties5(async); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1` +FROM `InheritanceOne` AS `i` +"""); + } + + public override async Task Project_shadow_properties7(bool async) + { + await base.Project_shadow_properties7(async); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1` +FROM `InheritanceOne` AS `i` +WHERE `i`.`Discriminator` = 'InheritanceDerived2' +"""); + } + + public override async Task Project_shadow_properties8(bool async) + { + await base.Project_shadow_properties8(async); + + AssertSql( + """ +SELECT `i`.`Id`, `i`.`InheritanceLeaf2Id` +FROM `InheritanceTwo` AS `i` +"""); + } + + public override async Task Project_shadow_properties1(bool async) + { + await base.Project_shadow_properties1(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`OneToOne_Optional_Self1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToMany_Optional_Self_Inverse1Id` +FROM `LevelOne` AS `l` +"""); + } + + public override async Task Project_shadow_properties2(bool async) + { + await base.Project_shadow_properties2(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id` +FROM `LevelTwo` AS `l` +"""); + } + + public override async Task Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(bool async) + { + await base.Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(async); + + AssertSql(); + } + + public override async Task SelectMany_with_EF_Property_Include1(bool async) + { + await base.SelectMany_with_EF_Property_Include1(async); + + AssertSql( + """ +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` +FROM (`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` +"""); + } + + public override async Task Multiple_SelectMany_with_EF_Property_Include(bool async) + { + await base.Multiple_SelectMany_with_EF_Property_Include(async); + + AssertSql( + """ +SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` +FROM ((`LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` +WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +"""); + } + + public override async Task Multiple_required_navigation_with_EF_Property_Include(bool async) + { + await base.Multiple_required_navigation_with_EF_Property_Include(async); + + AssertSql(); + } + + public override async Task GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure(bool async) + { + await base.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure(async); + + AssertSql( + """ +@prm='10' + +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2` +FROM `LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` <> @prm +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` +"""); + } + + public override async Task GroupJoin_SelectMany_with_predicate_using_closure(bool async) + { + await base.GroupJoin_SelectMany_with_predicate_using_closure(async); + + AssertSql( + """ +@prm='10' + +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2` +FROM `LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` <> @prm +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` +"""); + } + + public override async Task GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested(bool async) + { + await base.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested(async); + + AssertSql( + """ +@prm1='10' +@prm2='20' + +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2`, `l3`.`Id` AS `Id3` +FROM (`LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` <> @prm1 +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id` + FROM `LevelThree` AS `l2` + WHERE `l2`.`Id` <> @prm2 +) AS `l3` ON `l1`.`Id` = `l3`.`Level2_Optional_Id` +"""); + } + + public override async Task GroupJoin_SelectMany_with_predicate_using_closure_nested(bool async) + { + await base.GroupJoin_SelectMany_with_predicate_using_closure_nested(async); + + AssertSql( + """ +@prm1='10' +@prm2='20' + +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2`, `l3`.`Id` AS `Id3` +FROM (`LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` <> @prm1 +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id` + FROM `LevelThree` AS `l2` + WHERE `l2`.`Id` <> @prm2 +) AS `l3` ON `l1`.`Id` = `l3`.`Level2_Optional_Id` +WHERE `l1`.`Id` IS NOT NULL AND `l3`.`Level2_Optional_Id` IS NOT NULL +"""); + } + + public override async Task GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested_same_param(bool async) + { + await base.GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_using_closure_nested_same_param(async); + + AssertSql( + """ +@prm='10' + +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2`, `l3`.`Id` AS `Id3` +FROM (`LevelOne` AS `l` +LEFT JOIN ( + SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` <> @prm +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id` + FROM `LevelThree` AS `l2` + WHERE `l2`.`Id` <> @prm +) AS `l3` ON `l1`.`Id` = `l3`.`Level2_Optional_Id` +"""); + } + + public override async Task GroupJoin_SelectMany_with_predicate_using_closure_nested_same_param(bool async) + { + await base.GroupJoin_SelectMany_with_predicate_using_closure_nested_same_param(async); + + AssertSql( + """ +@prm='10' + +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2`, `l3`.`Id` AS `Id3` +FROM (`LevelOne` AS `l` +INNER JOIN ( + SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` + FROM `LevelTwo` AS `l0` + WHERE `l0`.`Id` <> @prm +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) +LEFT JOIN ( + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id` + FROM `LevelThree` AS `l2` + WHERE `l2`.`Id` <> @prm +) AS `l3` ON `l1`.`Id` = `l3`.`Level2_Optional_Id` +WHERE `l1`.`Id` IS NOT NULL AND `l3`.`Level2_Optional_Id` IS NOT NULL +"""); + } + + public override async Task Multiple_optional_navs_should_not_deadlock(bool async) + { + await base.Multiple_optional_navs_should_not_deadlock(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM (`LevelTwo` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToMany_Optional_Inverse2Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l`.`Level1_Optional_Id` = `l1`.`Id` +WHERE (`l0`.`Id` IS NOT NULL AND (`l0`.`Name` LIKE '%L1 01%')) OR (`l1`.`Id` IS NOT NULL AND (`l1`.`Name` LIKE '%L1 01%')) +"""); + } + + public override async Task Null_check_removal_applied_recursively_complex(bool async) + { + await base.Null_check_removal_applied_recursively_complex(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Level2_Optional_Id`, `l`.`Level2_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse3Id`, `l`.`OneToMany_Optional_Self_Inverse3Id`, `l`.`OneToMany_Required_Inverse3Id`, `l`.`OneToMany_Required_Self_Inverse3Id`, `l`.`OneToOne_Optional_PK_Inverse3Id`, `l`.`OneToOne_Optional_Self3Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` +FROM ((`LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`OneToMany_Required_Inverse3Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`OneToMany_Required_Inverse2Id` = `l1`.`Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +WHERE (`l1`.`Name` = 'L1 01') AND (`l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL) +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Correlated_projection_with_first(bool async) + { + await base.Correlated_projection_with_first(async); + + AssertSql( + """ +SELECT [l].[Id], [s].[Id], [s].[Id0] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [l3].[Id], [l0].[Id] AS [Id0] + FROM [LevelThree] AS [l0] + LEFT JOIN [LevelFour] AS [l3] ON [l0].[Id] = [l3].[Level3_Required_Id] + WHERE ( + SELECT TOP(1) [l1].[Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Id]) IS NOT NULL AND (( + SELECT TOP(1) [l2].[Id] + FROM [LevelTwo] AS [l2] + WHERE [l].[Id] = [l2].[OneToMany_Optional_Inverse2Id] + ORDER BY [l2].[Id]) = [l0].[OneToMany_Optional_Inverse3Id] OR (( + SELECT TOP(1) [l2].[Id] + FROM [LevelTwo] AS [l2] + WHERE [l].[Id] = [l2].[OneToMany_Optional_Inverse2Id] + ORDER BY [l2].[Id]) IS NULL AND [l0].[OneToMany_Optional_Inverse3Id] IS NULL)) +) AS [s] +ORDER BY [l].[Id], [s].[Id0] +"""); + } + + public override async Task Max_in_multi_level_nested_subquery(bool async) + { + await base.Max_in_multi_level_nested_subquery(async); + + AssertSql( + """ +@p='2' + +SELECT `l4`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Result` +FROM ( + SELECT TOP @p `l`.`Id` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Id` +) AS `l4` +LEFT JOIN ( + SELECT `l0`.`Id`, `l1`.`Id` AS `Id0`, `l2`.`Id` AS `Id1`, IIF(( + SELECT MAX(`l3`.`Id`) + FROM `LevelFour` AS `l3` + WHERE `l1`.`Id` IS NOT NULL AND `l1`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id`) IS NULL, 0, ( + SELECT MAX(`l3`.`Id`) + FROM `LevelFour` AS `l3` + WHERE `l1`.`Id` IS NOT NULL AND `l1`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id`)) > 1 AS `Result`, `l0`.`OneToMany_Optional_Inverse2Id` + FROM (`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` +) AS `s` ON `l4`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l4`.`Id`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Multiple_select_many_in_projection(bool async) + { + await base.Multiple_select_many_in_projection(async); + + AssertSql( + """ +SELECT [l].[Id], [s0].[Id], [s0].[RefId], [s0].[Id0], ( + SELECT COUNT(*) + FROM [LevelTwo] AS [l3] + INNER JOIN [LevelThree] AS [l4] ON [l3].[Id] = [l4].[OneToMany_Optional_Inverse3Id] + WHERE [l].[Id] = [l3].[OneToMany_Optional_Inverse2Id] AND ([l4].[Name] <> N'' OR [l4].[Name] IS NULL)) +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [s].[Id0] AS [Id], [l2].[Id] AS [RefId], [s].[Id] AS [Id0] + FROM ( + SELECT TOP(12) [l0].[Id], [l1].[Id] AS [Id0] + FROM [LevelTwo] AS [l0] + INNER JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] + WHERE [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Id] + ) AS [s] + LEFT JOIN [LevelFour] AS [l2] ON [s].[Id0] = [l2].[Level3_Optional_Id] +) AS [s0] +ORDER BY [l].[Id], [s0].[Id], [s0].[Id0] +"""); + } + + public override async Task Single_select_many_in_projection_with_take(bool async) + { + await base.Single_select_many_in_projection_with_take(async); + + AssertSql( + """ +SELECT [l].[Id], [s0].[Id], [s0].[RefId], [s0].[Id0] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [s].[Id0] AS [Id], [l2].[Id] AS [RefId], [s].[Id] AS [Id0] + FROM ( + SELECT TOP(12) [l0].[Id], [l1].[Id] AS [Id0] + FROM [LevelTwo] AS [l0] + INNER JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] + WHERE [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Id] + ) AS [s] + LEFT JOIN [LevelFour] AS [l2] ON [s].[Id0] = [l2].[Level3_Optional_Id] +) AS [s0] +ORDER BY [l].[Id], [s0].[Id], [s0].[Id0] +"""); + } + + private void AssertSql(params string[] expected) + { + Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsSharedTypeQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsSharedTypeQueryLibRedFixture.cs new file mode 100644 index 00000000..af902422 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ComplexNavigationsSharedTypeQueryLibRedFixture.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class ComplexNavigationsSharedTypeQueryLibRedFixture : ComplexNavigationsSharedTypeQueryRelationalFixtureBase +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ComplexTypeQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/ComplexTypeQueryLibRedTest.cs new file mode 100644 index 00000000..29df6b37 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ComplexTypeQueryLibRedTest.cs @@ -0,0 +1,1262 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +using Microsoft.EntityFrameworkCore.TestModels.ComplexTypeModel; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class ComplexTypeQueryLibRedTest : ComplexTypeQueryRelationalTestBase< + ComplexTypeQueryLibRedTest.ComplexTypeQueryLibRedFixture> +{ + public ComplexTypeQueryLibRedTest(ComplexTypeQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Filter_on_property_inside_complex_type_after_subquery(bool async) + { + await base.Filter_on_property_inside_complex_type_after_subquery(async); + + AssertSql( + """ +@__p_0='1' + +SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] +FROM ( + SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + ORDER BY [c].[Id] + OFFSET @__p_0 ROWS +) AS [t] +WHERE [t].[ShippingAddress_ZipCode] = 7728 +"""); + } + + public override async Task Filter_on_property_inside_nested_complex_type_after_subquery(bool async) + { + await base.Filter_on_property_inside_nested_complex_type_after_subquery(async); + + AssertSql( + """ +@__p_0='1' + +SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] +FROM ( + SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + ORDER BY [c].[Id] + OFFSET @__p_0 ROWS +) AS [t] +WHERE [t].[ShippingAddress_Country_Code] = N'DE' +"""); + } + + public override async Task Filter_on_required_property_inside_required_complex_type_on_optional_navigation(bool async) + { + await base.Filter_on_required_property_inside_required_complex_type_on_optional_navigation(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`OptionalCustomerId`, `c`.`RequiredCustomerId`, `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`OptionalAddress_AddressLine1`, `c0`.`OptionalAddress_AddressLine2`, `c0`.`OptionalAddress_Tags`, `c0`.`OptionalAddress_ZipCode`, `c0`.`OptionalAddress_Country_Code`, `c0`.`OptionalAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName`, `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`OptionalAddress_AddressLine1`, `c1`.`OptionalAddress_AddressLine2`, `c1`.`OptionalAddress_Tags`, `c1`.`OptionalAddress_ZipCode`, `c1`.`OptionalAddress_Country_Code`, `c1`.`OptionalAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName` +FROM (`CustomerGroup` AS `c` +LEFT JOIN `Customer` AS `c0` ON `c`.`OptionalCustomerId` = `c0`.`Id`) +INNER JOIN `Customer` AS `c1` ON `c`.`RequiredCustomerId` = `c1`.`Id` +WHERE `c0`.`ShippingAddress_ZipCode` <> 7728 OR `c0`.`ShippingAddress_ZipCode` IS NULL +"""); + } + + public override async Task Filter_on_required_property_inside_required_complex_type_on_required_navigation(bool async) + { + await base.Filter_on_required_property_inside_required_complex_type_on_required_navigation(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`OptionalCustomerId`, `c`.`RequiredCustomerId`, `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`OptionalAddress_AddressLine1`, `c1`.`OptionalAddress_AddressLine2`, `c1`.`OptionalAddress_Tags`, `c1`.`OptionalAddress_ZipCode`, `c1`.`OptionalAddress_Country_Code`, `c1`.`OptionalAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName`, `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`OptionalAddress_AddressLine1`, `c0`.`OptionalAddress_AddressLine2`, `c0`.`OptionalAddress_Tags`, `c0`.`OptionalAddress_ZipCode`, `c0`.`OptionalAddress_Country_Code`, `c0`.`OptionalAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +FROM (`CustomerGroup` AS `c` +INNER JOIN `Customer` AS `c0` ON `c`.`RequiredCustomerId` = `c0`.`Id`) +LEFT JOIN `Customer` AS `c1` ON `c`.`OptionalCustomerId` = `c1`.`Id` +WHERE `c0`.`ShippingAddress_ZipCode` <> 7728 +"""); + } + + public override async Task Project_complex_type_via_optional_navigation(bool async) + { + await base.Project_complex_type_via_optional_navigation(async); + + AssertSql( + """ +SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +FROM `CustomerGroup` AS `c` +LEFT JOIN `Customer` AS `c0` ON `c`.`OptionalCustomerId` = `c0`.`Id` +"""); + } + + public override async Task Project_complex_type_via_required_navigation(bool async) + { + await base.Project_complex_type_via_required_navigation(async); + + AssertSql( + """ +SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +FROM `CustomerGroup` AS `c` +INNER JOIN `Customer` AS `c0` ON `c`.`RequiredCustomerId` = `c0`.`Id` +"""); + } + + public override async Task Load_complex_type_after_subquery_on_entity_type(bool async) + { + await base.Load_complex_type_after_subquery_on_entity_type(async); + + AssertSql( + """ +@__p_0='1' + +SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] +FROM ( + SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + ORDER BY [c].[Id] + OFFSET @__p_0 ROWS +) AS [t] +"""); + } + + public override async Task Select_complex_type(bool async) + { + await base.Select_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +"""); + } + + public override async Task Select_nested_complex_type(bool async) + { + await base.Select_nested_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +"""); + } + + public override async Task Select_single_property_on_nested_complex_type(bool async) + { + await base.Select_single_property_on_nested_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +"""); + } + + public override async Task Select_complex_type_Where(bool async) + { + await base.Select_complex_type_Where(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +WHERE `c`.`ShippingAddress_ZipCode` = 7728 +"""); + } + + public override async Task Select_complex_type_Distinct(bool async) + { + await base.Select_complex_type_Distinct(async); + + AssertSql( + """ +SELECT DISTINCT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +"""); + } + + public override async Task Complex_type_equals_complex_type(bool async) + { + await base.Complex_type_equals_complex_type(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +WHERE `c`.`ShippingAddress_AddressLine1` = `c`.`BillingAddress_AddressLine1` AND (`c`.`ShippingAddress_AddressLine2` = `c`.`BillingAddress_AddressLine2` OR (`c`.`ShippingAddress_AddressLine2` IS NULL AND `c`.`BillingAddress_AddressLine2` IS NULL)) AND `c`.`ShippingAddress_Tags` = `c`.`BillingAddress_Tags` AND `c`.`ShippingAddress_ZipCode` = `c`.`BillingAddress_ZipCode` +"""); + } + + public override async Task Complex_type_equals_constant(bool async) + { + await base.Complex_type_equals_constant(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +WHERE `c`.`ShippingAddress_AddressLine1` = '804 S. Lakeshore Road' AND `c`.`ShippingAddress_AddressLine2` IS NULL AND `c`.`ShippingAddress_Tags` = '["foo","bar"]' AND `c`.`ShippingAddress_ZipCode` = 38654 AND `c`.`ShippingAddress_Country_Code` = 'US' AND `c`.`ShippingAddress_Country_FullName` = 'United States' +"""); + } + + public override async Task Complex_type_equals_parameter(bool async) + { + await base.Complex_type_equals_parameter(async); + + AssertSql( + """ +@entity_equality_address_AddressLine1='804 S. Lakeshore Road' (Size = 255) +@entity_equality_address_Tags='["foo","bar"]' (Size = 255) +@entity_equality_address_ZipCode='38654' (Nullable = true) +@entity_equality_address_Country_Code='US' (Size = 255) +@entity_equality_address_Country_FullName='United States' (Size = 255) + +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +WHERE `c`.`ShippingAddress_AddressLine1` = @entity_equality_address_AddressLine1 AND `c`.`ShippingAddress_AddressLine2` IS NULL AND `c`.`ShippingAddress_Tags` = @entity_equality_address_Tags AND `c`.`ShippingAddress_ZipCode` = @entity_equality_address_ZipCode AND `c`.`ShippingAddress_Country_Code` = @entity_equality_address_Country_Code AND `c`.`ShippingAddress_Country_FullName` = @entity_equality_address_Country_FullName +"""); + } + + public override async Task Subquery_over_complex_type(bool async) + { + await base.Subquery_over_complex_type(async); + + AssertSql(); + } + + public override async Task Contains_over_complex_type(bool async) + { + await base.Contains_over_complex_type(async); + + AssertSql( + """ +@entity_equality_address_AddressLine1='804 S. Lakeshore Road' (Size = 255) +@entity_equality_address_Tags='["foo","bar"]' (Size = 255) +@entity_equality_address_ZipCode='38654' (Nullable = true) +@entity_equality_address_Country_Code='US' (Size = 255) +@entity_equality_address_Country_FullName='United States' (Size = 255) + +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Customer` AS `c0` + WHERE `c0`.`ShippingAddress_AddressLine1` = @entity_equality_address_AddressLine1 AND `c0`.`ShippingAddress_AddressLine2` IS NULL AND `c0`.`ShippingAddress_Tags` = @entity_equality_address_Tags AND `c0`.`ShippingAddress_ZipCode` = @entity_equality_address_ZipCode AND `c0`.`ShippingAddress_Country_Code` = @entity_equality_address_Country_Code AND `c0`.`ShippingAddress_Country_FullName` = @entity_equality_address_Country_FullName) +"""); + } + + public override async Task Concat_complex_type(bool async) + { + await base.Concat_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +WHERE `c`.`Id` = 1 +UNION ALL +SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c0` +WHERE `c0`.`Id` = 2 +"""); + } + + public override async Task Concat_entity_type_containing_complex_property(bool async) + { + await base.Concat_entity_type_containing_complex_property(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +WHERE `c`.`Id` = 1 +UNION ALL +SELECT `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`OptionalAddress_AddressLine1`, `c0`.`OptionalAddress_AddressLine2`, `c0`.`OptionalAddress_Tags`, `c0`.`OptionalAddress_ZipCode`, `c0`.`OptionalAddress_Country_Code`, `c0`.`OptionalAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c0` +WHERE `c0`.`Id` = 2 +"""); + } + + public override async Task Union_entity_type_containing_complex_property(bool async) + { + await base.Union_entity_type_containing_complex_property(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +WHERE `c`.`Id` = 1 +UNION +SELECT `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`OptionalAddress_AddressLine1`, `c0`.`OptionalAddress_AddressLine2`, `c0`.`OptionalAddress_Tags`, `c0`.`OptionalAddress_ZipCode`, `c0`.`OptionalAddress_Country_Code`, `c0`.`OptionalAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c0` +WHERE `c0`.`Id` = 2 +"""); + } + + public override async Task Union_complex_type(bool async) + { + await base.Union_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c` +WHERE `c`.`Id` = 1 +UNION +SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +FROM `Customer` AS `c0` +WHERE `c0`.`Id` = 2 +"""); + } + + public override async Task Concat_property_in_complex_type(bool async) + { + await base.Concat_property_in_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_AddressLine1` +FROM `Customer` AS `c` +UNION ALL +SELECT `c0`.`BillingAddress_AddressLine1` AS `ShippingAddress_AddressLine1` +FROM `Customer` AS `c0` +"""); + } + + public override async Task Union_property_in_complex_type(bool async) + { + await base.Union_property_in_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_AddressLine1` +FROM `Customer` AS `c` +UNION +SELECT `c0`.`BillingAddress_AddressLine1` AS `ShippingAddress_AddressLine1` +FROM `Customer` AS `c0` +"""); + } + + public override async Task Concat_two_different_complex_type(bool async) + { + await base.Concat_two_different_complex_type(async); + + AssertSql(); + } + + public override async Task Union_two_different_complex_type(bool async) + { + await base.Union_two_different_complex_type(async); + + AssertSql(); + } + + public override async Task Filter_on_property_inside_struct_complex_type(bool async) + { + await base.Filter_on_property_inside_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`ShippingAddress_ZipCode` = 7728 +"""); + } + + public override async Task Filter_on_property_inside_nested_struct_complex_type(bool async) + { + await base.Filter_on_property_inside_nested_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`ShippingAddress_Country_Code` = 'DE' +"""); + } + + public override async Task Filter_on_property_inside_struct_complex_type_after_subquery(bool async) + { + await base.Filter_on_property_inside_struct_complex_type_after_subquery(async); + + AssertSql( +""" +@__p_0='1' + +SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] +FROM ( + SELECT [v].[Id], [v].[Name], [v].[BillingAddress_AddressLine1], [v].[BillingAddress_AddressLine2], [v].[BillingAddress_ZipCode], [v].[BillingAddress_Country_Code], [v].[BillingAddress_Country_FullName], [v].[ShippingAddress_AddressLine1], [v].[ShippingAddress_AddressLine2], [v].[ShippingAddress_ZipCode], [v].[ShippingAddress_Country_Code], [v].[ShippingAddress_Country_FullName] + FROM [ValuedCustomer] AS [v] + ORDER BY [v].[Id] + OFFSET @__p_0 ROWS +) AS [t] +WHERE [t].[ShippingAddress_ZipCode] = 7728 +"""); + } + + public override async Task Filter_on_property_inside_nested_struct_complex_type_after_subquery(bool async) + { + await base.Filter_on_property_inside_nested_struct_complex_type_after_subquery(async); + + AssertSql( +""" +@__p_0='1' + +SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] +FROM ( + SELECT [v].[Id], [v].[Name], [v].[BillingAddress_AddressLine1], [v].[BillingAddress_AddressLine2], [v].[BillingAddress_ZipCode], [v].[BillingAddress_Country_Code], [v].[BillingAddress_Country_FullName], [v].[ShippingAddress_AddressLine1], [v].[ShippingAddress_AddressLine2], [v].[ShippingAddress_ZipCode], [v].[ShippingAddress_Country_Code], [v].[ShippingAddress_Country_FullName] + FROM [ValuedCustomer] AS [v] + ORDER BY [v].[Id] + OFFSET @__p_0 ROWS +) AS [t] +WHERE [t].[ShippingAddress_Country_Code] = N'DE' +"""); + } + + public override async Task Filter_on_required_property_inside_required_struct_complex_type_on_optional_navigation(bool async) + { + await base.Filter_on_required_property_inside_required_struct_complex_type_on_optional_navigation(async); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`OptionalCustomerId`, `v`.`RequiredCustomerId`, `v0`.`Id`, `v0`.`Name`, `v0`.`BillingAddress_AddressLine1`, `v0`.`BillingAddress_AddressLine2`, `v0`.`BillingAddress_ZipCode`, `v0`.`BillingAddress_Country_Code`, `v0`.`BillingAddress_Country_FullName`, `v0`.`ShippingAddress_AddressLine1`, `v0`.`ShippingAddress_AddressLine2`, `v0`.`ShippingAddress_ZipCode`, `v0`.`ShippingAddress_Country_Code`, `v0`.`ShippingAddress_Country_FullName`, `v1`.`Id`, `v1`.`Name`, `v1`.`BillingAddress_AddressLine1`, `v1`.`BillingAddress_AddressLine2`, `v1`.`BillingAddress_ZipCode`, `v1`.`BillingAddress_Country_Code`, `v1`.`BillingAddress_Country_FullName`, `v1`.`ShippingAddress_AddressLine1`, `v1`.`ShippingAddress_AddressLine2`, `v1`.`ShippingAddress_ZipCode`, `v1`.`ShippingAddress_Country_Code`, `v1`.`ShippingAddress_Country_FullName` +FROM (`ValuedCustomerGroup` AS `v` +LEFT JOIN `ValuedCustomer` AS `v0` ON `v`.`OptionalCustomerId` = `v0`.`Id`) +INNER JOIN `ValuedCustomer` AS `v1` ON `v`.`RequiredCustomerId` = `v1`.`Id` +WHERE `v0`.`ShippingAddress_ZipCode` <> 7728 OR `v0`.`ShippingAddress_ZipCode` IS NULL +"""); + } + + public override async Task Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(bool async) + { + await base.Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(async); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`OptionalCustomerId`, `v`.`RequiredCustomerId`, `v1`.`Id`, `v1`.`Name`, `v1`.`BillingAddress_AddressLine1`, `v1`.`BillingAddress_AddressLine2`, `v1`.`BillingAddress_ZipCode`, `v1`.`BillingAddress_Country_Code`, `v1`.`BillingAddress_Country_FullName`, `v1`.`ShippingAddress_AddressLine1`, `v1`.`ShippingAddress_AddressLine2`, `v1`.`ShippingAddress_ZipCode`, `v1`.`ShippingAddress_Country_Code`, `v1`.`ShippingAddress_Country_FullName`, `v0`.`Id`, `v0`.`Name`, `v0`.`BillingAddress_AddressLine1`, `v0`.`BillingAddress_AddressLine2`, `v0`.`BillingAddress_ZipCode`, `v0`.`BillingAddress_Country_Code`, `v0`.`BillingAddress_Country_FullName`, `v0`.`ShippingAddress_AddressLine1`, `v0`.`ShippingAddress_AddressLine2`, `v0`.`ShippingAddress_ZipCode`, `v0`.`ShippingAddress_Country_Code`, `v0`.`ShippingAddress_Country_FullName` +FROM (`ValuedCustomerGroup` AS `v` +INNER JOIN `ValuedCustomer` AS `v0` ON `v`.`RequiredCustomerId` = `v0`.`Id`) +LEFT JOIN `ValuedCustomer` AS `v1` ON `v`.`OptionalCustomerId` = `v1`.`Id` +WHERE `v0`.`ShippingAddress_ZipCode` <> 7728 +"""); + } + + public override async Task Project_struct_complex_type_via_optional_navigation(bool async) + { + await base.Project_struct_complex_type_via_optional_navigation(async); + + AssertSql( + """ +SELECT `v0`.`ShippingAddress_AddressLine1`, `v0`.`ShippingAddress_AddressLine2`, `v0`.`ShippingAddress_ZipCode`, `v0`.`ShippingAddress_Country_Code`, `v0`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomerGroup` AS `v` +LEFT JOIN `ValuedCustomer` AS `v0` ON `v`.`OptionalCustomerId` = `v0`.`Id` +"""); + } + + public override async Task Project_nullable_struct_complex_type_via_optional_navigation(bool async) + { + await base.Project_nullable_struct_complex_type_via_optional_navigation(async); + + AssertSql( + """ +SELECT `v0`.`ShippingAddress_AddressLine1`, `v0`.`ShippingAddress_AddressLine2`, `v0`.`ShippingAddress_ZipCode`, `v0`.`ShippingAddress_Country_Code`, `v0`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomerGroup` AS `v` +LEFT JOIN `ValuedCustomer` AS `v0` ON `v`.`OptionalCustomerId` = `v0`.`Id` +"""); + } + + public override async Task Project_struct_complex_type_via_required_navigation(bool async) + { + await base.Project_struct_complex_type_via_required_navigation(async); + + AssertSql( + """ +SELECT `v0`.`ShippingAddress_AddressLine1`, `v0`.`ShippingAddress_AddressLine2`, `v0`.`ShippingAddress_ZipCode`, `v0`.`ShippingAddress_Country_Code`, `v0`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomerGroup` AS `v` +INNER JOIN `ValuedCustomer` AS `v0` ON `v`.`RequiredCustomerId` = `v0`.`Id` +"""); + } + + public override async Task Load_struct_complex_type_after_subquery_on_entity_type(bool async) + { + await base.Load_struct_complex_type_after_subquery_on_entity_type(async); + + AssertSql( +""" +@__p_0='1' + +SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] +FROM ( + SELECT [v].[Id], [v].[Name], [v].[BillingAddress_AddressLine1], [v].[BillingAddress_AddressLine2], [v].[BillingAddress_ZipCode], [v].[BillingAddress_Country_Code], [v].[BillingAddress_Country_FullName], [v].[ShippingAddress_AddressLine1], [v].[ShippingAddress_AddressLine2], [v].[ShippingAddress_ZipCode], [v].[ShippingAddress_Country_Code], [v].[ShippingAddress_Country_FullName] + FROM [ValuedCustomer] AS [v] + ORDER BY [v].[Id] + OFFSET @__p_0 ROWS +) AS [t] +"""); + } + + public override async Task Select_struct_complex_type(bool async) + { + await base.Select_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +"""); + } + + public override async Task Select_nested_struct_complex_type(bool async) + { + await base.Select_nested_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +"""); + } + + public override async Task Select_single_property_on_nested_struct_complex_type(bool async) + { + await base.Select_single_property_on_nested_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +"""); + } + + public override async Task Select_struct_complex_type_Where(bool async) + { + await base.Select_struct_complex_type_Where(async); + + AssertSql( + """ +SELECT `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`ShippingAddress_ZipCode` = 7728 +"""); + } + + public override async Task Select_struct_complex_type_Distinct(bool async) + { + await base.Select_struct_complex_type_Distinct(async); + + AssertSql( + """ +SELECT DISTINCT `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +"""); + } + + public override async Task Struct_complex_type_equals_struct_complex_type(bool async) + { + await base.Struct_complex_type_equals_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`ShippingAddress_AddressLine1` = `v`.`BillingAddress_AddressLine1` AND (`v`.`ShippingAddress_AddressLine2` = `v`.`BillingAddress_AddressLine2` OR (`v`.`ShippingAddress_AddressLine2` IS NULL AND `v`.`BillingAddress_AddressLine2` IS NULL)) AND `v`.`ShippingAddress_ZipCode` = `v`.`BillingAddress_ZipCode` +"""); + } + + public override async Task Struct_complex_type_equals_constant(bool async) + { + await base.Struct_complex_type_equals_constant(async); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`ShippingAddress_AddressLine1` = '804 S. Lakeshore Road' AND `v`.`ShippingAddress_AddressLine2` IS NULL AND `v`.`ShippingAddress_ZipCode` = 38654 AND `v`.`ShippingAddress_Country_Code` = 'US' AND `v`.`ShippingAddress_Country_FullName` = 'United States' +"""); + } + + public override async Task Struct_complex_type_equals_parameter(bool async) + { + await base.Struct_complex_type_equals_parameter(async); + + AssertSql( + """ +@entity_equality_address_AddressLine1='804 S. Lakeshore Road' (Size = 255) +@entity_equality_address_ZipCode='38654' (Nullable = true) +@entity_equality_address_Country_Code='US' (Size = 255) +@entity_equality_address_Country_FullName='United States' (Size = 255) + +SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`ShippingAddress_AddressLine1` = @entity_equality_address_AddressLine1 AND `v`.`ShippingAddress_AddressLine2` IS NULL AND `v`.`ShippingAddress_ZipCode` = @entity_equality_address_ZipCode AND `v`.`ShippingAddress_Country_Code` = @entity_equality_address_Country_Code AND `v`.`ShippingAddress_Country_FullName` = @entity_equality_address_Country_FullName +"""); + } + + public override async Task Subquery_over_struct_complex_type(bool async) + { + await base.Subquery_over_struct_complex_type(async); + + AssertSql(); + } + + public override async Task Contains_over_struct_complex_type(bool async) + { + await base.Contains_over_struct_complex_type(async); + + AssertSql( + """ +@entity_equality_address_AddressLine1='804 S. Lakeshore Road' (Size = 255) +@entity_equality_address_ZipCode='38654' (Nullable = true) +@entity_equality_address_Country_Code='US' (Size = 255) +@entity_equality_address_Country_FullName='United States' (Size = 255) + +SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE EXISTS ( + SELECT 1 + FROM `ValuedCustomer` AS `v0` + WHERE `v0`.`ShippingAddress_AddressLine1` = @entity_equality_address_AddressLine1 AND `v0`.`ShippingAddress_AddressLine2` IS NULL AND `v0`.`ShippingAddress_ZipCode` = @entity_equality_address_ZipCode AND `v0`.`ShippingAddress_Country_Code` = @entity_equality_address_Country_Code AND `v0`.`ShippingAddress_Country_FullName` = @entity_equality_address_Country_FullName) +"""); + } + + public override async Task Concat_struct_complex_type(bool async) + { + await base.Concat_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`Id` = 1 +UNION ALL +SELECT `v0`.`ShippingAddress_AddressLine1`, `v0`.`ShippingAddress_AddressLine2`, `v0`.`ShippingAddress_ZipCode`, `v0`.`ShippingAddress_Country_Code`, `v0`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v0` +WHERE `v0`.`Id` = 2 +"""); + } + + public override async Task Concat_entity_type_containing_struct_complex_property(bool async) + { + await base.Concat_entity_type_containing_struct_complex_property(async); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`Id` = 1 +UNION ALL +SELECT `v0`.`Id`, `v0`.`Name`, `v0`.`BillingAddress_AddressLine1`, `v0`.`BillingAddress_AddressLine2`, `v0`.`BillingAddress_ZipCode`, `v0`.`BillingAddress_Country_Code`, `v0`.`BillingAddress_Country_FullName`, `v0`.`ShippingAddress_AddressLine1`, `v0`.`ShippingAddress_AddressLine2`, `v0`.`ShippingAddress_ZipCode`, `v0`.`ShippingAddress_Country_Code`, `v0`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v0` +WHERE `v0`.`Id` = 2 +"""); + } + + public override async Task Union_entity_type_containing_struct_complex_property(bool async) + { + await base.Union_entity_type_containing_struct_complex_property(async); + + AssertSql( + """ +SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`Id` = 1 +UNION +SELECT `v0`.`Id`, `v0`.`Name`, `v0`.`BillingAddress_AddressLine1`, `v0`.`BillingAddress_AddressLine2`, `v0`.`BillingAddress_ZipCode`, `v0`.`BillingAddress_Country_Code`, `v0`.`BillingAddress_Country_FullName`, `v0`.`ShippingAddress_AddressLine1`, `v0`.`ShippingAddress_AddressLine2`, `v0`.`ShippingAddress_ZipCode`, `v0`.`ShippingAddress_Country_Code`, `v0`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v0` +WHERE `v0`.`Id` = 2 +"""); + } + + public override async Task Union_struct_complex_type(bool async) + { + await base.Union_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v` +WHERE `v`.`Id` = 1 +UNION +SELECT `v0`.`ShippingAddress_AddressLine1`, `v0`.`ShippingAddress_AddressLine2`, `v0`.`ShippingAddress_ZipCode`, `v0`.`ShippingAddress_Country_Code`, `v0`.`ShippingAddress_Country_FullName` +FROM `ValuedCustomer` AS `v0` +WHERE `v0`.`Id` = 2 +"""); + } + + public override async Task Concat_property_in_struct_complex_type(bool async) + { + await base.Concat_property_in_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`ShippingAddress_AddressLine1` +FROM `ValuedCustomer` AS `v` +UNION ALL +SELECT `v0`.`BillingAddress_AddressLine1` AS `ShippingAddress_AddressLine1` +FROM `ValuedCustomer` AS `v0` +"""); + } + + public override async Task Union_property_in_struct_complex_type(bool async) + { + await base.Union_property_in_struct_complex_type(async); + + AssertSql( + """ +SELECT `v`.`ShippingAddress_AddressLine1` +FROM `ValuedCustomer` AS `v` +UNION +SELECT `v0`.`BillingAddress_AddressLine1` AS `ShippingAddress_AddressLine1` +FROM `ValuedCustomer` AS `v0` +"""); + } + + public override async Task Concat_two_different_struct_complex_type(bool async) + { + await base.Concat_two_different_struct_complex_type(async); + + AssertSql(); + } + + public override async Task Union_two_different_struct_complex_type(bool async) + { + await base.Union_two_different_struct_complex_type(async); + + AssertSql(); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Filter_on_property_inside_complex_type_with_FromSql(bool async) + => AssertQuery( + async, + ss => ((DbSet)ss.Set()).FromSqlRaw( + """ +SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_Tags], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[OptionalAddress_AddressLine1], [c].[OptionalAddress_AddressLine2], [c].[OptionalAddress_Tags], [c].[OptionalAddress_ZipCode], [c].[OptionalAddress_Country_Code], [c].[OptionalAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] +FROM [Customer] AS [c] +WHERE [c].[ShippingAddress_ZipCode] = 7728 +"""), + ss => ss.Set().Where(c => c.ShippingAddress.ZipCode == 07728)); + + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public virtual Task Filter_on_property_inside_complex_type_after_subquery_with_FromSql(bool async) + => AssertQuery( + async, + ss => ((DbSet)ss.Set()).FromSql( + $""" + SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_Tags], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[OptionalAddress_AddressLine1], [t].[OptionalAddress_AddressLine2], [t].[OptionalAddress_Tags], [t].[OptionalAddress_ZipCode], [t].[OptionalAddress_Country_Code], [t].[OptionalAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_Tags], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] + FROM ( + SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_Tags], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[OptionalAddress_AddressLine1], [c].[OptionalAddress_AddressLine2], [c].[OptionalAddress_Tags], [c].[OptionalAddress_ZipCode], [c].[OptionalAddress_Country_Code], [c].[OptionalAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + ORDER BY [c].[Id] + OFFSET {1} ROWS + ) AS [t] + WHERE [t].[ShippingAddress_ZipCode] = 7728 + """), + ss => ss.Set() + .OrderBy(c => c.Id) + .Skip(1) + .Distinct() + .Where(c => c.ShippingAddress.ZipCode == 07728)); + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public virtual Task Load_complex_type_after_subquery_on_entity_type_with_FromSql(bool async) + => AssertQuery( + async, + ss => ((DbSet)ss.Set()).FromSql( + $""" + SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_Tags], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[OptionalAddress_AddressLine1], [t].[OptionalAddress_AddressLine2], [t].[OptionalAddress_Tags], [t].[OptionalAddress_ZipCode], [t].[OptionalAddress_Country_Code], [t].[OptionalAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_Tags], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] + FROM ( + SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_Tags], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[OptionalAddress_AddressLine1], [c].[OptionalAddress_AddressLine2], [c].[OptionalAddress_Tags], [c].[OptionalAddress_ZipCode], [c].[OptionalAddress_Country_Code], [c].[OptionalAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + ORDER BY [c].[Id] + OFFSET {1} ROWS + ) AS [t] + """), + ss => ss.Set() + .OrderBy(c => c.Id) + .Skip(1) + .Distinct()); + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public virtual Task Select_complex_type_with_FromSql(bool async) + => AssertQuery( + async, + ss => ((DbSet)ss.Set()).FromSqlRaw( + """ + SELECT [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + """).Select(c => c.ShippingAddress), + ss => ss.Set().Select(c => c.ShippingAddress)); + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public virtual Task Select_nested_complex_type_with_FromSql(bool async) + => AssertQuery( + async, + ss => ((DbSet)ss.Set()).FromSqlRaw( + """ + SELECT [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + """).Select(c => c.ShippingAddress.Country), + ss => ss.Set().Select(c => c.ShippingAddress.Country)); + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public virtual Task Select_single_property_on_nested_complex_type_with_FromSql(bool async) + => AssertQuery( + async, + ss => ((DbSet)ss.Set()).FromSqlRaw( + """ + SELECT [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + """).Select(c => c.ShippingAddress.Country.FullName), + ss => ss.Set().Select(c => c.ShippingAddress.Country.FullName)); + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public virtual Task Select_complex_type_Where_with_FromSql(bool async) + => AssertQuery( + async, + ss => ((DbSet)ss.Set()).FromSqlRaw( + """ + SELECT [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + """).Select(c => c.ShippingAddress).Where(a => a.ZipCode == 07728), + ss => ss.Set().Select(c => c.ShippingAddress).Where(a => a.ZipCode == 07728)); + + [ConditionalTheory, MemberData(nameof(IsAsyncData))] + public virtual Task Select_complex_type_Distinct_with_FromSql(bool async) + => AssertQuery( + async, + ss => ((DbSet)ss.Set()).FromSqlRaw( + """ + SELECT [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + """).Select(c => c.ShippingAddress).Distinct(), + ss => ss.Set().Select(c => c.ShippingAddress).Distinct()); + + public override async Task Project_same_entity_with_nested_complex_type_twice_with_pushdown(bool async) + { + await base.Project_same_entity_with_nested_complex_type_twice_with_pushdown(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_Tags`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`OptionalAddress_AddressLine1`, `s`.`OptionalAddress_AddressLine2`, `s`.`OptionalAddress_Tags`, `s`.`OptionalAddress_ZipCode`, `s`.`OptionalAddress_Country_Code`, `s`.`OptionalAddress_Country_FullName`, `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_Tags`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName`, `s`.`Id0`, `s`.`Name0`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_Tags0`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0`, `s`.`OptionalAddress_AddressLine10`, `s`.`OptionalAddress_AddressLine20`, `s`.`OptionalAddress_Tags0`, `s`.`OptionalAddress_ZipCode0`, `s`.`OptionalAddress_Country_Code0`, `s`.`OptionalAddress_Country_FullName0`, `s`.`ShippingAddress_AddressLine10`, `s`.`ShippingAddress_AddressLine20`, `s`.`ShippingAddress_Tags0`, `s`.`ShippingAddress_ZipCode0`, `s`.`ShippingAddress_Country_Code0`, `s`.`ShippingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`OptionalAddress_AddressLine1` AS `OptionalAddress_AddressLine10`, `c0`.`OptionalAddress_AddressLine2` AS `OptionalAddress_AddressLine20`, `c0`.`OptionalAddress_Tags` AS `OptionalAddress_Tags0`, `c0`.`OptionalAddress_ZipCode` AS `OptionalAddress_ZipCode0`, `c0`.`OptionalAddress_Country_Code` AS `OptionalAddress_Country_Code0`, `c0`.`OptionalAddress_Country_FullName` AS `OptionalAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + FROM `Customer` AS `c`, + `Customer` AS `c0` +) AS `s` +"""); + } + + public override async Task Project_same_nested_complex_type_twice_with_pushdown(bool async) + { + await base.Project_same_nested_complex_type_twice_with_pushdown(async); + + AssertSql( + """ +SELECT `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_Tags`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_Tags0`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + FROM `Customer` AS `c`, + `Customer` AS `c0` +) AS `s` +"""); + } + + public override async Task Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(bool async) + { + await base.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async); + + AssertSql( + """ +@p='50' + +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`BillingAddress_AddressLine1`, `s0`.`BillingAddress_AddressLine2`, `s0`.`BillingAddress_Tags`, `s0`.`BillingAddress_ZipCode`, `s0`.`BillingAddress_Country_Code`, `s0`.`BillingAddress_Country_FullName`, `s0`.`OptionalAddress_AddressLine1`, `s0`.`OptionalAddress_AddressLine2`, `s0`.`OptionalAddress_Tags`, `s0`.`OptionalAddress_ZipCode`, `s0`.`OptionalAddress_Country_Code`, `s0`.`OptionalAddress_Country_FullName`, `s0`.`ShippingAddress_AddressLine1`, `s0`.`ShippingAddress_AddressLine2`, `s0`.`ShippingAddress_Tags`, `s0`.`ShippingAddress_ZipCode`, `s0`.`ShippingAddress_Country_Code`, `s0`.`ShippingAddress_Country_FullName`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`BillingAddress_AddressLine10`, `s0`.`BillingAddress_AddressLine20`, `s0`.`BillingAddress_Tags0`, `s0`.`BillingAddress_ZipCode0`, `s0`.`BillingAddress_Country_Code0`, `s0`.`BillingAddress_Country_FullName0`, `s0`.`OptionalAddress_AddressLine10`, `s0`.`OptionalAddress_AddressLine20`, `s0`.`OptionalAddress_Tags0`, `s0`.`OptionalAddress_ZipCode0`, `s0`.`OptionalAddress_Country_Code0`, `s0`.`OptionalAddress_Country_FullName0`, `s0`.`ShippingAddress_AddressLine10`, `s0`.`ShippingAddress_AddressLine20`, `s0`.`ShippingAddress_Tags0`, `s0`.`ShippingAddress_ZipCode0`, `s0`.`ShippingAddress_Country_Code0`, `s0`.`ShippingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `s`.`Id`, `s`.`Name`, `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_Tags`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`OptionalAddress_AddressLine1`, `s`.`OptionalAddress_AddressLine2`, `s`.`OptionalAddress_Tags`, `s`.`OptionalAddress_ZipCode`, `s`.`OptionalAddress_Country_Code`, `s`.`OptionalAddress_Country_FullName`, `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_Tags`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName`, `s`.`Id0`, `s`.`Name0`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_Tags0`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0`, `s`.`OptionalAddress_AddressLine10`, `s`.`OptionalAddress_AddressLine20`, `s`.`OptionalAddress_Tags0`, `s`.`OptionalAddress_ZipCode0`, `s`.`OptionalAddress_Country_Code0`, `s`.`OptionalAddress_Country_FullName0`, `s`.`ShippingAddress_AddressLine10`, `s`.`ShippingAddress_AddressLine20`, `s`.`ShippingAddress_Tags0`, `s`.`ShippingAddress_ZipCode0`, `s`.`ShippingAddress_Country_Code0`, `s`.`ShippingAddress_Country_FullName0` + FROM ( + SELECT TOP @p `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`OptionalAddress_AddressLine1` AS `OptionalAddress_AddressLine10`, `c0`.`OptionalAddress_AddressLine2` AS `OptionalAddress_AddressLine20`, `c0`.`OptionalAddress_Tags` AS `OptionalAddress_Tags0`, `c0`.`OptionalAddress_ZipCode` AS `OptionalAddress_ZipCode0`, `c0`.`OptionalAddress_Country_Code` AS `OptionalAddress_Country_Code0`, `c0`.`OptionalAddress_Country_FullName` AS `OptionalAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + FROM `Customer` AS `c`, + `Customer` AS `c0` + ORDER BY `c`.`Id`, `c0`.`Id` + ) AS `s` +) AS `s0` +"""); + } + + public override async Task Project_same_nested_complex_type_twice_with_double_pushdown(bool async) + { + await base.Project_same_nested_complex_type_twice_with_double_pushdown(async); + + AssertSql( + """ +@p='50' + +SELECT `s0`.`BillingAddress_AddressLine1`, `s0`.`BillingAddress_AddressLine2`, `s0`.`BillingAddress_Tags`, `s0`.`BillingAddress_ZipCode`, `s0`.`BillingAddress_Country_Code`, `s0`.`BillingAddress_Country_FullName`, `s0`.`BillingAddress_AddressLine10`, `s0`.`BillingAddress_AddressLine20`, `s0`.`BillingAddress_Tags0`, `s0`.`BillingAddress_ZipCode0`, `s0`.`BillingAddress_Country_Code0`, `s0`.`BillingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_Tags`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_Tags0`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0` + FROM ( + SELECT TOP @p `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + FROM `Customer` AS `c`, + `Customer` AS `c0` + ORDER BY `c`.`Id`, `c0`.`Id` + ) AS `s` +) AS `s0` +"""); + } + + public override async Task Project_same_entity_with_struct_nested_complex_type_twice_with_pushdown(bool async) + { + await base.Project_same_entity_with_struct_nested_complex_type_twice_with_pushdown(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName`, `s`.`Id0`, `s`.`Name0`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0`, `s`.`ShippingAddress_AddressLine10`, `s`.`ShippingAddress_AddressLine20`, `s`.`ShippingAddress_ZipCode0`, `s`.`ShippingAddress_Country_Code0`, `s`.`ShippingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName`, `v0`.`Id` AS `Id0`, `v0`.`Name` AS `Name0`, `v0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `v0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `v0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `v0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `v0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `v0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `v0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `v0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `v0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `v0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + FROM `ValuedCustomer` AS `v`, + `ValuedCustomer` AS `v0` +) AS `s` +"""); + } + + public override async Task Project_same_struct_nested_complex_type_twice_with_pushdown(bool async) + { + await base.Project_same_struct_nested_complex_type_twice_with_pushdown(async); + + AssertSql( + """ +SELECT `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `v0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `v0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `v0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `v0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + FROM `ValuedCustomer` AS `v`, + `ValuedCustomer` AS `v0` +) AS `s` +"""); + } + + public override async Task Project_same_entity_with_struct_nested_complex_type_twice_with_double_pushdown(bool async) + { + await base.Project_same_entity_with_struct_nested_complex_type_twice_with_double_pushdown(async); + + AssertSql( + """ +@p='50' + +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`BillingAddress_AddressLine1`, `s0`.`BillingAddress_AddressLine2`, `s0`.`BillingAddress_ZipCode`, `s0`.`BillingAddress_Country_Code`, `s0`.`BillingAddress_Country_FullName`, `s0`.`ShippingAddress_AddressLine1`, `s0`.`ShippingAddress_AddressLine2`, `s0`.`ShippingAddress_ZipCode`, `s0`.`ShippingAddress_Country_Code`, `s0`.`ShippingAddress_Country_FullName`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`BillingAddress_AddressLine10`, `s0`.`BillingAddress_AddressLine20`, `s0`.`BillingAddress_ZipCode0`, `s0`.`BillingAddress_Country_Code0`, `s0`.`BillingAddress_Country_FullName0`, `s0`.`ShippingAddress_AddressLine10`, `s0`.`ShippingAddress_AddressLine20`, `s0`.`ShippingAddress_ZipCode0`, `s0`.`ShippingAddress_Country_Code0`, `s0`.`ShippingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `s`.`Id`, `s`.`Name`, `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName`, `s`.`Id0`, `s`.`Name0`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0`, `s`.`ShippingAddress_AddressLine10`, `s`.`ShippingAddress_AddressLine20`, `s`.`ShippingAddress_ZipCode0`, `s`.`ShippingAddress_Country_Code0`, `s`.`ShippingAddress_Country_FullName0` + FROM ( + SELECT TOP @p `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName`, `v0`.`Id` AS `Id0`, `v0`.`Name` AS `Name0`, `v0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `v0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `v0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `v0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `v0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `v0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `v0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `v0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `v0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `v0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + FROM `ValuedCustomer` AS `v`, + `ValuedCustomer` AS `v0` + ORDER BY `v`.`Id`, `v0`.`Id` + ) AS `s` +) AS `s0` +"""); + } + + public override async Task Project_same_struct_nested_complex_type_twice_with_double_pushdown(bool async) + { + await base.Project_same_struct_nested_complex_type_twice_with_double_pushdown(async); + + AssertSql( + """ +@p='50' + +SELECT `s0`.`BillingAddress_AddressLine1`, `s0`.`BillingAddress_AddressLine2`, `s0`.`BillingAddress_ZipCode`, `s0`.`BillingAddress_Country_Code`, `s0`.`BillingAddress_Country_FullName`, `s0`.`BillingAddress_AddressLine10`, `s0`.`BillingAddress_AddressLine20`, `s0`.`BillingAddress_ZipCode0`, `s0`.`BillingAddress_Country_Code0`, `s0`.`BillingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0` + FROM ( + SELECT TOP @p `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `v0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `v0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `v0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `v0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + FROM `ValuedCustomer` AS `v`, + `ValuedCustomer` AS `v0` + ORDER BY `v`.`Id`, `v0`.`Id` + ) AS `s` +) AS `s0` +"""); + } + + public override async Task Union_of_same_entity_with_nested_complex_type_projected_twice_with_pushdown(bool async) + { + await base.Union_of_same_entity_with_nested_complex_type_projected_twice_with_pushdown(async); + + AssertSql( + """ +@p='50' + +SELECT TOP @p `u`.`Id`, `u`.`Name`, `u`.`BillingAddress_AddressLine1`, `u`.`BillingAddress_AddressLine2`, `u`.`BillingAddress_Tags`, `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_Country_Code`, `u`.`BillingAddress_Country_FullName`, `u`.`OptionalAddress_AddressLine1`, `u`.`OptionalAddress_AddressLine2`, `u`.`OptionalAddress_Tags`, `u`.`OptionalAddress_ZipCode`, `u`.`OptionalAddress_Country_Code`, `u`.`OptionalAddress_Country_FullName`, `u`.`ShippingAddress_AddressLine1`, `u`.`ShippingAddress_AddressLine2`, `u`.`ShippingAddress_Tags`, `u`.`ShippingAddress_ZipCode`, `u`.`ShippingAddress_Country_Code`, `u`.`ShippingAddress_Country_FullName`, `u`.`Id0`, `u`.`Name0`, `u`.`BillingAddress_AddressLine10`, `u`.`BillingAddress_AddressLine20`, `u`.`BillingAddress_Tags0`, `u`.`BillingAddress_ZipCode0`, `u`.`BillingAddress_Country_Code0`, `u`.`BillingAddress_Country_FullName0`, `u`.`OptionalAddress_AddressLine10`, `u`.`OptionalAddress_AddressLine20`, `u`.`OptionalAddress_Tags0`, `u`.`OptionalAddress_ZipCode0`, `u`.`OptionalAddress_Country_Code0`, `u`.`OptionalAddress_Country_FullName0`, `u`.`ShippingAddress_AddressLine10`, `u`.`ShippingAddress_AddressLine20`, `u`.`ShippingAddress_Tags0`, `u`.`ShippingAddress_ZipCode0`, `u`.`ShippingAddress_Country_Code0`, `u`.`ShippingAddress_Country_FullName0` +FROM ( + SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`OptionalAddress_AddressLine1` AS `OptionalAddress_AddressLine10`, `c0`.`OptionalAddress_AddressLine2` AS `OptionalAddress_AddressLine20`, `c0`.`OptionalAddress_Tags` AS `OptionalAddress_Tags0`, `c0`.`OptionalAddress_ZipCode` AS `OptionalAddress_ZipCode0`, `c0`.`OptionalAddress_Country_Code` AS `OptionalAddress_Country_Code0`, `c0`.`OptionalAddress_Country_FullName` AS `OptionalAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + FROM `Customer` AS `c`, + `Customer` AS `c0` + UNION + SELECT `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`OptionalAddress_AddressLine1`, `c1`.`OptionalAddress_AddressLine2`, `c1`.`OptionalAddress_Tags`, `c1`.`OptionalAddress_ZipCode`, `c1`.`OptionalAddress_Country_Code`, `c1`.`OptionalAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName`, `c2`.`Id` AS `Id0`, `c2`.`Name` AS `Name0`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c2`.`OptionalAddress_AddressLine1` AS `OptionalAddress_AddressLine10`, `c2`.`OptionalAddress_AddressLine2` AS `OptionalAddress_AddressLine20`, `c2`.`OptionalAddress_Tags` AS `OptionalAddress_Tags0`, `c2`.`OptionalAddress_ZipCode` AS `OptionalAddress_ZipCode0`, `c2`.`OptionalAddress_Country_Code` AS `OptionalAddress_Country_Code0`, `c2`.`OptionalAddress_Country_FullName` AS `OptionalAddress_Country_FullName0`, `c2`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c2`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c2`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c2`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c2`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c2`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + FROM `Customer` AS `c1`, + `Customer` AS `c2` +) AS `u` +ORDER BY `u`.`Id`, `u`.`Id0` +"""); + } + + public override async Task Union_of_same_entity_with_nested_complex_type_projected_twice_with_double_pushdown(bool async) + { + await base.Union_of_same_entity_with_nested_complex_type_projected_twice_with_double_pushdown(async); + + AssertSql( + """ +@p='50' + +SELECT TOP @p `u1`.`Id`, `u1`.`Name`, `u1`.`BillingAddress_AddressLine1`, `u1`.`BillingAddress_AddressLine2`, `u1`.`BillingAddress_Tags`, `u1`.`BillingAddress_ZipCode`, `u1`.`BillingAddress_Country_Code`, `u1`.`BillingAddress_Country_FullName`, `u1`.`OptionalAddress_AddressLine1`, `u1`.`OptionalAddress_AddressLine2`, `u1`.`OptionalAddress_Tags`, `u1`.`OptionalAddress_ZipCode`, `u1`.`OptionalAddress_Country_Code`, `u1`.`OptionalAddress_Country_FullName`, `u1`.`ShippingAddress_AddressLine1`, `u1`.`ShippingAddress_AddressLine2`, `u1`.`ShippingAddress_Tags`, `u1`.`ShippingAddress_ZipCode`, `u1`.`ShippingAddress_Country_Code`, `u1`.`ShippingAddress_Country_FullName`, `u1`.`Id0`, `u1`.`Name0`, `u1`.`BillingAddress_AddressLine10`, `u1`.`BillingAddress_AddressLine20`, `u1`.`BillingAddress_Tags0`, `u1`.`BillingAddress_ZipCode0`, `u1`.`BillingAddress_Country_Code0`, `u1`.`BillingAddress_Country_FullName0`, `u1`.`OptionalAddress_AddressLine10`, `u1`.`OptionalAddress_AddressLine20`, `u1`.`OptionalAddress_Tags0`, `u1`.`OptionalAddress_ZipCode0`, `u1`.`OptionalAddress_Country_Code0`, `u1`.`OptionalAddress_Country_FullName0`, `u1`.`ShippingAddress_AddressLine10`, `u1`.`ShippingAddress_AddressLine20`, `u1`.`ShippingAddress_Tags0`, `u1`.`ShippingAddress_ZipCode0`, `u1`.`ShippingAddress_Country_Code0`, `u1`.`ShippingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `u0`.`Id`, `u0`.`Name`, `u0`.`BillingAddress_AddressLine1`, `u0`.`BillingAddress_AddressLine2`, `u0`.`BillingAddress_Tags`, `u0`.`BillingAddress_ZipCode`, `u0`.`BillingAddress_Country_Code`, `u0`.`BillingAddress_Country_FullName`, `u0`.`OptionalAddress_AddressLine1`, `u0`.`OptionalAddress_AddressLine2`, `u0`.`OptionalAddress_Tags`, `u0`.`OptionalAddress_ZipCode`, `u0`.`OptionalAddress_Country_Code`, `u0`.`OptionalAddress_Country_FullName`, `u0`.`ShippingAddress_AddressLine1`, `u0`.`ShippingAddress_AddressLine2`, `u0`.`ShippingAddress_Tags`, `u0`.`ShippingAddress_ZipCode`, `u0`.`ShippingAddress_Country_Code`, `u0`.`ShippingAddress_Country_FullName`, `u0`.`Id0`, `u0`.`Name0`, `u0`.`BillingAddress_AddressLine10`, `u0`.`BillingAddress_AddressLine20`, `u0`.`BillingAddress_Tags0`, `u0`.`BillingAddress_ZipCode0`, `u0`.`BillingAddress_Country_Code0`, `u0`.`BillingAddress_Country_FullName0`, `u0`.`OptionalAddress_AddressLine10`, `u0`.`OptionalAddress_AddressLine20`, `u0`.`OptionalAddress_Tags0`, `u0`.`OptionalAddress_ZipCode0`, `u0`.`OptionalAddress_Country_Code0`, `u0`.`OptionalAddress_Country_FullName0`, `u0`.`ShippingAddress_AddressLine10`, `u0`.`ShippingAddress_AddressLine20`, `u0`.`ShippingAddress_Tags0`, `u0`.`ShippingAddress_ZipCode0`, `u0`.`ShippingAddress_Country_Code0`, `u0`.`ShippingAddress_Country_FullName0` + FROM ( + SELECT TOP @p `u`.`Id`, `u`.`Name`, `u`.`BillingAddress_AddressLine1`, `u`.`BillingAddress_AddressLine2`, `u`.`BillingAddress_Tags`, `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_Country_Code`, `u`.`BillingAddress_Country_FullName`, `u`.`OptionalAddress_AddressLine1`, `u`.`OptionalAddress_AddressLine2`, `u`.`OptionalAddress_Tags`, `u`.`OptionalAddress_ZipCode`, `u`.`OptionalAddress_Country_Code`, `u`.`OptionalAddress_Country_FullName`, `u`.`ShippingAddress_AddressLine1`, `u`.`ShippingAddress_AddressLine2`, `u`.`ShippingAddress_Tags`, `u`.`ShippingAddress_ZipCode`, `u`.`ShippingAddress_Country_Code`, `u`.`ShippingAddress_Country_FullName`, `u`.`Id0`, `u`.`Name0`, `u`.`BillingAddress_AddressLine10`, `u`.`BillingAddress_AddressLine20`, `u`.`BillingAddress_Tags0`, `u`.`BillingAddress_ZipCode0`, `u`.`BillingAddress_Country_Code0`, `u`.`BillingAddress_Country_FullName0`, `u`.`OptionalAddress_AddressLine10`, `u`.`OptionalAddress_AddressLine20`, `u`.`OptionalAddress_Tags0`, `u`.`OptionalAddress_ZipCode0`, `u`.`OptionalAddress_Country_Code0`, `u`.`OptionalAddress_Country_FullName0`, `u`.`ShippingAddress_AddressLine10`, `u`.`ShippingAddress_AddressLine20`, `u`.`ShippingAddress_Tags0`, `u`.`ShippingAddress_ZipCode0`, `u`.`ShippingAddress_Country_Code0`, `u`.`ShippingAddress_Country_FullName0` + FROM ( + SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`OptionalAddress_AddressLine1` AS `OptionalAddress_AddressLine10`, `c0`.`OptionalAddress_AddressLine2` AS `OptionalAddress_AddressLine20`, `c0`.`OptionalAddress_Tags` AS `OptionalAddress_Tags0`, `c0`.`OptionalAddress_ZipCode` AS `OptionalAddress_ZipCode0`, `c0`.`OptionalAddress_Country_Code` AS `OptionalAddress_Country_Code0`, `c0`.`OptionalAddress_Country_FullName` AS `OptionalAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + FROM `Customer` AS `c`, + `Customer` AS `c0` + UNION + SELECT `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`OptionalAddress_AddressLine1`, `c1`.`OptionalAddress_AddressLine2`, `c1`.`OptionalAddress_Tags`, `c1`.`OptionalAddress_ZipCode`, `c1`.`OptionalAddress_Country_Code`, `c1`.`OptionalAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName`, `c2`.`Id` AS `Id0`, `c2`.`Name` AS `Name0`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c2`.`OptionalAddress_AddressLine1` AS `OptionalAddress_AddressLine10`, `c2`.`OptionalAddress_AddressLine2` AS `OptionalAddress_AddressLine20`, `c2`.`OptionalAddress_Tags` AS `OptionalAddress_Tags0`, `c2`.`OptionalAddress_ZipCode` AS `OptionalAddress_ZipCode0`, `c2`.`OptionalAddress_Country_Code` AS `OptionalAddress_Country_Code0`, `c2`.`OptionalAddress_Country_FullName` AS `OptionalAddress_Country_FullName0`, `c2`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c2`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c2`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c2`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c2`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c2`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + FROM `Customer` AS `c1`, + `Customer` AS `c2` + ) AS `u` + ORDER BY `u`.`Id`, `u`.`Id0` + ) AS `u0` +) AS `u1` +ORDER BY `u1`.`Id`, `u1`.`Id0` +"""); + } + + public override async Task Union_of_same_nested_complex_type_projected_twice_with_pushdown(bool async) + { + await base.Union_of_same_nested_complex_type_projected_twice_with_pushdown(async); + + AssertSql( + """ +@p='50' + +SELECT TOP @p `u`.`BillingAddress_AddressLine1`, `u`.`BillingAddress_AddressLine2`, `u`.`BillingAddress_Tags`, `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_Country_Code`, `u`.`BillingAddress_Country_FullName`, `u`.`BillingAddress_AddressLine10`, `u`.`BillingAddress_AddressLine20`, `u`.`BillingAddress_Tags0`, `u`.`BillingAddress_ZipCode0`, `u`.`BillingAddress_Country_Code0`, `u`.`BillingAddress_Country_FullName0` +FROM ( + SELECT `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + FROM `Customer` AS `c`, + `Customer` AS `c0` + UNION + SELECT `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + FROM `Customer` AS `c1`, + `Customer` AS `c2` +) AS `u` +ORDER BY `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_ZipCode0` +"""); + } + + public override async Task Union_of_same_nested_complex_type_projected_twice_with_double_pushdown(bool async) + { + await base.Union_of_same_nested_complex_type_projected_twice_with_double_pushdown(async); + + AssertSql( + """ +@p='50' + +SELECT TOP @p `u1`.`BillingAddress_AddressLine1`, `u1`.`BillingAddress_AddressLine2`, `u1`.`BillingAddress_Tags`, `u1`.`BillingAddress_ZipCode`, `u1`.`BillingAddress_Country_Code`, `u1`.`BillingAddress_Country_FullName`, `u1`.`BillingAddress_AddressLine10`, `u1`.`BillingAddress_AddressLine20`, `u1`.`BillingAddress_Tags0`, `u1`.`BillingAddress_ZipCode0`, `u1`.`BillingAddress_Country_Code0`, `u1`.`BillingAddress_Country_FullName0` +FROM ( + SELECT DISTINCT `u0`.`BillingAddress_AddressLine1`, `u0`.`BillingAddress_AddressLine2`, `u0`.`BillingAddress_Tags`, `u0`.`BillingAddress_ZipCode`, `u0`.`BillingAddress_Country_Code`, `u0`.`BillingAddress_Country_FullName`, `u0`.`BillingAddress_AddressLine10`, `u0`.`BillingAddress_AddressLine20`, `u0`.`BillingAddress_Tags0`, `u0`.`BillingAddress_ZipCode0`, `u0`.`BillingAddress_Country_Code0`, `u0`.`BillingAddress_Country_FullName0` + FROM ( + SELECT TOP @p `u`.`BillingAddress_AddressLine1`, `u`.`BillingAddress_AddressLine2`, `u`.`BillingAddress_Tags`, `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_Country_Code`, `u`.`BillingAddress_Country_FullName`, `u`.`BillingAddress_AddressLine10`, `u`.`BillingAddress_AddressLine20`, `u`.`BillingAddress_Tags0`, `u`.`BillingAddress_ZipCode0`, `u`.`BillingAddress_Country_Code0`, `u`.`BillingAddress_Country_FullName0` + FROM ( + SELECT `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + FROM `Customer` AS `c`, + `Customer` AS `c0` + UNION + SELECT `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + FROM `Customer` AS `c1`, + `Customer` AS `c2` + ) AS `u` + ORDER BY `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_ZipCode0` + ) AS `u0` +) AS `u1` +ORDER BY `u1`.`BillingAddress_ZipCode`, `u1`.`BillingAddress_ZipCode0` +"""); + } + + public override async Task Same_entity_with_complex_type_projected_twice_with_pushdown_as_part_of_another_projection(bool async) + { + await base.Same_entity_with_complex_type_projected_twice_with_pushdown_as_part_of_another_projection(async); + + AssertSql( +""" +SELECT [c].[Id], [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName], [t].[Id0], [t].[Name0], [t].[BillingAddress_AddressLine10], [t].[BillingAddress_AddressLine20], [t].[BillingAddress_ZipCode0], [t].[BillingAddress_Country_Code0], [t].[BillingAddress_Country_FullName0], [t].[ShippingAddress_AddressLine10], [t].[ShippingAddress_AddressLine20], [t].[ShippingAddress_ZipCode0], [t].[ShippingAddress_Country_Code0], [t].[ShippingAddress_Country_FullName0], [t].[c] +FROM [Customer] AS [c] +OUTER APPLY ( + SELECT TOP(1) [c0].[Id], [c0].[Name], [c0].[BillingAddress_AddressLine1], [c0].[BillingAddress_AddressLine2], [c0].[BillingAddress_ZipCode], [c0].[BillingAddress_Country_Code], [c0].[BillingAddress_Country_FullName], [c0].[ShippingAddress_AddressLine1], [c0].[ShippingAddress_AddressLine2], [c0].[ShippingAddress_ZipCode], [c0].[ShippingAddress_Country_Code], [c0].[ShippingAddress_Country_FullName], [c1].[Id] AS [Id0], [c1].[Name] AS [Name0], [c1].[BillingAddress_AddressLine1] AS [BillingAddress_AddressLine10], [c1].[BillingAddress_AddressLine2] AS [BillingAddress_AddressLine20], [c1].[BillingAddress_ZipCode] AS [BillingAddress_ZipCode0], [c1].[BillingAddress_Country_Code] AS [BillingAddress_Country_Code0], [c1].[BillingAddress_Country_FullName] AS [BillingAddress_Country_FullName0], [c1].[ShippingAddress_AddressLine1] AS [ShippingAddress_AddressLine10], [c1].[ShippingAddress_AddressLine2] AS [ShippingAddress_AddressLine20], [c1].[ShippingAddress_ZipCode] AS [ShippingAddress_ZipCode0], [c1].[ShippingAddress_Country_Code] AS [ShippingAddress_Country_Code0], [c1].[ShippingAddress_Country_FullName] AS [ShippingAddress_Country_FullName0], 1 AS [c] + FROM [Customer] AS [c0] + CROSS JOIN [Customer] AS [c1] + ORDER BY [c0].[Id], [c1].[Id] DESC +) AS [t] +"""); + } + + public override async Task Same_complex_type_projected_twice_with_pushdown_as_part_of_another_projection(bool async) + { + await base.Same_complex_type_projected_twice_with_pushdown_as_part_of_another_projection(async); + + AssertSql(""); + } + + #region GroupBy + + public override async Task GroupBy_over_property_in_nested_complex_type(bool async) + { + await base.GroupBy_over_property_in_nested_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_Country_Code` AS `Code`, COUNT(*) AS `Count` +FROM `Customer` AS `c` +GROUP BY `c`.`ShippingAddress_Country_Code` +"""); + } + + public override async Task GroupBy_over_complex_type(bool async) + { + await base.GroupBy_over_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, COUNT(*) AS `Count` +FROM `Customer` AS `c` +GROUP BY `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +"""); + } + + public override async Task GroupBy_over_nested_complex_type(bool async) + { + await base.GroupBy_over_nested_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, COUNT(*) AS `Count` +FROM `Customer` AS `c` +GROUP BY `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +"""); + } + + public override async Task Entity_with_complex_type_with_group_by_and_first(bool async) + { + await base.Entity_with_complex_type_with_group_by_and_first(async); + + AssertSql( + """ +SELECT [c3].[Id], [c3].[Name], [c3].[BillingAddress_AddressLine1], [c3].[BillingAddress_AddressLine2], [c3].[BillingAddress_Tags], [c3].[BillingAddress_ZipCode], [c3].[BillingAddress_Country_Code], [c3].[BillingAddress_Country_FullName], [c3].[ShippingAddress_AddressLine1], [c3].[ShippingAddress_AddressLine2], [c3].[ShippingAddress_Tags], [c3].[ShippingAddress_ZipCode], [c3].[ShippingAddress_Country_Code], [c3].[ShippingAddress_Country_FullName] +FROM ( + SELECT [c].[Id] + FROM [Customer] AS [c] + GROUP BY [c].[Id] +) AS [c1] +LEFT JOIN ( + SELECT [c2].[Id], [c2].[Name], [c2].[BillingAddress_AddressLine1], [c2].[BillingAddress_AddressLine2], [c2].[BillingAddress_Tags], [c2].[BillingAddress_ZipCode], [c2].[BillingAddress_Country_Code], [c2].[BillingAddress_Country_FullName], [c2].[ShippingAddress_AddressLine1], [c2].[ShippingAddress_AddressLine2], [c2].[ShippingAddress_Tags], [c2].[ShippingAddress_ZipCode], [c2].[ShippingAddress_Country_Code], [c2].[ShippingAddress_Country_FullName] + FROM ( + SELECT [c0].[Id], [c0].[Name], [c0].[BillingAddress_AddressLine1], [c0].[BillingAddress_AddressLine2], [c0].[BillingAddress_Tags], [c0].[BillingAddress_ZipCode], [c0].[BillingAddress_Country_Code], [c0].[BillingAddress_Country_FullName], [c0].[ShippingAddress_AddressLine1], [c0].[ShippingAddress_AddressLine2], [c0].[ShippingAddress_Tags], [c0].[ShippingAddress_ZipCode], [c0].[ShippingAddress_Country_Code], [c0].[ShippingAddress_Country_FullName], ROW_NUMBER() OVER(PARTITION BY [c0].[Id] ORDER BY [c0].[Id]) AS [row] + FROM [Customer] AS [c0] + ) AS [c2] + WHERE [c2].[row] <= 1 +) AS [c3] ON [c1].[Id] = [c3].[Id] +"""); + } + + #endregion GroupBy + + public override async Task Projecting_property_of_complex_type_using_left_join_with_pushdown(bool async) + { + await base.Projecting_property_of_complex_type_using_left_join_with_pushdown(async); + + AssertSql( + """ +SELECT `c1`.`BillingAddress_ZipCode` +FROM `CustomerGroup` AS `c` +LEFT JOIN ( + SELECT `c0`.`Id`, `c0`.`BillingAddress_ZipCode` + FROM `Customer` AS `c0` + WHERE `c0`.`Id` > 5 +) AS `c1` ON `c`.`Id` = `c1`.`Id` +"""); + } + + public override async Task Projecting_complex_from_optional_navigation_using_conditional(bool async) + { + await base.Projecting_complex_from_optional_navigation_using_conditional(async); + + AssertSql( + """ +@p='20' + +SELECT `s0`.`ShippingAddress_ZipCode` +FROM ( + SELECT DISTINCT `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_Tags`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName` + FROM ( + SELECT TOP @p `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` + FROM `CustomerGroup` AS `c` + LEFT JOIN `Customer` AS `c0` ON `c`.`OptionalCustomerId` = `c0`.`Id` + ORDER BY `c0`.`ShippingAddress_ZipCode` + ) AS `s` +) AS `s0` +"""); + } + + public override async Task Project_entity_with_complex_type_pushdown_and_then_left_join(bool async) + { + await base.Project_entity_with_complex_type_pushdown_and_then_left_join(async); + + AssertSql( + """ +@p='20' +@p1='30' + +SELECT `c3`.`BillingAddress_ZipCode` AS `Zip1`, `c4`.`ShippingAddress_ZipCode` AS `Zip2` +FROM ( + SELECT DISTINCT `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`OptionalAddress_AddressLine1`, `c0`.`OptionalAddress_AddressLine2`, `c0`.`OptionalAddress_Tags`, `c0`.`OptionalAddress_ZipCode`, `c0`.`OptionalAddress_Country_Code`, `c0`.`OptionalAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` + FROM ( + SELECT TOP @p `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`OptionalAddress_AddressLine1`, `c`.`OptionalAddress_AddressLine2`, `c`.`OptionalAddress_Tags`, `c`.`OptionalAddress_ZipCode`, `c`.`OptionalAddress_Country_Code`, `c`.`OptionalAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` + FROM `Customer` AS `c` + ORDER BY `c`.`Id` + ) AS `c0` +) AS `c3` +LEFT JOIN ( + SELECT DISTINCT `c2`.`Id`, `c2`.`Name`, `c2`.`BillingAddress_AddressLine1`, `c2`.`BillingAddress_AddressLine2`, `c2`.`BillingAddress_Tags`, `c2`.`BillingAddress_ZipCode`, `c2`.`BillingAddress_Country_Code`, `c2`.`BillingAddress_Country_FullName`, `c2`.`OptionalAddress_AddressLine1`, `c2`.`OptionalAddress_AddressLine2`, `c2`.`OptionalAddress_Tags`, `c2`.`OptionalAddress_ZipCode`, `c2`.`OptionalAddress_Country_Code`, `c2`.`OptionalAddress_Country_FullName`, `c2`.`ShippingAddress_AddressLine1`, `c2`.`ShippingAddress_AddressLine2`, `c2`.`ShippingAddress_Tags`, `c2`.`ShippingAddress_ZipCode`, `c2`.`ShippingAddress_Country_Code`, `c2`.`ShippingAddress_Country_FullName` + FROM ( + SELECT TOP @p1 `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`OptionalAddress_AddressLine1`, `c1`.`OptionalAddress_AddressLine2`, `c1`.`OptionalAddress_Tags`, `c1`.`OptionalAddress_ZipCode`, `c1`.`OptionalAddress_Country_Code`, `c1`.`OptionalAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName` + FROM `Customer` AS `c1` + ORDER BY `c1`.`Id` DESC + ) AS `c2` +) AS `c4` ON `c3`.`Id` = `c4`.`Id` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class ComplexTypeQueryLibRedFixture : ComplexTypeQueryRelationalFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/CompositeKeysQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/CompositeKeysQueryLibRedFixture.cs new file mode 100644 index 00000000..969516ce --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/CompositeKeysQueryLibRedFixture.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class CompositeKeysQueryLibRedFixture : CompositeKeysQueryRelationalFixtureBase +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/CompositeKeysQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/CompositeKeysQueryLibRedTest.cs new file mode 100644 index 00000000..fd726a62 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/CompositeKeysQueryLibRedTest.cs @@ -0,0 +1,184 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class CompositeKeysQueryLibRedTest : CompositeKeysQueryRelationalTestBase +{ + public CompositeKeysQueryLibRedTest( + CompositeKeysQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + //Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Projecting_multiple_collections_same_level_top_level_ordering(bool async) + { + await base.Projecting_multiple_collections_same_level_top_level_ordering(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c1`.`Id1`, `c1`.`Id2`, `c1`.`Date`, `c1`.`Level1_Optional_Id1`, `c1`.`Level1_Optional_Id2`, `c1`.`Level1_Required_Id1`, `c1`.`Level1_Required_Id2`, `c1`.`Name`, `c1`.`OneToMany_Optional_Inverse2Id1`, `c1`.`OneToMany_Optional_Inverse2Id2`, `c1`.`OneToMany_Optional_Self_Inverse2Id1`, `c1`.`OneToMany_Optional_Self_Inverse2Id2`, `c1`.`OneToMany_Required_Inverse2Id1`, `c1`.`OneToMany_Required_Inverse2Id2`, `c1`.`OneToMany_Required_Self_Inverse2Id1`, `c1`.`OneToMany_Required_Self_Inverse2Id2`, `c1`.`OneToOne_Optional_PK_Inverse2Id1`, `c1`.`OneToOne_Optional_PK_Inverse2Id2`, `c1`.`OneToOne_Optional_Self2Id1`, `c1`.`OneToOne_Optional_Self2Id2` +FROM (`CompositeOnes` AS `c` +LEFT JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeTwos` AS `c1` ON `c`.`Id1` = `c1`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c1`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1` +"""); + } + + public override async Task Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(bool async) + { + await base.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c1`.`Id1`, `c1`.`Id2`, `c1`.`Date`, `c1`.`Level1_Optional_Id1`, `c1`.`Level1_Optional_Id2`, `c1`.`Level1_Required_Id1`, `c1`.`Level1_Required_Id2`, `c1`.`Name`, `c1`.`OneToMany_Optional_Inverse2Id1`, `c1`.`OneToMany_Optional_Inverse2Id2`, `c1`.`OneToMany_Optional_Self_Inverse2Id1`, `c1`.`OneToMany_Optional_Self_Inverse2Id2`, `c1`.`OneToMany_Required_Inverse2Id1`, `c1`.`OneToMany_Required_Inverse2Id2`, `c1`.`OneToMany_Required_Self_Inverse2Id1`, `c1`.`OneToMany_Required_Self_Inverse2Id2`, `c1`.`OneToOne_Optional_PK_Inverse2Id1`, `c1`.`OneToOne_Optional_PK_Inverse2Id2`, `c1`.`OneToOne_Optional_Self2Id1`, `c1`.`OneToOne_Optional_Self2Id2` +FROM (`CompositeOnes` AS `c` +LEFT JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeTwos` AS `c1` ON `c`.`Id1` = `c1`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c1`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1` DESC, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1` +"""); + } + + public override async Task Projecting_multiple_collections_with_ordering_same_level(bool async) + { + await base.Projecting_multiple_collections_with_ordering_same_level(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c1`.`Id1`, `c1`.`Id2`, `c1`.`Date`, `c1`.`Level1_Optional_Id1`, `c1`.`Level1_Optional_Id2`, `c1`.`Level1_Required_Id1`, `c1`.`Level1_Required_Id2`, `c1`.`Name`, `c1`.`OneToMany_Optional_Inverse2Id1`, `c1`.`OneToMany_Optional_Inverse2Id2`, `c1`.`OneToMany_Optional_Self_Inverse2Id1`, `c1`.`OneToMany_Optional_Self_Inverse2Id2`, `c1`.`OneToMany_Required_Inverse2Id1`, `c1`.`OneToMany_Required_Inverse2Id2`, `c1`.`OneToMany_Required_Self_Inverse2Id1`, `c1`.`OneToMany_Required_Self_Inverse2Id2`, `c1`.`OneToOne_Optional_PK_Inverse2Id1`, `c1`.`OneToOne_Optional_PK_Inverse2Id2`, `c1`.`OneToOne_Optional_Self2Id1`, `c1`.`OneToOne_Optional_Self2Id2` +FROM (`CompositeOnes` AS `c` +LEFT JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeTwos` AS `c1` ON `c`.`Id1` = `c1`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c1`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id2`, `c0`.`Id1`, `c1`.`Name` DESC, `c1`.`Id1` +"""); + } + + public override async Task Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(bool async) + { + await base.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c1`.`Id1`, `c1`.`Id2`, `c1`.`Date`, `c1`.`Level1_Optional_Id1`, `c1`.`Level1_Optional_Id2`, `c1`.`Level1_Required_Id1`, `c1`.`Level1_Required_Id2`, `c1`.`Name`, `c1`.`OneToMany_Optional_Inverse2Id1`, `c1`.`OneToMany_Optional_Inverse2Id2`, `c1`.`OneToMany_Optional_Self_Inverse2Id1`, `c1`.`OneToMany_Optional_Self_Inverse2Id2`, `c1`.`OneToMany_Required_Inverse2Id1`, `c1`.`OneToMany_Required_Inverse2Id2`, `c1`.`OneToMany_Required_Self_Inverse2Id1`, `c1`.`OneToMany_Required_Self_Inverse2Id2`, `c1`.`OneToOne_Optional_PK_Inverse2Id1`, `c1`.`OneToOne_Optional_PK_Inverse2Id2`, `c1`.`OneToOne_Optional_Self2Id1`, `c1`.`OneToOne_Optional_Self2Id2` +FROM (`CompositeOnes` AS `c` +LEFT JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeTwos` AS `c1` ON `c`.`Id1` = `c1`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c1`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `c0`.`Id2`, `c0`.`Id1`, `c1`.`Name` DESC, `c1`.`Id1` +"""); + } + + public override async Task Projecting_collections_multi_level(bool async) + { + await base.Projecting_collections_multi_level(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `s`.`Name`, `s`.`Id1`, `s`.`Id2`, `s`.`Id10`, `s`.`Id20`, `s`.`Level2_Optional_Id1`, `s`.`Level2_Optional_Id2`, `s`.`Level2_Required_Id1`, `s`.`Level2_Required_Id2`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id1`, `s`.`OneToMany_Optional_Inverse3Id2`, `s`.`OneToMany_Optional_Self_Inverse3Id1`, `s`.`OneToMany_Optional_Self_Inverse3Id2`, `s`.`OneToMany_Required_Inverse3Id1`, `s`.`OneToMany_Required_Inverse3Id2`, `s`.`OneToMany_Required_Self_Inverse3Id1`, `s`.`OneToMany_Required_Self_Inverse3Id2`, `s`.`OneToOne_Optional_PK_Inverse3Id1`, `s`.`OneToOne_Optional_PK_Inverse3Id2`, `s`.`OneToOne_Optional_Self3Id1`, `s`.`OneToOne_Optional_Self3Id2` +FROM `CompositeOnes` AS `c` +LEFT JOIN ( + SELECT `c0`.`Name`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1` AS `Id10`, `c1`.`Id2` AS `Id20`, `c1`.`Level2_Optional_Id1`, `c1`.`Level2_Optional_Id2`, `c1`.`Level2_Required_Id1`, `c1`.`Level2_Required_Id2`, `c1`.`Name` AS `Name0`, `c1`.`OneToMany_Optional_Inverse3Id1`, `c1`.`OneToMany_Optional_Inverse3Id2`, `c1`.`OneToMany_Optional_Self_Inverse3Id1`, `c1`.`OneToMany_Optional_Self_Inverse3Id2`, `c1`.`OneToMany_Required_Inverse3Id1`, `c1`.`OneToMany_Required_Inverse3Id2`, `c1`.`OneToMany_Required_Self_Inverse3Id1`, `c1`.`OneToMany_Required_Self_Inverse3Id2`, `c1`.`OneToOne_Optional_PK_Inverse3Id1`, `c1`.`OneToOne_Optional_PK_Inverse3Id2`, `c1`.`OneToOne_Optional_Self3Id1`, `c1`.`OneToOne_Optional_Self3Id2`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2` + FROM `CompositeTwos` AS `c0` + LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Required_Inverse3Id2` +) AS `s` ON `c`.`Id1` = `s`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `s`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `s`.`Id2`, `s`.`Id1`, `s`.`Id20` DESC +"""); + } + + public override async Task Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(bool async) + { + await base.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `s1`.`Name`, `s1`.`Id1`, `s1`.`Id2`, `s1`.`Name0`, `s1`.`Id10`, `s1`.`Id20`, `s1`.`Id100`, `s1`.`Id200`, `s1`.`Level3_Optional_Id1`, `s1`.`Level3_Optional_Id2`, `s1`.`Level3_Required_Id1`, `s1`.`Level3_Required_Id2`, `s1`.`Name00`, `s1`.`OneToMany_Optional_Inverse4Id1`, `s1`.`OneToMany_Optional_Inverse4Id2`, `s1`.`OneToMany_Optional_Self_Inverse4Id1`, `s1`.`OneToMany_Optional_Self_Inverse4Id2`, `s1`.`OneToMany_Required_Inverse4Id1`, `s1`.`OneToMany_Required_Inverse4Id2`, `s1`.`OneToMany_Required_Self_Inverse4Id1`, `s1`.`OneToMany_Required_Self_Inverse4Id2`, `s1`.`OneToOne_Optional_PK_Inverse4Id1`, `s1`.`OneToOne_Optional_PK_Inverse4Id2`, `s1`.`OneToOne_Optional_Self4Id1`, `s1`.`OneToOne_Optional_Self4Id2`, `s1`.`Id11`, `s1`.`Id21`, `s1`.`Level3_Optional_Id10`, `s1`.`Level3_Optional_Id20`, `s1`.`Level3_Required_Id10`, `s1`.`Level3_Required_Id20`, `s1`.`Name1`, `s1`.`OneToMany_Optional_Inverse4Id10`, `s1`.`OneToMany_Optional_Inverse4Id20`, `s1`.`OneToMany_Optional_Self_Inverse4Id10`, `s1`.`OneToMany_Optional_Self_Inverse4Id20`, `s1`.`OneToMany_Required_Inverse4Id10`, `s1`.`OneToMany_Required_Inverse4Id20`, `s1`.`OneToMany_Required_Self_Inverse4Id10`, `s1`.`OneToMany_Required_Self_Inverse4Id20`, `s1`.`OneToOne_Optional_PK_Inverse4Id10`, `s1`.`OneToOne_Optional_PK_Inverse4Id20`, `s1`.`OneToOne_Optional_Self4Id10`, `s1`.`OneToOne_Optional_Self4Id20`, `s1`.`Name2`, `s1`.`Id12`, `s1`.`Id22`, `s1`.`Id101`, `s1`.`Id201`, `s1`.`Level3_Optional_Id11`, `s1`.`Level3_Optional_Id21`, `s1`.`Level3_Required_Id11`, `s1`.`Level3_Required_Id21`, `s1`.`Name01`, `s1`.`OneToMany_Optional_Inverse4Id11`, `s1`.`OneToMany_Optional_Inverse4Id21`, `s1`.`OneToMany_Optional_Self_Inverse4Id11`, `s1`.`OneToMany_Optional_Self_Inverse4Id21`, `s1`.`OneToMany_Required_Inverse4Id11`, `s1`.`OneToMany_Required_Inverse4Id21`, `s1`.`OneToMany_Required_Self_Inverse4Id11`, `s1`.`OneToMany_Required_Self_Inverse4Id21`, `s1`.`OneToOne_Optional_PK_Inverse4Id11`, `s1`.`OneToOne_Optional_PK_Inverse4Id21`, `s1`.`OneToOne_Optional_Self4Id11`, `s1`.`OneToOne_Optional_Self4Id21`, `s1`.`Id110`, `s1`.`Id210`, `s1`.`Level3_Optional_Id100`, `s1`.`Level3_Optional_Id200`, `s1`.`Level3_Required_Id100`, `s1`.`Level3_Required_Id200`, `s1`.`Name10`, `s1`.`OneToMany_Optional_Inverse4Id100`, `s1`.`OneToMany_Optional_Inverse4Id200`, `s1`.`OneToMany_Optional_Self_Inverse4Id100`, `s1`.`OneToMany_Optional_Self_Inverse4Id200`, `s1`.`OneToMany_Required_Inverse4Id100`, `s1`.`OneToMany_Required_Inverse4Id200`, `s1`.`OneToMany_Required_Self_Inverse4Id100`, `s1`.`OneToMany_Required_Self_Inverse4Id200`, `s1`.`OneToOne_Optional_PK_Inverse4Id100`, `s1`.`OneToOne_Optional_PK_Inverse4Id200`, `s1`.`OneToOne_Optional_Self4Id100`, `s1`.`OneToOne_Optional_Self4Id200`, `s4`.`Name`, `s4`.`Id1`, `s4`.`Id2`, `s4`.`Name0`, `s4`.`Id10`, `s4`.`Id20`, `s4`.`Id100`, `s4`.`Id200`, `s4`.`Level3_Optional_Id1`, `s4`.`Level3_Optional_Id2`, `s4`.`Level3_Required_Id1`, `s4`.`Level3_Required_Id2`, `s4`.`Name00`, `s4`.`OneToMany_Optional_Inverse4Id1`, `s4`.`OneToMany_Optional_Inverse4Id2`, `s4`.`OneToMany_Optional_Self_Inverse4Id1`, `s4`.`OneToMany_Optional_Self_Inverse4Id2`, `s4`.`OneToMany_Required_Inverse4Id1`, `s4`.`OneToMany_Required_Inverse4Id2`, `s4`.`OneToMany_Required_Self_Inverse4Id1`, `s4`.`OneToMany_Required_Self_Inverse4Id2`, `s4`.`OneToOne_Optional_PK_Inverse4Id1`, `s4`.`OneToOne_Optional_PK_Inverse4Id2`, `s4`.`OneToOne_Optional_Self4Id1`, `s4`.`OneToOne_Optional_Self4Id2`, `s4`.`Id11`, `s4`.`Id21`, `s4`.`Level3_Optional_Id10`, `s4`.`Level3_Optional_Id20`, `s4`.`Level3_Required_Id10`, `s4`.`Level3_Required_Id20`, `s4`.`Name1`, `s4`.`OneToMany_Optional_Inverse4Id10`, `s4`.`OneToMany_Optional_Inverse4Id20`, `s4`.`OneToMany_Optional_Self_Inverse4Id10`, `s4`.`OneToMany_Optional_Self_Inverse4Id20`, `s4`.`OneToMany_Required_Inverse4Id10`, `s4`.`OneToMany_Required_Inverse4Id20`, `s4`.`OneToMany_Required_Self_Inverse4Id10`, `s4`.`OneToMany_Required_Self_Inverse4Id20`, `s4`.`OneToOne_Optional_PK_Inverse4Id10`, `s4`.`OneToOne_Optional_PK_Inverse4Id20`, `s4`.`OneToOne_Optional_Self4Id10`, `s4`.`OneToOne_Optional_Self4Id20`, `s4`.`Name2`, `s4`.`Id12`, `s4`.`Id22`, `s4`.`Id101`, `s4`.`Id201`, `s4`.`Level3_Optional_Id11`, `s4`.`Level3_Optional_Id21`, `s4`.`Level3_Required_Id11`, `s4`.`Level3_Required_Id21`, `s4`.`Name01`, `s4`.`OneToMany_Optional_Inverse4Id11`, `s4`.`OneToMany_Optional_Inverse4Id21`, `s4`.`OneToMany_Optional_Self_Inverse4Id11`, `s4`.`OneToMany_Optional_Self_Inverse4Id21`, `s4`.`OneToMany_Required_Inverse4Id11`, `s4`.`OneToMany_Required_Inverse4Id21`, `s4`.`OneToMany_Required_Self_Inverse4Id11`, `s4`.`OneToMany_Required_Self_Inverse4Id21`, `s4`.`OneToOne_Optional_PK_Inverse4Id11`, `s4`.`OneToOne_Optional_PK_Inverse4Id21`, `s4`.`OneToOne_Optional_Self4Id11`, `s4`.`OneToOne_Optional_Self4Id21`, `s4`.`Id110`, `s4`.`Id210`, `s4`.`Level3_Optional_Id100`, `s4`.`Level3_Optional_Id200`, `s4`.`Level3_Required_Id100`, `s4`.`Level3_Required_Id200`, `s4`.`Name10`, `s4`.`OneToMany_Optional_Inverse4Id100`, `s4`.`OneToMany_Optional_Inverse4Id200`, `s4`.`OneToMany_Optional_Self_Inverse4Id100`, `s4`.`OneToMany_Optional_Self_Inverse4Id200`, `s4`.`OneToMany_Required_Inverse4Id100`, `s4`.`OneToMany_Required_Inverse4Id200`, `s4`.`OneToMany_Required_Self_Inverse4Id100`, `s4`.`OneToMany_Required_Self_Inverse4Id200`, `s4`.`OneToOne_Optional_PK_Inverse4Id100`, `s4`.`OneToOne_Optional_PK_Inverse4Id200`, `s4`.`OneToOne_Optional_Self4Id100`, `s4`.`OneToOne_Optional_Self4Id200` +FROM (`CompositeOnes` AS `c` +LEFT JOIN ( + SELECT `c0`.`Name`, `c0`.`Id1`, `c0`.`Id2`, `s`.`Name` AS `Name0`, `s`.`Id1` AS `Id10`, `s`.`Id2` AS `Id20`, `s`.`Id10` AS `Id100`, `s`.`Id20` AS `Id200`, `s`.`Level3_Optional_Id1`, `s`.`Level3_Optional_Id2`, `s`.`Level3_Required_Id1`, `s`.`Level3_Required_Id2`, `s`.`Name0` AS `Name00`, `s`.`OneToMany_Optional_Inverse4Id1`, `s`.`OneToMany_Optional_Inverse4Id2`, `s`.`OneToMany_Optional_Self_Inverse4Id1`, `s`.`OneToMany_Optional_Self_Inverse4Id2`, `s`.`OneToMany_Required_Inverse4Id1`, `s`.`OneToMany_Required_Inverse4Id2`, `s`.`OneToMany_Required_Self_Inverse4Id1`, `s`.`OneToMany_Required_Self_Inverse4Id2`, `s`.`OneToOne_Optional_PK_Inverse4Id1`, `s`.`OneToOne_Optional_PK_Inverse4Id2`, `s`.`OneToOne_Optional_Self4Id1`, `s`.`OneToOne_Optional_Self4Id2`, `s`.`Id11`, `s`.`Id21`, `s`.`Level3_Optional_Id10`, `s`.`Level3_Optional_Id20`, `s`.`Level3_Required_Id10`, `s`.`Level3_Required_Id20`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id10`, `s`.`OneToMany_Optional_Inverse4Id20`, `s`.`OneToMany_Optional_Self_Inverse4Id10`, `s`.`OneToMany_Optional_Self_Inverse4Id20`, `s`.`OneToMany_Required_Inverse4Id10`, `s`.`OneToMany_Required_Inverse4Id20`, `s`.`OneToMany_Required_Self_Inverse4Id10`, `s`.`OneToMany_Required_Self_Inverse4Id20`, `s`.`OneToOne_Optional_PK_Inverse4Id10`, `s`.`OneToOne_Optional_PK_Inverse4Id20`, `s`.`OneToOne_Optional_Self4Id10`, `s`.`OneToOne_Optional_Self4Id20`, `s0`.`Name` AS `Name2`, `s0`.`Id1` AS `Id12`, `s0`.`Id2` AS `Id22`, `s0`.`Id10` AS `Id101`, `s0`.`Id20` AS `Id201`, `s0`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `s0`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `s0`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `s0`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `s0`.`Name0` AS `Name01`, `s0`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `s0`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `s0`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `s0`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `s0`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `s0`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `s0`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `s0`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `s0`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `s0`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `s0`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `s0`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `s0`.`Id11` AS `Id110`, `s0`.`Id21` AS `Id210`, `s0`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `s0`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `s0`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `s0`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `s0`.`Name1` AS `Name10`, `s0`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `s0`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `s0`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `s0`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `s0`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `s0`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `s0`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `s0`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `s0`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `s0`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `s0`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `s0`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2` + FROM (`CompositeTwos` AS `c0` + LEFT JOIN ( + SELECT `c1`.`Name`, `c1`.`Id1`, `c1`.`Id2`, `c2`.`Id1` AS `Id10`, `c2`.`Id2` AS `Id20`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name` AS `Name0`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c3`.`Id1` AS `Id11`, `c3`.`Id2` AS `Id21`, `c3`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c3`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c3`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c3`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c3`.`Name` AS `Name1`, `c3`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c3`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c3`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c3`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c3`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c3`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c3`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c3`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c3`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c3`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c3`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c3`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c1`.`OneToMany_Required_Inverse3Id1`, `c1`.`OneToMany_Required_Inverse3Id2` + FROM (`CompositeThrees` AS `c1` + LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2`) + LEFT JOIN `CompositeFours` AS `c3` ON `c1`.`Id1` = `c3`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c3`.`OneToMany_Required_Inverse4Id2` + ) AS `s` ON `c0`.`Id1` = `s`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `s`.`OneToMany_Required_Inverse3Id2`) + LEFT JOIN ( + SELECT `c4`.`Name`, `c4`.`Id1`, `c4`.`Id2`, `c5`.`Id1` AS `Id10`, `c5`.`Id2` AS `Id20`, `c5`.`Level3_Optional_Id1`, `c5`.`Level3_Optional_Id2`, `c5`.`Level3_Required_Id1`, `c5`.`Level3_Required_Id2`, `c5`.`Name` AS `Name0`, `c5`.`OneToMany_Optional_Inverse4Id1`, `c5`.`OneToMany_Optional_Inverse4Id2`, `c5`.`OneToMany_Optional_Self_Inverse4Id1`, `c5`.`OneToMany_Optional_Self_Inverse4Id2`, `c5`.`OneToMany_Required_Inverse4Id1`, `c5`.`OneToMany_Required_Inverse4Id2`, `c5`.`OneToMany_Required_Self_Inverse4Id1`, `c5`.`OneToMany_Required_Self_Inverse4Id2`, `c5`.`OneToOne_Optional_PK_Inverse4Id1`, `c5`.`OneToOne_Optional_PK_Inverse4Id2`, `c5`.`OneToOne_Optional_Self4Id1`, `c5`.`OneToOne_Optional_Self4Id2`, `c6`.`Id1` AS `Id11`, `c6`.`Id2` AS `Id21`, `c6`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c6`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c6`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c6`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c6`.`Name` AS `Name1`, `c6`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c6`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c6`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c6`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c6`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c6`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c6`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c6`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c6`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c6`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c6`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c6`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c4`.`OneToMany_Optional_Inverse3Id1`, `c4`.`OneToMany_Optional_Inverse3Id2` + FROM (`CompositeThrees` AS `c4` + LEFT JOIN `CompositeFours` AS `c5` ON `c4`.`Id1` = `c5`.`OneToMany_Required_Inverse4Id1` AND `c4`.`Id2` = `c5`.`OneToMany_Required_Inverse4Id2`) + LEFT JOIN `CompositeFours` AS `c6` ON `c4`.`Id1` = `c6`.`OneToMany_Optional_Inverse4Id1` AND `c4`.`Id2` = `c6`.`OneToMany_Optional_Inverse4Id2` + ) AS `s0` ON `c0`.`Id1` = `s0`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `s0`.`OneToMany_Optional_Inverse3Id2` +) AS `s1` ON `c`.`Id1` = `s1`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `s1`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN ( + SELECT `c7`.`Name`, `c7`.`Id1`, `c7`.`Id2`, `s2`.`Name` AS `Name0`, `s2`.`Id1` AS `Id10`, `s2`.`Id2` AS `Id20`, `s2`.`Id10` AS `Id100`, `s2`.`Id20` AS `Id200`, `s2`.`Level3_Optional_Id1`, `s2`.`Level3_Optional_Id2`, `s2`.`Level3_Required_Id1`, `s2`.`Level3_Required_Id2`, `s2`.`Name0` AS `Name00`, `s2`.`OneToMany_Optional_Inverse4Id1`, `s2`.`OneToMany_Optional_Inverse4Id2`, `s2`.`OneToMany_Optional_Self_Inverse4Id1`, `s2`.`OneToMany_Optional_Self_Inverse4Id2`, `s2`.`OneToMany_Required_Inverse4Id1`, `s2`.`OneToMany_Required_Inverse4Id2`, `s2`.`OneToMany_Required_Self_Inverse4Id1`, `s2`.`OneToMany_Required_Self_Inverse4Id2`, `s2`.`OneToOne_Optional_PK_Inverse4Id1`, `s2`.`OneToOne_Optional_PK_Inverse4Id2`, `s2`.`OneToOne_Optional_Self4Id1`, `s2`.`OneToOne_Optional_Self4Id2`, `s2`.`Id11`, `s2`.`Id21`, `s2`.`Level3_Optional_Id10`, `s2`.`Level3_Optional_Id20`, `s2`.`Level3_Required_Id10`, `s2`.`Level3_Required_Id20`, `s2`.`Name1`, `s2`.`OneToMany_Optional_Inverse4Id10`, `s2`.`OneToMany_Optional_Inverse4Id20`, `s2`.`OneToMany_Optional_Self_Inverse4Id10`, `s2`.`OneToMany_Optional_Self_Inverse4Id20`, `s2`.`OneToMany_Required_Inverse4Id10`, `s2`.`OneToMany_Required_Inverse4Id20`, `s2`.`OneToMany_Required_Self_Inverse4Id10`, `s2`.`OneToMany_Required_Self_Inverse4Id20`, `s2`.`OneToOne_Optional_PK_Inverse4Id10`, `s2`.`OneToOne_Optional_PK_Inverse4Id20`, `s2`.`OneToOne_Optional_Self4Id10`, `s2`.`OneToOne_Optional_Self4Id20`, `s3`.`Name` AS `Name2`, `s3`.`Id1` AS `Id12`, `s3`.`Id2` AS `Id22`, `s3`.`Id10` AS `Id101`, `s3`.`Id20` AS `Id201`, `s3`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `s3`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `s3`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `s3`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `s3`.`Name0` AS `Name01`, `s3`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `s3`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `s3`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `s3`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `s3`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `s3`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `s3`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `s3`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `s3`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `s3`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `s3`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `s3`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `s3`.`Id11` AS `Id110`, `s3`.`Id21` AS `Id210`, `s3`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `s3`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `s3`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `s3`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `s3`.`Name1` AS `Name10`, `s3`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `s3`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `s3`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `s3`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `s3`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `s3`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `s3`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `s3`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `s3`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `s3`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `s3`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `s3`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, `c7`.`OneToMany_Required_Inverse2Id1`, `c7`.`OneToMany_Required_Inverse2Id2` + FROM (`CompositeTwos` AS `c7` + LEFT JOIN ( + SELECT `c8`.`Name`, `c8`.`Id1`, `c8`.`Id2`, `c9`.`Id1` AS `Id10`, `c9`.`Id2` AS `Id20`, `c9`.`Level3_Optional_Id1`, `c9`.`Level3_Optional_Id2`, `c9`.`Level3_Required_Id1`, `c9`.`Level3_Required_Id2`, `c9`.`Name` AS `Name0`, `c9`.`OneToMany_Optional_Inverse4Id1`, `c9`.`OneToMany_Optional_Inverse4Id2`, `c9`.`OneToMany_Optional_Self_Inverse4Id1`, `c9`.`OneToMany_Optional_Self_Inverse4Id2`, `c9`.`OneToMany_Required_Inverse4Id1`, `c9`.`OneToMany_Required_Inverse4Id2`, `c9`.`OneToMany_Required_Self_Inverse4Id1`, `c9`.`OneToMany_Required_Self_Inverse4Id2`, `c9`.`OneToOne_Optional_PK_Inverse4Id1`, `c9`.`OneToOne_Optional_PK_Inverse4Id2`, `c9`.`OneToOne_Optional_Self4Id1`, `c9`.`OneToOne_Optional_Self4Id2`, `c10`.`Id1` AS `Id11`, `c10`.`Id2` AS `Id21`, `c10`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c10`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c10`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c10`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c10`.`Name` AS `Name1`, `c10`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c10`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c10`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c10`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c10`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c10`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c10`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c10`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c10`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c10`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c10`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c10`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c8`.`OneToMany_Optional_Inverse3Id1`, `c8`.`OneToMany_Optional_Inverse3Id2` + FROM (`CompositeThrees` AS `c8` + LEFT JOIN `CompositeFours` AS `c9` ON `c8`.`Id1` = `c9`.`OneToMany_Required_Inverse4Id1` AND `c8`.`Id2` = `c9`.`OneToMany_Required_Inverse4Id2`) + LEFT JOIN `CompositeFours` AS `c10` ON `c8`.`Id1` = `c10`.`OneToMany_Optional_Inverse4Id1` AND `c8`.`Id2` = `c10`.`OneToMany_Optional_Inverse4Id2` + ) AS `s2` ON `c7`.`Id1` = `s2`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `s2`.`OneToMany_Optional_Inverse3Id2`) + LEFT JOIN ( + SELECT `c11`.`Name`, `c11`.`Id1`, `c11`.`Id2`, `c12`.`Id1` AS `Id10`, `c12`.`Id2` AS `Id20`, `c12`.`Level3_Optional_Id1`, `c12`.`Level3_Optional_Id2`, `c12`.`Level3_Required_Id1`, `c12`.`Level3_Required_Id2`, `c12`.`Name` AS `Name0`, `c12`.`OneToMany_Optional_Inverse4Id1`, `c12`.`OneToMany_Optional_Inverse4Id2`, `c12`.`OneToMany_Optional_Self_Inverse4Id1`, `c12`.`OneToMany_Optional_Self_Inverse4Id2`, `c12`.`OneToMany_Required_Inverse4Id1`, `c12`.`OneToMany_Required_Inverse4Id2`, `c12`.`OneToMany_Required_Self_Inverse4Id1`, `c12`.`OneToMany_Required_Self_Inverse4Id2`, `c12`.`OneToOne_Optional_PK_Inverse4Id1`, `c12`.`OneToOne_Optional_PK_Inverse4Id2`, `c12`.`OneToOne_Optional_Self4Id1`, `c12`.`OneToOne_Optional_Self4Id2`, `c13`.`Id1` AS `Id11`, `c13`.`Id2` AS `Id21`, `c13`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c13`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c13`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c13`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c13`.`Name` AS `Name1`, `c13`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c13`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c13`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c13`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c13`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c13`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c13`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c13`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c13`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c13`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c13`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c13`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c11`.`OneToMany_Optional_Inverse3Id1`, `c11`.`OneToMany_Optional_Inverse3Id2` + FROM (`CompositeThrees` AS `c11` + LEFT JOIN `CompositeFours` AS `c12` ON `c11`.`Id1` = `c12`.`OneToMany_Optional_Inverse4Id1` AND `c11`.`Id2` = `c12`.`OneToMany_Optional_Inverse4Id2`) + LEFT JOIN `CompositeFours` AS `c13` ON `c11`.`Id1` = `c13`.`OneToMany_Required_Inverse4Id1` AND `c11`.`Id2` = `c13`.`OneToMany_Required_Inverse4Id2` + ) AS `s3` ON `c7`.`Id1` = `s3`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `s3`.`OneToMany_Optional_Inverse3Id2` +) AS `s4` ON `c`.`Id1` = `s4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `s4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `s1`.`Id1`, `s1`.`Id2`, `s1`.`Id10`, `s1`.`Id20`, `s1`.`Id100`, `s1`.`Id200`, `s1`.`Id11`, `s1`.`Id21`, `s1`.`Id12`, `s1`.`Id22`, `s1`.`Id101`, `s1`.`Id201`, `s1`.`Id110`, `s1`.`Id210`, `s4`.`Id1`, `s4`.`Id2`, `s4`.`Id10`, `s4`.`Id20`, `s4`.`Id100`, `s4`.`Id200`, `s4`.`Id11`, `s4`.`Id21`, `s4`.`Id12`, `s4`.`Id22`, `s4`.`Id101`, `s4`.`Id201`, `s4`.`Id110` +"""); + } + + public override async Task Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(bool async) + { + await base.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async); + + AssertSql( + """ +SELECT `c`.`Id1`, `c`.`Id2`, `s1`.`Name`, `s1`.`Id1`, `s1`.`Id2`, `s1`.`Id10`, `s1`.`Id20`, `s1`.`Id100`, `s1`.`Id200`, `s1`.`Level3_Optional_Id1`, `s1`.`Level3_Optional_Id2`, `s1`.`Level3_Required_Id1`, `s1`.`Level3_Required_Id2`, `s1`.`Name0`, `s1`.`OneToMany_Optional_Inverse4Id1`, `s1`.`OneToMany_Optional_Inverse4Id2`, `s1`.`OneToMany_Optional_Self_Inverse4Id1`, `s1`.`OneToMany_Optional_Self_Inverse4Id2`, `s1`.`OneToMany_Required_Inverse4Id1`, `s1`.`OneToMany_Required_Inverse4Id2`, `s1`.`OneToMany_Required_Self_Inverse4Id1`, `s1`.`OneToMany_Required_Self_Inverse4Id2`, `s1`.`OneToOne_Optional_PK_Inverse4Id1`, `s1`.`OneToOne_Optional_PK_Inverse4Id2`, `s1`.`OneToOne_Optional_Self4Id1`, `s1`.`OneToOne_Optional_Self4Id2`, `s1`.`Id11`, `s1`.`Id21`, `s1`.`Level3_Optional_Id10`, `s1`.`Level3_Optional_Id20`, `s1`.`Level3_Required_Id10`, `s1`.`Level3_Required_Id20`, `s1`.`Name00`, `s1`.`OneToMany_Optional_Inverse4Id10`, `s1`.`OneToMany_Optional_Inverse4Id20`, `s1`.`OneToMany_Optional_Self_Inverse4Id10`, `s1`.`OneToMany_Optional_Self_Inverse4Id20`, `s1`.`OneToMany_Required_Inverse4Id10`, `s1`.`OneToMany_Required_Inverse4Id20`, `s1`.`OneToMany_Required_Self_Inverse4Id10`, `s1`.`OneToMany_Required_Self_Inverse4Id20`, `s1`.`OneToOne_Optional_PK_Inverse4Id10`, `s1`.`OneToOne_Optional_PK_Inverse4Id20`, `s1`.`OneToOne_Optional_Self4Id10`, `s1`.`OneToOne_Optional_Self4Id20`, `s1`.`Name1`, `s1`.`Id12`, `s1`.`Id22`, `s1`.`Id101`, `s1`.`Id201`, `s1`.`Level3_Optional_Id11`, `s1`.`Level3_Optional_Id21`, `s1`.`Level3_Required_Id11`, `s1`.`Level3_Required_Id21`, `s1`.`Name01`, `s1`.`OneToMany_Optional_Inverse4Id11`, `s1`.`OneToMany_Optional_Inverse4Id21`, `s1`.`OneToMany_Optional_Self_Inverse4Id11`, `s1`.`OneToMany_Optional_Self_Inverse4Id21`, `s1`.`OneToMany_Required_Inverse4Id11`, `s1`.`OneToMany_Required_Inverse4Id21`, `s1`.`OneToMany_Required_Self_Inverse4Id11`, `s1`.`OneToMany_Required_Self_Inverse4Id21`, `s1`.`OneToOne_Optional_PK_Inverse4Id11`, `s1`.`OneToOne_Optional_PK_Inverse4Id21`, `s1`.`OneToOne_Optional_Self4Id11`, `s1`.`OneToOne_Optional_Self4Id21`, `s1`.`Id110`, `s1`.`Id210`, `s1`.`Level3_Optional_Id100`, `s1`.`Level3_Optional_Id200`, `s1`.`Level3_Required_Id100`, `s1`.`Level3_Required_Id200`, `s1`.`Name10`, `s1`.`OneToMany_Optional_Inverse4Id100`, `s1`.`OneToMany_Optional_Inverse4Id200`, `s1`.`OneToMany_Optional_Self_Inverse4Id100`, `s1`.`OneToMany_Optional_Self_Inverse4Id200`, `s1`.`OneToMany_Required_Inverse4Id100`, `s1`.`OneToMany_Required_Inverse4Id200`, `s1`.`OneToMany_Required_Self_Inverse4Id100`, `s1`.`OneToMany_Required_Self_Inverse4Id200`, `s1`.`OneToOne_Optional_PK_Inverse4Id100`, `s1`.`OneToOne_Optional_PK_Inverse4Id200`, `s1`.`OneToOne_Optional_Self4Id100`, `s1`.`OneToOne_Optional_Self4Id200`, `s4`.`Name`, `s4`.`Id1`, `s4`.`Id2`, `s4`.`Name0`, `s4`.`Id10`, `s4`.`Id20`, `s4`.`Id100`, `s4`.`Id200`, `s4`.`Level3_Optional_Id1`, `s4`.`Level3_Optional_Id2`, `s4`.`Level3_Required_Id1`, `s4`.`Level3_Required_Id2`, `s4`.`Name00`, `s4`.`OneToMany_Optional_Inverse4Id1`, `s4`.`OneToMany_Optional_Inverse4Id2`, `s4`.`OneToMany_Optional_Self_Inverse4Id1`, `s4`.`OneToMany_Optional_Self_Inverse4Id2`, `s4`.`OneToMany_Required_Inverse4Id1`, `s4`.`OneToMany_Required_Inverse4Id2`, `s4`.`OneToMany_Required_Self_Inverse4Id1`, `s4`.`OneToMany_Required_Self_Inverse4Id2`, `s4`.`OneToOne_Optional_PK_Inverse4Id1`, `s4`.`OneToOne_Optional_PK_Inverse4Id2`, `s4`.`OneToOne_Optional_Self4Id1`, `s4`.`OneToOne_Optional_Self4Id2`, `s4`.`Id11`, `s4`.`Id21`, `s4`.`Level3_Optional_Id10`, `s4`.`Level3_Optional_Id20`, `s4`.`Level3_Required_Id10`, `s4`.`Level3_Required_Id20`, `s4`.`Name1`, `s4`.`OneToMany_Optional_Inverse4Id10`, `s4`.`OneToMany_Optional_Inverse4Id20`, `s4`.`OneToMany_Optional_Self_Inverse4Id10`, `s4`.`OneToMany_Optional_Self_Inverse4Id20`, `s4`.`OneToMany_Required_Inverse4Id10`, `s4`.`OneToMany_Required_Inverse4Id20`, `s4`.`OneToMany_Required_Self_Inverse4Id10`, `s4`.`OneToMany_Required_Self_Inverse4Id20`, `s4`.`OneToOne_Optional_PK_Inverse4Id10`, `s4`.`OneToOne_Optional_PK_Inverse4Id20`, `s4`.`OneToOne_Optional_Self4Id10`, `s4`.`OneToOne_Optional_Self4Id20`, `s4`.`Name2`, `s4`.`Id12`, `s4`.`Id22`, `s4`.`Id101`, `s4`.`Id201`, `s4`.`Level3_Optional_Id11`, `s4`.`Level3_Optional_Id21`, `s4`.`Level3_Required_Id11`, `s4`.`Level3_Required_Id21`, `s4`.`Name01`, `s4`.`OneToMany_Optional_Inverse4Id11`, `s4`.`OneToMany_Optional_Inverse4Id21`, `s4`.`OneToMany_Optional_Self_Inverse4Id11`, `s4`.`OneToMany_Optional_Self_Inverse4Id21`, `s4`.`OneToMany_Required_Inverse4Id11`, `s4`.`OneToMany_Required_Inverse4Id21`, `s4`.`OneToMany_Required_Self_Inverse4Id11`, `s4`.`OneToMany_Required_Self_Inverse4Id21`, `s4`.`OneToOne_Optional_PK_Inverse4Id11`, `s4`.`OneToOne_Optional_PK_Inverse4Id21`, `s4`.`OneToOne_Optional_Self4Id11`, `s4`.`OneToOne_Optional_Self4Id21`, `s4`.`Id110`, `s4`.`Id210`, `s4`.`Level3_Optional_Id100`, `s4`.`Level3_Optional_Id200`, `s4`.`Level3_Required_Id100`, `s4`.`Level3_Required_Id200`, `s4`.`Name10`, `s4`.`OneToMany_Optional_Inverse4Id100`, `s4`.`OneToMany_Optional_Inverse4Id200`, `s4`.`OneToMany_Optional_Self_Inverse4Id100`, `s4`.`OneToMany_Optional_Self_Inverse4Id200`, `s4`.`OneToMany_Required_Inverse4Id100`, `s4`.`OneToMany_Required_Inverse4Id200`, `s4`.`OneToMany_Required_Self_Inverse4Id100`, `s4`.`OneToMany_Required_Self_Inverse4Id200`, `s4`.`OneToOne_Optional_PK_Inverse4Id100`, `s4`.`OneToOne_Optional_PK_Inverse4Id200`, `s4`.`OneToOne_Optional_Self4Id100`, `s4`.`OneToOne_Optional_Self4Id200` +FROM (`CompositeOnes` AS `c` +LEFT JOIN ( + SELECT `c0`.`Name`, `c0`.`Id1`, `c0`.`Id2`, `s`.`Id1` AS `Id10`, `s`.`Id2` AS `Id20`, `s`.`Id10` AS `Id100`, `s`.`Id20` AS `Id200`, `s`.`Level3_Optional_Id1`, `s`.`Level3_Optional_Id2`, `s`.`Level3_Required_Id1`, `s`.`Level3_Required_Id2`, `s`.`Name` AS `Name0`, `s`.`OneToMany_Optional_Inverse4Id1`, `s`.`OneToMany_Optional_Inverse4Id2`, `s`.`OneToMany_Optional_Self_Inverse4Id1`, `s`.`OneToMany_Optional_Self_Inverse4Id2`, `s`.`OneToMany_Required_Inverse4Id1`, `s`.`OneToMany_Required_Inverse4Id2`, `s`.`OneToMany_Required_Self_Inverse4Id1`, `s`.`OneToMany_Required_Self_Inverse4Id2`, `s`.`OneToOne_Optional_PK_Inverse4Id1`, `s`.`OneToOne_Optional_PK_Inverse4Id2`, `s`.`OneToOne_Optional_Self4Id1`, `s`.`OneToOne_Optional_Self4Id2`, `s`.`Id11`, `s`.`Id21`, `s`.`Level3_Optional_Id10`, `s`.`Level3_Optional_Id20`, `s`.`Level3_Required_Id10`, `s`.`Level3_Required_Id20`, `s`.`Name0` AS `Name00`, `s`.`OneToMany_Optional_Inverse4Id10`, `s`.`OneToMany_Optional_Inverse4Id20`, `s`.`OneToMany_Optional_Self_Inverse4Id10`, `s`.`OneToMany_Optional_Self_Inverse4Id20`, `s`.`OneToMany_Required_Inverse4Id10`, `s`.`OneToMany_Required_Inverse4Id20`, `s`.`OneToMany_Required_Self_Inverse4Id10`, `s`.`OneToMany_Required_Self_Inverse4Id20`, `s`.`OneToOne_Optional_PK_Inverse4Id10`, `s`.`OneToOne_Optional_PK_Inverse4Id20`, `s`.`OneToOne_Optional_Self4Id10`, `s`.`OneToOne_Optional_Self4Id20`, `s0`.`Name` AS `Name1`, `s0`.`Id1` AS `Id12`, `s0`.`Id2` AS `Id22`, `s0`.`Id10` AS `Id101`, `s0`.`Id20` AS `Id201`, `s0`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `s0`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `s0`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `s0`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `s0`.`Name0` AS `Name01`, `s0`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `s0`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `s0`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `s0`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `s0`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `s0`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `s0`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `s0`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `s0`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `s0`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `s0`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `s0`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `s0`.`Id11` AS `Id110`, `s0`.`Id21` AS `Id210`, `s0`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `s0`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `s0`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `s0`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `s0`.`Name1` AS `Name10`, `s0`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `s0`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `s0`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `s0`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `s0`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `s0`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `s0`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `s0`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `s0`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `s0`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `s0`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `s0`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2` + FROM (`CompositeTwos` AS `c0` + LEFT JOIN ( + SELECT `c1`.`Id1`, `c1`.`Id2`, `c2`.`Id1` AS `Id10`, `c2`.`Id2` AS `Id20`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c3`.`Id1` AS `Id11`, `c3`.`Id2` AS `Id21`, `c3`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c3`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c3`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c3`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c3`.`Name` AS `Name0`, `c3`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c3`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c3`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c3`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c3`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c3`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c3`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c3`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c3`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c3`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c3`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c3`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c1`.`OneToMany_Required_Inverse3Id1`, `c1`.`OneToMany_Required_Inverse3Id2` + FROM (`CompositeThrees` AS `c1` + LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2`) + LEFT JOIN `CompositeFours` AS `c3` ON `c1`.`Id1` = `c3`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c3`.`OneToMany_Required_Inverse4Id2` + ) AS `s` ON `c0`.`Id1` = `s`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `s`.`OneToMany_Required_Inverse3Id2`) + LEFT JOIN ( + SELECT `c4`.`Name`, `c4`.`Id1`, `c4`.`Id2`, `c5`.`Id1` AS `Id10`, `c5`.`Id2` AS `Id20`, `c5`.`Level3_Optional_Id1`, `c5`.`Level3_Optional_Id2`, `c5`.`Level3_Required_Id1`, `c5`.`Level3_Required_Id2`, `c5`.`Name` AS `Name0`, `c5`.`OneToMany_Optional_Inverse4Id1`, `c5`.`OneToMany_Optional_Inverse4Id2`, `c5`.`OneToMany_Optional_Self_Inverse4Id1`, `c5`.`OneToMany_Optional_Self_Inverse4Id2`, `c5`.`OneToMany_Required_Inverse4Id1`, `c5`.`OneToMany_Required_Inverse4Id2`, `c5`.`OneToMany_Required_Self_Inverse4Id1`, `c5`.`OneToMany_Required_Self_Inverse4Id2`, `c5`.`OneToOne_Optional_PK_Inverse4Id1`, `c5`.`OneToOne_Optional_PK_Inverse4Id2`, `c5`.`OneToOne_Optional_Self4Id1`, `c5`.`OneToOne_Optional_Self4Id2`, `c6`.`Id1` AS `Id11`, `c6`.`Id2` AS `Id21`, `c6`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c6`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c6`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c6`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c6`.`Name` AS `Name1`, `c6`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c6`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c6`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c6`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c6`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c6`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c6`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c6`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c6`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c6`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c6`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c6`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c4`.`OneToMany_Optional_Inverse3Id1`, `c4`.`OneToMany_Optional_Inverse3Id2` + FROM (`CompositeThrees` AS `c4` + LEFT JOIN `CompositeFours` AS `c5` ON `c4`.`Id1` = `c5`.`OneToMany_Required_Inverse4Id1` AND `c4`.`Id2` = `c5`.`OneToMany_Required_Inverse4Id2`) + LEFT JOIN `CompositeFours` AS `c6` ON `c4`.`Id1` = `c6`.`OneToMany_Optional_Inverse4Id1` AND `c4`.`Id2` = `c6`.`OneToMany_Optional_Inverse4Id2` + ) AS `s0` ON `c0`.`Id1` = `s0`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `s0`.`OneToMany_Optional_Inverse3Id2` +) AS `s1` ON `c`.`Id1` = `s1`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `s1`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN ( + SELECT `c7`.`Name`, `c7`.`Id1`, `c7`.`Id2`, `s2`.`Name` AS `Name0`, `s2`.`Id1` AS `Id10`, `s2`.`Id2` AS `Id20`, `s2`.`Id10` AS `Id100`, `s2`.`Id20` AS `Id200`, `s2`.`Level3_Optional_Id1`, `s2`.`Level3_Optional_Id2`, `s2`.`Level3_Required_Id1`, `s2`.`Level3_Required_Id2`, `s2`.`Name0` AS `Name00`, `s2`.`OneToMany_Optional_Inverse4Id1`, `s2`.`OneToMany_Optional_Inverse4Id2`, `s2`.`OneToMany_Optional_Self_Inverse4Id1`, `s2`.`OneToMany_Optional_Self_Inverse4Id2`, `s2`.`OneToMany_Required_Inverse4Id1`, `s2`.`OneToMany_Required_Inverse4Id2`, `s2`.`OneToMany_Required_Self_Inverse4Id1`, `s2`.`OneToMany_Required_Self_Inverse4Id2`, `s2`.`OneToOne_Optional_PK_Inverse4Id1`, `s2`.`OneToOne_Optional_PK_Inverse4Id2`, `s2`.`OneToOne_Optional_Self4Id1`, `s2`.`OneToOne_Optional_Self4Id2`, `s2`.`Id11`, `s2`.`Id21`, `s2`.`Level3_Optional_Id10`, `s2`.`Level3_Optional_Id20`, `s2`.`Level3_Required_Id10`, `s2`.`Level3_Required_Id20`, `s2`.`Name1`, `s2`.`OneToMany_Optional_Inverse4Id10`, `s2`.`OneToMany_Optional_Inverse4Id20`, `s2`.`OneToMany_Optional_Self_Inverse4Id10`, `s2`.`OneToMany_Optional_Self_Inverse4Id20`, `s2`.`OneToMany_Required_Inverse4Id10`, `s2`.`OneToMany_Required_Inverse4Id20`, `s2`.`OneToMany_Required_Self_Inverse4Id10`, `s2`.`OneToMany_Required_Self_Inverse4Id20`, `s2`.`OneToOne_Optional_PK_Inverse4Id10`, `s2`.`OneToOne_Optional_PK_Inverse4Id20`, `s2`.`OneToOne_Optional_Self4Id10`, `s2`.`OneToOne_Optional_Self4Id20`, `s3`.`Name` AS `Name2`, `s3`.`Id1` AS `Id12`, `s3`.`Id2` AS `Id22`, `s3`.`Id10` AS `Id101`, `s3`.`Id20` AS `Id201`, `s3`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `s3`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `s3`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `s3`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `s3`.`Name0` AS `Name01`, `s3`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `s3`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `s3`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `s3`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `s3`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `s3`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `s3`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `s3`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `s3`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `s3`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `s3`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `s3`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `s3`.`Id11` AS `Id110`, `s3`.`Id21` AS `Id210`, `s3`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `s3`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `s3`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `s3`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `s3`.`Name1` AS `Name10`, `s3`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `s3`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `s3`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `s3`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `s3`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `s3`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `s3`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `s3`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `s3`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `s3`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `s3`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `s3`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, IIF(LEN(`c7`.`Name`) IS NULL, NULL, CLNG(LEN(`c7`.`Name`))) AS `c`, `s3`.`c` AS `c0`, `c7`.`OneToMany_Required_Inverse2Id1`, `c7`.`OneToMany_Required_Inverse2Id2` + FROM (`CompositeTwos` AS `c7` + LEFT JOIN ( + SELECT `c8`.`Name`, `c8`.`Id1`, `c8`.`Id2`, `c9`.`Id1` AS `Id10`, `c9`.`Id2` AS `Id20`, `c9`.`Level3_Optional_Id1`, `c9`.`Level3_Optional_Id2`, `c9`.`Level3_Required_Id1`, `c9`.`Level3_Required_Id2`, `c9`.`Name` AS `Name0`, `c9`.`OneToMany_Optional_Inverse4Id1`, `c9`.`OneToMany_Optional_Inverse4Id2`, `c9`.`OneToMany_Optional_Self_Inverse4Id1`, `c9`.`OneToMany_Optional_Self_Inverse4Id2`, `c9`.`OneToMany_Required_Inverse4Id1`, `c9`.`OneToMany_Required_Inverse4Id2`, `c9`.`OneToMany_Required_Self_Inverse4Id1`, `c9`.`OneToMany_Required_Self_Inverse4Id2`, `c9`.`OneToOne_Optional_PK_Inverse4Id1`, `c9`.`OneToOne_Optional_PK_Inverse4Id2`, `c9`.`OneToOne_Optional_Self4Id1`, `c9`.`OneToOne_Optional_Self4Id2`, `c10`.`Id1` AS `Id11`, `c10`.`Id2` AS `Id21`, `c10`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c10`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c10`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c10`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c10`.`Name` AS `Name1`, `c10`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c10`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c10`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c10`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c10`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c10`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c10`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c10`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c10`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c10`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c10`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c10`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c8`.`OneToMany_Optional_Inverse3Id1`, `c8`.`OneToMany_Optional_Inverse3Id2` + FROM (`CompositeThrees` AS `c8` + LEFT JOIN `CompositeFours` AS `c9` ON `c8`.`Id1` = `c9`.`OneToMany_Required_Inverse4Id1` AND `c8`.`Id2` = `c9`.`OneToMany_Required_Inverse4Id2`) + LEFT JOIN `CompositeFours` AS `c10` ON `c8`.`Id1` = `c10`.`OneToMany_Optional_Inverse4Id1` AND `c8`.`Id2` = `c10`.`OneToMany_Optional_Inverse4Id2` + ) AS `s2` ON `c7`.`Id1` = `s2`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `s2`.`OneToMany_Optional_Inverse3Id2`) + LEFT JOIN ( + SELECT `c11`.`Name`, `c11`.`Id1`, `c11`.`Id2`, `c12`.`Id1` AS `Id10`, `c12`.`Id2` AS `Id20`, `c12`.`Level3_Optional_Id1`, `c12`.`Level3_Optional_Id2`, `c12`.`Level3_Required_Id1`, `c12`.`Level3_Required_Id2`, `c12`.`Name` AS `Name0`, `c12`.`OneToMany_Optional_Inverse4Id1`, `c12`.`OneToMany_Optional_Inverse4Id2`, `c12`.`OneToMany_Optional_Self_Inverse4Id1`, `c12`.`OneToMany_Optional_Self_Inverse4Id2`, `c12`.`OneToMany_Required_Inverse4Id1`, `c12`.`OneToMany_Required_Inverse4Id2`, `c12`.`OneToMany_Required_Self_Inverse4Id1`, `c12`.`OneToMany_Required_Self_Inverse4Id2`, `c12`.`OneToOne_Optional_PK_Inverse4Id1`, `c12`.`OneToOne_Optional_PK_Inverse4Id2`, `c12`.`OneToOne_Optional_Self4Id1`, `c12`.`OneToOne_Optional_Self4Id2`, `c13`.`Id1` AS `Id11`, `c13`.`Id2` AS `Id21`, `c13`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c13`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c13`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c13`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c13`.`Name` AS `Name1`, `c13`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c13`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c13`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c13`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c13`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c13`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c13`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c13`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c13`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c13`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c13`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c13`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c13`.`Id1` & (`c13`.`Id2` & '') AS `c`, `c11`.`OneToMany_Optional_Inverse3Id1`, `c11`.`OneToMany_Optional_Inverse3Id2` + FROM (`CompositeThrees` AS `c11` + LEFT JOIN `CompositeFours` AS `c12` ON `c11`.`Id1` = `c12`.`OneToMany_Optional_Inverse4Id1` AND `c11`.`Id2` = `c12`.`OneToMany_Optional_Inverse4Id2`) + LEFT JOIN `CompositeFours` AS `c13` ON `c11`.`Id1` = `c13`.`OneToMany_Required_Inverse4Id1` AND `c11`.`Id2` = `c13`.`OneToMany_Required_Inverse4Id2` + ) AS `s3` ON `c7`.`Id1` = `s3`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `s3`.`OneToMany_Optional_Inverse3Id2` +) AS `s4` ON `c`.`Id1` = `s4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `s4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `s1`.`Id1`, `s1`.`Id2`, `s1`.`Id20` DESC, `s1`.`Id10` DESC, `s1`.`Id100`, `s1`.`Id200`, `s1`.`Id11`, `s1`.`Id21`, `s1`.`Id12`, `s1`.`Id22`, `s1`.`Id101`, `s1`.`Id201`, `s1`.`Id110`, `s1`.`Id210`, `s4`.`c`, `s4`.`Id1`, `s4`.`Id2`, `s4`.`Id10`, `s4`.`Id20`, `s4`.`Id100`, `s4`.`Id200`, `s4`.`Id11`, `s4`.`Id21`, `s4`.`Id12`, `s4`.`Id22`, `s4`.`Id101`, `s4`.`Id201`, `s4`.`c0` DESC, `s4`.`Id110` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/CompositeKeysSplitQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/CompositeKeysSplitQueryLibRedTest.cs new file mode 100644 index 00000000..602e9c61 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/CompositeKeysSplitQueryLibRedTest.cs @@ -0,0 +1,399 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class CompositeKeysSplitQueryLibRedTest : CompositeKeysSplitQueryRelationalTestBase +{ + public CompositeKeysSplitQueryLibRedTest( + CompositeKeysQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Projecting_collections_multi_level(bool async) + { + await base.Projecting_collections_multi_level(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +ORDER BY `c`.`Id2`, `c`.`Id1` +""", + // + """ +SELECT `c8`.`Name`, `c`.`Id1`, `c`.`Id2`, `c8`.`Id1`, `c8`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c8` ON `c`.`Id1` = `c8`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c8`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `c8`.`Id2`, `c8`.`Id1` +""", + // + """ +SELECT `c11`.`Id1`, `c11`.`Id2`, `c11`.`Level2_Optional_Id1`, `c11`.`Level2_Optional_Id2`, `c11`.`Level2_Required_Id1`, `c11`.`Level2_Required_Id2`, `c11`.`Name`, `c11`.`OneToMany_Optional_Inverse3Id1`, `c11`.`OneToMany_Optional_Inverse3Id2`, `c11`.`OneToMany_Optional_Self_Inverse3Id1`, `c11`.`OneToMany_Optional_Self_Inverse3Id2`, `c11`.`OneToMany_Required_Inverse3Id1`, `c11`.`OneToMany_Required_Inverse3Id2`, `c11`.`OneToMany_Required_Self_Inverse3Id1`, `c11`.`OneToMany_Required_Self_Inverse3Id2`, `c11`.`OneToOne_Optional_PK_Inverse3Id1`, `c11`.`OneToOne_Optional_PK_Inverse3Id2`, `c11`.`OneToOne_Optional_Self3Id1`, `c11`.`OneToOne_Optional_Self3Id2`, `c`.`Id1`, `c`.`Id2`, `c8`.`Id1`, `c8`.`Id2` +FROM (`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c8` ON `c`.`Id1` = `c8`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c8`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c11` ON `c8`.`Id1` = `c11`.`OneToMany_Required_Inverse3Id1` AND `c8`.`Id2` = `c11`.`OneToMany_Required_Inverse3Id2` +WHERE `c8`.`Id1` IS NOT NULL AND `c11`.`OneToMany_Required_Inverse3Id1` IS NOT NULL AND `c8`.`Id2` IS NOT NULL AND `c11`.`OneToMany_Required_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id2`, `c`.`Id1`, `c8`.`Id2`, `c8`.`Id1`, `c11`.`Id2` DESC +"""); + } + + public override async Task Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(bool async) + { + await base.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +ORDER BY `c`.`Id1`, `c`.`Id2` +""", + // + """ +SELECT `c62`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2` +""", + // + """ +SELECT `c75`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c75`.`Id1`, `c75`.`Id2` +FROM (`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c75` ON `c62`.`Id1` = `c75`.`OneToMany_Required_Inverse3Id1` AND `c62`.`Id2` = `c75`.`OneToMany_Required_Inverse3Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c75`.`OneToMany_Required_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c75`.`OneToMany_Required_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c75`.`Id1`, `c75`.`Id2` +""", + // + """ +SELECT `c87`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +FROM (`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c90`.`Id1`, `c90`.`Id2`, `c90`.`Level3_Optional_Id1`, `c90`.`Level3_Optional_Id2`, `c90`.`Level3_Required_Id1`, `c90`.`Level3_Required_Id2`, `c90`.`Name`, `c90`.`OneToMany_Optional_Inverse4Id1`, `c90`.`OneToMany_Optional_Inverse4Id2`, `c90`.`OneToMany_Optional_Self_Inverse4Id1`, `c90`.`OneToMany_Optional_Self_Inverse4Id2`, `c90`.`OneToMany_Required_Inverse4Id1`, `c90`.`OneToMany_Required_Inverse4Id2`, `c90`.`OneToMany_Required_Self_Inverse4Id1`, `c90`.`OneToMany_Required_Self_Inverse4Id2`, `c90`.`OneToOne_Optional_PK_Inverse4Id1`, `c90`.`OneToOne_Optional_PK_Inverse4Id2`, `c90`.`OneToOne_Optional_Self4Id1`, `c90`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c90` ON `c87`.`Id1` = `c90`.`OneToMany_Required_Inverse4Id1` AND `c87`.`Id2` = `c90`.`OneToMany_Required_Inverse4Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c87`.`Id1` IS NOT NULL AND `c90`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c87`.`Id2` IS NOT NULL AND `c90`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c92`.`Id1`, `c92`.`Id2`, `c92`.`Level3_Optional_Id1`, `c92`.`Level3_Optional_Id2`, `c92`.`Level3_Required_Id1`, `c92`.`Level3_Required_Id2`, `c92`.`Name`, `c92`.`OneToMany_Optional_Inverse4Id1`, `c92`.`OneToMany_Optional_Inverse4Id2`, `c92`.`OneToMany_Optional_Self_Inverse4Id1`, `c92`.`OneToMany_Optional_Self_Inverse4Id2`, `c92`.`OneToMany_Required_Inverse4Id1`, `c92`.`OneToMany_Required_Inverse4Id2`, `c92`.`OneToMany_Required_Self_Inverse4Id1`, `c92`.`OneToMany_Required_Self_Inverse4Id2`, `c92`.`OneToOne_Optional_PK_Inverse4Id1`, `c92`.`OneToOne_Optional_PK_Inverse4Id2`, `c92`.`OneToOne_Optional_Self4Id1`, `c92`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c92` ON `c87`.`Id1` = `c92`.`OneToMany_Optional_Inverse4Id1` AND `c87`.`Id2` = `c92`.`OneToMany_Optional_Inverse4Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c87`.`Id1` IS NOT NULL AND `c92`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c87`.`Id2` IS NOT NULL AND `c92`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c124`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2` +""", + // + """ +SELECT `c137`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +FROM (`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c140`.`Id1`, `c140`.`Id2`, `c140`.`Level3_Optional_Id1`, `c140`.`Level3_Optional_Id2`, `c140`.`Level3_Required_Id1`, `c140`.`Level3_Required_Id2`, `c140`.`Name`, `c140`.`OneToMany_Optional_Inverse4Id1`, `c140`.`OneToMany_Optional_Inverse4Id2`, `c140`.`OneToMany_Optional_Self_Inverse4Id1`, `c140`.`OneToMany_Optional_Self_Inverse4Id2`, `c140`.`OneToMany_Required_Inverse4Id1`, `c140`.`OneToMany_Required_Inverse4Id2`, `c140`.`OneToMany_Required_Self_Inverse4Id1`, `c140`.`OneToMany_Required_Self_Inverse4Id2`, `c140`.`OneToOne_Optional_PK_Inverse4Id1`, `c140`.`OneToOne_Optional_PK_Inverse4Id2`, `c140`.`OneToOne_Optional_Self4Id1`, `c140`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c140` ON `c137`.`Id1` = `c140`.`OneToMany_Required_Inverse4Id1` AND `c137`.`Id2` = `c140`.`OneToMany_Required_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c137`.`Id1` IS NOT NULL AND `c140`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c137`.`Id2` IS NOT NULL AND `c140`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c142`.`Id1`, `c142`.`Id2`, `c142`.`Level3_Optional_Id1`, `c142`.`Level3_Optional_Id2`, `c142`.`Level3_Required_Id1`, `c142`.`Level3_Required_Id2`, `c142`.`Name`, `c142`.`OneToMany_Optional_Inverse4Id1`, `c142`.`OneToMany_Optional_Inverse4Id2`, `c142`.`OneToMany_Optional_Self_Inverse4Id1`, `c142`.`OneToMany_Optional_Self_Inverse4Id2`, `c142`.`OneToMany_Required_Inverse4Id1`, `c142`.`OneToMany_Required_Inverse4Id2`, `c142`.`OneToMany_Required_Self_Inverse4Id1`, `c142`.`OneToMany_Required_Self_Inverse4Id2`, `c142`.`OneToOne_Optional_PK_Inverse4Id1`, `c142`.`OneToOne_Optional_PK_Inverse4Id2`, `c142`.`OneToOne_Optional_Self4Id1`, `c142`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c142` ON `c137`.`Id1` = `c142`.`OneToMany_Optional_Inverse4Id1` AND `c137`.`Id2` = `c142`.`OneToMany_Optional_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c137`.`Id1` IS NOT NULL AND `c142`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c137`.`Id2` IS NOT NULL AND `c142`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c149`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +FROM (`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +""", + // + """ +SELECT `c152`.`Id1`, `c152`.`Id2`, `c152`.`Level3_Optional_Id1`, `c152`.`Level3_Optional_Id2`, `c152`.`Level3_Required_Id1`, `c152`.`Level3_Required_Id2`, `c152`.`Name`, `c152`.`OneToMany_Optional_Inverse4Id1`, `c152`.`OneToMany_Optional_Inverse4Id2`, `c152`.`OneToMany_Optional_Self_Inverse4Id1`, `c152`.`OneToMany_Optional_Self_Inverse4Id2`, `c152`.`OneToMany_Required_Inverse4Id1`, `c152`.`OneToMany_Required_Inverse4Id2`, `c152`.`OneToMany_Required_Self_Inverse4Id1`, `c152`.`OneToMany_Required_Self_Inverse4Id2`, `c152`.`OneToOne_Optional_PK_Inverse4Id1`, `c152`.`OneToOne_Optional_PK_Inverse4Id2`, `c152`.`OneToOne_Optional_Self4Id1`, `c152`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c152` ON `c149`.`Id1` = `c152`.`OneToMany_Optional_Inverse4Id1` AND `c149`.`Id2` = `c152`.`OneToMany_Optional_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c149`.`Id1` IS NOT NULL AND `c152`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c149`.`Id2` IS NOT NULL AND `c152`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +""", + // + """ +SELECT `c154`.`Id1`, `c154`.`Id2`, `c154`.`Level3_Optional_Id1`, `c154`.`Level3_Optional_Id2`, `c154`.`Level3_Required_Id1`, `c154`.`Level3_Required_Id2`, `c154`.`Name`, `c154`.`OneToMany_Optional_Inverse4Id1`, `c154`.`OneToMany_Optional_Inverse4Id2`, `c154`.`OneToMany_Optional_Self_Inverse4Id1`, `c154`.`OneToMany_Optional_Self_Inverse4Id2`, `c154`.`OneToMany_Required_Inverse4Id1`, `c154`.`OneToMany_Required_Inverse4Id2`, `c154`.`OneToMany_Required_Self_Inverse4Id1`, `c154`.`OneToMany_Required_Self_Inverse4Id2`, `c154`.`OneToOne_Optional_PK_Inverse4Id1`, `c154`.`OneToOne_Optional_PK_Inverse4Id2`, `c154`.`OneToOne_Optional_Self4Id1`, `c154`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c154` ON `c149`.`Id1` = `c154`.`OneToMany_Required_Inverse4Id1` AND `c149`.`Id2` = `c154`.`OneToMany_Required_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c149`.`Id1` IS NOT NULL AND `c154`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c149`.`Id2` IS NOT NULL AND `c154`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +"""); + } + + public override async Task Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(bool async) + { + await base.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async); + + AssertSql( + """ +SELECT `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2` +""", + // + """ +SELECT `c62`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2` +""", + // + """ +SELECT `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c75`.`Id1`, `c75`.`Id2` +FROM (`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c75` ON `c62`.`Id1` = `c75`.`OneToMany_Required_Inverse3Id1` AND `c62`.`Id2` = `c75`.`OneToMany_Required_Inverse3Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c75`.`OneToMany_Required_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c75`.`OneToMany_Required_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c75`.`Id2` DESC, `c75`.`Id1` DESC +""", + // + """ +SELECT `c87`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +FROM (`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c90`.`Id1`, `c90`.`Id2`, `c90`.`Level3_Optional_Id1`, `c90`.`Level3_Optional_Id2`, `c90`.`Level3_Required_Id1`, `c90`.`Level3_Required_Id2`, `c90`.`Name`, `c90`.`OneToMany_Optional_Inverse4Id1`, `c90`.`OneToMany_Optional_Inverse4Id2`, `c90`.`OneToMany_Optional_Self_Inverse4Id1`, `c90`.`OneToMany_Optional_Self_Inverse4Id2`, `c90`.`OneToMany_Required_Inverse4Id1`, `c90`.`OneToMany_Required_Inverse4Id2`, `c90`.`OneToMany_Required_Self_Inverse4Id1`, `c90`.`OneToMany_Required_Self_Inverse4Id2`, `c90`.`OneToOne_Optional_PK_Inverse4Id1`, `c90`.`OneToOne_Optional_PK_Inverse4Id2`, `c90`.`OneToOne_Optional_Self4Id1`, `c90`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c90` ON `c87`.`Id1` = `c90`.`OneToMany_Required_Inverse4Id1` AND `c87`.`Id2` = `c90`.`OneToMany_Required_Inverse4Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c87`.`Id1` IS NOT NULL AND `c90`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c87`.`Id2` IS NOT NULL AND `c90`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c92`.`Id1`, `c92`.`Id2`, `c92`.`Level3_Optional_Id1`, `c92`.`Level3_Optional_Id2`, `c92`.`Level3_Required_Id1`, `c92`.`Level3_Required_Id2`, `c92`.`Name`, `c92`.`OneToMany_Optional_Inverse4Id1`, `c92`.`OneToMany_Optional_Inverse4Id2`, `c92`.`OneToMany_Optional_Self_Inverse4Id1`, `c92`.`OneToMany_Optional_Self_Inverse4Id2`, `c92`.`OneToMany_Required_Inverse4Id1`, `c92`.`OneToMany_Required_Inverse4Id2`, `c92`.`OneToMany_Required_Self_Inverse4Id1`, `c92`.`OneToMany_Required_Self_Inverse4Id2`, `c92`.`OneToOne_Optional_PK_Inverse4Id1`, `c92`.`OneToOne_Optional_PK_Inverse4Id2`, `c92`.`OneToOne_Optional_Self4Id1`, `c92`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c92` ON `c87`.`Id1` = `c92`.`OneToMany_Optional_Inverse4Id1` AND `c87`.`Id2` = `c92`.`OneToMany_Optional_Inverse4Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c87`.`Id1` IS NOT NULL AND `c92`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c87`.`Id2` IS NOT NULL AND `c92`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c124`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2` +""", + // + """ +SELECT `c137`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +FROM (`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c140`.`Id1`, `c140`.`Id2`, `c140`.`Level3_Optional_Id1`, `c140`.`Level3_Optional_Id2`, `c140`.`Level3_Required_Id1`, `c140`.`Level3_Required_Id2`, `c140`.`Name`, `c140`.`OneToMany_Optional_Inverse4Id1`, `c140`.`OneToMany_Optional_Inverse4Id2`, `c140`.`OneToMany_Optional_Self_Inverse4Id1`, `c140`.`OneToMany_Optional_Self_Inverse4Id2`, `c140`.`OneToMany_Required_Inverse4Id1`, `c140`.`OneToMany_Required_Inverse4Id2`, `c140`.`OneToMany_Required_Self_Inverse4Id1`, `c140`.`OneToMany_Required_Self_Inverse4Id2`, `c140`.`OneToOne_Optional_PK_Inverse4Id1`, `c140`.`OneToOne_Optional_PK_Inverse4Id2`, `c140`.`OneToOne_Optional_Self4Id1`, `c140`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c140` ON `c137`.`Id1` = `c140`.`OneToMany_Required_Inverse4Id1` AND `c137`.`Id2` = `c140`.`OneToMany_Required_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c137`.`Id1` IS NOT NULL AND `c140`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c137`.`Id2` IS NOT NULL AND `c140`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c142`.`Id1`, `c142`.`Id2`, `c142`.`Level3_Optional_Id1`, `c142`.`Level3_Optional_Id2`, `c142`.`Level3_Required_Id1`, `c142`.`Level3_Required_Id2`, `c142`.`Name`, `c142`.`OneToMany_Optional_Inverse4Id1`, `c142`.`OneToMany_Optional_Inverse4Id2`, `c142`.`OneToMany_Optional_Self_Inverse4Id1`, `c142`.`OneToMany_Optional_Self_Inverse4Id2`, `c142`.`OneToMany_Required_Inverse4Id1`, `c142`.`OneToMany_Required_Inverse4Id2`, `c142`.`OneToMany_Required_Self_Inverse4Id1`, `c142`.`OneToMany_Required_Self_Inverse4Id2`, `c142`.`OneToOne_Optional_PK_Inverse4Id1`, `c142`.`OneToOne_Optional_PK_Inverse4Id2`, `c142`.`OneToOne_Optional_Self4Id1`, `c142`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c142` ON `c137`.`Id1` = `c142`.`OneToMany_Optional_Inverse4Id1` AND `c137`.`Id2` = `c142`.`OneToMany_Optional_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c137`.`Id1` IS NOT NULL AND `c142`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c137`.`Id2` IS NOT NULL AND `c142`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c149`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +FROM (`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +""", + // + """ +SELECT `c152`.`Id1`, `c152`.`Id2`, `c152`.`Level3_Optional_Id1`, `c152`.`Level3_Optional_Id2`, `c152`.`Level3_Required_Id1`, `c152`.`Level3_Required_Id2`, `c152`.`Name`, `c152`.`OneToMany_Optional_Inverse4Id1`, `c152`.`OneToMany_Optional_Inverse4Id2`, `c152`.`OneToMany_Optional_Self_Inverse4Id1`, `c152`.`OneToMany_Optional_Self_Inverse4Id2`, `c152`.`OneToMany_Required_Inverse4Id1`, `c152`.`OneToMany_Required_Inverse4Id2`, `c152`.`OneToMany_Required_Self_Inverse4Id1`, `c152`.`OneToMany_Required_Self_Inverse4Id2`, `c152`.`OneToOne_Optional_PK_Inverse4Id1`, `c152`.`OneToOne_Optional_PK_Inverse4Id2`, `c152`.`OneToOne_Optional_Self4Id1`, `c152`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c152` ON `c149`.`Id1` = `c152`.`OneToMany_Optional_Inverse4Id1` AND `c149`.`Id2` = `c152`.`OneToMany_Optional_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c149`.`Id1` IS NOT NULL AND `c152`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c149`.`Id2` IS NOT NULL AND `c152`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +""", + // + """ +SELECT `c154`.`Id1`, `c154`.`Id2`, `c154`.`Level3_Optional_Id1`, `c154`.`Level3_Optional_Id2`, `c154`.`Level3_Required_Id1`, `c154`.`Level3_Required_Id2`, `c154`.`Name`, `c154`.`OneToMany_Optional_Inverse4Id1`, `c154`.`OneToMany_Optional_Inverse4Id2`, `c154`.`OneToMany_Optional_Self_Inverse4Id1`, `c154`.`OneToMany_Optional_Self_Inverse4Id2`, `c154`.`OneToMany_Required_Inverse4Id1`, `c154`.`OneToMany_Required_Inverse4Id2`, `c154`.`OneToMany_Required_Self_Inverse4Id1`, `c154`.`OneToMany_Required_Self_Inverse4Id2`, `c154`.`OneToOne_Optional_PK_Inverse4Id1`, `c154`.`OneToOne_Optional_PK_Inverse4Id2`, `c154`.`OneToOne_Optional_Self4Id1`, `c154`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +FROM ((`CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c154` ON `c149`.`Id1` = `c154`.`OneToMany_Required_Inverse4Id1` AND `c149`.`Id2` = `c154`.`OneToMany_Required_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c149`.`Id1` IS NOT NULL AND `c154`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c149`.`Id2` IS NOT NULL AND `c154`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2`, `c154`.`Id1` & (`c154`.`Id2` & '') DESC +"""); + } + + public override async Task Projecting_multiple_collections_same_level_top_level_ordering(bool async) + { + await base.Projecting_multiple_collections_same_level_top_level_ordering(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +ORDER BY `c`.`Id2`, `c`.`Id1` +""", + // + """ +SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Date`, `c2`.`Level1_Optional_Id1`, `c2`.`Level1_Optional_Id2`, `c2`.`Level1_Required_Id1`, `c2`.`Level1_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse2Id1`, `c2`.`OneToMany_Optional_Inverse2Id2`, `c2`.`OneToMany_Optional_Self_Inverse2Id1`, `c2`.`OneToMany_Optional_Self_Inverse2Id2`, `c2`.`OneToMany_Required_Inverse2Id1`, `c2`.`OneToMany_Required_Inverse2Id2`, `c2`.`OneToMany_Required_Self_Inverse2Id1`, `c2`.`OneToMany_Required_Self_Inverse2Id2`, `c2`.`OneToOne_Optional_PK_Inverse2Id1`, `c2`.`OneToOne_Optional_PK_Inverse2Id2`, `c2`.`OneToOne_Optional_Self2Id1`, `c2`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c2` ON `c`.`Id1` = `c2`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c2`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1` +""", + // + """ +SELECT `c4`.`Id1`, `c4`.`Id2`, `c4`.`Date`, `c4`.`Level1_Optional_Id1`, `c4`.`Level1_Optional_Id2`, `c4`.`Level1_Required_Id1`, `c4`.`Level1_Required_Id2`, `c4`.`Name`, `c4`.`OneToMany_Optional_Inverse2Id1`, `c4`.`OneToMany_Optional_Inverse2Id2`, `c4`.`OneToMany_Optional_Self_Inverse2Id1`, `c4`.`OneToMany_Optional_Self_Inverse2Id2`, `c4`.`OneToMany_Required_Inverse2Id1`, `c4`.`OneToMany_Required_Inverse2Id2`, `c4`.`OneToMany_Required_Self_Inverse2Id1`, `c4`.`OneToMany_Required_Self_Inverse2Id2`, `c4`.`OneToOne_Optional_PK_Inverse2Id1`, `c4`.`OneToOne_Optional_PK_Inverse2Id2`, `c4`.`OneToOne_Optional_Self2Id1`, `c4`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c4` ON `c`.`Id1` = `c4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1` +"""); + } + + public override async Task Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(bool async) + { + await base.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +ORDER BY `c`.`Id2`, `c`.`Id1` DESC +""", + // + """ +SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Date`, `c2`.`Level1_Optional_Id1`, `c2`.`Level1_Optional_Id2`, `c2`.`Level1_Required_Id1`, `c2`.`Level1_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse2Id1`, `c2`.`OneToMany_Optional_Inverse2Id2`, `c2`.`OneToMany_Optional_Self_Inverse2Id1`, `c2`.`OneToMany_Optional_Self_Inverse2Id2`, `c2`.`OneToMany_Required_Inverse2Id1`, `c2`.`OneToMany_Required_Inverse2Id2`, `c2`.`OneToMany_Required_Self_Inverse2Id1`, `c2`.`OneToMany_Required_Self_Inverse2Id2`, `c2`.`OneToOne_Optional_PK_Inverse2Id1`, `c2`.`OneToOne_Optional_PK_Inverse2Id2`, `c2`.`OneToOne_Optional_Self2Id1`, `c2`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c2` ON `c`.`Id1` = `c2`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c2`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1` DESC +""", + // + """ +SELECT `c4`.`Id1`, `c4`.`Id2`, `c4`.`Date`, `c4`.`Level1_Optional_Id1`, `c4`.`Level1_Optional_Id2`, `c4`.`Level1_Required_Id1`, `c4`.`Level1_Required_Id2`, `c4`.`Name`, `c4`.`OneToMany_Optional_Inverse2Id1`, `c4`.`OneToMany_Optional_Inverse2Id2`, `c4`.`OneToMany_Optional_Self_Inverse2Id1`, `c4`.`OneToMany_Optional_Self_Inverse2Id2`, `c4`.`OneToMany_Required_Inverse2Id1`, `c4`.`OneToMany_Required_Inverse2Id2`, `c4`.`OneToMany_Required_Self_Inverse2Id1`, `c4`.`OneToMany_Required_Self_Inverse2Id2`, `c4`.`OneToOne_Optional_PK_Inverse2Id1`, `c4`.`OneToOne_Optional_PK_Inverse2Id2`, `c4`.`OneToOne_Optional_Self2Id1`, `c4`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c4` ON `c`.`Id1` = `c4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1` DESC +"""); + } + + public override async Task Projecting_multiple_collections_with_ordering_same_level(bool async) + { + await base.Projecting_multiple_collections_with_ordering_same_level(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +ORDER BY `c`.`Id1`, `c`.`Id2` +""", + // + """ +SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Date`, `c2`.`Level1_Optional_Id1`, `c2`.`Level1_Optional_Id2`, `c2`.`Level1_Required_Id1`, `c2`.`Level1_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse2Id1`, `c2`.`OneToMany_Optional_Inverse2Id2`, `c2`.`OneToMany_Optional_Self_Inverse2Id1`, `c2`.`OneToMany_Optional_Self_Inverse2Id2`, `c2`.`OneToMany_Required_Inverse2Id1`, `c2`.`OneToMany_Required_Inverse2Id2`, `c2`.`OneToMany_Required_Self_Inverse2Id1`, `c2`.`OneToMany_Required_Self_Inverse2Id2`, `c2`.`OneToOne_Optional_PK_Inverse2Id1`, `c2`.`OneToOne_Optional_PK_Inverse2Id2`, `c2`.`OneToOne_Optional_Self2Id1`, `c2`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c2` ON `c`.`Id1` = `c2`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c2`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `c2`.`Id2` +""", + // + """ +SELECT `c4`.`Id1`, `c4`.`Id2`, `c4`.`Date`, `c4`.`Level1_Optional_Id1`, `c4`.`Level1_Optional_Id2`, `c4`.`Level1_Required_Id1`, `c4`.`Level1_Required_Id2`, `c4`.`Name`, `c4`.`OneToMany_Optional_Inverse2Id1`, `c4`.`OneToMany_Optional_Inverse2Id2`, `c4`.`OneToMany_Optional_Self_Inverse2Id1`, `c4`.`OneToMany_Optional_Self_Inverse2Id2`, `c4`.`OneToMany_Required_Inverse2Id1`, `c4`.`OneToMany_Required_Inverse2Id2`, `c4`.`OneToMany_Required_Self_Inverse2Id1`, `c4`.`OneToMany_Required_Self_Inverse2Id2`, `c4`.`OneToOne_Optional_PK_Inverse2Id1`, `c4`.`OneToOne_Optional_PK_Inverse2Id2`, `c4`.`OneToOne_Optional_Self2Id1`, `c4`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c4` ON `c`.`Id1` = `c4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `c4`.`Name` DESC +"""); + } + + public override async Task Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(bool async) + { + await base.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +ORDER BY `c`.`Id2`, `c`.`Id1` +""", + // + """ +SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Date`, `c2`.`Level1_Optional_Id1`, `c2`.`Level1_Optional_Id2`, `c2`.`Level1_Required_Id1`, `c2`.`Level1_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse2Id1`, `c2`.`OneToMany_Optional_Inverse2Id2`, `c2`.`OneToMany_Optional_Self_Inverse2Id1`, `c2`.`OneToMany_Optional_Self_Inverse2Id2`, `c2`.`OneToMany_Required_Inverse2Id1`, `c2`.`OneToMany_Required_Inverse2Id2`, `c2`.`OneToMany_Required_Self_Inverse2Id1`, `c2`.`OneToMany_Required_Self_Inverse2Id2`, `c2`.`OneToOne_Optional_PK_Inverse2Id1`, `c2`.`OneToOne_Optional_PK_Inverse2Id2`, `c2`.`OneToOne_Optional_Self2Id1`, `c2`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c2` ON `c`.`Id1` = `c2`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c2`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `c2`.`Id2` +""", + // + """ +SELECT `c4`.`Id1`, `c4`.`Id2`, `c4`.`Date`, `c4`.`Level1_Optional_Id1`, `c4`.`Level1_Optional_Id2`, `c4`.`Level1_Required_Id1`, `c4`.`Level1_Required_Id2`, `c4`.`Name`, `c4`.`OneToMany_Optional_Inverse2Id1`, `c4`.`OneToMany_Optional_Inverse2Id2`, `c4`.`OneToMany_Optional_Self_Inverse2Id1`, `c4`.`OneToMany_Optional_Self_Inverse2Id2`, `c4`.`OneToMany_Required_Inverse2Id1`, `c4`.`OneToMany_Required_Inverse2Id2`, `c4`.`OneToMany_Required_Self_Inverse2Id1`, `c4`.`OneToMany_Required_Self_Inverse2Id2`, `c4`.`OneToOne_Optional_PK_Inverse2Id1`, `c4`.`OneToOne_Optional_PK_Inverse2Id2`, `c4`.`OneToOne_Optional_Self2Id1`, `c4`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` +FROM `CompositeOnes` AS `c` +INNER JOIN `CompositeTwos` AS `c4` ON `c`.`Id1` = `c4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `c4`.`Name` DESC +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/DbFunctionsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/DbFunctionsLibRedTest.cs new file mode 100644 index 00000000..6b229704 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/DbFunctionsLibRedTest.cs @@ -0,0 +1,517 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +using EF = Microsoft.EntityFrameworkCore.EF; + +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class DbFunctionsLibRedTest : NorthwindDbFunctionsQueryRelationalTestBase> + { + public DbFunctionsLibRedTest( + NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Like_literal(bool async) + { + await base.Like_literal(async); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Customers` AS `c` + WHERE `c`.`ContactName` LIKE '%M%' + """); + } + + public override async Task Like_identity(bool async) + { + await base.Like_identity(async); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Customers` AS `c` + WHERE `c`.`ContactName` LIKE `c`.`ContactName` + """); + } + + [ConditionalTheory(Skip = "No escape character support in LibRed")] + public override async Task Like_literal_with_escape(bool async) + { + await base.Like_literal_with_escape(async); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Customers` AS `c` + WHERE `c`.`ContactName` LIKE '!%' ESCAPE '!' + """); + } + + public override async Task Like_all_literals(bool async) + { + await base.Like_all_literals(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE 'FOO' LIKE '%O%' +"""); + } + + [ConditionalTheory(Skip = "No escape character support in LibRed")] + public override async Task Like_all_literals_with_escape(bool async) + { + await base.Like_all_literals_with_escape(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Customers] AS [c] +WHERE N'%' LIKE N'!%' ESCAPE N'!' +"""); + } + + [ConditionalTheory(Skip = "No ecollate support in LibRed")] + public override async Task Collate_case_insensitive(bool async) + { + await base.Collate_case_insensitive(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Customers] AS [c] +WHERE [c].[ContactName] COLLATE Latin1_General_CI_AI = N'maria anders' +"""); + } + + [ConditionalTheory(Skip = "No collate support in LibRed")] + public override async Task Collate_case_sensitive(bool async) + { + await base.Collate_case_sensitive(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Customers] AS [c] +WHERE [c].[ContactName] COLLATE Latin1_General_CS_AS = N'maria anders' +"""); + } + + [ConditionalTheory(Skip = "No collate support in LibRed")] + public override async Task Collate_case_sensitive_constant(bool async) + { + await base.Collate_case_sensitive_constant(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Customers] AS [c] +WHERE [c].[ContactName] = N'maria anders' COLLATE Latin1_General_CS_AS +"""); + } + + public override async Task Collate_is_null(bool async) + { + await base.Collate_is_null(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE `c`.`Region` IS NULL +"""); + } + + public override async Task Least(bool async) + { + await base.Least(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE IIF(`o`.`OrderID` < 10251, `o`.`OrderID`, 10251) = 10251 +"""); + } + + public override async Task Greatest(bool async) + { + await base.Greatest(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE IIF(`o`.`OrderID` > 10251, `o`.`OrderID`, 10251) = 10251 +"""); + } + + public override async Task Least_with_nullable_value_type(bool async) + { + await base.Least_with_nullable_value_type(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE IIF(`o`.`OrderID` < 10251, `o`.`OrderID`, 10251) = 10251 +"""); + } + + public override async Task Greatest_with_nullable_value_type(bool async) + { + await base.Greatest_with_nullable_value_type(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE IIF(`o`.`OrderID` > 10251, `o`.`OrderID`, 10251) = 10251 +"""); + } + + public override async Task Least_with_parameter_array_is_not_supported(bool async) + { + await base.Least_with_parameter_array_is_not_supported(async); + + AssertSql(); + } + + public override async Task Greatest_with_parameter_array_is_not_supported(bool async) + { + await base.Greatest_with_parameter_array_is_not_supported(async); + + AssertSql(); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Year(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffYear(c.OrderDate, DateTime.Now) == 0, + c => c.OrderDate.Value.Year - DateTime.Now.Year == 0); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +WHERE DATEDIFF('yyyy', `o`.`OrderDate`, NOW()) = 0 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Month(bool async) + { + var now = DateTime.Now; + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffMonth(c.OrderDate, DateTime.Now) == 0, + c => c.OrderDate.Value.Year * 12 + c.OrderDate.Value.Month - (now.Year * 12 + now.Month) == 0); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +WHERE DATEDIFF('m', `o`.`OrderDate`, NOW()) = 0 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Day(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffDay(c.OrderDate, DateTime.Now) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +WHERE DATEDIFF('d', `o`.`OrderDate`, NOW()) = 0 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Hour(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffHour(c.OrderDate, DateTime.Now) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +WHERE DATEDIFF('h', `o`.`OrderDate`, NOW()) = 0 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Minute(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffMinute(c.OrderDate, DateTime.Now) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +WHERE DATEDIFF('n', `o`.`OrderDate`, NOW()) = 0 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Second(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffSecond(c.OrderDate, DateTime.Now) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +WHERE DATEDIFF('s', `o`.`OrderDate`, NOW()) = 0 +"""); + } + + /*[ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Millisecond(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffMillisecond(DateTime.Now, DateTime.Now.AddDays(1)) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(millisecond, GETDATE(), DATEADD(day, CAST(1.0E0 AS int), GETDATE())) = 0 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Microsecond(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffMicrosecond(DateTime.Now, DateTime.Now.AddSeconds(1)) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(microsecond, GETDATE(), DATEADD(second, CAST(1.0E0 AS int), GETDATE())) = 0 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Nanosecond(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffNanosecond(DateTime.Now, DateTime.Now.AddSeconds(1)) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(nanosecond, GETDATE(), DATEADD(second, CAST(1.0E0 AS int), GETDATE())) = 0 +"""); + } + + [ConditionalFact] + public virtual void DateDiff_Week_datetime() + { + using var context = CreateContext(); + var count = context.Orders + .Count( + c => EF.Functions.DateDiffWeek( + c.OrderDate, + new DateTime(1998, 5, 6, 0, 0, 0)) + == 5); + + Assert.Equal(16, count); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(week, [o].[OrderDate], '1998-05-06T00:00:00.000') = 5 +"""); + } + + [ConditionalFact] + public virtual void DateDiff_Week_datetimeoffset() + { + using var context = CreateContext(); + var count = context.Orders + .Count( + c => EF.Functions.DateDiffWeek( + c.OrderDate, + new DateTimeOffset(1998, 5, 6, 0, 0, 0, TimeSpan.Zero)) + == 5); + + Assert.Equal(16, count); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(week, CAST([o].[OrderDate] AS datetimeoffset), '1998-05-06T00:00:00.0000000+00:00') = 5 +"""); + } + + [ConditionalFact] + public virtual void DateDiff_Week_parameters_null() + { + using var context = CreateContext(); + var count = context.Orders + .Count( + c => EF.Functions.DateDiffWeek( + null, + c.OrderDate) + == 5); + + Assert.Equal(0, count); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(week, NULL, [o].[OrderDate]) = 5 +"""); + }*/ + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task IsDate_not_valid(bool async) + { + await AssertQueryScalar( + async, + ss => ss.Set().Where(o => !EF.Functions.IsDate(o.CustomerID)).Select(o => EF.Functions.IsDate(o.CustomerID)), + ss => ss.Set().Select(c => false)); + + AssertSql( + """ +SELECT CBOOL(ISDATE(`o`.`CustomerID`)) +FROM `Orders` AS `o` +WHERE NOT (CBOOL(ISDATE(`o`.`CustomerID`))) +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task IsDate_valid(bool async) + { + await AssertQueryScalar( + async, + ss => ss.Set() + .Where(o => EF.Functions.IsDate(o.OrderDate.Value.ToString())) + .Select(o => EF.Functions.IsDate(o.OrderDate.Value.ToString())), + ss => ss.Set().Select(o => true)); + + AssertSql( + """ +SELECT CBOOL(ISDATE(IIF((`o`.`OrderDate` & '') IS NULL, '', (`o`.`OrderDate` & '')))) +FROM `Orders` AS `o` +WHERE CBOOL(ISDATE(IIF((`o`.`OrderDate` & '') IS NULL, '', (`o`.`OrderDate` & '')))) +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task IsDate_join_fields(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.IsDate(c.CustomerID + c.OrderID), + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +WHERE CBOOL(ISDATE(IIF(`o`.`CustomerID` IS NULL, '', `o`.`CustomerID`) & (`o`.`OrderID` & ''))) +"""); + } + + [ConditionalFact] + public void IsDate_should_throw_on_client_eval() + { + var exIsDate = Assert.Throws(() => EF.Functions.IsDate("#ISDATE#")); + + Assert.Equal( + CoreStrings.FunctionOnClient(nameof(JetDbFunctionsExtensions.IsDate)), + exIsDate.Message); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override string CaseInsensitiveCollation + => ""; + + protected override string CaseSensitiveCollation + => ""; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Ef6GroupByLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Ef6GroupByLibRedTest.cs new file mode 100644 index 00000000..5a6489d3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Ef6GroupByLibRedTest.cs @@ -0,0 +1,933 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class Ef6GroupByLibRedTest : Ef6GroupByTestBase +{ + public Ef6GroupByLibRedTest(Ef6GroupByLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task GroupBy_is_optimized_when_projecting_group_key(bool async) + { + await base.GroupBy_is_optimized_when_projecting_group_key(async); + + AssertSql( +""" +SELECT `a`.`FirstName` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // [Distinct1].[FirstName] AS [FirstName] + // FROM ( SELECT DISTINCT + // [Extent1].[FirstName] AS [FirstName] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // ) AS [Distinct1]"; + } + + public override async Task GroupBy_is_optimized_when_projecting_group_count(bool async) + { + await base.GroupBy_is_optimized_when_projecting_group_count(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // [GroupBy1].[A1] AS [C1] + // FROM ( SELECT + // [Extent1].[FirstName] AS [K1], + // COUNT(1) AS [A1] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // GROUP BY [Extent1].[FirstName] + // ) AS [GroupBy1]"; + } + + public override async Task GroupBy_is_optimized_when_projecting_expression_containing_group_key(bool async) + { + await base.GroupBy_is_optimized_when_projecting_expression_containing_group_key(async); + + AssertSql( +""" +SELECT `a`.`Id` * 2 +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id` +"""); + + // EF6 SQL: + // @"SELECT + // [Extent1].[Id] * 2 AS [C1] + // FROM [dbo].[ArubaOwners] AS [Extent1]"; + } + + public override async Task GroupBy_is_optimized_when_projecting_aggregate_on_the_group(bool async) + { + await base.GroupBy_is_optimized_when_projecting_aggregate_on_the_group(async); + + AssertSql( +""" +SELECT MAX(`a`.`Id`) +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // [GroupBy1].[A1] AS [C1] + // FROM ( SELECT + // [Extent1].[FirstName] AS [K1], + // MAX([Extent1].[Id]) AS [A1] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // GROUP BY [Extent1].[FirstName] + // ) AS [GroupBy1]"; + } + + public override async Task GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_group_aggregate(bool async) + { + await base.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_group_aggregate(async); + + AssertSql( +""" +SELECT `a`.`FirstName` AS `Key`, MAX(`a`.`Id`) AS `Aggregate` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // 1 AS [C1], + // [GroupBy1].[K1] AS [FirstName], + // [GroupBy1].[A1] AS [C2] + // FROM ( SELECT + // [Extent1].[FirstName] AS [K1], + // MAX([Extent1].[Id]) AS [A1] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // GROUP BY [Extent1].[FirstName] + // ) AS [GroupBy1]"; + } + + public override async Task GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_multiple_group_aggregates( + bool async) + { + await base.GroupBy_is_optimized_when_projecting_anonymous_type_containing_group_key_and_multiple_group_aggregates(async); + + AssertSql( +""" +SELECT `a`.`FirstName` AS `key1`, MAX(`a`.`Id`) AS `max`, MIN(`a`.`Id` + 2) AS `min` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // 1 AS [C1], + // [GroupBy1].[K1] AS [FirstName], + // [GroupBy1].[A1] AS [C2], + // [GroupBy1].[A2] AS [C3] + // FROM ( SELECT + // [Extent1].[K1] AS [K1], + // MAX([Extent1].[A1_0]) AS [A1], + // MIN([Extent1].[A2_0]) AS [A2] + // FROM ( SELECT + // [Extent1].[FirstName] AS [K1], + // [Extent1].[Id] AS [A1_0], + // [Extent1].[Id] + 2 AS [A2_0] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // ) AS [Extent1] + // GROUP BY [K1] + // ) AS [GroupBy1]"; + } + + public override async Task GroupBy_is_optimized_when_projecting_conditional_expression_containing_group_key(bool async) + { + await base.GroupBy_is_optimized_when_projecting_conditional_expression_containing_group_key(async); + + AssertSql( + """ +SELECT IIF(`a`.`FirstName` IS NULL, 'is null', 'not null') AS `keyIsNull`, FALSE AS `logicExpression` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // 1 AS [C1], + // CASE WHEN ([Distinct1].[FirstName] IS NULL) THEN N'is null' ELSE N'not null' END AS [C2], + // CASE WHEN (((@p__linq__0 = 1) AND (@p__linq__1 = 1)) OR ((@p__linq__2 = 1) AND (@p__linq__3 = 1))) THEN cast(1 as bit) WHEN ( NOT (((@p__linq__0 = 1) AND (@p__linq__1 = 1)) OR ((@p__linq__2 = 1) AND (@p__linq__3 = 1)))) THEN cast(0 as bit) END AS [C3] + // FROM ( SELECT DISTINCT + // [Extent1].[FirstName] AS [FirstName] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // ) AS [Distinct1]"; + } + + public override async Task GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate( + bool async) + { + await base.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async); + + AssertSql( +""" +SELECT `a`.`FirstName`, AVG(CDBL(`a`.`Id`)) AS `AverageId` +FROM `ArubaOwner` AS `a` +WHERE `a`.`Id` > 5 +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // 1 AS [C1], + // [GroupBy1].[K1] AS [FirstName], + // [GroupBy1].[A1] AS [C2] + // FROM ( SELECT + // [Extent1].[FirstName] AS [K1], + // AVG( CAST( [Extent1].[Id] AS float)) AS [A1] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // WHERE [Extent1].[Id] > 5 + // GROUP BY [Extent1].[FirstName] + // ) AS [GroupBy1]"; + } + + public override async Task GroupBy_is_optimized_when_projecting_function_aggregate_with_expression(bool async) + { + await base.GroupBy_is_optimized_when_projecting_function_aggregate_with_expression(async); + + AssertSql( +""" +SELECT MAX(`a`.`Id` * 2) +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // [GroupBy1].[A1] AS [C1] + // FROM ( SELECT + // [Extent1].[K1] AS [K1], + // MAX([Extent1].[A1_0]) AS [A1] + // FROM ( SELECT + // [Extent1].[FirstName] AS [K1], + // [Extent1].[Id] * 2 AS [A1_0] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // ) AS [Extent1] + // GROUP BY [K1] + // ) AS [GroupBy1]"; + } + + public override async Task GroupBy_is_optimized_when_projecting_expression_with_multiple_function_aggregates(bool async) + { + await base.GroupBy_is_optimized_when_projecting_expression_with_multiple_function_aggregates(async); + + AssertSql( +""" +SELECT MAX(`a`.`Id`) - MIN(`a`.`Id`) AS `maxMinusMin` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // 1 AS [C1], + // [GroupBy1].[A1] - [GroupBy1].[A2] AS [C2] + // FROM ( SELECT + // [Extent1].[FirstName] AS [K1], + // MAX([Extent1].[Id]) AS [A1], + // MIN([Extent1].[Id]) AS [A2] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // GROUP BY [Extent1].[FirstName] + // ) AS [GroupBy1]"; + } + + public override async Task GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(bool async) + { + await base.GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(async); + + AssertSql( +""" +SELECT `a`.`FirstName` +FROM `ArubaOwner` AS `a` +WHERE `a`.`Id` < 4 +GROUP BY `a`.`FirstName` +"""); + + // EF6 SQL: + // @"SELECT + // [Distinct1].[FirstName] AS [FirstName] + // FROM ( SELECT DISTINCT + // [Extent1].[FirstName] AS [FirstName] + // FROM [dbo].[ArubaOwners] AS [Extent1] + // WHERE [Extent1].[Id] < 4 + // ) AS [Distinct1]"; + } + + public override async Task Grouping_by_all_columns_doesnt_produce_a_groupby_statement(bool async) + { + await base.Grouping_by_all_columns_doesnt_produce_a_groupby_statement(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_1(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_1(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`FirstName`, `a`.`LastName`, `a`.`Alias` +"""); + + // EF6 SQL: + // @"SELECT + // (SELECT + // COUNT(1) AS [A1] + // FROM [dbo].[ArubaOwners] AS [Extent2] + // WHERE [Extent1].[Id] = [Extent2].[Id]) AS [C1] + // FROM [dbo].[ArubaOwners] AS [Extent1]"; + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_2(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_2(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_3(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_3(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_4(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_4(async); + + AssertSql( +""" +SELECT COUNT(*) AS `Count` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_5(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_5(async); + + AssertSql( +""" +SELECT `a`.`Id`, COUNT(*) AS `Count` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_6(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_6(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`Alias`, COUNT(*) AS `Count` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_7(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_7(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_8(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_8(async); + + AssertSql( +""" +SELECT `a`.`Id`, COUNT(*) AS `Count` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_9(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_9(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`Alias`, COUNT(*) AS `Count` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task Grouping_by_all_columns_with_aggregate_function_works_10(bool async) + { + await base.Grouping_by_all_columns_with_aggregate_function_works_10(async); + + AssertSql( +""" +SELECT `a`.`Id`, IIF(SUM(`a`.`Id`) IS NULL, 0, SUM(`a`.`Id`)) AS `Sum`, COUNT(*) AS `Count` +FROM `ArubaOwner` AS `a` +GROUP BY `a`.`Id`, `a`.`Alias`, `a`.`FirstName`, `a`.`LastName` +"""); + } + + public override async Task GroupBy_Simple_1_from_LINQ_101(bool async) + { + await base.GroupBy_Simple_1_from_LINQ_101(async); + + AssertSql(); + } + + public override async Task GroupBy_Simple_2_from_LINQ_101(bool async) + { + await base.GroupBy_Simple_2_from_LINQ_101(async); + + AssertSql(); + } + + public override async Task GroupBy_Simple_3_from_LINQ_101(bool async) + { + await base.GroupBy_Simple_3_from_LINQ_101(async); + + AssertSql(); + } + + public override async Task GroupBy_Nested_from_LINQ_101(bool async) + { + await base.GroupBy_Nested_from_LINQ_101(async); + + AssertSql(); + } + + public override async Task Any_Grouped_from_LINQ_101(bool async) + { + await base.Any_Grouped_from_LINQ_101(async); + + AssertSql(); + } + + public override async Task All_Grouped_from_LINQ_101(bool async) + { + await base.All_Grouped_from_LINQ_101(async); + + AssertSql(); + } + + public override async Task Min_Elements_from_LINQ_101(bool async) + { + await base.Min_Elements_from_LINQ_101(async); + + AssertSql(); + } + + public override async Task Max_Elements_from_LINQ_101(bool async) + { + await base.Max_Elements_from_LINQ_101(async); + + AssertSql(); + } + + public override async Task Group_Join_from_LINQ_101(bool async) + { + await base.Group_Join_from_LINQ_101(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`CompanyName`, `c`.`Region`, `s`.`Id`, `s`.`CustomerId`, `s`.`OrderDate`, `s`.`Total`, `s`.`Id0` +FROM `CustomerForLinq` AS `c` +LEFT JOIN ( + SELECT `o`.`Id`, `o`.`CustomerId`, `o`.`OrderDate`, `o`.`Total`, `c0`.`Id` AS `Id0` + FROM `OrderForLinq` AS `o` + LEFT JOIN `CustomerForLinq` AS `c0` ON `o`.`CustomerId` = `c0`.`Id` +) AS `s` ON `c`.`Id` = `s`.`Id0` +ORDER BY `c`.`Id`, `s`.`Id` +"""); + } + + public override async Task Whats_new_2021_sample_3(bool async) + { + await base.Whats_new_2021_sample_3(async); + + AssertSql( + """ +SELECT `p2`.`c`, `p2`.`c0` +FROM ( + SELECT ( + SELECT TOP 1 `p0`.`LastName` + FROM `Person` AS `p0` + WHERE `p0`.`MiddleInitial` = 'Q' AND `p0`.`Age` = 20 AND (`p`.`LastName` = `p0`.`LastName` OR (`p`.`LastName` IS NULL AND `p0`.`LastName` IS NULL))) AS `c`, IIF(LEN(( + SELECT TOP 1 `p0`.`LastName` + FROM `Person` AS `p0` + WHERE `p0`.`MiddleInitial` = 'Q' AND `p0`.`Age` = 20 AND (`p`.`LastName` = `p0`.`LastName` OR (`p`.`LastName` IS NULL AND `p0`.`LastName` IS NULL)))) IS NULL, NULL, CLNG(LEN(( + SELECT TOP 1 `p0`.`LastName` + FROM `Person` AS `p0` + WHERE `p0`.`MiddleInitial` = 'Q' AND `p0`.`Age` = 20 AND (`p`.`LastName` = `p0`.`LastName` OR (`p`.`LastName` IS NULL AND `p0`.`LastName` IS NULL)))))) AS `c0`, `p`.`LastName` + FROM `Person` AS `p` + WHERE `p`.`MiddleInitial` = 'Q' AND `p`.`Age` = 20 + GROUP BY `p`.`LastName` +) AS `p2` +ORDER BY `p2`.`c0` +"""); + } + + public override async Task Whats_new_2021_sample_5(bool async) + { + await base.Whats_new_2021_sample_5(async); + + AssertSql( + """ +SELECT `p2`.`c` +FROM ( + SELECT ( + SELECT TOP 1 `p0`.`LastName` + FROM `Person` AS `p0` + WHERE `p`.`FirstName` = `p0`.`FirstName` OR (`p`.`FirstName` IS NULL AND `p0`.`FirstName` IS NULL)) AS `c`, `p`.`FirstName` + FROM `Person` AS `p` + GROUP BY `p`.`FirstName` +) AS `p2` +ORDER BY `p2`.`c` +"""); + } + + public override async Task Whats_new_2021_sample_6(bool async) + { + await base.Whats_new_2021_sample_6(async); + + AssertSql( + """ +SELECT `p2`.`c` +FROM ( + SELECT ( + SELECT TOP 1 `p0`.`MiddleInitial` + FROM `Person` AS `p0` + WHERE `p0`.`Age` = 20 AND `p`.`Id` = `p0`.`Id`) AS `c`, `p`.`Id` + FROM `Person` AS `p` + WHERE `p`.`Age` = 20 + GROUP BY `p`.`Id` +) AS `p2` +ORDER BY `p2`.`c` +"""); + } + + public override async Task Whats_new_2021_sample_14(bool async) + { + await base.Whats_new_2021_sample_14(async); + + AssertSql(); + } + + public override async Task Whats_new_2021_sample_15(bool async) + { + await base.Whats_new_2021_sample_15(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Age], [t0].[FirstName], [t0].[LastName], [t0].[MiddleInitial] +FROM ( + SELECT [f].[Id], [f].[Size] + FROM [Person] AS [p] + LEFT JOIN [Feet] AS [f] ON [p].[Id] = [f].[Id] + GROUP BY [f].[Id], [f].[Size] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Age], [t1].[FirstName], [t1].[LastName], [t1].[MiddleInitial], [t1].[Id0], [t1].[Size] + FROM ( + SELECT [p0].[Id], [p0].[Age], [p0].[FirstName], [p0].[LastName], [p0].[MiddleInitial], [f0].[Id] AS [Id0], [f0].[Size], ROW_NUMBER() OVER(PARTITION BY [f0].[Id], [f0].[Size] ORDER BY [p0].[Id] DESC) AS [row] + FROM [Person] AS [p0] + LEFT JOIN [Feet] AS [f0] ON [p0].[Id] = [f0].[Id] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON ([t].[Id] = [t0].[Id0] OR (([t].[Id] IS NULL) AND ([t0].[Id0] IS NULL))) AND ([t].[Size] = [t0].[Size] OR (([t].[Size] IS NULL) AND ([t0].[Size] IS NULL))) +"""); + } + + public override async Task Whats_new_2021_sample_16(bool async) + { + await base.Whats_new_2021_sample_16(async); + + AssertSql(); + } + + public override async Task Min_Grouped_from_LINQ_101(bool async) + { + await base.Min_Grouped_from_LINQ_101(async); + + AssertSql( +""" +SELECT `p`.`Category`, MIN(`p`.`UnitPrice`) AS `CheapestPrice` +FROM `ProductForLinq` AS `p` +GROUP BY `p`.`Category` +"""); + } + + public override async Task Average_Grouped_from_LINQ_101(bool async) + { + await base.Average_Grouped_from_LINQ_101(async); + + AssertSql( +""" +SELECT `p`.`Category`, AVG(`p`.`UnitPrice`) AS `AveragePrice` +FROM `ProductForLinq` AS `p` +GROUP BY `p`.`Category` +"""); + } + + public override async Task Whats_new_2021_sample_8(bool async) + { + await base.Whats_new_2021_sample_8(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Person` AS `p` + LEFT JOIN `Feet` AS `f` ON `p`.`Id` = `f`.`Id` + GROUP BY `f`.`Id`, `f`.`Size` +) AS `s` +"""); + } + + public override async Task Whats_new_2021_sample_12(bool async) + { + await base.Whats_new_2021_sample_12(async); + + AssertSql( + """ +SELECT `p1`.`FirstName`, `s0`.`Id`, `s0`.`Age`, `s0`.`FirstName`, `s0`.`LastName`, `s0`.`MiddleInitial`, `s0`.`Id0`, `s0`.`Age0`, `s0`.`PersonId`, `s0`.`Style` +FROM ( + SELECT `p`.`FirstName` + FROM `Person` AS `p` + GROUP BY `p`.`FirstName` +) AS `p1` +LEFT JOIN ( + SELECT `p0`.`Id`, `p0`.`Age`, `p0`.`FirstName`, `p0`.`LastName`, `p0`.`MiddleInitial`, `s`.`Id` AS `Id0`, `s`.`Age` AS `Age0`, `s`.`PersonId`, `s`.`Style` + FROM `Person` AS `p0` + LEFT JOIN `Shoes` AS `s` ON `p0`.`Id` = `s`.`PersonId` +) AS `s0` ON `p1`.`FirstName` = `s0`.`FirstName` +ORDER BY `p1`.`FirstName`, `s0`.`Id` +"""); + } + + public override async Task Whats_new_2021_sample_10(bool async) + { + await base.Whats_new_2021_sample_10(async); + + AssertSql( + """ +SELECT `s1`.`Id`, `s1`.`Age`, `s1`.`Style`, `s2`.`Id`, `s2`.`Style`, `s2`.`Age`, `s2`.`Id0` +FROM ( + SELECT `p`.`Id`, `s`.`Age`, `s`.`Style` + FROM `Person` AS `p` + INNER JOIN `Shoes` AS `s` ON `p`.`Age` = `s`.`Age` + GROUP BY `p`.`Id`, `s`.`Style`, `s`.`Age` +) AS `s1` +LEFT JOIN ( + SELECT `s0`.`Id`, `s0`.`Style`, `s0`.`Age`, `p0`.`Id` AS `Id0` + FROM `Person` AS `p0` + INNER JOIN `Shoes` AS `s0` ON `p0`.`Age` = `s0`.`Age` +) AS `s2` ON `s1`.`Id` = `s2`.`Id0` AND (`s1`.`Style` = `s2`.`Style` OR (`s1`.`Style` IS NULL AND `s2`.`Style` IS NULL)) AND `s1`.`Age` = `s2`.`Age` +ORDER BY `s1`.`Id`, `s1`.`Style`, `s1`.`Age`, `s2`.`Id0` +"""); + } + + public override async Task Whats_new_2021_sample_13(bool async) + { + await base.Whats_new_2021_sample_13(async); + + AssertSql( + """ +SELECT `p1`.`FirstName`, `p1`.`MiddleInitial`, `p0`.`Id`, `p0`.`Age`, `p0`.`FirstName`, `p0`.`LastName`, `p0`.`MiddleInitial` +FROM ( + SELECT `p`.`FirstName`, `p`.`MiddleInitial` + FROM `Person` AS `p` + GROUP BY `p`.`FirstName`, `p`.`MiddleInitial` +) AS `p1` +LEFT JOIN `Person` AS `p0` ON (`p1`.`FirstName` = `p0`.`FirstName` OR (`p1`.`FirstName` IS NULL AND `p0`.`FirstName` IS NULL)) AND (`p1`.`MiddleInitial` = `p0`.`MiddleInitial` OR (`p1`.`MiddleInitial` IS NULL AND `p0`.`MiddleInitial` IS NULL)) +ORDER BY `p1`.`FirstName`, `p1`.`MiddleInitial`, `p0`.`Id` +"""); + } + + public override async Task Cross_Join_with_Group_Join_from_LINQ_101(bool async) + { + await base.Cross_Join_with_Group_Join_from_LINQ_101(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`CompanyName`, `c`.`Region`, `s`.`Id` +FROM `CustomerForLinq` AS `c` +INNER JOIN ( + SELECT `o`.`Id`, `c0`.`Id` AS `Id0` + FROM `OrderForLinq` AS `o` + LEFT JOIN `CustomerForLinq` AS `c0` ON `o`.`CustomerId` = `c0`.`Id` +) AS `s` ON `c`.`Id` = `s`.`Id0` +"""); + } + + public override async Task Whats_new_2021_sample_2(bool async) + { + await base.Whats_new_2021_sample_2(async); + + AssertSql( +""" +SELECT [t0].[FirstName], [t0].[FullName], [t0].[c] +FROM ( + SELECT TOP(1) [p].[FirstName] + FROM [Person] AS [p] + GROUP BY [p].[FirstName] + ORDER BY [p].[FirstName] +) AS [t] +LEFT JOIN ( + SELECT [t1].[FirstName], [t1].[FullName], [t1].[c] + FROM ( + SELECT [p0].[FirstName], (((COALESCE([p0].[FirstName], N'') + N' ') + COALESCE([p0].[MiddleInitial], N'')) + N' ') + COALESCE([p0].[LastName], N'') AS [FullName], 1 AS [c], ROW_NUMBER() OVER(PARTITION BY [p0].[FirstName] ORDER BY [p0].[Id]) AS [row] + FROM [Person] AS [p0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[FirstName] = [t0].[FirstName] +ORDER BY [t].[FirstName] +"""); + } + + public override async Task Whats_new_2021_sample_1(bool async) + { + await base.Whats_new_2021_sample_1(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Age], [t0].[FirstName], [t0].[LastName], [t0].[MiddleInitial], [t].[FirstName], [s].[Id], [s].[Age], [s].[PersonId], [s].[Style] +FROM ( + SELECT [p].[FirstName] + FROM [Person] AS [p] + GROUP BY [p].[FirstName] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Age], [t1].[FirstName], [t1].[LastName], [t1].[MiddleInitial] + FROM ( + SELECT [p0].[Id], [p0].[Age], [p0].[FirstName], [p0].[LastName], [p0].[MiddleInitial], ROW_NUMBER() OVER(PARTITION BY [p0].[FirstName] ORDER BY [p0].[FirstName], [p0].[LastName]) AS [row] + FROM [Person] AS [p0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[FirstName] = [t0].[FirstName] +LEFT JOIN [Shoes] AS [s] ON [t0].[Id] = [s].[PersonId] +ORDER BY [t].[FirstName], [t0].[Id] +"""); + } + + public override async Task Whats_new_2021_sample_7(bool async) + { + await base.Whats_new_2021_sample_7(async); + + AssertSql( + """ +@size='11' + +SELECT `p0`.`LastName`, `f`.`Size`, ( + SELECT MIN(`f1`.`Size`) + FROM ((`Person` AS `p1` + LEFT JOIN `Feet` AS `f0` ON `p1`.`Id` = `f0`.`Id`) + LEFT JOIN `Person` AS `p2` ON `f0`.`Id` = `p2`.`Id`) + LEFT JOIN `Feet` AS `f1` ON `p1`.`Id` = `f1`.`Id` + WHERE `f0`.`Size` = @size AND `p1`.`MiddleInitial` IS NOT NULL AND (`f0`.`Id` <> 1 OR `f0`.`Id` IS NULL) AND (`f`.`Size` = `f0`.`Size` OR (`f`.`Size` IS NULL AND `f0`.`Size` IS NULL)) AND (`p0`.`LastName` = `p2`.`LastName` OR (`p0`.`LastName` IS NULL AND `p2`.`LastName` IS NULL))) AS `Min` +FROM (`Person` AS `p` +LEFT JOIN `Feet` AS `f` ON `p`.`Id` = `f`.`Id`) +LEFT JOIN `Person` AS `p0` ON `f`.`Id` = `p0`.`Id` +WHERE `f`.`Size` = @size AND `p`.`MiddleInitial` IS NOT NULL AND (`f`.`Id` <> 1 OR `f`.`Id` IS NULL) +GROUP BY `f`.`Size`, `p0`.`LastName` +"""); + } + + public override async Task Sum_Grouped_from_LINQ_101(bool async) + { + await base.Sum_Grouped_from_LINQ_101(async); + + AssertSql( +""" +SELECT `p`.`Category`, IIF(SUM(`p`.`UnitsInStock`) IS NULL, 0, SUM(`p`.`UnitsInStock`)) AS `TotalUnitsInStock` +FROM `ProductForLinq` AS `p` +GROUP BY `p`.`Category` +"""); + } + + public override async Task Count_Grouped_from_LINQ_101(bool async) + { + await base.Count_Grouped_from_LINQ_101(async); + + AssertSql( +""" +SELECT `p`.`Category`, COUNT(*) AS `ProductCount` +FROM `ProductForLinq` AS `p` +GROUP BY `p`.`Category` +"""); + } + + public override async Task Whats_new_2021_sample_9(bool async) + { + await base.Whats_new_2021_sample_9(async); + + AssertSql( +""" +SELECT `p`.`FirstName` AS `Feet`, ( + SELECT IIF(SUM(`f`.`Size`) IS NULL, 0, SUM(`f`.`Size`)) + FROM `Person` AS `p0` + LEFT JOIN `Feet` AS `f` ON `p0`.`Id` = `f`.`Id` + WHERE `p`.`FirstName` = `p0`.`FirstName` OR (`p`.`FirstName` IS NULL AND `p0`.`FirstName` IS NULL)) AS `Total` +FROM `Person` AS `p` +GROUP BY `p`.`FirstName` +"""); + } + + public override async Task LongCount_Grouped_from_LINQ_101(bool async) + { + await base.LongCount_Grouped_from_LINQ_101(async); + + AssertSql( +""" +SELECT `p`.`Category`, COUNT(*) AS `ProductLongCount` +FROM `ProductForLinq` AS `p` +GROUP BY `p`.`Category` +"""); + } + + public override async Task Whats_new_2021_sample_4(bool async) + { + await base.Whats_new_2021_sample_4(async); + + AssertSql( +""" +SELECT `s`.`Style` AS `Key`, ( + SELECT TOP 1 `s0`.`Style` + FROM `Person` AS `p0` + INNER JOIN `Shoes` AS `s0` ON `p0`.`Age` = `s0`.`Age` + WHERE `s`.`Style` = `s0`.`Style` OR (`s`.`Style` IS NULL AND `s0`.`Style` IS NULL)) AS `Style`, COUNT(*) AS `Count` +FROM `Person` AS `p` +INNER JOIN `Shoes` AS `s` ON `p`.`Age` = `s`.`Age` +GROUP BY `s`.`Style` +"""); + } + + public override async Task Left_Outer_Join_with_Group_Join_from_LINQ_101(bool async) + { + await base.Left_Outer_Join_with_Group_Join_from_LINQ_101(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`CompanyName`, `c`.`Region`, `s`.`Id`, `s`.`Id0`, `o0`.`Id`, `o0`.`CustomerId`, `o0`.`OrderDate`, `o0`.`Total`, IIF(`s`.`Id` IS NULL, -1, `s`.`Id`) +FROM (`CustomerForLinq` AS `c` +LEFT JOIN ( + SELECT `o`.`Id`, `c0`.`Id` AS `Id0` + FROM `OrderForLinq` AS `o` + LEFT JOIN `CustomerForLinq` AS `c0` ON `o`.`CustomerId` = `c0`.`Id` +) AS `s` ON `c`.`Id` = `s`.`Id0`) +LEFT JOIN `OrderForLinq` AS `o0` ON `c`.`Id` = `o0`.`CustomerId` +ORDER BY `c`.`Id`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Max_Grouped_from_LINQ_101(bool async) + { + await base.Max_Grouped_from_LINQ_101(async); + + AssertSql( +""" +SELECT `p`.`Category`, MAX(`p`.`UnitPrice`) AS `MostExpensivePrice` +FROM `ProductForLinq` AS `p` +GROUP BY `p`.`Category` +"""); + } + + public override async Task Whats_new_2021_sample_11(bool async) + { + await base.Whats_new_2021_sample_11(async); + + AssertSql( +""" +SELECT [t].[LastName], [t].[c], [t0].[Id], [t2].[Id], [t2].[Age], [t2].[FirstName], [t2].[LastName], [t2].[MiddleInitial], [t0].[Age], [t0].[FirstName], [t0].[LastName], [t0].[MiddleInitial] +FROM ( + SELECT [p].[LastName], COUNT(*) AS [c] + FROM [Person] AS [p] + GROUP BY [p].[LastName] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Age], [t1].[FirstName], [t1].[LastName], [t1].[MiddleInitial] + FROM ( + SELECT [p0].[Id], [p0].[Age], [p0].[FirstName], [p0].[LastName], [p0].[MiddleInitial], ROW_NUMBER() OVER(PARTITION BY [p0].[LastName] ORDER BY [p0].[Id]) AS [row] + FROM [Person] AS [p0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[LastName] = [t0].[LastName] +LEFT JOIN ( + SELECT [t3].[Id], [t3].[Age], [t3].[FirstName], [t3].[LastName], [t3].[MiddleInitial] + FROM ( + SELECT [p1].[Id], [p1].[Age], [p1].[FirstName], [p1].[LastName], [p1].[MiddleInitial], ROW_NUMBER() OVER(PARTITION BY [p1].[LastName] ORDER BY [p1].[Id]) AS [row] + FROM [Person] AS [p1] + ) AS [t3] + WHERE [t3].[row] <= 2 +) AS [t2] ON [t].[LastName] = [t2].[LastName] +ORDER BY [t].[LastName] DESC, [t0].[Id], [t2].[LastName], [t2].[Id] +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class Ef6GroupByLibRedFixture : Ef6GroupByFixtureBase, ITestSqlLoggerFactory + { + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/EntitySplittingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/EntitySplittingQueryLibRedTest.cs new file mode 100644 index 00000000..c1dc1b32 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/EntitySplittingQueryLibRedTest.cs @@ -0,0 +1,781 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class EntitySplittingQueryLibRedTest(NonSharedFixture fixture) : EntitySplittingQueryTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Can_query_entity_which_is_split_in_two(bool async) + { + await base.Can_query_entity_which_is_split_in_two(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`EntityThreeId`, `e`.`IntValue1`, `e`.`IntValue2`, `s`.`IntValue3`, `s`.`IntValue4`, `e`.`StringValue1`, `e`.`StringValue2`, `s`.`StringValue3`, `s`.`StringValue4` +FROM `EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart` AS `s` ON `e`.`Id` = `s`.`Id` +"""); + } + + public override async Task Can_query_entity_which_is_split_selecting_only_main_properties(bool async) + { + await base.Can_query_entity_which_is_split_selecting_only_main_properties(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`IntValue1`, `e`.`StringValue1` +FROM `EntityOne` AS `e` +"""); + } + + public override async Task Can_query_entity_which_is_split_in_three(bool async) + { + await base.Can_query_entity_which_is_split_in_three(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`EntityThreeId`, `e`.`IntValue1`, `e`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e`.`StringValue1`, `e`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4` +FROM (`EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart3` AS `s` ON `e`.`Id` = `s`.`Id`) +INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e`.`Id` = `s0`.`Id` +"""); + } + + public override async Task Can_query_entity_which_is_split_selecting_only_part_2_properties(bool async) + { + await base.Can_query_entity_which_is_split_selecting_only_part_2_properties(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`IntValue3`, `s`.`StringValue3` +FROM `EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart2` AS `s` ON `e`.`Id` = `s`.`Id` +"""); + } + + public override async Task Can_query_entity_which_is_split_selecting_only_part_3_properties(bool async) + { + await base.Can_query_entity_which_is_split_selecting_only_part_3_properties(async); + + AssertSql( +""" +SELECT `e`.`Id`, `s`.`IntValue4`, `s`.`StringValue4` +FROM `EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart3` AS `s` ON `e`.`Id` = `s`.`Id` +"""); + } + + public override async Task Include_reference_to_split_entity(bool async) + { + await base.Include_reference_to_split_entity(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`EntityOneId`, `e`.`Name`, `s1`.`Id`, `s1`.`EntityThreeId`, `s1`.`IntValue1`, `s1`.`IntValue2`, `s1`.`IntValue3`, `s1`.`IntValue4`, `s1`.`StringValue1`, `s1`.`StringValue2`, `s1`.`StringValue3`, `s1`.`StringValue4` +FROM `EntityTwo` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`EntityThreeId`, `e0`.`IntValue1`, `e0`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e0`.`StringValue1`, `e0`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4` + FROM (`EntityOne` AS `e0` + INNER JOIN `SplitEntityOnePart3` AS `s` ON `e0`.`Id` = `s`.`Id`) + INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e0`.`Id` = `s0`.`Id` +) AS `s1` ON `e`.`EntityOneId` = `s1`.`Id` +"""); + } + + public override async Task Include_collection_to_split_entity(bool async) + { + await base.Include_collection_to_split_entity(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `s1`.`Id`, `s1`.`EntityThreeId`, `s1`.`IntValue1`, `s1`.`IntValue2`, `s1`.`IntValue3`, `s1`.`IntValue4`, `s1`.`StringValue1`, `s1`.`StringValue2`, `s1`.`StringValue3`, `s1`.`StringValue4` +FROM `EntityThree` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`EntityThreeId`, `e0`.`IntValue1`, `e0`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e0`.`StringValue1`, `e0`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4` + FROM (`EntityOne` AS `e0` + INNER JOIN `SplitEntityOnePart3` AS `s` ON `e0`.`Id` = `s`.`Id`) + INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e0`.`Id` = `s0`.`Id` +) AS `s1` ON `e`.`Id` = `s1`.`EntityThreeId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Include_reference_to_split_entity_including_reference(bool async) + { + await base.Include_reference_to_split_entity_including_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`EntityOneId`, `e`.`Name`, `s1`.`Id`, `s1`.`EntityThreeId`, `s1`.`IntValue1`, `s1`.`IntValue2`, `s1`.`IntValue3`, `s1`.`IntValue4`, `s1`.`StringValue1`, `s1`.`StringValue2`, `s1`.`StringValue3`, `s1`.`StringValue4`, `e1`.`Id`, `e1`.`Name` +FROM (`EntityTwo` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`EntityThreeId`, `e0`.`IntValue1`, `e0`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e0`.`StringValue1`, `e0`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4` + FROM (`EntityOne` AS `e0` + INNER JOIN `SplitEntityOnePart3` AS `s` ON `e0`.`Id` = `s`.`Id`) + INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e0`.`Id` = `s0`.`Id` +) AS `s1` ON `e`.`EntityOneId` = `s1`.`Id`) +LEFT JOIN `EntityThree` AS `e1` ON `s1`.`EntityThreeId` = `e1`.`Id` +"""); + } + + public override async Task Include_collection_to_split_entity_including_collection(bool async) + { + await base.Include_collection_to_split_entity_including_collection(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `s1`.`Id`, `s1`.`EntityThreeId`, `s1`.`IntValue1`, `s1`.`IntValue2`, `s1`.`IntValue3`, `s1`.`IntValue4`, `s1`.`StringValue1`, `s1`.`StringValue2`, `s1`.`StringValue3`, `s1`.`StringValue4`, `s1`.`Id0`, `s1`.`EntityOneId`, `s1`.`Name` +FROM `EntityThree` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`EntityThreeId`, `e0`.`IntValue1`, `e0`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e0`.`StringValue1`, `e0`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4`, `e1`.`Id` AS `Id0`, `e1`.`EntityOneId`, `e1`.`Name` + FROM ((`EntityOne` AS `e0` + INNER JOIN `SplitEntityOnePart3` AS `s` ON `e0`.`Id` = `s`.`Id`) + INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e0`.`Id` = `s0`.`Id`) + LEFT JOIN `EntityTwo` AS `e1` ON `e0`.`Id` = `e1`.`EntityOneId` +) AS `s1` ON `e`.`Id` = `s1`.`EntityThreeId` +ORDER BY `e`.`Id`, `s1`.`Id` +"""); + } + + public override async Task Include_reference_on_split_entity(bool async) + { + await base.Include_reference_on_split_entity(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`EntityThreeId`, `e`.`IntValue1`, `e`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e`.`StringValue1`, `e`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4`, `e0`.`Id`, `e0`.`Name` +FROM ((`EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart3` AS `s` ON `e`.`Id` = `s`.`Id`) +INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e`.`Id` = `s0`.`Id`) +LEFT JOIN `EntityThree` AS `e0` ON `e`.`EntityThreeId` = `e0`.`Id` +"""); + } + + public override async Task Include_collection_on_split_entity(bool async) + { + await base.Include_collection_on_split_entity(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`EntityThreeId`, `e`.`IntValue1`, `e`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e`.`StringValue1`, `e`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4`, `e0`.`Id`, `e0`.`EntityOneId`, `e0`.`Name` +FROM ((`EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart3` AS `s` ON `e`.`Id` = `s`.`Id`) +INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e`.`Id` = `s0`.`Id`) +LEFT JOIN `EntityTwo` AS `e0` ON `e`.`Id` = `e0`.`EntityOneId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Custom_projection_trim_when_multiple_tables(bool async) + { + await base.Custom_projection_trim_when_multiple_tables(async); + + AssertSql( + """ +SELECT `e`.`IntValue1`, `s`.`IntValue3`, `e0`.`Id`, `e0`.`Name` +FROM (`EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart2` AS `s` ON `e`.`Id` = `s`.`Id`) +LEFT JOIN `EntityThree` AS `e0` ON `e`.`EntityThreeId` = `e0`.`Id` +"""); + } + + public override async Task Normal_entity_owning_a_split_reference_with_main_fragment_sharing(bool async) + { + await base.Normal_entity_owning_a_split_reference_with_main_fragment_sharing(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`EntityThreeId`, `e`.`IntValue1`, `e`.`IntValue2`, `e`.`IntValue3`, `e`.`IntValue4`, `e`.`StringValue1`, `e`.`StringValue2`, `e`.`StringValue3`, `e`.`StringValue4`, `e`.`OwnedReference_Id`, `e`.`OwnedReference_OwnedIntValue1`, `e`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `e`.`OwnedReference_OwnedStringValue1`, `e`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM (`EntityOne` AS `e` +LEFT JOIN `OwnedReferenceExtras2` AS `o` ON `e`.`Id` = `o`.`EntityOneId`) +LEFT JOIN `OwnedReferenceExtras1` AS `o0` ON `e`.`Id` = `o0`.`EntityOneId` +"""); + } + + public override async Task Normal_entity_owning_a_split_reference_with_main_fragment_sharing_custom_projection(bool async) + { + await base.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_custom_projection(async); + + AssertSql( +""" +SELECT `e`.`Id`, IIF(`e`.`OwnedReference_Id` IS NOT NULL AND `e`.`OwnedReference_OwnedIntValue1` IS NOT NULL AND `e`.`OwnedReference_OwnedIntValue2` IS NOT NULL AND `o0`.`OwnedIntValue3` IS NOT NULL AND `o`.`OwnedIntValue4` IS NOT NULL, `o`.`OwnedIntValue4`, NULL) AS `OwnedIntValue4`, IIF(`e`.`OwnedReference_Id` IS NOT NULL AND `e`.`OwnedReference_OwnedIntValue1` IS NOT NULL AND `e`.`OwnedReference_OwnedIntValue2` IS NOT NULL AND `o0`.`OwnedIntValue3` IS NOT NULL AND `o`.`OwnedIntValue4` IS NOT NULL, `o`.`OwnedStringValue4`, NULL) AS `OwnedStringValue4` +FROM (`EntityOnes` AS `e` +LEFT JOIN `OwnedReferenceExtras2` AS `o` ON `e`.`Id` = `o`.`EntityOneId`) +LEFT JOIN `OwnedReferenceExtras1` AS `o0` ON `e`.`Id` = `o0`.`EntityOneId` +"""); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Normal_entity_owning_a_split_reference_with_main_fragment_not_sharing(bool async) + { + await base.Normal_entity_owning_a_split_reference_with_main_fragment_not_sharing(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Normal_entity_owning_a_split_reference_with_main_fragment_not_sharing_custom_projection(bool async) + { + await base.Normal_entity_owning_a_split_reference_with_main_fragment_not_sharing_custom_projection(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Normal_entity_owning_a_split_collection(bool async) + { + await base.Normal_entity_owning_a_split_collection(async); + + AssertSql(); + } + + public override async Task Normal_entity_owning_a_split_reference_with_main_fragment_sharing_multiple_level(bool async) + { + await base.Normal_entity_owning_a_split_reference_with_main_fragment_sharing_multiple_level(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`EntityThreeId`, `e`.`IntValue1`, `e`.`IntValue2`, `e`.`IntValue3`, `e`.`IntValue4`, `e`.`StringValue1`, `e`.`StringValue2`, `e`.`StringValue3`, `e`.`StringValue4`, `e`.`OwnedReference_Id`, `e`.`OwnedReference_OwnedIntValue1`, `e`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `e`.`OwnedReference_OwnedStringValue1`, `e`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4`, `e`.`OwnedReference_OwnedNestedReference_Id`, `e`.`OwnedReference_OwnedNestedReference_OwnedNestedIntValue1`, `e`.`OwnedReference_OwnedNestedReference_OwnedNestedIntValue2`, `o2`.`OwnedNestedIntValue3`, `o1`.`OwnedNestedIntValue4`, `e`.`OwnedReference_OwnedNestedReference_OwnedNestedStringValue1`, `e`.`OwnedReference_OwnedNestedReference_OwnedNestedStringValue2`, `o2`.`OwnedNestedStringValue3`, `o1`.`OwnedNestedStringValue4` +FROM (((`EntityOnes` AS `e` +LEFT JOIN `OwnedReferenceExtras2` AS `o` ON `e`.`Id` = `o`.`EntityOneId`) +LEFT JOIN `OwnedReferenceExtras1` AS `o0` ON `e`.`Id` = `o0`.`EntityOneId`) +LEFT JOIN `OwnedNestedReferenceExtras2` AS `o1` ON `e`.`Id` = `o1`.`OwnedReferenceEntityOneId`) +LEFT JOIN `OwnedNestedReferenceExtras1` AS `o2` ON `e`.`Id` = `o2`.`OwnedReferenceEntityOneId` +"""); + } + + public override async Task Split_entity_owning_a_reference(bool async) + { + await base.Split_entity_owning_a_reference(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`EntityThreeId`, `e`.`IntValue1`, `e`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e`.`StringValue1`, `e`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4`, `e`.`OwnedReference_Id`, `e`.`OwnedReference_OwnedIntValue1`, `e`.`OwnedReference_OwnedIntValue2`, `e`.`OwnedReference_OwnedIntValue3`, `e`.`OwnedReference_OwnedIntValue4`, `e`.`OwnedReference_OwnedStringValue1`, `e`.`OwnedReference_OwnedStringValue2`, `e`.`OwnedReference_OwnedStringValue3`, `e`.`OwnedReference_OwnedStringValue4` +FROM (`EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart3` AS `s` ON `e`.`Id` = `s`.`Id`) +INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e`.`Id` = `s0`.`Id` +"""); + } + + public override async Task Split_entity_owning_a_collection(bool async) + { + await base.Split_entity_owning_a_collection(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`EntityThreeId`, `e`.`IntValue1`, `e`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e`.`StringValue1`, `e`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4`, `o`.`EntityOneId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM ((`EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart3` AS `s` ON `e`.`Id` = `s`.`Id`) +INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e`.`Id` = `s0`.`Id`) +LEFT JOIN `OwnedCollection` AS `o` ON `e`.`Id` = `o`.`EntityOneId` +ORDER BY `e`.`Id`, `o`.`EntityOneId` +"""); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Split_entity_owning_a_split_reference_without_table_sharing(bool async) + { + await base.Split_entity_owning_a_split_reference_without_table_sharing(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Split_entity_owning_a_split_collection(bool async) + { + await base.Split_entity_owning_a_split_collection(async); + + AssertSql(); + } + + public override async Task Split_entity_owning_a_split_reference_with_table_sharing_1(bool async) + { + await base.Split_entity_owning_a_split_reference_with_table_sharing_1(async); + + AssertSql( +""" +SELECT `s`.`Id`, `s`.`EntityThreeId`, `s`.`IntValue1`, `s`.`IntValue2`, `s1`.`IntValue3`, `s0`.`IntValue4`, `s`.`StringValue1`, `s`.`StringValue2`, `s1`.`StringValue3`, `s0`.`StringValue4`, `s`.`OwnedReference_Id`, `s`.`OwnedReference_OwnedIntValue1`, `s`.`OwnedReference_OwnedIntValue2`, `s1`.`OwnedReference_OwnedIntValue3`, `s0`.`OwnedReference_OwnedIntValue4`, `s`.`OwnedReference_OwnedStringValue1`, `s`.`OwnedReference_OwnedStringValue2`, `s1`.`OwnedReference_OwnedStringValue3`, `s0`.`OwnedReference_OwnedStringValue4` +FROM (`SplitEntityOnePart1` AS `s` +INNER JOIN `SplitEntityOnePart3` AS `s0` ON `s`.`Id` = `s0`.`Id`) +INNER JOIN `SplitEntityOnePart2` AS `s1` ON `s`.`Id` = `s1`.`Id` +"""); + } + + public override async Task Split_entity_owning_a_split_reference_with_table_sharing_4(bool async) + { + await base.Split_entity_owning_a_split_reference_with_table_sharing_4(async); + + AssertSql( +""" +SELECT `s`.`Id`, `s`.`EntityThreeId`, `s`.`IntValue1`, `s`.`IntValue2`, `s1`.`IntValue3`, `s0`.`IntValue4`, `s`.`StringValue1`, `s`.`StringValue2`, `s1`.`StringValue3`, `s0`.`StringValue4`, `s`.`OwnedReference_Id`, `s`.`OwnedReference_OwnedIntValue1`, `s`.`OwnedReference_OwnedIntValue2`, `s1`.`OwnedReference_OwnedIntValue3`, `o`.`OwnedIntValue4`, `s`.`OwnedReference_OwnedStringValue1`, `s`.`OwnedReference_OwnedStringValue2`, `s1`.`OwnedReference_OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM ((`SplitEntityOnePart1` AS `s` +INNER JOIN `SplitEntityOnePart3` AS `s0` ON `s`.`Id` = `s0`.`Id`) +INNER JOIN `SplitEntityOnePart2` AS `s1` ON `s`.`Id` = `s1`.`Id`) +LEFT JOIN `OwnedReferencePart3` AS `o` ON `s`.`Id` = `o`.`EntityOneId` +"""); + } + + public override async Task Split_entity_owning_a_split_reference_with_table_sharing_6(bool async) + { + await base.Split_entity_owning_a_split_reference_with_table_sharing_6(async); + + AssertSql( +""" +SELECT `s`.`Id`, `s`.`EntityThreeId`, `s`.`IntValue1`, `s`.`IntValue2`, `s1`.`IntValue3`, `s0`.`IntValue4`, `s`.`StringValue1`, `s`.`StringValue2`, `s1`.`StringValue3`, `s0`.`StringValue4`, `s1`.`Id`, `s1`.`OwnedReference_Id`, `s1`.`OwnedReference_OwnedIntValue1`, `s1`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `s1`.`OwnedReference_OwnedStringValue1`, `s1`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM (((`SplitEntityOnePart1` AS `s` +INNER JOIN `SplitEntityOnePart3` AS `s0` ON `s`.`Id` = `s0`.`Id`) +INNER JOIN `SplitEntityOnePart2` AS `s1` ON `s`.`Id` = `s1`.`Id`) +LEFT JOIN `OwnedReferencePart3` AS `o` ON `s1`.`Id` = `o`.`EntityOneId`) +LEFT JOIN `OwnedReferencePart2` AS `o0` ON `s1`.`Id` = `o0`.`EntityOneId` +"""); + } + + public override async Task Tph_entity_owning_a_split_reference_on_base_with_table_sharing(bool async) + { + await base.Tph_entity_owning_a_split_reference_on_base_with_table_sharing(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `b`.`Discriminator`, `b`.`MiddleValue`, `b`.`SiblingValue`, `b`.`LeafValue`, `b`.`OwnedReference_Id`, `b`.`OwnedReference_OwnedIntValue1`, `b`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `b`.`OwnedReference_OwnedStringValue1`, `b`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM (`BaseEntity` AS `b` +LEFT JOIN `OwnedReferencePart4` AS `o` ON `b`.`Id` = `o`.`BaseEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `b`.`Id` = `o0`.`BaseEntityId` +"""); + } + + public override async Task Tpt_entity_owning_a_split_reference_on_base_with_table_sharing(bool async) + { + await base.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `m`.`MiddleValue`, `s`.`SiblingValue`, `l`.`LeafValue`, IIF(`l`.`Id` IS NOT NULL, 'LeafEntity', IIF(`s`.`Id` IS NOT NULL, 'SiblingEntity', IIF(`m`.`Id` IS NOT NULL, 'MiddleEntity', NULL))) AS `Discriminator`, `b`.`OwnedReference_Id`, `b`.`OwnedReference_OwnedIntValue1`, `b`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `b`.`OwnedReference_OwnedStringValue1`, `b`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM ((((`BaseEntity` AS `b` +LEFT JOIN `MiddleEntity` AS `m` ON `b`.`Id` = `m`.`Id`) +LEFT JOIN `SiblingEntity` AS `s` ON `b`.`Id` = `s`.`Id`) +LEFT JOIN `LeafEntity` AS `l` ON `b`.`Id` = `l`.`Id`) +LEFT JOIN `OwnedReferencePart4` AS `o` ON `b`.`Id` = `o`.`BaseEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `b`.`Id` = `o0`.`BaseEntityId` +"""); + } + + public override async Task Tph_entity_owning_a_split_reference_on_middle_with_table_sharing(bool async) + { + await base.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `b`.`Discriminator`, `b`.`MiddleValue`, `b`.`SiblingValue`, `b`.`LeafValue`, `b`.`OwnedReference_Id`, `b`.`OwnedReference_OwnedIntValue1`, `b`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `b`.`OwnedReference_OwnedStringValue1`, `b`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM (`BaseEntity` AS `b` +LEFT JOIN `OwnedReferencePart4` AS `o` ON `b`.`Id` = `o`.`MiddleEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `b`.`Id` = `o0`.`MiddleEntityId` +"""); + } + + public override async Task Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing(bool async) + { + await base.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `m`.`MiddleValue`, `s`.`SiblingValue`, `l`.`LeafValue`, IIF(`l`.`Id` IS NOT NULL, 'LeafEntity', IIF(`s`.`Id` IS NOT NULL, 'SiblingEntity', IIF(`m`.`Id` IS NOT NULL, 'MiddleEntity', NULL))) AS `Discriminator`, `m`.`Id`, `m`.`OwnedReference_Id`, `m`.`OwnedReference_OwnedIntValue1`, `m`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `m`.`OwnedReference_OwnedStringValue1`, `m`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM ((((`BaseEntity` AS `b` +LEFT JOIN `MiddleEntity` AS `m` ON `b`.`Id` = `m`.`Id`) +LEFT JOIN `SiblingEntity` AS `s` ON `b`.`Id` = `s`.`Id`) +LEFT JOIN `LeafEntity` AS `l` ON `b`.`Id` = `l`.`Id`) +LEFT JOIN `OwnedReferencePart4` AS `o` ON `m`.`Id` = `o`.`MiddleEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `m`.`Id` = `o0`.`MiddleEntityId` +"""); + } + + public override async Task Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing(bool async) + { + await base.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `b`.`Discriminator`, `b`.`MiddleValue`, `b`.`SiblingValue`, `b`.`LeafValue`, `b`.`OwnedReference_Id`, `b`.`OwnedReference_OwnedIntValue1`, `b`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `b`.`OwnedReference_OwnedStringValue1`, `b`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM (`BaseEntity` AS `b` +LEFT JOIN `OwnedReferencePart4` AS `o` ON `b`.`Id` = `o`.`LeafEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `b`.`Id` = `o0`.`LeafEntityId` +"""); + } + + public override async Task Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing(bool async) + { + await base.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `m`.`MiddleValue`, `s`.`SiblingValue`, `l`.`LeafValue`, IIF(`l`.`Id` IS NOT NULL, 'LeafEntity', IIF(`s`.`Id` IS NOT NULL, 'SiblingEntity', IIF(`m`.`Id` IS NOT NULL, 'MiddleEntity', NULL))) AS `Discriminator`, `l`.`Id`, `l`.`OwnedReference_Id`, `l`.`OwnedReference_OwnedIntValue1`, `l`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `l`.`OwnedReference_OwnedStringValue1`, `l`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM ((((`BaseEntity` AS `b` +LEFT JOIN `MiddleEntity` AS `m` ON `b`.`Id` = `m`.`Id`) +LEFT JOIN `SiblingEntity` AS `s` ON `b`.`Id` = `s`.`Id`) +LEFT JOIN `LeafEntity` AS `l` ON `b`.`Id` = `l`.`Id`) +LEFT JOIN `OwnedReferencePart4` AS `o` ON `l`.`Id` = `o`.`LeafEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `l`.`Id` = `o0`.`LeafEntityId` +"""); + } + + public override async Task Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing(bool async) + { + await base.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `l0`.`Id`, `l0`.`OwnedReference_Id`, `l0`.`OwnedReference_OwnedIntValue1`, `l0`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `l0`.`OwnedReference_OwnedStringValue1`, `l0`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM ((( + SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` + FROM `BaseEntity` AS `b` + UNION ALL + SELECT `m`.`Id`, `m`.`BaseValue`, `m`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'MiddleEntity' AS `Discriminator` + FROM `MiddleEntity` AS `m` + UNION ALL + SELECT `s`.`Id`, `s`.`BaseValue`, CVar(NULL) AS `MiddleValue`, `s`.`SiblingValue`, CVar(NULL) AS `LeafValue`, 'SiblingEntity' AS `Discriminator` + FROM `SiblingEntity` AS `s` + UNION ALL + SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` + FROM `LeafEntity` AS `l` +) AS `u` +LEFT JOIN `LeafEntity` AS `l0` ON `u`.`Id` = `l0`.`Id`) +LEFT JOIN `OwnedReferencePart4` AS `o` ON `l0`.`Id` = `o`.`LeafEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `l0`.`Id` = `o0`.`LeafEntityId` +"""); + } + + public override async Task Tph_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(bool async) + { + await base.Tph_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `b`.`Discriminator`, `b`.`SiblingValue`, `b`.`OwnedReference_Id`, `b`.`OwnedReference_OwnedIntValue1`, `b`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `b`.`OwnedReference_OwnedStringValue1`, `b`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM (`BaseEntity` AS `b` +LEFT JOIN `OwnedReferencePart4` AS `o` ON `b`.`Id` = `o`.`BaseEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `b`.`Id` = `o0`.`BaseEntityId` +WHERE `b`.`Discriminator` = 'SiblingEntity' +"""); + } + + public override async Task Tpt_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(bool async) + { + await base.Tpt_entity_owning_a_split_reference_on_base_with_table_sharing_querying_sibling(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `s`.`SiblingValue`, `b`.`OwnedReference_Id`, `b`.`OwnedReference_OwnedIntValue1`, `b`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `b`.`OwnedReference_OwnedStringValue1`, `b`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` +FROM ((`BaseEntity` AS `b` +INNER JOIN `SiblingEntity` AS `s` ON `b`.`Id` = `s`.`Id`) +LEFT JOIN `OwnedReferencePart4` AS `o` ON `b`.`Id` = `o`.`BaseEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `b`.`Id` = `o0`.`BaseEntityId` +"""); + } + + public override async Task Tph_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(bool async) + { + await base.Tph_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `b`.`Discriminator`, `b`.`SiblingValue` +FROM `BaseEntity` AS `b` +WHERE `b`.`Discriminator` = 'SiblingEntity' +"""); + } + + public override async Task Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(bool async) + { + await base.Tpt_entity_owning_a_split_reference_on_middle_with_table_sharing_querying_sibling(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `s`.`SiblingValue` +FROM `BaseEntity` AS `b` +INNER JOIN `SiblingEntity` AS `s` ON `b`.`Id` = `s`.`Id` +"""); + } + + public override async Task Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(bool async) + { + await base.Tph_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `b`.`Discriminator`, `b`.`SiblingValue` +FROM `BaseEntity` AS `b` +WHERE `b`.`Discriminator` = 'SiblingEntity' +"""); + } + + public override async Task Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(bool async) + { + await base.Tpt_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseValue`, `s`.`SiblingValue` +FROM `BaseEntity` AS `b` +INNER JOIN `SiblingEntity` AS `s` ON `b`.`Id` = `s`.`Id` +"""); + } + + public override async Task Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(bool async) + { + await base.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing_querying_sibling(async); + + AssertSql( +""" +SELECT `s`.`Id`, `s`.`BaseValue`, `s`.`SiblingValue` +FROM `SiblingEntity` AS `s` +"""); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tph_entity_owning_a_split_reference_on_base_without_table_sharing(bool async) + { + await base.Tph_entity_owning_a_split_reference_on_base_without_table_sharing(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tpt_entity_owning_a_split_reference_on_base_without_table_sharing(bool async) + { + await base.Tpt_entity_owning_a_split_reference_on_base_without_table_sharing(async); + + AssertSql(); + } + + public override async Task Tpc_entity_owning_a_split_reference_on_base_without_table_sharing(bool async) + { + await base.Tpc_entity_owning_a_split_reference_on_base_without_table_sharing(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `o`.`BaseEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` +FROM ((( + SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` + FROM `BaseEntity` AS `b` + UNION ALL + SELECT `m`.`Id`, `m`.`BaseValue`, `m`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'MiddleEntity' AS `Discriminator` + FROM `MiddleEntity` AS `m` + UNION ALL + SELECT `s`.`Id`, `s`.`BaseValue`, CVar(NULL) AS `MiddleValue`, `s`.`SiblingValue`, CVar(NULL) AS `LeafValue`, 'SiblingEntity' AS `Discriminator` + FROM `SiblingEntity` AS `s` + UNION ALL + SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` + FROM `LeafEntity` AS `l` +) AS `u` +LEFT JOIN `OwnedReferencePart1` AS `o` ON `u`.`Id` = `o`.`BaseEntityId`) +LEFT JOIN `OwnedReferencePart4` AS `o0` ON `o`.`BaseEntityId` = `o0`.`BaseEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o1` ON `o`.`BaseEntityId` = `o1`.`BaseEntityId` +"""); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tph_entity_owning_a_split_reference_on_middle_without_table_sharing(bool async) + { + await base.Tph_entity_owning_a_split_reference_on_middle_without_table_sharing(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tpt_entity_owning_a_split_reference_on_middle_without_table_sharing(bool async) + { + await base.Tpt_entity_owning_a_split_reference_on_middle_without_table_sharing(async); + + AssertSql(); + } + + public override async Task Tpc_entity_owning_a_split_reference_on_middle_without_table_sharing(bool async) + { + await base.Tpc_entity_owning_a_split_reference_on_middle_without_table_sharing(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `o`.`MiddleEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` +FROM ((( + SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` + FROM `BaseEntity` AS `b` + UNION ALL + SELECT `m`.`Id`, `m`.`BaseValue`, `m`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'MiddleEntity' AS `Discriminator` + FROM `MiddleEntity` AS `m` + UNION ALL + SELECT `s`.`Id`, `s`.`BaseValue`, CVar(NULL) AS `MiddleValue`, `s`.`SiblingValue`, CVar(NULL) AS `LeafValue`, 'SiblingEntity' AS `Discriminator` + FROM `SiblingEntity` AS `s` + UNION ALL + SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` + FROM `LeafEntity` AS `l` +) AS `u` +LEFT JOIN `OwnedReferencePart1` AS `o` ON `u`.`Id` = `o`.`MiddleEntityId`) +LEFT JOIN `OwnedReferencePart4` AS `o0` ON `o`.`MiddleEntityId` = `o0`.`MiddleEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o1` ON `o`.`MiddleEntityId` = `o1`.`MiddleEntityId` +"""); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tph_entity_owning_a_split_reference_on_leaf_without_table_sharing(bool async) + { + await base.Tph_entity_owning_a_split_reference_on_leaf_without_table_sharing(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tpt_entity_owning_a_split_reference_on_leaf_without_table_sharing(bool async) + { + await base.Tpt_entity_owning_a_split_reference_on_leaf_without_table_sharing(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tpc_entity_owning_a_split_reference_on_leaf_without_table_sharing(bool async) + { + await base.Tpc_entity_owning_a_split_reference_on_leaf_without_table_sharing(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tph_entity_owning_a_split_collection_on_base(bool async) + { + await base.Tph_entity_owning_a_split_collection_on_base(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tpt_entity_owning_a_split_collection_on_base(bool async) + { + await base.Tpt_entity_owning_a_split_collection_on_base(async); + + AssertSql(); + } + + public override async Task Tpc_entity_owning_a_split_collection_on_base(bool async) + { + await base.Tpc_entity_owning_a_split_collection_on_base(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `s0`.`BaseEntityId`, `s0`.`Id`, `s0`.`OwnedIntValue1`, `s0`.`OwnedIntValue2`, `s0`.`OwnedIntValue3`, `s0`.`OwnedIntValue4`, `s0`.`OwnedStringValue1`, `s0`.`OwnedStringValue2`, `s0`.`OwnedStringValue3`, `s0`.`OwnedStringValue4` +FROM ( + SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` + FROM `BaseEntity` AS `b` + UNION ALL + SELECT `m`.`Id`, `m`.`BaseValue`, `m`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'MiddleEntity' AS `Discriminator` + FROM `MiddleEntity` AS `m` + UNION ALL + SELECT `s`.`Id`, `s`.`BaseValue`, CVar(NULL) AS `MiddleValue`, `s`.`SiblingValue`, CVar(NULL) AS `LeafValue`, 'SiblingEntity' AS `Discriminator` + FROM `SiblingEntity` AS `s` + UNION ALL + SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` + FROM `LeafEntity` AS `l` +) AS `u` +LEFT JOIN ( + SELECT `o`.`BaseEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` + FROM (`OwnedReferencePart1` AS `o` + INNER JOIN `OwnedReferencePart4` AS `o0` ON `o`.`BaseEntityId` = `o0`.`BaseEntityId` AND `o`.`Id` = `o0`.`Id`) + INNER JOIN `OwnedReferencePart3` AS `o1` ON `o`.`BaseEntityId` = `o1`.`BaseEntityId` AND `o`.`Id` = `o1`.`Id` +) AS `s0` ON `u`.`Id` = `s0`.`BaseEntityId` +ORDER BY `u`.`Id`, `s0`.`BaseEntityId` +"""); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tph_entity_owning_a_split_collection_on_middle(bool async) + { + await base.Tph_entity_owning_a_split_collection_on_middle(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tpt_entity_owning_a_split_collection_on_middle(bool async) + { + await base.Tpt_entity_owning_a_split_collection_on_middle(async); + + AssertSql(); + } + + public override async Task Tpc_entity_owning_a_split_collection_on_middle(bool async) + { + await base.Tpc_entity_owning_a_split_collection_on_middle(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `s0`.`MiddleEntityId`, `s0`.`Id`, `s0`.`OwnedIntValue1`, `s0`.`OwnedIntValue2`, `s0`.`OwnedIntValue3`, `s0`.`OwnedIntValue4`, `s0`.`OwnedStringValue1`, `s0`.`OwnedStringValue2`, `s0`.`OwnedStringValue3`, `s0`.`OwnedStringValue4` +FROM ( + SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` + FROM `BaseEntity` AS `b` + UNION ALL + SELECT `m`.`Id`, `m`.`BaseValue`, `m`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'MiddleEntity' AS `Discriminator` + FROM `MiddleEntity` AS `m` + UNION ALL + SELECT `s`.`Id`, `s`.`BaseValue`, CVar(NULL) AS `MiddleValue`, `s`.`SiblingValue`, CVar(NULL) AS `LeafValue`, 'SiblingEntity' AS `Discriminator` + FROM `SiblingEntity` AS `s` + UNION ALL + SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` + FROM `LeafEntity` AS `l` +) AS `u` +LEFT JOIN ( + SELECT `o`.`MiddleEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` + FROM (`OwnedReferencePart1` AS `o` + INNER JOIN `OwnedReferencePart4` AS `o0` ON `o`.`MiddleEntityId` = `o0`.`MiddleEntityId` AND `o`.`Id` = `o0`.`Id`) + INNER JOIN `OwnedReferencePart3` AS `o1` ON `o`.`MiddleEntityId` = `o1`.`MiddleEntityId` AND `o`.`Id` = `o1`.`Id` +) AS `s0` ON `u`.`Id` = `s0`.`MiddleEntityId` +ORDER BY `u`.`Id`, `s0`.`MiddleEntityId` +"""); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tph_entity_owning_a_split_collection_on_leaf(bool async) + { + await base.Tph_entity_owning_a_split_collection_on_leaf(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tpt_entity_owning_a_split_collection_on_leaf(bool async) + { + await base.Tpt_entity_owning_a_split_collection_on_leaf(async); + + AssertSql(); + } + + [ConditionalTheory(Skip = "Issue29075")] + public override async Task Tpc_entity_owning_a_split_collection_on_leaf(bool async) + { + await base.Tpc_entity_owning_a_split_collection_on_leaf(async); + + AssertSql(); + } + + public override async Task Compare_split_entity_to_null(bool async) + { + await base.Compare_split_entity_to_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`EntityThreeId`, `e`.`IntValue1`, `e`.`IntValue2`, `s`.`IntValue3`, `e`.`IntValue4`, `e`.`StringValue1`, `e`.`StringValue2`, `e`.`StringValue3`, `e`.`StringValue4` +FROM `EntityOne` AS `e` +INNER JOIN `SplitEntityOnePart` AS `s` ON `e`.`Id` = `s`.`Id` +"""); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/FromSqlQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/FromSqlQueryLibRedTest.cs new file mode 100644 index 00000000..9c27fce7 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/FromSqlQueryLibRedTest.cs @@ -0,0 +1,1062 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Data.Common; +using System.Threading.Tasks; +using System; +using Microsoft.EntityFrameworkCore.Query; +using Xunit; +using Xunit.Abstractions; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore; +using System.Linq; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; +#nullable disable +public class FromSqlQueryLibRedTest : FromSqlQueryTestBase +{ + public FromSqlQueryLibRedTest(FromSqlQueryLibRedTestFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task FromSqlRaw_queryable_simple(bool async) + { + await base.FromSqlRaw_queryable_simple(async); + + AssertSql( + """ +SELECT * FROM `Customers` WHERE `ContactName` LIKE '%z%' +"""); + } + + public override async Task FromSqlRaw_queryable_simple_columns_out_of_order(bool async) + { + await base.FromSqlRaw_queryable_simple_columns_out_of_order(async); + + AssertSql( + """ +SELECT `Region`, `PostalCode`, `Phone`, `Fax`, `CustomerID`, `Country`, `ContactTitle`, `ContactName`, `CompanyName`, `City`, `Address` FROM `Customers` +"""); + } + + public override async Task FromSqlRaw_queryable_simple_columns_out_of_order_and_extra_columns(bool async) + { + await base.FromSqlRaw_queryable_simple_columns_out_of_order_and_extra_columns(async); + + AssertSql( + """ +SELECT `Region`, `PostalCode`, `PostalCode` AS `Foo`, `Phone`, `Fax`, `CustomerID`, `Country`, `ContactTitle`, `ContactName`, `CompanyName`, `City`, `Address` FROM `Customers` +"""); + } + + public override async Task FromSqlRaw_queryable_composed(bool async) + { + await base.FromSqlRaw_queryable_composed(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * FROM `Customers` +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task FromSqlRaw_queryable_composed_after_removing_whitespaces(bool async) + { + await base.FromSqlRaw_queryable_composed_after_removing_whitespaces(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + + + + + SELECT + * FROM `Customers` +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task FromSqlRaw_queryable_composed_compiled(bool async) + { + await base.FromSqlRaw_queryable_composed_compiled(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * FROM `Customers` +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task FromSqlRaw_queryable_composed_compiled_with_DbParameter(bool async) + { + await base.FromSqlRaw_queryable_composed_compiled_with_DbParameter(async); + + AssertSql( + """ +customer='CONSH' (Nullable = false) (Size = 5) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * FROM `Customers` WHERE `CustomerID` = @customer +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task FromSqlRaw_queryable_composed_compiled_with_nameless_DbParameter(bool async) + { + await base.FromSqlRaw_queryable_composed_compiled_with_nameless_DbParameter(async); + + AssertSql( + """ +p0='CONSH' (Nullable = false) (Size = 5) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * FROM `Customers` WHERE `CustomerID` = @p0 +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task FromSqlRaw_queryable_composed_compiled_with_parameter(bool async) + { + await base.FromSqlRaw_queryable_composed_compiled_with_parameter(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * FROM `Customers` WHERE `CustomerID` = 'CONSH' +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task FromSqlRaw_composed_contains(bool async) + { + await base.FromSqlRaw_composed_contains(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN ( + SELECT `m`.`CustomerID` + FROM ( + SELECT * FROM `Orders` + ) AS `m` +) +"""); + } + + public override async Task FromSqlRaw_composed_contains2(bool async) + { + await base.FromSqlRaw_composed_contains2(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' AND `c`.`CustomerID` IN ( + SELECT `m`.`CustomerID` + FROM ( + SELECT * FROM `Orders` + ) AS `m` +) +"""); + } + + public override async Task FromSqlRaw_queryable_multiple_composed(bool async) + { + await base.FromSqlRaw_queryable_multiple_composed(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`OrderID`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`OrderDate` +FROM ( + SELECT * FROM `Customers` +) AS `m`, +( + SELECT * FROM `Orders` +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +"""); + } + + public override async Task FromSqlRaw_queryable_multiple_composed_with_closure_parameters(bool async) + { + await base.FromSqlRaw_queryable_multiple_composed_with_closure_parameters(async); + + AssertSql( + $""" +p0='1997-01-01T00:00:00.0000000' (DbType = DateTime) +p1='1998-01-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`OrderID`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`OrderDate` +FROM ( + SELECT * FROM `Customers` +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p0")} AND {AssertSqlHelper.Parameter("@p1")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +"""); + } + + public override async Task FromSqlRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(bool async) + { + await base.FromSqlRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='1997-01-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-01-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`OrderID`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`OrderDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +""", + // + $""" +p0='Berlin' (Size = 255) +p1='1998-04-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-05-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`OrderID`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`OrderDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +"""); + } + + public override async Task FromSqlRaw_queryable_multiple_line_query(bool async) + { + await base.FromSqlRaw_queryable_multiple_line_query(async); + + AssertSql( + """ +SELECT * +FROM `Customers` +WHERE `City` = 'London' +"""); + } + + public override async Task FromSqlRaw_queryable_composed_multiple_line_query(bool async) + { + await base.FromSqlRaw_queryable_composed_multiple_line_query(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * + FROM `Customers` +) AS `m` +WHERE `m`.`City` = 'London' +"""); + } + + public override async Task FromSqlRaw_queryable_with_parameters(bool async) + { + await base.FromSqlRaw_queryable_with_parameters(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task FromSqlRaw_queryable_with_parameters_inline(bool async) + { + await base.FromSqlRaw_queryable_with_parameters_inline(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task FromSqlInterpolated_queryable_with_parameters_interpolated(bool async) + { + await base.FromSqlInterpolated_queryable_with_parameters_interpolated(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task FromSql_queryable_with_parameters_interpolated(bool async) + { + await base.FromSql_queryable_with_parameters_interpolated(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task FromSqlInterpolated_queryable_with_parameters_inline_interpolated(bool async) + { + await base.FromSqlInterpolated_queryable_with_parameters_inline_interpolated(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task FromSql_queryable_with_parameters_inline_interpolated(bool async) + { + await base.FromSql_queryable_with_parameters_inline_interpolated(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task FromSqlInterpolated_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated( + bool async) + { + await base.FromSqlInterpolated_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='1997-01-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-01-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`OrderID`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`OrderDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +""", + // + $""" +p0='Berlin' (Size = 255) +p1='1998-04-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-05-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`OrderID`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`OrderDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +"""); + } + + public override async Task FromSql_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated( + bool async) + { + await base.FromSql_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='1997-01-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-01-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`OrderID`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`OrderDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +""", + // + $""" +p0='Berlin' (Size = 255) +p1='1998-04-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-05-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`OrderID`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`OrderDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +"""); + } + + public override async Task FromSqlRaw_queryable_with_null_parameter(bool async) + { + await base.FromSqlRaw_queryable_with_null_parameter(async); + + AssertSql( + """ +p0=NULL (Nullable = false) (DbType = Object) + +SELECT * FROM `Employees` WHERE `ReportsTo` = @p0 OR (`ReportsTo` IS NULL AND @p0 IS NULL) +"""); + } + + public override async Task FromSqlRaw_queryable_with_parameters_and_closure(bool async) + { + var queryString = await base.FromSqlRaw_queryable_with_parameters_and_closure(async); + + AssertSql( + """ +p0='London' (Size = 255) +@contactTitle='Sales Representative' (Size = 30) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * FROM `Customers` WHERE `City` = @p0 +) AS `m` +WHERE `m`.`ContactTitle` = @contactTitle +"""); + + return null; + } + + public override async Task FromSqlRaw_queryable_simple_cache_key_includes_query_string(bool async) + { + await base.FromSqlRaw_queryable_simple_cache_key_includes_query_string(async); + + AssertSql( + """ +SELECT * FROM `Customers` WHERE `City` = 'London' +""", + // + """ +SELECT * FROM `Customers` WHERE `City` = 'Seattle' +"""); + } + + public override async Task FromSqlRaw_queryable_with_parameters_cache_key_includes_parameters(bool async) + { + await base.FromSqlRaw_queryable_with_parameters_cache_key_includes_parameters(async); + + AssertSql( + $""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +""", + // + $""" +p0='Madrid' (Size = 255) +p1='Accounting Manager' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task FromSqlRaw_queryable_simple_as_no_tracking_not_composed(bool async) + { + await base.FromSqlRaw_queryable_simple_as_no_tracking_not_composed(async); + + AssertSql( +""" +SELECT * FROM `Customers` +"""); + } + + public override async Task FromSqlRaw_queryable_simple_projection_composed(bool async) + { + await base.FromSqlRaw_queryable_simple_projection_composed(async); + + AssertSql( + """ +SELECT `m`.`ProductName` +FROM ( + SELECT * + FROM `Products` + WHERE `Discontinued` <> TRUE + AND ((`UnitsInStock` + `UnitsOnOrder`) < `ReorderLevel`) +) AS `m` +"""); + } + + public override async Task FromSqlRaw_queryable_simple_include(bool async) + { + await base.FromSqlRaw_queryable_simple_include(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT * FROM `Customers` +) AS `m` +LEFT JOIN `Orders` AS `o` ON `m`.`CustomerID` = `o`.`CustomerID` +ORDER BY `m`.`CustomerID` +"""); + } + + public override async Task FromSqlRaw_queryable_simple_composed_include(bool async) + { + await base.FromSqlRaw_queryable_simple_composed_include(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT * FROM `Customers` +) AS `m` +LEFT JOIN `Orders` AS `o` ON `m`.`CustomerID` = `o`.`CustomerID` +WHERE `m`.`City` = 'London' +ORDER BY `m`.`CustomerID` +"""); + } + + public override async Task FromSqlRaw_annotations_do_not_affect_successive_calls(bool async) + { + await base.FromSqlRaw_annotations_do_not_affect_successive_calls(async); + + AssertSql( + """ +SELECT * FROM `Customers` WHERE `ContactName` LIKE '%z%' +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task FromSqlRaw_composed_with_nullable_predicate(bool async) + { + await base.FromSqlRaw_composed_with_nullable_predicate(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * FROM `Customers` +) AS `m` +WHERE `m`.`ContactName` = `m`.`CompanyName` +"""); + } + + public override async Task FromSqlRaw_with_dbParameter(bool async) + { + await base.FromSqlRaw_with_dbParameter(async); + + AssertSql( + """ +@city='London' (Nullable = false) (Size = 6) + +SELECT * FROM `Customers` WHERE `City` = @city +"""); + } + + public override async Task FromSqlRaw_with_dbParameter_without_name_prefix(bool async) + { + await base.FromSqlRaw_with_dbParameter_without_name_prefix(async); + + AssertSql( + """ +city='London' (Nullable = false) (Size = 6) + +SELECT * FROM `Customers` WHERE `City` = @city +"""); + } + + public override async Task FromSqlRaw_with_dbParameter_mixed(bool async) + { + await base.FromSqlRaw_with_dbParameter_mixed(async); + + AssertSql( + """ +p0='London' (Size = 255) +@title='Sales Representative' (Nullable = false) (Size = 20) + +SELECT * FROM `Customers` WHERE `City` = @p0 AND `ContactTitle` = @title +""", + // + """ +@city='London' (Nullable = false) (Size = 6) +p0='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = @city AND `ContactTitle` = @p0 +"""); + } + + public override async Task FromSqlRaw_with_db_parameters_called_multiple_times(bool async) + { + await base.FromSqlRaw_with_db_parameters_called_multiple_times(async); + + AssertSql( + """ +@id='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @id +""", + // + """ +@id='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @id +"""); + } + + public override async Task FromSqlRaw_with_SelectMany_and_include(bool async) + { + await base.FromSqlRaw_with_SelectMany_and_include(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`CustomerID`, `m0`.`Address`, `m0`.`City`, `m0`.`CompanyName`, `m0`.`ContactName`, `m0`.`ContactTitle`, `m0`.`Country`, `m0`.`Fax`, `m0`.`Phone`, `m0`.`PostalCode`, `m0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT * FROM `Customers` WHERE `CustomerID` = 'ALFKI' +) AS `m`, +(( + SELECT * FROM `Customers` WHERE `CustomerID` = 'AROUT' +) AS `m0` +LEFT JOIN `Orders` AS `o` ON `m0`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `m`.`CustomerID`, `m0`.`CustomerID` +"""); + } + + public override async Task FromSqlRaw_with_join_and_include(bool async) + { + await base.FromSqlRaw_with_join_and_include(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region`, `m0`.`OrderID`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`OrderDate`, `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM (( + SELECT * FROM `Customers` WHERE `CustomerID` = 'ALFKI' +) AS `m` +INNER JOIN ( + SELECT * FROM `Orders` WHERE `OrderID` <> 1 +) AS `m0` ON `m`.`CustomerID` = `m0`.`CustomerID`) +LEFT JOIN `Order Details` AS `o` ON `m0`.`OrderID` = `o`.`OrderID` +ORDER BY `m`.`CustomerID`, `m0`.`OrderID`, `o`.`OrderID` +"""); + } + + public override async Task FromSqlInterpolated_with_inlined_db_parameter(bool async) + { + await base.FromSqlInterpolated_with_inlined_db_parameter(async); + + AssertSql( + """ +@somename='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @somename +"""); + } + + public override async Task FromSql_with_inlined_db_parameter(bool async) + { + await base.FromSql_with_inlined_db_parameter(async); + + AssertSql( + """ +@somename='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @somename +"""); + } + + public override async Task FromSqlInterpolated_with_inlined_db_parameter_without_name_prefix(bool async) + { + await base.FromSqlInterpolated_with_inlined_db_parameter_without_name_prefix(async); + + AssertSql( + """ +somename='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @somename +"""); + } + + public override async Task FromSql_with_inlined_db_parameter_without_name_prefix(bool async) + { + await base.FromSql_with_inlined_db_parameter_without_name_prefix(async); + + AssertSql( + """ +somename='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @somename +"""); + } + + public override async Task FromSqlInterpolated_parameterization_issue_12213(bool async) + { + await base.FromSqlInterpolated_parameterization_issue_12213(async); + + AssertSql( + """ +p0='10300' + +SELECT `m`.`OrderID` +FROM ( + SELECT * FROM `Orders` WHERE `OrderID` >= @p0 +) AS `m` +""", + // + """ +@max='10400' +p0='10300' + +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` <= @max AND `o`.`OrderID` IN ( + SELECT `m`.`OrderID` + FROM ( + SELECT * FROM `Orders` WHERE `OrderID` >= @p0 + ) AS `m` +) +""", + // + """ +@max='10400' +p0='10300' + +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` <= @max AND `o`.`OrderID` IN ( + SELECT `m`.`OrderID` + FROM ( + SELECT * FROM `Orders` WHERE `OrderID` >= @p0 + ) AS `m` +) +"""); + } + + public override async Task FromSqlRaw_does_not_parameterize_interpolated_string(bool async) + { + await base.FromSqlRaw_does_not_parameterize_interpolated_string(async); + + AssertSql( + $""" +p0='10250' + +SELECT * FROM `Orders` WHERE `OrderID` < {AssertSqlHelper.Parameter("@p0")} +"""); + } + + public override async Task Entity_equality_through_fromsql(bool async) + { + await base.Entity_equality_through_fromsql(async); + + AssertSql( + """ +SELECT `m`.`OrderID`, `m`.`CustomerID`, `m`.`EmployeeID`, `m`.`OrderDate` +FROM ( + SELECT * FROM `Orders` +) AS `m` +LEFT JOIN `Customers` AS `c` ON `m`.`CustomerID` = `c`.`CustomerID` +WHERE `c`.`CustomerID` = 'VINET' +"""); + } + + public override async Task FromSqlRaw_with_set_operation(bool async) + { + await base.FromSqlRaw_with_set_operation(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * FROM `Customers` WHERE `City` = 'London' +) AS `m` +UNION ALL +SELECT `m0`.`CustomerID`, `m0`.`Address`, `m0`.`City`, `m0`.`CompanyName`, `m0`.`ContactName`, `m0`.`ContactTitle`, `m0`.`Country`, `m0`.`Fax`, `m0`.`Phone`, `m0`.`PostalCode`, `m0`.`Region` +FROM ( + SELECT * FROM `Customers` WHERE `City` = 'Berlin' +) AS `m0` +"""); + } + + public override async Task Line_endings_after_Select(bool async) + { + await base.Line_endings_after_Select(async); + + AssertSql( + """ +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT + * FROM `Customers` +) AS `m` +WHERE `m`.`City` = 'Seattle' +"""); + } + + public override async Task FromSql_with_db_parameter_in_split_query(bool async) + { + await base.FromSql_with_db_parameter_in_split_query(async); + + AssertSql( + """ +customerID='ALFKI' (Nullable = false) (Size = 5) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + SELECT * FROM `Customers` WHERE `CustomerID` = @customerID +) AS `m` +ORDER BY `m`.`CustomerID` +""", + // + """ +customerID='ALFKI' (Nullable = false) (Size = 5) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `m`.`CustomerID` +FROM ( + SELECT * FROM `Customers` WHERE `CustomerID` = @customerID +) AS `m` +INNER JOIN `Orders` AS `o` ON `m`.`CustomerID` = `o`.`CustomerID` +ORDER BY `m`.`CustomerID`, `o`.`OrderID` +""", + // + """ +customerID='ALFKI' (Nullable = false) (Size = 5) + +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `m`.`CustomerID`, `o`.`OrderID` +FROM (( + SELECT * FROM `Customers` WHERE `CustomerID` = @customerID +) AS `m` +INNER JOIN `Orders` AS `o` ON `m`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL +ORDER BY `m`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task FromSqlRaw_in_subquery_with_dbParameter(bool async) + { + await base.FromSqlRaw_in_subquery_with_dbParameter(async); + + AssertSql( + """ +@city='London' (Nullable = false) (Size = 6) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` IN ( + SELECT `m`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @city + ) AS `m` +) +"""); + } + + public override async Task FromSqlRaw_in_subquery_with_positional_dbParameter_without_name(bool async) + { + await base.FromSqlRaw_in_subquery_with_positional_dbParameter_without_name(async); + + AssertSql( + """ +p0='London' (Nullable = false) (Size = 6) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` IN ( + SELECT `m`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @p0 + ) AS `m` +) +"""); + } + + public override async Task FromSqlRaw_in_subquery_with_positional_dbParameter_with_name(bool async) + { + await base.FromSqlRaw_in_subquery_with_positional_dbParameter_with_name(async); + + AssertSql( + """ +@city='London' (Nullable = false) (Size = 6) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` IN ( + SELECT `m`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @city + ) AS `m` +) +"""); + } + + public override async Task FromSqlRaw_with_dbParameter_mixed_in_subquery(bool async) + { + await base.FromSqlRaw_with_dbParameter_mixed_in_subquery(async); + + AssertSql( + """ +p0='London' (Size = 255) +@title='Sales Representative' (Nullable = false) (Size = 20) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` IN ( + SELECT `m`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @p0 AND `ContactTitle` = @title + ) AS `m` +) +""", + // + """ +@city='London' (Nullable = false) (Size = 6) +p0='Sales Representative' (Size = 255) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` IN ( + SELECT `m`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @city AND `ContactTitle` = @p0 + ) AS `m` +) +"""); + } + + public override async Task FromSqlRaw_composed_with_common_table_expression(bool async) + { + var exception = + await Assert.ThrowsAsync(() => base.FromSqlRaw_composed_with_common_table_expression(async)); + + Assert.Equal(RelationalStrings.FromSqlNonComposable, exception.Message); + } + + protected override DbParameter CreateDbParameter(string name, object value) + { + return new LibRedParameter { ParameterName = name, Value = value }; + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class FromSqlQueryLibRedTestFixture : NorthwindQueryLibRedFixture + { + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection) + .AddSingleton() + .AddScoped() + .AddSingleton(); + } + + public override async Task FromSql_used_twice_without_parameters(bool async) + { + await AssertAny( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT 'ALFKI' AS [CustomerID] FROM `#Dual`")) + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + + await AssertAny( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT 'ALFKI' AS [CustomerID] FROM `#Dual`")) + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + } + + public override async Task FromSql_used_twice_with_parameters(bool async) + { + await AssertAny( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT {0} AS [CustomerID] FROM `#Dual`"), "ALFKI") + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + + await AssertAny( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT {0} AS [CustomerID] FROM `#Dual`"), "ALFKI") + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + } + + public override async Task FromSql_Count_used_twice_without_parameters(bool async) + { + await AssertCount( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT 'ALFKI' AS [CustomerID] FROM `#Dual`")) + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + + await AssertCount( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT 'ALFKI' AS [CustomerID] FROM `#Dual`")) + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + } + + public override async Task FromSql_Count_used_twice_with_parameters(bool async) + { + await AssertCount( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT {0} AS [CustomerID] FROM `#Dual`"), "ALFKI") + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + + await AssertCount( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT {0} AS [CustomerID] FROM `#Dual`"), "ALFKI") + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/FromSqlSprocQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/FromSqlSprocQueryLibRedTest.cs new file mode 100644 index 00000000..2947e407 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/FromSqlSprocQueryLibRedTest.cs @@ -0,0 +1,122 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class FromSqlSprocQueryLibRedTest : FromSqlSprocQueryTestBase> + { + public FromSqlSprocQueryLibRedTest(NorthwindQueryLibRedFixture fixture) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + } + + public override async Task From_sql_queryable_stored_procedure(bool async) + { + await base.From_sql_queryable_stored_procedure(async); + + AssertSql($@"EXEC `Ten Most Expensive Products`"); + } + + public override async Task From_sql_queryable_stored_procedure_with_tag(bool async) + { + await base.From_sql_queryable_stored_procedure_with_tag(async); + + AssertSql( + """ +-- Stored Procedure + +EXEC `Ten Most Expensive Products` +"""); + } + + public override async Task From_sql_queryable_stored_procedure_with_caller_info_tag(bool async) + { + await base.From_sql_queryable_stored_procedure_with_caller_info_tag(async); + + AssertSql( + """ +-- File: SampleFileName:13 + +EXEC `Ten Most Expensive Products` +"""); + } + + public override async Task From_sql_queryable_stored_procedure_with_caller_info_tag_and_other_tags(bool async) + { + await base.From_sql_queryable_stored_procedure_with_caller_info_tag_and_other_tags(async); + + AssertSql( + """ +-- Before +-- File: SampleFileName:13 +-- After + +EXEC `Ten Most Expensive Products` +"""); + } + + public override async Task From_sql_queryable_stored_procedure_with_parameter(bool async) + { + await base.From_sql_queryable_stored_procedure_with_parameter(async); + + AssertSql( + $""" + p0='ALFKI' (Size = 255) + + EXEC `CustOrderHist` CustomerID = {AssertSqlHelper.Parameter("@p0")} + """); + } + + public override async Task From_sql_queryable_stored_procedure_re_projection_on_client(bool async) + { + await base.From_sql_queryable_stored_procedure_re_projection_on_client(async); + + AssertSql($@"EXEC `Ten Most Expensive Products`"); + } + + public override async Task From_sql_queryable_stored_procedure_composed_on_client(bool async) + { + await base.From_sql_queryable_stored_procedure_composed_on_client(async); + + AssertSql($@"EXEC `Ten Most Expensive Products`"); + } + + public override async Task From_sql_queryable_stored_procedure_with_parameter_composed_on_client(bool async) + { + await base.From_sql_queryable_stored_procedure_with_parameter_composed_on_client(async); + + AssertSql( + $""" + p0='ALFKI' (Size = 255) + + EXEC `CustOrderHist` CustomerID = {AssertSqlHelper.Parameter("@p0")} + """); + } + + public override async Task From_sql_queryable_stored_procedure_take_on_client(bool async) + { + await base.From_sql_queryable_stored_procedure_take_on_client(async); + + AssertSql($@"EXEC `Ten Most Expensive Products`"); + } + + public override async Task From_sql_queryable_stored_procedure_min_on_client(bool async) + { + await base.From_sql_queryable_stored_procedure_min_on_client(async); + + AssertSql($@"EXEC `Ten Most Expensive Products`"); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override string TenMostExpensiveProductsSproc => "EXEC `Ten Most Expensive Products`"; + + protected override string CustomerOrderHistorySproc => "EXEC `CustOrderHist` CustomerID = {0}"; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/FunkyDataQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/FunkyDataQueryLibRedTest.cs new file mode 100644 index 00000000..4d9164d7 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/FunkyDataQueryLibRedTest.cs @@ -0,0 +1,571 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class FunkyDataQueryLibRedTest : FunkyDataQueryTestBase + { + public FunkyDataQueryLibRedTest(FunkyDataQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task String_contains_on_argument_with_wildcard_constant(bool isAsync) + { + await base.String_contains_on_argument_with_wildcard_constant(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '%[%]B%' +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '%a[_]%' +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE FALSE +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` IS NOT NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '%[_]Ba[_]%' +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` NOT LIKE '%[%]B[%]a[%]r%' OR `f`.`FirstName` IS NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` IS NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +"""); + } + + public override async Task String_contains_on_argument_with_wildcard_parameter(bool isAsync) + { + await base.String_contains_on_argument_with_wildcard_parameter(isAsync); + + AssertSql( + """ +@prm1_contains='%[%]B%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm1_contains +""", + // + """ +@prm2_contains='%a[_]%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm2_contains +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE FALSE +""", + // + """ +@prm4_contains='%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm4_contains +""", + // + """ +@prm5_contains='%[_]Ba[_]%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm5_contains +""", + // + """ +@prm6_contains='%[%]B[%]a[%]r%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` NOT LIKE @prm6_contains OR `f`.`FirstName` IS NULL +""", + // + """ +@prm7_contains='%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` NOT LIKE @prm7_contains OR `f`.`FirstName` IS NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +"""); + } + + public override async Task String_contains_on_argument_with_wildcard_column(bool isAsync) + { + await base.String_contains_on_argument_with_wildcard_column(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` AS `fn`, `f0`.`LastName` AS `ln` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE `f`.`FirstName` IS NOT NULL AND `f0`.`LastName` IS NOT NULL AND (INSTR(1, `f`.`FirstName`, `f0`.`LastName`, 1) > 0 OR (`f0`.`LastName` LIKE '')) +"""); + } + + public override async Task String_contains_on_argument_with_wildcard_column_negated(bool isAsync) + { + await base.String_contains_on_argument_with_wildcard_column_negated(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` AS `fn`, `f0`.`LastName` AS `ln` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE `f`.`FirstName` IS NULL OR `f0`.`LastName` IS NULL OR (INSTR(1, `f`.`FirstName`, `f0`.`LastName`, 1) <= 0 AND `f0`.`LastName` NOT LIKE '') +"""); + } + + public override async Task String_starts_with_on_argument_with_wildcard_constant(bool isAsync) + { + await base.String_starts_with_on_argument_with_wildcard_constant(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '[%]B%' +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '[_]B%' +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE FALSE +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` IS NOT NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '[_]Ba[_]%' +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` NOT LIKE '[%]B[%]a[%]r%' OR `f`.`FirstName` IS NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` IS NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +"""); + } + + public override async Task String_starts_with_on_argument_with_wildcard_parameter(bool isAsync) + { + await base.String_starts_with_on_argument_with_wildcard_parameter(isAsync); + + AssertSql( + """ +@prm1_startswith='[%]B%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm1_startswith +""", + // + """ +@prm2_startswith='[_]B%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm2_startswith +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE FALSE +""", + // + """ +@prm4_startswith='%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm4_startswith +""", + // + """ +@prm5_startswith='[_]Ba[_]%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm5_startswith +""", + // + """ +@prm6_startswith='[%]B[%]a[%]r%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` NOT LIKE @prm6_startswith OR `f`.`FirstName` IS NULL +""", + // + """ +@prm7_startswith='%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` NOT LIKE @prm7_startswith OR `f`.`FirstName` IS NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +"""); + } + + public override async Task String_starts_with_on_argument_with_bracket(bool isAsync) + { + await base.String_starts_with_on_argument_with_bracket(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`FirstName`, `f`.`LastName`, `f`.`NullableBool` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '[[]%' +""", + // + """ +SELECT `f`.`Id`, `f`.`FirstName`, `f`.`LastName`, `f`.`NullableBool` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE 'B[[]%' +""", + // + """ +SELECT `f`.`Id`, `f`.`FirstName`, `f`.`LastName`, `f`.`NullableBool` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE 'B[[][[]a[^]%' +""", + // + """ +@prm1_startswith='[[]%' (Size = 255) + +SELECT `f`.`Id`, `f`.`FirstName`, `f`.`LastName`, `f`.`NullableBool` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm1_startswith +""", + // + """ +@prm2_startswith='B[[]%' (Size = 255) + +SELECT `f`.`Id`, `f`.`FirstName`, `f`.`LastName`, `f`.`NullableBool` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm2_startswith +""", + // + """ +@prm3_startswith='B[[][[]a[^]%' (Size = 255) + +SELECT `f`.`Id`, `f`.`FirstName`, `f`.`LastName`, `f`.`NullableBool` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm3_startswith +""", + // + """ +SELECT `f`.`Id`, `f`.`FirstName`, `f`.`LastName`, `f`.`NullableBool` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` IS NOT NULL AND `f`.`LastName` IS NOT NULL AND LEFT(`f`.`FirstName`, IIF(LEN(`f`.`LastName`) IS NULL, 0, LEN(`f`.`LastName`))) = `f`.`LastName` +"""); + } + + public override async Task String_starts_with_on_argument_with_wildcard_column(bool isAsync) + { + await base.String_starts_with_on_argument_with_wildcard_column(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` AS `fn`, `f0`.`LastName` AS `ln` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE `f`.`FirstName` IS NOT NULL AND `f0`.`LastName` IS NOT NULL AND LEFT(`f`.`FirstName`, IIF(LEN(`f0`.`LastName`) IS NULL, 0, LEN(`f0`.`LastName`))) = `f0`.`LastName` +"""); + } + + public override async Task String_starts_with_on_argument_with_wildcard_column_negated(bool isAsync) + { + await base.String_starts_with_on_argument_with_wildcard_column_negated(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` AS `fn`, `f0`.`LastName` AS `ln` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE `f`.`FirstName` IS NULL OR `f0`.`LastName` IS NULL OR LEFT(`f`.`FirstName`, IIF(LEN(`f0`.`LastName`) IS NULL, 0, LEN(`f0`.`LastName`))) <> `f0`.`LastName` +"""); + } + + public override async Task String_ends_with_on_argument_with_wildcard_constant(bool isAsync) + { + await base.String_ends_with_on_argument_with_wildcard_constant(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '%[%]r' +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '%r[_]' +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE FALSE +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` IS NOT NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE '%[_]r[_]' +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` NOT LIKE '%a[%]r[%]' OR `f`.`FirstName` IS NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` IS NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +"""); + } + + public override async Task String_ends_with_on_argument_with_wildcard_parameter(bool isAsync) + { + await base.String_ends_with_on_argument_with_wildcard_parameter(isAsync); + + AssertSql( + """ +@prm1_endswith='%[%]r' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm1_endswith +""", + // + """ +@prm2_endswith='%r[_]' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm2_endswith +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE FALSE +""", + // + """ +@prm4_endswith='%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm4_endswith +""", + // + """ +@prm5_endswith='%[_]r[_]' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` LIKE @prm5_endswith +""", + // + """ +@prm6_endswith='%a[%]r[%]' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` NOT LIKE @prm6_endswith OR `f`.`FirstName` IS NULL +""", + // + """ +@prm7_endswith='%' (Size = 255) + +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +WHERE `f`.`FirstName` NOT LIKE @prm7_endswith OR `f`.`FirstName` IS NULL +""", + // + """ +SELECT `f`.`FirstName` +FROM `FunkyCustomers` AS `f` +"""); + } + + public override async Task String_ends_with_on_argument_with_wildcard_column(bool isAsync) + { + await base.String_ends_with_on_argument_with_wildcard_column(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` AS `fn`, `f0`.`LastName` AS `ln` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE `f`.`FirstName` IS NOT NULL AND `f0`.`LastName` IS NOT NULL AND RIGHT(`f`.`FirstName`, IIF(LEN(`f0`.`LastName`) IS NULL, 0, LEN(`f0`.`LastName`))) = `f0`.`LastName` +"""); + } + + public override async Task String_ends_with_on_argument_with_wildcard_column_negated(bool isAsync) + { + await base.String_ends_with_on_argument_with_wildcard_column_negated(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` AS `fn`, `f0`.`LastName` AS `ln` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE `f`.`FirstName` IS NULL OR `f0`.`LastName` IS NULL OR RIGHT(`f`.`FirstName`, IIF(LEN(`f0`.`LastName`) IS NULL, 0, LEN(`f0`.`LastName`))) <> `f0`.`LastName` +"""); + } + + public override async Task String_ends_with_inside_conditional(bool isAsync) + { + await base.String_ends_with_inside_conditional(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` AS `fn`, `f0`.`LastName` AS `ln` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE IIF(`f`.`FirstName` IS NOT NULL AND `f0`.`LastName` IS NOT NULL AND RIGHT(`f`.`FirstName`, IIF(LEN(`f0`.`LastName`) IS NULL, 0, LEN(`f0`.`LastName`))) = `f0`.`LastName`, TRUE, FALSE) +"""); + } + + public override async Task String_ends_with_inside_conditional_negated(bool isAsync) + { + await base.String_ends_with_inside_conditional_negated(isAsync); + + AssertSql( + """ +SELECT `f`.`FirstName` AS `fn`, `f0`.`LastName` AS `ln` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE IIF(`f`.`FirstName` IS NULL OR `f0`.`LastName` IS NULL OR RIGHT(`f`.`FirstName`, IIF(LEN(`f0`.`LastName`) IS NULL, 0, LEN(`f0`.`LastName`))) <> `f0`.`LastName`, TRUE, FALSE) +"""); + } + + public override async Task String_ends_with_equals_nullable_column(bool isAsync) + { + await base.String_ends_with_equals_nullable_column(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`FirstName`, `f`.`LastName`, `f`.`NullableBool`, `f0`.`Id`, `f0`.`FirstName`, `f0`.`LastName`, `f0`.`NullableBool` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE (`f`.`FirstName` IS NOT NULL AND `f0`.`LastName` IS NOT NULL AND RIGHT(`f`.`FirstName`, IIF(LEN(`f0`.`LastName`) IS NULL, 0, LEN(`f0`.`LastName`))) = `f0`.`LastName`) = `f`.`NullableBool` +"""); + } + + public override async Task String_ends_with_not_equals_nullable_column(bool isAsync) + { + await base.String_ends_with_not_equals_nullable_column(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`FirstName`, `f`.`LastName`, `f`.`NullableBool`, `f0`.`Id`, `f0`.`FirstName`, `f0`.`LastName`, `f0`.`NullableBool` +FROM `FunkyCustomers` AS `f`, +`FunkyCustomers` AS `f0` +WHERE (`f`.`FirstName` IS NOT NULL AND `f0`.`LastName` IS NOT NULL AND RIGHT(`f`.`FirstName`, IIF(LEN(`f0`.`LastName`) IS NULL, 0, LEN(`f0`.`LastName`))) = `f0`.`LastName`) <> `f`.`NullableBool` OR `f`.`NullableBool` IS NULL +"""); + } + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class FunkyDataQueryLibRedFixture : FunkyDataQueryFixtureBase, ITestSqlLoggerFactory + { + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/GearsOfWarFromSqlQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/GearsOfWarFromSqlQueryLibRedTest.cs new file mode 100644 index 00000000..1accb23e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/GearsOfWarFromSqlQueryLibRedTest.cs @@ -0,0 +1,30 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore.Query; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class GearsOfWarFromSqlQueryLibRedTest : GearsOfWarFromSqlQueryTestBase + { + public GearsOfWarFromSqlQueryLibRedTest(GearsOfWarQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + } + + public override void From_sql_queryable_simple_columns_out_of_order() + { + base.From_sql_queryable_simple_columns_out_of_order(); + + Assert.Equal( + @"SELECT `Id`, `Name`, `IsAutomatic`, `AmmunitionType`, `OwnerFullName`, `SynergyWithId` FROM `Weapons` ORDER BY `Name`", + Sql); + } + + protected override void ClearLog() => Fixture.TestSqlLoggerFactory.Clear(); + + private string Sql => Fixture.TestSqlLoggerFactory.Sql; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/GearsOfWarQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/GearsOfWarQueryLibRedFixture.cs new file mode 100644 index 00000000..e6fa8ecf --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/GearsOfWarQueryLibRedFixture.cs @@ -0,0 +1,109 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class GearsOfWarQueryLibRedFixture : GearsOfWarQueryRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(g => g.Location).HasColumnType("varchar(100)"); + } + + protected override async Task SeedAsync(GearsOfWarContext context) + { + // Drop constraint to workaround LibRed limitation regarding compound foreign keys and NULL. + context.Database.ExecuteSql($"ALTER TABLE `Gears` DROP CONSTRAINT `FK_Gears_Gears_LeaderNickname_LeaderSquadId`"); + + var squads = GearsOfWarData.CreateSquads(); + var missions = GearsOfWarData.CreateMissions(); + var squadMissions = GearsOfWarData.CreateSquadMissions(); + var cities = GearsOfWarData.CreateCities(); + var weapons = GearsOfWarData.CreateWeapons(); + var tags = GearsOfWarData.CreateTags(); + var gears = GearsOfWarData.CreateGears(); + var locustLeaders = GearsOfWarData.CreateLocustLeaders(); + var factions = GearsOfWarData.CreateFactions(); + var locustHighCommands = GearsOfWarData.CreateHighCommands(); + + foreach (var mission in missions) + { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } + } + + foreach (var tag in tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } + } + + GearsOfWarData.WireUp( + squads, missions, squadMissions, cities, weapons, tags, gears, locustLeaders, factions, locustHighCommands); + + context.Squads.AddRange(squads); + context.Missions.AddRange(missions); + context.SquadMissions.AddRange(squadMissions); + context.Cities.AddRange(cities); + context.Weapons.AddRange(weapons); + context.Tags.AddRange(tags); + context.Gears.AddRange(gears); + context.LocustLeaders.AddRange(locustLeaders); + context.Factions.AddRange(factions); + context.LocustHighCommands.AddRange(locustHighCommands); + await context.SaveChangesAsync(); + + GearsOfWarData.WireUp2(locustLeaders, factions); + + await context.SaveChangesAsync(); + } + + public override ISetSource GetExpectedData() + { + var data = (GearsOfWarData)base.GetExpectedData(); + + foreach (var mission in data.Missions) + { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } + mission.Timeline = LibRedTestHelpers.GetExpectedValue(mission.Timeline); + mission.Duration = new TimeSpan(mission.Duration.Days, mission.Duration.Hours, mission.Duration.Minutes, mission.Duration.Seconds); + } + + foreach (var tag in data.Tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } + } + + return data; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/GearsOfWarQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/GearsOfWarQueryLibRedTest.cs new file mode 100644 index 00000000..90fd75f4 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/GearsOfWarQueryLibRedTest.cs @@ -0,0 +1,9311 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit.Abstractions; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel; +using System.Linq; +using Xunit; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.SqlExpressions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class GearsOfWarQueryLibRedTest : GearsOfWarQueryRelationalTestBase + { + // ReSharper disable once UnusedParameter.Local +#pragma warning disable IDE0060 // Remove unused parameter + public GearsOfWarQueryLibRedTest(GearsOfWarQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) +#pragma warning restore IDE0060 // Remove unused parameter + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [Xunit.ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Entity_equality_empty(bool isAsync) + { + await base.Entity_equality_empty(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE FALSE +"""); + } + + public override async Task Include_multiple_one_to_one_and_one_to_many(bool isAsync) + { + await base.Include_multiple_one_to_one_and_one_to_many(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Include_multiple_one_to_one_optional_and_one_to_one_required(bool isAsync) + { + await base.Include_multiple_one_to_one_optional_and_one_to_one_required(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM (`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` +"""); + } + + public override async Task Include_multiple_circular(bool isAsync) + { + await base.Include_multiple_circular(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM (`Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Gears` AS `g0` ON `c`.`Name` = `g0`.`AssignedCityName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `g0`.`Nickname` +"""); + } + + public override async Task Include_multiple_circular_with_filter(bool isAsync) + { + await base.Include_multiple_circular_with_filter(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM (`Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Gears` AS `g0` ON `c`.`Name` = `g0`.`AssignedCityName` +WHERE `g`.`Nickname` = 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `g0`.`Nickname` +"""); + } + + public override async Task Include_using_alternate_key(bool isAsync) + { + await base.Include_using_alternate_key(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `g`.`Nickname` = 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Include_navigation_on_derived_type(bool isAsync) + { + await base.Include_navigation_on_derived_type(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task String_based_Include_navigation_on_derived_type(bool isAsync) + { + await base.String_based_Include_navigation_on_derived_type(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task Select_Where_Navigation_Included(bool isAsync) + { + await base.Select_Where_Navigation_Included(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `g`.`Nickname` = 'Marcus' +"""); + } + + public override async Task Include_with_join_reference1(bool isAsync) + { + await base.Include_with_join_reference1(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Gears` AS `g` +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +"""); + } + + public override async Task Include_with_join_reference2(bool isAsync) + { + await base.Include_with_join_reference2(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Tags` AS `t` +INNER JOIN `Gears` AS `g` ON `t`.`GearSquadId` = `g`.`SquadId` AND `t`.`GearNickName` = `g`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +WHERE `g`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +"""); + } + + public override async Task Include_with_join_collection1(bool isAsync) + { + await base.Include_with_join_collection1(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task Include_with_join_collection2(bool isAsync) + { + await base.Include_with_join_collection2(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Tags` AS `t` +INNER JOIN `Gears` AS `g` ON `t`.`GearSquadId` = `g`.`SquadId` AND `t`.`GearNickName` = `g`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Include_where_list_contains_navigation(bool isAsync) + { + await base.Include_where_list_contains_navigation(isAsync); + + AssertSql( + """ +SELECT `t`.`Id` +FROM `Tags` AS `t` +""", + // + """ +@tags1='b39a6fba-9026-4d69-828e-fd7068673e57' +@tags2='34c8d86e-a4ac-4be5-827f-584dda348a07' +@tags3='70534e05-782c-4052-8720-c2c54481ce5f' +@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34' +@tags5='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags6='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags7='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags8='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags9='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags10='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Id` IS NOT NULL AND `t`.`Id` IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10) +"""); + } + + public override async Task Include_where_list_contains_navigation2(bool isAsync) + { + await base.Include_where_list_contains_navigation2(isAsync); + + AssertSql( + """ +SELECT `t`.`Id` +FROM `Tags` AS `t` +""", + // + """ +@tags1='b39a6fba-9026-4d69-828e-fd7068673e57' +@tags2='34c8d86e-a4ac-4be5-827f-584dda348a07' +@tags3='70534e05-782c-4052-8720-c2c54481ce5f' +@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34' +@tags5='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags6='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags7='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags8='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags9='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags10='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM (`Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `c`.`Location` IS NOT NULL AND `t`.`Id` IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10) +"""); + } + + public override async Task Navigation_accessed_twice_outside_and_inside_subquery(bool isAsync) + { + await base.Navigation_accessed_twice_outside_and_inside_subquery(isAsync); + + AssertSql( + """ +SELECT `t`.`Id` +FROM `Tags` AS `t` +""", + // + """ +@tags1='b39a6fba-9026-4d69-828e-fd7068673e57' +@tags2='34c8d86e-a4ac-4be5-827f-584dda348a07' +@tags3='70534e05-782c-4052-8720-c2c54481ce5f' +@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34' +@tags5='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags6='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags7='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags8='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags9='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags10='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Id` IS NOT NULL AND `t`.`Id` IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10) +"""); + } + + public override async Task Include_with_join_multi_level(bool isAsync) + { + await base.Include_with_join_multi_level(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM ((`Gears` AS `g` +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Gears` AS `g0` ON `c`.`Name` = `g0`.`AssignedCityName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `c`.`Name`, `g0`.`Nickname` +"""); + } + + public override async Task Include_with_join_and_inheritance1(bool isAsync) + { + await base.Include_with_join_and_inheritance1(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` = 'Officer' +) AS `g0` ON `t`.`GearSquadId` = `g0`.`SquadId` AND `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `g0`.`CityOfBirthName` = `c`.`Name` +WHERE `g0`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +"""); + } + + public override async Task Include_with_join_and_inheritance_with_orderby_before_and_after_include(bool isAsync) + { + await base.Include_with_join_and_inheritance_with_orderby_before_and_after_include(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` = 'Officer' +) AS `g0` ON `t`.`GearSquadId` = `g0`.`SquadId` AND `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Gears` AS `g1` ON `g0`.`Nickname` = `g1`.`LeaderNickname` AND `g0`.`SquadId` = `g1`.`LeaderSquadId` +ORDER BY NOT (`g0`.`HasSoulPatch`), `g0`.`Nickname` DESC, `t`.`Id`, `g0`.`SquadId`, `g1`.`Nickname` +"""); + } + + public override async Task Include_with_join_and_inheritance2(bool isAsync) + { + await base.Include_with_join_and_inheritance2(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task Include_with_join_and_inheritance3(bool isAsync) + { + await base.Include_with_join_and_inheritance3(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` = 'Officer' +) AS `g0` ON `t`.`GearSquadId` = `g0`.`SquadId` AND `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Gears` AS `g1` ON `g0`.`Nickname` = `g1`.`LeaderNickname` AND `g0`.`SquadId` = `g1`.`LeaderSquadId` +ORDER BY `t`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g1`.`Nickname` +"""); + } + + public override async Task Include_with_nested_navigation_in_order_by(bool isAsync) + { + await base.Include_with_nested_navigation_in_order_by(isAsync); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM (`Weapons` AS `w` +LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +WHERE `g`.`Nickname` <> 'Paduk' OR `g`.`Nickname` IS NULL +ORDER BY `c`.`Name`, `w`.`Id` +"""); + } + + public override async Task Where_count_subquery_without_collision(bool isAsync) + { + await base.Where_count_subquery_without_collision(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) = 2 +"""); + } + + public override async Task Where_any_subquery_without_collision(bool isAsync) + { + await base.Where_any_subquery_without_collision(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) +"""); + } + + public override async Task Select_inverted_boolean(bool isAsync) + { + await base.Select_inverted_boolean(isAsync); + + AssertSql( + """ +SELECT `w`.`Id`, NOT (`w`.`IsAutomatic`) AS `Manual` +FROM `Weapons` AS `w` +WHERE `w`.`IsAutomatic` +"""); + } + + public override async Task Select_inverted_nullable_boolean(bool async) + { + await base.Select_inverted_nullable_boolean(async); + + AssertSql( + """ +SELECT `f`.`Id`, NOT (`f`.`Eradicated`) AS `Alive` +FROM `Factions` AS `f` +"""); + } + + public override async Task Select_comparison_with_null(bool isAsync) + { + await base.Select_comparison_with_null(isAsync); + + AssertSql( + """ +@ammunitionType='1' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType` = @ammunitionType AND `w`.`AmmunitionType` IS NOT NULL AS `Cartridge` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` = @ammunitionType +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType` IS NULL AS `Cartridge` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +"""); + } + + public override async Task Select_null_parameter(bool isAsync) + { + await base.Select_null_parameter(isAsync); + + AssertSql( + """ +@ammunitionType='1' (Nullable = true) + +SELECT `w`.`Id`, @ammunitionType AS `AmmoType` +FROM `Weapons` AS `w` +""", + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` +FROM `Weapons` AS `w` +""", + // + """ +@ammunitionType='2' (Nullable = true) + +SELECT `w`.`Id`, @ammunitionType AS `AmmoType` +FROM `Weapons` AS `w` +""", + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_with_boolean(bool isAsync) + { + await base.Select_ternary_operation_with_boolean(isAsync); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(`w`.`IsAutomatic`, 1, 0) AS `Num` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_with_inverted_boolean(bool isAsync) + { + await base.Select_ternary_operation_with_inverted_boolean(isAsync); + AssertSql( + """ +SELECT `w`.`Id`, IIF(NOT (`w`.`IsAutomatic`), 1, 0) AS `Num` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_with_has_value_not_null(bool isAsync) + { + await base.Select_ternary_operation_with_has_value_not_null(isAsync); + AssertSql( +""" +SELECT `w`.`Id`, IIF(`w`.`AmmunitionType` IS NOT NULL AND `w`.`AmmunitionType` = 1, 'Yes', 'No') AS `IsCartridge` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NOT NULL AND `w`.`AmmunitionType` = 1 +"""); + } + + public override async Task Select_ternary_operation_multiple_conditions(bool isAsync) + { + await base.Select_ternary_operation_multiple_conditions(isAsync); + + AssertSql( +""" +SELECT `w`.`Id`, IIF(`w`.`AmmunitionType` = 2 AND `w`.`SynergyWithId` = 1, 'Yes', 'No') AS `IsCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_multiple_conditions_2(bool isAsync) + { + await base.Select_ternary_operation_multiple_conditions_2(isAsync); + AssertSql( + """ +SELECT `w`.`Id`, IIF(NOT (`w`.`IsAutomatic`) AND `w`.`SynergyWithId` = 1, 'Yes', 'No') AS `IsCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_multiple_conditions(bool isAsync) + { + await base.Select_multiple_conditions(isAsync); + + AssertSql( + """ +SELECT `w`.`Id`, NOT (`w`.`IsAutomatic`) AND `w`.`SynergyWithId` = 1 AND `w`.`SynergyWithId` IS NOT NULL AS `IsCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_nested_ternary_operations(bool isAsync) + { + await base.Select_nested_ternary_operations(isAsync); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(NOT (`w`.`IsAutomatic`), IIF(`w`.`AmmunitionType` = 1, 'ManualCartridge', 'Manual'), 'Auto') AS `IsManualCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Null_propagation_optimization1(bool isAsync) + { + await base.Null_propagation_optimization1(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`LeaderNickname` = 'Marcus' +"""); + } + + public override async Task Null_propagation_optimization2(bool isAsync) + { + await base.Null_propagation_optimization2(isAsync); + + // issue #16050 + // AssertSql( + // $@"SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + //FROM `Gears` AS `g` + //WHERE `g`.`Discriminator` IN ('Officer', 'Gear') AND `g`.`LeaderNickname` LIKE '%us'"); + } + + public override async Task Null_propagation_optimization3(bool isAsync) + { + await base.Null_propagation_optimization3(isAsync); + + // issue #16050 + // AssertSql( + // $@"SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + //FROM `Gears` AS `g` + //WHERE `g`.`Discriminator` IN ('Officer', 'Gear') AND `g`.`LeaderNickname` LIKE '%us'"); + } + + public override async Task Null_propagation_optimization4(bool isAsync) + { + await base.Null_propagation_optimization4(isAsync); + + // issue #16050 + // AssertSql( + // $@"SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + //FROM `Gears` AS `g` + //WHERE `g`.`Discriminator` IN ('Officer', 'Gear') AND (CAST(LEN(`g`.`LeaderNickname`) AS int) = 5)"); + } + + public override async Task Null_propagation_optimization5(bool isAsync) + { + await base.Null_propagation_optimization5(isAsync); + + // issue #16050 + // AssertSql( + // $@"SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + //FROM `Gears` AS `g` + //WHERE `g`.`Discriminator` IN ('Officer', 'Gear') AND (CAST(LEN(`g`.`LeaderNickname`) AS int) = 5)"); + } + + public override async Task Null_propagation_optimization6(bool isAsync) + { + await base.Null_propagation_optimization6(isAsync); + + // issue #16050 + // AssertSql( + // $@"SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + //FROM `Gears` AS `g` + //WHERE `g`.`Discriminator` IN ('Officer', 'Gear') AND (CAST(LEN(`g`.`LeaderNickname`) AS int) = 5)"); + } + + public override async Task Select_null_propagation_optimization7(bool isAsync) + { + await base.Select_null_propagation_optimization7(isAsync); + + // issue #16050 + // AssertSql( + // $@"SELECT `g`.`LeaderNickname` + `g`.`LeaderNickname` + //FROM `Gears` AS `g` + //WHERE `g`.`Discriminator` IN ('Officer', 'Gear')"); + } + + public override async Task Select_null_propagation_optimization8(bool isAsync) + { + await base.Select_null_propagation_optimization8(isAsync); + + AssertSql( +""" +SELECT IIF(`g`.`LeaderNickname` IS NULL, '', `g`.`LeaderNickname`) & IIF(`g`.`LeaderNickname` IS NULL, '', `g`.`LeaderNickname`) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_optimization9(bool isAsync) + { + await base.Select_null_propagation_optimization9(isAsync); + AssertSql( + """ + SELECT IIF(LEN(`g`.`FullName`) IS NULL, NULL, CLNG(LEN(`g`.`FullName`))) + FROM `Gears` AS `g` + """); + } + + public override async Task Select_null_propagation_negative1(bool isAsync) + { + await base.Select_null_propagation_negative1(isAsync); + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, NULL) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_negative2(bool isAsync) + { + await base.Select_null_propagation_negative2(isAsync); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, `g0`.`LeaderNickname`, NULL) +FROM `Gears` AS `g`, +`Gears` AS `g0` +"""); + } + + public override async Task Select_null_propagation_negative3(bool isAsync) + { + await base.Select_null_propagation_negative3(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, IIF(`g0`.`Nickname` IS NOT NULL AND `g0`.`SquadId` IS NOT NULL, `g0`.`LeaderNickname` IS NOT NULL, NULL) AS `Condition` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`HasSoulPatch` +ORDER BY `g0`.`Nickname` +"""); + } + + public override async Task Select_null_propagation_negative4(bool isAsync) + { + await base.Select_null_propagation_negative4(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname` IS NOT NULL AND `g0`.`SquadId` IS NOT NULL, `g0`.`Nickname` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`HasSoulPatch` +ORDER BY `g0`.`Nickname` +"""); + } + + public override async Task Select_null_propagation_negative5(bool isAsync) + { + await base.Select_null_propagation_negative5(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname` IS NOT NULL AND `g0`.`SquadId` IS NOT NULL, `g0`.`Nickname` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`HasSoulPatch` +ORDER BY `g0`.`Nickname` +"""); + } + + public override async Task Select_null_propagation_negative6(bool isAsync) + { + await base.Select_null_propagation_negative6(isAsync); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, FALSE, NULL) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_negative7(bool isAsync) + { + await base.Select_null_propagation_negative7(isAsync); + + AssertSql( +""" +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, TRUE, NULL) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_negative8(bool isAsync) + { + await base.Select_null_propagation_negative8(isAsync); + + AssertSql( +""" +SELECT IIF(`s`.`Id` IS NOT NULL, `c`.`Name`, NULL) +FROM ((`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` +"""); + } + + public override async Task Select_null_propagation_negative9(bool async) + { + await base.Select_null_propagation_negative9(async); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, NULL) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_works_for_navigations_with_composite_keys(bool isAsync) + { + await base.Select_null_propagation_works_for_navigations_with_composite_keys(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +"""); + } + + public override async Task Select_null_propagation_works_for_multiple_navigations_with_composite_keys(bool isAsync) + { + await base.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(isAsync); + + AssertSql( +""" +SELECT IIF(`c`.`Name` IS NOT NULL, `c`.`Name`, NULL) +FROM (((`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Tags` AS `t0` ON (`g`.`Nickname` = `t0`.`GearNickName` OR (`g`.`Nickname` IS NULL AND `t0`.`GearNickName` IS NULL)) AND (`g`.`SquadId` = `t0`.`GearSquadId` OR (`g`.`SquadId` IS NULL AND `t0`.`GearSquadId` IS NULL))) +LEFT JOIN `Gears` AS `g0` ON `t0`.`GearNickName` = `g0`.`Nickname` AND `t0`.`GearSquadId` = `g0`.`SquadId`) +LEFT JOIN `Cities` AS `c` ON `g0`.`AssignedCityName` = `c`.`Name` +"""); + } + + public override async Task Select_conditional_with_anonymous_type_and_null_constant(bool isAsync) + { + await base.Select_conditional_with_anonymous_type_and_null_constant(isAsync); + + AssertSql( + """ +SELECT `g`.`LeaderNickname` IS NOT NULL, `g`.`HasSoulPatch` +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Select_conditional_with_anonymous_types(bool isAsync) + { + await base.Select_conditional_with_anonymous_types(isAsync); + + AssertSql( + """ +SELECT `g`.`LeaderNickname` IS NOT NULL, `g`.`Nickname`, `g`.`FullName` +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_conditional_equality_1(bool async) + { + await base.Where_conditional_equality_1(async); + + AssertSql( + """ +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +WHERE `g`.`LeaderNickname` IS NULL +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_conditional_equality_2(bool async) + { + await base.Where_conditional_equality_2(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +WHERE `g`.`LeaderNickname` IS NULL +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_conditional_equality_3(bool async) + { + await base.Where_conditional_equality_3(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Select_coalesce_with_anonymous_types(bool isAsync) + { + await base.Select_coalesce_with_anonymous_types(isAsync); + + AssertSql( +""" +SELECT `g`.`LeaderNickname`, `g`.`FullName` +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_compare_anonymous_types(bool isAsync) + { + await base.Where_compare_anonymous_types(isAsync); + + AssertSql(); + } + + public override async Task Where_member_access_on_anonymous_type(bool isAsync) + { + await base.Where_member_access_on_anonymous_type(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +WHERE `g`.`LeaderNickname` = 'Marcus' +"""); + } + + public override async Task Where_compare_anonymous_types_with_uncorrelated_members(bool isAsync) + { + await base.Where_compare_anonymous_types_with_uncorrelated_members(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +WHERE FALSE +"""); + } + + public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(bool isAsync) + { + await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(isAsync); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` +FROM (( + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` + FROM `Tags` AS `t`, + `Tags` AS `t0` +) AS `s` +LEFT JOIN `Gears` AS `g` ON `s`.`GearNickName` = `g`.`Nickname` AND `s`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON `s`.`GearNickName0` = `g0`.`Nickname` AND `s`.`GearSquadId0` = `g0`.`SquadId` +WHERE `g`.`Nickname` = `g0`.`Nickname` OR (`g`.`Nickname` IS NULL AND `g0`.`Nickname` IS NULL) +"""); + } + + public override async Task Conditional_Navigation_With_Trivial_Member_Access(bool async) + { + await base.Conditional_Navigation_With_Trivial_Member_Access(async); + + AssertSql( + """ +SELECT `g`.`Nickname` +FROM (`Gears` AS `g` +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name`) +INNER JOIN `Cities` AS `c0` ON `g`.`CityOfBirthName` = `c0`.`Name` +WHERE IIF(`c`.`Name` IS NOT NULL, `c`.`Name`, `c0`.`Name`) <> 'Ephyra' +"""); + } + + public override async Task Conditional_Navigation_With_Member_Access_On_Same_Type(bool async) + { + await base.Conditional_Navigation_With_Member_Access_On_Same_Type(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`FullName` +FROM (`Gears` AS `g` +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name`) +INNER JOIN `Cities` AS `c0` ON `g`.`CityOfBirthName` = `c0`.`Name` +WHERE IIF(`c`.`Name` IS NOT NULL, `c`.`Nation`, `c0`.`Nation`) = 'Tyrus' +"""); + } + + public override async Task Conditional_Navigation_With_Member_Access_On_Related_Types(bool async) + { + await base.Conditional_Navigation_With_Member_Access_On_Related_Types(async); + + AssertSql( + """ +SELECT `f`.`Name` +FROM (`Factions` AS `f` +LEFT JOIN `LocustLeaders` AS `l` ON `f`.`DeputyCommanderName` = `l`.`Name`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`ThreatLevel` + FROM `LocustLeaders` AS `l0` + WHERE `l0`.`Discriminator` = 'LocustCommander' +) AS `l1` ON `f`.`CommanderName` = `l1`.`Name` +WHERE IIF(`l`.`Name` IS NOT NULL, `l`.`ThreatLevel`, `l1`.`ThreatLevel`) = CINT(4) +"""); + } + + public override async Task Select_Singleton_Navigation_With_Member_Access(bool isAsync) + { + await base.Select_Singleton_Navigation_With_Member_Access(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `g`.`Nickname` = 'Marcus' AND (`g`.`CityOfBirthName` <> 'Ephyra' OR `g`.`CityOfBirthName` IS NULL) +"""); + } + + public override async Task Select_Where_Navigation(bool isAsync) + { + await base.Select_Where_Navigation(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `g`.`Nickname` = 'Marcus' +"""); + } + + public override async Task Select_Where_Navigation_Equals_Navigation(bool isAsync) + { + await base.Select_Where_Navigation_Equals_Navigation(isAsync); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` +FROM (( + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` + FROM `Tags` AS `t`, + `Tags` AS `t0` +) AS `s` +LEFT JOIN `Gears` AS `g` ON `s`.`GearNickName` = `g`.`Nickname` AND `s`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON `s`.`GearNickName0` = `g0`.`Nickname` AND `s`.`GearSquadId0` = `g0`.`SquadId` +WHERE (`g`.`Nickname` = `g0`.`Nickname` OR (`g`.`Nickname` IS NULL AND `g0`.`Nickname` IS NULL)) AND (`g`.`SquadId` = `g0`.`SquadId` OR (`g`.`SquadId` IS NULL AND `g0`.`SquadId` IS NULL)) +"""); + } + + public override async Task Select_Where_Navigation_Null(bool isAsync) + { + await base.Select_Where_Navigation_Null(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `g`.`Nickname` IS NULL OR `g`.`SquadId` IS NULL +"""); + } + + public override async Task Select_Where_Navigation_Null_Reverse(bool isAsync) + { + await base.Select_Where_Navigation_Null_Reverse(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `g`.`Nickname` IS NULL OR `g`.`SquadId` IS NULL +"""); + } + + public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(bool isAsync) + { + await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync); + + AssertSql( + """ +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` +FROM (( + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0` + FROM `Tags` AS `t`, + `Tags` AS `t0` +) AS `s` +LEFT JOIN `Gears` AS `g` ON `s`.`GearNickName` = `g`.`Nickname` AND `s`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON `s`.`GearNickName0` = `g0`.`Nickname` AND `s`.`GearSquadId0` = `g0`.`SquadId` +WHERE `g`.`Nickname` = `g0`.`Nickname` OR (`g`.`Nickname` IS NULL AND `g0`.`Nickname` IS NULL) +"""); + } + + public override async Task Optional_Navigation_Null_Coalesce_To_Clr_Type(bool isAsync) + { + await base.Optional_Navigation_Null_Coalesce_To_Clr_Type(isAsync); + + AssertSql( +""" +SELECT TOP 1 IIF(`w0`.`IsAutomatic` IS NULL, FALSE, `w0`.`IsAutomatic`) AS `IsAutomatic` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY `w`.`Id` +"""); + } + + public override async Task Where_subquery_boolean(bool isAsync) + { + await base.Where_subquery_boolean(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +"""); + } + + public override async Task Where_subquery_boolean_with_pushdown(bool isAsync) + { + await base.Where_subquery_boolean_with_pushdown(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +"""); + } + + public override async Task Where_subquery_distinct_firstordefault_boolean(bool isAsync) + { + await base.Where_subquery_distinct_firstordefault_boolean(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`)) +"""); + } + + public override async Task Where_subquery_distinct_firstordefault_boolean_with_pushdown(bool isAsync) + { + await base.Where_subquery_distinct_firstordefault_boolean_with_pushdown(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +"""); + } + + public override async Task Where_subquery_distinct_first_boolean(bool isAsync) + { + await base.Where_subquery_distinct_first_boolean(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_singleordefault_boolean1(bool isAsync) + { + await base.Where_subquery_distinct_singleordefault_boolean1(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`)) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_singleordefault_boolean2(bool isAsync) + { + await base.Where_subquery_distinct_singleordefault_boolean2(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_singleordefault_boolean_with_pushdown(bool isAsync) + { + await base.Where_subquery_distinct_singleordefault_boolean_with_pushdown(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_lastordefault_boolean(bool isAsync) + { + await base.Where_subquery_distinct_lastordefault_boolean(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE NOT (( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id` DESC)) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_last_boolean(bool isAsync) + { + await base.Where_subquery_distinct_last_boolean(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE NOT (`g`.`HasSoulPatch`) AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id` DESC) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_orderby_firstordefault_boolean(bool isAsync) + { + await base.Where_subquery_distinct_orderby_firstordefault_boolean(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`)) +"""); + } + + public override async Task Where_subquery_distinct_orderby_firstordefault_boolean_with_pushdown(bool isAsync) + { + await base.Where_subquery_distinct_orderby_firstordefault_boolean_with_pushdown(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +"""); + } + + public override async Task Where_subquery_union_firstordefault_boolean(bool isAsync) + { + await base.Where_subquery_union_firstordefault_boolean(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `u`.`IsAutomatic` + FROM ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + UNION + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `u` + ORDER BY `u`.`Id`) +"""); + } + + public override async Task Where_subquery_join_firstordefault_boolean(bool async) + { + await base.Where_subquery_join_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + INNER JOIN ( + SELECT `w0`.`Id` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `w1` ON `w`.`Id` = `w1`.`Id` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +"""); + } + + public override async Task Where_subquery_left_join_firstordefault_boolean(bool async) + { + await base.Where_subquery_left_join_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `w0`.`Id` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `w1` ON `w`.`Id` = `w1`.`Id` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +"""); + } + + public override async Task Where_subquery_concat_firstordefault_boolean(bool async) + { + await base.Where_subquery_concat_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `u`.`IsAutomatic` + FROM ( + SELECT `w`.`Id`, `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + UNION ALL + SELECT `w0`.`Id`, `w0`.`IsAutomatic` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `u` + ORDER BY `u`.`Id`) +"""); + } + + public override async Task Concat_with_count(bool isAsync) + { + await base.Concat_with_count(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` +) AS `u` +"""); + } + + public override async Task Concat_scalars_with_count(bool isAsync) + { + await base.Concat_scalars_with_count(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` +) AS `u` +"""); + } + + public override async Task Concat_anonymous_with_count(bool isAsync) + { + await base.Concat_anonymous_with_count(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` +) AS `u` +"""); + } + + public override async Task Concat_with_scalar_projection(bool async) + { + await base.Concat_with_scalar_projection(async); + + AssertSql( + """ +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +UNION ALL +SELECT `g0`.`Nickname` +FROM `Gears` AS `g0` +"""); + } + + public override async Task Select_navigation_with_concat_and_count(bool async) + { + await base.Select_navigation_with_concat_and_count(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + UNION ALL + SELECT 1 + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `u`) +FROM `Gears` AS `g` +WHERE NOT (`g`.`HasSoulPatch`) +"""); + } + + public override async Task Concat_with_collection_navigations(bool async) + { + await base.Concat_with_collection_navigations(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + UNION + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `u`) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Union_with_collection_navigations(bool async) + { + await base.Union_with_collection_navigations(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` + UNION + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` + FROM `Gears` AS `g1` + WHERE `g`.`Nickname` = `g1`.`LeaderNickname` AND `g`.`SquadId` = `g1`.`LeaderSquadId` + ) AS `u`) +FROM `Gears` AS `g` +WHERE `g`.`Discriminator` = 'Officer' +"""); + } + + public override async Task Select_subquery_distinct_firstordefault(bool isAsync) + { + await base.Select_subquery_distinct_firstordefault(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w0`.`Name` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Singleton_Navigation_With_Member_Access(bool isAsync) + { + await base.Singleton_Navigation_With_Member_Access(isAsync); + + AssertSql( +""" +SELECT `g`.`CityOfBirthName` AS `B` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `g`.`Nickname` = 'Marcus' AND (`g`.`CityOfBirthName` <> 'Ephyra' OR `g`.`CityOfBirthName` IS NULL) +"""); + } + + public override async Task GroupJoin_Composite_Key(bool isAsync) + { + await base.GroupJoin_Composite_Key(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Tags` AS `t` +INNER JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +"""); + } + + public override async Task Join_navigation_translated_to_subquery_composite_key(bool isAsync) + { + await base.Join_navigation_translated_to_subquery_composite_key(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `s`.`Note` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `t`.`Note`, `g0`.`FullName` + FROM `Tags` AS `t` + LEFT JOIN `Gears` AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname` AND `t`.`GearSquadId` = `g0`.`SquadId` +) AS `s` ON `g`.`FullName` = `s`.`FullName` +"""); + } + + public override async Task Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(bool isAsync) + { + await base.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `s`.`Note` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `t`.`Note`, `g0`.`FullName` + FROM `Tags` AS `t` + LEFT JOIN `Gears` AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname` AND `t`.`GearSquadId` = `g0`.`SquadId` +) AS `s` ON `g`.`FullName` = `s`.`FullName` +"""); + } + + public override async Task Join_with_order_by_without_skip_or_take(bool isAsync) + { + await base.Join_with_order_by_without_skip_or_take(isAsync); + + AssertSql( + """ + SELECT `w`.`Name`, `g`.`FullName` + FROM `Gears` AS `g` + INNER JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` + """); + } + + public override async Task Join_with_order_by_without_skip_or_take_nested(bool isAsync) + { + await base.Join_with_order_by_without_skip_or_take_nested(isAsync); + + AssertSql( + """ +SELECT `w`.`Name`, `g`.`FullName` +FROM (`Squads` AS `s` +INNER JOIN `Gears` AS `g` ON `s`.`Id` = `g`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `g`.`FullName` IS NOT NULL AND `w`.`OwnerFullName` IS NOT NULL +"""); + } + + public override async Task Collection_with_inheritance_and_join_include_joined(bool isAsync) + { + await base.Collection_with_inheritance_and_join_include_joined(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` = 'Officer' +) AS `g0` ON `t`.`GearSquadId` = `g0`.`SquadId` AND `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Tags` AS `t0` ON `g0`.`Nickname` = `t0`.`GearNickName` AND `g0`.`SquadId` = `t0`.`GearSquadId` +"""); + } + + public override async Task Collection_with_inheritance_and_join_include_source(bool isAsync) + { + await base.Collection_with_inheritance_and_join_include_source(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` +FROM (`Gears` AS `g` +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Tags` AS `t0` ON `g`.`Nickname` = `t0`.`GearNickName` AND `g`.`SquadId` = `t0`.`GearSquadId` +WHERE `g`.`Discriminator` = 'Officer' +"""); + } + + public override async Task Non_unicode_string_literal_is_used_for_non_unicode_column(bool isAsync) + { + await base.Non_unicode_string_literal_is_used_for_non_unicode_column(isAsync); + + AssertSql( + $""" + SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` + FROM `Cities` AS `c` + WHERE `c`.`Location` = 'Unknown' + """); + } + + public override async Task Non_unicode_string_literal_is_used_for_non_unicode_column_right(bool isAsync) + { + await base.Non_unicode_string_literal_is_used_for_non_unicode_column_right(isAsync); + + AssertSql( + $""" + SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` + FROM `Cities` AS `c` + WHERE 'Unknown' = `c`.`Location` + """); + } + + public override async Task Non_unicode_parameter_is_used_for_non_unicode_column(bool isAsync) + { + await base.Non_unicode_parameter_is_used_for_non_unicode_column(isAsync); + + AssertSql( + """ +@value='Unknown' (Size = 100) + +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = @value +"""); + } + + public override async Task Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(bool isAsync) + { + await base.Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(isAsync); + + AssertSql( + """ +@cities1='Unknown' (Size = 100) +@cities2='Jacinto's location' (Size = 100) +@cities3='Ephyra's location' (Size = 100) + +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` IN (@cities1, @cities2, @cities3) +"""); + } + + public override async Task Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(bool isAsync) + { + await base.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(isAsync); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = 'Unknown' AND ( + SELECT COUNT(*) + FROM `Gears` AS `g` + WHERE `c`.`Name` = `g`.`CityOfBirthName` AND `g`.`Nickname` = 'Paduk') = 1 +"""); + } + + public override async Task Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(bool isAsync) + { + await base.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +WHERE `g`.`Nickname` = 'Marcus' AND `c`.`Location` = 'Jacinto''s location' +"""); + } + + public override async Task Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(bool isAsync) + { + await base.Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(isAsync); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` LIKE '%Jacinto%' +"""); + } + + public override async Task Unicode_string_literals_is_used_for_non_unicode_column_with_concat(bool isAsync) + { + await base.Unicode_string_literals_is_used_for_non_unicode_column_with_concat(isAsync); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE IIF(`c`.`Location` IS NULL, '', `c`.`Location`) & 'Added' LIKE '%Add%' +"""); + } + + public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result1() + { + base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result1(); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +"""); + } + + public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result2() + { + base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result2(); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(bool isAsync) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(bool isAsync) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` +FROM ((((`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `g0`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(bool isAsync) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(isAsync); + + AssertSql( + """ +SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((`Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` = 'Officer' +) AS `g1` ON `g`.`LeaderNickname` = `g1`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g1`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname`, `g1`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(bool isAsync) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname` IS NOT NULL AND `g0`.`SquadId` IS NOT NULL, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(bool isAsync) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId`, `g0`.`Nickname` IS NOT NULL AND `g0`.`SquadId` IS NOT NULL, `w3`.`Id`, `w3`.`AmmunitionType`, `w3`.`IsAutomatic`, `w3`.`Name`, `w3`.`OwnerFullName`, `w3`.`SynergyWithId`, `w4`.`Id`, `w4`.`AmmunitionType`, `w4`.`IsAutomatic`, `w4`.`Name`, `w4`.`OwnerFullName`, `w4`.`SynergyWithId` +FROM ((((((`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `g0`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w3` ON `g0`.`FullName` = `w3`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w4` ON `g`.`FullName` = `w4`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id`, `w2`.`Id`, `w3`.`Id` +"""); + } + + public override async Task Coalesce_operator_in_predicate(bool isAsync) + { + await base.Coalesce_operator_in_predicate(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`g`.`HasSoulPatch` IS NULL, FALSE, `g`.`HasSoulPatch`) +"""); + } + + public override async Task Coalesce_operator_in_predicate_with_other_conditions(bool isAsync) + { + await base.Coalesce_operator_in_predicate_with_other_conditions(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`g`.`HasSoulPatch` IS NULL, FALSE, `g`.`HasSoulPatch`) +"""); + } + + public override async Task Coalesce_operator_in_projection_with_other_conditions(bool isAsync) + { + await base.Coalesce_operator_in_projection_with_other_conditions(isAsync); + + AssertSql( + """ +SELECT (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`g`.`HasSoulPatch` IS NULL, FALSE, `g`.`HasSoulPatch`) +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_predicate(isAsync); + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `g`.`HasSoulPatch` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate2(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_predicate2(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate_negated(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_predicate_negated(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE NOT (`g`.`HasSoulPatch`) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate_negated_complex1(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE NOT (IIF(`g`.`HasSoulPatch`, TRUE, `g`.`HasSoulPatch`)) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate_negated_complex2(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_predicate_negated_complex2(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE NOT (IIF(NOT (`g`.`HasSoulPatch`), FALSE, `g`.`HasSoulPatch`)) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_conditional_expression(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_conditional_expression(isAsync); + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`g`.`HasSoulPatch`, TRUE, FALSE) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_binary_expression(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_binary_expression(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `g`.`HasSoulPatch` OR (`t`.`Note` LIKE '%Cole%') +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_binary_and_expression(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_binary_and_expression(isAsync); + + AssertSql( + """ +SELECT `g`.`HasSoulPatch` AND (`t`.`Note` LIKE '%Cole%') AND `t`.`Note` IS NOT NULL +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_projection(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_projection(isAsync); + + AssertSql( + """ +SELECT `g`.`SquadId` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(isAsync); + + AssertSql( +""" +SELECT `g`.`SquadId` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_DTOs(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_DTOs(isAsync); + + AssertSql( +""" +SELECT `g`.`SquadId` AS `Id` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_list_initializers(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_list_initializers(isAsync); + + AssertSql( +""" +SELECT `g`.`SquadId`, `g`.`SquadId` + 1 +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_array_initializers(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_array_initializers(isAsync); + AssertSql( +""" +SELECT `g`.`SquadId` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_orderby(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_orderby(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +ORDER BY `g`.`SquadId` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_all(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_all(isAsync); + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Tags` AS `t` + LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` + WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND NOT (`g`.`HasSoulPatch`)) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_negated_predicate(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_negated_predicate(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND NOT (`g`.`HasSoulPatch`) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_contains(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_contains(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `g`.`SquadId` IN ( + SELECT `g0`.`SquadId` + FROM `Gears` AS `g0` +) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_skip(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_skip(isAsync); + + AssertSql(); + } + + public override async Task Optional_navigation_type_compensation_works_with_take(bool isAsync) + { + await base.Optional_navigation_type_compensation_works_with_take(isAsync); + + AssertSql(); + } + + public override async Task Select_correlated_filtered_collection(bool isAsync) + { + await base.Select_correlated_filtered_collection(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM (`Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`Name` <> 'Lancer' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `c`.`Name` IN ('Ephyra', 'Hanover') +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name` +"""); + } + + public override async Task Select_correlated_filtered_collection_with_composite_key(bool isAsync) + { + await base.Select_correlated_filtered_collection_with_composite_key(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` <> 'Dom' +) AS `g1` ON `g`.`Nickname` = `g1`.`LeaderNickname` AND `g`.`SquadId` = `g1`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname` +"""); + } + + public override async Task Select_correlated_filtered_collection_works_with_caching(bool isAsync) + { + await base.Select_correlated_filtered_collection_works_with_caching(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` +ORDER BY `t`.`Note`, `t`.`Id`, `g`.`Nickname` +"""); + } + + public override async Task Join_predicate_value_equals_condition(bool isAsync) + { + await base.Join_predicate_value_equals_condition(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + INNER JOIN `Weapons` AS `w` ON `w`.`SynergyWithId` IS NOT NULL + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') + """); + } + + public override async Task Join_predicate_value(bool isAsync) + { + await base.Join_predicate_value(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + INNER JOIN `Weapons` AS `w` ON `g`.`HasSoulPatch` + """); + } + + public override async Task Join_predicate_condition_equals_condition(bool isAsync) + { + await base.Join_predicate_condition_equals_condition(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + INNER JOIN `Weapons` AS `w` ON `w`.`SynergyWithId` IS NOT NULL + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') + """); + } + + public override async Task Left_join_predicate_value_equals_condition(bool isAsync) + { + await base.Left_join_predicate_value_equals_condition(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + LEFT JOIN `Weapons` AS `w` ON `w`.`SynergyWithId` IS NOT NULL + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') + """); + } + + public override async Task Left_join_predicate_value(bool isAsync) + { + await base.Left_join_predicate_value(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`HasSoulPatch` +"""); + } + + public override async Task Left_join_predicate_condition_equals_condition(bool isAsync) + { + await base.Left_join_predicate_condition_equals_condition(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + LEFT JOIN `Weapons` AS `w` ON `w`.`SynergyWithId` IS NOT NULL + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') + """); + } + + public override async Task Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used( + bool isAsync) + { + await base.Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used(isAsync); + + AssertSql(); + } + + public override async Task Complex_predicate_with_AndAlso_and_nullable_bool_property(bool isAsync) + { + await base.Complex_predicate_with_AndAlso_and_nullable_bool_property(isAsync); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName` +WHERE `w`.`Id` <> 50 AND NOT (`g`.`HasSoulPatch`) +"""); + } + + public override async Task Distinct_with_optional_navigation_is_translated_to_sql(bool isAsync) + { + await base.Distinct_with_optional_navigation_is_translated_to_sql(isAsync); + + AssertSql( +""" +SELECT DISTINCT `g`.`HasSoulPatch` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Sum_with_optional_navigation_is_translated_to_sql(bool isAsync) + { + await base.Sum_with_optional_navigation_is_translated_to_sql(isAsync); + + AssertSql( +""" +SELECT IIF(SUM(`g`.`SquadId`) IS NULL, 0, SUM(`g`.`SquadId`)) +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Count_with_optional_navigation_is_translated_to_sql(bool isAsync) + { + await base.Count_with_optional_navigation_is_translated_to_sql(isAsync); + + AssertSql( +""" +SELECT COUNT(*) +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL +"""); + } + + public override async Task FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(bool isAsync) + { + await base.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(isAsync); + + AssertSql( + """ + SELECT TOP 1 `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` + FROM `Squads` AS `s` + LEFT JOIN `Gears` AS `g` ON `s`.`Id` = `g`.`SquadId` + WHERE `s`.`Name` = 'Kilo' + """); + } + + public override async Task Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(bool isAsync) + { + await base.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(isAsync); + + AssertSql( +""" +SELECT `s`.`Name` +FROM `Squads` AS `s` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` + WHERE `s`.`Id` = `g`.`SquadId` AND `t`.`Note` = 'Dom''s Tag') +"""); + } + + public override async Task All_with_optional_navigation_is_translated_to_sql(bool isAsync) + { + await base.All_with_optional_navigation_is_translated_to_sql(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` + WHERE `t`.`Note` = 'Foo') +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Contains_with_local_nullable_guid_list_closure(bool isAsync) + { + await base.Contains_with_local_nullable_guid_list_closure(isAsync); + + AssertSql( + """ +@ids1='df36f493-463f-4123-83f9-6b135deeb7ba' +@ids2='23cbcf9b-ce14-45cf-aafa-2c2667ebfdd3' +@ids3='ab1b82d7-88db-42bd-a132-7eef9aa68af4' + +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +WHERE `t`.`Id` IN (@ids1, @ids2, @ids3) +"""); + } + + public override async Task Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(bool isAsync) + { + await base.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +ORDER BY `g`.`Rank` +"""); + } + + public override async Task Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(bool isAsync) + { + await base.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +WHERE NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(bool isAsync) + { + await base.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +WHERE NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Where_is_properly_lifted_from_subquery_created_by_include(bool isAsync) + { + await base.Where_is_properly_lifted_from_subquery_created_by_include(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `g`.`FullName` <> 'Augustus Cole' AND NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Subquery_is_lifted_from_main_from_clause_of_SelectMany(bool isAsync) + { + await base.Subquery_is_lifted_from_main_from_clause_of_SelectMany(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName` AS `Name1`, `g0`.`FullName` AS `Name2` +FROM `Gears` AS `g`, +`Gears` AS `g0` +WHERE `g`.`HasSoulPatch` AND NOT (`g0`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(bool isAsync) + { + await base.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(isAsync); + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g`, +`Tags` AS `t` +WHERE `g`.`HasSoulPatch` +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Subquery_containing_join_projecting_main_from_clause_gets_lifted(bool isAsync) + { + await base.Subquery_containing_join_projecting_main_from_clause_gets_lifted(isAsync); + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +INNER JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(bool isAsync) + { + await base.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(isAsync); + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Subquery_containing_join_gets_lifted_clashing_names(bool isAsync) + { + await base.Subquery_containing_join_gets_lifted_clashing_names(isAsync); + AssertSql( +""" +SELECT `g`.`Nickname` +FROM (`Gears` AS `g` +INNER JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Tags` AS `t0` ON `g`.`Nickname` = `t0`.`GearNickName` +WHERE `t`.`GearNickName` <> 'Cole Train' OR `t`.`GearNickName` IS NULL +ORDER BY `g`.`Nickname`, `t0`.`Id` +"""); + } + + public override async Task Subquery_created_by_include_gets_lifted_nested(bool isAsync) + { + await base.Subquery_created_by_include_gets_lifted_nested(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +WHERE EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AND NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Subquery_is_lifted_from_additional_from_clause(bool isAsync) + { + await base.Subquery_is_lifted_from_additional_from_clause(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName` AS `Name1`, `g0`.`FullName` AS `Name2` +FROM `Gears` AS `g`, +`Gears` AS `g0` +WHERE `g`.`HasSoulPatch` AND NOT (`g0`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Subquery_with_result_operator_is_not_lifted(bool isAsync) + { + await base.Subquery_with_result_operator_is_not_lifted(isAsync); + + AssertSql( + """ +@p='2' + +SELECT `g0`.`FullName` +FROM ( + SELECT TOP @p `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (`g`.`HasSoulPatch`) + ORDER BY `g`.`FullName` +) AS `g0` +ORDER BY `g0`.`Rank` +"""); + } + + public override async Task Skip_with_orderby_followed_by_orderBy_is_pushed_down(bool isAsync) + { + await base.Skip_with_orderby_followed_by_orderBy_is_pushed_down(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='1'")} + + SELECT `t`.`FullName` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`HasSoulPatch` <> True) + ORDER BY `g`.`FullName` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + ORDER BY `t`.`Rank` + """); + } + + public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_down1(bool isAsync) + { + await base.Take_without_orderby_followed_by_orderBy_is_pushed_down1(isAsync); + + AssertSql( + """ +@p='999' + +SELECT `g0`.`FullName` +FROM ( + SELECT TOP @p `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (`g`.`HasSoulPatch`) +) AS `g0` +ORDER BY `g0`.`Rank` +"""); + } + + public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_down2(bool isAsync) + { + await base.Take_without_orderby_followed_by_orderBy_is_pushed_down2(isAsync); + + AssertSql( + """ +@p='999' + +SELECT `g0`.`FullName` +FROM ( + SELECT TOP @p `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (`g`.`HasSoulPatch`) +) AS `g0` +ORDER BY `g0`.`Rank` +"""); + } + + public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_down3(bool isAsync) + { + await base.Take_without_orderby_followed_by_orderBy_is_pushed_down3(isAsync); + + AssertSql( + """ +@p='999' + +SELECT `g0`.`FullName` +FROM ( + SELECT TOP @p `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (`g`.`HasSoulPatch`) +) AS `g0` +ORDER BY `g0`.`FullName`, `g0`.`Rank` +"""); + } + + public override async Task Select_length_of_string_property(bool isAsync) + { + await base.Select_length_of_string_property(isAsync); + + AssertSql( + """ + SELECT `w`.`Name`, IIF(LEN(`w`.`Name`) IS NULL, NULL, CLNG(LEN(`w`.`Name`))) AS `Length` + FROM `Weapons` AS `w` + """); + } + + public override async Task Client_method_on_collection_navigation_in_outer_join_key(bool isAsync) + { + await base.Client_method_on_collection_navigation_in_outer_join_key(isAsync); + + AssertSql(); + } + + public override async Task Member_access_on_derived_entity_using_cast(bool isAsync) + { + await base.Member_access_on_derived_entity_using_cast(isAsync); + + AssertSql( + """ + SELECT `f`.`Name`, `f`.`Eradicated` + FROM `Factions` AS `f` + ORDER BY `f`.`Name` + """); + } + + public override async Task Member_access_on_derived_materialized_entity_using_cast(bool isAsync) + { + await base.Member_access_on_derived_materialized_entity_using_cast(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated` +FROM `Factions` AS `f` +ORDER BY `f`.`Name` +"""); + } + + public override async Task Member_access_on_derived_entity_using_cast_and_let(bool isAsync) + { + await base.Member_access_on_derived_entity_using_cast_and_let(isAsync); + + AssertSql( + """ + SELECT `f`.`Name`, `f`.`Eradicated` + FROM `Factions` AS `f` + ORDER BY `f`.`Name` + """); + } + + public override async Task Property_access_on_derived_entity_using_cast(bool isAsync) + { + await base.Property_access_on_derived_entity_using_cast(isAsync); + + AssertSql( +""" +SELECT `f`.`Name`, `f`.`Eradicated` +FROM `Factions` AS `f` +ORDER BY `f`.`Name` +"""); + } + + public override async Task Navigation_access_on_derived_entity_using_cast(bool isAsync) + { + await base.Navigation_access_on_derived_entity_using_cast(isAsync); + + AssertSql( + """ +SELECT `f`.`Name`, `l0`.`ThreatLevel` AS `Threat` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`ThreatLevel` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +ORDER BY `f`.`Name` +"""); + } + + public override async Task Navigation_access_on_derived_materialized_entity_using_cast(bool isAsync) + { + await base.Navigation_access_on_derived_materialized_entity_using_cast(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated`, `l0`.`ThreatLevel` AS `Threat` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`ThreatLevel` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +ORDER BY `f`.`Name` +"""); + } + + public override async Task Navigation_access_via_EFProperty_on_derived_entity_using_cast(bool isAsync) + { + await base.Navigation_access_via_EFProperty_on_derived_entity_using_cast(isAsync); + + AssertSql( + """ +SELECT `f`.`Name`, `l0`.`ThreatLevel` AS `Threat` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`ThreatLevel` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +ORDER BY `f`.`Name` +"""); + } + + public override async Task Navigation_access_fk_on_derived_entity_using_cast(bool isAsync) + { + await base.Navigation_access_fk_on_derived_entity_using_cast(isAsync); + + AssertSql( + """ +SELECT `f`.`Name`, `l0`.`Name` AS `CommanderName` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +ORDER BY `f`.`Name` +"""); + } + + public override async Task Collection_navigation_access_on_derived_entity_using_cast(bool isAsync) + { + await base.Collection_navigation_access_on_derived_entity_using_cast(isAsync); + + AssertSql( + """ + SELECT `f`.`Name`, ( + SELECT COUNT(*) + FROM `LocustLeaders` AS `l` + WHERE `f`.`Id` = `l`.`LocustHordeId`) AS `LeadersCount` + FROM `Factions` AS `f` + ORDER BY `f`.`Name` + """); + } + + public override async Task Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(bool isAsync) + { + await base.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(isAsync); + + AssertSql( + """ + SELECT `f`.`Name`, `l`.`Name` AS `LeaderName` + FROM `Factions` AS `f` + INNER JOIN `LocustLeaders` AS `l` ON `f`.`Id` = `l`.`LocustHordeId` + ORDER BY `l`.`Name` + """); + } + + public override async Task Include_on_derived_entity_using_OfType(bool isAsync) + { + await base.Include_on_derived_entity_using_OfType(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `l1`.`Name`, `l1`.`Discriminator`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` +FROM (`Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `LocustLeaders` AS `l1` ON `f`.`Id` = `l1`.`LocustHordeId` +ORDER BY `f`.`Name`, `f`.`Id`, `l0`.`Name` +"""); + } + + // public override async Task Include_on_derived_entity_using_subquery_with_cast(bool isAsync) + // { + // await base.Include_on_derived_entity_using_subquery_with_cast(isAsync); + + // AssertSql( + // $@"SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`CommanderName`, `f`.`Eradicated`, `t`.`Name`, `t`.`Discriminator`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId` + //FROM `Factions` AS `f` + //LEFT JOIN ( + // SELECT `f.Commander`.* + // FROM `LocustLeaders` AS `f.Commander` + // WHERE `f.Commander`.`Discriminator` = 'LocustCommander' + //) AS `t` ON (`f`.`Discriminator` = 'LocustHorde') AND (`f`.`CommanderName` = `t`.`Name`) + //WHERE (`f`.`Discriminator` = 'LocustHorde') AND (`f`.`Discriminator` = 'LocustHorde') + //ORDER BY `f`.`Name`, `f`.`Id`", + // // + // $@"SELECT `f.Leaders`.`Name`, `f.Leaders`.`Discriminator`, `f.Leaders`.`LocustHordeId`, `f.Leaders`.`ThreatLevel`, `f.Leaders`.`DefeatedByNickname`, `f.Leaders`.`DefeatedBySquadId`, `f.Leaders`.`HighCommandId` + //FROM `LocustLeaders` AS `f.Leaders` + //INNER JOIN ( + // SELECT DISTINCT `f0`.`Id`, `f0`.`Name` + // FROM `Factions` AS `f0` + // LEFT JOIN ( + // SELECT `f.Commander0`.* + // FROM `LocustLeaders` AS `f.Commander0` + // WHERE `f.Commander0`.`Discriminator` = 'LocustCommander' + // ) AS `t0` ON (`f0`.`Discriminator` = 'LocustHorde') AND (`f0`.`CommanderName` = `t0`.`Name`) + // WHERE (`f0`.`Discriminator` = 'LocustHorde') AND (`f0`.`Discriminator` = 'LocustHorde') + //) AS `t1` ON `f.Leaders`.`LocustHordeId` = `t1`.`Id` + //WHERE `f.Leaders`.`Discriminator` IN ('LocustCommander', 'LocustLeader') + //ORDER BY `t1`.`Name`, `t1`.`Id`"); + // } + + // public override async Task Include_on_derived_entity_using_subquery_with_cast_AsNoTracking(bool isAsync) + // { + // await base.Include_on_derived_entity_using_subquery_with_cast_AsNoTracking(isAsync); + + // AssertSql( + // $@"SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`CommanderName`, `f`.`Eradicated`, `t`.`Name`, `t`.`Discriminator`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId` + //FROM `Factions` AS `f` + //LEFT JOIN ( + // SELECT `f.Commander`.* + // FROM `LocustLeaders` AS `f.Commander` + // WHERE `f.Commander`.`Discriminator` = 'LocustCommander' + //) AS `t` ON (`f`.`Discriminator` = 'LocustHorde') AND (`f`.`CommanderName` = `t`.`Name`) + //WHERE (`f`.`Discriminator` = 'LocustHorde') AND (`f`.`Discriminator` = 'LocustHorde') + //ORDER BY `f`.`Name`, `f`.`Id`", + // // + // $@"SELECT `f.Leaders`.`Name`, `f.Leaders`.`Discriminator`, `f.Leaders`.`LocustHordeId`, `f.Leaders`.`ThreatLevel`, `f.Leaders`.`DefeatedByNickname`, `f.Leaders`.`DefeatedBySquadId`, `f.Leaders`.`HighCommandId` + //FROM `LocustLeaders` AS `f.Leaders` + //INNER JOIN ( + // SELECT DISTINCT `f0`.`Id`, `f0`.`Name` + // FROM `Factions` AS `f0` + // LEFT JOIN ( + // SELECT `f.Commander0`.* + // FROM `LocustLeaders` AS `f.Commander0` + // WHERE `f.Commander0`.`Discriminator` = 'LocustCommander' + // ) AS `t0` ON (`f0`.`Discriminator` = 'LocustHorde') AND (`f0`.`CommanderName` = `t0`.`Name`) + // WHERE (`f0`.`Discriminator` = 'LocustHorde') AND (`f0`.`Discriminator` = 'LocustHorde') + //) AS `t1` ON `f.Leaders`.`LocustHordeId` = `t1`.`Id` + //WHERE `f.Leaders`.`Discriminator` IN ('LocustCommander', 'LocustLeader') + //ORDER BY `t1`.`Name`, `t1`.`Id`"); + // } + + // public override void Include_on_derived_entity_using_subquery_with_cast_cross_product_base_entity() + // { + // base.Include_on_derived_entity_using_subquery_with_cast_cross_product_base_entity(); + + // AssertSql( + // $@"SELECT `f2`.`Id`, `f2`.`CapitalName`, `f2`.`Discriminator`, `f2`.`Name`, `f2`.`CommanderName`, `f2`.`Eradicated`, `t`.`Name`, `t`.`Discriminator`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `ff`.`Id`, `ff`.`CapitalName`, `ff`.`Discriminator`, `ff`.`Name`, `ff`.`CommanderName`, `ff`.`Eradicated`, `ff.Capital`.`Name`, `ff.Capital`.`Location`, `ff.Capital`.`Nation` + //FROM `Factions` AS `f2` + //LEFT JOIN ( + // SELECT `f2.Commander`.* + // FROM `LocustLeaders` AS `f2.Commander` + // WHERE `f2.Commander`.`Discriminator` = 'LocustCommander' + //) AS `t` ON (`f2`.`Discriminator` = 'LocustHorde') AND (`f2`.`CommanderName` = `t`.`Name`) + //CROSS JOIN `Factions` AS `ff` + //LEFT JOIN `Cities` AS `ff.Capital` ON `ff`.`CapitalName` = `ff.Capital`.`Name` + //WHERE (`f2`.`Discriminator` = 'LocustHorde') AND (`f2`.`Discriminator` = 'LocustHorde') + //ORDER BY `f2`.`Name`, `ff`.`Name`, `f2`.`Id`", + // // + // $@"SELECT `f2.Leaders`.`Name`, `f2.Leaders`.`Discriminator`, `f2.Leaders`.`LocustHordeId`, `f2.Leaders`.`ThreatLevel`, `f2.Leaders`.`DefeatedByNickname`, `f2.Leaders`.`DefeatedBySquadId`, `f2.Leaders`.`HighCommandId` + //FROM `LocustLeaders` AS `f2.Leaders` + //INNER JOIN ( + // SELECT DISTINCT `f20`.`Id`, `f20`.`Name`, `ff0`.`Name` AS `Name0` + // FROM `Factions` AS `f20` + // LEFT JOIN ( + // SELECT `f2.Commander0`.* + // FROM `LocustLeaders` AS `f2.Commander0` + // WHERE `f2.Commander0`.`Discriminator` = 'LocustCommander' + // ) AS `t0` ON (`f20`.`Discriminator` = 'LocustHorde') AND (`f20`.`CommanderName` = `t0`.`Name`) + // CROSS JOIN `Factions` AS `ff0` + // LEFT JOIN `Cities` AS `ff.Capital0` ON `ff0`.`CapitalName` = `ff.Capital0`.`Name` + // WHERE (`f20`.`Discriminator` = 'LocustHorde') AND (`f20`.`Discriminator` = 'LocustHorde') + //) AS `t1` ON `f2.Leaders`.`LocustHordeId` = `t1`.`Id` + //WHERE `f2.Leaders`.`Discriminator` IN ('LocustCommander', 'LocustLeader') + //ORDER BY `t1`.`Name`, `t1`.`Name0`, `t1`.`Id`"); + // } + + public override async Task Distinct_on_subquery_doesnt_get_lifted(bool isAsync) + { + await base.Distinct_on_subquery_doesnt_get_lifted(isAsync); + + AssertSql( + """ +SELECT `g0`.`HasSoulPatch` +FROM ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` +) AS `g0` +"""); + } + + public override async Task Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(bool isAsync) + { + await base.Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(isAsync); + + AssertSql( + $""" + SELECT `f`.`Eradicated` + FROM `Factions` AS `f` + """); + } + + public override async Task Comparing_two_collection_navigations_composite_key(bool isAsync) + { + await base.Comparing_two_collection_navigations_composite_key(isAsync); + + AssertSql( + """ + SELECT `g`.`Nickname` AS `Nickname1`, `g0`.`Nickname` AS `Nickname2` + FROM `Gears` AS `g`, + `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`Nickname` AND `g`.`SquadId` = `g0`.`SquadId` + ORDER BY `g`.`Nickname` + """); + } + + public override async Task Comparing_two_collection_navigations_inheritance(bool isAsync) + { + await base.Comparing_two_collection_navigations_inheritance(isAsync); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Nickname` +FROM (( + SELECT `f`.`Name`, `f`.`CommanderName`, `g0`.`Nickname`, `g0`.`SquadId` + FROM `Factions` AS `f`, + ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` = 'Officer' + ) AS `g0` + WHERE `g0`.`HasSoulPatch` +) AS `s` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `s`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g1` ON `l0`.`DefeatedByNickname` = `g1`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g1`.`SquadId` +WHERE `g1`.`Nickname` = `s`.`Nickname` AND `g1`.`SquadId` = `s`.`SquadId` +"""); + } + + public override async Task Comparing_entities_using_Equals_inheritance(bool isAsync) + { + await base.Comparing_entities_using_Equals_inheritance(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname` AS `Nickname1`, `g1`.`Nickname` AS `Nickname2` +FROM `Gears` AS `g`, +( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` = 'Officer' +) AS `g1` +WHERE `g`.`Nickname` = `g1`.`Nickname` AND `g`.`SquadId` = `g1`.`SquadId` +ORDER BY `g`.`Nickname`, `g1`.`Nickname` +"""); + } + + public override async Task Contains_on_nullable_array_produces_correct_sql(bool isAsync) + { + await base.Contains_on_nullable_array_produces_correct_sql(isAsync); + + AssertSql( + """ +@cities1='Ephyra' (Size = 255) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` +WHERE `g`.`SquadId` < 2 AND (`c`.`Name` IS NULL OR `c`.`Name` = @cities1) +"""); + } + + public override async Task Optional_navigation_with_collection_composite_key(bool isAsync) + { + await base.Optional_navigation_with_collection_composite_key(isAsync); + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE `g`.`Discriminator` = 'Officer' AND ( + SELECT COUNT(*) + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` IS NOT NULL AND `g`.`SquadId` IS NOT NULL AND `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` AND `g0`.`Nickname` = 'Dom') > 0 +"""); + } + + public override async Task Select_null_conditional_with_inheritance(bool isAsync) + { + await base.Select_null_conditional_with_inheritance(isAsync); + + AssertSql( +""" +SELECT IIF(`f`.`CommanderName` IS NOT NULL, `f`.`CommanderName`, NULL) +FROM `Factions` AS `f` +"""); + } + + public override async Task Select_null_conditional_with_inheritance_negative(bool isAsync) + { + await base.Select_null_conditional_with_inheritance_negative(isAsync); + + AssertSql( +""" +SELECT IIF(`f`.`CommanderName` IS NOT NULL, `f`.`Eradicated`, NULL) +FROM `Factions` AS `f` +"""); + } + + public override async Task Project_collection_navigation_with_inheritance1(bool isAsync) + { + await base.Project_collection_navigation_with_inheritance1(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `l0`.`Name`, `f0`.`Id`, `l1`.`Name`, `l1`.`Discriminator`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` +FROM ((`Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Factions` AS `f0` ON `l0`.`Name` = `f0`.`CommanderName`) +LEFT JOIN `LocustLeaders` AS `l1` ON `f0`.`Id` = `l1`.`LocustHordeId` +ORDER BY `f`.`Id`, `l0`.`Name`, `f0`.`Id` +"""); + } + + public override async Task Project_collection_navigation_with_inheritance2(bool isAsync) + { + await base.Project_collection_navigation_with_inheritance2(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM ((`Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g` ON `l0`.`DefeatedByNickname` = `g`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON (`g`.`Nickname` = `g0`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `g0`.`LeaderSquadId` +ORDER BY `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task Project_collection_navigation_with_inheritance3(bool isAsync) + { + await base.Project_collection_navigation_with_inheritance3(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM ((`Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g` ON `l0`.`DefeatedByNickname` = `g`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON (`g`.`Nickname` = `g0`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `g0`.`LeaderSquadId` +ORDER BY `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task Include_reference_on_derived_type_using_string(bool isAsync) + { + await base.Include_reference_on_derived_type_using_string(isAsync); + + AssertSql( + """ + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `LocustLeaders` AS `l` + LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` + """); + } + + public override async Task Include_reference_on_derived_type_using_string_nested1(bool isAsync) + { + await base.Include_reference_on_derived_type_using_string_nested1(isAsync); + + AssertSql( + """ + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` + FROM (`LocustLeaders` AS `l` + LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId`) + LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` + """); + } + + public override async Task Include_reference_on_derived_type_using_string_nested2(bool isAsync) + { + await base.Include_reference_on_derived_type_using_string_nested2(isAsync); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Name`, `s`.`Location`, `s`.`Nation` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c` ON `g0`.`CityOfBirthName` = `c`.`Name` +) AS `s` ON (`g`.`Nickname` = `s`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `s`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `l`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Include_reference_on_derived_type_using_lambda(bool isAsync) + { + await base.Include_reference_on_derived_type_using_lambda(isAsync); + + AssertSql( + """ + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `LocustLeaders` AS `l` + LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` + """); + } + + public override async Task Include_reference_on_derived_type_using_lambda_with_soft_cast(bool isAsync) + { + await base.Include_reference_on_derived_type_using_lambda_with_soft_cast(isAsync); + + AssertSql( + """ + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `LocustLeaders` AS `l` + LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` + """); + } + + public override async Task Include_reference_on_derived_type_using_lambda_with_tracking(bool isAsync) + { + await base.Include_reference_on_derived_type_using_lambda_with_tracking(isAsync); + + AssertSql( + """ + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `LocustLeaders` AS `l` + LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` + """); + } + + public override async Task Include_collection_on_derived_type_using_string(bool isAsync) + { + await base.Include_collection_on_derived_type_using_string(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task Include_collection_on_derived_type_using_lambda(bool isAsync) + { + await base.Include_collection_on_derived_type_using_lambda(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task Include_collection_on_derived_type_using_lambda_with_soft_cast(bool isAsync) + { + await base.Include_collection_on_derived_type_using_lambda_with_soft_cast(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task Include_base_navigation_on_derived_entity(bool isAsync) + { + await base.Include_base_navigation_on_derived_entity(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task ThenInclude_collection_on_derived_after_base_reference(bool isAsync) + { + await base.ThenInclude_collection_on_derived_after_base_reference(isAsync); + + AssertSql( + """ + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM (`Tags` AS `t` + LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) + LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `t`.`Id`, `g`.`Nickname`, `g`.`SquadId` + """); + } + + public override async Task ThenInclude_collection_on_derived_after_derived_reference(bool isAsync) + { + await base.ThenInclude_collection_on_derived_after_derived_reference(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM ((`Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g` ON `l0`.`DefeatedByNickname` = `g`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON (`g`.`Nickname` = `g0`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `g0`.`LeaderSquadId` +ORDER BY `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task ThenInclude_collection_on_derived_after_derived_collection(bool isAsync) + { + await base.ThenInclude_collection_on_derived_after_derived_collection(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`Discriminator0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g1`.`Nickname` AS `Nickname0`, `g1`.`SquadId` AS `SquadId0`, `g1`.`AssignedCityName` AS `AssignedCityName0`, `g1`.`CityOfBirthName` AS `CityOfBirthName0`, `g1`.`Discriminator` AS `Discriminator0`, `g1`.`FullName` AS `FullName0`, `g1`.`HasSoulPatch` AS `HasSoulPatch0`, `g1`.`LeaderNickname` AS `LeaderNickname0`, `g1`.`LeaderSquadId` AS `LeaderSquadId0`, `g1`.`Rank` AS `Rank0` + FROM `Gears` AS `g0` + LEFT JOIN `Gears` AS `g1` ON `g0`.`Nickname` = `g1`.`LeaderNickname` AND `g0`.`SquadId` = `g1`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task ThenInclude_reference_on_derived_after_derived_collection(bool isAsync) + { + await base.ThenInclude_reference_on_derived_after_derived_collection(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated`, `s`.`Name`, `s`.`Discriminator`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator0`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator` AS `Discriminator0`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `LocustLeaders` AS `l` + LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` +) AS `s` ON `f`.`Id` = `s`.`LocustHordeId` +ORDER BY `f`.`Id`, `s`.`Name`, `s`.`Nickname` +"""); + } + + public override async Task Multiple_derived_included_on_one_method(bool isAsync) + { + await base.Multiple_derived_included_on_one_method(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM ((`Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g` ON `l0`.`DefeatedByNickname` = `g`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON (`g`.`Nickname` = `g0`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `g0`.`LeaderSquadId` +ORDER BY `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task Include_on_derived_multi_level(bool isAsync) + { + await base.Include_on_derived_multi_level(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`Discriminator`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Id`, `s1`.`Banner`, `s1`.`Banner5`, `s1`.`InternalNumber`, `s1`.`Name`, `s1`.`SquadId0`, `s1`.`MissionId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s0`.`SquadId` AS `SquadId0`, `s0`.`MissionId` + FROM (`Gears` AS `g0` + INNER JOIN `Squads` AS `s` ON `g0`.`SquadId` = `s`.`Id`) + LEFT JOIN `SquadMissions` AS `s0` ON `s`.`Id` = `s0`.`SquadId` +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`SquadId0` +"""); + } + + public override async Task Projecting_nullable_bool_in_conditional_works(bool isAsync) + { + await base.Projecting_nullable_bool_in_conditional_works(isAsync); + + AssertSql( +""" +SELECT IIF(`g`.`Nickname` IS NOT NULL AND `g`.`SquadId` IS NOT NULL, `g`.`HasSoulPatch`, FALSE) AS `Prop` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +"""); + } + + public override async Task ToString_string_property_projection(bool async) + { + await base.ToString_string_property_projection(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_boolean_property_non_nullable(bool async) + { + await base.ToString_boolean_property_non_nullable(async); + + AssertSql( + """ +SELECT IIF(NOT (`w`.`IsAutomatic`), 'False', 'True') +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_boolean_property_nullable(bool async) + { + await base.ToString_boolean_property_nullable(async); + + AssertSql( + """ +SELECT IIF(`f`.`Eradicated` = FALSE, 'False', IIF(`f`.`Eradicated`, 'True', '')) +FROM `Factions` AS `f` +"""); + } + + public override async Task ToString_boolean_computed_nullable(bool async) + { + await base.ToString_boolean_computed_nullable(async); + + AssertSql( + """ +SELECT IIF((`f`.`Eradicated` OR (`f`.`CommanderName` = 'Unknown' AND `f`.`CommanderName` IS NOT NULL)) = FALSE, 'False', IIF(`f`.`Eradicated` OR `f`.`CommanderName` = 'Unknown', 'True', '')) +FROM `Factions` AS `f` +"""); + } + + public override async Task ToString_enum_property_projection(bool async) + { + await base.ToString_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`g`.`Rank` = 0, 'None', IIF(`g`.`Rank` = 1, 'Private', IIF(`g`.`Rank` = 2, 'Corporal', IIF(`g`.`Rank` = 4, 'Sergeant', IIF(`g`.`Rank` = 8, 'Lieutenant', IIF(`g`.`Rank` = 16, 'Captain', IIF(`g`.`Rank` = 32, 'Major', IIF(`g`.`Rank` = 64, 'Colonel', IIF(`g`.`Rank` = 128, 'General', (`g`.`Rank` & '')))))))))) +FROM `Gears` AS `g` +"""); + } + + public override async Task ToString_nullable_enum_property_projection(bool async) + { + await base.ToString_nullable_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_enum_contains(bool async) + { + await base.ToString_enum_contains(async); + + AssertSql( + """ +SELECT `m`.`CodeName` +FROM `Missions` AS `m` +WHERE (`m`.`Difficulty` & '') LIKE '%Med%' +"""); + } + + public override async Task ToString_nullable_enum_contains(bool async) + { + await base.ToString_nullable_enum_contains(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) LIKE '%Cart%' +"""); + } + + public override async Task Correlated_collections_naked_navigation_with_ToList(bool isAsync) + { + await base.Correlated_collections_naked_navigation_with_ToList(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(bool isAsync) + { + await base.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(isAsync); + + AssertSql( + """ + SELECT ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) + FROM `Gears` AS `g` + WHERE `g`.`Nickname` <> 'Marcus' + ORDER BY `g`.`Nickname` + """); + } + + public override async Task Correlated_collections_naked_navigation_with_ToArray(bool isAsync) + { + await base.Correlated_collections_naked_navigation_with_ToArray(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection(bool isAsync) + { + await base.Correlated_collections_basic_projection(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection_explicit_to_list(bool isAsync) + { + await base.Correlated_collections_basic_projection_explicit_to_list(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection_explicit_to_array(bool isAsync) + { + await base.Correlated_collections_basic_projection_explicit_to_array(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection_ordered(bool isAsync) + { + await base.Correlated_collections_basic_projection_ordered(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name` DESC +"""); + } + + public override async Task Correlated_collections_basic_projection_composite_key(bool isAsync) + { + await base.Correlated_collections_basic_projection_composite_key(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname`, `g1`.`FullName`, `g1`.`SquadId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`FullName`, `g0`.`SquadId`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + WHERE NOT (`g0`.`HasSoulPatch`) +) AS `g1` ON `g`.`Nickname` = `g1`.`LeaderNickname` AND `g`.`SquadId` = `g1`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' AND `g`.`Nickname` <> 'Foo' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname` +"""); + } + + public override async Task Correlated_collections_basic_projecting_single_property(bool isAsync) + { + await base.Correlated_collections_basic_projecting_single_property(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name`, `w0`.`Id` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Name`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projecting_constant(bool isAsync) + { + await base.Correlated_collections_basic_projecting_constant(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`c`, `w0`.`Id` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT 'BFG' AS `c`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projecting_constant_bool(bool isAsync) + { + await base.Correlated_collections_basic_projecting_constant_bool(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`c`, `w0`.`Id` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT TRUE AS `c`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_projection_of_collection_thru_navigation(bool isAsync) + { + await base.Correlated_collections_projection_of_collection_thru_navigation(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s1`.`SquadId`, `s1`.`MissionId` +FROM (`Gears` AS `g` +INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId` + FROM `SquadMissions` AS `s0` + WHERE `s0`.`MissionId` <> 17 +) AS `s1` ON `s`.`Id` = `s1`.`SquadId` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s1`.`SquadId` +"""); + } + + public override async Task Correlated_collections_project_anonymous_collection_result(bool isAsync) + { + await base.Correlated_collections_project_anonymous_collection_result(isAsync); + + AssertSql( + """ + SELECT `s`.`Name`, `s`.`Id`, `g`.`FullName`, `g`.`Rank`, `g`.`Nickname`, `g`.`SquadId` + FROM `Squads` AS `s` + LEFT JOIN `Gears` AS `g` ON `s`.`Id` = `g`.`SquadId` + WHERE `s`.`Id` < 20 + ORDER BY `s`.`Id`, `g`.`Nickname` + """); + } + + public override async Task Correlated_collections_nested(bool isAsync) + { + await base.Correlated_collections_nested(isAsync); + + AssertSql( + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` + FROM (`SquadMissions` AS `s0` + INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) + LEFT JOIN ( + SELECT `s1`.`SquadId`, `s1`.`MissionId` + FROM `SquadMissions` AS `s1` + WHERE `s1`.`SquadId` < 7 + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` + WHERE `s0`.`MissionId` < 42 +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` +"""); + } + + public override async Task Correlated_collections_nested_mixed_streaming_with_buffer1(bool isAsync) + { + await base.Correlated_collections_nested_mixed_streaming_with_buffer1(isAsync); + + AssertSql( + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` + FROM (`SquadMissions` AS `s0` + INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) + LEFT JOIN ( + SELECT `s1`.`SquadId`, `s1`.`MissionId` + FROM `SquadMissions` AS `s1` + WHERE `s1`.`SquadId` < 2 + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` + WHERE `s0`.`MissionId` < 3 +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` +"""); + } + + public override async Task Correlated_collections_nested_mixed_streaming_with_buffer2(bool isAsync) + { + await base.Correlated_collections_nested_mixed_streaming_with_buffer2(isAsync); + + AssertSql( + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` + FROM (`SquadMissions` AS `s0` + INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) + LEFT JOIN ( + SELECT `s1`.`SquadId`, `s1`.`MissionId` + FROM `SquadMissions` AS `s1` + WHERE `s1`.`SquadId` < 7 + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` + WHERE `s0`.`MissionId` < 42 +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` +"""); + } + + public override async Task Correlated_collections_nested_with_custom_ordering(bool isAsync) + { + await base.Correlated_collections_nested_with_custom_ordering(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`FullName`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `g0`.`Rank`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL + ) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` + WHERE `g0`.`FullName` <> 'Foo' +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `g`.`Nickname`, `g`.`SquadId`, `s`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s`.`IsAutomatic`) +"""); + } + + public override async Task Correlated_collections_same_collection_projected_multiple_times(bool isAsync) + { + await base.Correlated_collections_same_collection_projected_multiple_times(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` +) AS `w1` ON `g`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE `w0`.`IsAutomatic` +) AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id` +"""); + } + + public override async Task Correlated_collections_similar_collection_projected_multiple_times(bool isAsync) + { + await base.Correlated_collections_similar_collection_projected_multiple_times(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` +) AS `w1` ON `g`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE NOT (`w0`.`IsAutomatic`) +) AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`OwnerFullName`, `w1`.`Id`, NOT (`w2`.`IsAutomatic`) +"""); + } + + public override async Task Correlated_collections_different_collections_projected(bool isAsync) + { + await base.Correlated_collections_different_collections_projected(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id`, `g0`.`Nickname`, `g0`.`Rank`, `g0`.`SquadId` +FROM (`Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Name`, `w`.`IsAutomatic`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `g0`.`FullName`, `g0`.`Nickname` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(bool isAsync) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `g`.`Discriminator` = 'Officer' AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(bool isAsync) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` +FROM ((`Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Gears` AS `g1` ON `t`.`GearNickName` = `g1`.`Nickname` AND `t`.`GearSquadId` = `g1`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g2`.`Nickname`, `g2`.`SquadId` + FROM `Weapons` AS `w` + LEFT JOIN `Gears` AS `g2` ON `w`.`OwnerFullName` = `g2`.`FullName` +) AS `s` ON `g1`.`FullName` = `s`.`OwnerFullName` +WHERE `g`.`Discriminator` = 'Officer' AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, NOT (`s`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`Id` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings( + bool isAsync) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` +FROM ((`Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Gears` AS `g1` ON `t`.`GearNickName` = `g1`.`Nickname` AND `t`.`GearSquadId` = `g1`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g2`.`Nickname`, `g2`.`SquadId` + FROM `Weapons` AS `w` + LEFT JOIN `Gears` AS `g2` ON `w`.`OwnerFullName` = `g2`.`FullName` +) AS `s` ON `g1`.`FullName` = `s`.`OwnerFullName` +WHERE `g`.`Discriminator` = 'Officer' AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, NOT (`s`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`Id` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings( + bool isAsync) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` +FROM ((`Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Gears` AS `g1` ON `t`.`GearNickName` = `g1`.`Nickname` AND `t`.`GearSquadId` = `g1`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g2`.`Nickname`, `g2`.`SquadId`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `g2`.`FullName` IS NOT NULL AND `g2`.`FullName` = `w0`.`OwnerFullName`) AS `c` + FROM `Weapons` AS `w` + LEFT JOIN `Gears` AS `g2` ON `w`.`OwnerFullName` = `g2`.`FullName` +) AS `s` ON `g1`.`FullName` = `s`.`OwnerFullName` +WHERE `g`.`Discriminator` = 'Officer' AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id` DESC, `s`.`c`, `s`.`Nickname` +"""); + } + + public override async Task Correlated_collections_multiple_nested_complex_collections(bool isAsync) + { + await base.Correlated_collections_multiple_nested_complex_collections(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Name`, `s1`.`IsAutomatic`, `s1`.`Id1`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00`, `s2`.`Id`, `s2`.`AmmunitionType`, `s2`.`IsAutomatic`, `s2`.`Name`, `s2`.`OwnerFullName`, `s2`.`SynergyWithId`, `s2`.`Nickname`, `s2`.`SquadId` +FROM (((`Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Gears` AS `g1` ON `t`.`GearNickName` = `g1`.`Nickname` AND `t`.`GearSquadId` = `g1`.`SquadId`) +LEFT JOIN ( + SELECT `g2`.`FullName`, `g2`.`Nickname`, `g2`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Name`, `s0`.`IsAutomatic`, `s0`.`Id1`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `g2`.`Rank`, `s0`.`IsAutomatic0`, `g2`.`LeaderNickname`, `g2`.`LeaderSquadId` + FROM `Gears` AS `g2` + LEFT JOIN ( + SELECT `w`.`Id`, `g3`.`Nickname`, `g3`.`SquadId`, `s`.`Id` AS `Id0`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id` AS `Id1`, `g4`.`Nickname` AS `Nickname0`, `g4`.`HasSoulPatch`, `g4`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic` AS `IsAutomatic0`, `w`.`OwnerFullName` + FROM (((`Weapons` AS `w` + LEFT JOIN `Gears` AS `g3` ON `w`.`OwnerFullName` = `g3`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `g3`.`SquadId` = `s`.`Id`) + LEFT JOIN `Weapons` AS `w0` ON `g3`.`FullName` = `w0`.`OwnerFullName`) + LEFT JOIN `Gears` AS `g4` ON `s`.`Id` = `g4`.`SquadId` + WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL + ) AS `s0` ON `g2`.`FullName` = `s0`.`OwnerFullName` + WHERE `g2`.`FullName` <> 'Foo' +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId`) +LEFT JOIN ( + SELECT `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `g5`.`Nickname`, `g5`.`SquadId` + FROM `Weapons` AS `w1` + LEFT JOIN `Gears` AS `g5` ON `w1`.`OwnerFullName` = `g5`.`FullName` +) AS `s2` ON `g1`.`FullName` = `s2`.`OwnerFullName` +WHERE `g`.`Discriminator` = 'Officer' AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s1`.`Rank`, `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`IsAutomatic0`), `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Id1`, `s1`.`Nickname00`, `s1`.`SquadId00`, NOT (`s2`.`IsAutomatic`), `s2`.`Nickname` DESC, `s2`.`Id` +"""); + } + + public override async Task Correlated_collections_inner_subquery_selector_references_outer_qsre(bool isAsync) + { + await base.Correlated_collections_inner_subquery_selector_references_outer_qsre(isAsync); + + AssertSql( + $""" + SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`FullName`, `t`.`FullName0`, `t`.`Nickname`, `t`.`SquadId` + FROM `Gears` AS `g` + OUTER APPLY ( + SELECT `g0`.`FullName`, `g`.`FullName` AS `FullName0`, `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` IN ('Gear', 'Officer') AND ((`g`.`Nickname` = `g0`.`LeaderNickname`) AND (`g`.`SquadId` = `g0`.`LeaderSquadId`)) + ) AS `t` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`Discriminator` = 'Officer') + ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId` + """); + } + + public override async Task Correlated_collections_inner_subquery_predicate_references_outer_qsre(bool isAsync) + { + await base.Correlated_collections_inner_subquery_predicate_references_outer_qsre(isAsync); + + AssertSql( + $""" + SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId` + FROM `Gears` AS `g` + OUTER APPLY ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + WHERE (`g0`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`FullName` <> 'Foo')) AND ((`g`.`Nickname` = `g0`.`LeaderNickname`) AND (`g`.`SquadId` = `g0`.`LeaderSquadId`)) + ) AS `t` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`Discriminator` = 'Officer') + ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId` + """); + } + + public override async Task Correlated_collections_nested_inner_subquery_references_outer_qsre_one_level_up(bool isAsync) + { + await base.Correlated_collections_nested_inner_subquery_references_outer_qsre_one_level_up(isAsync); + + AssertSql( + $""" + SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Name`, `t0`.`Nickname0`, `t0`.`Id` + FROM `Gears` AS `g` + LEFT JOIN ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `t`.`Name`, `t`.`Nickname` AS `Nickname0`, `t`.`Id`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + OUTER APPLY ( + SELECT `w`.`Name`, `g0`.`Nickname`, `w`.`Id` + FROM `Weapons` AS `w` + WHERE ((`w`.`Name` <> 'Bar') OR `w`.`Name` IS NULL) AND (`g0`.`FullName` = `w`.`OwnerFullName`) + ) AS `t` + WHERE `g0`.`Discriminator` IN ('Gear', 'Officer') AND (`g0`.`FullName` <> 'Foo') + ) AS `t0` ON (`g`.`Nickname` = `t0`.`LeaderNickname`) AND (`g`.`SquadId` = `t0`.`LeaderSquadId`) + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`Discriminator` = 'Officer') + ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id` + """); + } + + public override async Task Correlated_collections_nested_inner_subquery_references_outer_qsre_two_levels_up(bool isAsync) + { + await base.Correlated_collections_nested_inner_subquery_references_outer_qsre_two_levels_up(isAsync); + + AssertSql( + $""" + SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Name`, `t0`.`Nickname0`, `t0`.`Id` + FROM `Gears` AS `g` + OUTER APPLY ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `t`.`Name`, `t`.`Nickname` AS `Nickname0`, `t`.`Id` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w`.`Name`, `g`.`Nickname`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE (`w`.`Name` <> 'Bar') OR `w`.`Name` IS NULL + ) AS `t` ON `g0`.`FullName` = `t`.`OwnerFullName` + WHERE (`g0`.`Discriminator` IN ('Gear', 'Officer') AND (`g0`.`FullName` <> 'Foo')) AND ((`g`.`Nickname` = `g0`.`LeaderNickname`) AND (`g`.`SquadId` = `g0`.`LeaderSquadId`)) + ) AS `t0` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`Discriminator` = 'Officer') + ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id` + """); + } + + public override async Task Correlated_collections_on_select_many(bool isAsync) + { + await base.Correlated_collections_on_select_many(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `s`.`Name`, `g`.`SquadId`, `s`.`Id`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` +FROM (`Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName`), +(`Squads` AS `s` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + WHERE NOT (`g0`.`HasSoulPatch`) +) AS `g1` ON `s`.`Id` = `g1`.`SquadId`) +WHERE `g`.`HasSoulPatch` +ORDER BY `g`.`Nickname`, `s`.`Id` DESC, `g`.`SquadId`, `w0`.`Id`, `g1`.`Nickname` +"""); + } + + public override async Task Correlated_collections_with_Skip(bool isAsync) + { + await base.Correlated_collections_with_Skip(isAsync); + + AssertSql( + $""" + SELECT `s`.`Id` + FROM `Squads` AS `s` + ORDER BY `s`.`Name` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_Id='1'")} + + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Officer', 'Gear') AND ({AssertSqlHelper.Parameter("@_outer_Id")} = `g`.`SquadId`) + ORDER BY `g`.`Nickname` + SKIP 1 + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_Id='2'")} + + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Officer', 'Gear') AND ({AssertSqlHelper.Parameter("@_outer_Id")} = `g`.`SquadId`) + ORDER BY `g`.`Nickname` + SKIP 1 + """); + } + + public override async Task Correlated_collections_with_Take(bool isAsync) + { + await base.Correlated_collections_with_Take(isAsync); + + AssertSql( + $""" + SELECT `s`.`Id` + FROM `Squads` AS `s` + ORDER BY `s`.`Name` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_Id='1'")} + + SELECT TOP 2 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Officer', 'Gear') AND ({AssertSqlHelper.Parameter("@_outer_Id")} = `g`.`SquadId`) + ORDER BY `g`.`Nickname` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_Id='2'")} + + SELECT TOP 2 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Officer', 'Gear') AND ({AssertSqlHelper.Parameter("@_outer_Id")} = `g`.`SquadId`) + ORDER BY `g`.`Nickname` + """); + } + + public override async Task Correlated_collections_with_Distinct(bool isAsync) + { + await base.Correlated_collections_with_Distinct(isAsync); + + AssertSql( + $""" + SELECT `s`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` + FROM `Squads` AS `s` + LEFT JOIN ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') + ) AS `t` ON `s`.`Id` = `t`.`SquadId` + ORDER BY `s`.`Name`, `s`.`Id`, `t`.`Nickname`, `t`.`SquadId` + """); + } + + public override async Task Correlated_collections_with_FirstOrDefault(bool isAsync) + { + await base.Correlated_collections_with_FirstOrDefault(isAsync); + + AssertSql( + """ + SELECT ( + SELECT TOP 1 `g`.`FullName` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` + ORDER BY `g`.`Nickname`) + FROM `Squads` AS `s` + ORDER BY `s`.`Name` + """); + } + + public override async Task Correlated_collections_on_left_join_with_predicate(bool isAsync) + { + await base.Correlated_collections_on_left_join_with_predicate(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `t`.`Id`, `g`.`SquadId`, `w`.`Name`, `w`.`Id` +FROM (`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE NOT (`g`.`HasSoulPatch`) +ORDER BY `t`.`Id`, `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_on_RightJoin_with_predicate(bool async) + { + await base.Correlated_collections_on_RightJoin_with_predicate(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `w`.`Name`, `w`.`Id` +FROM (`Gears` AS `g` +RIGHT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task Correlated_collections_on_left_join_with_null_value(bool isAsync) + { + await base.Correlated_collections_on_left_join_with_null_value(isAsync); + + AssertSql( + """ + SELECT `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Name`, `w`.`Id` + FROM (`Tags` AS `t` + LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname`) + LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `t`.`Note`, `t`.`Id`, `g`.`Nickname`, `g`.`SquadId` + """); + } + + public override async Task Correlated_collections_left_join_with_self_reference(bool isAsync) + { + await base.Correlated_collections_left_join_with_self_reference(isAsync); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g1`.`FullName`, `g1`.`Nickname`, `g1`.`SquadId` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` = 'Officer' +) AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Gears` AS `g1` ON (`g0`.`Nickname` = `g1`.`LeaderNickname` OR (`g0`.`Nickname` IS NULL AND `g1`.`LeaderNickname` IS NULL)) AND `g0`.`SquadId` = `g1`.`LeaderSquadId` +ORDER BY `t`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g1`.`Nickname` +"""); + } + + public override async Task Correlated_collections_deeply_nested_left_join(bool isAsync) + { + await base.Correlated_collections_deeply_nested_left_join(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` +FROM ((`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname`) +LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` + ) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` + WHERE `g0`.`HasSoulPatch` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `t`.`Note`, `g`.`Nickname` DESC, `t`.`Id`, `g`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` +"""); + } + + public override async Task Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(bool isAsync) + { + await base.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(isAsync); + + AssertSql( + """ +SELECT `w`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId`, `s0`.`Rank` +FROM ((`Weapons` AS `w` +LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName`) +LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `g0`.`Rank`, `g0`.`FullName` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE NOT (`w0`.`IsAutomatic`) + ) AS `w1` ON `g0`.`FullName` = `w1`.`OwnerFullName` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `w`.`Name`, `w`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s0`.`FullName` DESC, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id` +"""); + } + + public override async Task Correlated_collections_complex_scenario1(bool isAsync) + { + await base.Correlated_collections_complex_scenario1(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `s`.`Id` AS `Id0`, `g1`.`Nickname` AS `Nickname0`, `g1`.`HasSoulPatch`, `g1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN `Gears` AS `g0` ON `w`.`OwnerFullName` = `g0`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `g0`.`SquadId` = `s`.`Id`) + LEFT JOIN `Gears` AS `g1` ON `s`.`Id` = `g1`.`SquadId` +) AS `s0` ON `g`.`FullName` = `s0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0` +"""); + } + + public override async Task Correlated_collections_complex_scenario2(bool isAsync) + { + await base.Correlated_collections_complex_scenario2(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id` AS `Id0`, `g2`.`Nickname` AS `Nickname0`, `g2`.`HasSoulPatch`, `g2`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN `Gears` AS `g1` ON `w`.`OwnerFullName` = `g1`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `g1`.`SquadId` = `s`.`Id`) + LEFT JOIN `Gears` AS `g2` ON `s`.`Id` = `g2`.`SquadId` + ) AS `s0` ON `g0`.`FullName` = `s0`.`OwnerFullName` +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00` +"""); + } + + public override async Task Correlated_collections_with_funky_orderby_complex_scenario1(bool isAsync) + { + await base.Correlated_collections_with_funky_orderby_complex_scenario1(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `s`.`Id` AS `Id0`, `g1`.`Nickname` AS `Nickname0`, `g1`.`HasSoulPatch`, `g1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN `Gears` AS `g0` ON `w`.`OwnerFullName` = `g0`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `g0`.`SquadId` = `s`.`Id`) + LEFT JOIN `Gears` AS `g1` ON `s`.`Id` = `g1`.`SquadId` +) AS `s0` ON `g`.`FullName` = `s0`.`OwnerFullName` +ORDER BY `g`.`FullName`, `g`.`Nickname` DESC, `g`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0` +"""); + } + + public override async Task Correlated_collections_with_funky_orderby_complex_scenario2(bool isAsync) + { + await base.Correlated_collections_with_funky_orderby_complex_scenario2(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `s0`.`IsAutomatic`, `s0`.`Name`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id` AS `Id0`, `g2`.`Nickname` AS `Nickname0`, `g2`.`HasSoulPatch`, `g2`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN `Gears` AS `g1` ON `w`.`OwnerFullName` = `g1`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `g1`.`SquadId` = `s`.`Id`) + LEFT JOIN `Gears` AS `g2` ON `s`.`Id` = `g2`.`SquadId` + ) AS `s0` ON `g0`.`FullName` = `s0`.`OwnerFullName` +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY NOT (`g`.`HasSoulPatch`), `g`.`LeaderNickname`, `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s1`.`FullName`, NOT (`s1`.`HasSoulPatch0`) DESC, `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`IsAutomatic`), `s1`.`Name` DESC, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00` +"""); + } + + public override async Task Correlated_collection_with_top_level_FirstOrDefault(bool isAsync) + { + await base.Correlated_collection_with_top_level_FirstOrDefault(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`Nickname` +) AS `g0` +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g0`.`Nickname`, `g0`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_top_level_Count(bool isAsync) + { + await base.Correlated_collection_with_top_level_Count(isAsync); + + AssertSql( + """ + SELECT COUNT(*) + FROM `Gears` AS `g` + """); + } + + public override async Task Correlated_collection_with_top_level_Last_with_orderby_on_outer(bool isAsync) + { + await base.Correlated_collection_with_top_level_Last_with_orderby_on_outer(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`FullName` +) AS `g0` +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_top_level_Last_with_order_by_on_inner(bool isAsync) + { + await base.Correlated_collection_with_top_level_Last_with_order_by_on_inner(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`FullName` DESC +) AS `g0` +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g0`.`FullName` DESC, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Name` +"""); + } + + public override async Task Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(bool isAsync) + { + await base.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(isAsync); + + AssertSql( + """ +SELECT `f0`.`Id`, `f0`.`CapitalName`, `f0`.`Discriminator`, `f0`.`Name`, `f0`.`ServerAddress`, `f0`.`CommanderName`, `f0`.`DeputyCommanderName`, `f0`.`Eradicated` +FROM `LocustLeaders` AS `l` +INNER JOIN ( + SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated` + FROM `Factions` AS `f` + WHERE `f`.`Name` = 'Swarm' +) AS `f0` ON `l`.`Name` = `f0`.`CommanderName` +WHERE `f0`.`Eradicated` <> TRUE OR `f0`.`Eradicated` IS NULL +"""); + } + + public override async Task Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(bool isAsync) + { + await base.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(isAsync); + + AssertSql( + """ +SELECT `f0`.`Id`, `f0`.`CapitalName`, `f0`.`Discriminator`, `f0`.`Name`, `f0`.`ServerAddress`, `f0`.`CommanderName`, `f0`.`DeputyCommanderName`, `f0`.`Eradicated` +FROM `LocustLeaders` AS `l` +LEFT JOIN ( + SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated` + FROM `Factions` AS `f` + WHERE `f`.`Name` = 'Swarm' +) AS `f0` ON `l`.`Name` = `f0`.`CommanderName` +WHERE `f0`.`Eradicated` <> TRUE OR `f0`.`Eradicated` IS NULL +"""); + } + + public override async Task Include_on_derived_type_with_order_by_and_paging(bool isAsync) + { + await base.Include_on_derived_type_with_order_by_and_paging(isAsync); + + AssertSql( + """ +@p='10' + +SELECT `s`.`Name`, `s`.`Discriminator`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator0`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP @p `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator` AS `Discriminator0`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`Note` + FROM (`LocustLeaders` AS `l` + LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId`) + LEFT JOIN `Tags` AS `t` ON (`g`.`Nickname` = `t`.`GearNickName` OR (`g`.`Nickname` IS NULL AND `t`.`GearNickName` IS NULL)) AND (`g`.`SquadId` = `t`.`GearSquadId` OR (`g`.`SquadId` IS NULL AND `t`.`GearSquadId` IS NULL)) + ORDER BY `t`.`Note` +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`Note`, `s`.`Name`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id` +"""); + } + + public override async Task Select_required_navigation_on_derived_type(bool isAsync) + { + await base.Select_required_navigation_on_derived_type(isAsync); + AssertSql( +""" +SELECT `l0`.`Name` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustHighCommands` AS `l0` ON `l`.`HighCommandId` = `l0`.`Id` +"""); + } + + public override async Task Select_required_navigation_on_the_same_type_with_cast(bool isAsync) + { + await base.Select_required_navigation_on_the_same_type_with_cast(isAsync); + + AssertSql( +""" +SELECT `c`.`Name` +FROM `Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +"""); + } + + public override async Task Where_required_navigation_on_derived_type(bool isAsync) + { + await base.Where_required_navigation_on_derived_type(isAsync); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustHighCommands` AS `l0` ON `l`.`HighCommandId` = `l0`.`Id` +WHERE `l0`.`IsOperational` +"""); + } + + public override async Task Outer_parameter_in_join_key(bool isAsync) + { + await base.Outer_parameter_in_join_key(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `t1`.`Note`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId` + FROM `Gears` AS `g` + OUTER APPLY ( + SELECT `t`.`Note`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` + FROM `Tags` AS `t` + INNER JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` IN ('Gear', 'Officer') + ) AS `t0` ON `g`.`FullName` = `t0`.`FullName` + ) AS `t1` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`Discriminator` = 'Officer') + ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId` + """); + } + + public override async Task Outer_parameter_in_join_key_inner_and_outer(bool isAsync) + { + await base.Outer_parameter_in_join_key_inner_and_outer(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `t1`.`Note`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId` + FROM `Gears` AS `g` + OUTER APPLY ( + SELECT `t`.`Note`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` + FROM `Tags` AS `t` + INNER JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` IN ('Gear', 'Officer') + ) AS `t0` ON `g`.`FullName` = `g`.`Nickname` + ) AS `t1` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`Discriminator` = 'Officer') + ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId` + """); + } + + public override async Task Outer_parameter_in_group_join_with_DefaultIfEmpty(bool isAsync) + { + await base.Outer_parameter_in_group_join_with_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `t1`.`Note`, `t1`.`Id` + FROM `Gears` AS `g` + OUTER APPLY ( + SELECT `t`.`Note`, `t`.`Id` + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` IN ('Gear', 'Officer') + ) AS `t0` ON `g`.`FullName` = `t0`.`FullName` + ) AS `t1` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`Discriminator` = 'Officer') + ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t1`.`Id` + """); + } + + public override async Task Negated_bool_ternary_inside_anonymous_type_in_projection(bool isAsync) + { + await base.Negated_bool_ternary_inside_anonymous_type_in_projection(isAsync); + + AssertSql( + """ +SELECT NOT (IIF(`g`.`HasSoulPatch`, TRUE, IIF(`g`.`HasSoulPatch` IS NULL, TRUE, `g`.`HasSoulPatch`))) AS `c` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +"""); + } + + public override async Task Order_by_entity_qsre(bool isAsync) + { + await base.Order_by_entity_qsre(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` +ORDER BY `c`.`Name`, `g`.`Nickname` DESC +"""); + } + + public override async Task Order_by_entity_qsre_with_inheritance(bool isAsync) + { + await base.Order_by_entity_qsre_with_inheritance(isAsync); + + AssertSql( + """ +SELECT `l`.`Name` +FROM `LocustLeaders` AS `l` +INNER JOIN `LocustHighCommands` AS `l0` ON `l`.`HighCommandId` = `l0`.`Id` +WHERE `l`.`Discriminator` = 'LocustCommander' +ORDER BY `l0`.`Id`, `l`.`Name` +"""); + } + + public override async Task Order_by_entity_qsre_composite_key(bool isAsync) + { + await base.Order_by_entity_qsre_composite_key(isAsync); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Order_by_entity_qsre_with_other_orderbys(bool isAsync) + { + await base.Order_by_entity_qsre_with_other_orderbys(isAsync); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Weapons` AS `w` +LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName`) +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w`.`IsAutomatic`), `g`.`Nickname` DESC, `g`.`SquadId` DESC, `w0`.`Id`, `w`.`Name` +"""); + } + + public override async Task Join_on_entity_qsre_keys(bool isAsync) + { + await base.Join_on_entity_qsre_keys(isAsync); + + AssertSql( + $""" + SELECT `w`.`Name` AS `Name1`, `w0`.`Name` AS `Name2` + FROM `Weapons` AS `w` + INNER JOIN `Weapons` AS `w0` ON `w`.`Id` = `w0`.`Id` + """); + } + + public override async Task Join_on_entity_qsre_keys_composite_key(bool isAsync) + { + await base.Join_on_entity_qsre_keys_composite_key(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName` AS `GearName1`, `g0`.`FullName` AS `GearName2` +FROM `Gears` AS `g` +INNER JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`Nickname` AND `g`.`SquadId` = `g0`.`SquadId` +"""); + } + + public override async Task Join_on_entity_qsre_keys_inheritance(bool isAsync) + { + await base.Join_on_entity_qsre_keys_inheritance(isAsync); + + AssertSql( + """ +SELECT `g`.`FullName` AS `GearName`, `g1`.`FullName` AS `OfficerName` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` = 'Officer' +) AS `g1` ON `g`.`Nickname` = `g1`.`Nickname` AND `g`.`SquadId` = `g1`.`SquadId` +"""); + } + + public override async Task Join_on_entity_qsre_keys_outer_key_is_navigation(bool isAsync) + { + await base.Join_on_entity_qsre_keys_outer_key_is_navigation(isAsync); + + AssertSql( + """ +SELECT `w`.`Name` AS `Name1`, `w1`.`Name` AS `Name2` +FROM (`Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id`) +LEFT JOIN `Weapons` AS `w1` ON `w0`.`Id` = `w1`.`Id` +WHERE `w0`.`Id` IS NOT NULL AND `w1`.`Id` IS NOT NULL +"""); + } + + public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation(bool isAsync) + { + await base.Join_on_entity_qsre_keys_inner_key_is_navigation(isAsync); + + AssertSql( + """ +SELECT `c`.`Name` AS `CityName`, `s`.`Nickname` AS `GearNickname` +FROM `Cities` AS `c` +INNER JOIN ( + SELECT `g`.`Nickname`, `c0`.`Name` + FROM `Gears` AS `g` + LEFT JOIN `Cities` AS `c0` ON `g`.`AssignedCityName` = `c0`.`Name` +) AS `s` ON `c`.`Name` = `s`.`Name` +"""); + } + + public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(bool isAsync) + { + await base.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `s`.`Note` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `t`.`Note`, `g0`.`Nickname`, `g0`.`SquadId` + FROM `Tags` AS `t` + LEFT JOIN `Gears` AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname` AND `t`.`GearSquadId` = `g0`.`SquadId` + WHERE `t`.`Note` IN ('Cole''s Tag', 'Dom''s Tag') +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` +"""); + } + + public override async Task Join_on_entity_qsre_keys_inner_key_is_nested_navigation(bool isAsync) + { + await base.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(isAsync); + + AssertSql( + """ +SELECT `s`.`Name` AS `SquadName`, `s1`.`Name` AS `WeaponName` +FROM `Squads` AS `s` +INNER JOIN ( + SELECT `w`.`Name`, `s0`.`Id` AS `Id0` + FROM (`Weapons` AS `w` + LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `g`.`SquadId` = `s0`.`Id` + WHERE `w`.`IsAutomatic` +) AS `s1` ON `s`.`Id` = `s1`.`Id0` +"""); + } + + public override async Task GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(bool isAsync) + { + await base.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(isAsync); + + AssertSql( + """ +SELECT `s`.`Name` AS `SquadName`, `s1`.`Name` AS `WeaponName` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `w`.`Name`, `s0`.`Id` AS `Id0` + FROM (`Weapons` AS `w` + LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `g`.`SquadId` = `s0`.`Id` +) AS `s1` ON `s`.`Id` = `s1`.`Id0` +"""); + } + + public override async Task Streaming_correlated_collection_issue_11403(bool isAsync) + { + await base.Streaming_correlated_collection_issue_11403(isAsync); + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`Nickname` +) AS `g0` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE NOT (`w`.`IsAutomatic`) +) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id` +"""); + } + + public override async Task Project_one_value_type_from_empty_collection(bool isAsync) + { + await base.Project_one_value_type_from_empty_collection(isAsync); + AssertSql( + """ +SELECT `s`.`Name`, IIF(( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) IS NULL, 0, ( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`)) AS `SquadId` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Kilo' +"""); + } + + public override async Task Project_one_value_type_converted_to_nullable_from_empty_collection(bool isAsync) + { + await base.Project_one_value_type_converted_to_nullable_from_empty_collection(isAsync); + AssertSql( + """ +SELECT `s`.`Name`, ( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) AS `SquadId` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Kilo' +"""); + } + + public override async Task Project_one_value_type_with_client_projection_from_empty_collection(bool isAsync) + { + await base.Project_one_value_type_with_client_projection_from_empty_collection(isAsync); + + AssertSql( + $""" + SELECT `s`.`Name`, `t0`.`SquadId`, `t0`.`LeaderSquadId`, `t0`.`c` + FROM `Squads` AS `s` + LEFT JOIN ( + SELECT `t`.`SquadId`, `t`.`LeaderSquadId`, `t`.`c`, `t`.`Nickname` + FROM ( + SELECT `g`.`SquadId`, `g`.`LeaderSquadId`, 1 AS `c`, `g`.`Nickname`, ROW_NUMBER() OVER(PARTITION BY `g`.`SquadId` ORDER BY `g`.`Nickname`, `g`.`SquadId`) AS `row` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`HasSoulPatch` = True) + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `s`.`Id` = `t0`.`SquadId` + WHERE `s`.`Name` = 'Kilo' + """); + } + + public override async Task Filter_on_subquery_projecting_one_value_type_from_empty_collection(bool isAsync) + { + await base.Filter_on_subquery_projecting_one_value_type_from_empty_collection(isAsync); + + AssertSql( + """ +SELECT `s`.`Name` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Kilo' AND IIF(( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) IS NULL, 0, ( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`)) <> 0 +"""); + } + + public override async Task Select_subquery_projecting_single_constant_int(bool isAsync) + { + await base.Select_subquery_projecting_single_constant_int(isAsync); + + AssertSql( + """ +SELECT `s`.`Name`, IIF(( + SELECT TOP 1 42 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) IS NULL, 0, ( + SELECT TOP 1 42 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`)) AS `Gear` +FROM `Squads` AS `s` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_string(bool isAsync) + { + await base.Select_subquery_projecting_single_constant_string(isAsync); + AssertSql( + """ +SELECT `s`.`Name`, ( + SELECT TOP 1 'Foo' + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) AS `Gear` +FROM `Squads` AS `s` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_bool(bool isAsync) + { + await base.Select_subquery_projecting_single_constant_bool(isAsync); + + AssertSql( + """ +SELECT `s`.`Name`, IIF(( + SELECT TOP 1 TRUE + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) IS NULL, FALSE, ( + SELECT TOP 1 TRUE + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`)) AS `Gear` +FROM `Squads` AS `s` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_inside_anonymous(bool isAsync) + { + await base.Select_subquery_projecting_single_constant_inside_anonymous(isAsync); + + AssertSql( + $""" + SELECT `s`.`Name`, `t0`.`c` + FROM `Squads` AS `s` + LEFT JOIN ( + SELECT `t`.`c`, `t`.`Nickname`, `t`.`SquadId` + FROM ( + SELECT 1 AS `c`, `g`.`Nickname`, `g`.`SquadId`, ROW_NUMBER() OVER(PARTITION BY `g`.`SquadId` ORDER BY `g`.`Nickname`, `g`.`SquadId`) AS `row` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`HasSoulPatch` = True) + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `s`.`Id` = `t0`.`SquadId` + """); + } + + public override async Task Select_subquery_projecting_multiple_constants_inside_anonymous(bool isAsync) + { + await base.Select_subquery_projecting_multiple_constants_inside_anonymous(isAsync); + + AssertSql( + $""" + SELECT `s`.`Name`, `t0`.`c`, `t0`.`c0`, `t0`.`c1` + FROM `Squads` AS `s` + LEFT JOIN ( + SELECT `t`.`c`, `t`.`c0`, `t`.`c1`, `t`.`Nickname`, `t`.`SquadId` + FROM ( + SELECT True AS `c`, False AS `c0`, 1 AS `c1`, `g`.`Nickname`, `g`.`SquadId`, ROW_NUMBER() OVER(PARTITION BY `g`.`SquadId` ORDER BY `g`.`Nickname`, `g`.`SquadId`) AS `row` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`HasSoulPatch` = True) + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `s`.`Id` = `t0`.`SquadId` + """); + } + + public override async Task Include_with_order_by_constant(bool isAsync) + { + await base.Include_with_order_by_constant(isAsync); + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Squads` AS `s` +LEFT JOIN `Gears` AS `g` ON `s`.`Id` = `g`.`SquadId` +ORDER BY `s`.`Id`, `g`.`Nickname` +"""); + } + + public override async Task Correlated_collection_order_by_constant(bool isAsync) + { + await base.Correlated_collection_order_by_constant(isAsync); + + AssertSql( + """ + SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Name`, `w`.`Id` + FROM `Gears` AS `g` + LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `g`.`Nickname`, `g`.`SquadId` + """); + } + + public override async Task Select_subquery_projecting_single_constant_null_of_non_mapped_type(bool isAsync) + { + await base.Select_subquery_projecting_single_constant_null_of_non_mapped_type(isAsync); + + AssertSql( + $""" + SELECT `s`.`Name`, `t0`.`c` + FROM `Squads` AS `s` + LEFT JOIN ( + SELECT `t`.`c`, `t`.`Nickname`, `t`.`SquadId` + FROM ( + SELECT 1 AS `c`, `g`.`Nickname`, `g`.`SquadId`, ROW_NUMBER() OVER(PARTITION BY `g`.`SquadId` ORDER BY `g`.`Nickname`, `g`.`SquadId`) AS `row` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`HasSoulPatch` = True) + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `s`.`Id` = `t0`.`SquadId` + """); + } + + public override async Task Select_subquery_projecting_single_constant_of_non_mapped_type(bool isAsync) + { + await base.Select_subquery_projecting_single_constant_of_non_mapped_type(isAsync); + + AssertSql( + $""" + SELECT `s`.`Name`, `t0`.`c` + FROM `Squads` AS `s` + LEFT JOIN ( + SELECT `t`.`c`, `t`.`Nickname`, `t`.`SquadId` + FROM ( + SELECT 1 AS `c`, `g`.`Nickname`, `g`.`SquadId`, ROW_NUMBER() OVER(PARTITION BY `g`.`SquadId` ORDER BY `g`.`Nickname`, `g`.`SquadId`) AS `row` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') AND (`g`.`HasSoulPatch` = True) + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `s`.`Id` = `t0`.`SquadId` + """); + } + + public override async Task Include_collection_OrderBy_aggregate(bool isAsync) + { + await base.Include_collection_OrderBy_aggregate(isAsync); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`Discriminator0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname` AS `Nickname0`, `g0`.`SquadId` AS `SquadId0`, `g0`.`AssignedCityName` AS `AssignedCityName0`, `g0`.`CityOfBirthName` AS `CityOfBirthName0`, `g0`.`Discriminator` AS `Discriminator0`, `g0`.`FullName` AS `FullName0`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `g0`.`LeaderNickname` AS `LeaderNickname0`, `g0`.`LeaderSquadId` AS `LeaderSquadId0`, `g0`.`Rank` AS `Rank0`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `c` + FROM `Gears` AS `g` + LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` + WHERE `g`.`Discriminator` = 'Officer' +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Include_collection_with_complex_OrderBy2(bool isAsync) + { + await base.Include_collection_with_complex_OrderBy2(isAsync); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`Discriminator0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname` AS `Nickname0`, `g0`.`SquadId` AS `SquadId0`, `g0`.`AssignedCityName` AS `AssignedCityName0`, `g0`.`CityOfBirthName` AS `CityOfBirthName0`, `g0`.`Discriminator` AS `Discriminator0`, `g0`.`FullName` AS `FullName0`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `g0`.`LeaderNickname` AS `LeaderNickname0`, `g0`.`LeaderSquadId` AS `LeaderSquadId0`, `g0`.`Rank` AS `Rank0`, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) AS `c` + FROM `Gears` AS `g` + LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` + WHERE `g`.`Discriminator` = 'Officer' +) AS `s` +ORDER BY NOT (`s`.`c`), `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Include_collection_with_complex_OrderBy3(bool isAsync) + { + await base.Include_collection_with_complex_OrderBy3(isAsync); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`Discriminator0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname` AS `Nickname0`, `g0`.`SquadId` AS `SquadId0`, `g0`.`AssignedCityName` AS `AssignedCityName0`, `g0`.`CityOfBirthName` AS `CityOfBirthName0`, `g0`.`Discriminator` AS `Discriminator0`, `g0`.`FullName` AS `FullName0`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `g0`.`LeaderNickname` AS `LeaderNickname0`, `g0`.`LeaderSquadId` AS `LeaderSquadId0`, `g0`.`Rank` AS `Rank0`, IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) AS `c` + FROM `Gears` AS `g` + LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` + WHERE `g`.`Discriminator` = 'Officer' +) AS `s` +ORDER BY NOT (`s`.`c`), `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Correlated_collection_with_complex_OrderBy(bool isAsync) + { + await base.Correlated_collection_with_complex_OrderBy(isAsync); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname` AS `Nickname0`, `g1`.`SquadId` AS `SquadId0`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `c` + FROM `Gears` AS `g` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + WHERE NOT (`g0`.`HasSoulPatch`) + ) AS `g1` ON `g`.`Nickname` = `g1`.`LeaderNickname` AND `g`.`SquadId` = `g1`.`LeaderSquadId` + WHERE `g`.`Discriminator` = 'Officer' +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Correlated_collection_with_very_complex_order_by(bool isAsync) + { + await base.Correlated_collection_with_very_complex_order_by(isAsync); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g2`.`Nickname` AS `Nickname0`, `g2`.`SquadId` AS `SquadId0`, `g2`.`AssignedCityName`, `g2`.`CityOfBirthName`, `g2`.`Discriminator`, `g2`.`FullName`, `g2`.`HasSoulPatch`, `g2`.`LeaderNickname`, `g2`.`LeaderSquadId`, `g2`.`Rank`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = IIF(( + SELECT TOP 1 `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` = 'Marcus') IS NULL, FALSE, ( + SELECT TOP 1 `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` = 'Marcus'))) AS `c` + FROM `Gears` AS `g` + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` + FROM `Gears` AS `g1` + WHERE NOT (`g1`.`HasSoulPatch`) + ) AS `g2` ON `g`.`Nickname` = `g2`.`LeaderNickname` AND `g`.`SquadId` = `g2`.`LeaderSquadId` + WHERE `g`.`Discriminator` = 'Officer' +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Cast_to_derived_type_after_OfType_works(bool isAsync) + { + await base.Cast_to_derived_type_after_OfType_works(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`Discriminator` = 'Officer' +"""); + } + + public override async Task Select_subquery_boolean(bool isAsync) + { + await base.Select_subquery_boolean(isAsync); + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_boolean_with_pushdown(bool isAsync) + { + await base.Select_subquery_boolean_with_pushdown(isAsync); + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_int_with_inside_cast_and_coalesce(bool isAsync) + { + await base.Select_subquery_int_with_inside_cast_and_coalesce(isAsync); + + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 42, ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_int_with_outside_cast_and_coalesce(bool isAsync) + { + await base.Select_subquery_int_with_outside_cast_and_coalesce(isAsync); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 0, ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_int_with_pushdown_and_coalesce(bool isAsync) + { + await base.Select_subquery_int_with_pushdown_and_coalesce(isAsync); + + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 42, ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_int_with_pushdown_and_coalesce2(bool isAsync) + { + await base.Select_subquery_int_with_pushdown_and_coalesce2(isAsync); + + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, ( + SELECT TOP 1 `w0`.`Id` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ORDER BY `w0`.`Id`), ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_boolean_empty(bool isAsync) + { + await base.Select_subquery_boolean_empty(isAsync); + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_boolean_empty_with_pushdown(bool isAsync) + { + await base.Select_subquery_boolean_empty_with_pushdown(isAsync); + + AssertSql( +""" +SELECT ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ORDER BY `w`.`Id`) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean1(bool isAsync) + { + await base.Select_subquery_distinct_singleordefault_boolean1(isAsync); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`)) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean2(bool isAsync) + { + await base.Select_subquery_distinct_singleordefault_boolean2(isAsync); + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_with_pushdown(bool isAsync) + { + await base.Select_subquery_distinct_singleordefault_boolean_with_pushdown(isAsync); + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_empty1(bool isAsync) + { + await base.Select_subquery_distinct_singleordefault_boolean_empty1(isAsync); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ) AS `w0`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ) AS `w0`)) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_empty2(bool isAsync) + { + await base.Select_subquery_distinct_singleordefault_boolean_empty2(isAsync); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG') IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG')) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_empty_with_pushdown(bool isAsync) + { + await base.Select_subquery_distinct_singleordefault_boolean_empty_with_pushdown(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ) AS `w0`) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Cast_subquery_to_base_type_using_typed_ToList(bool isAsync) + { + await base.Cast_subquery_to_base_type_using_typed_ToList(isAsync); + + AssertSql( + """ + SELECT `c`.`Name`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Nickname`, `g`.`Rank`, `g`.`SquadId` + FROM `Cities` AS `c` + LEFT JOIN `Gears` AS `g` ON `c`.`Name` = `g`.`AssignedCityName` + WHERE `c`.`Name` = 'Ephyra' + ORDER BY `c`.`Name`, `g`.`Nickname` + """); + } + + public override async Task Cast_ordered_subquery_to_base_type_using_typed_ToArray(bool isAsync) + { + await base.Cast_ordered_subquery_to_base_type_using_typed_ToArray(isAsync); + + AssertSql( + """ + SELECT `c`.`Name`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Nickname`, `g`.`Rank`, `g`.`SquadId` + FROM `Cities` AS `c` + LEFT JOIN `Gears` AS `g` ON `c`.`Name` = `g`.`AssignedCityName` + WHERE `c`.`Name` = 'Ephyra' + ORDER BY `c`.`Name`, `g`.`Nickname` DESC + """); + } + + public override async Task Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(bool isAsync) + { + await base.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(isAsync); + + AssertSql( + """ + SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Name`, `w`.`Id` + FROM `Gears` AS `g` + LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `g`.`Nickname`, `g`.`SquadId` + """); + } + + public override async Task Double_order_by_on_nullable_bool_coming_from_optional_navigation(bool isAsync) + { + await base.Double_order_by_on_nullable_bool_coming_from_optional_navigation(isAsync); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`IsAutomatic`), `w0`.`Id` +"""); + } + + public override async Task Double_order_by_on_Like(bool isAsync) + { + await base.Double_order_by_on_Like(isAsync); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT ((`w0`.`Name` LIKE '%Lancer') AND `w0`.`Name` IS NOT NULL) +"""); + } + + public override async Task Double_order_by_on_is_null(bool isAsync) + { + await base.Double_order_by_on_is_null(isAsync); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`Name` IS NULL) +"""); + } + + public override async Task Double_order_by_on_string_compare(bool isAsync) + { + await base.Double_order_by_on_string_compare(isAsync); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +ORDER BY NOT (`w`.`Name` = 'Marcus'' Lancer' AND `w`.`Name` IS NOT NULL), `w`.`Id` +"""); + } + + public override async Task Double_order_by_binary_expression(bool isAsync) + { + await base.Double_order_by_binary_expression(isAsync); + + AssertSql( + """ +SELECT `w0`.`Binary` +FROM ( + SELECT `w`.`Id` + 2 AS `Binary` + FROM `Weapons` AS `w` +) AS `w0` +ORDER BY `w0`.`Binary` +"""); + } + + public override async Task String_compare_with_null_conditional_argument(bool isAsync) + { + await base.String_compare_with_null_conditional_argument(isAsync); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`Name` = 'Marcus'' Lancer' AND `w0`.`Name` IS NOT NULL) +"""); + } + + public override async Task String_compare_with_null_conditional_argument2(bool isAsync) + { + await base.String_compare_with_null_conditional_argument2(isAsync); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT ('Marcus'' Lancer' = `w0`.`Name` AND `w0`.`Name` IS NOT NULL) +"""); + } + + public override async Task String_concat_with_null_conditional_argument(bool isAsync) + { + await base.String_concat_with_null_conditional_argument(isAsync); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY IIF(`w0`.`Name` IS NULL, '', `w0`.`Name`) & (5 & '') +"""); + } + + public override async Task String_concat_with_null_conditional_argument2(bool isAsync) + { + await base.String_concat_with_null_conditional_argument2(isAsync); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY IIF(`w0`.`Name` IS NULL, '', `w0`.`Name`) & 'Marcus'' Lancer' +"""); + } + + public override async Task String_concat_on_various_types(bool isAsync) + { + await base.String_concat_on_various_types(isAsync); + + AssertSql( + """ +SELECT ('HasSoulPatch ' & (`g`.`HasSoulPatch` & '')) & ' HasSoulPatch' AS `HasSoulPatch`, ('Rank ' & (`g`.`Rank` & '')) & ' Rank' AS `Rank`, ('SquadId ' & (`g`.`SquadId` & '')) & ' SquadId' AS `SquadId`, ('Rating ' & IIF((`m`.`Rating` & '') IS NULL, '', (`m`.`Rating` & ''))) & ' Rating' AS `Rating`, ('Timeline ' & (`m`.`Timeline` & '')) & ' Timeline' AS `Timeline` +FROM `Gears` AS `g`, +`Missions` AS `m` +ORDER BY `g`.`Nickname`, `m`.`Id` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Average(bool isAsync) + { + await base.GroupBy_Property_Include_Select_Average(isAsync); + + AssertSql( +""" +SELECT AVG(CDBL(`g`.`SquadId`)) +FROM `Gears` AS `g` +GROUP BY `g`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Sum(bool isAsync) + { + await base.GroupBy_Property_Include_Select_Sum(isAsync); + + AssertSql( +""" +SELECT IIF(SUM(`g`.`SquadId`) IS NULL, 0, SUM(`g`.`SquadId`)) +FROM `Gears` AS `g` +GROUP BY `g`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Count(bool isAsync) + { + await base.GroupBy_Property_Include_Select_Count(isAsync); + + AssertSql( +""" +SELECT COUNT(*) +FROM `Gears` AS `g` +GROUP BY `g`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_LongCount(bool isAsync) + { + await base.GroupBy_Property_Include_Select_LongCount(isAsync); + + AssertSql( + """ + SELECT COUNT(*) + FROM `Gears` AS `g` + GROUP BY `g`.`Rank` + """); + } + + public override async Task GroupBy_Property_Include_Select_Min(bool isAsync) + { + await base.GroupBy_Property_Include_Select_Min(isAsync); + + AssertSql( + """ + SELECT MIN(`g`.`SquadId`) + FROM `Gears` AS `g` + GROUP BY `g`.`Rank` + """); + } + + public override async Task GroupBy_Property_Include_Aggregate_with_anonymous_selector(bool isAsync) + { + await base.GroupBy_Property_Include_Aggregate_with_anonymous_selector(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname` AS `Key`, COUNT(*) AS `c` +FROM `Gears` AS `g` +GROUP BY `g`.`Nickname` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Group_by_with_include_with_entity_in_result_selector(bool isAsync) + { + await base.Group_by_with_include_with_entity_in_result_selector(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g.CityOfBirth`.`Name`, `g.CityOfBirth`.`Location`, `g.CityOfBirth`.`Nation` + FROM `Gears` AS `g` + INNER JOIN `Cities` AS `g.CityOfBirth` ON `g`.`CityOfBirthName` = `g.CityOfBirth`.`Name` + WHERE `g`.`Discriminator` IN ('Officer', 'Gear') + ORDER BY `g`.`Rank` + """); + } + + public override async Task GroupBy_Property_Include_Select_Max(bool isAsync) + { + await base.GroupBy_Property_Include_Select_Max(isAsync); + + AssertSql( + """ + SELECT MAX(`g`.`SquadId`) + FROM `Gears` AS `g` + GROUP BY `g`.`Rank` + """); + } + + public override async Task Include_with_group_by_and_FirstOrDefault_gets_properly_applied(bool isAsync) + { + await base.Include_with_group_by_and_FirstOrDefault_gets_properly_applied(isAsync); + + AssertSql( + $""" + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g.CityOfBirth`.`Name`, `g.CityOfBirth`.`Location`, `g.CityOfBirth`.`Nation` + FROM `Gears` AS `g` + INNER JOIN `Cities` AS `g.CityOfBirth` ON `g`.`CityOfBirthName` = `g.CityOfBirth`.`Name` + WHERE `g`.`Discriminator` IN ('Officer', 'Gear') + ORDER BY `g`.`Rank` + """); + } + + public override async Task Include_collection_with_Cast_to_base(bool isAsync) + { + await base.Include_collection_with_Cast_to_base(isAsync); + + AssertSql( + """ + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Gears` AS `g` + LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` + WHERE `g`.`Discriminator` = 'Officer' + ORDER BY `g`.`Nickname`, `g`.`SquadId` + """); + } + + public override async Task Include_with_client_method_and_member_access_still_applies_includes(bool isAsync) + { + await base.Include_with_client_method_and_member_access_still_applies_includes(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +"""); + } + + public override async Task Include_with_projection_of_unmapped_property_still_gets_applied(bool isAsync) + { + await base.Include_with_projection_of_unmapped_property_still_gets_applied(isAsync); + + AssertSql( + """ + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Gears` AS `g` + LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `g`.`Nickname`, `g`.`SquadId` + """); + } + + public override async Task Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection() + { + await base.Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection(); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`Discriminator`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Gears` AS `g` + LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +WHERE `s`.`Name` = 'Delta' +ORDER BY `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` +"""); + } + + public override async Task OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(bool isAsync) + { + await base.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(isAsync); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, NULL) +FROM `Gears` AS `g` +ORDER BY NOT (IIF(`g`.`LeaderNickname` IS NOT NULL, TRUE, FALSE)) +"""); + + } + + public override async Task GetValueOrDefault_in_projection(bool isAsync) + { + await base.GetValueOrDefault_in_projection(isAsync); + + AssertSql( + $""" + SELECT IIF(`w`.`SynergyWithId` IS NULL, 0, `w`.`SynergyWithId`) + FROM `Weapons` AS `w` + """); + } + + public override async Task GetValueOrDefault_in_filter(bool isAsync) + { + await base.GetValueOrDefault_in_filter(isAsync); + + AssertSql( + $""" + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE IIF(`w`.`SynergyWithId` IS NULL, 0, `w`.`SynergyWithId`) = 0 + """); + } + + public override async Task GetValueOrDefault_in_filter_non_nullable_column(bool isAsync) + { + await base.GetValueOrDefault_in_filter_non_nullable_column(isAsync); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`Id` = 0 +"""); + } + + public override async Task GetValueOrDefault_in_order_by(bool isAsync) + { + await base.GetValueOrDefault_in_order_by(isAsync); + + AssertSql( + $""" + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + ORDER BY IIF(`w`.`SynergyWithId` IS NULL, 0, `w`.`SynergyWithId`), `w`.`Id` + """); + } + + public override async Task GetValueOrDefault_with_argument(bool isAsync) + { + await base.GetValueOrDefault_with_argument(isAsync); + + AssertSql( + """ + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE IIF(`w`.`SynergyWithId` IS NULL, `w`.`Id`, `w`.`SynergyWithId`) = 1 + """); + } + + public override async Task GetValueOrDefault_with_argument_complex(bool isAsync) + { + await base.GetValueOrDefault_with_argument_complex(isAsync); + + AssertSql( + """ + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE IIF(`w`.`SynergyWithId` IS NULL, IIF(LEN(`w`.`Name`) IS NULL, NULL, CLNG(LEN(`w`.`Name`))) + 42, `w`.`SynergyWithId`) > 10 + """); + } + + public override async Task Filter_with_complex_predicate_containing_subquery(bool isAsync) + { + await base.Filter_with_complex_predicate_containing_subquery(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`FullName` <> 'Dom' AND EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic`) +"""); + } + + public override async Task Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let( + bool isAsync) + { + await base.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` + ORDER BY `w`.`AmmunitionType` DESC) AS `WeaponName` +FROM `Gears` AS `g` +WHERE `g`.`Nickname` <> 'Dom' +"""); + } + + public override async Task + Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(bool isAsync) + { + await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`g`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `g`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `g`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) +"""); + } + + public override async Task + Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(bool isAsync) + { + await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex( + isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM (`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` +WHERE IIF(LEN(`s`.`Name`) IS NULL, NULL, MID(`t`.`Note`, 0 + 1, IIF(LEN(`s`.`Name`) IS NULL, NULL, CLNG(LEN(`s`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) +"""); + } + + public override async Task OfTypeNav1(bool isAsync) + { + await base.OfTypeNav1(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM (`Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Tags` AS `t0` ON `g`.`Nickname` = `t0`.`GearNickName` AND `g`.`SquadId` = `t0`.`GearSquadId` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND `g`.`Discriminator` = 'Officer' AND (`t0`.`Note` <> 'Bar' OR `t0`.`Note` IS NULL) +"""); + } + + public override async Task OfTypeNav2(bool isAsync) + { + await base.OfTypeNav2(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM (`Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND `g`.`Discriminator` = 'Officer' AND (`c`.`Location` <> 'Bar' OR `c`.`Location` IS NULL) +"""); + } + + public override async Task OfTypeNav3(bool isAsync) + { + await base.OfTypeNav3(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM ((`Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +INNER JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Tags` AS `t0` ON `g`.`Nickname` = `t0`.`GearNickName` AND `g`.`SquadId` = `t0`.`GearSquadId` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND `g`.`Discriminator` = 'Officer' AND (`t0`.`Note` <> 'Bar' OR `t0`.`Note` IS NULL) +"""); + } + + public override async Task Nav_rewrite_Distinct_with_convert() + { + await base.Nav_rewrite_Distinct_with_convert(); + + AssertSql(); + } + + public override async Task Nav_rewrite_Distinct_with_convert_anonymous() + { + await base.Nav_rewrite_Distinct_with_convert_anonymous(); + + AssertSql(); + } + + public override async Task Nav_rewrite_with_convert1(bool isAsync) + { + await base.Nav_rewrite_with_convert1(isAsync); + + AssertSql( + """ +SELECT `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` +FROM (`Factions` AS `f` +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +WHERE `c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL +"""); + } + + public override async Task Nav_rewrite_with_convert2(bool isAsync) + { + await base.Nav_rewrite_with_convert2(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated` +FROM (`Factions` AS `f` +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) +LEFT JOIN ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`l0`.`Name` <> 'Bar' OR `l0`.`Name` IS NULL) +"""); + } + + public override async Task Nav_rewrite_with_convert3(bool isAsync) + { + await base.Nav_rewrite_with_convert3(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated` +FROM (`Factions` AS `f` +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) +LEFT JOIN ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`l0`.`Name` <> 'Bar' OR `l0`.`Name` IS NULL) +"""); + } + + public override async Task Where_contains_on_navigation_with_composite_keys(bool isAsync) + { + await base.Where_contains_on_navigation_with_composite_keys(isAsync); + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE EXISTS ( + SELECT 1 + FROM `Cities` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `c`.`Name` = `g0`.`CityOfBirthName` AND `g0`.`Nickname` = `g`.`Nickname` AND `g0`.`SquadId` = `g`.`SquadId`)) +"""); + } + + public override async Task Include_with_complex_order_by(bool isAsync) + { + await base.Include_with_complex_order_by(isAsync); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Gnasher%')) AS `c` + FROM `Gears` AS `g` + LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Anonymous_projection_take_followed_by_projecting_single_element_from_collection_navigation(bool isAsync) + { + await base.Anonymous_projection_take_followed_by_projecting_single_element_from_collection_navigation(isAsync); + + AssertSql( + $@""); + } + + public override async Task Bool_projection_from_subquery_treated_appropriately_in_where(bool isAsync) + { + await base.Bool_projection_from_subquery_treated_appropriately_in_where(isAsync); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE ( + SELECT TOP 1 `g`.`HasSoulPatch` + FROM `Gears` AS `g` + ORDER BY `g`.`Nickname`, `g`.`SquadId`) +"""); + } + + public override async Task DateTimeOffset_Contains_Less_than_Greater_than(bool isAsync) + { + var dto = LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(599898024001234567, new TimeSpan(1, 30, 0))); + var start = dto.AddDays(-1); + var end = dto.AddDays(1); + var dates = new[] { dto }; + + await AssertQuery( + isAsync, + ss => ss.Set().Where( + m => start <= m.Timeline.Date && m.Timeline < end && dates.Contains(m.Timeline))); + + AssertSql( + """ +@start='1902-01-01T08:30:00.0000000Z' (DbType = DateTime) +@end='1902-01-03T08:30:00.0000000Z' (DbType = DateTime) +@dates1='1902-01-02T08:30:00.0000000Z' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE @start <= DATEVALUE(`m`.`Timeline`) AND `m`.`Timeline` < @end AND `m`.`Timeline` = @dates1 +"""); + } + + public override Task DateTimeOffsetNow_minus_timespan(bool async) + => AssertTranslationFailed(() => base.DateTimeOffsetNow_minus_timespan(async)); + + public override async Task Navigation_inside_interpolated_string_expanded(bool isAsync) + { + await base.Navigation_inside_interpolated_string_expanded(isAsync); + + AssertSql( + """ +SELECT `w`.`SynergyWithId` IS NOT NULL, `w0`.`OwnerFullName` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +"""); + } + + public override async Task Left_join_projection_using_coalesce_tracking(bool isAsync) + { + await base.Left_join_projection_using_coalesce_tracking(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname` +"""); + } + + public override async Task Left_join_projection_using_conditional_tracking(bool isAsync) + { + await base.Left_join_projection_using_conditional_tracking(isAsync); + + AssertSql( + """ +SELECT `g0`.`Nickname` IS NULL OR `g0`.`SquadId` IS NULL, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname` +"""); + } + + public override async Task Project_collection_navigation_nested_with_take_composite_key(bool isAsync) + { + await base.Project_collection_navigation_nested_with_take_composite_key(isAsync); + + AssertSql( + $""" + SELECT `t`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`Discriminator`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank` + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` IN ('Gear', 'Officer') + ) AS `t0` ON (`t`.`GearNickName` = `t0`.`Nickname`) AND (`t`.`GearSquadId` = `t0`.`SquadId`) + OUTER APPLY ( + SELECT TOP 50 `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` IN ('Gear', 'Officer') AND (`t0`.`Nickname` IS NOT NULL AND ((`t0`.`Nickname` = `g0`.`LeaderNickname`) AND (`t0`.`SquadId` = `g0`.`LeaderSquadId`))) + ) AS `t1` + WHERE `t0`.`Discriminator` = 'Officer' + ORDER BY `t`.`Id`, `t1`.`Nickname`, `t1`.`SquadId` + """); + } + + public override async Task Project_collection_navigation_nested_composite_key(bool isAsync) + { + await base.Project_collection_navigation_nested_composite_key(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM (`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON (`g`.`Nickname` = `g0`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `g0`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task Null_checks_in_correlated_predicate_are_correctly_translated(bool isAsync) + { + await base.Null_checks_in_correlated_predicate_are_correctly_translated(isAsync); + + AssertSql( + """ +SELECT `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` AND `t`.`Note` IS NOT NULL +ORDER BY `t`.`Id`, `g`.`Nickname` +"""); + } + + public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(bool isAsync) + { + await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(isAsync); + + AssertSql( + """ +@isAutomatic='True' + +SELECT `g`.`Nickname`, `g`.`FullName`, `w0`.`Id` IS NOT NULL AS `Collection` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` = @isAutomatic +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +"""); + } + + public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(bool async) + { + await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async); + + AssertSql( + """ +@isAutomatic='True' + +SELECT `g`.`Nickname`, `g`.`FullName`, `w0`.`Id` IS NOT NULL AS `Collection` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` <> @isAutomatic +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +"""); + } + + public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(bool async) + { + await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async); + + AssertSql( + """ +@prm='1' + +SELECT `g`.`Nickname`, `g`.`FullName`, `w0`.`Id` IS NOT NULL AS `Collection` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`Id` > @prm +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +"""); + } + + public override async Task DefaultIfEmpty_top_level_over_column_with_nullable_value_type(bool async) + { + await base.DefaultIfEmpty_top_level_over_column_with_nullable_value_type(async); + + AssertSql( + """ +SELECT `m0`.`Rating` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `m`.`Rating` + FROM `Missions` AS `m` + WHERE `m`.`Id` = -1 +) AS `m0` ON TRUE +"""); + } + + public override async Task DefaultIfEmpty_top_level_over_arbitrary_expression_with_nullable_value_type(bool async) + { + await base.DefaultIfEmpty_top_level_over_arbitrary_expression_with_nullable_value_type(async); + + AssertSql( + """ +SELECT `m0`.`c` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `m`.`Rating` + 2.0 AS `c` + FROM `Missions` AS `m` + WHERE `m`.`Id` = -1 +) AS `m0` ON TRUE +"""); + } + + public override async Task DefaultIfEmpty_top_level_over_arbitrary_expression_with_non_nullable_value_type(bool async) + { + await base.DefaultIfEmpty_top_level_over_arbitrary_expression_with_non_nullable_value_type(async); + + AssertSql( + """ +SELECT IIF(`m0`.`c` IS NULL, 0, `m0`.`c`) +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `m`.`Id` + 2 AS `c` + FROM `Missions` AS `m` + WHERE `m`.`Id` = -1 +) AS `m0` ON TRUE +"""); + } + + public override async Task Join_with_inner_being_a_subquery_projecting_single_property(bool isAsync) + { + await base.Join_with_inner_being_a_subquery_projecting_single_property(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +INNER JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`Nickname` +"""); + } + + public override async Task Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(bool isAsync) + { + await base.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(isAsync); + + AssertSql( + """ + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + INNER JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`Nickname` + """); + } + + public override async Task Navigation_based_on_complex_expression1(bool isAsync) + { + await base.Navigation_based_on_complex_expression1(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +WHERE `l0`.`Name` IS NOT NULL +"""); + } + + public override async Task Navigation_based_on_complex_expression2(bool isAsync) + { + await base.Navigation_based_on_complex_expression2(isAsync); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +WHERE `l0`.`Name` IS NOT NULL +"""); + } + + public override async Task Navigation_based_on_complex_expression3(bool isAsync) + { + await base.Navigation_based_on_complex_expression3(isAsync); + + AssertSql( + """ +SELECT `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +"""); + } + + public override async Task Navigation_based_on_complex_expression4(bool isAsync) + { + await base.Navigation_based_on_complex_expression4(isAsync); + + AssertSql( + """ +SELECT TRUE, `l2`.`Name`, `l2`.`Discriminator`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l2`.`DefeatedByNickname`, `l2`.`DefeatedBySquadId`, `l2`.`HighCommandId`, `s`.`Name0`, `s`.`Discriminator0`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId` +FROM ( + SELECT `f`.`CommanderName`, `l0`.`Name` AS `Name0`, `l0`.`Discriminator` AS `Discriminator0`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` + FROM `Factions` AS `f`, + ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' + ) AS `l0` +) AS `s` +LEFT JOIN ( + SELECT `l1`.`Name`, `l1`.`Discriminator`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` + FROM `LocustLeaders` AS `l1` + WHERE `l1`.`Discriminator` = 'LocustCommander' +) AS `l2` ON `s`.`CommanderName` = `l2`.`Name` +"""); + } + + public override async Task Navigation_based_on_complex_expression5(bool isAsync) + { + await base.Navigation_based_on_complex_expression5(isAsync); + + AssertSql( + """ +SELECT `l2`.`Name`, `l2`.`Discriminator`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l2`.`DefeatedByNickname`, `l2`.`DefeatedBySquadId`, `l2`.`HighCommandId`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` +FROM (`Factions` AS `f` +LEFT JOIN ( + SELECT `l1`.`Name`, `l1`.`Discriminator`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` + FROM `LocustLeaders` AS `l1` + WHERE `l1`.`Discriminator` = 'LocustCommander' +) AS `l2` ON `f`.`CommanderName` = `l2`.`Name`), +( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` +"""); + } + + public override async Task Navigation_based_on_complex_expression6(bool isAsync) + { + await base.Navigation_based_on_complex_expression6(isAsync); + + AssertSql( + """ +SELECT `l2`.`Name` = 'Queen Myrrah' AND `l2`.`Name` IS NOT NULL, `l2`.`Name`, `l2`.`Discriminator`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l2`.`DefeatedByNickname`, `l2`.`DefeatedBySquadId`, `l2`.`HighCommandId`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` +FROM (`Factions` AS `f` +LEFT JOIN ( + SELECT `l1`.`Name`, `l1`.`Discriminator`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` + FROM `LocustLeaders` AS `l1` + WHERE `l1`.`Discriminator` = 'LocustCommander' +) AS `l2` ON `f`.`CommanderName` = `l2`.`Name`), +( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` +"""); + } + + public override async Task Select_as_operator(bool isAsync) + { + await base.Select_as_operator(isAsync); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +"""); + } + + public override async Task Select_datetimeoffset_comparison_in_projection(bool isAsync) + { + await base.Select_datetimeoffset_comparison_in_projection(isAsync); + + AssertSql( + """ +SELECT `m`.`Timeline` > NOW() +FROM `Missions` AS `m` +"""); + } + + public override async Task OfType_in_subquery_works(bool isAsync) + { + await base.OfType_in_subquery_works(isAsync); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Location`, `s`.`Nation` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + LEFT JOIN `Cities` AS `c` ON `g0`.`AssignedCityName` = `c`.`Name` + WHERE `g0`.`Discriminator` = 'Officer' +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +"""); + } + + public override async Task Nullable_bool_comparison_is_translated_to_server(bool isAsync) + { + await base.Nullable_bool_comparison_is_translated_to_server(isAsync); + + AssertSql( + """ +SELECT `f`.`Eradicated` = TRUE AND `f`.`Eradicated` IS NOT NULL AS `IsEradicated` +FROM `Factions` AS `f` +"""); + } + public override async Task Accessing_reference_navigation_collection_composition_generates_single_query(bool isAsync) + { + await base.Accessing_reference_navigation_collection_composition_generates_single_query(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`Id0` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`IsAutomatic`, `w0`.`Name`, `w0`.`Id` AS `Id0`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +) AS `s` ON `g`.`FullName` = `s`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Id` +"""); + } + + public override async Task Reference_include_chain_loads_correctly_when_middle_is_null(bool isAsync) + { + await base.Reference_include_chain_loads_correctly_when_middle_is_null(isAsync); + + AssertSql( +""" +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM (`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` +ORDER BY `t`.`Note` +"""); + } + + public override async Task Accessing_property_of_optional_navigation_in_child_projection_works(bool isAsync) + { + await base.Accessing_property_of_optional_navigation_in_child_projection_works(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname` IS NOT NULL AND `g`.`SquadId` IS NOT NULL, `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`Id`, `s`.`SquadId` +FROM (`Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `w`.`Id`, `g0`.`SquadId`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + LEFT JOIN `Gears` AS `g0` ON `w`.`OwnerFullName` = `g0`.`FullName` +) AS `s` ON `g`.`FullName` = `s`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s`.`Nickname` +"""); + } + + public override async Task Collection_navigation_ofType_filter_works(bool isAsync) + { + await base.Collection_navigation_ofType_filter_works(isAsync); + + AssertSql( + """ + SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` + FROM `Cities` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + WHERE `c`.`Name` = `g`.`CityOfBirthName` AND `g`.`Discriminator` = 'Officer' AND `g`.`Nickname` = 'Marcus') + """); + } + + public override async Task Query_reusing_parameter_doesnt_declare_duplicate_parameter(bool isAsync) + { + await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter(isAsync); + + AssertSql( + """ +@prm_Inner_Nickname='Marcus' (Size = 255) + +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Nickname` <> @prm_Inner_Nickname +) AS `g0` +ORDER BY `g0`.`FullName` +"""); + } + + public override async Task Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(bool async) + { + await base.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async); + + AssertSql( + """ +@squadId='1' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`Discriminator`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` + WHERE `s`.`Id` IN ( + SELECT `s0`.`Id` + FROM `Squads` AS `s0` + WHERE `s0`.`Id` = @squadId + ) + UNION ALL + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g0` + INNER JOIN `Squads` AS `s1` ON `g0`.`SquadId` = `s1`.`Id` + WHERE `s1`.`Id` IN ( + SELECT `s2`.`Id` + FROM `Squads` AS `s2` + WHERE `s2`.`Id` = @squadId + ) +) AS `u` +ORDER BY `u`.`FullName` +"""); + } + + public override async Task Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(bool async) + { + await base.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async); + + AssertSql( + """ +@gearId='1' + +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`SquadId` = @gearId AND `g`.`SquadId` = @gearId) +"""); + } + + public override async Task Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(bool isAsync) + { + await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(isAsync); + + AssertSql( + """ +@entity_equality_prm_Inner_Squad_Id='1' (Nullable = true) + +SELECT `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`Discriminator`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank` +FROM ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` + WHERE `s`.`Id` = @entity_equality_prm_Inner_Squad_Id +) AS `s1` +INNER JOIN `Squads` AS `s0` ON `s1`.`SquadId` = `s0`.`Id` +WHERE `s0`.`Id` = @entity_equality_prm_Inner_Squad_Id +ORDER BY `s1`.`FullName` +"""); + } + + public override async Task Complex_GroupBy_after_set_operator(bool isAsync) + { + await base.Complex_GroupBy_after_set_operator(isAsync); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`Count`, IIF(SUM(`u`.`Count`) IS NULL, 0, SUM(`u`.`Count`)) AS `Sum` +FROM ( + SELECT `c`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g` + LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` + UNION ALL + SELECT `c0`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` +) AS `u` +GROUP BY `u`.`Name`, `u`.`Count` +"""); + } + + public override async Task Complex_GroupBy_after_set_operator_using_result_selector(bool isAsync) + { + await base.Complex_GroupBy_after_set_operator_using_result_selector(isAsync); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`Count`, IIF(SUM(`u`.`Count`) IS NULL, 0, SUM(`u`.`Count`)) AS `Sum` +FROM ( + SELECT `c`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g` + LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` + UNION ALL + SELECT `c0`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` +) AS `u` +GROUP BY `u`.`Name`, `u`.`Count` +"""); + } + + public override async Task Left_join_with_GroupBy_with_composite_group_key(bool isAsync) + { + await base.Left_join_with_GroupBy_with_composite_group_key(isAsync); + + AssertSql( + """ + SELECT `g`.`CityOfBirthName`, `g`.`HasSoulPatch` + FROM (`Gears` AS `g` + INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) + LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` + GROUP BY `g`.`CityOfBirthName`, `g`.`HasSoulPatch` + """); + } + + public override async Task GroupBy_with_boolean_grouping_key(bool isAsync) + { + await base.GroupBy_with_boolean_grouping_key(isAsync); + + AssertSql( + """ +SELECT `g0`.`CityOfBirthName`, `g0`.`HasSoulPatch`, `g0`.`IsMarcus`, COUNT(*) AS `Count` +FROM ( + SELECT `g`.`CityOfBirthName`, `g`.`HasSoulPatch`, `g`.`Nickname` = 'Marcus' AS `IsMarcus` + FROM `Gears` AS `g` +) AS `g0` +GROUP BY `g0`.`CityOfBirthName`, `g0`.`HasSoulPatch`, `g0`.`IsMarcus` +"""); + } + + public override async Task GroupBy_with_boolean_groupin_key_thru_navigation_access(bool isAsync) + { + await base.GroupBy_with_boolean_groupin_key_thru_navigation_access(isAsync); + + AssertSql( + """ + SELECT `g`.`HasSoulPatch`, LCASE(`s`.`Name`) AS `Name` + FROM (`Tags` AS `t` + LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) + LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` + GROUP BY `g`.`HasSoulPatch`, `s`.`Name` + """); + } + + public override async Task Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(bool isAsync) + { + await base.Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(isAsync); + + AssertSql( +""" +SELECT `c`.`Name` +FROM `Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +GROUP BY `c`.`Name` +"""); + } + + public override async Task Group_by_on_StartsWith_with_null_parameter_as_argument(bool isAsync) + { + await base.Group_by_on_StartsWith_with_null_parameter_as_argument(isAsync); + + AssertSql( + """ +SELECT `g0`.`Key` +FROM ( + SELECT FALSE AS `Key` + FROM `Gears` AS `g` +) AS `g0` +GROUP BY `g0`.`Key` +"""); + } + + public override async Task Group_by_with_having_StartsWith_with_null_parameter_as_argument(bool isAsync) + { + await base.Group_by_with_having_StartsWith_with_null_parameter_as_argument(isAsync); + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +GROUP BY `g`.`FullName` +HAVING FALSE +"""); + } + + public override async Task Select_StartsWith_with_null_parameter_as_argument(bool isAsync) + { + await base.Select_StartsWith_with_null_parameter_as_argument(isAsync); + + AssertSql( +""" +SELECT FALSE +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_parameter_is_not_null(bool isAsync) + { + await base.Select_null_parameter_is_not_null(isAsync); + + AssertSql( + """ +@p='False' + +SELECT CBOOL(@p) +FROM `Gears` AS `g` +"""); + } + + public override async Task Where_null_parameter_is_not_null(bool isAsync) + { + await base.Where_null_parameter_is_not_null(isAsync); + AssertSql( + """ +@p='False' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE @p +"""); + } + + public override async Task OrderBy_StartsWith_with_null_parameter_as_argument(bool isAsync) + { + await base.OrderBy_StartsWith_with_null_parameter_as_argument(isAsync); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task OrderBy_Contains_empty_list(bool async) + { + await base.OrderBy_Contains_empty_list(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +"""); + } + + public override async Task Where_with_enum_flags_parameter(bool isAsync) + { + await base.Where_with_enum_flags_parameter(isAsync); + + AssertSql( + """ +@rank='1' (Nullable = true) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE (`g`.`Rank` BAND @rank) = @rank +""", + // + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +""", + // + """ +@rank='2' (Nullable = true) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE (`g`.`Rank` BOR @rank) <> @rank +""", + // + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE FALSE +"""); + } + + public override async Task FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(bool isAsync) + { + await base.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(isAsync); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` +WHERE `c`.`Name` = ( + SELECT TOP 1 `c0`.`Name` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` + ORDER BY `g0`.`Nickname`) OR (`c`.`Name` IS NULL AND ( + SELECT TOP 1 `c0`.`Name` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` + ORDER BY `g0`.`Nickname`) IS NULL) +"""); + } + + public override async Task Bitwise_operation_with_non_null_parameter_optimizes_null_checks(bool async) + { + await base.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async); + + AssertSql( + """ +@ranks='134' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE (`g`.`Rank` BAND @ranks) <> 0 +""", + // + """ +@ranks='134' + +SELECT (`g`.`Rank` BOR @ranks) = @ranks +FROM `Gears` AS `g` +""", + // + """ +@ranks='134' + +SELECT (`g`.`Rank` BOR (`g`.`Rank` BOR (@ranks BOR (`g`.`Rank` BOR @ranks)))) = @ranks +FROM `Gears` AS `g` +"""); + } + + public override async Task Bitwise_operation_with_null_arguments(bool async) + { + await base.Bitwise_operation_with_null_arguments(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +""", + // + """ +@prm='2' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE (`w`.`AmmunitionType` BAND @prm) <> 0 OR `w`.`AmmunitionType` IS NULL +""", + // + """ +@prm='1' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE (`w`.`AmmunitionType` BAND @prm) = @prm +"""); + } + + public override async Task Logical_operation_with_non_null_parameter_optimizes_null_checks(bool async) + { + await base.Logical_operation_with_non_null_parameter_optimizes_null_checks(async); + + AssertSql( + """ +@prm='True' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` <> @prm +""", + // + """ +@prm='False' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` <> @prm +"""); + } + + public override async Task Cast_OfType_works_correctly(bool async) + { + await base.Cast_OfType_works_correctly(async); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +WHERE `g`.`Discriminator` = 'Officer' +"""); + } + + public override async Task Join_inner_source_custom_projection_followed_by_filter(bool async) + { + await base.Join_inner_source_custom_projection_followed_by_filter(async); + + AssertSql( + """ +SELECT IIF(`f`.`Name` = 'Locust', TRUE, NULL) AS `IsEradicated`, `f`.`CommanderName`, `f`.`Name` +FROM `LocustLeaders` AS `l` +INNER JOIN `Factions` AS `f` ON `l`.`Name` = `f`.`CommanderName` +WHERE IIF(`f`.`Name` = 'Locust', TRUE, NULL) <> TRUE OR IIF(`f`.`Name` = 'Locust', TRUE, NULL) IS NULL +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Byte_array_filter_by_length_literal2(bool async) + { + await AssertQuery( + async, + ss => ss.Set().Where(w => EF.Functions.ByteArrayLength(w.Banner) == 2), + ss => ss.Set().Where(w => w.Banner != null && w.Banner.Length == 2)); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = 2 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Byte_array_filter_by_length_parameter2(bool async) + { + var someByteArr = new[] { (byte)42, (byte)24 }; + await AssertQuery( + async, + ss => ss.Set().Where(w => EF.Functions.ByteArrayLength(w.Banner) == someByteArr.Length), + ss => ss.Set().Where(w => w.Banner != null && w.Banner.Length == someByteArr.Length)); + + AssertSql( + """ +@p='2' + +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = @p +"""); + } + + [ConditionalFact] + public virtual void Byte_array_filter_by_length_parameter_compiled2() + { + var query = EF.CompileQuery( + (GearsOfWarContext context, byte[] byteArrayParam) + => context.Squads.Where(w => EF.Functions.ByteArrayLength(w.Banner) == EF.Functions.ByteArrayLength(byteArrayParam)).Count()); + + using var context = CreateContext(); + var byteQueryParam = new[] { (byte)42, (byte)128 }; + + Assert.Equal(2, query(context, byteQueryParam)); + + AssertSql( + """ +@byteArrayParam='0x2A80' (Size = 510) + +SELECT COUNT(*) +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = IIF(IIF(ASCB(RIGHTB(@byteArrayParam, 1)) = 0, LENB(@byteArrayParam) - 1, LENB(@byteArrayParam)) IS NULL, NULL, CLNG(IIF(ASCB(RIGHTB(@byteArrayParam, 1)) = 0, LENB(@byteArrayParam) - 1, LENB(@byteArrayParam)))) +"""); + } + + public override async Task Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(bool async) + { + var exception = await Assert.ThrowsAsync(() => base.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(async)); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n2(bool async) + { + await AssertQuery( + async, + ss => ss.Set().Where(w => EF.Functions.ByteArrayLength(w.Banner5) == 5), + ss => ss.Set().Where(w => w.Banner5 != null && w.Banner5.Length == 5)); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner5`, 1)) = 0, LENB(`s`.`Banner5`) - 1, LENB(`s`.`Banner5`)) = 5 +"""); + } + + public override async Task Conditional_expression_with_test_being_simplified_to_constant_simple(bool isAsync) + { + await base.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync); + + AssertSql( + """ +@prm='True' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE IIF(`g`.`HasSoulPatch` = @prm, TRUE, FALSE) +"""); + } + + public override async Task Conditional_expression_with_test_being_simplified_to_constant_complex(bool isAsync) + { + await base.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync); + + AssertSql( + """ +@prm='True' +@prm2='Marcus' Lancer' (Size = 255) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE IIF(`g`.`HasSoulPatch` = @prm, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `w`.`Id` = `g`.`SquadId`) = @prm2, FALSE) +"""); + } + + public override async Task OrderBy_bool_coming_from_optional_navigation(bool async) + { + await base.OrderBy_bool_coming_from_optional_navigation(async); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`IsAutomatic`) +"""); + } + + public override async Task DateTimeOffset_Date_returns_datetime(bool async) + { + var dateTimeOffset = new DateTimeOffset(102, 3, 1, 8, 0, 0, new TimeSpan(-5, 0, 0)); + + await AssertQuery( + async, + ss => ss.Set().Where(m => m.Timeline.Date >= dateTimeOffset.Date)); + + AssertSql( + """ +@dateTimeOffset_Date='0102-03-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEVALUE(`m`.`Timeline`) >= CDATE(@dateTimeOffset_Date) +"""); + } + + public override async Task Conditional_with_conditions_evaluating_to_false_gets_optimized(bool async) + { + await base.Conditional_with_conditions_evaluating_to_false_gets_optimized(async); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +"""); + } + + public override async Task Conditional_with_conditions_evaluating_to_true_gets_optimized(bool async) + { + await base.Conditional_with_conditions_evaluating_to_true_gets_optimized(async); + + AssertSql( + """ +SELECT `g`.`CityOfBirthName` +FROM `Gears` AS `g` +"""); + } + + public override async Task Projecting_required_string_column_compared_to_null_parameter(bool async) + { + await base.Projecting_required_string_column_compared_to_null_parameter(async); + + AssertSql( + """ +SELECT FALSE +FROM `Gears` AS `g` +"""); + } + + public override async Task Group_by_nullable_property_HasValue_and_project_the_grouping_key(bool async) + { + await base.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async); + + AssertSql( + """ +SELECT `w0`.`Key` +FROM ( + SELECT `w`.`SynergyWithId` IS NOT NULL AS `Key` + FROM `Weapons` AS `w` +) AS `w0` +GROUP BY `w0`.`Key` +"""); + } + + public override async Task Group_by_nullable_property_and_project_the_grouping_key_HasValue(bool async) + { + await base.Group_by_nullable_property_and_project_the_grouping_key_HasValue(async); + + AssertSql( + """ +SELECT `w`.`SynergyWithId` IS NOT NULL +FROM `Weapons` AS `w` +GROUP BY `w`.`SynergyWithId` +"""); + } + + public override async Task Checked_context_with_cast_does_not_fail(bool isAsync) + { + await base.Checked_context_with_cast_does_not_fail(isAsync); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +WHERE CBYTE(`l`.`ThreatLevel`) >= CBYTE(5) +"""); + } + + public override async Task Checked_context_with_addition_does_not_fail(bool isAsync) + { + await base.Checked_context_with_addition_does_not_fail(isAsync); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +WHERE CLNG(`l`.`ThreatLevel`) <= (5 + CLNG(`l`.`ThreatLevel`)) +"""); + } + + public override async Task Contains_on_collection_of_byte_subquery(bool async) + { + await base.Contains_on_collection_of_byte_subquery(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +WHERE `l`.`ThreatLevelByte` IN ( + SELECT `l0`.`ThreatLevelByte` + FROM `LocustLeaders` AS `l0` +) +"""); + } + + public override async Task Contains_on_collection_of_nullable_byte_subquery(bool async) + { + await base.Contains_on_collection_of_nullable_byte_subquery(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +WHERE EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l0` + WHERE `l0`.`ThreatLevelNullableByte` = `l`.`ThreatLevelNullableByte` OR (`l0`.`ThreatLevelNullableByte` IS NULL AND `l`.`ThreatLevelNullableByte` IS NULL)) +"""); + } + + public override async Task Contains_on_collection_of_nullable_byte_subquery_null_constant(bool async) + { + await base.Contains_on_collection_of_nullable_byte_subquery_null_constant(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +WHERE EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l0` + WHERE `l0`.`ThreatLevelNullableByte` IS NULL) +"""); + } + + public override async Task Contains_on_collection_of_nullable_byte_subquery_null_parameter(bool async) + { + await base.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +WHERE EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l0` + WHERE `l0`.`ThreatLevelNullableByte` IS NULL) +"""); + } + + public override async Task Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion( + bool async) + { + await base.Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion(async); + + AssertSql( + """ +SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` +FROM `LocustLeaders` AS `l` +CROSS APPLY ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l0` + WHERE `l0`.`ThreatLevelByte` = `l`.`ThreatLevelByte`) +) AS `t` +"""); + } + + public override async Task Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion_negated( + bool async) + { + await base.Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion_negated(async); + + AssertSql( + """ +SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` +FROM `LocustLeaders` AS `l` +CROSS APPLY ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l0` + WHERE `l0`.`ThreatLevelByte` = `l`.`ThreatLevelByte`)) +) AS `t` +"""); + } + + public override async Task Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion(bool async) + { + await base.Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion(async); + + AssertSql( + """ +SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` +FROM `LocustLeaders` AS `l` +CROSS APPLY ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l0` + WHERE `l0`.`ThreatLevelNullableByte` = `l`.`ThreatLevelNullableByte` OR ((`l0`.`ThreatLevelNullableByte` IS NULL) AND (`l`.`ThreatLevelNullableByte` IS NULL))) +) AS `t` +"""); + } + + public override async Task Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion_negated(bool async) + { + await base.Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion_negated(async); + + AssertSql( + """ +SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` +FROM `LocustLeaders` AS `l` +CROSS APPLY ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l0` + WHERE `l0`.`ThreatLevelNullableByte` = `l`.`ThreatLevelNullableByte` OR ((`l0`.`ThreatLevelNullableByte` IS NULL) AND (`l`.`ThreatLevelNullableByte` IS NULL)))) +) AS `t` +"""); + } + + public override async Task Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(bool async) + { + await base.Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(async); + + AssertSql( + """ +@prm='1' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE @prm = `w`.`AmmunitionType` +"""); + } + + public override async Task Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(bool async) + { + await base.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async); + + AssertSql( + """ +@prm='133' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE (@prm BAND `g`.`Rank`) = `g`.`Rank` +"""); + } + + public override async Task Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(bool async) + { + await base.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async); + + AssertSql( + """ +@prm='5' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE (@prm BAND CLNG(CINT(`g`.`Rank`))) = CLNG(`g`.`Rank`) +"""); + } + + public override async Task Constant_enum_with_same_underlying_value_as_previously_parameterized_int(bool async) + { + await base.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `g`.`Rank` BAND 1 +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Enum_array_contains(bool async) + { + await base.Enum_array_contains(async); + + AssertSql( + """ +@types1='1' + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +WHERE `w0`.`Id` IS NOT NULL AND (`w0`.`AmmunitionType` IS NULL OR `w0`.`AmmunitionType` = @types1) +"""); + } + + public override async Task Coalesce_with_non_root_evaluatable_Convert(bool async) + { + await base.Coalesce_with_non_root_evaluatable_Convert(async); + + AssertSql( + """ +@rank='1' (Nullable = true) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE @rank = `g`.`Rank` +"""); + } + + /*`ConditionalTheory` + `MemberData(nameof(IsAsyncData))` + public async Task DataLength_function_for_string_parameter(bool async) + { + await AssertQueryScalar( + async, + ss => ss.Set().Select(m => EF.Functions.DataLength(m.CodeName)), + ss => ss.Set().Select(m => (int?)(m.CodeName.Length * 2))); + + AssertSql( + """ +SELECT CAST(DATALENGTH(`m`.`CodeName`) AS int) +FROM `Missions` AS `m` +"""); + }*/ + + public override async Task CompareTo_used_with_non_unicode_string_column_and_constant(bool async) + { + await base.CompareTo_used_with_non_unicode_string_column_and_constant(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = 'Unknown' +"""); + } + + public override async Task Coalesce_used_with_non_unicode_string_column_and_constant(bool async) + { + await base.Coalesce_used_with_non_unicode_string_column_and_constant(async); + + AssertSql( + """ + SELECT IIF(`c`.`Location` IS NULL, 'Unknown', `c`.`Location`) + FROM `Cities` AS `c` + """); + } + + public override async Task Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(bool async) + { + await base.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, COUNT(*) AS `Count` +FROM (`Weapons` AS `w` +LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +GROUP BY `c`.`Name`, `c`.`Location` +ORDER BY `c`.`Location` +"""); + } + + public override async Task SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(bool async) + { + await base.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +INNER JOIN `Weapons` AS `w` ON `g`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +ORDER BY `g`.`Nickname`, `w`.`Id` +"""); + } + + public override async Task SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(bool async) + { + await base.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +ORDER BY `g`.`Nickname`, `w`.`Id` +"""); + } + + public override async Task SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join( + bool async) + { + await base.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w` + LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +) AS `s` ON `g`.`FullName` <> `s`.`OwnerFullName` OR `s`.`OwnerFullName` IS NULL +ORDER BY `g`.`Nickname`, `s`.`Id` +"""); + } + + public override async Task SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(bool async) + { + await base.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +"""); + } + + public override async Task Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(bool async) + { + await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` AND `g`.`SquadId` < `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(bool async) + { + await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` AND `g`.`SquadId` <= `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(bool async) + { + await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` AND `g`.`SquadId` >= `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task SelectMany_predicate_with_non_equality_comparison_with_Take_doesnt_convert_to_join(bool async) + { + await base.SelectMany_predicate_with_non_equality_comparison_with_Take_doesnt_convert_to_join(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` +FROM `Gears` AS `g` +CROSS APPLY ( + SELECT TOP(3) `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`OwnerFullName` <> `g`.`FullName` OR (`w`.`OwnerFullName` IS NULL) + ORDER BY `w`.`Id` +) AS `t` +ORDER BY `g`.`Nickname`, `t`.`Id` +"""); + } + + public override async Task FirstOrDefault_over_int_compared_to_zero(bool async) + { + await base.FirstOrDefault_over_int_compared_to_zero(async); + + AssertSql( + """ +SELECT `s`.`Name` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Delta' AND IIF(( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` + ORDER BY `g`.`FullName`) IS NULL, 0, ( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` + ORDER BY `g`.`FullName`)) <> 0 +"""); + } + + public override async Task Correlated_collection_with_inner_collection_references_element_two_levels_up(bool async) + { + await base.Correlated_collection_with_inner_collection_references_element_two_levels_up(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`ReportName`, `t`.`OfficerName`, `t`.`Nickname`, `t`.`SquadId` +FROM `Gears` AS `g` +OUTER APPLY ( + SELECT `g0`.`FullName` AS `ReportName`, `g`.`FullName` AS `OfficerName`, `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` +) AS `t` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +"""); + } + + public override async Task Accessing_derived_property_using_hard_and_soft_cast(bool async) + { + await base.Accessing_derived_property_using_hard_and_soft_cast(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +WHERE `l`.`Discriminator` = 'LocustCommander' AND (`l`.`HighCommandId` <> 0 OR `l`.`HighCommandId` IS NULL) +""", +// +""" +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +WHERE `l`.`Discriminator` = 'LocustCommander' AND (`l`.`HighCommandId` <> 0 OR `l`.`HighCommandId` IS NULL) +"""); + } + + public override async Task Cast_to_derived_followed_by_include_and_FirstOrDefault(bool async) + { + await base.Cast_to_derived_followed_by_include_and_FirstOrDefault(async); + + AssertSql( + """ +SELECT TOP 1 `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `LocustLeaders` AS `l` +LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` +WHERE `l`.`Name` LIKE '%Queen%' +"""); + } + + public override async Task Correlated_collection_take(bool async) + { + await base.Correlated_collection_take(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId`, `c`.`Location`, `c`.`Nation` +FROM `Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +LEFT JOIN ( + SELECT `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + FROM ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, ROW_NUMBER() OVER(PARTITION BY `w`.`OwnerFullName` ORDER BY `w`.`Id`) AS `row` + FROM `Weapons` AS `w` + ) AS `t` + WHERE `t`.`row` <= 10 +) AS `t0` ON `g`.`FullName` = `t0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name` +"""); + } + + public override async Task FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(bool async) + { + //await base.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async); + await AssertQuery( + async, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault() + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault(new DateTime(100,1,1)) + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }); + + AssertSql( + """ +SELECT `g`.`Nickname`, IIF(( + SELECT TOP 1 `t1`.`IssueDate` + FROM `Tags` AS `t1` + WHERE `t1`.`GearNickName` = `g`.`FullName` + ORDER BY `t1`.`Id`) IS NULL, #0100-01-01#, ( + SELECT TOP 1 `t1`.`IssueDate` + FROM `Tags` AS `t1` + WHERE `t1`.`GearNickName` = `g`.`FullName` + ORDER BY `t1`.`Id`)) AS `invalidTagIssueDate` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`IssueDate` > IIF(( + SELECT TOP 1 `t0`.`IssueDate` + FROM `Tags` AS `t0` + WHERE `t0`.`GearNickName` = `g`.`FullName` + ORDER BY `t0`.`Id`) IS NULL, #0100-01-01#, ( + SELECT TOP 1 `t0`.`IssueDate` + FROM `Tags` AS `t0` + WHERE `t0`.`GearNickName` = `g`.`FullName` + ORDER BY `t0`.`Id`)) +"""); + } + + public override async Task Project_shadow_properties(bool async) + { + await base.Project_shadow_properties(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`AssignedCityName` +FROM `Gears` AS `g` +"""); + } + + public override async Task Project_discriminator_columns(bool async) + { + await base.Project_discriminator_columns(async); + + AssertSql( + """ + SELECT `g`.`Nickname`, `g`.`Discriminator` + FROM `Gears` AS `g` + """, + // + """ + SELECT `g`.`Nickname`, `g`.`Discriminator` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` = 'Officer' + """, + // + """ + SELECT `f`.`Id`, `f`.`Discriminator` + FROM `Factions` AS `f` + """, + // + """ + SELECT `f`.`Id`, `f`.`Discriminator` + FROM `Factions` AS `f` + """, + // + """ + SELECT `l`.`Name`, `l`.`Discriminator` + FROM `LocustLeaders` AS `l` + """, + // + """ + SELECT `l`.`Name`, `l`.`Discriminator` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' + """); + } + + public override async Task Composite_key_entity_equal(bool async) + { + await base.Composite_key_entity_equal(async); + + AssertSql( + """ + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g`, + `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`Nickname` AND `g`.`SquadId` = `g0`.`SquadId` + """); + } + + public override async Task Composite_key_entity_not_equal(bool async) + { + await base.Composite_key_entity_not_equal(async); + + AssertSql( + """ + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM `Gears` AS `g`, + `Gears` AS `g0` + WHERE `g`.`Nickname` <> `g0`.`Nickname` OR `g`.`SquadId` <> `g0`.`SquadId` + """); + } + + public override async Task Composite_key_entity_equal_null(bool async) + { + await base.Composite_key_entity_equal_null(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` +WHERE `l`.`Discriminator` = 'LocustCommander' AND (`g`.`Nickname` IS NULL OR `g`.`SquadId` IS NULL) +"""); + } + + public override async Task Composite_key_entity_not_equal_null(bool async) + { + await base.Composite_key_entity_not_equal_null(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` +FROM `LocustLeaders` AS `l` +LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` +WHERE `l`.`Discriminator` = 'LocustCommander' AND `g`.`Nickname` IS NOT NULL AND `g`.`SquadId` IS NOT NULL +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_comparison(bool async) + { + await base.Projecting_property_converted_to_nullable_with_comparison(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL) = 1 +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_addition(bool async) + { + await base.Projecting_property_converted_to_nullable_with_addition(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE (IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL) + 1) = 2 +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_addition_and_final_projection(bool async) + { + await base.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async); + + AssertSql( +""" +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL) + 1 AS `Value` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL) IS NOT NULL +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_conditional(bool async) + { + await base.Projecting_property_converted_to_nullable_with_conditional(async); + + AssertSql( + """ +SELECT IIF(`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL, IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL), -1) +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_function_call(bool async) + { + await base.Projecting_property_converted_to_nullable_with_function_call(async); + + AssertSql( + """ +SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL), 0 + 1, 3) +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_function_call2(bool async) + { + await base.Projecting_property_converted_to_nullable_with_function_call2(async); + + AssertSql( + """ +SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL)) AS `Function` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL) IS NOT NULL +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_element_init(bool async) + { + await base.Projecting_property_converted_to_nullable_into_element_init(async); + + AssertSql( + """ +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL) + 1 +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL) IS NOT NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_member_assignment(bool async) + { + await base.Projecting_property_converted_to_nullable_into_member_assignment(async); + + AssertSql( + """ +SELECT IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL) AS `Id` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL) IS NOT NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_new_array(bool async) + { + await base.Projecting_property_converted_to_nullable_into_new_array(async); + + AssertSql( + """ +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL) + 1 +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL) IS NOT NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_unary(bool async) + { + await base.Projecting_property_converted_to_nullable_into_unary(async); + + AssertSql( + """ +SELECT `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL) IS NOT NULL AND NOT (IIF(`t`.`GearNickName` IS NOT NULL, `g`.`HasSoulPatch`, NULL)) +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_member_access(bool async) + { + await base.Projecting_property_converted_to_nullable_into_member_access(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE DATEPART('m', `t`.`IssueDate`) <> 5 +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_and_use_it_in_order_by(bool async) + { + await base.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `g`.`Nickname`, NULL) IS NOT NULL +ORDER BY IIF(`t`.`GearNickName` IS NOT NULL, `g`.`SquadId`, NULL), `t`.`Note` +"""); + } + + public override async Task Correlated_collection_with_distinct_projecting_identifier_column(bool async) + { + await base.Correlated_collection_with_distinct_projecting_identifier_column(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`Name` +FROM `Gears` AS `g` +OUTER APPLY ( + SELECT DISTINCT `w`.`Id`, `w`.`Name` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` +) AS `t` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(bool async) + { + await base.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`Name`, `w0`.`OwnerFullName` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT DISTINCT `w`.`Id`, `w`.`Name`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_distinct_projecting_identifier_column_composite_key(bool async) + { + await base.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async); + + AssertSql( + """ +SELECT `s`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`HasSoulPatch` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `g0` ON `s`.`Id` = `g0`.`SquadId` +ORDER BY `s`.`Id`, `g0`.`Nickname` +"""); + } + + public override async Task Correlated_collection_with_distinct_not_projecting_identifier_column(bool async) + { + await base.Correlated_collection_with_distinct_not_projecting_identifier_column(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Name`, `t`.`IsAutomatic` +FROM `Gears` AS `g` +OUTER APPLY ( + SELECT DISTINCT `w`.`Name`, `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` +) AS `t` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Name` +"""); + } + + public override async Task + Correlated_collection_with_groupby_not_projecting_identifier_column_but_only_grouping_key_in_final_projection(bool async) + { + await base.Correlated_collection_with_groupby_not_projecting_identifier_column_but_only_grouping_key_in_final_projection(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Key` +FROM `Gears` AS `g` +OUTER APPLY ( + SELECT `w`.`IsAutomatic` AS `Key` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + GROUP BY `w`.`IsAutomatic` +) AS `t` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task + Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection(bool async) + { + await base.Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Key`, `t`.`Count` +FROM `Gears` AS `g` +OUTER APPLY ( + SELECT `w`.`IsAutomatic` AS `Key`, COUNT(*) AS `Count` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + GROUP BY `w`.`IsAutomatic` +) AS `t` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task + Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection_multiple_grouping_keys( + bool async) + { + await base + .Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection_multiple_grouping_keys( + async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`Count` +FROM `Gears` AS `g` +OUTER APPLY ( + SELECT `w`.`IsAutomatic`, `w`.`Name`, COUNT(*) AS `Count` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + GROUP BY `w`.`IsAutomatic`, `w`.`Name` +) AS `t` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`IsAutomatic` +"""); + } + + public override async Task + Correlated_collection_with_groupby_with_complex_grouping_key_not_projecting_identifier_column_with_group_aggregate_in_final_projection( + bool async) + { + await base + .Correlated_collection_with_groupby_with_complex_grouping_key_not_projecting_identifier_column_with_group_aggregate_in_final_projection( + async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `t0`.`Key`, `t0`.`Count` +FROM `Gears` AS `g` +OUTER APPLY ( + SELECT `t`.`Key`, COUNT(*) AS `Count` + FROM ( + SELECT CAST(LEN(`w`.`Name`) AS int) AS `Key` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `t` + GROUP BY `t`.`Key` +) AS `t0` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collection_via_SelectMany_with_Distinct_missing_indentifying_columns_in_projection(bool async) + { + await base.Correlated_collection_via_SelectMany_with_Distinct_missing_indentifying_columns_in_projection(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`HasSoulPatch` +FROM `Gears` AS `g` +OUTER APPLY ( + SELECT DISTINCT `g1`.`HasSoulPatch` + FROM `Weapons` AS `w` + LEFT JOIN `Gears` AS `g0` ON `w`.`OwnerFullName` = `g0`.`FullName` + LEFT JOIN `Cities` AS `c` ON `g0`.`AssignedCityName` = `c`.`Name` + INNER JOIN `Gears` AS `g1` ON `c`.`Name` = `g1`.`CityOfBirthName` + WHERE `g`.`FullName` = `w`.`OwnerFullName` +) AS `t` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collection_after_distinct_3_levels(bool async) + { + await base.Correlated_collection_after_distinct_3_levels(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`Name`, `t1`.`Nickname`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`Id`, `t1`.`Name`, `t1`.`Nickname0`, `t1`.`FullName0`, `t1`.`HasSoulPatch0`, `t1`.`Id0` +FROM ( + SELECT DISTINCT `s`.`Id`, `s`.`Name` + FROM `Squads` AS `s` +) AS `t` +OUTER APPLY ( + SELECT `t0`.`Nickname`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t2`.`Id`, `t2`.`Name`, `t2`.`Nickname` AS `Nickname0`, `t2`.`FullName` AS `FullName0`, `t2`.`HasSoulPatch` AS `HasSoulPatch0`, `t2`.`Id0` + FROM ( + SELECT DISTINCT `g`.`Nickname`, `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + WHERE `g`.`SquadId` = `t`.`Id` + ) AS `t0` + OUTER APPLY ( + SELECT `t`.`Id`, `t`.`Name`, `t0`.`Nickname`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `w`.`Id` AS `Id0` + FROM `Weapons` AS `w` + WHERE `w`.`OwnerFullName` = `t0`.`FullName` + ) AS `t2` +) AS `t1` +ORDER BY `t`.`Id`, `t1`.`Nickname`, `t1`.`FullName`, `t1`.`HasSoulPatch` +"""); + } + + public override async Task Correlated_collection_after_distinct_3_levels_without_original_identifiers(bool async) + { + await base.Correlated_collection_after_distinct_3_levels_without_original_identifiers(async); + + AssertSql(); + } + + public override async Task Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(bool async) + { + await base.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`Discriminator` = 'Officer' AS `IsOfficer` +FROM `Gears` AS `g` +"""); + } + + public override async Task Comparison_with_value_converted_subclass(bool async) + { + await base.Comparison_with_value_converted_subclass(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated` +FROM `Factions` AS `f` +WHERE `f`.`ServerAddress` = '127.0.0.1' +"""); + } + + public override async Task Project_equality_with_value_converted_property(bool async) + { + await base.Project_equality_with_value_converted_property(async); + + AssertSql( + """ +SELECT `m`.`Difficulty` = 'Unknown' +FROM `Missions` AS `m` +"""); + } + + public override async Task Contains_on_readonly_enumerable(bool async) + { + await base.Contains_on_readonly_enumerable(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` = 1 +"""); + } + + public override async Task Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(bool async) + { + await base.Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t`.`Id` IS NULL AS `IsNull`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `c`.`Name` IS NULL AS `IsNull`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s`.`Id` IS NULL AS `IsNull` +FROM ((`Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` +"""); + } + + public override async Task Project_navigation_defined_on_derived_from_entity_with_inheritance_using_soft_cast(bool async) + { + await base.Project_navigation_defined_on_derived_from_entity_with_inheritance_using_soft_cast(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g`.`Nickname` IS NULL OR `g`.`SquadId` IS NULL AS `IsNull`, `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated`, `f`.`Id` IS NULL AS `IsNull`, `l0`.`Id`, `l0`.`IsOperational`, `l0`.`Name`, `l0`.`Id` IS NULL AS `IsNull` +FROM ((`LocustLeaders` AS `l` +LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId`) +LEFT JOIN `Factions` AS `f` ON `l`.`Name` = `f`.`CommanderName`) +LEFT JOIN `LocustHighCommands` AS `l0` ON `l`.`HighCommandId` = `l0`.`Id` +"""); + } + + public override async Task Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(bool async) + { + await base.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`Discriminator`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`HasSoulPatch0`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP @p1 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`HasSoulPatch0` + FROM ( + SELECT TOP @p + @p1 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g1`.`HasSoulPatch` AS `HasSoulPatch0` + FROM `Gears` AS `g` + LEFT JOIN ( + SELECT MIN(IIF(LEN(`g0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g0`.`Nickname`)))) AS `c`, `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` <> 'Dom' + GROUP BY `g0`.`HasSoulPatch` + ) AS `g1` ON IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = `g1`.`c` + WHERE `g1`.`c` IS NOT NULL + ORDER BY `g`.`Nickname` + ) AS `s` + ORDER BY `s`.`Nickname` DESC +) AS `s0` +LEFT JOIN `Weapons` AS `w` ON `s0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s0`.`Nickname`, `s0`.`SquadId`, NOT (`s0`.`HasSoulPatch0`) +"""); + } + + public override async Task Where_bool_column_and_Contains(bool async) + { + await base.Where_bool_column_and_Contains(async); + AssertSql( + """ +@values1='False' +@values2='True' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND `g`.`HasSoulPatch` IN (@values1, @values2) +"""); + } + + public override async Task Where_bool_column_or_Contains(bool async) + { + await base.Where_bool_column_or_Contains(async); + AssertSql( + """ +@values1='False' +@values2='True' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` AND `g`.`HasSoulPatch` IN (@values1, @values2) +"""); + } + + public override async Task Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(bool async) + { + await base.Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(async); + + AssertSql( + """ +@place='Ephyra's location' (Size = 255) +@place0='Ephyra's location' (Size = 100) + +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Nation` = @place OR `c`.`Location` = @place0 OR `c`.`Location` = @place0 +"""); + } + + public override async Task Enum_matching_take_value_gets_different_type_mapping(bool async) + { + await base.Enum_matching_take_value_gets_different_type_mapping(async); + + AssertSql( + """ +@p='1' +@value='1' + +SELECT TOP @p `g`.`Rank` BAND @value +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Include_after_Select_throws(bool async) + { + await base.Include_after_Select_throws(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Factions` AS `f` +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name` +"""); + } + + public override async Task GroupBy_Select_sum(bool async) + { + await base.GroupBy_Select_sum(async); + + AssertSql( + """ +SELECT IIF(SUM(`m`.`Rating`) IS NULL, 0.0, SUM(`m`.`Rating`)) +FROM `Missions` AS `m` +GROUP BY `m`.`CodeName` +"""); + } + + public override async Task String_concat_nullable_expressions_are_coalesced(bool async) + { + await base.String_concat_nullable_expressions_are_coalesced(async); + + AssertSql( + """ +SELECT ((`g`.`FullName` & '') & IIF(`g`.`LeaderNickname` IS NULL, '', `g`.`LeaderNickname`)) & '' +FROM `Gears` AS `g` +"""); + } + + public override async Task Cast_to_derived_type_causes_client_eval(bool async) + { + await base.Cast_to_derived_type_causes_client_eval(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +"""); + } + + public override async Task Trying_to_access_unmapped_property_in_projection(bool async) + { + await base.Trying_to_access_unmapped_property_in_projection(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +"""); + } + + public override async Task Basic_query_gears(bool async) + { + await base.Basic_query_gears(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +"""); + } + + public override async Task Include_on_derived_entity_with_cast(bool async) + { + await base.Include_on_derived_entity_with_cast(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Factions` AS `f` +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name` +ORDER BY `f`.`Id` +"""); + } + + public override async Task Where_equals_method_on_nullable_with_object_overload(bool async) + { + await base.Where_equals_method_on_nullable_with_object_overload(async); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE `m`.`Rating` IS NULL +"""); + } + + public override async Task Cast_to_derived_followed_by_multiple_includes(bool async) + { + await base.Cast_to_derived_followed_by_multiple_includes(async); + + AssertSql( + """ + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM (`LocustLeaders` AS `l` + LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId`) + LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` + WHERE `l`.`Name` LIKE '%Queen%' + ORDER BY `l`.`Name`, `g`.`Nickname`, `g`.`SquadId` + """); + } + + public override async Task Sum_with_no_data_nullable_double(bool async) + { + await base.Sum_with_no_data_nullable_double(async); + AssertSql( + """ +SELECT IIF(SUM(`m`.`Rating`) IS NULL, 0.0, SUM(`m`.`Rating`)) +FROM `Missions` AS `m` +WHERE `m`.`CodeName` = 'Operation Foobar' +"""); + } + + public override async Task Include_after_SelectMany_throws(bool async) + { + await base.Include_after_SelectMany_throws(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM ((`Factions` AS `f` +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) +LEFT JOIN `Gears` AS `g` ON `c`.`Name` = `g`.`CityOfBirthName`) +LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` +WHERE `c`.`Name` IS NOT NULL AND `g`.`CityOfBirthName` IS NOT NULL AND `g`.`SquadId` IS NOT NULL AND `s`.`Id` IS NOT NULL +"""); + } + + public override async Task Project_derivied_entity_with_convert_to_parent(bool async) + { + await base.Project_derivied_entity_with_convert_to_parent(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`DeputyCommanderName`, `f`.`Eradicated` +FROM `Factions` AS `f` +"""); + } + + public override async Task Project_entity_and_collection_element(bool async) + { + await base.Project_entity_and_collection_element(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` +FROM `Gears` AS `g` +INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +LEFT JOIN ( + SELECT `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + FROM ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, ROW_NUMBER() OVER(PARTITION BY `w0`.`OwnerFullName` ORDER BY `w0`.`Id`) AS `row` + FROM `Weapons` AS `w0` + ) AS `t` + WHERE `t`.`row` <= 1 +) AS `t0` ON `g`.`FullName` = `t0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Id` +"""); + } + + public override async Task Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions( + bool async) + { + await base.Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions(async); + + AssertSql(); + } + + public override async Task Client_eval_followed_by_aggregate_operation(bool async) + { + await base.Client_eval_followed_by_aggregate_operation(async); + + AssertSql(); + } + + public override async Task Client_member_and_unsupported_string_Equals_in_the_same_query(bool async) + { + await base.Client_member_and_unsupported_string_Equals_in_the_same_query(async); + + AssertSql(); + } + + public override async Task Client_side_equality_with_parameter_works_with_optional_navigations(bool async) + { + await base.Client_side_equality_with_parameter_works_with_optional_navigations(async); + + AssertSql(); + } + + public override async Task Correlated_collection_order_by_constant_null_of_non_mapped_type(bool async) + { + await base.Correlated_collection_order_by_constant_null_of_non_mapped_type(async); + + AssertSql(); + } + + public override async Task GetValueOrDefault_on_DateTimeOffset(bool async) + { + await base.GetValueOrDefault_on_DateTimeOffset(async); + + AssertSql(); + } + + public override async Task Where_coalesce_with_anonymous_types(bool async) + { + await base.Where_coalesce_with_anonymous_types(async); + + AssertSql(); + } + + public override async Task Projecting_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(bool async) + { + await base.Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Correlated_collection_with_distinct_3_levels(bool async) + { + await base.Correlated_collection_with_distinct_3_levels(async); + + AssertSql(); + } + + public override async Task Checked_context_throws_on_client_evaluation(bool async) + { + await base.Checked_context_throws_on_client_evaluation(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_throws_informative_error(bool async) + { + await base.Trying_to_access_unmapped_property_throws_informative_error(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_inside_aggregate(bool async) + { + await base.Trying_to_access_unmapped_property_inside_aggregate(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_inside_subquery(bool async) + { + await base.Trying_to_access_unmapped_property_inside_subquery(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_inside_join_key_selector(bool async) + { + await base.Trying_to_access_unmapped_property_inside_join_key_selector(async); + + AssertSql(); + } + + public override async Task Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(bool async) + { + await base.Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(async); + + AssertSql(); + } + + public override async Task Include_after_select_with_cast_throws(bool async) + { + await base.Include_after_select_with_cast_throws(async); + + AssertSql(); + } + + public override async Task Include_after_select_with_entity_projection_throws(bool async) + { + await base.Include_after_select_with_entity_projection_throws(async); + + AssertSql(); + } + + public override async Task Include_after_select_anonymous_projection_throws(bool async) + { + await base.Include_after_select_anonymous_projection_throws(async); + + AssertSql(); + } + + public override async Task Group_by_with_aggregate_max_on_entity_type(bool async) + { + await base.Group_by_with_aggregate_max_on_entity_type(async); + + AssertSql(); + } + + public override async Task Include_collection_and_invalid_navigation_using_string_throws(bool async) + { + await base.Include_collection_and_invalid_navigation_using_string_throws(async); + + AssertSql(); + } + + public override async Task Include_with_concat(bool async) + { + await base.Include_with_concat(async); + + AssertSql(); + } + + public override async Task Join_with_complex_key_selector(bool async) + { + await base.Join_with_complex_key_selector(async); + + AssertSql( +""" +SELECT `s`.`Id`, `t0`.`Id` AS `TagId` +FROM `Squads` AS `s`, +( + SELECT `t`.`Id` + FROM `Tags` AS `t` + WHERE `t`.`Note` = 'Marcus'' Tag' +) AS `t0` +"""); + } + + public override async Task Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(bool async) + { + await base.Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(async); + + AssertSql(); + } + + public override async Task Select_correlated_filtered_collection_returning_queryable_throws(bool async) + { + await base.Select_correlated_filtered_collection_returning_queryable_throws(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_predicate(bool async) + { + await base.Client_method_on_collection_navigation_in_predicate(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(bool async) + { + await base.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_order_by(bool async) + { + await base.Client_method_on_collection_navigation_in_order_by(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_additional_from_clause(bool async) + { + await base.Client_method_on_collection_navigation_in_additional_from_clause(async); + + AssertSql(); + } + + public override async Task Include_multiple_one_to_one_and_one_to_many_self_reference(bool async) + { + await base.Include_multiple_one_to_one_and_one_to_many_self_reference(async); + + AssertSql(); + } + + public override async Task Include_multiple_one_to_one_and_one_to_one_and_one_to_many(bool async) + { + await base.Include_multiple_one_to_one_and_one_to_one_and_one_to_many(async); + + AssertSql(); + } + + public override async Task Include_multiple_include_then_include(bool async) + { + await base.Include_multiple_include_then_include(async); + + AssertSql(); + } + + public override async Task Select_Where_Navigation_Client(bool async) + { + await base.Select_Where_Navigation_Client(async); + + AssertSql(); + } + + public override async Task Where_subquery_equality_to_null_with_composite_key(bool async) + { + await base.Where_subquery_equality_to_null_with_composite_key(async); + + AssertSql( +""" +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId`) +"""); + } + + public override async Task Where_subquery_equality_to_null_with_composite_key_should_match_nulls(bool async) + { + await base.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`FullName` = 'Anthony Carmine') +"""); + } + + public override async Task Where_subquery_equality_to_null_without_composite_key(bool async) + { + await base.Where_subquery_equality_to_null_without_composite_key(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) +"""); + } + + public override async Task Where_subquery_equality_to_null_without_composite_key_should_match_null(bool async) + { + await base.Where_subquery_equality_to_null_without_composite_key_should_match_null(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'Hammer of Dawn') +"""); + } + + public override async Task Include_reference_on_derived_type_using_EF_Property(bool async) + { + await base.Include_reference_on_derived_type_using_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `LocustLeaders` AS `l` +LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` +"""); + } + + public override async Task Include_collection_on_derived_type_using_EF_Property(bool async) + { + await base.Include_collection_on_derived_type_using_EF_Property(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task EF_Property_based_Include_navigation_on_derived_type(bool async) + { + await base.EF_Property_based_Include_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +FROM `Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +"""); + } + + public override async Task ElementAt_basic_with_OrderBy(bool async) + { + await base.ElementAt_basic_with_OrderBy(async); + + AssertSql( + """ +@p='0' + +SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` +FROM ( + SELECT TOP 1 `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM ( + SELECT TOP @p + 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + ORDER BY `g`.`FullName` + ) AS `g0` + ORDER BY `g0`.`FullName` DESC +) AS `g1` +ORDER BY `g1`.`FullName` +"""); + } + + public override async Task ElementAtOrDefault_basic_with_OrderBy(bool async) + { + await base.ElementAtOrDefault_basic_with_OrderBy(async); + + AssertSql( + """ +@p='1' + +SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` +FROM ( + SELECT TOP 1 `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM ( + SELECT TOP @p + 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + ORDER BY `g`.`FullName` + ) AS `g0` + ORDER BY `g0`.`FullName` DESC +) AS `g1` +ORDER BY `g1`.`FullName` +"""); + } + + public override async Task ElementAtOrDefault_basic_with_OrderBy_parameter(bool async) + { + await base.ElementAtOrDefault_basic_with_OrderBy_parameter(async); + + AssertSql( + """ +@p='2' + +SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` +FROM ( + SELECT TOP 1 `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + FROM ( + SELECT TOP @p + 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + ORDER BY `g`.`FullName` + ) AS `g0` + ORDER BY `g0`.`FullName` DESC +) AS `g1` +ORDER BY `g1`.`FullName` +"""); + } + + public override async Task Where_subquery_with_ElementAtOrDefault_equality_to_null_with_composite_key(bool async) + { + await base.Where_subquery_with_ElementAtOrDefault_equality_to_null_with_composite_key(async); + + AssertSql( + """ +SELECT [s].[Id], [s].[Banner], [s].[Banner5], [s].[InternalNumber], [s].[Name] +FROM [Squads] AS [s] +WHERE NOT EXISTS ( + SELECT 1 + FROM [Gears] AS [g] + WHERE [s].[Id] = [g].[SquadId] + ORDER BY [g].[Nickname] + OFFSET 2 ROWS) +"""); + } + + public override async Task Where_subquery_with_ElementAt_using_column_as_index(bool async) + { + await base.Where_subquery_with_ElementAt_using_column_as_index(async); + + AssertSql( + """ +SELECT [s].[Id], [s].[Banner], [s].[Banner5], [s].[InternalNumber], [s].[Name] +FROM [Squads] AS [s] +WHERE ( + SELECT [g].[Nickname] + FROM [Gears] AS [g] + WHERE [s].[Id] = [g].[SquadId] + ORDER BY [g].[Nickname] + OFFSET [s].[Id] ROWS FETCH NEXT 1 ROWS ONLY) = N'Cole Train' +"""); + } + + public override async Task Using_indexer_on_byte_array_and_string_in_projection(bool async) + { + await base.Using_indexer_on_byte_array_and_string_in_projection(async); + + AssertSql( + """ +SELECT `s`.`Id`, ASCB(MIDB(`s`.`Banner`, 0 + 1, 1)), `s`.`Name` +FROM `Squads` AS `s` +"""); + } + + public override async Task Set_operator_with_navigation_in_projection_groupby_aggregate(bool async) + { + await base.Set_operator_with_navigation_in_projection_groupby_aggregate(async); + + AssertSql( + """ +SELECT `s`.`Name`, ( + SELECT IIF(SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`)))) IS NULL, 0, SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`))))) + FROM (`Gears` AS `g2` + INNER JOIN `Squads` AS `s0` ON `g2`.`SquadId` = `s0`.`Id`) + INNER JOIN `Cities` AS `c` ON `g2`.`CityOfBirthName` = `c`.`Name` + WHERE 'Marcus' IN ( + SELECT `u0`.`Nickname` + FROM ( + SELECT `g3`.`Nickname` + FROM `Gears` AS `g3` + UNION ALL + SELECT `g4`.`Nickname` + FROM `Gears` AS `g4` + ) AS `u0` + ) AND (`s`.`Name` = `s0`.`Name` OR (`s`.`Name` IS NULL AND `s0`.`Name` IS NULL))) AS `SumOfLengths` +FROM `Gears` AS `g` +INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` +WHERE 'Marcus' IN ( + SELECT `u`.`Nickname` + FROM ( + SELECT `g0`.`Nickname` + FROM `Gears` AS `g0` + UNION ALL + SELECT `g1`.`Nickname` + FROM `Gears` AS `g1` + ) AS `u` +) +GROUP BY `s`.`Name` +"""); + } + + public override async Task Nav_expansion_inside_Contains_argument(bool async) + { + await base.Nav_expansion_inside_Contains_argument(async); + + AssertSql( + """ +@numbers1='1' +@numbers2='-1' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE IIF(EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`), 1, 0) IN (@numbers1, @numbers2) +"""); + } + + public override async Task Nav_expansion_with_member_pushdown_inside_Contains_argument(bool async) + { + await base.Nav_expansion_with_member_pushdown_inside_Contains_argument(async); + + AssertSql( + """ +@weapons1='Marcus' Lancer' (Size = 255) +@weapons2='Dom's Gnasher' (Size = 255) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IN (@weapons1, @weapons2) +"""); + } + + public override async Task Subquery_inside_Take_argument(bool async) + { + await base.Subquery_inside_Take_argument(async); + + AssertSql( + """ +@__numbers_0='[0,1,2]' (Size = 4000) + +SELECT [g].[Nickname], [g].[SquadId], [t0].[Id], [t0].[AmmunitionType], [t0].[IsAutomatic], [t0].[Name], [t0].[OwnerFullName], [t0].[SynergyWithId] +FROM [Gears] AS [g] +LEFT JOIN ( + SELECT [t].[Id], [t].[AmmunitionType], [t].[IsAutomatic], [t].[Name], [t].[OwnerFullName], [t].[SynergyWithId] + FROM ( + SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId], ROW_NUMBER() OVER(PARTITION BY [w].[OwnerFullName] ORDER BY [w].[Id]) AS [row] + FROM [Weapons] AS [w] + ) AS [t] + WHERE [t].[row] <= COALESCE(( + SELECT [n].[value] + FROM OPENJSON(@__numbers_0) WITH ([value] int '$') AS [n] + ORDER BY [n].[value] + OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY), 0) +) AS [t0] ON [g].[FullName] = [t0].[OwnerFullName] +ORDER BY [g].[Nickname], [g].[SquadId], [t0].[OwnerFullName], [t0].[Id] +"""); + } + + public override async Task Nav_expansion_inside_Skip_correlated_to_source(bool async) + { + await base.Nav_expansion_inside_Skip_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Nav_expansion_inside_Take_correlated_to_source(bool async) + { + await base.Nav_expansion_inside_Take_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Nav_expansion_with_member_pushdown_inside_Take_correlated_to_source(bool async) + { + await base.Nav_expansion_with_member_pushdown_inside_Take_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Nav_expansion_inside_ElementAt_correlated_to_source(bool async) + { + await base.Nav_expansion_inside_ElementAt_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Include_one_to_many_on_composite_key_then_orderby_key_properties(bool async) + { + await base.Include_one_to_many_on_composite_key_then_orderby_key_properties(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`SquadId`, `g`.`Nickname` +"""); + } + + public override async Task Find_underlying_property_after_GroupJoin_DefaultIfEmpty(bool async) + { + await base.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async); + + AssertSql( + """ +SELECT `g`.`FullName`, IIF(`l0`.`ThreatLevel` IS NULL, NULL, CLNG(`l0`.`ThreatLevel`)) AS `ThreatLevel` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `l`.`ThreatLevel`, `l`.`DefeatedByNickname` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `g`.`Nickname` = `l0`.`DefeatedByNickname` +"""); + } + + public override async Task Join_include_coalesce_simple(bool async) + { + await base.Join_include_coalesce_simple(async); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`Nickname` = 'Marcus' +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +""", + // + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +""", + // + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Join_include_coalesce_nested(bool async) + { + await base.Join_include_coalesce_nested(async); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`Nickname` = 'Marcus' +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +""", + // + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId` +FROM (((`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `g0`.`FullName` = `w1`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w0`.`Id` +"""); + } + + public override async Task Join_include_conditional(bool async) + { + await base.Join_include_conditional(async); + + AssertSql( + """ +SELECT `g0`.`Nickname` IS NOT NULL AND `g0`.`SquadId` IS NOT NULL, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`Nickname` = 'Marcus' +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +"""); + } + + public override async Task Derived_reference_is_skipped_when_base_type(bool async) + { + await base.Derived_reference_is_skipped_when_base_type(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `l0`.`Id`, `l0`.`IsOperational`, `l0`.`Name` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustHighCommands` AS `l0` ON `l`.`HighCommandId` = `l0`.`Id` +"""); + } + + public override async Task Nested_contains_with_enum(bool async) + { + await base.Nested_contains_with_enum(async); + + AssertSql( + """ +@ranks1='1' +@key='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@keys1='0a47bcb7-a1cb-4345-8944-c58f82d6aac7' +@keys2='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE IIF(`g`.`Rank` = @ranks1, @key, @key) IN (@keys1, @keys2) +""", + // + """ +@ammoTypes1='1' +@key='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@keys1='0a47bcb7-a1cb-4345-8944-c58f82d6aac7' +@keys2='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = @ammoTypes1, @key, @key) IN (@keys1, @keys2) +"""); + } + + public override async Task Non_string_concat_uses_appropriate_type_mapping(bool async) + { + await base.Non_string_concat_uses_appropriate_type_mapping(async); + + AssertSql( + """ +SELECT `m`.`Duration` +FROM `Missions` AS `m` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/IncludeOneToOneLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/IncludeOneToOneLibRedTest.cs new file mode 100644 index 00000000..1f04feb4 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/IncludeOneToOneLibRedTest.cs @@ -0,0 +1,75 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class IncludeOneToOneLibRedTest : IncludeOneToOneTestBase + { + public IncludeOneToOneLibRedTest(OneToOneQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + } + + public override void Include_person() + { + base.Include_person(); + + AssertSql( + $""" + SELECT `a`.`Id`, `a`.`City`, `a`.`Street`, `p`.`Id`, `p`.`Name` + FROM `Address` AS `a` + INNER JOIN `Person` AS `p` ON `a`.`Id` = `p`.`Id` + """); + } + + public override void Include_person_shadow() + { + base.Include_person_shadow(); + + AssertSql( + $""" + SELECT `a`.`Id`, `a`.`City`, `a`.`PersonId`, `a`.`Street`, `p`.`Id`, `p`.`Name` + FROM `Address2` AS `a` + INNER JOIN `Person2` AS `p` ON `a`.`PersonId` = `p`.`Id` + """); + } + + public override void Include_address() + { + base.Include_address(); + + AssertSql( + $""" + SELECT `p`.`Id`, `p`.`Name`, `a`.`Id`, `a`.`City`, `a`.`Street` + FROM `Person` AS `p` + LEFT JOIN `Address` AS `a` ON `p`.`Id` = `a`.`Id` + """); + } + + public override void Include_address_shadow() + { + base.Include_address_shadow(); + + AssertSql( + $""" + SELECT `p`.`Id`, `p`.`Name`, `a`.`Id`, `a`.`City`, `a`.`PersonId`, `a`.`Street` + FROM `Person2` AS `p` + LEFT JOIN `Address2` AS `a` ON `p`.`Id` = `a`.`PersonId` + """); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class OneToOneQueryLibRedFixture : OneToOneQueryFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/InheritanceRelationshipsQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/InheritanceRelationshipsQueryLibRedFixture.cs new file mode 100644 index 00000000..59eacc97 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/InheritanceRelationshipsQueryLibRedFixture.cs @@ -0,0 +1,13 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class InheritanceRelationshipsQueryLibRedFixture : InheritanceRelationshipsQueryRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/InheritanceRelationshipsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/InheritanceRelationshipsQueryLibRedTest.cs new file mode 100644 index 00000000..0d8e6692 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/InheritanceRelationshipsQueryLibRedTest.cs @@ -0,0 +1,1592 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class InheritanceRelationshipsQueryLibRedTest + : InheritanceRelationshipsQueryRelationalTestBase + { + public InheritanceRelationshipsQueryLibRedTest( + InheritanceRelationshipsQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Include_reference_with_inheritance(bool async) + { + await base.Include_reference_with_inheritance(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_reverse(bool async) + { + await base.Include_reference_with_inheritance_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM ((`BaseReferencesOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_self_reference_with_inheritance(bool async) + { + await base.Include_self_reference_with_inheritance(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b4`.`BaseInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b5`.`DerivedInheritanceRelationshipEntityId`, `b5`.`Id`, `b5`.`Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` +FROM ((((`BaseEntities` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +) AS `b1` ON `b`.`Id` = `b1`.`BaseId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b4` ON `b1`.`Id` = `b4`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b5` ON `b1`.`Id` = `b5`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b4`.`BaseInheritanceRelationshipEntityId`, `b4`.`Id`, `b5`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_self_reference_with_inheritance_reverse(bool async) + { + await base.Include_self_reference_with_inheritance_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM ((((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b4`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_with_filter(bool async) + { + await base.Include_reference_with_inheritance_with_filter(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_with_filter_reverse(bool async) + { + await base.Include_reference_with_inheritance_with_filter_reverse(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM ((`BaseReferencesOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance(bool async) + { + await base.Include_reference_without_inheritance(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `ReferencesOnBase` AS `r` ON `b`.`Id` = `r`.`ParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_reverse(bool async) + { + await base.Include_reference_without_inheritance_reverse(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM ((`ReferencesOnBase` AS `r` +LEFT JOIN `BaseEntities` AS `b` ON `r`.`ParentId` = `b`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_with_filter(bool async) + { + await base.Include_reference_without_inheritance_with_filter(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `ReferencesOnBase` AS `r` ON `b`.`Id` = `r`.`ParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_with_filter_reverse(bool async) + { + await base.Include_reference_without_inheritance_with_filter_reverse(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM ((`ReferencesOnBase` AS `r` +LEFT JOIN `BaseEntities` AS `b` ON `r`.`ParentId` = `b`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +WHERE `r`.`Name` <> 'Bar' OR `r`.`Name` IS NULL +ORDER BY `r`.`Id`, `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance(bool async) + { + await base.Include_collection_with_inheritance(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseCollectionsOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_reverse(bool async) + { + await base.Include_collection_with_inheritance_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedProperty`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM ((`BaseCollectionsOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter(bool async) + { + await base.Include_collection_with_inheritance_with_filter(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseCollectionsOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseParentId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter_reverse(bool async) + { + await base.Include_collection_with_inheritance_with_filter_reverse(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedProperty`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM ((`BaseCollectionsOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_without_inheritance(bool async) + { + await base.Include_collection_without_inheritance(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_reverse(bool async) + { + await base.Include_collection_without_inheritance_reverse(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM ((`CollectionsOnBase` AS `c` +LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `c`.`Id`, `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter(bool async) + { + await base.Include_collection_without_inheritance_with_filter(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter_reverse(bool async) + { + await base.Include_collection_without_inheritance_with_filter_reverse(async); + + AssertSql( +""" +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM ((`CollectionsOnBase` AS `c` +LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL +ORDER BY `c`.`Id`, `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived1(bool async) + { + await base.Include_reference_with_inheritance_on_derived1(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived2(bool async) + { + await base.Include_reference_with_inheritance_on_derived2(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedInheritanceRelationshipEntityId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnDerived` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived4(bool async) + { + await base.Include_reference_with_inheritance_on_derived4(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b1`.`BaseParentId`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`DerivedInheritanceRelationshipEntityId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseReferencesOnDerived` AS `b0` + WHERE `b0`.`Discriminator` = 'DerivedReferenceOnDerived' +) AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_reverse(bool async) + { + await base.Include_reference_with_inheritance_on_derived_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` +FROM ((`BaseReferencesOnDerived` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +) AS `b1` ON `b`.`BaseParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b1`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b1`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter1(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter1(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' AND (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter2(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter2(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedInheritanceRelationshipEntityId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnDerived` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' AND (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter4(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter4(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b1`.`BaseParentId`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`DerivedInheritanceRelationshipEntityId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseReferencesOnDerived` AS `b0` + WHERE `b0`.`Discriminator` = 'DerivedReferenceOnDerived' +) AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' AND (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter_reverse(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` +FROM ((`BaseReferencesOnDerived` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +) AS `b1` ON `b`.`BaseParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b1`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b1`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_on_derived1(bool async) + { + await base.Include_reference_without_inheritance_on_derived1(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `ReferencesOnBase` AS `r` ON `b`.`Id` = `r`.`ParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_on_derived2(bool async) + { + await base.Include_reference_without_inheritance_on_derived2(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `ReferencesOnDerived` AS `r` ON `b`.`Id` = `r`.`ParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_on_derived_reverse(bool async) + { + await base.Include_reference_without_inheritance_on_derived_reverse(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM ((`ReferencesOnDerived` AS `r` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +) AS `b0` ON `r`.`ParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived1(bool async) + { + await base.Include_collection_with_inheritance_on_derived1(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseCollectionsOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseParentId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived2(bool async) + { + await base.Include_collection_with_inheritance_on_derived2(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b2`.`Id`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`ParentId`, `b2`.`DerivedInheritanceRelationshipEntityId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseCollectionsOnDerived` AS `b2` ON `b`.`Id` = `b2`.`ParentId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived3(bool async) + { + await base.Include_collection_with_inheritance_on_derived3(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b3`.`Id`, `b3`.`Discriminator`, `b3`.`Name`, `b3`.`ParentId`, `b3`.`DerivedInheritanceRelationshipEntityId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b2`.`Id`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`ParentId`, `b2`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b2` + WHERE `b2`.`Discriminator` = 'DerivedCollectionOnDerived' +) AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived_reverse(bool async) + { + await base.Include_collection_with_inheritance_on_derived_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`ParentId`, `b`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` +FROM ((`BaseCollectionsOnDerived` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +) AS `b1` ON `b`.`ParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b1`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b1`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_reference(bool async) + { + await base.Nested_include_with_inheritance_reference_reference(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `n`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `NestedReferences` AS `n` ON `b0`.`Id` = `n`.`ParentReferenceId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b0`.`Id`, `n`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_reference_on_base(bool async) + { + await base.Nested_include_with_inheritance_reference_reference_on_base(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `n`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `NestedReferences` AS `n` ON `b0`.`Id` = `n`.`ParentReferenceId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`Id`, `n`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_reference_reverse(bool async) + { + await base.Nested_include_with_inheritance_reference_reference_reverse(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM (((`NestedReferences` AS `n` +LEFT JOIN `BaseReferencesOnBase` AS `b` ON `n`.`ParentReferenceId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection(bool async) + { + await base.Nested_include_with_inheritance_reference_collection(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `NestedCollections` AS `n` ON `b0`.`Id` = `n`.`ParentReferenceId` +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_on_base(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_on_base(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `NestedCollections` AS `n` ON `b0`.`Id` = `n`.`ParentReferenceId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_reverse(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_reverse(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM (((`NestedCollections` AS `n` +LEFT JOIN `BaseReferencesOnBase` AS `b` ON `n`.`ParentReferenceId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference(bool async) + { + await base.Nested_include_with_inheritance_collection_reference(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Discriminator`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Id0`, `s`.`Discriminator0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty`, `n`.`Id` AS `Id0`, `n`.`Discriminator` AS `Discriminator0`, `n`.`Name` AS `Name0`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `NestedReferences` AS `n` ON `b2`.`Id` = `n`.`ParentCollectionId` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference_reverse(bool async) + { + await base.Nested_include_with_inheritance_collection_reference_reverse(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedProperty`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM (((`NestedReferences` AS `n` +LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection(bool async) + { + await base.Nested_include_with_inheritance_collection_collection(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Discriminator`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Id0`, `s`.`Discriminator0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty`, `n`.`Id` AS `Id0`, `n`.`Discriminator` AS `Discriminator0`, `n`.`Name` AS `Name0`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `NestedCollections` AS `n` ON `b2`.`Id` = `n`.`ParentCollectionId` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection_reverse(bool async) + { + await base.Nested_include_with_inheritance_collection_collection_reverse(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedProperty`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM (((`NestedCollections` AS `n` +LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_collection_reference_on_non_entity_base(bool async) + { + await base.Nested_include_collection_reference_on_non_entity_base(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0` +FROM `ReferencedEntities` AS `r` +LEFT JOIN ( + SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` + FROM `PrincipalEntities` AS `p` + LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` +ORDER BY `r`.`Id`, `s`.`Id` +"""); + } + + public override async Task Collection_projection_on_base_type(bool async) + { + await base.Collection_projection_on_base_type(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedProperty` +FROM `BaseEntities` AS `b` +LEFT JOIN `BaseCollectionsOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_on_derived_type_with_queryable_Cast(bool async) + { + await base.Include_on_derived_type_with_queryable_Cast(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b3`.`Id`, `b3`.`Discriminator`, `b3`.`Name`, `b3`.`ParentId`, `b3`.`DerivedInheritanceRelationshipEntityId` +FROM ((`BaseEntities` AS `b` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b2`.`Id`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`ParentId`, `b2`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b2` + WHERE `b2`.`Discriminator` = 'DerivedCollectionOnDerived' +) AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_split(bool async) + { + await base.Include_collection_with_inheritance_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_reverse_split(bool async) + { + await base.Include_collection_with_inheritance_reverse_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedProperty`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM `BaseCollectionsOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id` +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id`, `b0`.`Id` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b0`.`Id` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `b0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter_split(bool async) + { + await base.Include_collection_with_inheritance_with_filter_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter_reverse_split(bool async) + { + await base.Include_collection_with_inheritance_with_filter_reverse_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedProperty`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM `BaseCollectionsOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id`, `b0`.`Id` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b0`.`Id` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `b`.`Id`, `b0`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_split(bool async) + { + await base.Include_collection_without_inheritance_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_reverse_split(bool async) + { + await base.Include_collection_without_inheritance_reverse_split(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `CollectionsOnBase` AS `c` +LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id` +ORDER BY `c`.`Id`, `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `c`.`Id`, `b`.`Id` +FROM (`CollectionsOnBase` AS `c` +LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `c`.`Id`, `b`.`Id` +FROM (`CollectionsOnBase` AS `c` +LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Id` IS NOT NULL AND `b3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `b`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter_split(bool async) + { + await base.Include_collection_without_inheritance_with_filter_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter_reverse_split(bool async) + { + await base.Include_collection_without_inheritance_with_filter_reverse_split(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `CollectionsOnBase` AS `c` +LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id` +WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL +ORDER BY `c`.`Id`, `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `c`.`Id`, `b`.`Id` +FROM (`CollectionsOnBase` AS `c` +LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`b`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `c`.`Id`, `b`.`Id` +FROM (`CollectionsOnBase` AS `c` +LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`b`.`Id` IS NOT NULL AND `b3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived1_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived1_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived2_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived2_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b4`.`Id`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`ParentId`, `b4`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseCollectionsOnDerived` AS `b4` ON `b`.`Id` = `b4`.`ParentId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived3_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived3_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b5`.`Id`, `b5`.`Discriminator`, `b5`.`Name`, `b5`.`ParentId`, `b5`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN ( + SELECT `b4`.`Id`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`ParentId`, `b4`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b4` + WHERE `b4`.`Discriminator` = 'DerivedCollectionOnDerived' +) AS `b5` ON `b`.`Id` = `b5`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived_reverse_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived_reverse_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`ParentId`, `b`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` +FROM `BaseCollectionsOnDerived` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +) AS `b1` ON `b`.`ParentId` = `b1`.`Id` +ORDER BY `b`.`Id`, `b1`.`Id` +""", + // + """ +SELECT `b4`.`BaseInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b1`.`Id` +FROM (`BaseCollectionsOnDerived` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +) AS `b1` ON `b`.`ParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b4` ON `b1`.`Id` = `b4`.`BaseInheritanceRelationshipEntityId` +WHERE `b1`.`Id` IS NOT NULL AND `b4`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `b1`.`Id` +""", + // + """ +SELECT `b5`.`DerivedInheritanceRelationshipEntityId`, `b5`.`Id`, `b5`.`Name`, `b`.`Id`, `b1`.`Id` +FROM (`BaseCollectionsOnDerived` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +) AS `b1` ON `b`.`ParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b5` ON `b1`.`Id` = `b5`.`DerivedInheritanceRelationshipEntityId` +WHERE `b1`.`Id` IS NOT NULL AND `b5`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `b1`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_split(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name` +FROM `BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id`, `b0`.`Id` +FROM (`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b0`.`Id` +FROM (`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b0`.`Id` +FROM (`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `NestedCollections` AS `n` ON `b0`.`Id` = `n`.`ParentReferenceId` +WHERE `b0`.`Id` IS NOT NULL AND `n`.`ParentReferenceId` IS NOT NULL +ORDER BY `b`.`Id`, `b0`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_on_base_split(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_on_base_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`Id`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name` +FROM `BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id`, `b0`.`Id` +FROM (`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b0`.`Id` +FROM (`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' +ORDER BY `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b0`.`Id` +FROM (`BaseEntities` AS `b` +LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) +LEFT JOIN `NestedCollections` AS `n` ON `b0`.`Id` = `n`.`ParentReferenceId` +WHERE (`b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity') AND (`b0`.`Id` IS NOT NULL AND `n`.`ParentReferenceId` IS NOT NULL) +ORDER BY `b`.`Id`, `b0`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_reverse_split(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_reverse_split(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM (`NestedCollections` AS `n` +LEFT JOIN `BaseReferencesOnBase` AS `b` ON `n`.`ParentReferenceId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id` +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +FROM ((`NestedCollections` AS `n` +LEFT JOIN `BaseReferencesOnBase` AS `b` ON `n`.`ParentReferenceId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +FROM ((`NestedCollections` AS `n` +LEFT JOIN `BaseReferencesOnBase` AS `b` ON `n`.`ParentReferenceId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference_split(bool async) + { + await base.Nested_include_with_inheritance_collection_reference_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Discriminator`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Id0`, `s`.`Discriminator0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN ( + SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `n`.`Id` AS `Id0`, `n`.`Discriminator` AS `Discriminator0`, `n`.`Name` AS `Name0`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` + FROM `BaseCollectionsOnBase` AS `b4` + LEFT JOIN `NestedReferences` AS `n` ON `b4`.`Id` = `n`.`ParentCollectionId` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference_reverse_split(bool async) + { + await base.Nested_include_with_inheritance_collection_reference_reverse_split(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedProperty`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM (`NestedReferences` AS `n` +LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id` +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +FROM ((`NestedReferences` AS `n` +LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +FROM ((`NestedReferences` AS `n` +LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection_split(bool async) + { + await base.Nested_include_with_inheritance_collection_collection_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId` +ORDER BY `b`.`Id`, `b4`.`Id` +""", + // + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b4`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId`) +LEFT JOIN `NestedCollections` AS `n` ON `b4`.`Id` = `n`.`ParentCollectionId` +WHERE `b4`.`Id` IS NOT NULL AND `n`.`ParentCollectionId` IS NOT NULL +ORDER BY `b`.`Id`, `b4`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection_reverse_split(bool async) + { + await base.Nested_include_with_inheritance_collection_collection_reverse_split(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedProperty`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` +FROM (`NestedCollections` AS `n` +LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id` +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +FROM ((`NestedCollections` AS `n` +LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` +""", + // + """ +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +FROM ((`NestedCollections` AS `n` +LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) +LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` +"""); + } + + public override async Task Nested_include_collection_reference_on_non_entity_base_split(bool async) + { + await base.Nested_include_collection_reference_on_non_entity_base_split(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `ReferencedEntities` AS `r` +ORDER BY `r`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0`, `r`.`Id` +FROM `ReferencedEntities` AS `r` +INNER JOIN ( + SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` + FROM `PrincipalEntities` AS `p` + LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` +ORDER BY `r`.`Id` +"""); + } + + public override async Task Collection_projection_on_base_type_split(bool async) + { + await base.Collection_projection_on_base_type_split(async); + + AssertSql( + """ +SELECT `b`.`Id` +FROM `BaseEntities` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedProperty`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseCollectionsOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_on_derived_type_with_queryable_Cast_split(bool async) + { + await base.Include_on_derived_type_with_queryable_Cast_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b5`.`Id`, `b5`.`Discriminator`, `b5`.`Name`, `b5`.`ParentId`, `b5`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN ( + SELECT `b4`.`Id`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`ParentId`, `b4`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b4` + WHERE `b4`.`Discriminator` = 'DerivedCollectionOnDerived' +) AS `b5` ON `b`.`Id` = `b5`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id` +"""); + } + + public override void Changes_in_derived_related_entities_are_detected() + { + base.Changes_in_derived_related_entities_are_detected(); + + AssertSql( + """ +SELECT `b3`.`Id`, `b3`.`Discriminator`, `b3`.`Name`, `b3`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b3`.`OwnedReferenceOnBase_Id`, `b3`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b3`.`OwnedReferenceOnDerived_Id`, `b3`.`OwnedReferenceOnDerived_Name`, `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty` +FROM ((( + SELECT TOP 2 `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + WHERE `b`.`Name` = 'Derived1(4)' +) AS `b3` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b3`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b3`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseCollectionsOnBase` AS `b2` ON `b3`.`Id` = `b2`.`BaseParentId` +ORDER BY `b3`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +"""); + } + + public override void Entity_can_make_separate_relationships_with_base_type_and_derived_type_both() + { + base.Entity_can_make_separate_relationships_with_base_type_and_derived_type_both(); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ManyToManyNoTrackingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/ManyToManyNoTrackingQueryLibRedTest.cs new file mode 100644 index 00000000..5737aafd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ManyToManyNoTrackingQueryLibRedTest.cs @@ -0,0 +1,1788 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class ManyToManyNoTrackingQueryLibRedTest + : ManyToManyNoTrackingQueryRelationalTestBase +{ + public ManyToManyNoTrackingQueryLibRedTest(ManyToManyQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Skip_navigation_all(bool async) + { + await base.Skip_navigation_all(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE NOT EXISTS ( + SELECT `j`.`OneId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` NOT LIKE '%B%' OR `e0`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_without_predicate(bool async) + { + await base.Skip_navigation_any_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_any_with_predicate(bool async) + { + await base.Skip_navigation_any_with_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`OneSkipSharedId` AND (`e1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains(bool async) + { + await base.Skip_navigation_contains(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate(bool async) + { + await base.Skip_navigation_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate(bool async) + { + await base.Skip_navigation_count_with_predicate(async); + + AssertSql( + """ +SELECT `e2`.`Id`, `e2`.`Name`, `e2`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`Name`, ( + SELECT COUNT(*) + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') + ) AS `e1` ON `j`.`EntityBranchId` = `e1`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`e1`.`Name` LIKE 'L%')) AS `c` + FROM `EntityOnes` AS `e` +) AS `e2` +ORDER BY `e2`.`c`, `e2`.`Id` +"""); + } + + public override async Task Skip_navigation_long_count_without_predicate(bool async) + { + await base.Skip_navigation_long_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +"""); + } + + public override async Task Skip_navigation_long_count_with_predicate(bool async) + { + await base.Skip_navigation_long_count_with_predicate(async); + + AssertSql( + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( + SELECT COUNT(*) + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwos` AS `e` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` +"""); + } + + public override async Task Skip_navigation_select_many_average(bool async) + { + await base.Skip_navigation_select_many_average(async); + + AssertSql( + """ +SELECT AVG(CDBL(`s`.`Key1`)) +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_max(bool async) + { + await base.Skip_navigation_select_many_max(async); + + AssertSql( + """ +SELECT MAX(`s`.`Key1`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Key1`, `j`.`ThreeId` + FROM `JoinThreeToCompositeKeyFull` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +"""); + } + + public override async Task Skip_navigation_select_many_min(bool async) + { + await base.Skip_navigation_select_many_min(async); + + AssertSql( + """ +SELECT MIN(`s`.`Id`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_sum(bool async) + { + await base.Skip_navigation_select_many_sum(async); + + AssertSql( + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) +FROM `EntityRoots` AS `e` +INNER JOIN ( + SELECT `e1`.`Key1`, `e0`.`RootSkipSharedId` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_subquery_average(bool async) + { + await base.Skip_navigation_select_subquery_average(async); + + AssertSql( + """ +SELECT ( + SELECT AVG(CDBL(`e0`.`Key1`)) + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` + WHERE `e`.`Id` = `j`.`LeafId`) +FROM `EntityRoots` AS `e` +WHERE `e`.`Discriminator` = 'EntityLeaf' +"""); + } + + public override async Task Skip_navigation_select_subquery_max(bool async) + { + await base.Skip_navigation_select_subquery_max(async); + + AssertSql( +""" +SELECT ( + SELECT MAX(`e0`.`Id`) + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_min(bool async) + { + await base.Skip_navigation_select_subquery_min(async); + + AssertSql( +""" +SELECT ( + SELECT MIN(`e0`.`Id`) + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`ThreeId`) +FROM `EntityThrees` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_sum(bool async) + { + await base.Skip_navigation_select_subquery_sum(async); + + AssertSql( +""" +SELECT ( + SELECT IIF(SUM(`e1`.`Id`) IS NULL, 0, SUM(`e1`.`Id`)) + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityOnes` AS `e1` ON `e0`.`OneSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`TwoSkipSharedId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_order_by_first_or_default(bool async) + { + await base.Skip_navigation_order_by_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_order_by_single_or_default(bool async) + { + await base.Skip_navigation_order_by_single_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT TOP(1) [t].[Id], [t].[Name] + FROM ( + SELECT TOP(1) [e0].[Id], [e0].[Name] + FROM [JoinOneSelfPayload] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[RightId] = [e0].[Id] + WHERE [e].[Id] = [j].[LeftId] + ORDER BY [e0].[Id] + ) AS [t] + ORDER BY [t].[Id] +) AS [t0] +"""); + } + + public override async Task Skip_navigation_order_by_last_or_default(bool async) + { + await base.Skip_navigation_order_by_last_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityRoots] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[EntityBranchId] + FROM ( + SELECT [e0].[Id], [e0].[Name], [j].[EntityBranchId], ROW_NUMBER() OVER(PARTITION BY [j].[EntityBranchId] ORDER BY [e0].[Id] DESC) AS [row] + FROM [JoinOneToBranch] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[EntityOneId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[EntityBranchId] +WHERE [e].[Discriminator] IN (N'EntityBranch', N'EntityLeaf') +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id] DESC) AS [row] + FROM [JoinTwoToThree] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_cast(bool async) + { + await base.Skip_navigation_cast(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` = 'EntityLeaf' + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +"""); + } + + public override async Task Skip_navigation_of_type(bool async) + { + await base.Skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` + WHERE `e1`.`Discriminator` = 'EntityLeaf' +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Join_with_skip_navigation(bool async) + { + await base.Join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +INNER JOIN [EntityTwos] AS [e0] ON [e].[Id] = ( + SELECT TOP(1) [e2].[Id] + FROM [EntityTwoEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[SelfSkipSharedRightId] = [e2].[Id] + WHERE [e0].[Id] = [e1].[SelfSkipSharedLeftId] + ORDER BY [e2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation(bool async) + { + await base.Left_join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN [EntityCompositeKeys] AS [e0] ON ( + SELECT TOP(1) [e2].[Id] + FROM [EntityCompositeKeyEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[TwoSkipSharedId] = [e2].[Id] + WHERE [e].[Key1] = [e1].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [e1].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [e1].[CompositeKeySkipSharedKey3] + ORDER BY [e2].[Id]) = ( + SELECT TOP(1) [e3].[Id] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e3] ON [j].[ThreeId] = [e3].[Id] + WHERE [e0].[Key1] = [j].[CompositeId1] AND [e0].[Key2] = [j].[CompositeId2] AND [e0].[Key3] = [j].[CompositeId3] + ORDER BY [e3].[Id]) +ORDER BY [e].[Key1], [e0].[Key1], [e].[Key2], [e0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation(bool async) + { + await base.Select_many_over_skip_navigation(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityRoots` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`RootSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where(bool async) + { + await base.Select_many_over_skip_navigation_where(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneSkipSharedId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[OneSkipSharedId], ROW_NUMBER() OVER(PARTITION BY [e0].[OneSkipSharedId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityOneEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Id] = [t0].[OneSkipSharedId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_of_type(bool async) + { + await base.Select_many_over_skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` + WHERE `e1`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_cast(bool async) + { + await base.Select_many_over_skip_navigation_cast(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`EntityOneId` + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') + ) AS `e1` ON `j`.`EntityBranchId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`EntityOneId` +"""); + } + + public override async Task Select_skip_navigation(bool async) + { + await base.Select_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Select_skip_navigation_multiple(bool async) + { + await base.Select_skip_navigation_multiple(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` +FROM ((`EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` + FROM `EntityTwoEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) +LEFT JOIN ( + SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e3` + INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` +"""); + } + + public override async Task Select_skip_navigation_first_or_default(bool async) + { + await base.Select_skip_navigation_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Key1], [t0].[Key2], [t0].[Key3], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Key1], [e0].[Key2]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [j].[CompositeId1] = [e0].[Key1] AND [j].[CompositeId2] = [e0].[Key2] AND [j].[CompositeId3] = [e0].[Key3] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +ORDER BY [e].[Id] +"""); + } + + public override async Task Include_skip_navigation(bool async) + { + await base.Include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`Slumber`, `e1`.`IsGreen`, `e1`.`IsBrown`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference(bool async) + { + await base.Include_skip_navigation_then_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`Id`, `s0`.`Discriminator`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`EntityBranchId`, `s`.`EntityOneId` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` = 'EntityLeaf' + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id`) + LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`EntityBranchId`, `j0`.`EntityOneId` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`EntityOneId` = `e2`.`Id` + ) AS `s` ON `e1`.`Id` = `s`.`EntityBranchId` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` + FROM ((`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId`, `j0`.`RightId` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference(bool async) + { + await base.Include_skip_navigation_and_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Filtered_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by(bool async) + { + await base.Filtered_include_skip_navigation_order_by(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[SelfSkipSharedLeftId], [t0].[SelfSkipSharedRightId] +FROM [EntityTwos] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[SelfSkipSharedLeftId], [t].[SelfSkipSharedRightId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[SelfSkipSharedLeftId], [e0].[SelfSkipSharedRightId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[Id0] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[Id0], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[Id] AS [Id0], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where(bool async) + { + await base.Filtered_then_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`Slumber`, `e`.`IsGreen`, `e`.`IsBrown`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`OneId`, `s0`.`ThreeId` +FROM `EntityRoots` AS `e` +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`OneId`, `s`.`ThreeId` + FROM (`EntityRootEntityThree` AS `e0` + INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id`) + LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e2` ON `j`.`OneId` = `e2`.`Id` + WHERE `e2`.`Id` < 10 + ) AS `s` ON `e1`.`Id` = `s`.`ThreeId` +) AS `s0` ON `e`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `e`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Discriminator], [e].[Name], [e].[Number], [e].[Slumber], [e].[IsGreen], [e].[IsBrown], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[Name], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Id], [t1].[CollectionInverseId], [t1].[Name0], [t1].[ReferenceInverseId], [t1].[Id0] +FROM [EntityRoots] AS [e] +LEFT JOIN ( + SELECT [e1].[Key1], [e1].[Key2], [e1].[Key3], [e1].[Name], [e0].[RootSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId], [t0].[Id0], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3] + FROM [EntityCompositeKeyEntityRoot] AS [e0] + INNER JOIN [EntityCompositeKeys] AS [e1] ON [e0].[CompositeKeySkipSharedKey1] = [e1].[Key1] AND [e0].[CompositeKeySkipSharedKey2] = [e1].[Key2] AND [e0].[CompositeKeySkipSharedKey3] = [e1].[Key3] + LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[Id0], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [e2].[Id], [e2].[CollectionInverseId], [e2].[Name], [e2].[ReferenceInverseId], [j].[Id] AS [Id0], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e2].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e2] ON [j].[ThreeId] = [e2].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e1].[Key1] = [t0].[CompositeId1] AND [e1].[Key2] = [t0].[CompositeId2] AND [e1].[Key3] = [t0].[CompositeId3] +) AS [t1] ON [e].[Id] = [t1].[RootSkipSharedId] +ORDER BY [e].[Id], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +FROM `EntityRoots` AS `e` +LEFT JOIN ( + SELECT `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3`) + LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`TwoSkipSharedId`, `e1`.`CompositeKeySkipSharedKey1`, `e1`.`CompositeKeySkipSharedKey2`, `e1`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`TwoSkipSharedId` = `e2`.`Id` + ) AS `s` ON `e0`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e0`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e0`.`Key3` = `s`.`CompositeKeySkipSharedKey3` + WHERE `e0`.`Key1` < 5 +) AS `s0` ON `e`.`Id` = `s0`.`LeafId` +WHERE `e`.`Discriminator` = 'EntityLeaf' +ORDER BY `e`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId], [t1].[TwoId], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0], [t1].[ThreeId], [t1].[TwoId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[ThreeId], [j0].[TwoId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId], [t1].[TwoId], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0], [t1].[ThreeId], [t1].[TwoId0] +FROM [EntityOnes] AS [e] +LEFT JOIN ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId], [t].[TwoId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[ThreeId], [j0].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[TwoId] + WHERE [e0].[Id] < 10 +) AS [t1] ON [e].[Id] = [t1].[OneId] +ORDER BY [e].[Id], [t1].[OneId], [t1].[TwoId], [t1].[Id], [t1].[TwoId0], [t1].[Id0] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined(bool async) + { + await base.Filter_include_on_skip_navigation_combined(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId], [t3].[Id], [t3].[Name], [t3].[OneId], [t3].[ThreeId], [t3].[Id0], [t3].[CollectionInverseId], [t3].[ExtraId], [t3].[Name0], [t3].[ReferenceInverseId], [t3].[OneId0], [t3].[TwoId], [t3].[Id1], [t3].[Discriminator], [t3].[Name1], [t3].[Number], [t3].[IsGreen], [t3].[EntityBranchId], [t3].[EntityOneId] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [e0].[Id], [e0].[Name], [j].[OneId], [j].[ThreeId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId], [t0].[OneId] AS [OneId0], [t0].[TwoId], [t1].[Id] AS [Id1], [t1].[Discriminator], [t1].[Name] AS [Name1], [t1].[Number], [t1].[IsGreen], [t1].[EntityBranchId], [t1].[EntityOneId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[OneId], [j0].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[OneId] + LEFT JOIN ( + SELECT [t2].[Id], [t2].[Discriminator], [t2].[Name], [t2].[Number], [t2].[IsGreen], [j1].[EntityBranchId], [j1].[EntityOneId] + FROM [JoinOneToBranch] AS [j1] + INNER JOIN ( + SELECT [e2].[Id], [e2].[Discriminator], [e2].[Name], [e2].[Number], [e2].[IsGreen] + FROM [EntityRoots] AS [e2] + WHERE [e2].[Discriminator] IN (N'EntityBranch', N'EntityLeaf') + ) AS [t2] ON [j1].[EntityBranchId] = [t2].[Id] + WHERE [t2].[Id] < 20 + ) AS [t1] ON [e0].[Id] = [t1].[EntityOneId] + WHERE [e0].[Id] < 10 +) AS [t3] ON [e].[Id] = [t3].[ThreeId] +ORDER BY [e].[Id], [t3].[OneId], [t3].[ThreeId], [t3].[Id], [t3].[OneId0], [t3].[Id0], [t3].[TwoId], [t3].[EntityBranchId], [t3].[EntityOneId] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0`, `s0`.`ThreeId`, `s0`.`TwoId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0`, `s`.`ThreeId`, `s`.`TwoId` + FROM `EntityTwos` AS `e0` + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` + WHERE `e0`.`Id` > 15 +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` +"""); + } + + public override async Task Includes_accessed_via_different_path_are_merged(bool async) + { + await base.Includes_accessed_via_different_path_are_merged(async); + + AssertSql(" "); + } + + public override async Task Filtered_includes_accessed_via_different_path_are_merged(bool async) + { + await base.Filtered_includes_accessed_via_different_path_are_merged(async); + + AssertSql(" "); + } + + public override async Task Include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`Slumber`, `e1`.`IsGreen`, `e1`.`IsBrown`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_split(bool async) + { + await base.Include_skip_navigation_then_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` = 'EntityLeaf' + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +FROM (`EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `e0`.`Id` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` = 'EntityLeaf' + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`EntityBranchId` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`EntityOneId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`ThreeId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Include_skip_navigation_and_reference_split(bool async) + { + await base.Include_skip_navigation_and_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` +ORDER BY `e`.`Id`, `e0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +INNER JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id] +FROM [EntityTwos] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[SelfSkipSharedLeftId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[SelfSkipSharedLeftId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_then_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`Slumber`, `e`.`IsGreen`, `e`.`IsBrown` +FROM `EntityRoots` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId` +FROM `EntityRoots` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +FROM (`EntityRoots` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e2` ON `j`.`OneId` = `e2`.`Id` + WHERE `e2`.`Id` < 10 +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Discriminator], [e].[Name], [e].[Number], [e].[Slumber], [e].[IsGreen], [e].[IsBrown] +FROM [EntityRoots] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [e].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] +FROM [EntityRoots] AS [e] +INNER JOIN ( + SELECT [e1].[Key1], [e1].[Key2], [e1].[Key3], [e1].[Name], [e0].[RootSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] + FROM [EntityCompositeKeyEntityRoot] AS [e0] + INNER JOIN [EntityCompositeKeys] AS [e1] ON [e0].[CompositeKeySkipSharedKey1] = [e1].[Key1] AND [e0].[CompositeKeySkipSharedKey2] = [e1].[Key2] AND [e0].[CompositeKeySkipSharedKey3] = [e1].[Key3] +) AS [t] ON [e].[Id] = [t].[RootSkipSharedId] +ORDER BY [e].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3] +FROM [EntityRoots] AS [e] +INNER JOIN ( + SELECT [e1].[Key1], [e1].[Key2], [e1].[Key3], [e0].[RootSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] + FROM [EntityCompositeKeyEntityRoot] AS [e0] + INNER JOIN [EntityCompositeKeys] AS [e1] ON [e0].[CompositeKeySkipSharedKey1] = [e1].[Key1] AND [e0].[CompositeKeySkipSharedKey2] = [e1].[Key2] AND [e0].[CompositeKeySkipSharedKey3] = [e1].[Key3] +) AS [t] ON [e].[Id] = [t].[RootSkipSharedId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3] + FROM ( + SELECT [e2].[Id], [e2].[CollectionInverseId], [e2].[Name], [e2].[ReferenceInverseId], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e2].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e2] ON [j].[ThreeId] = [e2].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Key1] = [t0].[CompositeId1] AND [t].[Key2] = [t0].[CompositeId2] AND [t].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen` +FROM `EntityRoots` AS `e` +WHERE `e`.`Discriminator` = 'EntityLeaf' +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +FROM `EntityRoots` AS `e` +INNER JOIN ( + SELECT `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` + WHERE `e0`.`Key1` < 5 +) AS `s` ON `e`.`Id` = `s`.`LeafId` +WHERE `e`.`Discriminator` = 'EntityLeaf' +ORDER BY `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +FROM (`EntityRoots` AS `e` +INNER JOIN ( + SELECT `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` + WHERE `e0`.`Key1` < 5 +) AS `s` ON `e`.`Id` = `s`.`LeafId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`CompositeKeySkipSharedKey1`, `e1`.`CompositeKeySkipSharedKey2`, `e1`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`TwoSkipSharedId` = `e2`.`Id` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE (`e`.`Discriminator` = 'EntityLeaf') AND (`s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL) +ORDER BY `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t0].[OneId], [t0].[TwoId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +""", +// +""" +SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [e].[Id], [t0].[OneId], [t0].[TwoId], [t0].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[OneId], [t].[TwoId] + FROM ( + SELECT [e0].[Id], [j].[OneId], [j].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +INNER JOIN ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[TwoId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 +) AS [t1] ON [t0].[Id] = [t1].[TwoId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[TwoId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[TwoId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[TwoId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id], [t0].[TwoId], [t0].[Id] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityTwos` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[Id], [t].[Name], [e].[Id], [t].[OneId], [t].[ThreeId] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [e0].[Name], [j].[OneId], [j].[ThreeId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [j].[OneId], [j].[ThreeId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[OneId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id], [t0].[OneId], [t0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Discriminator], [t0].[Name], [t0].[Number], [t0].[IsGreen], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [j].[OneId], [j].[ThreeId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[Discriminator], [t1].[Name], [t1].[Number], [t1].[IsGreen], [j0].[EntityOneId] + FROM [JoinOneToBranch] AS [j0] + INNER JOIN ( + SELECT [e1].[Id], [e1].[Discriminator], [e1].[Name], [e1].[Number], [e1].[IsGreen] + FROM [EntityRoots] AS [e1] + WHERE [e1].[Discriminator] IN (N'EntityBranch', N'EntityLeaf') + ) AS [t1] ON [j0].[EntityBranchId] = [t1].[Id] + WHERE [t1].[Id] < 20 +) AS [t0] ON [t].[Id] = [t0].[EntityOneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ManyToManyQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/ManyToManyQueryLibRedFixture.cs new file mode 100644 index 00000000..f36e985e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ManyToManyQueryLibRedFixture.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class ManyToManyQueryLibRedFixture : ManyToManyQueryRelationalFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ManyToManyQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/ManyToManyQueryLibRedTest.cs new file mode 100644 index 00000000..1afd9107 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ManyToManyQueryLibRedTest.cs @@ -0,0 +1,1822 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class ManyToManyQueryLibRedTest : ManyToManyQueryRelationalTestBase +{ + public ManyToManyQueryLibRedTest(ManyToManyQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Skip_navigation_all(bool async) + { + await base.Skip_navigation_all(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE NOT EXISTS ( + SELECT `j`.`OneId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` NOT LIKE '%B%' OR `e0`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_without_predicate(bool async) + { + await base.Skip_navigation_any_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_any_with_predicate(bool async) + { + await base.Skip_navigation_any_with_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`OneSkipSharedId` AND (`e1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains(bool async) + { + await base.Skip_navigation_contains(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate(bool async) + { + await base.Skip_navigation_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate(bool async) + { + await base.Skip_navigation_count_with_predicate(async); + + AssertSql( + """ +SELECT `e2`.`Id`, `e2`.`Name`, `e2`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`Name`, ( + SELECT COUNT(*) + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') + ) AS `e1` ON `j`.`EntityBranchId` = `e1`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`e1`.`Name` LIKE 'L%')) AS `c` + FROM `EntityOnes` AS `e` +) AS `e2` +ORDER BY `e2`.`c`, `e2`.`Id` +"""); + } + + public override async Task Skip_navigation_long_count_without_predicate(bool async) + { + await base.Skip_navigation_long_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +"""); + } + + public override async Task Skip_navigation_long_count_with_predicate(bool async) + { + await base.Skip_navigation_long_count_with_predicate(async); + + AssertSql( + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( + SELECT COUNT(*) + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwos` AS `e` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` +"""); + } + + public override async Task Skip_navigation_select_many_average(bool async) + { + await base.Skip_navigation_select_many_average(async); + + AssertSql( + """ +SELECT AVG(CDBL(`s`.`Key1`)) +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_max(bool async) + { + await base.Skip_navigation_select_many_max(async); + + AssertSql( + """ +SELECT MAX(`s`.`Key1`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Key1`, `j`.`ThreeId` + FROM `JoinThreeToCompositeKeyFull` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +"""); + } + + public override async Task Skip_navigation_select_many_min(bool async) + { + await base.Skip_navigation_select_many_min(async); + + AssertSql( + """ +SELECT MIN(`s`.`Id`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_sum(bool async) + { + await base.Skip_navigation_select_many_sum(async); + + AssertSql( + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) +FROM `EntityRoots` AS `e` +INNER JOIN ( + SELECT `e1`.`Key1`, `e0`.`RootSkipSharedId` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_subquery_average(bool async) + { + await base.Skip_navigation_select_subquery_average(async); + + AssertSql( + """ +SELECT ( + SELECT AVG(CDBL(`e0`.`Key1`)) + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` + WHERE `e`.`Id` = `j`.`LeafId`) +FROM `EntityRoots` AS `e` +WHERE `e`.`Discriminator` = 'EntityLeaf' +"""); + } + + public override async Task Skip_navigation_select_subquery_max(bool async) + { + await base.Skip_navigation_select_subquery_max(async); + + AssertSql( +""" +SELECT ( + SELECT MAX(`e0`.`Id`) + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_min(bool async) + { + await base.Skip_navigation_select_subquery_min(async); + + AssertSql( +""" +SELECT ( + SELECT MIN(`e0`.`Id`) + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`ThreeId`) +FROM `EntityThrees` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_sum(bool async) + { + await base.Skip_navigation_select_subquery_sum(async); + + AssertSql( +""" +SELECT ( + SELECT IIF(SUM(`e1`.`Id`) IS NULL, 0, SUM(`e1`.`Id`)) + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityOnes` AS `e1` ON `e0`.`OneSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`TwoSkipSharedId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_order_by_first_or_default(bool async) + { + await base.Skip_navigation_order_by_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_order_by_single_or_default(bool async) + { + await base.Skip_navigation_order_by_single_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT TOP(1) [t].[Id], [t].[Name] + FROM ( + SELECT TOP(1) [e0].[Id], [e0].[Name] + FROM [JoinOneSelfPayload] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[RightId] = [e0].[Id] + WHERE [e].[Id] = [j].[LeftId] + ORDER BY [e0].[Id] + ) AS [t] + ORDER BY [t].[Id] +) AS [t0] +"""); + } + + public override async Task Skip_navigation_order_by_last_or_default(bool async) + { + await base.Skip_navigation_order_by_last_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityRoots] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[EntityBranchId] + FROM ( + SELECT [e0].[Id], [e0].[Name], [j].[EntityBranchId], ROW_NUMBER() OVER(PARTITION BY [j].[EntityBranchId] ORDER BY [e0].[Id] DESC) AS [row] + FROM [JoinOneToBranch] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[EntityOneId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[EntityBranchId] +WHERE [e].[Discriminator] IN (N'EntityBranch', N'EntityLeaf') +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id] DESC) AS [row] + FROM [JoinTwoToThree] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_cast(bool async) + { + await base.Skip_navigation_cast(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` = 'EntityLeaf' + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +"""); + } + + public override async Task Skip_navigation_of_type(bool async) + { + await base.Skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` + WHERE `e1`.`Discriminator` = 'EntityLeaf' +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Join_with_skip_navigation(bool async) + { + await base.Join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +INNER JOIN [EntityTwos] AS [e0] ON [e].[Id] = ( + SELECT TOP(1) [e2].[Id] + FROM [EntityTwoEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[SelfSkipSharedRightId] = [e2].[Id] + WHERE [e0].[Id] = [e1].[SelfSkipSharedLeftId] + ORDER BY [e2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation(bool async) + { + await base.Left_join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN [EntityCompositeKeys] AS [e0] ON ( + SELECT TOP(1) [e2].[Id] + FROM [EntityCompositeKeyEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[TwoSkipSharedId] = [e2].[Id] + WHERE [e].[Key1] = [e1].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [e1].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [e1].[CompositeKeySkipSharedKey3] + ORDER BY [e2].[Id]) = ( + SELECT TOP(1) [e3].[Id] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e3] ON [j].[ThreeId] = [e3].[Id] + WHERE [e0].[Key1] = [j].[CompositeId1] AND [e0].[Key2] = [j].[CompositeId2] AND [e0].[Key3] = [j].[CompositeId3] + ORDER BY [e3].[Id]) +ORDER BY [e].[Key1], [e0].[Key1], [e].[Key2], [e0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation(bool async) + { + await base.Select_many_over_skip_navigation(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityRoots` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`RootSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where(bool async) + { + await base.Select_many_over_skip_navigation_where(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneSkipSharedId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[OneSkipSharedId], ROW_NUMBER() OVER(PARTITION BY [e0].[OneSkipSharedId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityOneEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Id] = [t0].[OneSkipSharedId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_of_type(bool async) + { + await base.Select_many_over_skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` + WHERE `e1`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_cast(bool async) + { + await base.Select_many_over_skip_navigation_cast(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`EntityOneId` + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') + ) AS `e1` ON `j`.`EntityBranchId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`EntityOneId` +"""); + } + + public override async Task Select_skip_navigation(bool async) + { + await base.Select_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Select_skip_navigation_multiple(bool async) + { + await base.Select_skip_navigation_multiple(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` +FROM ((`EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` + FROM `EntityTwoEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) +LEFT JOIN ( + SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e3` + INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` +"""); + } + + public override async Task Select_skip_navigation_first_or_default(bool async) + { + await base.Select_skip_navigation_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Key1], [t0].[Key2], [t0].[Key3], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Key1], [e0].[Key2]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [j].[CompositeId1] = [e0].[Key1] AND [j].[CompositeId2] = [e0].[Key2] AND [j].[CompositeId3] = [e0].[Key3] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +ORDER BY [e].[Id] +"""); + } + + public override async Task Include_skip_navigation(bool async) + { + await base.Include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`Slumber`, `e1`.`IsGreen`, `e1`.`IsBrown` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference(bool async) + { + await base.Include_skip_navigation_then_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`Discriminator`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id0`, `s0`.`Name0` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `s`.`EntityBranchId`, `s`.`EntityOneId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` = 'EntityLeaf' + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id`) + LEFT JOIN ( + SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`EntityOneId` = `e2`.`Id` + ) AS `s` ON `e1`.`Id` = `s`.`EntityBranchId` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` + FROM ((`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference(bool async) + { + await base.Include_skip_navigation_and_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Filtered_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by(bool async) + { + await base.Filtered_include_skip_navigation_order_by(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [t0].[SelfSkipSharedLeftId], [t0].[SelfSkipSharedRightId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +LEFT JOIN ( + SELECT [t].[SelfSkipSharedLeftId], [t].[SelfSkipSharedRightId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[SelfSkipSharedLeftId], [e0].[SelfSkipSharedRightId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e0].[Id] AS [Id0], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where(bool async) + { + await base.Filtered_then_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`Slumber`, `e`.`IsGreen`, `e`.`IsBrown`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id0`, `s0`.`Name0` +FROM `EntityRoots` AS `e` +LEFT JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` + FROM (`EntityRootEntityThree` AS `e0` + INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id`) + LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e2` ON `j`.`OneId` = `e2`.`Id` + WHERE `e2`.`Id` < 10 + ) AS `s` ON `e1`.`Id` = `s`.`ThreeId` +) AS `s0` ON `e`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `e`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Discriminator], [e].[Name], [e].[Number], [e].[Slumber], [e].[IsGreen], [e].[IsBrown], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[Name], [t1].[Id], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[ThreeId], [t1].[Id0], [t1].[CollectionInverseId], [t1].[Name0], [t1].[ReferenceInverseId] +FROM [EntityRoots] AS [e] +LEFT JOIN ( + SELECT [e0].[RootSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Key1], [e1].[Key2], [e1].[Key3], [e1].[Name], [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] + FROM [EntityCompositeKeyEntityRoot] AS [e0] + INNER JOIN [EntityCompositeKeys] AS [e1] ON [e0].[CompositeKeySkipSharedKey1] = [e1].[Key1] AND [e0].[CompositeKeySkipSharedKey2] = [e1].[Key2] AND [e0].[CompositeKeySkipSharedKey3] = [e1].[Key3] + LEFT JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e2].[Id] AS [Id0], [e2].[CollectionInverseId], [e2].[Name], [e2].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e2].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e2] ON [j].[ThreeId] = [e2].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e1].[Key1] = [t0].[CompositeId1] AND [e1].[Key2] = [t0].[CompositeId2] AND [e1].[Key3] = [t0].[CompositeId3] +) AS [t1] ON [e].[Id] = [t1].[RootSkipSharedId] +ORDER BY [e].[Id], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[Id0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` +FROM `EntityRoots` AS `e` +LEFT JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3`) + LEFT JOIN ( + SELECT `e1`.`TwoSkipSharedId`, `e1`.`CompositeKeySkipSharedKey1`, `e1`.`CompositeKeySkipSharedKey2`, `e1`.`CompositeKeySkipSharedKey3`, `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId` + FROM `EntityCompositeKeyEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`TwoSkipSharedId` = `e2`.`Id` + ) AS `s` ON `e0`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e0`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e0`.`Key3` = `s`.`CompositeKeySkipSharedKey3` + WHERE `e0`.`Key1` < 5 +) AS `s0` ON `e`.`Id` = `s0`.`LeafId` +WHERE `e`.`Discriminator` = 'EntityLeaf' +ORDER BY `e`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[ThreeId], [t1].[TwoId0], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[ThreeId], [t1].[TwoId0], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0] +FROM [EntityOnes] AS [e] +LEFT JOIN ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[ThreeId], [t].[TwoId], [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[TwoId] + WHERE [e0].[Id] < 10 +) AS [t1] ON [e].[Id] = [t1].[OneId] +ORDER BY [e].[Id], [t1].[OneId], [t1].[TwoId], [t1].[Id], [t1].[TwoId0], [t1].[Id0] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined(bool async) + { + await base.Filter_include_on_skip_navigation_combined(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId], [t3].[OneId], [t3].[ThreeId], [t3].[Payload], [t3].[Id], [t3].[Name], [t3].[OneId0], [t3].[TwoId], [t3].[JoinOneToTwoExtraId], [t3].[Id0], [t3].[CollectionInverseId], [t3].[ExtraId], [t3].[Name0], [t3].[ReferenceInverseId], [t3].[EntityBranchId], [t3].[EntityOneId], [t3].[Id1], [t3].[Discriminator], [t3].[Name1], [t3].[Number], [t3].[IsGreen] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [j].[Payload], [e0].[Id], [e0].[Name], [t0].[OneId] AS [OneId0], [t0].[TwoId], [t0].[JoinOneToTwoExtraId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId], [t1].[EntityBranchId], [t1].[EntityOneId], [t1].[Id] AS [Id1], [t1].[Discriminator], [t1].[Name] AS [Name1], [t1].[Number], [t1].[IsGreen] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j0].[OneId], [j0].[TwoId], [j0].[JoinOneToTwoExtraId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[OneId] + LEFT JOIN ( + SELECT [j1].[EntityBranchId], [j1].[EntityOneId], [t2].[Id], [t2].[Discriminator], [t2].[Name], [t2].[Number], [t2].[IsGreen] + FROM [JoinOneToBranch] AS [j1] + INNER JOIN ( + SELECT [e2].[Id], [e2].[Discriminator], [e2].[Name], [e2].[Number], [e2].[IsGreen] + FROM [EntityRoots] AS [e2] + WHERE [e2].[Discriminator] IN (N'EntityBranch', N'EntityLeaf') + ) AS [t2] ON [j1].[EntityBranchId] = [t2].[Id] + WHERE [t2].[Id] < 20 + ) AS [t1] ON [e0].[Id] = [t1].[EntityOneId] + WHERE [e0].[Id] < 10 +) AS [t3] ON [e].[Id] = [t3].[ThreeId] +ORDER BY [e].[Id], [t3].[OneId], [t3].[ThreeId], [t3].[Id], [t3].[OneId0], [t3].[Id0], [t3].[TwoId], [t3].[EntityBranchId], [t3].[EntityOneId] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`ThreeId`, `s0`.`TwoId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM `EntityTwos` AS `e0` + LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` + WHERE `e0`.`Id` > 15 +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` +"""); + } + + public override async Task Includes_accessed_via_different_path_are_merged(bool async) + { + await base.Includes_accessed_via_different_path_are_merged(async); + + AssertSql(" "); + } + + public override async Task Filtered_includes_accessed_via_different_path_are_merged(bool async) + { + await base.Filtered_includes_accessed_via_different_path_are_merged(async); + + AssertSql(" "); + } + + public override async Task Include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`Slumber`, `e1`.`IsGreen`, `e1`.`IsBrown` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_split(bool async) + { + await base.Include_skip_navigation_then_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` = 'EntityLeaf' + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +""", + // + """ +SELECT `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id`, `s0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +FROM (`EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e1`.`Id` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `e0`.`Id` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` = 'EntityLeaf' + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3`) +LEFT JOIN ( + SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`EntityOneId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id`, `e1`.`Id` AS `Id0` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Include_skip_navigation_and_reference_split(bool async) + { + await base.Include_skip_navigation_and_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` +ORDER BY `e`.`Id`, `e0`.`Id` +""", + // + """ +SELECT `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +INNER JOIN ( + SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[SelfSkipSharedLeftId], [t0].[SelfSkipSharedRightId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id] +FROM [EntityTwos] AS [e] +INNER JOIN ( + SELECT [t].[SelfSkipSharedLeftId], [t].[SelfSkipSharedRightId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[SelfSkipSharedLeftId], [e0].[SelfSkipSharedRightId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e0].[Id] AS [Id0], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_then_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`Slumber`, `e`.`IsGreen`, `e`.`IsBrown` +FROM `EntityRoots` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityRoots` AS `e` +INNER JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +""", + // + """ +SELECT `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +FROM (`EntityRoots` AS `e` +INNER JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `e1`.`Id` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId`) +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e2` ON `j`.`OneId` = `e2`.`Id` + WHERE `e2`.`Id` < 10 +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Discriminator], [e].[Name], [e].[Number], [e].[Slumber], [e].[IsGreen], [e].[IsBrown] +FROM [EntityRoots] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [e].[Id] +FROM [EntityRoots] AS [e] +INNER JOIN ( + SELECT [e0].[RootSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Key1], [e1].[Key2], [e1].[Key3], [e1].[Name] + FROM [EntityCompositeKeyEntityRoot] AS [e0] + INNER JOIN [EntityCompositeKeys] AS [e1] ON [e0].[CompositeKeySkipSharedKey1] = [e1].[Key1] AND [e0].[CompositeKeySkipSharedKey2] = [e1].[Key2] AND [e0].[CompositeKeySkipSharedKey3] = [e1].[Key3] +) AS [t] ON [e].[Id] = [t].[RootSkipSharedId] +ORDER BY [e].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3] +FROM [EntityRoots] AS [e] +INNER JOIN ( + SELECT [e0].[RootSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Key1], [e1].[Key2], [e1].[Key3] + FROM [EntityCompositeKeyEntityRoot] AS [e0] + INNER JOIN [EntityCompositeKeys] AS [e1] ON [e0].[CompositeKeySkipSharedKey1] = [e1].[Key1] AND [e0].[CompositeKeySkipSharedKey2] = [e1].[Key2] AND [e0].[CompositeKeySkipSharedKey3] = [e1].[Key3] +) AS [t] ON [e].[Id] = [t].[RootSkipSharedId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[ThreeId], [t1].[Id0], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e2].[Id] AS [Id0], [e2].[CollectionInverseId], [e2].[Name], [e2].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e2].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e2] ON [j].[ThreeId] = [e2].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Key1] = [t0].[CompositeId1] AND [t].[Key2] = [t0].[CompositeId2] AND [t].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen` +FROM `EntityRoots` AS `e` +WHERE `e`.`Discriminator` = 'EntityLeaf' +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `e`.`Id` +FROM `EntityRoots` AS `e` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` + WHERE `e0`.`Key1` < 5 +) AS `s` ON `e`.`Id` = `s`.`LeafId` +WHERE `e`.`Discriminator` = 'EntityLeaf' +ORDER BY `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +""", + // + """ +SELECT `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +FROM (`EntityRoots` AS `e` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` + WHERE `e0`.`Key1` < 5 +) AS `s` ON `e`.`Id` = `s`.`LeafId`) +LEFT JOIN ( + SELECT `e1`.`TwoSkipSharedId`, `e1`.`CompositeKeySkipSharedKey1`, `e1`.`CompositeKeySkipSharedKey2`, `e1`.`CompositeKeySkipSharedKey3`, `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId` + FROM `EntityCompositeKeyEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`TwoSkipSharedId` = `e2`.`Id` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE (`e`.`Discriminator` = 'EntityLeaf') AND (`s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL) +ORDER BY `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[OneId], [t0].[TwoId], [t0].[JoinOneToTwoExtraId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +""", +// +""" +SELECT [t1].[ThreeId], [t1].[TwoId], [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [e].[Id], [t0].[OneId], [t0].[TwoId], [t0].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[OneId], [t].[TwoId], [t].[Id] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [e0].[Id], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +INNER JOIN ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 +) AS [t1] ON [t0].[Id] = [t1].[TwoId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [e].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +""", +// +""" +SELECT [t0].[ThreeId], [t0].[TwoId], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[TwoId], [e0].[Id] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +INNER JOIN ( + SELECT [t1].[ThreeId], [t1].[TwoId], [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId] + FROM ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[TwoId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id], [t0].[TwoId], [t0].[Id] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityTwos` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `e0`.`Id`, `e1`.`Id` AS `Id0` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[OneId], [t].[ThreeId], [t].[Payload], [t].[Id], [t].[Name], [e].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [j].[Payload], [e0].[Id], [e0].[Name] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +""", +// +""" +SELECT [t0].[OneId], [t0].[TwoId], [t0].[JoinOneToTwoExtraId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [e0].[Id] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId] + FROM ( + SELECT [j0].[OneId], [j0].[TwoId], [j0].[JoinOneToTwoExtraId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id], [t0].[OneId], [t0].[Id] +""", +// +""" +SELECT [t0].[EntityBranchId], [t0].[EntityOneId], [t0].[Id], [t0].[Discriminator], [t0].[Name], [t0].[Number], [t0].[IsGreen], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [e0].[Id] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [j0].[EntityBranchId], [j0].[EntityOneId], [t1].[Id], [t1].[Discriminator], [t1].[Name], [t1].[Number], [t1].[IsGreen] + FROM [JoinOneToBranch] AS [j0] + INNER JOIN ( + SELECT [e1].[Id], [e1].[Discriminator], [e1].[Name], [e1].[Number], [e1].[IsGreen] + FROM [EntityRoots] AS [e1] + WHERE [e1].[Discriminator] IN (N'EntityBranch', N'EntityLeaf') + ) AS [t1] ON [j0].[EntityBranchId] = [t1].[Id] + WHERE [t1].[Id] < 20 +) AS [t0] ON [t].[Id] = [t0].[EntityOneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` +""", + // + """ +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` +"""); + } + + public override async Task Select_many_over_skip_navigation_where_non_equality(bool async) + { + await base.Select_many_over_skip_navigation_where_non_equality(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0`, `e0`.`Id` AS `Id0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` AND `e`.`Id` <> `s`.`Id0` +"""); + } + + public override async Task Contains_on_skip_collection_navigation(bool async) + { + await base.Contains_on_skip_collection_navigation(async); + + AssertSql( + """ +@entity_equality_two_Id='1' (Nullable = true) + +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = @entity_equality_two_Id) +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/MappingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/MappingQueryLibRedTest.cs new file mode 100644 index 00000000..1ea9dd3c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/MappingQueryLibRedTest.cs @@ -0,0 +1,89 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class MappingQueryLibRedTest : MappingQueryTestBase + { + public override void All_customers() + { + base.All_customers(); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`CompanyName` + FROM `Customers` AS `c` + """); + } + + public override void All_employees() + { + base.All_employees(); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City` + FROM `Employees` AS `e` + """); + } + + public override void All_orders() + { + base.All_orders(); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`ShipVia` + FROM `Orders` AS `o` + """); + } + + public override void Project_nullable_enum() + { + base.Project_nullable_enum(); + + AssertSql( + $""" + SELECT `o`.`ShipVia` + FROM `Orders` AS `o` + """); + } + + public MappingQueryLibRedTest(MappingQueryLibRedFixture fixture) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class MappingQueryLibRedFixture : MappingQueryFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedNorthwindTestStoreFactory.Instance; + + protected override string DatabaseSchema { get; } = "dbo"; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity( + e => + { + e.Property(c => c.CompanyName2).Metadata.SetColumnName("CompanyName"); + e.Metadata.SetTableName("Customers"); + e.Metadata.SetSchema(null); + }); + + modelBuilder.Entity() + .Property(c => c.EmployeeID) + .HasColumnType("int"); + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NavigationTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NavigationTest.cs new file mode 100644 index 00000000..a31cf029 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NavigationTest.cs @@ -0,0 +1,106 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NavigationTest(NavigationTestFixture fixture) : IClassFixture + { + [ConditionalFact] + public void Duplicate_entries_are_not_created_for_navigations_to_principal() + { + using var context = fixture.CreateContext(); + context.ConfigAction = modelBuilder => + { + modelBuilder.Entity().HasMany(p => p.Siblings).WithOne(p => p.SiblingReverse).IsRequired(false); + modelBuilder.Entity().HasOne(p => p.Lover).WithOne(p => p.LoverReverse).IsRequired(false); + return 0; + }; + + var model = context.Model; + var entityType = model.GetEntityTypes().First(); + + Assert.Equal( + "ForeignKey: GoTPerson {'LoverId'} -> GoTPerson {'Id'} Unique ClientSetNull ToDependent: LoverReverse ToPrincipal: Lover", + entityType.GetForeignKeys().First().ToString()); + + Assert.Equal( + "ForeignKey: GoTPerson {'SiblingReverseId'} -> GoTPerson {'Id'} ClientSetNull ToDependent: Siblings ToPrincipal: SiblingReverse", + entityType.GetForeignKeys().Skip(1).First().ToString()); + } + + [ConditionalFact] + public void Duplicate_entries_are_not_created_for_navigations_to_dependent() + { + using var context = fixture.CreateContext(); + context.ConfigAction = modelBuilder => + { + modelBuilder.Entity().HasOne(p => p.SiblingReverse).WithMany(p => p.Siblings).IsRequired(false); + modelBuilder.Entity().HasOne(p => p.Lover).WithOne(p => p.LoverReverse).IsRequired(false); + return 0; + }; + + var model = context.Model; + var entityType = model.GetEntityTypes().First(); + + Assert.Equal( + "ForeignKey: GoTPerson {'LoverId'} -> GoTPerson {'Id'} Unique ClientSetNull ToDependent: LoverReverse ToPrincipal: Lover", + entityType.GetForeignKeys().First().ToString()); + + Assert.Equal( + "ForeignKey: GoTPerson {'SiblingReverseId'} -> GoTPerson {'Id'} ClientSetNull ToDependent: Siblings ToPrincipal: SiblingReverse", + entityType.GetForeignKeys().Skip(1).First().ToString()); + } + } + + public class GoTPerson + { + public int Id { get; set; } + public string Name { get; set; } + + public List Siblings { get; set; } + public GoTPerson Lover { get; set; } + public GoTPerson LoverReverse { get; set; } + public GoTPerson SiblingReverse { get; set; } + } + + public class GoTContext(DbContextOptions options) : DbContext(options) + { + public DbSet People { get; set; } + public Func ConfigAction { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) => ConfigAction.Invoke(modelBuilder); + } + + public class NavigationTestFixture + { + private readonly DbContextOptions _options; + + public NavigationTestFixture() + { + var serviceProvider = new ServiceCollection() + .AddEntityFrameworkLibRed() + .BuildServiceProvider(validateScopes: true); + + var dataAccessProviderFactory = LibRedFactory.GetDataAccessProviderFactory(); + var connectionStringBuilder = (LibRedConnectionStringBuilder)dataAccessProviderFactory.CreateConnectionStringBuilder()!; + connectionStringBuilder.ConnectionString = TestEnvironment.DefaultConnection; + connectionStringBuilder.DataSource = "StateManagerBug.accdb"; + + _options = new DbContextOptionsBuilder() + .UseLibRed(connectionStringBuilder.ConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(serviceProvider) + .Options; + } + + public virtual GoTContext CreateContext() => new(_options); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindAggregateOperatorsQueryLibRedTest.ResultOperators.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindAggregateOperatorsQueryLibRedTest.ResultOperators.cs new file mode 100644 index 00000000..2ecced0f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindAggregateOperatorsQueryLibRedTest.ResultOperators.cs @@ -0,0 +1,3088 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindAggregateOperatorsQueryLibRedTest : NorthwindAggregateOperatorsQueryRelationalTestBase< + NorthwindQueryLibRedFixture> + { + public NorthwindAggregateOperatorsQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + ClearLog(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Last_when_no_order_by(bool async) + { + await base.Last_when_no_order_by(async); + + AssertSql(); + } + + public override async Task LastOrDefault_when_no_order_by(bool async) + { + await base.LastOrDefault_when_no_order_by(async); + + AssertSql(); + } + + public override async Task Contains_with_local_tuple_array_closure(bool async) + => await AssertTranslationFailed(() => base.Contains_with_local_tuple_array_closure(async)); + + public override async Task Array_cast_to_IEnumerable_Contains_with_constant(bool async) + { + await base.Array_cast_to_IEnumerable_Contains_with_constant(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN ('ALFKI', 'WRONG') +"""); + } + + public override async Task Contains_over_keyless_entity_throws(bool async) + { + await base.Contains_over_keyless_entity_throws(async); + + AssertSql( + """ +SELECT TOP 1 `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle` +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +) AS `m` +"""); + } + + public override async Task Enumerable_min_is_mapped_to_Queryable_1(bool async) + { + await base.Enumerable_min_is_mapped_to_Queryable_1(async); + + AssertSql( + """ +SELECT ( + SELECT MIN(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +FROM `Customers` AS `c` +"""); + } + + public override async Task Enumerable_min_is_mapped_to_Queryable_2(bool async) + { + await base.Enumerable_min_is_mapped_to_Queryable_2(async); + + AssertSql( + """ +SELECT ( + SELECT MIN(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +FROM `Customers` AS `c` +"""); + } + + public override async Task Average_with_unmapped_property_access_throws_meaningful_exception(bool async) + { + await base.Average_with_unmapped_property_access_throws_meaningful_exception(async); + + AssertSql(); + } + + public override async Task Sum_over_empty_returns_zero(bool async) + { + await base.Sum_over_empty_returns_zero(async); + + AssertSql( + """ +SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 42 +"""); + } + + public override async Task Average_over_default_returns_default(bool async) + { + await base.Average_over_default_returns_default(async); + + AssertSql( + """ +SELECT AVG(CDBL(`o`.`OrderID` - 10248)) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10248 +"""); + } + + public override async Task Max_over_default_returns_default(bool async) + { + await base.Max_over_default_returns_default(async); + + AssertSql( + """ +SELECT MAX(`o`.`OrderID` - 10248) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10248 +"""); + } + + public override async Task Min_over_default_returns_default(bool async) + { + await base.Min_over_default_returns_default(async); + + AssertSql( + """ +SELECT MIN(`o`.`OrderID` - 10248) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10248 +"""); + } + + public override async Task Average_after_DefaultIfEmpty_does_not_throw(bool async) + { + await base.Average_after_DefaultIfEmpty_does_not_throw(async); + + AssertSql( + """ +SELECT AVG(CDBL(IIF(`o0`.`OrderID` IS NULL, 0, `o0`.`OrderID`))) +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10243 +) AS `o0` ON TRUE +"""); + } + + public override async Task Max_after_DefaultIfEmpty_does_not_throw(bool async) + { + await base.Max_after_DefaultIfEmpty_does_not_throw(async); + + AssertSql( + """ +SELECT MAX(IIF(`o0`.`OrderID` IS NULL, 0, `o0`.`OrderID`)) +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10243 +) AS `o0` ON TRUE +"""); + } + + public override async Task Min_after_DefaultIfEmpty_does_not_throw(bool async) + { + await base.Min_after_DefaultIfEmpty_does_not_throw(async); + + AssertSql( + """ +SELECT MIN(IIF(`o0`.`OrderID` IS NULL, 0, `o0`.`OrderID`)) +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10243 +) AS `o0` ON TRUE +"""); + } + + public override async Task Sum_with_no_data_cast_to_nullable(bool async) + { + await base.Sum_with_no_data_cast_to_nullable(async); + + AssertSql( + """ +SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 0 +"""); + } + + public override async Task Sum_with_no_data_nullable(bool async) + { + await base.Sum_with_no_data_nullable(async); + + AssertSql( + """ +SELECT IIF(SUM(`p`.`SupplierID`) IS NULL, 0, SUM(`p`.`SupplierID`)) +FROM `Products` AS `p` +"""); + } + + public override async Task Sum_with_no_arg_empty(bool async) + { + await base.Sum_with_no_arg_empty(async); + + AssertSql( + """ +SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 42 +"""); + } + + public override async Task Min_no_data(bool async) + { + await base.Min_no_data(async); + + AssertSql( + """ +SELECT MIN(`o`.`OrderID`) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Min_no_data_nullable(bool async) + { + await base.Min_no_data_nullable(async); + + AssertSql( + """ +SELECT MIN(`p`.`SupplierID`) +FROM `Products` AS `p` +WHERE `p`.`SupplierID` = -1 +"""); + } + + public override async Task Min_no_data_cast_to_nullable(bool async) + { + await base.Min_no_data_cast_to_nullable(async); + + AssertSql( + """ +SELECT MIN(`o`.`OrderID`) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Min_no_data_subquery(bool async) + { + await base.Min_no_data_subquery(async); + + AssertSql( + """ +SELECT ( + SELECT MIN(`o`.`OrderID`) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` = -1) +FROM `Customers` AS `c` +"""); + } + + public override async Task Max_no_data(bool async) + { + await base.Max_no_data(async); + + AssertSql( + """ +SELECT MAX(`o`.`OrderID`) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Max_no_data_nullable(bool async) + { + await base.Max_no_data_nullable(async); + + AssertSql( + """ +SELECT MAX(`p`.`SupplierID`) +FROM `Products` AS `p` +WHERE `p`.`SupplierID` = -1 +"""); + } + + public override async Task Max_no_data_cast_to_nullable(bool async) + { + await base.Max_no_data_cast_to_nullable(async); + + AssertSql( + """ +SELECT MAX(`o`.`OrderID`) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Max_no_data_subquery(bool async) + { + await base.Max_no_data_subquery(async); + + AssertSql( + """ +SELECT ( + SELECT MAX(`o`.`OrderID`) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` = -1) +FROM `Customers` AS `c` +"""); + } + + private static readonly IEnumerable StaticIds = new List { "ALFKI", "ANATR" }; + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Contains_with_static_IList(bool async) + { + await AssertQuery( + async, + ss => ss.Set().Where(c => StaticIds.Contains(c.CustomerID))); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN ('ALFKI', 'ANATR') +"""); + } + + public override async Task Average_no_data(bool async) + { + await base.Average_no_data(async); + + AssertSql( + """ +SELECT AVG(CDBL(`o`.`OrderID`)) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Average_no_data_nullable(bool async) + { + await base.Average_no_data_nullable(async); + + AssertSql( + """ +SELECT AVG(IIF(`p`.`SupplierID` IS NULL, NULL, CDBL(`p`.`SupplierID`))) +FROM `Products` AS `p` +WHERE `p`.`SupplierID` = -1 +"""); + } + + public override async Task Average_no_data_cast_to_nullable(bool async) + { + await base.Average_no_data_cast_to_nullable(async); + + AssertSql( + """ +SELECT AVG(CDBL(`o`.`OrderID`)) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Average_no_data_subquery(bool async) + { + await base.Average_no_data_subquery(async); + + AssertSql( + """ +SELECT ( + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` = -1) +FROM `Customers` AS `c` +"""); + } + + public override async Task Count_with_no_predicate(bool async) + { + await base.Count_with_no_predicate(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +"""); + } + + public override async Task Count_with_order_by(bool async) + { + await base.Count_with_order_by(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +"""); + } + + public override async Task Where_OrderBy_Count_client_eval(bool async) + { + await base.Where_OrderBy_Count_client_eval(async); + + AssertSql(); + } + + public override async Task OrderBy_Where_Count_client_eval(bool async) + { + await base.OrderBy_Where_Count_client_eval(async); + + AssertSql(); + } + + public override async Task OrderBy_Where_Count_client_eval_mixed(bool async) + { + await base.OrderBy_Where_Count_client_eval_mixed(async); + + AssertSql(); + } + + public override async Task OrderBy_Count_with_predicate_client_eval(bool async) + { + await base.OrderBy_Count_with_predicate_client_eval(async); + + AssertSql(); + } + + public override async Task OrderBy_Count_with_predicate_client_eval_mixed(bool async) + { + await base.OrderBy_Count_with_predicate_client_eval_mixed(async); + + AssertSql(); + } + + public override async Task OrderBy_Where_Count_with_predicate_client_eval(bool async) + { + await base.OrderBy_Where_Count_with_predicate_client_eval(async); + + AssertSql(); + } + + public override async Task OrderBy_Where_Count_with_predicate_client_eval_mixed(bool async) + { + await base.OrderBy_Where_Count_with_predicate_client_eval_mixed(async); + + AssertSql(); + } + + public override async Task OrderBy_client_Take(bool async) + { + await base.OrderBy_client_Take(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +ORDER BY 1 +"""); + } + + public override async Task Single_Throws(bool async) + { + await base.Single_Throws(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Where_Single(bool async) + { + await base.Where_Single(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task SingleOrDefault_Throws(bool async) + { + await base.SingleOrDefault_Throws(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task SingleOrDefault_Predicate(bool async) + { + await base.SingleOrDefault_Predicate(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Where_SingleOrDefault(bool async) + { + await base.Where_SingleOrDefault(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task First(bool async) + { + await base.First(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`ContactName` +"""); + } + + public override async Task First_Predicate(bool async) + { + await base.First_Predicate(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'London' +ORDER BY `c`.`ContactName` +"""); + } + + public override async Task Where_First(bool async) + { + await base.Where_First(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'London' +ORDER BY `c`.`ContactName` +"""); + } + + public override async Task FirstOrDefault(bool async) + { + await base.FirstOrDefault(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`ContactName` +"""); + } + + public override async Task FirstOrDefault_Predicate(bool async) + { + await base.FirstOrDefault_Predicate(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'London' +ORDER BY `c`.`ContactName` +"""); + } + + public override async Task Where_FirstOrDefault(bool async) + { + await base.Where_FirstOrDefault(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'London' +ORDER BY `c`.`ContactName` +"""); + } + + public override async Task Select_All(bool async) + { + await base.Select_All(async); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` <> 'ALFKI' OR `o`.`CustomerID` IS NULL) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Sum_with_no_arg(bool isAsync) + { + await base.Sum_with_no_arg(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) +FROM `Orders` AS `o` +"""); + } + + public override async Task Sum_with_binary_expression(bool isAsync) + { + await base.Sum_with_binary_expression(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o`.`OrderID` * 2) IS NULL, 0, SUM(`o`.`OrderID` * 2)) +FROM `Orders` AS `o` +"""); + } + + public override async Task Sum_with_arg(bool isAsync) + { + await base.Sum_with_arg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + """); + } + + public override async Task Sum_with_arg_expression(bool isAsync) + { + await base.Sum_with_arg_expression(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID` + `o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID` + `o`.`OrderID`)) + FROM `Orders` AS `o` + """); + } + + public override async Task Sum_with_division_on_decimal(bool isAsync) + { + await base.Sum_with_division_on_decimal(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(CDEC(`o`.`Quantity`) / 2.09) IS NULL, 0.0, SUM(CDEC(`o`.`Quantity`) / 2.09)) +FROM `Order Details` AS `o` +"""); + } + + public override async Task Sum_with_division_on_decimal_no_significant_digits(bool isAsync) + { + await base.Sum_with_division_on_decimal_no_significant_digits(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(CDEC(`o`.`Quantity`) / 2.0) IS NULL, 0.0, SUM(CDEC(`o`.`Quantity`) / 2.0)) +FROM `Order Details` AS `o` +"""); + } + + public override async Task Sum_with_coalesce(bool isAsync) + { + await base.Sum_with_coalesce(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`)) IS NULL, 0.0, SUM(IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`))) + FROM `Products` AS `p` + WHERE `p`.`ProductID` < 40 + """); + } + + public override async Task Sum_over_subquery(bool isAsync) + { + await base.Sum_over_subquery(isAsync); + + AssertSql( +""" +SELECT IIF(SUM(( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`)) IS NULL, 0, SUM(( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`))) +FROM `Customers` AS `c` +"""); + } + + public override async Task Sum_over_nested_subquery(bool isAsync) + { + await base.Sum_over_nested_subquery(isAsync); + AssertSql( +""" +SELECT IIF(SUM(( + SELECT IIF(SUM(5 + ( + SELECT IIF(SUM(`o0`.`ProductID`) IS NULL, 0, SUM(`o0`.`ProductID`)) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) IS NULL, 0, SUM(5 + ( + SELECT IIF(SUM(`o0`.`ProductID`) IS NULL, 0, SUM(`o0`.`ProductID`)) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`))) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`)) IS NULL, 0, SUM(( + SELECT IIF(SUM(5 + ( + SELECT IIF(SUM(`o0`.`ProductID`) IS NULL, 0, SUM(`o0`.`ProductID`)) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) IS NULL, 0, SUM(5 + ( + SELECT IIF(SUM(`o0`.`ProductID`) IS NULL, 0, SUM(`o0`.`ProductID`)) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`))) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`))) +FROM `Customers` AS `c` +"""); + } + + public override async Task Sum_over_min_subquery(bool isAsync) + { + await base.Sum_over_min_subquery(isAsync); + AssertSql( +""" +SELECT IIF(SUM(( + SELECT IIF(SUM(5 + ( + SELECT MIN(`o0`.`ProductID`) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) IS NULL, 0, SUM(5 + ( + SELECT MIN(`o0`.`ProductID`) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`))) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`)) IS NULL, 0, SUM(( + SELECT IIF(SUM(5 + ( + SELECT MIN(`o0`.`ProductID`) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) IS NULL, 0, SUM(5 + ( + SELECT MIN(`o0`.`ProductID`) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`))) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`))) +FROM `Customers` AS `c` +"""); + } + + public override async Task Sum_over_scalar_returning_subquery(bool async) + { + await base.Sum_over_scalar_returning_subquery(async); + + AssertSql( + """ +SELECT IIF(SUM(( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`)) IS NULL, 0, SUM(( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`))) +FROM `Customers` AS `c` +"""); + } + + public override async Task Sum_over_Any_subquery(bool async) + { + await base.Sum_over_Any_subquery(async); + + AssertSql( + """ +SELECT IIF(SUM(IIF(EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`), ( + SELECT TOP 1 `o0`.`OrderID` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`), 0)) IS NULL, 0, SUM(IIF(EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`), ( + SELECT TOP 1 `o0`.`OrderID` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`), 0))) +FROM `Customers` AS `c` +"""); + } + + public override async Task Sum_over_uncorrelated_subquery(bool async) + { + await base.Sum_over_uncorrelated_subquery(async); + + AssertSql( + """ +SELECT IIF(SUM(( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 10300)) IS NULL, 0, SUM(( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 10300))) +FROM `Customers` AS `c` +"""); + } + + public override async Task Sum_on_float_column(bool isAsync) + { + await base.Sum_on_float_column(isAsync); + + AssertSql( + $""" + SELECT CSNG(IIF(SUM(`o`.`Discount`) IS NULL, 0.0, SUM(`o`.`Discount`))) + FROM `Order Details` AS `o` + WHERE `o`.`ProductID` = 1 + """); + } + + public override async Task Sum_on_float_column_in_subquery(bool isAsync) + { + await base.Sum_on_float_column_in_subquery(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, ( + SELECT CSNG(IIF(SUM(`o0`.`Discount`) IS NULL, 0.0, SUM(`o0`.`Discount`))) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `Sum` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + """); + } + + public override async Task Average_with_no_arg(bool isAsync) + { + await base.Average_with_no_arg(isAsync); + + AssertSql( + $""" + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + """); + } + + public override async Task Average_with_binary_expression(bool isAsync) + { + await base.Average_with_binary_expression(isAsync); + + AssertSql( + $""" + SELECT AVG(CDBL(`o`.`OrderID` * 2)) + FROM `Orders` AS `o` + """); + } + + public override async Task Average_with_arg(bool isAsync) + { + await base.Average_with_arg(isAsync); + + AssertSql( + $""" + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + """); + } + + public override async Task Average_with_arg_expression(bool isAsync) + { + await base.Average_with_arg_expression(isAsync); + + AssertSql( + $""" + SELECT AVG(CDBL(`o`.`OrderID` + `o`.`OrderID`)) + FROM `Orders` AS `o` + """); + } + + public override async Task Average_with_division_on_decimal(bool isAsync) + { + await base.Average_with_division_on_decimal(isAsync); + + AssertSql( + """ +SELECT AVG(CDEC(`o`.`Quantity`) / 2.09) +FROM `Order Details` AS `o` +"""); + } + + public override async Task Average_with_division_on_decimal_no_significant_digits(bool isAsync) + { + await base.Average_with_division_on_decimal_no_significant_digits(isAsync); + + AssertSql( + """ +SELECT AVG(CDEC(`o`.`Quantity`) / 2.0) +FROM `Order Details` AS `o` +"""); + } + + public override async Task Average_with_coalesce(bool isAsync) + { + await base.Average_with_coalesce(isAsync); + + AssertSql( + $""" + SELECT AVG(IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`)) + FROM `Products` AS `p` + WHERE `p`.`ProductID` < 40 + """); + } + + public override async Task Average_over_subquery(bool isAsync) + { + await base.Average_over_subquery(isAsync); + + AssertSql( + """ + SELECT AVG(IIF(( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) IS NULL, NULL, CDBL(( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`)))) + FROM `Customers` AS `c` + """); + } + + public override async Task Average_over_nested_subquery(bool isAsync) + { + await base.Average_over_nested_subquery(isAsync); + AssertSql( + """ +@p='3' + +SELECT AVG(IIF(( + SELECT AVG(5.0 + ( + SELECT AVG(CDBL(`o0`.`ProductID`)) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c0`.`CustomerID` = `o`.`CustomerID`) IS NULL, NULL, CDEC(( + SELECT AVG(5.0 + ( + SELECT AVG(CDBL(`o0`.`ProductID`)) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)))) +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +"""); + } + + public override async Task Average_over_max_subquery(bool isAsync) + { + await base.Average_over_max_subquery(isAsync); + AssertSql( + """ +@p='3' + +SELECT AVG(IIF(( + SELECT AVG(CDBL(5 + ( + SELECT MAX(`o0`.`ProductID`) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`))) + FROM `Orders` AS `o` + WHERE `c0`.`CustomerID` = `o`.`CustomerID`) IS NULL, NULL, CDEC(( + SELECT AVG(CDBL(5 + ( + SELECT MAX(`o0`.`ProductID`) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`))) + FROM `Orders` AS `o` + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)))) +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +"""); + } + + public override async Task Average_on_float_column(bool isAsync) + { + await base.Average_on_float_column(isAsync); + + AssertSql( + $""" + SELECT CSNG(AVG(`o`.`Discount`)) + FROM `Order Details` AS `o` + WHERE `o`.`ProductID` = 1 + """); + } + + public override async Task Average_on_float_column_in_subquery(bool isAsync) + { + await base.Average_on_float_column_in_subquery(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, ( + SELECT CSNG(AVG(`o0`.`Discount`)) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `Sum` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + """); + } + + public override async Task Average_on_float_column_in_subquery_with_cast(bool isAsync) + { + await base.Average_on_float_column_in_subquery_with_cast(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, ( + SELECT CSNG(AVG(`o0`.`Discount`)) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `Sum` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + """); + } + + public override async Task Min_with_no_arg(bool isAsync) + { + await base.Min_with_no_arg(isAsync); + + AssertSql( + $""" + SELECT MIN(`o`.`OrderID`) + FROM `Orders` AS `o` + """); + } + + public override async Task Min_with_arg(bool isAsync) + { + await base.Min_with_arg(isAsync); + + AssertSql( + $""" + SELECT MIN(`o`.`OrderID`) + FROM `Orders` AS `o` + """); + } + + public override async Task Min_with_coalesce(bool isAsync) + { + await base.Min_with_coalesce(isAsync); + + AssertSql( + $""" + SELECT MIN(IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`)) + FROM `Products` AS `p` + WHERE `p`.`ProductID` < 40 + """); + } + + public override async Task Min_over_subquery(bool isAsync) + { + await base.Min_over_subquery(isAsync); + + AssertSql( +""" +SELECT MIN(( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`)) +FROM `Customers` AS `c` +"""); + } + + public override async Task Min_over_nested_subquery(bool isAsync) + { + await base.Min_over_nested_subquery(isAsync); + + AssertSql( + """ +@p='3' + +SELECT MIN(( + SELECT MIN(5 + ( + SELECT MIN(`o0`.`ProductID`) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)) +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +"""); + } + + public override async Task Min_over_max_subquery(bool isAsync) + { + await base.Min_over_max_subquery(isAsync); + + AssertSql( + """ +@p='3' + +SELECT MIN(( + SELECT MIN(5 + ( + SELECT MAX(`o0`.`ProductID`) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)) +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +"""); + } + + public override async Task Max_with_no_arg(bool isAsync) + { + await base.Max_with_no_arg(isAsync); + + AssertSql( + $""" + SELECT MAX(`o`.`OrderID`) + FROM `Orders` AS `o` + """); + } + + public override async Task Max_with_arg(bool isAsync) + { + await base.Max_with_arg(isAsync); + + AssertSql( + $""" + SELECT MAX(`o`.`OrderID`) + FROM `Orders` AS `o` + """); + } + + public override async Task Max_with_coalesce(bool isAsync) + { + await base.Max_with_coalesce(isAsync); + + AssertSql( + $""" + SELECT MAX(IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`)) + FROM `Products` AS `p` + WHERE `p`.`ProductID` < 40 + """); + } + + public override async Task Max_over_subquery(bool isAsync) + { + await base.Max_over_subquery(isAsync); + + AssertSql( +""" +SELECT MAX(( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`)) +FROM `Customers` AS `c` +"""); + } + + public override async Task Max_over_nested_subquery(bool isAsync) + { + await base.Max_over_nested_subquery(isAsync); + + AssertSql( + """ +@p='3' + +SELECT MAX(( + SELECT MAX(5 + ( + SELECT MAX(`o0`.`ProductID`) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)) +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +"""); + } + + public override async Task Max_over_sum_subquery(bool isAsync) + { + await base.Max_over_sum_subquery(isAsync); + + AssertSql( + """ +@p='3' + +SELECT MAX(( + SELECT MAX(5 + ( + SELECT IIF(SUM(`o0`.`ProductID`) IS NULL, 0, SUM(`o0`.`ProductID`)) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)) +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +"""); + } + + public override async Task Count_with_predicate(bool isAsync) + { + await base.Count_with_predicate(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Where_OrderBy_Count(bool isAsync) + { + await base.Where_OrderBy_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task OrderBy_Where_Count(bool isAsync) + { + await base.OrderBy_Where_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task OrderBy_Count_with_predicate(bool isAsync) + { + await base.OrderBy_Count_with_predicate(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task OrderBy_Where_Count_with_predicate(bool isAsync) + { + await base.OrderBy_Where_Count_with_predicate(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` > 10 AND (`o`.`CustomerID` <> 'ALFKI' OR `o`.`CustomerID` IS NULL) +"""); + } + + public override async Task Distinct(bool isAsync) + { + await base.Distinct(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Distinct_Scalar(bool isAsync) + { + await base.Distinct_Scalar(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `c`.`City` + FROM `Customers` AS `c` + """); + } + + public override async Task OrderBy_Distinct(bool isAsync) + { + await base.OrderBy_Distinct(isAsync); + + // Ordering not preserved by distinct when ordering columns not projected. + AssertSql( + $""" + SELECT DISTINCT `c`.`City` + FROM `Customers` AS `c` + """); + } + + public override async Task Distinct_OrderBy(bool isAsync) + { + await base.Distinct_OrderBy(isAsync); + + AssertSql( + """ +SELECT `c0`.`Country` +FROM ( + SELECT DISTINCT `c`.`Country` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`Country` +"""); + } + + public override async Task Distinct_OrderBy2(bool isAsync) + { + await base.Distinct_OrderBy2(isAsync); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Distinct_OrderBy3(bool isAsync) + { + await base.Distinct_OrderBy3(isAsync); + + AssertSql( + """ +SELECT `c0`.`CustomerID` +FROM ( + SELECT DISTINCT `c`.`CustomerID` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Distinct_Count(bool isAsync) + { + await base.Distinct_Count(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +"""); + } + + public override async Task Select_Select_Distinct_Count(bool isAsync) + { + await base.Select_Select_Distinct_Count(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `c`.`City` + FROM `Customers` AS `c` +) AS `c0` +"""); + } + + public override async Task Single_Predicate(bool isAsync) + { + await base.Single_Predicate(isAsync); + + AssertSql( + $""" + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task FirstOrDefault_inside_subquery_gets_server_evaluated(bool isAsync) + { + await base.FirstOrDefault_inside_subquery_gets_server_evaluated(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + //FROM `Customers` AS `c` + //WHERE (`c`.`CustomerID` = 'ALFKI') AND (( + // SELECT TOP 1 `o`.`CustomerID` + // FROM `Orders` AS `o` + // WHERE (`c`.`CustomerID` = `o`.`CustomerID`) AND (`o`.`CustomerID` = 'ALFKI') + //) = 'ALFKI')"); + } + + public override async Task Multiple_collection_navigation_with_FirstOrDefault_chained(bool isAsync) + { + await base.Multiple_collection_navigation_with_FirstOrDefault_chained(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_CustomerID='ALFKI' (Size = 5)")} + + SELECT TOP 1 `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` + FROM `Order Details` AS `od` + WHERE `od`.`OrderID` = COALESCE(( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE {AssertSqlHelper.Parameter("@_outer_CustomerID")} = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + ), 0) + ORDER BY `od`.`ProductID` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_CustomerID='ANATR' (Size = 5)")} + + SELECT TOP 1 `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` + FROM `Order Details` AS `od` + WHERE `od`.`OrderID` = COALESCE(( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE {AssertSqlHelper.Parameter("@_outer_CustomerID")} = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + ), 0) + ORDER BY `od`.`ProductID` + """); + } + + public override async Task Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(bool isAsync) + { + await base.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT ( + // SELECT TOP 1 `od`.`ProductID` + // FROM `Order Details` AS `od` + // WHERE `od`.`OrderID` = COALESCE(( + // SELECT TOP 1 `o`.`OrderID` + // FROM `Orders` AS `o` + // WHERE `c`.`CustomerID` = `o`.`CustomerID` + // ORDER BY `o`.`OrderID` + // ), 0) + // ORDER BY `od`.`ProductID` + //) + //FROM `Customers` AS `c` + //ORDER BY `c`.`CustomerID`"); + } + + public override async Task First_inside_subquery_gets_client_evaluated(bool isAsync) + { + await base.First_inside_subquery_gets_client_evaluated(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' AND ( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`CustomerID` = 'ALFKI') = 'ALFKI' + """); + } + + public override async Task Last(bool isAsync) + { + await base.Last(isAsync); + + AssertSql( + $""" + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` DESC + """); + } + + public override async Task Last_Predicate(bool isAsync) + { + await base.Last_Predicate(isAsync); + + AssertSql( + $""" + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' + ORDER BY `c`.`ContactName` DESC + """); + } + + public override async Task Where_Last(bool isAsync) + { + await base.Where_Last(isAsync); + + AssertSql( + $""" + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' + ORDER BY `c`.`ContactName` DESC + """); + } + + public override async Task LastOrDefault(bool isAsync) + { + await base.LastOrDefault(isAsync); + + AssertSql( + $""" + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` DESC + """); + } + + public override async Task LastOrDefault_Predicate(bool isAsync) + { + await base.LastOrDefault_Predicate(isAsync); + + AssertSql( + $""" + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' + ORDER BY `c`.`ContactName` DESC + """); + } + + public override async Task Where_LastOrDefault(bool isAsync) + { + await base.Where_LastOrDefault(isAsync); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'London' +ORDER BY `c`.`ContactName` DESC +"""); + } + + public override async Task Contains_with_subquery(bool isAsync) + { + await base.Contains_with_subquery(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` +) +"""); + } + + public override async Task Contains_with_local_array_closure(bool isAsync) + { + await base.Contains_with_local_array_closure(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) +""", + // + """ +@ids1='ABCDE' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @ids1 +"""); + } + + public override async Task Contains_with_subquery_and_local_array_closure(bool isAsync) + { + await base.Contains_with_subquery_and_local_array_closure(isAsync); + + AssertSql( + """ +@ids1='London' (Size = 15) +@ids2='Buenos Aires' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE `c0`.`City` IN (@ids1, @ids2) AND `c0`.`CustomerID` = `c`.`CustomerID`) +""", + // + """ +@ids1='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE `c0`.`City` = @ids1 AND `c0`.`CustomerID` = `c`.`CustomerID`) +"""); + } + + public override async Task Contains_with_local_uint_array_closure(bool isAsync) + { + await base.Contains_with_local_uint_array_closure(isAsync); + + AssertSql( + """ +@ids1='0' +@ids2='1' + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`EmployeeID` IN (@ids1, @ids2) +""", + // + """ +@ids1='0' + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`EmployeeID` = @ids1 +"""); + } + + public override async Task Contains_with_local_nullable_uint_array_closure(bool async) + { + await base.Contains_with_local_nullable_uint_array_closure(async); + + AssertSql( + """ +@ids1='0' +@ids2='1' + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`EmployeeID` IN (@ids1, @ids2) +""", + // + """ +@ids1='0' + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`EmployeeID` = @ids1 +"""); + } + + public override async Task Contains_with_local_array_inline(bool isAsync) + { + await base.Contains_with_local_array_inline(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` IN ('ABCDE', 'ALFKI') + """); + } + + public override async Task Contains_with_local_list_closure(bool isAsync) + { + await base.Contains_with_local_list_closure(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) +"""); + } + + public override async Task Contains_with_local_object_list_closure(bool isAsync) + { + await base.Contains_with_local_object_list_closure(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) +"""); + } + + public override async Task Contains_with_local_list_closure_all_null(bool isAsync) + { + await base.Contains_with_local_list_closure_all_null(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Contains_with_local_list_inline(bool isAsync) + { + await base.Contains_with_local_list_inline(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` IN ('ABCDE', 'ALFKI') + """); + } + + public override async Task Contains_with_local_list_inline_closure_mix(bool isAsync) + { + await base.Contains_with_local_list_inline_closure_mix(isAsync); + + AssertSql( + """ +@p1='ABCDE' (Size = 5) +@p2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@p1, @p2) +""", + // + """ +@p1='ABCDE' (Size = 5) +@p2='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@p1, @p2) +"""); + } + + public override async Task Contains_with_local_non_primitive_list_inline_closure_mix(bool isAsync) + { + await base.Contains_with_local_non_primitive_list_inline_closure_mix(isAsync); + + AssertSql( + """ +@Select1='ABCDE' (Size = 5) +@Select2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@Select1, @Select2) +""", + // + """ +@Select1='ABCDE' (Size = 5) +@Select2='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@Select1, @Select2) +"""); + } + + public override async Task Contains_with_local_enumerable_closure(bool async) + { + await base.Contains_with_local_enumerable_closure(async); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) +""", + // + """ +@ids1='ABCDE' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @ids1 +"""); + } + + public override async Task Contains_with_local_object_enumerable_closure(bool async) + { + await base.Contains_with_local_object_enumerable_closure(async); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) +"""); + } + + public override async Task Contains_with_local_enumerable_closure_all_null(bool async) + { + await base.Contains_with_local_enumerable_closure_all_null(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Contains_with_local_enumerable_inline(bool async) + { + // Issue #31776 + await Assert.ThrowsAsync( + async () => + await base.Contains_with_local_enumerable_inline(async)); + + AssertSql(); + } + + public override async Task Contains_with_local_enumerable_inline_closure_mix(bool async) + { + // Issue #31776 + await Assert.ThrowsAsync( + async () => + await base.Contains_with_local_enumerable_inline_closure_mix(async)); + + AssertSql(); + } + + public override async Task Contains_with_local_ordered_enumerable_closure(bool async) + { + await base.Contains_with_local_ordered_enumerable_closure(async); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) +""", + // + """ +@ids1='ABCDE' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @ids1 +"""); + } + + public override async Task Contains_with_local_object_ordered_enumerable_closure(bool async) + { + await base.Contains_with_local_object_ordered_enumerable_closure(async); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) +"""); + } + + public override async Task Contains_with_local_ordered_enumerable_closure_all_null(bool async) + { + await base.Contains_with_local_ordered_enumerable_closure_all_null(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Contains_with_local_ordered_enumerable_inline(bool async) + { + await base.Contains_with_local_ordered_enumerable_inline(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN ('ABCDE', 'ALFKI') +"""); + } + + public override async Task Contains_with_local_ordered_enumerable_inline_closure_mix(bool async) + { + await base.Contains_with_local_ordered_enumerable_inline_closure_mix(async); + + AssertSql( + """ +@Order1='ABCDE' (Size = 5) +@Order2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@Order1, @Order2) +""", + // + """ +@Order1='ABCDE' (Size = 5) +@Order2='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@Order1, @Order2) +"""); + } + + public override async Task Contains_with_local_read_only_collection_closure(bool async) + { + await base.Contains_with_local_read_only_collection_closure(async); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) +""", + // + """ +@ids1='ABCDE' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @ids1 +"""); + } + + public override async Task Contains_with_local_object_read_only_collection_closure(bool async) + { + await base.Contains_with_local_object_read_only_collection_closure(async); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) +"""); + } + + public override async Task Contains_with_local_ordered_read_only_collection_all_null(bool async) + { + await base.Contains_with_local_ordered_read_only_collection_all_null(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Contains_with_local_read_only_collection_inline(bool async) + { + await base.Contains_with_local_read_only_collection_inline(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN ('ABCDE', 'ALFKI') +"""); + } + + public override async Task Contains_with_local_read_only_collection_inline_closure_mix(bool async) + { + await base.Contains_with_local_read_only_collection_inline_closure_mix(async); + + AssertSql( + """ +@AsReadOnly1='ABCDE' (Size = 5) +@AsReadOnly2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@AsReadOnly1, @AsReadOnly2) +""", + // + """ +@AsReadOnly1='ABCDE' (Size = 5) +@AsReadOnly2='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@AsReadOnly1, @AsReadOnly2) +"""); + } + + public override async Task Contains_with_local_non_primitive_list_closure_mix(bool isAsync) + { + await base.Contains_with_local_non_primitive_list_closure_mix(isAsync); + + AssertSql( + """ +@Select1='ABCDE' (Size = 5) +@Select2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@Select1, @Select2) +"""); + } + + public override async Task Contains_with_local_collection_false(bool isAsync) + { + await base.Contains_with_local_collection_false(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` NOT IN (@ids1, @ids2) +"""); + } + + public override async Task Contains_with_local_collection_complex_predicate_and(bool isAsync) + { + await base.Contains_with_local_collection_complex_predicate_and(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN ('ALFKI', 'ABCDE') AND `c`.`CustomerID` IN (@ids1, @ids2) +"""); + } + + public override async Task Contains_with_local_collection_complex_predicate_or(bool isAsync) + { + await base.Contains_with_local_collection_complex_predicate_or(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + //FROM `Customers` AS `c` + //WHERE `c`.`CustomerID` IN ('ABCDE', 'ALFKI', 'ALFKI', 'ABCDE')"); + } + + public override async Task Contains_with_local_collection_complex_predicate_not_matching_ins1(bool isAsync) + { + await base.Contains_with_local_collection_complex_predicate_not_matching_ins1(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + //FROM `Customers` AS `c` + //WHERE `c`.`CustomerID` IN ('ALFKI', 'ABCDE') OR `c`.`CustomerID` NOT IN ('ABCDE', 'ALFKI')"); + } + + public override async Task Contains_with_local_collection_complex_predicate_not_matching_ins2(bool isAsync) + { + await base.Contains_with_local_collection_complex_predicate_not_matching_ins2(isAsync); + + // issue #15944 + // AssertSql( + // $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + //FROM `Customers` AS `c` + //WHERE `c`.`CustomerID` IN ('ABCDE', 'ALFKI') AND `c`.`CustomerID` NOT IN ('ALFKI', 'ABCDE')"); + } + + public override async Task Contains_with_local_collection_sql_injection(bool isAsync) + { + await base.Contains_with_local_collection_sql_injection(isAsync); + + AssertSql( + """ +@ids1='ALFKI' (Size = 5) +@ids2='ABC')); GO; DROP TABLE Orders; GO; --' (Size = -1) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2) OR `c`.`CustomerID` IN ('ALFKI', 'ABCDE') +"""); + } + + public override async Task Contains_with_local_collection_empty_closure(bool isAsync) + { + await base.Contains_with_local_collection_empty_closure(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Contains_with_local_collection_empty_inline(bool isAsync) + { + await base.Contains_with_local_collection_empty_inline(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Contains_top_level(bool isAsync) + { + await base.Contains_top_level(isAsync); + + AssertSql( + """ +@p='ALFKI' (Size = 5) + +SELECT @p IN ( + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` +) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Contains_with_local_anonymous_type_array_closure(bool async) + { + await AssertTranslationFailed(() => base.Contains_with_local_anonymous_type_array_closure(async)); + + AssertSql(); + } + + public override async Task OfType_Select(bool async) + { + await base.OfType_Select(async); + + AssertSql( + $""" + SELECT TOP 1 `c`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ORDER BY `o`.`OrderID` + """); + } + + public override async Task OfType_Select_OfType_Select(bool async) + { + await base.OfType_Select_OfType_Select(async); + + AssertSql( + $""" + SELECT TOP 1 `c`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ORDER BY `o`.`OrderID` + """); + } + + + public override async Task Average_with_non_matching_types_in_projection_doesnt_produce_second_explicit_cast(bool isAsync) + { + await base.Average_with_non_matching_types_in_projection_doesnt_produce_second_explicit_cast(isAsync); + + AssertSql( +""" +SELECT AVG(CDBL(CLNG(`o`.`OrderID`))) +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Max_with_non_matching_types_in_projection_introduces_explicit_cast(bool isAsync) + { + await base.Max_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync); + + AssertSql( +""" +SELECT MAX(CLNG(`o`.`OrderID`)) +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Min_with_non_matching_types_in_projection_introduces_explicit_cast(bool isAsync) + { + await base.Min_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync); + + AssertSql( +""" +SELECT MIN(CLNG(`o`.`OrderID`)) +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task OrderBy_Take_Last_gives_correct_result(bool isAsync) + { + await base.OrderBy_Take_Last_gives_correct_result(isAsync); + + AssertSql( + """ +@p='20' + +SELECT TOP 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` DESC +"""); + } + + public override async Task OrderBy_Skip_Last_gives_correct_result(bool isAsync) + { + await base.OrderBy_Skip_Last_gives_correct_result(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='20'")} + + SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + ORDER BY `t`.`CustomerID` DESC + """); + } + + public override async Task Contains_over_entityType_should_rewrite_to_identity_equality(bool async) + { + await base.Contains_over_entityType_should_rewrite_to_identity_equality(async); + + AssertSql( + """ +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10248 +""", + // + """ +@entity_equality_p_OrderID='10248' (Nullable = true) + +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'VINET' AND `o`.`OrderID` = @entity_equality_p_OrderID) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task List_Contains_over_entityType_should_rewrite_to_identity_equality(bool isAsync) + { + await base.List_Contains_over_entityType_should_rewrite_to_identity_equality(isAsync); + + AssertSql( + """ +@entity_equality_someOrder_OrderID='10248' (Nullable = true) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` = @entity_equality_someOrder_OrderID) +"""); + } + + public override async Task List_Contains_with_constant_list(bool isAsync) + { + await base.List_Contains_with_constant_list(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` IN ('ALFKI', 'ANATR') + """); + } + + public override async Task List_Contains_with_parameter_list(bool isAsync) + { + await base.List_Contains_with_parameter_list(isAsync); + + AssertSql( + """ +@entity_equality_customers_CustomerID1='ALFKI' (Size = 5) +@entity_equality_customers_CustomerID2='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@entity_equality_customers_CustomerID1, @entity_equality_customers_CustomerID2) +"""); + } + + public override async Task Contains_with_parameter_list_value_type_id(bool isAsync) + { + await base.Contains_with_parameter_list_value_type_id(isAsync); + + AssertSql( + """ +@entity_equality_orders_OrderID1='10248' +@entity_equality_orders_OrderID2='10249' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` IN (@entity_equality_orders_OrderID1, @entity_equality_orders_OrderID2) +"""); + } + + public override async Task Contains_with_constant_list_value_type_id(bool isAsync) + { + await base.Contains_with_constant_list_value_type_id(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` IN (10248, 10249) + """); + } + + public override async Task IImmutableSet_Contains_with_parameter(bool async) + { + await base.IImmutableSet_Contains_with_parameter(async); + + AssertSql( + """ +@ids1='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @ids1 +"""); + } + + public override async Task IReadOnlySet_Contains_with_parameter(bool async) + { + await base.IReadOnlySet_Contains_with_parameter(async); + + AssertSql( + """ +@ids1='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @ids1 +"""); + } + + public override async Task HashSet_Contains_with_parameter(bool isAsync) + { + await base.HashSet_Contains_with_parameter(isAsync); + + AssertSql( + """ +@ids1='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @ids1 +"""); + } + + public override async Task ImmutableHashSet_Contains_with_parameter(bool isAsync) + { + await base.ImmutableHashSet_Contains_with_parameter(isAsync); + + AssertSql( + """ +@ids1='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @ids1 +"""); + } + + public override async Task Contains_over_entityType_with_null_should_rewrite_to_false(bool async) + { + await base.Contains_over_entityType_with_null_should_rewrite_to_false(async); + + AssertSql( + """ +SELECT FALSE +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery(bool async) + { + await base.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE FALSE +"""); + } + + public override async Task Contains_over_entityType_with_null_in_projection(bool async) + { + await base.Contains_over_entityType_with_null_in_projection(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE FALSE +"""); + } + + public override async Task Contains_over_scalar_with_null_should_rewrite_to_identity_equality_subquery(bool async) + { + await base.Contains_over_scalar_with_null_should_rewrite_to_identity_equality_subquery(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + WHERE `o0`.`CustomerID` = 'VINET' AND `o0`.`EmployeeID` IS NULL) +"""); + } + + public override async Task Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_negated(bool async) + { + await base.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_negated(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + WHERE `o0`.`CustomerID` = 'VINET' AND `o0`.`EmployeeID` IS NULL) +"""); + } + + public override async Task Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_complex(bool async) + { + await base.Contains_over_entityType_with_null_should_rewrite_to_identity_equality_subquery_complex(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + WHERE `o0`.`CustomerID` = 'VINET' AND `o0`.`EmployeeID` IS NULL) = EXISTS ( + SELECT 1 + FROM `Orders` AS `o1` + WHERE (`o1`.`CustomerID` <> 'VINET' OR `o1`.`CustomerID` IS NULL) AND `o1`.`EmployeeID` IS NULL) +"""); + } + + public override async Task Contains_over_nullable_scalar_with_null_in_subquery_translated_correctly(bool async) + { + await base.Contains_over_nullable_scalar_with_null_in_subquery_translated_correctly(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + WHERE `o0`.`CustomerID` = 'VINET' AND `o0`.`EmployeeID` IS NULL) +FROM `Orders` AS `o` +"""); + } + + public override async Task Contains_over_non_nullable_scalar_with_null_in_subquery_simplifies_to_false(bool async) + { + await base.Contains_over_non_nullable_scalar_with_null_in_subquery_simplifies_to_false(async); + + AssertSql( + """ +SELECT FALSE +FROM `Orders` AS `o` +"""); + } + + public override async Task Contains_over_entityType_should_materialize_when_composite(bool async) + { + await base.Contains_over_entityType_should_materialize_when_composite(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE `o`.`ProductID` = 42 AND EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + WHERE `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task Contains_over_entityType_should_materialize_when_composite2(bool async) + { + await base.Contains_over_entityType_should_materialize_when_composite2(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE `o`.`ProductID` = 42 AND EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + WHERE `o0`.`OrderID` > 42 AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) +"""); + } + + public override async Task String_FirstOrDefault_in_projection_does_not_do_client_eval(bool async) + { + await base.String_FirstOrDefault_in_projection_does_not_do_client_eval(async); + + AssertSql( + """ +SELECT MID(`c`.`CustomerID`, 1, 1) +FROM `Customers` AS `c` +"""); + } + + public override async Task Project_constant_Sum(bool isAsync) + { + await base.Project_constant_Sum(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(1) IS NULL, 0, SUM(1)) + FROM `Employees` AS `e` + """); + } + + public override async Task Where_subquery_any_equals_operator(bool isAsync) + { + await base.Where_subquery_any_equals_operator(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) +@ids3='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2, @ids3) +"""); + } + + public override async Task Where_subquery_any_equals(bool isAsync) + { + await base.Where_subquery_any_equals(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` IN ('ABCDE', 'ALFKI', 'ANATR') + """); + } + + public override async Task Where_subquery_any_equals_static(bool isAsync) + { + await base.Where_subquery_any_equals_static(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) +@ids3='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@ids1, @ids2, @ids3) +"""); + } + + public override async Task Where_subquery_where_any(bool isAsync) + { + await base.Where_subquery_where_any(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) +@ids3='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'México D.F.' AND `c`.`CustomerID` IN (@ids1, @ids2, @ids3) +""", + // + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) +@ids3='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'México D.F.' AND `c`.`CustomerID` IN (@ids1, @ids2, @ids3) +"""); + } + + public override async Task Where_subquery_all_not_equals_operator(bool isAsync) + { + await base.Where_subquery_all_not_equals_operator(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) +@ids3='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` NOT IN (@ids1, @ids2, @ids3) +"""); + } + + public override async Task Where_subquery_all_not_equals(bool isAsync) + { + await base.Where_subquery_all_not_equals(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` NOT IN ('ABCDE', 'ALFKI', 'ANATR') + """); + } + + public override async Task Where_subquery_all_not_equals_static(bool isAsync) + { + await base.Where_subquery_all_not_equals_static(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) +@ids3='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` NOT IN (@ids1, @ids2, @ids3) +"""); + } + + public override async Task Where_subquery_where_all(bool isAsync) + { + await base.Where_subquery_where_all(isAsync); + + AssertSql( + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) +@ids3='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'México D.F.' AND `c`.`CustomerID` NOT IN (@ids1, @ids2, @ids3) +""", + // + """ +@ids1='ABCDE' (Size = 5) +@ids2='ALFKI' (Size = 5) +@ids3='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'México D.F.' AND `c`.`CustomerID` NOT IN (@ids1, @ids2, @ids3) +"""); + } + + public override async Task Cast_to_same_Type_Count_works(bool isAsync) + { + await base.Cast_to_same_Type_Count_works(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Customers` AS `c` + """); + } + + public override async Task Cast_before_aggregate_is_preserved(bool isAsync) + { + await base.Cast_before_aggregate_is_preserved(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + FROM `Customers` AS `c` + """); + } + + public override async Task DefaultIfEmpty_selects_only_required_columns(bool isAsync) + { + await base.DefaultIfEmpty_selects_only_required_columns(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductName` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN `Products` AS `p` ON TRUE +"""); + } + + public override async Task Collection_Last_member_access_in_projection_translated(bool isAsync) + { + await base.Collection_Last_member_access_in_projection_translated(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE (`c`.`CustomerID` LIKE 'F%') AND ( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) = `c`.`CustomerID` +"""); + } + + public override async Task Collection_LastOrDefault_member_access_in_projection_translated(bool isAsync) + { + await base.Collection_LastOrDefault_member_access_in_projection_translated(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE (`c`.`CustomerID` LIKE 'F%') AND ( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) = `c`.`CustomerID` +"""); + } + + public override async Task Sum_over_explicit_cast_over_column(bool isAsync) + { + await base.Sum_over_explicit_cast_over_column(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(CLNG(`o`.`OrderID`)) IS NULL, 0, SUM(CLNG(`o`.`OrderID`))) + FROM `Orders` AS `o` + """); + } + + public override async Task Count_on_projection_with_client_eval(bool isAsync) + { + await base.Count_on_projection_with_client_eval(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + """, + // + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + """, + // + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + """); + } + + public override async Task Average_on_nav_subquery_in_projection(bool async) + { + await base.Average_on_nav_subquery_in_projection(async); + + AssertSql( + """ +SELECT ( + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Ave` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Count_after_client_projection(bool async) + { + await base.Count_after_client_projection(async); + + AssertSql( + """ +@p='1' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM `Orders` AS `o` +) AS `o0` +"""); + } + + public override async Task All_true(bool async) + { + await base.All_true(async); + + AssertSql( + """ +SELECT TRUE +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Not_Any_false(bool async) + { + await base.Not_Any_false(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +"""); + } + + public override async Task Contains_inside_aggregate_function_with_GroupBy(bool async) + { + await base.Contains_inside_aggregate_function_with_GroupBy(async); + + AssertSql( + """ +@cities1='London' (Size = 15) +@cities2='Berlin' (Size = 15) + +SELECT COUNT(IIF(`c`.`City` IN (@cities1, @cities2), 1, NULL)) +FROM `Customers` AS `c` +GROUP BY `c`.`Country` +"""); + } + + public override async Task Contains_inside_Average_without_GroupBy(bool async) + { + await base.Contains_inside_Average_without_GroupBy(async); + + AssertSql( + """ +@cities1='London' (Size = 15) +@cities2='Berlin' (Size = 15) + +SELECT AVG(IIF(`c`.`City` IN (@cities1, @cities2), 1.0, 0.0)) +FROM `Customers` AS `c` +"""); + } + + public override async Task Contains_inside_Sum_without_GroupBy(bool async) + { + await base.Contains_inside_Sum_without_GroupBy(async); + + AssertSql( + """ +@cities1='London' (Size = 15) +@cities2='Berlin' (Size = 15) + +SELECT IIF(SUM(IIF(`c`.`City` IN (@cities1, @cities2), 1, 0)) IS NULL, 0, SUM(IIF(`c`.`City` IN (@cities1, @cities2), 1, 0))) +FROM `Customers` AS `c` +"""); + } + + public override async Task Contains_inside_Count_without_GroupBy(bool async) + { + await base.Contains_inside_Count_without_GroupBy(async); + + AssertSql( + """ +@cities1='London' (Size = 15) +@cities2='Berlin' (Size = 15) + +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE `c`.`City` IN (@cities1, @cities2) +"""); + } + + public override async Task Contains_inside_LongCount_without_GroupBy(bool async) + { + await base.Contains_inside_LongCount_without_GroupBy(async); + + AssertSql( + """ +@cities1='London' (Size = 15) +@cities2='Berlin' (Size = 15) + +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE `c`.`City` IN (@cities1, @cities2) +"""); + } + + public override async Task Contains_inside_Max_without_GroupBy(bool async) + { + await base.Contains_inside_Max_without_GroupBy(async); + + AssertSql( + """ +@cities1='London' (Size = 15) +@cities2='Berlin' (Size = 15) + +SELECT MAX(IIF(`c`.`City` IN (@cities1, @cities2), 1, 0)) +FROM `Customers` AS `c` +"""); + } + + public override async Task Contains_inside_Min_without_GroupBy(bool async) + { + await base.Contains_inside_Min_without_GroupBy(async); + + AssertSql( + """ +@cities1='London' (Size = 15) +@cities2='Berlin' (Size = 15) + +SELECT MIN(IIF(`c`.`City` IN (@cities1, @cities2), 1, 0)) +FROM `Customers` AS `c` +"""); + } + + public override async Task Return_type_of_singular_operator_is_preserved(bool async) + { + await base.Return_type_of_singular_operator_is_preserved(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` DESC +""", + // + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` DESC +"""); + } + + public override async Task Type_casting_inside_sum(bool async) + { + await base.Type_casting_inside_sum(async); + + AssertSql( + """ +SELECT IIF(SUM(CDEC(`o`.`Discount`)) IS NULL, 0.0, SUM(CDEC(`o`.`Discount`))) +FROM `Order Details` AS `o` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindAsNoTrackingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindAsNoTrackingQueryLibRedTest.cs new file mode 100644 index 00000000..535d906d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindAsNoTrackingQueryLibRedTest.cs @@ -0,0 +1,169 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindAsNoTrackingQueryLibRedTest : NorthwindAsNoTrackingQueryTestBase> + { + public NorthwindAsNoTrackingQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Can_get_current_values(bool async) + { + await base.Can_get_current_values(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +""", + // + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Where_simple_shadow(bool async) + { + await base.Where_simple_shadow(async); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`Title` = 'Sales Representative' +"""); + } + + public override async Task Entity_not_added_to_state_manager(bool useParam, bool async) + { + await base.Entity_not_added_to_state_manager(useParam, async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Query_fast_path_when_ctor_binding(bool async) + { + await base.Query_fast_path_when_ctor_binding(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Applied_to_multiple_body_clauses(bool async) + { + await base.Applied_to_multiple_body_clauses(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c`, +`Orders` AS `o` +WHERE `c`.`CustomerID` = `o`.`CustomerID` +"""); + } + + public override async Task SelectMany_simple(bool async) + { + await base.SelectMany_simple(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e`, +`Customers` AS `c` +"""); + } + + public override async Task Applied_after_navigation_expansion(bool async) + { + await base.Applied_after_navigation_expansion(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `c`.`City` <> 'London' OR `c`.`City` IS NULL +"""); + } + + public override async Task Include_reference_and_collection(bool async) + { + await base.Include_reference_and_collection(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +ORDER BY `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Applied_to_body_clause(bool async) + { + await base.Applied_to_body_clause(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Applied_to_projection(bool async) + { + await base.Applied_to_projection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Applied_to_body_clause_with_projection(bool async) + { + await base.Applied_to_body_clause_with_projection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`CustomerID` AS `ocid`, `o`.`OrderID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindAsTrackingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindAsTrackingQueryLibRedTest.cs new file mode 100644 index 00000000..7876c55c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindAsTrackingQueryLibRedTest.cs @@ -0,0 +1,87 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindAsTrackingQueryLibRedTest : NorthwindAsTrackingQueryTestBase> + { + public NorthwindAsTrackingQueryLibRedTest(NorthwindQueryLibRedFixture fixture) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override void Applied_to_body_clause() + { + base.Applied_to_body_clause(); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override void Entity_added_to_state_manager(bool useParam) + { + base.Entity_added_to_state_manager(useParam); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override void Applied_to_projection() + { + base.Applied_to_projection(); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override void Applied_to_multiple_body_clauses() + { + base.Applied_to_multiple_body_clauses(); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c`, +`Orders` AS `o` +WHERE `c`.`CustomerID` = `o`.`CustomerID` +"""); + } + + public override void Applied_to_body_clause_with_projection() + { + base.Applied_to_body_clause_with_projection(); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`CustomerID` AS `ocid`, `o`.`OrderID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindChangeTrackingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindChangeTrackingQueryLibRedTest.cs new file mode 100644 index 00000000..c790bac8 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindChangeTrackingQueryLibRedTest.cs @@ -0,0 +1,386 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestModels.Northwind; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindChangeTrackingQueryLibRedTest : NorthwindChangeTrackingQueryTestBase> + { + public NorthwindChangeTrackingQueryLibRedTest(NorthwindQueryLibRedFixture fixture) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override void Entity_reverts_when_state_set_to_unchanged() + { + base.Entity_reverts_when_state_set_to_unchanged(); + + AssertSql( +""" +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override void Entity_does_not_revert_when_attached_on_DbSet() + { + base.Entity_does_not_revert_when_attached_on_DbSet(); + + AssertSql( +""" +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override void AsTracking_switches_tracking_on_when_off_in_options() + { + base.AsTracking_switches_tracking_on_when_off_in_options(); + + AssertSql( +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +"""); + } + + public override void Can_disable_and_reenable_query_result_tracking_query_caching_using_options() + { + base.Can_disable_and_reenable_query_result_tracking_query_caching_using_options(); + + AssertSql( +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +""", + // +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +"""); + } + + public override void Can_disable_and_reenable_query_result_tracking() + { + base.Can_disable_and_reenable_query_result_tracking(); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +ORDER BY `e`.`EmployeeID` +""", + // + """ +@p='1' + +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` +FROM ( + SELECT TOP @p `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` + FROM ( + SELECT TOP @p + @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` + ) AS `e0` + ORDER BY `e0`.`EmployeeID` DESC +) AS `e1` +ORDER BY `e1`.`EmployeeID` +""", + // + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +ORDER BY `e`.`EmployeeID` +"""); + } + + public override void Entity_range_does_not_revert_when_attached_dbSet() + { + base.Entity_range_does_not_revert_when_attached_dbSet(); + + AssertSql( + """ +@p='2' + +SELECT TOP 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` +""", + // + """ +@p1='1' +@p='2' + +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM ( + SELECT TOP @p1 + 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC +) AS `c2` +ORDER BY `c2`.`CustomerID` +""", + // + """ +@p='2' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override void Precedence_of_tracking_modifiers5() + { + base.Precedence_of_tracking_modifiers5(); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override void Precedence_of_tracking_modifiers2() + { + base.Precedence_of_tracking_modifiers2(); + + AssertSql( +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +"""); + } + + public override void Can_disable_and_reenable_query_result_tracking_query_caching() + { + base.Can_disable_and_reenable_query_result_tracking_query_caching(); + + AssertSql( +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +""", + // +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +"""); + } + + public override void Entity_range_does_not_revert_when_attached_dbContext() + { + base.Entity_range_does_not_revert_when_attached_dbContext(); + + AssertSql( + """ +@p='2' + +SELECT TOP 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` +""", + // + """ +@p1='1' +@p='2' + +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM ( + SELECT TOP @p1 + 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC +) AS `c2` +ORDER BY `c2`.`CustomerID` +""", + // + """ +@p='2' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override void Precedence_of_tracking_modifiers() + { + base.Precedence_of_tracking_modifiers(); + + AssertSql( +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +"""); + } + + public override void Precedence_of_tracking_modifiers3() + { + base.Precedence_of_tracking_modifiers3(); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override void Can_disable_and_reenable_query_result_tracking_starting_with_NoTracking() + { + base.Can_disable_and_reenable_query_result_tracking_starting_with_NoTracking(); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +ORDER BY `e`.`EmployeeID` +""", + // + """ +@p='1' + +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` +FROM ( + SELECT TOP @p `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` + FROM ( + SELECT TOP @p + @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` + ) AS `e0` + ORDER BY `e0`.`EmployeeID` DESC +) AS `e1` +ORDER BY `e1`.`EmployeeID` +"""); + } + + public override void Entity_does_not_revert_when_attached_on_DbContext() + { + base.Entity_does_not_revert_when_attached_on_DbContext(); + + AssertSql( +""" +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override void Can_disable_and_reenable_query_result_tracking_query_caching_single_context() + { + base.Can_disable_and_reenable_query_result_tracking_query_caching_single_context(); + + AssertSql( +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +""", + // +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +"""); + } + + public override void Multiple_entities_can_revert() + { + base.Multiple_entities_can_revert(); + + AssertSql( +""" +SELECT `c`.`PostalCode` +FROM `Customers` AS `c` +""", + // +""" +SELECT `c`.`Region` +FROM `Customers` AS `c` +""", + // +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +""", + // +""" +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +""", + // +""" +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +""", + // +""" +SELECT `c`.`PostalCode` +FROM `Customers` AS `c` +""", + // +""" +SELECT `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override void Precedence_of_tracking_modifiers4() + { + base.Precedence_of_tracking_modifiers4(); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override NorthwindContext CreateNoTrackingContext() + => new NorthwindLibRedContext( + new DbContextOptionsBuilder(Fixture.CreateOptions()) + .UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking).Options); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindCompiledQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindCompiledQueryLibRedTest.cs new file mode 100644 index 00000000..439675a1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindCompiledQueryLibRedTest.cs @@ -0,0 +1,767 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindCompiledQueryLibRedTest : NorthwindCompiledQueryTestBase> + { + public NorthwindCompiledQueryLibRedTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override void DbSet_query() + { + base.DbSet_query(); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """, + // + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override void DbSet_query_first() + { + base.DbSet_query_first(); + + AssertSql( + $""" + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override void Query_ending_with_include() + { + base.Query_ending_with_include(); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c`.`CustomerID` +""", +// +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c`.`CustomerID` +"""); + } + + public override void Untyped_context() + { + base.Untyped_context(); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """, + // + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override void Query_with_single_parameter() + { + base.Query_with_single_parameter(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override void First_query_with_single_parameter() + { + base.First_query_with_single_parameter(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override void Query_with_two_parameters() + { + base.Query_with_two_parameters(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override void Query_with_three_parameters() + { + base.Query_with_three_parameters(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override void Query_with_contains() + { + base.Query_with_contains(); + + AssertSql( + """ +@args1='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @args1 +""", + // + """ +@args1='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @args1 +"""); + } + + public override void Query_with_closure() + { + base.Query_with_closure(); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """, + // + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override void Compiled_query_when_does_not_end_in_query_operator() + { + base.Compiled_query_when_does_not_end_in_query_operator(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override async Task Compiled_query_with_max_parameters() + { + await base.Compiled_query_with_max_parameters(); + + AssertSql( + """ +@s1='ALFKI' (Size = 5) +@s2='ANATR' (Size = 5) +@s3='ANTON' (Size = 5) +@s4='AROUT' (Size = 5) +@s5='BERGS' (Size = 5) +@s6='BLAUS' (Size = 5) +@s7='BLONP' (Size = 5) +@s8='BOLID' (Size = 5) +@s9='BONAP' (Size = 5) +@s10='BSBEV' (Size = 5) +@s11='CACTU' (Size = 5) +@s12='CENTC' (Size = 5) +@s13='CHOPS' (Size = 5) +@s14='CONSH' (Size = 5) +@s15='RANDM' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @s1 OR `c`.`CustomerID` = @s2 OR `c`.`CustomerID` = @s3 OR `c`.`CustomerID` = @s4 OR `c`.`CustomerID` = @s5 OR `c`.`CustomerID` = @s6 OR `c`.`CustomerID` = @s7 OR `c`.`CustomerID` = @s8 OR `c`.`CustomerID` = @s9 OR `c`.`CustomerID` = @s10 OR `c`.`CustomerID` = @s11 OR `c`.`CustomerID` = @s12 OR `c`.`CustomerID` = @s13 OR `c`.`CustomerID` = @s14 OR `c`.`CustomerID` = @s15 +""", + // + """ +@s1='ALFKI' (Size = 5) +@s2='ANATR' (Size = 5) +@s3='ANTON' (Size = 5) +@s4='AROUT' (Size = 5) +@s5='BERGS' (Size = 5) +@s6='BLAUS' (Size = 5) +@s7='BLONP' (Size = 5) +@s8='BOLID' (Size = 5) +@s9='BONAP' (Size = 5) +@s10='BSBEV' (Size = 5) +@s11='CACTU' (Size = 5) +@s12='CENTC' (Size = 5) +@s13='CHOPS' (Size = 5) +@s14='CONSH' (Size = 5) +@s15='RANDM' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = @s1 OR `c`.`CustomerID` = @s2 OR `c`.`CustomerID` = @s3 OR `c`.`CustomerID` = @s4 OR `c`.`CustomerID` = @s5 OR `c`.`CustomerID` = @s6 OR `c`.`CustomerID` = @s7 OR `c`.`CustomerID` = @s8 OR `c`.`CustomerID` = @s9 OR `c`.`CustomerID` = @s10 OR `c`.`CustomerID` = @s11 OR `c`.`CustomerID` = @s12 OR `c`.`CustomerID` = @s13 OR `c`.`CustomerID` = @s14 OR `c`.`CustomerID` = @s15 +ORDER BY `c`.`CustomerID` +""", + // + """ +@s1='ALFKI' (Size = 5) +@s2='ANATR' (Size = 5) +@s3='ANTON' (Size = 5) +@s4='AROUT' (Size = 5) +@s5='BERGS' (Size = 5) +@s6='BLAUS' (Size = 5) +@s7='BLONP' (Size = 5) +@s8='BOLID' (Size = 5) +@s9='BONAP' (Size = 5) +@s10='BSBEV' (Size = 5) +@s11='CACTU' (Size = 5) +@s12='CENTC' (Size = 5) +@s13='CHOPS' (Size = 5) +@s14='CONSH' (Size = 5) +@s15='RANDM' (Size = 5) + +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @s1 OR `c`.`CustomerID` = @s2 OR `c`.`CustomerID` = @s3 OR `c`.`CustomerID` = @s4 OR `c`.`CustomerID` = @s5 OR `c`.`CustomerID` = @s6 OR `c`.`CustomerID` = @s7 OR `c`.`CustomerID` = @s8 OR `c`.`CustomerID` = @s9 OR `c`.`CustomerID` = @s10 OR `c`.`CustomerID` = @s11 OR `c`.`CustomerID` = @s12 OR `c`.`CustomerID` = @s13 OR `c`.`CustomerID` = @s14 OR `c`.`CustomerID` = @s15 +""", + // + """ +@s1='ALFKI' (Size = 5) +@s2='ANATR' (Size = 5) +@s3='ANTON' (Size = 5) +@s4='AROUT' (Size = 5) +@s5='BERGS' (Size = 5) +@s6='BLAUS' (Size = 5) +@s7='BLONP' (Size = 5) +@s8='BOLID' (Size = 5) +@s9='BONAP' (Size = 5) +@s10='BSBEV' (Size = 5) +@s11='CACTU' (Size = 5) +@s12='CENTC' (Size = 5) +@s13='CHOPS' (Size = 5) +@s14='CONSH' (Size = 5) +@s15='RANDM' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @s1 OR `c`.`CustomerID` = @s2 OR `c`.`CustomerID` = @s3 OR `c`.`CustomerID` = @s4 OR `c`.`CustomerID` = @s5 OR `c`.`CustomerID` = @s6 OR `c`.`CustomerID` = @s7 OR `c`.`CustomerID` = @s8 OR `c`.`CustomerID` = @s9 OR `c`.`CustomerID` = @s10 OR `c`.`CustomerID` = @s11 OR `c`.`CustomerID` = @s12 OR `c`.`CustomerID` = @s13 OR `c`.`CustomerID` = @s14 OR `c`.`CustomerID` = @s15 +""", + // + """ +@s1='ALFKI' (Size = 5) +@s2='ANATR' (Size = 5) +@s3='ANTON' (Size = 5) +@s4='AROUT' (Size = 5) +@s5='BERGS' (Size = 5) +@s6='BLAUS' (Size = 5) +@s7='BLONP' (Size = 5) +@s8='BOLID' (Size = 5) +@s9='BONAP' (Size = 5) +@s10='BSBEV' (Size = 5) +@s11='CACTU' (Size = 5) +@s12='CENTC' (Size = 5) +@s13='CHOPS' (Size = 5) +@s14='CONSH' (Size = 5) +@s15='RANDM' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = @s1 OR `c`.`CustomerID` = @s2 OR `c`.`CustomerID` = @s3 OR `c`.`CustomerID` = @s4 OR `c`.`CustomerID` = @s5 OR `c`.`CustomerID` = @s6 OR `c`.`CustomerID` = @s7 OR `c`.`CustomerID` = @s8 OR `c`.`CustomerID` = @s9 OR `c`.`CustomerID` = @s10 OR `c`.`CustomerID` = @s11 OR `c`.`CustomerID` = @s12 OR `c`.`CustomerID` = @s13 OR `c`.`CustomerID` = @s14 OR `c`.`CustomerID` = @s15 +ORDER BY `c`.`CustomerID` +""", + // + """ +@s1='ALFKI' (Size = 5) +@s2='ANATR' (Size = 5) +@s3='ANTON' (Size = 5) +@s4='AROUT' (Size = 5) +@s5='BERGS' (Size = 5) +@s6='BLAUS' (Size = 5) +@s7='BLONP' (Size = 5) +@s8='BOLID' (Size = 5) +@s9='BONAP' (Size = 5) +@s10='BSBEV' (Size = 5) +@s11='CACTU' (Size = 5) +@s12='CENTC' (Size = 5) +@s13='CHOPS' (Size = 5) +@s14='CONSH' (Size = 5) +@s15='RANDM' (Size = 5) + +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @s1 OR `c`.`CustomerID` = @s2 OR `c`.`CustomerID` = @s3 OR `c`.`CustomerID` = @s4 OR `c`.`CustomerID` = @s5 OR `c`.`CustomerID` = @s6 OR `c`.`CustomerID` = @s7 OR `c`.`CustomerID` = @s8 OR `c`.`CustomerID` = @s9 OR `c`.`CustomerID` = @s10 OR `c`.`CustomerID` = @s11 OR `c`.`CustomerID` = @s12 OR `c`.`CustomerID` = @s13 OR `c`.`CustomerID` = @s14 OR `c`.`CustomerID` = @s15 +""", + // + """ +@s1='ALFKI' (Size = 5) +@s2='ANATR' (Size = 5) +@s3='ANTON' (Size = 5) +@s4='AROUT' (Size = 5) +@s5='BERGS' (Size = 5) +@s6='BLAUS' (Size = 5) +@s7='BLONP' (Size = 5) +@s8='BOLID' (Size = 5) +@s9='BONAP' (Size = 5) +@s10='BSBEV' (Size = 5) +@s11='CACTU' (Size = 5) +@s12='CENTC' (Size = 5) +@s13='CHOPS' (Size = 5) +@s14='CONSH' (Size = 5) + +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @s1 OR `c`.`CustomerID` = @s2 OR `c`.`CustomerID` = @s3 OR `c`.`CustomerID` = @s4 OR `c`.`CustomerID` = @s5 OR `c`.`CustomerID` = @s6 OR `c`.`CustomerID` = @s7 OR `c`.`CustomerID` = @s8 OR `c`.`CustomerID` = @s9 OR `c`.`CustomerID` = @s10 OR `c`.`CustomerID` = @s11 OR `c`.`CustomerID` = @s12 OR `c`.`CustomerID` = @s13 OR `c`.`CustomerID` = @s14 +"""); + } + + public override void Query_with_array_parameter() + { + base.Query_with_array_parameter(); + + AssertSql( + """ +@__args='["ALFKI"]' (Size = 4000) + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] = JSON_VALUE(@__args, '$[0]') +""", + // + """ +@__args='["ANATR"]' (Size = 4000) + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] = JSON_VALUE(@__args, '$[0]') +"""); + } + + public override async Task Query_with_array_parameter_async() + { + await base.Query_with_array_parameter_async(); + + AssertSql( + """ +@__args='["ALFKI"]' (Size = 4000) + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] = JSON_VALUE(@__args, '$[0]') +""", + // + """ +@__args='["ANATR"]' (Size = 4000) + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] = JSON_VALUE(@__args, '$[0]') +"""); + } + + public override void Multiple_queries() + { + base.Multiple_queries(); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT TOP 1 `o`.`CustomerID` +FROM `Orders` AS `o` +ORDER BY `o`.`CustomerID` +""", + // + """ +SELECT TOP 1 `c`.`CustomerID` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT TOP 1 `o`.`CustomerID` +FROM `Orders` AS `o` +ORDER BY `o`.`CustomerID` +"""); + } + + public override void Compiled_query_when_using_member_on_context() + { + base.Compiled_query_when_using_member_on_context(); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +""", + // +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task First_query_with_cancellation_async() + { + await base.First_query_with_cancellation_async(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override async Task DbSet_query_first_async() + { + await base.DbSet_query_first_async(); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task First_query_with_single_parameter_async() + { + await base.First_query_with_single_parameter_async(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override async Task Keyless_query_first_async() + { + await base.Keyless_query_first_async(); + + AssertSql( +""" +SELECT TOP 1 `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle` +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +) AS `m` +ORDER BY `m`.`CompanyName` +"""); + } + + public override async Task Query_with_closure_async_null() + { + await base.Query_with_closure_async_null(); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Query_with_three_parameters_async() + { + await base.Query_with_three_parameters_async(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override async Task Query_with_two_parameters_async() + { + await base.Query_with_two_parameters_async(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override async Task Keyless_query_async() + { + await base.Keyless_query_async(); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +""", + // + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +"""); + } + + public override async Task Query_with_single_parameter_async() + { + await base.Query_with_single_parameter_async(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID +"""); + } + + public override void Keyless_query_first() + { + base.Keyless_query_first(); + + AssertSql( +""" +SELECT TOP 1 `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle` +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +) AS `m` +ORDER BY `m`.`CompanyName` +"""); + } + + public override void Query_with_closure_null() + { + base.Query_with_closure_null(); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Query_with_closure_async() + { + await base.Query_with_closure_async(); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Untyped_context_async() + { + await base.Untyped_context_async(); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +""", + // +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task DbSet_query_async() + { + await base.DbSet_query_async(); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override void Keyless_query() + { + base.Keyless_query(); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +""", + // + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +"""); + } + + public override void Query_with_single_parameter_with_include() + { + base.Query_with_single_parameter_with_include(); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = @customerID +ORDER BY `c`.`CustomerID` +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = @customerID +ORDER BY `c`.`CustomerID` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryLibRedTest.cs new file mode 100644 index 00000000..8bc82866 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryLibRedTest.cs @@ -0,0 +1,2297 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.Query; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class NorthwindEFPropertyIncludeQueryLibRedTest : NorthwindEFPropertyIncludeQueryTestBase< + NorthwindQueryLibRedFixture> +{ + public NorthwindEFPropertyIncludeQueryLibRedTest(NorthwindQueryLibRedFixture fixture) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Include_collection_with_last_no_orderby(bool async) + { + Assert.Equal( + RelationalStrings.LastUsedWithoutOrderBy(nameof(Enumerable.Last)), + (await Assert.ThrowsAsync( + () => base.Include_collection_with_last_no_orderby(async))).Message); + + AssertSql(); + } + + public override async Task Include_collection_with_filter_reordered(bool async) + { + await base.Include_collection_with_filter_reordered(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_first_or_default(bool async) + { + await base.Include_collection_order_by_non_key_with_first_or_default(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`OrderID` < 10800 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_filter(bool async) + { + await base.Include_collection_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_references_then_include_multi_level(bool async) + { + await base.Include_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_order_by_collection_column(bool async) + { + await base.Include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_alias_generation(bool async) + { + await base.Include_collection_alias_generation(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_skip_take_no_order_by(bool async) + { + await base.Include_collection_skip_take_no_order_by(async); + + AssertSql( +""" +@__p_0='10' +@__p_1='5' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[CustomerID] +"""); + } + + public override async Task Include_collection_with_cross_join_clause_with_filter(bool async) + { + await base.Include_collection_with_cross_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID`), +( + SELECT TOP 5 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Join_Include_reference_GroupBy_Select(bool async) + { + await base.Join_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_multi_level_reference_and_collection_predicate(bool async) + { + await base.Include_multi_level_reference_and_collection_predicate(async); + + AssertSql( + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` = 10248 +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` +"""); + } + + public override async Task Include_references_then_include_collection(bool async) + { + await base.Include_references_then_include_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_on_additional_from_clause_with_filter(bool async) + { + await base.Include_collection_on_additional_from_clause_with_filter(async); + + AssertSql( + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c`, +(( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI' +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` +"""); + } + + public override async Task Include_duplicate_reference3(bool async) + { + await base.Include_duplicate_reference3(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_take(bool async) + { + await base.Include_collection_order_by_non_key_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_include_collection_predicate(bool async) + { + await base.Include_collection_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_take_no_order_by(bool async) + { + await base.Include_collection_take_no_order_by(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_principal_already_tracked(bool async) + { + await base.Include_collection_principal_already_tracked(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_object(bool async) + { + await base.Include_collection_OrderBy_object(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`OrderID` < 10250 +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_duplicate_collection_result_operator2(bool async) + { + await base.Include_duplicate_collection_result_operator2(async); + + AssertSql( +""" +@__p_1='1' +@__p_0='2' + +SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region], [t1].[CustomerID0], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t1].[Address0], [t1].[City0], [t1].[CompanyName0], [t1].[ContactName0], [t1].[ContactTitle0], [t1].[Country0], [t1].[Fax0], [t1].[Phone0], [t1].[PostalCode0], [t1].[Region0] +FROM ( + SELECT TOP(@__p_1) [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [t0].[CustomerID] AS [CustomerID0], [t0].[Address] AS [Address0], [t0].[City] AS [City0], [t0].[CompanyName] AS [CompanyName0], [t0].[ContactName] AS [ContactName0], [t0].[ContactTitle] AS [ContactTitle0], [t0].[Country] AS [Country0], [t0].[Fax] AS [Fax0], [t0].[Phone] AS [Phone0], [t0].[PostalCode] AS [PostalCode0], [t0].[Region] AS [Region0] + FROM ( + SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] + ) AS [t] + CROSS JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t0] + ORDER BY [t].[CustomerID] +) AS [t1] +LEFT JOIN [Orders] AS [o] ON [t1].[CustomerID] = [o].[CustomerID] +ORDER BY [t1].[CustomerID], [t1].[CustomerID0] +"""); + } + + public override async Task Repro9735(bool async) + { + await base.Repro9735(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`CustomerID` IS NOT NULL AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +LEFT JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID0`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_single_or_default_no_result(bool async) + { + await base.Include_collection_single_or_default_no_result(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI ?' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_cross_apply_with_filter(bool async) + { + await base.Include_collection_with_cross_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_with_left_join_clause_with_filter(bool async) + { + await base.Include_collection_with_left_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_right_join_clause_with_filter(bool async) + { + await base.Include_collection_with_right_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +RIGHT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_duplicate_collection(bool async) + { + await base.Include_duplicate_collection(async); + + AssertSql( + """ +@p='2' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`), +(( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +LEFT JOIN `Orders` AS `o0` ON `c2`.`CustomerID` = `o0`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection(bool async) + { + await base.Include_collection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_include_collection_then_include_reference(bool async) + { + await base.Include_collection_then_include_collection_then_include_reference(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`OrderID0`, `s0`.`ProductID`, `s0`.`Discount`, `s0`.`Quantity`, `s0`.`UnitPrice`, `s0`.`ProductID0`, `s0`.`Discontinued`, `s0`.`ProductName`, `s0`.`SupplierID`, `s0`.`UnitPrice0`, `s0`.`UnitsInStock` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`OrderID` AS `OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` + FROM `Orders` AS `o` + LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` + ) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +) AS `s0` ON `c`.`CustomerID` = `s0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `s0`.`OrderID`, `s0`.`OrderID0`, `s0`.`ProductID` +"""); + } + + public override async Task Include_reference_GroupBy_Select(bool async) + { + await base.Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + LEFT JOIN [Customers] AS [c] ON [o0].[CustomerID] = [c].[CustomerID] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_multiple_references_multi_level_reverse(bool async) + { + await base.Include_multiple_references_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_with_join_clause_with_filter(bool async) + { + await base.Include_collection_with_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_OrderBy_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_list_does_not_contains(async); + + AssertSql( +""" +@__list_0='["ALFKI"]' (Size = 4000) +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CASE + WHEN NOT EXISTS ( + SELECT 1 + FROM OPENJSON(@__list_0) WITH ([value] nchar(5) '$') AS [l] + WHERE [l].[value] = [c].[CustomerID]) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN NOT EXISTS ( + SELECT 1 + FROM OPENJSON(@__list_0) WITH ([value] nchar(5) '$') AS [l] + WHERE [l].[value] = [c].[CustomerID]) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_reference_dependent_already_tracked(bool async) + { + await base.Include_reference_dependent_already_tracked(async); + + AssertSql( +""" +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_reference_with_filter(bool async) + { + await base.Include_reference_with_filter(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_duplicate_reference(bool async) + { + await base.Include_duplicate_reference(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM (( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`CustomerID`, `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` +"""); + } + + public override async Task Include_with_complex_projection(bool async) + { + await base.Include_with_complex_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_skip(bool async) + { + await base.Include_collection_order_by_non_key_with_skip(async); + + AssertSql( +""" +@__p_0='2' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'F%' + ORDER BY [c].[ContactTitle] + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactTitle], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_on_join_clause_with_order_by_and_filter(bool async) + { + await base.Include_collection_on_join_clause_with_order_by_and_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`City`, `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_take(bool async) + { + await base.Multi_level_includes_are_applied_with_take(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_reference(bool async) + { + await base.Include_collection_then_reference(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM `Products` AS `p` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_collection_order_by_key(bool async) + { + await base.Include_collection_order_by_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter(bool async) + { + await base.Include_collection_with_outer_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_on_additional_from_clause2(bool async) + { + await base.Include_collection_on_additional_from_clause2(async); + + AssertSql( + """ +@p='5' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +`Customers` AS `c0` +ORDER BY `c1`.`CustomerID` +"""); + } + + public override async Task Include_collection_dependent_already_tracked(bool async) + { + await base.Include_collection_dependent_already_tracked(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_with_complex_projection_does_not_change_ordering_of_projection(bool async) + { + await base.Include_with_complex_projection_does_not_change_ordering_of_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id`, ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `TotalOrders` +FROM `Customers` AS `c` +WHERE `c`.`ContactTitle` = 'Owner' AND ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 2 +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_multi_level_collection_and_then_include_reference_predicate(bool async) + { + await base.Include_multi_level_collection_and_then_include_reference_predicate(async); + + AssertSql( + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10248 +) AS `o1` +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip_take(bool async) + { + await base.Multi_level_includes_are_applied_with_skip_take(async); + + AssertSql( + """ +@p='1' + +SELECT `c2`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c2`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_OrderBy_empty_list_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_contains(async); + + AssertSql( +""" +@__list_0='[]' (Size = 4000) +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CASE + WHEN EXISTS ( + SELECT 1 + FROM OPENJSON(@__list_0) WITH ([value] nchar(5) '$') AS [l] + WHERE [l].[value] = [c].[CustomerID]) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN EXISTS ( + SELECT 1 + FROM OPENJSON(@__list_0) WITH ([value] nchar(5) '$') AS [l] + WHERE [l].[value] = [c].[CustomerID]) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_references_and_collection_multi_level(bool async) + { + await base.Include_references_and_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 AND `o`.`UnitPrice` < 10.0 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_force_alias_uniquefication(bool async) + { + await base.Include_collection_force_alias_uniquefication(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` = 'ALFKI' +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter_non_equality(bool async) + { + await base.Include_collection_with_outer_apply_with_filter_non_equality(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] <> [c].[CustomerID] OR [o].[CustomerID] IS NULL + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_in_let_followed_by_FirstOrDefault(bool async) + { + await base.Include_in_let_followed_by_FirstOrDefault(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderDate]) AS [row] + FROM [Orders] AS [o] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +LEFT JOIN [Order Details] AS [o0] ON [t0].[OrderID] = [o0].[OrderID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t0].[OrderID], [o0].[OrderID] +"""); + } + + public override async Task Include_references_multi_level(bool async) + { + await base.Include_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_then_include_collection(bool async) + { + await base.Include_collection_then_include_collection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_with_multiple_conditional_order_by(bool async) + { + await base.Include_collection_with_multiple_conditional_order_by(async); + + AssertSql( + """ +@p='5' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `o`.`OrderID` > 0 AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +LEFT JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID0`, `o0`.`OrderID` +"""); + } + + public override async Task Include_reference_when_entity_in_projection(bool async) + { + await base.Include_reference_when_entity_in_projection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_reference_single_or_default_when_no_result(bool async) + { + await base.Include_reference_single_or_default_when_no_result(async); + + AssertSql( +""" +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Include_reference_alias_generation(bool async) + { + await base.Include_reference_alias_generation(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`OrderID` < 10800 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_references_then_include_collection_multi_level(bool async) + { + await base.Include_references_then_include_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_reference_Join_GroupBy_Select(bool async) + { + await base.Include_reference_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_when_projection(bool async) + { + await base.Include_collection_when_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +"""); + } + + public override async Task Include_reference_SelectMany_GroupBy_Select(bool async) + { + await base.Include_reference_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +"""); + } + + public override async Task Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(bool async) + { + await base.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `c`.`City` = 'Seattle' +ORDER BY `c`.`CustomerID`, `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task SelectMany_Include_reference_GroupBy_Select(bool async) + { + await base.SelectMany_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_SelectMany_GroupBy_Select(bool async) + { + await base.Include_collection_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_OrderBy_list_contains(bool async) + { + await base.Include_collection_OrderBy_list_contains(async); + + AssertSql( +""" +@__list_0='["ALFKI"]' (Size = 4000) +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CASE + WHEN EXISTS ( + SELECT 1 + FROM OPENJSON(@__list_0) WITH ([value] nchar(5) '$') AS [l] + WHERE [l].[value] = [c].[CustomerID]) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN EXISTS ( + SELECT 1 + FROM OPENJSON(@__list_0) WITH ([value] nchar(5) '$') AS [l] + WHERE [l].[value] = [c].[CustomerID]) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip(bool async) + { + await base.Multi_level_includes_are_applied_with_skip(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_on_additional_from_clause(bool async) + { + await base.Include_collection_on_additional_from_clause(async); + + AssertSql( + """ +@p='5' + +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `c1`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +(( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'F%' +) AS `c2` +LEFT JOIN `Orders` AS `o` ON `c2`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +"""); + } + + public override async Task Include_reference_distinct_is_server_evaluated(bool async) + { + await base.Include_reference_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10250 +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_distinct_is_server_evaluated(bool async) + { + await base.Include_collection_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_reference_when_projection(bool async) + { + await base.Include_reference_when_projection(async); + + AssertSql( +""" +SELECT `o`.`CustomerID` +FROM `Orders` AS `o` +"""); + } + + public override async Task Include_duplicate_collection_result_operator(bool async) + { + await base.Include_duplicate_collection_result_operator(async); + + AssertSql( +""" +@__p_1='1' +@__p_0='2' + +SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region], [t1].[CustomerID0], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t1].[Address0], [t1].[City0], [t1].[CompanyName0], [t1].[ContactName0], [t1].[ContactTitle0], [t1].[Country0], [t1].[Fax0], [t1].[Phone0], [t1].[PostalCode0], [t1].[Region0], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM ( + SELECT TOP(@__p_1) [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [t0].[CustomerID] AS [CustomerID0], [t0].[Address] AS [Address0], [t0].[City] AS [City0], [t0].[CompanyName] AS [CompanyName0], [t0].[ContactName] AS [ContactName0], [t0].[ContactTitle] AS [ContactTitle0], [t0].[Country] AS [Country0], [t0].[Fax] AS [Fax0], [t0].[Phone] AS [Phone0], [t0].[PostalCode] AS [PostalCode0], [t0].[Region] AS [Region0] + FROM ( + SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] + ) AS [t] + CROSS JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t0] + ORDER BY [t].[CustomerID] +) AS [t1] +LEFT JOIN [Orders] AS [o] ON [t1].[CustomerID] = [o].[CustomerID] +LEFT JOIN [Orders] AS [o0] ON [t1].[CustomerID0] = [o0].[CustomerID] +ORDER BY [t1].[CustomerID], [t1].[CustomerID0], [o].[OrderID] +"""); + } + + public override async Task Include_reference(bool async) + { + await base.Include_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_multiple_references_and_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_and_collection_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_closes_reader(bool async) + { + await base.Include_closes_reader(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +""", + // + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +"""); + } + + public override async Task Include_with_skip(bool async) + { + await base.Include_with_skip(async); + + AssertSql( +""" +@__p_0='80' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY [c].[ContactName] + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactName], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_Join_GroupBy_Select(bool async) + { + await base.Include_collection_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_GroupBy_Select(bool async) + { + await base.Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [o1].[OrderID], [o1].[ProductID], [o1].[Discount], [o1].[Quantity], [o1].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o1] ON [t0].[OrderID] = [o1].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [o1].[OrderID] +"""); + } + + public override async Task Include_collection_orderby_take(bool async) + { + await base.Include_collection_orderby_take(async); + + AssertSql( + """ +@p='5' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Join_Include_collection_GroupBy_Select(bool async) + { + await base.Join_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_order_by_non_key(bool async) + { + await base.Include_collection_order_by_non_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`PostalCode`, `c`.`CustomerID` +"""); + } + + public override async Task Include_when_result_operator(bool async) + { + await base.Include_when_result_operator(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Include_duplicate_reference2(bool async) + { + await base.Include_duplicate_reference2(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Include_collection_and_reference(bool async) + { + await base.Include_collection_and_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_multiple_references_multi_level(bool async) + { + await base.Include_multiple_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_references_and_collection_multi_level_predicate(bool async) + { + await base.Include_references_and_collection_multi_level_predicate(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task SelectMany_Include_collection_GroupBy_Select(bool async) + { + await base.SelectMany_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_with_last(bool async) + { + await base.Include_collection_with_last(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_empty_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_does_not_contains(async); + + AssertSql( +""" +@__list_0='[]' (Size = 4000) +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CASE + WHEN NOT EXISTS ( + SELECT 1 + FROM OPENJSON(@__list_0) WITH ([value] nchar(5) '$') AS [l] + WHERE [l].[value] = [c].[CustomerID]) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN NOT EXISTS ( + SELECT 1 + FROM OPENJSON(@__list_0) WITH ([value] nchar(5) '$') AS [l] + WHERE [l].[value] = [c].[CustomerID]) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_reference_and_collection(bool async) + { + await base.Include_reference_and_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(bool async) + { + await base.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async); + + AssertSql( + """ +SELECT `e0`.`EmployeeID` IS NOT NULL, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e`.`EmployeeID` IN (1, 2) +ORDER BY `e`.`EmployeeID` +"""); + } + + public override async Task Include_reference_with_filter_reordered(bool async) + { + await base.Include_reference_with_filter_reordered(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_collection_order_by_subquery(bool async) + { + await base.Include_collection_order_by_subquery(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`EmployeeID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ) AS `c1` + ORDER BY `c1`.`c` +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_reference_and_collection_order_by(bool async) + { + await base.Include_reference_and_collection_order_by(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Then_include_collection_order_by_collection_column(bool async) + { + await base.Then_include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Orders` AS `o0` + LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level(bool async) + { + await base.Include_multiple_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_skip_no_order_by(bool async) + { + await base.Include_collection_skip_no_order_by(async); + + AssertSql( +""" +@__p_0='10' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[CustomerID] +"""); + } + + public override async Task Include_multi_level_reference_then_include_collection_predicate(bool async) + { + await base.Include_multi_level_reference_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` = 10248 +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` +"""); + } + + public override async Task Include_multiple_references_and_collection_multi_level(bool async) + { + await base.Include_multiple_references_and_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +"""); + } + + public override async Task Include_where_skip_take_projection(bool async) + { + await base.Include_where_skip_take_projection(async); + + AssertSql( + """ +@p1='2' +@p='1' + +SELECT `o0`.`CustomerID` +FROM ( + SELECT TOP @p1 `o2`.`OrderID`, `o2`.`ProductID` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` + FROM `Order Details` AS `o` + WHERE `o`.`Quantity` = CINT(10) + ORDER BY `o`.`OrderID`, `o`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` +"""); + } + + public override async Task Include_with_take(bool async) + { + await base.Include_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_multiple_references(bool async) + { + await base.Include_multiple_references(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_list(bool async) + { + await base.Include_list(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM `Products` AS `p` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_empty_reference_sets_IsLoaded(bool async) + { + await base.Include_empty_reference_sets_IsLoaded(async); + + AssertSql( +""" +SELECT TOP 1 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e0`.`EmployeeID` IS NULL +"""); + } + + public override async Task Include_references_then_include_collection_multi_level_predicate(bool async) + { + await base.Include_references_then_include_collection_multi_level_predicate(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_conditional_order_by(bool async) + { + await base.Include_collection_with_conditional_order_by(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY IIF(`c`.`CustomerID` LIKE 'S%', 1, 2), `c`.`CustomerID` +"""); + } + + public override async Task Include_non_existing_navigation(bool async) + { + await base.Include_non_existing_navigation(async); + + AssertSql(); + } + + public override async Task Include_property(bool async) + { + await base.Include_property(async); + + AssertSql(); + } + + public override async Task Include_property_after_navigation(bool async) + { + await base.Include_property_after_navigation(async); + + AssertSql(); + } + + public override async Task Include_property_expression_invalid(bool async) + { + await base.Include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Then_include_property_expression_invalid(bool async) + { + await base.Then_include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Filtered_include_with_multiple_ordering(bool async) + { + await base.Filtered_include_with_multiple_ordering(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderID] + OFFSET 1 ROWS +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderDate] DESC +"""); + } + + public override async Task Include_specified_on_non_entity_not_supported(bool async) + { + await base.Include_specified_on_non_entity_not_supported(async); + + AssertSql(); + } + + public override async Task Include_collection_with_client_filter(bool async) + { + await base.Include_collection_with_client_filter(async); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindFunctionsQueryLibRedTest.Functions.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindFunctionsQueryLibRedTest.Functions.cs new file mode 100644 index 00000000..8e05e615 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindFunctionsQueryLibRedTest.Functions.cs @@ -0,0 +1,240 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindFunctionsQueryLibRedTest : NorthwindFunctionsQueryRelationalTestBase> + { + public NorthwindFunctionsQueryLibRedTest( +#pragma warning disable IDE0060 // Remove unused parameter + NorthwindQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) +#pragma warning restore IDE0060 // Remove unused parameter + : base(fixture) + { + ClearLog(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Client_evaluation_of_uncorrelated_method_call(bool async) + { + await base.Client_evaluation_of_uncorrelated_method_call(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE `o`.`UnitPrice` < 7.0 AND 10 < `o`.`ProductID` +"""); + } + + public override async Task Sum_over_round_works_correctly_in_projection(bool async) + { + await base.Sum_over_round_works_correctly_in_projection(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, ( + SELECT IIF(SUM(ROUND(`o0`.`UnitPrice`, 2)) IS NULL, 0.0, SUM(ROUND(`o0`.`UnitPrice`, 2))) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `Sum` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10300 +"""); + } + + public override async Task Sum_over_round_works_correctly_in_projection_2(bool async) + { + await base.Sum_over_round_works_correctly_in_projection_2(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, ( + SELECT IIF(SUM(ROUND(`o0`.`UnitPrice` * `o0`.`UnitPrice`, 2)) IS NULL, 0.0, SUM(ROUND(`o0`.`UnitPrice` * `o0`.`UnitPrice`, 2))) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `Sum` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10300 +"""); + } + + public override async Task Sum_over_truncate_works_correctly_in_projection(bool async) + { + await base.Sum_over_truncate_works_correctly_in_projection(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, ( + SELECT IIF(SUM(FIX(`o0`.`UnitPrice`)) IS NULL, 0.0, SUM(FIX(`o0`.`UnitPrice`))) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `Sum` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10300 +"""); + } + + public override async Task Sum_over_truncate_works_correctly_in_projection_2(bool async) + { + await base.Sum_over_truncate_works_correctly_in_projection_2(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, ( + SELECT IIF(SUM(FIX(`o0`.`UnitPrice` * `o0`.`UnitPrice`)) IS NULL, 0.0, SUM(FIX(`o0`.`UnitPrice` * `o0`.`UnitPrice`))) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `Sum` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10300 +"""); + } + + public override async Task Where_functions_nested(bool isAsync) + { + await base.Where_functions_nested(isAsync); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE CDBL(IIF(LEN(`c`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`c`.`CustomerID`))))^2.0 = 25.0 + """); + } + + public override async Task Order_by_length_twice(bool isAsync) + { + await base.Order_by_length_twice(isAsync); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY IIF(LEN(`c`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`c`.`CustomerID`))), `c`.`CustomerID` + """); + } + + public override async Task Order_by_length_twice_followed_by_projection_of_naked_collection_navigation(bool isAsync) + { + await base.Order_by_length_twice_followed_by_projection_of_naked_collection_navigation(isAsync); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY IIF(LEN(`c`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`c`.`CustomerID`))), `c`.`CustomerID` + """); + } + + public override async Task Static_equals_nullable_datetime_compared_to_non_nullable(bool isAsync) + { + await base.Static_equals_nullable_datetime_compared_to_non_nullable(isAsync); + + AssertSql( + """ +@arg='1996-07-04T00:00:00.0000000' (DbType = DateTime) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderDate` = CDATE(@arg) +"""); + } + + public override async Task Static_equals_int_compared_to_long(bool isAsync) + { + await base.Static_equals_int_compared_to_long(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE FALSE +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task StandardDeviation(bool async) + { + await using var ctx = CreateContext(); + + var query = ctx.Set() + .GroupBy(od => od.ProductID) + .Select( + g => new + { + ProductID = g.Key, + SampleStandardDeviation = EF.Functions.StandardDeviationSample(g.Select(od => od.UnitPrice)), + PopulationStandardDeviation = EF.Functions.StandardDeviationPopulation(g.Select(od => od.UnitPrice)) + }); + + var results = async + ? await query.ToListAsync() + : [.. query]; + + var product9 = results.Single(r => r.ProductID == 9); + Assert.Equal(8.675943752699023, product9.SampleStandardDeviation.Value, 5); + Assert.Equal(7.759999999999856, product9.PopulationStandardDeviation.Value, 5); + + AssertSql( + """ +SELECT `o`.`ProductID`, StDev(`o`.`UnitPrice`) AS `SampleStandardDeviation`, StDevP(`o`.`UnitPrice`) AS `PopulationStandardDeviation` +FROM `Order Details` AS `o` +GROUP BY `o`.`ProductID` +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Variance(bool async) + { + await using var ctx = CreateContext(); + + var query = ctx.Set() + .GroupBy(od => od.ProductID) + .Select( + g => new + { + ProductID = g.Key, + SampleStandardDeviation = EF.Functions.VarianceSample(g.Select(od => od.UnitPrice)), + PopulationStandardDeviation = EF.Functions.VariancePopulation(g.Select(od => od.UnitPrice)) + }); + + var results = async + ? await query.ToListAsync() + : [.. query]; + + var product9 = results.Single(r => r.ProductID == 9); + Assert.Equal(75.2719999999972, product9.SampleStandardDeviation.Value, 5); + Assert.Equal(60.217599999997766, product9.PopulationStandardDeviation.Value, 5); + + AssertSql( + """ +SELECT `o`.`ProductID`, Var(`o`.`UnitPrice`) AS `SampleStandardDeviation`, VarP(`o`.`UnitPrice`) AS `PopulationStandardDeviation` +FROM `Order Details` AS `o` +GROUP BY `o`.`ProductID` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindGroupByQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindGroupByQueryLibRedTest.cs new file mode 100644 index 00000000..1feda465 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindGroupByQueryLibRedTest.cs @@ -0,0 +1,3872 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindGroupByQueryLibRedTest : NorthwindGroupByQueryRelationalTestBase> + { + // ReSharper disable once UnusedParameter.Local + public NorthwindGroupByQueryLibRedTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task GroupBy_Property_Select_Average(bool isAsync) + { + await base.GroupBy_Property_Select_Average(isAsync); + + AssertSql( + $""" + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + + // Validating that we don't generate warning when translating GroupBy. See Issue#11157 + Assert.DoesNotContain( + "The LINQ expression 'GroupBy(`o`.CustomerID, `o`)' could not be translated and will be evaluated locally.", + Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); + } + + public override async Task GroupBy_Property_Select_Average_with_group_enumerable_projected(bool async) + { + await base.GroupBy_Property_Select_Average_with_group_enumerable_projected(async); + + AssertSql(); + } + + public override async Task GroupBy_Property_Select_Count(bool isAsync) + { + await base.GroupBy_Property_Select_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_LongCount(bool isAsync) + { + await base.GroupBy_Property_Select_LongCount(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Count_with_nulls(bool async) + { + await base.GroupBy_Property_Select_Count_with_nulls(async); + + AssertSql( + """ +SELECT `c`.`City`, COUNT(*) AS `Faxes` +FROM `Customers` AS `c` +GROUP BY `c`.`City` +"""); + } + + public override async Task GroupBy_Property_Select_LongCount_with_nulls(bool async) + { + await base.GroupBy_Property_Select_LongCount_with_nulls(async); + + AssertSql( + """ +SELECT `c`.`City`, COUNT(*) AS `Faxes` +FROM `Customers` AS `c` +GROUP BY `c`.`City` +"""); + } + + public override async Task GroupBy_Property_Select_Max(bool isAsync) + { + await base.GroupBy_Property_Select_Max(isAsync); + + AssertSql( + $""" + SELECT MAX(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Min(bool isAsync) + { + await base.GroupBy_Property_Select_Min(isAsync); + + AssertSql( + $""" + SELECT MIN(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Sum(bool isAsync) + { + await base.GroupBy_Property_Select_Sum(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Sum_Min_Max_Avg(bool isAsync) + { + await base.GroupBy_Property_Select_Sum_Min_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Key_Average(bool isAsync) + { + await base.GroupBy_Property_Select_Key_Average(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, AVG(CDBL(`o`.`OrderID`)) AS `Average` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Key_Count(bool isAsync) + { + await base.GroupBy_Property_Select_Key_Count(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Count` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Key_LongCount(bool isAsync) + { + await base.GroupBy_Property_Select_Key_LongCount(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `LongCount` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Key_Max(bool isAsync) + { + await base.GroupBy_Property_Select_Key_Max(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, MAX(`o`.`OrderID`) AS `Max` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Key_Min(bool isAsync) + { + await base.GroupBy_Property_Select_Key_Min(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, MIN(`o`.`OrderID`) AS `Min` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Key_Sum(bool isAsync) + { + await base.GroupBy_Property_Select_Key_Sum(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Key_Sum_Min_Max_Avg(bool isAsync) + { + await base.GroupBy_Property_Select_Key_Sum_Min_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Sum_Min_Key_Max_Avg(bool isAsync) + { + await base.GroupBy_Property_Select_Sum_Min_Key_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, `o`.`CustomerID` AS `Key`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_key_multiple_times_and_aggregate(bool isAsync) + { + await base.GroupBy_Property_Select_key_multiple_times_and_aggregate(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key1`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Key_with_constant(bool isAsync) + { + await base.GroupBy_Property_Select_Key_with_constant(isAsync); + + AssertSql( + """ +SELECT `o0`.`Name`, `o0`.`CustomerID` AS `Value`, COUNT(*) AS `Count` +FROM ( + SELECT `o`.`CustomerID`, 'CustomerID' AS `Name` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Name`, `o0`.`CustomerID` +"""); + } + + public override async Task GroupBy_aggregate_projecting_conditional_expression(bool isAsync) + { + await base.GroupBy_aggregate_projecting_conditional_expression(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderDate` AS `Key`, IIF(COUNT(*) = 0, 1, IIF(SUM(IIF((`o`.`OrderID` MOD 2) = 0, 1, 0)) IS NULL, 0, SUM(IIF((`o`.`OrderID` MOD 2) = 0, 1, 0))) \ COUNT(*)) AS `SomeValue` +FROM `Orders` AS `o` +GROUP BY `o`.`OrderDate` +"""); + } + + public override async Task GroupBy_aggregate_projecting_conditional_expression_based_on_group_key(bool isAsync) + { + await base.GroupBy_aggregate_projecting_conditional_expression_based_on_group_key(isAsync); + + AssertSql( + $""" + SELECT IIF(`o`.`OrderDate` IS NULL, 'is null', 'is not null') AS `Key`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum` + FROM `Orders` AS `o` + GROUP BY `o`.`OrderDate` + """); + } + + public override async Task GroupBy_anonymous_Select_Average(bool isAsync) + { + await base.GroupBy_anonymous_Select_Average(isAsync); + + AssertSql( + $""" + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_anonymous_Select_Count(bool isAsync) + { + await base.GroupBy_anonymous_Select_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_anonymous_Select_LongCount(bool isAsync) + { + await base.GroupBy_anonymous_Select_LongCount(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_anonymous_Select_Max(bool isAsync) + { + await base.GroupBy_anonymous_Select_Max(isAsync); + + AssertSql( + $""" + SELECT MAX(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_anonymous_Select_Min(bool isAsync) + { + await base.GroupBy_anonymous_Select_Min(isAsync); + + AssertSql( + $""" + SELECT MIN(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_anonymous_Select_Sum(bool isAsync) + { + await base.GroupBy_anonymous_Select_Sum(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_anonymous_Select_Sum_Min_Max_Avg(bool isAsync) + { + await base.GroupBy_anonymous_Select_Sum_Min_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_anonymous_with_alias_Select_Key_Sum(bool isAsync) + { + await base.GroupBy_anonymous_with_alias_Select_Key_Sum(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Composite_Select_Average(bool isAsync) + { + await base.GroupBy_Composite_Select_Average(isAsync); + + AssertSql( + $""" + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Count(bool isAsync) + { + await base.GroupBy_Composite_Select_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_LongCount(bool isAsync) + { + await base.GroupBy_Composite_Select_LongCount(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Max(bool isAsync) + { + await base.GroupBy_Composite_Select_Max(isAsync); + + AssertSql( + $""" + SELECT MAX(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Min(bool isAsync) + { + await base.GroupBy_Composite_Select_Min(isAsync); + + AssertSql( + $""" + SELECT MIN(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Sum(bool isAsync) + { + await base.GroupBy_Composite_Select_Sum(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Sum_Min_Max_Avg(bool isAsync) + { + await base.GroupBy_Composite_Select_Sum_Min_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Key_Average(bool isAsync) + { + await base.GroupBy_Composite_Select_Key_Average(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID`, `o`.`EmployeeID`, AVG(CDBL(`o`.`OrderID`)) AS `Average` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Key_Count(bool isAsync) + { + await base.GroupBy_Composite_Select_Key_Count(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID`, `o`.`EmployeeID`, COUNT(*) AS `Count` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Key_LongCount(bool isAsync) + { + await base.GroupBy_Composite_Select_Key_LongCount(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID`, `o`.`EmployeeID`, COUNT(*) AS `LongCount` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Key_Max(bool isAsync) + { + await base.GroupBy_Composite_Select_Key_Max(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID`, `o`.`EmployeeID`, MAX(`o`.`OrderID`) AS `Max` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Key_Min(bool isAsync) + { + await base.GroupBy_Composite_Select_Key_Min(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID`, `o`.`EmployeeID`, MIN(`o`.`OrderID`) AS `Min` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Key_Sum(bool isAsync) + { + await base.GroupBy_Composite_Select_Key_Sum(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID`, `o`.`EmployeeID`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Key_Sum_Min_Max_Avg(bool isAsync) + { + await base.GroupBy_Composite_Select_Key_Sum_Min_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID`, `o`.`EmployeeID`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Sum_Min_Key_Max_Avg(bool isAsync) + { + await base.GroupBy_Composite_Select_Sum_Min_Key_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, `o`.`CustomerID`, `o`.`EmployeeID`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Sum_Min_Key_flattened_Max_Avg(bool isAsync) + { + await base.GroupBy_Composite_Select_Sum_Min_Key_flattened_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, `o`.`CustomerID`, `o`.`EmployeeID`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Dto_as_key_Select_Sum(bool isAsync) + { + await base.GroupBy_Dto_as_key_Select_Sum(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, `o`.`CustomerID`, `o`.`EmployeeID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Dto_as_element_selector_Select_Sum(bool isAsync) + { + await base.GroupBy_Dto_as_element_selector_Select_Sum(isAsync); + + AssertSql( + """ + SELECT IIF(SUM(IIF(`o`.`EmployeeID` IS NULL, NULL, CLNG(`o`.`EmployeeID`))) IS NULL, 0, SUM(IIF(`o`.`EmployeeID` IS NULL, NULL, CLNG(`o`.`EmployeeID`)))) AS `Sum`, `o`.`CustomerID` AS `Key` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Composite_Select_Dto_Sum_Min_Key_flattened_Max_Avg(bool isAsync) + { + await base.GroupBy_Composite_Select_Dto_Sum_Min_Key_flattened_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, `o`.`CustomerID` AS `CustomerId`, `o`.`EmployeeID` AS `EmployeeId`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Composite_Select_Sum_Min_part_Key_flattened_Max_Avg(bool isAsync) + { + await base.GroupBy_Composite_Select_Sum_Min_part_Key_flattened_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`, `o`.`EmployeeID` + """); + } + + public override async Task GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(bool isAsync) + { + await base.GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, MIN(`o0`.`OrderID`) AS `Min`, `o0`.`Key`, MAX(`o0`.`OrderID`) AS `Max`, AVG(CDBL(`o0`.`OrderID`)) AS `Avg` +FROM ( + SELECT `o`.`OrderID`, 2 AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_Constant_with_element_selector_Select_Sum(bool isAsync) + { + await base.GroupBy_Constant_with_element_selector_Select_Sum(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` +FROM ( + SELECT `o`.`OrderID`, 2 AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_Constant_with_element_selector_Select_Sum2(bool isAsync) + { + await base.GroupBy_Constant_with_element_selector_Select_Sum2(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` +FROM ( + SELECT `o`.`OrderID`, 2 AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_Constant_with_element_selector_Select_Sum3(bool isAsync) + { + await base.GroupBy_Constant_with_element_selector_Select_Sum3(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` +FROM ( + SELECT `o`.`OrderID`, 2 AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(bool isAsync) + { + await base.GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, MIN(`o0`.`OrderID`) AS `Min`, `o0`.`Key` AS `Random`, MAX(`o0`.`OrderID`) AS `Max`, AVG(CDBL(`o0`.`OrderID`)) AS `Avg` +FROM ( + SELECT `o`.`OrderID`, 2 AS `Key` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 10500 +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(bool isAsync) + { + await base.GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, `o0`.`Key` +FROM ( + SELECT `o`.`OrderID`, 2 AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_constant_with_where_on_grouping_with_aggregate_operators(bool async) + { + await base.GroupBy_constant_with_where_on_grouping_with_aggregate_operators(async); + + AssertSql( + """ +SELECT MIN(IIF(1 = `o0`.`Key`, `o0`.`OrderDate`, NULL)) AS `Min`, MAX(IIF(1 = `o0`.`Key`, `o0`.`OrderDate`, NULL)) AS `Max`, IIF(SUM(IIF(1 = `o0`.`Key`, `o0`.`OrderID`, NULL)) IS NULL, 0, SUM(IIF(1 = `o0`.`Key`, `o0`.`OrderID`, NULL))) AS `Sum`, AVG(IIF(1 = `o0`.`Key`, CDBL(`o0`.`OrderID`), NULL)) AS `Average` +FROM ( + SELECT `o`.`OrderID`, `o`.`OrderDate`, 1 AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +ORDER BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_param_Select_Sum_Min_Key_Max_Avg(bool isAsync) + { + await base.GroupBy_param_Select_Sum_Min_Key_Max_Avg(isAsync); + + AssertSql( + """ +@a='2' + +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, MIN(`o0`.`OrderID`) AS `Min`, `o0`.`Key`, MAX(`o0`.`OrderID`) AS `Max`, AVG(CDBL(`o0`.`OrderID`)) AS `Avg` +FROM ( + SELECT `o`.`OrderID`, CLNG(@a) AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_param_with_element_selector_Select_Sum(bool isAsync) + { + await base.GroupBy_param_with_element_selector_Select_Sum(isAsync); + + AssertSql( + """ +@a='2' + +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` +FROM ( + SELECT `o`.`OrderID`, CLNG(@a) AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_param_with_element_selector_Select_Sum2(bool isAsync) + { + await base.GroupBy_param_with_element_selector_Select_Sum2(isAsync); + + AssertSql( + """ +@a='2' + +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` +FROM ( + SELECT `o`.`OrderID`, CLNG(@a) AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_param_with_element_selector_Select_Sum3(bool isAsync) + { + await base.GroupBy_param_with_element_selector_Select_Sum3(isAsync); + + AssertSql( + """ +@a='2' + +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` +FROM ( + SELECT `o`.`OrderID`, CLNG(@a) AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_param_with_element_selector_Select_Sum_Min_Key_Max_Avg(bool isAsync) + { + await base.GroupBy_param_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync); + + AssertSql( + """ +@a='2' + +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, `o0`.`Key` +FROM ( + SELECT `o`.`OrderID`, CLNG(@a) AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_anonymous_key_type_mismatch_with_aggregate(bool isAsync) + { + await base.GroupBy_anonymous_key_type_mismatch_with_aggregate(isAsync); + + AssertSql( + """ +SELECT COUNT(*) AS `I0`, `o0`.`I0` AS `I1` +FROM ( + SELECT DATEPART('yyyy', `o`.`OrderDate`) AS `I0` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`I0` +ORDER BY `o0`.`I0` +"""); + } + + public override async Task GroupBy_Property_scalar_element_selector_Average(bool isAsync) + { + await base.GroupBy_Property_scalar_element_selector_Average(isAsync); + + AssertSql( + $""" + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_scalar_element_selector_Count(bool isAsync) + { + await base.GroupBy_Property_scalar_element_selector_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_scalar_element_selector_LongCount(bool isAsync) + { + await base.GroupBy_Property_scalar_element_selector_LongCount(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_scalar_element_selector_Max(bool isAsync) + { + await base.GroupBy_Property_scalar_element_selector_Max(isAsync); + + AssertSql( + $""" + SELECT MAX(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_scalar_element_selector_Min(bool isAsync) + { + await base.GroupBy_Property_scalar_element_selector_Min(isAsync); + + AssertSql( + $""" + SELECT MIN(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_scalar_element_selector_Sum(bool isAsync) + { + await base.GroupBy_Property_scalar_element_selector_Sum(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_scalar_element_selector_Sum_Min_Max_Avg(bool isAsync) + { + await base.GroupBy_Property_scalar_element_selector_Sum_Min_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_anonymous_element_selector_Average(bool isAsync) + { + await base.GroupBy_Property_anonymous_element_selector_Average(isAsync); + + AssertSql( + $""" + SELECT AVG(CDBL(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_anonymous_element_selector_Count(bool isAsync) + { + await base.GroupBy_Property_anonymous_element_selector_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_anonymous_element_selector_LongCount(bool isAsync) + { + await base.GroupBy_Property_anonymous_element_selector_LongCount(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_anonymous_element_selector_Max(bool isAsync) + { + await base.GroupBy_Property_anonymous_element_selector_Max(isAsync); + + AssertSql( + $""" + SELECT MAX(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_anonymous_element_selector_Min(bool isAsync) + { + await base.GroupBy_Property_anonymous_element_selector_Min(isAsync); + + AssertSql( + $""" + SELECT MIN(`o`.`OrderID`) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_anonymous_element_selector_Sum(bool isAsync) + { + await base.GroupBy_Property_anonymous_element_selector_Sum(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_anonymous_element_selector_Sum_Min_Max_Avg(bool isAsync) + { + await base.GroupBy_Property_anonymous_element_selector_Sum_Min_Max_Avg(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`EmployeeID`) AS `Min`, MAX(`o`.`EmployeeID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_element_selector_complex_aggregate(bool isAsync) + { + await base.GroupBy_element_selector_complex_aggregate(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID` + 1) IS NULL, 0, SUM(`o`.`OrderID` + 1)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_element_selector_complex_aggregate2(bool isAsync) + { + await base.GroupBy_element_selector_complex_aggregate2(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID` + 1) IS NULL, 0, SUM(`o`.`OrderID` + 1)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_element_selector_complex_aggregate3(bool isAsync) + { + await base.GroupBy_element_selector_complex_aggregate3(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID` + 1) IS NULL, 0, SUM(`o`.`OrderID` + 1)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_element_selector_complex_aggregate4(bool isAsync) + { + await base.GroupBy_element_selector_complex_aggregate4(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID` + 1) IS NULL, 0, SUM(`o`.`OrderID` + 1)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task Element_selector_with_case_block_repeated_inside_another_case_block_in_projection(bool async) + { + await base.Element_selector_with_case_block_repeated_inside_another_case_block_in_projection(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, IIF(SUM(IIF(`o`.`CustomerID` = 'ALFKI', IIF(`o`.`OrderID` > 1000, `o`.`OrderID`, -`o`.`OrderID`), -IIF(`o`.`OrderID` > 1000, `o`.`OrderID`, -`o`.`OrderID`))) IS NULL, 0, SUM(IIF(`o`.`CustomerID` = 'ALFKI', IIF(`o`.`OrderID` > 1000, `o`.`OrderID`, -`o`.`OrderID`), -IIF(`o`.`OrderID` > 1000, `o`.`OrderID`, -`o`.`OrderID`)))) AS `Aggregate` +FROM `Orders` AS `o` +GROUP BY `o`.`OrderID` +"""); + } + + public override async Task GroupBy_conditional_properties(bool async) + { + await base.GroupBy_conditional_properties(async); + + AssertSql( + """ +SELECT `o0`.`OrderMonth`, `o0`.`CustomerID` AS `Customer`, COUNT(*) AS `Count` +FROM ( + SELECT `o`.`CustomerID`, CVar(NULL) AS `OrderMonth` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`OrderMonth`, `o0`.`CustomerID` +"""); + } + + public override async Task GroupBy_empty_key_Aggregate(bool isAsync) + { + await base.GroupBy_empty_key_Aggregate(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) +FROM ( + SELECT `o`.`OrderID`, 1 AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_empty_key_Aggregate_Key(bool isAsync) + { + await base.GroupBy_empty_key_Aggregate_Key(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` +FROM ( + SELECT `o`.`OrderID`, 1 AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task OrderBy_GroupBy_Aggregate(bool isAsync) + { + await base.OrderBy_GroupBy_Aggregate(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task OrderBy_Skip_GroupBy_Aggregate(bool isAsync) + { + await base.OrderBy_Skip_GroupBy_Aggregate(isAsync); + + AssertSql( + $""" + SELECT AVG(IIF(`t`.`OrderID` IS NULL, NULL, CDBL(`t`.`OrderID`))) + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + SKIP 80 + ) AS `t` + GROUP BY `t`.`CustomerID` + """); + } + + public override async Task OrderBy_Take_GroupBy_Aggregate(bool isAsync) + { + await base.OrderBy_Take_GroupBy_Aggregate(isAsync); + + AssertSql( + """ +@p='500' + +SELECT MIN(`o0`.`OrderID`) +FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +GROUP BY `o0`.`CustomerID` +"""); + } + + public override async Task OrderBy_Skip_Take_GroupBy_Aggregate(bool isAsync) + { + await base.OrderBy_Skip_Take_GroupBy_Aggregate(isAsync); + + AssertSql( + """ +@p1='500' +@p='80' + +SELECT MAX(`o0`.`OrderID`) +FROM ( + SELECT `o2`.`OrderID`, `o2`.`CustomerID` + FROM ( + SELECT TOP @p1 `o1`.`OrderID`, `o1`.`CustomerID` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1` + ORDER BY `o1`.`OrderID` DESC + ) AS `o2` + ORDER BY `o2`.`OrderID` +) AS `o0` +GROUP BY `o0`.`CustomerID` +"""); + } + + public override async Task Distinct_GroupBy_Aggregate(bool isAsync) + { + await base.Distinct_GroupBy_Aggregate(isAsync); + + AssertSql( + """ +SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `c` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`CustomerID` +"""); + } + + public override async Task Anonymous_projection_Distinct_GroupBy_Aggregate(bool isAsync) + { + await base.Anonymous_projection_Distinct_GroupBy_Aggregate(isAsync); + + AssertSql( + """ +SELECT `o0`.`EmployeeID` AS `Key`, COUNT(*) AS `c` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`EmployeeID` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`EmployeeID` +"""); + } + + public override async Task SelectMany_GroupBy_Aggregate(bool isAsync) + { + await base.SelectMany_GroupBy_Aggregate(isAsync); + + AssertSql( + $""" + SELECT `o`.`EmployeeID` AS `Key`, COUNT(*) AS `c` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + GROUP BY `o`.`EmployeeID` + """); + } + + public override async Task Join_GroupBy_Aggregate(bool isAsync) + { + await base.Join_GroupBy_Aggregate(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `Key`, AVG(CDBL(`o`.`OrderID`)) AS `Count` + FROM `Orders` AS `o` + INNER JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + GROUP BY `c`.`CustomerID` + """); + } + + public override async Task GroupBy_required_navigation_member_Aggregate(bool isAsync) + { + await base.GroupBy_required_navigation_member_Aggregate(isAsync); + + AssertSql( + $""" + SELECT `o0`.`CustomerID` AS `CustomerId`, COUNT(*) AS `Count` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + GROUP BY `o0`.`CustomerID` + """); + } + + public override async Task Join_complex_GroupBy_Aggregate(bool isAsync) + { + await base.Join_complex_GroupBy_Aggregate(isAsync); + + AssertSql( + """ +@p='100' +@p2='50' +@p1='10' + +SELECT `c0`.`CustomerID` AS `Key`, AVG(CDBL(`o0`.`OrderID`)) AS `Count` +FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10400 + ORDER BY `o`.`OrderDate` +) AS `o0` +INNER JOIN ( + SELECT `c2`.`CustomerID` + FROM ( + SELECT TOP @p2 `c1`.`CustomerID`, `c1`.`City` + FROM ( + SELECT TOP @p1 + @p2 `c`.`CustomerID`, `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` NOT IN ('DRACD', 'FOLKO') + ORDER BY `c`.`City` + ) AS `c1` + ORDER BY `c1`.`City` DESC + ) AS `c2` + ORDER BY `c2`.`City` +) AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` +GROUP BY `c0`.`CustomerID` +"""); + } + + public override async Task GroupJoin_GroupBy_Aggregate(bool isAsync) + { + await base.GroupJoin_GroupBy_Aggregate(isAsync); + + AssertSql( + """ + SELECT `o`.`CustomerID` AS `Key`, AVG(IIF(`o`.`OrderID` IS NULL, NULL, CDBL(`o`.`OrderID`))) AS `Average` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `o`.`OrderID` IS NOT NULL + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupJoin_GroupBy_Aggregate_2(bool isAsync) + { + await base.GroupJoin_GroupBy_Aggregate_2(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `Key`, MAX(`c`.`City`) AS `Max` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + GROUP BY `c`.`CustomerID` + """); + } + + public override async Task GroupJoin_GroupBy_Aggregate_3(bool isAsync) + { + await base.GroupJoin_GroupBy_Aggregate_3(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, AVG(CDBL(`o`.`OrderID`)) AS `Average` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupJoin_GroupBy_Aggregate_4(bool isAsync) + { + await base.GroupJoin_GroupBy_Aggregate_4(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `Value`, MAX(`c`.`City`) AS `Max` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + GROUP BY `c`.`CustomerID` + """); + } + + public override async Task GroupJoin_GroupBy_Aggregate_5(bool isAsync) + { + await base.GroupJoin_GroupBy_Aggregate_5(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID` AS `Value`, AVG(CDBL(`o`.`OrderID`)) AS `Average` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + GROUP BY `o`.`OrderID` + """); + } + + public override async Task GroupBy_optional_navigation_member_Aggregate(bool isAsync) + { + await base.GroupBy_optional_navigation_member_Aggregate(isAsync); + + AssertSql( + $""" + SELECT `c`.`Country`, COUNT(*) AS `Count` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + GROUP BY `c`.`Country` + """); + } + + public override async Task GroupJoin_complex_GroupBy_Aggregate(bool isAsync) + { + await base.GroupJoin_complex_GroupBy_Aggregate(isAsync); + + AssertSql( + """ +@p1='50' +@p='10' +@p2='100' + +SELECT `o0`.`CustomerID` AS `Key`, AVG(CDBL(`o0`.`OrderID`)) AS `Count` +FROM ( + SELECT `c2`.`CustomerID` + FROM ( + SELECT TOP @p1 `c1`.`CustomerID`, `c1`.`City` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` NOT IN ('DRACD', 'FOLKO') + ORDER BY `c`.`City` + ) AS `c1` + ORDER BY `c1`.`City` DESC + ) AS `c2` + ORDER BY `c2`.`City` +) AS `c0` +INNER JOIN ( + SELECT TOP @p2 `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10400 + ORDER BY `o`.`OrderDate` +) AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`OrderID` > 10300 +GROUP BY `o0`.`CustomerID` +"""); + } + + public override async Task Self_join_GroupBy_Aggregate(bool isAsync) + { + await base.Self_join_GroupBy_Aggregate(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, AVG(CDBL(`o0`.`OrderID`)) AS `Count` + FROM `Orders` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + WHERE `o`.`OrderID` < 10400 + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_multi_navigation_members_Aggregate(bool isAsync) + { + await base.GroupBy_multi_navigation_members_Aggregate(isAsync); + + AssertSql( + $""" + SELECT `o0`.`CustomerID`, `p`.`ProductName`, COUNT(*) AS `Count` + FROM (`Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) + INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` + GROUP BY `o0`.`CustomerID`, `p`.`ProductName` + """); + } + + public override async Task Union_simple_groupby(bool isAsync) + { + await base.Union_simple_groupby(isAsync); + + AssertSql( + """ +SELECT `u`.`City` AS `Key`, COUNT(*) AS `Total` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`ContactTitle` = 'Owner' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'México D.F.' +) AS `u` +GROUP BY `u`.`City` +"""); + } + + public override async Task Select_anonymous_GroupBy_Aggregate(bool isAsync) + { + await base.Select_anonymous_GroupBy_Aggregate(isAsync); + + AssertSql( + $""" + SELECT MIN(`o`.`OrderDate`) AS `Min`, MAX(`o`.`OrderDate`) AS `Max`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_principal_key_property_optimization(bool isAsync) + { + await base.GroupBy_principal_key_property_optimization(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `Key`, COUNT(*) AS `Count` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + GROUP BY `c`.`CustomerID` + """); + } + + public override async Task GroupBy_after_anonymous_projection_and_distinct_followed_by_another_anonymous_projection(bool async) + { + await base.GroupBy_after_anonymous_projection_and_distinct_followed_by_another_anonymous_projection(async); + + AssertSql( + """ +SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `Count` +FROM ( + SELECT DISTINCT `o`.`CustomerID`, `o`.`OrderID` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`CustomerID` +"""); + } + + public override async Task GroupBy_complex_key_aggregate(bool async) + { + await base.GroupBy_complex_key_aggregate(async); + + AssertSql( + """ +SELECT `s`.`Key`, COUNT(*) AS `Count` +FROM ( + SELECT MID(`c`.`CustomerID`, 0 + 1, 1) AS `Key` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +) AS `s` +GROUP BY `s`.`Key` +"""); + } + + public override async Task GroupBy_complex_key_aggregate_2(bool async) + { + await base.GroupBy_complex_key_aggregate_2(async); + + AssertSql( + """ +SELECT `o0`.`Key` AS `Month`, IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Total`, ( + SELECT IIF(SUM(`o1`.`OrderID`) IS NULL, 0, SUM(`o1`.`OrderID`)) + FROM `Orders` AS `o1` + WHERE DATEPART('m', `o1`.`OrderDate`) = `o0`.`Key`) AS `Payment` +FROM ( + SELECT `o`.`OrderID`, DATEPART('m', `o`.`OrderDate`) AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task Select_collection_of_scalar_before_GroupBy_aggregate(bool async) + { + await base.Select_collection_of_scalar_before_GroupBy_aggregate(async); + + AssertSql( + """ +SELECT `c`.`City` AS `Key`, COUNT(*) AS `Count` +FROM `Customers` AS `c` +GROUP BY `c`.`City` +"""); + } + + public override async Task GroupBy_OrderBy_key(bool isAsync) + { + await base.GroupBy_OrderBy_key(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `c` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + ORDER BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_OrderBy_count(bool isAsync) + { + await base.GroupBy_OrderBy_count(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Count` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + ORDER BY COUNT(*), `o`.`CustomerID` + """); + } + + public override async Task GroupBy_OrderBy_count_Select_sum(bool isAsync) + { + await base.GroupBy_OrderBy_count_Select_sum(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + ORDER BY COUNT(*), `o`.`CustomerID` + """); + } + + public override async Task GroupBy_aggregate_Contains(bool isAsync) + { + await base.GroupBy_aggregate_Contains(isAsync); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + GROUP BY `o0`.`CustomerID` + HAVING COUNT(*) > 30 AND (`o0`.`CustomerID` = `o`.`CustomerID` OR (`o0`.`CustomerID` IS NULL AND `o`.`CustomerID` IS NULL))) +"""); + } + + public override async Task GroupBy_aggregate_Pushdown(bool isAsync) + { + await base.GroupBy_aggregate_Pushdown(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='20'")} + + {AssertSqlHelper.Declaration("@__p_1='4'")} + + SELECT `t`.`CustomerID` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `o`.`CustomerID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 10 + ORDER BY `o`.`CustomerID` + ) AS `t` + ORDER BY `t`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + """); + } + + public override async Task GroupBy_aggregate_using_grouping_key_Pushdown(bool async) + { + await base.GroupBy_aggregate_using_grouping_key_Pushdown(async); + + AssertSql( + """ +@__p_0='20' +@__p_1='4' + +SELECT [t].[Key], [t].[Max] +FROM ( + SELECT TOP(@__p_0) [o].[CustomerID] AS [Key], MAX([o].[CustomerID]) AS [Max] + FROM [Orders] AS [o] + GROUP BY [o].[CustomerID] + HAVING COUNT(*) > 10 + ORDER BY [o].[CustomerID] +) AS [t] +ORDER BY [t].[Key] +OFFSET @__p_1 ROWS +"""); + } + + public override async Task GroupBy_aggregate_Pushdown_followed_by_projecting_Length(bool isAsync) + { + await base.GroupBy_aggregate_Pushdown_followed_by_projecting_Length(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='20'")} + + {AssertSqlHelper.Declaration("@__p_1='4'")} + + SELECT CAST(LEN(`t`.`CustomerID`) AS int) + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `o`.`CustomerID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 10 + ORDER BY `o`.`CustomerID` + ) AS `t` + ORDER BY `t`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + """); + } + + public override async Task GroupBy_aggregate_Pushdown_followed_by_projecting_constant(bool isAsync) + { + await base.GroupBy_aggregate_Pushdown_followed_by_projecting_constant(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='20'")} + + {AssertSqlHelper.Declaration("@__p_1='4'")} + + SELECT 5 + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `o`.`CustomerID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 10 + ORDER BY `o`.`CustomerID` + ) AS `t` + ORDER BY `t`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + """); + } + + public override async Task GroupBy_filter_key(bool isAsync) + { + await base.GroupBy_filter_key(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `c` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING `o`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task GroupBy_filter_count(bool isAsync) + { + await base.GroupBy_filter_count(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Count` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 4 + """); + } + + public override async Task GroupBy_count_filter(bool async) + { + await base.GroupBy_count_filter(async); + + AssertSql( + """ +SELECT `o0`.`Key` AS `Name`, COUNT(*) AS `Count` +FROM ( + SELECT 'Order' AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +HAVING COUNT(*) > 0 +"""); + } + + public override async Task GroupBy_filter_count_OrderBy_count_Select_sum(bool isAsync) + { + await base.GroupBy_filter_count_OrderBy_count_Select_sum(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Count`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 4 + ORDER BY COUNT(*), `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Aggregate_Join(bool isAsync) + { + await base.GroupBy_Aggregate_Join(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (( + SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 5 +) AS `o0` +INNER JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Orders` AS `o1` ON `o0`.`LastOrderID` = `o1`.`OrderID` +"""); + } + + public override async Task GroupBy_Aggregate_Join_converted_from_SelectMany(bool async) + { + await base.GroupBy_Aggregate_Join_converted_from_SelectMany(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); + } + + public override async Task GroupBy_Aggregate_LeftJoin_converted_from_SelectMany(bool async) + { + await base.GroupBy_Aggregate_LeftJoin_converted_from_SelectMany(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); + } + + public override async Task Join_GroupBy_Aggregate_multijoins(bool isAsync) + { + await base.Join_GroupBy_Aggregate_multijoins(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (`Customers` AS `c` +INNER JOIN ( + SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `o0`.`LastOrderID` = `o1`.`OrderID` +WHERE `o0`.`LastOrderID` IS NOT NULL AND `o1`.`OrderID` IS NOT NULL +"""); + } + + public override async Task Join_GroupBy_Aggregate_single_join(bool isAsync) + { + await base.Join_GroupBy_Aggregate_single_join(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`LastOrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); + } + + public override async Task Join_GroupBy_Aggregate_with_another_join(bool isAsync) + { + await base.Join_GroupBy_Aggregate_with_another_join(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`LastOrderID`, `o1`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN ( + SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID`) +INNER JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +"""); + } + + public override async Task Join_GroupBy_Aggregate_distinct_single_join(bool async) + { + await base.Join_GroupBy_Aggregate_distinct_single_join(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`LastOrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT DISTINCT `o0`.`CustomerID`, MAX(`o0`.`OrderID`) AS `LastOrderID` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, DATEPART('yyyy', `o`.`OrderDate`) AS `Year` + FROM `Orders` AS `o` + ) AS `o0` + GROUP BY `o0`.`CustomerID`, `o0`.`Year` + HAVING COUNT(*) > 5 +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +"""); + } + + public override async Task Join_GroupBy_Aggregate_with_left_join(bool async) + { + await base.Join_GroupBy_Aggregate_with_left_join(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`LastOrderID` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Join_GroupBy_Aggregate_in_subquery(bool isAsync) + { + await base.Join_GroupBy_Aggregate_in_subquery(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region` +FROM `Orders` AS `o` +INNER JOIN ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + INNER JOIN ( + SELECT `o0`.`CustomerID` + FROM `Orders` AS `o0` + GROUP BY `o0`.`CustomerID` + HAVING COUNT(*) > 5 + ) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +) AS `s` ON `o`.`CustomerID` = `s`.`CustomerID` +WHERE `o`.`OrderID` < 10400 +"""); + } + + public override async Task Join_GroupBy_Aggregate_on_key(bool isAsync) + { + await base.Join_GroupBy_Aggregate_on_key(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`LastOrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT `o`.`CustomerID` AS `Key`, MAX(`o`.`OrderID`) AS `LastOrderID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`Key` +"""); + } + + public override async Task GroupBy_with_result_selector(bool isAsync) + { + await base.GroupBy_with_result_selector(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Sum`, MIN(`o`.`OrderID`) AS `Min`, MAX(`o`.`OrderID`) AS `Max`, AVG(CDBL(`o`.`OrderID`)) AS `Avg` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Sum_constant(bool isAsync) + { + await base.GroupBy_Sum_constant(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(1) IS NULL, 0, SUM(1)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_Sum_constant_cast(bool isAsync) + { + await base.GroupBy_Sum_constant_cast(isAsync); + + AssertSql( + $""" + SELECT IIF(SUM(1) IS NULL, 0, SUM(1)) + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task Distinct_GroupBy_OrderBy_key(bool isAsync) + { + await base.Distinct_GroupBy_OrderBy_key(isAsync); + + AssertSql( + """ +SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `c` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`CustomerID` +ORDER BY `o0`.`CustomerID` +"""); + } + + public override async Task Select_nested_collection_with_groupby(bool isAsync) + { + await base.Select_nested_collection_with_groupby(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT CASE + WHEN EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) + THEN True ELSE False + END + ), `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A' & '%' + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_CustomerID='ALFKI' (Size = 5)")} + + SELECT `o1`.`OrderID` + FROM `Orders` AS `o1` + WHERE {AssertSqlHelper.Parameter("@_outer_CustomerID")} = `o1`.`CustomerID` + ORDER BY `o1`.`OrderID` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_CustomerID='ANATR' (Size = 5)")} + + SELECT `o1`.`OrderID` + FROM `Orders` AS `o1` + WHERE {AssertSqlHelper.Parameter("@_outer_CustomerID")} = `o1`.`CustomerID` + ORDER BY `o1`.`OrderID` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_CustomerID='ANTON' (Size = 5)")} + + SELECT `o1`.`OrderID` + FROM `Orders` AS `o1` + WHERE {AssertSqlHelper.Parameter("@_outer_CustomerID")} = `o1`.`CustomerID` + ORDER BY `o1`.`OrderID` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_CustomerID='AROUT' (Size = 5)")} + + SELECT `o1`.`OrderID` + FROM `Orders` AS `o1` + WHERE {AssertSqlHelper.Parameter("@_outer_CustomerID")} = `o1`.`CustomerID` + ORDER BY `o1`.`OrderID` + """); + } + + public override async Task Select_uncorrelated_collection_with_groupby_works(bool async) + { + await base.Select_uncorrelated_collection_with_groupby_works(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [t].[OrderID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + GROUP BY [o].[OrderID] +) AS [t] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task Select_uncorrelated_collection_with_groupby_multiple_collections_work(bool async) + { + await base.Select_uncorrelated_collection_with_groupby_multiple_collections_work(async); + + AssertSql( + """ +SELECT [o].[OrderID], [t].[ProductID], [t0].[c], [t0].[ProductID] +FROM [Orders] AS [o] +OUTER APPLY ( + SELECT [p].[ProductID] + FROM [Products] AS [p] + GROUP BY [p].[ProductID] +) AS [t] +OUTER APPLY ( + SELECT COUNT(*) AS [c], [p0].[ProductID] + FROM [Products] AS [p0] + GROUP BY [p0].[ProductID] +) AS [t0] +WHERE [o].[CustomerID] LIKE N'A%' +ORDER BY [o].[OrderID], [t].[ProductID] +"""); + } + + public override async Task Select_GroupBy_All(bool isAsync) + { + await base.Select_GroupBy_All(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING `o`.`CustomerID` <> 'ALFKI' OR `o`.`CustomerID` IS NULL) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task GroupBy_Where_Average(bool async) + { + await base.GroupBy_Where_Average(async); + + AssertSql( + """ +SELECT AVG(IIF(`o`.`OrderID` < 10300, CDBL(`o`.`OrderID`), NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Where_Count(bool async) + { + await base.GroupBy_Where_Count(async); + + AssertSql( + """ +SELECT COUNT(IIF(`o`.`OrderID` < 10300, 1, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Where_LongCount(bool async) + { + await base.GroupBy_Where_LongCount(async); + + AssertSql( + """ +SELECT COUNT(IIF(`o`.`OrderID` < 10300, 1, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Where_Max(bool async) + { + await base.GroupBy_Where_Max(async); + + AssertSql( + """ +SELECT MAX(IIF(`o`.`OrderID` < 10300, `o`.`OrderID`, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Where_Min(bool async) + { + await base.GroupBy_Where_Min(async); + + AssertSql( + """ +SELECT MIN(IIF(`o`.`OrderID` < 10300, `o`.`OrderID`, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Where_Sum(bool async) + { + await base.GroupBy_Where_Sum(async); + + AssertSql( + """ +SELECT IIF(SUM(IIF(`o`.`OrderID` < 10300, `o`.`OrderID`, NULL)) IS NULL, 0, SUM(IIF(`o`.`OrderID` < 10300, `o`.`OrderID`, NULL))) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Where_Count_with_predicate(bool async) + { + await base.GroupBy_Where_Count_with_predicate(async); + + AssertSql( + """ +SELECT COUNT(IIF(`o`.`OrderID` < 10300 AND `o`.`OrderDate` IS NOT NULL AND DATEPART('yyyy', `o`.`OrderDate`) = 1997, 1, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Where_Where_Count(bool async) + { + await base.GroupBy_Where_Where_Count(async); + + AssertSql( + """ +SELECT COUNT(IIF(`o`.`OrderID` < 10300 AND `o`.`OrderDate` IS NOT NULL AND DATEPART('yyyy', `o`.`OrderDate`) = 1997, 1, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Where_Select_Where_Count(bool async) + { + await base.GroupBy_Where_Select_Where_Count(async); + + AssertSql( + """ +SELECT COUNT(IIF(`o`.`OrderID` < 10300 AND `o`.`OrderDate` IS NOT NULL AND DATEPART('yyyy', `o`.`OrderDate`) = 1997, 1, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Where_Select_Where_Select_Min(bool async) + { + await base.GroupBy_Where_Select_Where_Select_Min(async); + + AssertSql( + """ +SELECT MIN(IIF(`o`.`OrderID` < 10300 AND `o`.`OrderDate` IS NOT NULL AND DATEPART('yyyy', `o`.`OrderDate`) = 1997, `o`.`OrderID`, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_multiple_Count_with_predicate(bool async) + { + await base.GroupBy_multiple_Count_with_predicate(async); + + AssertSql( + """ +SELECT `o`.`CustomerID`, COUNT(*) AS `All`, COUNT(IIF(`o`.`OrderID` < 11000, 1, NULL)) AS `TenK`, COUNT(IIF(`o`.`OrderID` < 12000, 1, NULL)) AS `EleventK` +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_multiple_Sum_with_conditional_projection(bool async) + { + await base.GroupBy_multiple_Sum_with_conditional_projection(async); + + AssertSql( + """ +SELECT `o`.`CustomerID`, IIF(SUM(IIF(`o`.`OrderID` < 11000, `o`.`OrderID`, 0)) IS NULL, 0, SUM(IIF(`o`.`OrderID` < 11000, `o`.`OrderID`, 0))) AS `TenK`, IIF(SUM(IIF(`o`.`OrderID` >= 11000, `o`.`OrderID`, 0)) IS NULL, 0, SUM(IIF(`o`.`OrderID` >= 11000, `o`.`OrderID`, 0))) AS `EleventK` +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_multiple_Sum_with_Select_conditional_projection(bool async) + { + await base.GroupBy_multiple_Sum_with_Select_conditional_projection(async); + + AssertSql( + """ +SELECT `o`.`CustomerID`, IIF(SUM(IIF(`o`.`OrderID` < 11000, `o`.`OrderID`, 0)) IS NULL, 0, SUM(IIF(`o`.`OrderID` < 11000, `o`.`OrderID`, 0))) AS `TenK`, IIF(SUM(IIF(`o`.`OrderID` >= 11000, `o`.`OrderID`, 0)) IS NULL, 0, SUM(IIF(`o`.`OrderID` >= 11000, `o`.`OrderID`, 0))) AS `EleventK` +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Key_as_part_of_element_selector(bool isAsync) + { + await base.GroupBy_Key_as_part_of_element_selector(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID` AS `Key`, AVG(CDBL(`o`.`OrderID`)) AS `Avg`, MAX(`o`.`OrderDate`) AS `Max` + FROM `Orders` AS `o` + GROUP BY `o`.`OrderID` + """); + } + + public override async Task GroupBy_composite_Key_as_part_of_element_selector(bool isAsync) + { + await base.GroupBy_composite_Key_as_part_of_element_selector(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, AVG(CDBL(`o`.`OrderID`)) AS `Avg`, MAX(`o`.`OrderDate`) AS `Max` + FROM `Orders` AS `o` + GROUP BY `o`.`OrderID`, `o`.`CustomerID` + """); + } + + public override async Task GroupBy_with_aggregate_through_navigation_property(bool isAsync) + { + await base.GroupBy_with_aggregate_through_navigation_property(isAsync); + + AssertSql( +""" +SELECT ( + SELECT MAX(`c`.`Region`) + FROM `Orders` AS `o0` + LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`EmployeeID` = `o0`.`EmployeeID` OR (`o`.`EmployeeID` IS NULL AND `o0`.`EmployeeID` IS NULL)) AS `max` +FROM `Orders` AS `o` +GROUP BY `o`.`EmployeeID` +"""); + } + + public override async Task GroupBy_with_aggregate_containing_complex_where(bool async) + { + await base.GroupBy_with_aggregate_containing_complex_where(async); + + AssertSql( + """ +SELECT `o`.`EmployeeID` AS `Key`, ( + SELECT MAX(`o0`.`OrderID`) + FROM `Orders` AS `o0` + WHERE IIF(`o0`.`EmployeeID` IS NULL, NULL, CLNG(`o0`.`EmployeeID`)) = IIF((MAX(`o`.`OrderID`) * 6) IS NULL, NULL, CLNG(MAX(`o`.`OrderID`) * 6)) OR (`o0`.`EmployeeID` IS NULL AND MAX(`o`.`OrderID`) IS NULL)) AS `Max` +FROM `Orders` AS `o` +GROUP BY `o`.`EmployeeID` +"""); + } + + public override async Task GroupBy_Shadow(bool isAsync) + { + await base.GroupBy_Shadow(isAsync); + + AssertSql( +""" +SELECT ( + SELECT TOP 1 `e0`.`Title` + FROM `Employees` AS `e0` + WHERE `e0`.`Title` = 'Sales Representative' AND `e0`.`EmployeeID` = 1 AND (`e`.`Title` = `e0`.`Title` OR (`e`.`Title` IS NULL AND `e0`.`Title` IS NULL))) +FROM `Employees` AS `e` +WHERE `e`.`Title` = 'Sales Representative' AND `e`.`EmployeeID` = 1 +GROUP BY `e`.`Title` +"""); + } + + public override async Task GroupBy_Shadow2(bool isAsync) + { + await base.GroupBy_Shadow2(isAsync); + + AssertSql( + $""" + SELECT `t0`.`EmployeeID`, `t0`.`City`, `t0`.`Country`, `t0`.`FirstName`, `t0`.`ReportsTo`, `t0`.`Title` + FROM ( + SELECT `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`Title` = 'Sales Representative' AND `e`.`EmployeeID` = 1 + GROUP BY `e`.`Title` + ) AS `t` + LEFT JOIN ( + SELECT `t1`.`EmployeeID`, `t1`.`City`, `t1`.`Country`, `t1`.`FirstName`, `t1`.`ReportsTo`, `t1`.`Title` + FROM ( + SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title`, ROW_NUMBER() OVER(PARTITION BY `e0`.`Title` ORDER BY `e0`.`EmployeeID`) AS `row` + FROM `Employees` AS `e0` + WHERE `e0`.`Title` = 'Sales Representative' AND `e0`.`EmployeeID` = 1 + ) AS `t1` + WHERE `t1`.`row` <= 1 + ) AS `t0` ON `t`.`Title` = `t0`.`Title` + """); + } + + public override async Task GroupBy_Shadow3(bool isAsync) + { + await base.GroupBy_Shadow3(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT TOP 1 `e0`.`Title` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = 1 AND `e`.`EmployeeID` = `e0`.`EmployeeID`) + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = 1 + GROUP BY `e`.`EmployeeID` + """); + } + + public override async Task GroupBy_select_grouping_list(bool async) + { + await base.GroupBy_select_grouping_list(async); + + AssertSql( + """ +SELECT `c1`.`City`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT `c`.`City` + FROM `Customers` AS `c` + GROUP BY `c`.`City` +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City` +"""); + } + + public override async Task GroupBy_select_grouping_array(bool async) + { + await base.GroupBy_select_grouping_array(async); + + AssertSql( + """ +SELECT `c1`.`City`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT `c`.`City` + FROM `Customers` AS `c` + GROUP BY `c`.`City` +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City` +"""); + } + + public override async Task GroupBy_select_grouping_composed_list(bool async) + { + await base.GroupBy_select_grouping_composed_list(async); + + AssertSql( + """ +SELECT `c1`.`City`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT `c`.`City` + FROM `Customers` AS `c` + GROUP BY `c`.`City` +) AS `c1` +LEFT JOIN ( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'A%' +) AS `c2` ON `c1`.`City` = `c2`.`City` +ORDER BY `c1`.`City` +"""); + } + + public override async Task GroupBy_select_grouping_composed_list_2(bool async) + { + await base.GroupBy_select_grouping_composed_list_2(async); + + AssertSql( + """ +SELECT `c1`.`City`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT `c`.`City` + FROM `Customers` AS `c` + GROUP BY `c`.`City` +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City`, `c0`.`CustomerID` +"""); + } + + public override async Task Select_GroupBy_SelectMany(bool isAsync) + { + await base.Select_GroupBy_SelectMany(isAsync); + + AssertSql(); + } + + public override async Task Count_after_GroupBy_aggregate(bool isAsync) + { + await base.Count_after_GroupBy_aggregate(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o0` +"""); + } + + public override async Task LongCount_after_GroupBy_aggregate(bool async) + { + await base.LongCount_after_GroupBy_aggregate(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o0` +"""); + } + + public override async Task GroupBy_Select_Distinct_aggregate(bool async) + { + await base.GroupBy_Select_Distinct_aggregate(async); + + AssertSql( + """ +SELECT `o`.`CustomerID` AS `Key`, AVG(DISTINCT (CDBL(`o`.`OrderID`))) AS `Average`, COUNT(DISTINCT (`o`.`EmployeeID`)) AS `Count`, COUNT(DISTINCT (`o`.`EmployeeID`)) AS `LongCount`, MAX(`o`.`OrderDate`) AS `Max`, MIN(`o`.`OrderDate`) AS `Min`, IIF(SUM(DISTINCT (`o`.`OrderID`)) IS NULL, 0, SUM(DISTINCT (`o`.`OrderID`))) AS `Sum` +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_group_Distinct_Select_Distinct_aggregate(bool async) + { + await base.GroupBy_group_Distinct_Select_Distinct_aggregate(async); + + AssertSql( + """ +SELECT `o`.`CustomerID` AS `Key`, MAX(`o`.`OrderDate`) AS `Max` +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_group_Where_Select_Distinct_aggregate(bool async) + { + await base.GroupBy_group_Where_Select_Distinct_aggregate(async); + + AssertSql( + """ +SELECT `o`.`CustomerID` AS `Key`, MAX(IIF(`o`.`OrderDate` IS NOT NULL, `o`.`OrderDate`, NULL)) AS `Max` +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task MinMax_after_GroupBy_aggregate(bool isAsync) + { + await base.MinMax_after_GroupBy_aggregate(isAsync); + + AssertSql( + """ +SELECT MIN(`o0`.`c`) +FROM ( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `c` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o0` +""", + // + """ +SELECT MAX(`o0`.`c`) +FROM ( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `c` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o0` +"""); + } + + public override async Task All_after_GroupBy_aggregate(bool isAsync) + { + await base.All_after_GroupBy_aggregate(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task All_after_GroupBy_aggregate2(bool isAsync) + { + await base.All_after_GroupBy_aggregate2(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) < 0) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Any_after_GroupBy_aggregate(bool isAsync) + { + await base.Any_after_GroupBy_aggregate(isAsync); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Count_after_GroupBy_without_aggregate(bool isAsync) + { + await base.Count_after_GroupBy_without_aggregate(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o0` +"""); + } + + public override async Task Count_with_predicate_after_GroupBy_without_aggregate(bool async) + { + await base.Count_with_predicate_after_GroupBy_without_aggregate(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 1 +) AS `o0` +"""); + } + + public override async Task LongCount_after_GroupBy_without_aggregate(bool isAsync) + { + await base.LongCount_after_GroupBy_without_aggregate(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o0` +"""); + } + + public override async Task LongCount_with_predicate_after_GroupBy_without_aggregate(bool async) + { + await base.LongCount_with_predicate_after_GroupBy_without_aggregate(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 1 +) AS `o0` +"""); + } + + public override async Task Any_after_GroupBy_without_aggregate(bool async) + { + await base.Any_after_GroupBy_without_aggregate(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Any_with_predicate_after_GroupBy_without_aggregate(bool async) + { + await base.Any_with_predicate_after_GroupBy_without_aggregate(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) > 1) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task All_with_predicate_after_GroupBy_without_aggregate(bool async) + { + await base.All_with_predicate_after_GroupBy_without_aggregate(async); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING COUNT(*) <= 1) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task GroupBy_aggregate_followed_by_another_GroupBy_aggregate(bool async) + { + await base.GroupBy_aggregate_followed_by_another_GroupBy_aggregate(async); + + AssertSql( + """ +SELECT `o1`.`Key0` AS `Key`, IIF(SUM(`o1`.`Count`) IS NULL, 0, SUM(`o1`.`Count`)) AS `Count` +FROM ( + SELECT `o0`.`Count`, 1 AS `Key0` + FROM ( + SELECT COUNT(*) AS `Count` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + ) AS `o0` +) AS `o1` +GROUP BY `o1`.`Key0` +"""); + } + + [ConditionalTheory(Skip = "LibRed fails")] + public override async Task GroupBy_Count_in_projection(bool async) + { + await base.GroupBy_Count_in_projection(async); + + AssertSql( + """ +SELECT [o].[OrderID], [o].[OrderDate], CASE + WHEN EXISTS ( + SELECT 1 + FROM [Order Details] AS [o0] + WHERE [o].[OrderID] = [o0].[OrderID] AND [o0].[ProductID] < 25) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END AS [HasOrderDetails], CASE + WHEN ( + SELECT COUNT(*) + FROM ( + SELECT [p].[ProductName] + FROM [Order Details] AS [o1] + INNER JOIN [Products] AS [p] ON [o1].[ProductID] = [p].[ProductID] + WHERE [o].[OrderID] = [o1].[OrderID] AND [o1].[ProductID] < 25 + GROUP BY [p].[ProductName] + ) AS [t]) > 1 THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END AS [HasMultipleProducts] +FROM [Orders] AS [o] +WHERE [o].[OrderDate] IS NOT NULL +"""); + } + + public override async Task GroupBy_nominal_type_count(bool async) + { + await base.GroupBy_nominal_type_count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o0` +"""); + } + + public override async Task GroupBy_based_on_renamed_property_simple(bool isAsync) + { + await base.GroupBy_based_on_renamed_property_simple(isAsync); + + AssertSql( + $""" + SELECT `c`.`City` AS `Renamed`, COUNT(*) AS `Count` + FROM `Customers` AS `c` + GROUP BY `c`.`City` + """); + } + + public override async Task GroupBy_based_on_renamed_property_complex(bool isAsync) + { + await base.GroupBy_based_on_renamed_property_complex(isAsync); + + AssertSql( + """ +SELECT `c0`.`Renamed` AS `Key`, COUNT(*) AS `Count` +FROM ( + SELECT DISTINCT `c`.`City` AS `Renamed`, `c`.`CustomerID` + FROM `Customers` AS `c` +) AS `c0` +GROUP BY `c0`.`Renamed` +"""); + } + + public override async Task Join_groupby_anonymous_orderby_anonymous_projection(bool async) + { + await base.Join_groupby_anonymous_orderby_anonymous_projection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +GROUP BY `c`.`CustomerID`, `o`.`OrderDate` +ORDER BY `o`.`OrderDate` +"""); + } + + public override async Task Odata_groupby_empty_key(bool async) + { + await base.Odata_groupby_empty_key(async); + + AssertSql( + """ +SELECT 'TotalAmount' AS `Name`, IIF(SUM(CDEC(`o0`.`OrderID`)) IS NULL, 0.0, SUM(CDEC(`o0`.`OrderID`))) AS `Value` +FROM ( + SELECT `o`.`OrderID`, 1 AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_with_group_key_access_thru_navigation(bool isAsync) + { + await base.GroupBy_with_group_key_access_thru_navigation(isAsync); + + AssertSql( + $""" + SELECT `o0`.`CustomerID` AS `Key`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Aggregate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + GROUP BY `o0`.`CustomerID` + """); + } + + public override async Task GroupBy_with_group_key_access_thru_nested_navigation(bool isAsync) + { + await base.GroupBy_with_group_key_access_thru_nested_navigation(isAsync); + + AssertSql( + $""" + SELECT `c`.`Country` AS `Key`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Aggregate` + FROM (`Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` + GROUP BY `c`.`Country` + """); + } + + public override async Task GroupBy_with_group_key_being_navigation(bool isAsync) + { + await base.GroupBy_with_group_key_being_navigation(isAsync); + + AssertSql( + $""" + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Aggregate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + GROUP BY `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + """); + } + + public override async Task GroupBy_with_group_key_being_nested_navigation(bool isAsync) + { + await base.GroupBy_with_group_key_being_nested_navigation(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `Aggregate` + FROM (`Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` + GROUP BY `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """); + } + + public override async Task GroupBy_with_group_key_being_navigation_with_entity_key_projection(bool isAsync) + { + await base.GroupBy_with_group_key_being_navigation_with_entity_key_projection(isAsync); + + AssertSql( + $""" + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + GROUP BY `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + """); + } + + public override async Task GroupBy_with_group_key_being_navigation_with_complex_projection(bool isAsync) + { + await base.GroupBy_with_group_key_being_navigation_with_complex_projection(isAsync); + + AssertSql( + $@""); + } + + public override async Task GroupBy_with_order_by_skip_and_another_order_by(bool isAsync) + { + await base.GroupBy_with_order_by_skip_and_another_order_by(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='80'")} + + SELECT SUM(`t`.`OrderID`) + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`CustomerID`, `o`.`OrderID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + GROUP BY `t`.`CustomerID` + """); + } + + public override async Task GroupBy_Property_Select_Count_with_predicate(bool async) + { + await base.GroupBy_Property_Select_Count_with_predicate(async); + + AssertSql( + """ +SELECT COUNT(IIF(`o`.`OrderID` < 10300, 1, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_Property_Select_LongCount_with_predicate(bool async) + { + await base.GroupBy_Property_Select_LongCount_with_predicate(async); + + AssertSql( + """ +SELECT COUNT(IIF(`o`.`OrderID` < 10300, 1, NULL)) +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_orderby_projection_with_coalesce_operation(bool async) + { + await base.GroupBy_orderby_projection_with_coalesce_operation(async); + + AssertSql( + """ +SELECT IIF(`c`.`City` IS NULL, 'Unknown', `c`.`City`) AS `Locality`, COUNT(*) AS `Count` +FROM `Customers` AS `c` +GROUP BY `c`.`City` +ORDER BY COUNT(*) DESC, `c`.`City` +"""); + } + + public override async Task GroupBy_let_orderby_projection_with_coalesce_operation(bool async) + { + await base.GroupBy_let_orderby_projection_with_coalesce_operation(async); + + AssertSql(); + } + + public override async Task GroupBy_Min_Where_optional_relationship(bool async) + { + await base.GroupBy_Min_Where_optional_relationship(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` AS `Key`, COUNT(*) AS `Count` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +GROUP BY `c`.`CustomerID` +HAVING COUNT(*) <> 2 +"""); + } + + public override async Task GroupBy_Min_Where_optional_relationship_2(bool async) + { + await base.GroupBy_Min_Where_optional_relationship_2(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` AS `Key`, COUNT(*) AS `Count` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +GROUP BY `c`.`CustomerID` +HAVING COUNT(*) < 2 OR COUNT(*) > 2 +"""); + } + + public override async Task GroupBy_aggregate_over_a_subquery(bool async) + { + await base.GroupBy_aggregate_over_a_subquery(async); + + AssertSql( + """ +SELECT `o`.`CustomerID` AS `Key`, ( + SELECT COUNT(*) + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Count` +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_aggregate_join_with_grouping_key(bool async) + { + await base.GroupBy_aggregate_join_with_grouping_key(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`Count` +FROM ( + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Count` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o0` +INNER JOIN `Customers` AS `c` ON `o0`.`Key` = `c`.`CustomerID` +"""); + } + + public override async Task GroupBy_aggregate_join_with_group_result(bool async) + { + await base.GroupBy_aggregate_join_with_group_result(async); + + AssertSql( + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT `o`.`CustomerID` AS `Key`, MAX(`o`.`OrderDate`) AS `LastOrderDate` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o1` +INNER JOIN `Orders` AS `o0` ON (`o1`.`Key` = `o0`.`CustomerID` OR (`o1`.`Key` IS NULL AND `o0`.`CustomerID` IS NULL)) AND (`o1`.`LastOrderDate` = `o0`.`OrderDate` OR (`o1`.`LastOrderDate` IS NULL AND `o0`.`OrderDate` IS NULL)) +"""); + } + + public override async Task GroupBy_aggregate_from_right_side_of_join(bool async) + { + await base.GroupBy_aggregate_from_right_side_of_join(async); + + AssertSql( + """ +@p='10' + +SELECT `s0`.`CustomerID`, `s0`.`Address`, `s0`.`City`, `s0`.`CompanyName`, `s0`.`ContactName`, `s0`.`ContactTitle`, `s0`.`Country`, `s0`.`Fax`, `s0`.`Phone`, `s0`.`PostalCode`, `s0`.`Region`, `s0`.`Max` +FROM ( + SELECT TOP @p `s`.`CustomerID`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `s`.`Max` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`Max` + FROM `Customers` AS `c` + INNER JOIN ( + SELECT `o`.`CustomerID` AS `Key`, MAX(`o`.`OrderDate`) AS `Max` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + ) AS `o0` ON `c`.`CustomerID` = `o0`.`Key` + ORDER BY `o0`.`Max`, `c`.`CustomerID` + ) AS `s` + ORDER BY `s`.`Max` DESC, `s`.`CustomerID` DESC +) AS `s0` +ORDER BY `s0`.`Max`, `s0`.`CustomerID` +"""); + } + + public override async Task GroupBy_aggregate_join_another_GroupBy_aggregate(bool async) + { + await base.GroupBy_aggregate_join_another_GroupBy_aggregate(async); + + AssertSql( + """ +SELECT `o1`.`Key`, `o1`.`Total`, `o2`.`ThatYear` +FROM ( + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Total` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o1` +INNER JOIN ( + SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `ThatYear` + FROM `Orders` AS `o0` + WHERE DATEPART('yyyy', `o0`.`OrderDate`) = 1997 + GROUP BY `o0`.`CustomerID` +) AS `o2` ON `o1`.`Key` = `o2`.`Key` +"""); + } + + public override async Task GroupBy_aggregate_after_skip_0_take_0(bool async) + { + await base.GroupBy_aggregate_after_skip_0_take_0(async); + + AssertSql( + """ +SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `Total` +FROM ( + SELECT `o2`.`CustomerID` + FROM ( + SELECT `o1`.`CustomerID` + FROM ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE FALSE + ) AS `o1` + WHERE FALSE + ) AS `o2` +) AS `o0` +GROUP BY `o0`.`CustomerID` +"""); + } + + public override async Task GroupBy_skip_0_take_0_aggregate(bool async) + { + await base.GroupBy_skip_0_take_0_aggregate(async); + + AssertSql( + """ +SELECT `o1`.`Key`, `o1`.`Total` +FROM ( + SELECT `o0`.`Key`, `o0`.`Total` + FROM ( + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Total` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 10500 + GROUP BY `o`.`CustomerID` + HAVING FALSE + ) AS `o0` + WHERE FALSE +) AS `o1` +"""); + } + + public override async Task GroupBy_aggregate_followed_another_GroupBy_aggregate(bool async) + { + await base.GroupBy_aggregate_followed_another_GroupBy_aggregate(async); + + AssertSql( + """ +SELECT `o1`.`CustomerID` AS `Key`, COUNT(*) AS `Count` +FROM ( + SELECT `o0`.`CustomerID` + FROM ( + SELECT `o`.`CustomerID`, DATEPART('yyyy', `o`.`OrderDate`) AS `Year` + FROM `Orders` AS `o` + ) AS `o0` + GROUP BY `o0`.`CustomerID`, `o0`.`Year` +) AS `o1` +GROUP BY `o1`.`CustomerID` +"""); + } + + public override async Task GroupBy_aggregate_without_selectMany_selecting_first(bool async) + { + await base.GroupBy_aggregate_without_selectMany_selecting_first(async); + + AssertSql( + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT MIN(`o`.`OrderID`) AS `c` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o1`, +`Orders` AS `o0` +WHERE `o0`.`OrderID` = `o1`.`c` +"""); + } + + public override async Task GroupBy_aggregate_left_join_GroupBy_aggregate_left_join(bool async) + { + await base.GroupBy_aggregate_left_join_GroupBy_aggregate_left_join(async); + + AssertSql( + """ +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM ( + SELECT MIN([o].[OrderID]) AS [c] + FROM [Orders] AS [o] + GROUP BY [o].[CustomerID] +) AS [t] +CROSS JOIN [Orders] AS [o0] +WHERE [o0].[OrderID] = [t].[c] +"""); + } + + public override async Task GroupBy_selecting_grouping_key_list(bool async) + { + await base.GroupBy_selecting_grouping_key_list(async); + + AssertSql( + """ +SELECT `o1`.`CustomerID`, `o0`.`CustomerID`, `o0`.`OrderID` +FROM ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` +) AS `o1` +LEFT JOIN `Orders` AS `o0` ON `o1`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `o1`.`CustomerID` +"""); + } + + public override async Task GroupBy_with_grouping_key_using_Like(bool isAsync) + { + await base.GroupBy_with_grouping_key_using_Like(isAsync); + + AssertSql( + """ +SELECT `o0`.`Key`, COUNT(*) AS `Count` +FROM ( + SELECT (`o`.`CustomerID` LIKE 'A%') AND `o`.`CustomerID` IS NOT NULL AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_with_grouping_key_DateTime_Day(bool isAsync) + { + await base.GroupBy_with_grouping_key_DateTime_Day(isAsync); + + AssertSql( + """ +SELECT `o0`.`Key`, COUNT(*) AS `Count` +FROM ( + SELECT DATEPART('d', `o`.`OrderDate`) AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task GroupBy_with_cast_inside_grouping_aggregate(bool isAsync) + { + await base.GroupBy_with_cast_inside_grouping_aggregate(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Count`, IIF(SUM(CLNG(`o`.`OrderID`)) IS NULL, 0, SUM(CLNG(`o`.`OrderID`))) AS `Sum` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task Complex_query_with_groupBy_in_subquery1(bool async) + { + await base.Complex_query_with_groupBy_in_subquery1(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [t].[Sum], [t].[CustomerID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT COALESCE(SUM([o].[OrderID]), 0) AS [Sum], [o].[CustomerID] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + GROUP BY [o].[CustomerID] +) AS [t] +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task Complex_query_with_groupBy_in_subquery2(bool async) + { + await base.Complex_query_with_groupBy_in_subquery2(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [t].[Max], [t].[Sum], [t].[CustomerID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT MAX(CAST(LEN([o].[CustomerID]) AS int)) AS [Max], COALESCE(SUM([o].[OrderID]), 0) AS [Sum], [o].[CustomerID] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + GROUP BY [o].[CustomerID] +) AS [t] +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task Complex_query_with_groupBy_in_subquery3(bool async) + { + await base.Complex_query_with_groupBy_in_subquery3(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [t].[Max], [t].[Sum], [t].[CustomerID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT MAX(CAST(LEN([o].[CustomerID]) AS int)) AS [Max], COALESCE(SUM([o].[OrderID]), 0) AS [Sum], [o].[CustomerID] + FROM [Orders] AS [o] + GROUP BY [o].[CustomerID] +) AS [t] +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task Group_by_with_projection_into_DTO(bool async) + { + await base.Group_by_with_projection_into_DTO(async); + + AssertSql( + """ +SELECT CLNG(`o`.`OrderID`) AS `Id`, COUNT(*) AS `Count` +FROM `Orders` AS `o` +GROUP BY `o`.`OrderID` +"""); + } + + public override async Task Where_select_function_groupby_followed_by_another_select_with_aggregates(bool async) + { + await base.Where_select_function_groupby_followed_by_another_select_with_aggregates(async); + + AssertSql( + """ +SELECT `o`.`CustomerID` AS `Key`, IIF(SUM(IIF((2020 - DATEPART('yyyy', `o`.`OrderDate`)) <= 30, `o`.`OrderID`, 0)) IS NULL, 0, SUM(IIF((2020 - DATEPART('yyyy', `o`.`OrderDate`)) <= 30, `o`.`OrderID`, 0))) AS `Sum1`, IIF(SUM(IIF((2020 - DATEPART('yyyy', `o`.`OrderDate`)) > 30 AND (2020 - DATEPART('yyyy', `o`.`OrderDate`)) <= 60, `o`.`OrderID`, 0)) IS NULL, 0, SUM(IIF((2020 - DATEPART('yyyy', `o`.`OrderDate`)) > 30 AND (2020 - DATEPART('yyyy', `o`.`OrderDate`)) <= 60, `o`.`OrderID`, 0))) AS `Sum2` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` LIKE 'A%' +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task Group_by_column_project_constant(bool async) + { + await base.Group_by_column_project_constant(async); + + AssertSql( + """ +SELECT 42 +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +ORDER BY `o`.`CustomerID` +"""); + } + + public override async Task Key_plus_key_in_projection(bool async) + { + await base.Key_plus_key_in_projection(async); + + AssertSql( + """ +SELECT `o`.`OrderID` + `o`.`OrderID` AS `Value`, AVG(CDBL(`o`.`OrderID`)) AS `Average` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +GROUP BY `o`.`OrderID` +"""); + } + + public override async Task Group_by_with_arithmetic_operation_inside_aggregate(bool isAsync) + { + await base.Group_by_with_arithmetic_operation_inside_aggregate(isAsync); + + AssertSql( + """ + SELECT `o`.`CustomerID` AS `Key`, IIF(SUM(`o`.`OrderID` + IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`)))) IS NULL, 0, SUM(`o`.`OrderID` + IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`))))) AS `Sum` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + """); + } + + public override async Task GroupBy_scalar_subquery(bool async) + { + await base.GroupBy_scalar_subquery(async); + + AssertSql( + """ +SELECT `o0`.`Key`, COUNT(*) AS `Count` +FROM ( + SELECT ( + SELECT TOP 1 `c`.`ContactName` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Key` + FROM `Orders` AS `o` +) AS `o0` +GROUP BY `o0`.`Key` +"""); + } + + public override async Task AsEnumerable_in_subquery_for_GroupBy(bool async) + { + await base.AsEnumerable_in_subquery_for_GroupBy(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t2].[OrderID], [t2].[CustomerID], [t2].[EmployeeID], [t2].[OrderDate], [t2].[CustomerID0] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[CustomerID] AS [CustomerID0] + FROM ( + SELECT [o].[CustomerID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + GROUP BY [o].[CustomerID] + ) AS [t] + LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o0].[CustomerID] ORDER BY [o0].[OrderDate] DESC) AS [row] + FROM [Orders] AS [o0] + WHERE [o0].[CustomerID] = [c].[CustomerID] + ) AS [t1] + WHERE [t1].[row] <= 1 + ) AS [t0] ON [t].[CustomerID] = [t0].[CustomerID] +) AS [t2] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t2].[CustomerID0] +"""); + } + + public override async Task GroupBy_aggregate_from_multiple_query_in_same_projection(bool async) + { + await base.GroupBy_aggregate_from_multiple_query_in_same_projection(async); + + AssertSql( + """ +SELECT [t].[CustomerID], [t0].[Key], [t0].[C], [t0].[c0] +FROM ( + SELECT [o].[CustomerID] + FROM [Orders] AS [o] + GROUP BY [o].[CustomerID] +) AS [t] +OUTER APPLY ( + SELECT TOP(1) [e].[City] AS [Key], COUNT(*) + ( + SELECT COUNT(*) + FROM [Orders] AS [o0] + WHERE [t].[CustomerID] = [o0].[CustomerID] OR ([t].[CustomerID] IS NULL AND [o0].[CustomerID] IS NULL)) AS [C], 1 AS [c0] + FROM [Employees] AS [e] + WHERE [e].[City] = N'Seattle' + GROUP BY [e].[City] + ORDER BY (SELECT 1) +) AS [t0] +"""); + } + + public override async Task GroupBy_aggregate_from_multiple_query_in_same_projection_2(bool async) + { + await base.GroupBy_aggregate_from_multiple_query_in_same_projection_2(async); + + AssertSql( + """ +SELECT `o`.`CustomerID` AS `Key`, IIF(( + SELECT TOP 1 COUNT(*) + MIN(`o`.`OrderID`) + FROM `Employees` AS `e` + WHERE `e`.`City` = 'Seattle' + GROUP BY `e`.`City` + ORDER BY 1) IS NULL, 0, ( + SELECT TOP 1 COUNT(*) + MIN(`o`.`OrderID`) + FROM `Employees` AS `e` + WHERE `e`.`City` = 'Seattle' + GROUP BY `e`.`City` + ORDER BY 1)) AS `A` +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task GroupBy_aggregate_from_multiple_query_in_same_projection_3(bool async) + { + await base.GroupBy_aggregate_from_multiple_query_in_same_projection_3(async); + + AssertSql( + """ +SELECT [o].[CustomerID] AS [Key], COALESCE(( + SELECT TOP(1) COUNT(*) + ( + SELECT COUNT(*) + FROM [Orders] AS [o0] + WHERE [o].[CustomerID] = [o0].[CustomerID] OR ([o].[CustomerID] IS NULL AND [o0].[CustomerID] IS NULL)) + FROM [Employees] AS [e] + WHERE [e].[City] = N'Seattle' + GROUP BY [e].[City] + ORDER BY COUNT(*) + ( + SELECT COUNT(*) + FROM [Orders] AS [o0] + WHERE [o].[CustomerID] = [o0].[CustomerID] OR ([o].[CustomerID] IS NULL AND [o0].[CustomerID] IS NULL))), 0) AS [A] +FROM [Orders] AS [o] +GROUP BY [o].[CustomerID] +"""); + } + + public override async Task GroupBy_scalar_aggregate_in_set_operation(bool async) + { + await base.GroupBy_scalar_aggregate_in_set_operation(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, 0 AS `Sequence` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +UNION +SELECT `o`.`CustomerID`, 1 AS `Sequence` +FROM `Orders` AS `o` +GROUP BY `o`.`CustomerID` +"""); + } + + public override async Task Select_uncorrelated_collection_with_groupby_when_outer_is_distinct(bool async) + { + await base.Select_uncorrelated_collection_with_groupby_when_outer_is_distinct(async); + + AssertSql( + """ +SELECT [t].[City], [t0].[ProductID], [t1].[c], [t1].[ProductID] +FROM ( + SELECT DISTINCT [c].[City] + FROM [Orders] AS [o] + LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] + WHERE [o].[CustomerID] LIKE N'A%' +) AS [t] +OUTER APPLY ( + SELECT [p].[ProductID] + FROM [Products] AS [p] + GROUP BY [p].[ProductID] +) AS [t0] +OUTER APPLY ( + SELECT COUNT(*) AS [c], [p0].[ProductID] + FROM [Products] AS [p0] + GROUP BY [p0].[ProductID] +) AS [t1] +ORDER BY [t].[City], [t0].[ProductID] +"""); + } + + public override async Task Select_correlated_collection_after_GroupBy_aggregate_when_identifier_does_not_change(bool async) + { + await base.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_does_not_change(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + GROUP BY `c`.`CustomerID` + HAVING `c`.`CustomerID` LIKE 'F%' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Select_correlated_collection_after_GroupBy_aggregate_when_identifier_changes(bool async) + { + await base.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_changes(async); + + AssertSql( + """ +SELECT `o1`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + HAVING `o`.`CustomerID` LIKE 'F%' +) AS `o1` +LEFT JOIN `Orders` AS `o0` ON `o1`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `o1`.`CustomerID` +"""); + } + + public override async Task Select_correlated_collection_after_GroupBy_aggregate_when_identifier_changes_to_complex(bool async) + => await base.Select_correlated_collection_after_GroupBy_aggregate_when_identifier_changes_to_complex(async); + + //AssertSql(" "); + public override async Task Complex_query_with_group_by_in_subquery5(bool async) + { + await base.Complex_query_with_group_by_in_subquery5(async); + + AssertSql( + """ +SELECT [t].[c], [t].[ProductID], [t0].[CustomerID], [t0].[City] +FROM ( + SELECT COALESCE(SUM([o].[ProductID] + [o].[OrderID] * 1000), 0) AS [c], [o].[ProductID], MIN([o].[OrderID] / 100) AS [c0] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o0].[CustomerID] = [c].[CustomerID] + WHERE [c].[CustomerID] = N'ALFKI' + GROUP BY [o].[ProductID] +) AS [t] +OUTER APPLY ( + SELECT [c0].[CustomerID], [c0].[City] + FROM [Customers] AS [c0] + WHERE CAST(LEN([c0].[CustomerID]) AS int) < [t].[c0] +) AS [t0] +ORDER BY [t].[ProductID], [t0].[CustomerID] +"""); + } + + public override async Task Complex_query_with_groupBy_in_subquery4(bool async) + { + await base.Complex_query_with_groupBy_in_subquery4(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [t1].[Sum], [t1].[Count], [t1].[Key] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT COALESCE(SUM([t].[OrderID]), 0) AS [Sum], ( + SELECT COUNT(*) + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c1].[CustomerID] AS [CustomerID0], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region], COALESCE([c1].[City], N'') + COALESCE([o0].[CustomerID], N'') AS [Key] + FROM [Orders] AS [o0] + LEFT JOIN [Customers] AS [c1] ON [o0].[CustomerID] = [c1].[CustomerID] + WHERE [c].[CustomerID] = [o0].[CustomerID] + ) AS [t0] + LEFT JOIN [Customers] AS [c0] ON [t0].[CustomerID] = [c0].[CustomerID] + WHERE ([t].[Key] = [t0].[Key] OR ([t].[Key] IS NULL AND [t0].[Key] IS NULL)) AND COALESCE([c0].[City], N'') + COALESCE([t0].[CustomerID], N'') LIKE N'Lon%') AS [Count], [t].[Key] + FROM ( + SELECT [o].[OrderID], COALESCE([c2].[City], N'') + COALESCE([o].[CustomerID], N'') AS [Key] + FROM [Orders] AS [o] + LEFT JOIN [Customers] AS [c2] ON [o].[CustomerID] = [c2].[CustomerID] + WHERE [c].[CustomerID] = [o].[CustomerID] + ) AS [t] + GROUP BY [t].[Key] +) AS [t1] +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task GroupBy_aggregate_SelectMany(bool async) + { + await base.GroupBy_aggregate_SelectMany(async); + + AssertSql(); + } + + public override async Task Final_GroupBy_property_entity(bool async) + { + await base.Final_GroupBy_property_entity(async); + + AssertSql( + """ +SELECT `c`.`City`, `c`.`CustomerID`, `c`.`Address`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`City` +"""); + } + + public override async Task Final_GroupBy_entity(bool async) + { + await base.Final_GroupBy_entity(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` < 10500 +ORDER BY `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +"""); + } + + public override async Task Final_GroupBy_property_entity_non_nullable(bool async) + { + await base.Final_GroupBy_property_entity_non_nullable(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE `o`.`OrderID` < 10500 +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Final_GroupBy_property_anonymous_type(bool async) + { + await base.Final_GroupBy_property_anonymous_type(async); + + AssertSql( + """ +SELECT `c`.`City`, `c`.`ContactName`, `c`.`ContactTitle` +FROM `Customers` AS `c` +ORDER BY `c`.`City` +"""); + } + + public override async Task Final_GroupBy_multiple_properties_entity(bool async) + { + await base.Final_GroupBy_multiple_properties_entity(async); + + AssertSql( + """ +SELECT `c`.`City`, `c`.`Region`, `c`.`CustomerID`, `c`.`Address`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode` +FROM `Customers` AS `c` +ORDER BY `c`.`City`, `c`.`Region` +"""); + } + + public override async Task Final_GroupBy_complex_key_entity(bool async) + { + await base.Final_GroupBy_complex_key_entity(async); + + AssertSql( + """ +SELECT `c0`.`City`, `c0`.`Region`, `c0`.`Constant`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, 1 AS `Constant` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`City`, `c0`.`Region`, `c0`.`Constant` +"""); + } + + public override async Task Final_GroupBy_nominal_type_entity(bool async) + { + await base.Final_GroupBy_nominal_type_entity(async); + + AssertSql( + """ +SELECT `c0`.`City`, `c0`.`Constant`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, 1 AS `Constant` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`City`, `c0`.`Constant` +"""); + } + + public override async Task Final_GroupBy_property_anonymous_type_element_selector(bool async) + { + await base.Final_GroupBy_property_anonymous_type_element_selector(async); + + AssertSql( + """ +SELECT `c`.`City`, `c`.`ContactName`, `c`.`ContactTitle` +FROM `Customers` AS `c` +ORDER BY `c`.`City` +"""); + } + + public override async Task Final_GroupBy_property_entity_Include_collection(bool async) + { + await base.Final_GroupBy_property_entity_Include_collection(async); + + AssertSql( + """ +SELECT `c`.`City`, `c`.`CustomerID`, `c`.`Address`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`Country` = 'USA' +ORDER BY `c`.`City`, `c`.`CustomerID` +"""); + } + + public override async Task Final_GroupBy_property_entity_projecting_collection(bool async) + { + await base.Final_GroupBy_property_entity_projecting_collection(async); + + AssertSql( + """ +SELECT `c`.`City`, `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`Country` = 'USA' +ORDER BY `c`.`City`, `c`.`CustomerID` +"""); + } + + public override async Task Final_GroupBy_property_entity_projecting_collection_composed(bool async) + { + await base.Final_GroupBy_property_entity_projecting_collection_composed(async); + + AssertSql( + """ +SELECT `c`.`City`, `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 11000 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`Country` = 'USA' +ORDER BY `c`.`City`, `c`.`CustomerID` +"""); + } + + public override async Task Final_GroupBy_property_entity_projecting_collection_and_single_result(bool async) + { + await base.Final_GroupBy_property_entity_projecting_collection_and_single_result(async); + + AssertSql( + """ +SELECT [c].[City], [c].[CustomerID], [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 11000 +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o0].[CustomerID] ORDER BY [o0].[OrderDate] DESC) AS [row] + FROM [Orders] AS [o0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +WHERE [c].[Country] = N'USA' +ORDER BY [c].[City], [c].[CustomerID] +"""); + } + + public override async Task Final_GroupBy_TagWith(bool async) + { + await base.Final_GroupBy_TagWith(async); + + AssertSql( + """ +-- foo + +SELECT `c`.`City`, `c`.`CustomerID`, `c`.`Address`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`City` +"""); + } + + public override async Task GroupBy_Where_with_grouping_result(bool async) + { + await base.GroupBy_Where_with_grouping_result(async); + + AssertSql(); + } + + public override async Task GroupBy_OrderBy_with_grouping_result(bool async) + { + await base.GroupBy_OrderBy_with_grouping_result(async); + + AssertSql(); + } + + public override async Task GroupBy_SelectMany(bool async) + { + await base.GroupBy_SelectMany(async); + + AssertSql(); + } + + public override async Task OrderBy_GroupBy_SelectMany(bool async) + { + await base.OrderBy_GroupBy_SelectMany(async); + + AssertSql(); + } + + public override async Task OrderBy_GroupBy_SelectMany_shadow(bool async) + { + await base.OrderBy_GroupBy_SelectMany_shadow(async); + + AssertSql(); + } + + public override async Task GroupBy_with_orderby_take_skip_distinct_followed_by_group_key_projection(bool async) + { + await base.GroupBy_with_orderby_take_skip_distinct_followed_by_group_key_projection(async); + + AssertSql(); + } + + public override async Task GroupBy_Distinct(bool async) + { + await base.GroupBy_Distinct(async); + + AssertSql(); + } + + public override async Task GroupBy_complex_key_without_aggregate(bool async) + { + await base.GroupBy_complex_key_without_aggregate(async); + + AssertSql( + """ +SELECT [t0].[Key], [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0] +FROM ( + SELECT [t].[Key] + FROM ( + SELECT SUBSTRING([c].[CustomerID], 0 + 1, 1) AS [Key] + FROM [Orders] AS [o] + LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] + ) AS [t] + GROUP BY [t].[Key] +) AS [t0] +LEFT JOIN ( + SELECT [t2].[OrderID], [t2].[CustomerID], [t2].[EmployeeID], [t2].[OrderDate], [t2].[CustomerID0], [t2].[Key] + FROM ( + SELECT [t3].[OrderID], [t3].[CustomerID], [t3].[EmployeeID], [t3].[OrderDate], [t3].[CustomerID0], [t3].[Key], ROW_NUMBER() OVER(PARTITION BY [t3].[Key] ORDER BY [t3].[OrderID], [t3].[CustomerID0]) AS [row] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c0].[CustomerID] AS [CustomerID0], SUBSTRING([c0].[CustomerID], 0 + 1, 1) AS [Key] + FROM [Orders] AS [o0] + LEFT JOIN [Customers] AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] + ) AS [t3] + ) AS [t2] + WHERE 1 < [t2].[row] AND [t2].[row] <= 3 +) AS [t1] ON [t0].[Key] = [t1].[Key] +ORDER BY [t0].[Key], [t1].[OrderID] +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryLibRedTest.cs new file mode 100644 index 00000000..230f2d4d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryLibRedTest.cs @@ -0,0 +1,2118 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class NorthwindIncludeNoTrackingQuerySqlServerTest : NorthwindIncludeNoTrackingQueryTestBase< + NorthwindQueryLibRedFixture> +{ + // ReSharper disable once UnusedParameter.Local + public NorthwindIncludeNoTrackingQuerySqlServerTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Include_collection_with_last_no_orderby(bool async) + => Assert.Equal( + RelationalStrings.LastUsedWithoutOrderBy(nameof(Enumerable.Last)), + (await Assert.ThrowsAsync( + () => base.Include_collection_with_last_no_orderby(async))).Message); + + public override async Task Include_duplicate_reference3(bool async) + { + await base.Include_duplicate_reference3(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Include_collection_Join_GroupBy_Select(bool async) + { + await base.Include_collection_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_with_filter(bool async) + { + await base.Include_collection_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_conditional_order_by(bool async) + { + await base.Include_collection_with_conditional_order_by(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY IIF(`c`.`CustomerID` LIKE 'S%', 1, 2), `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_include_collection_then_include_reference(bool async) + { + await base.Include_collection_then_include_collection_then_include_reference(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`OrderID0`, `s0`.`ProductID`, `s0`.`Discount`, `s0`.`Quantity`, `s0`.`UnitPrice`, `s0`.`ProductID0`, `s0`.`Discontinued`, `s0`.`ProductName`, `s0`.`SupplierID`, `s0`.`UnitPrice0`, `s0`.`UnitsInStock` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`OrderID` AS `OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` + FROM `Orders` AS `o` + LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` + ) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +) AS `s0` ON `c`.`CustomerID` = `s0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `s0`.`OrderID`, `s0`.`OrderID0`, `s0`.`ProductID` +"""); + } + + public override async Task Include_reference_and_collection(bool async) + { + await base.Include_reference_and_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_with_cross_join_clause_with_filter(bool async) + { + await base.Include_collection_with_cross_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID`), +( + SELECT TOP 5 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_OrderBy_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_list_does_not_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_alias_generation(bool async) + { + await base.Include_collection_alias_generation(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_multi_level_collection_and_then_include_reference_predicate(bool async) + { + await base.Include_multi_level_collection_and_then_include_reference_predicate(async); + + AssertSql( + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10248 +) AS `o1` +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_collection_force_alias_uniquefication(bool async) + { + await base.Include_collection_force_alias_uniquefication(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` = 'ALFKI' +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_then_include_collection_predicate(bool async) + { + await base.Include_collection_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(bool async) + { + await base.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `c`.`City` = 'Seattle' +ORDER BY `c`.`CustomerID`, `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_then_include_collection(bool async) + { + await base.Include_collection_then_include_collection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_reference_when_entity_in_projection(bool async) + { + await base.Include_reference_when_entity_in_projection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_reference_Join_GroupBy_Select(bool async) + { + await base.Include_reference_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_when_result_operator(bool async) + { + await base.Include_when_result_operator(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Include_duplicate_collection_result_operator(bool async) + { + await base.Include_duplicate_collection_result_operator(async); + + AssertSql( +""" +@__p_1='1' +@__p_0='2' + +SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region], [t1].[CustomerID0], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t1].[Address0], [t1].[City0], [t1].[CompanyName0], [t1].[ContactName0], [t1].[ContactTitle0], [t1].[Country0], [t1].[Fax0], [t1].[Phone0], [t1].[PostalCode0], [t1].[Region0], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM ( + SELECT TOP(@__p_1) [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [t0].[CustomerID] AS [CustomerID0], [t0].[Address] AS [Address0], [t0].[City] AS [City0], [t0].[CompanyName] AS [CompanyName0], [t0].[ContactName] AS [ContactName0], [t0].[ContactTitle] AS [ContactTitle0], [t0].[Country] AS [Country0], [t0].[Fax] AS [Fax0], [t0].[Phone] AS [Phone0], [t0].[PostalCode] AS [PostalCode0], [t0].[Region] AS [Region0] + FROM ( + SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] + ) AS [t] + CROSS JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t0] + ORDER BY [t].[CustomerID] +) AS [t1] +LEFT JOIN [Orders] AS [o] ON [t1].[CustomerID] = [o].[CustomerID] +LEFT JOIN [Orders] AS [o0] ON [t1].[CustomerID0] = [o0].[CustomerID] +ORDER BY [t1].[CustomerID], [t1].[CustomerID0], [o].[OrderID] +"""); + } + + public override async Task Include_duplicate_reference2(bool async) + { + await base.Include_duplicate_reference2(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_take(bool async) + { + await base.Include_collection_order_by_non_key_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_multiple_references(bool async) + { + await base.Include_multiple_references(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_OrderBy_list_contains(bool async) + { + await base.Include_collection_OrderBy_list_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_multiple_references_multi_level_reverse(bool async) + { + await base.Include_multiple_references_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_list(bool async) + { + await base.Include_list(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM `Products` AS `p` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_multiple_references_multi_level(bool async) + { + await base.Include_multiple_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip(bool async) + { + await base.Multi_level_includes_are_applied_with_skip(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_reference_dependent_already_tracked(bool async) + { + await base.Include_reference_dependent_already_tracked(async); + + AssertSql( +""" +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_collection_skip_take_no_order_by(bool async) + { + await base.Include_collection_skip_take_no_order_by(async); + + AssertSql( +""" +@__p_0='10' +@__p_1='5' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[CustomerID] +"""); + } + + public override async Task Include_with_complex_projection_does_not_change_ordering_of_projection(bool async) + { + await base.Include_with_complex_projection_does_not_change_ordering_of_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id`, ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `TotalOrders` +FROM `Customers` AS `c` +WHERE `c`.`ContactTitle` = 'Owner' AND ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 2 +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_where_skip_take_projection(bool async) + { + await base.Include_where_skip_take_projection(async); + + AssertSql( + """ +@p1='2' +@p='1' + +SELECT `o0`.`CustomerID` +FROM ( + SELECT TOP @p1 `o2`.`OrderID`, `o2`.`ProductID` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` + FROM `Order Details` AS `o` + WHERE `o`.`Quantity` = CINT(10) + ORDER BY `o`.`OrderID`, `o`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` +"""); + } + + public override async Task Include_collection_with_multiple_conditional_order_by(bool async) + { + await base.Include_collection_with_multiple_conditional_order_by(async); + + AssertSql( + """ +@p='5' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `o`.`OrderID` > 0 AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +LEFT JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID0`, `o0`.`OrderID` +"""); + } + + public override async Task Include_reference_with_filter(bool async) + { + await base.Include_reference_with_filter(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_collection_on_additional_from_clause2(bool async) + { + await base.Include_collection_on_additional_from_clause2(async); + + AssertSql( + """ +@p='5' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +`Customers` AS `c0` +ORDER BY `c1`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter(bool async) + { + await base.Include_collection_with_outer_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_reference_when_projection(bool async) + { + await base.Include_reference_when_projection(async); + + AssertSql( +""" +SELECT `o`.`CustomerID` +FROM `Orders` AS `o` +"""); + } + + public override async Task Include_references_then_include_multi_level(bool async) + { + await base.Include_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_take_no_order_by(bool async) + { + await base.Include_collection_take_no_order_by(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_with_skip(bool async) + { + await base.Include_with_skip(async); + + AssertSql( +""" +@__p_0='80' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY [c].[ContactName] + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactName], [t].[CustomerID] +"""); + } + + public override async Task Multi_level_includes_are_applied_with_take(bool async) + { + await base.Multi_level_includes_are_applied_with_take(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Then_include_collection_order_by_collection_column(bool async) + { + await base.Then_include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Orders` AS `o0` + LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_references_multi_level(bool async) + { + await base.Include_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_duplicate_collection_result_operator2(bool async) + { + await base.Include_duplicate_collection_result_operator2(async); + + AssertSql( +""" +@__p_1='1' +@__p_0='2' + +SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region], [t1].[CustomerID0], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t1].[Address0], [t1].[City0], [t1].[CompanyName0], [t1].[ContactName0], [t1].[ContactTitle0], [t1].[Country0], [t1].[Fax0], [t1].[Phone0], [t1].[PostalCode0], [t1].[Region0] +FROM ( + SELECT TOP(@__p_1) [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [t0].[CustomerID] AS [CustomerID0], [t0].[Address] AS [Address0], [t0].[City] AS [City0], [t0].[CompanyName] AS [CompanyName0], [t0].[ContactName] AS [ContactName0], [t0].[ContactTitle] AS [ContactTitle0], [t0].[Country] AS [Country0], [t0].[Fax] AS [Fax0], [t0].[Phone] AS [Phone0], [t0].[PostalCode] AS [PostalCode0], [t0].[Region] AS [Region0] + FROM ( + SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] + ) AS [t] + CROSS JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t0] + ORDER BY [t].[CustomerID] +) AS [t1] +LEFT JOIN [Orders] AS [o] ON [t1].[CustomerID] = [o].[CustomerID] +ORDER BY [t1].[CustomerID], [t1].[CustomerID0] +"""); + } + + public override async Task Include_collection_when_projection(bool async) + { + await base.Include_collection_when_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +"""); + } + + public override async Task Include_collection_GroupBy_Select(bool async) + { + await base.Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [o1].[OrderID], [o1].[ProductID], [o1].[Discount], [o1].[Quantity], [o1].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o1] ON [t0].[OrderID] = [o1].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [o1].[OrderID] +"""); + } + + public override async Task Include_collection_on_join_clause_with_order_by_and_filter(bool async) + { + await base.Include_collection_on_join_clause_with_order_by_and_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`City`, `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_with_take(bool async) + { + await base.Include_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_principal_already_tracked(bool async) + { + await base.Include_collection_principal_already_tracked(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_SelectMany_GroupBy_Select(bool async) + { + await base.Include_collection_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID] +"""); + } + + public override async Task Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(bool async) + { + await base.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async); + + AssertSql( + """ +SELECT `e0`.`EmployeeID` IS NOT NULL, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e`.`EmployeeID` IN (1, 2) +ORDER BY `e`.`EmployeeID` +"""); + } + + public override async Task Join_Include_collection_GroupBy_Select(bool async) + { + await base.Join_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID], [o3].[OrderID] +"""); + } + + public override async Task Include_duplicate_reference(bool async) + { + await base.Include_duplicate_reference(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM (( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`CustomerID`, `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` +"""); + } + + public override async Task Include_collection(bool async) + { + await base.Include_collection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_subquery(bool async) + { + await base.Include_collection_order_by_subquery(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`EmployeeID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ) AS `c1` + ORDER BY `c1`.`c` +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c`, `c0`.`CustomerID` +"""); + } + + public override async Task SelectMany_Include_reference_GroupBy_Select(bool async) + { + await base.SelectMany_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_with_cross_apply_with_filter(bool async) + { + await base.Include_collection_with_cross_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_order_by_non_key(bool async) + { + await base.Include_collection_order_by_non_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`PostalCode`, `c`.`CustomerID` +"""); + } + + public override async Task Include_reference_GroupBy_Select(bool async) + { + await base.Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + LEFT JOIN [Customers] AS [c] ON [o0].[CustomerID] = [c].[CustomerID] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_order_by_key(bool async) + { + await base.Include_collection_order_by_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_with_complex_projection(bool async) + { + await base.Include_with_complex_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter_non_equality(bool async) + { + await base.Include_collection_with_outer_apply_with_filter_non_equality(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] <> [c].[CustomerID] OR ([o].[CustomerID] IS NULL) + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_order_by_non_key_with_skip(bool async) + { + await base.Include_collection_order_by_non_key_with_skip(async); + + AssertSql( +""" +@__p_0='2' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'F%' + ORDER BY [c].[ContactTitle] + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactTitle], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_on_additional_from_clause(bool async) + { + await base.Include_collection_on_additional_from_clause(async); + + AssertSql( + """ +@p='5' + +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `c1`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +(( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'F%' +) AS `c2` +LEFT JOIN `Orders` AS `o` ON `c2`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +"""); + } + + public override async Task Repro9735(bool async) + { + await base.Repro9735(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`CustomerID` IS NOT NULL AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +LEFT JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID0`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_then_reference(bool async) + { + await base.Include_collection_then_reference(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM `Products` AS `p` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_collection_with_filter_reordered(bool async) + { + await base.Include_collection_with_filter_reordered(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip_take(bool async) + { + await base.Multi_level_includes_are_applied_with_skip_take(async); + + AssertSql( + """ +@p='1' + +SELECT `c2`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c2`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_order_by_collection_column(bool async) + { + await base.Include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_dependent_already_tracked(bool async) + { + await base.Include_collection_dependent_already_tracked(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_on_additional_from_clause_with_filter(bool async) + { + await base.Include_collection_on_additional_from_clause_with_filter(async); + + AssertSql( + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c`, +(( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI' +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` +"""); + } + + public override async Task Include_collection_orderby_take(bool async) + { + await base.Include_collection_orderby_take(async); + + AssertSql( + """ +@p='5' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_reference_with_filter_reordered(bool async) + { + await base.Include_reference_with_filter_reordered(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_collection_and_reference(bool async) + { + await base.Include_collection_and_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_OrderBy_object(bool async) + { + await base.Include_collection_OrderBy_object(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`OrderID` < 10250 +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_in_let_followed_by_FirstOrDefault(bool async) + { + await base.Include_in_let_followed_by_FirstOrDefault(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderDate]) AS [row] + FROM [Orders] AS [o] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +LEFT JOIN [Order Details] AS [o0] ON [t0].[OrderID] = [o0].[OrderID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t0].[OrderID], [o0].[OrderID] +"""); + } + + public override async Task Include_collection_order_by_non_key_with_first_or_default(bool async) + { + await base.Include_collection_order_by_non_key_with_first_or_default(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_reference(bool async) + { + await base.Include_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_reference_distinct_is_server_evaluated(bool async) + { + await base.Include_reference_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10250 +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_closes_reader(bool async) + { + await base.Include_closes_reader(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +""", + // + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +"""); + } + + public override async Task Filtered_include_with_multiple_ordering(bool async) + { + await base.Filtered_include_with_multiple_ordering(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderID] + OFFSET 1 ROWS +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderDate] DESC +"""); + } + + public override async Task SelectMany_Include_collection_GroupBy_Select(bool async) + { + await base.SelectMany_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_single_or_default_no_result(bool async) + { + await base.Include_collection_single_or_default_no_result(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI ?' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Join_Include_reference_GroupBy_Select(bool async) + { + await base.Join_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_skip_no_order_by(bool async) + { + await base.Include_collection_skip_no_order_by(async); + + AssertSql( +""" +@__p_0='10' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[CustomerID] +"""); + } + + public override async Task Include_collection_distinct_is_server_evaluated(bool async) + { + await base.Include_collection_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_empty_reference_sets_IsLoaded(bool async) + { + await base.Include_empty_reference_sets_IsLoaded(async); + + AssertSql( +""" +SELECT TOP 1 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e0`.`EmployeeID` IS NULL +"""); + } + + public override async Task Include_reference_alias_generation(bool async) + { + await base.Include_reference_alias_generation(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_with_last(bool async) + { + await base.Include_collection_with_last(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_duplicate_collection(bool async) + { + await base.Include_duplicate_collection(async); + + AssertSql( + """ +@p='2' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`), +(( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +LEFT JOIN `Orders` AS `o0` ON `c2`.`CustomerID` = `o0`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level(bool async) + { + await base.Include_multiple_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_reference_single_or_default_when_no_result(bool async) + { + await base.Include_reference_single_or_default_when_no_result(async); + + AssertSql( +""" +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Include_collection_with_join_clause_with_filter(bool async) + { + await base.Include_collection_with_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_left_join_clause_with_filter(bool async) + { + await base.Include_collection_with_left_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_right_join_clause_with_filter(bool async) + { + await base.Include_collection_with_right_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +RIGHT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_reference_SelectMany_GroupBy_Select(bool async) + { + await base.Include_reference_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_multi_level_reference_and_collection_predicate(bool async) + { + await base.Include_multi_level_reference_and_collection_predicate(async); + + AssertSql(); + } + + public override async Task Include_multi_level_reference_then_include_collection_predicate(bool async) + { + await base.Include_multi_level_reference_then_include_collection_predicate(async); + + AssertSql(); + } + + public override async Task Include_multiple_references_and_collection_multi_level(bool async) + { + await base.Include_multiple_references_and_collection_multi_level(async); + + AssertSql(); + } + + public override async Task Include_multiple_references_and_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_and_collection_multi_level_reverse(async); + + AssertSql(); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level(async); + + AssertSql(); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level_reverse(async); + + AssertSql(); + } + + public override async Task Include_reference_and_collection_order_by(bool async) + { + await base.Include_reference_and_collection_order_by(async); + + AssertSql(); + } + + public override async Task Include_references_and_collection_multi_level(bool async) + { + await base.Include_references_and_collection_multi_level(async); + + AssertSql(); + } + + public override async Task Include_references_and_collection_multi_level_predicate(bool async) + { + await base.Include_references_and_collection_multi_level_predicate(async); + + AssertSql(); + } + + public override async Task Include_references_then_include_collection(bool async) + { + await base.Include_references_then_include_collection(async); + + AssertSql(); + } + + public override async Task Include_references_then_include_collection_multi_level(bool async) + { + await base.Include_references_then_include_collection_multi_level(async); + + AssertSql(); + } + + public override async Task Include_references_then_include_collection_multi_level_predicate(bool async) + { + await base.Include_references_then_include_collection_multi_level_predicate(async); + + AssertSql(); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async); + + AssertSql(); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async); + + AssertSql(); + } + + public override async Task Include_property_after_navigation(bool async) + { + await base.Include_property_after_navigation(async); + + AssertSql(); + } + + public override async Task Include_property(bool async) + { + await base.Include_property(async); + + AssertSql(); + } + + public override async Task Include_property_expression_invalid(bool async) + { + await base.Include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Then_include_property_expression_invalid(bool async) + { + await base.Then_include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Include_collection_with_client_filter(bool async) + { + await base.Include_collection_with_client_filter(async); + + AssertSql(); + } + + public override async Task Include_specified_on_non_entity_not_supported(bool async) + { + await base.Include_specified_on_non_entity_not_supported(async); + + AssertSql(); + } + + public override async Task Include_collection_OrderBy_empty_list_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CAST(0 AS bit) AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY (SELECT 1) + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_OrderBy_empty_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_does_not_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CAST(1 AS bit) AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY (SELECT 1) + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindIncludeQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindIncludeQueryLibRedTest.cs new file mode 100644 index 00000000..7d2a532b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindIncludeQueryLibRedTest.cs @@ -0,0 +1,2297 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindIncludeQueryLibRedTest : NorthwindIncludeQueryRelationalTestBase> + { + private bool SupportsOffset => true; + + // ReSharper disable once UnusedParameter.Local + public NorthwindIncludeQueryLibRedTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Include_list(bool async) + { + await base.Include_list(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM `Products` AS `p` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_reference(bool async) + { + await base.Include_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_when_result_operator(bool async) + { + await base.Include_when_result_operator(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Include_collection(bool async) + { + await base.Include_collection(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Include_collection_with_last(bool async) + { + await base.Include_collection_with_last(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_skip_no_order_by(bool async) + { + await base.Include_collection_skip_no_order_by(async); + + if (SupportsOffset) + { + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY (SELECT 1) + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` + ORDER BY `t`.`CustomerID` + """); + } + } + + public override async Task Include_collection_take_no_order_by(bool async) + { + await base.Include_collection_take_no_order_by(async); + + if (SupportsOffset) + { + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + } + + public override async Task Include_collection_skip_take_no_order_by(bool async) + { + await base.Include_collection_skip_take_no_order_by(async); + + if (SupportsOffset) + { + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + {AssertSqlHelper.Declaration("@__p_1='5'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY (SELECT 1) + SKIP {AssertSqlHelper.Parameter("@__p_0")} FETCH NEXT {AssertSqlHelper.Parameter("@__p_1")} ROWS ONLY + ) AS `t` + LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` + ORDER BY `t`.`CustomerID` + """); + } + } + + public override async Task Include_reference_and_collection(bool async) + { + await base.Include_reference_and_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_references_multi_level(bool async) + { + await base.Include_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_multiple_references_multi_level(bool async) + { + await base.Include_multiple_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_multiple_references_multi_level_reverse(bool async) + { + await base.Include_multiple_references_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_references_and_collection_multi_level(bool async) + { + await base.Include_references_and_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 AND `o`.`UnitPrice` < 10.0 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_multi_level_reference_and_collection_predicate(bool async) + { + await base.Include_multi_level_reference_and_collection_predicate(async); + + AssertSql( + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` = 10248 +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` +"""); + } + + public override async Task Include_multi_level_collection_and_then_include_reference_predicate(bool async) + { + await base.Include_multi_level_collection_and_then_include_reference_predicate(async); + + AssertSql( + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10248 +) AS `o1` +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_collection_alias_generation(bool async) + { + await base.Include_collection_alias_generation(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_order_by_collection_column(bool async) + { + await base.Include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_key(bool async) + { + await base.Include_collection_order_by_key(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Include_collection_order_by_non_key(bool async) + { + await base.Include_collection_order_by_non_key(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`PostalCode`, `c`.`CustomerID` + """); + } + + public override async Task Include_collection_order_by_non_key_with_take(bool async) + { + await base.Include_collection_order_by_non_key_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_skip(bool async) + { + await base.Include_collection_order_by_non_key_with_skip(async); + + if (SupportsOffset) + { + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` + ORDER BY `t`.`ContactTitle`, `t`.`CustomerID`, `o`.`OrderID` + """); + } + } + + public override async Task Include_collection_order_by_non_key_with_first_or_default(bool async) + { + await base.Include_collection_order_by_non_key_with_first_or_default(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_subquery(bool async) + { + await base.Include_collection_order_by_subquery(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`EmployeeID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ) AS `c1` + ORDER BY `c1`.`c` +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_principal_already_tracked(bool async) + { + await base.Include_collection_principal_already_tracked(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_filter(bool async) + { + await base.Include_collection_with_filter(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Include_collection_with_filter_reordered(bool async) + { + await base.Include_collection_with_filter_reordered(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Include_collection_then_include_collection(bool async) + { + await base.Include_collection_then_include_collection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_then_include_collection_then_include_reference(bool async) + { + await base.Include_collection_then_include_collection_then_include_reference(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`OrderID0`, `s0`.`ProductID`, `s0`.`Discount`, `s0`.`Quantity`, `s0`.`UnitPrice`, `s0`.`ProductID0`, `s0`.`Discontinued`, `s0`.`ProductName`, `s0`.`SupplierID`, `s0`.`UnitPrice0`, `s0`.`UnitsInStock` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`OrderID` AS `OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` + FROM `Orders` AS `o` + LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` + ) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +) AS `s0` ON `c`.`CustomerID` = `s0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `s0`.`OrderID`, `s0`.`OrderID0`, `s0`.`ProductID` +"""); + } + + public override async Task Include_collection_when_projection(bool async) + { + await base.Include_collection_when_projection(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + """); + } + + public override async Task Include_collection_with_join_clause_with_filter(bool async) + { + await base.Include_collection_with_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_left_join_clause_with_filter(bool async) + { + await base.Include_collection_with_left_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_right_join_clause_with_filter(bool async) + { + await base.Include_collection_with_right_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +RIGHT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_cross_join_clause_with_filter(bool async) + { + await base.Include_collection_with_cross_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID`), +( + SELECT TOP 5 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_with_cross_apply_with_filter(bool async) + { + await base.Include_collection_with_cross_apply_with_filter(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter(bool async) + { + await base.Include_collection_with_outer_apply_with_filter(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_on_additional_from_clause_with_filter(bool async) + { + await base.Include_collection_on_additional_from_clause_with_filter(async); + + AssertSql( + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c`, +(( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI' +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` +"""); + } + + public override async Task Include_collection_on_additional_from_clause(bool async) + { + await base.Include_collection_on_additional_from_clause(async); + + AssertSql( + """ +@p='5' + +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `c1`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +(( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'F%' +) AS `c2` +LEFT JOIN `Orders` AS `o` ON `c2`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +"""); + } + + public override async Task Include_duplicate_collection(bool async) + { + await base.Include_duplicate_collection(async); + + if (SupportsOffset) + { + AssertSql( + """ +@p='2' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`), +(( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +LEFT JOIN `Orders` AS `o0` ON `c2`.`CustomerID` = `o0`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID`, `o`.`OrderID` +"""); + } + } + + public override async Task Include_duplicate_collection_result_operator(bool async) + { + await base.Include_duplicate_collection_result_operator(async); + + if (SupportsOffset) + { + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_1='1'")} + + {AssertSqlHelper.Declaration("@__p_0='2'")} + + SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region`, `t1`.`CustomerID0`, `t1`.`Address0`, `t1`.`City0`, `t1`.`CompanyName0`, `t1`.`ContactName0`, `t1`.`ContactTitle0`, `t1`.`Country0`, `t1`.`Fax0`, `t1`.`Phone0`, `t1`.`PostalCode0`, `t1`.`Region0`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_1")} `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`Address` AS `Address0`, `t0`.`City` AS `City0`, `t0`.`CompanyName` AS `CompanyName0`, `t0`.`ContactName` AS `ContactName0`, `t0`.`ContactTitle` AS `ContactTitle0`, `t0`.`Country` AS `Country0`, `t0`.`Fax` AS `Fax0`, `t0`.`Phone` AS `Phone0`, `t0`.`PostalCode` AS `PostalCode0`, `t0`.`Region` AS `Region0` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `t`, + ( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + SKIP 2 FETCH NEXT 2 ROWS ONLY + ) AS `t0` + ORDER BY `t`.`CustomerID` + ) AS `t1` + LEFT JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID` + LEFT JOIN `Orders` AS `o0` ON `t1`.`CustomerID0` = `o0`.`CustomerID` + ORDER BY `t1`.`CustomerID`, `t1`.`CustomerID0`, `o`.`OrderID`, `o0`.`OrderID` + """); + } + } + + public override async Task Include_collection_on_join_clause_with_order_by_and_filter(bool async) + { + await base.Include_collection_on_join_clause_with_order_by_and_filter(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM (`Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) + LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`City`, `c`.`CustomerID`, `o`.`OrderID` + """); + } + + public override async Task Include_collection_with_outer_apply_with_filter_non_equality(bool async) + { + await base.Include_collection_with_outer_apply_with_filter_non_equality(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] <> [c].[CustomerID] OR [o].[CustomerID] IS NULL + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_on_additional_from_clause2(bool async) + { + await base.Include_collection_on_additional_from_clause2(async); + + AssertSql( + """ +@p='5' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +`Customers` AS `c0` +ORDER BY `c1`.`CustomerID` +"""); + } + + public override async Task Include_where_skip_take_projection(bool async) + { + await base.Include_where_skip_take_projection(async); + + if (SupportsOffset) + { + AssertSql( + """ +@p1='2' +@p='1' + +SELECT `o0`.`CustomerID` +FROM ( + SELECT TOP @p1 `o2`.`OrderID`, `o2`.`ProductID` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` + FROM `Order Details` AS `o` + WHERE `o`.`Quantity` = CINT(10) + ORDER BY `o`.`OrderID`, `o`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` +"""); + } + } + + public override async Task Include_duplicate_collection_result_operator2(bool async) + { + await base.Include_duplicate_collection_result_operator2(async); + + if (SupportsOffset) + { + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_1='1'")} + + {AssertSqlHelper.Declaration("@__p_0='2'")} + + SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region`, `t1`.`CustomerID0`, `t1`.`Address0`, `t1`.`City0`, `t1`.`CompanyName0`, `t1`.`ContactName0`, `t1`.`ContactTitle0`, `t1`.`Country0`, `t1`.`Fax0`, `t1`.`Phone0`, `t1`.`PostalCode0`, `t1`.`Region0`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_1")} `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`Address` AS `Address0`, `t0`.`City` AS `City0`, `t0`.`CompanyName` AS `CompanyName0`, `t0`.`ContactName` AS `ContactName0`, `t0`.`ContactTitle` AS `ContactTitle0`, `t0`.`Country` AS `Country0`, `t0`.`Fax` AS `Fax0`, `t0`.`Phone` AS `Phone0`, `t0`.`PostalCode` AS `PostalCode0`, `t0`.`Region` AS `Region0` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `t`, + ( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + SKIP 2 FETCH NEXT 2 ROWS ONLY + ) AS `t0` + ORDER BY `t`.`CustomerID` + ) AS `t1` + LEFT JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID` + ORDER BY `t1`.`CustomerID`, `t1`.`CustomerID0`, `o`.`OrderID` + """); + } + } + + public override async Task Include_multiple_references(bool async) + { + await base.Include_multiple_references(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_reference_alias_generation(bool async) + { + await base.Include_reference_alias_generation(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_duplicate_reference(bool async) + { + await base.Include_duplicate_reference(async); + + if (SupportsOffset) + { + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM (( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`CustomerID`, `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` +"""); + } + } + + public override async Task Include_duplicate_reference2(bool async) + { + await base.Include_duplicate_reference2(async); + + if (SupportsOffset) + { + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + } + + public override async Task Include_duplicate_reference3(bool async) + { + await base.Include_duplicate_reference3(async); + + if (SupportsOffset) + { + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + } + + public override async Task Include_reference_when_projection(bool async) + { + await base.Include_reference_when_projection(async); + + AssertSql( + $""" + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + """); + } + + public override async Task Include_reference_with_filter_reordered(bool async) + { + await base.Include_reference_with_filter_reordered(async); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Include_reference_with_filter(bool async) + { + await base.Include_reference_with_filter(async); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Include_collection_dependent_already_tracked(bool async) + { + await base.Include_collection_dependent_already_tracked(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_reference_dependent_already_tracked(bool async) + { + await base.Include_reference_dependent_already_tracked(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_with_complex_projection(bool async) + { + await base.Include_with_complex_projection(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `Id` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + """); + } + + public override async Task Include_with_complex_projection_does_not_change_ordering_of_projection(bool async) + { + await base.Include_with_complex_projection_does_not_change_ordering_of_projection(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `Id`, ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `TotalOrders` + FROM `Customers` AS `c` + WHERE `c`.`ContactTitle` = 'Owner' AND ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 2 + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Include_with_take(bool async) + { + await base.Include_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_with_skip(bool async) + { + await base.Include_with_skip(async); + + if (SupportsOffset) + { + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='80'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` + ORDER BY `t`.`ContactName`, `t`.`CustomerID`, `o`.`OrderID` + """); + } + } + + public override async Task Include_collection_with_multiple_conditional_order_by(bool async) + { + await base.Include_collection_with_multiple_conditional_order_by(async); + + AssertSql( + """ +@p='5' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `o`.`OrderID` > 0 AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +LEFT JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID0`, `o0`.`OrderID` +"""); + } + + public override async Task Then_include_collection_order_by_collection_column(bool async) + { + await base.Then_include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Orders` AS `o0` + LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_with_conditional_order_by(bool async) + { + await base.Include_collection_with_conditional_order_by(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY IIF(`c`.`CustomerID` LIKE 'S%', 1, 2), `c`.`CustomerID` + """); + } + + public override async Task Include_collection_GroupBy_Select(bool async) + { + await base.Include_collection_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [o1].[OrderID], [o1].[ProductID], [o1].[Discount], [o1].[Quantity], [o1].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o1] ON [t0].[OrderID] = [o1].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [o1].[OrderID] +"""); + } + + public override async Task Include_reference_GroupBy_Select(bool async) + { + await base.Include_reference_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + LEFT JOIN [Customers] AS [c] ON [o0].[CustomerID] = [c].[CustomerID] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_Join_GroupBy_Select(bool async) + { + await base.Include_collection_Join_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID] +"""); + } + + public override async Task Include_reference_Join_GroupBy_Select(bool async) + { + await base.Include_reference_Join_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Join_Include_collection_GroupBy_Select(bool async) + { + await base.Join_Include_collection_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID], [o3].[OrderID] +"""); + } + + public override async Task Join_Include_reference_GroupBy_Select(bool async) + { + await base.Join_Include_reference_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_SelectMany_GroupBy_Select(bool async) + { + await base.Include_collection_SelectMany_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID] +"""); + } + + public override async Task Include_reference_SelectMany_GroupBy_Select(bool async) + { + await base.Include_reference_SelectMany_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task SelectMany_Include_collection_GroupBy_Select(bool async) + { + await base.SelectMany_Include_collection_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID], [o3].[OrderID] +"""); + } + + public override async Task SelectMany_Include_reference_GroupBy_Select(bool async) + { + await base.SelectMany_Include_reference_GroupBy_Select(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_reference_distinct_is_server_evaluated(bool async) + { + await base.Include_reference_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10250 +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_distinct_is_server_evaluated(bool async) + { + await base.Include_collection_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_object(bool async) + { + await base.Include_collection_OrderBy_object(async); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + WHERE `o`.`OrderID` < 10250 + ORDER BY `o`.`OrderID`, `o0`.`OrderID` + """); + } + + public override async Task Include_collection_OrderBy_empty_list_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_contains(async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_1='1'")} + + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A' & '%' + ORDER BY (SELECT 1), `c`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + """, + // + $""" + {AssertSqlHelper.Declaration("@__p_1='1'")} + + SELECT [c.Orders].`OrderID`, [c.Orders].`CustomerID`, [c.Orders].`EmployeeID`, [c.Orders].`OrderDate` + FROM `Orders` AS [c.Orders] + INNER JOIN ( + SELECT `c0`.`CustomerID`, False AS `c` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'A' & '%' + ORDER BY `c`, `c0`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + ) AS `t` ON [c.Orders].`CustomerID` = `t`.`CustomerID` + ORDER BY `t`.`c`, `t`.`CustomerID` + """); + } + + public override async Task Include_collection_OrderBy_empty_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_does_not_contains(async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_1='1'")} + + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A' & '%' + ORDER BY (SELECT 1), `c`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + """, + // + $""" + {AssertSqlHelper.Declaration("@__p_1='1'")} + + SELECT [c.Orders].`OrderID`, [c.Orders].`CustomerID`, [c.Orders].`EmployeeID`, [c.Orders].`OrderDate` + FROM `Orders` AS [c.Orders] + INNER JOIN ( + SELECT `c0`.`CustomerID`, True AS `c` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'A' & '%' + ORDER BY `c`, `c0`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + ) AS `t` ON [c.Orders].`CustomerID` = `t`.`CustomerID` + ORDER BY `t`.`c`, `t`.`CustomerID` + """); + } + + public override async Task Include_collection_OrderBy_list_contains(bool async) + { + await base.Include_collection_OrderBy_list_contains(async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_1='1'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, IIF(`c`.`CustomerID` IN ('ALFKI'), 1, 0) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A' & '%' + ORDER BY IIF(`c`.`CustomerID` IN ('ALFKI'), 1, 0) + SKIP {AssertSqlHelper.Parameter("@__p_1")} + ) AS `t` + LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` + ORDER BY `t`.`c`, `t`.`CustomerID`, `o`.`OrderID` + """); + } + + public override async Task Include_collection_OrderBy_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_list_does_not_contains(async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_1='1'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, IIF(`c`.`CustomerID` NOT IN ('ALFKI'), 1, 0) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A' & '%' + ORDER BY IIF(`c`.`CustomerID` NOT IN ('ALFKI'), 1, 0) + SKIP {AssertSqlHelper.Parameter("@__p_1")} + ) AS `t` + LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` + ORDER BY `t`.`c`, `t`.`CustomerID`, `o`.`OrderID` + """); + } + + public override async Task Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression( + bool async) + { + await base.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async); + + AssertSql( + """ +SELECT `e0`.`EmployeeID` IS NOT NULL, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e`.`EmployeeID` IN (1, 2) +ORDER BY `e`.`EmployeeID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip(bool async) + { + await base.Multi_level_includes_are_applied_with_skip(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_take(bool async) + { + await base.Multi_level_includes_are_applied_with_take(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip_take(bool async) + { + await base.Multi_level_includes_are_applied_with_skip_take(async); + + AssertSql( + """ +@p='1' + +SELECT `c2`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c2`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Filtered_include_with_multiple_ordering(bool async) + { + await base.Filtered_include_with_multiple_ordering(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderID] + OFFSET 1 ROWS +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderDate] DESC +"""); + } + + public override async Task Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(bool async) + { + await base.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async); + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `c`.`City` = 'Seattle' +ORDER BY `c`.`CustomerID`, `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_in_let_followed_by_FirstOrDefault(bool async) + { + await base.Include_in_let_followed_by_FirstOrDefault(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderDate]) AS [row] + FROM [Orders] AS [o] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +LEFT JOIN [Order Details] AS [o0] ON [t0].[OrderID] = [o0].[OrderID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t0].[OrderID], [o0].[OrderID] +"""); + } + + public override async Task Repro9735(bool async) + { + await base.Repro9735(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`CustomerID` IS NOT NULL AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +LEFT JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID0`, `o0`.`OrderID` +"""); + } + + public override async Task Include_closes_reader(bool async) + { + await base.Include_closes_reader(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +""", + // + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +"""); + } + + public override async Task Include_multiple_references_and_collection_multi_level(bool async) + { + await base.Include_multiple_references_and_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +"""); + } + + public override async Task Include_reference_single_or_default_when_no_result(bool async) + { + await base.Include_reference_single_or_default_when_no_result(async); + + AssertSql( +""" +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Include_empty_reference_sets_IsLoaded(bool async) + { + await base.Include_empty_reference_sets_IsLoaded(async); + + AssertSql( +""" +SELECT TOP 1 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e0`.`EmployeeID` IS NULL +"""); + } + + public override async Task Include_collection_orderby_take(bool async) + { + await base.Include_collection_orderby_take(async); + + AssertSql( + """ +@p='5' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_reference(bool async) + { + await base.Include_collection_then_reference(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM `Products` AS `p` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_references_then_include_multi_level(bool async) + { + await base.Include_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`OrderID` < 10800 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_references_then_include_collection_multi_level(bool async) + { + await base.Include_references_then_include_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_force_alias_uniquefication(bool async) + { + await base.Include_collection_force_alias_uniquefication(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` = 'ALFKI' +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level(bool async) + { + await base.Include_multiple_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_reference_and_collection_order_by(bool async) + { + await base.Include_reference_and_collection_order_by(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_single_or_default_no_result(bool async) + { + await base.Include_collection_single_or_default_no_result(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI ?' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_include_collection_predicate(bool async) + { + await base.Include_collection_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_references_then_include_collection(bool async) + { + await base.Include_references_then_include_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_and_reference(bool async) + { + await base.Include_collection_and_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`OrderID` < 10800 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +"""); + } + + public override async Task Include_references_and_collection_multi_level_predicate(bool async) + { + await base.Include_references_and_collection_multi_level_predicate(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_references_then_include_collection_multi_level_predicate(bool async) + { + await base.Include_references_then_include_collection_multi_level_predicate(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_multi_level_reference_then_include_collection_predicate(bool async) + { + await base.Include_multi_level_reference_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` = 10248 +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` +"""); + } + + public override async Task Include_reference_when_entity_in_projection(bool async) + { + await base.Include_reference_when_entity_in_projection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_multiple_references_and_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_and_collection_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_last_no_orderby(bool async) + { + await base.Include_collection_with_last_no_orderby(async); + + AssertSql(); + } + + public override async Task Include_property_after_navigation(bool async) + { + await base.Include_property_after_navigation(async); + + AssertSql(); + } + + public override async Task Include_property(bool async) + { + await base.Include_property(async); + + AssertSql(); + } + + public override async Task Include_property_expression_invalid(bool async) + { + await base.Include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Then_include_property_expression_invalid(bool async) + { + await base.Then_include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Include_collection_with_client_filter(bool async) + { + await base.Include_collection_with_client_filter(async); + + AssertSql(); + } + + public override async Task Include_specified_on_non_entity_not_supported(bool async) + { + await base.Include_specified_on_non_entity_not_supported(async); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindJoinQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindJoinQueryLibRedTest.cs new file mode 100644 index 00000000..437825a0 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindJoinQueryLibRedTest.cs @@ -0,0 +1,1088 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindJoinQueryLibRedTest : NorthwindJoinQueryRelationalTestBase> + { + public NorthwindJoinQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + ClearLog(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Join_customers_orders_projection(bool isAsync) + { + await base.Join_customers_orders_projection(isAsync); + + AssertSql( + $""" + SELECT `c`.`ContactName`, `o`.`OrderID` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task Join_customers_orders_entities(bool isAsync) + { + await base.Join_customers_orders_entities(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + """); + } + + public override async Task Join_select_many(bool isAsync) + { + await base.Join_select_many(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`), +`Employees` AS `e` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Client_Join_select_many(bool isAsync) + { + await base.Client_Join_select_many(isAsync); + + AssertSql(); + } + + public override async Task Join_customers_orders_select(bool isAsync) + { + await base.Join_customers_orders_select(isAsync); + + AssertSql( + $""" + SELECT `c`.`ContactName`, `o`.`OrderID` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task Join_customers_orders_with_subquery(bool isAsync) + { + await base.Join_customers_orders_with_subquery(isAsync); + + AssertSql( + """ +SELECT `c`.`ContactName`, `o`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Join_customers_orders_with_subquery_with_take(bool isAsync) + { + await base.Join_customers_orders_with_subquery_with_take(isAsync); + + AssertSql( + """ +@p='5' + +SELECT `c`.`ContactName`, `o0`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`CustomerID` = 'HANAR' +"""); + } + + public override async Task Join_customers_orders_with_subquery_anonymous_property_method(bool isAsync) + { + await base.Join_customers_orders_with_subquery_anonymous_property_method(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Join_customers_orders_with_subquery_anonymous_property_method_with_take(bool isAsync) + { + await base.Join_customers_orders_with_subquery_anonymous_property_method_with_take(isAsync); + + AssertSql( + """ +@p='5' + +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`CustomerID` = 'HANAR' +"""); + } + + public override async Task Join_customers_orders_with_subquery_predicate(bool isAsync) + { + await base.Join_customers_orders_with_subquery_predicate(isAsync); + + AssertSql( + """ +SELECT `c`.`ContactName`, `o0`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 0 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Join_customers_orders_with_subquery_predicate_with_take(bool isAsync) + { + await base.Join_customers_orders_with_subquery_predicate_with_take(isAsync); + + AssertSql( + """ +@p='5' + +SELECT `c`.`ContactName`, `o0`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 0 + ORDER BY `o`.`OrderID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`CustomerID` = 'HANAR' +"""); + } + + public override async Task Join_composite_key(bool isAsync) + { + await base.Join_composite_key(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Join_complex_condition(bool isAsync) + { + await base.Join_complex_condition(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c`, +( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10250 +) AS `o0` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Join_same_collection_multiple(bool isAsync) + { + await base.Join_same_collection_multiple(isAsync); + + AssertSql( + $""" + SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM (`Customers` AS `c` + INNER JOIN `Customers` AS `c0` ON `c`.`CustomerID` = `c0`.`CustomerID`) + INNER JOIN `Customers` AS `c1` ON `c`.`CustomerID` = `c1`.`CustomerID` + """); + } + + public override async Task Join_same_collection_force_alias_uniquefication(bool isAsync) + { + await base.Join_same_collection_force_alias_uniquefication(isAsync); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Orders` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task LeftJoin(bool async) + { + await base.LeftJoin(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +"""); + } + + public override async Task RightJoin(bool async) + { + await base.RightJoin(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +RIGHT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +"""); + } + + public override async Task GroupJoin_simple(bool isAsync) + { + await base.GroupJoin_simple(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + """); + } + + public override async Task GroupJoin_simple2(bool isAsync) + { + await base.GroupJoin_simple2(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task GroupJoin_simple3(bool isAsync) + { + await base.GroupJoin_simple3(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task GroupJoin_simple_ordering(bool isAsync) + { + await base.GroupJoin_simple_ordering(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`City` + """); + } + + public override async Task GroupJoin_simple_subquery(bool isAsync) + { + await base.GroupJoin_simple_subquery(isAsync); + + AssertSql( + """ +@p='4' + +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); + } + + public override async Task GroupJoin_as_final_operator(bool async) + { + await base.GroupJoin_as_final_operator(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Unflattened_GroupJoin_composed(bool async) + { + await base.Unflattened_GroupJoin_composed(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE (`c`.`CustomerID` LIKE 'F%') AND `c`.`City` = 'Lisboa' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Unflattened_GroupJoin_composed_2(bool async) + { + await base.Unflattened_GroupJoin_composed_2(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `c1`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM (`Customers` AS `c` +INNER JOIN ( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'Lisboa' +) AS `c1` ON `c`.`CustomerID` = `c1`.`CustomerID`) +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` +"""); + } + + public override async Task GroupJoin_DefaultIfEmpty(bool isAsync) + { + await base.GroupJoin_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + """); + } + + public override async Task GroupJoin_DefaultIfEmpty_multiple(bool isAsync) + { + await base.GroupJoin_DefaultIfEmpty_multiple(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM (`Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) + LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + """); + } + + public override async Task GroupJoin_DefaultIfEmpty2(bool isAsync) + { + await base.GroupJoin_DefaultIfEmpty2(isAsync); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Employees` AS `e` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` LIKE 'F%' +) AS `o0` ON `e`.`EmployeeID` = `o0`.`EmployeeID` +"""); + } + + public override async Task GroupJoin_DefaultIfEmpty3(bool isAsync) + { + await base.GroupJoin_DefaultIfEmpty3(isAsync); + + AssertSql( + """ +@p='1' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task GroupJoin_Where(bool isAsync) + { + await base.GroupJoin_Where(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `o`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task GroupJoin_Where_OrderBy(bool isAsync) + { + await base.GroupJoin_Where_OrderBy(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `o`.`CustomerID` = 'ALFKI' OR `c`.`CustomerID` = 'ANATR' + ORDER BY `c`.`City` + """); + } + + public override async Task GroupJoin_DefaultIfEmpty_Where(bool isAsync) + { + await base.GroupJoin_DefaultIfEmpty_Where(isAsync); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `o`.`OrderID` IS NOT NULL AND `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Join_GroupJoin_DefaultIfEmpty_Where(bool isAsync) + { + await base.Join_GroupJoin_DefaultIfEmpty_Where(isAsync); + + AssertSql( +""" +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`OrderID` IS NOT NULL AND `o0`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task GroupJoin_DefaultIfEmpty_Project(bool isAsync) + { + await base.GroupJoin_DefaultIfEmpty_Project(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task GroupJoin_SelectMany_subquery_with_filter(bool isAsync) + { + await base.GroupJoin_SelectMany_subquery_with_filter(isAsync); + + AssertSql( + """ +SELECT `c`.`ContactName`, `o0`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); + } + + public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby(bool isAsync) + { + await base.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync); + + AssertSql( + """ +SELECT `c`.`ContactName`, `o0`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); + } + + public override async Task GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(bool isAsync) + { + await base.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync); + + AssertSql( + """ +SELECT `c`.`ContactName`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(bool isAsync) + { + await base.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync); + + AssertSql( + """ +SELECT `c`.`ContactName`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task GroupJoin_Subquery_with_Take_Then_SelectMany_Where(bool isAsync) + { + await base.GroupJoin_Subquery_with_Take_Then_SelectMany_Where(isAsync); + + AssertSql( + """ +@p='100' + +SELECT `c`.`CustomerID`, `o1`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT `o0`.`OrderID`, `o0`.`CustomerID` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o0` + WHERE `o0`.`CustomerID` LIKE 'A%' +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +"""); + } + + public override async Task GroupJoin_aggregate_anonymous_key_selectors(bool async) + { + await base.GroupJoin_aggregate_anonymous_key_selectors(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, ( + SELECT IIF(SUM(IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`)))) IS NULL, 0, SUM(IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`))))) + FROM `Orders` AS `o` + WHERE `c`.`City` IS NOT NULL AND `c`.`CustomerID` = `o`.`CustomerID` AND `c`.`City` = 'London') AS `Sum` +FROM `Customers` AS `c` +"""); + } + + public override async Task GroupJoin_aggregate_anonymous_key_selectors2(bool async) + { + await base.GroupJoin_aggregate_anonymous_key_selectors2(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, ( + SELECT IIF(SUM(IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`)))) IS NULL, 0, SUM(IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`))))) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND 1996 = DATEPART('yyyy', `o`.`OrderDate`)) AS `Sum` +FROM `Customers` AS `c` +"""); + } + + public override async Task GroupJoin_aggregate_anonymous_key_selectors_one_argument(bool async) + { + await base.GroupJoin_aggregate_anonymous_key_selectors_one_argument(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, ( + SELECT IIF(SUM(IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`)))) IS NULL, 0, SUM(IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`))))) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Sum` +FROM `Customers` AS `c` +"""); + } + + public override async Task GroupJoin_aggregate_nested_anonymous_key_selectors(bool async) + { + await base.GroupJoin_aggregate_nested_anonymous_key_selectors(async); + + AssertSql(); + } + + public override async Task Inner_join_with_tautology_predicate_converts_to_cross_join(bool async) + { + await base.Inner_join_with_tautology_predicate_converts_to_cross_join(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `o0`.`OrderID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0`, +( + SELECT TOP @p `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Left_join_with_tautology_predicate_doesnt_convert_to_cross_join(bool async) + { + await base.Left_join_with_tautology_predicate_doesnt_convert_to_cross_join(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `o0`.`OrderID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN ( + SELECT TOP @p `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` ON TRUE +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task SelectMany_with_client_eval(bool async) + { + await base.SelectMany_with_client_eval(async); + + AssertSql( + """ +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [t].[ContactName] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [c].[ContactName] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +"""); + } + + public override async Task SelectMany_with_client_eval_with_collection_shaper(bool async) + { + await base.SelectMany_with_client_eval_with_collection_shaper(async); + + AssertSql( + """ +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [c].[CustomerID], [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice], [t].[ContactName] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [c].[ContactName] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] +) AS [t] +LEFT JOIN [Order Details] AS [o0] ON [t].[OrderID] = [o0].[OrderID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID], [o0].[OrderID] +"""); + } + + public override async Task SelectMany_with_client_eval_with_collection_shaper_ignored(bool async) + { + await base.SelectMany_with_client_eval_with_collection_shaper_ignored(async); + + AssertSql( + """ +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [t].[ContactName] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [c].[ContactName] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +"""); + } + + public override async Task SelectMany_with_client_eval_with_constructor(bool async) + { + await base.SelectMany_with_client_eval_with_constructor(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`City`, `s`.`OrderID`, `s`.`ProductID`, `s`.`OrderID0` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o`.`OrderID` AS `OrderID0`, `o`.`CustomerID` + FROM `Orders` AS `o` + INNER JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o0`.`OrderID` < 11000 + ) AS `o1` ON `o`.`OrderID` = `o1`.`OrderID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID`, `s`.`OrderID0`, `s`.`OrderID` +"""); + } + + public override async Task SelectMany_with_selecting_outer_entity(bool async) + { + await base.SelectMany_with_selecting_outer_entity(async); + + AssertSql( + """ +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] +) AS [t] +"""); + } + + public override async Task SelectMany_with_selecting_outer_element(bool async) + { + await base.SelectMany_with_selecting_outer_element(async); + + AssertSql( + """ +SELECT [t].[c] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT [c].[CustomerID] + COALESCE([c].[City], N'') AS [c] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] +) AS [t] +"""); + } + + public override async Task SelectMany_with_selecting_outer_entity_column_and_inner_column(bool async) + { + await base.SelectMany_with_selecting_outer_entity_column_and_inner_column(async); + + AssertSql( + """ +SELECT [t].[City], [t].[OrderDate] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT [c].[City], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderID] + OFFSET 0 ROWS +) AS [t] +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task SelectMany_correlated_subquery_take(bool async) + { + await base.SelectMany_correlated_subquery_take(async); + + AssertSql( + """ +SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM [Customers] AS [c] +INNER JOIN ( + SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] + FROM ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region], ROW_NUMBER() OVER(PARTITION BY [c0].[CustomerID] ORDER BY [c0].[CustomerID] + COALESCE([c0].[City], N'')) AS [row] + FROM [Customers] AS [c0] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +"""); + } + + public override async Task Distinct_SelectMany_correlated_subquery_take(bool async) + { + await base.Distinct_SelectMany_correlated_subquery_take(async); + + AssertSql( + """ +SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT DISTINCT [c].[CustomerID] + FROM [Customers] AS [c] +) AS [t] +INNER JOIN ( + SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region], ROW_NUMBER() OVER(PARTITION BY [c0].[CustomerID] ORDER BY [c0].[CustomerID] + COALESCE([c0].[City], N'')) AS [row] + FROM [Customers] AS [c0] + ) AS [t1] + WHERE [t1].[row] <= 2 +) AS [t0] ON [t].[CustomerID] = [t0].[CustomerID] +"""); + } + + public override async Task Distinct_SelectMany_correlated_subquery_take_2(bool async) + { + await base.Distinct_SelectMany_correlated_subquery_take_2(async); + + AssertSql( + """ +SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT DISTINCT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] +) AS [t] +INNER JOIN ( + SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region], ROW_NUMBER() OVER(PARTITION BY [c0].[CustomerID] ORDER BY [c0].[CustomerID] + COALESCE([c0].[City], N'')) AS [row] + FROM [Customers] AS [c0] + ) AS [t1] + WHERE [t1].[row] <= 2 +) AS [t0] ON [t].[CustomerID] = [t0].[CustomerID] +"""); + } + + public override async Task Take_SelectMany_correlated_subquery_take(bool async) + { + await base.Take_SelectMany_correlated_subquery_take(async); + + AssertSql( + """ +@__p_0='2' + +SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT TOP(@__p_0) [c].[CustomerID] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] +) AS [t] +INNER JOIN ( + SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region], ROW_NUMBER() OVER(PARTITION BY [c0].[CustomerID] ORDER BY [c0].[CustomerID] + COALESCE([c0].[City], N'')) AS [row] + FROM [Customers] AS [c0] + ) AS [t1] + WHERE [t1].[row] <= 2 +) AS [t0] ON [t].[CustomerID] = [t0].[CustomerID] +ORDER BY [t].[CustomerID] +"""); + } + + public override async Task Take_in_collection_projection_with_FirstOrDefault_on_top_level(bool async) + { + await base.Take_in_collection_projection_with_FirstOrDefault_on_top_level(async); + + AssertSql( + """ +SELECT [t].[CustomerID], [t0].[Title], [t0].[OrderID], [t0].[CustomerID] +FROM ( + SELECT TOP(1) [c].[CustomerID] + FROM [Customers] AS [c] +) AS [t] +OUTER APPLY ( + SELECT CASE + WHEN [t1].[CustomerID] = [c0].[City] OR ([t1].[CustomerID] IS NULL AND [c0].[City] IS NULL) THEN N'A' + ELSE N'B' + END AS [Title], [t1].[OrderID], [c0].[CustomerID], [t1].[OrderDate] + FROM ( + SELECT TOP(1) [o].[OrderID], [o].[CustomerID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [t].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderDate] + ) AS [t1] + LEFT JOIN [Customers] AS [c0] ON [t1].[CustomerID] = [c0].[CustomerID] +) AS [t0] +ORDER BY [t].[CustomerID], [t0].[OrderDate], [t0].[OrderID] +"""); + } + + public override async Task Condition_on_entity_with_include(bool async) + { + await base.Condition_on_entity_with_include(async); + + AssertSql( + """ +SELECT IIF(`o`.`OrderID` IS NOT NULL, `o`.`OrderID`, -1) AS `a` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Join_customers_orders_entities_same_entity_twice(bool async) + { + await base.Join_customers_orders_entities_same_entity_twice(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +"""); + } + + public override async Task Join_local_collection_int_closure_is_cached_correctly(bool async) + { + await base.Join_local_collection_int_closure_is_cached_correctly(async); + + AssertSql( + """ +@p1='1' +@p2='2' + +SELECT `e`.`EmployeeID` +FROM `Employees` AS `e` +INNER JOIN (SELECT @p1 AS `Value` +FROM (SELECT COUNT(*) FROM `#Dual`) AS `p_0` +UNION +SELECT @p2 AS `Value` +FROM (SELECT COUNT(*) FROM `#Dual`) AS `p_1`) AS `p` ON `e`.`EmployeeID` = `p`.`Value` +""", + // + """ +@p1='3' + +SELECT `e`.`EmployeeID` +FROM `Employees` AS `e` +INNER JOIN (SELECT @p1 AS `Value` +FROM (SELECT COUNT(*) FROM `#Dual`) AS `p_0`) AS `p` ON `e`.`EmployeeID` = `p`.`Value` +"""); + } + + public override async Task Join_local_string_closure_is_cached_correctly(bool async) + { + await base.Join_local_string_closure_is_cached_correctly(async); + + AssertSql(); + } + + public override async Task Join_local_bytes_closure_is_cached_correctly(bool async) + { + await base.Join_local_bytes_closure_is_cached_correctly(async); + + AssertSql(); + } + + public override async Task GroupJoin_customers_employees_shadow(bool async) + { + await base.GroupJoin_customers_employees_shadow(async); + + AssertSql( + """ +SELECT `e`.`Title`, `e`.`EmployeeID` AS `Id` +FROM `Customers` AS `c` +INNER JOIN `Employees` AS `e` ON `c`.`City` = `e`.`City` +"""); + } + + public override async Task GroupJoin_customers_employees_subquery_shadow(bool async) + { + await base.GroupJoin_customers_employees_subquery_shadow(async); + + AssertSql( + """ +SELECT `e`.`Title`, `e`.`EmployeeID` AS `Id` +FROM `Customers` AS `c` +INNER JOIN `Employees` AS `e` ON `c`.`City` = `e`.`City` +"""); + } + + public override async Task GroupJoin_customers_employees_subquery_shadow_take(bool async) + { + await base.GroupJoin_customers_employees_subquery_shadow_take(async); + + AssertSql( + """ +@p='5' + +SELECT `e0`.`Title`, `e0`.`EmployeeID` AS `Id` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`City` +) AS `e0` ON `c`.`City` = `e0`.`City` +"""); + } + + public override async Task GroupJoin_projection(bool async) + { + await base.GroupJoin_projection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task GroupJoin_subquery_projection_outer_mixed(bool async) + { + await base.GroupJoin_subquery_projection_outer_mixed(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` AS `A`, `o0`.`CustomerID` AS `B`, `o1`.`CustomerID` AS `C` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID`), +( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +"""); + } + + public override async Task Join_with_key_selectors_being_nested_anonymous_objects(bool async) + { + await base.Join_with_key_selectors_being_nested_anonymous_objects(async); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindKeylessEntitiesQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindKeylessEntitiesQueryLibRedTest.cs new file mode 100644 index 00000000..073b12bc --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindKeylessEntitiesQueryLibRedTest.cs @@ -0,0 +1,290 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindKeylessEntitiesQueryLibRedTest : NorthwindKeylessEntitiesQueryRelationalTestBase< + NorthwindQueryLibRedFixture> + { + public NorthwindKeylessEntitiesQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + ClearLog(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + [ConditionalTheory] + public override async Task KeylessEntity_simple(bool isAsync) + { + await base.KeylessEntity_simple(isAsync); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +"""); + } + + [ConditionalTheory] + public override async Task KeylessEntity_where_simple(bool isAsync) + { + await base.KeylessEntity_where_simple(isAsync); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle` +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +) AS `m` +WHERE `m`.`City` = 'London' +"""); + } + + public override async Task KeylessEntity_by_database_view(bool isAsync) + { + await base.KeylessEntity_by_database_view(isAsync); + + AssertSql( + """ +SELECT `a`.`CategoryName`, `a`.`ProductID`, `a`.`ProductName` +FROM `Alphabetical list of products` AS `a` +"""); + } + + public override async Task KeylessEntity_with_nav_defining_query(bool isAsync) + { + // FromSql mapping. Issue #21627. The defining query references a table that isn't materialised, so + // the scenario is expected to throw; ThrowsAnyAsync accepts LibRed's specific SqlBindException (a + // subclass) — ThrowsAsync requires an exact System.Exception match, which nothing throws. + await Assert.ThrowsAnyAsync(() => base.KeylessEntity_with_nav_defining_query(isAsync)); + } + + public override async Task KeylessEntity_with_mixed_tracking(bool isAsync) + { + await base.KeylessEntity_with_mixed_tracking(isAsync); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `m`.`CustomerID` + FROM `Customers` AS `c` + INNER JOIN ( + select * from `Orders` + ) AS `m` ON `c`.`CustomerID` = `m`.`CustomerID` + """); + } + + public override async Task KeylessEntity_with_defining_query(bool isAsync) + { + await base.KeylessEntity_with_defining_query(isAsync); + + AssertSql( + """ +SELECT `m`.`CustomerID` +FROM ( + select * from `Orders` +) AS `m` +WHERE `m`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task KeylessEntity_select_where_navigation(bool isAsync) + { + await base.KeylessEntity_select_where_navigation(isAsync); + + AssertSql( + """ + SELECT `m`.`CustomerID` + FROM ( + select * from `Orders` + ) AS `m` + LEFT JOIN `Customers` AS `c` ON `m`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`City` = 'Seattle' + """); + } + + public override async Task KeylessEntity_select_where_navigation_multi_level(bool isAsync) + { + await base.KeylessEntity_select_where_navigation_multi_level(isAsync); + + AssertSql( +""" +SELECT `m`.`CustomerID` +FROM ( + select * from `Orders` +) AS `m` +LEFT JOIN `Customers` AS `c` ON `m`.`CustomerID` = `c`.`CustomerID` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` IS NOT NULL AND `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task Auto_initialized_view_set(bool isAsync) + { + await base.Auto_initialized_view_set(isAsync); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +"""); + } + + public override async Task KeylessEntity_groupby(bool async) + { + await base.KeylessEntity_groupby(async); + + AssertSql( +""" +SELECT `m`.`City` AS `Key`, COUNT(*) AS `Count`, IIF(SUM(IIF(LEN(`m`.`Address`) IS NULL, NULL, CLNG(LEN(`m`.`Address`)))) IS NULL, 0, SUM(IIF(LEN(`m`.`Address`) IS NULL, NULL, CLNG(LEN(`m`.`Address`))))) AS `Sum` +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +) AS `m` +GROUP BY `m`.`City` +"""); + } + + public override async Task Entity_mapped_to_view_on_right_side_of_join(bool async) + { + await base.Entity_mapped_to_view_on_right_side_of_join(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `a`.`CategoryName`, `a`.`ProductID`, `a`.`ProductName` +FROM `Orders` AS `o` +LEFT JOIN `Alphabetical list of products` AS `a` ON `o`.`CustomerID` = `a`.`CategoryName` +"""); + } + + public override async Task Collection_correlated_with_keyless_entity_in_predicate_works(bool async) + { + await base.Collection_correlated_with_keyless_entity_in_predicate_works(async); + + AssertSql( + """ +@p='2' + +SELECT TOP @p `m`.`City`, `m`.`ContactName` +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +) AS `m` +WHERE EXISTS ( + SELECT 1 + FROM `Customers` AS `c` + WHERE `c`.`City` = `m`.`City` OR (`c`.`City` IS NULL AND `m`.`City` IS NULL)) +ORDER BY `m`.`ContactName` +"""); + } + + public override async Task Projecting_collection_correlated_with_keyless_entity_throws(bool async) + { + await base.Projecting_collection_correlated_with_keyless_entity_throws(async); + + AssertSql(); + } + + public override async Task Collection_of_entities_projecting_correlated_collection_of_keyless_entities(bool async) + { + await base.Collection_of_entities_projecting_correlated_collection_of_keyless_entities(async); + + AssertSql(); + } + + public override async Task KeylessEntity_with_included_navs_multi_level(bool async) + { + await base.KeylessEntity_with_included_navs_multi_level(async); + + AssertSql(); + } + + public override async Task KeylessEntity_with_defining_query_and_correlated_collection(bool async) + { + await base.KeylessEntity_with_defining_query_and_correlated_collection(async); + + AssertSql(); + } + + public override async Task KeylessEntity_with_included_nav(bool async) + { + await base.KeylessEntity_with_included_nav(async); + + AssertSql( +""" +SELECT `m`.`CustomerID`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + select * from `Orders` +) AS `m` +LEFT JOIN `Customers` AS `c` ON `m`.`CustomerID` = `c`.`CustomerID` +WHERE `m`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Count_over_keyless_entity(bool async) + { + await base.Count_over_keyless_entity(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] +) AS `m` +"""); + } + + public override async Task Count_over_keyless_entity_with_pushdown(bool async) + { + await base.Count_over_keyless_entity_with_pushdown(async); + + AssertSql( + """ +@p='10' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] + ) AS `m` + ORDER BY `m`.`ContactTitle` +) AS `m0` +"""); + } + + public override async Task Count_over_keyless_entity_with_pushdown_empty_projection(bool async) + { + await base.Count_over_keyless_entity_with_pushdown_empty_projection(async); + + AssertSql( + """ +@p='10' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] + ) AS `m` +) AS `m0` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindMiscellaneousQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindMiscellaneousQueryLibRedTest.cs new file mode 100644 index 00000000..b15875aa --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindMiscellaneousQueryLibRedTest.cs @@ -0,0 +1,7540 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestModels.Northwind; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +using Xunit.Sdk; + +// ReSharper disable UnusedParameter.Local +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public partial class NorthwindMiscellaneousQueryLibRedTest : NorthwindMiscellaneousQueryRelationalTestBase> + { + public NorthwindMiscellaneousQueryLibRedTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + ClearLog(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Shaper_command_caching_when_parameter_names_different(bool isAsync) + { + await base.Shaper_command_caching_when_parameter_names_different(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """, + // + $""" + SELECT COUNT(*) + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Can_convert_manually_build_expression_with_default(bool isAsync) + { + await base.Can_convert_manually_build_expression_with_default(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT COUNT(*) + //FROM `Customers` AS `c` + //WHERE `c`.`CustomerID` IS NOT NULL", + // // + // $@"SELECT COUNT(*) + //FROM `Customers` AS `c` + //WHERE `c`.`CustomerID` IS NOT NULL"); + } + + public override async Task Lifting_when_subquery_nested_order_by_anonymous(bool isAsync) + { + await base.Lifting_when_subquery_nested_order_by_anonymous(isAsync); + + AssertSql( + """ +@p='2' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +INNER JOIN ( + SELECT DISTINCT `c1`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1`, + `Customers` AS `c0` +) AS `s` ON `o`.`CustomerID` = `s`.`CustomerID` +ORDER BY `s`.`CustomerID` +"""); + } + + public override async Task Lifting_when_subquery_nested_order_by_simple(bool isAsync) + { + await base.Lifting_when_subquery_nested_order_by_simple(isAsync); + + AssertSql( + """ +@p='2' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +INNER JOIN ( + SELECT DISTINCT `c1`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1`, + `Customers` AS `c0` +) AS `s` ON `o`.`CustomerID` = `s`.`CustomerID` +ORDER BY `s`.`CustomerID` +"""); + } + + [ConditionalFact(Skip = "Issue #16006")] + public virtual void Cache_key_contexts_are_detached() + { + var weakRef = Scoper( + () => + { + var context = new NorthwindLibRedContext(Fixture.CreateOptions()); + + var wr = new WeakReference(context); + + using (context) + { + var orderDetails = context.OrderDetails; + + Customer Query(NorthwindContext param) => + (from c in context.Customers + from o in context.Set() + from od in orderDetails + from e1 in param.Employees + from e2 in param.Set() + select c).First(); + + Assert.NotNull(Query(context)); + + Assert.True(wr.IsAlive); + + return wr; + } + }); + + GC.Collect(); + + Assert.False(weakRef.IsAlive); + } + + private static T Scoper(Func getter) + { + return getter(); + } + + public override async Task Local_dictionary(bool isAsync) + { + await base.Local_dictionary(isAsync); + + AssertSql( + """ +@p='ALFKI' (Size = 5) + +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @p +"""); + } + + public override async Task Entity_equality_self(bool isAsync) + { + await base.Entity_equality_self(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + """); + } + + public override async Task Entity_equality_local(bool isAsync) + { + await base.Entity_equality_local(isAsync); + + AssertSql( + """ +@entity_equality_local_CustomerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @entity_equality_local_CustomerID +"""); + } + + public override async Task Entity_equality_local_composite_key(bool isAsync) + { + await base.Entity_equality_local_composite_key(isAsync); + + AssertSql( + """ +@entity_equality_local_OrderID='10248' (Nullable = true) +@entity_equality_local_ProductID='11' (Nullable = true) + +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE `o`.`OrderID` = @entity_equality_local_OrderID AND `o`.`ProductID` = @entity_equality_local_ProductID +"""); + } + + public override async Task Entity_equality_local_double_check(bool isAsync) + { + await base.Entity_equality_local_double_check(isAsync); + + AssertSql( + """ +@entity_equality_local_CustomerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @entity_equality_local_CustomerID AND @entity_equality_local_CustomerID = `c`.`CustomerID` +"""); + } + + public override async Task Join_with_entity_equality_local_on_both_sources(bool isAsync) + { + await base.Join_with_entity_equality_local_on_both_sources(isAsync); + + AssertSql( + """ +@entity_equality_local_CustomerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT `c0`.`CustomerID` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = @entity_equality_local_CustomerID +) AS `c1` ON `c`.`CustomerID` = `c1`.`CustomerID` +WHERE `c`.`CustomerID` = @entity_equality_local_CustomerID +"""); + } + + public override async Task Entity_equality_local_inline(bool isAsync) + { + await base.Entity_equality_local_inline(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ANATR' + """); + } + + public override async Task Entity_equality_local_inline_composite_key(bool isAsync) + { + await base.Entity_equality_local_inline_composite_key(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` + FROM `Order Details` AS `o` + WHERE `o`.`OrderID` = 10248 AND `o`.`ProductID` = 11 + """); + } + + public override async Task Entity_equality_null(bool isAsync) + { + await base.Entity_equality_null(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Entity_equality_null_composite_key(bool isAsync) + { + await base.Entity_equality_null_composite_key(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE FALSE +"""); + } + + public override async Task Entity_equality_not_null(bool isAsync) + { + await base.Entity_equality_not_null(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `c`.`CustomerID` + //FROM `Customers` AS `c` + //WHERE `c`.`CustomerID` IS NOT NULL"); + } + + public override async Task Entity_equality_not_null_composite_key(bool isAsync) + { + await base.Entity_equality_not_null_composite_key(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `o`.`ProductID` + //FROM `Order Details` AS `o` + //WHERE True = True"); + } + + public override async Task Entity_equality_through_nested_anonymous_type_projection(bool isAsync) + { + await base.Entity_equality_through_nested_anonymous_type_projection(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`CustomerID` IS NOT NULL + """); + } + + public override async Task Entity_equality_through_DTO_projection(bool isAsync) + { + await base.Entity_equality_through_DTO_projection(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`CustomerID` IS NOT NULL + """); + } + + public override async Task Entity_equality_through_subquery(bool isAsync) + { + await base.Entity_equality_through_subquery(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task Entity_equality_through_include(bool isAsync) + { + await base.Entity_equality_through_include(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Entity_equality_orderby(bool isAsync) + { + await base.Entity_equality_orderby(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Entity_equality_orderby_descending_composite_key(bool isAsync) + { + await base.Entity_equality_orderby_descending_composite_key(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` + FROM `Order Details` AS `o` + ORDER BY `o`.`OrderID` DESC, `o`.`ProductID` DESC + """); + } + + public override async Task Entity_equality_orderby_subquery(bool async) + { + await base.Entity_equality_orderby_subquery(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `c0`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `c` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`c` +"""); + } + + public override async Task Entity_equality_orderby_descending_subquery_composite_key(bool async) + { + await base.Entity_equality_orderby_descending_subquery_composite_key(async); + + AssertSql( + """ +SELECT `o2`.`OrderID`, `o2`.`CustomerID`, `o2`.`EmployeeID`, `o2`.`OrderDate`, `o2`.`c`, `o2`.`c0` +FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ( + SELECT TOP 1 `o0`.`OrderID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `c`, ( + SELECT TOP 1 `o1`.`ProductID` + FROM `Order Details` AS `o1` + WHERE `o`.`OrderID` = `o1`.`OrderID`) AS `c0` + FROM `Orders` AS `o` +) AS `o2` +ORDER BY `o2`.`c` DESC, `o2`.`c0` DESC +"""); + } + + public override async Task DefaultIfEmpty_top_level(bool async) + { + await base.DefaultIfEmpty_top_level(async); + + AssertSql( + """ +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e0` +LEFT JOIN ( + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = -1 +) AS `e1` ON TRUE +"""); + } + + public override async Task Join_with_DefaultIfEmpty_on_both_sources(bool async) + { + await base.Join_with_DefaultIfEmpty_on_both_sources(async); + + AssertSql( + """ +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` +FROM (( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e0` +LEFT JOIN ( + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = -1 +) AS `e1` ON TRUE) +LEFT JOIN ( + SELECT `e4`.`EmployeeID` + FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) + ) AS `e3` + LEFT JOIN ( + SELECT `e2`.`EmployeeID` + FROM `Employees` AS `e2` + WHERE `e2`.`EmployeeID` = -1 + ) AS `e4` ON TRUE +) AS `s` ON `e1`.`EmployeeID` = `s`.`EmployeeID` +WHERE `e1`.`EmployeeID` IS NOT NULL AND `s`.`EmployeeID` IS NOT NULL +"""); + } + + public override async Task DefaultIfEmpty_top_level_followed_by_constant_Select(bool async) + { + await base.DefaultIfEmpty_top_level_followed_by_constant_Select(async); + + AssertSql( + """ +SELECT 'Foo' +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e0` +LEFT JOIN ( + SELECT 1 + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = -1 +) AS `e1` ON TRUE +"""); + } + + public override async Task DefaultIfEmpty_top_level_preceded_by_constant_Select(bool async) + { + await base.DefaultIfEmpty_top_level_preceded_by_constant_Select(async); + + AssertSql( + """ +SELECT `e1`.`c` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e0` +LEFT JOIN ( + SELECT 'Foo' AS `c` + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = -1 +) AS `e1` ON TRUE +"""); + } + + public override async Task DefaultIfEmpty_top_level_positive(bool async) + { + await base.DefaultIfEmpty_top_level_positive(async); + + AssertSql( + """ +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e0` +LEFT JOIN ( + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` > 0 +) AS `e1` ON TRUE +"""); + } + + public override async Task DefaultIfEmpty_top_level_projection(bool async) + { + await base.DefaultIfEmpty_top_level_projection(async); + + AssertSql( + """ +SELECT IIF(`e1`.`EmployeeID` IS NULL, 0, `e1`.`EmployeeID`) +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e0` +LEFT JOIN ( + SELECT `e`.`EmployeeID` + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = -1 +) AS `e1` ON TRUE +"""); + } + + public override async Task Where_query_composition(bool isAsync) + { + await base.Where_query_composition(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` + //FROM `Employees` AS `e1` + //WHERE `e1`.`FirstName` = ( + // SELECT TOP 1 `e`.`FirstName` + // FROM `Employees` AS `e` + // ORDER BY `e`.`EmployeeID` + //)"); + } + + public override async Task Where_query_composition_is_null(bool isAsync) + { + await base.Where_query_composition_is_null(isAsync); + + AssertSql( + """ +@p='3' + +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e1` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = `e1`.`ReportsTo`) +ORDER BY `e1`.`EmployeeID` +"""); + } + + public override async Task Where_query_composition_is_not_null(bool isAsync) + { + await base.Where_query_composition_is_not_null(isAsync); + + AssertSql( + """ +@p1='3' +@p='4' + +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` +FROM ( + SELECT TOP @p1 `e2`.`EmployeeID`, `e2`.`City`, `e2`.`Country`, `e2`.`FirstName`, `e2`.`ReportsTo`, `e2`.`Title` + FROM ( + SELECT TOP @p + @p1 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` + ) AS `e2` + ORDER BY `e2`.`EmployeeID` DESC +) AS `e1` +WHERE EXISTS ( + SELECT 1 + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = `e1`.`ReportsTo`) +ORDER BY `e1`.`EmployeeID` +"""); + } + + public override async Task Where_query_composition_entity_equality_one_element_SingleOrDefault(bool isAsync) + { + await base.Where_query_composition_entity_equality_one_element_SingleOrDefault(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = `e`.`ReportsTo`) = 0 + """); + } + + public override async Task Where_query_composition_entity_equality_one_element_Single(bool isAsync) + { + await base.Where_query_composition_entity_equality_one_element_Single(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = `e`.`ReportsTo`) = 0 + """); + } + + public override async Task Where_query_composition_entity_equality_one_element_FirstOrDefault(bool isAsync) + { + await base.Where_query_composition_entity_equality_one_element_FirstOrDefault(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = `e`.`ReportsTo`) = 0 + """); + } + + public override async Task Where_query_composition_entity_equality_one_element_First(bool isAsync) + { + await base.Where_query_composition_entity_equality_one_element_First(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = `e`.`ReportsTo`) = 0 + """); + } + + public override async Task Where_query_composition_entity_equality_no_elements_SingleOrDefault(bool isAsync) + { + await base.Where_query_composition_entity_equality_no_elements_SingleOrDefault(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = 42) = 0 + """); + } + + public override async Task Where_query_composition_entity_equality_no_elements_Single(bool isAsync) + { + await base.Where_query_composition_entity_equality_no_elements_Single(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = 42) = 0 + """); + } + + public override async Task Where_query_composition_entity_equality_no_elements_FirstOrDefault(bool isAsync) + { + await base.Where_query_composition_entity_equality_no_elements_FirstOrDefault(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = 42) = 0 + """); + } + + public override async Task Where_query_composition_entity_equality_no_elements_First(bool isAsync) + { + await base.Where_query_composition_entity_equality_no_elements_First(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` = 42) = 0 + """); + } + + public override async Task Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(bool isAsync) + { + await base.Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(isAsync); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` <> `e`.`ReportsTo` OR `e`.`ReportsTo` IS NULL + ORDER BY `e0`.`EmployeeID`) = 1 +"""); + } + + public override async Task Where_query_composition_entity_equality_multiple_elements_Single(bool isAsync) + { + await base.Where_query_composition_entity_equality_multiple_elements_Single(isAsync); + + AssertSql( +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` <> `e`.`ReportsTo` OR `e`.`ReportsTo` IS NULL) = 0 +"""); + } + + public override async Task Where_query_composition_entity_equality_multiple_elements_FirstOrDefault(bool isAsync) + { + await base.Where_query_composition_entity_equality_multiple_elements_FirstOrDefault(isAsync); + + AssertSql( +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` <> `e`.`ReportsTo` OR `e`.`ReportsTo` IS NULL) = 0 +"""); + } + + public override async Task Where_query_composition_entity_equality_multiple_elements_First(bool isAsync) + { + await base.Where_query_composition_entity_equality_multiple_elements_First(isAsync); + + AssertSql( +""" +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE ( + SELECT TOP 1 `e0`.`EmployeeID` + FROM `Employees` AS `e0` + WHERE `e0`.`EmployeeID` <> `e`.`ReportsTo` OR `e`.`ReportsTo` IS NULL) = 0 +"""); + } + + public override async Task Where_query_composition2(bool isAsync) + { + await base.Where_query_composition2(isAsync); + + AssertSql( + """ +@p='3' + +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` +) AS `e1` +WHERE `e1`.`FirstName` = ( + SELECT TOP 1 `e0`.`FirstName` + FROM `Employees` AS `e0` + ORDER BY `e0`.`EmployeeID`) +"""); + } + + public override async Task Where_query_composition2_FirstOrDefault(bool isAsync) + { + await base.Where_query_composition2_FirstOrDefault(isAsync); + + // issue #15994 + // AssertSql( + // $@"{AssertSqlHelper.Declaration("@__p_0='3'")} + + //SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` + //FROM ( + // SELECT TOP @__p_0 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + // FROM `Employees` AS `e` + //) AS `t` + //WHERE `t`.`FirstName` = ( + // SELECT TOP 1 `e0`.`FirstName` + // FROM `Employees` AS `e0` + // ORDER BY `e0`.`EmployeeID` + //)"); + } + + public override async Task Where_query_composition2_FirstOrDefault_with_anonymous(bool isAsync) + { + await base.Where_query_composition2_FirstOrDefault_with_anonymous(isAsync); + + // issue #15994 + // AssertSql( + // $@"{AssertSqlHelper.Declaration("@__p_0='3'")} + + //SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` + //FROM ( + // SELECT TOP @__p_0 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + // FROM `Employees` AS `e` + //) AS `t` + //WHERE `t`.`FirstName` = ( + // SELECT TOP 1 `e0`.`FirstName` + // FROM `Employees` AS `e0` + // ORDER BY `e0`.`EmployeeID` + //)"); + } + + public override async Task Select_Subquery_Single(bool isAsync) + { + await base.Select_Subquery_Single(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='2'")} + + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `od`.`OrderID` + FROM `Order Details` AS `od` + ORDER BY `od`.`ProductID`, `od`.`OrderID` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_OrderID='10285'")} + + SELECT TOP 1 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `o`.`OrderID` + ORDER BY `o`.`OrderID` + """, + // + $""" + {AssertSqlHelper.Declaration("@_outer_OrderID='10294'")} + + SELECT TOP 1 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `o`.`OrderID` + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_Where_Subquery_Deep_Single(bool isAsync) + { + await base.Select_Where_Subquery_Deep_Single(isAsync); + + AssertSql( + """ +@p='2' + +SELECT TOP @p `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE `o`.`OrderID` = 10344 AND ( + SELECT TOP 1 ( + SELECT TOP 1 `c`.`City` + FROM `Customers` AS `c` + WHERE `o0`.`CustomerID` = `c`.`CustomerID`) + FROM `Orders` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) = 'Seattle' +"""); + } + + public override async Task Select_Where_Subquery_Deep_First(bool isAsync) + { + await base.Select_Where_Subquery_Deep_First(isAsync); + + AssertSql( + """ +@p='2' + +SELECT TOP @p `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE ( + SELECT TOP 1 ( + SELECT TOP 1 `c`.`City` + FROM `Customers` AS `c` + WHERE `o0`.`CustomerID` = `c`.`CustomerID`) + FROM `Orders` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) = 'Seattle' +"""); + } + + public override async Task Select_Where_Subquery_Equality(bool isAsync) + { + await base.Select_Where_Subquery_Equality(isAsync); + + AssertSql( + """ +@p='1' + +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` +FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o3` +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT TOP 2 `o0`.`OrderID` + FROM `Order Details` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o2` + WHERE ( + SELECT TOP 1 `c`.`Country` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = `o3`.`CustomerID` + ORDER BY `c`.`CustomerID`) = ( + SELECT TOP 1 `c0`.`Country` + FROM `Orders` AS `o1` + INNER JOIN `Customers` AS `c0` ON `o1`.`CustomerID` = `c0`.`CustomerID` + WHERE `o1`.`OrderID` = `o2`.`OrderID` + ORDER BY `o1`.`OrderID`, `c0`.`CustomerID`) OR (( + SELECT TOP 1 `c`.`Country` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = `o3`.`CustomerID` + ORDER BY `c`.`CustomerID`) IS NULL AND ( + SELECT TOP 1 `c0`.`Country` + FROM `Orders` AS `o1` + INNER JOIN `Customers` AS `c0` ON `o1`.`CustomerID` = `c0`.`CustomerID` + WHERE `o1`.`OrderID` = `o2`.`OrderID` + ORDER BY `o1`.`OrderID`, `c0`.`CustomerID`) IS NULL)) > 0 +ORDER BY `o3`.`OrderID` +"""); + } + + public override async Task Where_subquery_anon(bool isAsync) + { + await base.Where_subquery_anon(isAsync); + + AssertSql( + """ +@p='3' + +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e0`, +( + SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `e0`.`EmployeeID` = `o0`.`EmployeeID` +ORDER BY `e0`.`EmployeeID` +"""); + } + + public override async Task Where_subquery_anon_nested(bool isAsync) + { + await base.Where_subquery_anon_nested(isAsync); + + AssertSql( + """ +@p='3' + +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e0`, +( + SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0`, +( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +WHERE `e0`.`City` = 'Seattle' +ORDER BY `e0`.`EmployeeID` +"""); + } + + public override async Task OrderBy_SelectMany(bool isAsync) + { + await base.OrderBy_SelectMany(isAsync); + + AssertSql( + """ +SELECT `c`.`ContactName`, `o0`.`OrderID` +FROM `Customers` AS `c`, +( + SELECT TOP 3 `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Let_any_subquery_anonymous(bool isAsync) + { + await base.Let_any_subquery_anonymous(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) AS `hasOrders` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task OrderBy_arithmetic(bool isAsync) + { + await base.OrderBy_arithmetic(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` - `e`.`EmployeeID` + """); + } + + public override async Task OrderBy_condition_comparison(bool isAsync) + { + await base.OrderBy_condition_comparison(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +ORDER BY NOT (`p`.`UnitsInStock` > CINT(0)), `p`.`ProductID` +"""); + } + + public override async Task OrderBy_ternary_conditions(bool isAsync) + { + await base.OrderBy_ternary_conditions(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` + //FROM `Products` AS `p` + //ORDER BY CASE + // WHEN ((`p`.`UnitsInStock` > 10) AND (`p`.`ProductID` > 40)) OR ((`p`.`UnitsInStock` <= 10) AND (`p`.`ProductID` <= 40)) + // THEN True ELSE False + //END, `p`.`ProductID`"); + } + + public override async Task OrderBy_any(bool isAsync) + { + await base.OrderBy_any(isAsync); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `c0`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` > 11000) AS `c` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY NOT (`c0`.`c`), `c0`.`CustomerID` +"""); + } + + public override async Task Skip(bool isAsync) + { + await base.Skip(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='5'")} + + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + """); + } + + public override async Task Skip_no_orderby(bool isAsync) + { + await base.Skip_no_orderby(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='5'")} + + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY (SELECT 1) + SKIP {AssertSqlHelper.Parameter("@__p_0")} + """); + } + + public override async Task Skip_orderby_const(bool isAsync) + { + await base.Skip_orderby_const(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='5'")} + + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY (SELECT 1) + SKIP {AssertSqlHelper.Parameter("@__p_0")} + """); + } + + public override async Task Skip_Take(bool isAsync) + { + await base.Skip_Take(isAsync); + + AssertSql( + """ +@p1='10' +@p='5' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + ) AS `c0` + ORDER BY `c0`.`ContactName` DESC +) AS `c1` +ORDER BY `c1`.`ContactName` +"""); + } + + public override async Task Join_Customers_Orders_Skip_Take(bool isAsync) + { + await base.Join_Customers_Orders_Skip_Take(isAsync); + + AssertSql( + """ +@p1='5' +@p='10' + +SELECT `s0`.`ContactName`, `s0`.`OrderID` +FROM ( + SELECT TOP @p1 `s`.`ContactName`, `s`.`OrderID` + FROM ( + SELECT TOP @p + @p1 `c`.`ContactName`, `o`.`OrderID` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + ) AS `s` + ORDER BY `s`.`OrderID` DESC +) AS `s0` +ORDER BY `s0`.`OrderID` +"""); + } + + public override async Task Join_Customers_Orders_Skip_Take_followed_by_constant_projection(bool isAsync) + { + await base.Join_Customers_Orders_Skip_Take_followed_by_constant_projection(isAsync); + + AssertSql( + """ +@p1='5' +@p='10' + +SELECT `s0`.`c` +FROM ( + SELECT TOP @p1 `s`.`c`, `s`.`OrderID` + FROM ( + SELECT TOP @p + @p1 'Foo' AS `c`, `o`.`OrderID` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + ) AS `s` + ORDER BY `s`.`OrderID` DESC +) AS `s0` +ORDER BY `s0`.`OrderID` +"""); + } + + public override async Task Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(bool isAsync) + { + await base.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync); + + AssertSql( + """ +@p1='5' +@p='10' + +SELECT `s0`.`Contact`, `s0`.`OrderID` +FROM ( + SELECT TOP @p1 `s`.`Contact`, `s`.`OrderID` + FROM ( + SELECT TOP @p + @p1 (IIF(`c`.`ContactName` IS NULL, '', `c`.`ContactName`) & ' ') & IIF(`c`.`ContactTitle` IS NULL, '', `c`.`ContactTitle`) AS `Contact`, `o`.`OrderID` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + ) AS `s` + ORDER BY `s`.`OrderID` DESC +) AS `s0` +ORDER BY `s0`.`OrderID` +"""); + } + + public override async Task Join_Customers_Orders_Orders_Skip_Take_Same_Properties(bool isAsync) + { + await base.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync); + + AssertSql( + """ +@p1='5' +@p='10' + +SELECT `s0`.`OrderID`, `s0`.`CustomerIDA`, `s0`.`CustomerIDB`, `s0`.`ContactNameA`, `s0`.`ContactNameB` +FROM ( + SELECT TOP @p1 `s`.`OrderID`, `s`.`CustomerIDA`, `s`.`CustomerIDB`, `s`.`ContactNameA`, `s`.`ContactNameB` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `c`.`CustomerID` AS `CustomerIDA`, `c0`.`CustomerID` AS `CustomerIDB`, `c`.`ContactName` AS `ContactNameA`, `c0`.`ContactName` AS `ContactNameB` + FROM (`Orders` AS `o` + INNER JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) + INNER JOIN `Customers` AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` + ORDER BY `o`.`OrderID` + ) AS `s` + ORDER BY `s`.`OrderID` DESC +) AS `s0` +ORDER BY `s0`.`OrderID` +"""); + } + + public override async Task Ternary_should_not_evaluate_both_sides(bool async) + { + await base.Ternary_should_not_evaluate_both_sides(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, 'none' AS `Data1` +FROM `Customers` AS `c` +"""); + } + + public override async Task Ternary_should_not_evaluate_both_sides_with_parameter(bool async) + { + await base.Ternary_should_not_evaluate_both_sides_with_parameter(async); + + AssertSql( + """ +SELECT TRUE AS `Data1` +FROM `Orders` AS `o` +"""); + } + + public override async Task Take_Skip(bool isAsync) + { + await base.Take_Skip(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + {AssertSqlHelper.Declaration("@__p_1='5'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + ) AS `t` + ORDER BY `t`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + """); + } + + public override async Task Take_Skip_Distinct(bool isAsync) + { + await base.Take_Skip_Distinct(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + {AssertSqlHelper.Declaration("@__p_1='5'")} + + SELECT DISTINCT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + FROM ( + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + ) AS `t` + ORDER BY `t`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + ) AS `t0` + """); + } + + public override async Task Take_Skip_Distinct_Caching(bool isAsync) + { + await base.Take_Skip_Distinct_Caching(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + {AssertSqlHelper.Declaration("@__p_1='5'")} + + SELECT DISTINCT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + FROM ( + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + ) AS `t` + ORDER BY `t`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + ) AS `t0` + """, + // + $""" + {AssertSqlHelper.Declaration("@__p_0='15'")} + + {AssertSqlHelper.Declaration("@__p_1='10'")} + + SELECT DISTINCT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + FROM ( + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + ) AS `t` + ORDER BY `t`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + ) AS `t0` + """); + } + + public override async Task Take_Distinct_Count(bool isAsync) + { + await base.Take_Distinct_Count(isAsync); + + AssertSql( + """ +@p='5' + +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ) AS `o0` +) AS `o1` +"""); + } + + public override async Task Take_Where_Distinct_Count(bool isAsync) + { + await base.Take_Where_Distinct_Count(isAsync); + + AssertSql( + """ +@p='5' + +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'FRANK' + ) AS `o0` +) AS `o1` +"""); + } + + public override async Task Queryable_simple(bool isAsync) + { + await base.Queryable_simple(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Queryable_simple_anonymous(bool isAsync) + { + await base.Queryable_simple_anonymous(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Queryable_nested_simple(bool isAsync) + { + await base.Queryable_nested_simple(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Queryable_simple_anonymous_projection_subquery(bool isAsync) + { + await base.Queryable_simple_anonymous_projection_subquery(isAsync); + + AssertSql( + """ +@p='91' + +SELECT TOP @p `c`.`City` +FROM `Customers` AS `c` +"""); + } + + public override async Task Queryable_simple_anonymous_subquery(bool isAsync) + { + await base.Queryable_simple_anonymous_subquery(isAsync); + + AssertSql( + """ +@p='91' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Take_simple(bool isAsync) + { + await base.Take_simple(isAsync); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Take_simple_parameterized(bool isAsync) + { + await base.Take_simple_parameterized(isAsync); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Take_simple_projection(bool isAsync) + { + await base.Take_simple_projection(isAsync); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`City` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Take_subquery_projection(bool isAsync) + { + await base.Take_subquery_projection(isAsync); + + AssertSql( + """ +@p='2' + +SELECT TOP @p `c`.`City` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task OrderBy_Take_Count(bool isAsync) + { + await base.OrderBy_Take_Count(isAsync); + + AssertSql( + """ +@p='5' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +"""); + } + + public override async Task Take_OrderBy_Count(bool isAsync) + { + await base.Take_OrderBy_Count(isAsync); + + AssertSql( + """ +@p='5' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM `Orders` AS `o` +) AS `o0` +"""); + } + + public override async Task Any_simple(bool isAsync) + { + await base.Any_simple(isAsync); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Any_predicate(bool isAsync) + { + await base.Any_predicate(isAsync); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c` + WHERE `c`.`ContactName` LIKE 'A%') +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Any_nested_negated(bool isAsync) + { + await base.Any_nested_negated(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` LIKE 'A%') +"""); + } + + public override async Task Any_nested_negated2(bool isAsync) + { + await base.Any_nested_negated2(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE (`c`.`City` <> 'London' OR `c`.`City` IS NULL) AND NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` LIKE 'ABC%') +"""); + } + + public override async Task Any_nested_negated3(bool isAsync) + { + await base.Any_nested_negated3(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` LIKE 'ABC%') AND (`c`.`City` <> 'London' OR `c`.`City` IS NULL) +"""); + } + + public override async Task Any_nested(bool isAsync) + { + await base.Any_nested(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` LIKE 'A%') +"""); + } + + public override async Task Any_nested2(bool isAsync) + { + await base.Any_nested2(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE (`c`.`City` <> 'London' OR `c`.`City` IS NULL) AND EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` LIKE 'A%') +"""); + } + + public override async Task Any_nested3(bool isAsync) + { + await base.Any_nested3(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` LIKE 'A%') AND (`c`.`City` <> 'London' OR `c`.`City` IS NULL) +"""); + } + + public override async Task Any_with_multiple_conditions_still_uses_exists(bool isAsync) + { + await base.Any_with_multiple_conditions_still_uses_exists(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' AND EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`EmployeeID` = 1) + """); + } + + public override async Task Any_on_distinct(bool async) + { + await base.Any_on_distinct(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND (`o`.`EmployeeID` <> 1 OR `o`.`EmployeeID` IS NULL)) +"""); + } + + public override async Task Contains_on_distinct(bool async) + { + await base.Contains_on_distinct(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE 1 IN ( + SELECT `o`.`EmployeeID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` +) +"""); + } + + public override async Task All_on_distinct(bool async) + { + await base.All_on_distinct(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT (IIF(1 IN ( + SELECT `o`.`EmployeeID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ) IS NULL, FALSE, 1 IN ( + SELECT `o`.`EmployeeID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ))) +"""); + } + + public override async Task All_top_level(bool isAsync) + { + await base.All_top_level(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Customers` AS `c` + WHERE `c`.`ContactName` NOT LIKE 'A%' OR `c`.`ContactName` IS NULL) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task All_top_level_column(bool isAsync) + { + await base.All_top_level_column(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Customers` AS `c` + WHERE `c`.`ContactName` IS NULL OR LEFT(`c`.`ContactName`, IIF(LEN(`c`.`ContactName`) IS NULL, 0, LEN(`c`.`ContactName`))) <> `c`.`ContactName`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task All_top_level_subquery(bool isAsync) + { + await base.All_top_level_subquery(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Customers` AS `c` + WHERE NOT EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE EXISTS ( + SELECT 1 + FROM `Customers` AS `c1` + WHERE `c`.`CustomerID` = `c1`.`CustomerID`))) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task All_top_level_subquery_ef_property(bool isAsync) + { + await base.All_top_level_subquery_ef_property(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Customers` AS `c` + WHERE NOT EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE EXISTS ( + SELECT 1 + FROM `Customers` AS `c1` + WHERE `c`.`CustomerID` = `c1`.`CustomerID`))) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Where_select_many_or(bool isAsync) + { + await base.Where_select_many_or(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Customers` AS `c`, + `Employees` AS `e` + WHERE `c`.`City` = 'London' OR `e`.`City` = 'London' + """); + } + + public override async Task Where_select_many_or2(bool isAsync) + { + await base.Where_select_many_or2(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Customers` AS `c`, + `Employees` AS `e` + WHERE `c`.`City` IN ('London', 'Berlin') + """); + } + + public override async Task Where_select_many_or3(bool isAsync) + { + await base.Where_select_many_or3(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Customers` AS `c`, + `Employees` AS `e` + WHERE `c`.`City` IN ('London', 'Berlin', 'Seattle') + """); + } + + public override async Task Where_select_many_or4(bool isAsync) + { + await base.Where_select_many_or4(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Customers` AS `c`, + `Employees` AS `e` + WHERE `c`.`City` IN ('London', 'Berlin', 'Seattle', 'Lisboa') + """); + } + + public override async Task Where_select_many_or_with_parameter(bool isAsync) + { + await base.Where_select_many_or_with_parameter(isAsync); + + AssertSql( + """ +@london='London' (Size = 15) +@lisboa='Lisboa' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Customers` AS `c`, +`Employees` AS `e` +WHERE `c`.`City` = @london OR `c`.`City` = 'Berlin' OR `c`.`City` = 'Seattle' OR `c`.`City` = @lisboa +"""); + } + + public override async Task SelectMany_simple_subquery(bool isAsync) + { + await base.SelectMany_simple_subquery(isAsync); + + AssertSql( + """ +@p='9' + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` +) AS `e0`, +`Customers` AS `c` +"""); + } + + public override async Task SelectMany_simple1(bool isAsync) + { + await base.SelectMany_simple1(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e`, + `Customers` AS `c` + """); + } + + public override async Task SelectMany_simple2(bool isAsync) + { + await base.SelectMany_simple2(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e0`.`FirstName` + FROM `Employees` AS `e`, + `Customers` AS `c`, + `Employees` AS `e0` + """); + } + + public override async Task SelectMany_entity_deep(bool isAsync) + { + await base.SelectMany_entity_deep(isAsync); + + AssertSql( + $""" + SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title`, `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e2`.`EmployeeID`, `e2`.`City`, `e2`.`Country`, `e2`.`FirstName`, `e2`.`ReportsTo`, `e2`.`Title` + FROM `Employees` AS `e`, + `Employees` AS `e0`, + `Employees` AS `e1`, + `Employees` AS `e2` + """); + } + + public override async Task SelectMany_projection1(bool isAsync) + { + await base.SelectMany_projection1(isAsync); + + AssertSql( + $""" + SELECT `e`.`City`, `e0`.`Country` + FROM `Employees` AS `e`, + `Employees` AS `e0` + """); + } + + public override async Task SelectMany_projection2(bool isAsync) + { + await base.SelectMany_projection2(isAsync); + + AssertSql( + $""" + SELECT `e`.`City`, `e0`.`Country`, `e1`.`FirstName` + FROM `Employees` AS `e`, + `Employees` AS `e0`, + `Employees` AS `e1` + """); + } + + public override async Task SelectMany_Count(bool isAsync) + { + await base.SelectMany_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Customers` AS `c`, + `Orders` AS `o` + """); + } + + public override async Task SelectMany_LongCount(bool isAsync) + { + await base.SelectMany_LongCount(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Customers` AS `c`, + `Orders` AS `o` + """); + } + + public override async Task SelectMany_OrderBy_ThenBy_Any(bool isAsync) + { + await base.SelectMany_OrderBy_ThenBy_Any(isAsync); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c`, + `Orders` AS `o`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Join_Where_Count(bool isAsync) + { + await base.Join_Where_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Where_Join_Any(bool isAsync) + { + await base.Where_Join_Any(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE (`c`.`CustomerID` LIKE 'A%') AND EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderDate` = #1998-01-15#) +"""); + } + + public override async Task Where_Join_Exists(bool isAsync) + { + await base.Where_Join_Exists(isAsync); + + AssertSql(); + } + + public override async Task Where_Join_Exists_Inequality(bool isAsync) + { + await base.Where_Join_Exists_Inequality(isAsync); + + AssertSql(); + } + + public override async Task Where_Join_Exists_Constant(bool isAsync) + { + await base.Where_Join_Exists_Constant(isAsync); + + AssertSql(); + } + + public override async Task Where_Join_Not_Exists(bool isAsync) + { + await base.Where_Join_Not_Exists(isAsync); + + AssertSql(); + } + + public override async Task Join_OrderBy_Count(bool isAsync) + { + await base.Join_OrderBy_Count(isAsync); + + AssertSql( + $""" + SELECT COUNT(*) + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task Multiple_joins_Where_Order_Any(bool isAsync) + { + await base.Multiple_joins_Where_Order_Any(isAsync); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM (`Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + WHERE (`c`.`City` = 'London') AND (`o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL)) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Where_join_select(bool isAsync) + { + await base.Where_join_select(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Where_orderby_join_select(bool isAsync) + { + await base.Where_orderby_join_select(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` <> 'ALFKI' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Where_join_orderby_join_select(bool isAsync) + { + await base.Where_join_orderby_join_select(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`c`.`CustomerID` <> 'ALFKI') AND (`o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL) +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Where_select_many(bool isAsync) + { + await base.Where_select_many(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c`, + `Orders` AS `o` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Where_orderby_select_many(bool isAsync) + { + await base.Where_orderby_select_many(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c`, + `Orders` AS `o` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task SelectMany_cartesian_product_with_ordering(bool isAsync) + { + await base.SelectMany_cartesian_product_with_ordering(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`City` +FROM `Customers` AS `c`, +`Employees` AS `e` +WHERE `c`.`City` = `e`.`City` OR (`c`.`City` IS NULL AND `e`.`City` IS NULL) +ORDER BY `e`.`City`, `c`.`CustomerID` DESC +"""); + } + + public override async Task SelectMany_Joined_DefaultIfEmpty(bool isAsync) + { + await base.SelectMany_Joined_DefaultIfEmpty(isAsync); + + AssertSql( + $""" + SELECT `c`.`ContactName`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task SelectMany_Joined_DefaultIfEmpty2(bool isAsync) + { + await base.SelectMany_Joined_DefaultIfEmpty2(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task SelectMany_Joined_DefaultIfEmpty3(bool async) + { + await base.SelectMany_Joined_DefaultIfEmpty3(async); + + AssertSql( + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +"""); + } + + public override async Task SelectMany_Joined_Take(bool isAsync) + { + await base.SelectMany_Joined_Take(isAsync); + + AssertSql( + $""" + SELECT `c`.`ContactName`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + FROM `Customers` AS `c` + INNER JOIN ( + SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` + FROM `Orders` AS `o` + ) AS `t` + WHERE `t`.`row` <= 4 + ) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + """); + } + + public override async Task Take_with_single(bool isAsync) + { + await base.Take_with_single(isAsync); + + AssertSql( + """ +@p='1' + +SELECT TOP 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Take_with_single_select_many(bool isAsync) + { + await base.Take_with_single_select_many(isAsync); + + AssertSql( + """ +@p='1' + +SELECT TOP 2 `s`.`CustomerID`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `s`.`OrderID`, `s`.`CustomerID0`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID` AS `CustomerID0`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c`, + `Orders` AS `o` + ORDER BY `c`.`CustomerID`, `o`.`OrderID` +) AS `s` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` +"""); + } + + public override async Task Distinct_Skip(bool isAsync) + { + await base.Distinct_Skip(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='5'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ) AS `t` + ORDER BY `t`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + """); + } + + public override async Task Distinct_Skip_Take(bool isAsync) + { + await base.Distinct_Skip_Take(isAsync); + + AssertSql( + """ +@p1='10' +@p='5' + +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP @p1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM ( + SELECT TOP @p + @p1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ) AS `c0` + ORDER BY `c0`.`ContactName` + ) AS `c1` + ORDER BY `c1`.`ContactName` DESC +) AS `c2` +ORDER BY `c2`.`ContactName` +"""); + } + + public override async Task Skip_Distinct(bool isAsync) + { + await base.Skip_Distinct(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='5'")} + + SELECT DISTINCT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + """); + } + + public override async Task Skip_Take_Distinct(bool isAsync) + { + await base.Skip_Take_Distinct(isAsync); + + AssertSql( + """ +@p1='10' +@p='5' + +SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` + FROM ( + SELECT TOP @p1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + ) AS `c1` + ORDER BY `c1`.`ContactName` DESC + ) AS `c2` + ORDER BY `c2`.`ContactName` +) AS `c0` +"""); + } + + public override async Task Skip_Take_Any(bool isAsync) + { + await base.Skip_Take_Any(isAsync); + + AssertSql( + """ +@p1='10' +@p='5' + +SELECT EXISTS ( + SELECT 1 + FROM ( + SELECT TOP @p1 `c0`.`ContactName` + FROM ( + SELECT TOP @p + @p1 `c`.`ContactName` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + ) AS `c0` + ORDER BY `c0`.`ContactName` DESC + ) AS `c1` + ORDER BY `c1`.`ContactName`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Skip_Take_All(bool isAsync) + { + await base.Skip_Take_All(isAsync); + + AssertSql( + """ +@p1='7' +@p='4' + +SELECT NOT EXISTS ( + SELECT 1 + FROM ( + SELECT `c2`.`CustomerID` + FROM ( + SELECT TOP @p1 `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c2`.`CustomerID` + ) AS `c0` + WHERE `c0`.`CustomerID` NOT LIKE 'B%') +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Take_All(bool isAsync) + { + await base.Take_All(isAsync); + + AssertSql( + """ +@p='4' + +SELECT NOT EXISTS ( + SELECT 1 + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c0` + WHERE `c0`.`CustomerID` NOT LIKE 'A%') +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Skip_Take_Any_with_predicate(bool isAsync) + { + await base.Skip_Take_Any_with_predicate(isAsync); + + AssertSql( + """ +@p1='7' +@p='5' + +SELECT EXISTS ( + SELECT 1 + FROM ( + SELECT `c2`.`CustomerID` + FROM ( + SELECT TOP @p1 `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c2`.`CustomerID` + ) AS `c0` + WHERE `c0`.`CustomerID` LIKE 'C%') +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Take_Any_with_predicate(bool isAsync) + { + await base.Take_Any_with_predicate(isAsync); + + AssertSql( + """ +@p='5' + +SELECT EXISTS ( + SELECT 1 + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c0` + WHERE `c0`.`CustomerID` LIKE 'B%') +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task OrderBy(bool isAsync) + { + await base.OrderBy(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task OrderBy_true(bool isAsync) + { + await base.OrderBy_true(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task OrderBy_integer(bool isAsync) + { + await base.OrderBy_integer(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task OrderBy_parameter(bool isAsync) + { + await base.OrderBy_parameter(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task OrderBy_anon(bool isAsync) + { + await base.OrderBy_anon(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task OrderBy_anon2(bool isAsync) + { + await base.OrderBy_anon2(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Distinct_Take(bool isAsync) + { + await base.Distinct_Take(isAsync); + + AssertSql( + """ +@p='5' + +SELECT TOP @p `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` +) AS `o0` +ORDER BY `o0`.`OrderID` +"""); + } + + public override async Task Distinct_Take_Count(bool isAsync) + { + await base.Distinct_Take_Count(isAsync); + + AssertSql( + """ +@p='5' + +SELECT COUNT(*) +FROM ( + SELECT DISTINCT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` +) AS `o0` +"""); + } + + public override async Task OrderBy_shadow(bool isAsync) + { + await base.OrderBy_shadow(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`Title`, `e`.`EmployeeID` + """); + } + + public override async Task OrderBy_multiple(bool isAsync) + { + await base.OrderBy_multiple(isAsync); + + AssertSql( + $""" + SELECT `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`Country`, `c`.`City` + """); + } + + public override async Task OrderBy_ThenBy_Any(bool isAsync) + { + await base.OrderBy_ThenBy_Any(isAsync); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task OrderBy_correlated_subquery1(bool isAsync) + { + await base.OrderBy_correlated_subquery1(isAsync); + + AssertSql( + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = `c`.`CustomerID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c1` +ORDER BY NOT (`c1`.`c`), `c1`.`CustomerID` +"""); + } + + public override async Task OrderBy_correlated_subquery2(bool isAsync) + { + await base.OrderBy_correlated_subquery2(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` <= 10250 AND (( + SELECT TOP 1 `c1`.`City` + FROM ( + SELECT `c`.`City`, EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI') AS `c` + FROM `Customers` AS `c` + ) AS `c1` + ORDER BY NOT (`c1`.`c`)) <> 'Nowhere' OR ( + SELECT TOP 1 `c1`.`City` + FROM ( + SELECT `c`.`City`, EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI') AS `c` + FROM `Customers` AS `c` + ) AS `c1` + ORDER BY NOT (`c1`.`c`)) IS NULL) +"""); + } + + public override async Task Where_subquery_recursive_trivial(bool isAsync) + { + await base.Where_subquery_recursive_trivial(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE EXISTS ( + SELECT 1 + FROM `Employees` AS `e0` + WHERE EXISTS ( + SELECT 1 + FROM `Employees` AS `e1`)) + ORDER BY `e`.`EmployeeID` + """); + } + + public override async Task Select_DTO_distinct_translated_to_server(bool isAsync) + { + await base.Select_DTO_distinct_translated_to_server(isAsync); + + AssertSql( + $""" + SELECT DISTINCT 1 + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + """); + } + + public override async Task Select_DTO_constructor_distinct_translated_to_server(bool isAsync) + { + await base.Select_DTO_constructor_distinct_translated_to_server(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + """); + } + + public override async Task Select_DTO_constructor_distinct_with_navigation_translated_to_server(bool isAsync) + { + await base.Select_DTO_constructor_distinct_with_navigation_translated_to_server(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `c`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` < 10300 + """); + } + + public override async Task Select_DTO_constructor_distinct_with_collection_projection_translated_to_server(bool async) + { + await base.Select_DTO_constructor_distinct_with_collection_projection_translated_to_server(async); + + AssertSql( + """ +SELECT `o0`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ( + SELECT DISTINCT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 +) AS `o0` +LEFT JOIN `Orders` AS `o1` ON `o0`.`CustomerID` = `o1`.`CustomerID` +ORDER BY `o0`.`CustomerID` +"""); + } + + public override async Task + Select_DTO_constructor_distinct_with_collection_projection_translated_to_server_with_binding_after_client_eval(bool async) + { + // Allow binding of expressions after projection has turned to client eval. Issue #24478. + // Unlike the ACE provider (which mis-shapes the collection and fails the base assertion — hence its + // Assert.ThrowsAsync wrapper), LibRed executes and shapes this correctly, so the base + // test passes outright. + await base + .Select_DTO_constructor_distinct_with_collection_projection_translated_to_server_with_binding_after_client_eval(async); + + AssertSql( + """ +SELECT `o0`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ( + SELECT DISTINCT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 +) AS `o0` +LEFT JOIN `Orders` AS `o1` ON `o0`.`CustomerID` = `o1`.`CustomerID` +ORDER BY `o0`.`CustomerID` +"""); + } + + public override async Task Select_DTO_with_member_init_distinct_translated_to_server(bool isAsync) + { + await base.Select_DTO_with_member_init_distinct_translated_to_server(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `o`.`CustomerID` AS `Id`, `o`.`OrderID` AS `Count` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + """); + } + + public override async Task Select_nested_collection_count_using_DTO(bool isAsync) + { + await base.Select_nested_collection_count_using_DTO(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `Id`, ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Count` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + """); + } + + public override async Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(bool isAsync) + { + await base.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT DISTINCT `o`.`CustomerID` AS `Id`, `o`.`OrderID` AS `Count` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 +) AS `o0` +INNER JOIN `Customers` AS `c` ON `o0`.`Id` = `c`.`CustomerID` +"""); + } + + public override async Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(bool isAsync) + { + await base.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT DISTINCT `o`.`CustomerID` AS `Id`, `o`.`OrderID` AS `Count` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 +) AS `o0` +INNER JOIN `Customers` AS `c` ON `o0`.`Id` = `c`.`CustomerID` +"""); + } + + public override async Task Select_DTO_with_member_init_distinct_in_subquery_used_in_projection_translated_to_server(bool isAsync) + { + await base.Select_DTO_with_member_init_distinct_in_subquery_used_in_projection_translated_to_server(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`Id`, `t`.`Count` + //FROM `Customers` AS `c` + //CROSS JOIN ( + // SELECT DISTINCT `o`.`CustomerID` AS `Id`, `o`.`OrderID` AS `Count` + // FROM `Orders` AS `o` + // WHERE `o`.`OrderID` < 10300 + //) AS `t` + //WHERE `c`.`CustomerID` LIKE 'A' & '%'"); + } + + public override async Task Select_correlated_subquery_filtered(bool isAsync) + { + await base.Select_correlated_subquery_filtered(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Select_correlated_subquery_ordered(bool isAsync) + { + await base.Select_correlated_subquery_ordered(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='3'")} + + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """, + // + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + """, + // + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + """, + // + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + """); + } + + public override async Task Where_subquery_on_bool(bool isAsync) + { + await base.Where_subquery_on_bool(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE 'Chai' IN ( + SELECT `p0`.`ProductName` + FROM `Products` AS `p0` +) +"""); + } + + public override async Task Where_subquery_on_collection(bool isAsync) + { + await base.Where_subquery_on_collection(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE CINT(5) IN ( + SELECT `o`.`Quantity` + FROM `Order Details` AS `o` + WHERE `o`.`ProductID` = `p`.`ProductID` +) +"""); + } + + public override async Task Select_many_cross_join_same_collection(bool isAsync) + { + await base.Select_many_cross_join_same_collection(isAsync); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM `Customers` AS `c`, +`Customers` AS `c0` +"""); + } + + public override async Task OrderBy_null_coalesce_operator(bool isAsync) + { + await base.OrderBy_null_coalesce_operator(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY IIF(`c`.`Region` IS NULL, 'ZZ', `c`.`Region`), `c`.`CustomerID` + """); + } + + public override async Task Select_null_coalesce_operator(bool isAsync) + { + await base.Select_null_coalesce_operator(isAsync); + + // issue #16038 + // AssertSql( + // $@"SELECT `c`.`CustomerID`, `c`.`CompanyName`, IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) AS `Region` + //FROM `Customers` AS `c` + //ORDER BY `Region`, `c`.`CustomerID`"); + } + + public override async Task OrderBy_conditional_operator(bool isAsync) + { + await base.OrderBy_conditional_operator(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY IIF(`c`.`Region` IS NULL, 'ZZ', `c`.`Region`), `c`.`CustomerID` + """); + } + + public override async Task Coalesce_Correct_Multiple_Same_TypeMapping(bool async) + { + await base.Coalesce_Correct_Multiple_Same_TypeMapping(async); + + AssertSql( + """ +SELECT IIF((IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) + 1) IS NULL, IIF((IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) + 2) IS NULL, IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) + 3, IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) + 2), IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) + 1) +FROM `Employees` AS `e` +ORDER BY `e`.`EmployeeID` +"""); + } + + public override async Task Coalesce_Correct_TypeMapping_Double(bool async) + { + await base.Coalesce_Correct_TypeMapping_Double(async); + + AssertSql( + """ +SELECT COALESCE([e].[ReportsTo], 2.25) +FROM [Employees] AS [e] +"""); + } + + public override async Task Coalesce_Correct_TypeMapping_String(bool async) + { + await base.Coalesce_Correct_TypeMapping_String(async); + + AssertSql( + """ +SELECT IIF(`c`.`Region` IS NULL, 'no region specified', `c`.`Region`) +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Null_Coalesce_Short_Circuit(bool isAsync) + { + await base.Null_Coalesce_Short_Circuit(isAsync); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, FALSE AS `Test` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +"""); + } + + public override async Task Null_Coalesce_Short_Circuit_with_server_correlated_leftover(bool isAsync) + { + await base.Null_Coalesce_Short_Circuit_with_server_correlated_leftover(isAsync); + + AssertSql( + $""" + SELECT FALSE AS `Result` + FROM `Customers` AS `c` + """); + } + + public override async Task OrderBy_conditional_operator_where_condition_false(bool isAsync) + { + await base.OrderBy_conditional_operator_where_condition_false(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`City` + """); + } + + public override async Task OrderBy_comparison_operator(bool isAsync) + { + await base.OrderBy_comparison_operator(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY NOT (`c`.`Region` = 'ASK' AND `c`.`Region` IS NOT NULL) +"""); + } + + public override async Task Projection_null_coalesce_operator(bool isAsync) + { + await base.Projection_null_coalesce_operator(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`CompanyName`, IIF(`c`.`Region` IS NULL, 'ZZ', `c`.`Region`) AS `Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Filter_coalesce_operator(bool isAsync) + { + await base.Filter_coalesce_operator(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE IIF(`c`.`ContactName` IS NULL, `c`.`CompanyName`, `c`.`ContactName`) = 'Liz Nixon' +"""); + } + + public override async Task Take_skip_null_coalesce_operator(bool isAsync) + { + await base.Take_skip_null_coalesce_operator(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + {AssertSqlHelper.Declaration("@__p_1='5'")} + + SELECT DISTINCT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + FROM ( + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) AS `c` + FROM `Customers` AS `c` + ORDER BY IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) + ) AS `t` + ORDER BY `t`.`c` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + ) AS `t0` + """); + } + + public override async Task Select_take_null_coalesce_operator(bool isAsync) + { + await base.Select_take_null_coalesce_operator(isAsync); + + // issue #16038 + // AssertSql( + // $@"{AssertSqlHelper.Declaration("@__p_0='5'")} + + //SELECT TOP @__p_0 `c`.`CustomerID`, `c`.`CompanyName`, IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) AS `Region` + //FROM `Customers` AS `c` + //ORDER BY `Region`"); + } + + public override async Task Select_take_skip_null_coalesce_operator(bool isAsync) + { + await base.Select_take_skip_null_coalesce_operator(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + {AssertSqlHelper.Declaration("@__p_1='5'")} + + SELECT `t`.`CustomerID`, `t`.`CompanyName`, `t`.`c` AS `Region` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`CompanyName`, IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) AS `c` + FROM `Customers` AS `c` + ORDER BY IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) + ) AS `t` + ORDER BY `t`.`c` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + """); + } + + public override async Task Select_take_skip_null_coalesce_operator2(bool isAsync) + { + await base.Select_take_skip_null_coalesce_operator2(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + {AssertSqlHelper.Declaration("@__p_1='5'")} + + SELECT `t`.`CustomerID`, `t`.`CompanyName`, `t`.`Region` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`CompanyName`, `c`.`Region`, IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) AS `c` + FROM `Customers` AS `c` + ORDER BY IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) + ) AS `t` + ORDER BY `t`.`c` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + """); + } + + public override async Task Select_take_skip_null_coalesce_operator3(bool isAsync) + { + await base.Select_take_skip_null_coalesce_operator3(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + {AssertSqlHelper.Declaration("@__p_1='5'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) AS `c` + FROM `Customers` AS `c` + ORDER BY IIF(`c`.`Region` IS NULL, NULL, `c`.`Region`) + ) AS `t` + ORDER BY `t`.`c` + SKIP {AssertSqlHelper.Parameter("@__p_1")} + """); + } + + public override async Task Selected_column_can_coalesce(bool isAsync) + { + await base.Selected_column_can_coalesce(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY IIF(`c`.`Region` IS NULL, 'ZZ', `c`.`Region`) + """); + } + + public override async Task Environment_newline_is_funcletized(bool isAsync) + { + await base.Environment_newline_is_funcletized(isAsync); + + AssertSql( + """ +@NewLine_contains='% +%' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE @NewLine_contains +"""); + } + + public override async Task Concat_string_int(bool async) + { + await base.Concat_string_int(async); + + AssertSql( + """ +SELECT (`o`.`OrderID` & '') & IIF(`o`.`CustomerID` IS NULL, '', `o`.`CustomerID`) +FROM `Orders` AS `o` +"""); + } + + public override async Task Concat_int_string(bool async) + { + await base.Concat_int_string(async); + + AssertSql( + """ +SELECT IIF(`o`.`CustomerID` IS NULL, '', `o`.`CustomerID`) & (`o`.`OrderID` & '') +FROM `Orders` AS `o` +"""); + } + + public override async Task Concat_parameter_string_int(bool async) + { + await base.Concat_parameter_string_int(async); + + AssertSql( + """ +@parameter='-' (Size = 255) + +SELECT @parameter & (`o`.`OrderID` & '') +FROM `Orders` AS `o` +"""); + } + + public override async Task Concat_constant_string_int(bool async) + { + await base.Concat_constant_string_int(async); + + AssertSql( + """ +SELECT '-' & (`o`.`OrderID` & '') +FROM `Orders` AS `o` +"""); + } + + public override async Task String_concat_with_navigation1(bool isAsync) + { + await base.String_concat_with_navigation1(isAsync); + + AssertSql( + """ +SELECT (IIF(`o`.`CustomerID` IS NULL, '', `o`.`CustomerID`) & ' ') & IIF(`c`.`City` IS NULL, '', `c`.`City`) +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task String_concat_with_navigation2(bool isAsync) + { + await base.String_concat_with_navigation2(isAsync); + + AssertSql( + """ +SELECT (IIF(`c`.`City` IS NULL, '', `c`.`City`) & ' ') & IIF(`c`.`City` IS NULL, '', `c`.`City`) +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Handle_materialization_properly_when_more_than_two_query_sources_are_involved(bool isAsync) + { + await base.Handle_materialization_properly_when_more_than_two_query_sources_are_involved(isAsync); + + AssertSql( + $""" + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c`, + `Orders` AS `o`, + `Employees` AS `e` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Parameter_extraction_short_circuits_1(bool isAsync) + { + await base.Parameter_extraction_short_circuits_1(isAsync); + + AssertSql( + """ +@dateFilter_Value_Month='7' +@dateFilter_Value_Year='1996' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10400 AND `o`.`OrderDate` IS NOT NULL AND DATEPART('m', `o`.`OrderDate`) = @dateFilter_Value_Month AND DATEPART('yyyy', `o`.`OrderDate`) = @dateFilter_Value_Year +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10400 +"""); + } + + public override async Task Parameter_extraction_short_circuits_2(bool isAsync) + { + await base.Parameter_extraction_short_circuits_2(isAsync); + + AssertSql( + """ +@dateFilter_Value_Month='7' +@dateFilter_Value_Year='1996' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10400 AND `o`.`OrderDate` IS NOT NULL AND DATEPART('m', `o`.`OrderDate`) = @dateFilter_Value_Month AND DATEPART('yyyy', `o`.`OrderDate`) = @dateFilter_Value_Year +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE FALSE +"""); + } + + public override async Task Parameter_extraction_short_circuits_3(bool isAsync) + { + await base.Parameter_extraction_short_circuits_3(isAsync); + + AssertSql( + """ +@dateFilter_Value_Month='7' +@dateFilter_Value_Year='1996' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10400 OR (`o`.`OrderDate` IS NOT NULL AND DATEPART('m', `o`.`OrderDate`) = @dateFilter_Value_Month AND DATEPART('yyyy', `o`.`OrderDate`) = @dateFilter_Value_Year) +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +"""); + } + + public override async Task Captured_variable_from_switch_case_pattern_matching(bool async) + { + await base.Captured_variable_from_switch_case_pattern_matching(async); + + AssertSql( + """ +@customerId='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerId +"""); + } + + public override async Task Subquery_member_pushdown_does_not_change_original_subquery_model(bool isAsync) + { + await base.Subquery_member_pushdown_does_not_change_original_subquery_model(isAsync); + + AssertSql( + """ +@p='3' + +SELECT `o1`.`OrderId`, `o1`.`City`, `o1`.`c` +FROM ( + SELECT `o0`.`OrderID` AS `OrderId`, ( + SELECT TOP 1 `c0`.`City` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = `o0`.`CustomerID`) AS `City`, ( + SELECT TOP 1 `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `c` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o0` +) AS `o1` +ORDER BY `o1`.`c` +"""); + } + + public override async Task Subquery_member_pushdown_does_not_change_original_subquery_model2(bool isAsync) + { + await base.Subquery_member_pushdown_does_not_change_original_subquery_model2(isAsync); + + AssertSql( + """ +@p='3' + +SELECT `o1`.`OrderId`, `o1`.`City`, `o1`.`c` +FROM ( + SELECT `o0`.`OrderID` AS `OrderId`, ( + SELECT TOP 1 `c0`.`City` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = `o0`.`CustomerID`) AS `City`, ( + SELECT TOP 1 `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `c` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o0` +) AS `o1` +ORDER BY `o1`.`c` +"""); + } + + public override async Task Query_expression_with_to_string_and_contains(bool isAsync) + { + await base.Query_expression_with_to_string_and_contains(isAsync); + + AssertSql( + """ +SELECT `o`.`CustomerID` +FROM `Orders` AS `o` +WHERE `o`.`OrderDate` IS NOT NULL AND (IIF((`o`.`EmployeeID` & '') IS NULL, '', (`o`.`EmployeeID` & '')) LIKE '%7%') +"""); + } + + public override async Task Select_expression_long_to_string(bool isAsync) + { + await base.Select_expression_long_to_string(isAsync); + + AssertSql( + $""" + SELECT (CLNG(`o`.`OrderID`) & '') AS `ShipName` + FROM `Orders` AS `o` + WHERE `o`.`OrderDate` IS NOT NULL + """); + } + + public override async Task Select_expression_int_to_string(bool isAsync) + { + await base.Select_expression_int_to_string(isAsync); + + AssertSql( + $""" + SELECT (`o`.`OrderID` & '') AS `ShipName` + FROM `Orders` AS `o` + WHERE `o`.`OrderDate` IS NOT NULL + """); + } + + public override async Task ToString_with_formatter_is_evaluated_on_the_client(bool isAsync) + { + await base.ToString_with_formatter_is_evaluated_on_the_client(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +WHERE `o`.`OrderDate` IS NOT NULL +""", + // + """ +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +WHERE `o`.`OrderDate` IS NOT NULL +"""); + } + + public override async Task Select_expression_other_to_string(bool isAsync) + { + await base.Select_expression_other_to_string(isAsync); + + AssertSql( + """ +SELECT IIF((`o`.`OrderDate` & '') IS NULL, '', (`o`.`OrderDate` & '')) AS `ShipName` +FROM `Orders` AS `o` +WHERE `o`.`OrderDate` IS NOT NULL +"""); + } + + public override async Task Select_expression_date_add_year(bool isAsync) + { + await base.Select_expression_date_add_year(isAsync); + + AssertSql( + $""" + SELECT DATEADD('yyyy', 1, `o`.`OrderDate`) AS `OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderDate` IS NOT NULL + """); + } + + public override async Task Select_expression_datetime_add_month(bool isAsync) + { + await base.Select_expression_datetime_add_month(isAsync); + + AssertSql( + $""" + SELECT DATEADD('m', 1, `o`.`OrderDate`) AS `OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderDate` IS NOT NULL + """); + } + + public override async Task Select_expression_datetime_add_hour(bool isAsync) + { + await base.Select_expression_datetime_add_hour(isAsync); + + AssertSql( + $""" + SELECT DATEADD('h', 1.0, `o`.`OrderDate`) AS `OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderDate` IS NOT NULL + """); + } + + public override async Task Select_expression_datetime_add_minute(bool isAsync) + { + await base.Select_expression_datetime_add_minute(isAsync); + + AssertSql( + $""" + SELECT DATEADD('n', 1.0, `o`.`OrderDate`) AS `OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderDate` IS NOT NULL + """); + } + + public override async Task Select_expression_datetime_add_second(bool isAsync) + { + await base.Select_expression_datetime_add_second(isAsync); + + AssertSql( + $""" + SELECT DATEADD('s', 1.0, `o`.`OrderDate`) AS `OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderDate` IS NOT NULL + """); + } + + public override async Task Select_expression_date_add_milliseconds_above_the_range(bool isAsync) + { + await base.Select_expression_date_add_milliseconds_above_the_range(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderDate` IS NOT NULL + """); + } + + public override async Task Select_expression_date_add_milliseconds_below_the_range(bool isAsync) + { + await base.Select_expression_date_add_milliseconds_below_the_range(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderDate` IS NOT NULL + """); + } + + public override async Task Select_expression_date_add_milliseconds_large_number_divided(bool isAsync) + { + await base.Select_expression_date_add_milliseconds_large_number_divided(isAsync); + + AssertSql( +""" +SELECT `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderDate` IS NOT NULL +"""); + } + + public override async Task Add_minutes_on_constant_value(bool async) + { + await base.Add_minutes_on_constant_value(async); + + AssertSql( + """ +SELECT DATEADD('n', CDBL(`o`.`OrderID` MOD 25), #1900-01-01#) AS `Test` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10500 +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Select_expression_references_are_updated_correctly_with_subquery(bool isAsync) + { + await base.Select_expression_references_are_updated_correctly_with_subquery(isAsync); + + AssertSql( + """ +@nextYear='2017' + +SELECT DISTINCT DATEPART('yyyy', `o`.`OrderDate`) +FROM `Orders` AS `o` +WHERE `o`.`OrderDate` IS NOT NULL AND DATEPART('yyyy', `o`.`OrderDate`) < @nextYear +"""); + } + + public override async Task DefaultIfEmpty_without_group_join(bool async) + { + await base.DefaultIfEmpty_without_group_join(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' +) AS `c0` ON TRUE +WHERE `c0`.`CustomerID` IS NOT NULL +"""); + } + + public override async Task DefaultIfEmpty_in_subquery(bool isAsync) + { + await base.DefaultIfEmpty_in_subquery(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `o`.`OrderID` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `o`.`OrderID` IS NOT NULL + """); + } + + public override async Task DefaultIfEmpty_in_subquery_not_correlated(bool isAsync) + { + await base.DefaultIfEmpty_in_subquery_not_correlated(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `s`.`OrderID` +FROM `Customers` AS `c`, +( + SELECT `o0`.`OrderID` + FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) + ) AS `e` + LEFT JOIN ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 15000 + ) AS `o0` ON TRUE +) AS `s` +"""); + } + + public override async Task DefaultIfEmpty_in_subquery_nested(bool isAsync) + { + await base.DefaultIfEmpty_in_subquery_nested(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `s`.`OrderID`, `o1`.`OrderDate` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID`), +( + SELECT `o0`.`OrderID` + FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) + ) AS `e` + LEFT JOIN ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 11050 + ) AS `o0` ON TRUE +) AS `s` +WHERE `c`.`City` = 'Seattle' AND `s`.`OrderID` IS NOT NULL AND `o1`.`OrderID` IS NOT NULL +ORDER BY `s`.`OrderID`, `o1`.`OrderDate` +"""); + } + + public override async Task DefaultIfEmpty_in_subquery_nested_filter_order_comparison(bool async) + { + await base.DefaultIfEmpty_in_subquery_nested_filter_order_comparison(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [t0].[OrderID], [t1].[OrderDate] +FROM [Customers] AS [c] +CROSS JOIN ( + SELECT [t].[OrderID] + FROM ( + SELECT NULL AS [empty] + ) AS [e] + LEFT JOIN ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] > 15000 + ) AS [t] ON 1 = 1 +) AS [t0] +OUTER APPLY ( + SELECT [o0].[OrderID], [o0].[OrderDate] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] <= CAST(LEN([c].[CustomerID]) AS int) +) AS [t1] +WHERE [c].[City] = N'Seattle' AND [t0].[OrderID] IS NOT NULL AND [t1].[OrderID] IS NOT NULL +ORDER BY [t0].[OrderID], [t1].[OrderDate] +"""); + } + + public override async Task OrderBy_skip_take(bool isAsync) + { + await base.OrderBy_skip_take(isAsync); + + AssertSql( + """ +@p1='8' +@p='5' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`ContactName` + ) AS `c0` + ORDER BY `c0`.`ContactTitle` DESC, `c0`.`ContactName` DESC +) AS `c1` +ORDER BY `c1`.`ContactTitle`, `c1`.`ContactName` +"""); + } + + public override async Task OrderBy_skip_skip_take(bool isAsync) + { + await base.OrderBy_skip_skip_take(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='5'")} + + {AssertSqlHelper.Declaration("@__p_1='8'")} + + {AssertSqlHelper.Declaration("@__p_2='3'")} + + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + ORDER BY `t`.`ContactTitle`, `t`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_1")} FETCH NEXT {AssertSqlHelper.Parameter("@__p_2")} ROWS ONLY + """); + } + + public override async Task OrderBy_skip_take_take(bool isAsync) + { + await base.OrderBy_skip_take_take(isAsync); + + AssertSql( + """ +@p2='3' +@p1='8' +@p='5' + +SELECT TOP @p2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT TOP @p1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`ContactName` + ) AS `c1` + ORDER BY `c1`.`ContactTitle` DESC, `c1`.`ContactName` DESC +) AS `c0` +ORDER BY `c0`.`ContactTitle`, `c0`.`ContactName` +"""); + } + + public override async Task OrderBy_skip_take_take_take_take(bool isAsync) + { + await base.OrderBy_skip_take_take_take_take(isAsync); + + AssertSql( + """ +@p='5' +@p3='8' +@p2='10' +@p1='15' + +SELECT TOP @p `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP @p3 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM ( + SELECT TOP @p2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT TOP @p1 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`ContactName` + ) AS `c3` + ORDER BY `c3`.`ContactTitle` DESC, `c3`.`ContactName` DESC + ) AS `c0` + ORDER BY `c0`.`ContactTitle`, `c0`.`ContactName` + ) AS `c1` + ORDER BY `c1`.`ContactTitle`, `c1`.`ContactName` +) AS `c2` +ORDER BY `c2`.`ContactTitle`, `c2`.`ContactName` +"""); + } + + public override async Task OrderBy_skip_take_skip_take_skip(bool isAsync) + { + await base.OrderBy_skip_take_skip_take_skip(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='5'")} + + {AssertSqlHelper.Declaration("@__p_1='15'")} + + {AssertSqlHelper.Declaration("@__p_2='2'")} + + {AssertSqlHelper.Declaration("@__p_3='8'")} + + SELECT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + FROM ( + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_0")} FETCH NEXT {AssertSqlHelper.Parameter("@__p_1")} ROWS ONLY + ) AS `t` + ORDER BY `t`.`ContactTitle`, `t`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_2")} FETCH NEXT {AssertSqlHelper.Parameter("@__p_3")} ROWS ONLY + ) AS `t0` + ORDER BY `t0`.`ContactTitle`, `t0`.`ContactName` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + """); + } + + public override async Task OrderBy_skip_take_distinct(bool isAsync) + { + await base.OrderBy_skip_take_distinct(isAsync); + + AssertSql( + """ +@p1='15' +@p='5' + +SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` + FROM ( + SELECT TOP @p1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`ContactName` + ) AS `c1` + ORDER BY `c1`.`ContactTitle` DESC, `c1`.`ContactName` DESC + ) AS `c2` + ORDER BY `c2`.`ContactTitle`, `c2`.`ContactName` +) AS `c0` +"""); + } + + public override async Task OrderBy_coalesce_take_distinct(bool isAsync) + { + await base.OrderBy_coalesce_take_distinct(isAsync); + + AssertSql( + """ +@p='15' + +SELECT DISTINCT `p0`.`ProductID`, `p0`.`Discontinued`, `p0`.`ProductName`, `p0`.`SupplierID`, `p0`.`UnitPrice`, `p0`.`UnitsInStock` +FROM ( + SELECT TOP @p `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` + FROM `Products` AS `p` + ORDER BY IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`) +) AS `p0` +"""); + } + + public override async Task OrderBy_coalesce_skip_take_distinct(bool isAsync) + { + await base.OrderBy_coalesce_skip_take_distinct(isAsync); + + AssertSql( + """ +@p1='15' +@p='5' + +SELECT DISTINCT `p0`.`ProductID`, `p0`.`Discontinued`, `p0`.`ProductName`, `p0`.`SupplierID`, `p0`.`UnitPrice`, `p0`.`UnitsInStock` +FROM ( + SELECT `p2`.`ProductID`, `p2`.`Discontinued`, `p2`.`ProductName`, `p2`.`SupplierID`, `p2`.`UnitPrice`, `p2`.`UnitsInStock` + FROM ( + SELECT TOP @p1 `p1`.`ProductID`, `p1`.`Discontinued`, `p1`.`ProductName`, `p1`.`SupplierID`, `p1`.`UnitPrice`, `p1`.`UnitsInStock`, `p1`.`c` + FROM ( + SELECT TOP @p + @p1 `p3`.`ProductID`, `p3`.`Discontinued`, `p3`.`ProductName`, `p3`.`SupplierID`, `p3`.`UnitPrice`, `p3`.`UnitsInStock`, `p3`.`c` + FROM ( + SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`) AS `c` + FROM `Products` AS `p` + ) AS `p3` + ORDER BY `p3`.`c` + ) AS `p1` + ORDER BY `p1`.`c` DESC + ) AS `p2` + ORDER BY `p2`.`c` +) AS `p0` +"""); + } + + public override async Task OrderBy_coalesce_skip_take_distinct_take(bool isAsync) + { + await base.OrderBy_coalesce_skip_take_distinct_take(isAsync); + + AssertSql( + """ +@p='5' +@p1='15' + +SELECT DISTINCT TOP @p `p0`.`ProductID`, `p0`.`Discontinued`, `p0`.`ProductName`, `p0`.`SupplierID`, `p0`.`UnitPrice`, `p0`.`UnitsInStock` +FROM ( + SELECT `p2`.`ProductID`, `p2`.`Discontinued`, `p2`.`ProductName`, `p2`.`SupplierID`, `p2`.`UnitPrice`, `p2`.`UnitsInStock` + FROM ( + SELECT TOP @p1 `p1`.`ProductID`, `p1`.`Discontinued`, `p1`.`ProductName`, `p1`.`SupplierID`, `p1`.`UnitPrice`, `p1`.`UnitsInStock`, `p1`.`c` + FROM ( + SELECT TOP @p + @p1 `p3`.`ProductID`, `p3`.`Discontinued`, `p3`.`ProductName`, `p3`.`SupplierID`, `p3`.`UnitPrice`, `p3`.`UnitsInStock`, `p3`.`c` + FROM ( + SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`) AS `c` + FROM `Products` AS `p` + ) AS `p3` + ORDER BY `p3`.`c` + ) AS `p1` + ORDER BY `p1`.`c` DESC + ) AS `p2` + ORDER BY `p2`.`c` +) AS `p0` +"""); + } + + public override async Task OrderBy_skip_take_distinct_orderby_take(bool isAsync) + { + await base.OrderBy_skip_take_distinct_orderby_take(isAsync); + + AssertSql( + """ +@p2='8' +@p1='15' +@p='5' + +SELECT TOP @p2 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP @p1 `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`ContactName` + ) AS `c2` + ORDER BY `c2`.`ContactTitle` DESC, `c2`.`ContactName` DESC + ) AS `c3` + ORDER BY `c3`.`ContactTitle`, `c3`.`ContactName` + ) AS `c0` +) AS `c1` +ORDER BY `c1`.`ContactTitle` +"""); + } + + public override async Task No_orderby_added_for_fully_translated_manually_constructed_LOJ(bool isAsync) + { + await base.No_orderby_added_for_fully_translated_manually_constructed_LOJ(isAsync); + + AssertSql( + $""" + SELECT `e`.`City` AS `City1`, `e0`.`City` AS `City2` + FROM `Employees` AS `e` + LEFT JOIN `Employees` AS `e0` ON `e`.`EmployeeID` = `e0`.`ReportsTo` + """); + } + + public override async Task No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ(bool isAsync) + { + await base.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ(isAsync); + + AssertSql(); + } + + public override async Task No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition1( + bool isAsync) + { + await base.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition1(isAsync); + + AssertSql(); + } + + public override async Task No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition2( + bool isAsync) + { + await base.No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition2(isAsync); + + AssertSql(); + } + + public override async Task Orderby_added_for_client_side_GroupJoin_principal_to_dependent_LOJ(bool isAsync) + { + await base.Orderby_added_for_client_side_GroupJoin_principal_to_dependent_LOJ(isAsync); + + AssertSql(); + } + + public override async Task Contains_with_DateTime_Date(bool isAsync) + { + await base.Contains_with_DateTime_Date(isAsync); + + AssertSql( + """ +@dates1='1996-07-04T00:00:00.0000000' (DbType = DateTime) +@dates2='1996-07-16T00:00:00.0000000' (DbType = DateTime) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE IIF(`o`.`OrderDate` IS NULL, NULL, DATEVALUE(`o`.`OrderDate`)) IN (CDATE(@dates1), CDATE(@dates2)) +""", + // + """ +@dates1='1996-07-04T00:00:00.0000000' (DbType = DateTime) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE IIF(`o`.`OrderDate` IS NULL, NULL, DATEVALUE(`o`.`OrderDate`)) = CDATE(@dates1) +"""); + } + + public override async Task Contains_with_subquery_involving_join_binds_to_correct_table(bool isAsync) + { + await base.Contains_with_subquery_involving_join_binds_to_correct_table(isAsync); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` > 11000 AND `o`.`OrderID` IN ( + SELECT `o0`.`OrderID` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` + WHERE `p`.`ProductName` = 'Chai' +) +"""); + } + + public override async Task Complex_query_with_repeated_query_model_compiles_correctly(bool isAsync) + { + await base.Complex_query_with_repeated_query_model_compiles_correctly(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' AND EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE EXISTS ( + SELECT 1 + FROM `Customers` AS `c1`)) + """); + } + + public override async Task Complex_query_with_repeated_nested_query_model_compiles_correctly(bool isAsync) + { + await base.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' AND EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE EXISTS ( + SELECT 1 + FROM `Customers` AS `c1` + WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT TOP 10 1 + FROM `Customers` AS `c2` + ORDER BY `c2`.`CustomerID` + ) AS `c3`))) +"""); + } + + public override async Task Anonymous_member_distinct_where(bool isAsync) + { + await base.Anonymous_member_distinct_where(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Anonymous_member_distinct_orderby(bool isAsync) + { + await base.Anonymous_member_distinct_orderby(isAsync); + + AssertSql( + """ +SELECT `c0`.`CustomerID` +FROM ( + SELECT DISTINCT `c`.`CustomerID` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Anonymous_member_distinct_result(bool isAsync) + { + await base.Anonymous_member_distinct_result(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +"""); + } + + public override async Task Anonymous_complex_distinct_where(bool isAsync) + { + await base.Anonymous_complex_distinct_where(isAsync); + + AssertSql( + """ +SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `A` +FROM `Customers` AS `c` +WHERE (`c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`)) = 'ALFKIBerlin' +"""); + } + + public override async Task Anonymous_complex_distinct_orderby(bool isAsync) + { + await base.Anonymous_complex_distinct_orderby(isAsync); + + AssertSql( + """ +SELECT `c0`.`A` +FROM ( + SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `A` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`A` +"""); + } + + public override async Task Anonymous_complex_distinct_result(bool isAsync) + { + await base.Anonymous_complex_distinct_result(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `A` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) LIKE 'A%' +) AS `c0` +"""); + } + + public override async Task Anonymous_complex_orderby(bool isAsync) + { + await base.Anonymous_complex_orderby(isAsync); + + AssertSql( + """ +SELECT `c0`.`A` +FROM ( + SELECT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `A` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`A` +"""); + } + + public override async Task Anonymous_subquery_orderby(bool isAsync) + { + await base.Anonymous_subquery_orderby(isAsync); + + AssertSql( + """ +SELECT `c0`.`A`, `c0`.`c` +FROM ( + SELECT ( + SELECT TOP 1 `o1`.`OrderDate` + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID` + ORDER BY `o1`.`OrderID` DESC) AS `A`, ( + SELECT TOP 1 `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID` + ORDER BY `o0`.`OrderID` DESC) AS `c` + FROM `Customers` AS `c` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 1 +) AS `c0` +ORDER BY `c0`.`c` +"""); + } + + public override async Task DTO_member_distinct_where(bool isAsync) + { + await base.DTO_member_distinct_where(isAsync); + + AssertSql( + $""" + SELECT DISTINCT `c`.`CustomerID` AS `Property` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task DTO_member_distinct_orderby(bool isAsync) + { + await base.DTO_member_distinct_orderby(isAsync); + + AssertSql( + """ +SELECT `c0`.`Property` +FROM ( + SELECT DISTINCT `c`.`CustomerID` AS `Property` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`Property` +"""); + } + + public override async Task DTO_member_distinct_result(bool isAsync) + { + await base.DTO_member_distinct_result(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `c`.`CustomerID` AS `Property` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +"""); + } + + public override async Task DTO_complex_distinct_where(bool isAsync) + { + await base.DTO_complex_distinct_where(isAsync); + + AssertSql( + """ +SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `Property` +FROM `Customers` AS `c` +WHERE (`c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`)) = 'ALFKIBerlin' +"""); + } + + public override async Task DTO_complex_distinct_orderby(bool isAsync) + { + await base.DTO_complex_distinct_orderby(isAsync); + + AssertSql( + """ +SELECT `c0`.`Property` +FROM ( + SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `Property` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`Property` +"""); + } + + public override async Task DTO_complex_distinct_result(bool isAsync) + { + await base.DTO_complex_distinct_result(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `Property` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) LIKE 'A%' +) AS `c0` +"""); + } + + public override async Task DTO_complex_orderby(bool isAsync) + { + await base.DTO_complex_orderby(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `c`.`CustomerID` + `c`.`City` AS `Property` + //FROM `Customers` AS `c` + //ORDER BY `Property`"); + } + + public override async Task DTO_subquery_orderby(bool isAsync) + { + await base.DTO_subquery_orderby(isAsync); + + AssertSql( + """ +SELECT `c0`.`Property`, `c0`.`c` +FROM ( + SELECT ( + SELECT TOP 1 `o1`.`OrderDate` + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID` + ORDER BY `o1`.`OrderID` DESC) AS `Property`, ( + SELECT TOP 1 `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID` + ORDER BY `o0`.`OrderID` DESC) AS `c` + FROM `Customers` AS `c` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 1 +) AS `c0` +ORDER BY `c0`.`c` +"""); + } + + public override async Task Include_with_orderby_skip_preserves_ordering(bool isAsync) + { + await base.Include_with_orderby_skip_preserves_ordering(isAsync); + + AssertSql( + """ +@p1='5' +@p='40' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` NOT IN ('VAFFE', 'DRACD') + ORDER BY `c`.`City`, `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`City` DESC, `c0`.`CustomerID` DESC +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c1`.`City`, `c1`.`CustomerID` +"""); + } + + public override async Task Int16_parameter_can_be_used_for_int_column(bool isAsync) + { + await base.Int16_parameter_can_be_used_for_int_column(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10300 + """); + } + + public override async Task Subquery_is_null_translated_correctly(bool isAsync) + { + await base.Subquery_is_null_translated_correctly(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE ( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` DESC) IS NULL + """); + } + + public override async Task Subquery_is_not_null_translated_correctly(bool isAsync) + { + await base.Subquery_is_not_null_translated_correctly(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE ( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` DESC) IS NOT NULL + """); + } + + public override async Task Select_take_average(bool isAsync) + { + await base.Select_take_average(isAsync); + + AssertSql( + """ +@p='10' + +SELECT AVG(CDBL(`o0`.`OrderID`)) +FROM ( + SELECT TOP @p `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +"""); + } + + public override async Task Select_take_count(bool isAsync) + { + await base.Select_take_count(isAsync); + + AssertSql( + """ +@p='7' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM `Customers` AS `c` +) AS `c0` +"""); + } + + public override async Task Select_orderBy_take_count(bool isAsync) + { + await base.Select_orderBy_take_count(isAsync); + + AssertSql( + """ +@p='7' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM `Customers` AS `c` + ORDER BY `c`.`Country` +) AS `c0` +"""); + } + + public override async Task Select_take_long_count(bool isAsync) + { + await base.Select_take_long_count(isAsync); + + AssertSql( + """ +@p='7' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM `Customers` AS `c` +) AS `c0` +"""); + } + + public override async Task Select_orderBy_take_long_count(bool isAsync) + { + await base.Select_orderBy_take_long_count(isAsync); + + AssertSql( + """ +@p='7' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM `Customers` AS `c` + ORDER BY `c`.`Country` +) AS `c0` +"""); + } + + public override async Task Select_take_max(bool isAsync) + { + await base.Select_take_max(isAsync); + + AssertSql( + """ +@p='10' + +SELECT MAX(`o0`.`OrderID`) +FROM ( + SELECT TOP @p `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +"""); + } + + public override async Task Select_take_min(bool isAsync) + { + await base.Select_take_min(isAsync); + + AssertSql( + """ +@p='10' + +SELECT MIN(`o0`.`OrderID`) +FROM ( + SELECT TOP @p `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +"""); + } + + public override async Task Select_take_sum(bool isAsync) + { + await base.Select_take_sum(isAsync); + + AssertSql( + """ +@p='10' + +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) +FROM ( + SELECT TOP @p `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +"""); + } + + public override async Task Select_skip_average(bool isAsync) + { + await base.Select_skip_average(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + SELECT AVG(IIF(`t`.`OrderID` IS NULL, NULL, CDBL(`t`.`OrderID`))) + FROM ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + """); + } + + public override async Task Select_skip_count(bool isAsync) + { + await base.Select_skip_count(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='7'")} + + SELECT COUNT(*) + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY (SELECT 1) + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + """); + } + + public override async Task Select_orderBy_skip_count(bool isAsync) + { + await base.Select_orderBy_skip_count(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='7'")} + + SELECT COUNT(*) + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`Country` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + """); + } + + public override async Task Select_skip_long_count(bool isAsync) + { + await base.Select_skip_long_count(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='7'")} + + SELECT COUNT_BIG(*) + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY (SELECT 1) + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + """); + } + + public override async Task Select_orderBy_skip_long_count(bool isAsync) + { + await base.Select_orderBy_skip_long_count(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='7'")} + + SELECT COUNT_BIG(*) + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`Country` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + """); + } + + public override async Task Select_skip_max(bool isAsync) + { + await base.Select_skip_max(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + SELECT MAX(`t`.`OrderID`) + FROM ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + """); + } + + public override async Task Select_skip_min(bool isAsync) + { + await base.Select_skip_min(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + SELECT MIN(`t`.`OrderID`) + FROM ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + """); + } + + public override async Task Select_skip_sum(bool isAsync) + { + await base.Select_skip_sum(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='10'")} + + SELECT SUM(`t`.`OrderID`) + FROM ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + """); + } + + public override async Task Select_distinct_average(bool isAsync) + { + await base.Select_distinct_average(isAsync); + + AssertSql( + """ +SELECT AVG(CDBL(`o0`.`OrderID`)) +FROM ( + SELECT DISTINCT `o`.`OrderID` + FROM `Orders` AS `o` +) AS `o0` +"""); + } + + public override async Task Select_distinct_count(bool isAsync) + { + await base.Select_distinct_count(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +"""); + } + + public override async Task Select_distinct_long_count(bool isAsync) + { + await base.Select_distinct_long_count(isAsync); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +"""); + } + + public override async Task Select_distinct_max(bool isAsync) + { + await base.Select_distinct_max(isAsync); + + AssertSql( + """ +SELECT MAX(`o`.`OrderID`) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_distinct_min(bool isAsync) + { + await base.Select_distinct_min(isAsync); + + AssertSql( + """ +SELECT MIN(`o`.`OrderID`) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_distinct_sum(bool isAsync) + { + await base.Select_distinct_sum(isAsync); + + AssertSql( + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) +FROM ( + SELECT DISTINCT `o`.`OrderID` + FROM `Orders` AS `o` +) AS `o0` +"""); + } + + public override async Task Comparing_to_fixed_string_parameter(bool isAsync) + { + await base.Comparing_to_fixed_string_parameter(isAsync); + + AssertSql( + """ +@prefix_startswith='A%' (Size = 5) + +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE @prefix_startswith +"""); + } + + public override async Task Comparing_entities_using_Equals(bool isAsync) + { + await base.Comparing_entities_using_Equals(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID` AS `Id1`, `c0`.`CustomerID` AS `Id2` +FROM `Customers` AS `c`, +`Customers` AS `c0` +WHERE (`c`.`CustomerID` LIKE 'ALFKI%') AND `c`.`CustomerID` = `c0`.`CustomerID` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Comparing_different_entity_types_using_Equals(bool isAsync) + { + await base.Comparing_different_entity_types_using_Equals(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c`, +`Orders` AS `o` +WHERE FALSE +"""); + } + + public override async Task Comparing_entity_to_null_using_Equals(bool isAsync) + { + await base.Comparing_entity_to_null_using_Equals(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + """); + } + + [ConditionalTheory(Skip = "Can be supported after rearranging CROSS JOIN/JOIN expressions.")] + public override async Task Comparing_navigations_using_Equals(bool isAsync) + { + await base.Comparing_navigations_using_Equals(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID` AS `Id1`, `o0`.`OrderID` AS `Id2` + FROM `Orders` AS `o`, + `Orders` AS `o0` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + WHERE (`o`.`CustomerID` IS NOT NULL AND (`o`.`CustomerID` LIKE 'A' & '%')) AND ((`c`.`CustomerID` = `c0`.`CustomerID`) OR (`c`.`CustomerID` IS NULL AND `c0`.`CustomerID` IS NULL)) + ORDER BY `o`.`OrderID`, `o0`.`OrderID` + """); + } + + public override async Task Comparing_navigations_using_static_Equals(bool isAsync) + { + await base.Comparing_navigations_using_static_Equals(isAsync); + + AssertSql( + """ +SELECT `s`.`OrderID` AS `Id1`, `s`.`OrderID0` AS `Id2` +FROM (( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID` AS `CustomerID0` + FROM `Orders` AS `o`, + `Orders` AS `o0` + WHERE `o`.`CustomerID` LIKE 'A%' +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +WHERE `c`.`CustomerID` = `c0`.`CustomerID` OR (`c`.`CustomerID` IS NULL AND `c0`.`CustomerID` IS NULL) +ORDER BY `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Comparing_non_matching_entities_using_Equals(bool isAsync) + { + await base.Comparing_non_matching_entities_using_Equals(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID` AS `Id1`, `o`.`OrderID` AS `Id2` +FROM `Customers` AS `c`, +`Orders` AS `o` +WHERE FALSE +"""); + } + + public override async Task Comparing_non_matching_collection_navigations_using_Equals(bool isAsync) + { + await base.Comparing_non_matching_collection_navigations_using_Equals(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID` AS `Id1`, `o`.`OrderID` AS `Id2` +FROM `Customers` AS `c`, +`Orders` AS `o` +WHERE FALSE +"""); + } + + public override async Task Comparing_collection_navigation_to_null(bool isAsync) + { + await base.Comparing_collection_navigation_to_null(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `c`.`CustomerID` + //FROM `Customers` AS `c` + //WHERE `c`.`CustomerID` IS NULL"); + } + + public override async Task Comparing_collection_navigation_to_null_complex(bool isAsync) + { + await base.Comparing_collection_navigation_to_null_complex(isAsync); + + AssertSql( +""" +SELECT `o`.`ProductID`, `o`.`OrderID` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` < 10250 AND `c`.`CustomerID` IS NOT NULL +ORDER BY `o`.`OrderID`, `o`.`ProductID` +"""); + } + + public override async Task Compare_collection_navigation_with_itself(bool isAsync) + { + await base.Compare_collection_navigation_with_itself(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + """); + } + + public override async Task Compare_two_collection_navigations_with_different_query_sources(bool isAsync) + { + await base.Compare_two_collection_navigations_with_different_query_sources(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `Id1`, `c0`.`CustomerID` AS `Id2` + FROM `Customers` AS `c`, + `Customers` AS `c0` + WHERE `c`.`CustomerID` = 'ALFKI' AND `c0`.`CustomerID` = 'ALFKI' AND `c`.`CustomerID` = `c0`.`CustomerID` + """); + } + + public override async Task Compare_two_collection_navigations_using_equals(bool isAsync) + { + await base.Compare_two_collection_navigations_using_equals(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `Id1`, `c0`.`CustomerID` AS `Id2` + FROM `Customers` AS `c`, + `Customers` AS `c0` + WHERE `c`.`CustomerID` = 'ALFKI' AND `c0`.`CustomerID` = 'ALFKI' AND `c`.`CustomerID` = `c0`.`CustomerID` + """); + } + + public override async Task Compare_two_collection_navigations_with_different_property_chains(bool isAsync) + { + await base.Compare_two_collection_navigations_with_different_property_chains(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `c`.`CustomerID` AS `Id1`, `o`.`OrderID` AS `Id2` + //FROM `Customers` AS `c` + //CROSS JOIN `Orders` AS `o` + //LEFT JOIN `Customers` AS [join.Customer] ON `o`.`CustomerID` = [join.Customer].`CustomerID` + //WHERE (`c`.`CustomerID` = 'ALFKI') AND (`c`.`CustomerID` = [join.Customer].`CustomerID`) + //ORDER BY `Id1`, `Id2`"); + } + + public override async Task OrderBy_ThenBy_same_column_different_direction(bool isAsync) + { + await base.OrderBy_ThenBy_same_column_different_direction(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task OrderBy_OrderBy_same_column_different_direction(bool isAsync) + { + await base.OrderBy_OrderBy_same_column_different_direction(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` DESC + """); + } + + public override async Task Complex_nested_query_doesnt_try_binding_to_grandparent_when_parent_returns_complex_result(bool isAsync) + { + await base.Complex_nested_query_doesnt_try_binding_to_grandparent_when_parent_returns_complex_result(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `t`.`c`, `t`.`CustomerID`, `t`.`OrderID` + FROM `Customers` AS `c` + OUTER APPLY ( + SELECT ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `c`, `c`.`CustomerID`, `o0`.`OrderID` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID` + ) AS `t` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID`, `t`.`OrderID` + """); + } + + public override async Task Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(bool isAsync) + { + await base.Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) > 0) AS `OuterOrders` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task OrderBy_Dto_projection_skip_take(bool isAsync) + { + await base.OrderBy_Dto_projection_skip_take(isAsync); + + AssertSql( + """ +@p1='10' +@p='5' + +SELECT `c1`.`Id` +FROM ( + SELECT TOP @p1 `c0`.`Id` + FROM ( + SELECT TOP @p + @p1 `c`.`CustomerID` AS `Id` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`Id` DESC +) AS `c1` +ORDER BY `c1`.`Id` +"""); + } + + public override async Task Join_take_count_works(bool isAsync) + { + await base.Join_take_count_works(isAsync); + + AssertSql( + """ +@p='5' + +SELECT COUNT(*) +FROM ( + SELECT TOP @p 1 + FROM `Orders` AS `o` + INNER JOIN ( + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ) AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` + WHERE `o`.`OrderID` > 690 AND `o`.`OrderID` < 710 +) AS `s` +"""); + } + + public override async Task OrderBy_empty_list_contains(bool isAsync) + { + await base.OrderBy_empty_list_contains(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task OrderBy_empty_list_does_not_contains(bool isAsync) + { + await base.OrderBy_empty_list_does_not_contains(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Manual_expression_tree_typed_null_equality(bool isAsync) + { + await base.Manual_expression_tree_typed_null_equality(isAsync); + + AssertSql( + $""" + SELECT `c`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` < 10300 + """); + } + + public override async Task Let_subquery_with_multiple_occurrences(bool isAsync) + { + await base.Let_subquery_with_multiple_occurrences(isAsync); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o1` + WHERE `o`.`OrderID` = `o1`.`OrderID` AND `o1`.`Quantity` < CINT(10)) AS `Count` +FROM `Orders` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND `o0`.`Quantity` < CINT(10)) +"""); + } + + public override async Task Let_entity_equality_to_null(bool isAsync) + { + await base.Let_entity_equality_to_null(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID` + ORDER BY `o0`.`OrderDate`) AS `OrderDate` +FROM `Customers` AS `c` +WHERE (`c`.`CustomerID` LIKE 'A%') AND EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task Let_entity_equality_to_other_entity(bool isAsync) + { + await base.Let_entity_equality_to_other_entity(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID` + ORDER BY `o0`.`OrderDate`) AS `A` +FROM `Customers` AS `c` +WHERE (`c`.`CustomerID` LIKE 'A%') AND (( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate`) <> 0 OR ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate`) IS NULL) +"""); + } + + public override async Task Collection_navigation_equal_to_null_for_subquery(bool isAsync) + { + await base.Collection_navigation_equal_to_null_for_subquery(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task Dependent_to_principal_navigation_equal_to_null_for_subquery(bool isAsync) + { + await base.Dependent_to_principal_navigation_equal_to_null_for_subquery(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE ( + SELECT TOP 1 `c0`.`CustomerID` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) IS NULL + """); + } + + public override async Task Collection_navigation_equality_rewrite_for_subquery(bool isAsync) + { + await base.Collection_navigation_equality_rewrite_for_subquery(isAsync); + + // issue #15994 + // AssertSql( + // $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + //FROM `Customers` AS `c` + //WHERE `c`.`CustomerID` LIKE 'A' & '%' AND (( + // SELECT TOP 1 `o`.`OrderID` + // FROM `Orders` AS `o` + // WHERE `o`.`OrderID` < 10300 + // ORDER BY `o`.`OrderID` + //) = ( + // SELECT TOP 1 `o0`.`OrderID` + // FROM `Orders` AS `o0` + // WHERE `o0`.`OrderID` > 10500 + // ORDER BY `o0`.`OrderID` + //))"); + } + + public override async Task Inner_parameter_in_nested_lambdas_gets_preserved(bool isAsync) + { + await base.Inner_parameter_in_nested_lambdas_gets_preserved(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 0 +"""); + } + + public override async Task Convert_to_nullable_on_nullable_value_is_ignored(bool isAsync) + { + await base.Convert_to_nullable_on_nullable_value_is_ignored(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderDate` + FROM `Orders` AS `o` + """); + } + + public override async Task Navigation_inside_interpolated_string_is_expanded(bool isAsync) + { + await base.Navigation_inside_interpolated_string_is_expanded(isAsync); + + AssertSql( + $""" + SELECT `c`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + """); + } + + public override async Task OrderBy_object_type_server_evals(bool isAsync) + { + await base.OrderBy_object_type_server_evals(isAsync); + + AssertSql( + """ +@p1='20' +@p='0' + +SELECT `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate` +FROM ( + SELECT TOP @p1 `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`City` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ORDER BY `o`.`OrderID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`City` + ) AS `s` + ORDER BY `s`.`OrderID` DESC, `s`.`OrderDate` DESC, `s`.`CustomerID0` DESC, `s`.`City` DESC +) AS `s0` +ORDER BY `s0`.`OrderID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`City` +"""); + } + + public override async Task AsQueryable_in_query_server_evals(bool isAsync) + { + await base.AsQueryable_in_query_server_evals(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `t`.`OrderDate`, `t`.`OrderID` + FROM `Customers` AS `c` + OUTER APPLY ( + SELECT TOP 1 `o`.`OrderDate`, `o`.`OrderID` + FROM `Orders` AS `o` + WHERE (`c`.`CustomerID` = `o`.`CustomerID`) AND (DATEPART('yyyy', `o`.`OrderDate`) = 1998) + ORDER BY `o`.`OrderID` + ) AS `t` + ORDER BY `c`.`CustomerID`, `t`.`OrderID` + """); + } + + public override async Task Subquery_DefaultIfEmpty_Any(bool async) + { + await base.Subquery_DefaultIfEmpty_Any(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) + ) AS `e0` + LEFT JOIN ( + SELECT 1 + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = -1 + ) AS `e1` ON TRUE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Projection_skip_collection_projection(bool async) + { + await base.Projection_skip_collection_projection(async); + + AssertSql( + """ +@__p_0='5' + +SELECT [t].[OrderID], [o0].[ProductID], [o0].[OrderID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10300 + ORDER BY [o].[OrderID] + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Order Details] AS [o0] ON [t].[OrderID] = [o0].[OrderID] +ORDER BY [t].[OrderID], [o0].[OrderID] +"""); + } + + public override async Task Projection_take_collection_projection(bool async) + { + await base.Projection_take_collection_projection(async); + + AssertSql( + """ +@p='10' + +SELECT `o1`.`OrderID`, `o0`.`ProductID`, `o0`.`OrderID` +FROM ( + SELECT TOP @p `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + ORDER BY `o`.`OrderID` +) AS `o1` +LEFT JOIN `Order Details` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Projection_skip_take_collection_projection(bool async) + { + await base.Projection_skip_take_collection_projection(async); + + AssertSql( + """ +@p1='10' +@p='5' + +SELECT `o2`.`OrderID`, `o0`.`ProductID`, `o0`.`OrderID` +FROM ( + SELECT TOP @p1 `o1`.`OrderID` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + ORDER BY `o`.`OrderID` + ) AS `o1` + ORDER BY `o1`.`OrderID` DESC +) AS `o2` +LEFT JOIN `Order Details` AS `o0` ON `o2`.`OrderID` = `o0`.`OrderID` +ORDER BY `o2`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Projection_skip_projection(bool async) + { + await base.Projection_skip_projection(async); + + AssertSql( + """ +@__p_0='5' + +SELECT [c].[City] +FROM ( + SELECT [o].[OrderID], [o].[CustomerID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10300 + ORDER BY [o].[OrderID] + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Customers] AS [c] ON [t].[CustomerID] = [c].[CustomerID] +ORDER BY [t].[OrderID] +"""); + } + + public override async Task Projection_take_projection(bool async) + { + await base.Projection_take_projection(async); + + AssertSql( + """ +@p='10' + +SELECT `c`.`City` +FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + ORDER BY `o`.`OrderID` +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +ORDER BY `o0`.`OrderID` +"""); + } + + public override async Task Projection_skip_take_projection(bool async) + { + await base.Projection_skip_take_projection(async); + + AssertSql( + """ +@p1='10' +@p='5' + +SELECT `c`.`City` +FROM ( + SELECT TOP @p1 `o1`.`OrderID`, `o1`.`CustomerID` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + ORDER BY `o`.`OrderID` + ) AS `o1` + ORDER BY `o1`.`OrderID` DESC +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +ORDER BY `o0`.`OrderID` +"""); + } + + public override async Task Collection_projection_skip(bool async) + { + await base.Collection_projection_skip(async); + + AssertSql( + """ +@__p_0='5' + +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] +FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10300 + ORDER BY [o].[OrderID] + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Order Details] AS [o0] ON [t].[OrderID] = [o0].[OrderID] +ORDER BY [t].[OrderID], [o0].[OrderID] +"""); + } + + public override async Task Collection_projection_take(bool async) + { + await base.Collection_projection_take(async); + + AssertSql( + """ +@p='10' + +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + ORDER BY `o`.`OrderID` +) AS `o1` +LEFT JOIN `Order Details` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Collection_projection_skip_take(bool async) + { + await base.Collection_projection_skip_take(async); + + AssertSql( + """ +@p1='10' +@p='5' + +SELECT `o2`.`OrderID`, `o2`.`CustomerID`, `o2`.`EmployeeID`, `o2`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p1 `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + ORDER BY `o`.`OrderID` + ) AS `o1` + ORDER BY `o1`.`OrderID` DESC +) AS `o2` +LEFT JOIN `Order Details` AS `o0` ON `o2`.`OrderID` = `o0`.`OrderID` +ORDER BY `o2`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Anonymous_projection_skip_empty_collection_FirstOrDefault(bool async) + { + await base.Anonymous_projection_skip_empty_collection_FirstOrDefault(async); + + AssertSql( + """ +@__p_0='0' + +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] +FROM ( + SELECT [c].[CustomerID] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] = N'FISSA' + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderID]) AS [row] + FROM [Orders] AS [o] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[CustomerID] = [t0].[CustomerID] +"""); + } + + public override async Task Anonymous_projection_take_empty_collection_FirstOrDefault(bool async) + { + await base.Anonymous_projection_take_empty_collection_FirstOrDefault(async); + + AssertSql( + """ +@__p_0='1' + +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] +FROM ( + SELECT TOP(@__p_0) [c].[CustomerID] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] = N'FISSA' +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderID]) AS [row] + FROM [Orders] AS [o] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[CustomerID] = [t0].[CustomerID] +"""); + } + + public override async Task Anonymous_projection_skip_take_empty_collection_FirstOrDefault(bool async) + { + await base.Anonymous_projection_skip_take_empty_collection_FirstOrDefault(async); + + AssertSql( + """ +@__p_0='0' +@__p_1='1' + +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] +FROM ( + SELECT [c].[CustomerID] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] = N'FISSA' + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderID]) AS [row] + FROM [Orders] AS [o] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[CustomerID] = [t0].[CustomerID] +"""); + } + + public override async Task Checked_context_with_arithmetic_does_not_fail(bool isAsync) + { + await base.Checked_context_with_arithmetic_does_not_fail(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE (`o`.`Quantity` + CINT(1)) = CINT(5) AND (`o`.`Quantity` - CINT(1)) = CINT(3) AND (`o`.`Quantity` * CINT(1)) = `o`.`Quantity` +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Checked_context_with_case_to_same_nullable_type_does_not_fail(bool isAsync) + { + await base.Checked_context_with_case_to_same_nullable_type_does_not_fail(isAsync); + + AssertSql( + """ +SELECT MAX(`o`.`Quantity`) +FROM `Order Details` AS `o` +"""); + } + + public override async Task Entity_equality_with_null_coalesce_client_side(bool async) + { + await base.Entity_equality_with_null_coalesce_client_side(async); + + AssertSql( + """ +@entity_equality_a_CustomerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @entity_equality_a_CustomerID +"""); + } + + public override async Task Entity_equality_contains_with_list_of_null(bool async) + { + await base.Entity_equality_contains_with_list_of_null(async); + + AssertSql( + """ +@entity_equality_customers_CustomerID1='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @entity_equality_customers_CustomerID1 +"""); + } + + public override async Task MemberInitExpression_NewExpression_is_funcletized_even_when_bindings_are_not_evaluatable(bool async) + { + await base.MemberInitExpression_NewExpression_is_funcletized_even_when_bindings_are_not_evaluatable(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Funcletize_conditional_with_evaluatable_test(bool async) + { + await base.Funcletize_conditional_with_evaluatable_test(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Projecting_collection_split(bool async) + { + await base.Projecting_collection_split(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Projecting_collection_then_include_split(bool async) + { + await base.Projecting_collection_then_include_split(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`c`.`CustomerID` LIKE 'F%') AND (`o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL) +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Single_non_scalar_projection_after_skip_uses_join(bool async) + { + await base.Single_non_scalar_projection_after_skip_uses_join(async); + + AssertSql( + """ +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderDate], [o].[OrderID]) AS [row] + FROM [Orders] AS [o] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +"""); + } + + public override async Task Select_distinct_Select_with_client_bindings(bool async) + { + await base.Select_distinct_Select_with_client_bindings(async); + + AssertSql( + """ +SELECT `o0`.`c` +FROM ( + SELECT DISTINCT DATEPART('yyyy', `o`.`OrderDate`) AS `c` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 20000 +) AS `o0` +"""); + } + + public override async Task ToList_over_string(bool async) + { + await base.ToList_over_string(async); + + AssertSql( + """ +SELECT `c`.`City` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task ToArray_over_string(bool async) + { + await base.ToArray_over_string(async); + + AssertSql( + """ +SELECT `c`.`City` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task AsEnumerable_over_string(bool async) + { + await base.AsEnumerable_over_string(async); + + AssertSql( + """ +SELECT `c`.`City` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + [ConditionalTheory(Skip = "LibRed Fails")] + public override async Task Pending_selector_in_cardinality_reducing_method_is_applied_before_expanding_collection_navigation_member( + bool async) + { + await base.Pending_selector_in_cardinality_reducing_method_is_applied_before_expanding_collection_navigation_member(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE ( + SELECT TOP 1 `c0`.`CustomerID` + FROM `Orders` AS `o0` + LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + WHERE `c`.`CustomerID` = `o0`.`CustomerID` + ORDER BY `o0`.`OrderDate`) IS NOT NULL AND (( + SELECT TOP 1 `c1`.`CustomerID` + FROM `Orders` AS `o1` + LEFT JOIN `Customers` AS `c1` ON `o1`.`CustomerID` = `c1`.`CustomerID` + WHERE `c`.`CustomerID` = `o1`.`CustomerID` + ORDER BY `o1`.`OrderDate`) = `o`.`CustomerID` OR (( + SELECT TOP 1 `c1`.`CustomerID` + FROM `Orders` AS `o1` + LEFT JOIN `Customers` AS `c1` ON `o1`.`CustomerID` = `c1`.`CustomerID` + WHERE `c`.`CustomerID` = `o1`.`CustomerID` + ORDER BY `o1`.`OrderDate`) IS NULL AND `o`.`CustomerID` IS NULL)) AND `o`.`OrderID` < 11000) AS `Complex` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Distinct_followed_by_ordering_on_condition(bool async) + { + await base.Distinct_followed_by_ordering_on_condition(async); + + AssertSql( + """ +@p='5' +@searchTerm='c' (Size = 15) + +SELECT TOP @p `c0`.`City` +FROM ( + SELECT DISTINCT `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` NOT IN ('VAFFE', 'DRACD') +) AS `c0` +ORDER BY INSTR(1, `c0`.`City`, @searchTerm, 1) - IIF(@searchTerm = '', 0, 1), `c0`.`City` +"""); + } + + public override async Task DefaultIfEmpty_Sum_over_collection_navigation(bool async) + { + await base.DefaultIfEmpty_Sum_over_collection_navigation(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, ( + SELECT IIF(SUM(IIF(`o0`.`OrderID` IS NULL, 0, `o0`.`OrderID`)) IS NULL, 0, SUM(IIF(`o0`.`OrderID` IS NULL, 0, `o0`.`OrderID`))) + FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) + ) AS `e` + LEFT JOIN ( + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ) AS `o0` ON TRUE) AS `Sum` +FROM `Customers` AS `c` +"""); + } + + public override async Task Entity_equality_on_subquery_with_null_check(bool async) + { + await base.Entity_equality_on_subquery_with_null_check(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) OR NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`), ( + SELECT TOP 1 `o1`.`OrderDate` + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID` + ORDER BY `o1`.`OrderID`) +FROM `Customers` AS `c` +"""); + } + + public override async Task DefaultIfEmpty_over_empty_collection_followed_by_projecting_constant(bool async) + { + await base.DefaultIfEmpty_over_empty_collection_followed_by_projecting_constant(async); + + AssertSql( + """ +SELECT TOP 1 '520' +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT 1 + FROM `Customers` AS `c` + WHERE FALSE +) AS `c0` ON TRUE +"""); + } + + public override async Task FirstOrDefault_with_predicate_nested(bool async) + { + await base.FirstOrDefault_with_predicate_nested(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `OrderDate` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task First_on_collection_in_projection(bool async) + { + await base.First_on_collection_in_projection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, IIF(EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`), ( + SELECT TOP 1 `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`), NULL) AS `OrderDate` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task SelectMany_correlated_subquery_hard(bool async) + { + await base.SelectMany_correlated_subquery_hard(async); + + AssertSql( + """ +@__p_0='91' + +SELECT [t0].[City] AS [c1], [t1].[City], [t1].[c1] +FROM ( + SELECT DISTINCT [t].[City] + FROM ( + SELECT TOP(@__p_0) [c].[City] + FROM [Customers] AS [c] + ) AS [t] +) AS [t0] +CROSS APPLY ( + SELECT TOP(9) [e].[City], [t0].[City] AS [c1] + FROM [Employees] AS [e] + WHERE [t0].[City] = [e].[City] OR ([t0].[City] IS NULL AND [e].[City] IS NULL) +) AS [t1] +CROSS APPLY ( + SELECT TOP(9) [t0].[City], [e0].[EmployeeID] + FROM [Employees] AS [e0] + WHERE [t1].[City] = [e0].[City] OR ([t1].[City] IS NULL AND [e0].[City] IS NULL) +) AS [t2] +"""); + } + + public override async Task Skip_0_Take_0_works_when_parameter(bool async) + { + await base.Skip_0_Take_0_works_when_parameter(async); + + AssertSql( + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE FALSE + ) AS `c0` + WHERE FALSE +) AS `c1` +ORDER BY `c1`.`CustomerID` +""", + // + """ +@p='1' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +ORDER BY `c1`.`CustomerID` +"""); + } + + public override async Task Skip_0_Take_0_works_when_constant(bool async) + { + await base.Skip_0_Take_0_works_when_constant(async); + + AssertSql( + """ +SELECT FALSE +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Skip_1_Take_0_works_when_constant(bool async) + { + await base.Skip_1_Take_0_works_when_constant(async); + + AssertSql( + """ +SELECT FALSE +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Take_0_works_when_constant(bool async) + { + await base.Take_0_works_when_constant(async); + + AssertSql( + """ +SELECT FALSE +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + [ConditionalFact] + public async Task Single_Predicate_Cancellation() + => await Assert.ThrowsAnyAsync( + async () => + await Single_Predicate_Cancellation_test(Fixture.TestSqlLoggerFactory.CancelQuery())); +#nullable disable + [ConditionalFact] + public Task Query_compiler_concurrency() + { + const int threadCount = 50; + + var tasks = new Task[threadCount]; + + for (var i = 0; i < threadCount; i++) + { + tasks[i] = Task.Run( + () => + { + using var context = CreateContext(); + using ((from c in context.Customers + where c.City == "London" + orderby c.CustomerID + select (from o1 in context.Orders + where o1.CustomerID == c.CustomerID + && o1.OrderDate.Value.Year == 1997 + orderby o1.OrderID + select (from o2 in context.Orders + where o1.CustomerID == c.CustomerID + orderby o2.OrderID + select o1.OrderID).ToList()).ToList()) + .GetEnumerator()) + { + } + }); + } + + return Task.WhenAll(tasks); + } +#nullable enable + + [ConditionalFact] + public Task Race_when_context_disposed_before_query_termination() + { + DbSet task; + + using (var context = CreateContext()) + { + task = context.Customers; + } + + return Assert.ThrowsAsync(() => task.SingleAsync(c => c.CustomerID == "ALFKI")); + } + + [ConditionalFact] + public async Task Concurrent_async_queries_are_serialized2() + { + using var context = CreateContext(); + await context.OrderDetails + .Where(od => od.OrderID > 0) + .Intersect( + context.OrderDetails + .Where(od => od.OrderID > 0)) + .Intersect( + context.OrderDetails + .Where(od => od.OrderID > 0)).ToListAsync(); + } + + [ConditionalFact(Skip = "LibRed fails")] + public async Task Concurrent_async_queries_when_raw_query() + { + using var context = CreateContext(); + await using var asyncEnumerator = context.Customers.AsAsyncEnumerable().GetAsyncEnumerator(); + while (await asyncEnumerator.MoveNextAsync()) + { + // Outer query is buffered by default + await context.Database.ExecuteSqlRawAsync( + "EXEC CustOrderHist CustomerID = {0}", + asyncEnumerator.Current.CustomerID); + } + } + + public override async Task Correlated_collection_with_distinct_without_default_identifiers_projecting_columns(bool async) + { + await base.Correlated_collection_with_distinct_without_default_identifiers_projecting_columns(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [t].[First], [t].[Second] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT DISTINCT [o].[OrderID] AS [First], [o].[OrderDate] AS [Second] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] +) AS [t] +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task Correlated_collection_with_distinct_without_default_identifiers_projecting_columns_with_navigation( + bool async) + { + await base.Correlated_collection_with_distinct_without_default_identifiers_projecting_columns_with_navigation(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [t].[First], [t].[Second], [t].[Third] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT DISTINCT [o].[OrderID] AS [First], [o].[OrderDate] AS [Second], [c0].[City] AS [Third] + FROM [Orders] AS [o] + LEFT JOIN [Customers] AS [c0] ON [o].[CustomerID] = [c0].[CustomerID] + WHERE [c].[CustomerID] = [o].[CustomerID] +) AS [t] +ORDER BY [c].[CustomerID], [t].[First], [t].[Second] +"""); + } + + public override async Task Select_nested_collection_with_distinct(bool async) + { + await base.Select_nested_collection_with_distinct(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`), `c`.`CustomerID`, `o1`.`CustomerID` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT DISTINCT `o0`.`CustomerID` + FROM `Orders` AS `o0` +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task SelectMany_primitive_select_subquery(bool async) + { + await base.SelectMany_primitive_select_subquery(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Employees` AS `e`) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +@Any='True' + +SELECT CBOOL(@Any) +FROM `Employees` AS `e`, +`Employees` AS `e0` +"""); + } + + public override async Task Throws_on_concurrent_query_first(bool async) + { + await base.Throws_on_concurrent_query_first(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Non_nullable_property_through_optional_navigation(bool async) + { + await base.Non_nullable_property_through_optional_navigation(async); + + AssertSql( + """ +SELECT IIF(LEN(`c`.`Region`) IS NULL, NULL, CLNG(LEN(`c`.`Region`))) AS `Length` +FROM `Customers` AS `c` +"""); + } + + public override async Task OrderByDescending(bool async) + { + await base.OrderByDescending(async); + + AssertSql( + """ +SELECT `c`.`City` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` DESC +"""); + } + + public override async Task Take_Distinct(bool async) + { + await base.Take_Distinct(async); + + AssertSql( + """ +@p='5' + +SELECT DISTINCT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +"""); + } + + public override async Task Perform_identity_resolution_reuses_same_instances(bool async, bool useAsTracking) + { + await base.Perform_identity_resolution_reuses_same_instances(async, useAsTracking); + + AssertSql( + """ +SELECT `o`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +@orderIds1='10643' +@orderIds2='10692' +@orderIds3='10702' +@orderIds4='10835' +@orderIds5='10952' +@orderIds6='11011' +@orderIds7='11011' +@orderIds8='11011' +@orderIds9='11011' +@orderIds10='11011' + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` IN (@orderIds1, @orderIds2, @orderIds3, @orderIds4, @orderIds5, @orderIds6, @orderIds7, @orderIds8, @orderIds9, @orderIds10) +"""); + } + + public override async Task Context_based_client_method(bool async) + { + await base.Context_based_client_method(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_nested_collection_in_anonymous_type(bool async) + { + await base.Select_nested_collection_in_anonymous_type(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o0`.`OrderID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE DATEPART('yyyy', `o`.`OrderDate`) = 1997 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task OrderBy_Select(bool async) + { + await base.OrderBy_Select(async); + + AssertSql( + """ +SELECT `c`.`ContactName` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task OrderBy_ThenBy_predicate(bool async) + { + await base.OrderBy_ThenBy_predicate(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'London' +ORDER BY `c`.`City`, `c`.`CustomerID` +"""); + } + + public override async Task Query_when_evaluatable_queryable_method_call_with_repository(bool async) + { + await base.Query_when_evaluatable_queryable_method_call_with_repository(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) +"""); + } + + public override async Task Max_on_empty_sequence_throws(bool async) + { + await Assert.ThrowsAsync(() => base.Max_on_empty_sequence_throws(async)); + + AssertSql( + """ +SELECT ( + SELECT MAX(`o`.`OrderID`) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Max` +FROM `Customers` AS `c` +"""); + } + + public override async Task OrderBy_Join(bool async) + { + await base.OrderBy_Join(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Where_Property_shadow_closure(bool async) + { + await base.Where_Property_shadow_closure(async); + + AssertSql( + """ +@value='Sales Representative' (Size = 30) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`Title` = @value +""", + // + """ +@value='Steven' (Size = 10) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`FirstName` = @value +"""); + } + + public override async Task SelectMany_customer_orders(bool async) + { + await base.SelectMany_customer_orders(async); + + AssertSql( + """ +SELECT `c`.`ContactName`, `o`.`OrderID` +FROM `Customers` AS `c`, +`Orders` AS `o` +WHERE `c`.`CustomerID` = `o`.`CustomerID` +"""); + } + + public override async Task Throws_on_concurrent_query_list(bool async) + { + await base.Throws_on_concurrent_query_list(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_Property_when_shadow(bool async) + { + await base.Select_Property_when_shadow(async); + + AssertSql( + """ +SELECT `e`.`Title` +FROM `Employees` AS `e` +"""); + } + + public override async Task Select_Property_when_non_shadow(bool async) + { + await base.Select_Property_when_non_shadow(async); + + AssertSql( + """ +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +"""); + } + + public override async Task OrderByDescending_ThenBy(bool async) + { + await base.OrderByDescending_ThenBy(async); + + AssertSql( + """ +SELECT `c`.`City` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` DESC, `c`.`Country` +"""); + } + + public override async Task SelectMany_correlated_subquery_simple(bool async) + { + await base.SelectMany_correlated_subquery_simple(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Customers` AS `c` +INNER JOIN `Employees` AS `e` ON `c`.`City` = `e`.`City` +ORDER BY `c`.`CustomerID`, `e`.`EmployeeID` +"""); + } + + public override async Task SelectMany_correlated_with_DefaultIfEmpty_and_Select_value_type_in_selector_throws(bool async) + { + await base.SelectMany_correlated_with_DefaultIfEmpty_and_Select_value_type_in_selector_throws(async); + + AssertSql( + """ +SELECT `o0`.`OrderID` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'NONEXISTENT' +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); + } + + public override async Task SelectMany_correlated_with_Select_value_type_and_DefaultIfEmpty_in_selector(bool async) + { + await base.SelectMany_correlated_with_Select_value_type_and_DefaultIfEmpty_in_selector(async); + + AssertSql( + """ +SELECT COALESCE([o0].[OrderID], 0) +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(2) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] AND [o].[CustomerID] = N'NONEXISTENT' +) AS [o0] +"""); + } + + public override async Task Select_Property_when_shadow_unconstrained_generic_method(bool async) + { + await base.Select_Property_when_shadow_unconstrained_generic_method(async); + + AssertSql( + """ +SELECT `e`.`Title` +FROM `Employees` AS `e` +"""); + } + + public override async Task Where_Property_when_shadow(bool async) + { + await base.Where_Property_when_shadow(async); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`Title` = 'Sales Representative' +"""); + } + + public override async Task Where_Property_when_shadow_unconstrained_generic_method(bool async) + { + await base.Where_Property_when_shadow_unconstrained_generic_method(async); + + AssertSql( + """ +@value='Sales Representative' (Size = 30) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`Title` = @value +"""); + } + + public override async Task Perform_identity_resolution_reuses_same_instances_across_joins(bool async, bool useAsTracking) + { + await base.Perform_identity_resolution_reuses_same_instances_across_joins(async, useAsTracking); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM (`Customers` AS `c` +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10500 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task OrderBy_scalar_primitive(bool async) + { + await base.OrderBy_scalar_primitive(async); + + AssertSql( + """ +SELECT `e`.`EmployeeID` +FROM `Employees` AS `e` +ORDER BY `e`.`EmployeeID` +"""); + } + + public override async Task Where_Property_when_non_shadow(bool async) + { + await base.Where_Property_when_non_shadow(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10248 +"""); + } + + public override async Task OrderByDescending_ThenByDescending(bool async) + { + await base.OrderByDescending_ThenByDescending(async); + + AssertSql( + """ +SELECT `c`.`City` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` DESC, `c`.`Country` DESC +"""); + } + + public override async Task Load_should_track_results(bool async) + { + await base.Load_should_track_results(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task SelectMany_nested_simple(bool async) + { + await base.SelectMany_nested_simple(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM `Customers` AS `c`, +`Customers` AS `c0` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Null_parameter_name_works(bool async) + { + await base.Null_parameter_name_works(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Where_subquery_expression(bool async) + { + await base.Where_subquery_expression(async); + + AssertSql( + """ +SELECT TOP 1 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +""", + // + """ +@firstOrder_OrderID='10248' + +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = @firstOrder_OrderID) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +@Any='True' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE @Any +"""); + } + + public override async Task Mixed_sync_async_in_query_cache() + { + await base.Mixed_sync_async_in_query_cache(); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_expression_datetime_add_ticks(bool async) + { + await base.Select_expression_datetime_add_ticks(async); + + AssertSql( + """ +SELECT `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderDate` IS NOT NULL +"""); + } + + public override async Task Where_subquery_expression_same_parametername(bool async) + { + await base.Where_subquery_expression_same_parametername(async); + + AssertSql( + """ +SELECT TOP 1 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +ORDER BY `o`.`OrderID` +""", + // + """ +@firstOrder_OrderID='10248' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + WHERE `o0`.`OrderID` = @firstOrder_OrderID AND (`o0`.`CustomerID` = `o`.`CustomerID` OR (`o0`.`CustomerID` IS NULL AND `o`.`CustomerID` IS NULL))) +"""); + } + + public override async Task Cast_results_to_object(bool async) + { + await base.Cast_results_to_object(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_subquery_recursive_trivial(bool async) + { + await base.Select_subquery_recursive_trivial(async); + + AssertSql( + """ +SELECT [e].[EmployeeID], [t].[EmployeeID], [t].[EmployeeID0], [t].[City], [t].[Country], [t].[FirstName], [t].[ReportsTo], [t].[Title] +FROM [Employees] AS [e] +OUTER APPLY ( + SELECT [e0].[EmployeeID], [e1].[EmployeeID] AS [EmployeeID0], [e1].[City], [e1].[Country], [e1].[FirstName], [e1].[ReportsTo], [e1].[Title] + FROM [Employees] AS [e0] + OUTER APPLY [Employees] AS [e1] +) AS [t] +ORDER BY [e].[EmployeeID], [t].[EmployeeID], [t].[EmployeeID0] +"""); + } + + public override async Task SelectMany_primitive(bool async) + { + await base.SelectMany_primitive(async); + + AssertSql( + """ +SELECT `e0`.`EmployeeID` +FROM `Employees` AS `e`, +`Employees` AS `e0` +"""); + } + + public override async Task SelectMany_Joined(bool async) + { + await base.SelectMany_Joined(async); + + AssertSql( + """ +SELECT `c`.`ContactName`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +"""); + } + + // ReSharper disable once RedundantOverriddenMember + public override async Task ToListAsync_can_be_canceled() + // May or may not generate SQL depending on when cancellation happens. + => await base.ToListAsync_can_be_canceled(); + + public override async Task OrderBy_ThenBy(bool async) + { + await base.OrderBy_ThenBy(async); + + AssertSql( + """ +SELECT `c`.`City` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID`, `c`.`Country` +"""); + } + + public override async Task Collection_projection_after_DefaultIfEmpty(bool async) + { + await base.Collection_projection_after_DefaultIfEmpty(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM (( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Seattle' +) AS `c0` ON TRUE) +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task SelectMany_correlated_simple(bool async) + { + await base.SelectMany_correlated_simple(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Customers` AS `c`, +`Employees` AS `e` +WHERE `c`.`City` = `e`.`City` OR (`c`.`City` IS NULL AND `e`.`City` IS NULL) +ORDER BY `c`.`CustomerID`, `e`.`EmployeeID` +"""); + } + + public override void Query_composition_against_ienumerable_set() + { + base.Query_composition_against_ienumerable_set(); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +"""); + } + + public override async Task Using_static_string_Equals_with_StringComparison_throws_informative_error(bool async) + { + await base.Using_static_string_Equals_with_StringComparison_throws_informative_error(async); + + AssertSql(); + } + + public override async Task Using_string_Equals_with_StringComparison_throws_informative_error(bool async) + { + await base.Using_string_Equals_with_StringComparison_throws_informative_error(async); + + AssertSql(); + } + + public override async Task SelectMany_after_client_method(bool async) + { + await base.SelectMany_after_client_method(async); + + AssertSql(); + } + + public override async Task Client_OrderBy_GroupBy_Group_ordering_works(bool async) + { + await base.Client_OrderBy_GroupBy_Group_ordering_works(async); + + AssertSql(); + } + + public override async Task Client_code_using_instance_method_throws(bool async) + { + Assert.Equal( + CoreStrings.ClientProjectionCapturingConstantInMethodInstance( + "EntityFrameworkCore.LibRed.FunctionalTests.Query.NorthwindMiscellaneousQueryLibRedTest", + "InstanceMethod"), + (await Assert.ThrowsAsync( + () => base.Client_code_using_instance_method_throws(async))).Message); + + AssertSql(); + } + + public override async Task Client_code_using_instance_in_static_method(bool async) + { + Assert.Equal( + CoreStrings.ClientProjectionCapturingConstantInMethodArgument( + "EntityFrameworkCore.LibRed.FunctionalTests.Query.NorthwindMiscellaneousQueryLibRedTest", + "StaticMethod"), + (await Assert.ThrowsAsync( + () => base.Client_code_using_instance_in_static_method(async))).Message); + + AssertSql(); + } + + public override async Task Client_code_using_instance_in_anonymous_type(bool async) + { + Assert.Equal( + CoreStrings.ClientProjectionCapturingConstantInTree( + "EntityFrameworkCore.LibRed.FunctionalTests.Query.NorthwindMiscellaneousQueryLibRedTest"), + (await Assert.ThrowsAsync( + () => base.Client_code_using_instance_in_anonymous_type(async))).Message); + + AssertSql(); + } + + public override async Task Client_code_unknown_method(bool async) + { + await AssertTranslationFailedWithDetails( + () => base.Client_code_unknown_method(async), + CoreStrings.QueryUnableToTranslateMethod( + "Microsoft.EntityFrameworkCore.Query.NorthwindMiscellaneousQueryTestBase>", + nameof(UnknownMethod))); + + AssertSql(); + } + + public override async Task String_include_on_incorrect_property_throws(bool async) + { + await base.String_include_on_incorrect_property_throws(async); + + AssertSql(); + } + + public override async Task SkipWhile_throws_meaningful_exception(bool async) + { + await base.SkipWhile_throws_meaningful_exception(async); + + AssertSql(); + } + + public override async Task ToListAsync_with_canceled_token() + { + await base.ToListAsync_with_canceled_token(); + + AssertSql(); + } + + public override async Task Mixed_sync_async_query() + { + await base.Mixed_sync_async_query(); + + AssertSql(); + } + + public override async Task Parameter_extraction_can_throw_exception_from_user_code(bool async) + { + await base.Parameter_extraction_can_throw_exception_from_user_code(async); + + AssertSql(); + } + + public override async Task Parameter_extraction_can_throw_exception_from_user_code_2(bool async) + { + await base.Parameter_extraction_can_throw_exception_from_user_code_2(async); + + AssertSql(); + } + + public override async Task Where_query_composition3(bool async) + { + await base.Where_query_composition3(async); + + AssertSql(); + } + + public override async Task Where_query_composition4(bool async) + { + await base.Where_query_composition4(async); + + AssertSql(); + } + + public override async Task Where_query_composition5(bool async) + { + await base.Where_query_composition5(async); + + AssertSql(); + } + + public override async Task Where_query_composition6(bool async) + { + await base.Where_query_composition6(async); + + AssertSql(); + } + + public override async Task SelectMany_mixed(bool async) + { + await base.SelectMany_mixed(async); + + AssertSql(); + } + + public override async Task DefaultIfEmpty_top_level_arg(bool async) + { + await base.DefaultIfEmpty_top_level_arg(async); + + AssertSql(); + } + + public override async Task DefaultIfEmpty_top_level_arg_followed_by_projecting_constant(bool async) + { + await base.DefaultIfEmpty_top_level_arg_followed_by_projecting_constant(async); + + AssertSql(); + } + + public override async Task OrderBy_client_mixed(bool async) + { + await base.OrderBy_client_mixed(async); + + AssertSql(); + } + + public override async Task OrderBy_multiple_queries(bool async) + { + await base.OrderBy_multiple_queries(async); + + AssertSql(); + } + + public override void Can_cast_CreateQuery_result_to_IQueryable_T_bug_1730() + { + base.Can_cast_CreateQuery_result_to_IQueryable_T_bug_1730(); + + AssertSql(); + } + + public override async Task IQueryable_captured_variable() + { + await base.IQueryable_captured_variable(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o`) = 2 +"""); + } + + public override async Task Multiple_context_instances(bool async) + { + await base.Multiple_context_instances(async); + + AssertSql(); + } + + public override async Task Multiple_context_instances_2(bool async) + { + await base.Multiple_context_instances_2(async); + + AssertSql(); + } + + public override async Task Multiple_context_instances_set(bool async) + { + await base.Multiple_context_instances_set(async); + + AssertSql(); + } + + public override async Task Multiple_context_instances_parameter(bool async) + { + await base.Multiple_context_instances_parameter(async); + + AssertSql(); + } + + public override async Task Entity_equality_through_subquery_composite_key(bool async) + { + var message = (await Assert.ThrowsAsync( + () => base.Entity_equality_through_subquery_composite_key(async))).Message; + + Assert.Equal( + CoreStrings.EntityEqualityOnCompositeKeyEntitySubqueryNotSupported("==", nameof(OrderDetail)), + message); + + AssertSql(); + } + + public override async Task Queryable_reprojection(bool async) + { + await base.Queryable_reprojection(async); + + AssertSql(); + } + + public override async Task All_client(bool async) + { + await base.All_client(async); + + AssertSql(); + } + + public override async Task All_client_and_server_top_level(bool async) + { + await base.All_client_and_server_top_level(async); + + AssertSql(); + } + + public override async Task All_client_or_server_top_level(bool async) + { + await base.All_client_or_server_top_level(async); + + AssertSql(); + } + + public override async Task First_client_predicate(bool async) + { + await base.First_client_predicate(async); + + AssertSql(); + } + + public override async Task Select_correlated_subquery_filtered_returning_queryable_throws(bool async) + { + await base.Select_correlated_subquery_filtered_returning_queryable_throws(async); + + AssertSql(); + } + + public override async Task Select_correlated_subquery_ordered_returning_queryable_throws(bool async) + { + await base.Select_correlated_subquery_ordered_returning_queryable_throws(async); + + AssertSql(); + } + + public override async Task Select_correlated_subquery_ordered_returning_queryable_in_DTO_throws(bool async) + { + await base.Select_correlated_subquery_ordered_returning_queryable_in_DTO_throws(async); + + AssertSql(); + } + + public override async Task Select_nested_collection_in_anonymous_type_returning_ordered_queryable(bool async) + { + await base.Select_nested_collection_in_anonymous_type_returning_ordered_queryable(async); + + AssertSql(); + } + + public override async Task Select_subquery_recursive_trivial_returning_queryable(bool async) + { + await base.Select_subquery_recursive_trivial_returning_queryable(async); + + AssertSql(); + } + + public override async Task EF_Property_include_on_incorrect_property_throws(bool async) + { + await base.EF_Property_include_on_incorrect_property_throws(async); + + AssertSql(); + } + + public override async Task Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_constant_zero(bool async) + { + await base.Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_constant_zero(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_constant_one(bool async) + { + await base.Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_constant_one(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE NOT EXISTS ( + SELECT 1 + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderID] + OFFSET 1 ROWS) +"""); + } + + public override async Task Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_parameter(bool async) + { + await base.Collection_navigation_equal_to_null_for_subquery_using_ElementAtOrDefault_parameter(async); + + AssertSql( + """ +@__prm_0='2' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE NOT EXISTS ( + SELECT 1 + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderID] + OFFSET @__prm_0 ROWS) +"""); + } + + public override async Task Subquery_with_navigation_inside_inline_collection(bool async) + { + await base.Subquery_with_navigation_inside_inline_collection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE ( + SELECT IIF(SUM(`v`.`Value`) IS NULL, 0, SUM(`v`.`Value`)) + FROM (SELECT CLNG(100) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1`) AS `v`) > 101 +"""); + } + + public override async Task Parameter_collection_Contains_with_projection_and_ordering(bool async) + { + await base.Parameter_collection_Contains_with_projection_and_ordering(async); + + AssertSql( + """ +@ids1='10248' +@ids2='10249' + +SELECT `o3`.`Key`, `o3`.`MaxTimestamp` +FROM ( + SELECT `o`.`Quantity` AS `Key`, ( + SELECT MAX(`o1`.`OrderDate`) + FROM `Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o0`.`OrderID` IN (@ids1, @ids2) AND `o`.`Quantity` = `o0`.`Quantity`) AS `MaxTimestamp` + FROM `Order Details` AS `o` + WHERE `o`.`OrderID` IN (@ids1, @ids2) + GROUP BY `o`.`Quantity` +) AS `o3` +ORDER BY `o3`.`MaxTimestamp` +"""); + } + + public override async Task Contains_over_concatenated_columns_with_different_sizes(bool async) + { + await base.Contains_over_concatenated_columns_with_different_sizes(async); + + AssertSql( + """ +@data1='ALFKIAlfreds Futterkiste' (Size = 45) +@data2='ANATRAna Trujillo Emparedados y helados' (Size = 45) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` & `c`.`CompanyName` IN (@data1, @data2) +"""); + } + + public override async Task Contains_over_concatenated_column_and_constant(bool async) + { + await base.Contains_over_concatenated_column_and_constant(async); + + AssertSql( + """ +@data1='ALFKISomeConstant' (Size = 255) +@data2='ANATRSomeConstant' (Size = 255) +@data3='ALFKIX' (Size = 255) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` & 'SomeConstant' IN (@data1, @data2, @data3) +"""); + } + + public override async Task Contains_over_concatenated_columns_both_fixed_length(bool async) + { + await base.Contains_over_concatenated_columns_both_fixed_length(async); + + AssertSql( + """ +@data1='ALFKIALFKI' (Size = 10) +@data2='ALFKI' (Size = 10) +@data3='ANATRAna Trujillo Emparedados y helados' (Size = -1) +@data4='ANATRANATR' (Size = 10) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE IIF(`o`.`CustomerID` IS NULL, '', `o`.`CustomerID`) & IIF(`c`.`CustomerID` IS NULL, '', `c`.`CustomerID`) IN (@data1, @data2, @data3, @data4) +"""); + } + + public override async Task Contains_over_concatenated_column_and_parameter(bool async) + { + await base.Contains_over_concatenated_column_and_parameter(async); + + AssertSql( + """ +@someVariable='SomeVariable' (Size = 255) +@data1='ALFKISomeVariable' (Size = 255) +@data2='ANATRSomeVariable' (Size = 255) +@data3='ALFKIX' (Size = 255) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` & @someVariable IN (@data1, @data2, @data3) +"""); + } + + public override async Task Contains_over_concatenated_parameter_and_constant(bool async) + { + await base.Contains_over_concatenated_parameter_and_constant(async); + + AssertSql( + """ +@Contains='True' + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE @Contains +"""); + } + + public override async Task Compiler_generated_local_closure_produces_valid_parameter_name(bool async) + { + await base.Compiler_generated_local_closure_produces_valid_parameter_name(async); + + // No AssertSQL since compiler generated variable names are different between local and CI + //AssertSql(""); + } + + public override async Task Static_member_access_gets_parameterized_within_larger_evaluatable(bool async) + { + await base.Static_member_access_gets_parameterized_within_larger_evaluatable(async); + + AssertSql( + """ +@p='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @p +"""); + } + + public override async Task Select_Order(bool async) + { + await base.Select_Order(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Select_OrderDescending(bool async) + { + await base.Select_OrderDescending(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` DESC +"""); + } + + public override async Task Where_Order_First(bool async) + { + await base.Where_Order_First(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) = 10248 +"""); + } + + public override async Task Where_nanosecond_and_microsecond_component(bool async) + { + await base.Where_nanosecond_and_microsecond_component(async); + + AssertSql(""" +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM [Orders] AS [o] +WHERE (DATEPART(nanosecond, [o].[OrderDate]) % 1000 <> 0 OR [o].[OrderDate] IS NULL) AND (DATEPART(microsecond, [o].[OrderDate]) % 1000 <> 0 OR [o].[OrderDate] IS NULL) +"""); + } + + public override async Task Ternary_Not_Null_Contains(bool async) + { + await base.Ternary_Not_Null_Contains(async); + + AssertSql( + """ +SELECT TOP 1 (`o`.`OrderID` & '') & '' +FROM `Orders` AS `o` +WHERE (`o`.`OrderID` & '') & '' LIKE '%1%' +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Ternary_Not_Null_endsWith_Non_Numeric_First_Part(bool async) + { + await base.Ternary_Not_Null_endsWith_Non_Numeric_First_Part(async); + + AssertSql( + """ +SELECT TOP 1 ('' & (`o`.`OrderID` & '')) & '' +FROM `Orders` AS `o` +WHERE ('' & (`o`.`OrderID` & '')) & '' LIKE '%1' +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Ternary_Null_Equals_Non_Numeric_First_Part(bool async) + { + await base.Ternary_Null_Equals_Non_Numeric_First_Part(async); + + AssertSql( + """ +SELECT TOP 1 ('' & (`o`.`OrderID` & '')) & '' +FROM `Orders` AS `o` +WHERE (('' & (`o`.`OrderID` & '')) & '') = '1' +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Ternary_Null_StartsWith(bool async) + { + await base.Ternary_Null_StartsWith(async); + + AssertSql( + """ +SELECT TOP 1 (`o`.`OrderID` & '') & '' +FROM `Orders` AS `o` +WHERE (`o`.`OrderID` & '') & '' LIKE '1%' +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Column_access_inside_subquery_predicate(bool async) + { + await base.Column_access_inside_subquery_predicate(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = 'ALFKI') +"""); + } + + public override async Task Cast_to_object_over_parameter_directly_in_lambda(bool async) + { + await base.Cast_to_object_over_parameter_directly_in_lambda(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +"""); + } + + public override async Task Late_subquery_pushdown(bool async) + { + await base.Late_subquery_pushdown(async); + + AssertSql( + """ +SELECT `o`.`CustomerID` +FROM `Orders` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT TOP 100 `o0`.`CustomerID` + FROM `Orders` AS `o0` + ORDER BY `o0`.`CustomerID` + ) AS `o1` + WHERE `o1`.`CustomerID` = `o`.`CustomerID` OR (`o1`.`CustomerID` IS NULL AND `o`.`CustomerID` IS NULL)) +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected.Select(s => s.Trim()).ToArray()); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindNavigationsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindNavigationsQueryLibRedTest.cs new file mode 100644 index 00000000..86d37baf --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindNavigationsQueryLibRedTest.cs @@ -0,0 +1,1167 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindNavigationsQueryLibRedTest : NorthwindNavigationsQueryRelationalTestBase> + { + public NorthwindNavigationsQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + ClearLog(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Select_Where_Navigation(bool isAsync) + { + await base.Select_Where_Navigation(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`City` = 'Seattle' + """); + } + + public override async Task Select_Where_Navigation_Contains(bool isAsync) + { + await base.Select_Where_Navigation_Contains(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`City` LIKE '%Sea%' + """); + } + + public override async Task Select_Where_Navigation_Deep(bool isAsync) + { + await base.Select_Where_Navigation_Deep(isAsync); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE `c`.`City` = 'Seattle' +ORDER BY `o`.`OrderID`, `o`.`ProductID` +"""); + } + + public override async Task Take_Select_Navigation(bool isAsync) + { + await base.Take_Select_Navigation(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='2'")} + + SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `t` + LEFT JOIN ( + SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` + FROM `Orders` AS `o` + ) AS `t0` + WHERE `t0`.`row` <= 1 + ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` + ORDER BY `t`.`CustomerID` + """); + } + + public override async Task Select_collection_FirstOrDefault_project_single_column1(bool isAsync) + { + await base.Select_collection_FirstOrDefault_project_single_column1(isAsync); + + AssertSql( + """ +@p='2' + +SELECT TOP @p ( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Select_collection_FirstOrDefault_project_single_column2(bool isAsync) + { + await base.Select_collection_FirstOrDefault_project_single_column2(isAsync); + + AssertSql( + """ +@p='2' + +SELECT TOP @p ( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Select_collection_FirstOrDefault_project_anonymous_type(bool isAsync) + { + await base.Select_collection_FirstOrDefault_project_anonymous_type(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='2'")} + + SELECT `t1`.`CustomerID`, `t1`.`OrderID`, `t1`.`c` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F' & '%' + ORDER BY `c`.`CustomerID` + ) AS `t` + LEFT JOIN ( + SELECT `t0`.`CustomerID`, `t0`.`OrderID`, `t0`.`c` + FROM ( + SELECT `o`.`CustomerID`, `o`.`OrderID`, 1 AS `c`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` + FROM `Orders` AS `o` + ) AS `t0` + WHERE `t0`.`row` <= 1 + ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` + ORDER BY `t`.`CustomerID` + """); + } + + public override async Task Select_collection_FirstOrDefault_project_anonymous_type_client_eval(bool isAsync) + { + await base.Select_collection_FirstOrDefault_project_anonymous_type_client_eval(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='2'")} + + SELECT `t1`.`CustomerID`, `t1`.`OrderID`, `t1`.`c` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F' & '%' + ORDER BY `c`.`CustomerID` + ) AS `t` + LEFT JOIN ( + SELECT `t0`.`CustomerID`, `t0`.`OrderID`, `t0`.`c` + FROM ( + SELECT `o`.`CustomerID`, `o`.`OrderID`, 1 AS `c`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` + FROM `Orders` AS `o` + ) AS `t0` + WHERE `t0`.`row` <= 1 + ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` + ORDER BY `t`.`CustomerID` + """); + } + + public override async Task Select_collection_FirstOrDefault_project_entity(bool isAsync) + { + await base.Select_collection_FirstOrDefault_project_entity(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='2'")} + + SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `t` + LEFT JOIN ( + SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` + FROM `Orders` AS `o` + ) AS `t0` + WHERE `t0`.`row` <= 1 + ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` + ORDER BY `t`.`CustomerID` + """); + } + + public override async Task Skip_Select_Navigation(bool isAsync) + { + await base.Skip_Select_Navigation(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='20'")} + + SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t` + LEFT JOIN ( + SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` + FROM `Orders` AS `o` + ) AS `t0` + WHERE `t0`.`row` <= 1 + ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` + ORDER BY `t`.`CustomerID` + """); + } + + public override async Task Select_Where_Navigation_Included(bool isAsync) + { + await base.Select_Where_Navigation_Included(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`City` = 'Seattle' + """); + } + + public override async Task Include_with_multiple_optional_navigations(bool isAsync) + { + await base.Include_with_multiple_optional_navigations(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM (`Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`City` = 'London' + """); + } + + public override async Task Select_Navigation(bool isAsync) + { + await base.Select_Navigation(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + """); + } + + public override async Task Select_Navigations(bool isAsync) + { + await base.Select_Navigations(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + """); + } + + public override async Task Select_Where_Navigation_Multiple_Access(bool isAsync) + { + await base.Select_Where_Navigation_Multiple_Access(isAsync); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `c`.`City` = 'Seattle' AND (`c`.`Phone` <> '555 555 5555' OR `c`.`Phone` IS NULL) +"""); + } + + public override async Task Select_Navigations_Where_Navigations(bool isAsync) + { + await base.Select_Navigations_Where_Navigations(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `c`.`City` = 'Seattle' AND (`c`.`Phone` <> '555 555 5555' OR `c`.`Phone` IS NULL) +"""); + } + + public override async Task Select_Singleton_Navigation_With_Member_Access(bool isAsync) + { + await base.Select_Singleton_Navigation_With_Member_Access(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `c`.`City` = 'Seattle' AND (`c`.`Phone` <> '555 555 5555' OR `c`.`Phone` IS NULL) +"""); + } + + public override async Task Select_count_plus_sum(bool isAsync) + { + await base.Select_count_plus_sum(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT IIF(SUM(CLNG(`o0`.`Quantity`)) IS NULL, 0, SUM(CLNG(`o0`.`Quantity`))) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) + ( + SELECT COUNT(*) + FROM `Order Details` AS `o1` + WHERE `o`.`OrderID` = `o1`.`OrderID`) AS `Total` + FROM `Orders` AS `o` + """); + } + + public override async Task Singleton_Navigation_With_Member_Access(bool isAsync) + { + await base.Singleton_Navigation_With_Member_Access(isAsync); + + AssertSql( +""" +SELECT `c`.`City` AS `B` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `c`.`City` = 'Seattle' AND (`c`.`Phone` <> '555 555 5555' OR `c`.`Phone` IS NULL) +"""); + } + + public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(bool isAsync) + { + await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync); + + AssertSql( + """ +SELECT `s`.`CustomerID`, `s`.`CustomerID0` AS `C2` +FROM (( + SELECT `o`.`CustomerID`, `o1`.`CustomerID` AS `CustomerID0` + FROM `Orders` AS `o`, + ( + SELECT `o0`.`CustomerID` + FROM `Orders` AS `o0` + WHERE `o0`.`OrderID` < 10400 + ) AS `o1` + WHERE `o`.`OrderID` < 10300 +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +WHERE `c`.`City` = `c0`.`City` OR (`c`.`City` IS NULL AND `c0`.`City` IS NULL) +"""); + } + + public override async Task Select_Where_Navigation_Equals_Navigation(bool isAsync) + { + await base.Select_Where_Navigation_Equals_Navigation(isAsync); + + AssertSql( + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` +FROM (( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID` AS `CustomerID0`, `o0`.`EmployeeID` AS `EmployeeID0`, `o0`.`OrderDate` AS `OrderDate0` + FROM `Orders` AS `o`, + `Orders` AS `o0` + WHERE (`o`.`CustomerID` LIKE 'A%') AND (`o0`.`CustomerID` LIKE 'A%') +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +WHERE `c`.`CustomerID` = `c0`.`CustomerID` OR (`c`.`CustomerID` IS NULL AND `c0`.`CustomerID` IS NULL) +"""); + } + + public override async Task Select_Where_Navigation_Null(bool isAsync) + { + await base.Select_Where_Navigation_Null(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` + WHERE `e0`.`EmployeeID` IS NULL + """); + } + + public override async Task Select_Where_Navigation_Null_Deep(bool isAsync) + { + await base.Select_Where_Navigation_Null_Deep(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM (`Employees` AS `e` + LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID`) + LEFT JOIN `Employees` AS `e1` ON `e0`.`ReportsTo` = `e1`.`EmployeeID` + WHERE `e1`.`EmployeeID` IS NULL + """); + } + + public override async Task Select_Where_Navigation_Null_Reverse(bool isAsync) + { + await base.Select_Where_Navigation_Null_Reverse(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` + WHERE `e0`.`EmployeeID` IS NULL + """); + } + + public override async Task Select_collection_navigation_simple(bool isAsync) + { + await base.Select_collection_navigation_simple(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Select_collection_navigation_simple2(bool isAsync) + { + await base.Select_collection_navigation_simple2(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Count` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Select_collection_navigation_simple_followed_by_ordering_by_scalar(bool isAsync) + { + await base.Select_collection_navigation_simple_followed_by_ordering_by_scalar(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Select_collection_navigation_multi_part(bool isAsync) + { + await base.Select_collection_navigation_multi_part(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Select_collection_navigation_multi_part2(bool isAsync) + { + await base.Select_collection_navigation_multi_part2(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE `o0`.`CustomerID` IN ('ALFKI', 'ANTON') +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Collection_select_nav_prop_any(bool isAsync) + { + await base.Collection_select_nav_prop_any(isAsync); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Any` +FROM `Customers` AS `c` +"""); + } + + public override async Task Collection_select_nav_prop_predicate(bool isAsync) + { + await base.Collection_select_nav_prop_predicate(isAsync); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +FROM `Customers` AS `c` +"""); + } + + public override async Task Collection_where_nav_prop_any(bool isAsync) + { + await base.Collection_where_nav_prop_any(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + """); + } + + public override async Task Collection_where_nav_prop_any_predicate(bool isAsync) + { + await base.Collection_where_nav_prop_any_predicate(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` > 0) + """); + } + + public override async Task Collection_select_nav_prop_all(bool isAsync) + { + await base.Collection_select_nav_prop_all(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND (`o`.`CustomerID` <> 'ALFKI' OR `o`.`CustomerID` IS NULL)) AS `All` +FROM `Customers` AS `c` +"""); + } + + public override async Task Collection_where_nav_prop_all(bool isAsync) + { + await base.Collection_where_nav_prop_all(isAsync); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND (`o`.`CustomerID` <> 'ALFKI' OR `o`.`CustomerID` IS NULL)) +"""); + } + + public override async Task Collection_select_nav_prop_count(bool isAsync) + { + await base.Collection_select_nav_prop_count(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Count` + FROM `Customers` AS `c` + """); + } + + public override async Task Collection_where_nav_prop_count(bool isAsync) + { + await base.Collection_where_nav_prop_count(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 5 + """); + } + + public override async Task Collection_where_nav_prop_count_reverse(bool isAsync) + { + await base.Collection_where_nav_prop_count_reverse(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE 5 < ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + """); + } + + public override async Task Collection_orderby_nav_prop_count(bool isAsync) + { + await base.Collection_orderby_nav_prop_count(isAsync); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `c0`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `c` + FROM `Customers` AS `c` +) AS `c0` +ORDER BY `c0`.`c`, `c0`.`CustomerID` +"""); + } + + public override async Task Collection_select_nav_prop_long_count(bool isAsync) + { + await base.Collection_select_nav_prop_long_count(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `C` + FROM `Customers` AS `c` + """); + } + + public override async Task Select_multiple_complex_projections(bool isAsync) + { + await base.Select_multiple_complex_projections(isAsync); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `collection1`, `o`.`OrderDate` AS `scalar1`, EXISTS ( + SELECT 1 + FROM `Order Details` AS `o1` + WHERE `o`.`OrderID` = `o1`.`OrderID` AND `o1`.`UnitPrice` > 10.0) AS `any`, IIF(`o`.`CustomerID` = 'ALFKI', '50', '10') AS `conditional`, `o`.`OrderID` AS `scalar2`, NOT EXISTS ( + SELECT 1 + FROM `Order Details` AS `o2` + WHERE `o`.`OrderID` = `o2`.`OrderID` AND `o2`.`OrderID` <> 42) AS `all`, ( + SELECT COUNT(*) + FROM `Order Details` AS `o3` + WHERE `o`.`OrderID` = `o3`.`OrderID`) AS `collection2` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Collection_select_nav_prop_sum(bool isAsync) + { + await base.Collection_select_nav_prop_sum(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Sum` + FROM `Customers` AS `c` + """); + } + + public override async Task Collection_select_nav_prop_sum_plus_one(bool isAsync) + { + await base.Collection_select_nav_prop_sum_plus_one(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + 1 AS `Sum` + FROM `Customers` AS `c` + """); + } + + public override async Task Collection_where_nav_prop_sum(bool isAsync) + { + await base.Collection_where_nav_prop_sum(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE ( + SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 1000 + """); + } + + public override async Task Collection_select_nav_prop_first_or_default(bool isAsync) + { + await base.Collection_select_nav_prop_first_or_default(isAsync); + + AssertSql( + $""" + SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN ( + SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` + FROM `Orders` AS `o` + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Collection_select_nav_prop_first_or_default_then_nav_prop(bool isAsync) + { + await base.Collection_select_nav_prop_first_or_default_then_nav_prop(isAsync); + + AssertSql( + $""" + SELECT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + FROM `Customers` AS `c` + LEFT JOIN ( + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`OrderID`, `t`.`CustomerID0` + FROM ( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID` AS `CustomerID0`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` + WHERE `o`.`OrderID` IN (10643, 10692, 10702, 10835, 10952, 11011) + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID0` + WHERE `c`.`CustomerID` LIKE 'A' & '%' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Collection_select_nav_prop_first_or_default_then_nav_prop_nested(bool isAsync) + { + await base.Collection_select_nav_prop_first_or_default_then_nav_prop_nested(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `c0`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` + WHERE `o`.`CustomerID` = 'ALFKI') +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Collection_select_nav_prop_single_or_default_then_nav_prop_nested(bool isAsync) + { + await base.Collection_select_nav_prop_single_or_default_then_nav_prop_nested(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `c0`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` + WHERE `o`.`OrderID` = 10643) +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Collection_select_nav_prop_first_or_default_then_nav_prop_nested_using_property_method(bool isAsync) + { + await base.Collection_select_nav_prop_first_or_default_then_nav_prop_nested_using_property_method(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `c0`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` + WHERE `o`.`CustomerID` = 'ALFKI') +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Collection_select_nav_prop_first_or_default_then_nav_prop_nested_with_orderby(bool isAsync) + { + await base.Collection_select_nav_prop_first_or_default_then_nav_prop_nested_with_orderby(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `c0`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`CustomerID`) +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Navigation_fk_based_inside_contains(bool isAsync) + { + await base.Navigation_fk_based_inside_contains(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Navigation_inside_contains(bool isAsync) + { + await base.Navigation_inside_contains(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`City` IN ('Novigrad', 'Seattle') + """); + } + + public override async Task Navigation_inside_contains_nested(bool isAsync) + { + await base.Navigation_inside_contains_nested(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` + FROM (`Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`City` IN ('Novigrad', 'Seattle') + """); + } + + public override async Task Navigation_from_join_clause_inside_contains(bool isAsync) + { + await base.Navigation_from_join_clause_inside_contains(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` + FROM (`Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`Country` IN ('USA', 'Redania') + """); + } + + public override async Task Where_subquery_on_navigation(bool isAsync) + { + await base.Where_subquery_on_navigation(isAsync); + + AssertSql(); + } + + public override async Task Where_subquery_on_navigation2(bool isAsync) + { + await base.Where_subquery_on_navigation2(isAsync); + + AssertSql(); + } + + [ConditionalTheory(Skip="LibRed Fails")] + public override async Task Navigation_in_subquery_referencing_outer_query(bool isAsync) + { + await base.Navigation_in_subquery_referencing_outer_query(isAsync); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE ( + SELECT COUNT(*) + FROM (`Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID`) + LEFT JOIN `Customers` AS `c0` ON `o1`.`CustomerID` = `c0`.`CustomerID` + WHERE `c`.`Country` = `c0`.`Country` OR (`c`.`Country` IS NULL AND `c0`.`Country` IS NULL)) > 0 AND `o`.`OrderID` IN (10643, 10692) +"""); + } + + public override async Task Project_single_scalar_value_subquery_is_properly_inlined(bool isAsync) + { + await base.Project_single_scalar_value_subquery_is_properly_inlined(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) AS `OrderId` + FROM `Customers` AS `c` + """); + } + + public override async Task Project_single_entity_value_subquery_works(bool isAsync) + { + await base.Project_single_entity_value_subquery_works(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN ( + SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` + FROM `Orders` AS `o` + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'A' & '%' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Project_single_scalar_value_subquery_in_query_with_optional_navigation_works(bool isAsync) + { + await base.Project_single_scalar_value_subquery_in_query_with_optional_navigation_works(isAsync); + + AssertSql( + """ +@p='3' + +SELECT `o0`.`OrderID`, IIF(( + SELECT TOP 1 `o1`.`OrderID` + FROM `Order Details` AS `o1` + WHERE `o0`.`OrderID` = `o1`.`OrderID` + ORDER BY `o1`.`OrderID`, `o1`.`ProductID`) IS NULL, 0, ( + SELECT TOP 1 `o1`.`OrderID` + FROM `Order Details` AS `o1` + WHERE `o0`.`OrderID` = `o1`.`OrderID` + ORDER BY `o1`.`OrderID`, `o1`.`ProductID`)) AS `OrderDetail`, `c`.`City` +FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +ORDER BY `o0`.`OrderID` +"""); + } + + public override async Task GroupJoin_with_complex_subquery_and_LOJ_gets_flattened(bool isAsync) + { + await base.GroupJoin_with_complex_subquery_and_LOJ_gets_flattened(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` AS `CustomerID0`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = 10260 + INNER JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID0` + """); + } + + public override async Task GroupJoin_with_complex_subquery_and_LOJ_gets_flattened2(bool isAsync) + { + await base.GroupJoin_with_complex_subquery_and_LOJ_gets_flattened2(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` AS `CustomerID0`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = 10260 + INNER JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID0` + """); + } + + public override async Task Navigation_with_collection_with_nullable_type_key(bool isAsync) + { + await base.Navigation_with_collection_with_nullable_type_key(isAsync); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` IS NOT NULL AND `c`.`CustomerID` = `o0`.`CustomerID` AND `o0`.`OrderID` > 10260) > 30 +"""); + } + + public override async Task Multiple_include_with_multiple_optional_navigations(bool isAsync) + { + await base.Multiple_include_with_multiple_optional_navigations(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` + FROM ((`Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) + INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` + WHERE `c`.`City` = 'London' + """); + } + + public override async Task Navigation_in_subquery_referencing_outer_query_with_client_side_result_operator_and_count(bool async) + { + await base.Navigation_in_subquery_referencing_outer_query_with_client_side_result_operator_and_count(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` IN (10643, 10692) AND ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM (`Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID`) + LEFT JOIN `Customers` AS `c0` ON `o1`.`CustomerID` = `c0`.`CustomerID` + WHERE `c`.`Country` = `c0`.`Country` OR (`c`.`Country` IS NULL AND `c0`.`Country` IS NULL) + ) AS `s`) > 0 +"""); + } + + public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(bool async) + { + await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async); + + AssertSql( + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` +FROM (( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`CustomerID` AS `CustomerID0`, `o1`.`EmployeeID` AS `EmployeeID0`, `o1`.`OrderDate` AS `OrderDate0` + FROM `Orders` AS `o`, + ( + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `o0`.`OrderID` < 10400 + ) AS `o1` + WHERE `o`.`OrderID` < 10300 +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +WHERE `c`.`City` = `c0`.`City` OR (`c`.`City` IS NULL AND `c0`.`City` IS NULL) +"""); + } + + public override async Task Where_subquery_on_navigation_client_eval(bool async) + { + await base.Where_subquery_on_navigation_client_eval(async); + + AssertSql(); + } + + public override async Task Join_with_nav_projected_in_subquery_when_client_eval(bool async) + { + await base.Join_with_nav_projected_in_subquery_when_client_eval(async); + + AssertSql(); + } + + public override async Task Join_with_nav_in_predicate_in_subquery_when_client_eval(bool async) + { + await base.Join_with_nav_in_predicate_in_subquery_when_client_eval(async); + + AssertSql(); + } + + public override async Task Join_with_nav_in_orderby_in_subquery_when_client_eval(bool async) + { + await base.Join_with_nav_in_orderby_in_subquery_when_client_eval(async); + + AssertSql(); + } + + public override async Task Select_Where_Navigation_Client(bool async) + { + await base.Select_Where_Navigation_Client(async); + + AssertSql(); + } + + public override async Task Collection_select_nav_prop_all_client(bool async) + { + await base.Collection_select_nav_prop_all_client(async); + + AssertSql(); + } + + public override async Task Collection_where_nav_prop_all_client(bool async) + { + await base.Collection_where_nav_prop_all_client(async); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} \ No newline at end of file diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindQueryFiltersQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindQueryFiltersQueryLibRedTest.cs new file mode 100644 index 00000000..cabcca9e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindQueryFiltersQueryLibRedTest.cs @@ -0,0 +1,385 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindQueryFiltersQueryLibRedTest : NorthwindQueryFiltersQueryTestBase> + { + public NorthwindQueryFiltersQueryLibRedTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Count_query(bool async) + { + await base.Count_query(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +"""); + } + + public override async Task Materialized_query(bool async) + { + await base.Materialized_query(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +"""); + } + + public override async Task Find(bool async) + { + await base.Find(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) +@p='ALFKI' (Size = 5) + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE (`c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith) AND `c`.`CustomerID` = @p +"""); + } + + public override async Task Materialized_query_parameter(bool async) + { + await base.Materialized_query_parameter(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='F%' (Size = 40) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +"""); + } + + public override async Task Materialized_query_parameter_new_context(bool async) + { + await base.Materialized_query_parameter_new_context(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +""", + // + """ +@ef_filter__TenantPrefix_startswith='T%' (Size = 40) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +"""); + } + + public override async Task Projection_query_parameter(bool async) + { + await base.Projection_query_parameter(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='F%' (Size = 40) + +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +"""); + } + + public override async Task Projection_query(bool async) + { + await base.Projection_query(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +"""); + } + + public override async Task Include_query(bool async) + { + await base.Include_query(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c1`.`CustomerID` AS `CustomerID0` + FROM `Orders` AS `o` + LEFT JOIN ( + SELECT `c0`.`CustomerID`, `c0`.`CompanyName` + FROM `Customers` AS `c0` + WHERE `c0`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith + ) AS `c1` ON `o`.`CustomerID` = `c1`.`CustomerID` + WHERE `c1`.`CustomerID` IS NOT NULL AND `c1`.`CompanyName` IS NOT NULL +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` +WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +ORDER BY `c`.`CustomerID`, `s`.`OrderID` +"""); + } + + public override async Task Include_query_opt_out(bool async) + { + await base.Include_query_opt_out(async); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Included_many_to_one_query(bool async) + { + await base.Included_many_to_one_query(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM `Orders` AS `o` +LEFT JOIN ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +) AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` +WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL +"""); + } + + public override async Task Project_reference_that_itself_has_query_filter_with_another_reference(bool async) + { + await base.Project_reference_that_itself_has_query_filter_with_another_reference(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) +@ef_filter___quantity='50' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM `Order Details` AS `o` +INNER JOIN ( + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + LEFT JOIN ( + SELECT `c`.`CustomerID`, `c`.`CompanyName` + FROM `Customers` AS `c` + WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith + ) AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL +) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +WHERE `o`.`Quantity` > @ef_filter___quantity +"""); + } + + public override async Task Navs_query(bool async) + { + await base.Navs_query(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) +@ef_filter___quantity='50' + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Customers` AS `c` +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + LEFT JOIN ( + SELECT `c0`.`CustomerID`, `c0`.`CompanyName` + FROM `Customers` AS `c0` + WHERE `c0`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith + ) AS `c1` ON `o`.`CustomerID` = `c1`.`CustomerID` + WHERE `c1`.`CustomerID` IS NOT NULL AND `c1`.`CompanyName` IS NOT NULL +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID`) +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`Discount` + FROM `Order Details` AS `o0` + INNER JOIN ( + SELECT `o1`.`OrderID` + FROM `Orders` AS `o1` + LEFT JOIN ( + SELECT `c2`.`CustomerID`, `c2`.`CompanyName` + FROM `Customers` AS `c2` + WHERE `c2`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith + ) AS `c3` ON `o1`.`CustomerID` = `c3`.`CustomerID` + WHERE `c3`.`CustomerID` IS NOT NULL AND `c3`.`CompanyName` IS NOT NULL + ) AS `s0` ON `o0`.`OrderID` = `s0`.`OrderID` + WHERE `o0`.`Quantity` > @ef_filter___quantity +) AS `s1` ON `s`.`OrderID` = `s1`.`OrderID` +WHERE ((`c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith) AND `s1`.`Discount` < 10) AND (`s`.`OrderID` IS NOT NULL AND `s1`.`OrderID` IS NOT NULL) +"""); + } + + [ConditionalFact] + public void FromSql_is_composed() + { + using (var context = Fixture.CreateContext()) + { + var results = context.Customers.FromSqlRaw("select * from Customers").ToList(); + + Assert.Equal(7, results.Count); + } + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT `m`.`CustomerID`, `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`Fax`, `m`.`Phone`, `m`.`PostalCode`, `m`.`Region` +FROM ( + select * from Customers +) AS `m` +WHERE `m`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +"""); + } + + [ConditionalFact] + public void FromSql_is_composed_when_filter_has_navigation() + { + using (var context = Fixture.CreateContext()) + { + var results = context.Orders.FromSqlRaw("select * from Orders").ToList(); + + Assert.Equal(80, results.Count); + } + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT `m`.`OrderID`, `m`.`CustomerID`, `m`.`EmployeeID`, `m`.`OrderDate` +FROM ( + select * from Orders +) AS `m` +LEFT JOIN ( + SELECT `c`.`CustomerID`, `c`.`CompanyName` + FROM `Customers` AS `c` + WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +) AS `c0` ON `m`.`CustomerID` = `c0`.`CustomerID` +WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL +"""); + } + + public override void Compiled_query() + { + base.Compiled_query(); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) +@customerID='BERGS' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE (`c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith) AND `c`.`CustomerID` = @customerID +""", + // + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) +@customerID='BLAUS' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE (`c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith) AND `c`.`CustomerID` = @customerID +"""); + } + + public override async Task Entity_Equality(bool async) + { + await base.Entity_Equality(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +LEFT JOIN ( + SELECT `c`.`CustomerID`, `c`.`CompanyName` + FROM `Customers` AS `c` + WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +) AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` +WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL +"""); + } + + public override async Task Client_eval(bool async) + { + await base.Client_eval(async); + + AssertSql(); + } + + public override async Task Included_many_to_one_query2(bool async) + { + await base.Included_many_to_one_query2(async); + + AssertSql( + """ +@ef_filter__TenantPrefix_startswith='B%' (Size = 40) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM `Orders` AS `o` +LEFT JOIN ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CompanyName` LIKE @ef_filter__TenantPrefix_startswith +) AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` +WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL +"""); + } + + public override async Task Included_one_to_many_query_with_client_eval(bool async) + { + await base.Included_one_to_many_query_with_client_eval(async); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindQueryLibRedFixture.cs new file mode 100644 index 00000000..34bb0492 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindQueryLibRedFixture.cs @@ -0,0 +1,70 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using EntityFrameworkCore.LibRed.FunctionalTests.TestModels.Northwind; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindQueryLibRedFixture : NorthwindQueryRelationalFixture + where TModelCustomizer : ITestModelCustomizer, new() + { + protected override ITestStoreFactory TestStoreFactory => LibRedNorthwindTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity( + b => + { + b.Property(c => c.CustomerID).HasColumnType("nchar(5)"); + b.Property(cm => cm.CompanyName).HasMaxLength(40); + b.Property(cm => cm.ContactName).HasMaxLength(30); + b.Property(cm => cm.ContactTitle).HasColumnType("national character varying(30)"); + }); + + modelBuilder.Entity( + b => + { + b.Property(c => c.EmployeeID).HasColumnType("int"); + b.Property(c => c.ReportsTo).HasColumnType("int"); + }); + + modelBuilder.Entity( + b => + { + b.Property(o => o.EmployeeID).HasColumnType("int"); + b.Property(o => o.OrderDate).HasColumnType("datetime"); + }); + + modelBuilder.Entity() + .Property(od => od.UnitPrice) + .HasColumnType("money"); + + modelBuilder.Entity( + b => + { + b.Property(p => p.UnitPrice).HasColumnType("money"); + b.Property(p => p.UnitsInStock).HasColumnType("smallint"); + b.Property(cm => cm.ProductName).HasMaxLength(40); + }); + + modelBuilder.Entity() + .Property(p => p.UnitPrice) + .HasColumnType("money"); + + //Override inherited query of : select * from ""Orders"" + //This is needed as the " character does not work for surrounding table/entity names on OleDb + modelBuilder.Entity().ToSqlQuery(@"select * from `Orders`"); + } + + protected override Type ContextType + => typeof(NorthwindLibRedContext); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindQueryTaggingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindQueryTaggingQueryLibRedTest.cs new file mode 100644 index 00000000..a5f0a5f3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindQueryTaggingQueryLibRedTest.cs @@ -0,0 +1,177 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindQueryTaggingQueryLibRedTest : NorthwindQueryTaggingQueryTestBase> + { + public NorthwindQueryTaggingQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override void Single_query_tag() + { + base.Single_query_tag(); + + AssertSql( + """ +-- Yanni + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override void Single_query_multiple_tags() + { + base.Single_query_multiple_tags(); + + AssertSql( + """ +-- Yanni +-- Enya + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override void Tags_on_subquery() + { + base.Tags_on_subquery(); + + AssertSql( + """ +-- Yanni +-- Laurel + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c`, +( + SELECT TOP 5 1 + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override void Duplicate_tags() + { + base.Duplicate_tags(); + + AssertSql( + """ +-- Yanni + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override void Tag_on_include_query() + { + base.Tag_on_include_query(); + + AssertSql( + """ +-- Yanni + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override void Tag_on_scalar_query() + { + base.Tag_on_scalar_query(); + + AssertSql( + """ +-- Yanni + +SELECT TOP 1 `o`.`OrderDate` +FROM `Orders` AS `o` +ORDER BY `o`.`OrderID` +"""); + } + + public override void Single_query_multiline_tag() + { + base.Single_query_multiline_tag(); + + AssertSql( + """ +-- Yanni +-- AND +-- Laurel + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override void Single_query_multiple_multiline_tag() + { + base.Single_query_multiple_multiline_tag(); + + AssertSql( + """ +-- Yanni +-- AND +-- Laurel +-- Yet +-- Another +-- Multiline +-- Tag + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override void Single_query_multiline_tag_with_empty_lines() + { + base.Single_query_multiline_tag_with_empty_lines(); + + AssertSql( + """ +-- Yanni +-- +-- AND +-- +-- Laurel + +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSelectQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSelectQueryLibRedTest.cs new file mode 100644 index 00000000..1d1786a3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSelectQueryLibRedTest.cs @@ -0,0 +1,2921 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindSelectQueryLibRedTest : NorthwindSelectQueryRelationalTestBase> + { + public NorthwindSelectQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + ClearLog(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Projection_when_arithmetic_expression_precedence(bool isAsync) + { + await base.Projection_when_arithmetic_expression_precedence(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID` \ (`o`.`OrderID` \ 2) AS `A`, (`o`.`OrderID` \ `o`.`OrderID`) \ 2 AS `B` + FROM `Orders` AS `o` + """); + } + + public override async Task Projection_when_arithmetic_expressions(bool isAsync) + { + await base.Projection_when_arithmetic_expressions(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`OrderID` * 2 AS `Double`, `o`.`OrderID` + 23 AS `Add`, 100000 - `o`.`OrderID` AS `Sub`, `o`.`OrderID` \ (`o`.`OrderID` \ 2) AS `Divide`, 42 AS `Literal`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + """); + } + + public override async Task Projection_when_arithmetic_mixed(bool isAsync) + { + await base.Projection_when_arithmetic_mixed(isAsync); + + AssertSql( + """ +@p='10' + +SELECT CLNG(`e0`.`EmployeeID`) + CLNG(`o0`.`OrderID`) AS `Add`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, 42 AS `Literal`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0`, +( + SELECT TOP 5 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e0` +ORDER BY `o0`.`OrderID` +"""); + } + + public override async Task Projection_when_null_value(bool isAsync) + { + await base.Projection_when_null_value(isAsync); + + AssertSql( + $""" + SELECT `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Projection_when_client_evald_subquery(bool isAsync) + { + await base.Projection_when_client_evald_subquery(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `o`.`CustomerID`, `o`.`OrderID` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Project_to_object_array(bool isAsync) + { + await base.Project_to_object_array(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = 1 + """); + } + + public override async Task Projection_of_entity_type_into_object_array(bool isAsync) + { + await base.Projection_of_entity_type_into_object_array(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Projection_of_multiple_entity_types_into_object_array(bool isAsync) + { + await base.Projection_of_multiple_entity_types_into_object_array(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` < 10300 + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Projection_of_entity_type_into_object_list(bool isAsync) + { + await base.Projection_of_entity_type_into_object_list(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Project_to_int_array(bool isAsync) + { + await base.Project_to_int_array(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`ReportsTo` + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = 1 + """); + } + + public override async Task Select_bool_closure_with_order_parameter_with_cast_to_nullable(bool isAsync) + { + await base.Select_bool_closure_with_order_parameter_with_cast_to_nullable(isAsync); + + AssertSql( + """ +@boolean='False' + +SELECT CBOOL(@boolean) +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_scalar(bool isAsync) + { + await base.Select_scalar(isAsync); + + AssertSql( + $""" + SELECT `c`.`City` + FROM `Customers` AS `c` + """); + } + + public override async Task Select_anonymous_one(bool isAsync) + { + await base.Select_anonymous_one(isAsync); + + AssertSql( + $""" + SELECT `c`.`City` + FROM `Customers` AS `c` + """); + } + + public override async Task Select_anonymous_two(bool isAsync) + { + await base.Select_anonymous_two(isAsync); + + AssertSql( + $""" + SELECT `c`.`City`, `c`.`Phone` + FROM `Customers` AS `c` + """); + } + + public override async Task Select_anonymous_three(bool isAsync) + { + await base.Select_anonymous_three(isAsync); + + AssertSql( + $""" + SELECT `c`.`City`, `c`.`Phone`, `c`.`Country` + FROM `Customers` AS `c` + """); + } + + public override async Task Select_anonymous_bool_constant_true(bool isAsync) + { + await base.Select_anonymous_bool_constant_true(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, TRUE AS `ConstantTrue` + FROM `Customers` AS `c` + """); + } + + public override async Task Select_anonymous_constant_in_expression(bool isAsync) + { + await base.Select_anonymous_constant_in_expression(isAsync); + + AssertSql( + """ + SELECT `c`.`CustomerID`, IIF(LEN(`c`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`c`.`CustomerID`))) + 5 AS `Expression` + FROM `Customers` AS `c` + """); + } + + public override async Task Select_anonymous_conditional_expression(bool isAsync) + { + await base.Select_anonymous_conditional_expression(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`UnitsInStock` > CINT(0) AS `IsAvailable` +FROM `Products` AS `p` +"""); + } + + public override async Task Select_constant_int(bool isAsync) + { + await base.Select_constant_int(isAsync); + + AssertSql( + $""" + SELECT 0 + FROM `Customers` AS `c` + """); + } + + public override async Task Select_constant_null_string(bool isAsync) + { + await base.Select_constant_null_string(isAsync); + + AssertSql( + $""" + SELECT NULL + FROM `Customers` AS `c` + """); + } + + public override async Task Select_local(bool isAsync) + { + await base.Select_local(isAsync); + + AssertSql( + """ +@x='10' + +SELECT CLNG(@x) +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_scalar_primitive_after_take(bool isAsync) + { + await base.Select_scalar_primitive_after_take(isAsync); + + AssertSql( + """ +@p='9' + +SELECT TOP @p `e`.`EmployeeID` +FROM `Employees` AS `e` +"""); + } + + public override async Task Select_project_filter(bool isAsync) + { + await base.Select_project_filter(isAsync); + + AssertSql( + $""" + SELECT `c`.`CompanyName` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' + """); + } + + public override async Task Select_project_filter2(bool isAsync) + { + await base.Select_project_filter2(isAsync); + + AssertSql( + $""" + SELECT `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' + """); + } + + public override async Task Select_nested_collection(bool isAsync) + { + await base.Select_nested_collection(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o0`.`OrderID` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE DATEPART('yyyy', `o`.`OrderDate`) = 1997 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`City` = 'London' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Select_nested_collection_multi_level(bool isAsync) + { + await base.Select_nested_collection_multi_level(isAsync); + + AssertSql( + """ +SELECT [c].[CustomerID], [t0].[Date], [t0].[OrderID] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[Date], [t].[OrderID], [t].[CustomerID] + FROM ( + SELECT [o].[OrderDate] AS [Date], [o].[OrderID], [o].[CustomerID], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderID]) AS [row] + FROM [Orders] AS [o] + WHERE [o].[OrderID] < 10500 + ) AS [t] + WHERE [t].[row] <= 3 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY [c].[CustomerID], [t0].[CustomerID], [t0].[OrderID] +"""); + } + + public override async Task Select_nested_collection_multi_level2(bool isAsync) + { + await base.Select_nested_collection_multi_level2(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` < 10500 + ORDER BY `o`.`OrderID`) AS `OrderDates` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Select_nested_collection_multi_level3(bool isAsync) + { + await base.Select_nested_collection_multi_level3(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10500 AND `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) AS `OrderDates` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Select_nested_collection_multi_level4(bool isAsync) + { + await base.Select_nested_collection_multi_level4(isAsync); + + AssertSql( + $""" + SELECT IIF(( + SELECT TOP 1 ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND `o0`.`OrderID` > 10) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` < 10500 + ORDER BY `o`.`OrderID`) IS NULL, 0, ( + SELECT TOP 1 ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND `o0`.`OrderID` > 10) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` < 10500 + ORDER BY `o`.`OrderID`)) AS `Order` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + """); + } + + [ConditionalTheory(Skip = "LibRed fails")] + public override async Task Select_nested_collection_multi_level5(bool isAsync) + { + await base.Select_nested_collection_multi_level5(isAsync); + + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 IIF(( + SELECT TOP 1 `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND (`o0`.`OrderID` <> ( + SELECT COUNT(*) + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID`) OR ( + SELECT COUNT(*) + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID`) IS NULL) + ORDER BY `o0`.`OrderID`, `o0`.`ProductID`) IS NULL, 0, ( + SELECT TOP 1 `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND (`o0`.`OrderID` <> ( + SELECT COUNT(*) + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID`) OR ( + SELECT COUNT(*) + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID`) IS NULL) + ORDER BY `o0`.`OrderID`, `o0`.`ProductID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` < 10500 + ORDER BY `o`.`OrderID`) IS NULL, 0, ( + SELECT TOP 1 IIF(( + SELECT TOP 1 `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND (`o0`.`OrderID` <> ( + SELECT COUNT(*) + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID`) OR ( + SELECT COUNT(*) + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID`) IS NULL) + ORDER BY `o0`.`OrderID`, `o0`.`ProductID`) IS NULL, 0, ( + SELECT TOP 1 `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND (`o0`.`OrderID` <> ( + SELECT COUNT(*) + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID`) OR ( + SELECT COUNT(*) + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID`) IS NULL) + ORDER BY `o0`.`OrderID`, `o0`.`ProductID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` < 10500 + ORDER BY `o`.`OrderID`)) AS `Order` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + [ConditionalTheory(Skip = "LibRed fails")] + public override async Task Select_nested_collection_multi_level6(bool isAsync) + { + await base.Select_nested_collection_multi_level6(isAsync); + + AssertSql( + """ + SELECT IIF(( + SELECT TOP 1 IIF(( + SELECT TOP 1 `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND `o0`.`OrderID` <> IIF(LEN(`c`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`c`.`CustomerID`))) + ORDER BY `o0`.`OrderID`, `o0`.`ProductID`) IS NULL, 0, ( + SELECT TOP 1 `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND `o0`.`OrderID` <> IIF(LEN(`c`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`c`.`CustomerID`))) + ORDER BY `o0`.`OrderID`, `o0`.`ProductID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` < 10500 + ORDER BY `o`.`OrderID`) IS NULL, 0, ( + SELECT TOP 1 IIF(( + SELECT TOP 1 `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND `o0`.`OrderID` <> IIF(LEN(`c`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`c`.`CustomerID`))) + ORDER BY `o0`.`OrderID`, `o0`.`ProductID`) IS NULL, 0, ( + SELECT TOP 1 `o0`.`ProductID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID` AND `o0`.`OrderID` <> IIF(LEN(`c`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`c`.`CustomerID`))) + ORDER BY `o0`.`OrderID`, `o0`.`ProductID`)) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` < 10500 + ORDER BY `o`.`OrderID`)) AS `Order` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Select_nested_collection_count_using_anonymous_type(bool isAsync) + { + await base.Select_nested_collection_count_using_anonymous_type(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Count` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + """); + } + + public override async Task New_date_time_in_anonymous_type_works(bool isAsync) + { + await base.New_date_time_in_anonymous_type_works(isAsync); + + AssertSql( + $""" + SELECT 1 + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + """); + } + + public override async Task Select_non_matching_value_types_int_to_long_introduces_explicit_cast(bool isAsync) + { + await base.Select_non_matching_value_types_int_to_long_introduces_explicit_cast(isAsync); + + AssertSql( + $""" + SELECT CLNG(`o`.`OrderID`) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_nullable_int_to_long_introduces_explicit_cast(bool isAsync) + { + await base.Select_non_matching_value_types_nullable_int_to_long_introduces_explicit_cast(isAsync); + + AssertSql( + """ + SELECT IIF(`o`.`EmployeeID` IS NULL, NULL, CLNG(`o`.`EmployeeID`)) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_nullable_int_to_int_doesnt_introduce_explicit_cast(bool isAsync) + { + await base.Select_non_matching_value_types_nullable_int_to_int_doesnt_introduce_explicit_cast(isAsync); + + AssertSql( + $""" + SELECT `o`.`EmployeeID` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_int_to_nullable_int_doesnt_introduce_explicit_cast(bool isAsync) + { + await base.Select_non_matching_value_types_int_to_nullable_int_doesnt_introduce_explicit_cast(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_from_binary_expression_introduces_explicit_cast(bool isAsync) + { + await base.Select_non_matching_value_types_from_binary_expression_introduces_explicit_cast(isAsync); + + AssertSql( + $""" + SELECT CLNG(`o`.`OrderID` + `o`.`OrderID`) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_from_binary_expression_nested_introduces_top_level_explicit_cast( + bool isAsync) + { + await base.Select_non_matching_value_types_from_binary_expression_nested_introduces_top_level_explicit_cast(isAsync); + + AssertSql( + $""" + SELECT CINT(CLNG(`o`.`OrderID`) + CLNG(`o`.`OrderID`)) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast1(bool isAsync) + { + await base.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast1(isAsync); + + AssertSql( + $""" + SELECT CLNG(-`o`.`OrderID`) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast2(bool isAsync) + { + await base.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast2(isAsync); + + AssertSql( + $""" + SELECT -CLNG(`o`.`OrderID`) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_from_length_introduces_explicit_cast(bool isAsync) + { + await base.Select_non_matching_value_types_from_length_introduces_explicit_cast(isAsync); + + AssertSql( + """ + SELECT CLNG(IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`)))) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_from_method_call_introduces_explicit_cast(bool isAsync) + { + await base.Select_non_matching_value_types_from_method_call_introduces_explicit_cast(isAsync); + + AssertSql( + """ + SELECT IIF(ABS(`o`.`OrderID`) IS NULL, NULL, CLNG(ABS(`o`.`OrderID`))) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_non_matching_value_types_from_anonymous_type_introduces_explicit_cast(bool isAsync) + { + await base.Select_non_matching_value_types_from_anonymous_type_introduces_explicit_cast(isAsync); + + AssertSql( + $""" + SELECT CLNG(`o`.`OrderID`) AS `LongOrder`, CINT(`o`.`OrderID`) AS `ShortOrder`, `o`.`OrderID` AS `Order` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'ALFKI' + ORDER BY `o`.`OrderID` + """); + } + + public override async Task Select_conditional_with_null_comparison_in_test(bool isAsync) + { + await base.Select_conditional_with_null_comparison_in_test(isAsync); + + AssertSql( + """ +SELECT IIF(`o`.`CustomerID` IS NULL, TRUE, `o`.`OrderID` < 100) +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Select_over_10_nested_ternary_condition(bool isAsync) + { + await base.Select_over_10_nested_ternary_condition(isAsync); + + AssertSql( +""" +SELECT IIF(`c`.`CustomerID` = '1', '01', IIF(`c`.`CustomerID` = '2', '02', IIF(`c`.`CustomerID` = '3', '03', IIF(`c`.`CustomerID` = '4', '04', IIF(`c`.`CustomerID` = '5', '05', IIF(`c`.`CustomerID` = '6', '06', IIF(`c`.`CustomerID` = '7', '07', IIF(`c`.`CustomerID` = '8', '08', IIF(`c`.`CustomerID` = '9', '09', IIF(`c`.`CustomerID` = '10', '10', IIF(`c`.`CustomerID` = '11', '11', NULL))))))))))) +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_conditional_drops_false(bool isAsync) + { + await base.Select_conditional_drops_false(isAsync); + + AssertSql( + """ +SELECT IIF((`o`.`OrderID` MOD 2) = 0, `o`.`OrderID`, -`o`.`OrderID`) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_conditional_terminates_at_true(bool isAsync) + { + await base.Select_conditional_terminates_at_true(isAsync); + + AssertSql( + """ +SELECT IIF((`o`.`OrderID` MOD 2) = 0, `o`.`OrderID`, 0) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_conditional_flatten_nested_results(bool isAsync) + { + await base.Select_conditional_flatten_nested_results(isAsync); + + AssertSql( + """ +SELECT IIF((`o`.`OrderID` MOD 2) = 0 AND (`o`.`OrderID` MOD 5) = 0, -`o`.`OrderID`, `o`.`OrderID`) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_conditional_flatten_nested_tests(bool isAsync) + { + await base.Select_conditional_flatten_nested_tests(isAsync); + + AssertSql( + """ +SELECT IIF((`o`.`OrderID` MOD 2) <> 0, `o`.`OrderID`, -`o`.`OrderID`) +FROM `Orders` AS `o` +"""); + } + + public override async Task Projection_in_a_subquery_should_be_liftable(bool isAsync) + { + await base.Projection_in_a_subquery_should_be_liftable(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='1'")} + + SELECT `e`.`EmployeeID` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + """); + } + + public override async Task Projection_containing_DateTime_subtraction(bool isAsync) + { + await base.Projection_containing_DateTime_subtraction(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + """); + } + + [ConditionalTheory(Skip = "`SELECT (SELECT TOP 1) FROM` is not supported by LibRed.")] + public override async Task Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault(bool isAsync) + { + await base.Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT TOP 1 `t`.`CustomerID` + FROM ( + SELECT TOP 1 `o`.`CustomerID`, `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + ) AS `t` + ORDER BY `t`.`OrderID`) + FROM `Customers` AS `c` + """); + } + + public override async Task Project_single_element_from_collection_with_OrderBy_Take_OrderBy_and_FirstOrDefault(bool async) + { + await base.Project_single_element_from_collection_with_OrderBy_Take_OrderBy_and_FirstOrDefault(async); + + AssertSql( + """ +SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderID]) AS [row] + FROM [Orders] AS [o] + ) AS [o0] + WHERE [o0].[row] <= 1 +) AS [o1] ON [c].[CustomerID] = [o1].[CustomerID] +"""); + } + + [ConditionalTheory(Skip = "`SELECT (SELECT TOP 1) FROM` is not supported by LibRed.")] + public override async Task Project_single_element_from_collection_with_OrderBy_Skip_and_FirstOrDefault(bool isAsync) + { + await base.Project_single_element_from_collection_with_OrderBy_Skip_and_FirstOrDefault(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + SKIP 1 FETCH NEXT 1 ROWS ONLY) + FROM `Customers` AS `c` + """); + } + + public override async Task Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault(bool isAsync) + { + await base.Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault(isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +FROM `Customers` AS `c` +"""); + } + + [ConditionalTheory(Skip = "`SELECT (SELECT TOP 1) FROM` is not supported by LibRed.")] + public override async Task + Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault_followed_by_projecting_length(bool isAsync) + { + await base.Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault_followed_by_projecting_length( + isAsync); + + AssertSql( + $""" + SELECT ( + SELECT TOP 1 CAST(LEN(`t`.`CustomerID`) AS int) + FROM ( + SELECT DISTINCT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ) AS `t`) + FROM `Customers` AS `c` + """); + } + + [ConditionalTheory(Skip = "`SELECT (SELECT TOP 1) FROM` is not supported by LibRed.")] + public override async Task Project_single_element_from_collection_with_OrderBy_Take_and_SingleOrDefault(bool isAsync) + { + await base.Project_single_element_from_collection_with_OrderBy_Take_and_SingleOrDefault(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT TOP 1 `t`.`CustomerID` + FROM ( + SELECT TOP 1 `o`.`CustomerID`, `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + ) AS `t` + ORDER BY `t`.`OrderID`) + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + [ConditionalTheory(Skip = "`SELECT (SELECT TOP 1) FROM` is not supported by LibRed.")] + public override async Task Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault_with_parameter(bool isAsync) + { + await base.Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault_with_parameter(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__i_0='1'")} + + SELECT ( + SELECT TOP 1 `t`.`CustomerID` + FROM ( + SELECT TOP {AssertSqlHelper.Parameter("@__i_0")} `o`.`CustomerID`, `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + ) AS `t` + ORDER BY `t`.`OrderID`) + FROM `Customers` AS `c` + """); + } + + [ConditionalTheory(Skip = "`SELECT (SELECT TOP 1) FROM` is not supported by LibRed.")] + public override async Task Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault(bool isAsync) + { + await base.Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT TOP 1 `t`.`CustomerID` + FROM ( + SELECT TOP 2 `o`.`CustomerID`, `o`.`OrderID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`, `o`.`OrderDate` DESC + ) AS `t` + ORDER BY `t`.`OrderID`, `t`.`OrderDate` DESC) + FROM `Customers` AS `c` + """); + } + + public override async Task + Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_followed_by_projection_of_length_property( + bool isAsync) + { + await base + .Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_followed_by_projection_of_length_property( + isAsync); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`))) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`, `o`.`OrderDate` DESC) +FROM `Customers` AS `c` +"""); + } + + [ConditionalTheory(Skip = "`SELECT (SELECT TOP 1) FROM` is not supported by LibRed.")] + public override async Task Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_2(bool isAsync) + { + await base.Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_2(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT TOP 1 `t`.`CustomerID` + FROM ( + SELECT TOP 2 `o`.`CustomerID`, `o`.`OrderID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`CustomerID`, `o`.`OrderDate` DESC + ) AS `t` + ORDER BY `t`.`CustomerID`, `t`.`OrderDate` DESC) + FROM `Customers` AS `c` + """); + } + + [ConditionalTheory(Skip = "`SELECT (SELECT TOP 1) FROM` is not supported by LibRed.")] + public override async Task Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault(bool isAsync) + { + await base.Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT TOP 1 `t`.`OrderID` + FROM ( + SELECT TOP 1 `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID` AS `ProductID0`, `p`.`ProductName` + FROM `Order Details` AS `o` + INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` + WHERE `o0`.`OrderID` = `o`.`OrderID` + ORDER BY `p`.`ProductName` + ) AS `t` + ORDER BY `t`.`ProductName`) + FROM `Orders` AS `o0` + WHERE `o0`.`OrderID` < 10300 + """); + } + + public override async Task Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault_2( + bool isAsync) + { + await base.Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault_2(isAsync); + + AssertSql( + $""" + SELECT `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` + FROM `Orders` AS `o` + OUTER APPLY ( + SELECT TOP 1 `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`ProductID0`, `t`.`ProductName` + FROM ( + SELECT TOP 1 `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`ProductName` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` + WHERE `o`.`OrderID` = `o0`.`OrderID` + ORDER BY `p`.`ProductName` + ) AS `t` + ORDER BY `t`.`ProductName` + ) AS `t0` + WHERE `o`.`OrderID` < 10250 + """); + } + + public override async Task Select_datetime_year_component(bool isAsync) + { + await base.Select_datetime_year_component(isAsync); + + AssertSql( + $""" + SELECT DATEPART('yyyy', `o`.`OrderDate`) + FROM `Orders` AS `o` + """); + } + + public override async Task Select_datetime_month_component(bool isAsync) + { + await base.Select_datetime_month_component(isAsync); + + AssertSql( + $""" + SELECT DATEPART('m', `o`.`OrderDate`) + FROM `Orders` AS `o` + """); + } + + public override async Task Select_datetime_day_of_year_component(bool isAsync) + { + await base.Select_datetime_day_of_year_component(isAsync); + + AssertSql( + $""" + SELECT DATEPART('y', `o`.`OrderDate`) + FROM `Orders` AS `o` + """); + } + + public override async Task Select_datetime_day_component(bool isAsync) + { + await base.Select_datetime_day_component(isAsync); + + AssertSql( + $""" + SELECT DATEPART('d', `o`.`OrderDate`) + FROM `Orders` AS `o` + """); + } + + public override async Task Select_datetime_hour_component(bool isAsync) + { + await base.Select_datetime_hour_component(isAsync); + + AssertSql( + $""" + SELECT DATEPART('h', `o`.`OrderDate`) + FROM `Orders` AS `o` + """); + } + + public override async Task Select_datetime_minute_component(bool isAsync) + { + await base.Select_datetime_minute_component(isAsync); + + AssertSql( + $""" + SELECT DATEPART('n', `o`.`OrderDate`) + FROM `Orders` AS `o` + """); + } + + public override async Task Select_datetime_second_component(bool isAsync) + { + await base.Select_datetime_second_component(isAsync); + + AssertSql( + $""" + SELECT DATEPART('s', `o`.`OrderDate`) + FROM `Orders` AS `o` + """); + } + + public override async Task Select_datetime_millisecond_component(bool isAsync) + { + await base.Select_datetime_millisecond_component(isAsync); + + AssertSql( +""" +SELECT `o`.`OrderDate` +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_byte_constant(bool isAsync) + { + await base.Select_byte_constant(isAsync); + + AssertSql( + """ +SELECT IIF(`c`.`CustomerID` = 'ALFKI', CBYTE(1), CBYTE(2)) +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_short_constant(bool isAsync) + { + await base.Select_short_constant(isAsync); + + AssertSql( + $""" + SELECT IIF(`c`.`CustomerID` = 'ALFKI', CINT(1), CINT(2)) + FROM `Customers` AS `c` + """); + } + + public override async Task Select_bool_constant(bool isAsync) + { + await base.Select_bool_constant(isAsync); + + AssertSql( + $""" + SELECT IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) + FROM `Customers` AS `c` + """); + } + + public override async Task Anonymous_projection_AsNoTracking_Selector(bool isAsync) + { + await base.Anonymous_projection_AsNoTracking_Selector(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderDate` + FROM `Orders` AS `o` + """); + } + + public override async Task Anonymous_projection_with_repeated_property_being_ordered(bool isAsync) + { + await base.Anonymous_projection_with_repeated_property_being_ordered(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `A` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Anonymous_projection_with_repeated_property_being_ordered_2(bool isAsync) + { + await base.Anonymous_projection_with_repeated_property_being_ordered_2(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID` AS `A`, `o`.`CustomerID` AS `B` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ORDER BY `o`.`CustomerID` + """); + } + + public override async Task Select_GetValueOrDefault_on_DateTime(bool isAsync) + { + await base.Select_GetValueOrDefault_on_DateTime(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderDate` + FROM `Orders` AS `o` + """); + } + + public override async Task Select_GetValueOrDefault_on_DateTime_with_null_values(bool isAsync) + { + await base.Select_GetValueOrDefault_on_DateTime_with_null_values(isAsync); + + AssertSql( + """ + SELECT `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task Cast_on_top_level_projection_brings_explicit_Cast(bool isAsync) + { + await base.Cast_on_top_level_projection_brings_explicit_Cast(isAsync); + + AssertSql( + $""" + SELECT CDBL(`o`.`OrderID`) + FROM `Orders` AS `o` + """); + } + + public override async Task Projecting_nullable_struct(bool isAsync) + { + await base.Projecting_nullable_struct(isAsync); + + AssertSql( + """ +SELECT `o`.`CustomerID`, `o`.`CustomerID` = 'ALFKI' AND `o`.`CustomerID` IS NOT NULL, `o`.`OrderID`, IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`))) +FROM `Orders` AS `o` +"""); + } + + public override async Task Multiple_select_many_with_predicate(bool isAsync) + { + await base.Multiple_select_many_with_predicate(isAsync); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM (`Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + WHERE (CDBL(`o0`.`Discount`) >= 0.25) AND (`o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL) + """); + } + + public override async Task SelectMany_without_result_selector_naked_collection_navigation(bool isAsync) + { + await base.SelectMany_without_result_selector_naked_collection_navigation(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task SelectMany_without_result_selector_collection_navigation_composed(bool isAsync) + { + await base.SelectMany_without_result_selector_collection_navigation_composed(isAsync); + + AssertSql( + $""" + SELECT `o`.`CustomerID` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + """); + } + + public override async Task SelectMany_correlated_with_outer_1(bool isAsync) + { + await base.SelectMany_correlated_with_outer_1(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`City` AS `o` + FROM `Customers` AS `c` + CROSS APPLY ( + SELECT `c`.`City`, `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ) AS `t` + """); + } + + public override async Task SelectMany_correlated_with_outer_2(bool isAsync) + { + await base.SelectMany_correlated_with_outer_2(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + FROM `Customers` AS `c` + CROSS APPLY ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`City` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `c`.`City`, `o`.`OrderID` + ) AS `t` + """); + } + + public override async Task SelectMany_correlated_with_outer_3(bool isAsync) + { + await base.SelectMany_correlated_with_outer_3(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`City` AS `o` + FROM `Customers` AS `c` + OUTER APPLY ( + SELECT `c`.`City`, `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ) AS `t` + """); + } + + public override async Task SelectMany_correlated_with_outer_4(bool isAsync) + { + await base.SelectMany_correlated_with_outer_4(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + FROM `Customers` AS `c` + OUTER APPLY ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`City` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `c`.`City`, `o`.`OrderID` + ) AS `t` + """); + } + + public override async Task SelectMany_correlated_with_outer_5(bool async) + { + await base.SelectMany_correlated_with_outer_5(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[City] AS [o] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT [c].[City] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] <> [o].[CustomerID] OR [o].[CustomerID] IS NULL +) AS [t] +"""); + } + + public override async Task SelectMany_correlated_with_outer_6(bool async) + { + await base.SelectMany_correlated_with_outer_6(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(2) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] <> [o].[CustomerID] OR [o].[CustomerID] IS NULL + ORDER BY [c].[City], [o].[OrderID] +) AS [t] +"""); + } + + public override async Task SelectMany_correlated_with_outer_7(bool async) + { + await base.SelectMany_correlated_with_outer_7(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(2) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE CAST(LEN([c].[CustomerID]) AS int) >= CAST(LEN([o].[CustomerID]) AS int) + ORDER BY [c].[City], [o].[OrderID] +) AS [t] +"""); + } + + public override async Task SelectMany_with_multiple_Take(bool async) + { + await base.SelectMany_with_multiple_Take(async); + + AssertSql( + """ +SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate] +FROM [Customers] AS [c] +INNER JOIN ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderID]) AS [row] + FROM [Orders] AS [o] + ) AS [o0] + WHERE [o0].[row] <= 3 +) AS [o1] ON [c].[CustomerID] = [o1].[CustomerID] +"""); + } + + public override async Task SelectMany_with_nested_DefaultIfEmpty(bool async) + { + await base.SelectMany_with_nested_DefaultIfEmpty(async); + + AssertSql( + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`CustomerID` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + WHERE FALSE +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` +"""); + } + + public override async Task Select_with_multiple_Take(bool async) + { + await base.Select_with_multiple_Take(async); + + AssertSql( + """ +@p1='3' +@p='5' + +SELECT TOP @p1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` +"""); + } + + /*public override async Task SelectMany_with_nested_DefaultIfEmpty(bool async) + { + await base.SelectMany_with_nested_DefaultIfEmpty(async); + + AssertSql( + """ +SELECT [s].[OrderID], [s].[ProductID], [s].[Discount], [s].[Quantity], [s].[UnitPrice] +FROM [Customers] AS [c] +INNER JOIN ( + SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice], [o].[CustomerID] + FROM [Orders] AS [o] + LEFT JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE 0 = 1 +) AS [s] ON [c].[CustomerID] = [s].[CustomerID] +"""); + }*/ + + public override async Task FirstOrDefault_over_empty_collection_of_value_type_returns_correct_results(bool isAsync) + { + await base.FirstOrDefault_over_empty_collection_of_value_type_returns_correct_results(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, IIF(( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) IS NULL, 0, ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`)) AS `OrderId` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'FISSA' + """); + } + + public override async Task Project_non_nullable_value_after_FirstOrDefault_on_empty_collection(bool async) + { + await base.Project_non_nullable_value_after_FirstOrDefault_on_empty_collection(async); + + AssertSql( +""" +SELECT ( + SELECT TOP 1 IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`))) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'John Doe') +FROM `Customers` AS `c` +"""); + } + + public override Task Member_binding_after_ctor_arguments_fails_with_client_eval(bool async) + => AssertTranslationFailed(() => base.Member_binding_after_ctor_arguments_fails_with_client_eval(async)); + + public override async Task Filtered_collection_projection_is_tracked(bool isAsync) + { + await base.Filtered_collection_projection_is_tracked(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 11000 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Filtered_collection_projection_with_to_list_is_tracked(bool isAsync) + { + await base.Filtered_collection_projection_with_to_list_is_tracked(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 11000 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task SelectMany_with_collection_being_correlated_subquery_which_references_inner_and_outer_entity( + bool isAsync) + { + await base.SelectMany_with_collection_being_correlated_subquery_which_references_inner_and_outer_entity(isAsync); + + AssertSql( + $""" + SELECT `t`.`CustomerID` AS `OrderProperty`, `t`.`CustomerID0` AS `CustomerProperty` + FROM `Customers` AS `c` + CROSS APPLY ( + SELECT `o`.`CustomerID`, `c`.`CustomerID` AS `CustomerID0`, `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ) AS `t` + """); + } + + public override async Task + SelectMany_with_collection_being_correlated_subquery_which_references_non_mapped_properties_from_inner_and_outer_entity( + bool isAsync) + { + await AssertUnableToTranslateEFProperty( + () => base + .SelectMany_with_collection_being_correlated_subquery_which_references_non_mapped_properties_from_inner_and_outer_entity( + isAsync)); + + AssertSql(); + } + + public override async Task Select_with_complex_expression_that_can_be_funcletized(bool isAsync) + { + await base.Select_with_complex_expression_that_can_be_funcletized(isAsync); + + AssertSql( + """ +SELECT IIF(`c`.`Region` IS NOT NULL, 0, NULL) +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(bool isAsync) + { + await base.Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Select_entity_compared_to_null(bool isAsync) + { + await base.Select_entity_compared_to_null(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID` IS NULL +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Explicit_cast_in_arithmetic_operation_is_preserved(bool async) + { + await base.Explicit_cast_in_arithmetic_operation_is_preserved(async); + + AssertSql( + """ +SELECT CDEC(`o`.`OrderID`) / CDEC(`o`.`OrderID` + 1000) +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10250 +"""); + } + + public override async Task SelectMany_whose_selector_references_outer_source(bool isAsync) + { + await base.SelectMany_whose_selector_references_outer_source(isAsync); + + AssertSql( + $""" + SELECT `t`.`OrderDate`, `t`.`City` AS `CustomerCity` + FROM `Customers` AS `c` + CROSS APPLY ( + SELECT `o`.`OrderDate`, `c`.`City`, `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ) AS `t` + """); + } + + public override async Task Collection_FirstOrDefault_with_entity_equality_check_in_projection(bool isAsync) + { + await base.Collection_FirstOrDefault_with_entity_equality_check_in_projection(isAsync); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) OR NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) +FROM `Customers` AS `c` +"""); + } + + public override async Task Collection_FirstOrDefault_with_nullable_unsigned_int_column(bool isAsync) + { + await base.Collection_FirstOrDefault_with_nullable_unsigned_int_column(isAsync); + + AssertSql( + $""" + SELECT ( + SELECT TOP 1 `o`.`EmployeeID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) + FROM `Customers` AS `c` + """); + } + + public override async Task ToList_Count_in_projection_works(bool isAsync) + { + await base.ToList_Count_in_projection_works(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Count` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + """); + } + + public override async Task LastOrDefault_member_access_in_projection_translates_to_server(bool isAsync) + { + await base.LastOrDefault_member_access_in_projection_translates_to_server(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) AS `OrderDate` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + """); + } + + public override async Task Projection_with_parameterized_constructor(bool async) + { + await base.Projection_with_parameterized_constructor(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Projection_with_parameterized_constructor_with_member_assignment(bool async) + { + await base.Projection_with_parameterized_constructor_with_member_assignment(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Collection_projection_AsNoTracking_OrderBy(bool async) + { + await base.Collection_projection_AsNoTracking_OrderBy(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `o`.`OrderDate`, `o`.`OrderID` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Coalesce_over_nullable_uint(bool async) + { + await base.Coalesce_over_nullable_uint(async); + + AssertSql( + """ + SELECT IIF(`o`.`EmployeeID` IS NULL, 0, `o`.`EmployeeID`) + FROM `Orders` AS `o` + """); + } + + public override async Task Project_uint_through_collection_FirstOrDefault(bool async) + { + await base.Project_uint_through_collection_FirstOrDefault(async); + + AssertSql( + """ + SELECT ( + SELECT TOP 1 `o`.`EmployeeID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) + FROM `Customers` AS `c` + """); + } + + public override async Task Project_keyless_entity_FirstOrDefault_without_orderby(bool async) + { + await base.Project_keyless_entity_FirstOrDefault_without_orderby(async); + + AssertSql( + """ + SELECT `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle` + FROM `Customers` AS `c` + LEFT JOIN ( + SELECT `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle` + FROM ( + SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, ROW_NUMBER() OVER(PARTITION BY `m`.`CompanyName` ORDER BY (SELECT 1)) AS `row` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` + ) AS `m` + ) AS `t` + WHERE `t`.`row` <= 1 + ) AS `t0` ON `c`.`CompanyName` = `t0`.`CompanyName` + """); + } + + public override async Task Reverse_changes_asc_order_to_desc(bool async) + { + await base.Reverse_changes_asc_order_to_desc(async); + + AssertSql( + """ + SELECT `e`.`EmployeeID` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` DESC + """); + } + + public override async Task Reverse_changes_desc_order_to_asc(bool async) + { + await base.Reverse_changes_desc_order_to_asc(async); + + AssertSql( + """ + SELECT `e`.`EmployeeID` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` + """); + } + + public override async Task Reverse_after_multiple_orderbys(bool async) + { + await base.Reverse_after_multiple_orderbys(async); + + AssertSql( +""" +SELECT `e`.`EmployeeID` +FROM `Employees` AS `e` +ORDER BY `e`.`EmployeeID` +"""); + } + + public override async Task Reverse_after_orderby_thenby(bool async) + { + await base.Reverse_after_orderby_thenby(async); + + AssertSql( +""" +SELECT `e`.`EmployeeID` +FROM `Employees` AS `e` +ORDER BY `e`.`EmployeeID` DESC, `e`.`City` +"""); + } + + public override async Task Reverse_in_subquery_via_pushdown(bool async) + { + await base.Reverse_in_subquery_via_pushdown(async); + + AssertSql( + """ +@p='5' + +SELECT `e1`.`EmployeeID`, `e1`.`City` +FROM ( + SELECT DISTINCT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` + FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` DESC + ) AS `e0` +) AS `e1` +"""); + } + + public override async Task Reverse_after_orderBy_and_take(bool async) + { + await base.Reverse_after_orderBy_and_take(async); + + AssertSql( + """ +@p='5' + +SELECT `e0`.`EmployeeID`, `e0`.`City` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e0` +ORDER BY `e0`.`EmployeeID` DESC +"""); + } + + public override async Task Reverse_in_join_outer(bool async) + { + await base.Reverse_in_join_outer(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `o`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c`.`City`, `c`.`CustomerID` DESC +"""); + } + + public override async Task Reverse_in_join_outer_with_take(bool async) + { + await base.Reverse_in_join_outer_with_take(async); + + AssertSql( + """ +@p='20' + +SELECT `c0`.`CustomerID`, `o`.`OrderID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Reverse_in_join_inner(bool async) + { + await base.Reverse_in_join_inner(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `o`.`OrderID` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Reverse_in_join_inner_with_skip(bool async) + { + await base.Reverse_in_join_inner_with_skip(async); + + AssertSql( + """ +@__p_0='2' + +SELECT [c].[CustomerID], [t].[OrderID] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [o].[OrderID], [o].[CustomerID] + FROM [Orders] AS [o] + ORDER BY [o].[OrderID] DESC + OFFSET @__p_0 ROWS +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task Reverse_in_SelectMany(bool async) + { + await base.Reverse_in_SelectMany(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c`.`CustomerID` DESC +"""); + } + + public override async Task Reverse_in_SelectMany_with_Take(bool async) + { + await base.Reverse_in_SelectMany_with_Take(async); + + AssertSql( + """ +@__p_0='20' + +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] +FROM ( + SELECT TOP(@__p_0) [c].[CustomerID] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] DESC +) AS [t] +CROSS APPLY ( + SELECT TOP(30) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [t].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderID] DESC +) AS [t0] +ORDER BY [t].[CustomerID] DESC +"""); + } + + public override async Task Reverse_in_projection_subquery(bool async) + { + await base.Reverse_in_projection_subquery(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY [Orders] AS [o] +ORDER BY [c].[CustomerID], [o].[OrderDate] DESC, [o].[OrderID] +"""); + } + + public override async Task Reverse_in_projection_subquery_single_result(bool async) + { + await base.Reverse_in_projection_subquery_single_result(async); + + AssertSql( + """ +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(1) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + ORDER BY [o].[OrderDate] DESC, [o].[OrderID] +) AS [t] +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task Reverse_in_projection_scalar_subquery(bool async) + { + await base.Reverse_in_projection_scalar_subquery(async); + + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderDate` DESC, `o`.`OrderID`) IS NULL, 0, ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderDate` DESC, `o`.`OrderID`)) +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Projection_AsEnumerable_projection(bool async) + { + await base.Projection_AsEnumerable_projection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `o0`.`OrderID` < 10750 +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`c`.`CustomerID` LIKE 'A%') AND ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID` AND `o`.`OrderID` < 11000) > 0 +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Projection_custom_type_in_both_sides_of_ternary(bool async) + { + await base.Projection_custom_type_in_both_sides_of_ternary(async); + + AssertSql( + """ +SELECT `c`.`City` = 'Seattle' AND `c`.`City` IS NOT NULL +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Projecting_multiple_collection_with_same_constant_works(bool async) + { + await base.Projecting_multiple_collection_with_same_constant_works(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, 1, `o`.`OrderID`, `o0`.`OrderID` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Custom_projection_reference_navigation_PK_to_FK_optimization(bool async) + { + await base.Custom_projection_reference_navigation_PK_to_FK_optimization(async); + + AssertSql( + """ + SELECT `o`.`OrderID`, `c`.`CustomerID`, `c`.`City`, `o`.`OrderDate` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + """); + } + + public override async Task Projecting_Length_of_a_string_property_after_FirstOrDefault_on_correlated_collection(bool async) + { + await base.Projecting_Length_of_a_string_property_after_FirstOrDefault_on_correlated_collection(async); + + AssertSql( + """ + SELECT ( + SELECT TOP 1 IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`))) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Projecting_count_of_navigation_which_is_generic_list(bool async) + { + await base.Projecting_count_of_navigation_which_is_generic_list(async); + + AssertSql( + """ + SELECT ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Projecting_count_of_navigation_which_is_generic_collection(bool async) + { + await base.Projecting_count_of_navigation_which_is_generic_collection(async); + + AssertSql( + """ + SELECT ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Projecting_count_of_navigation_which_is_generic_collection_using_convert(bool async) + { + await base.Projecting_count_of_navigation_which_is_generic_collection_using_convert(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Projection_take_projection_doesnt_project_intermittent_column(bool async) + { + await base.Projection_take_projection_doesnt_project_intermittent_column(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p (`c`.`CustomerID` & ' ') & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `Aggregate` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Projection_skip_projection_doesnt_project_intermittent_column(bool async) + { + await base.Projection_skip_projection_doesnt_project_intermittent_column(async); + + AssertSql( + """ + @__p_0='7' + SELECT (`c`.`CustomerID` + ' ') + COALESCE(`c`.`City`, '') AS `Aggregate` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + OFFSET @__p_0 ROWS + """); + } + + public override async Task Projection_Distinct_projection_preserves_columns_used_for_distinct_in_subquery(bool async) + { + await base.Projection_Distinct_projection_preserves_columns_used_for_distinct_in_subquery(async); + + AssertSql( + """ +SELECT (IIF(`c0`.`FirstLetter` IS NULL, '', `c0`.`FirstLetter`) & ' ') & `c0`.`Foo` AS `Aggregate` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, MID(`c`.`CustomerID`, 0 + 1, 1) AS `FirstLetter`, 'Foo' AS `Foo` + FROM `Customers` AS `c` +) AS `c0` +"""); + } + + public override async Task Projection_take_predicate_projection(bool async) + { + await base.Projection_take_predicate_projection(async); + + AssertSql( + """ +@p='10' + +SELECT (`c0`.`CustomerID` & ' ') & IIF(`c0`.`City` IS NULL, '', `c0`.`City`) AS `Aggregate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`City` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +WHERE `c0`.`CustomerID` LIKE 'A%' +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Do_not_erase_projection_mapping_when_adding_single_projection(bool async) + { + await base.Do_not_erase_projection_mapping_when_adding_single_projection(async); + + AssertSql( + """ + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`ProductID0`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice0`, `t`.`UnitsInStock`, `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`ProductID0`, `t2`.`OrderID`, `t2`.`ProductID`, `t2`.`Discount`, `t2`.`Quantity`, `t2`.`UnitPrice`, `t2`.`ProductID0`, `t2`.`Discontinued`, `t2`.`ProductName`, `t2`.`SupplierID`, `t2`.`UnitPrice0`, `t2`.`UnitsInStock`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock` + FROM `Orders` AS `o` + LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` + ) AS `t` ON `o`.`OrderID` = `t`.`OrderID` + LEFT JOIN ( + SELECT `t1`.`OrderID`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice`, `t1`.`ProductID0`, `t1`.`Discontinued`, `t1`.`ProductName`, `t1`.`SupplierID`, `t1`.`UnitPrice0`, `t1`.`UnitsInStock` + FROM ( + SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice`, `p0`.`ProductID` AS `ProductID0`, `p0`.`Discontinued`, `p0`.`ProductName`, `p0`.`SupplierID`, `p0`.`UnitPrice` AS `UnitPrice0`, `p0`.`UnitsInStock`, ROW_NUMBER() OVER(PARTITION BY `o1`.`OrderID` ORDER BY `o1`.`OrderID`, `o1`.`ProductID`, `p0`.`ProductID`) AS `row` + FROM `Order Details` AS `o1` + INNER JOIN `Products` AS `p0` ON `o1`.`ProductID` = `p0`.`ProductID` + WHERE `o1`.`UnitPrice` > 10.0 + ) AS `t1` + WHERE `t1`.`row` <= 1 + ) AS `t0` ON `o`.`OrderID` = `t0`.`OrderID` + LEFT JOIN ( + SELECT `o2`.`OrderID`, `o2`.`ProductID`, `o2`.`Discount`, `o2`.`Quantity`, `o2`.`UnitPrice`, `p1`.`ProductID` AS `ProductID0`, `p1`.`Discontinued`, `p1`.`ProductName`, `p1`.`SupplierID`, `p1`.`UnitPrice` AS `UnitPrice0`, `p1`.`UnitsInStock` + FROM `Order Details` AS `o2` + INNER JOIN `Products` AS `p1` ON `o2`.`ProductID` = `p1`.`ProductID` + WHERE `o2`.`UnitPrice` < 10.0 + ) AS `t2` ON `o`.`OrderID` = `t2`.`OrderID` + WHERE `o`.`OrderID` < 10350 + ORDER BY `o`.`OrderID`, `t`.`OrderID`, `t`.`ProductID`, `t`.`ProductID0`, `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`ProductID0`, `t2`.`OrderID`, `t2`.`ProductID` + """); + } + + public override async Task Ternary_in_client_eval_assigns_correct_types(bool async) + { + await base.Ternary_in_client_eval_assigns_correct_types(async); + + AssertSql( + """ +SELECT `o`.`CustomerID`, `o`.`OrderDate` IS NOT NULL, `o`.`OrderDate`, `o`.`OrderID` - 10000, `o`.`OrderDate` IS NULL +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10300 +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Projecting_after_navigation_and_distinct(bool async) + { + await base.Projecting_after_navigation_and_distinct(async); + + AssertSql( + """ + SELECT `t`.`CustomerID`, `t0`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderDate` + FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `t` + OUTER APPLY ( + SELECT `t`.`CustomerID`, `o0`.`OrderID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE ((`t`.`CustomerID` IS NOT NULL) AND (`t`.`CustomerID` = `o0`.`CustomerID`)) AND `o0`.`OrderID` IN (10248, 10249, 10250) + ) AS `t0` + ORDER BY `t`.`CustomerID`, `t0`.`OrderID` + """); + } + + public override async Task Correlated_collection_after_distinct_with_complex_projection_containing_original_identifier(bool async) + { + await base.Correlated_collection_after_distinct_with_complex_projection_containing_original_identifier(async); + + AssertSql( + """ + SELECT `t`.`OrderID`, `t`.`Complex`, `t0`.`Outer`, `t0`.`Inner`, `t0`.`OrderDate` + FROM ( + SELECT DISTINCT `o`.`OrderID`, DATEPART(month, `o`.`OrderDate`) AS `Complex` + FROM `Orders` AS `o` + ) AS `t` + OUTER APPLY ( + SELECT `t`.`OrderID` AS `Outer`, `o0`.`OrderID` AS `Inner`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE (`o0`.`OrderID` = `t`.`OrderID`) AND `o0`.`OrderID` IN (10248, 10249, 10250) + ) AS `t0` + ORDER BY `t`.`OrderID` + """); + } + + public override async Task Correlated_collection_after_distinct_not_containing_original_identifier(bool async) + { + await base.Correlated_collection_after_distinct_not_containing_original_identifier(async); + + AssertSql( + """ + SELECT `t`.`OrderDate`, `t`.`CustomerID`, `t0`.`Outer1`, `t0`.`Outer2`, `t0`.`Inner`, `t0`.`OrderDate` + FROM ( + SELECT DISTINCT `o`.`OrderDate`, `o`.`CustomerID` + FROM `Orders` AS `o` + ) AS `t` + OUTER APPLY ( + SELECT `t`.`OrderDate` AS `Outer1`, `t`.`CustomerID` AS `Outer2`, `o0`.`OrderID` AS `Inner`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE ((`o0`.`CustomerID` = `t`.`CustomerID`) OR ((`o0`.`CustomerID` IS NULL) AND (`t`.`CustomerID` IS NULL))) AND `o0`.`OrderID` IN (10248, 10249, 10250) + ) AS `t0` + ORDER BY `t`.`OrderDate`, `t`.`CustomerID` + """); + } + + public override async Task Correlated_collection_after_distinct_with_complex_projection_not_containing_original_identifier(bool async) + { + await base.Correlated_collection_after_distinct_with_complex_projection_not_containing_original_identifier(async); + + AssertSql( + """ + SELECT `t`.`OrderDate`, `t`.`CustomerID`, `t`.`Complex`, `t0`.`Outer1`, `t0`.`Outer2`, `t0`.`Outer3`, `t0`.`Inner`, `t0`.`OrderDate` + FROM ( + SELECT DISTINCT `o`.`OrderDate`, `o`.`CustomerID`, DATEPART(month, `o`.`OrderDate`) AS `Complex` + FROM `Orders` AS `o` + ) AS `t` + OUTER APPLY ( + SELECT `t`.`OrderDate` AS `Outer1`, `t`.`CustomerID` AS `Outer2`, `t`.`Complex` AS `Outer3`, `o0`.`OrderID` AS `Inner`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `o0`.`OrderID` IN (10248, 10249, 10250) AND ((`t`.`CustomerID` = `o0`.`CustomerID`) OR (`t`.`CustomerID` IS NULL AND `o0`.`CustomerID` IS NULL)) + ) AS `t0` + ORDER BY `t`.`OrderDate`, `t`.`CustomerID`, `t`.`Complex`, `t0`.`Inner` + """); + } + + public override async Task Correlated_collection_after_groupby_with_complex_projection_containing_original_identifier(bool async) + { + await base.Correlated_collection_after_groupby_with_complex_projection_containing_original_identifier(async); + + AssertSql( + """ + SELECT `t`.`OrderID`, `t`.`c`, `t0`.`Outer`, `t0`.`Inner`, `t0`.`OrderDate` + FROM ( + SELECT `o`.`OrderID`, DATEPART(month, `o`.`OrderDate`) AS `c` + FROM `Orders` AS `o` + GROUP BY `o`.`OrderID`, DATEPART(month, `o`.`OrderDate`) + ) AS `t` + OUTER APPLY ( + SELECT `t`.`OrderID` AS `Outer`, `o0`.`OrderID` AS `Inner`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE (`o0`.`OrderID` = `t`.`OrderID`) AND `o0`.`OrderID` IN (10248, 10249, 10250) + ) AS `t0` + ORDER BY `t`.`OrderID` + """); + } + + public override async Task Select_nested_collection_deep(bool async) + { + await base.Select_nested_collection_deep(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0`, `t0`.`OrderID00` + FROM `Customers` AS `c` + OUTER APPLY ( + SELECT `o`.`OrderID`, `t`.`OrderID` AS `OrderID0`, `t`.`OrderID0` AS `OrderID00` + FROM `Orders` AS `o` + OUTER APPLY ( + SELECT `o`.`OrderID`, `o0`.`OrderID` AS `OrderID0` + FROM `Orders` AS `o0` + WHERE `o`.`CustomerID` = `c`.`CustomerID` + ) AS `t` + WHERE (`o`.`CustomerID` = `c`.`CustomerID`) AND (DATEPART(year, `o`.`OrderDate`) = 1997) + ) AS `t0` + WHERE `c`.`City` = 'London' + ORDER BY `c`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID00` + """); + } + + public override async Task Select_nested_collection_deep_distinct_no_identifiers(bool async) + { + await base.Select_nested_collection_deep_distinct_no_identifiers(async); + + AssertSql( + """ + SELECT `t`.`City`, `t1`.`OrderID`, `t1`.`OrderID0`, `t1`.`OrderID00` + FROM ( + SELECT DISTINCT `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' + ) AS `t` + OUTER APPLY ( + SELECT `t0`.`OrderID`, `t2`.`OrderID` AS `OrderID0`, `t2`.`OrderID0` AS `OrderID00` + FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE ((`o`.`CustomerID` = `t`.`City`) OR ((`o`.`CustomerID` IS NULL) AND (`t`.`City` IS NULL))) AND (DATEPART(year, `o`.`OrderDate`) = 1997) + ) AS `t0` + OUTER APPLY ( + SELECT `t0`.`OrderID`, `o0`.`OrderID` AS `OrderID0` + FROM `Orders` AS `o0` + WHERE (`t0`.`CustomerID` = `t`.`City`) OR ((`t0`.`CustomerID` IS NULL) AND (`t`.`City` IS NULL)) + ) AS `t2` + ) AS `t1` + ORDER BY `t`.`City`, `t1`.`OrderID`, `t1`.`OrderID00` + """); + } + + public override async Task Collection_include_over_result_of_single_non_scalar(bool async) + { + await base.Collection_include_over_result_of_single_non_scalar(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`OrderID0`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `o2`.`OrderID`, `o2`.`ProductID`, `o2`.`Discount`, `o2`.`Quantity`, `o2`.`UnitPrice` + FROM `Customers` AS `c` + LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` + LEFT JOIN ( + SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o1`.`CustomerID` ORDER BY `o1`.`OrderDate`) AS `row` + FROM `Orders` AS `o1` + ) AS `t1` + WHERE `t1`.`row` <= 1 + ) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + LEFT JOIN `Order Details` AS `o2` ON `t0`.`OrderID` = `o2`.`OrderID` + WHERE `c`.`CustomerID` LIKE 'F' & '%' + ORDER BY `c`.`CustomerID`, `t`.`OrderID`, `t`.`OrderID0`, `t`.`ProductID`, `t0`.`OrderID`, `o2`.`OrderID` + """); + } + + public override async Task Collection_projection_selecting_outer_element_followed_by_take(bool async) + { + await base.Collection_projection_selecting_outer_element_followed_by_take(async); + + AssertSql( + """ + @__p_0='10' + SELECT `t`.`CustomerID`, `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region`, `t0`.`OrderID`, `t0`.`OrderID0`, `t0`.`CustomerID0`, `t0`.`EmployeeID`, `t0`.`OrderDate` + FROM ( + SELECT TOP(@__p_0) `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F' & '%' + ORDER BY `c`.`CustomerID` + ) AS `t` + OUTER APPLY ( + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `t1`.`OrderID` AS `OrderID0`, `t1`.`CustomerID` AS `CustomerID0`, `t1`.`EmployeeID`, `t1`.`OrderDate` + FROM `Orders` AS `o` + OUTER APPLY ( + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `t`.`CustomerID` = `o0`.`CustomerID` + ) AS `t1` + WHERE `t`.`CustomerID` = `o`.`CustomerID` + ) AS `t0` + ORDER BY `t`.`CustomerID`, `t0`.`OrderID` + """); + } + + public override async Task Take_on_top_level_and_on_collection_projection_with_outer_apply(bool async) + { + await base.Take_on_top_level_and_on_collection_projection_with_outer_apply(async); + + AssertSql( + """ + SELECT `t`.`OrderID`, `t`.`OrderDate`, `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice`, `t0`.`UnitsInStock`, `t0`.`UnitPrice0`, `t0`.`ProductID0` + FROM ( + SELECT TOP 1 `o`.`OrderID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE (`o`.`CustomerID` IS NOT NULL) AND (`o`.`CustomerID` LIKE 'F' & '%') + ) AS `t` + OUTER APPLY ( + SELECT `t1`.`OrderID`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `t1`.`UnitPrice` AS `UnitPrice0`, `t1`.`ProductID` AS `ProductID0` + FROM ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`UnitPrice` + FROM `Order Details` AS `o0` + WHERE `t`.`OrderID` = `o0`.`OrderID` + ORDER BY `o0`.`OrderID` DESC + OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY + ) AS `t1` + INNER JOIN `Products` AS `p` ON `t1`.`ProductID` = `p`.`ProductID` + ) AS `t0` + ORDER BY `t`.`OrderID`, `t0`.`OrderID` DESC, `t0`.`ProductID0` + """); + } + + public override async Task Take_on_correlated_collection_in_first(bool async) + { + await base.Take_on_correlated_collection_in_first(async); + + AssertSql( + """ + SELECT `t`.`CustomerID`, `t0`.`Title`, `t0`.`OrderID`, `t0`.`CustomerID` + FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F' & '%' + ORDER BY `c`.`CustomerID` + ) AS `t` + OUTER APPLY ( + SELECT CASE + WHEN (`t1`.`CustomerID` = `c0`.`CustomerID`) OR ((`t1`.`CustomerID` IS NULL) AND (`c0`.`CustomerID` IS NULL)) THEN 'A' + ELSE 'B' + END AS `Title`, `t1`.`OrderID`, `c0`.`CustomerID`, `t1`.`OrderDate` + FROM ( + SELECT TOP 1 `o`.`OrderID`, `o`.`CustomerID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `t`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` + ) AS `t1` + LEFT JOIN `Customers` AS `c0` ON `t1`.`CustomerID` = `c0`.`CustomerID` + ) AS `t0` + ORDER BY `t`.`CustomerID`, `t0`.`OrderDate`, `t0`.`OrderID` + """); + } + + public override async Task Client_projection_via_ctor_arguments(bool async) + { + await base.Client_projection_via_ctor_arguments(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`City`, `o`.`OrderID`, `o`.`OrderDate`, `c0`.`c` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`City`, ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Client_projection_with_string_initialization_with_scalar_subquery(bool async) + { + await base.Client_projection_with_string_initialization_with_scalar_subquery(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` < 11000), `c`.`City`, 'test' & IIF(`c`.`City` IS NULL, '', `c`.`City`) + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' + """); + } + + public override async Task MemberInit_in_projection_without_arguments(bool async) + { + await base.MemberInit_in_projection_without_arguments(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `o`.`OrderID` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task VisitLambda_should_not_be_visited_trivially(bool async) + { + await base.VisitLambda_should_not_be_visited_trivially(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Select_anonymous_literal(bool async) + { + await base.Select_anonymous_literal(async); + + AssertSql( +""" +SELECT 10 AS `X` +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_anonymous_nested(bool async) + { + await base.Select_anonymous_nested(async); + + AssertSql( +""" +SELECT `c`.`City`, `c`.`Country` +FROM `Customers` AS `c` +"""); + } + + public override async Task Projection_when_arithmetic_mixed_subqueries(bool async) + { + await base.Projection_when_arithmetic_mixed_subqueries(async); + + AssertSql( + """ +@p='3' + +SELECT CLNG(`e0`.`EmployeeID`) + CLNG(`o0`.`OrderID`) AS `Add`, `e0`.`Square`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title`, 42 AS `Literal`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o0`.`OrderID` MOD 2 AS `Mod` +FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0`, +( + SELECT TOP 2 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e`.`EmployeeID` BXOR 2 AS `Square` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e0` +ORDER BY `o0`.`OrderID` +"""); + } + + public override async Task Select_datetime_Ticks_component(bool async) + { + await base.Select_datetime_Ticks_component(async); + + AssertSql( +""" +SELECT `o`.`OrderDate` +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_datetime_TimeOfDay_component(bool async) + { + await base.Select_datetime_TimeOfDay_component(async); + + AssertSql( + """ +SELECT IIF(`o`.`OrderDate` IS NULL, NULL, TIMEVALUE(`o`.`OrderDate`)) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_anonymous_with_object(bool async) + { + await base.Select_anonymous_with_object(async); + + AssertSql( +""" +SELECT `c`.`City`, `c`.`CustomerID`, `c`.`Address`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Client_method_in_projection_requiring_materialization_1(bool async) + { + await base.Client_method_in_projection_requiring_materialization_1(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Select_datetime_DayOfWeek_component(bool async) + { + await base.Select_datetime_DayOfWeek_component(async); + + AssertSql( +""" +SELECT CLNG(DATEPART('w', `o`.`OrderDate`) - 1) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_scalar_primitive(bool async) + { + await base.Select_scalar_primitive(async); + + AssertSql( +""" +SELECT `e`.`EmployeeID` +FROM `Employees` AS `e` +"""); + } + + public override async Task Client_method_in_projection_requiring_materialization_2(bool async) + { + await base.Client_method_in_projection_requiring_materialization_2(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Select_anonymous_empty(bool async) + { + await base.Select_anonymous_empty(async); + + AssertSql( +""" +SELECT 1 +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_customer_table(bool async) + { + await base.Select_customer_table(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_into(bool async) + { + await base.Select_into(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Select_bool_closure(bool async) + { + await base.Select_bool_closure(async); + + AssertSql( +""" +SELECT 1 +FROM `Customers` AS `c` +""", +// +""" +SELECT 1 +FROM `Customers` AS `c` +"""); + } + + public override async Task Select_customer_identity(bool async) + { + await base.Select_customer_identity(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Correlated_collection_after_groupby_with_complex_projection_not_containing_original_identifier(bool async) + { + await base.Correlated_collection_after_groupby_with_complex_projection_not_containing_original_identifier(async); + + AssertSql( + """ +@__filteredOrderIds_0='[10248,10249,10250]' (Size = 4000) + +SELECT [t0].[CustomerID], [t0].[Complex], [t1].[Outer], [t1].[Inner], [t1].[OrderDate] +FROM ( + SELECT [t].[CustomerID], [t].[Complex] + FROM ( + SELECT [o].[CustomerID], DATEPART(month, [o].[OrderDate]) AS [Complex] + FROM [Orders] AS [o] + ) AS [t] + GROUP BY [t].[CustomerID], [t].[Complex] +) AS [t0] +OUTER APPLY ( + SELECT [t0].[CustomerID] AS [Outer], [o0].[OrderID] AS [Inner], [o0].[OrderDate] + FROM [Orders] AS [o0] + WHERE ([o0].[CustomerID] = [t0].[CustomerID] OR ([o0].[CustomerID] IS NULL AND [t0].[CustomerID] IS NULL)) AND [o0].[OrderID] IN ( + SELECT [f].[value] + FROM OPENJSON(@__filteredOrderIds_0) WITH ([value] int '$') AS [f] + ) +) AS [t1] +ORDER BY [t0].[CustomerID], [t0].[Complex] +"""); + } + + public override async Task Select_bool_closure_with_order_by_property_with_cast_to_nullable(bool async) + { + await base.Select_bool_closure_with_order_by_property_with_cast_to_nullable(async); + + AssertSql(); + } + + public override async Task Reverse_without_explicit_ordering(bool async) + { + await base.Reverse_without_explicit_ordering(async); + + AssertSql(); + } + + public override async Task List_of_list_of_anonymous_type(bool async) + { + await base.List_of_list_of_anonymous_type(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0`, `s`.`ProductID` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o`.`CustomerID` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task List_from_result_of_single_result(bool async) + { + await base.List_from_result_of_single_result(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `o`.`OrderID` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task List_from_result_of_single_result_2(bool async) + { + await base.List_from_result_of_single_result_2(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `o`.`OrderID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task List_from_result_of_single_result_3(bool async) + { + await base.List_from_result_of_single_result_3(async); + + AssertSql( + """ + SELECT `t`.`CustomerID`, `t0`.`OrderID`, `o0`.`ProductID`, `o0`.`OrderID`, `t0`.`c` + FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `t` + LEFT JOIN ( + SELECT `t1`.`c`, `t1`.`OrderID`, `t1`.`CustomerID` + FROM ( + SELECT 1 AS `c`, `o`.`OrderID`, `o`.`CustomerID`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderDate`) AS `row` + FROM `Orders` AS `o` + ) AS `t1` + WHERE `t1`.`row` <= 1 + ) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` + LEFT JOIN `Order Details` AS `o0` ON `t0`.`OrderID` = `o0`.`OrderID` + ORDER BY `t`.`CustomerID`, `t0`.`OrderID`, `o0`.`OrderID` + """); + } + + public override async Task Using_enumerable_parameter_in_projection(bool async) + { + await base.Using_enumerable_parameter_in_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Entity_passed_to_DTO_constructor_works(bool async) + { + await base.Entity_passed_to_DTO_constructor_works(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Set_operation_in_pending_collection(bool async) + { + await base.Set_operation_in_pending_collection(async); + + AssertSql( + """ +@__p_0='5' + +SELECT [c0].[CustomerID], [u].[OrderID] +FROM ( + SELECT TOP(@__p_0) [c].[CustomerID] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] +) AS [c0] +OUTER APPLY ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c0].[CustomerID] + UNION + SELECT [o0].[OrderID] + FROM [Orders] AS [o0] + WHERE [o0].[CustomerID] = [c0].[CustomerID] +) AS [u] +ORDER BY [c0].[CustomerID] +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSetOperationsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSetOperationsQueryLibRedTest.cs new file mode 100644 index 00000000..d7380d92 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSetOperationsQueryLibRedTest.cs @@ -0,0 +1,1645 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindSetOperationsQueryLibRedTest : NorthwindSetOperationsQueryRelationalTestBase< + NorthwindQueryLibRedFixture> + { + public NorthwindSetOperationsQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + ClearLog(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Union(bool isAsync) + { + await base.Union(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + """); + } + + public override async Task Concat(bool isAsync) + { + await base.Concat(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION ALL + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + """); + } + + public override async Task Intersect(bool isAsync) + { + await base.Intersect(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' + INTERSECT + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE CHARINDEX('Thomas', `c0`.`ContactName`) > 0 + """); + } + + public override async Task Except(bool isAsync) + { + await base.Except(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' + EXCEPT + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE CHARINDEX('Thomas', `c0`.`ContactName`) > 0 + """); + } + + public override async Task Union_OrderBy_Skip_Take(bool isAsync) + { + await base.Union_OrderBy_Skip_Take(isAsync); + + AssertSql( + """ +@p='1' + +SELECT `u1`.`CustomerID`, `u1`.`Address`, `u1`.`City`, `u1`.`CompanyName`, `u1`.`ContactName`, `u1`.`ContactTitle`, `u1`.`Country`, `u1`.`Fax`, `u1`.`Phone`, `u1`.`PostalCode`, `u1`.`Region` +FROM ( + SELECT TOP @p `u0`.`CustomerID`, `u0`.`Address`, `u0`.`City`, `u0`.`CompanyName`, `u0`.`ContactName`, `u0`.`ContactTitle`, `u0`.`Country`, `u0`.`Fax`, `u0`.`Phone`, `u0`.`PostalCode`, `u0`.`Region` + FROM ( + SELECT TOP @p + @p `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + ) AS `u` + ORDER BY `u`.`ContactName` + ) AS `u0` + ORDER BY `u0`.`ContactName` DESC +) AS `u1` +ORDER BY `u1`.`ContactName` +"""); + } + + public override async Task Union_Where(bool isAsync) + { + await base.Union_Where(isAsync); + + AssertSql( + """ +SELECT `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' +) AS `u` +WHERE `u`.`ContactName` LIKE '%Thomas%' +"""); + } + + public override async Task Union_Skip_Take_OrderBy_ThenBy_Where(bool isAsync) + { + await base.Union_Skip_Take_OrderBy_ThenBy_Where(isAsync); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@__p_0='0'")} + + SELECT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + FROM ( + SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + ) AS `t` + ORDER BY `t`.`Region`, `t`.`City` + SKIP {AssertSqlHelper.Parameter("@__p_0")} + ) AS `t0` + WHERE CHARINDEX('Thomas', `t0`.`ContactName`) > 0 + ORDER BY `t0`.`Region`, `t0`.`City` + """); + } + + public override async Task Union_Union(bool isAsync) + { + await base.Union_Union(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + UNION + SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM `Customers` AS `c1` + WHERE `c1`.`City` = 'Mannheim' + """); + } + + public override async Task Union_Intersect(bool isAsync) + { + await base.Union_Intersect(isAsync); + + AssertSql( + $""" + ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + ) + INTERSECT + SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM `Customers` AS `c1` + WHERE CHARINDEX('Thomas', `c1`.`ContactName`) > 0 + """); + } + + public override async Task Union_inside_Concat(bool async) + { + await base.Union_inside_Concat(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'Berlin' +UNION ALL +( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + UNION + SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM `Customers` AS `c1` + WHERE `c1`.`City` = 'Berlin' +) +"""); + } + + public override async Task Union_Take_Union_Take(bool isAsync) + { + await base.Union_Take_Union_Take(isAsync); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `u1`.`CustomerID`, `u1`.`Address`, `u1`.`City`, `u1`.`CompanyName`, `u1`.`ContactName`, `u1`.`ContactTitle`, `u1`.`Country`, `u1`.`Fax`, `u1`.`Phone`, `u1`.`PostalCode`, `u1`.`Region` +FROM ( + SELECT `u0`.`CustomerID`, `u0`.`Address`, `u0`.`City`, `u0`.`CompanyName`, `u0`.`ContactName`, `u0`.`ContactTitle`, `u0`.`Country`, `u0`.`Fax`, `u0`.`Phone`, `u0`.`PostalCode`, `u0`.`Region` + FROM ( + SELECT TOP @p `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + ) AS `u` + ORDER BY `u`.`CustomerID` + ) AS `u0` + UNION + SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM `Customers` AS `c1` + WHERE `c1`.`City` = 'Mannheim' +) AS `u1` +ORDER BY `u1`.`CustomerID` +"""); + } + + public override async Task Select_Union(bool isAsync) + { + await base.Select_Union(isAsync); + + AssertSql( + $""" + SELECT `c`.`Address` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`Address` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + """); + } + + public override async Task Union_Select(bool isAsync) + { + await base.Union_Select(isAsync); + + AssertSql( + """ +SELECT `u`.`Address` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' +) AS `u` +WHERE `u`.`Address` LIKE '%Hanover%' +"""); + } + + public override async Task Union_Select_scalar(bool isAsync) + { + await base.Union_Select_scalar(isAsync); + + AssertSql( + """ +SELECT 1 +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` +) AS `u` +"""); + } + + public override async Task Union_with_anonymous_type_projection(bool isAsync) + { + await base.Union_with_anonymous_type_projection(isAsync); + + AssertSql( + """ +SELECT `u`.`CustomerID` AS `Id` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CompanyName` LIKE 'A%' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CompanyName` LIKE 'B%' +) AS `u` +"""); + } + + public override async Task Select_Union_unrelated(bool isAsync) + { + await base.Select_Union_unrelated(isAsync); + + AssertSql( + """ +SELECT `u`.`CompanyName` +FROM ( + SELECT `c`.`CompanyName` + FROM `Customers` AS `c` + UNION + SELECT `p`.`ProductName` AS `CompanyName` + FROM `Products` AS `p` +) AS `u` +WHERE `u`.`CompanyName` LIKE 'C%' +ORDER BY `u`.`CompanyName` +"""); + } + + public override async Task Select_Union_different_fields_in_anonymous_with_subquery(bool isAsync) + { + await base.Select_Union_different_fields_in_anonymous_with_subquery(isAsync); + + AssertSql( + """ +@p1='10' +@p='1' + +SELECT `u0`.`Foo`, `u0`.`CustomerID`, `u0`.`Address`, `u0`.`City`, `u0`.`CompanyName`, `u0`.`ContactName`, `u0`.`ContactTitle`, `u0`.`Country`, `u0`.`Fax`, `u0`.`Phone`, `u0`.`PostalCode`, `u0`.`Region` +FROM ( + SELECT TOP @p1 `u1`.`Foo`, `u1`.`CustomerID`, `u1`.`Address`, `u1`.`City`, `u1`.`CompanyName`, `u1`.`ContactName`, `u1`.`ContactTitle`, `u1`.`Country`, `u1`.`Fax`, `u1`.`Phone`, `u1`.`PostalCode`, `u1`.`Region` + FROM ( + SELECT TOP @p + @p1 `u`.`Foo`, `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region` + FROM ( + SELECT `c`.`City` AS `Foo`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`Region` AS `Foo`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + ) AS `u` + ORDER BY `u`.`Foo` + ) AS `u1` + ORDER BY `u1`.`Foo` DESC +) AS `u0` +WHERE `u0`.`Foo` = 'Berlin' +ORDER BY `u0`.`Foo` +"""); + } + + public override async Task Union_Include(bool isAsync) + { + await base.Union_Include(isAsync); + + AssertSql( + """ +SELECT `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' +) AS `u` +LEFT JOIN `Orders` AS `o` ON `u`.`CustomerID` = `o`.`CustomerID` +ORDER BY `u`.`CustomerID` +"""); + } + + public override async Task Include_Union(bool isAsync) + { + await base.Include_Union(isAsync); + + AssertSql( + """ +SELECT `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' +) AS `u` +LEFT JOIN `Orders` AS `o` ON `u`.`CustomerID` = `o`.`CustomerID` +ORDER BY `u`.`CustomerID` +"""); + } + + public override async Task Select_Except_reference_projection(bool isAsync) + { + await base.Select_Except_reference_projection(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + EXCEPT + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Orders` AS `o0` + LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + WHERE `o0`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task SubSelect_Union(bool isAsync) + { + await base.SubSelect_Union(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Orders` + FROM `Customers` AS `c` + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c0`.`CustomerID` = `o0`.`CustomerID`) AS `Orders` + FROM `Customers` AS `c0` + """); + } + + public override async Task GroupBy_Select_Union(bool isAsync) + { + await base.GroupBy_Select_Union(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, COUNT(*) AS `Count` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + GROUP BY `c`.`CustomerID` + UNION + SELECT `c0`.`CustomerID`, COUNT(*) AS `Count` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + GROUP BY `c0`.`CustomerID` + """); + } + + public override async Task Union_over_columns_with_different_nullability(bool isAsync) + { + await base.Union_over_columns_with_different_nullability(isAsync); + + AssertSql( + $""" + SELECT 'NonNullableConstant' AS `c` + FROM `Customers` AS `c` + UNION ALL + SELECT NULL AS `c` + FROM `Customers` AS `c0` + """); + } + + public override async Task Union_over_column_column(bool async) + { + await base.Union_over_column_column(async); + + AssertSql( +""" +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_column_function(bool async) + { + await base.Union_over_column_function(async); + + AssertSql( +""" +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +UNION +SELECT COUNT(*) AS `OrderID` +FROM `Orders` AS `o0` +GROUP BY `o0`.`OrderID` +"""); + } + + public override async Task Union_over_column_constant(bool async) + { + await base.Union_over_column_constant(async); + + AssertSql( +""" +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +UNION +SELECT 8 AS `OrderID` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_column_unary(bool async) + { + await base.Union_over_column_unary(async); + + AssertSql( +""" +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +UNION +SELECT -`o0`.`OrderID` AS `OrderID` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_column_binary(bool async) + { + await base.Union_over_column_binary(async); + + AssertSql( +""" +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` + 1 AS `OrderID` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_column_scalarsubquery(bool async) + { + await base.Union_over_column_scalarsubquery(async); + + AssertSql( +""" +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +UNION +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o1` + WHERE `o0`.`OrderID` = `o1`.`OrderID`) AS `OrderID` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_function_column(bool async) + { + await base.Union_over_function_column(async); + + AssertSql( +""" +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o` +GROUP BY `o`.`OrderID` +UNION +SELECT `o0`.`OrderID` AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_function_function(bool async) + { + await base.Union_over_function_function(async); + + AssertSql( +""" +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o` +GROUP BY `o`.`OrderID` +UNION +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o0` +GROUP BY `o0`.`OrderID` +"""); + } + + public override async Task Union_over_function_constant(bool async) + { + await base.Union_over_function_constant(async); + + AssertSql( +""" +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o` +GROUP BY `o`.`OrderID` +UNION +SELECT 8 AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_function_unary(bool async) + { + await base.Union_over_function_unary(async); + + AssertSql( +""" +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o` +GROUP BY `o`.`OrderID` +UNION +SELECT -`o0`.`OrderID` AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_function_binary(bool async) + { + await base.Union_over_function_binary(async); + + AssertSql( +""" +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o` +GROUP BY `o`.`OrderID` +UNION +SELECT `o0`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_function_scalarsubquery(bool async) + { + await base.Union_over_function_scalarsubquery(async); + + AssertSql( +""" +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o` +GROUP BY `o`.`OrderID` +UNION +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o1` + WHERE `o0`.`OrderID` = `o1`.`OrderID`) AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_constant_column(bool async) + { + await base.Union_over_constant_column(async); + + AssertSql( +""" +SELECT 8 AS `c` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_constant_function(bool async) + { + await base.Union_over_constant_function(async); + + AssertSql( +""" +SELECT 8 AS `c` +FROM `Orders` AS `o` +UNION +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o0` +GROUP BY `o0`.`OrderID` +"""); + } + + public override async Task Union_over_constant_constant(bool async) + { + await base.Union_over_constant_constant(async); + + AssertSql( +""" +SELECT 8 AS `c` +FROM `Orders` AS `o` +UNION +SELECT 8 AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_constant_unary(bool async) + { + await base.Union_over_constant_unary(async); + + AssertSql( +""" +SELECT 8 AS `c` +FROM `Orders` AS `o` +UNION +SELECT -`o0`.`OrderID` AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_constant_binary(bool async) + { + await base.Union_over_constant_binary(async); + + AssertSql( +""" +SELECT 8 AS `c` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_constant_scalarsubquery(bool async) + { + await base.Union_over_constant_scalarsubquery(async); + + AssertSql( +""" +SELECT 8 AS `c` +FROM `Orders` AS `o` +UNION +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o1` + WHERE `o0`.`OrderID` = `o1`.`OrderID`) AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_unary_column(bool async) + { + await base.Union_over_unary_column(async); + + AssertSql( +""" +SELECT -`o`.`OrderID` AS `c` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_unary_function(bool async) + { + await base.Union_over_unary_function(async); + + AssertSql( +""" +SELECT -`o`.`OrderID` AS `c` +FROM `Orders` AS `o` +UNION +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o0` +GROUP BY `o0`.`OrderID` +"""); + } + + public override async Task Union_over_unary_constant(bool async) + { + await base.Union_over_unary_constant(async); + + AssertSql( +""" +SELECT -`o`.`OrderID` AS `c` +FROM `Orders` AS `o` +UNION +SELECT 8 AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_unary_unary(bool async) + { + await base.Union_over_unary_unary(async); + + AssertSql( +""" +SELECT -`o`.`OrderID` AS `c` +FROM `Orders` AS `o` +UNION +SELECT -`o0`.`OrderID` AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_unary_binary(bool async) + { + await base.Union_over_unary_binary(async); + + AssertSql( +""" +SELECT -`o`.`OrderID` AS `c` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_unary_scalarsubquery(bool async) + { + await base.Union_over_unary_scalarsubquery(async); + + AssertSql( +""" +SELECT -`o`.`OrderID` AS `c` +FROM `Orders` AS `o` +UNION +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o1` + WHERE `o0`.`OrderID` = `o1`.`OrderID`) AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_binary_column(bool async) + { + await base.Union_over_binary_column(async); + + AssertSql( +""" +SELECT `o`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_binary_function(bool async) + { + await base.Union_over_binary_function(async); + + AssertSql( +""" +SELECT `o`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o` +UNION +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o0` +GROUP BY `o0`.`OrderID` +"""); + } + + public override async Task Union_over_binary_constant(bool async) + { + await base.Union_over_binary_constant(async); + + AssertSql( +""" +SELECT `o`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o` +UNION +SELECT 8 AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_binary_unary(bool async) + { + await base.Union_over_binary_unary(async); + + AssertSql( +""" +SELECT `o`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o` +UNION +SELECT -`o0`.`OrderID` AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_binary_binary(bool async) + { + await base.Union_over_binary_binary(async); + + AssertSql( +""" +SELECT `o`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_binary_scalarsubquery(bool async) + { + await base.Union_over_binary_scalarsubquery(async); + + AssertSql( +""" +SELECT `o`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o` +UNION +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o1` + WHERE `o0`.`OrderID` = `o1`.`OrderID`) AS `c` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_scalarsubquery_column(bool async) + { + await base.Union_over_scalarsubquery_column(async); + + AssertSql( +""" +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `c` +FROM `Orders` AS `o` +UNION +SELECT `o1`.`OrderID` AS `c` +FROM `Orders` AS `o1` +"""); + } + + public override async Task Union_over_scalarsubquery_function(bool async) + { + await base.Union_over_scalarsubquery_function(async); + + AssertSql( +""" +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `c` +FROM `Orders` AS `o` +UNION +SELECT COUNT(*) AS `c` +FROM `Orders` AS `o1` +GROUP BY `o1`.`OrderID` +"""); + } + + public override async Task Union_over_scalarsubquery_constant(bool async) + { + await base.Union_over_scalarsubquery_constant(async); + + AssertSql( +""" +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `c` +FROM `Orders` AS `o` +UNION +SELECT 8 AS `c` +FROM `Orders` AS `o1` +"""); + } + + public override async Task Union_over_scalarsubquery_unary(bool async) + { + await base.Union_over_scalarsubquery_unary(async); + + AssertSql( +""" +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `c` +FROM `Orders` AS `o` +UNION +SELECT -`o1`.`OrderID` AS `c` +FROM `Orders` AS `o1` +"""); + } + + public override async Task Union_over_scalarsubquery_binary(bool async) + { + await base.Union_over_scalarsubquery_binary(async); + + AssertSql( +""" +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `c` +FROM `Orders` AS `o` +UNION +SELECT `o1`.`OrderID` + 1 AS `c` +FROM `Orders` AS `o1` +"""); + } + + public override async Task Union_over_scalarsubquery_scalarsubquery(bool async) + { + await base.Union_over_scalarsubquery_scalarsubquery(async); + + AssertSql( +""" +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `c` +FROM `Orders` AS `o` +UNION +SELECT ( + SELECT COUNT(*) + FROM `Order Details` AS `o2` + WHERE `o1`.`OrderID` = `o2`.`OrderID`) AS `c` +FROM `Orders` AS `o1` +"""); + } + + public override async Task Union_over_OrderBy_Take1(bool async) + { + await base.Union_over_OrderBy_Take1(async); + + AssertSql( + """ +@p='5' + +SELECT `o1`.`OrderID` +FROM ( + SELECT TOP @p `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderDate` +) AS `o1` +UNION +SELECT `o0`.`OrderID` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_OrderBy_without_Skip_Take1(bool async) + { + await base.Union_over_OrderBy_without_Skip_Take1(async); + + AssertSql( +""" +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` +FROM `Orders` AS `o0` +"""); + } + + public override async Task Union_over_OrderBy_Take2(bool async) + { + await base.Union_over_OrderBy_Take2(async); + + AssertSql( + """ +@p='5' + +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +UNION +SELECT `o1`.`OrderID` +FROM ( + SELECT TOP @p `o0`.`OrderID` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderDate` +) AS `o1` +"""); + } + + public override async Task Union_over_OrderBy_without_Skip_Take2(bool async) + { + await base.Union_over_OrderBy_without_Skip_Take2(async); + + AssertSql( +""" +SELECT `o`.`OrderID` +FROM `Orders` AS `o` +UNION +SELECT `o0`.`OrderID` +FROM `Orders` AS `o0` +"""); + } + + public override async Task OrderBy_Take_Union(bool isAsync) + { + await base.OrderBy_Take_Union(isAsync); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` +) AS `c1` +UNION +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP @p `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`ContactName` +) AS `c2` +"""); + } + + public override async Task Collection_projection_after_set_operation(bool async) + { + await base.Collection_projection_after_set_operation(async); + + AssertSql( + """ +SELECT `u`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Seatte' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'F%' +) AS `u` +LEFT JOIN `Orders` AS `o` ON `u`.`CustomerID` = `o`.`CustomerID` +ORDER BY `u`.`CustomerID` +"""); + } + + public override async Task Concat_with_one_side_being_GroupBy_aggregate(bool async) + { + await base.Concat_with_one_side_being_GroupBy_aggregate(async); + + AssertSql( +""" +SELECT `o`.`OrderDate` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `c`.`City` = 'Seatte' +UNION +SELECT MAX(`o0`.`OrderDate`) AS `OrderDate` +FROM `Orders` AS `o0` +GROUP BY `o0`.`CustomerID` +"""); + } + + public override async Task Union_on_entity_with_correlated_collection(bool async) + { + await base.Union_on_entity_with_correlated_collection(async); + + AssertSql( + """ +SELECT `u`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`City` = 'Seatte' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Orders` AS `o0` + LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + WHERE `o0`.`OrderID` < 10250 +) AS `u` +LEFT JOIN `Orders` AS `o1` ON `u`.`CustomerID` = `o1`.`CustomerID` +ORDER BY `u`.`CustomerID` +"""); + } + + public override async Task Union_on_entity_plus_other_column_with_correlated_collection(bool async) + { + await base.Union_on_entity_plus_other_column_with_correlated_collection(async); + + AssertSql( + """ +SELECT `u`.`OrderDate`, `u`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderDate` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`City` = 'Seatte' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + WHERE `o0`.`OrderID` < 10250 +) AS `u` +LEFT JOIN `Orders` AS `o1` ON `u`.`CustomerID` = `o1`.`CustomerID` +ORDER BY `u`.`CustomerID`, `u`.`OrderDate` +"""); + } + + public override async Task Except_non_entity(bool async) + { + await base.Except_non_entity(async); + + AssertSql( + """ +SELECT [c].[CustomerID] +FROM [Customers] AS [c] +WHERE [c].[ContactTitle] = N'Owner' +EXCEPT +SELECT [c0].[CustomerID] +FROM [Customers] AS [c0] +WHERE [c0].[City] = N'M�xico D.F.' +"""); + } + + public override async Task Except_simple_followed_by_projecting_constant(bool async) + { + await base.Except_simple_followed_by_projecting_constant(async); + + AssertSql( + """ +SELECT 1 +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + EXCEPT + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] +) AS [t] +"""); + } + + public override async Task Except_nested(bool async) + { + await base.Except_nested(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[ContactTitle] = N'Owner' +EXCEPT +SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] +FROM [Customers] AS [c0] +WHERE [c0].[City] = N'M�xico D.F.' +EXCEPT +SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] +FROM [Customers] AS [c1] +WHERE [c1].[City] = N'Seattle' +"""); + } + + public override async Task Except_nested2(bool async) + { + await base.Except_nested2(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +EXCEPT +( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + WHERE [c0].[City] = N'Seattle' + EXCEPT + SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] + FROM [Customers] AS [c1] + WHERE [c1].[City] = N'Seattle' +) +"""); + } + + public override async Task Intersect_non_entity(bool async) + { + await base.Intersect_non_entity(async); + + AssertSql( + """ +SELECT [c].[CustomerID] +FROM [Customers] AS [c] +WHERE [c].[City] = N'M�xico D.F.' +INTERSECT +SELECT [c0].[CustomerID] +FROM [Customers] AS [c0] +WHERE [c0].[ContactTitle] = N'Owner' +"""); + } + + public override async Task Intersect_nested(bool async) + { + await base.Intersect_nested(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[City] = N'M�xico D.F.' +INTERSECT +SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] +FROM [Customers] AS [c0] +WHERE [c0].[ContactTitle] = N'Owner' +INTERSECT +SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] +FROM [Customers] AS [c1] +WHERE [c1].[Fax] IS NOT NULL +"""); + } + + public override async Task Concat_nested(bool async) + { + await base.Concat_nested(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'México D.F.' +UNION ALL +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM `Customers` AS `c0` +WHERE `c0`.`City` = 'Berlin' +UNION ALL +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM `Customers` AS `c1` +WHERE `c1`.`City` = 'London' +"""); + } + + public override async Task Union_nested(bool async) + { + await base.Union_nested(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`ContactTitle` = 'Owner' +UNION +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM `Customers` AS `c0` +WHERE `c0`.`City` = 'México D.F.' +UNION +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM `Customers` AS `c1` +WHERE `c1`.`City` = 'London' +"""); + } + + public override async Task Union_non_entity(bool async) + { + await base.Union_non_entity(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`ContactTitle` = 'Owner' +UNION +SELECT `c0`.`CustomerID` +FROM `Customers` AS `c0` +WHERE `c0`.`City` = 'México D.F.' +"""); + } + + public override async Task Concat_non_entity(bool async) + { + await base.Concat_non_entity(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'México D.F.' +UNION ALL +SELECT `c0`.`CustomerID` +FROM `Customers` AS `c0` +WHERE `c0`.`ContactTitle` = 'Owner' +"""); + } + + public override async Task Collection_projection_after_set_operation_fails_if_distinct(bool async) + { + await base.Collection_projection_after_set_operation_fails_if_distinct(async); + + AssertSql(); + } + + public override async Task Collection_projection_before_set_operation_fails(bool async) + { + await base.Collection_projection_before_set_operation_fails(async); + + AssertSql(); + } + + public override async Task Intersect_on_distinct(bool async) + { + await base.Intersect_on_distinct(async); + + AssertSql( + """ +SELECT [c].[CompanyName] +FROM [Customers] AS [c] +WHERE [c].[City] = N'México D.F.' +INTERSECT +SELECT [c0].[CompanyName] +FROM [Customers] AS [c0] +WHERE [c0].[ContactTitle] = N'Owner' +"""); + } + + public override async Task Union_on_distinct(bool async) + { + await base.Union_on_distinct(async); + + AssertSql( + """ +SELECT `c`.`CompanyName` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'México D.F.' +UNION +SELECT `c0`.`CompanyName` +FROM `Customers` AS `c0` +WHERE `c0`.`ContactTitle` = 'Owner' +"""); + } + + public override async Task Except_on_distinct(bool async) + { + await base.Except_on_distinct(async); + + AssertSql( + """ +SELECT [c].[CompanyName] +FROM [Customers] AS [c] +WHERE [c].[City] = N'México D.F.' +EXCEPT +SELECT [c0].[CompanyName] +FROM [Customers] AS [c0] +WHERE [c0].[ContactTitle] = N'Owner' +"""); + } + + public override async Task Include_Union_only_on_one_side_throws(bool async) + { + await base.Include_Union_only_on_one_side_throws(async); + + AssertSql(); + } + + public override async Task Include_Union_different_includes_throws(bool async) + { + await base.Include_Union_different_includes_throws(async); + + AssertSql(); + } + + public override async Task Concat_with_pruning(bool async) + { + await base.Concat_with_pruning(async); + + AssertSql( +""" +SELECT `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +UNION ALL +SELECT `c0`.`City` +FROM `Customers` AS `c0` +WHERE `c0`.`CustomerID` LIKE 'B%' +"""); + } + + public override async Task Concat_with_distinct_on_one_source_and_pruning(bool async) + { + await base.Concat_with_distinct_on_one_source_and_pruning(async); + + AssertSql( + """ +SELECT `u`.`City` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + UNION ALL + SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'B%' +) AS `u` +"""); + } + + public override async Task Concat_with_distinct_on_both_source_and_pruning(bool async) + { + await base.Concat_with_distinct_on_both_source_and_pruning(async); + + AssertSql( + """ +SELECT `u`.`City` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + UNION ALL + SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'B%' +) AS `u` +"""); + } + + public override async Task Nested_concat_with_pruning(bool async) + { + await base.Nested_concat_with_pruning(async); + + AssertSql( +""" +SELECT `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +UNION ALL +SELECT `c0`.`City` +FROM `Customers` AS `c0` +WHERE `c0`.`CustomerID` LIKE 'B%' +UNION ALL +SELECT `c1`.`City` +FROM `Customers` AS `c1` +WHERE `c1`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Nested_concat_with_distinct_in_the_middle_and_pruning(bool async) + { + await base.Nested_concat_with_distinct_in_the_middle_and_pruning(async); + + AssertSql( + """ +SELECT `u`.`City` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + UNION ALL + SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'B%' +) AS `u` +UNION ALL +SELECT `c1`.`City` +FROM `Customers` AS `c1` +WHERE `c1`.`CustomerID` LIKE 'A%' +"""); + } + + public override async Task Client_eval_Union_FirstOrDefault(bool async) + { + // Client evaluation in projection. Issue #16243. + Assert.Equal( + RelationalStrings.SetOperationsNotAllowedAfterClientEvaluation, + (await Assert.ThrowsAsync( + () => base.Client_eval_Union_FirstOrDefault(async))).Message); + + AssertSql(); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Union_with_different_store_types_is_fine_if_database_can_translate_it(bool async) + { + await AssertQuery( + async, + ss => ss.Set() + .Select(e => e.CompanyName) + .Union(ss.Set().Select(e => e.ContactName))); + + AssertSql( +""" +SELECT `c`.`CompanyName` +FROM `Customers` AS `c` +UNION +SELECT `c0`.`ContactName` AS `CompanyName` +FROM `Customers` AS `c0` +"""); + } + + [ConditionalTheory] // Issue #29020 + [MemberData(nameof(IsAsyncData))] + public virtual async Task Union_with_type_mappings_to_same_store_type(bool async) + { + await AssertQuery( + async, + ss => ss.Set() + .Select(e => e.ContactName) + .Union(ss.Set().Select(e => e.ContactTitle))); + + AssertSql( +""" +SELECT `c`.`ContactName` +FROM `Customers` AS `c` +UNION +SELECT `c0`.`ContactTitle` AS `ContactName` +FROM `Customers` AS `c0` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryLibRedTest.cs new file mode 100644 index 00000000..a5da553e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryLibRedTest.cs @@ -0,0 +1,2914 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.Jet.Internal; +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class NorthwindSplitIncludeNoTrackingQueryLibRedTest : NorthwindSplitIncludeNoTrackingQueryTestBase< + NorthwindQueryLibRedFixture> +{ + // ReSharper disable once UnusedParameter.Local + public NorthwindSplitIncludeNoTrackingQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Include_collection_skip_take_no_order_by(bool async) + => Assert.Equal( + JetStrings.SplitQueryOffsetWithoutOrderBy, + (await Assert.ThrowsAsync(() => base.Include_collection_skip_take_no_order_by(async))).Message); + + public override async Task Include_collection_skip_no_order_by(bool async) + => Assert.Equal( + JetStrings.SplitQueryOffsetWithoutOrderBy, + (await Assert.ThrowsAsync(() => base.Include_collection_skip_no_order_by(async))).Message); + + public override async Task Include_reference_GroupBy_Select(bool async) + { + await base.Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + LEFT JOIN [Customers] AS [c] ON [o0].[CustomerID] = [c].[CustomerID] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_multi_level_collection_and_then_include_reference_predicate(bool async) + { + await base.Include_multi_level_collection_and_then_include_reference_predicate(async); + + AssertSql( + """ +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID` +""", + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock`, `o1`.`OrderID` +FROM ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10248 + ORDER BY `o`.`OrderID` +) AS `o1` +INNER JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID` +"""); + } + + public override async Task Include_when_result_operator(bool async) + { + await base.Include_when_result_operator(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Include_collection_OrderBy_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_list_does_not_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END, [c].[CustomerID] +OFFSET @__p_1 ROWS +""", +// +""" +@__p_1='1' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_order_by_collection_column(bool async) + { + await base.Include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' +) AS `c1` +ORDER BY `c1`.`c` DESC, `c1`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` + FROM ( + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c2` + ORDER BY `c2`.`c` DESC, `c2`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_non_key(bool async) + { + await base.Include_collection_order_by_non_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`PostalCode`, `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`PostalCode`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_on_additional_from_clause2(bool async) + { + await base.Include_collection_on_additional_from_clause2(async); + + AssertSql( + """ +@p='5' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +`Customers` AS `c0` +ORDER BY `c1`.`CustomerID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip(bool async) + { + await base.Multi_level_includes_are_applied_with_skip(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +ORDER BY `c1`.`CustomerID` +""", + // + """ +@p='1' + +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c1`.`CustomerID` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` +""", + // + """ +@p='1' + +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c1`.`CustomerID`, `o3`.`OrderID` +FROM (( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` +"""); + } + + public override async Task Include_references_multi_level(bool async) + { + await base.Include_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level(bool async) + { + await base.Include_multiple_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_duplicate_collection_result_operator(bool async) + { + await base.Include_duplicate_collection_result_operator(async); + + AssertSql( + """ +@p2='1' +@p='2' + +SELECT TOP @p2 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p2='1' +@p='2' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`CustomerID0` +FROM ( + SELECT TOP @p2 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1`, + ( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o` ON `s`.`CustomerID` = `o`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`CustomerID0` +""", + // + """ +@p2='1' +@p='2' + +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `s0`.`CustomerID`, `s0`.`CustomerID0` +FROM ( + SELECT TOP @p2 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1`, + ( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +) AS `s0` +INNER JOIN `Orders` AS `o0` ON `s0`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s0`.`CustomerID`, `s0`.`CustomerID0` +"""); + } + + public override async Task Include_collection_with_filter_reordered(bool async) + { + await base.Include_collection_with_filter_reordered(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_duplicate_reference(bool async) + { + await base.Include_duplicate_reference(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM (( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`CustomerID`, `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` +"""); + } + + public override async Task Include_with_complex_projection(bool async) + { + await base.Include_with_complex_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_empty_reference_sets_IsLoaded(bool async) + { + await base.Include_empty_reference_sets_IsLoaded(async); + + AssertSql( +""" +SELECT TOP 1 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e0`.`EmployeeID` IS NULL +"""); + } + + public override async Task Include_multiple_references_multi_level_reverse(bool async) + { + await base.Include_multiple_references_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_and_reference(bool async) + { + await base.Include_collection_and_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID`, `c`.`CustomerID` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_multiple_conditional_order_by(bool async) + { + await base.Include_collection_with_multiple_conditional_order_by(async); + + AssertSql( + """ +@p='5' + +SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +ORDER BY NOT (`o`.`OrderID` > 0), IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, ''), `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +@p='5' + +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `s`.`OrderID`, `s`.`CustomerID` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `c`.`CustomerID`, `o`.`OrderID` > 0 AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0`, `s0`.`OrderID`, `s0`.`CustomerID` +) AS `s` +INNER JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID` +"""); + } + + public override async Task Include_where_skip_take_projection(bool async) + { + await base.Include_where_skip_take_projection(async); + + AssertSql( + """ +@p1='2' +@p='1' + +SELECT `o0`.`CustomerID` +FROM ( + SELECT TOP @p1 `o2`.`OrderID`, `o2`.`ProductID` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` + FROM `Order Details` AS `o` + WHERE `o`.`Quantity` = CINT(10) + ORDER BY `o`.`OrderID`, `o`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` +"""); + } + + public override async Task Include_collection_GroupBy_Select(bool async) + { + await base.Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID] +""", +// +""" +SELECT [o1].[OrderID], [o1].[ProductID], [o1].[Discount], [o1].[Quantity], [o1].[UnitPrice], [t].[OrderID], [t0].[OrderID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID] + FROM ( + SELECT [o0].[OrderID], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o1] ON [t0].[OrderID] = [o1].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID] +"""); + } + + public override async Task Join_Include_collection_GroupBy_Select(bool async) + { + await base.Join_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +""", +// +""" +SELECT [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +"""); + } + + public override async Task Include_collection_on_additional_from_clause_with_filter(bool async) + { + await base.Include_collection_on_additional_from_clause_with_filter(async); + + AssertSql( + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c`.`CustomerID` +FROM `Customers` AS `c`, +( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI' +) AS `c1` +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c1`.`CustomerID` +FROM `Customers` AS `c`, +(( + SELECT `c0`.`CustomerID` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI' +) AS `c1` +INNER JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_include_collection(bool async) + { + await base.Include_collection_then_include_collection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`c`.`CustomerID` LIKE 'F%') AND (`o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL) +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_first_or_default(bool async) + { + await base.Include_collection_order_by_non_key_with_first_or_default(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`CompanyName` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Join_Include_reference_GroupBy_Select(bool async) + { + await base.Join_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task SelectMany_Include_collection_GroupBy_Select(bool async) + { + await base.SelectMany_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +""", +// +""" +SELECT [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +"""); + } + + public override async Task Include_references_then_include_multi_level(bool async) + { + await base.Include_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_SelectMany_GroupBy_Select(bool async) + { + await base.Include_collection_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +""", +// +""" +SELECT [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice], [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +"""); + } + + public override async Task Include_multiple_references_multi_level(bool async) + { + await base.Include_multiple_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_order_by_subquery(bool async) + { + await base.Include_collection_order_by_subquery(async); + + AssertSql( + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`EmployeeID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c1` +ORDER BY `c1`.`c`, `c1`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` + FROM ( + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`EmployeeID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ) AS `c2` + ORDER BY `c2`.`c`, `c2`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_last(bool async) + { + await base.Include_collection_with_last(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`CompanyName` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_cross_apply_with_filter(bool async) + { + await base.Include_collection_with_cross_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +""", +// +""" +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID], [t].[OrderID] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +INNER JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_with_cross_join_clause_with_filter(bool async) + { + await base.Include_collection_with_cross_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID` +FROM `Customers` AS `c`, +( + SELECT TOP 5 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `c`.`CustomerID`, `o0`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID`), +( + SELECT TOP 5 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_in_let_followed_by_FirstOrDefault(bool async) + { + await base.Include_in_let_followed_by_FirstOrDefault(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderDate]) AS [row] + FROM [Orders] AS [o] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t0].[OrderID] +""", +// +""" +SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice], [c].[CustomerID], [t0].[OrderID] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[OrderID], [t].[CustomerID] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderDate]) AS [row] + FROM [Orders] AS [o] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +INNER JOIN [Order Details] AS [o0] ON [t0].[OrderID] = [o0].[OrderID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t0].[OrderID] +"""); + } + + public override async Task Include_reference_alias_generation(bool async) + { + await base.Include_reference_alias_generation(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_dependent_already_tracked(bool async) + { + await base.Include_collection_dependent_already_tracked(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_list_contains(bool async) + { + await base.Include_collection_OrderBy_list_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END, [c].[CustomerID] +OFFSET @__p_1 ROWS +""", +// +""" +@__p_1='1' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_principal_already_tracked(bool async) + { + await base.Include_collection_principal_already_tracked(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_alias_generation(bool async) + { + await base.Include_collection_alias_generation(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID` +FROM `Orders` AS `o` +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_take(bool async) + { + await base.Multi_level_includes_are_applied_with_take(async); + + AssertSql( + """ +@p='1' + +SELECT TOP 1 `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` +""", + // + """ +@p='1' + +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c1`.`CustomerID` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` +""", + // + """ +@p='1' + +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c1`.`CustomerID`, `o3`.`OrderID` +FROM (( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` +"""); + } + + public override async Task Include_duplicate_reference2(bool async) + { + await base.Include_duplicate_reference2(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Include_collection_then_reference(bool async) + { + await base.Include_collection_then_reference(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE (`p`.`ProductID` MOD 17) = 5 +ORDER BY `p`.`ProductID` +""", + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `p`.`ProductID` +FROM `Products` AS `p` +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 +ORDER BY `p`.`ProductID` +"""); + } + + public override async Task Include_duplicate_reference3(bool async) + { + await base.Include_duplicate_reference3(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(bool async) + { + await base.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`City` = 'Seattle' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`c`.`City` = 'Seattle') AND (`o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL) +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Then_include_collection_order_by_collection_column(bool async) + { + await base.Then_include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' +) AS `c1` +ORDER BY `c1`.`c` DESC, `c1`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` + FROM ( + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c2` + ORDER BY `c2`.`c` DESC, `c2`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `o0`.`OrderID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice`, `c0`.`CustomerID`, `o0`.`OrderID` +FROM (( + SELECT TOP 1 `c3`.`CustomerID`, `c3`.`c` + FROM ( + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c3` + ORDER BY `c3`.`c` DESC, `c3`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID`) +LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` +WHERE `o0`.`OrderID` IS NOT NULL AND `o1`.`OrderID` IS NOT NULL +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_order_by_key(bool async) + { + await base.Include_collection_order_by_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Filtered_include_with_multiple_ordering(bool async) + { + await base.Filtered_include_with_multiple_ordering(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID] +""", +// +""" +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [c].[CustomerID] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderID] + OFFSET 1 ROWS +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderDate] DESC +"""); + } + + public override async Task Include_collection_on_join_clause_with_order_by_and_filter(bool async) + { + await base.Include_collection_on_join_clause_with_order_by_and_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`City`, `c`.`CustomerID`, `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +INNER JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`City`, `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_duplicate_collection(bool async) + { + await base.Include_duplicate_collection(async); + + AssertSql( + """ +@p='2' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p='2' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c1`.`CustomerID`, `c2`.`CustomerID` +FROM (( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`), +( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p='2' + +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c1`.`CustomerID`, `c2`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +(( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +INNER JOIN `Orders` AS `o0` ON `c2`.`CustomerID` = `o0`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_empty_list_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY (SELECT 1), [c].[CustomerID] +OFFSET @__p_1 ROWS +""", +// +""" +@__p_1='1' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], CAST(0 AS bit) AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY (SELECT 1) + OFFSET @__p_1 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_reference_single_or_default_when_no_result(bool async) + { + await base.Include_reference_single_or_default_when_no_result(async); + + AssertSql( +""" +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Include_list(bool async) + { + await base.Include_list(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 +ORDER BY `p`.`ProductID` +""", + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `p`.`ProductID` +FROM `Products` AS `p` +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 +ORDER BY `p`.`ProductID` +"""); + } + + public override async Task Include_closes_reader(bool async) + { + await base.Include_closes_reader(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +""", + // + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter(bool async) + { + await base.Include_collection_with_outer_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +""", +// +""" +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID], [t].[OrderID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +INNER JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_when_projection(bool async) + { + await base.Include_collection_when_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +"""); + } + + public override async Task Include_with_complex_projection_does_not_change_ordering_of_projection(bool async) + { + await base.Include_with_complex_projection_does_not_change_ordering_of_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id`, ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `TotalOrders` +FROM `Customers` AS `c` +WHERE `c`.`ContactTitle` = 'Owner' AND ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 2 +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_empty_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_does_not_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY (SELECT 1), [c].[CustomerID] +OFFSET @__p_1 ROWS +""", +// +""" +@__p_1='1' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], CAST(1 AS bit) AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY (SELECT 1) + OFFSET @__p_1 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_collection(bool async) + { + await base.Include_collection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_reference_with_filter(bool async) + { + await base.Include_reference_with_filter(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip_take(bool async) + { + await base.Multi_level_includes_are_applied_with_skip_take(async); + + AssertSql( + """ +@p='1' + +SELECT TOP 1 `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC +) AS `c0` +ORDER BY `c0`.`CustomerID` +""", + // + """ +@p='1' + +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c2`.`CustomerID` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +INNER JOIN `Orders` AS `o3` ON `c2`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `o3`.`OrderID` +""", + // + """ +@p='1' + +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c2`.`CustomerID`, `o3`.`OrderID` +FROM (( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +INNER JOIN `Orders` AS `o3` ON `c2`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c2`.`CustomerID`, `o3`.`OrderID` +"""); + } + + public override async Task Repro9735(bool async) + { + await base.Repro9735(async); + + AssertSql( + """ +@p='2' + +SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +ORDER BY NOT (`c`.`CustomerID` IS NOT NULL), IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, ''), `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +@p='2' + +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `s`.`OrderID`, `s`.`CustomerID` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `c`.`CustomerID`, `c`.`CustomerID` IS NOT NULL AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0`, `s0`.`OrderID`, `s0`.`CustomerID` +) AS `s` +INNER JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID` +"""); + } + + public override async Task Include_reference(bool async) + { + await base.Include_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_reference_with_filter_reordered(bool async) + { + await base.Include_reference_with_filter_reordered(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_reference_when_projection(bool async) + { + await base.Include_reference_when_projection(async); + + AssertSql( +""" +SELECT `o`.`CustomerID` +FROM `Orders` AS `o` +"""); + } + + public override async Task Include_multiple_references(bool async) + { + await base.Include_multiple_references(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(bool async) + { + await base.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async); + + AssertSql( + """ +SELECT `e0`.`EmployeeID` IS NOT NULL, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e`.`EmployeeID` IN (1, 2) +ORDER BY `e`.`EmployeeID` +"""); + } + + public override async Task Include_reference_dependent_already_tracked(bool async) + { + await base.Include_reference_dependent_already_tracked(async); + + AssertSql( +""" +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_reference_when_entity_in_projection(bool async) + { + await base.Include_reference_when_entity_in_projection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_collection_force_alias_uniquefication(bool async) + { + await base.Include_collection_force_alias_uniquefication(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = 'ALFKI' +ORDER BY `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID` +FROM `Orders` AS `o` +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` = 'ALFKI' +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Include_reference_Join_GroupBy_Select(bool async) + { + await base.Include_reference_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_with_filter(bool async) + { + await base.Include_collection_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_with_skip(bool async) + { + await base.Include_with_skip(async); + + AssertSql( +""" +@__p_0='80' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +ORDER BY [c].[ContactName], [c].[CustomerID] +OFFSET @__p_0 ROWS +""", +// +""" +@__p_0='80' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], [c].[ContactName] + FROM [Customers] AS [c] + ORDER BY [c].[ContactName] + OFFSET @__p_0 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactName], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_take_no_order_by(bool async) + { + await base.Include_collection_take_no_order_by(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +""", + // + """ +@p='10' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_with_left_join_clause_with_filter(bool async) + { + await base.Include_collection_with_left_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +INNER JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_right_join_clause_with_filter(bool async) + { + await base.Include_collection_with_right_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID` +FROM `Customers` AS `c` +RIGHT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +RIGHT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +INNER JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_reference_distinct_is_server_evaluated(bool async) + { + await base.Include_reference_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10250 +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_on_additional_from_clause(bool async) + { + await base.Include_collection_on_additional_from_clause(async); + + AssertSql( + """ +@p='5' + +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `c1`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'F%' +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p='5' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c1`.`CustomerID`, `c2`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +(( + SELECT `c0`.`CustomerID` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'F%' +) AS `c2` +INNER JOIN `Orders` AS `o` ON `c2`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_join_clause_with_filter(bool async) + { + await base.Include_collection_with_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +INNER JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_duplicate_collection_result_operator2(bool async) + { + await base.Include_duplicate_collection_result_operator2(async); + + AssertSql( + """ +@p2='1' +@p='2' + +SELECT TOP @p2 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p2='1' +@p='2' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`CustomerID0` +FROM ( + SELECT TOP @p2 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1`, + ( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o` ON `s`.`CustomerID` = `o`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`CustomerID0` +"""); + } + + public override async Task Include_collection_then_include_collection_then_include_reference(bool async) + { + await base.Include_collection_then_include_collection_then_include_reference(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` +) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +WHERE (`c`.`CustomerID` LIKE 'F%') AND (`o`.`OrderID` IS NOT NULL AND `s`.`OrderID` IS NOT NULL) +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task SelectMany_Include_reference_GroupBy_Select(bool async) + { + await base.SelectMany_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_reference_SelectMany_GroupBy_Select(bool async) + { + await base.Include_reference_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_order_by_non_key_with_take(bool async) + { + await base.Include_collection_order_by_non_key_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`ContactTitle`, `c`.`CustomerID` +""", + // + """ +@p='10' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`ContactTitle` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_with_take(bool async) + { + await base.Include_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`ContactName` DESC, `c`.`CustomerID` +""", + // + """ +@p='10' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`ContactName` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` DESC, `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter_non_equality(bool async) + { + await base.Include_collection_with_outer_apply_with_filter_non_equality(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] <> [c].[CustomerID] OR ([o].[CustomerID] IS NULL) + ORDER BY [c].[CustomerID] +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +""", +// +""" +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID], [t].[OrderID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] <> [c].[CustomerID] OR ([o].[CustomerID] IS NULL) + ORDER BY [c].[CustomerID] +) AS [t] +INNER JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_distinct_is_server_evaluated(bool async) + { + await base.Include_collection_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +ORDER BY `c0`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_object(bool async) + { + await base.Include_collection_OrderBy_object(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10250 +ORDER BY `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID` +FROM `Orders` AS `o` +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`OrderID` < 10250 +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Include_collection_then_include_collection_predicate(bool async) + { + await base.Include_collection_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c0`.`CustomerID`, `o`.`OrderID` +FROM (( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL +ORDER BY `c0`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_skip(bool async) + { + await base.Include_collection_order_by_non_key_with_skip(async); + + AssertSql( +""" +@__p_0='2' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[ContactTitle], [c].[CustomerID] +OFFSET @__p_0 ROWS +""", +// +""" +@__p_0='2' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], [c].[ContactTitle] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'F%' + ORDER BY [c].[ContactTitle] + OFFSET @__p_0 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactTitle], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_with_conditional_order_by(bool async) + { + await base.Include_collection_with_conditional_order_by(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY IIF(`c`.`CustomerID` LIKE 'S%', 1, 2), `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY IIF(`c`.`CustomerID` LIKE 'S%', 1, 2), `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_orderby_take(bool async) + { + await base.Include_collection_orderby_take(async); + + AssertSql( + """ +@p='5' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +""", + // + """ +@p='5' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_single_or_default_no_result(bool async) + { + await base.Include_collection_single_or_default_no_result(async); + + AssertSql( +""" +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI ?' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_Join_GroupBy_Select(bool async) + { + await base.Include_collection_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +""", +// +""" +SELECT [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice], [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +"""); + } + + public override async Task Include_reference_and_collection(bool async) + { + await base.Include_reference_and_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID`, `c`.`CustomerID` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_last_no_orderby(bool async) + { + await base.Include_collection_with_last_no_orderby(async); + + AssertSql(); + } + + public override async Task Include_multi_level_reference_and_collection_predicate(bool async) + { + await base.Include_multi_level_reference_and_collection_predicate(async); + + AssertSql(); + } + + public override async Task Include_multi_level_reference_then_include_collection_predicate(bool async) + { + await base.Include_multi_level_reference_then_include_collection_predicate(async); + + AssertSql(); + } + + public override async Task Include_multiple_references_and_collection_multi_level(bool async) + { + await base.Include_multiple_references_and_collection_multi_level(async); + + AssertSql(); + } + + public override async Task Include_multiple_references_and_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_and_collection_multi_level_reverse(async); + + AssertSql(); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level(async); + + AssertSql(); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level_reverse(async); + + AssertSql(); + } + + public override async Task Include_reference_and_collection_order_by(bool async) + { + await base.Include_reference_and_collection_order_by(async); + + AssertSql(); + } + + public override async Task Include_references_and_collection_multi_level(bool async) + { + await base.Include_references_and_collection_multi_level(async); + + AssertSql(); + } + + public override async Task Include_references_and_collection_multi_level_predicate(bool async) + { + await base.Include_references_and_collection_multi_level_predicate(async); + + AssertSql(); + } + + public override async Task Include_references_then_include_collection(bool async) + { + await base.Include_references_then_include_collection(async); + + AssertSql(); + } + + public override async Task Include_references_then_include_collection_multi_level(bool async) + { + await base.Include_references_then_include_collection_multi_level(async); + + AssertSql(); + } + + public override async Task Include_references_then_include_collection_multi_level_predicate(bool async) + { + await base.Include_references_then_include_collection_multi_level_predicate(async); + + AssertSql(); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async); + + AssertSql(); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async); + + AssertSql(); + } + + public override async Task Include_property_after_navigation(bool async) + { + await base.Include_property_after_navigation(async); + + AssertSql(); + } + + public override async Task Include_property(bool async) + { + await base.Include_property(async); + + AssertSql(); + } + + public override async Task Include_property_expression_invalid(bool async) + { + await base.Include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Then_include_property_expression_invalid(bool async) + { + await base.Then_include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Include_collection_with_client_filter(bool async) + { + await base.Include_collection_with_client_filter(async); + + AssertSql(); + } + + public override async Task Include_specified_on_non_entity_not_supported(bool async) + { + await base.Include_specified_on_non_entity_not_supported(async); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSplitIncludeQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSplitIncludeQueryLibRedTest.cs new file mode 100644 index 00000000..2b1c2381 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSplitIncludeQueryLibRedTest.cs @@ -0,0 +1,3184 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.Jet.Internal; +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class NorthwindSplitIncludeQueryLibRedTest : NorthwindSplitIncludeQueryTestBase< + NorthwindQueryLibRedFixture> +{ + // ReSharper disable once UnusedParameter.Local + public NorthwindSplitIncludeQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Include_list(bool async) + { + await base.Include_list(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 +ORDER BY `p`.`ProductID` +""", + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `p`.`ProductID` +FROM `Products` AS `p` +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 +ORDER BY `p`.`ProductID` +"""); + } + + public override async Task Include_reference(bool async) + { + await base.Include_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_when_result_operator(bool async) + { + await base.Include_when_result_operator(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Include_collection(bool async) + { + await base.Include_collection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_last(bool async) + { + await base.Include_collection_with_last(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`CompanyName` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_skip_no_order_by(bool async) + => Assert.Equal( + JetStrings.SplitQueryOffsetWithoutOrderBy, + (await Assert.ThrowsAsync(() => base.Include_collection_skip_no_order_by(async))).Message); + + public override async Task Include_collection_take_no_order_by(bool async) + { + await base.Include_collection_take_no_order_by(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +""", + // + """ +@p='10' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_skip_take_no_order_by(bool async) + => Assert.Equal( + JetStrings.SplitQueryOffsetWithoutOrderBy, + (await Assert.ThrowsAsync(() => base.Include_collection_skip_take_no_order_by(async))).Message); + + public override async Task Include_reference_and_collection(bool async) + { + await base.Include_reference_and_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID`, `c`.`CustomerID` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + [ConditionalFact] + public virtual void ToQueryString_for_include_reference_and_collection() + { + using var context = CreateContext(); + + Assert.Equal( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +ORDER BY `o`.`OrderID`, `c`.`CustomerID` + + +""" + + RelationalStrings.SplitQueryString, + context.Set().Include(o => o.Customer).Include(o => o.OrderDetails).AsSplitQuery().ToQueryString(), + ignoreLineEndingDifferences: true, + ignoreWhiteSpaceDifferences: true); + } + + public override async Task Include_references_multi_level(bool async) + { + await base.Include_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_multiple_references_multi_level(bool async) + { + await base.Include_multiple_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_multiple_references_multi_level_reverse(bool async) + { + await base.Include_multiple_references_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_references_and_collection_multi_level(bool async) + { + await base.Include_references_and_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 AND `o`.`UnitPrice` < 10.0 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE ((`o`.`OrderID` MOD 23) = 13 AND `o`.`UnitPrice` < 10.0) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_multi_level_reference_and_collection_predicate(bool async) + { + await base.Include_multi_level_reference_and_collection_predicate(async); + + AssertSql( + """ +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `s`.`OrderID`, `s`.`CustomerID` +FROM ( + SELECT TOP 1 `o`.`OrderID`, `c`.`CustomerID` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` = 10248 + ORDER BY `o`.`OrderID`, `c`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o0` ON `s`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID` +"""); + } + + public override async Task Include_multi_level_collection_and_then_include_reference_predicate(bool async) + { + await base.Include_multi_level_collection_and_then_include_reference_predicate(async); + + AssertSql( + """ +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID` +""", + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock`, `o1`.`OrderID` +FROM ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10248 + ORDER BY `o`.`OrderID` +) AS `o1` +INNER JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID` +"""); + } + + public override async Task Include_collection_alias_generation(bool async) + { + await base.Include_collection_alias_generation(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID` +FROM `Orders` AS `o` +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Include_collection_order_by_collection_column(bool async) + { + await base.Include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' +) AS `c1` +ORDER BY `c1`.`c` DESC, `c1`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` + FROM ( + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c2` + ORDER BY `c2`.`c` DESC, `c2`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_key(bool async) + { + await base.Include_collection_order_by_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_non_key(bool async) + { + await base.Include_collection_order_by_non_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`PostalCode`, `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`PostalCode`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_take(bool async) + { + await base.Include_collection_order_by_non_key_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`ContactTitle`, `c`.`CustomerID` +""", + // + """ +@p='10' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`ContactTitle` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_skip(bool async) + { + await base.Include_collection_order_by_non_key_with_skip(async); + + AssertSql( +""" +@__p_0='2' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[ContactTitle], [c].[CustomerID] +OFFSET @__p_0 ROWS +""", +// +""" +@__p_0='2' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], [c].[ContactTitle] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'F%' + ORDER BY [c].[ContactTitle] + OFFSET @__p_0 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactTitle], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_order_by_non_key_with_first_or_default(bool async) + { + await base.Include_collection_order_by_non_key_with_first_or_default(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`CompanyName` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_subquery(bool async) + { + await base.Include_collection_order_by_subquery(async); + + AssertSql( + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`EmployeeID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c1` +ORDER BY `c1`.`c`, `c1`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` + FROM ( + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`EmployeeID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ) AS `c2` + ORDER BY `c2`.`c`, `c2`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_principal_already_tracked(bool async) + { + await base.Include_collection_principal_already_tracked(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_filter(bool async) + { + await base.Include_collection_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_filter_reordered(bool async) + { + await base.Include_collection_with_filter_reordered(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_include_collection(bool async) + { + await base.Include_collection_then_include_collection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`c`.`CustomerID` LIKE 'F%') AND (`o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL) +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_then_include_collection_then_include_reference(bool async) + { + await base.Include_collection_then_include_collection_then_include_reference(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` +) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +WHERE (`c`.`CustomerID` LIKE 'F%') AND (`o`.`OrderID` IS NOT NULL AND `s`.`OrderID` IS NOT NULL) +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_when_projection(bool async) + { + await base.Include_collection_when_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +"""); + } + + public override async Task Include_collection_with_join_clause_with_filter(bool async) + { + await base.Include_collection_with_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +INNER JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_left_join_clause_with_filter(bool async) + { + await base.Include_collection_with_left_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +INNER JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_right_join_clause_with_filter(bool async) + { + await base.Include_collection_with_right_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID` +FROM `Customers` AS `c` +RIGHT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +RIGHT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +INNER JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_cross_join_clause_with_filter(bool async) + { + await base.Include_collection_with_cross_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID` +FROM `Customers` AS `c`, +( + SELECT TOP 5 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `c`.`CustomerID`, `o0`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID`), +( + SELECT TOP 5 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_with_cross_apply_with_filter(bool async) + { + await base.Include_collection_with_cross_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +""", +// +""" +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID], [t].[OrderID] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +INNER JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter(bool async) + { + await base.Include_collection_with_outer_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +""", +// +""" +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID], [t].[OrderID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +INNER JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_on_additional_from_clause_with_filter(bool async) + { + await base.Include_collection_on_additional_from_clause_with_filter(async); + + AssertSql( + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c`.`CustomerID` +FROM `Customers` AS `c`, +( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI' +) AS `c1` +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c1`.`CustomerID` +FROM `Customers` AS `c`, +(( + SELECT `c0`.`CustomerID` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI' +) AS `c1` +INNER JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` +"""); + } + + public override async Task Include_collection_on_additional_from_clause(bool async) + { + await base.Include_collection_on_additional_from_clause(async); + + AssertSql( + """ +@p='5' + +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `c1`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'F%' +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p='5' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c1`.`CustomerID`, `c2`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +(( + SELECT `c0`.`CustomerID` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'F%' +) AS `c2` +INNER JOIN `Orders` AS `o` ON `c2`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +"""); + } + + public override async Task Include_duplicate_collection(bool async) + { + await base.Include_duplicate_collection(async); + + AssertSql( + """ +@p='2' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p='2' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c1`.`CustomerID`, `c2`.`CustomerID` +FROM (( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`), +( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p='2' + +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c1`.`CustomerID`, `c2`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +(( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +INNER JOIN `Orders` AS `o0` ON `c2`.`CustomerID` = `o0`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +"""); + } + + public override async Task Include_duplicate_collection_result_operator(bool async) + { + await base.Include_duplicate_collection_result_operator(async); + + AssertSql( + """ +@p2='1' +@p='2' + +SELECT TOP @p2 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p2='1' +@p='2' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`CustomerID0` +FROM ( + SELECT TOP @p2 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1`, + ( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o` ON `s`.`CustomerID` = `o`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`CustomerID0` +""", + // + """ +@p2='1' +@p='2' + +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `s0`.`CustomerID`, `s0`.`CustomerID0` +FROM ( + SELECT TOP @p2 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1`, + ( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +) AS `s0` +INNER JOIN `Orders` AS `o0` ON `s0`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s0`.`CustomerID`, `s0`.`CustomerID0` +"""); + } + + public override async Task Include_collection_on_join_clause_with_order_by_and_filter(bool async) + { + await base.Include_collection_on_join_clause_with_order_by_and_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`City`, `c`.`CustomerID`, `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +INNER JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`City`, `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter_non_equality(bool async) + { + await base.Include_collection_with_outer_apply_with_filter_non_equality(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] <> [c].[CustomerID] OR ([o].[CustomerID] IS NULL) + ORDER BY [c].[CustomerID] +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +""", +// +""" +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID], [t].[OrderID] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] <> [c].[CustomerID] OR ([o].[CustomerID] IS NULL) + ORDER BY [c].[CustomerID] +) AS [t] +INNER JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_on_additional_from_clause2(bool async) + { + await base.Include_collection_on_additional_from_clause2(async); + + AssertSql( + """ +@p='5' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +`Customers` AS `c0` +ORDER BY `c1`.`CustomerID` +"""); + } + + public override async Task Include_where_skip_take_projection(bool async) + { + await base.Include_where_skip_take_projection(async); + + AssertSql( + """ +@p1='2' +@p='1' + +SELECT `o0`.`CustomerID` +FROM ( + SELECT TOP @p1 `o2`.`OrderID`, `o2`.`ProductID` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` + FROM `Order Details` AS `o` + WHERE `o`.`Quantity` = CINT(10) + ORDER BY `o`.`OrderID`, `o`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` +"""); + } + + public override async Task Include_duplicate_collection_result_operator2(bool async) + { + await base.Include_duplicate_collection_result_operator2(async); + + AssertSql( + """ +@p2='1' +@p='2' + +SELECT TOP @p2 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +""", + // + """ +@p2='1' +@p='2' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`CustomerID0` +FROM ( + SELECT TOP @p2 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` + ) AS `c1`, + ( + SELECT TOP 2 `c3`.`CustomerID` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o` ON `s`.`CustomerID` = `o`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`CustomerID0` +"""); + } + + public override async Task Include_multiple_references(bool async) + { + await base.Include_multiple_references(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_reference_alias_generation(bool async) + { + await base.Include_reference_alias_generation(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_duplicate_reference(bool async) + { + await base.Include_duplicate_reference(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM (( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`CustomerID`, `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` +"""); + } + + public override async Task Include_duplicate_reference2(bool async) + { + await base.Include_duplicate_reference2(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Include_duplicate_reference3(bool async) + { + await base.Include_duplicate_reference3(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Include_reference_when_projection(bool async) + { + await base.Include_reference_when_projection(async); + + AssertSql( +""" +SELECT `o`.`CustomerID` +FROM `Orders` AS `o` +"""); + } + + public override async Task Include_reference_with_filter_reordered(bool async) + { + await base.Include_reference_with_filter_reordered(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_reference_with_filter(bool async) + { + await base.Include_reference_with_filter(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_collection_dependent_already_tracked(bool async) + { + await base.Include_collection_dependent_already_tracked(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_reference_dependent_already_tracked(bool async) + { + await base.Include_reference_dependent_already_tracked(async); + + AssertSql( +""" +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_with_complex_projection(bool async) + { + await base.Include_with_complex_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_with_complex_projection_does_not_change_ordering_of_projection(bool async) + { + await base.Include_with_complex_projection_does_not_change_ordering_of_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id`, ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `TotalOrders` +FROM `Customers` AS `c` +WHERE `c`.`ContactTitle` = 'Owner' AND ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 2 +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_with_take(bool async) + { + await base.Include_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`ContactName` DESC, `c`.`CustomerID` +""", + // + """ +@p='10' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`ContactName` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` DESC, `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_with_skip(bool async) + { + await base.Include_with_skip(async); + + AssertSql( +""" +@__p_0='80' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +ORDER BY [c].[ContactName], [c].[CustomerID] +OFFSET @__p_0 ROWS +""", +// +""" +@__p_0='80' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], [c].[ContactName] + FROM [Customers] AS [c] + ORDER BY [c].[ContactName] + OFFSET @__p_0 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactName], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_with_multiple_conditional_order_by(bool async) + { + await base.Include_collection_with_multiple_conditional_order_by(async); + + AssertSql( + """ +@p='5' + +SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +ORDER BY NOT (`o`.`OrderID` > 0), IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, ''), `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +@p='5' + +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `s`.`OrderID`, `s`.`CustomerID` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `c`.`CustomerID`, `o`.`OrderID` > 0 AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0`, `s0`.`OrderID`, `s0`.`CustomerID` +) AS `s` +INNER JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID` +"""); + } + + public override async Task Then_include_collection_order_by_collection_column(bool async) + { + await base.Then_include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` +FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' +) AS `c1` +ORDER BY `c1`.`c` DESC, `c1`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` + FROM ( + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c2` + ORDER BY `c2`.`c` DESC, `c2`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `o0`.`OrderID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice`, `c0`.`CustomerID`, `o0`.`OrderID` +FROM (( + SELECT TOP 1 `c3`.`CustomerID`, `c3`.`c` + FROM ( + SELECT `c`.`CustomerID`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c3` + ORDER BY `c3`.`c` DESC, `c3`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID`) +LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` +WHERE `o0`.`OrderID` IS NOT NULL AND `o1`.`OrderID` IS NOT NULL +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_with_conditional_order_by(bool async) + { + await base.Include_collection_with_conditional_order_by(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY IIF(`c`.`CustomerID` LIKE 'S%', 1, 2), `c`.`CustomerID` +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY IIF(`c`.`CustomerID` LIKE 'S%', 1, 2), `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_GroupBy_Select(bool async) + { + await base.Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID] +""", +// +""" +SELECT [o1].[OrderID], [o1].[ProductID], [o1].[Discount], [o1].[Quantity], [o1].[UnitPrice], [t].[OrderID], [t0].[OrderID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID] + FROM ( + SELECT [o0].[OrderID], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o1] ON [t0].[OrderID] = [o1].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID] +"""); + } + + public override async Task Include_reference_GroupBy_Select(bool async) + { + await base.Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + LEFT JOIN [Customers] AS [c] ON [o0].[CustomerID] = [c].[CustomerID] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_Join_GroupBy_Select(bool async) + { + await base.Include_collection_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +""", +// +""" +SELECT [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice], [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +"""); + } + + public override async Task Include_reference_Join_GroupBy_Select(bool async) + { + await base.Include_reference_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Join_Include_collection_GroupBy_Select(bool async) + { + await base.Join_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +""", +// +""" +SELECT [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +"""); + } + + public override async Task Join_Include_reference_GroupBy_Select(bool async) + { + await base.Join_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_SelectMany_GroupBy_Select(bool async) + { + await base.Include_collection_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +""", +// +""" +SELECT [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice], [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID] +"""); + } + + public override async Task Include_reference_SelectMany_GroupBy_Select(bool async) + { + await base.Include_reference_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task SelectMany_Include_collection_GroupBy_Select(bool async) + { + await base.SelectMany_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +""", +// +""" +SELECT [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +INNER JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID] +"""); + } + + public override async Task SelectMany_Include_reference_GroupBy_Select(bool async) + { + await base.SelectMany_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10250 +) AS `t` +LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_reference_distinct_is_server_evaluated(bool async) + { + await base.Include_reference_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10250 +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_distinct_is_server_evaluated(bool async) + { + await base.Include_collection_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +ORDER BY `c0`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_object(bool async) + { + await base.Include_collection_OrderBy_object(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` < 10250 +ORDER BY `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID` +FROM `Orders` AS `o` +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`OrderID` < 10250 +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Include_collection_OrderBy_empty_list_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY (SELECT 1), [c].[CustomerID] +OFFSET @__p_1 ROWS +""", +// +""" +@__p_1='1' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], CAST(0 AS bit) AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY (SELECT 1) + OFFSET @__p_1 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_OrderBy_empty_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_does_not_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY (SELECT 1), [c].[CustomerID] +OFFSET @__p_1 ROWS +""", +// +""" +@__p_1='1' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], CAST(1 AS bit) AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY (SELECT 1) + OFFSET @__p_1 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_OrderBy_list_contains(bool async) + { + await base.Include_collection_OrderBy_list_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END, [c].[CustomerID] +OFFSET @__p_1 ROWS +""", +// +""" +@__p_1='1' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_OrderBy_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_list_does_not_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'A%' +ORDER BY CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END, [c].[CustomerID] +OFFSET @__p_1 ROWS +""", +// +""" +@__p_1='1' + +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[CustomerID] +FROM ( + SELECT [c].[CustomerID], CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +INNER JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(bool async) + { + await base.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async); + + AssertSql( + """ +SELECT `e0`.`EmployeeID` IS NOT NULL, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e`.`EmployeeID` IN (1, 2) +ORDER BY `e`.`EmployeeID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip(bool async) + { + await base.Multi_level_includes_are_applied_with_skip(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +ORDER BY `c1`.`CustomerID` +""", + // + """ +@p='1' + +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c1`.`CustomerID` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` +""", + // + """ +@p='1' + +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c1`.`CustomerID`, `o3`.`OrderID` +FROM (( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_take(bool async) + { + await base.Multi_level_includes_are_applied_with_take(async); + + AssertSql( + """ +@p='1' + +SELECT TOP 1 `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` +""", + // + """ +@p='1' + +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c1`.`CustomerID` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` +""", + // + """ +@p='1' + +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c1`.`CustomerID`, `o3`.`OrderID` +FROM (( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip_take(bool async) + { + await base.Multi_level_includes_are_applied_with_skip_take(async); + + AssertSql( + """ +@p='1' + +SELECT TOP 1 `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC +) AS `c0` +ORDER BY `c0`.`CustomerID` +""", + // + """ +@p='1' + +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c2`.`CustomerID` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +INNER JOIN `Orders` AS `o3` ON `c2`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `o3`.`OrderID` +""", + // + """ +@p='1' + +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c2`.`CustomerID`, `o3`.`OrderID` +FROM (( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +INNER JOIN `Orders` AS `o3` ON `c2`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c2`.`CustomerID`, `o3`.`OrderID` +"""); + } + + public override async Task Filtered_include_with_multiple_ordering(bool async) + { + await base.Filtered_include_with_multiple_ordering(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID] +""", +// +""" +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [c].[CustomerID] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY [o].[OrderID] + OFFSET 1 ROWS +) AS [t] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderDate] DESC +"""); + } + + public override async Task Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(bool async) + { + await base.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`City` = 'Seattle' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c`.`CustomerID`, `o`.`OrderID` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`c`.`City` = 'Seattle') AND (`o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL) +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_in_let_followed_by_FirstOrDefault(bool async) + { + await base.Include_in_let_followed_by_FirstOrDefault(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderDate]) AS [row] + FROM [Orders] AS [o] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t0].[OrderID] +""", +// +""" +SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice], [c].[CustomerID], [t0].[OrderID] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[OrderID], [t].[CustomerID] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderDate]) AS [row] + FROM [Orders] AS [o] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +INNER JOIN [Order Details] AS [o0] ON [t0].[OrderID] = [o0].[OrderID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t0].[OrderID] +"""); + } + + public override async Task Include_multiple_references_and_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_and_collection_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +FROM (((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE ((`o`.`OrderID` MOD 23) = 13) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_force_alias_uniquefication(bool async) + { + await base.Include_collection_force_alias_uniquefication(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = 'ALFKI' +ORDER BY `o`.`OrderID` +""", +// +""" +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID` +FROM `Orders` AS `o` +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` = 'ALFKI' +ORDER BY `o`.`OrderID` +"""); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` < 10800 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o`.`OrderID`, `c`.`CustomerID` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE (`o`.`OrderID` < 10800) AND (`c`.`CustomerID` IS NOT NULL AND `o0`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_reference_when_entity_in_projection(bool async) + { + await base.Include_reference_when_entity_in_projection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_closes_reader(bool async) + { + await base.Include_closes_reader(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +""", + // + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +"""); + } + + public override async Task Include_collection_then_reference(bool async) + { + await base.Include_collection_then_reference(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE (`p`.`ProductID` MOD 17) = 5 +ORDER BY `p`.`ProductID` +""", + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `p`.`ProductID` +FROM `Products` AS `p` +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 +ORDER BY `p`.`ProductID` +"""); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +FROM (((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE ((`o`.`OrderID` MOD 23) = 13) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +"""); + } + + public override async Task Include_collection_orderby_take(bool async) + { + await base.Include_collection_orderby_take(async); + + AssertSql( + """ +@p='5' + +SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +ORDER BY `c`.`CustomerID` +""", + // + """ +@p='5' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_references_and_collection_multi_level_predicate(bool async) + { + await base.Include_references_and_collection_multi_level_predicate(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` = 10248) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_references_then_include_collection_multi_level_predicate(bool async) + { + await base.Include_references_then_include_collection_multi_level_predicate(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` = 10248) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level(bool async) + { + await base.Include_multiple_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_empty_reference_sets_IsLoaded(bool async) + { + await base.Include_empty_reference_sets_IsLoaded(async); + + AssertSql( +""" +SELECT TOP 1 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e0`.`EmployeeID` IS NULL +"""); + } + + public override async Task Include_reference_and_collection_order_by(bool async) + { + await base.Include_reference_and_collection_order_by(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o`.`OrderID`, `c`.`CustomerID` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE (`o`.`CustomerID` LIKE 'F%') AND (`c`.`CustomerID` IS NOT NULL AND `o0`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +FROM (((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE ((`o`.`OrderID` MOD 23) = 13) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_references_then_include_collection_multi_level(bool async) + { + await base.Include_references_then_include_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE ((`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10)) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_and_reference(bool async) + { + await base.Include_collection_and_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `o`.`OrderID`, `c`.`CustomerID` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_include_collection_predicate(bool async) + { + await base.Include_collection_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `o`.`OrderID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c0`.`CustomerID`, `o`.`OrderID` +FROM (( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ORDER BY `c`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL +ORDER BY `c0`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_references_then_include_multi_level(bool async) + { + await base.Include_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` < 10800 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o`.`OrderID`, `c`.`CustomerID` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE (`o`.`OrderID` < 10800) AND (`c`.`CustomerID` IS NOT NULL AND `o0`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_references_then_include_collection(bool async) + { + await base.Include_references_then_include_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o`.`OrderID`, `c`.`CustomerID` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE (`o`.`CustomerID` LIKE 'F%') AND (`c`.`CustomerID` IS NOT NULL AND `o0`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_single_or_default_no_result(bool async) + { + await base.Include_collection_single_or_default_no_result(async); + + AssertSql( +""" +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI ?' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_multiple_references_and_collection_multi_level(bool async) + { + await base.Include_multiple_references_and_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +""", + // + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +FROM (((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE ((`o`.`OrderID` MOD 23) = 13) AND (`c`.`CustomerID` IS NOT NULL AND `o1`.`CustomerID` IS NOT NULL) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +"""); + } + + public override async Task Repro9735(bool async) + { + await base.Repro9735(async); + + AssertSql( + """ +@p='2' + +SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +ORDER BY NOT (`c`.`CustomerID` IS NOT NULL), IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, ''), `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +@p='2' + +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `s`.`OrderID`, `s`.`CustomerID` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `c`.`CustomerID`, `c`.`CustomerID` IS NOT NULL AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0`, `s0`.`OrderID`, `s0`.`CustomerID` +) AS `s` +INNER JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID` +"""); + } + + public override async Task Include_reference_single_or_default_when_no_result(bool async) + { + await base.Include_reference_single_or_default_when_no_result(async); + + AssertSql( +""" +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Include_multi_level_reference_then_include_collection_predicate(bool async) + { + await base.Include_multi_level_reference_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +""", + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `s`.`OrderID`, `s`.`CustomerID` +FROM ( + SELECT TOP 1 `o`.`OrderID`, `c`.`CustomerID` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` = 10248 + ORDER BY `o`.`OrderID`, `c`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o0` ON `s`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_last_no_orderby(bool async) + { + await base.Include_collection_with_last_no_orderby(async); + + AssertSql(); + } + + public override async Task Include_property_after_navigation(bool async) + { + await base.Include_property_after_navigation(async); + + AssertSql(); + } + + public override async Task Include_property(bool async) + { + await base.Include_property(async); + + AssertSql(); + } + + public override async Task Include_property_expression_invalid(bool async) + { + await base.Include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Then_include_property_expression_invalid(bool async) + { + await base.Then_include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Include_collection_with_client_filter(bool async) + { + await base.Include_collection_with_client_filter(async); + + AssertSql(); + } + + public override async Task Include_specified_on_non_entity_not_supported(bool async) + { + await base.Include_specified_on_non_entity_not_supported(async); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSqlQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSqlQueryLibRedTest.cs new file mode 100644 index 00000000..2421b1ad --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindSqlQueryLibRedTest.cs @@ -0,0 +1,86 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Data.Common; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class NorthwindSqlQueryLibRedTest : NorthwindSqlQueryTestBase> +{ + public NorthwindSqlQueryLibRedTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task SqlQueryRaw_over_int(bool async) + { + await base.SqlQueryRaw_over_int(async); + + AssertSql( +""" +SELECT `ProductID` FROM `Products` +"""); + } + + public override async Task SqlQuery_composed_Contains(bool async) + { + await base.SqlQuery_composed_Contains(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` IN ( + SELECT `s`.`Value` + FROM ( + SELECT `ProductID` AS `Value` FROM `Products` + ) AS `s` +) +"""); + } + + public override async Task SqlQuery_composed_Join(bool async) + { + await base.SqlQuery_composed_Join(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, IIF(`s`.`Value` IS NULL, NULL, CLNG(`s`.`Value`)) AS `p` +FROM `Orders` AS `o` +INNER JOIN ( + SELECT `ProductID` AS `Value` FROM `Products` +) AS `s` ON `o`.`OrderID` = IIF(`s`.`Value` IS NULL, NULL, CLNG(`s`.`Value`)) +"""); + } + + public override async Task SqlQuery_over_int_with_parameter(bool async) + { + await base.SqlQuery_over_int_with_parameter(async); + + AssertSql( + $""" +p0='10' + +SELECT `ProductID` FROM `Products` WHERE `ProductID` = {AssertSqlHelper.Parameter("@p0")} +"""); + } + + protected override DbParameter CreateDbParameter(string name, object value) + { + return new LibRedParameter { ParameterName = name, Value = value }; + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindStringIncludeQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindStringIncludeQueryLibRedTest.cs new file mode 100644 index 00000000..8568ae2e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindStringIncludeQueryLibRedTest.cs @@ -0,0 +1,2246 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class NorthwindStringIncludeQueryLibRedTest : NorthwindStringIncludeQueryTestBase< + NorthwindQueryLibRedFixture> +{ + // ReSharper disable once UnusedParameter.Local + public NorthwindStringIncludeQueryLibRedTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Include_collection_with_last_no_orderby(bool async) + { + Assert.Equal( + RelationalStrings.LastUsedWithoutOrderBy(nameof(Enumerable.Last)), + (await Assert.ThrowsAsync( + () => base.Include_collection_with_last_no_orderby(async))).Message); + + AssertSql(); + } + + public override async Task Include_collection_with_filter_reordered(bool async) + { + await base.Include_collection_with_filter_reordered(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_first_or_default(bool async) + { + await base.Include_collection_order_by_non_key_with_first_or_default(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsTracking_NoTrackingWithIdentityResolution(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`OrderID` < 10800 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_filter(bool async) + { + await base.Include_collection_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_references_then_include_multi_level(bool async) + { + await base.Include_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_order_by_collection_column(bool async) + { + await base.Include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_alias_generation(bool async) + { + await base.Include_collection_alias_generation(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_skip_take_no_order_by(bool async) + { + await base.Include_collection_skip_take_no_order_by(async); + + AssertSql( +""" +@__p_0='10' +@__p_1='5' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[CustomerID] +"""); + } + + public override async Task Include_collection_with_cross_join_clause_with_filter(bool async) + { + await base.Include_collection_with_cross_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID`), +( + SELECT TOP 5 `o`.`OrderID` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Join_Include_reference_GroupBy_Select(bool async) + { + await base.Join_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_multi_level_reference_and_collection_predicate(bool async) + { + await base.Include_multi_level_reference_and_collection_predicate(async); + + AssertSql( + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` = 10248 +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` +"""); + } + + public override async Task Include_references_then_include_collection(bool async) + { + await base.Include_references_then_include_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_on_additional_from_clause_with_filter(bool async) + { + await base.Include_collection_on_additional_from_clause_with_filter(async); + + AssertSql( + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c`, +(( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = 'ALFKI' +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` +"""); + } + + public override async Task Include_duplicate_reference3(bool async) + { + await base.Include_duplicate_reference3(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_take(bool async) + { + await base.Include_collection_order_by_non_key_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_include_collection_predicate(bool async) + { + await base.Include_collection_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_take_no_order_by(bool async) + { + await base.Include_collection_take_no_order_by(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_principal_already_tracked(bool async) + { + await base.Include_collection_principal_already_tracked(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_object(bool async) + { + await base.Include_collection_OrderBy_object(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`OrderID` < 10250 +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_duplicate_collection_result_operator2(bool async) + { + await base.Include_duplicate_collection_result_operator2(async); + + AssertSql( +""" +@__p_1='1' +@__p_0='2' + +SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region], [t1].[CustomerID0], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t1].[Address0], [t1].[City0], [t1].[CompanyName0], [t1].[ContactName0], [t1].[ContactTitle0], [t1].[Country0], [t1].[Fax0], [t1].[Phone0], [t1].[PostalCode0], [t1].[Region0] +FROM ( + SELECT TOP(@__p_1) [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [t0].[CustomerID] AS [CustomerID0], [t0].[Address] AS [Address0], [t0].[City] AS [City0], [t0].[CompanyName] AS [CompanyName0], [t0].[ContactName] AS [ContactName0], [t0].[ContactTitle] AS [ContactTitle0], [t0].[Country] AS [Country0], [t0].[Fax] AS [Fax0], [t0].[Phone] AS [Phone0], [t0].[PostalCode] AS [PostalCode0], [t0].[Region] AS [Region0] + FROM ( + SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] + ) AS [t] + CROSS JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t0] + ORDER BY [t].[CustomerID] +) AS [t1] +LEFT JOIN [Orders] AS [o] ON [t1].[CustomerID] = [o].[CustomerID] +ORDER BY [t1].[CustomerID], [t1].[CustomerID0] +"""); + } + + public override async Task Repro9735(bool async) + { + await base.Repro9735(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`CustomerID` IS NOT NULL AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +LEFT JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID0`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_single_or_default_no_result(bool async) + { + await base.Include_collection_single_or_default_no_result(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI ?' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_cross_apply_with_filter(bool async) + { + await base.Include_collection_with_cross_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +CROSS APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_with_left_join_clause_with_filter(bool async) + { + await base.Include_collection_with_left_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_with_right_join_clause_with_filter(bool async) + { + await base.Include_collection_with_right_join_clause_with_filter(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +RIGHT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_duplicate_collection(bool async) + { + await base.Include_duplicate_collection(async); + + AssertSql( + """ +@p='2' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID`), +(( + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` + FROM ( + SELECT TOP 2 + 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +LEFT JOIN `Orders` AS `o0` ON `c2`.`CustomerID` = `o0`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection(bool async) + { + await base.Include_collection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_include_collection_then_include_reference(bool async) + { + await base.Include_collection_then_include_collection_then_include_reference(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`OrderID0`, `s0`.`ProductID`, `s0`.`Discount`, `s0`.`Quantity`, `s0`.`UnitPrice`, `s0`.`ProductID0`, `s0`.`Discontinued`, `s0`.`ProductName`, `s0`.`SupplierID`, `s0`.`UnitPrice0`, `s0`.`UnitsInStock` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`OrderID` AS `OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` + FROM `Orders` AS `o` + LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` + ) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +) AS `s0` ON `c`.`CustomerID` = `s0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `s0`.`OrderID`, `s0`.`OrderID0`, `s0`.`ProductID` +"""); + } + + public override async Task Include_reference_GroupBy_Select(bool async) + { + await base.Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + LEFT JOIN [Customers] AS [c] ON [o0].[CustomerID] = [c].[CustomerID] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_multiple_references_multi_level_reverse(bool async) + { + await base.Include_multiple_references_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_with_join_clause_with_filter(bool async) + { + await base.Include_collection_with_join_clause_with_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Include_collection_OrderBy_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_list_does_not_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN [c].[CustomerID] <> N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_reference_dependent_already_tracked(bool async) + { + await base.Include_reference_dependent_already_tracked(async); + + AssertSql( +""" +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", +// +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_reference_with_filter(bool async) + { + await base.Include_reference_with_filter(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_duplicate_reference(bool async) + { + await base.Include_duplicate_reference(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +FROM (( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`CustomerID`, `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` +"""); + } + + public override async Task Include_with_complex_projection(bool async) + { + await base.Include_with_complex_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_order_by_non_key_with_skip(bool async) + { + await base.Include_collection_order_by_non_key_with_skip(async); + + AssertSql( +""" +@__p_0='2' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'F%' + ORDER BY [c].[ContactTitle] + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactTitle], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_on_join_clause_with_order_by_and_filter(bool async) + { + await base.Include_collection_on_join_clause_with_order_by_and_filter(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Customers` AS `c` +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` = 'ALFKI' +ORDER BY `c`.`City`, `c`.`CustomerID`, `o`.`OrderID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_take(bool async) + { + await base.Multi_level_includes_are_applied_with_take(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_then_reference(bool async) + { + await base.Include_collection_then_reference(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM `Products` AS `p` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_collection_order_by_key(bool async) + { + await base.Include_collection_order_by_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter(bool async) + { + await base.Include_collection_with_outer_apply_with_filter(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c].[CustomerID] + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_collection_on_additional_from_clause2(bool async) + { + await base.Include_collection_on_additional_from_clause2(async); + + AssertSql( + """ +@p='5' + +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +`Customers` AS `c0` +ORDER BY `c1`.`CustomerID` +"""); + } + + public override async Task Include_collection_dependent_already_tracked(bool async) + { + await base.Include_collection_dependent_already_tracked(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_with_complex_projection_does_not_change_ordering_of_projection(bool async) + { + await base.Include_with_complex_projection_does_not_change_ordering_of_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` AS `Id`, ( + SELECT COUNT(*) + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `TotalOrders` +FROM `Customers` AS `c` +WHERE `c`.`ContactTitle` = 'Owner' AND ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 2 +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Include_multi_level_collection_and_then_include_reference_predicate(bool async) + { + await base.Include_multi_level_collection_and_then_include_reference_predicate(async); + + AssertSql( + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10248 +) AS `o1` +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` + FROM `Order Details` AS `o0` + INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip_take(bool async) + { + await base.Multi_level_includes_are_applied_with_skip_take(async); + + AssertSql( + """ +@p='1' + +SELECT `c2`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p `c1`.`CustomerID` + FROM ( + SELECT TOP @p + @p `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c2`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_OrderBy_empty_list_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CAST(0 AS bit) AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY (SELECT 1) + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_references_and_collection_multi_level(bool async) + { + await base.Include_references_and_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 AND `o`.`UnitPrice` < 10.0 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_force_alias_uniquefication(bool async) + { + await base.Include_collection_force_alias_uniquefication(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM `Orders` AS `o` +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` = 'ALFKI' +ORDER BY `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_collection_with_outer_apply_with_filter_non_equality(bool async) + { + await base.Include_collection_with_outer_apply_with_filter_non_equality(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Customers] AS [c] +OUTER APPLY ( + SELECT TOP(5) [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] <> [c].[CustomerID] OR ([o].[CustomerID] IS NULL) + ORDER BY [c].[CustomerID] +) AS [t] +LEFT JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t].[OrderID] +"""); + } + + public override async Task Include_in_let_followed_by_FirstOrDefault(bool async) + { + await base.Include_in_let_followed_by_FirstOrDefault(async); + + AssertSql( +""" +SELECT [c].[CustomerID], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] +FROM [Customers] AS [c] +LEFT JOIN ( + SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] + FROM ( + SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderDate]) AS [row] + FROM [Orders] AS [o] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] +LEFT JOIN [Order Details] AS [o0] ON [t0].[OrderID] = [o0].[OrderID] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID], [t0].[OrderID], [o0].[OrderID] +"""); + } + + public override async Task Include_references_multi_level(bool async) + { + await base.Include_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_then_include_collection(bool async) + { + await base.Include_collection_then_include_collection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM `Customers` AS `c` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_with_multiple_conditional_order_by(bool async) + { + await base.Include_collection_with_multiple_conditional_order_by(async); + + AssertSql( + """ +@p='5' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM ( + SELECT TOP @p `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`c`, `s0`.`c0` + FROM ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `o`.`OrderID` > 0 AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, '') AS `c0` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +LEFT JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID0`, `o0`.`OrderID` +"""); + } + + public override async Task Include_reference_when_entity_in_projection(bool async) + { + await base.Include_reference_when_entity_in_projection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_reference_single_or_default_when_no_result(bool async) + { + await base.Include_reference_single_or_default_when_no_result(async); + + AssertSql( +""" +SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`OrderID` = -1 +"""); + } + + public override async Task Include_reference_alias_generation(bool async) + { + await base.Include_reference_alias_generation(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(bool async) + { + await base.Include_with_cycle_does_not_throw_when_AsNoTrackingWithIdentityResolution(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`OrderID` < 10800 +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_references_then_include_collection_multi_level(bool async) + { + await base.Include_references_then_include_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`ProductID` MOD 23) = 17 AND `o`.`Quantity` < CINT(10) +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_reference_Join_GroupBy_Select(bool async) + { + await base.Include_reference_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_when_projection(bool async) + { + await base.Include_collection_when_projection(async); + + AssertSql( +""" +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +"""); + } + + public override async Task Include_reference_SelectMany_GroupBy_Select(bool async) + { + await base.Include_reference_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o1].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_multiple_references_then_include_collection_multi_level(bool async) + { + await base.Include_multiple_references_then_include_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +"""); + } + + public override async Task Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(bool async) + { + await base.Outer_identifier_correctly_determined_when_doing_include_on_right_side_of_left_join(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM (`Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `c`.`City` = 'Seattle' +ORDER BY `c`.`CustomerID`, `o`.`OrderID`, `o0`.`OrderID` +"""); + } + + public override async Task SelectMany_Include_reference_GroupBy_Select(bool async) + { + await base.SelectMany_Include_reference_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[CustomerID0], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[CustomerID0], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [c].[CustomerID] AS [CustomerID0], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + LEFT JOIN [Customers] AS [c] ON [o2].[CustomerID] = [c].[CustomerID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +"""); + } + + public override async Task Include_collection_SelectMany_GroupBy_Select(bool async) + { + await base.Include_collection_SelectMany_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + CROSS JOIN [Order Details] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + CROSS JOIN [Order Details] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_OrderBy_list_contains(bool async) + { + await base.Include_collection_OrderBy_list_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY CASE + WHEN [c].[CustomerID] = N'ALFKI' THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) + END + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Multi_level_includes_are_applied_with_skip(bool async) + { + await base.Multi_level_includes_are_applied_with_skip(async); + + AssertSql( + """ +@p='1' + +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c0`.`CustomerID` + FROM ( + SELECT TOP @p + 1 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' + ORDER BY `c`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_collection_on_additional_from_clause(bool async) + { + await base.Include_collection_on_additional_from_clause(async); + + AssertSql( + """ +@p='5' + +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region`, `c1`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c1`, +(( + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` LIKE 'F%' +) AS `c2` +LEFT JOIN `Orders` AS `o` ON `c2`.`CustomerID` = `o`.`CustomerID`) +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` +"""); + } + + public override async Task Include_reference_distinct_is_server_evaluated(bool async) + { + await base.Include_reference_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ( + SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10250 +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_distinct_is_server_evaluated(bool async) + { + await base.Include_collection_distinct_is_server_evaluated(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'A%' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Include_reference_when_projection(bool async) + { + await base.Include_reference_when_projection(async); + + AssertSql( +""" +SELECT `o`.`CustomerID` +FROM `Orders` AS `o` +"""); + } + + public override async Task Include_duplicate_collection_result_operator(bool async) + { + await base.Include_duplicate_collection_result_operator(async); + + AssertSql( +""" +@__p_1='1' +@__p_0='2' + +SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region], [t1].[CustomerID0], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t1].[Address0], [t1].[City0], [t1].[CompanyName0], [t1].[ContactName0], [t1].[ContactTitle0], [t1].[Country0], [t1].[Fax0], [t1].[Phone0], [t1].[PostalCode0], [t1].[Region0], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM ( + SELECT TOP(@__p_1) [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [t0].[CustomerID] AS [CustomerID0], [t0].[Address] AS [Address0], [t0].[City] AS [City0], [t0].[CompanyName] AS [CompanyName0], [t0].[ContactName] AS [ContactName0], [t0].[ContactTitle] AS [ContactTitle0], [t0].[Country] AS [Country0], [t0].[Fax] AS [Fax0], [t0].[Phone] AS [Phone0], [t0].[PostalCode] AS [PostalCode0], [t0].[Region] AS [Region0] + FROM ( + SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] + ) AS [t] + CROSS JOIN ( + SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t0] + ORDER BY [t].[CustomerID] +) AS [t1] +LEFT JOIN [Orders] AS [o] ON [t1].[CustomerID] = [o].[CustomerID] +LEFT JOIN [Orders] AS [o0] ON [t1].[CustomerID0] = [o0].[CustomerID] +ORDER BY [t1].[CustomerID], [t1].[CustomerID0], [o].[OrderID] +"""); + } + + public override async Task Include_reference(bool async) + { + await base.Include_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +"""); + } + + public override async Task Include_multiple_references_and_collection_multi_level_reverse(bool async) + { + await base.Include_multiple_references_and_collection_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM (((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `p`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_closes_reader(bool async) + { + await base.Include_closes_reader(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +""", + // + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +"""); + } + + public override async Task Include_with_skip(bool async) + { + await base.Include_with_skip(async); + + AssertSql( +""" +@__p_0='80' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY [c].[ContactName] + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[ContactName], [t].[CustomerID] +"""); + } + + public override async Task Include_collection_Join_GroupBy_Select(bool async) + { + await base.Include_collection_Join_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + INNER JOIN [Order Details] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID] AS [OrderID0], [o2].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o1].[OrderID] ORDER BY [o1].[OrderID]) AS [row] + FROM [Orders] AS [o1] + INNER JOIN [Order Details] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_GroupBy_Select(bool async) + { + await base.Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [o1].[OrderID], [o1].[ProductID], [o1].[Discount], [o1].[Quantity], [o1].[UnitPrice] +FROM ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[OrderID] = 10248 + GROUP BY [o].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] + FROM ( + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[OrderID]) AS [row] + FROM [Orders] AS [o0] + WHERE [o0].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o1] ON [t0].[OrderID] = [o1].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID], [o1].[OrderID] +"""); + } + + public override async Task Include_collection_orderby_take(bool async) + { + await base.Include_collection_orderby_take(async); + + AssertSql( + """ +@p='5' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); + } + + public override async Task Join_Include_collection_GroupBy_Select(bool async) + { + await base.Join_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + INNER JOIN [Orders] AS [o2] ON [o1].[OrderID] = [o2].[OrderID] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_order_by_non_key(bool async) + { + await base.Include_collection_order_by_non_key(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`PostalCode`, `c`.`CustomerID` +"""); + } + + public override async Task Include_when_result_operator(bool async) + { + await base.Include_when_result_operator(async); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Customers` AS `c`) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Include_duplicate_reference2(bool async) + { + await base.Include_duplicate_reference2(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` +FROM ( + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` + FROM ( + SELECT TOP @p `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` + ) AS `o1`, + ( + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` + FROM ( + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` + FROM ( + SELECT TOP 2 + 2 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` +"""); + } + + public override async Task Include_collection_and_reference(bool async) + { + await base.Include_collection_and_reference(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_multiple_references_multi_level(bool async) + { + await base.Include_multiple_references_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_references_and_collection_multi_level_predicate(bool async) + { + await base.Include_references_and_collection_multi_level_predicate(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task SelectMany_Include_collection_GroupBy_Select(bool async) + { + await base.SelectMany_Include_collection_GroupBy_Select(async); + + AssertSql( +""" +SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [o3].[OrderID], [o3].[ProductID], [o3].[Discount], [o3].[Quantity], [o3].[UnitPrice] +FROM ( + SELECT [o0].[OrderID] + FROM [Order Details] AS [o] + CROSS JOIN [Orders] AS [o0] + WHERE [o].[OrderID] = 10248 + GROUP BY [o0].[OrderID] +) AS [t] +LEFT JOIN ( + SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [t1].[OrderID0], [t1].[ProductID] + FROM ( + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate], [o1].[OrderID] AS [OrderID0], [o1].[ProductID], ROW_NUMBER() OVER(PARTITION BY [o2].[OrderID] ORDER BY [o2].[OrderID]) AS [row] + FROM [Order Details] AS [o1] + CROSS JOIN [Orders] AS [o2] + WHERE [o1].[OrderID] = 10248 + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[OrderID] = [t0].[OrderID] +LEFT JOIN [Order Details] AS [o3] ON [t0].[OrderID] = [o3].[OrderID] +ORDER BY [t].[OrderID], [t0].[OrderID0], [t0].[ProductID], [t0].[OrderID], [o3].[OrderID] +"""); + } + + public override async Task Include_collection_with_last(bool async) + { + await base.Include_collection_with_last(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`CompanyName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_collection_OrderBy_empty_list_does_not_contains(bool async) + { + await base.Include_collection_OrderBy_empty_list_does_not_contains(async); + + AssertSql( +""" +@__p_1='1' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], CAST(1 AS bit) AS [c] + FROM [Customers] AS [c] + WHERE [c].[CustomerID] LIKE N'A%' + ORDER BY (SELECT 1) + OFFSET @__p_1 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[c], [t].[CustomerID] +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level_reverse(bool async) + { + await base.Include_multiple_references_then_include_multi_level_reverse(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM ((`Order Details` AS `o` +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_reference_and_collection(bool async) + { + await base.Include_reference_and_collection(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(bool async) + { + await base.Include_is_not_ignored_when_projection_contains_client_method_and_complex_expression(async); + + AssertSql( + """ +SELECT `e0`.`EmployeeID` IS NOT NULL, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e`.`EmployeeID` IN (1, 2) +ORDER BY `e`.`EmployeeID` +"""); + } + + public override async Task Include_reference_with_filter_reordered(bool async) + { + await base.Include_reference_with_filter_reordered(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` +WHERE `o`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Include_collection_order_by_subquery(bool async) + { + await base.Include_collection_order_by_subquery(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`EmployeeID`) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + ) AS `c1` + ORDER BY `c1`.`c` +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c`, `c0`.`CustomerID` +"""); + } + + public override async Task Include_reference_and_collection_order_by(bool async) + { + await base.Include_reference_and_collection_order_by(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM (`Orders` AS `o` +LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o`.`CustomerID` LIKE 'F%' +ORDER BY `o`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Then_include_collection_order_by_collection_column(bool async) + { + await base.Then_include_collection_order_by_collection_column(async); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` +FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN ( + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Orders` AS `o0` + LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); + } + + public override async Task Include_multiple_references_then_include_multi_level(bool async) + { + await base.Include_multiple_references_then_include_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_collection_skip_no_order_by(bool async) + { + await base.Include_collection_skip_no_order_by(async); + + AssertSql( +""" +@__p_0='10' + +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM ( + SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + FROM [Customers] AS [c] + ORDER BY (SELECT 1) + OFFSET @__p_0 ROWS +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[CustomerID] +"""); + } + + public override async Task Include_multi_level_reference_then_include_collection_predicate(bool async) + { + await base.Include_multi_level_reference_then_include_collection_predicate(async); + + AssertSql( + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM ( + SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `o`.`OrderID` = 10248 +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` +"""); + } + + public override async Task Include_multiple_references_and_collection_multi_level(bool async) + { + await base.Include_multiple_references_and_collection_multi_level(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `p`.`ProductID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE (`o`.`OrderID` MOD 23) = 13 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID`, `p`.`ProductID` +"""); + } + + public override async Task Include_where_skip_take_projection(bool async) + { + await base.Include_where_skip_take_projection(async); + + AssertSql( + """ +@p1='2' +@p='1' + +SELECT `o0`.`CustomerID` +FROM ( + SELECT TOP @p1 `o2`.`OrderID`, `o2`.`ProductID` + FROM ( + SELECT TOP @p + @p1 `o`.`OrderID`, `o`.`ProductID` + FROM `Order Details` AS `o` + WHERE `o`.`Quantity` = CINT(10) + ORDER BY `o`.`OrderID`, `o`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` +"""); + } + + public override async Task Include_with_take(bool async) + { + await base.Include_with_take(async); + + AssertSql( + """ +@p='10' + +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP @p `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` +"""); + } + + public override async Task Include_multiple_references(bool async) + { + await base.Include_multiple_references(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM (`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` +WHERE (`o`.`OrderID` MOD 23) = 13 +"""); + } + + public override async Task Include_list(bool async) + { + await base.Include_list(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` +FROM `Products` AS `p` +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` +WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` +"""); + } + + public override async Task Include_empty_reference_sets_IsLoaded(bool async) + { + await base.Include_empty_reference_sets_IsLoaded(async); + + AssertSql( +""" +SELECT TOP 1 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM `Employees` AS `e` +LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` +WHERE `e0`.`EmployeeID` IS NULL +"""); + } + + public override async Task Include_references_then_include_collection_multi_level_predicate(bool async) + { + await base.Include_references_then_include_collection_multi_level_predicate(async); + + AssertSql( +""" +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` +FROM ((`Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID`) +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +WHERE `o`.`OrderID` = 10248 +ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `c`.`CustomerID` +"""); + } + + public override async Task Include_collection_with_conditional_order_by(bool async) + { + await base.Include_collection_with_conditional_order_by(async); + + AssertSql( +""" +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY IIF(`c`.`CustomerID` LIKE 'S%', 1, 2), `c`.`CustomerID` +"""); + } + + public override async Task Include_non_existing_navigation(bool async) + { + await base.Include_non_existing_navigation(async); + + AssertSql(); + } + + public override async Task Include_property(bool async) + { + await base.Include_property(async); + + AssertSql(); + } + + public override async Task Include_property_after_navigation(bool async) + { + await base.Include_property_after_navigation(async); + + AssertSql(); + } + + public override async Task Include_property_expression_invalid(bool async) + { + await base.Include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Then_include_property_expression_invalid(bool async) + { + await base.Then_include_property_expression_invalid(async); + + AssertSql(); + } + + public override async Task Filtered_include_with_multiple_ordering(bool async) + { + await base.Filtered_include_with_multiple_ordering(async); + + AssertSql(); + } + + public override async Task Include_specified_on_non_entity_not_supported(bool async) + { + await base.Include_specified_on_non_entity_not_supported(async); + + AssertSql(); + } + + public override async Task Include_collection_with_client_filter(bool async) + { + await base.Include_collection_with_client_filter(async); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NorthwindWhereQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindWhereQueryLibRedTest.cs new file mode 100644 index 00000000..1f481fd3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NorthwindWhereQueryLibRedTest.cs @@ -0,0 +1,3050 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NorthwindWhereQueryLibRedTest : NorthwindWhereQueryRelationalTestBase< + NorthwindQueryLibRedFixture> + { + public NorthwindWhereQueryLibRedTest( + NorthwindQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + ClearLog(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Where_simple(bool isAsync) + { + await base.Where_simple(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'London' + """); + } + + public override async Task Where_as_queryable_expression(bool isAsync) + { + await base.Where_as_queryable_expression(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`CustomerID` = 'ALFKI') + """); + } + + public override async Task Where_simple_closure(bool isAsync) + { + var queryString = await base.Where_simple_closure(isAsync); + + AssertSql( + """ +@city='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city +"""); + + return queryString; + } + + public override async Task Where_indexer_closure(bool isAsync) + { + await base.Where_indexer_closure(isAsync); + + AssertSql( + """ +@p='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @p +"""); + } + + public override async Task Where_dictionary_key_access_closure(bool isAsync) + { + await base.Where_dictionary_key_access_closure(isAsync); + + AssertSql( + """ +@get_Item='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @get_Item +"""); + } + + public override async Task Where_tuple_item_closure(bool isAsync) + { + await base.Where_tuple_item_closure(isAsync); + + AssertSql( + """ +@predicateTuple_Item2='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @predicateTuple_Item2 +"""); + } + + public override async Task Where_named_tuple_item_closure(bool isAsync) + { + await base.Where_named_tuple_item_closure(isAsync); + + AssertSql( + """ +@predicateTuple_Item2='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @predicateTuple_Item2 +"""); + } + + public override async Task Where_simple_closure_constant(bool isAsync) + { + await base.Where_simple_closure_constant(isAsync); + + AssertSql( + """ +@predicate='True' + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE @predicate +"""); + } + + public override async Task Where_simple_closure_via_query_cache(bool isAsync) + { + await base.Where_simple_closure_via_query_cache(isAsync); + + AssertSql( + """ +@city='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city +""", + // + """ +@city='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city +"""); + } + + public override async Task Where_method_call_nullable_type_closure_via_query_cache(bool isAsync) + { + await base.Where_method_call_nullable_type_closure_via_query_cache(isAsync); + + AssertSql( + """ +@p='2' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) = @p +""", + // + """ +@p='5' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) = @p +"""); + } + + public override async Task Where_method_call_nullable_type_reverse_closure_via_query_cache(bool isAsync) + { + await base.Where_method_call_nullable_type_reverse_closure_via_query_cache(isAsync); + + AssertSql( + """ +@p='1' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE CLNG(`e`.`EmployeeID`) > @p +""", + // + """ +@p='5' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE CLNG(`e`.`EmployeeID`) > @p +"""); + } + + public override async Task Where_method_call_closure_via_query_cache(bool isAsync) + { + await base.Where_method_call_closure_via_query_cache(isAsync); + + AssertSql( + """ +@GetCity='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @GetCity +""", + // + """ +@GetCity='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @GetCity +"""); + } + + public override async Task Where_field_access_closure_via_query_cache(bool isAsync) + { + await base.Where_field_access_closure_via_query_cache(isAsync); + + AssertSql( + """ +@city_InstanceFieldValue='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city_InstanceFieldValue +""", + // + """ +@city_InstanceFieldValue='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city_InstanceFieldValue +"""); + } + + public override async Task Where_property_access_closure_via_query_cache(bool isAsync) + { + await base.Where_property_access_closure_via_query_cache(isAsync); + + AssertSql( + """ +@city_InstancePropertyValue='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city_InstancePropertyValue +""", + // + """ +@city_InstancePropertyValue='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city_InstancePropertyValue +"""); + } + + public override async Task Where_static_field_access_closure_via_query_cache(bool isAsync) + { + await base.Where_static_field_access_closure_via_query_cache(isAsync); + + AssertSql( + """ +@StaticFieldValue='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @StaticFieldValue +""", + // + """ +@StaticFieldValue='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @StaticFieldValue +"""); + } + + public override async Task Where_static_property_access_closure_via_query_cache(bool isAsync) + { + await base.Where_static_property_access_closure_via_query_cache(isAsync); + + AssertSql( + """ +@StaticPropertyValue='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @StaticPropertyValue +""", + // + """ +@StaticPropertyValue='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @StaticPropertyValue +"""); + } + + public override async Task Where_nested_field_access_closure_via_query_cache(bool isAsync) + { + await base.Where_nested_field_access_closure_via_query_cache(isAsync); + + AssertSql( + """ +@city_Nested_InstanceFieldValue='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city_Nested_InstanceFieldValue +""", + // + """ +@city_Nested_InstanceFieldValue='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city_Nested_InstanceFieldValue +"""); + } + + public override async Task Where_nested_property_access_closure_via_query_cache(bool isAsync) + { + await base.Where_nested_property_access_closure_via_query_cache(isAsync); + + AssertSql( + """ +@city_Nested_InstancePropertyValue='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city_Nested_InstancePropertyValue +""", + // + """ +@city_Nested_InstancePropertyValue='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @city_Nested_InstancePropertyValue +"""); + } + + public override async Task Where_new_instance_field_access_query_cache(bool isAsync) + { + await base.Where_new_instance_field_access_query_cache(isAsync); + + AssertSql( + """ +@InstanceFieldValue='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @InstanceFieldValue +""", + // + """ +@InstanceFieldValue='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @InstanceFieldValue +"""); + } + + public override async Task Where_new_instance_field_access_closure_via_query_cache(bool isAsync) + { + await base.Where_new_instance_field_access_closure_via_query_cache(isAsync); + + AssertSql( + """ +@InstanceFieldValue='London' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @InstanceFieldValue +""", + // + """ +@InstanceFieldValue='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @InstanceFieldValue +"""); + } + + public override async Task Where_simple_closure_via_query_cache_nullable_type(bool isAsync) + { + await base.Where_simple_closure_via_query_cache_nullable_type(isAsync); + + AssertSql( + """ +@p='2' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) = @p +""", + // + """ +@p='5' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) = @p +""", + // + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`ReportsTo` IS NULL +"""); + } + + public override async Task Where_simple_closure_via_query_cache_nullable_type_reverse(bool isAsync) + { + await base.Where_simple_closure_via_query_cache_nullable_type_reverse(isAsync); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`ReportsTo` IS NULL +""", + // + """ +@p='5' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) = @p +""", + // + """ +@p='2' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE IIF(`e`.`ReportsTo` IS NULL, NULL, CLNG(`e`.`ReportsTo`)) = @p +"""); + } + + public override async Task Where_subquery_closure_via_query_cache(bool isAsync) + { + await base.Where_subquery_closure_via_query_cache(isAsync); + + AssertSql( + """ +@customerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = @customerID AND `o`.`CustomerID` = `c`.`CustomerID`) +""", + // + """ +@customerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = @customerID AND `o`.`CustomerID` = `c`.`CustomerID`) +"""); + } + + public override async Task Where_simple_shadow(bool isAsync) + { + await base.Where_simple_shadow(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`Title` = 'Sales Representative' + """); + } + + public override async Task Where_simple_shadow_projection(bool isAsync) + { + await base.Where_simple_shadow_projection(isAsync); + + AssertSql( + $""" + SELECT `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`Title` = 'Sales Representative' + """); + } + + public override async Task Where_shadow_subquery_FirstOrDefault(bool isAsync) + { + await base.Where_shadow_subquery_FirstOrDefault(isAsync); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`Title` = ( + SELECT TOP 1 `e0`.`Title` + FROM `Employees` AS `e0` + ORDER BY `e0`.`Title`) OR (`e`.`Title` IS NULL AND ( + SELECT TOP 1 `e0`.`Title` + FROM `Employees` AS `e0` + ORDER BY `e0`.`Title`) IS NULL) +"""); + } + + public override async Task Where_subquery_correlated(bool isAsync) + { + await base.Where_subquery_correlated(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Customers` AS `c0` + WHERE `c`.`CustomerID` = `c0`.`CustomerID`) + """); + } + + public override async Task Where_equals_method_int(bool isAsync) + { + await base.Where_equals_method_int(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`EmployeeID` = 1 + """); + } + + public override async Task Where_equals_using_object_overload_on_mismatched_types(bool isAsync) + { + await base.Where_equals_using_object_overload_on_mismatched_types(isAsync); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE FALSE +"""); + + // See issue#17498 + //Assert.Contains( + // RelationalStrings.LogPossibleUnintendedUseOfEquals.GenerateMessage( + // "e.EmployeeID.Equals(Convert(__longPrm_0, Object))"), Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); + } + + public override async Task Where_equals_using_int_overload_on_mismatched_types(bool isAsync) + { + await base.Where_equals_using_int_overload_on_mismatched_types(isAsync); + + AssertSql( + """ +@p='1' + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`EmployeeID` = @p +"""); + } + + public override async Task Where_equals_on_mismatched_types_nullable_int_long(bool isAsync) + { + await base.Where_equals_on_mismatched_types_nullable_int_long(isAsync); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE FALSE +""", + // + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE FALSE +"""); + + // See issue#17498 + //Assert.Contains( + // RelationalStrings.LogPossibleUnintendedUseOfEquals.GenerateMessage( + // "__longPrm_0.Equals(Convert(e.ReportsTo, Object))"), Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); + + //Assert.Contains( + // RelationalStrings.LogPossibleUnintendedUseOfEquals.GenerateMessage( + // "e.ReportsTo.Equals(Convert(__longPrm_0, Object))"), Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); + } + + public override async Task Where_equals_on_mismatched_types_nullable_long_nullable_int(bool isAsync) + { + await base.Where_equals_on_mismatched_types_nullable_long_nullable_int(isAsync); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE FALSE +""", + // + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE FALSE +"""); + + // See issue#17498 + //Assert.Contains( + // RelationalStrings.LogPossibleUnintendedUseOfEquals.GenerateMessage( + // "__nullableLongPrm_0.Equals(Convert(e.ReportsTo, Object))"), + // Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); + + //Assert.Contains( + // RelationalStrings.LogPossibleUnintendedUseOfEquals.GenerateMessage( + // "e.ReportsTo.Equals(Convert(__nullableLongPrm_0, Object))"), + // Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); + } + + public override async Task Where_equals_on_mismatched_types_int_nullable_int(bool isAsync) + { + await base.Where_equals_on_mismatched_types_int_nullable_int(isAsync); + + AssertSql( + """ +@intPrm='2' + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`ReportsTo` = @intPrm +""", + // + """ +@intPrm='2' + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE @intPrm = `e`.`ReportsTo` +"""); + } + + public override async Task Where_equals_on_matched_nullable_int_types(bool isAsync) + { + await base.Where_equals_on_matched_nullable_int_types(isAsync); + + AssertSql( + """ +@nullableIntPrm='2' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE @nullableIntPrm = `e`.`ReportsTo` +""", + // + """ +@nullableIntPrm='2' (Nullable = true) + +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`ReportsTo` = @nullableIntPrm +"""); + } + + public override async Task Where_equals_on_null_nullable_int_types(bool isAsync) + { + await base.Where_equals_on_null_nullable_int_types(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`ReportsTo` IS NULL + """, + // + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`ReportsTo` IS NULL + """); + } + + public override async Task Where_comparison_nullable_type_not_null(bool isAsync) + { + await base.Where_comparison_nullable_type_not_null(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`ReportsTo` = 2 + """); + } + + public override async Task Where_comparison_nullable_type_null(bool isAsync) + { + await base.Where_comparison_nullable_type_null(isAsync); + + AssertSql( + $""" + SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + WHERE `e`.`ReportsTo` IS NULL + """); + } + + public override async Task Where_simple_reversed(bool isAsync) + { + await base.Where_simple_reversed(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE 'London' = `c`.`City` + """); + } + + public override async Task Where_is_null(bool isAsync) + { + await base.Where_is_null(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`Region` IS NULL + """); + } + + public override async Task Where_null_is_null(bool isAsync) + { + await base.Where_null_is_null(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Where_constant_is_null(bool isAsync) + { + await base.Where_constant_is_null(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Where_is_not_null(bool isAsync) + { + await base.Where_is_not_null(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` IS NOT NULL + """); + } + + public override async Task Where_null_is_not_null(bool isAsync) + { + await base.Where_null_is_not_null(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Where_constant_is_not_null(bool isAsync) + { + await base.Where_constant_is_not_null(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Where_identity_comparison(bool isAsync) + { + await base.Where_identity_comparison(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = `c`.`City` OR `c`.`City` IS NULL +"""); + } + + public override async Task Where_in_optimization_multiple(bool isAsync) + { + await base.Where_in_optimization_multiple(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Customers` AS `c`, + `Employees` AS `e` + WHERE `c`.`City` IN ('London', 'Berlin') OR `c`.`CustomerID` = 'ALFKI' OR `c`.`CustomerID` = 'ABCDE' + """); + } + + public override async Task Where_not_in_optimization1(bool isAsync) + { + await base.Where_not_in_optimization1(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Customers` AS `c`, +`Employees` AS `e` +WHERE (`c`.`City` <> 'London' OR `c`.`City` IS NULL) AND (`e`.`City` <> 'London' OR `e`.`City` IS NULL) +"""); + } + + public override async Task Where_not_in_optimization2(bool isAsync) + { + await base.Where_not_in_optimization2(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Customers` AS `c`, +`Employees` AS `e` +WHERE `c`.`City` NOT IN ('London', 'Berlin') OR `c`.`City` IS NULL +"""); + } + + public override async Task Where_not_in_optimization3(bool isAsync) + { + await base.Where_not_in_optimization3(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Customers` AS `c`, +`Employees` AS `e` +WHERE `c`.`City` NOT IN ('London', 'Berlin', 'Seattle') OR `c`.`City` IS NULL +"""); + } + + public override async Task Where_not_in_optimization4(bool isAsync) + { + await base.Where_not_in_optimization4(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Customers` AS `c`, +`Employees` AS `e` +WHERE `c`.`City` NOT IN ('London', 'Berlin', 'Seattle', 'Lisboa') OR `c`.`City` IS NULL +"""); + } + + public override async Task Where_select_many_and(bool isAsync) + { + await base.Where_select_many_and(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Customers` AS `c`, + `Employees` AS `e` + WHERE `c`.`City` = 'London' AND `c`.`Country` = 'UK' AND `e`.`City` = 'London' AND `e`.`Country` = 'UK' + """); + } + + public override async Task Where_primitive(bool isAsync) + { + await base.Where_primitive(isAsync); + + AssertSql( + """ +@p='9' + +SELECT `e0`.`EmployeeID` +FROM ( + SELECT TOP @p `e`.`EmployeeID` + FROM `Employees` AS `e` +) AS `e0` +WHERE `e0`.`EmployeeID` = 5 +"""); + } + + public override async Task Where_bool_member(bool isAsync) + { + await base.Where_bool_member(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`Discontinued` +"""); + } + + public override async Task Where_bool_member_false(bool isAsync) + { + await base.Where_bool_member_false(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE NOT (`p`.`Discontinued`) +"""); + } + + public override async Task Where_bool_member_negated_twice(bool isAsync) + { + await base.Where_bool_member_negated_twice(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`Discontinued` +"""); + } + + public override async Task Where_bool_member_shadow(bool isAsync) + { + await base.Where_bool_member_shadow(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`Discontinued` +"""); + } + + public override async Task Where_bool_member_false_shadow(bool isAsync) + { + await base.Where_bool_member_false_shadow(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE NOT (`p`.`Discontinued`) +"""); + } + + public override async Task Where_bool_member_equals_constant(bool isAsync) + { + await base.Where_bool_member_equals_constant(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`Discontinued` +"""); + } + + public override async Task Where_bool_member_in_complex_predicate(bool isAsync) + { + await base.Where_bool_member_in_complex_predicate(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE (`p`.`ProductID` > 100 AND `p`.`Discontinued`) OR `p`.`Discontinued` +"""); + } + + public override async Task Where_bool_member_compared_to_binary_expression(bool isAsync) + { + await base.Where_bool_member_compared_to_binary_expression(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`Discontinued` = (`p`.`ProductID` > 50) +"""); + } + + public override async Task Where_not_bool_member_compared_to_not_bool_member(bool isAsync) + { + await base.Where_not_bool_member_compared_to_not_bool_member(isAsync); + + AssertSql( + $""" + SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` + FROM `Products` AS `p` + """); + } + + public override async Task Where_negated_boolean_expression_compared_to_another_negated_boolean_expression(bool isAsync) + { + await base.Where_negated_boolean_expression_compared_to_another_negated_boolean_expression(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE (`p`.`ProductID` <= 50) = (`p`.`ProductID` <= 20) +"""); + } + + public override async Task Where_not_bool_member_compared_to_binary_expression(bool isAsync) + { + await base.Where_not_bool_member_compared_to_binary_expression(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`Discontinued` <> (`p`.`ProductID` > 50) +"""); + } + + public override async Task Where_bool_parameter(bool isAsync) + { + await base.Where_bool_parameter(isAsync); + + AssertSql( + """ +@prm='True' + +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE @prm +"""); + } + + public override async Task Where_bool_parameter_compared_to_binary_expression(bool isAsync) + { + await base.Where_bool_parameter_compared_to_binary_expression(isAsync); + + AssertSql( + """ +@prm='True' + +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE (`p`.`ProductID` > 50) <> @prm +"""); + } + + public override async Task Where_bool_member_and_parameter_compared_to_binary_expression_nested(bool isAsync) + { + await base.Where_bool_member_and_parameter_compared_to_binary_expression_nested(isAsync); + + AssertSql( + """ +@prm='True' + +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`Discontinued` = ((`p`.`ProductID` > 50) <> @prm) +"""); + } + + public override async Task Where_de_morgan_or_optimized(bool isAsync) + { + await base.Where_de_morgan_or_optimized(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE NOT (`p`.`Discontinued`) AND `p`.`ProductID` >= 20 +"""); + } + + public override async Task Where_de_morgan_and_optimized(bool isAsync) + { + await base.Where_de_morgan_and_optimized(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE NOT (`p`.`Discontinued`) OR `p`.`ProductID` >= 20 +"""); + } + + public override async Task Where_complex_negated_expression_optimized(bool isAsync) + { + await base.Where_complex_negated_expression_optimized(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE NOT (`p`.`Discontinued`) AND `p`.`ProductID` < 60 AND `p`.`ProductID` > 30 +"""); + } + + public override async Task Where_short_member_comparison(bool isAsync) + { + await base.Where_short_member_comparison(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`UnitsInStock` > CINT(10) +"""); + } + + public override async Task Where_comparison_to_nullable_bool(bool isAsync) + { + await base.Where_comparison_to_nullable_bool(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE '%KI' + """); + } + + public override async Task Where_true(bool isAsync) + { + await base.Where_true(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Where_false(bool isAsync) + { + await base.Where_false(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task Where_default(bool isAsync) + { + await base.Where_default(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`Fax` IS NULL + """); + } + + public override async Task Where_expression_invoke_1(bool isAsync) + { + await base.Where_expression_invoke_1(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Where_expression_invoke_2(bool isAsync) + { + await base.Where_expression_invoke_2(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Where_expression_invoke_3(bool async) + { + await base.Where_expression_invoke_3(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task Where_ternary_boolean_condition_true(bool isAsync) + { + await base.Where_ternary_boolean_condition_true(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`UnitsInStock` >= CINT(20) +"""); + } + + public override async Task Where_ternary_boolean_condition_false(bool isAsync) + { + await base.Where_ternary_boolean_condition_false(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`UnitsInStock` < CINT(20) +"""); + } + + public override async Task Where_ternary_boolean_condition_with_another_condition(bool isAsync) + { + await base.Where_ternary_boolean_condition_with_another_condition(isAsync); + + AssertSql( + """ +@productId='15' + +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`ProductID` < @productId AND `p`.`UnitsInStock` >= CINT(20) +"""); + } + + public override async Task Where_ternary_boolean_condition_with_false_as_result_true(bool isAsync) + { + await base.Where_ternary_boolean_condition_with_false_as_result_true(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE `p`.`UnitsInStock` >= CINT(20) +"""); + } + + public override async Task Where_ternary_boolean_condition_with_false_as_result_false(bool isAsync) + { + await base.Where_ternary_boolean_condition_with_false_as_result_false(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE FALSE +"""); + } + + public override async Task Where_ternary_boolean_condition_negated(bool async) + { + await base.Where_ternary_boolean_condition_negated(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE IIF(`p`.`UnitsInStock` >= CINT(20), TRUE, FALSE) +"""); + } + + public override async Task Where_compare_constructed_equal(bool async) + { + // Anonymous type to constant comparison. Issue #14672. + await AssertTranslationFailed(() => base.Where_compare_constructed_equal(async)); + + AssertSql(); + } + + public override async Task Where_compare_constructed_multi_value_equal(bool async) + { + // Anonymous type to constant comparison. Issue #14672. + await AssertTranslationFailed(() => base.Where_compare_constructed_multi_value_equal(async)); + + AssertSql(); + } + + public override async Task Where_compare_constructed_multi_value_not_equal(bool async) + { + // Anonymous type to constant comparison. Issue #14672. + await AssertTranslationFailed(() => base.Where_compare_constructed_multi_value_not_equal(async)); + + AssertSql(); + } + + public override async Task Where_compare_tuple_constructed_equal(bool async) + { + // Anonymous type to constant comparison. Issue #14672. + await AssertTranslationFailed(() => base.Where_compare_tuple_constructed_equal(async)); + + AssertSql(); + } + + public override async Task Where_compare_tuple_constructed_multi_value_equal(bool async) + { + // Anonymous type to constant comparison. Issue #14672. + await AssertTranslationFailed(() => base.Where_compare_tuple_constructed_multi_value_equal(async)); + + AssertSql(); + } + + public override async Task Where_compare_tuple_constructed_multi_value_not_equal(bool async) + { + // Anonymous type to constant comparison. Issue #14672. + await AssertTranslationFailed(() => base.Where_compare_tuple_constructed_multi_value_not_equal(async)); + + AssertSql(); + } + + public override async Task Where_compare_tuple_create_constructed_equal(bool async) + { + // Anonymous type to constant comparison. Issue #14672. + await AssertTranslationFailed(() => base.Where_compare_tuple_create_constructed_equal(async)); + + AssertSql(); + } + + public override async Task Where_compare_tuple_create_constructed_multi_value_equal(bool async) + { + // Anonymous type to constant comparison. Issue #14672. + await AssertTranslationFailed(() => base.Where_compare_tuple_create_constructed_multi_value_equal(async)); + + AssertSql(); + } + + public override async Task Where_compare_tuple_create_constructed_multi_value_not_equal(bool async) + { + // Anonymous type to constant comparison. Issue #14672. + await AssertTranslationFailed(() => base.Where_compare_tuple_create_constructed_multi_value_not_equal(async)); + + AssertSql(); + } + + public override async Task Where_compare_null(bool isAsync) + { + await base.Where_compare_null(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`Region` IS NULL AND `c`.`Country` = 'UK' +"""); + } + + public override async Task Where_compare_null_with_cast_to_object(bool async) + { + await base.Where_compare_null_with_cast_to_object(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`Region` IS NULL +"""); + } + + public override async Task Where_compare_with_both_cast_to_object(bool async) + { + await base.Where_compare_with_both_cast_to_object(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'London' +"""); + } + + public override async Task Where_Is_on_same_type(bool isAsync) + { + await base.Where_Is_on_same_type(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + """); + } + + public override async Task Where_chain(bool isAsync) + { + await base.Where_chain(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'QUICK' AND `o`.`OrderDate` > #1998-01-01# + """); + } + + public override async Task Where_navigation_contains(bool isAsync) + { + await base.Where_navigation_contains(isAsync); + + AssertSql( + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +""", + // + """ +@entity_equality_customer_Orders_OrderID1='10643' +@entity_equality_customer_Orders_OrderID2='10692' +@entity_equality_customer_Orders_OrderID3='10702' +@entity_equality_customer_Orders_OrderID4='10835' +@entity_equality_customer_Orders_OrderID5='10952' +@entity_equality_customer_Orders_OrderID6='11011' +@entity_equality_customer_Orders_OrderID7='11011' +@entity_equality_customer_Orders_OrderID8='11011' +@entity_equality_customer_Orders_OrderID9='11011' +@entity_equality_customer_Orders_OrderID10='11011' + +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` +WHERE `o0`.`OrderID` IN (@entity_equality_customer_Orders_OrderID1, @entity_equality_customer_Orders_OrderID2, @entity_equality_customer_Orders_OrderID3, @entity_equality_customer_Orders_OrderID4, @entity_equality_customer_Orders_OrderID5, @entity_equality_customer_Orders_OrderID6, @entity_equality_customer_Orders_OrderID7, @entity_equality_customer_Orders_OrderID8, @entity_equality_customer_Orders_OrderID9, @entity_equality_customer_Orders_OrderID10) +"""); + } + + public override async Task Where_array_index(bool isAsync) + { + await base.Where_array_index(isAsync); + + AssertSql( + """ +@p='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @p +"""); + } + + public override async Task Where_multiple_contains_in_subquery_with_or(bool isAsync) + { + await base.Where_multiple_contains_in_subquery_with_or(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE `o`.`ProductID` IN ( + SELECT TOP 1 `p`.`ProductID` + FROM `Products` AS `p` + ORDER BY `p`.`ProductID` +) OR `o`.`OrderID` IN ( + SELECT TOP 1 `o0`.`OrderID` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` +) +"""); + } + + public override async Task Where_multiple_contains_in_subquery_with_and(bool isAsync) + { + await base.Where_multiple_contains_in_subquery_with_and(isAsync); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` +FROM `Order Details` AS `o` +WHERE `o`.`ProductID` IN ( + SELECT TOP 20 `p`.`ProductID` + FROM `Products` AS `p` + ORDER BY `p`.`ProductID` +) AND `o`.`OrderID` IN ( + SELECT TOP 10 `o0`.`OrderID` + FROM `Orders` AS `o0` + ORDER BY `o0`.`OrderID` +) +"""); + } + + [ConditionalTheory(Skip = "LibRed fails")] + public override async Task Where_contains_on_navigation(bool isAsync) + { + await base.Where_contains_on_navigation(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE EXISTS ( + SELECT 1 + FROM `Customers` AS `c` + WHERE `o`.`OrderID` IN ( + SELECT `o0`.`OrderID` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID` + ) + ) + """); + } + + public override async Task Where_subquery_FirstOrDefault_is_null(bool isAsync) + { + await base.Where_subquery_FirstOrDefault_is_null(isAsync); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task Where_subquery_FirstOrDefault_compared_to_entity(bool isAsync) + { + await base.Where_subquery_FirstOrDefault_compared_to_entity(isAsync); + + AssertSql( + $""" + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID`) = 10276 + """); + } + + public override async Task TypeBinary_short_circuit(bool isAsync) + { + await base.TypeBinary_short_circuit(isAsync); + + AssertSql( + """ +@p='False' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE @p +"""); + } + + public override async Task Where_is_conditional(bool isAsync) + { + await base.Where_is_conditional(isAsync); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE FALSE +"""); + } + + public override async Task Enclosing_class_settable_member_generates_parameter(bool isAsync) + { + await base.Enclosing_class_settable_member_generates_parameter(isAsync); + + AssertSql( + """ +@SettableProperty='10274' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = @SettableProperty +""", + // + """ +@SettableProperty='10275' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = @SettableProperty +"""); + } + + public override async Task Enclosing_class_readonly_member_generates_parameter(bool isAsync) + { + await base.Enclosing_class_readonly_member_generates_parameter(isAsync); + + AssertSql( + """ +@ReadOnlyProperty='10275' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = @ReadOnlyProperty +"""); + } + + public override async Task Enclosing_class_const_member_does_not_generate_parameter(bool isAsync) + { + await base.Enclosing_class_const_member_does_not_generate_parameter(isAsync); + + AssertSql( + $""" + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` = 10274 + """); + } + + public override async Task Generic_Ilist_contains_translates_to_server(bool isAsync) + { + await base.Generic_Ilist_contains_translates_to_server(isAsync); + + AssertSql( + """ +@cities1='Seattle' (Size = 15) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`City` = @cities1 +"""); + } + + public override async Task Filter_non_nullable_value_after_FirstOrDefault_on_empty_collection(bool isAsync) + { + await base.Filter_non_nullable_value_after_FirstOrDefault_on_empty_collection(isAsync); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE ( + SELECT TOP 1 IIF(LEN(`o`.`CustomerID`) IS NULL, NULL, CLNG(LEN(`o`.`CustomerID`))) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = 'John Doe') = 0 + """); + } + + public override async Task Using_same_parameter_twice_in_query_generates_one_sql_parameter(bool async) + { + await base.Using_same_parameter_twice_in_query_generates_one_sql_parameter(async); + + AssertSql( + """ +@i='10' + +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE (((@i & '') & `c`.`CustomerID`) & (@i & '')) = '10ALFKI10' +"""); + } + + public override async Task Two_parameters_with_same_name_get_uniquified(bool async) + { + await base.Two_parameters_with_same_name_get_uniquified(async); + + AssertSql( + """ +@customerId='ANATR' (Size = 5) +@customerId1='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerId OR `c`.`CustomerID` = @customerId1 +"""); + } + + public override async Task Two_parameters_with_same_case_insensitive_name_get_uniquified(bool async) + { + await base.Two_parameters_with_same_case_insensitive_name_get_uniquified(async); + + AssertSql( + """ +@customerID='ANATR' (Size = 5) +@customerId0='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @customerID OR `c`.`CustomerID` = @customerId0 +"""); + } + + public override async Task Where_Queryable_ToList_Count(bool async) + { + await base.Where_Queryable_ToList_Count(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) = 0 + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Where_Queryable_ToList_Contains(bool async) + { + await base.Where_Queryable_ToList_Contains(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o0`.`CustomerID`, `o0`.`OrderID` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE 'ALFKI' IN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID` +) +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Where_Queryable_ToArray_Count(bool async) + { + await base.Where_Queryable_ToArray_Count(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) = 0 + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Where_Queryable_ToArray_Contains(bool async) + { + await base.Where_Queryable_ToArray_Contains(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o0`.`CustomerID`, `o0`.`OrderID` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE 'ALFKI' IN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID` +) +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Where_Queryable_AsEnumerable_Count(bool async) + { + await base.Where_Queryable_AsEnumerable_Count(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) = 0 + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Where_Queryable_AsEnumerable_Contains(bool async) + { + await base.Where_Queryable_AsEnumerable_Contains(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o0`.`CustomerID`, `o0`.`OrderID` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE 'ALFKI' IN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID` +) +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Where_Queryable_AsEnumerable_Contains_negated(bool async) + { + await base.Where_Queryable_AsEnumerable_Contains_negated(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `o0`.`CustomerID`, `o0`.`OrderID` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE NOT (IIF('ALFKI' IN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID` + ) IS NULL, FALSE, 'ALFKI' IN ( + SELECT `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID` + ))) +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Where_Queryable_ToList_Count_member(bool async) + { + await base.Where_Queryable_ToList_Count_member(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) = 0 + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Where_Queryable_ToArray_Length_member(bool async) + { + await base.Where_Queryable_ToArray_Length_member(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM `Customers` AS `c` + LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) = 0 + ORDER BY `c`.`CustomerID` + """); + } + + public override async Task Where_collection_navigation_ToList_Count(bool async) + { + await base.Where_collection_navigation_ToList_Count(async); + + AssertSql( + """ + SELECT `o`.`OrderID`, `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o1` ON `o`.`OrderID` = `o1`.`OrderID` + WHERE `o`.`OrderID` < 10300 AND ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) = 4 + ORDER BY `o`.`OrderID`, `o1`.`OrderID` + """); + } + + public override async Task Where_collection_navigation_ToList_Contains(bool async) + { + await base.Where_collection_navigation_ToList_Contains(async); + + AssertSql( + """ +@entity_equality_order_OrderID='10248' (Nullable = true) + +SELECT `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` = @entity_equality_order_OrderID) +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Where_collection_navigation_ToArray_Count(bool async) + { + await base.Where_collection_navigation_ToArray_Count(async); + + AssertSql( + """ + SELECT `o`.`OrderID`, `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o1` ON `o`.`OrderID` = `o1`.`OrderID` + WHERE `o`.`OrderID` < 10300 AND ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) = 4 + ORDER BY `o`.`OrderID`, `o1`.`OrderID` + """); + } + + public override async Task Where_collection_navigation_ToArray_Contains(bool async) + { + await base.Where_collection_navigation_ToArray_Contains(async); + + AssertSql( + """ +@entity_equality_order_OrderID='10248' (Nullable = true) + +SELECT `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` = @entity_equality_order_OrderID) +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Where_collection_navigation_AsEnumerable_Count(bool async) + { + await base.Where_collection_navigation_AsEnumerable_Count(async); + + AssertSql( + """ + SELECT `o`.`OrderID`, `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o1` ON `o`.`OrderID` = `o1`.`OrderID` + WHERE `o`.`OrderID` < 10300 AND ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) = 5 + ORDER BY `o`.`OrderID`, `o1`.`OrderID` + """); + } + + public override async Task Where_collection_navigation_AsEnumerable_Contains(bool async) + { + await base.Where_collection_navigation_AsEnumerable_Contains(async); + + AssertSql( + """ +@entity_equality_order_OrderID='10248' (Nullable = true) + +SELECT `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` = @entity_equality_order_OrderID) +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); + } + + public override async Task Where_collection_navigation_ToList_Count_member(bool async) + { + await base.Where_collection_navigation_ToList_Count_member(async); + + AssertSql( + """ + SELECT `o`.`OrderID`, `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o1` ON `o`.`OrderID` = `o1`.`OrderID` + WHERE `o`.`OrderID` < 10300 AND ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) = 3 + ORDER BY `o`.`OrderID`, `o1`.`OrderID` + """); + } + + public override async Task Where_collection_navigation_ToArray_Length_member(bool async) + { + await base.Where_collection_navigation_ToArray_Length_member(async); + + AssertSql( + """ + SELECT `o`.`OrderID`, `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + FROM `Orders` AS `o` + LEFT JOIN `Order Details` AS `o1` ON `o`.`OrderID` = `o1`.`OrderID` + WHERE `o`.`OrderID` < 10300 AND ( + SELECT COUNT(*) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) = 3 + ORDER BY `o`.`OrderID`, `o1`.`OrderID` + """); + } + + public override async Task Where_list_object_contains_over_value_type(bool async) + { + await base.Where_list_object_contains_over_value_type(async); + + AssertSql( + """ +@orderIds1='10248' +@orderIds2='10249' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` IN (@orderIds1, @orderIds2) +"""); + } + + public override async Task Where_array_of_object_contains_over_value_type(bool async) + { + await base.Where_array_of_object_contains_over_value_type(async); + + AssertSql( + """ +@orderIds1='10248' +@orderIds2='10249' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` IN (@orderIds1, @orderIds2) +"""); + } + + public override async Task Multiple_OrElse_on_same_column_converted_to_in_with_overlap(bool async) + { + await base.Multiple_OrElse_on_same_column_converted_to_in_with_overlap(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` IN ('ALFKI', 'ANATR', 'ANTON') + """); + } + + public override async Task Multiple_OrElse_on_same_column_with_null_constant_comparison_converted_to_in(bool async) + { + await base.Multiple_OrElse_on_same_column_with_null_constant_comparison_converted_to_in(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`Region` IN ('WA', 'OR', 'BC') OR `c`.`Region` IS NULL +"""); + } + + public override async Task Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(bool async) + { + await base.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` IN ('ALFKI', 'ANATR', 'ANTON') + """); + } + + public override async Task Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in_with_overlap(bool async) + { + await base.Constant_array_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in_with_overlap(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN ('ANTON', 'ALFKI', 'ANATR') +"""); + } + + public override async Task Constant_array_Contains_OrElse_another_Contains_gets_combined_to_one_in_with_overlap(bool async) + { + await base.Constant_array_Contains_OrElse_another_Contains_gets_combined_to_one_in_with_overlap(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` IN ('ALFKI', 'ANATR', 'ANTON') + """); + } + + public override async Task Constant_array_Contains_AndAlso_another_Contains_gets_combined_to_one_in_with_overlap(bool async) + { + await base.Constant_array_Contains_AndAlso_another_Contains_gets_combined_to_one_in_with_overlap(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` NOT IN ('ALFKI', 'ANATR', 'ANTON') + """); + } + + public override async Task Multiple_AndAlso_on_same_column_converted_to_in_using_parameters(bool async) + { + await base.Multiple_AndAlso_on_same_column_converted_to_in_using_parameters(async); + + AssertSql( + """ +@prm1='ALFKI' (Size = 5) +@prm2='ANATR' (Size = 5) +@prm3='ANTON' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` <> @prm1 AND `c`.`CustomerID` <> @prm2 AND `c`.`CustomerID` <> @prm3 +"""); + } + + public override async Task Array_of_parameters_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(bool async) + { + await base.Array_of_parameters_Contains_OrElse_comparison_with_constant_gets_combined_to_one_in(async); + + // issue #21462 + AssertSql( + """ +@prm1='ALFKI' (Size = 5) +@prm2='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@prm1, @prm2, 'ANTON') +"""); + } + + public override async Task Multiple_OrElse_on_same_column_with_null_parameter_comparison_converted_to_in(bool async) + { + await base.Multiple_OrElse_on_same_column_with_null_parameter_comparison_converted_to_in(async); + + // issue #21462 + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`Region` IN ('WA', 'OR') OR `c`.`Region` IS NULL OR `c`.`Region` = 'BC' +"""); + } + + public override async Task Parameter_array_Contains_OrElse_comparison_with_constant(bool async) + { + await base.Parameter_array_Contains_OrElse_comparison_with_constant(async); + + AssertSql( + """ +@array1='ALFKI' (Size = 5) +@array2='ANATR' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@array1, @array2) OR `c`.`CustomerID` = 'ANTON' +"""); + } + + public override async Task Parameter_array_Contains_OrElse_comparison_with_parameter_with_overlap(bool async) + { + await base.Parameter_array_Contains_OrElse_comparison_with_parameter_with_overlap(async); + + AssertSql( + """ +@prm1='ANTON' (Size = 5) +@array1='ALFKI' (Size = 5) +@array2='ANATR' (Size = 5) +@prm2='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @prm1 OR `c`.`CustomerID` IN (@array1, @array2) OR `c`.`CustomerID` = @prm2 +"""); + } + + public override async Task Two_sets_of_comparison_combine_correctly(bool async) + { + await base.Two_sets_of_comparison_combine_correctly(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ANATR' + """); + } + + public override async Task Two_sets_of_comparison_combine_correctly2(bool async) + { + await base.Two_sets_of_comparison_combine_correctly2(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`Region` IS NOT NULL AND `c`.`Region` <> 'WA' +"""); + } + + public override async Task Filter_with_EF_Property_using_closure_for_property_name(bool async) + { + await base.Filter_with_EF_Property_using_closure_for_property_name(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task Filter_with_EF_Property_using_function_for_property_name(bool async) + { + await base.Filter_with_EF_Property_using_function_for_property_name(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = 'ALFKI' + """); + } + + public override async Task FirstOrDefault_over_scalar_projection_compared_to_null(bool async) + { + await base.FirstOrDefault_over_scalar_projection_compared_to_null(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) IS NULL + """); + } + + public override async Task FirstOrDefault_over_scalar_projection_compared_to_not_null(bool async) + { + await base.FirstOrDefault_over_scalar_projection_compared_to_not_null(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE ( + SELECT TOP 1 `o`.`OrderID` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) IS NOT NULL + """); + } + + public override async Task FirstOrDefault_over_custom_projection_compared_to_null(bool async) + { + await base.FirstOrDefault_over_custom_projection_compared_to_null(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task FirstOrDefault_over_custom_projection_compared_to_not_null(bool async) + { + await base.FirstOrDefault_over_custom_projection_compared_to_not_null(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + """); + } + + public override async Task SingleOrDefault_over_custom_projection_compared_to_null(bool async) + { + await base.SingleOrDefault_over_custom_projection_compared_to_null(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task SingleOrDefault_over_custom_projection_compared_to_not_null(bool async) + { + await base.SingleOrDefault_over_custom_projection_compared_to_not_null(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + """); + } + + public override async Task LastOrDefault_over_custom_projection_compared_to_null(bool async) + { + await base.LastOrDefault_over_custom_projection_compared_to_null(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task LastOrDefault_over_custom_projection_compared_to_not_null(bool async) + { + await base.LastOrDefault_over_custom_projection_compared_to_not_null(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + """); + } + + public override async Task First_over_custom_projection_compared_to_null(bool async) + { + await base.First_over_custom_projection_compared_to_null(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task First_over_custom_projection_compared_to_not_null(bool async) + { + await base.First_over_custom_projection_compared_to_not_null(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + """); + } + + public override async Task Single_over_custom_projection_compared_to_null(bool async) + { + await base.Single_over_custom_projection_compared_to_null(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task ElementAt_over_custom_projection_compared_to_not_null(bool async) + { + await base.ElementAt_over_custom_projection_compared_to_not_null(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE EXISTS ( + SELECT 1 + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY (SELECT 1) + OFFSET 3 ROWS) +"""); + } + + public override async Task ElementAtOrDefault_over_custom_projection_compared_to_null(bool async) + { + await base.ElementAtOrDefault_over_custom_projection_compared_to_null(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE NOT EXISTS ( + SELECT 1 + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID] + ORDER BY (SELECT 1) + OFFSET 7 ROWS) +"""); + } + + public override async Task Single_over_custom_projection_compared_to_not_null(bool async) + { + await base.Single_over_custom_projection_compared_to_not_null(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + """); + } + + public override async Task Last_over_custom_projection_compared_to_null(bool async) + { + await base.Last_over_custom_projection_compared_to_null(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) +"""); + } + + public override async Task Last_over_custom_projection_compared_to_not_null(bool async) + { + await base.Last_over_custom_projection_compared_to_not_null(async); + + AssertSql( + """ + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) + """); + } + + public override async Task Where_Contains_and_comparison(bool async) + { + await base.Where_Contains_and_comparison(async); + + AssertSql( + """ +@customerIds1='ALFKI' (Size = 5) +@customerIds2='FISSA' (Size = 5) +@customerIds3='WHITC' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@customerIds1, @customerIds2, @customerIds3) AND `c`.`City` = 'Seattle' +"""); + } + + public override async Task Where_Contains_or_comparison(bool async) + { + await base.Where_Contains_or_comparison(async); + + AssertSql( + """ +@customerIds1='ALFKI' (Size = 5) +@customerIds2='FISSA' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` IN (@customerIds1, @customerIds2) OR `c`.`City` = 'Seattle' +"""); + } + + public override async Task GetType_on_non_hierarchy1(bool async) + { + await base.GetType_on_non_hierarchy1(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task GetType_on_non_hierarchy2(bool async) + { + await base.GetType_on_non_hierarchy2(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task GetType_on_non_hierarchy3(bool async) + { + await base.GetType_on_non_hierarchy3(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +"""); + } + + public override async Task GetType_on_non_hierarchy4(bool async) + { + await base.GetType_on_non_hierarchy4(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Case_block_simplification_works_correctly(bool async) + { + await base.Case_block_simplification_works_correctly(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE IIF(`c`.`Region` IS NULL, 'OR', `c`.`Region`) = 'OR' +"""); + } + + public override async Task Where_poco_closure(bool async) + { + await base.Where_poco_closure(async); + + AssertSql( + """ +@entity_equality_customer_CustomerID='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @entity_equality_customer_CustomerID +""", + // + """ +@entity_equality_customer_CustomerID='ANATR' (Size = 5) + +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @entity_equality_customer_CustomerID +"""); + } + + public override async Task Filter_with_property_compared_to_null_wrapped_in_explicit_convert_to_object(bool async) + { + await base.Filter_with_property_compared_to_null_wrapped_in_explicit_convert_to_object(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`Region` IS NULL +"""); + } + + public override async Task Where_simple_shadow_subquery(bool async) + { + await base.Where_simple_shadow_subquery(async); + + AssertSql( + """ +@p='5' + +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e0` +WHERE `e0`.`Title` = 'Sales Representative' +ORDER BY `e0`.`EmployeeID` +"""); + } + + public override async Task Where_primitive_tracked2(bool async) + { + await base.Where_primitive_tracked2(async); + + AssertSql( + """ +@p='9' + +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` +) AS `e0` +WHERE `e0`.`EmployeeID` = 5 +"""); + } + + public override async Task Where_projection(bool async) + { + await base.Where_projection(async); + + AssertSql( + """ +SELECT `c`.`CompanyName` +FROM `Customers` AS `c` +WHERE `c`.`City` = 'London' +"""); + } + + public override async Task Where_bool_closure(bool async) + { + await base.Where_bool_closure(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE FALSE +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Where_primitive_tracked(bool async) + { + await base.Where_primitive_tracked(async); + + AssertSql( + """ +@p='9' + +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` +) AS `e0` +WHERE `e0`.`EmployeeID` = 5 +"""); + } + + public override async Task Where_simple_shadow_projection_mixed(bool async) + { + await base.Where_simple_shadow_projection_mixed(async); + + AssertSql( + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` +FROM `Employees` AS `e` +WHERE `e`.`Title` = 'Sales Representative' +"""); + } + + public override async Task Decimal_cast_to_double_works(bool async) + { + await base.Decimal_cast_to_double_works(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE IIF(`p`.`UnitPrice` IS NULL, NULL, CDBL(`p`.`UnitPrice`)) > 100.0 +"""); + } + + public override async Task Where_bool_client_side_negated(bool async) + { + await base.Where_bool_client_side_negated(async); + + AssertSql(); + } + + public override async Task Where_nested_field_access_closure_via_query_cache_error_null(bool async) + { + await base.Where_nested_field_access_closure_via_query_cache_error_null(async); + + AssertSql(); + } + + public override async Task Where_nested_field_access_closure_via_query_cache_error_method_null(bool async) + { + await base.Where_nested_field_access_closure_via_query_cache_error_method_null(async); + + AssertSql(); + } + + public override async Task Where_client(bool async) + { + await base.Where_client(async); + + AssertSql(); + } + + public override async Task Where_subquery_correlated_client_eval(bool async) + { + await base.Where_subquery_correlated_client_eval(async); + + AssertSql(); + } + + public override async Task Where_client_and_server_top_level(bool async) + { + await base.Where_client_and_server_top_level(async); + + AssertSql(); + } + + public override async Task Where_client_or_server_top_level(bool async) + { + await base.Where_client_or_server_top_level(async); + + AssertSql(); + } + + public override async Task Where_client_and_server_non_top_level(bool async) + { + await base.Where_client_and_server_non_top_level(async); + + AssertSql(); + } + + public override async Task Where_client_deep_inside_predicate_and_server_top_level(bool async) + { + await base.Where_client_deep_inside_predicate_and_server_top_level(async); + + AssertSql(); + } + + public override async Task EF_Constant(bool async) + { + await base.EF_Constant(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task EF_Constant_with_subtree(bool async) + { + await base.EF_Constant_with_subtree(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); + } + + public override async Task EF_Constant_does_not_parameterized_as_part_of_bigger_subtree(bool async) + { + await base.EF_Constant_does_not_parameterized_as_part_of_bigger_subtree(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = ('ALF' & 'KI') +"""); + } + + public override async Task EF_Constant_with_non_evaluatable_argument_throws(bool async) + { + await base.EF_Constant_with_non_evaluatable_argument_throws(async); + + AssertSql(); + } + + public override async Task EF_Parameter(bool async) + { + await base.EF_Parameter(async); + + AssertSql( + """ +@p='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @p +"""); + } + + public override async Task EF_Parameter_with_subtree(bool async) + { + await base.EF_Parameter_with_subtree(async); + + AssertSql( + """ +@p='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @p +"""); + } + + public override async Task EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(bool async) + { + await base.EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(async); + + AssertSql( + """ +@id='ALF' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = (@id & 'KI') +"""); + } + + public override async Task EF_Parameter_with_non_evaluatable_argument_throws(bool async) + { + await base.EF_Parameter_with_non_evaluatable_argument_throws(async); + + AssertSql(); + } + + public override async Task Implicit_cast_in_predicate(bool async) + { + await base.Implicit_cast_in_predicate(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = '1337' +""", + // + """ +@prm_Value='1337' (Size = 5) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = @prm_Value +""", + // + """ +@ToString='1337' (Size = 5) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = @ToString +""", + // + """ +@p='1337' (Size = 5) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = @p +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = '1337' +"""); + } + + public override async Task Interface_casting_though_generic_method(bool async) + { + await base.Interface_casting_though_generic_method(async); + + AssertSql( + """ +@id='10252' + +SELECT `o`.`OrderID` AS `Id` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = @id +""", + // + """ +SELECT `o`.`OrderID` AS `Id` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10252 +""", + // + """ +SELECT `o`.`OrderID` AS `Id` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10252 +""", + // + """ +SELECT `o`.`OrderID` AS `Id` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10252 +"""); + } + + public override async Task Simplifiable_coalesce_over_nullable(bool async) + { + await base.Simplifiable_coalesce_over_nullable(async); + + AssertSql( + """ +@p='10248' + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = @p +"""); + } + + public override async Task EF_MultipleParameters_with_non_evaluatable_argument_throws(bool async) + { + await base.EF_MultipleParameters_with_non_evaluatable_argument_throws(async); + + AssertSql(); + } + + #region Evaluation order of predicates + + public override async Task Take_and_Where_evaluation_order(bool async) + { + await base.Take_and_Where_evaluation_order(async); + + AssertSql( + """ +@p='3' + +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM ( + SELECT TOP @p `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e0` +WHERE (`e0`.`EmployeeID` MOD 2) = 0 +ORDER BY `e0`.`EmployeeID` +"""); + } + + public override async Task Skip_and_Where_evaluation_order(bool async) + { + await base.Skip_and_Where_evaluation_order(async); + + AssertSql( + """ +@__p_0='3' + +SELECT [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] +FROM ( + SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] + FROM [Employees] AS [e] + ORDER BY [e].[EmployeeID] + OFFSET @__p_0 ROWS +) AS [e0] +WHERE [e0].[EmployeeID] % 2 = 0 +ORDER BY [e0].[EmployeeID] +"""); + } + + public override async Task Take_and_Distinct_evaluation_order(bool async) + { + await base.Take_and_Distinct_evaluation_order(async); + + AssertSql( + """ +@p='3' + +SELECT DISTINCT `c0`.`ContactTitle` +FROM ( + SELECT TOP @p `c`.`ContactTitle` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle` +) AS `c0` +"""); + } + + #endregion Evaluation order of predicates + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NullKeysLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NullKeysLibRedTest.cs new file mode 100644 index 00000000..17a7aec1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NullKeysLibRedTest.cs @@ -0,0 +1,17 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NullKeysLibRedTest(NullKeysLibRedTest.NullKeysLibRedFixture fixture) + : NullKeysTestBase(fixture) + { + public class NullKeysLibRedFixture : NullKeysFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NullSemanticsQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/NullSemanticsQueryLibRedFixture.cs new file mode 100644 index 00000000..cf8562c1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NullSemanticsQueryLibRedFixture.cs @@ -0,0 +1,13 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NullSemanticsQueryLibRedFixture : NullSemanticsQueryFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/NullSemanticsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/NullSemanticsQueryLibRedTest.cs new file mode 100644 index 00000000..6c49afab --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/NullSemanticsQueryLibRedTest.cs @@ -0,0 +1,4489 @@ +using System.Data.Common; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using LibRed.Sql.Parsing; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.NullSemanticsModel; +using Xunit; +using Xunit.Abstractions; +using Xunit.Sdk; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class NullSemanticsQueryLibRedTest : NullSemanticsQueryTestBase + { + // ReSharper disable once UnusedParameter.Local + public NullSemanticsQueryLibRedTest(NullSemanticsQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Rewrite_compare_int_with_int(bool async) + { + await base.Rewrite_compare_int_with_int(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`IntA` = `e`.`IntB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` = `e`.`IntB` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableIntA` = `e`.`IntB` AND `e`.`NullableIntA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` = `e`.`IntB` +""", + // + """ +SELECT `e`.`Id`, `e`.`IntA` = `e`.`NullableIntB` AND `e`.`NullableIntB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` = `e`.`NullableIntB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableIntA` = `e`.`NullableIntB` AND `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntB` IS NOT NULL) OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` = `e`.`NullableIntB` OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`IntA` <> `e`.`IntB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` <> `e`.`IntB` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableIntA` <> `e`.`IntB` OR `e`.`NullableIntA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` <> `e`.`IntB` OR `e`.`NullableIntA` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`IntA` <> `e`.`NullableIntB` OR `e`.`NullableIntB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` <> `e`.`NullableIntB` OR `e`.`NullableIntB` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableIntA` <> `e`.`NullableIntB` OR `e`.`NullableIntA` IS NULL OR `e`.`NullableIntB` IS NULL) AND (`e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableIntA` <> `e`.`NullableIntB` OR `e`.`NullableIntA` IS NULL OR `e`.`NullableIntB` IS NULL) AND (`e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`IntA` <> `e`.`IntB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` <> `e`.`IntB` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableIntA` <> `e`.`IntB` OR `e`.`NullableIntA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` <> `e`.`IntB` OR `e`.`NullableIntA` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`IntA` <> `e`.`NullableIntB` OR `e`.`NullableIntB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` <> `e`.`NullableIntB` OR `e`.`NullableIntB` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableIntA` <> `e`.`NullableIntB` OR `e`.`NullableIntA` IS NULL OR `e`.`NullableIntB` IS NULL) AND (`e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableIntA` <> `e`.`NullableIntB` OR `e`.`NullableIntA` IS NULL OR `e`.`NullableIntB` IS NULL) AND (`e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`IntA` = `e`.`IntB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` = `e`.`IntB` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableIntA` = `e`.`IntB` AND `e`.`NullableIntA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` = `e`.`IntB` +""", + // + """ +SELECT `e`.`Id`, `e`.`IntA` = `e`.`NullableIntB` AND `e`.`NullableIntB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` = `e`.`NullableIntB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableIntA` = `e`.`NullableIntB` AND `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntB` IS NOT NULL) OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` = `e`.`NullableIntB` OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL) +"""); + } + + public override async Task Rewrite_compare_bool_with_bool(bool async) + { + await base.Rewrite_compare_bool_with_bool(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolA`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = TRUE AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> TRUE AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`NullableBoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, TRUE = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolB`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolB`) +""", + // + """ +SELECT `e`.`Id`, FALSE = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE = `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolA`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = FALSE AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = FALSE +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> FALSE AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> FALSE +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolB`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolB`) +""", + // + """ +SELECT `e`.`Id`, TRUE <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`NullableBoolB`) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, FALSE <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE <> `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolA`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> TRUE OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> TRUE OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = TRUE OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = TRUE OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolB`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolB`) +""", + // + """ +SELECT `e`.`Id`, TRUE <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE TRUE <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, FALSE <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolA`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> FALSE OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> FALSE OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = FALSE OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = FALSE OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, TRUE = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE TRUE = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolB`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolB`) +""", + // + """ +SELECT `e`.`Id`, FALSE = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolA`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> TRUE OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> TRUE OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = TRUE OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = TRUE OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolB`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolB`) +""", + // + """ +SELECT `e`.`Id`, TRUE <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE TRUE <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, FALSE <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolA`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> FALSE OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> FALSE OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = FALSE OR `e`.`NullableBoolA` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = FALSE OR `e`.`NullableBoolA` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, TRUE = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE TRUE = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolB`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolB`) +""", + // + """ +SELECT `e`.`Id`, FALSE = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolA`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = TRUE AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> TRUE AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`NullableBoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, TRUE = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolB`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolB`) +""", + // + """ +SELECT `e`.`Id`, FALSE = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE = `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolA`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolA`) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = FALSE AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = FALSE +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` = `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, (`e`.`NullableBoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`NullableBoolA` <> FALSE AND `e`.`NullableBoolA` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> FALSE +""", + // + """ +SELECT `e`.`Id`, NOT (`e`.`BoolB`) AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`BoolB`) +""", + // + """ +SELECT `e`.`Id`, TRUE <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (`e`.`NullableBoolB`) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolB` AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id`, FALSE <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL AS `X` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE <> `e`.`NullableBoolB` +"""); + } + + public override async Task Compare_bool_with_bool_equal(bool async) + { + await base.Compare_bool_with_bool_equal(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_negated_bool_with_bool_equal(bool async) + { + await base.Compare_negated_bool_with_bool_equal(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_bool_with_negated_bool_equal(bool async) + { + await base.Compare_bool_with_negated_bool_equal(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_negated_bool_with_negated_bool_equal(bool async) + { + await base.Compare_negated_bool_with_negated_bool_equal(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_bool_with_bool_equal_negated(bool async) + { + await base.Compare_bool_with_bool_equal_negated(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_negated_bool_with_bool_equal_negated(bool async) + { + await base.Compare_negated_bool_with_bool_equal_negated(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_bool_with_negated_bool_equal_negated(bool async) + { + await base.Compare_bool_with_negated_bool_equal_negated(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_negated_bool_with_negated_bool_equal_negated(bool async) + { + await base.Compare_negated_bool_with_negated_bool_equal_negated(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_bool_with_bool_not_equal(bool async) + { + await base.Compare_bool_with_bool_not_equal(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_negated_bool_with_bool_not_equal(bool async) + { + await base.Compare_negated_bool_with_bool_not_equal(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_bool_with_negated_bool_not_equal(bool async) + { + await base.Compare_bool_with_negated_bool_not_equal(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_negated_bool_with_negated_bool_not_equal(bool async) + { + await base.Compare_negated_bool_with_negated_bool_not_equal(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_bool_with_bool_not_equal_negated(bool async) + { + await base.Compare_bool_with_bool_not_equal_negated(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_negated_bool_with_bool_not_equal_negated(bool async) + { + await base.Compare_negated_bool_with_bool_not_equal_negated(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_bool_with_negated_bool_not_equal_negated(bool async) + { + await base.Compare_bool_with_negated_bool_not_equal_negated(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_negated_bool_with_negated_bool_not_equal_negated(bool async) + { + await base.Compare_negated_bool_with_negated_bool_not_equal_negated(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_equals_method(bool async) + { + await base.Compare_equals_method(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_equals_method_static(bool async) + { + await base.Compare_equals_method_static(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = `e`.`NullableBoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Compare_equals_method_negated(bool async) + { + await base.Compare_equals_method_negated(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_equals_method_negated_static(bool async) + { + await base.Compare_equals_method_negated_static(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`BoolB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL) +"""); + } + + public override async Task Compare_complex_equal_equal_equal(bool async) + { + await base.Compare_complex_equal_equal_equal(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`BoolA` = `e`.`BoolB`) = (`e`.`IntA` = `e`.`IntB`) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL) = (`e`.`IntA` = `e`.`NullableIntB` AND `e`.`NullableIntB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((`e`.`NullableBoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL)) = ((`e`.`NullableIntA` = `e`.`NullableIntB` AND `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntB` IS NOT NULL) OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL)) +"""); + } + + public override async Task Compare_complex_equal_not_equal_equal(bool async) + { + await base.Compare_complex_equal_not_equal_equal(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`BoolA` = `e`.`BoolB`) <> (`e`.`IntA` = `e`.`IntB`) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` = `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL) <> (`e`.`IntA` = `e`.`NullableIntB` AND `e`.`NullableIntB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((`e`.`NullableBoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL)) <> ((`e`.`NullableIntA` = `e`.`NullableIntB` AND `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntB` IS NOT NULL) OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL)) +"""); + } + + public override async Task Compare_complex_not_equal_equal_equal(bool async) + { + await base.Compare_complex_not_equal_equal_equal(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`BoolA` <> `e`.`BoolB`) = (`e`.`IntA` = `e`.`IntB`) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL) = (`e`.`IntA` = `e`.`NullableIntB` AND `e`.`NullableIntB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL)) = ((`e`.`NullableIntA` = `e`.`NullableIntB` AND `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntB` IS NOT NULL) OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL)) +"""); + } + + public override async Task Compare_complex_not_equal_not_equal_equal(bool async) + { + await base.Compare_complex_not_equal_not_equal_equal(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`BoolA` <> `e`.`BoolB`) <> (`e`.`IntA` = `e`.`IntB`) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL) <> (`e`.`IntA` = `e`.`NullableIntB` AND `e`.`NullableIntB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL)) <> ((`e`.`NullableIntA` = `e`.`NullableIntB` AND `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntB` IS NOT NULL) OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL)) +"""); + } + + public override async Task Compare_complex_not_equal_equal_not_equal(bool async) + { + await base.Compare_complex_not_equal_equal_not_equal(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`BoolA` <> `e`.`BoolB`) = (`e`.`IntA` <> `e`.`IntB`) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL) = (`e`.`IntA` <> `e`.`NullableIntB` OR `e`.`NullableIntB` IS NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL)) = ((`e`.`NullableIntA` <> `e`.`NullableIntB` OR `e`.`NullableIntA` IS NULL OR `e`.`NullableIntB` IS NULL) AND (`e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL)) +"""); + } + + public override async Task Compare_complex_not_equal_not_equal_not_equal(bool async) + { + await base.Compare_complex_not_equal_not_equal_not_equal(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`BoolA` <> `e`.`BoolB`) <> (`e`.`IntA` <> `e`.`IntB`) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` <> `e`.`BoolB` OR `e`.`NullableBoolA` IS NULL) <> (`e`.`IntA` <> `e`.`NullableIntB` OR `e`.`NullableIntB` IS NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL)) <> ((`e`.`NullableIntA` <> `e`.`NullableIntB` OR `e`.`NullableIntA` IS NULL OR `e`.`NullableIntB` IS NULL) AND (`e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL)) +"""); + } + + public override async Task Compare_nullable_with_null_parameter_equal(bool async) + { + await base.Compare_nullable_with_null_parameter_equal(async); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + WHERE `e`.`NullableStringA` IS NULL + """); + } + + public override async Task Compare_nullable_with_non_null_parameter_not_equal(bool async) + { + await base.Compare_nullable_with_non_null_parameter_not_equal(async); + + AssertSql( + """ +@prm='Foo' (Size = 255) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` = @prm +"""); + } + + public override async Task Join_uses_database_semantics(bool async) + { + await base.Join_uses_database_semantics(async); + + AssertSql( + $""" + SELECT `e`.`Id` AS `Id1`, `e0`.`Id` AS `Id2`, `e`.`NullableIntA`, `e0`.`NullableIntB` + FROM `Entities1` AS `e` + INNER JOIN `Entities2` AS `e0` ON `e`.`NullableIntA` = `e0`.`NullableIntB` + """); + } + + public override async Task Join_uses_csharp_semantics_for_anon_objects(bool async) + { + await base.Join_uses_csharp_semantics_for_anon_objects(async); + + AssertSql( + """ +SELECT `e`.`Id` AS `Id1`, `e0`.`Id` AS `Id2`, `e`.`NullableIntA`, `e0`.`NullableIntB` +FROM `Entities1` AS `e` +INNER JOIN `Entities2` AS `e0` ON `e`.`NullableIntA` = `e0`.`NullableIntB` OR (`e`.`NullableIntA` IS NULL AND `e0`.`NullableIntB` IS NULL) +"""); + } + + public override async Task Contains_with_local_array_closure_with_null(bool async) + { + await base.Contains_with_local_array_closure_with_null(async); + + AssertSql( + """ +@ids1='Foo' (Size = 255) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NULL OR `e`.`NullableStringA` = @ids1 +"""); + } + + public override async Task Contains_with_local_array_closure_false_with_null(bool async) + { + await base.Contains_with_local_array_closure_false_with_null(async); + + AssertSql( + """ +@ids1='Foo' (Size = 255) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringA` <> @ids1 +"""); + } + + public override async Task Contains_with_local_nullable_array_closure_negated(bool async) + { + await base.Contains_with_local_nullable_array_closure_negated(async); + + AssertSql( + """ +@ids1='Foo' (Size = 255) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` <> @ids1 OR `e`.`NullableStringA` IS NULL +"""); + } + + public override async Task Contains_with_local_array_closure_with_multiple_nulls(bool async) + { + await base.Contains_with_local_array_closure_with_multiple_nulls(async); + + AssertSql( + """ +@ids1='Foo' (Size = 255) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NULL OR `e`.`NullableStringA` = @ids1 +"""); + } + + public override async Task Where_multiple_ors_with_null(bool async) + { + await base.Where_multiple_ors_with_null(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IN ('Foo', 'Blah') OR `e`.`NullableStringA` IS NULL +"""); + } + + public override async Task Where_multiple_ands_with_null(bool async) + { + await base.Where_multiple_ands_with_null(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` NOT IN ('Foo', 'Blah') AND `e`.`NullableStringA` IS NOT NULL +"""); + } + + public override async Task Where_multiple_ors_with_nullable_parameter(bool async) + { + await base.Where_multiple_ors_with_nullable_parameter(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` = 'Foo' OR `e`.`NullableStringA` IS NULL +"""); + } + + public override async Task Where_multiple_ands_with_nullable_parameter_and_constant(bool async) + { + await base.Where_multiple_ands_with_nullable_parameter_and_constant(async); + + AssertSql( + """ +@prm3='Blah' (Size = 255) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableStringA` <> 'Foo' OR `e`.`NullableStringA` IS NULL) AND `e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringA` <> @prm3 +"""); + } + + public override async Task Where_multiple_ands_with_nullable_parameter_and_constant_not_optimized(bool async) + { + await base.Where_multiple_ands_with_nullable_parameter_and_constant_not_optimized(async); + + AssertSql( + """ +@prm3='Blah' (Size = 255) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringB` IS NOT NULL AND (`e`.`NullableStringA` <> 'Foo' OR `e`.`NullableStringA` IS NULL) AND `e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringA` <> @prm3 +"""); + } + + public override async Task Where_coalesce(bool async) + { + await base.Where_coalesce(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableBoolA` IS NULL, TRUE, `e`.`NullableBoolA`) +"""); + } + + public override async Task Where_coalesce_shortcircuit(bool async) + { + await base.Where_coalesce_shortcircuit(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` OR `e`.`BoolB` +"""); + } + + public override async Task Where_coalesce_shortcircuit_many(bool async) + { + await base.Where_coalesce_shortcircuit_many(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableBoolA` IS NULL, `e`.`BoolA` OR `e`.`BoolB`, `e`.`NullableBoolA`) +"""); + } + + public override async Task Where_equal_nullable_with_null_value_parameter(bool async) + { + await base.Where_equal_nullable_with_null_value_parameter(async); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + WHERE `e`.`NullableStringA` IS NULL + """); + } + + public override async Task Where_not_equal_nullable_with_null_value_parameter(bool async) + { + await base.Where_not_equal_nullable_with_null_value_parameter(async); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + WHERE `e`.`NullableStringA` IS NOT NULL + """); + } + + public override async Task Where_equal_with_coalesce(bool async) + { + await base.Where_equal_with_coalesce(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableStringA` IS NULL, `e`.`NullableStringB`, `e`.`NullableStringA`) = `e`.`NullableStringC` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL AND `e`.`NullableStringC` IS NULL) +"""); + } + + public override async Task Where_not_equal_with_coalesce(bool async) + { + await base.Where_not_equal_with_coalesce(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (IIF(`e`.`NullableStringA` IS NULL, `e`.`NullableStringB`, `e`.`NullableStringA`) <> `e`.`NullableStringC` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL) OR `e`.`NullableStringC` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL OR `e`.`NullableStringC` IS NOT NULL) +"""); + } + + public override async Task Where_equal_with_coalesce_both_sides(bool async) + { + await base.Where_equal_with_coalesce_both_sides(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableStringA` IS NULL, `e`.`NullableStringB`, `e`.`NullableStringA`) = IIF(`e`.`NullableStringC` IS NULL, `e`.`StringA`, `e`.`NullableStringC`) +"""); + } + + public override async Task Where_not_equal_with_coalesce_both_sides(bool async) + { + await base.Where_not_equal_with_coalesce_both_sides(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (IIF(`e`.`NullableIntA` IS NULL, `e`.`NullableIntB`, `e`.`NullableIntA`) <> IIF(`e`.`NullableIntC` IS NULL, `e`.`NullableIntB`, `e`.`NullableIntC`) OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL) OR (`e`.`NullableIntC` IS NULL AND `e`.`NullableIntB` IS NULL)) AND (`e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL OR `e`.`NullableIntC` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL) +"""); + } + + public override async Task Where_equal_with_conditional(bool async) + { + await base.Where_equal_with_conditional(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), `e`.`NullableStringA`, `e`.`NullableStringB`) = `e`.`NullableStringC` OR (IIF(`e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), `e`.`NullableStringA`, `e`.`NullableStringB`) IS NULL AND `e`.`NullableStringC` IS NULL) +"""); + } + + public override async Task Where_not_equal_with_conditional(bool async) + { + await base.Where_not_equal_with_conditional(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableStringC` <> IIF(`e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), `e`.`NullableStringA`, `e`.`NullableStringB`) OR `e`.`NullableStringC` IS NULL OR IIF(`e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), `e`.`NullableStringA`, `e`.`NullableStringB`) IS NULL) AND (`e`.`NullableStringC` IS NOT NULL OR IIF(`e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), `e`.`NullableStringA`, `e`.`NullableStringB`) IS NOT NULL) +"""); + } + + public override async Task Where_equal_with_conditional_non_nullable(bool async) + { + await base.Where_equal_with_conditional_non_nullable(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringC` <> IIF(`e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), `e`.`StringA`, `e`.`StringB`) OR `e`.`NullableStringC` IS NULL +"""); + } + + public override async Task Where_equal_with_and_and_contains(bool async) + { + await base.Where_equal_with_and_and_contains(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringB` IS NOT NULL AND (INSTR(1, `e`.`NullableStringA`, `e`.`NullableStringB`, 1) > 0 OR (`e`.`NullableStringB` LIKE '')) AND `e`.`BoolA` +"""); + } + + public override async Task Null_comparison_in_selector_with_relational_nulls(bool async) + { + await base.Null_comparison_in_selector_with_relational_nulls(async); + + AssertSql( + """ +SELECT `e`.`NullableStringA` <> 'Foo' OR `e`.`NullableStringA` IS NULL +FROM `Entities1` AS `e` +"""); + } + + public override async Task Null_comparison_in_order_by_with_relational_nulls(bool async) + { + await base.Null_comparison_in_order_by_with_relational_nulls(async); + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +ORDER BY NOT (`e`.`NullableStringA` <> 'Foo' OR `e`.`NullableStringA` IS NULL), NOT (`e`.`NullableIntB` <> 10 OR `e`.`NullableIntB` IS NULL) +"""); + } + + public override async Task Null_comparison_in_join_key_with_relational_nulls(bool async) + { + await base.Null_comparison_in_join_key_with_relational_nulls(async); + + AssertSql( + $""" + SELECT `e1`.`Id`, `e1`.`BoolA`, `e1`.`BoolB`, `e1`.`BoolC`, `e1`.`IntA`, `e1`.`IntB`, `e1`.`IntC`, `e1`.`NullableBoolA`, `e1`.`NullableBoolB`, `e1`.`NullableBoolC`, `e1`.`NullableIntA`, `e1`.`NullableIntB`, `e1`.`NullableIntC`, `e1`.`NullableStringA`, `e1`.`NullableStringB`, `e1`.`NullableStringC`, `e1`.`StringA`, `e1`.`StringB`, `e1`.`StringC`, `e2`.`Id`, `e2`.`BoolA`, `e2`.`BoolB`, `e2`.`BoolC`, `e2`.`IntA`, `e2`.`IntB`, `e2`.`IntC`, `e2`.`NullableBoolA`, `e2`.`NullableBoolB`, `e2`.`NullableBoolC`, `e2`.`NullableIntA`, `e2`.`NullableIntB`, `e2`.`NullableIntC`, `e2`.`NullableStringA`, `e2`.`NullableStringB`, `e2`.`NullableStringC`, `e2`.`StringA`, `e2`.`StringB`, `e2`.`StringC` + FROM `Entities1` AS `e1` + INNER JOIN `Entities2` AS `e2` ON CASE + WHEN `e1`.`NullableStringA` <> 'Foo' + THEN True ELSE False + END = CASE + WHEN `e2`.`NullableBoolB` <> True + THEN True ELSE False + END + """); + } + + public override async Task Where_conditional_search_condition_in_result(bool async) + { + await base.Where_conditional_search_condition_in_result(async); + + AssertSql( + """ +@list1='Foo' (Size = 255) +@list2='Bar' (Size = 255) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`StringA` IN (@list1, @list2) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`StringA` LIKE 'B%' +"""); + } + + public override async Task Where_nested_conditional_search_condition_in_result(bool async) + { + await base.Where_nested_conditional_search_condition_in_result(async); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + """); + } + + public override void Where_equal_using_relational_null_semantics() + { + base.Where_equal_using_relational_null_semantics(); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` + """); + } + + public override void Where_contains_on_parameter_array_with_relational_null_semantics() + { + base.Where_contains_on_parameter_array_with_relational_null_semantics(); + + AssertSql( + """ +@names1='Foo' (Size = 255) +@names2='Bar' (Size = 255) + +SELECT `e`.`NullableStringA` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IN (@names1, @names2) +"""); + } + + public override void Where_contains_on_parameter_empty_array_with_relational_null_semantics() + { + base.Where_contains_on_parameter_empty_array_with_relational_null_semantics(); + + AssertSql( + """ +SELECT `e`.`NullableStringA` +FROM `Entities1` AS `e` +WHERE FALSE +"""); + } + + public override void Where_contains_on_parameter_array_with_just_null_with_relational_null_semantics() + { + base.Where_contains_on_parameter_array_with_just_null_with_relational_null_semantics(); + + AssertSql( + """ +@names1=NULL (Size = 255) + +SELECT `e`.`NullableStringA` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` = @names1 +"""); + } + + public override async Task Where_nullable_bool(bool async) + { + await base.Where_nullable_bool(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` +"""); + } + + public override async Task Where_nullable_bool_equal_with_constant(bool async) + { + await base.Where_nullable_bool_equal_with_constant(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` +"""); + } + + public override async Task Where_nullable_bool_with_null_check(bool async) + { + await base.Where_nullable_bool_with_null_check(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolA` +"""); + } + + public override void Where_equal_using_relational_null_semantics_with_parameter() + { + base.Where_equal_using_relational_null_semantics_with_parameter(); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` IS NULL +"""); + } + + public override void Where_equal_using_relational_null_semantics_complex_with_parameter() + { + base.Where_equal_using_relational_null_semantics_complex_with_parameter(); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` + """); + } + + public override void Where_not_equal_using_relational_null_semantics() + { + base.Where_not_equal_using_relational_null_semantics(); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` + """); + } + + public override void Where_not_equal_using_relational_null_semantics_with_parameter() + { + base.Where_not_equal_using_relational_null_semantics_with_parameter(); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + WHERE `e`.`NullableBoolA` IS NOT NULL + """); + } + + public override void Where_not_equal_using_relational_null_semantics_complex_with_parameter() + { + base.Where_not_equal_using_relational_null_semantics_complex_with_parameter(); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` + """); + } + + public override async Task Where_comparison_null_constant_and_null_parameter(bool async) + { + await base.Where_comparison_null_constant_and_null_parameter(async); + + AssertSql( + """ +@p='True' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE @p +""", + // + """ +@p='False' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE @p +"""); + } + + public override async Task Where_comparison_null_constant_and_nonnull_parameter(bool async) + { + await base.Where_comparison_null_constant_and_nonnull_parameter(async); + + AssertSql( + """ +@p='False' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE @p +""", + // + """ +@p='True' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE @p +"""); + } + + public override async Task Where_comparison_nonnull_constant_and_null_parameter(bool async) + { + await base.Where_comparison_nonnull_constant_and_null_parameter(async); + + AssertSql( + """ +@p='False' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE @p +""", + // + """ +@p='True' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE @p +"""); + } + + public override async Task Where_comparison_null_semantics_optimization_works_with_complex_predicates(bool async) + { + await base.Where_comparison_null_semantics_optimization_works_with_complex_predicates(async); + + AssertSql( + $""" + SELECT `e`.`Id` + FROM `Entities1` AS `e` + WHERE `e`.`NullableStringA` IS NULL + """); + } + + public override void Switching_null_semantics_produces_different_cache_entry() + { + base.Switching_null_semantics_produces_different_cache_entry(); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` +"""); + } + + public override void Switching_parameter_value_to_null_produces_different_cache_entry() + { + base.Switching_parameter_value_to_null_produces_different_cache_entry(); + + AssertSql( + """ +@p='True' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE @p +""", + // + """ +@p='False' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE @p +"""); + } + + public override void From_sql_composed_with_relational_null_comparison() + { + base.From_sql_composed_with_relational_null_comparison(); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`BoolA`, `m`.`BoolB`, `m`.`BoolC`, `m`.`IntA`, `m`.`IntB`, `m`.`IntC`, `m`.`NullableBoolA`, `m`.`NullableBoolB`, `m`.`NullableBoolC`, `m`.`NullableIntA`, `m`.`NullableIntB`, `m`.`NullableIntC`, `m`.`NullableStringA`, `m`.`NullableStringB`, `m`.`NullableStringC`, `m`.`StringA`, `m`.`StringB`, `m`.`StringC` +FROM ( + SELECT * FROM `Entities1` +) AS `m` +WHERE `m`.`StringA` = `m`.`StringB` +"""); + } + + public override async Task Projecting_nullable_bool_with_coalesce(bool async) + { + await base.Projecting_nullable_bool_with_coalesce(async); + + AssertSql( + $""" + SELECT `e`.`Id`, IIF(`e`.`NullableBoolA` IS NULL, FALSE, `e`.`NullableBoolA`) AS `Coalesce` + FROM `Entities1` AS `e` + """); + } + + public override async Task Projecting_nullable_bool_with_coalesce_nested(bool async) + { + await base.Projecting_nullable_bool_with_coalesce_nested(async); + + AssertSql( + $""" + SELECT `e`.`Id`, IIF(`e`.`NullableBoolA` IS NULL, IIF(`e`.`NullableBoolB` IS NULL, FALSE, `e`.`NullableBoolB`), `e`.`NullableBoolA`) AS `Coalesce` + FROM `Entities1` AS `e` + """, + // + $""" + SELECT `e`.`Id`, IIF(`e`.`NullableBoolA` IS NULL, IIF(`e`.`NullableBoolB` IS NULL, FALSE, `e`.`NullableBoolB`), `e`.`NullableBoolA`) AS `Coalesce` + FROM `Entities1` AS `e` + """); + } + + public override async Task Null_semantics_applied_when_comparing_function_with_nullable_argument_to_a_nullable_column(bool async) + { + await base.Null_semantics_applied_when_comparing_function_with_nullable_argument_to_a_nullable_column(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (INSTR(1, `e`.`NullableStringA`, 'oo', 1) - 1) = `e`.`NullableIntA` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableIntA` IS NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (INSTR(1, `e`.`NullableStringA`, 'ar', 1) - 1) = `e`.`NullableIntA` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableIntA` IS NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((INSTR(1, `e`.`NullableStringA`, 'oo', 1) - 1) <> `e`.`NullableIntB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableIntB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL) +"""); + } + + public override async Task Where_IndexOf_empty(bool async) + { + await base.Where_IndexOf_empty(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableStringA` IS NOT NULL, 0, NULL) = `e`.`NullableIntA` OR (IIF(`e`.`NullableStringA` IS NOT NULL, 0, NULL) IS NULL AND `e`.`NullableIntA` IS NULL) +"""); + } + + public override async Task Select_IndexOf(bool async) + { + await base.Select_IndexOf(async); + + AssertSql( +""" +SELECT INSTR(1, `e`.`NullableStringA`, 'oo', 1) - 1 +FROM `Entities1` AS `e` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Null_semantics_applied_when_comparing_two_functions_with_nullable_arguments(bool async) + { + await base.Null_semantics_applied_when_comparing_two_functions_with_nullable_arguments(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (INSTR(1, `e`.`NullableStringA`, 'oo', 1) - 1) = (INSTR(1, `e`.`NullableStringB`, 'ar', 1) - 1) OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((INSTR(1, `e`.`NullableStringA`, 'oo', 1) - 1) <> (INSTR(1, `e`.`NullableStringB`, 'ar', 1) - 1) OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((INSTR(1, `e`.`NullableStringA`, 'oo', 1) - 1) <> (INSTR(1, `e`.`NullableStringA`, 'ar', 1) - 1) OR `e`.`NullableStringA` IS NULL) AND `e`.`NullableStringA` IS NOT NULL +"""); + } + + public override async Task Null_semantics_applied_when_comparing_two_functions_with_multiple_nullable_arguments(bool async) + { + await base.Null_semantics_applied_when_comparing_two_functions_with_multiple_nullable_arguments(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL OR `e`.`NullableStringC` IS NULL, NULL, REPLACE(IIF(`e`.`NullableStringA` IS NULL, '', `e`.`NullableStringA`), IIF(`e`.`NullableStringB` IS NULL, CHR(1), `e`.`NullableStringB`), IIF(`e`.`NullableStringC` IS NULL, CHR(1), `e`.`NullableStringC`))) = `e`.`NullableStringA` OR ((`e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL OR `e`.`NullableStringC` IS NULL) AND `e`.`NullableStringA` IS NULL) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (IIF(`e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL OR `e`.`NullableStringC` IS NULL, NULL, REPLACE(IIF(`e`.`NullableStringA` IS NULL, '', `e`.`NullableStringA`), IIF(`e`.`NullableStringB` IS NULL, CHR(1), `e`.`NullableStringB`), IIF(`e`.`NullableStringC` IS NULL, CHR(1), `e`.`NullableStringC`))) <> `e`.`NullableStringA` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL OR `e`.`NullableStringC` IS NULL OR `e`.`NullableStringA` IS NULL) AND ((`e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringB` IS NOT NULL AND `e`.`NullableStringC` IS NOT NULL) OR `e`.`NullableStringA` IS NOT NULL) +"""); + } + + public override async Task Null_semantics_coalesce(bool async) + { + await base.Null_semantics_coalesce(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = IIF(`e`.`NullableBoolB` IS NULL, `e`.`BoolC`, `e`.`NullableBoolB`) +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` = IIF(`e`.`NullableBoolB` IS NULL, `e`.`NullableBoolC`, `e`.`NullableBoolB`) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL AND `e`.`NullableBoolC` IS NULL) +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableBoolB` IS NULL, `e`.`BoolC`, `e`.`NullableBoolB`) <> `e`.`NullableBoolA` OR `e`.`NullableBoolA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (IIF(`e`.`NullableBoolB` IS NULL, `e`.`NullableBoolC`, `e`.`NullableBoolB`) <> `e`.`NullableBoolA` OR (`e`.`NullableBoolB` IS NULL AND `e`.`NullableBoolC` IS NULL) OR `e`.`NullableBoolA` IS NULL) AND (`e`.`NullableBoolB` IS NOT NULL OR `e`.`NullableBoolC` IS NOT NULL OR `e`.`NullableBoolA` IS NOT NULL) +"""); + } + + public override async Task Null_semantics_conditional(bool async) + { + await base.Null_semantics_conditional(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`BoolA` = IIF(`e`.`BoolB`, `e`.`NullableBoolB`, `e`.`NullableBoolC`) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL), `e`.`BoolB`, `e`.`BoolC`) = `e`.`BoolA` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(IIF(`e`.`BoolA`, (`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL), `e`.`BoolC`) <> `e`.`BoolB`, `e`.`BoolA`, `e`.`NullableBoolB` = `e`.`NullableBoolC` OR (`e`.`NullableBoolB` IS NULL AND `e`.`NullableBoolC` IS NULL)) +""", + // + """ +SELECT IIF(IIF(`e`.`BoolA`, `e`.`NullableIntA`, `e`.`IntB`) > `e`.`IntC`, TRUE, FALSE) +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`BoolA`, `e`.`NullableBoolB`, NOT (`e`.`NullableBoolC`)) IS NULL +"""); + } + + public override async Task Null_semantics_function(bool async) + { + await base.Null_semantics_function(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (MID(`e`.`NullableStringA`, 0 + 1, `e`.`IntA`) <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL) +"""); + } + + public override async Task Null_semantics_join_with_composite_key(bool async) + { + await base.Null_semantics_join_with_composite_key(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC`, `e0`.`Id`, `e0`.`BoolA`, `e0`.`BoolB`, `e0`.`BoolC`, `e0`.`IntA`, `e0`.`IntB`, `e0`.`IntC`, `e0`.`NullableBoolA`, `e0`.`NullableBoolB`, `e0`.`NullableBoolC`, `e0`.`NullableIntA`, `e0`.`NullableIntB`, `e0`.`NullableIntC`, `e0`.`NullableStringA`, `e0`.`NullableStringB`, `e0`.`NullableStringC`, `e0`.`StringA`, `e0`.`StringB`, `e0`.`StringC` +FROM `Entities1` AS `e` +INNER JOIN `Entities2` AS `e0` ON (`e`.`NullableStringA` = `e0`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e0`.`NullableStringB` IS NULL)) AND ((`e`.`NullableStringB` <> `e`.`NullableStringC` OR `e`.`NullableStringB` IS NULL OR `e`.`NullableStringC` IS NULL) AND (`e`.`NullableStringB` IS NOT NULL OR `e`.`NullableStringC` IS NOT NULL)) = IIF(`e0`.`NullableBoolA` IS NULL, `e0`.`BoolC`, `e0`.`NullableBoolA`) +"""); + } + + public override async Task Null_semantics_contains(bool async) + { + await base.Null_semantics_contains(async); + + AssertSql( + """ +@ids1='1' +@ids2='2' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IN (@ids1, @ids2) +""", + // + """ +@ids1='1' +@ids2='2' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` NOT IN (@ids1, @ids2) OR `e`.`NullableIntA` IS NULL +""", + // + """ +@ids21='1' +@ids22='2' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IN (@ids21, @ids22) OR `e`.`NullableIntA` IS NULL +""", + // + """ +@ids21='1' +@ids22='2' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` NOT IN (@ids21, @ids22) AND `e`.`NullableIntA` IS NOT NULL +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IN (1, 2) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` NOT IN (1, 2) OR `e`.`NullableIntA` IS NULL +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IN (1, 2) OR `e`.`NullableIntA` IS NULL +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` NOT IN (1, 2) AND `e`.`NullableIntA` IS NOT NULL +"""); + } + + public override async Task Null_semantics_contains_array_with_no_values(bool async) + { + await base.Null_semantics_contains_array_with_no_values(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NULL +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NULL +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL +"""); + } + + public override async Task Null_semantics_contains_non_nullable_item_with_non_nullable_subquery(bool async) + { + await base.Null_semantics_contains_non_nullable_item_with_non_nullable_subquery(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`StringA` IN ( + SELECT `e0`.`StringA` + FROM `Entities2` AS `e0` +) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`StringA` NOT IN ( + SELECT `e0`.`StringA` + FROM `Entities2` AS `e0` +) +"""); + } + + public override async Task Null_semantics_contains_nullable_item_with_non_nullable_subquery(bool async) + { + await base.Null_semantics_contains_nullable_item_with_non_nullable_subquery(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IN ( + SELECT `e0`.`StringA` + FROM `Entities2` AS `e0` +) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` NOT IN ( + SELECT `e0`.`StringA` + FROM `Entities2` AS `e0` +) OR `e`.`NullableStringA` IS NULL +"""); + } + + public override async Task Null_semantics_contains_non_nullable_item_with_nullable_subquery(bool async) + { + await base.Null_semantics_contains_non_nullable_item_with_nullable_subquery(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`StringA` IN ( + SELECT `e0`.`NullableStringA` + FROM `Entities2` AS `e0` +) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT (IIF(`e`.`StringA` IN ( + SELECT `e0`.`NullableStringA` + FROM `Entities2` AS `e0` + ) IS NULL, FALSE, `e`.`StringA` IN ( + SELECT `e0`.`NullableStringA` + FROM `Entities2` AS `e0` + ))) +"""); + } + + public override async Task Null_semantics_contains_nullable_item_with_nullable_subquery(bool async) + { + await base.Null_semantics_contains_nullable_item_with_nullable_subquery(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `Entities2` AS `e0` + WHERE `e0`.`NullableStringA` = `e`.`NullableStringB` OR (`e0`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL)) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Entities2` AS `e0` + WHERE `e0`.`NullableStringA` = `e`.`NullableStringB` OR (`e0`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL)) +"""); + } + + + #region Contains with inline collection + + public override async Task Null_semantics_contains_with_non_nullable_item_and_inline_non_nullable_values(bool async) + { + await base.Null_semantics_contains_with_non_nullable_item_and_inline_non_nullable_values(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` IN (1, 2) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` NOT IN (1, 2) +"""); + } + + #endregion Contains with inline collection + + public override async Task Null_semantics_contains_non_nullable_item_with_values(bool async) + { + await base.Null_semantics_contains_non_nullable_item_with_values(async); + + AssertSql( + """ +@ids1='1' +@ids2='2' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` IN (@ids1, @ids2) +""", + // + """ +@ids1='1' +@ids2='2' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` NOT IN (@ids1, @ids2) +""", + // + """ +@ids21='1' +@ids22='2' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` IN (@ids21, @ids22) +""", + // + """ +@ids21='1' +@ids22='2' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` NOT IN (@ids21, @ids22) +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE FALSE +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +"""); + } + + public override async Task Null_semantics_with_null_check_simple(bool async) + { + await base.Null_semantics_with_null_check_simple(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntA` = `e`.`NullableIntB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL AND (`e`.`NullableIntA` <> `e`.`NullableIntB` OR `e`.`NullableIntB` IS NULL) +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntA` = `e`.`IntC` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntB` IS NOT NULL AND `e`.`NullableIntA` = `e`.`NullableIntB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL AND `e`.`NullableIntB` IS NOT NULL AND `e`.`NullableIntA` <> `e`.`NullableIntB` +"""); + } + + public override async Task Null_semantics_with_null_check_complex(bool async) + { + await base.Null_semantics_with_null_check_complex(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL AND (`e`.`NullableIntC` <> `e`.`NullableIntA` OR `e`.`NullableIntC` IS NULL OR (`e`.`NullableIntB` IS NOT NULL AND `e`.`NullableIntA` <> `e`.`NullableIntB`)) +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL AND (`e`.`NullableIntC` <> `e`.`NullableIntA` OR `e`.`NullableIntC` IS NULL OR `e`.`NullableIntA` <> `e`.`NullableIntB` OR `e`.`NullableIntB` IS NULL) +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL) AND (`e`.`NullableIntA` = `e`.`NullableIntC` OR (`e`.`NullableIntA` IS NULL AND `e`.`NullableIntC` IS NULL)) +"""); + } + + public override async Task Null_semantics_with_null_check_complex2(bool async) + { + await base.Null_semantics_with_null_check_complex2(async); + + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL AND (`e`.`NullableBoolB` <> `e`.`NullableBoolA` OR `e`.`NullableBoolC` IS NOT NULL) AND (`e`.`NullableBoolC` <> `e`.`NullableBoolB` OR `e`.`NullableBoolC` IS NULL)) OR `e`.`NullableBoolC` <> `e`.`BoolB` OR `e`.`NullableBoolC` IS NULL +""", + // + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL AND (`e`.`NullableBoolB` <> `e`.`NullableBoolA` OR `e`.`NullableBoolC` IS NOT NULL) AND (`e`.`NullableBoolC` <> `e`.`NullableBoolB` OR `e`.`NullableBoolC` IS NULL)) OR `e`.`NullableBoolB` <> `e`.`BoolB` OR `e`.`NullableBoolB` IS NULL +"""); + } + + public override async Task IsNull_on_complex_expression(bool async) + { + await base.IsNull_on_complex_expression(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NULL OR `e`.`NullableIntB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL +"""); + } + + public override async Task Coalesce_not_equal(bool async) + { + await base.Coalesce_not_equal(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` IS NULL, 0, `e`.`NullableIntA`) <> 0 +"""); + } + + public override async Task Negated_order_comparison_on_non_nullable_arguments_gets_optimized(bool async) + { + await base.Negated_order_comparison_on_non_nullable_arguments_gets_optimized(async); + + AssertSql( + """ +@i='1' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` <= @i +""", + // + """ +@i='1' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` < @i +""", + // + """ +@i='1' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` >= @i +""", + // + """ +@i='1' + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`IntA` > @i +"""); + } + + public override async Task Negated_order_comparison_on_nullable_arguments_doesnt_get_optimized(bool async) + { + await base.Negated_order_comparison_on_nullable_arguments_doesnt_get_optimized(async); + + AssertSql( + """ +@i='1' (Nullable = true) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` > @i, FALSE, TRUE) +""", + // + """ +@i='1' (Nullable = true) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` >= @i, FALSE, TRUE) +""", + // + """ +@i='1' (Nullable = true) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` < @i, FALSE, TRUE) +""", + // + """ +@i='1' (Nullable = true) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` <= @i, FALSE, TRUE) +"""); + } + + public override async Task Nullable_column_info_propagates_inside_binary_AndAlso(bool async) + { + await base.Nullable_column_info_propagates_inside_binary_AndAlso(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringB` IS NOT NULL AND `e`.`NullableStringA` <> `e`.`NullableStringB` +"""); + } + + public override async Task Nullable_column_info_doesnt_propagate_inside_binary_OrElse(bool async) + { + await base.Nullable_column_info_doesnt_propagate_inside_binary_OrElse(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL) AND (`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL) +"""); + } + + public override async Task Nullable_column_info_propagates_inside_binary_OrElse_when_info_is_duplicated(bool async) + { + await base.Nullable_column_info_propagates_inside_binary_OrElse_when_info_is_duplicated(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((`e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringB` IS NOT NULL) OR `e`.`NullableStringA` IS NOT NULL) AND (`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringB` IS NULL) +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE ((`e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringB` IS NOT NULL) OR (`e`.`NullableStringB` IS NOT NULL AND `e`.`NullableStringA` IS NOT NULL)) AND `e`.`NullableStringA` <> `e`.`NullableStringB` +"""); + } + + public override async Task Nullable_column_info_propagates_inside_conditional(bool async) + { + await base.Nullable_column_info_propagates_inside_conditional(async); + + AssertSql( + """ +SELECT IIF(`e`.`NullableStringA` IS NOT NULL, `e`.`NullableStringA` <> `e`.`StringA`, `e`.`BoolA`) +FROM `Entities1` AS `e` +"""); + } + + public override async Task Nullable_column_info_doesnt_propagate_between_projections(bool async) + { + await base.Nullable_column_info_doesnt_propagate_between_projections(async); + + AssertSql( + """ +SELECT `e`.`NullableStringA` IS NOT NULL AS `Foo`, `e`.`NullableStringA` <> `e`.`StringA` OR `e`.`NullableStringA` IS NULL AS `Bar` +FROM `Entities1` AS `e` +"""); + } + + public override async Task Nullable_column_info_doesnt_propagate_between_different_parts_of_select(bool async) + { + await base.Nullable_column_info_doesnt_propagate_between_different_parts_of_select(async); + + AssertSql( + """ +SELECT [e].[Id] +FROM [Entities1] AS [e] +INNER JOIN [Entities1] AS [e0] ON [e].[NullableBoolA] IS NULL +WHERE ([e].[NullableBoolA] <> [e0].[NullableBoolB] OR [e].[NullableBoolA] IS NULL OR [e0].[NullableBoolB] IS NULL) AND ([e].[NullableBoolA] IS NOT NULL OR [e0].[NullableBoolB] IS NOT NULL) +"""); + } + + public override async Task Nullable_column_info_propagation_complex(bool async) + { + await base.Nullable_column_info_propagation_complex(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL AND `e`.`NullableStringC` IS NOT NULL AND (`e`.`NullableBoolB` <> `e`.`NullableBoolC` OR `e`.`NullableBoolC` IS NULL) +"""); + } + + public override async Task Empty_subquery_with_contains_returns_false(bool async) + { + await base.Empty_subquery_with_contains_returns_false(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE FALSE +"""); + } + + public override async Task Empty_subquery_with_contains_negated_returns_true(bool async) + { + await base.Empty_subquery_with_contains_negated_returns_true(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +"""); + } + + public override async Task Nullable_string_FirstOrDefault_compared_to_nullable_string_LastOrDefault(bool async) + { + await base.Nullable_string_FirstOrDefault_compared_to_nullable_string_LastOrDefault(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE MID(`e`.`NullableStringA`, 1, 1) = MID(`e`.`NullableStringB`, IIF(IIF(LEN(`e`.`NullableStringB`) = 0, 1, LEN(`e`.`NullableStringB`)) IS NULL, 0, IIF(LEN(`e`.`NullableStringB`) = 0, 1, LEN(`e`.`NullableStringB`))), 1) OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL) +"""); + } + + public override async Task Null_semantics_applied_to_CompareTo_equality(bool async) + { + await base.Null_semantics_applied_to_CompareTo_equality(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL) +""", +// +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL) +""", +// +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL) +""", +// +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL) +"""); + } + + public override async Task Nested_CompareTo_optimized(bool async) + { + await base.Nested_CompareTo_optimized(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL) +""", +// +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL) +""", +// +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL) +""", +// +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL) +"""); + } + + public override async Task False_compared_to_negated_is_null(bool async) + { + await base.False_compared_to_negated_is_null(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NULL +"""); + } + + public override async Task CaseWhen_equal_to_second_filter(bool async) + { + await base.CaseWhen_equal_to_second_filter(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`StringA` = 'Foo', 3, IIF(`e`.`StringB` = 'Foo', 2, IIF(`e`.`StringC` = 'Foo', 3, NULL))) = 2 +"""); + } + + public override async Task CaseWhen_equal_to_first_or_third_filter(bool async) + { + await base.CaseWhen_equal_to_first_or_third_filter(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`StringA` = 'Foo', 3, IIF(`e`.`StringB` = 'Foo', 2, IIF(`e`.`StringC` = 'Foo', 3, NULL))) = 3 +"""); + } + + public override async Task CaseWhen_equal_to_second_select(bool async) + { + await base.CaseWhen_equal_to_second_select(async); + + AssertSql( + """ +SELECT IIF(`e`.`StringA` = 'Foo', 3, IIF(`e`.`StringB` = 'Foo', 2, IIF(`e`.`StringC` = 'Foo', 3, NULL))) = 2 AND IIF(`e`.`StringA` = 'Foo', 3, IIF(`e`.`StringB` = 'Foo', 2, IIF(`e`.`StringC` = 'Foo', 3, NULL))) IS NOT NULL +FROM `Entities1` AS `e` +ORDER BY `e`.`Id` +"""); + } + + public override async Task CaseWhen_equal_to_first_or_third_select(bool async) + { + await base.CaseWhen_equal_to_first_or_third_select(async); + + AssertSql( + """ +SELECT IIF(`e`.`StringA` = 'Foo', 3, IIF(`e`.`StringB` = 'Foo', 2, IIF(`e`.`StringC` = 'Foo', 3, NULL))) = 3 AND IIF(`e`.`StringA` = 'Foo', 3, IIF(`e`.`StringB` = 'Foo', 2, IIF(`e`.`StringC` = 'Foo', 3, NULL))) IS NOT NULL +FROM `Entities1` AS `e` +ORDER BY `e`.`Id` +"""); + } + + public override async Task CaseOpWhen_projection(bool async) + { + await base.CaseOpWhen_projection(async); + + AssertSql( + """ +SELECT IIF(`e`.`StringA` = 'Foo' = TRUE, 3, IIF(`e`.`StringA` = 'Foo' = FALSE, 2, NULL)) +FROM `Entities1` AS `e` +ORDER BY `e`.`Id` +"""); + } + + public override async Task CaseOpWhen_predicate(bool async) + { + await base.CaseOpWhen_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`StringA` = 'Foo' = TRUE, 3, IIF(`e`.`StringA` = 'Foo' = FALSE, 2, NULL)) = 2 +"""); + } + + public override async Task Multiple_non_equality_comparisons_with_null_in_the_middle(bool async) + { + await base.Multiple_non_equality_comparisons_with_null_in_the_middle(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` NOT IN (1, 2) AND `e`.`NullableIntA` IS NOT NULL +"""); + } + + public override async Task Multiple_non_equality_comparisons_including_null_comparison_work_for_relational_null_semantics( + bool async) + { + await base.Multiple_non_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` <> 1 AND `e`.`NullableIntA` IS NOT NULL +"""); + } + + public override async Task Multiple_non_equality_comparisons_without_null_comparison_work_for_relational_null_semantics(bool async) + { + await base.Multiple_non_equality_comparisons_without_null_comparison_work_for_relational_null_semantics(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` NOT IN (1, 2) +"""); + } + + public override async Task Multiple_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(bool async) + { + await base.Multiple_equality_comparisons_including_null_comparison_work_for_relational_null_semantics(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` = 1 OR `e`.`NullableIntA` IS NULL +"""); + } + + public override async Task Bool_equal_nullable_bool_HasValue(bool async) + { + await base.Bool_equal_nullable_bool_HasValue(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` IS NOT NULL +""", + // + """ +@prm='False' + +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE @prm = (`e`.`NullableBoolA` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` = (`e`.`NullableBoolA` IS NOT NULL) +"""); + } + + public override async Task Bool_equal_nullable_bool_compared_to_null(bool async) + { + await base.Bool_equal_nullable_bool_compared_to_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` IS NULL +""", + // + """ +@prm='False' + +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE @prm = (`e`.`NullableBoolA` IS NOT NULL) +"""); + } + + public override async Task Bool_not_equal_nullable_bool_HasValue(bool async) + { + await base.Bool_not_equal_nullable_bool_HasValue(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` IS NULL +""", + // + """ +@prm='False' + +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE @prm <> (`e`.`NullableBoolA` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` <> (`e`.`NullableBoolA` IS NOT NULL) +"""); + } + + public override async Task Bool_not_equal_nullable_int_HasValue(bool async) + { + await base.Bool_not_equal_nullable_int_HasValue(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NULL +""", + // + """ +@prm='False' + +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE @prm <> (`e`.`NullableIntA` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` <> (`e`.`NullableIntA` IS NOT NULL) +"""); + } + + public override async Task Bool_not_equal_nullable_bool_compared_to_null(bool async) + { + await base.Bool_not_equal_nullable_bool_compared_to_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` IS NOT NULL +""", + // + """ +@prm='False' + +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE @prm <> (`e`.`NullableBoolA` IS NOT NULL) +"""); + } + + public override async Task Bool_logical_operation_with_nullable_bool_HasValue(bool async) + { + await base.Bool_logical_operation_with_nullable_bool_HasValue(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE FALSE +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`BoolB` OR `e`.`NullableBoolA` IS NOT NULL +"""); + } + + public override async Task Comparison_compared_to_null_check_on_bool(bool async) + { + await base.Comparison_compared_to_null_check_on_bool(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE (`e`.`IntA` = `e`.`IntB`) <> (`e`.`NullableBoolA` IS NOT NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE (`e`.`IntA` <> `e`.`IntB`) = (`e`.`NullableBoolA` IS NOT NULL) +"""); + } + + public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullability_simple(bool async) + { + await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_simple(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringA` = 'Foo' +"""); + } + + public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullability_negative(bool async) + { + await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_negative(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringA` = 'Foo' +"""); + } + + public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullability_nested(bool async) + { + await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_nested(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL OR `e`.`NullableStringA` <> `e`.`NullableStringB` +"""); + } + + public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullability_intersection(bool async) + { + await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_intersection(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE (`e`.`NullableStringA` IS NULL AND (`e`.`StringA` = 'Foo' OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL)) OR `e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringB` IS NULL +"""); + } + + public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional(bool async) + { + await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional(async); + + // issue #25977 + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableStringA` IS NULL, (`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL), (`e`.`NullableStringA` <> `e`.`NullableStringC` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringC` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringC` IS NOT NULL)) +"""); + } + + public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_multiple(bool async) + { + await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_multiple(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL, `e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), (`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL)) +"""); + } + + public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_negative(bool async) + { + await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_negative(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE IIF((`e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND `e`.`NullableBoolC` IS NULL, `e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), (`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL)) +"""); + } + + public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_with_setup(bool async) + { + await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_with_setup(async); + + // issue #25977 + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE `e`.`NullableBoolA` IS NULL OR IIF(`e`.`NullableBoolB` IS NULL, `e`.`NullableBoolB` <> `e`.`NullableBoolA` OR `e`.`NullableBoolB` IS NULL, `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolB` IS NULL) +"""); + } + + public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_nested(bool async) + { + await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_nested(async); + + // issue #25977 + AssertSql( + """ +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableBoolA` IS NULL, `e`.`BoolA` = `e`.`BoolB`, IIF(`e`.`NullableBoolC` IS NULL, (`e`.`NullableBoolA` <> `e`.`NullableBoolC` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolC` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolC` IS NOT NULL), (`e`.`NullableBoolC` <> `e`.`NullableBoolA` OR `e`.`NullableBoolC` IS NULL OR `e`.`NullableBoolA` IS NULL) AND (`e`.`NullableBoolC` IS NOT NULL OR `e`.`NullableBoolA` IS NOT NULL))) +"""); + } + + public override async Task Sum_function_is_always_considered_non_nullable(bool async) + { + await base.Sum_function_is_always_considered_non_nullable(async); + + AssertSql( + """ +SELECT `e`.`NullableIntA` AS `Key`, IIF(SUM(`e`.`IntA`) IS NULL, 0, SUM(`e`.`IntA`)) <> `e`.`NullableIntA` OR `e`.`NullableIntA` IS NULL AS `Sum` +FROM `Entities1` AS `e` +GROUP BY `e`.`NullableIntA` +"""); + } + + public override async Task Nullability_is_computed_correctly_for_chained_coalesce(bool async) + { + await base.Nullability_is_computed_correctly_for_chained_coalesce(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` IS NULL, IIF(`e`.`NullableIntB` IS NULL, `e`.`IntC`, `e`.`NullableIntB`), `e`.`NullableIntA`) <> `e`.`NullableIntC` OR `e`.`NullableIntC` IS NULL +"""); + } + + public override async Task Nullability_check_is_computed_correctly_for_chained_coalesce(bool async) + { + await base.Nullability_check_is_computed_correctly_for_chained_coalesce(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NULL AND `e`.`NullableIntB` IS NULL AND `e`.`NullableIntC` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableIntA` IS NOT NULL OR `e`.`NullableIntB` IS NOT NULL OR `e`.`NullableIntC` IS NOT NULL +"""); + } + + public override async Task Coalesce_on_self_gets_simplified(bool async) + { + await base.Coalesce_on_self_gets_simplified(async); + + AssertSql( +""" +SELECT `e`.`NullableStringA` +FROM `Entities1` AS `e` +"""); + } + + public override async Task Coalesce_deeply_nested(bool async) + { + await base.Coalesce_deeply_nested(async); + + AssertSql( +""" +SELECT IIF(`e`.`NullableIntA` IS NULL, IIF(`e`.`NullableIntB` IS NULL, IIF(`e0`.`NullableIntC` IS NULL, IIF(`e0`.`NullableIntB` IS NULL, IIF(`e`.`NullableIntC` IS NULL, `e0`.`NullableIntA`, `e`.`NullableIntC`), `e0`.`NullableIntB`), `e0`.`NullableIntC`), `e`.`NullableIntB`), `e`.`NullableIntA`) +FROM `Entities1` AS `e` +INNER JOIN `Entities2` AS `e0` ON `e`.`Id` = `e0`.`Id` +"""); + } + + public override async Task Like(bool async) + { + await base.Like(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`StringA` LIKE `e`.`StringB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`StringA` LIKE `e`.`NullableStringB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` LIKE `e`.`StringB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` LIKE `e`.`NullableStringB` +"""); + } + + public override async Task Like_negated(bool async) + { + await base.Like_negated(async); + + AssertSql( +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`StringA` NOT LIKE `e`.`StringB` +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`StringA` NOT LIKE `e`.`NullableStringB` OR `e`.`NullableStringB` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` NOT LIKE `e`.`StringB` OR `e`.`NullableStringA` IS NULL +""", +// +""" +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE `e`.`NullableStringA` NOT LIKE `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL +"""); + } + + public override async Task Like_with_escape_char(bool async) + { + await Assert.ThrowsAnyAsync( + async () => await base.Like_with_escape_char(async)); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); + + protected override NullSemanticsContext CreateContext(bool useRelationalNulls = false) + { + var options = new DbContextOptionsBuilder(Fixture.CreateOptions()); + if (useRelationalNulls) + { + new LibRedDbContextOptionsBuilder(options).UseRelationalNulls(); + } + + var context = new NullSemanticsContext(options.Options); + + context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; + + return context; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/OperatorsProceduralLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/OperatorsProceduralLibRedTest.cs new file mode 100644 index 00000000..84c77e70 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/OperatorsProceduralLibRedTest.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class OperatorsProceduralLibRedTest(NonSharedFixture fixture) : OperatorsProceduralQueryTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/OperatorsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/OperatorsQueryLibRedTest.cs new file mode 100644 index 00000000..ec8cc068 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/OperatorsQueryLibRedTest.cs @@ -0,0 +1,230 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.TestModels.Operators; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Linq; +using System.Threading.Tasks; +using System; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Xunit.Abstractions; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class OperatorsQueryLibRedTest(NonSharedFixture fixture) : OperatorsQueryTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected void AssertSql(params string[] expected) + => TestSqlLoggerFactory.AssertBaseline(expected); + + public override async Task Bitwise_and_on_expression_with_like_and_null_check_being_compared_to_false() + { + await base.Bitwise_and_on_expression_with_like_and_null_check_being_compared_to_false(); + + AssertSql( + """ +SELECT `o`.`Value` AS `Value1`, `o0`.`Value` AS `Value2`, `o1`.`Value` AS `Value3` +FROM `OperatorEntityString` AS `o`, +`OperatorEntityString` AS `o0`, +`OperatorEntityBool` AS `o1` +WHERE (((`o0`.`Value` LIKE 'B') AND `o0`.`Value` IS NOT NULL) OR `o1`.`Value`) AND `o`.`Value` IS NOT NULL +ORDER BY `o`.`Id`, `o0`.`Id`, `o1`.`Id` +"""); + } + + public override async Task Complex_predicate_with_bitwise_and_modulo_and_negation() + { + await base.Complex_predicate_with_bitwise_and_modulo_and_negation(); + + AssertSql( + """ +SELECT `o`.`Value` AS `Value0`, `o0`.`Value` AS `Value1`, `o1`.`Value` AS `Value2`, `o2`.`Value` AS `Value3` +FROM `OperatorEntityLong` AS `o`, +`OperatorEntityLong` AS `o0`, +`OperatorEntityLong` AS `o1`, +`OperatorEntityLong` AS `o2` +WHERE (((`o0`.`Value` MOD 2) / `o`.`Value`) BAND (((`o2`.`Value` BOR `o1`.`Value`) - `o`.`Value`) - (`o1`.`Value` * `o1`.`Value`))) >= (((`o0`.`Value` / (BNOT`o2`.`Value`)) MOD 2) MOD ( (BNOT`o`.`Value`) + 1)) +ORDER BY `o`.`Id`, `o0`.`Id`, `o1`.`Id`, `o2`.`Id` +"""); + } + + public override async Task Complex_predicate_with_bitwise_and_arithmetic_operations() + { + await base.Complex_predicate_with_bitwise_and_arithmetic_operations(); + + AssertSql( + """ +SELECT `o`.`Value` AS `Value0`, `o0`.`Value` AS `Value1`, `o1`.`Value` AS `Value2` +FROM `OperatorEntityInt` AS `o`, +`OperatorEntityInt` AS `o0`, +`OperatorEntityBool` AS `o1` +WHERE (((`o0`.`Value` BAND (`o`.`Value` + `o`.`Value`)) BAND `o`.`Value`) \ 1) > (`o0`.`Value` BAND 10) AND `o1`.`Value` +ORDER BY `o`.`Id`, `o0`.`Id`, `o1`.`Id` +"""); + } + + public override async Task Projection_with_not_and_negation_on_integer() + { + await base.Projection_with_not_and_negation_on_integer(); + + AssertSql( + """ +SELECT (BNOT-(-((`o1`.`Value` + `o`.`Value`) + 2))) MOD (-(`o0`.`Value` + `o0`.`Value`) - `o`.`Value`) +FROM `OperatorEntityLong` AS `o`, +`OperatorEntityLong` AS `o0`, +`OperatorEntityLong` AS `o1` +ORDER BY `o`.`Id`, `o0`.`Id`, `o1`.`Id` +"""); + } + + public override async Task Negate_on_column(bool async) + { + await base.Negate_on_column(async); + + AssertSql( +""" +SELECT `o`.`Id` +FROM `OperatorEntityInt` AS `o` +WHERE `o`.`Id` = -`o`.`Value` +"""); + } + + public override async Task Double_negate_on_column() + { + await base.Double_negate_on_column(); + + AssertSql( +""" +SELECT `o`.`Id` +FROM `OperatorEntityInt` AS `o` +WHERE -(-`o`.`Value`) = `o`.`Value` +"""); + } + + public override async Task Negate_on_binary_expression(bool async) + { + await base.Negate_on_binary_expression(async); + + AssertSql( +""" +SELECT `o`.`Id` AS `Id1`, `o0`.`Id` AS `Id2` +FROM `OperatorEntityInt` AS `o`, +`OperatorEntityInt` AS `o0` +WHERE -`o`.`Value` = -(`o`.`Id` + `o0`.`Value`) +"""); + } + + public override async Task Negate_on_like_expression(bool async) + { + await base.Negate_on_like_expression(async); + + AssertSql( +""" +SELECT `o`.`Id` +FROM `OperatorEntityString` AS `o` +WHERE `o`.`Value` NOT LIKE 'A%' OR `o`.`Value` IS NULL +"""); + } + + /*[ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Where_AtTimeZone_datetimeoffset_constant(bool async) + { + var contextFactory = await InitializeAsync(seed: Seed); + using var context = contextFactory.CreateContext(); + + var expected = (from e in ExpectedData.OperatorEntitiesDateTimeOffset + where e.Value.UtcDateTime == new DateTimeOffset(2000, 1, 1, 18, 0, 0, TimeSpan.Zero) + select e.Id).ToList(); + + var actual = (from e in context.Set() + where EF.Functions.AtTimeZone(e.Value, "UTC") == new DateTimeOffset(2000, 1, 1, 18, 0, 0, TimeSpan.Zero) + select e.Id).ToList(); + + Assert.Equal(expected.Count, actual.Count); + for (var i = 0; i < expected.Count; i++) + { + Assert.Equal(expected[i], actual[i]); + } + + AssertSql( +""" +SELECT [o].[Id] +FROM [OperatorEntityDateTimeOffset] AS [o] +WHERE [o].[Value] AT TIME ZONE 'UTC' = '2000-01-01T18:00:00.0000000+00:00' +"""); + }*/ + + /*[ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Where_AtTimeZone_datetimeoffset_parameter(bool async) + { + var contextFactory = await InitializeAsync(seed: Seed); + using var context = contextFactory.CreateContext(); + + var dateTime = new DateTimeOffset(2000, 1, 1, 18, 0, 0, TimeSpan.Zero); + var timeZone = "UTC"; + + var expected = (from e in ExpectedData.OperatorEntitiesDateTimeOffset + where e.Value.UtcDateTime == dateTime + select e.Id).ToList(); + + var actual = (from e in context.Set() + where EF.Functions.AtTimeZone(e.Value, timeZone) == dateTime + select e.Id).ToList(); + + Assert.Equal(expected.Count, actual.Count); + for (var i = 0; i < expected.Count; i++) + { + Assert.Equal(expected[i], actual[i]); + } + + AssertSql( +""" +@__timeZone_1='UTC' (Size = 8000) (DbType = AnsiString) +@__dateTime_2='2000-01-01T18:00:00.0000000+00:00' + +SELECT [o].[Id] +FROM [OperatorEntityDateTimeOffset] AS [o] +WHERE [o].[Value] AT TIME ZONE @__timeZone_1 = @__dateTime_2 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Where_AtTimeZone_datetimeoffset_column(bool async) + { + var contextFactory = await InitializeAsync(seed: Seed); + using var context = contextFactory.CreateContext(); + + var expected = (from e1 in ExpectedData.OperatorEntitiesDateTimeOffset + from e2 in ExpectedData.OperatorEntitiesDateTimeOffset + where e1.Value == e2.Value.UtcDateTime + select new { Id1 = e1.Id, Id2 = e2.Id }).ToList(); + + var actual = (from e1 in context.Set() + from e2 in context.Set() + where EF.Functions.AtTimeZone(e1.Value, "UTC") == e2.Value + select new { Id1 = e1.Id, Id2 = e2.Id }).ToList(); + + Assert.Equal(expected.Count, actual.Count); + for (var i = 0; i < expected.Count; i++) + { + Assert.Equal(expected[i].Id1, actual[i].Id1); + Assert.Equal(expected[i].Id2, actual[i].Id2); + } + + AssertSql( +""" +SELECT [o].[Id] AS [Id1], [o0].[Id] AS [Id2] +FROM [OperatorEntityDateTimeOffset] AS [o] +CROSS JOIN [OperatorEntityDateTimeOffset] AS [o0] +WHERE [o].[Value] AT TIME ZONE 'UTC' = [o0].[Value] +"""); + }*/ +} \ No newline at end of file diff --git a/test/EFCore.LibRed.FunctionalTests/Query/OptionalDependentQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/OptionalDependentQueryLibRedFixture.cs new file mode 100644 index 00000000..efcea80a --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/OptionalDependentQueryLibRedFixture.cs @@ -0,0 +1,16 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +#nullable disable + +public class OptionalDependentQueryLibRedFixture : OptionalDependentQueryFixtureBase +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/OptionalDependentQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/OptionalDependentQueryLibRedTest.cs new file mode 100644 index 00000000..72f91ce9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/OptionalDependentQueryLibRedTest.cs @@ -0,0 +1,140 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +#nullable disable + +public class OptionalDependentQueryLibRedTest : OptionalDependentQueryTestBase +{ + public OptionalDependentQueryLibRedTest(OptionalDependentQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + public override async Task Basic_projection_entity_with_all_optional(bool async) + { + await base.Basic_projection_entity_with_all_optional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesAllOptional` AS `e` +"""); + } + + public override async Task Basic_projection_entity_with_some_required(bool async) + { + await base.Basic_projection_entity_with_some_required(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesSomeRequired` AS `e` +"""); + } + + public override async Task Filter_optional_dependent_with_all_optional_compared_to_null(bool async) + { + await base.Filter_optional_dependent_with_all_optional_compared_to_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesAllOptional` AS `e` +WHERE (`e`.`Json`) IS NULL +"""); + } + + public override async Task Filter_optional_dependent_with_all_optional_compared_to_not_null(bool async) + { + await base.Filter_optional_dependent_with_all_optional_compared_to_not_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesAllOptional` AS `e` +WHERE (`e`.`Json`) IS NOT NULL +"""); + } + + public override async Task Filter_optional_dependent_with_some_required_compared_to_null(bool async) + { + await base.Filter_optional_dependent_with_some_required_compared_to_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesSomeRequired` AS `e` +WHERE (`e`.`Json`) IS NULL +"""); + } + + public override async Task Filter_optional_dependent_with_some_required_compared_to_not_null(bool async) + { + await base.Filter_optional_dependent_with_some_required_compared_to_not_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesSomeRequired` AS `e` +WHERE (`e`.`Json`) IS NOT NULL +"""); + } + + public override async Task Filter_nested_optional_dependent_with_all_optional_compared_to_null(bool async) + { + await base.Filter_nested_optional_dependent_with_all_optional_compared_to_null(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Json] +FROM [EntitiesAllOptional] AS [e] +WHERE JSON_QUERY([e].[Json], '$.OpNav1') IS NULL +"""); + } + + public override async Task Filter_nested_optional_dependent_with_all_optional_compared_to_not_null(bool async) + { + await base.Filter_nested_optional_dependent_with_all_optional_compared_to_not_null(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Json] +FROM [EntitiesAllOptional] AS [e] +WHERE JSON_QUERY([e].[Json], '$.OpNav2') IS NOT NULL +"""); + } + + public override async Task Filter_nested_optional_dependent_with_some_required_compared_to_null(bool async) + { + await base.Filter_nested_optional_dependent_with_some_required_compared_to_null(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Json] +FROM [EntitiesSomeRequired] AS [e] +WHERE JSON_QUERY([e].[Json], '$.ReqNav1') IS NULL +"""); + } + + public override async Task Filter_nested_optional_dependent_with_some_required_compared_to_not_null(bool async) + { + await base.Filter_nested_optional_dependent_with_some_required_compared_to_not_null(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Json] +FROM [EntitiesSomeRequired] AS [e] +WHERE JSON_QUERY([e].[Json], '$.ReqNav2') IS NOT NULL +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/OwnedEntityQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/OwnedEntityQueryLibRedTest.cs new file mode 100644 index 00000000..782db403 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/OwnedEntityQueryLibRedTest.cs @@ -0,0 +1,231 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class OwnedEntityQueryLibRedTest(NonSharedFixture fixture) : OwnedEntityQueryRelationalTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override async Task Multiple_single_result_in_projection_containing_owned_types(bool async) + { + await base.Multiple_single_result_in_projection_containing_owned_types(async); + + AssertSql( +""" +SELECT [e].[Id], [t0].[Id], [t0].[Entity20277Id], [t0].[Owned_IsDeleted], [t0].[Owned_Value], [t0].[Type], [t0].[c], [t1].[Id], [t1].[Entity20277Id], [t1].[Owned_IsDeleted], [t1].[Owned_Value], [t1].[Type], [t1].[c] +FROM [Entities] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[Entity20277Id], [t].[Owned_IsDeleted], [t].[Owned_Value], [t].[Type], [t].[c] + FROM ( + SELECT [c].[Id], [c].[Entity20277Id], [c].[Owned_IsDeleted], [c].[Owned_Value], [c].[Type], 1 AS [c], ROW_NUMBER() OVER(PARTITION BY [c].[Entity20277Id] ORDER BY [c].[Entity20277Id], [c].[Id]) AS [row] + FROM [Child20277] AS [c] + WHERE [c].[Type] = 1 + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[Entity20277Id] +LEFT JOIN ( + SELECT [t2].[Id], [t2].[Entity20277Id], [t2].[Owned_IsDeleted], [t2].[Owned_Value], [t2].[Type], [t2].[c] + FROM ( + SELECT [c0].[Id], [c0].[Entity20277Id], [c0].[Owned_IsDeleted], [c0].[Owned_Value], [c0].[Type], 1 AS [c], ROW_NUMBER() OVER(PARTITION BY [c0].[Entity20277Id] ORDER BY [c0].[Entity20277Id], [c0].[Id]) AS [row] + FROM [Child20277] AS [c0] + WHERE [c0].[Type] = 2 + ) AS [t2] + WHERE [t2].[row] <= 1 +) AS [t1] ON [e].[Id] = [t1].[Entity20277Id] +"""); + } + + public override async Task Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(bool async) + { + await base.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async); + + AssertSql( + """ +SELECT TOP 2 `r`.`Id`, `m`.`Id`, `m`.`Enabled`, `m`.`RootId`, `m0`.`Id`, `m0`.`RootId` +FROM (`Root` AS `r` +LEFT JOIN `MiddleB` AS `m` ON `r`.`Id` = `m`.`RootId`) +LEFT JOIN `ModdleA` AS `m0` ON `r`.`Id` = `m0`.`RootId` +WHERE `r`.`Id` = 3 +ORDER BY `r`.`Id`, `m`.`Id`, `m0`.`Id` +""", + // + """ +SELECT `l0`.`ModdleAId`, `l0`.`UnitThreshold`, `s`.`Id`, `s`.`Id0`, `s`.`Id1` +FROM ( + SELECT TOP 1 `r`.`Id`, `m`.`Id` AS `Id0`, `m0`.`Id` AS `Id1` + FROM (`Root` AS `r` + LEFT JOIN `MiddleB` AS `m` ON `r`.`Id` = `m`.`RootId`) + LEFT JOIN `ModdleA` AS `m0` ON `r`.`Id` = `m0`.`RootId` + WHERE `r`.`Id` = 3 + ORDER BY `r`.`Id`, `m`.`Id`, `m0`.`Id` +) AS `s` +INNER JOIN `Leaf` AS `l0` ON `s`.`Id1` = `l0`.`ModdleAId` +ORDER BY `s`.`Id`, `s`.`Id0`, `s`.`Id1` +"""); + } + + public override async Task Projecting_owned_collection_and_aggregate(bool async) + { + await base.Projecting_owned_collection_and_aggregate(async); + + AssertSql( + """ +SELECT `b`.`Id`, ( + SELECT IIF(SUM(`p`.`CommentsCount`) IS NULL, 0, SUM(`p`.`CommentsCount`)) + FROM `Post` AS `p` + WHERE `b`.`Id` = `p`.`BlogId`), `p0`.`Title`, `p0`.`CommentsCount`, `p0`.`BlogId`, `p0`.`Id` +FROM `Blog` AS `b` +LEFT JOIN `Post` AS `p0` ON `b`.`Id` = `p0`.`BlogId` +ORDER BY `b`.`Id`, `p0`.`BlogId` +"""); + } + + public override async Task Projecting_correlated_collection_property_for_owned_entity(bool async) + { + await base.Projecting_correlated_collection_property_for_owned_entity(async); + + AssertSql( + """ +SELECT `w`.`WarehouseCode`, `w`.`Id`, `w0`.`CountryCode`, `w0`.`WarehouseCode`, `w0`.`Id` +FROM `Warehouses` AS `w` +LEFT JOIN `WarehouseDestinationCountry` AS `w0` ON `w`.`WarehouseCode` = `w0`.`WarehouseCode` +ORDER BY `w`.`Id`, `w0`.`WarehouseCode` +"""); + } + + public override async Task Owned_collection_basic_split_query(bool async) + { + await base.Owned_collection_basic_split_query(async); + + AssertSql( + """ +@id='6c1ae3e5-30b9-4c77-8d98-f02075974a0a' + +SELECT TOP 1 `l`.`Id` +FROM `Location25680` AS `l` +WHERE `l`.`Id` = @id +ORDER BY `l`.`Id` +"""); + } + + public override async Task Owned_reference_mapped_to_different_table_updated_correctly_after_subquery_pushdown(bool async) + { + await base.Owned_reference_mapped_to_different_table_updated_correctly_after_subquery_pushdown(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `c`.`Id`, `c`.`Name`, `c0`.`CompanyId`, `c0`.`AdditionalCustomerData`, `c0`.`Id`, `s`.`CompanyId`, `s`.`AdditionalSupplierData`, `s`.`Id` +FROM (`Companies` AS `c` +LEFT JOIN `CustomerData` AS `c0` ON `c`.`Id` = `c0`.`CompanyId`) +LEFT JOIN `SupplierData` AS `s` ON `c`.`Id` = `s`.`CompanyId` +WHERE `c0`.`CompanyId` IS NOT NULL +ORDER BY `c`.`Id` +"""); + } + + public override async Task Owned_reference_mapped_to_different_table_nested_updated_correctly_after_subquery_pushdown(bool async) + { + await base.Owned_reference_mapped_to_different_table_nested_updated_correctly_after_subquery_pushdown(async); + + AssertSql( + """ +@p='10' + +SELECT TOP @p `o`.`Id`, `o`.`Name`, `i`.`OwnerId`, `i`.`Id`, `i`.`Name`, `i0`.`IntermediateOwnedEntityOwnerId`, `i0`.`AdditionalCustomerData`, `i0`.`Id`, `i1`.`IntermediateOwnedEntityOwnerId`, `i1`.`AdditionalSupplierData`, `i1`.`Id` +FROM ((`Owners` AS `o` +LEFT JOIN `IntermediateOwnedEntity` AS `i` ON `o`.`Id` = `i`.`OwnerId`) +LEFT JOIN `IM_CustomerData` AS `i0` ON `i`.`OwnerId` = `i0`.`IntermediateOwnedEntityOwnerId`) +LEFT JOIN `IM_SupplierData` AS `i1` ON `i`.`OwnerId` = `i1`.`IntermediateOwnedEntityOwnerId` +WHERE `i0`.`IntermediateOwnedEntityOwnerId` IS NOT NULL +ORDER BY `o`.`Id` +"""); + } + + public override async Task Owned_entity_with_all_null_properties_materializes_when_not_containing_another_owned_entity(bool async) + { + await base.Owned_entity_with_all_null_properties_materializes_when_not_containing_another_owned_entity(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Buyer`, `r`.`Rot_ApartmentNo`, `r`.`Rot_ServiceType`, `r`.`Rut_Value` +FROM `RotRutCases` AS `r` +ORDER BY `r`.`Buyer` +"""); + } + + public override async Task Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(bool async) + { + await base.Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Rot_ApartmentNo`, `r`.`Rot_ServiceType` +FROM `RotRutCases` AS `r` +WHERE `r`.`Rot_ApartmentNo` IS NOT NULL OR `r`.`Rot_ServiceType` IS NOT NULL +"""); + } + + public override async Task Owned_entity_with_all_null_properties_in_compared_to_null_in_conditional_projection(bool async) + { + await base.Owned_entity_with_all_null_properties_in_compared_to_null_in_conditional_projection(async); + + AssertSql( + """ +SELECT `r`.`Rot_ApartmentNo` IS NULL AND `r`.`Rot_ServiceType` IS NULL, `r`.`Rot_ApartmentNo`, `r`.`Rot_ServiceType` +FROM `RotRutCases` AS `r` +ORDER BY `r`.`Id` +"""); + } + + public override async Task Owned_entity_with_all_null_properties_in_compared_to_non_null_in_conditional_projection(bool async) + { + await base.Owned_entity_with_all_null_properties_in_compared_to_non_null_in_conditional_projection(async); + + AssertSql( + """ +SELECT `r`.`Rot_ApartmentNo` IS NOT NULL OR `r`.`Rot_ServiceType` IS NOT NULL, `r`.`Rot_ApartmentNo`, `r`.`Rot_ServiceType` +FROM `RotRutCases` AS `r` +ORDER BY `r`.`Id` +"""); + } + + public override async Task Owned_entity_with_all_null_properties_property_access_when_not_containing_another_owned_entity(bool async) + { + await base.Owned_entity_with_all_null_properties_property_access_when_not_containing_another_owned_entity(async); + + AssertSql( +""" +SELECT `r`.`Rot_ApartmentNo` +FROM `RotRutCases` AS `r` +"""); + } + + public override async Task Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(bool async) + { + await base.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`Name`, `m`.`RulerOf`, `m1`.`Id`, `m1`.`Affiliation`, `m1`.`Name`, `m1`.`MagusId`, `m1`.`Name0` +FROM `Monarchs` AS `m` +INNER JOIN ( + SELECT `m0`.`Id`, `m0`.`Affiliation`, `m0`.`Name`, `m2`.`MagusId`, `m2`.`Name` AS `Name0` + FROM `Magi` AS `m0` + LEFT JOIN `MagicTools` AS `m2` ON `m0`.`Id` = `m2`.`MagusId` + WHERE `m0`.`Name` LIKE '%Bayaz%' +) AS `m1` ON `m`.`RulerOf` = `m1`.`Affiliation` +"""); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/OwnedQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/OwnedQueryLibRedTest.cs new file mode 100644 index 00000000..65c4c136 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/OwnedQueryLibRedTest.cs @@ -0,0 +1,515 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class OwnedQueryLibRedTest : OwnedQueryRelationalTestBase + { + public OwnedQueryLibRedTest(OwnedQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Query_with_owned_entity_equality_operator(bool isAsync) + { + await base.Query_with_owned_entity_equality_operator(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `o1`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +FROM (`OwnedPerson` AS `o` +LEFT JOIN ( + SELECT `o2`.`ClientId`, `o2`.`Id`, `o2`.`OrderDate`, `o3`.`OrderClientId`, `o3`.`OrderId`, `o3`.`Id` AS `Id0`, `o3`.`Detail` + FROM `Order` AS `o2` + LEFT JOIN `OrderDetail` AS `o3` ON `o2`.`ClientId` = `o3`.`OrderClientId` AND `o2`.`Id` = `o3`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId`), +( + SELECT `o0`.`Id` + FROM `OwnedPerson` AS `o0` + WHERE `o0`.`Discriminator` = 'LeafB' +) AS `o1` +WHERE FALSE +ORDER BY `o`.`Id`, `o1`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Query_for_base_type_loads_all_owned_navs(bool isAsync) + { + await base.Query_for_base_type_loads_all_owned_navs(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +FROM `OwnedPerson` AS `o` +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task No_ignored_include_warning_when_implicit_load(bool isAsync) + { + await base.No_ignored_include_warning_when_implicit_load(isAsync); + + AssertSql( + """ + SELECT COUNT(*) + FROM `OwnedPerson` AS `o` + """); + } + + public override async Task Query_for_branch_type_loads_all_owned_navs(bool isAsync) + { + await base.Query_for_branch_type_loads_all_owned_navs(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +FROM `OwnedPerson` AS `o` +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +WHERE `o`.`Discriminator` IN ('Branch', 'LeafA') +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Query_for_branch_type_loads_all_owned_navs_tracking(bool isAsync) + { + await base.Query_for_branch_type_loads_all_owned_navs_tracking(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +FROM `OwnedPerson` AS `o` +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +WHERE `o`.`Discriminator` IN ('Branch', 'LeafA') +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Query_for_leaf_type_loads_all_owned_navs(bool isAsync) + { + await base.Query_for_leaf_type_loads_all_owned_navs(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +FROM `OwnedPerson` AS `o` +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +WHERE `o`.`Discriminator` = 'LeafA' +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Query_when_subquery(bool isAsync) + { + await base.Query_when_subquery(isAsync); + + AssertSql( + """ +@p='5' + +SELECT `o3`.`Id`, `o3`.`Discriminator`, `o3`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o3`.`PersonAddress_AddressLine`, `o3`.`PersonAddress_PlaceType`, `o3`.`PersonAddress_ZipCode`, `o3`.`PersonAddress_Country_Name`, `o3`.`PersonAddress_Country_PlanetId`, `o3`.`BranchAddress_BranchName`, `o3`.`BranchAddress_PlaceType`, `o3`.`BranchAddress_Country_Name`, `o3`.`BranchAddress_Country_PlanetId`, `o3`.`LeafBAddress_LeafBType`, `o3`.`LeafBAddress_PlaceType`, `o3`.`LeafBAddress_Country_Name`, `o3`.`LeafBAddress_Country_PlanetId`, `o3`.`LeafAAddress_LeafType`, `o3`.`LeafAAddress_PlaceType`, `o3`.`LeafAAddress_Country_Name`, `o3`.`LeafAAddress_Country_PlanetId` +FROM ( + SELECT TOP @p `o0`.`Id`, `o0`.`Discriminator`, `o0`.`Name`, `o0`.`PersonAddress_AddressLine`, `o0`.`PersonAddress_PlaceType`, `o0`.`PersonAddress_ZipCode`, `o0`.`PersonAddress_Country_Name`, `o0`.`PersonAddress_Country_PlanetId`, `o0`.`BranchAddress_BranchName`, `o0`.`BranchAddress_PlaceType`, `o0`.`BranchAddress_Country_Name`, `o0`.`BranchAddress_Country_PlanetId`, `o0`.`LeafBAddress_LeafBType`, `o0`.`LeafBAddress_PlaceType`, `o0`.`LeafBAddress_Country_Name`, `o0`.`LeafBAddress_Country_PlanetId`, `o0`.`LeafAAddress_LeafType`, `o0`.`LeafAAddress_PlaceType`, `o0`.`LeafAAddress_Country_Name`, `o0`.`LeafAAddress_Country_PlanetId` + FROM ( + SELECT DISTINCT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` + FROM `OwnedPerson` AS `o` + ) AS `o0` + ORDER BY `o0`.`Id` +) AS `o3` +LEFT JOIN ( + SELECT `o1`.`ClientId`, `o1`.`Id`, `o1`.`OrderDate`, `o2`.`OrderClientId`, `o2`.`OrderId`, `o2`.`Id` AS `Id0`, `o2`.`Detail` + FROM `Order` AS `o1` + LEFT JOIN `OrderDetail` AS `o2` ON `o1`.`ClientId` = `o2`.`OrderClientId` AND `o1`.`Id` = `o2`.`OrderId` +) AS `s` ON `o3`.`Id` = `s`.`ClientId` +ORDER BY `o3`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Navigation_rewrite_on_owned_reference_projecting_scalar(bool isAsync) + { + await base.Navigation_rewrite_on_owned_reference_projecting_scalar(isAsync); + + AssertSql( + """ + SELECT `o`.`PersonAddress_Country_Name` + FROM `OwnedPerson` AS `o` + WHERE `o`.`PersonAddress_Country_Name` = 'USA' + """); + } + + public override async Task Navigation_rewrite_on_owned_reference_projecting_entity(bool isAsync) + { + await base.Navigation_rewrite_on_owned_reference_projecting_entity(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +FROM `OwnedPerson` AS `o` +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +WHERE `o`.`PersonAddress_Country_Name` = 'USA' +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Navigation_rewrite_on_owned_collection(bool isAsync) + { + await base.Navigation_rewrite_on_owned_collection(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail` +FROM `OwnedPerson` AS `o` +LEFT JOIN ( + SELECT `o1`.`ClientId`, `o1`.`Id`, `o1`.`OrderDate`, `o2`.`OrderClientId`, `o2`.`OrderId`, `o2`.`Id` AS `Id0`, `o2`.`Detail` + FROM `Order` AS `o1` + LEFT JOIN `OrderDetail` AS `o2` ON `o1`.`ClientId` = `o2`.`OrderClientId` AND `o1`.`Id` = `o2`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +WHERE EXISTS ( + SELECT 1 + FROM `Order` AS `o0` + WHERE `o`.`Id` = `o0`.`ClientId`) +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Navigation_rewrite_on_owned_collection_with_composition(bool isAsync) + { + await base.Navigation_rewrite_on_owned_collection_with_composition(isAsync); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `o0`.`Id` <> 42 + FROM `Order` AS `o0` + WHERE `o`.`Id` = `o0`.`ClientId` + ORDER BY `o0`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `o0`.`Id` <> 42 + FROM `Order` AS `o0` + WHERE `o`.`Id` = `o0`.`ClientId` + ORDER BY `o0`.`Id`)) +FROM `OwnedPerson` AS `o` +ORDER BY `o`.`Id` +"""); + } + + public override async Task Navigation_rewrite_on_owned_collection_with_composition_complex(bool isAsync) + { + await base.Navigation_rewrite_on_owned_collection_with_composition_complex(isAsync); + + AssertSql( + """ + SELECT ( + SELECT TOP 1 `o1`.`PersonAddress_Country_Name` + FROM `Order` AS `o0` + LEFT JOIN `OwnedPerson` AS `o1` ON `o0`.`ClientId` = `o1`.`Id` + WHERE `o`.`Id` = `o0`.`ClientId` + ORDER BY `o0`.`Id`) + FROM `OwnedPerson` AS `o` + """); + } + + public override async Task SelectMany_on_owned_collection(bool isAsync) + { + await base.SelectMany_on_owned_collection(isAsync); + + AssertSql( + """ + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o`.`Id`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id`, `o1`.`Detail` + FROM (`OwnedPerson` AS `o` + INNER JOIN `Order` AS `o0` ON `o`.`Id` = `o0`.`ClientId`) + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` + ORDER BY `o`.`Id`, `o0`.`ClientId`, `o0`.`Id`, `o1`.`OrderClientId`, `o1`.`OrderId` + """); + } + + public override async Task Navigation_rewrite_on_owned_reference_followed_by_regular_entity(bool isAsync) + { + await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity(isAsync); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Name`, `p`.`StarId` +FROM `OwnedPerson` AS `o` +LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id` +"""); + } + + public override async Task Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(bool isAsync) + { + await base.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail` +FROM (`OwnedPerson` AS `o` +LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +WHERE `p`.`Id` <> 42 OR `p`.`Id` IS NULL +ORDER BY `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Project_multiple_owned_navigations(bool isAsync) + { + await base.Project_multiple_owned_navigations(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `p`.`Name`, `p`.`StarId` +FROM (`OwnedPerson` AS `o` +LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +ORDER BY `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Project_multiple_owned_navigations_with_expansion_on_owned_collections(bool isAsync) + { + await base.Project_multiple_owned_navigations_with_expansion_on_owned_collections(isAsync); + + AssertSql( +""" +SELECT ( + SELECT COUNT(*) + FROM ((`Order` AS `o0` + LEFT JOIN `OwnedPerson` AS `o1` ON `o0`.`ClientId` = `o1`.`Id`) + LEFT JOIN `Planet` AS `p0` ON `o1`.`PersonAddress_Country_PlanetId` = `p0`.`Id`) + LEFT JOIN `Star` AS `s` ON `p0`.`StarId` = `s`.`Id` + WHERE `o`.`Id` = `o0`.`ClientId` AND (`s`.`Id` <> 42 OR `s`.`Id` IS NULL)) AS `Count`, `p`.`Id`, `p`.`Name`, `p`.`StarId` +FROM `OwnedPerson` AS `o` +LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id` +ORDER BY `o`.`Id` +"""); + } + + public override async Task Navigation_rewrite_on_owned_reference_followed_by_regular_entity_filter(bool isAsync) + { + await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_filter(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +FROM (`OwnedPerson` AS `o` +LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +WHERE `p`.`Id` <> 7 OR `p`.`Id` IS NULL +ORDER BY `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_property(bool isAsync) + { + await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_property(isAsync); + + AssertSql( + """ + SELECT `p`.`Id` + FROM `OwnedPerson` AS `o` + LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id` + """); + } + + public override async Task Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection(bool isAsync) + { + await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_collection(isAsync); + + AssertSql( + """ + SELECT `o`.`Id`, `p`.`Id`, `m`.`Id`, `m`.`Diameter`, `m`.`PlanetId` + FROM (`OwnedPerson` AS `o` + LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) + LEFT JOIN `Moon` AS `m` ON `p`.`Id` = `m`.`PlanetId` + ORDER BY `o`.`Id`, `p`.`Id` + """); + } + + public override async Task SelectMany_on_owned_reference_followed_by_regular_entity_and_collection(bool isAsync) + { + await base.SelectMany_on_owned_reference_followed_by_regular_entity_and_collection(isAsync); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`Diameter`, `m`.`PlanetId` +FROM (`OwnedPerson` AS `o` +LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) +LEFT JOIN `Moon` AS `m` ON `p`.`Id` = `m`.`PlanetId` +WHERE `p`.`Id` IS NOT NULL AND `m`.`PlanetId` IS NOT NULL +"""); + } + + public override async Task SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(bool isAsync) + { + await base.SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(isAsync); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`StarId` +FROM ((`OwnedPerson` AS `o` +LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) +LEFT JOIN `Star` AS `s` ON `p`.`StarId` = `s`.`Id`) +LEFT JOIN `Element` AS `e` ON `s`.`Id` = `e`.`StarId` +WHERE `s`.`Id` IS NOT NULL AND `e`.`StarId` IS NOT NULL +"""); + } + + public override async Task Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference(bool isAsync) + { + await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference(isAsync); + + AssertSql( + """ + SELECT `s`.`Id`, `s`.`Name`, `o`.`Id`, `p`.`Id`, `e`.`Id`, `e`.`Name`, `e`.`StarId` + FROM ((`OwnedPerson` AS `o` + LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) + LEFT JOIN `Star` AS `s` ON `p`.`StarId` = `s`.`Id`) + LEFT JOIN `Element` AS `e` ON `s`.`Id` = `e`.`StarId` + ORDER BY `o`.`Id`, `p`.`Id`, `s`.`Id` + """); + } + + public override async Task Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_and_scalar( + bool isAsync) + { + await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_and_scalar(isAsync); + + AssertSql( + """ + SELECT `s`.`Name` + FROM (`OwnedPerson` AS `o` + LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) + LEFT JOIN `Star` AS `s` ON `p`.`StarId` = `s`.`Id` + """); + } + + public override async Task + Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_in_predicate_and_projection(bool isAsync) + { + await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_another_reference_in_predicate_and_projection( + isAsync); + + AssertSql( + """ + SELECT `s`.`Id`, `s`.`Name`, `o`.`Id`, `p`.`Id`, `e`.`Id`, `e`.`Name`, `e`.`StarId` + FROM ((`OwnedPerson` AS `o` + LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) + LEFT JOIN `Star` AS `s` ON `p`.`StarId` = `s`.`Id`) + LEFT JOIN `Element` AS `e` ON `s`.`Id` = `e`.`StarId` + WHERE `s`.`Name` = 'Sol' + ORDER BY `o`.`Id`, `p`.`Id`, `s`.`Id` + """); + } + + public override async Task Query_with_OfType_eagerly_loads_correct_owned_navigations(bool isAsync) + { + await base.Query_with_OfType_eagerly_loads_correct_owned_navigations(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +FROM `OwnedPerson` AS `o` +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +WHERE `o`.`Discriminator` = 'LeafA' +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Preserve_includes_when_applying_skip_take_after_anonymous_type_select(bool isAsync) + { + await base.Preserve_includes_when_applying_skip_take_after_anonymous_type_select(isAsync); + + AssertSql( + """ +@p1='100' +@p='0' + +SELECT `o4`.`Id`, `o4`.`Discriminator`, `o4`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o4`.`PersonAddress_AddressLine`, `o4`.`PersonAddress_PlaceType`, `o4`.`PersonAddress_ZipCode`, `o4`.`PersonAddress_Country_Name`, `o4`.`PersonAddress_Country_PlanetId`, `o4`.`BranchAddress_BranchName`, `o4`.`BranchAddress_PlaceType`, `o4`.`BranchAddress_Country_Name`, `o4`.`BranchAddress_Country_PlanetId`, `o4`.`LeafBAddress_LeafBType`, `o4`.`LeafBAddress_PlaceType`, `o4`.`LeafBAddress_Country_Name`, `o4`.`LeafBAddress_Country_PlanetId`, `o4`.`LeafAAddress_LeafType`, `o4`.`LeafAAddress_PlaceType`, `o4`.`LeafAAddress_Country_Name`, `o4`.`LeafAAddress_Country_PlanetId`, `o4`.`c` +FROM ( + SELECT TOP @p1 `o3`.`Id`, `o3`.`Discriminator`, `o3`.`Name`, `o3`.`PersonAddress_AddressLine`, `o3`.`PersonAddress_PlaceType`, `o3`.`PersonAddress_ZipCode`, `o3`.`PersonAddress_Country_Name`, `o3`.`PersonAddress_Country_PlanetId`, `o3`.`BranchAddress_BranchName`, `o3`.`BranchAddress_PlaceType`, `o3`.`BranchAddress_Country_Name`, `o3`.`BranchAddress_Country_PlanetId`, `o3`.`LeafBAddress_LeafBType`, `o3`.`LeafBAddress_PlaceType`, `o3`.`LeafBAddress_Country_Name`, `o3`.`LeafBAddress_Country_PlanetId`, `o3`.`LeafAAddress_LeafType`, `o3`.`LeafAAddress_PlaceType`, `o3`.`LeafAAddress_Country_Name`, `o3`.`LeafAAddress_Country_PlanetId`, `o3`.`c` + FROM ( + SELECT TOP @p + @p1 `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId`, ( + SELECT COUNT(*) + FROM `OwnedPerson` AS `o2`) AS `c` + FROM `OwnedPerson` AS `o` + ORDER BY `o`.`Id` + ) AS `o3` + ORDER BY `o3`.`Id` DESC +) AS `o4` +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o4`.`Id` = `s`.`ClientId` +ORDER BY `o4`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + public override async Task Unmapped_property_projection_loads_owned_navigations(bool isAsync) + { + await base.Unmapped_property_projection_loads_owned_navigations(isAsync); + + AssertSql( + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +FROM `OwnedPerson` AS `o` +LEFT JOIN ( + SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` + FROM `Order` AS `o0` + LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +WHERE `o`.`Id` = 1 +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class OwnedQueryLibRedFixture : RelationalOwnedQueryFixture + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/PrecompiledQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/PrecompiledQueryLibRedTest.cs new file mode 100644 index 00000000..2a6d90c2 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/PrecompiledQueryLibRedTest.cs @@ -0,0 +1,2134 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class PrecompiledQueryLibRedTest( + PrecompiledQueryLibRedTest.PrecompiledQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : PrecompiledQueryRelationalTestBase(fixture, testOutputHelper), + IClassFixture +{ + protected override bool AlwaysPrintGeneratedSources + => true; + + #region Expression types + + public override async Task BinaryExpression() + { + await base.BinaryExpression(); + + AssertSql( + """ +@id='3' + +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` > @id +"""); + } + + public override async Task Conditional_no_evaluatable() + { + await base.Conditional_no_evaluatable(); + + AssertSql( + """ +SELECT IIF(`b`.`Id` = 2, 'yes', 'no') +FROM `Blogs` AS `b` +"""); + } + + public override async Task Conditional_contains_captured_variable() + { + await base.Conditional_contains_captured_variable(); + + AssertSql( + """ +@yes='yes' (Size = 255) + +SELECT IIF(`b`.`Id` = 2, @yes, 'no') +FROM `Blogs` AS `b` +"""); + } + + public override async Task Invoke_no_evaluatability_is_not_supported() + { + await base.Invoke_no_evaluatability_is_not_supported(); + + AssertSql(); + } + + public override async Task ListInit_no_evaluatability() + { + await base.ListInit_no_evaluatability(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Id` + 1 +FROM `Blogs` AS `b` +"""); + } + + public override async Task ListInit_with_evaluatable_with_captured_variable() + { + await base.ListInit_with_evaluatable_with_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Id` +FROM `Blogs` AS `b` +"""); + } + + public override async Task ListInit_with_evaluatable_without_captured_variable() + { + await base.ListInit_with_evaluatable_without_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Id` +FROM `Blogs` AS `b` +"""); + } + + public override async Task ListInit_fully_evaluatable() + { + await base.ListInit_fully_evaluatable(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` IN (7, 8) +"""); + } + + public override async Task MethodCallExpression_no_evaluatability() + { + await base.MethodCallExpression_no_evaluatability(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Name` IS NOT NULL AND LEFT(`b`.`Name`, IIF(LEN(`b`.`Name`) IS NULL, 0, LEN(`b`.`Name`))) = `b`.`Name` +"""); + } + + public override async Task MethodCallExpression_with_evaluatable_with_captured_variable() + { + await base.MethodCallExpression_with_evaluatable_with_captured_variable(); + + AssertSql( + """ +@pattern_startswith='foo%' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Name` LIKE @pattern_startswith +"""); + } + + public override async Task MethodCallExpression_with_evaluatable_without_captured_variable() + { + await base.MethodCallExpression_with_evaluatable_without_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Name` LIKE 'foo%' +"""); + } + + public override async Task MethodCallExpression_fully_evaluatable() + { + await base.MethodCallExpression_fully_evaluatable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task New_with_no_arguments() + { + await base.New_with_no_arguments(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 0 +"""); + } + + public override async Task Where_New_with_captured_variable() + { + await base.Where_New_with_captured_variable(); + + AssertSql(); + } + + public override async Task Select_New_with_captured_variable() + { + await base.Select_New_with_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task MemberInit_no_evaluatable() + { + await base.MemberInit_no_evaluatable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task MemberInit_contains_captured_variable() + { + await base.MemberInit_contains_captured_variable(); + + AssertSql( + """ +@id='8' + +SELECT CLNG(@id) AS `Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task MemberInit_evaluatable_as_constant() + { + await base.MemberInit_evaluatable_as_constant(); + + AssertSql( + """ +SELECT 1 AS `Id`, 'foo' AS `Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task MemberInit_evaluatable_as_parameter() + { + await base.MemberInit_evaluatable_as_parameter(); + + AssertSql( + """ +SELECT 1 +FROM `Blogs` AS `b` +"""); + } + + public override async Task NewArray() + { + await base.NewArray(); + + AssertSql( + """ +@i='8' + +SELECT `b`.`Id`, `b`.`Id` + @i +FROM `Blogs` AS `b` +"""); + } + + public override async Task Unary() + { + await base.Unary(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE CINT(`b`.`Id`) = CINT(8) +"""); + } + + public virtual async Task Collate() + { + await Test("""_ = context.Blogs.Where(b => EF.Functions.Collate(b.Name, "German_PhoneBook_CI_AS") == "foo").ToList();"""); + + AssertSql(); + } + + #endregion Expression types + + #region Terminating operators + + public override async Task Terminating_AsEnumerable() + { + await base.Terminating_AsEnumerable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_AsAsyncEnumerable_on_DbSet() + { + await base.Terminating_AsAsyncEnumerable_on_DbSet(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_AsAsyncEnumerable_on_IQueryable() + { + await base.Terminating_AsAsyncEnumerable_on_IQueryable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +"""); + } + + public override async Task Foreach_sync_over_operator() + { + await base.Foreach_sync_over_operator(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +"""); + } + + public override async Task Terminating_ToArray() + { + await base.Terminating_ToArray(); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToArrayAsync() + { + await base.Terminating_ToArrayAsync(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToDictionary() + { + await base.Terminating_ToDictionary(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToDictionaryAsync() + { + await base.Terminating_ToDictionaryAsync(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task ToDictionary_over_anonymous_type() + { + await base.ToDictionary_over_anonymous_type(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task ToDictionaryAsync_over_anonymous_type() + { + await base.ToDictionaryAsync_over_anonymous_type(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToHashSet() + { + await base.Terminating_ToHashSet(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToHashSetAsync() + { + await base.Terminating_ToHashSetAsync(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToLookup() + { + await base.Terminating_ToLookup(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToList() + { + await base.Terminating_ToList(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToListAsync() + { + await base.Terminating_ToListAsync(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Foreach_sync_over_DbSet_property_is_not_supported() + { + await base.Foreach_sync_over_DbSet_property_is_not_supported(); + + AssertSql(); + } + + public override async Task Foreach_async_is_not_supported() + { + await base.Foreach_async_is_not_supported(); + + AssertSql(); + } + + #endregion Terminating operators + + #region Reducing terminating operators + + public override async Task Terminating_All() + { + await base.Terminating_All(); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` <= 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` <= 8) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_AllAsync() + { + await base.Terminating_AllAsync(); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` <= 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` <= 8) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_Any() + { + await base.Terminating_Any(); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` < 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` < 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_AnyAsync() + { + await base.Terminating_AnyAsync(); + + AssertSql( + """ +SELECT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` < 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` < 7) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_Average() + { + await base.Terminating_Average(); + + AssertSql( + """ +SELECT AVG(CDBL(`b`.`Id`)) +FROM `Blogs` AS `b` +""", + // + """ +SELECT AVG(CDBL(`b`.`Id`)) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_AverageAsync() + { + await base.Terminating_AverageAsync(); + + AssertSql( + """ +SELECT AVG(CDBL(`b`.`Id`)) +FROM `Blogs` AS `b` +""", + // + """ +SELECT AVG(CDBL(`b`.`Id`)) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_Contains() + { + await base.Terminating_Contains(); + + AssertSql( + """ +@p='8' + +SELECT @p IN ( + SELECT `b`.`Id` + FROM `Blogs` AS `b` +) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +@p='7' + +SELECT @p IN ( + SELECT `b`.`Id` + FROM `Blogs` AS `b` +) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_ContainsAsync() + { + await base.Terminating_ContainsAsync(); + + AssertSql( + """ +@p='8' + +SELECT @p IN ( + SELECT `b`.`Id` + FROM `Blogs` AS `b` +) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +@p='7' + +SELECT @p IN ( + SELECT `b`.`Id` + FROM `Blogs` AS `b` +) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_Count() + { + await base.Terminating_Count(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +"""); + } + + public override async Task Terminating_CountAsync() + { + await base.Terminating_CountAsync(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +"""); + } + + public override async Task Terminating_ElementAt() + { + await base.Terminating_ElementAt(); + + AssertSql( + """ +@__p_0='1' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +""", + // + """ +@__p_0='3' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +"""); + } + + public override async Task Terminating_ElementAtAsync() + { + await base.Terminating_ElementAtAsync(); + + AssertSql( + """ +@__p_0='1' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +""", + // + """ +@__p_0='3' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +"""); + } + + public override async Task Terminating_ElementAtOrDefault() + { + await base.Terminating_ElementAtOrDefault(); + + AssertSql( + """ +@__p_0='1' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +""", + // + """ +@__p_0='3' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +"""); + } + + public override async Task Terminating_ElementAtOrDefaultAsync() + { + await base.Terminating_ElementAtOrDefaultAsync(); + + AssertSql( + """ +@__p_0='1' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +""", + // + """ +@__p_0='3' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +"""); + } + + public override async Task Terminating_First() + { + await base.Terminating_First(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_FirstAsync() + { + await base.Terminating_FirstAsync(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_FirstOrDefault() + { + await base.Terminating_FirstOrDefault(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_FirstOrDefaultAsync() + { + await base.Terminating_FirstOrDefaultAsync(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_GetEnumerator() + { + await base.Terminating_GetEnumerator(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +"""); + } + + public override async Task Terminating_Last() + { + await base.Terminating_Last(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +"""); + } + + public override async Task Terminating_LastAsync() + { + await base.Terminating_LastAsync(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +"""); + } + + public override async Task Terminating_LastOrDefault() + { + await base.Terminating_LastOrDefault(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +"""); + } + + public override async Task Terminating_LastOrDefaultAsync() + { + await base.Terminating_LastOrDefaultAsync(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +"""); + } + + public override async Task Terminating_LongCount() + { + await base.Terminating_LongCount(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +"""); + } + + public override async Task Terminating_LongCountAsync() + { + await base.Terminating_LongCountAsync(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +"""); + } + + public override async Task Terminating_Max() + { + await base.Terminating_Max(); + + AssertSql( + """ +SELECT MAX(`b`.`Id`) +FROM `Blogs` AS `b` +""", + // + """ +SELECT MAX(`b`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_MaxAsync() + { + await base.Terminating_MaxAsync(); + + AssertSql( + """ +SELECT MAX(`b`.`Id`) +FROM `Blogs` AS `b` +""", + // + """ +SELECT MAX(`b`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_Min() + { + await base.Terminating_Min(); + + AssertSql( + """ +SELECT MIN(`b`.`Id`) +FROM `Blogs` AS `b` +""", + // + """ +SELECT MIN(`b`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_MinAsync() + { + await base.Terminating_MinAsync(); + + AssertSql( + """ +SELECT MIN(`b`.`Id`) +FROM `Blogs` AS `b` +""", + // + """ +SELECT MIN(`b`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_Single() + { + await base.Terminating_Single(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_SingleAsync() + { + await base.Terminating_SingleAsync(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_SingleOrDefault() + { + await base.Terminating_SingleOrDefault(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_SingleOrDefaultAsync() + { + await base.Terminating_SingleOrDefaultAsync(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_Sum() + { + await base.Terminating_Sum(); + + AssertSql( + """ +SELECT IIF(SUM(`b`.`Id`) IS NULL, 0, SUM(`b`.`Id`)) +FROM `Blogs` AS `b` +""", + // + """ +SELECT IIF(SUM(`b`.`Id`) IS NULL, 0, SUM(`b`.`Id`)) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_SumAsync() + { + await base.Terminating_SumAsync(); + + AssertSql( + """ +SELECT IIF(SUM(`b`.`Id`) IS NULL, 0, SUM(`b`.`Id`)) +FROM `Blogs` AS `b` +""", + // + """ +SELECT IIF(SUM(`b`.`Id`) IS NULL, 0, SUM(`b`.`Id`)) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ExecuteDelete() + { + await base.Terminating_ExecuteDelete(); + + AssertSql( + """ +DELETE FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ExecuteDeleteAsync() + { + await base.Terminating_ExecuteDeleteAsync(); + + AssertSql( + """ +DELETE FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ExecuteUpdate_with_lambda() + { + await base.Terminating_ExecuteUpdate_with_lambda(); + + AssertSql( + """ +@suffix='Suffix' (Size = 255) + +UPDATE `Blogs` AS `b` +SET `b`.`Name` = IIF(`b`.`Name` IS NULL, '', `b`.`Name`) & @suffix +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 9 AND `b`.`Name` = 'Blog2Suffix' +"""); + } + + public override async Task Terminating_ExecuteUpdate_without_lambda() + { + await base.Terminating_ExecuteUpdate_without_lambda(); + + AssertSql( + """ +@newValue='NewValue' (Size = 255) + +UPDATE `Blogs` AS `b` +SET `b`.`Name` = @newValue +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 9 AND `b`.`Name` = 'NewValue' +"""); + } + + public override async Task Terminating_ExecuteUpdateAsync_with_lambda() + { + await base.Terminating_ExecuteUpdateAsync_with_lambda(); + + AssertSql( + """ +@suffix='Suffix' (Size = 255) + +UPDATE `Blogs` AS `b` +SET `b`.`Name` = IIF(`b`.`Name` IS NULL, '', `b`.`Name`) & @suffix +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 9 AND `b`.`Name` = 'Blog2Suffix' +"""); + } + + public override async Task Terminating_ExecuteUpdateAsync_without_lambda() + { + await base.Terminating_ExecuteUpdateAsync_without_lambda(); + + AssertSql( + """ +@newValue='NewValue' (Size = 255) + +UPDATE `Blogs` AS `b` +SET `b`.`Name` = @newValue +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 9 AND `b`.`Name` = 'NewValue' +"""); + } + + public override async Task Terminating_with_cancellation_token() + { + await base.Terminating_with_cancellation_token(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + #endregion Reducing terminating operators + + #region SQL expression quotability + + public override async Task Union() + { + await base.Union(); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BlogId`, `u`.`Title` +FROM ( + SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title` + FROM `Posts` AS `p` + WHERE `p`.`Id` > 11 + UNION + SELECT `p0`.`Id`, `p0`.`BlogId`, `p0`.`Title` + FROM `Posts` AS `p0` + WHERE `p0`.`Id` < 21 +) AS `u` +ORDER BY `u`.`Id` +"""); + } + + public override async Task UnionOnEntitiesWithJson() + { + await base.UnionOnEntitiesWithJson(); + + AssertSql( + """ +SELECT [u].[Id], [u].[Name], [u].[Json] +FROM ( + SELECT [b].[Id], [b].[Name], [b].[Json] + FROM [Blogs] AS [b] + WHERE [b].[Id] > 7 + UNION + SELECT [b0].[Id], [b0].[Name], [b0].[Json] + FROM [Blogs] AS [b0] + WHERE [b0].[Id] < 10 +) AS [u] +ORDER BY [u].[Id] +"""); + } + + public override async Task Concat() + { + await base.Concat(); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BlogId`, `u`.`Title` +FROM ( + SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title` + FROM `Posts` AS `p` + WHERE `p`.`Id` > 11 + UNION ALL + SELECT `p0`.`Id`, `p0`.`BlogId`, `p0`.`Title` + FROM `Posts` AS `p0` + WHERE `p0`.`Id` < 21 +) AS `u` +ORDER BY `u`.`Id` +"""); + } + + public override async Task ConcatOnEntitiesWithJson() + { + await base.ConcatOnEntitiesWithJson(); + + AssertSql( + """ +SELECT [u].[Id], [u].[Name], [u].[Json] +FROM ( + SELECT [b].[Id], [b].[Name], [b].[Json] + FROM [Blogs] AS [b] + WHERE [b].[Id] > 7 + UNION ALL + SELECT [b0].[Id], [b0].[Name], [b0].[Json] + FROM [Blogs] AS [b0] + WHERE [b0].[Id] < 10 +) AS [u] +ORDER BY [u].[Id] +"""); + } + + public override async Task Intersect() + { + await base.Intersect(); + + AssertSql( + """ +SELECT [i].[Id], [i].[Name] +FROM ( + SELECT [b].[Id], [b].[Name] + FROM [Blogs] AS [b] + WHERE [b].[Id] > 7 + INTERSECT + SELECT [b0].[Id], [b0].[Name] + FROM [Blogs] AS [b0] + WHERE [b0].[Id] > 8 +) AS [i] +ORDER BY [i].[Id] +"""); + } + + public override async Task IntersectOnEntitiesWithJson() + { + await base.IntersectOnEntitiesWithJson(); + + AssertSql( + """ +SELECT [i].[Id], [i].[Name], [i].[Json] +FROM ( + SELECT [b].[Id], [b].[Name], [b].[Json] + FROM [Blogs] AS [b] + WHERE [b].[Id] > 7 + INTERSECT + SELECT [b0].[Id], [b0].[Name], [b0].[Json] + FROM [Blogs] AS [b0] + WHERE [b0].[Id] > 8 +) AS [i] +ORDER BY [i].[Id] +"""); + } + + public override async Task Except() + { + await base.Except(); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name] +FROM ( + SELECT [b].[Id], [b].[Name] + FROM [Blogs] AS [b] + WHERE [b].[Id] > 7 + EXCEPT + SELECT [b0].[Id], [b0].[Name] + FROM [Blogs] AS [b0] + WHERE [b0].[Id] > 8 +) AS [e] +ORDER BY [e].[Id] +"""); + } + + public override async Task ExceptOnEntitiesWithJson() + { + await base.ExceptOnEntitiesWithJson(); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Json] +FROM ( + SELECT [b].[Id], [b].[Name], [b].[Json] + FROM [Blogs] AS [b] + WHERE [b].[Id] > 7 + EXCEPT + SELECT [b0].[Id], [b0].[Name], [b0].[Json] + FROM [Blogs] AS [b0] + WHERE [b0].[Id] > 8 +) AS [e] +ORDER BY [e].[Id] +"""); + } + + public override async Task ValuesExpression() + { + await base.ValuesExpression(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE ( + SELECT COUNT(*) + FROM (SELECT CLNG(7) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `b`.`Id` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1`) AS `v` + WHERE `v`.`Value` > 8) = 2 +"""); + } + + public override async Task Contains_with_parameterized_collection() + { + await base.Contains_with_parameterized_collection(); + + AssertSql( + """ +@p1='1' +@p2='2' +@p3='3' + +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` IN (@p1, @p2, @p3) +"""); + } + + public override async Task FromSqlRaw() + { + await base.FromSqlRaw(); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`Name`, `m`.`Json` +FROM ( + SELECT * FROM `Blogs` WHERE `Id` > 8 +) AS `m` +ORDER BY `m`.`Id` +"""); + } + + public override async Task FromSql_with_FormattableString_parameters() + { + await base.FromSql_with_FormattableString_parameters(); + + AssertSql( + """ +p0='8' +p1='9' + +SELECT `m`.`Id`, `m`.`Name`, `m`.`Json` +FROM ( + SELECT * FROM `Blogs` WHERE `Id` > @p0 AND `Id` < @p1 +) AS `m` +ORDER BY `m`.`Id` +"""); + } + + // SqlServerOpenJsonExpression is covered by PrecompiledQueryRelationalTestBase.Contains_with_parameterized_collection + +// [ConditionalFact] +// public virtual Task TableValuedFunctionExpression_toplevel() +// => Test( +// "_ = context.GetBlogsWithAtLeast(9).ToList();", +// modelSourceCode: providerOptions => $$""" +// public class BlogContext : DbContext +// { +// public DbSet Blogs { get; set; } +// +// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) +// => optionsBuilder +// {{providerOptions}} +// .ReplaceService(); +// +// protected override void OnModelCreating(ModelBuilder modelBuilder) +// { +// modelBuilder.HasDbFunction(typeof(BlogContext).GetMethod(nameof(GetBlogsWithAtLeast))); +// } +// +// public IQueryable GetBlogsWithAtLeast(int minBlogId) => FromExpression(() => GetBlogsWithAtLeast(minBlogId)); +// } +// +// public class Blog +// { +// [DatabaseGenerated(DatabaseGeneratedOption.None)] +// public int Id { get; set; } +// public string StringProperty { get; set; } +// } +// """, +// setupSql: """ +// CREATE FUNCTION dbo.GetBlogsWithAtLeast(@minBlogId int) +// RETURNS TABLE AS RETURN +// ( +// SELECT [b].[Id], [b].[Name] FROM [Blogs] AS [b] WHERE [b].[Id] >= @minBlogId +// ) +// """, +// cleanupSql: "DROP FUNCTION dbo.GetBlogsWithAtLeast;"); +// +// [ConditionalFact] +// public virtual Task TableValuedFunctionExpression_non_toplevel() +// => Test( +// "_ = context.Blogs.Where(b => context.GetPosts(b.Id).Count() == 2).ToList();", +// modelSourceCode: providerOptions => $$""" +// public class BlogContext : DbContext +// { +// public DbSet Blogs { get; set; } +// +// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) +// => optionsBuilder +// {{providerOptions}} +// .ReplaceService(); +// +// protected override void OnModelCreating(ModelBuilder modelBuilder) +// { +// modelBuilder.HasDbFunction(typeof(BlogContext).GetMethod(nameof(GetPosts))); +// } +// +// public IQueryable GetPosts(int blogId) => FromExpression(() => GetPosts(blogId)); +// } +// +// public class Blog +// { +// public int Id { get; set; } +// public string StringProperty { get; set; } +// public List Post { get; set; } +// } +// +// public class Post +// { +// public int Id { get; set; } +// public string Title { get; set; } +// +// public Blog Blog { get; set; } +// } +// """, +// setupSql: """ +// CREATE FUNCTION dbo.GetPosts(@blogId int) +// RETURNS TABLE AS RETURN +// ( +// SELECT [p].[Id], [p].[Title], [p].[BlogId] FROM [Posts] AS [p] WHERE [p].[BlogId] = @blogId +// ) +// """, +// cleanupSql: "DROP FUNCTION dbo.GetPosts;"); + + #endregion SQL expression quotability + + #region Different query roots + + public override async Task DbContext_as_local_variable() + { + await base.DbContext_as_local_variable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task DbContext_as_field() + { + await base.DbContext_as_field(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task DbContext_as_property() + { + await base.DbContext_as_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task DbContext_as_captured_variable() + { + await base.DbContext_as_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + public override async Task DbContext_as_method_invocation_result() + { + await base.DbContext_as_method_invocation_result(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + #endregion Different query roots + + #region Negative cases + + public override async Task Dynamic_query_does_not_get_precompiled() + { + await base.Dynamic_query_does_not_get_precompiled(); + + AssertSql(); + } + + public override async Task ToList_over_objects_does_not_get_precompiled() + { + await base.ToList_over_objects_does_not_get_precompiled(); + + AssertSql(); + } + + public override async Task Query_compilation_failure() + { + await base.Query_compilation_failure(); + + AssertSql(); + } + + public override async Task EF_Constant_is_not_supported() + { + await base.EF_Constant_is_not_supported(); + + AssertSql(); + } + + public override async Task NotParameterizedAttribute_with_constant() + { + await base.NotParameterizedAttribute_with_constant(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = 'Blog2' +"""); + } + + public override async Task NotParameterizedAttribute_is_not_supported_with_non_constant_argument() + { + await base.NotParameterizedAttribute_is_not_supported_with_non_constant_argument(); + + AssertSql(); + } + + public override async Task Query_syntax_is_not_supported() + { + await base.Query_syntax_is_not_supported(); + + AssertSql(); + } + + #endregion Negative cases + + public override async Task OrderBy() + { + await base.OrderBy(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +ORDER BY `b`.`Name` +"""); + } + + public override async Task Skip_with_constant() + { + await base.Skip_with_constant(); + + AssertSql( + """ +@p='1' + +SELECT [b].[Id], [b].[Name], [b].[Json] +FROM [Blogs] AS [b] +ORDER BY [b].[Name] +OFFSET @p ROWS +"""); + } + + public override async Task Skip_with_parameter() + { + await base.Skip_with_parameter(); + + AssertSql( + """ +@p='1' + +SELECT [b].[Id], [b].[Name], [b].[Json] +FROM [Blogs] AS [b] +ORDER BY [b].[Name] +OFFSET @p ROWS +"""); + } + + public override async Task Take_with_constant() + { + await base.Take_with_constant(); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +ORDER BY `b`.`Name` +"""); + } + + public override async Task Take_with_parameter() + { + await base.Take_with_parameter(); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +ORDER BY `b`.`Name` +"""); + } + + public override async Task Select_changes_type() + { + await base.Select_changes_type(); + + AssertSql( + """ +SELECT `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Select_anonymous_object() + { + await base.Select_anonymous_object(); + + AssertSql( + """ +SELECT IIF(`b`.`Name` IS NULL, '', `b`.`Name`) & 'Foo' AS `Foo` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Include_single() + { + await base.Include_single(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`, `p`.`Id`, `p`.`BlogId`, `p`.`Title` +FROM `Blogs` AS `b` +LEFT JOIN `Posts` AS `p` ON `b`.`Id` = `p`.`BlogId` +WHERE `b`.`Id` > 8 +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_split() + { + await base.Include_split(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title`, `b`.`Id` +FROM `Blogs` AS `b` +INNER JOIN `Posts` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Final_GroupBy() + { + await base.Final_GroupBy(); + + AssertSql( + """ +SELECT `b`.`Name`, `b`.`Id`, `b`.`Json` +FROM `Blogs` AS `b` +ORDER BY `b`.`Name` +"""); + } + + public override async Task Two_captured_variables_in_same_lambda() + { + await base.Two_captured_variables_in_same_lambda(); + + AssertSql( + """ +@yes='yes' (Size = 255) +@no='no' (Size = 255) + +SELECT IIF(`b`.`Id` = 3, @yes, @no) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Two_captured_variables_in_different_lambdas() + { + await base.Two_captured_variables_in_different_lambdas(); + + AssertSql( + """ +@starts_startswith='Blog%' (Size = 255) +@ends_endswith='%2' (Size = 255) + +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE (`b`.`Name` LIKE @starts_startswith) AND (`b`.`Name` LIKE @ends_endswith) +"""); + } + + public override async Task Same_captured_variable_twice_in_same_lambda() + { + await base.Same_captured_variable_twice_in_same_lambda(); + + AssertSql( + """ +@foo_startswith='X%' (Size = 255) +@foo_endswith='%X' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE (`b`.`Name` LIKE @foo_startswith) AND (`b`.`Name` LIKE @foo_endswith) +"""); + } + + public override async Task Same_captured_variable_twice_in_different_lambdas() + { + await base.Same_captured_variable_twice_in_different_lambdas(); + + AssertSql( + """ +@foo_startswith='X%' (Size = 255) +@foo_endswith='%X' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE (`b`.`Name` LIKE @foo_startswith) AND (`b`.`Name` LIKE @foo_endswith) +"""); + } + + public override async Task Multiple_queries_with_captured_variables() + { + await base.Multiple_queries_with_captured_variables(); + + AssertSql( + """ +@id1='8' +@id2='9' + +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @id1 OR `b`.`Id` = @id2 +""", + // + """ +@id1='8' + +SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @id1 +"""); + } + + public override async Task Unsafe_accessor_gets_generated_once_for_multiple_queries() + { + await base.Unsafe_accessor_gets_generated_once_for_multiple_queries(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +""", + // + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Json` +FROM `Blogs` AS `b` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public class PrecompiledQueryLibRedFixture : PrecompiledQueryRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + builder = base.AddOptions(builder); + + // TODO: Figure out if there's a nice way to continue using the retrying strategy + var jetOptionsBuilder = new LibRedDbContextOptionsBuilder(builder); + jetOptionsBuilder.ExecutionStrategy(d => new NonRetryingExecutionStrategy(d)); + return builder; + } + + public override PrecompiledQueryTestHelpers PrecompiledQueryTestHelpers => LibRedPrecompiledQueryTestHelpers.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/PrecompiledSqlPregenerationQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/PrecompiledSqlPregenerationQueryLibRedTest.cs new file mode 100644 index 00000000..a733569c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/PrecompiledSqlPregenerationQueryLibRedTest.cs @@ -0,0 +1,279 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Query.Internal; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +// ReSharper disable InconsistentNaming + +public class PrecompiledSqlPregenerationQueryLibRedTest( + PrecompiledSqlPregenerationQueryLibRedTest.PrecompiledSqlPregenerationQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : PrecompiledSqlPregenerationQueryRelationalTestBase(fixture, testOutputHelper), + IClassFixture +{ + protected override bool AlwaysPrintGeneratedSources + => false; + + public override async Task No_parameters() + { + await base.No_parameters(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = 'foo' +"""); + } + + public override async Task Non_nullable_value_type() + { + await base.Non_nullable_value_type(); + + AssertSql( + """ +@id='8' + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @id +"""); + } + + public override async Task Nullable_value_type() + { + await base.Nullable_value_type(); + + AssertSql( + """ +@id='8' (Nullable = true) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @id +"""); + } + + public override async Task Nullable_reference_type() + { + await base.Nullable_reference_type(); + + AssertSql( + """ +@name='bar' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @name +"""); + } + + public override async Task Non_nullable_reference_type() + { + await base.Non_nullable_reference_type(); + + AssertSql( + """ +@name='bar' (Nullable = false) (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @name +"""); + } + + public override async Task Nullable_and_non_nullable_value_types() + { + await base.Nullable_and_non_nullable_value_types(); + + AssertSql( + """ +@id1='8' (Nullable = true) +@id2='9' + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @id1 OR `b`.`Id` = @id2 +"""); + } + + public override async Task Two_nullable_reference_types() + { + await base.Two_nullable_reference_types(); + + AssertSql( + """ +@name1='foo' (Size = 255) +@name2='bar' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @name1 OR `b`.`Name` = @name2 +"""); + } + + public override async Task Two_non_nullable_reference_types() + { + await base.Two_non_nullable_reference_types(); + + AssertSql( + """ +@name1='foo' (Nullable = false) (Size = 255) +@name2='bar' (Nullable = false) (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @name1 OR `b`.`Name` = @name2 +"""); + } + + public override async Task Nullable_and_non_nullable_reference_types() + { + await base.Nullable_and_non_nullable_reference_types(); + + AssertSql( + """ +@name1='foo' (Size = 255) +@name2='bar' (Nullable = false) (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @name1 OR `b`.`Name` = @name2 +"""); + } + + public override async Task Too_many_nullable_parameters_prevent_pregeneration() + { + await base.Too_many_nullable_parameters_prevent_pregeneration(); + + AssertSql( + """ +@name1='foo' (Size = 255) +@name2='bar' (Size = 255) +@name3='baz' (Size = 255) +@name4='baq' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @name1 OR `b`.`Name` = @name2 OR `b`.`Name` = @name3 OR `b`.`Name` = @name4 +"""); + } + + public override async Task Many_non_nullable_parameters_do_not_prevent_pregeneration() + { + await base.Many_non_nullable_parameters_do_not_prevent_pregeneration(); + + AssertSql( + """ +@name1='foo' (Nullable = false) (Size = 255) +@name2='bar' (Nullable = false) (Size = 255) +@name3='baz' (Nullable = false) (Size = 255) +@name4='baq' (Nullable = false) (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @name1 OR `b`.`Name` = @name2 OR `b`.`Name` = @name3 OR `b`.`Name` = @name4 +"""); + } + + #region Tests for the different querying enumerables + + public override async Task Include_single_query() + { + await base.Include_single_query(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `p`.`Id`, `p`.`BlogId`, `p`.`Title` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_split_query() + { + await base.Include_split_query(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title`, `b`.`Id` +FROM `Blogs` AS `b` +INNER JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Final_GroupBy() + { + await base.Final_GroupBy(); + + AssertSql( + """ +SELECT `b`.`Name`, `b`.`Id` +FROM `Blogs` AS `b` +ORDER BY `b`.`Name` +"""); + } + + #endregion Tests for the different querying enumerables + + [ConditionalFact] + public virtual async Task Do_not_cache_is_respected() + { + // The "do not cache" flag in the 2nd part of the query pipeline is turned on in provider-specific situations, so we test it + // here in SQL Server; note that SQL Server compatibility mode is set low to trigger this. + await Test( + """ +string[] names = ["foo", "bar"]; +var blogs = await context.Blogs.Where(b => ((IEnumerable)names).Contains(b.Name)).ToListAsync(); +""", + interceptorCodeAsserter: code => Assert.Contains(nameof(RelationalCommandCache), code)); + + AssertSql( + """ + @p1='foo' (Size = 255) + @p2='bar' (Size = 255) + + SELECT `b`.`Id`, `b`.`Name` + FROM `Blogs` AS `b` + WHERE `b`.`Name` IN (@p1, @p2) + """); + } + + public class PrecompiledSqlPregenerationQueryLibRedFixture : PrecompiledSqlPregenerationQueryRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + /*public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + builder = base.AddOptions(builder); + + // TODO: Figure out if there's a nice way to continue using the retrying strategy + var jetOptionsBuilder = new LibRedDbContextOptionsBuilder(builder); + jetOptionsBuilder + .ExecutionStrategy(d => new NonRetryingExecutionStrategy(d)); + return builder; + }*/ + + public override PrecompiledQueryTestHelpers PrecompiledQueryTestHelpers => LibRedPrecompiledQueryTestHelpers.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/PrimitiveCollectionsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/PrimitiveCollectionsQueryLibRedTest.cs new file mode 100644 index 00000000..35d2d82b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/PrimitiveCollectionsQueryLibRedTest.cs @@ -0,0 +1,1836 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.Jet.Internal; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; +using Xunit.Sdk; +using static Microsoft.EntityFrameworkCore.DbLoggerCategory; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +///

+/// Runs all primitive collection tests with SQL Server compatibility level 120 (SQL Server 2014), which doesn't support OPENJSON. +/// This exercises the older translation paths for e.g. Contains, to make sure things work for providers with no queryable constant/ +/// parameter support. +/// +public class PrimitiveCollectionsQueryLibRedTest : PrimitiveCollectionsQueryRelationalTestBase< + PrimitiveCollectionsQueryLibRedTest.PrimitiveCollectionsQueryLibRedFixture> +{ + public override int? NumberOfValuesForHugeParameterCollectionTests { get; } = 5000; + + public PrimitiveCollectionsQueryLibRedTest(PrimitiveCollectionsQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Inline_collection_of_ints_Contains() + { + await base.Inline_collection_of_ints_Contains(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (10, 999) +"""); + } + + public override async Task Inline_collection_of_nullable_ints_Contains() + { + await base.Inline_collection_of_nullable_ints_Contains(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableInt` IN (10, 999) +"""); + } + + public override async Task Inline_collection_of_nullable_ints_Contains_null() + { + await base.Inline_collection_of_nullable_ints_Contains_null(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableInt` IS NULL OR `p`.`NullableInt` = 999 +"""); + } + + public override async Task Inline_collection_Count_with_zero_values() + { + await base.Inline_collection_Count_with_zero_values(); + + AssertSql(); + } + + public override async Task Inline_collection_Count_with_one_value() + { + await base.Inline_collection_Count_with_one_value(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT COUNT(*) + FROM (SELECT CLNG(2) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0`) AS `v` + WHERE `v`.`Value` > `p`.`Id`) = 1 +"""); + } + + public override async Task Inline_collection_Count_with_two_values() + { + await base.Inline_collection_Count_with_two_values(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT COUNT(*) + FROM (SELECT CLNG(2) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT 999 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1`) AS `v` + WHERE `v`.`Value` > `p`.`Id`) = 1 +"""); + } + + public override async Task Inline_collection_Count_with_three_values() + { + await base.Inline_collection_Count_with_three_values(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT COUNT(*) + FROM (SELECT CLNG(2) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT 999 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT 1000 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2`) AS `v` + WHERE `v`.`Value` > `p`.`Id`) = 2 +"""); + } + + public override async Task Inline_collection_Contains_with_zero_values() + { + await base.Inline_collection_Contains_with_zero_values(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE FALSE +"""); + } + + public override async Task Inline_collection_Contains_with_one_value() + { + await base.Inline_collection_Contains_with_one_value(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` = 2 +"""); + } + + public override async Task Inline_collection_Contains_with_two_values() + { + await base.Inline_collection_Contains_with_two_values(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` IN (2, 999) +"""); + } + + public override async Task Inline_collection_Contains_with_three_values() + { + await base.Inline_collection_Contains_with_three_values(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` IN (2, 999, 1000) +"""); + } + + public override async Task Inline_collection_Contains_with_all_parameters() + { + await base.Inline_collection_Contains_with_all_parameters(); + + AssertSql( + """ +@i='2' +@j='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` IN (@i, @j) +"""); + } + + public override async Task Inline_collection_Contains_with_constant_and_parameter() + { + await base.Inline_collection_Contains_with_constant_and_parameter(); + + AssertSql( + """ +@j='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` IN (2, @j) +"""); + } + + public override async Task Inline_collection_Contains_with_mixed_value_types() + { + await base.Inline_collection_Contains_with_mixed_value_types(); + + AssertSql( + """ +@i='11' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (999, @i, `p`.`Id`, `p`.`Id` + `p`.`Int`) +"""); + } + + public override async Task Inline_collection_List_Contains_with_mixed_value_types() + { + await base.Inline_collection_List_Contains_with_mixed_value_types(); + + AssertSql( + """ +@i='11' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (999, @i, `p`.`Id`, `p`.`Id` + `p`.`Int`) +"""); + } + + public override async Task Inline_collection_Contains_as_Any_with_predicate() + { + await base.Inline_collection_Contains_as_Any_with_predicate(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` IN (2, 999) +"""); + } + + public override async Task Inline_collection_negated_Contains_as_All() + { + await base.Inline_collection_negated_Contains_as_All(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` NOT IN (2, 999) +"""); + } + + public override async Task Inline_collection_Min_with_two_values() + { + await base.Inline_collection_Min_with_two_values(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MIN(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1`) AS `v`) = 30 +"""); + } + + public override async Task Inline_collection_List_Min_with_two_values() + { + await base.Inline_collection_List_Min_with_two_values(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MIN(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1`) AS `v`) = 30 +"""); + } + + public override async Task Inline_collection_Max_with_two_values() + { + await base.Inline_collection_Max_with_two_values(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MAX(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1`) AS `v`) = 30 +"""); + } + + public override async Task Inline_collection_List_Max_with_two_values() + { + await base.Inline_collection_List_Max_with_two_values(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MAX(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1`) AS `v`) = 30 +"""); + } + + public override async Task Inline_collection_Min_with_three_values() + { + await base.Inline_collection_Min_with_three_values(); + + AssertSql( + """ +@i='25' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MIN(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT @i AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2`) AS `v`) = 25 +"""); + } + + public override async Task Inline_collection_List_Min_with_three_values() + { + await base.Inline_collection_List_Min_with_three_values(); + + AssertSql( + """ +@i='25' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MIN(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT @i AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2`) AS `v`) = 25 +"""); + } + + public override async Task Inline_collection_Max_with_three_values() + { + await base.Inline_collection_Max_with_three_values(); + + AssertSql( + """ +@i='35' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MAX(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT @i AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2`) AS `v`) = 35 +"""); + } + + public override async Task Inline_collection_List_Max_with_three_values() + { + await base.Inline_collection_List_Max_with_three_values(); + + AssertSql( + """ +@i='35' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MAX(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT @i AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2`) AS `v`) = 35 +"""); + } + + public override async Task Inline_collection_of_nullable_value_type_Min() + { + await base.Inline_collection_of_nullable_value_type_Min(); + + AssertSql( + """ +@i='25' (Nullable = true) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MIN(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT @i AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2`) AS `v`) = 25 +"""); + } + + public override async Task Inline_collection_of_nullable_value_type_Max() + { + await base.Inline_collection_of_nullable_value_type_Max(); + + AssertSql( + """ +@i='35' (Nullable = true) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MAX(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`Int` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT @i AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2`) AS `v`) = 35 +"""); + } + + public override async Task Inline_collection_of_nullable_value_type_with_null_Min() + { + await base.Inline_collection_of_nullable_value_type_with_null_Min(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MIN(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`NullableInt` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT NULL AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2`) AS `v`) = 30 +"""); + } + + public override async Task Inline_collection_of_nullable_value_type_with_null_Max() + { + await base.Inline_collection_of_nullable_value_type_with_null_Max(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT MAX(`v`.`Value`) + FROM (SELECT CLNG(30) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT `p`.`NullableInt` AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT NULL AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2`) AS `v`) = 30 +"""); + } + + public override async Task Inline_collection_with_single_parameter_element_Contains() + { + await base.Inline_collection_with_single_parameter_element_Contains(); + + AssertSql( + """ +@i='2' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` = @i +"""); + } + + public override async Task Inline_collection_with_single_parameter_element_Count() + { + await base.Inline_collection_with_single_parameter_element_Count(); + + AssertSql( + """ +@i='2' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT COUNT(*) + FROM (SELECT IIF(@i IS NULL, NULL, CLNG(@i)) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0`) AS `v` + WHERE `v`.`Value` > `p`.`Id`) = 1 +"""); + } + + public override async Task Inline_collection_Contains_with_EF_Parameter() + { + await base.Inline_collection_Contains_with_EF_Parameter(); + + AssertSql( + """ +@__p_0='[2,999,1000]' (Size = 4000) + +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE [p].[Id] IN ( + SELECT [p0].[value] + FROM OPENJSON(@__p_0) WITH ([value] int '$') AS [p0] +) +"""); + } + + public override async Task Inline_collection_Contains_with_IEnumerable_EF_Parameter() + { + await base.Inline_collection_Contains_with_IEnumerable_EF_Parameter(); + + AssertSql( + """ +@Select='["10","a","aa"]' (Size = 4000) + +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[NullableWrappedId], [p].[NullableWrappedIdWithNullableComparer], [p].[String], [p].[Strings], [p].[WrappedId] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE [p].[NullableString] IN ( + SELECT [s].[value] + FROM OPENJSON(@Select) WITH ([value] nvarchar(max) '$') AS [s] +) +"""); + } + + public override async Task Inline_collection_Count_with_column_predicate_with_EF_Parameter() + { + await base.Inline_collection_Count_with_column_predicate_with_EF_Parameter(); + + AssertSql( + """ +@__p_0='[2,999,1000]' (Size = 4000) + +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON(@__p_0) WITH ([value] int '$') AS [p0] + WHERE [p0].[value] > [p].[Id]) = 2 +"""); + } + + public override async Task Parameter_collection_Count() + { + await base.Parameter_collection_Count(); + + AssertSql( + """ +@ids1='2' +@ids2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT COUNT(*) + FROM (SELECT @ids1 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_0` + UNION + SELECT @ids2 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_1`) AS `i` + WHERE `i`.`Value` > `p`.`Id`) = 1 +"""); + } + + public override async Task Parameter_collection_of_ints_Contains_int() + { + await base.Parameter_collection_of_ints_Contains_int(); + + AssertSql( + """ +@ints1='10' +@ints2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (@ints1, @ints2) +""", + // + """ +@ints1='10' +@ints2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` NOT IN (@ints1, @ints2) +"""); + } + + public override async Task Parameter_collection_HashSet_of_ints_Contains_int() + { + await base.Parameter_collection_HashSet_of_ints_Contains_int(); + + AssertSql( + """ +@ints1='10' +@ints2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (@ints1, @ints2) +""", + // + """ +@ints1='10' +@ints2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` NOT IN (@ints1, @ints2) +"""); + } + + public override async Task Parameter_collection_ImmutableArray_of_ints_Contains_int() + { + await base.Parameter_collection_ImmutableArray_of_ints_Contains_int(); + + AssertSql( + """ +@ints1='10' +@ints2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (@ints1, @ints2) +""", + // + """ +@ints1='10' +@ints2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` NOT IN (@ints1, @ints2) +"""); + } + + public override async Task Parameter_collection_of_ints_Contains_nullable_int() + { + await base.Parameter_collection_of_ints_Contains_nullable_int(); + + AssertSql( + """ +@ints1='10' +@ints2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableInt` IN (@ints1, @ints2) +""", + // + """ +@ints1='10' +@ints2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableInt` NOT IN (@ints1, @ints2) OR `p`.`NullableInt` IS NULL +"""); + } + + public override async Task Parameter_collection_of_nullable_ints_Contains_int() + { + await base.Parameter_collection_of_nullable_ints_Contains_int(); + + AssertSql( + """ +@nullableInts1='10' +@nullableInts2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (@nullableInts1, @nullableInts2) +""", + // + """ +@nullableInts1='10' +@nullableInts2='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` NOT IN (@nullableInts1, @nullableInts2) +"""); + } + + public override async Task Parameter_collection_of_nullable_ints_Contains_nullable_int() + { + await base.Parameter_collection_of_nullable_ints_Contains_nullable_int(); + + AssertSql( + """ +@nullableInts1='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableInt` IS NULL OR `p`.`NullableInt` = @nullableInts1 +""", + // + """ +@nullableInts1='999' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableInt` IS NOT NULL AND `p`.`NullableInt` <> @nullableInts1 +"""); + } + + public override async Task Parameter_collection_of_nullable_ints_Contains_nullable_int_with_EF_Parameter() + { + await Assert.ThrowsAsync(base.Parameter_collection_of_nullable_ints_Contains_nullable_int_with_EF_Parameter); + + AssertSql(); + } + + public override async Task Parameter_collection_of_strings_Contains_string() + { + await base.Parameter_collection_of_strings_Contains_string(); + + AssertSql( + """ +@strings1='10' (Size = 255) +@strings2='999' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`String` IN (@strings1, @strings2) +""", + // + """ +@strings1='10' (Size = 255) +@strings2='999' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`String` NOT IN (@strings1, @strings2) +"""); + } + + public override async Task Parameter_collection_of_strings_Contains_nullable_string() + { + await base.Parameter_collection_of_strings_Contains_nullable_string(); + + AssertSql( + """ +@strings1='10' (Size = 255) +@strings2='999' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableString` IN (@strings1, @strings2) +""", + // + """ +@strings1='10' (Size = 255) +@strings2='999' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableString` NOT IN (@strings1, @strings2) OR `p`.`NullableString` IS NULL +"""); + } + + public override async Task Parameter_collection_of_nullable_strings_Contains_string() + { + await base.Parameter_collection_of_nullable_strings_Contains_string(); + + AssertSql( + """ +@strings1='10' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`String` = @strings1 +""", + // + """ +@strings1='10' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`String` <> @strings1 +"""); + } + + public override async Task Parameter_collection_of_nullable_strings_Contains_nullable_string() + { + await base.Parameter_collection_of_nullable_strings_Contains_nullable_string(); + + AssertSql( + """ +@strings1='999' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableString` IS NULL OR `p`.`NullableString` = @strings1 +""", + // + """ +@strings1='999' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableString` IS NOT NULL AND `p`.`NullableString` <> @strings1 +"""); + } + + public override async Task Parameter_collection_of_DateTimes_Contains() + { + await base.Parameter_collection_of_DateTimes_Contains(); + + AssertSql( + """ +@dateTimes1='2020-01-10T12:30:00.0000000Z' (DbType = DateTime) +@dateTimes2='9999-01-01T00:00:00.0000000Z' (DbType = DateTime) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`DateTime` IN (CDATE(@dateTimes1), CDATE(@dateTimes2)) +"""); + } + + public override async Task Parameter_collection_of_bools_Contains() + { + await base.Parameter_collection_of_bools_Contains(); + + AssertSql( + """ +@bools1='True' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Bool` = @bools1 +"""); + } + + public override async Task Parameter_collection_of_enums_Contains() + { + await base.Parameter_collection_of_enums_Contains(); + + AssertSql( + """ +@enums1='0' +@enums2='3' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Enum` IN (@enums1, @enums2) +"""); + } + + public override async Task Parameter_collection_null_Contains() + { + await base.Parameter_collection_null_Contains(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE FALSE +"""); + } + + public override async Task Parameter_collection_empty_Contains() + { + await base.Parameter_collection_empty_Contains(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE FALSE +"""); + } + + public override async Task Parameter_collection_empty_Join() + { + await base.Parameter_collection_empty_Join(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +INNER JOIN ( + SELECT CVar(NULL) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) + WHERE FALSE +) AS `p0` ON `p`.`Id` = IIF(`p0`.`Value` IS NULL, NULL, CLNG(`p0`.`Value`)) +"""); + } + + public override async Task Parameter_collection_Contains_with_EF_Constant() + { + await base.Parameter_collection_Contains_with_EF_Constant(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` IN (2, 999, 1000) +"""); + } + + public override async Task Parameter_collection_Where_with_EF_Constant_Where_Any() + { + await base.Parameter_collection_Where_with_EF_Constant_Where_Any(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE EXISTS ( + SELECT 1 + FROM (SELECT CLNG(2) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_0` + UNION + SELECT 999 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_1` + UNION + SELECT 1000 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_2`) AS `i` + WHERE `i`.`Value` > 0) +"""); + } + + public override async Task Parameter_collection_Count_with_column_predicate_with_EF_Constant() + { + await base.Parameter_collection_Count_with_column_predicate_with_EF_Constant(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT COUNT(*) + FROM (SELECT CLNG(2) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_0` + UNION + SELECT 999 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_1` + UNION + SELECT 1000 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_2`) AS `i` + WHERE `i`.`Value` > `p`.`Id`) = 2 +"""); + } + + [ConditionalFact(Skip = "Crashes - too large")] + public override async Task Parameter_collection_Count_with_huge_number_of_values() + { + await base.Parameter_collection_Count_with_huge_number_of_values(); + + Assert.Contains("VALUES", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal); + } + + public override async Task Parameter_collection_Count_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping() + { + await base.Parameter_collection_Count_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping(); + } + + public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations() + { + await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations(); + } + + public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations_forced_constants() + { + await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations_forced_constants(); + } + + public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations_mixed_parameters_constants() + { + await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations_mixed_parameters_constants(); + } + + public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations_same_parameter() + { + await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations_same_parameter(); + } + + public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations() + { + await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations(); + } + + public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_same_parameter() + { + await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_same_parameter(); + + Assert.Contains("@ints1=", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal); + Assert.Contains("@ints2=", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal); + Assert.Contains("@ints1=", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal); + Assert.Contains("@ints2=", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal); + } + + public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping() + { + await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping(); + + Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal); + Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal); + } + + public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_forced_constants() + { + await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_forced_constants(); + } + + public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_mixed_parameters_constants() + { + await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_mixed_parameters_constants(); + + Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal); + Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal); + } + + public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values() + { + await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values(); + + Assert.DoesNotContain("OPENJSON", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal); + Assert.DoesNotContain("OPENJSON", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal); + } + + /*public override async Task Static_readonly_collection_List_of_ints_Contains_int() + { + await base.Static_readonly_collection_List_of_ints_Contains_int(); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[NullableWrappedId], [p].[NullableWrappedIdWithNullableComparer], [p].[String], [p].[Strings], [p].[WrappedId] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE [p].[Int] IN (10, 999) +""", + // + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[NullableWrappedId], [p].[NullableWrappedIdWithNullableComparer], [p].[String], [p].[Strings], [p].[WrappedId] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE [p].[Int] NOT IN (10, 999) +"""); + } + + public override async Task Static_readonly_collection_FrozenSet_of_ints_Contains_int() + { + await base.Static_readonly_collection_FrozenSet_of_ints_Contains_int(); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[NullableWrappedId], [p].[NullableWrappedIdWithNullableComparer], [p].[String], [p].[Strings], [p].[WrappedId] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE [p].[Int] IN (10, 999) +""", + // + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[NullableWrappedId], [p].[NullableWrappedIdWithNullableComparer], [p].[String], [p].[Strings], [p].[WrappedId] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE [p].[Int] NOT IN (10, 999) +"""); + } + + public override async Task Static_readonly_collection_ImmutableArray_of_ints_Contains_int() + { + await base.Static_readonly_collection_ImmutableArray_of_ints_Contains_int(); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[NullableWrappedId], [p].[NullableWrappedIdWithNullableComparer], [p].[String], [p].[Strings], [p].[WrappedId] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE [p].[Int] IN (10, 999) +""", + // + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[NullableWrappedId], [p].[NullableWrappedIdWithNullableComparer], [p].[String], [p].[Strings], [p].[WrappedId] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE [p].[Int] NOT IN (10, 999) +"""); + }*/ + + public override Task Column_collection_of_ints_Contains() + => AssertTranslationFailedWithDetails(() => base.Column_collection_of_ints_Contains(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_of_nullable_ints_Contains() + => AssertTranslationFailed(() => base.Column_collection_of_nullable_ints_Contains()); + + public override Task Column_collection_of_nullable_ints_Contains_null() + => AssertTranslationFailed(() => base.Column_collection_of_nullable_ints_Contains_null()); + + public override Task Column_collection_of_strings_contains_null() + => AssertTranslationFailed(() => base.Column_collection_of_strings_contains_null()); + + public override Task Column_collection_of_nullable_strings_contains_null() + => AssertTranslationFailed(() => base.Column_collection_of_strings_contains_null()); + + public override Task Column_collection_of_bools_Contains() + => AssertTranslationFailedWithDetails(() => base.Column_collection_of_bools_Contains(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + [ConditionalFact] + public virtual async Task Json_representation_of_bool_array() + { + await using var context = CreateContext(); + + Assert.Equal( + "[true,false]", + await context.Database.SqlQuery($"SELECT [Bools] AS [Value] FROM [PrimitiveCollectionsEntity] WHERE [Id] = 1").SingleAsync()); + } + + public override async Task Contains_on_Enumerable() + { + await base.Contains_on_Enumerable(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (10, 999) +"""); + } + + public override async Task Contains_on_MemoryExtensions() + { + await base.Contains_on_MemoryExtensions(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (10, 999) +"""); + } + + public override async Task Contains_with_MemoryExtensions_with_null_comparer() + { + await base.Contains_with_MemoryExtensions_with_null_comparer(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (10, 999) +"""); + } + + public override Task Column_collection_Count_method() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Count_method(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Length() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Length(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + public override Task Column_collection_Count_with_predicate() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Count_with_predicate(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Where_Count() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Where_Count(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_index_int() + => AssertTranslationFailedWithDetails(() => base.Column_collection_index_int(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_index_string() + => AssertTranslationFailedWithDetails(() => base.Column_collection_index_string(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_index_datetime() + => AssertTranslationFailedWithDetails(() => base.Column_collection_index_datetime(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_index_beyond_end() + => AssertTranslationFailedWithDetails(() => base.Column_collection_index_beyond_end(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Nullable_reference_column_collection_index_equals_nullable_column() + => AssertTranslationFailedWithDetails(() => base.Column_collection_index_beyond_end(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Non_nullable_reference_column_collection_index_equals_nullable_column() + => AssertTranslationFailedWithDetails(() => base.Column_collection_index_beyond_end(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override async Task Inline_collection_index_Column() + { + await base.Inline_collection_index_Column(); + + AssertSql( +""" +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT [v].[Value] + FROM (VALUES (0, CAST(1 AS int)), (1, 2), (2, 3)) AS [v]([_ord], [Value]) + ORDER BY [v].[_ord] + OFFSET [p].[Int] ROWS FETCH NEXT 1 ROWS ONLY) = 1 +"""); + } + + public override async Task Inline_collection_index_Column_with_EF_Constant() + { + await base.Inline_collection_index_Column_with_EF_Constant(); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[NullableWrappedId], [p].[NullableWrappedIdWithNullableComparer], [p].[String], [p].[Strings], [p].[WrappedId] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT [i].[Value] + FROM (VALUES (0, CAST(1 AS int)), (1, 2), (2, 3)) AS [i]([_ord], [Value]) + ORDER BY [i].[_ord] + OFFSET [p].[Int] ROWS FETCH NEXT 1 ROWS ONLY) = 1 +"""); + } + + public override async Task Inline_collection_value_index_Column() + { + await base.Inline_collection_value_index_Column(); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT [v].[Value] + FROM (VALUES (0, CAST(1 AS int)), (1, [p].[Int]), (2, 3)) AS [v]([_ord], [Value]) + ORDER BY [v].[_ord] + OFFSET [p].[Int] ROWS FETCH NEXT 1 ROWS ONLY) = 1 +"""); + } + + public override async Task Inline_collection_List_value_index_Column() + { + await base.Inline_collection_List_value_index_Column(); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT [v].[Value] + FROM (VALUES (0, CAST(1 AS int)), (1, [p].[Int]), (2, 3)) AS [v]([_ord], [Value]) + ORDER BY [v].[_ord] + OFFSET [p].[Int] ROWS FETCH NEXT 1 ROWS ONLY) = 1 +"""); + } + + public override async Task Parameter_collection_index_Column_equal_Column() + { + await base.Parameter_collection_index_Column_equal_Column(); + } + + public override async Task Parameter_collection_index_Column_equal_constant() + { + await base.Parameter_collection_index_Column_equal_constant(); + } + + public override Task Column_collection_ElementAt() + => AssertTranslationFailedWithDetails(() => base.Column_collection_ElementAt(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_First() + => AssertTranslationFailedWithDetails(() => base.Column_collection_First(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_FirstOrDefault() + => AssertTranslationFailedWithDetails(() => base.Column_collection_FirstOrDefault(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Single() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Single(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_SingleOrDefault() + => AssertTranslationFailedWithDetails(() => base.Column_collection_SingleOrDefault(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Skip() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Skip(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Take() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Take(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Skip_Take() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Skip_Take(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Where_Skip() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Where_Skip(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Where_Take() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Where_Take(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Where_Skip_Take() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Where_Skip_Take(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Contains_over_subquery() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Skip_Take(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_OrderByDescending_ElementAt() + => AssertTranslationFailed(() => base.Column_collection_OrderByDescending_ElementAt()); + + public override Task Column_collection_Where_ElementAt() + => AssertTranslationFailed(() => base.Column_collection_Where_ElementAt()); + + public override Task Column_collection_Any() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Any(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Distinct() + => AssertTranslationFailed(() => base.Column_collection_Distinct()); + + public override Task Column_collection_SelectMany() + => AssertTranslationFailed(() => base.Column_collection_SelectMany()); + + public override Task Column_collection_SelectMany_with_filter() + => AssertTranslationFailed(() => base.Column_collection_SelectMany_with_filter()); + + public override Task Column_collection_SelectMany_with_Select_to_anonymous_type() + => AssertTranslationFailed(() => base.Column_collection_SelectMany_with_Select_to_anonymous_type()); + + public override async Task Column_collection_projection_from_top_level() + { + await base.Column_collection_projection_from_top_level(); + + AssertSql( + """ +SELECT `p`.`Ints` +FROM `PrimitiveCollectionsEntity` AS `p` +ORDER BY `p`.`Id` +"""); + } + + public override Task Column_collection_Join_parameter_collection() + => AssertTranslationFailed(() => base.Column_collection_Join_parameter_collection()); + + public override Task Inline_collection_Join_ordered_column_collection() + => AssertTranslationFailedWithDetails(() => base.Inline_collection_Join_ordered_column_collection(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Parameter_collection_Concat_column_collection() + => AssertTranslationFailedWithDetails(() => base.Parameter_collection_Concat_column_collection(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Parameter_collection_with_type_inference_for_JsonScalarExpression() + => AssertTranslationFailed(() => base.Parameter_collection_Concat_column_collection()); + + public override Task Column_collection_Union_parameter_collection() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Union_parameter_collection(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Intersect_inline_collection() + => AssertTranslationFailedWithDetails(() => base.Column_collection_Intersect_inline_collection(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Inline_collection_Except_column_collection() + => AssertTranslationFailedWithDetails(() => base.Inline_collection_Except_column_collection(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Where_Union() + => AssertTranslationFailedWithDetails(() => base.Inline_collection_Except_column_collection(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override async Task Column_collection_equality_parameter_collection() + { + await base.Column_collection_equality_parameter_collection(); + + AssertSql( + """ +@ints='[1,10]' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Ints` = @ints +"""); + } + + public override async Task Column_collection_Concat_parameter_collection_equality_inline_collection() + { + await base.Column_collection_Concat_parameter_collection_equality_inline_collection(); + + AssertSql(); + } + + public override async Task Column_collection_equality_inline_collection() + { + await base.Column_collection_equality_inline_collection(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Ints` = '[1,10]' +"""); + } + + public override async Task Column_collection_equality_inline_collection_with_parameters() + { + await base.Column_collection_equality_inline_collection_with_parameters(); + + AssertSql(); + } + + public override async Task Column_collection_Where_equality_inline_collection() + { + await base.Column_collection_Where_equality_inline_collection(); + + AssertSql(); + } + + public override Task Parameter_collection_in_subquery_Union_column_collection_as_compiled_query() + => AssertTranslationFailedWithDetails(() => base.Parameter_collection_in_subquery_Union_column_collection_as_compiled_query(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Parameter_collection_in_subquery_Union_column_collection() + => AssertTranslationFailedWithDetails(() => base.Parameter_collection_in_subquery_Union_column_collection(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Parameter_collection_in_subquery_Union_column_collection_nested() + => AssertTranslationFailedWithDetails(() => base.Parameter_collection_in_subquery_Union_column_collection_nested(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override void Parameter_collection_in_subquery_and_Convert_as_compiled_query() + { + // Base implementation asserts that a different exception is thrown + } + + public override async Task Parameter_collection_in_subquery_Count_as_compiled_query() + { + await base.Parameter_collection_in_subquery_Count_as_compiled_query(); + + AssertSql(); + } + + public override Task Column_collection_in_subquery_Union_parameter_collection() + => AssertTranslationFailedWithDetails(() => base.Column_collection_in_subquery_Union_parameter_collection(), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override async Task Parameter_collection_in_subquery_Union_another_parameter_collection_as_compiled_query() + { + await base.Parameter_collection_in_subquery_Union_another_parameter_collection_as_compiled_query(); + + AssertSql(); + } + + public override async Task Project_collection_of_ints_simple() + { + await base.Project_collection_of_ints_simple(); + + AssertSql( + """ +SELECT `p`.`Ints` +FROM `PrimitiveCollectionsEntity` AS `p` +ORDER BY `p`.`Id` +"""); + } + + public override Task Project_collection_of_ints_ordered() + // we don't propagate error details from projection + => AssertTranslationFailed(() => base.Project_collection_of_ints_ordered()); + + public override Task Project_collection_of_datetimes_filtered() + // we don't propagate error details from projection + => AssertTranslationFailed(() => base.Project_collection_of_datetimes_filtered()); + + public override async Task Project_collection_of_nullable_ints_with_paging() + { + await base.Project_collection_of_nullable_ints_with_paging(); + + // client eval + AssertSql( + """ +SELECT `p`.`NullableInts` +FROM `PrimitiveCollectionsEntity` AS `p` +ORDER BY `p`.`Id` +"""); + } + + public override Task Project_collection_of_nullable_ints_with_paging2() + // we don't propagate error details from projection + => AssertTranslationFailed(() => base.Project_collection_of_nullable_ints_with_paging2()); + + public override async Task Project_collection_of_nullable_ints_with_paging3() + { + await base.Project_collection_of_nullable_ints_with_paging3(); + + // client eval + AssertSql( + """ +SELECT `p`.`NullableInts` +FROM `PrimitiveCollectionsEntity` AS `p` +ORDER BY `p`.`Id` +"""); + } + + public override async Task Project_collection_of_ints_with_distinct() + { + await base.Project_collection_of_ints_with_distinct(); + + // client eval + AssertSql( + """ +SELECT `p`.`Ints` +FROM `PrimitiveCollectionsEntity` AS `p` +ORDER BY `p`.`Id` +"""); + } + + public override async Task Project_collection_of_nullable_ints_with_distinct() + { + await base.Project_collection_of_nullable_ints_with_distinct(); + + AssertSql(""); + } + + public override async Task Project_collection_of_ints_with_ToList_and_FirstOrDefault() + { + await base.Project_collection_of_ints_with_ToList_and_FirstOrDefault(); + + AssertSql( + """ +SELECT TOP 1 `p`.`Ints` +FROM `PrimitiveCollectionsEntity` AS `p` +ORDER BY `p`.`Id` +"""); + } + + public override Task Project_multiple_collections() + // we don't propagate error details from projection + => AssertTranslationFailed(() => base.Project_multiple_collections()); + + public override Task Project_empty_collection_of_nullables_and_collection_only_containing_nulls() + // we don't propagate error details from projection + => AssertTranslationFailed(() => base.Project_empty_collection_of_nullables_and_collection_only_containing_nulls()); + + public override async Task Project_primitive_collections_element() + { + await base.Project_primitive_collections_element(); + + AssertSql( + """ +SELECT `p`.`Ints`, `p`.`DateTimes`, `p`.`Strings` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Id` < 4 +ORDER BY `p`.`Id` +"""); + } + + public override async Task Project_inline_collection() + { + await base.Project_inline_collection(); + + AssertSql( + """ +SELECT `p`.`String` +FROM `PrimitiveCollectionsEntity` AS `p` +"""); + } + + public override async Task Project_inline_collection_with_Union() + { + await base.Project_inline_collection_with_Union(); + + AssertSql( + """ +SELECT [p].[Id], [u].[Value] +FROM [PrimitiveCollectionsEntity] AS [p] +OUTER APPLY ( + SELECT [v].[Value] + FROM (VALUES ([p].[String])) AS [v]([Value]) + UNION + SELECT [p0].[String] AS [Value] + FROM [PrimitiveCollectionsEntity] AS [p0] +) AS [u] +ORDER BY [p].[Id] +"""); + } + + public override async Task Project_inline_collection_with_Concat() + { + await base.Project_inline_collection_with_Concat(); + + AssertSql(); + } + + public override async Task Nested_contains_with_Lists_and_no_inferred_type_mapping() + { + await base.Nested_contains_with_Lists_and_no_inferred_type_mapping(); + + AssertSql( + """ +@ints1='1' +@ints2='2' +@ints3='3' +@strings1='one' (Size = 255) +@strings2='two' (Size = 255) +@strings3='three' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE IIF(`p`.`Int` IN (@ints1, @ints2, @ints3), 'one', 'two') IN (@strings1, @strings2, @strings3) +"""); + } + + public override async Task Nested_contains_with_arrays_and_no_inferred_type_mapping() + { + await base.Nested_contains_with_arrays_and_no_inferred_type_mapping(); + + AssertSql( + """ +@ints1='1' +@ints2='2' +@ints3='3' +@strings1='one' (Size = 255) +@strings2='two' (Size = 255) +@strings3='three' (Size = 255) + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE IIF(`p`.`Int` IN (@ints1, @ints2, @ints3), 'one', 'two') IN (@strings1, @strings2, @strings3) +"""); + } + + public override async Task Parameter_collection_of_structs_Contains_struct() + { + await base.Parameter_collection_of_structs_Contains_struct(); + + AssertSql( + """ +@values1='22' +@values2='33' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`WrappedId` IN (@values1, @values2) +""", + // + """ +@values1='11' +@values2='44' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`WrappedId` NOT IN (@values1, @values2) +"""); + } + + public override async Task Parameter_collection_of_structs_Contains_nullable_struct() + { + await base.Parameter_collection_of_structs_Contains_nullable_struct(); + + AssertSql( + """ +@values1='22' +@values2='33' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableWrappedId` IN (@values1, @values2) +""", + // + """ +@values1='11' +@values2='44' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableWrappedId` NOT IN (@values1, @values2) OR `p`.`NullableWrappedId` IS NULL +"""); + } + + public override async Task Parameter_collection_of_structs_Contains_nullable_struct_with_nullable_comparer() + { + await base.Parameter_collection_of_structs_Contains_nullable_struct_with_nullable_comparer(); + + AssertSql( + """ +@values1='22' +@values2='33' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableWrappedIdWithNullableComparer` IN (@values1, @values2) +""", + // + """ +@values1='11' +@values2='44' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableWrappedId` NOT IN (@values1, @values2) OR `p`.`NullableWrappedId` IS NULL +"""); + } + + public override async Task Parameter_collection_of_nullable_structs_Contains_struct() + { + await base.Parameter_collection_of_nullable_structs_Contains_struct(); + + AssertSql( + """ +@values1='22' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`WrappedId` = @values1 +""", + // + """ +@values1='11' +@values2='44' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`WrappedId` NOT IN (@values1, @values2) +"""); + } + + public override async Task Parameter_collection_of_nullable_structs_Contains_nullable_struct() + { + await base.Parameter_collection_of_nullable_structs_Contains_nullable_struct(); + + AssertSql( + """ +@values1='22' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableWrappedId` IS NULL OR `p`.`NullableWrappedId` = @values1 +""", + // + """ +@values1='11' +@values2='44' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableWrappedId` NOT IN (@values1, @values2) OR `p`.`NullableWrappedId` IS NULL +"""); + } + + public override async Task Parameter_collection_of_nullable_structs_Contains_nullable_struct_with_nullable_comparer() + { + await base.Parameter_collection_of_nullable_structs_Contains_nullable_struct_with_nullable_comparer(); + + AssertSql( + """ +@values1='22' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableWrappedIdWithNullableComparer` IS NULL OR `p`.`NullableWrappedIdWithNullableComparer` = @values1 +""", + // + """ +@values1='11' +@values2='44' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`NullableWrappedIdWithNullableComparer` NOT IN (@values1, @values2) OR `p`.`NullableWrappedIdWithNullableComparer` IS NULL +"""); + } + + public override async Task Values_of_enum_casted_to_underlying_value() + { + await base.Values_of_enum_casted_to_underlying_value(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`NullableWrappedId`, `p`.`NullableWrappedIdWithNullableComparer`, `p`.`String`, `p`.`Strings`, `p`.`WrappedId` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE ( + SELECT COUNT(*) + FROM (SELECT CLNG(0) AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0` + UNION + SELECT 1 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_1` + UNION + SELECT 2 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_2` + UNION + SELECT 3 AS `Value` + FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_3`) AS `v` + WHERE `v`.`Value` = `p`.`Int`) > 0 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + private PrimitiveCollectionsContext CreateContext() + => Fixture.CreateContext(); + + public class PrimitiveCollectionsQueryLibRedFixture : PrimitiveCollectionsQueryFixtureBase, ITestSqlLoggerFactory + { + protected override string StoreName + => "PrimitiveCollectionsTest"; + + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/QueryFilterFuncletizationLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/QueryFilterFuncletizationLibRedTest.cs new file mode 100644 index 00000000..ad1b41ec --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/QueryFilterFuncletizationLibRedTest.cs @@ -0,0 +1,542 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class QueryFilterFuncletizationLibRedTest + : QueryFilterFuncletizationTestBase + { + public QueryFilterFuncletizationLibRedTest( + QueryFilterFuncletizationLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + //Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override void DbContext_property_parameter_does_not_clash_with_closure_parameter_name() + { + base.DbContext_property_parameter_does_not_clash_with_closure_parameter_name(); + + AssertSql( + """ +@ef_filter__Field='False' +@Field='False' + +SELECT `f`.`Id`, `f`.`IsEnabled` +FROM `FieldFilter` AS `f` +WHERE `f`.`IsEnabled` = @ef_filter__Field AND `f`.`IsEnabled` = @Field +"""); + } + + public override void DbContext_field_is_parameterized() + { + base.DbContext_field_is_parameterized(); + + AssertSql( + """ +@ef_filter__Field='False' + +SELECT `f`.`Id`, `f`.`IsEnabled` +FROM `FieldFilter` AS `f` +WHERE `f`.`IsEnabled` = @ef_filter__Field +""", + // + """ +@ef_filter__Field='True' + +SELECT `f`.`Id`, `f`.`IsEnabled` +FROM `FieldFilter` AS `f` +WHERE `f`.`IsEnabled` = @ef_filter__Field +"""); + } + + public override void DbContext_property_is_parameterized() + { + base.DbContext_property_is_parameterized(); + + AssertSql( + """ +@ef_filter__Property='False' + +SELECT `p`.`Id`, `p`.`IsEnabled` +FROM `PropertyFilter` AS `p` +WHERE `p`.`IsEnabled` = @ef_filter__Property +""", + // + """ +@ef_filter__Property='True' + +SELECT `p`.`Id`, `p`.`IsEnabled` +FROM `PropertyFilter` AS `p` +WHERE `p`.`IsEnabled` = @ef_filter__Property +"""); + } + + public override void DbContext_method_call_is_parameterized() + { + base.DbContext_method_call_is_parameterized(); + + AssertSql( + """ +@ef_filter__p='2' + +SELECT `m`.`Id`, `m`.`Tenant` +FROM `MethodCallFilter` AS `m` +WHERE `m`.`Tenant` = @ef_filter__p +"""); + } + + public override void DbContext_list_is_parameterized() + { + base.DbContext_list_is_parameterized(); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Tenant` +FROM `ListFilter` AS `l` +WHERE FALSE +""", + // + """ +SELECT `l`.`Id`, `l`.`Tenant` +FROM `ListFilter` AS `l` +WHERE FALSE +""", + // + """ +@ef_filter__TenantIds1='1' + +SELECT `l`.`Id`, `l`.`Tenant` +FROM `ListFilter` AS `l` +WHERE `l`.`Tenant` = @ef_filter__TenantIds1 +""", + // + """ +@ef_filter__TenantIds1='2' +@ef_filter__TenantIds2='3' + +SELECT `l`.`Id`, `l`.`Tenant` +FROM `ListFilter` AS `l` +WHERE `l`.`Tenant` IN (@ef_filter__TenantIds1, @ef_filter__TenantIds2) +"""); + } + + public override void DbContext_property_chain_is_parameterized() + { + base.DbContext_property_chain_is_parameterized(); + + AssertSql( + """ +@ef_filter__Enabled='False' + +SELECT `p`.`Id`, `p`.`IsEnabled` +FROM `PropertyChainFilter` AS `p` +WHERE `p`.`IsEnabled` = @ef_filter__Enabled +""", + // + """ +@ef_filter__Enabled='True' + +SELECT `p`.`Id`, `p`.`IsEnabled` +FROM `PropertyChainFilter` AS `p` +WHERE `p`.`IsEnabled` = @ef_filter__Enabled +"""); + } + + public override void DbContext_property_method_call_is_parameterized() + { + base.DbContext_property_method_call_is_parameterized(); + + AssertSql( + """ +@ef_filter__p='2' + +SELECT `p`.`Id`, `p`.`Tenant` +FROM `PropertyMethodCallFilter` AS `p` +WHERE `p`.`Tenant` = @ef_filter__p +"""); + } + + public override void DbContext_method_call_chain_is_parameterized() + { + base.DbContext_method_call_chain_is_parameterized(); + + AssertSql( + """ +@ef_filter__p='2' + +SELECT `m`.`Id`, `m`.`Tenant` +FROM `MethodCallChainFilter` AS `m` +WHERE `m`.`Tenant` = @ef_filter__p +"""); + } + + public override void DbContext_complex_expression_is_parameterized() + { + base.DbContext_complex_expression_is_parameterized(); + + AssertSql( + """ +@ef_filter__Property='False' +@ef_filter__p2='True' + +SELECT `c`.`Id`, `c`.`IsEnabled` +FROM `ComplexFilter` AS `c` +WHERE `c`.`IsEnabled` = @ef_filter__Property AND @ef_filter__p2 +""", + // + """ +@ef_filter__Property='True' +@ef_filter__p2='True' + +SELECT `c`.`Id`, `c`.`IsEnabled` +FROM `ComplexFilter` AS `c` +WHERE `c`.`IsEnabled` = @ef_filter__Property AND @ef_filter__p2 +""", + // + """ +@ef_filter__Property='True' +@ef_filter__p2='False' + +SELECT `c`.`Id`, `c`.`IsEnabled` +FROM `ComplexFilter` AS `c` +WHERE `c`.`IsEnabled` = @ef_filter__Property AND @ef_filter__p2 +"""); + } + + public override void DbContext_property_based_filter_does_not_short_circuit() + { + base.DbContext_property_based_filter_does_not_short_circuit(); + + AssertSql( + """ +@ef_filter__p2='False' +@ef_filter__IsModerated='True' (Nullable = true) + +SELECT `s`.`Id`, `s`.`IsDeleted`, `s`.`IsModerated` +FROM `ShortCircuitFilter` AS `s` +WHERE NOT (`s`.`IsDeleted`) AND (@ef_filter__p2 OR @ef_filter__IsModerated = `s`.`IsModerated`) +""", + // + """ +@ef_filter__p2='False' +@ef_filter__IsModerated='False' (Nullable = true) + +SELECT `s`.`Id`, `s`.`IsDeleted`, `s`.`IsModerated` +FROM `ShortCircuitFilter` AS `s` +WHERE NOT (`s`.`IsDeleted`) AND (@ef_filter__p2 OR @ef_filter__IsModerated = `s`.`IsModerated`) +""", + // + """ +@ef_filter__p2='True' + +SELECT `s`.`Id`, `s`.`IsDeleted`, `s`.`IsModerated` +FROM `ShortCircuitFilter` AS `s` +WHERE NOT (`s`.`IsDeleted`) AND @ef_filter__p2 +"""); + } + + public override void EntityTypeConfiguration_DbContext_field_is_parameterized() + { + base.EntityTypeConfiguration_DbContext_field_is_parameterized(); + + AssertSql( + """ +@ef_filter__Field='False' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `EntityTypeConfigurationFieldFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Field +""", + // + """ +@ef_filter__Field='True' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `EntityTypeConfigurationFieldFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Field +"""); + } + + public override void EntityTypeConfiguration_DbContext_property_is_parameterized() + { + base.EntityTypeConfiguration_DbContext_property_is_parameterized(); + + AssertSql( + """ +@ef_filter__Property='False' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `EntityTypeConfigurationPropertyFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Property +""", + // + """ +@ef_filter__Property='True' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `EntityTypeConfigurationPropertyFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Property +"""); + } + + public override void EntityTypeConfiguration_DbContext_method_call_is_parameterized() + { + base.EntityTypeConfiguration_DbContext_method_call_is_parameterized(); + + AssertSql( + """ +@ef_filter__p='2' + +SELECT `e`.`Id`, `e`.`Tenant` +FROM `EntityTypeConfigurationMethodCallFilter` AS `e` +WHERE `e`.`Tenant` = @ef_filter__p +"""); + } + + public override void EntityTypeConfiguration_DbContext_property_chain_is_parameterized() + { + base.EntityTypeConfiguration_DbContext_property_chain_is_parameterized(); + + AssertSql( + """ +@ef_filter__Enabled='False' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `EntityTypeConfigurationPropertyChainFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Enabled +""", + // + """ +@ef_filter__Enabled='True' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `EntityTypeConfigurationPropertyChainFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Enabled +"""); + } + + public override void Local_method_DbContext_field_is_parameterized() + { + base.Local_method_DbContext_field_is_parameterized(); + + AssertSql( + """ +@ef_filter__Field='False' + +SELECT `l`.`Id`, `l`.`IsEnabled` +FROM `LocalMethodFilter` AS `l` +WHERE `l`.`IsEnabled` = @ef_filter__Field +""", + // + """ +@ef_filter__Field='True' + +SELECT `l`.`Id`, `l`.`IsEnabled` +FROM `LocalMethodFilter` AS `l` +WHERE `l`.`IsEnabled` = @ef_filter__Field +"""); + } + + public override void Local_static_method_DbContext_property_is_parameterized() + { + base.Local_static_method_DbContext_property_is_parameterized(); + + AssertSql( + """ +@ef_filter__Property='False' + +SELECT `l`.`Id`, `l`.`IsEnabled` +FROM `LocalMethodParamsFilter` AS `l` +WHERE `l`.`IsEnabled` = @ef_filter__Property +""", + // + """ +@ef_filter__Property='True' + +SELECT `l`.`Id`, `l`.`IsEnabled` +FROM `LocalMethodParamsFilter` AS `l` +WHERE `l`.`IsEnabled` = @ef_filter__Property +"""); + } + + public override void Remote_method_DbContext_property_method_call_is_parameterized() + { + base.Remote_method_DbContext_property_method_call_is_parameterized(); + + AssertSql( + """ +@ef_filter__p='2' + +SELECT `r`.`Id`, `r`.`Tenant` +FROM `RemoteMethodParamsFilter` AS `r` +WHERE `r`.`Tenant` = @ef_filter__p +"""); + } + + public override void Extension_method_DbContext_field_is_parameterized() + { + base.Extension_method_DbContext_field_is_parameterized(); + + AssertSql( + """ +@ef_filter__Field='False' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `ExtensionBuilderFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Field +""", + // + """ +@ef_filter__Field='True' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `ExtensionBuilderFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Field +"""); + } + + public override void Extension_method_DbContext_property_chain_is_parameterized() + { + base.Extension_method_DbContext_property_chain_is_parameterized(); + + AssertSql( + """ +@ef_filter__Enabled='False' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `ExtensionContextFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Enabled +""", + // + """ +@ef_filter__Enabled='True' + +SELECT `e`.`Id`, `e`.`IsEnabled` +FROM `ExtensionContextFilter` AS `e` +WHERE `e`.`IsEnabled` = @ef_filter__Enabled +"""); + } + + public override void Using_DbSet_in_filter_works() + { + base.Using_DbSet_in_filter_works(); + + AssertSql( + """ +@ef_filter__Property='False' + +SELECT `p`.`Id`, `p`.`Filler` +FROM `PrincipalSetFilter` AS `p` +WHERE EXISTS ( + SELECT 1 + FROM `Dependents` AS `d` + WHERE EXISTS ( + SELECT 1 + FROM `MultiContextFilter` AS `m` + WHERE `m`.`IsEnabled` = @ef_filter__Property AND `m`.`BossId` = 1 AND `m`.`BossId` = `d`.`PrincipalSetFilterId`) AND `d`.`PrincipalSetFilterId` = `p`.`Id`) +"""); + } + + public override void Using_Context_set_method_in_filter_works() + { + base.Using_Context_set_method_in_filter_works(); + + AssertSql( + """ +@ef_filter__Property='False' + +SELECT `d`.`Id`, `d`.`PrincipalSetFilterId` +FROM `Dependents` AS `d` +WHERE EXISTS ( + SELECT 1 + FROM `MultiContextFilter` AS `m` + WHERE `m`.`IsEnabled` = @ef_filter__Property AND `m`.`BossId` = 1 AND `m`.`BossId` = `d`.`PrincipalSetFilterId`) +"""); + } + + public override void Static_member_from_dbContext_is_inlined() + { + base.Static_member_from_dbContext_is_inlined(); + + AssertSql( + $""" + SELECT `d`.`Id`, `d`.`UserId` + FROM `DbContextStaticMemberFilter` AS `d` + WHERE `d`.`UserId` <> 1 + """); + } + + public override void Static_member_from_non_dbContext_is_inlined() + { + base.Static_member_from_non_dbContext_is_inlined(); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`IsEnabled` +FROM `StaticMemberFilter` AS `s` +WHERE `s`.`IsEnabled` +"""); + } + + public override void Local_variable_from_OnModelCreating_is_inlined() + { + base.Local_variable_from_OnModelCreating_is_inlined(); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`IsEnabled` +FROM `LocalVariableFilter` AS `l` +WHERE `l`.`IsEnabled` +"""); + } + + public override void Method_parameter_is_inlined() + { + base.Method_parameter_is_inlined(); + + AssertSql( + $""" + SELECT `p`.`Id`, `p`.`Tenant` + FROM `ParameterFilter` AS `p` + WHERE `p`.`Tenant` = 0 + """); + } + + public override void Using_multiple_context_in_filter_parametrize_only_current_context() + { + base.Using_multiple_context_in_filter_parametrize_only_current_context(); + + AssertSql( + """ +@ef_filter__Property='False' + +SELECT `m`.`Id`, `m`.`BossId`, `m`.`IsEnabled` +FROM `MultiContextFilter` AS `m` +WHERE `m`.`IsEnabled` = @ef_filter__Property AND `m`.`BossId` = 1 +""", + // + """ +@ef_filter__Property='True' + +SELECT `m`.`Id`, `m`.`BossId`, `m`.`IsEnabled` +FROM `MultiContextFilter` AS `m` +WHERE `m`.`IsEnabled` = @ef_filter__Property AND `m`.`BossId` = 1 +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class QueryFilterFuncletizationLibRedFixture : QueryFilterFuncletizationRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/QueryLoggingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/QueryLoggingLibRedTest.cs new file mode 100644 index 00000000..131a76ad --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/QueryLoggingLibRedTest.cs @@ -0,0 +1,200 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Diagnostics.Internal; +using System; +using System.Linq; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using EntityFrameworkCore.LibRed.FunctionalTests.TestModels.Northwind; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class QueryLoggingLibRedTest : IClassFixture> + { + private static readonly string _eol = Environment.NewLine; + + public QueryLoggingLibRedTest(NorthwindQueryLibRedFixture fixture) + { + Fixture = fixture; + Fixture.TestSqlLoggerFactory.Clear(); + } + + protected NorthwindQueryLibRedFixture Fixture { get; } + + [ConditionalFact] + public virtual void Queryable_simple() + { + using var context = CreateContext(); + var customers + = context.Set() + .ToList(); + + Assert.NotNull(customers); + + Assert.StartsWith( + "Compiling query expression: ", + Fixture.TestSqlLoggerFactory.Log[0].Message); + Assert.StartsWith( + "Generated query execution expression: " + Environment.NewLine + "'queryContext => SingleQueryingEnumerable.Create(", + Fixture.TestSqlLoggerFactory.Log[1].Message); + } + + [ConditionalFact] + public virtual void Queryable_simple_split() + { + using var context = CreateContext(); + var customers + = context.Set().AsSplitQuery() + .ToList(); + + Assert.NotNull(customers); + Assert.StartsWith( + "Generated query execution expression: " + Environment.NewLine + "'queryContext => SplitQueryingEnumerable.Create(", + Fixture.TestSqlLoggerFactory.Log[1].Message); + } + + [ConditionalFact] + public virtual void Queryable_with_parameter_outputs_parameter_value_logging_warning() + { + using var context = CreateContext(); + context.GetInfrastructure().GetRequiredService>() + .Options.IsSensitiveDataLoggingWarned = false; + // ReSharper disable once ConvertToConstant.Local + var city = "Redmond"; + + var customers + = context.Customers + .Where(c => c.City == city) + .ToList(); + + Assert.NotNull(customers); + Assert.Contains( + CoreResources.LogSensitiveDataLoggingEnabled(new TestLogger()).GenerateMessage(), + Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); + } + + [ConditionalFact] + public virtual void Include_navigation() + { + using var context = CreateContext(); + var customers + = context.Set() + .Where(c => c.CustomerID == "ALFKI") + .Include(c => c.Orders) + .ToList(); + + Assert.NotNull(customers); + + Assert.Equal( + "Including navigation: 'Customer.Orders'.", + Fixture.TestSqlLoggerFactory.Log[1].Message); + } + + [ConditionalFact] + public virtual void Skip_without_order_by() + { + using var context = CreateContext(); + var customers = context.Set().Skip(85).ToList(); + + Assert.NotNull(customers); + + Assert.Equal( + CoreResources.LogRowLimitingOperationWithoutOrderBy(new TestLogger()).GenerateMessage(), + Fixture.TestSqlLoggerFactory.Log[1].Message); + } + + [ConditionalFact] + public virtual void Take_without_order_by() + { + using var context = CreateContext(); + var customers = context.Set().Take(5).ToList(); + + Assert.NotNull(customers); + + Assert.Equal( + CoreResources.LogRowLimitingOperationWithoutOrderBy(new TestLogger()).GenerateMessage(), + Fixture.TestSqlLoggerFactory.Log[1].Message); + } + + [ConditionalFact] + public virtual void FirstOrDefault_without_filter_order_by() + { + using var context = CreateContext(); + var customer = context.Set().FirstOrDefault(); + + Assert.NotNull(customer); + + Assert.Equal( + CoreResources.LogFirstWithoutOrderByAndFilter(new TestLogger()).GenerateMessage(), + Fixture.TestSqlLoggerFactory.Log[1].Message); + } + + [ConditionalFact] + public virtual void Distinct_used_after_order_by() + { + using var context = CreateContext(); + var customers = context.Set().OrderBy(x => x.Address).Distinct().Take(5).ToList(); + + Assert.NotEmpty(customers); + + Assert.Equal( + CoreResources.LogDistinctAfterOrderByWithoutRowLimitingOperatorWarning(new TestLogger()) + .GenerateMessage(), + Fixture.TestSqlLoggerFactory.Log[1].Message); + } + + [ConditionalFact] + public virtual void Include_collection_does_not_generate_warning() + { + using var context = CreateContext(); + var customer = context.Set().Include(e => e.Orders).AsSplitQuery().Single(e => e.CustomerID == "ALFKI"); + + Assert.NotNull(customer); + Assert.Equal(6, customer.Orders.Count); + + Assert.DoesNotContain( + CoreResources.LogRowLimitingOperationWithoutOrderBy(new TestLogger()).GenerateMessage(), + Fixture.TestSqlLoggerFactory.Log.Select(e => e.Message)); + } + + [ConditionalFact] + public void SelectExpression_does_not_use_an_old_logger() + { + DbContextOptions CreateOptions(ListLoggerFactory listLoggerFactory) + { + var optionsBuilder = new DbContextOptionsBuilder(); + Fixture.TestStore.AddProviderOptions(optionsBuilder); + optionsBuilder.UseLoggerFactory(listLoggerFactory); + return optionsBuilder.Options; + } + + var loggerFactory1 = new ListLoggerFactory(); + + using (var context = new NorthwindLibRedContext(CreateOptions(loggerFactory1))) + { + var _ = context.Customers.ToList(); + } + + Assert.Equal(1, loggerFactory1.Log.Count(e => e.Id == RelationalEventId.CommandExecuted)); + + var loggerFactory2 = new ListLoggerFactory(); + + using (var context = new NorthwindLibRedContext(CreateOptions(loggerFactory2))) + { + var _ = context.Customers.ToList(); + } + + Assert.Equal(1, loggerFactory1.Log.Count(e => e.Id == RelationalEventId.CommandExecuted)); + Assert.Equal(1, loggerFactory2.Log.Count(e => e.Id == RelationalEventId.CommandExecuted)); + } + + protected NorthwindContext CreateContext() => Fixture.CreateContext(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/QueryNoClientEvalLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/QueryNoClientEvalLibRedTest.cs new file mode 100644 index 00000000..123a1d70 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/QueryNoClientEvalLibRedTest.cs @@ -0,0 +1,10 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class QueryNoClientEvalLibRedTest(NorthwindQueryLibRedFixture fixture) + : QueryNoClientEvalTestBase>(fixture); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/SharedTypeQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/SharedTypeQueryLibRedTest.cs new file mode 100644 index 00000000..b984958d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/SharedTypeQueryLibRedTest.cs @@ -0,0 +1,48 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class SharedTypeQueryLibRedTest(NonSharedFixture fixture) : SharedTypeQueryRelationalTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override async Task Can_use_shared_type_entity_type_in_query_filter(bool async) + { + await base.Can_use_shared_type_entity_type_in_query_filter(async); + + AssertSql( +""" +SELECT `v`.`Value` +FROM `ViewQuery24601` AS `v` +WHERE EXISTS ( + SELECT 1 + FROM `STET` AS `s` + WHERE `s`.`Value` = `v`.`Value` OR (`s`.`Value` IS NULL AND `v`.`Value` IS NULL)) +"""); + } + + public override async Task Can_use_shared_type_entity_type_in_query_filter_with_from_sql(bool async) + { + await base.Can_use_shared_type_entity_type_in_query_filter_with_from_sql(async); + + AssertSql( +""" +SELECT `v`.`Value` +FROM `ViewQuery24601` AS `v` +WHERE EXISTS ( + SELECT 1 + FROM ( + Select * from STET + ) AS `s` + WHERE `s`.`Value` = `v`.`Value` OR (`s`.`Value` IS NULL AND `v`.`Value` IS NULL)) +"""); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/SqlExecutorLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/SqlExecutorLibRedTest.cs new file mode 100644 index 00000000..cda9e710 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/SqlExecutorLibRedTest.cs @@ -0,0 +1,283 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Data.Common; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Xunit.Abstractions; +using Microsoft.EntityFrameworkCore; +using Xunit; +using Microsoft.EntityFrameworkCore.TestModels.ConcurrencyModel; +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class SqlExecutorLibRedTest : SqlExecutorTestBase> + { + // ReSharper disable once UnusedParameter.Local + public SqlExecutorLibRedTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Executes_stored_procedure(bool async) + { + await base.Executes_stored_procedure(async); + + AssertSql($@"EXEC `Ten Most Expensive Products`"); + } + + public override async Task Executes_stored_procedure_with_parameter(bool async) + { + await base.Executes_stored_procedure_with_parameter(async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@CustomerID='ALFKI' (Nullable = false) (Size = 5)")} + + EXEC `CustOrderHist` CustomerID + """); + } + + public override async Task Executes_stored_procedure_with_generated_parameter(bool async) + { + await base.Executes_stored_procedure_with_generated_parameter(async); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p0='ALFKI' (Size = 255)")} + + EXEC `CustOrderHist` CustomerID = {AssertSqlHelper.Parameter("@p0")} + """); + } + + public override async Task Query_with_parameters(bool async) + { + var city = "London"; + var contactTitle = "Sales Representative"; + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlRawAsync( + @"SELECT COUNT(*) FROM `Customers` WHERE `City` = {0} AND `ContactTitle` = {1}", city, contactTitle) + : context.Database.ExecuteSqlRaw( + @"SELECT COUNT(*) FROM `Customers` WHERE `City` = {0} AND `ContactTitle` = {1}", city, contactTitle); + + Assert.Equal(-1, actual); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p0='London' (Size = 255)")} + {AssertSqlHelper.Declaration("@p1='Sales Representative' (Size = 255)")} + + SELECT COUNT(*) FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} + """); + } + + public override async Task Query_with_dbParameter_with_name(bool async) + { + var city = CreateDbParameter("@city", "London"); + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlRawAsync(@"SELECT COUNT(*) FROM `Customers` WHERE `City` = @city", city) + : context.Database.ExecuteSqlRaw(@"SELECT COUNT(*) FROM `Customers` WHERE `City` = @city", city); + + Assert.Equal(-1, actual); + + AssertSql( + """ +@city='London' (Nullable = false) (Size = 6) + +SELECT COUNT(*) FROM `Customers` WHERE `City` = @city +"""); + } + + public override async Task Query_with_positional_dbParameter_with_name(bool async) + { + var city = CreateDbParameter("@city", "London"); + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlRawAsync(@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {0}", city) + : context.Database.ExecuteSqlRaw(@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {0}", city); + + Assert.Equal(-1, actual); + + AssertSql( + """ +@city='London' (Nullable = false) (Size = 6) + +SELECT COUNT(*) FROM `Customers` WHERE `City` = @city +"""); + } + + public override async Task Query_with_positional_dbParameter_without_name(bool async) + { + var city = CreateDbParameter(name: null, value: "London"); + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlRawAsync(@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {0}", city) + : context.Database.ExecuteSqlRaw(@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {0}", city); + + Assert.Equal(-1, actual); + + AssertSql( + """ +@p0='London' (Nullable = false) (Size = 6) + +SELECT COUNT(*) FROM `Customers` WHERE `City` = @p0 +"""); + } + + public override async Task Query_with_dbParameters_mixed(bool async) + { + var city = "London"; + var contactTitle = "Sales Representative"; + + var cityParameter = CreateDbParameter("@city", city); + var contactTitleParameter = CreateDbParameter("@contactTitle", contactTitle); + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlRawAsync( + @"SELECT COUNT(*) FROM `Customers` WHERE `City` = {0} AND `ContactTitle` = @contactTitle", city, + contactTitleParameter) + : context.Database.ExecuteSqlRaw( + @"SELECT COUNT(*) FROM `Customers` WHERE `City` = {0} AND `ContactTitle` = @contactTitle", city, + contactTitleParameter); + + Assert.Equal(-1, actual); + + actual = async + ? await context.Database.ExecuteSqlRawAsync( + @"SELECT COUNT(*) FROM `Customers` WHERE `City` = @city AND `ContactTitle` = {1}", cityParameter, contactTitle) + : context.Database.ExecuteSqlRaw( + @"SELECT COUNT(*) FROM `Customers` WHERE `City` = @city AND `ContactTitle` = {1}", cityParameter, contactTitle); + + Assert.Equal(-1, actual); + + AssertSql( + """ +@p0='London' (Size = 255) +@contactTitle='Sales Representative' (Nullable = false) (Size = 20) + +SELECT COUNT(*) FROM `Customers` WHERE `City` = @p0 AND `ContactTitle` = @contactTitle +""", + // + """ +@city='London' (Nullable = false) (Size = 6) +@p0='Sales Representative' (Size = 255) + +SELECT COUNT(*) FROM `Customers` WHERE `City` = @city AND `ContactTitle` = @p0 +"""); + } + + public override async Task Query_with_parameters_interpolated(bool async) + { + var city = "London"; + var contactTitle = "Sales Representative"; + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlInterpolatedAsync( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}") + : context.Database.ExecuteSqlInterpolated( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}"); + + Assert.Equal(-1, actual); + + AssertSql( + $""" + {AssertSqlHelper.Declaration("@p0='London' (Size = 255)")} + {AssertSqlHelper.Declaration("@p1='Sales Representative' (Size = 255)")} + + SELECT COUNT(*) FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} + """); + } + + public override async Task Query_with_parameters_interpolated_2(bool async) + { + var city = "London"; + var contactTitle = "Sales Representative"; + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlAsync( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}") + : context.Database.ExecuteSql( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}"); + + Assert.Equal(-1, actual); + } + + protected override DbParameter CreateDbParameter(string name, object value) + { + return new LibRedParameter { ParameterName = name, Value = value }; + } + + public override async Task Query_with_DbParameters_interpolated(bool async) + { + var city = CreateDbParameter("city", "London"); + var contactTitle = CreateDbParameter("contactTitle", "Sales Representative"); + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlInterpolatedAsync( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}") + : context.Database.ExecuteSqlInterpolated( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}"); + + Assert.Equal(-1, actual); + } + + public override async Task Query_with_DbParameters_interpolated_2(bool async) + { + var city = CreateDbParameter("city", "London"); + var contactTitle = CreateDbParameter("contactTitle", "Sales Representative"); + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlAsync( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}") + : context.Database.ExecuteSql( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}"); + + Assert.Equal(-1, actual); + } + + public override async Task Query_with_parameters_custom_converter(bool async) + { + var city = new City { Name = "London" }; + var contactTitle = "Sales Representative"; + + using var context = CreateContext(); + + var actual = async + ? await context.Database.ExecuteSqlAsync( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}") + : context.Database.ExecuteSql( + $@"SELECT COUNT(*) FROM `Customers` WHERE `City` = {city} AND `ContactTitle` = {contactTitle}"); + + Assert.Equal(-1, actual); + } + + protected override string TenMostExpensiveProductsSproc => "EXEC `Ten Most Expensive Products`"; + protected override string CustomerOrderHistorySproc => "EXEC `CustOrderHist` CustomerID"; + protected override string CustomerOrderHistoryWithGeneratedParameterSproc => "EXEC `CustOrderHist` CustomerID = {0}"; + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/SqlQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/SqlQueryLibRedTest.cs new file mode 100644 index 00000000..09989b93 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/SqlQueryLibRedTest.cs @@ -0,0 +1,767 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Data.Common; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class SqlQueryLibRedTest : SqlQueryTestBase> +{ + public SqlQueryLibRedTest(NorthwindQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task SqlQueryRaw_queryable_simple(bool async) + { + await base.SqlQueryRaw_queryable_simple(async); + + AssertSql( +""" +SELECT * FROM `Customers` WHERE `ContactName` LIKE '%z%' +"""); + } + + public override async Task SqlQueryRaw_queryable_simple_columns_out_of_order(bool async) + { + await base.SqlQueryRaw_queryable_simple_columns_out_of_order(async); + + AssertSql( +""" +SELECT `Region`, `PostalCode`, `Phone`, `Fax`, `CustomerID`, `Country`, `ContactTitle`, `ContactName`, `CompanyName`, `City`, `Address` FROM `Customers` +"""); + } + + public override async Task SqlQueryRaw_queryable_simple_columns_out_of_order_and_extra_columns(bool async) + { + await base.SqlQueryRaw_queryable_simple_columns_out_of_order_and_extra_columns(async); + + AssertSql( +""" +SELECT `Region`, `PostalCode`, `PostalCode` AS `Foo`, `Phone`, `Fax`, `CustomerID`, `Country`, `ContactTitle`, `ContactName`, `CompanyName`, `City`, `Address` FROM `Customers` +"""); + } + + public override async Task SqlQueryRaw_queryable_composed(bool async) + { + await base.SqlQueryRaw_queryable_composed(async); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * FROM `Customers` +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task SqlQueryRaw_queryable_composed_after_removing_whitespaces(bool async) + { + await base.SqlQueryRaw_queryable_composed_after_removing_whitespaces(async); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + + + + + SELECT + * FROM `Customers` +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task SqlQueryRaw_queryable_composed_compiled(bool async) + { + await base.SqlQueryRaw_queryable_composed_compiled(async); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * FROM `Customers` +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task SqlQueryRaw_queryable_composed_compiled_with_DbParameter(bool async) + { + await base.SqlQueryRaw_queryable_composed_compiled_with_DbParameter(async); + + AssertSql( + """ +customer='CONSH' (Nullable = false) (Size = 5) + +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * FROM `Customers` WHERE `CustomerID` = @customer +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task SqlQueryRaw_queryable_composed_compiled_with_nameless_DbParameter(bool async) + { + await base.SqlQueryRaw_queryable_composed_compiled_with_nameless_DbParameter(async); + + AssertSql( + """ +p0='CONSH' (Nullable = false) (Size = 5) + +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * FROM `Customers` WHERE `CustomerID` = @p0 +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task SqlQueryRaw_queryable_composed_compiled_with_parameter(bool async) + { + await base.SqlQueryRaw_queryable_composed_compiled_with_parameter(async); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * FROM `Customers` WHERE `CustomerID` = 'CONSH' +) AS `m` +WHERE `m`.`ContactName` LIKE '%z%' +"""); + } + + public override async Task SqlQueryRaw_composed_contains(bool async) + { + await base.SqlQueryRaw_composed_contains(async); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * FROM `Customers` +) AS `m` +WHERE `m`.`CustomerID` IN ( + SELECT `m0`.`CustomerID` + FROM ( + SELECT * FROM `Orders` + ) AS `m0` +) +"""); + } + + public override async Task SqlQueryRaw_queryable_multiple_composed(bool async) + { + await base.SqlQueryRaw_queryable_multiple_composed(async); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`Freight`, `m0`.`OrderDate`, `m0`.`OrderID`, `m0`.`RequiredDate`, `m0`.`ShipAddress`, `m0`.`ShipCity`, `m0`.`ShipCountry`, `m0`.`ShipName`, `m0`.`ShipPostalCode`, `m0`.`ShipRegion`, `m0`.`ShipVia`, `m0`.`ShippedDate` +FROM ( + SELECT * FROM `Customers` +) AS `m`, +( + SELECT * FROM `Orders` +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +"""); + } + + public override async Task SqlQueryRaw_queryable_multiple_composed_with_closure_parameters(bool async) + { + await base.SqlQueryRaw_queryable_multiple_composed_with_closure_parameters(async); + + AssertSql( +$""" +p0='1997-01-01T00:00:00.0000000' (DbType = DateTime) +p1='1998-01-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`Freight`, `m0`.`OrderDate`, `m0`.`OrderID`, `m0`.`RequiredDate`, `m0`.`ShipAddress`, `m0`.`ShipCity`, `m0`.`ShipCountry`, `m0`.`ShipName`, `m0`.`ShipPostalCode`, `m0`.`ShipRegion`, `m0`.`ShipVia`, `m0`.`ShippedDate` +FROM ( + SELECT * FROM `Customers` +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p0")} AND {AssertSqlHelper.Parameter("@p1")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +"""); + } + + public override async Task SqlQueryRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(bool async) + { + await base.SqlQueryRaw_queryable_multiple_composed_with_parameters_and_closure_parameters(async); + + AssertSql( +$""" +p0='London' (Size = 255) +p1='1997-01-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-01-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`Freight`, `m0`.`OrderDate`, `m0`.`OrderID`, `m0`.`RequiredDate`, `m0`.`ShipAddress`, `m0`.`ShipCity`, `m0`.`ShipCountry`, `m0`.`ShipName`, `m0`.`ShipPostalCode`, `m0`.`ShipRegion`, `m0`.`ShipVia`, `m0`.`ShippedDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +""", +// +$""" +p0='Berlin' (Size = 255) +p1='1998-04-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-05-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`Freight`, `m0`.`OrderDate`, `m0`.`OrderID`, `m0`.`RequiredDate`, `m0`.`ShipAddress`, `m0`.`ShipCity`, `m0`.`ShipCountry`, `m0`.`ShipName`, `m0`.`ShipPostalCode`, `m0`.`ShipRegion`, `m0`.`ShipVia`, `m0`.`ShippedDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +"""); + } + + public override async Task SqlQueryRaw_queryable_multiple_line_query(bool async) + { + await base.SqlQueryRaw_queryable_multiple_line_query(async); + + AssertSql( +""" +SELECT * +FROM `Customers` +WHERE `City` = 'London' +"""); + } + + public override async Task SqlQueryRaw_queryable_composed_multiple_line_query(bool async) + { + await base.SqlQueryRaw_queryable_composed_multiple_line_query(async); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * + FROM `Customers` +) AS `m` +WHERE `m`.`City` = 'London' +"""); + } + + public override async Task SqlQueryRaw_queryable_with_parameters(bool async) + { + await base.SqlQueryRaw_queryable_with_parameters(async); + + AssertSql( +$""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task SqlQueryRaw_queryable_with_parameters_inline(bool async) + { + await base.SqlQueryRaw_queryable_with_parameters_inline(async); + + AssertSql( +$""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task SqlQuery_queryable_with_parameters_interpolated(bool async) + { + await base.SqlQuery_queryable_with_parameters_interpolated(async); + + AssertSql( +$""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task SqlQuery_queryable_with_parameters_inline_interpolated(bool async) + { + await base.SqlQuery_queryable_with_parameters_inline_interpolated(async); + + AssertSql( +$""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task SqlQuery_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated( + bool async) + { + await base.SqlQuery_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async); + + AssertSql( +$""" +p0='London' (Size = 255) +p1='1997-01-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-01-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`Freight`, `m0`.`OrderDate`, `m0`.`OrderID`, `m0`.`RequiredDate`, `m0`.`ShipAddress`, `m0`.`ShipCity`, `m0`.`ShipCountry`, `m0`.`ShipName`, `m0`.`ShipPostalCode`, `m0`.`ShipRegion`, `m0`.`ShipVia`, `m0`.`ShippedDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +""", +// +$""" +p0='Berlin' (Size = 255) +p1='1998-04-01T00:00:00.0000000' (DbType = DateTime) +p2='1998-05-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode`, `m0`.`CustomerID`, `m0`.`EmployeeID`, `m0`.`Freight`, `m0`.`OrderDate`, `m0`.`OrderID`, `m0`.`RequiredDate`, `m0`.`ShipAddress`, `m0`.`ShipCity`, `m0`.`ShipCountry`, `m0`.`ShipName`, `m0`.`ShipPostalCode`, `m0`.`ShipRegion`, `m0`.`ShipVia`, `m0`.`ShippedDate` +FROM ( + SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} +) AS `m`, +( + SELECT * FROM `Orders` WHERE `OrderDate` BETWEEN {AssertSqlHelper.Parameter("@p1")} AND {AssertSqlHelper.Parameter("@p2")} +) AS `m0` +WHERE `m`.`CustomerID` = `m0`.`CustomerID` +"""); + } + + public override async Task SqlQueryRaw_queryable_with_null_parameter(bool async) + { + await base.SqlQueryRaw_queryable_with_null_parameter(async); + + AssertSql( + """ +p0=NULL (Nullable = false) (DbType = Object) + +SELECT * FROM `Employees` WHERE `ReportsTo` = @p0 OR (`ReportsTo` IS NULL AND @p0 IS NULL) +"""); + } + + public override async Task SqlQueryRaw_queryable_with_parameters_and_closure(bool async) + { + var queryString = await base.SqlQueryRaw_queryable_with_parameters_and_closure(async); + + AssertSql( + """ +p0='London' (Size = 255) +@contactTitle='Sales Representative' (Size = 30) + +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * FROM `Customers` WHERE `City` = @p0 +) AS `m` +WHERE `m`.`ContactTitle` = @contactTitle +"""); + + return null; + } + + public override async Task SqlQueryRaw_queryable_simple_cache_key_includes_query_string(bool async) + { + await base.SqlQueryRaw_queryable_simple_cache_key_includes_query_string(async); + + AssertSql( +""" +SELECT * FROM `Customers` WHERE `City` = 'London' +""", +// +""" +SELECT * FROM `Customers` WHERE `City` = 'Seattle' +"""); + } + + public override async Task SqlQueryRaw_queryable_with_parameters_cache_key_includes_parameters(bool async) + { + await base.SqlQueryRaw_queryable_with_parameters_cache_key_includes_parameters(async); + + AssertSql( +$""" +p0='London' (Size = 255) +p1='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +""", +// +$""" +p0='Madrid' (Size = 255) +p1='Accounting Manager' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = {AssertSqlHelper.Parameter("@p0")} AND `ContactTitle` = {AssertSqlHelper.Parameter("@p1")} +"""); + } + + public override async Task SqlQueryRaw_queryable_simple_as_no_tracking_not_composed(bool async) + { + await base.SqlQueryRaw_queryable_simple_as_no_tracking_not_composed(async); + + AssertSql( +""" +SELECT * FROM `Customers` +"""); + } + + public override async Task SqlQueryRaw_queryable_simple_projection_composed(bool async) + { + await base.SqlQueryRaw_queryable_simple_projection_composed(async); + + AssertSql( +""" +SELECT `m`.`ProductName` +FROM ( + SELECT * + FROM `Products` + WHERE `Discontinued` <> TRUE + AND ((`UnitsInStock` + `UnitsOnOrder`) < `ReorderLevel`) +) AS `m` +"""); + } + + public override async Task SqlQueryRaw_annotations_do_not_affect_successive_calls(bool async) + { + await base.SqlQueryRaw_annotations_do_not_affect_successive_calls(async); + + AssertSql( +""" +SELECT * FROM `Customers` WHERE `ContactName` LIKE '%z%' +""", +// +""" +SELECT * FROM `Customers` +"""); + } + + public override async Task SqlQueryRaw_composed_with_predicate(bool async) + { + await base.SqlQueryRaw_composed_with_predicate(async); + + AssertSql( + """ +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * FROM `Customers` +) AS `m` +WHERE MID(`m`.`ContactName`, 0 + 1, 1) = MID(`m`.`CompanyName`, 0 + 1, 1) +"""); + } + + public override async Task SqlQueryRaw_with_dbParameter(bool async) + { + await base.SqlQueryRaw_with_dbParameter(async); + + AssertSql( + """ +@city='London' (Nullable = false) (Size = 6) + +SELECT * FROM `Customers` WHERE `City` = @city +"""); + } + + public override async Task SqlQueryRaw_with_dbParameter_without_name_prefix(bool async) + { + await base.SqlQueryRaw_with_dbParameter_without_name_prefix(async); + AssertSql( + """ +city='London' (Nullable = false) (Size = 6) + +SELECT * FROM `Customers` WHERE `City` = @city +"""); + } + + public override async Task SqlQueryRaw_with_dbParameter_mixed(bool async) + { + await base.SqlQueryRaw_with_dbParameter_mixed(async); + + AssertSql( + """ +p0='London' (Size = 255) +@title='Sales Representative' (Nullable = false) (Size = 20) + +SELECT * FROM `Customers` WHERE `City` = @p0 AND `ContactTitle` = @title +""", + // + """ +@city='London' (Nullable = false) (Size = 6) +p0='Sales Representative' (Size = 255) + +SELECT * FROM `Customers` WHERE `City` = @city AND `ContactTitle` = @p0 +"""); + } + + public override async Task SqlQueryRaw_with_db_parameters_called_multiple_times(bool async) + { + await base.SqlQueryRaw_with_db_parameters_called_multiple_times(async); + + AssertSql( + """ +@id='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @id +""", + // + """ +@id='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @id +"""); + } + + public override async Task SqlQuery_with_inlined_db_parameter(bool async) + { + await base.SqlQuery_with_inlined_db_parameter(async); + + AssertSql( + """ +@somename='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @somename +"""); + } + + public override async Task SqlQuery_with_inlined_db_parameter_without_name_prefix(bool async) + { + await base.SqlQuery_with_inlined_db_parameter_without_name_prefix(async); + + AssertSql( + """ +somename='ALFKI' (Nullable = false) (Size = 5) + +SELECT * FROM `Customers` WHERE `CustomerID` = @somename +"""); + } + + public override async Task SqlQuery_parameterization_issue_12213(bool async) + { + await base.SqlQuery_parameterization_issue_12213(async); + + AssertSql( + """ +p0='10300' + +SELECT `m`.`OrderID` +FROM ( + SELECT * FROM `Orders` WHERE `OrderID` >= @p0 +) AS `m` +""", + // + """ +@max='10400' +p0='10300' + +SELECT `m`.`OrderID` +FROM ( + SELECT * FROM `Orders` +) AS `m` +WHERE `m`.`OrderID` <= @max AND `m`.`OrderID` IN ( + SELECT `m0`.`OrderID` + FROM ( + SELECT * FROM `Orders` WHERE `OrderID` >= @p0 + ) AS `m0` +) +""", + // + """ +@max='10400' +p0='10300' + +SELECT `m`.`OrderID` +FROM ( + SELECT * FROM `Orders` +) AS `m` +WHERE `m`.`OrderID` <= @max AND `m`.`OrderID` IN ( + SELECT `m0`.`OrderID` + FROM ( + SELECT * FROM `Orders` WHERE `OrderID` >= @p0 + ) AS `m0` +) +"""); + } + + public override async Task SqlQueryRaw_does_not_parameterize_interpolated_string(bool async) + { + await base.SqlQueryRaw_does_not_parameterize_interpolated_string(async); + + AssertSql( +$""" +p0='10250' + +SELECT * FROM `Orders` WHERE `OrderID` < {AssertSqlHelper.Parameter("@p0")} +"""); + } + + public override async Task SqlQueryRaw_with_set_operation(bool async) + { + await base.SqlQueryRaw_with_set_operation(async); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT * FROM `Customers` WHERE `City` = 'London' +) AS `m` +UNION ALL +SELECT `m0`.`Address`, `m0`.`City`, `m0`.`CompanyName`, `m0`.`ContactName`, `m0`.`ContactTitle`, `m0`.`Country`, `m0`.`CustomerID`, `m0`.`Fax`, `m0`.`Phone`, `m0`.`Region`, `m0`.`PostalCode` +FROM ( + SELECT * FROM `Customers` WHERE `City` = 'Berlin' +) AS `m0` +"""); + } + + public override async Task Line_endings_after_Select(bool async) + { + await base.Line_endings_after_Select(async); + + AssertSql( +""" +SELECT `m`.`Address`, `m`.`City`, `m`.`CompanyName`, `m`.`ContactName`, `m`.`ContactTitle`, `m`.`Country`, `m`.`CustomerID`, `m`.`Fax`, `m`.`Phone`, `m`.`Region`, `m`.`PostalCode` +FROM ( + SELECT + * FROM `Customers` +) AS `m` +WHERE `m`.`City` = 'Seattle' +"""); + } + + public override async Task SqlQueryRaw_in_subquery_with_dbParameter(bool async) + { + await base.SqlQueryRaw_in_subquery_with_dbParameter(async); + + AssertSql( + """ +@city='London' (Nullable = false) (Size = 6) + +SELECT `m`.`CustomerID`, `m`.`EmployeeID`, `m`.`Freight`, `m`.`OrderDate`, `m`.`OrderID`, `m`.`RequiredDate`, `m`.`ShipAddress`, `m`.`ShipCity`, `m`.`ShipCountry`, `m`.`ShipName`, `m`.`ShipPostalCode`, `m`.`ShipRegion`, `m`.`ShipVia`, `m`.`ShippedDate` +FROM ( + SELECT * FROM `Orders` +) AS `m` +WHERE `m`.`CustomerID` IN ( + SELECT `m0`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @city + ) AS `m0` +) +"""); + } + + public override async Task SqlQueryRaw_in_subquery_with_positional_dbParameter_without_name(bool async) + { + await base.SqlQueryRaw_in_subquery_with_positional_dbParameter_without_name(async); + + AssertSql( + """ +p0='London' (Nullable = false) (Size = 6) + +SELECT `m`.`CustomerID`, `m`.`EmployeeID`, `m`.`Freight`, `m`.`OrderDate`, `m`.`OrderID`, `m`.`RequiredDate`, `m`.`ShipAddress`, `m`.`ShipCity`, `m`.`ShipCountry`, `m`.`ShipName`, `m`.`ShipPostalCode`, `m`.`ShipRegion`, `m`.`ShipVia`, `m`.`ShippedDate` +FROM ( + SELECT * FROM `Orders` +) AS `m` +WHERE `m`.`CustomerID` IN ( + SELECT `m0`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @p0 + ) AS `m0` +) +"""); + } + + public override async Task SqlQueryRaw_in_subquery_with_positional_dbParameter_with_name(bool async) + { + await base.SqlQueryRaw_in_subquery_with_positional_dbParameter_with_name(async); + + AssertSql( + """ +@city='London' (Nullable = false) (Size = 6) + +SELECT `m`.`CustomerID`, `m`.`EmployeeID`, `m`.`Freight`, `m`.`OrderDate`, `m`.`OrderID`, `m`.`RequiredDate`, `m`.`ShipAddress`, `m`.`ShipCity`, `m`.`ShipCountry`, `m`.`ShipName`, `m`.`ShipPostalCode`, `m`.`ShipRegion`, `m`.`ShipVia`, `m`.`ShippedDate` +FROM ( + SELECT * FROM `Orders` +) AS `m` +WHERE `m`.`CustomerID` IN ( + SELECT `m0`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @city + ) AS `m0` +) +"""); + } + + public override async Task SqlQueryRaw_with_dbParameter_mixed_in_subquery(bool async) + { + await base.SqlQueryRaw_with_dbParameter_mixed_in_subquery(async); + + AssertSql( + """ +p0='London' (Size = 255) +@title='Sales Representative' (Nullable = false) (Size = 20) + +SELECT `m`.`CustomerID`, `m`.`EmployeeID`, `m`.`Freight`, `m`.`OrderDate`, `m`.`OrderID`, `m`.`RequiredDate`, `m`.`ShipAddress`, `m`.`ShipCity`, `m`.`ShipCountry`, `m`.`ShipName`, `m`.`ShipPostalCode`, `m`.`ShipRegion`, `m`.`ShipVia`, `m`.`ShippedDate` +FROM ( + SELECT * FROM `Orders` +) AS `m` +WHERE `m`.`CustomerID` IN ( + SELECT `m0`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @p0 AND `ContactTitle` = @title + ) AS `m0` +) +""", + // + """ +@city='London' (Nullable = false) (Size = 6) +p0='Sales Representative' (Size = 255) + +SELECT `m`.`CustomerID`, `m`.`EmployeeID`, `m`.`Freight`, `m`.`OrderDate`, `m`.`OrderID`, `m`.`RequiredDate`, `m`.`ShipAddress`, `m`.`ShipCity`, `m`.`ShipCountry`, `m`.`ShipName`, `m`.`ShipPostalCode`, `m`.`ShipRegion`, `m`.`ShipVia`, `m`.`ShippedDate` +FROM ( + SELECT * FROM `Orders` +) AS `m` +WHERE `m`.`CustomerID` IN ( + SELECT `m0`.`CustomerID` + FROM ( + SELECT * FROM `Customers` WHERE `City` = @city AND `ContactTitle` = @p0 + ) AS `m0` +) +"""); + } + + public override async Task SqlQueryRaw_composed_with_common_table_expression(bool async) + { + var exception = + await Assert.ThrowsAsync(() => base.SqlQueryRaw_composed_with_common_table_expression(async)); + + Assert.Equal(RelationalStrings.FromSqlNonComposable, exception.Message); + } + + protected override DbParameter CreateDbParameter(string name, object value) + { + return new LibRedParameter { ParameterName = name, Value = value }; + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCFiltersInheritanceQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCFiltersInheritanceQueryLibRedFixture.cs new file mode 100644 index 00000000..28494423 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCFiltersInheritanceQueryLibRedFixture.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCFiltersInheritanceQueryLibRedFixture : TPCInheritanceQueryLibRedFixture +{ + public override bool EnableFilters + => true; + + public override bool UseGeneratedKeys + => false; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCFiltersInheritanceQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCFiltersInheritanceQueryLibRedTest.cs new file mode 100644 index 00000000..8c275cff --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCFiltersInheritanceQueryLibRedTest.cs @@ -0,0 +1,221 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCFiltersInheritanceQueryLibRedTest : TPCFiltersInheritanceQueryTestBase +{ + public TPCFiltersInheritanceQueryLibRedTest( + TPCFiltersInheritanceQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Can_use_of_type_animal(bool async) + { + await base.Can_use_of_type_animal(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_use_is_kiwi(bool async) + { + await base.Can_use_is_kiwi(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_is_kiwi_with_other_predicate(bool async) + { + await base.Can_use_is_kiwi_with_other_predicate(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 AND `u`.`Discriminator` = 'Kiwi' AND `u`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_is_kiwi_in_projection(bool async) + { + await base.Can_use_is_kiwi_in_projection(async); + + AssertSql( + """ +SELECT `u`.`Discriminator` = 'Kiwi' +FROM ( + SELECT `e`.`CountryId`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`CountryId`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_of_type_bird(bool async) + { + await base.Can_use_of_type_bird(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_predicate(bool async) + { + await base.Can_use_of_type_bird_predicate(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_with_projection(bool async) + { + await base.Can_use_of_type_bird_with_projection(async); + + AssertSql( + """ +SELECT `u`.`Name` +FROM ( + SELECT `e`.`CountryId`, `e`.`Name` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`CountryId`, `k`.`Name` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_of_type_bird_first(bool async) + { + await base.Can_use_of_type_bird_first(async); + + AssertSql( + """ +SELECT TOP 1 `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_use_of_type_kiwi(bool async) + { + await base.Can_use_of_type_kiwi(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_derived_set(bool async) + { + await base.Can_use_derived_set(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group` +FROM `Eagle` AS `e` +WHERE `e`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_IgnoreQueryFilters_and_GetDatabaseValues(bool async) + { + await base.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async); + + AssertSql( + """ +SELECT TOP 2 `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group` +FROM `Eagle` AS `e` +""", + // + """ +@p='2' + +SELECT TOP 1 `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group` +FROM `Eagle` AS `e` +WHERE `e`.`Id` = @p +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCGearsOfWarQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCGearsOfWarQueryLibRedFixture.cs new file mode 100644 index 00000000..f2a0c510 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCGearsOfWarQueryLibRedFixture.cs @@ -0,0 +1,110 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCGearsOfWarQueryLibRedFixture : TPCGearsOfWarQueryRelationalFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(g => g.Location).HasColumnType("varchar(100)"); + } + + protected override async Task SeedAsync(GearsOfWarContext context) + { + // Drop constraint to workaround LibRed limitation regarding compound foreign keys and NULL. + context.Database.ExecuteSql($"ALTER TABLE `Officers` DROP CONSTRAINT `FK_Officers_Officers_LeaderNickname_LeaderSquadId`"); + + var squads = GearsOfWarData.CreateSquads(); + var missions = GearsOfWarData.CreateMissions(); + var squadMissions = GearsOfWarData.CreateSquadMissions(); + var cities = GearsOfWarData.CreateCities(); + var weapons = GearsOfWarData.CreateWeapons(); + var tags = GearsOfWarData.CreateTags(); + var gears = GearsOfWarData.CreateGears(); + var locustLeaders = GearsOfWarData.CreateLocustLeaders(); + var factions = GearsOfWarData.CreateFactions(); + var locustHighCommands = GearsOfWarData.CreateHighCommands(); + + foreach (var mission in missions) + { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } + } + + foreach (var tag in tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } + } + + GearsOfWarData.WireUp( + squads, missions, squadMissions, cities, weapons, tags, gears, locustLeaders, factions, locustHighCommands); + + context.Squads.AddRange(squads); + context.Missions.AddRange(missions); + context.SquadMissions.AddRange(squadMissions); + context.Cities.AddRange(cities); + context.Weapons.AddRange(weapons); + context.Tags.AddRange(tags); + context.Gears.AddRange(gears); + context.LocustLeaders.AddRange(locustLeaders); + context.Factions.AddRange(factions); + context.LocustHighCommands.AddRange(locustHighCommands); + await context.SaveChangesAsync(); + + GearsOfWarData.WireUp2(locustLeaders, factions); + + await context.SaveChangesAsync(); + } + + public override ISetSource GetExpectedData() + { + var data = (GearsOfWarData)base.GetExpectedData(); + + foreach (var mission in data.Missions) + { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } + mission.Timeline = LibRedTestHelpers.GetExpectedValue(mission.Timeline); + mission.Duration = new TimeSpan(mission.Duration.Days, mission.Duration.Hours, mission.Duration.Minutes, mission.Duration.Seconds); + } + + foreach (var tag in data.Tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } + } + + return data; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCGearsOfWarQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCGearsOfWarQueryLibRedTest.cs new file mode 100644 index 00000000..ba04d1f0 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCGearsOfWarQueryLibRedTest.cs @@ -0,0 +1,12619 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCGearsOfWarQueryLibRedTest : TPCGearsOfWarQueryRelationalTestBase +{ +#pragma warning disable IDE0060 // Remove unused parameter + public TPCGearsOfWarQueryLibRedTest(TPCGearsOfWarQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) +#pragma warning restore IDE0060 // Remove unused parameter + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Non_string_concat_uses_appropriate_type_mapping(bool async) + { + await base.Non_string_concat_uses_appropriate_type_mapping(async); + + AssertSql( + """ +SELECT `m`.`Duration` +FROM `Missions` AS `m` +"""); + } + + public override async Task Entity_equality_empty(bool async) + { + await base.Entity_equality_empty(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE FALSE +"""); + } + + public override async Task Include_multiple_one_to_one_and_one_to_many(bool async) + { + await base.Include_multiple_one_to_one_and_one_to_many(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Include_multiple_one_to_one_optional_and_one_to_one_required(bool async) + { + await base.Include_multiple_one_to_one_optional_and_one_to_one_required(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` +"""); + } + + public override async Task Include_multiple_circular(bool async) + { + await base.Include_multiple_circular(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `c`.`Name` = `u0`.`AssignedCityName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `c`.`Name`, `u0`.`Nickname` +"""); + } + + public override async Task Include_multiple_circular_with_filter(bool async) + { + await base.Include_multiple_circular_with_filter(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `c`.`Name` = `u0`.`AssignedCityName` +WHERE `u`.`Nickname` = 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `c`.`Name`, `u0`.`Nickname` +"""); + } + + public override async Task Include_using_alternate_key(bool async) + { + await base.Include_using_alternate_key(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`Nickname` = 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Include_navigation_on_derived_type(bool async) + { + await base.Include_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task String_based_Include_navigation_on_derived_type(bool async) + { + await base.String_based_Include_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Select_Where_Navigation_Included(bool async) + { + await base.Select_Where_Navigation_Included(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` = 'Marcus' +"""); + } + + public override async Task Include_with_join_reference1(bool async) + { + await base.Include_with_join_reference1(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +"""); + } + + public override async Task Include_with_join_reference2(bool async) + { + await base.Include_with_join_reference2(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +WHERE `u`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +"""); + } + + public override async Task Include_with_join_collection1(bool async) + { + await base.Include_with_join_collection1(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task Include_with_join_collection2(bool async) + { + await base.Include_with_join_collection2(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Include_where_list_contains_navigation(bool async) + { + await base.Include_where_list_contains_navigation(async); + + AssertSql( + """ +SELECT `t`.`Id` +FROM `Tags` AS `t` +""", + // + """ +@tags1='34c8d86e-a4ac-4be5-827f-584dda348a07' +@tags2='70534e05-782c-4052-8720-c2c54481ce5f' +@tags3='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34' +@tags5='b39a6fba-9026-4d69-828e-fd7068673e57' +@tags6='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags7='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags8='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags9='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags10='df36f493-463f-4123-83f9-6b135deeb7ba' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Id` IS NOT NULL AND `t`.`Id` IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10) +"""); + } + + public override async Task Include_where_list_contains_navigation2(bool async) + { + await base.Include_where_list_contains_navigation2(async); + + AssertSql( + """ +SELECT `t`.`Id` +FROM `Tags` AS `t` +""", + // + """ +@tags1='34c8d86e-a4ac-4be5-827f-584dda348a07' +@tags2='70534e05-782c-4052-8720-c2c54481ce5f' +@tags3='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34' +@tags5='b39a6fba-9026-4d69-828e-fd7068673e57' +@tags6='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags7='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags8='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags9='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags10='df36f493-463f-4123-83f9-6b135deeb7ba' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `c`.`Location` IS NOT NULL AND `t`.`Id` IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10) +"""); + } + + public override async Task Navigation_accessed_twice_outside_and_inside_subquery(bool async) + { + await base.Navigation_accessed_twice_outside_and_inside_subquery(async); + + AssertSql( + """ +SELECT `t`.`Id` +FROM `Tags` AS `t` +""", + // + """ +@tags1='34c8d86e-a4ac-4be5-827f-584dda348a07' +@tags2='70534e05-782c-4052-8720-c2c54481ce5f' +@tags3='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34' +@tags5='b39a6fba-9026-4d69-828e-fd7068673e57' +@tags6='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags7='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags8='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags9='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags10='df36f493-463f-4123-83f9-6b135deeb7ba' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Id` IS NOT NULL AND `t`.`Id` IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10) +"""); + } + + public override async Task Include_with_join_multi_level(bool async) + { + await base.Include_with_join_multi_level(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `c`.`Name` = `u0`.`AssignedCityName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `c`.`Name`, `u0`.`Nickname` +"""); + } + + public override async Task Include_with_join_and_inheritance1(bool async) + { + await base.Include_with_join_and_inheritance1(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +WHERE `u`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +"""); + } + + public override async Task Include_with_join_and_inheritance_with_orderby_before_and_after_include(bool async) + { + await base.Include_with_join_and_inheritance_with_orderby_before_and_after_include(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY NOT (`u`.`HasSoulPatch`), `u`.`Nickname` DESC, `t`.`Id`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Include_with_join_and_inheritance2(bool async) + { + await base.Include_with_join_and_inheritance2(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task Include_with_join_and_inheritance3(bool async) + { + await base.Include_with_join_and_inheritance3(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Include_with_nested_navigation_in_order_by(bool async) + { + await base.Include_with_nested_navigation_in_order_by(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM (`Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +WHERE `u`.`Nickname` <> 'Paduk' OR `u`.`Nickname` IS NULL +ORDER BY `c`.`Name`, `w`.`Id` +"""); + } + + public override async Task Where_count_subquery_without_collision(bool async) + { + await base.Where_count_subquery_without_collision(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) = 2 +"""); + } + + public override async Task Where_any_subquery_without_collision(bool async) + { + await base.Where_any_subquery_without_collision(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) +"""); + } + + public override async Task Select_inverted_boolean(bool async) + { + await base.Select_inverted_boolean(async); + + AssertSql( + """ +SELECT `w`.`Id`, NOT (`w`.`IsAutomatic`) AS `Manual` +FROM `Weapons` AS `w` +WHERE `w`.`IsAutomatic` +"""); + } + + public override async Task Select_inverted_nullable_boolean(bool async) + { + await base.Select_inverted_nullable_boolean(async); + + AssertSql( + """ +SELECT `l`.`Id`, NOT (`l`.`Eradicated`) AS `Alive` +FROM `LocustHordes` AS `l` +"""); + } + + public override async Task Select_comparison_with_null(bool async) + { + await base.Select_comparison_with_null(async); + + AssertSql( + """ +@ammunitionType='1' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType` = @ammunitionType AND `w`.`AmmunitionType` IS NOT NULL AS `Cartridge` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` = @ammunitionType +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType` IS NULL AS `Cartridge` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +"""); + } + + public override async Task Select_null_parameter(bool async) + { + await base.Select_null_parameter(async); + + AssertSql( + """ +@ammunitionType='1' (Nullable = true) + +SELECT `w`.`Id`, @ammunitionType AS `AmmoType` +FROM `Weapons` AS `w` +""", + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` +FROM `Weapons` AS `w` +""", + // + """ +@ammunitionType='2' (Nullable = true) + +SELECT `w`.`Id`, @ammunitionType AS `AmmoType` +FROM `Weapons` AS `w` +""", + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_with_boolean(bool async) + { + await base.Select_ternary_operation_with_boolean(async); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(`w`.`IsAutomatic`, 1, 0) AS `Num` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_with_inverted_boolean(bool async) + { + await base.Select_ternary_operation_with_inverted_boolean(async); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(NOT (`w`.`IsAutomatic`), 1, 0) AS `Num` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_with_has_value_not_null(bool async) + { + await base.Select_ternary_operation_with_has_value_not_null(async); + + AssertSql( +""" +SELECT `w`.`Id`, IIF(`w`.`AmmunitionType` IS NOT NULL AND `w`.`AmmunitionType` = 1, 'Yes', 'No') AS `IsCartridge` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NOT NULL AND `w`.`AmmunitionType` = 1 +"""); + } + + public override async Task Select_ternary_operation_multiple_conditions(bool async) + { + await base.Select_ternary_operation_multiple_conditions(async); + + AssertSql( +""" +SELECT `w`.`Id`, IIF(`w`.`AmmunitionType` = 2 AND `w`.`SynergyWithId` = 1, 'Yes', 'No') AS `IsCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_multiple_conditions_2(bool async) + { + await base.Select_ternary_operation_multiple_conditions_2(async); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(NOT (`w`.`IsAutomatic`) AND `w`.`SynergyWithId` = 1, 'Yes', 'No') AS `IsCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_multiple_conditions(bool async) + { + await base.Select_multiple_conditions(async); + + AssertSql( + """ +SELECT `w`.`Id`, NOT (`w`.`IsAutomatic`) AND `w`.`SynergyWithId` = 1 AND `w`.`SynergyWithId` IS NOT NULL AS `IsCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_nested_ternary_operations(bool async) + { + await base.Select_nested_ternary_operations(async); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(NOT (`w`.`IsAutomatic`), IIF(`w`.`AmmunitionType` = 1, 'ManualCartridge', 'Manual'), 'Auto') AS `IsManualCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Null_propagation_optimization1(bool async) + { + await base.Null_propagation_optimization1(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`LeaderNickname` = 'Marcus' +"""); + } + + public override async Task Null_propagation_optimization2(bool async) + { + await base.Null_propagation_optimization2(async); + + // issue #16050 + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NULL, NULL, `u`.`LeaderNickname` LIKE '%us') +"""); + } + + public override async Task Null_propagation_optimization3(bool async) + { + await base.Null_propagation_optimization3(async); + + // issue #16050 + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NOT NULL, `u`.`LeaderNickname` LIKE '%us', NULL) +"""); + } + + public override async Task Null_propagation_optimization4(bool async) + { + await base.Null_propagation_optimization4(async); + + // issue #16050 + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NULL, NULL, IIF(LEN(`u`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`u`.`LeaderNickname`)))) = 5 +"""); + } + + public override async Task Null_propagation_optimization5(bool async) + { + await base.Null_propagation_optimization5(async); + + // issue #16050 + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(LEN(`u`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`u`.`LeaderNickname`))), NULL) = 5 +"""); + } + + public override async Task Null_propagation_optimization6(bool async) + { + await base.Null_propagation_optimization6(async); + + // issue #16050 + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(LEN(`u`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`u`.`LeaderNickname`))), NULL) = 5 +"""); + } + + public override async Task Select_null_propagation_optimization7(bool async) + { + await base.Select_null_propagation_optimization7(async); + + // issue #16050 + AssertSql( + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, `u`.`LeaderNickname` & `u`.`LeaderNickname`, NULL) +FROM ( + SELECT `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_null_propagation_optimization8(bool async) + { + await base.Select_null_propagation_optimization8(async); + + AssertSql( + """ +SELECT IIF(`u`.`LeaderNickname` IS NULL, '', `u`.`LeaderNickname`) & IIF(`u`.`LeaderNickname` IS NULL, '', `u`.`LeaderNickname`) +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_null_propagation_optimization9(bool async) + { + await base.Select_null_propagation_optimization9(async); + + AssertSql( + """ +SELECT IIF(LEN(`u`.`FullName`) IS NULL, NULL, CLNG(LEN(`u`.`FullName`))) +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_null_propagation_negative1(bool async) + { + await base.Select_null_propagation_negative1(async); + + AssertSql( + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))) = 5, NULL) +FROM ( + SELECT `g`.`Nickname`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_null_propagation_negative2(bool async) + { + await base.Select_null_propagation_negative2(async); + + AssertSql( + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, `u0`.`LeaderNickname`, NULL) +FROM ( + SELECT `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u`, +( + SELECT `g0`.`LeaderNickname` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`LeaderNickname` + FROM `Officers` AS `o0` +) AS `u0` +"""); + } + + public override async Task Select_null_propagation_negative3(bool async) + { + await base.Select_null_propagation_negative3(async); + + AssertSql( + """ +SELECT `u0`.`Nickname`, IIF(`u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL, `u0`.`LeaderNickname` IS NOT NULL, NULL) AS `Condition` +FROM ( + SELECT `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`LeaderNickname` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`LeaderNickname` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`HasSoulPatch` +ORDER BY `u0`.`Nickname` +"""); + } + + public override async Task Select_null_propagation_negative4(bool async) + { + await base.Select_null_propagation_negative4(async); + + AssertSql( + """ +SELECT `u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL, `u0`.`Nickname` +FROM ( + SELECT `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`HasSoulPatch` +ORDER BY `u0`.`Nickname` +"""); + } + + public override async Task Select_null_propagation_negative5(bool async) + { + await base.Select_null_propagation_negative5(async); + + AssertSql( + """ +SELECT `u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL, `u0`.`Nickname` +FROM ( + SELECT `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`HasSoulPatch` +ORDER BY `u0`.`Nickname` +"""); + } + + public override async Task Select_null_propagation_negative6(bool async) + { + await base.Select_null_propagation_negative6(async); + + AssertSql( + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, FALSE, NULL) +FROM ( + SELECT `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_null_propagation_negative7(bool async) + { + await base.Select_null_propagation_negative7(async); + + AssertSql( + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, TRUE, NULL) +FROM ( + SELECT `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_null_propagation_negative8(bool async) + { + await base.Select_null_propagation_negative8(async); + + AssertSql( + """ +SELECT IIF(`s`.`Id` IS NOT NULL, `c`.`Name`, NULL) +FROM ((`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +"""); + } + + public override async Task Select_null_propagation_negative9(bool async) + { + await base.Select_null_propagation_negative9(async); + + AssertSql( + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))) = 5, NULL) +FROM ( + SELECT `g`.`Nickname`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_null_propagation_works_for_navigations_with_composite_keys(bool async) + { + await base.Select_null_propagation_works_for_navigations_with_composite_keys(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +"""); + } + + public override async Task Select_null_propagation_works_for_multiple_navigations_with_composite_keys(bool async) + { + await base.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(async); + + AssertSql( + """ +SELECT IIF(`c`.`Name` IS NOT NULL, `c`.`Name`, NULL) +FROM (((`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Tags` AS `t0` ON (`u`.`Nickname` = `t0`.`GearNickName` OR (`u`.`Nickname` IS NULL AND `t0`.`GearNickName` IS NULL)) AND (`u`.`SquadId` = `t0`.`GearSquadId` OR (`u`.`SquadId` IS NULL AND `t0`.`GearSquadId` IS NULL))) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName` + FROM `Officers` AS `o0` +) AS `u0` ON `t0`.`GearNickName` = `u0`.`Nickname` AND `t0`.`GearSquadId` = `u0`.`SquadId`) +LEFT JOIN `Cities` AS `c` ON `u0`.`AssignedCityName` = `c`.`Name` +"""); + } + + public override async Task Select_conditional_with_anonymous_type_and_null_constant(bool async) + { + await base.Select_conditional_with_anonymous_type_and_null_constant(async); + + AssertSql( + """ +SELECT `u`.`LeaderNickname` IS NOT NULL, `u`.`HasSoulPatch` +FROM ( + SELECT `g`.`Nickname`, `g`.`HasSoulPatch`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`HasSoulPatch`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Select_conditional_with_anonymous_types(bool async) + { + await base.Select_conditional_with_anonymous_types(async); + + AssertSql( + """ +SELECT `u`.`LeaderNickname` IS NOT NULL, `u`.`Nickname`, `u`.`FullName` +FROM ( + SELECT `g`.`Nickname`, `g`.`FullName`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`FullName`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_conditional_equality_1(bool async) + { + await base.Where_conditional_equality_1(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM ( + SELECT `g`.`Nickname`, `g`.`HasSoulPatch`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`HasSoulPatch`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`LeaderNickname` IS NULL +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_conditional_equality_2(bool async) + { + await base.Where_conditional_equality_2(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM ( + SELECT `g`.`Nickname`, `g`.`HasSoulPatch`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`HasSoulPatch`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`LeaderNickname` IS NULL +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_conditional_equality_3(bool async) + { + await base.Where_conditional_equality_3(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM ( + SELECT `g`.`Nickname`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Select_coalesce_with_anonymous_types(bool async) + { + await base.Select_coalesce_with_anonymous_types(async); + + AssertSql( + """ +SELECT `u`.`LeaderNickname`, `u`.`FullName` +FROM ( + SELECT `g`.`Nickname`, `g`.`FullName`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`FullName`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_compare_anonymous_types(bool async) + { + await base.Where_compare_anonymous_types(async); + + AssertSql(); + } + + public override async Task Where_member_access_on_anonymous_type(bool async) + { + await base.Where_member_access_on_anonymous_type(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM ( + SELECT `g`.`Nickname`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`LeaderNickname` = 'Marcus' +"""); + } + + public override async Task Where_compare_anonymous_types_with_uncorrelated_members(bool async) + { + await base.Where_compare_anonymous_types_with_uncorrelated_members(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM ( + SELECT `g`.`Nickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname` + FROM `Officers` AS `o` +) AS `u` +WHERE FALSE +"""); + } + + public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(bool async) + { + await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` +FROM (( + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` + FROM `Tags` AS `t`, + `Tags` AS `t0` +) AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `s`.`GearNickName` = `u`.`Nickname` AND `s`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` +) AS `u0` ON `s`.`GearNickName0` = `u0`.`Nickname` AND `s`.`GearSquadId0` = `u0`.`SquadId` +WHERE `u`.`Nickname` = `u0`.`Nickname` OR (`u`.`Nickname` IS NULL AND `u0`.`Nickname` IS NULL) +"""); + } + + public override async Task Conditional_Navigation_With_Trivial_Member_Access(bool async) + { + await base.Conditional_Navigation_With_Trivial_Member_Access(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM (( + SELECT `g`.`Nickname`, `g`.`AssignedCityName`, `g`.`CityOfBirthName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`AssignedCityName`, `o`.`CityOfBirthName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name`) +INNER JOIN `Cities` AS `c0` ON `u`.`CityOfBirthName` = `c0`.`Name` +WHERE IIF(`c`.`Name` IS NOT NULL, `c`.`Name`, `c0`.`Name`) <> 'Ephyra' +"""); + } + + public override async Task Conditional_Navigation_With_Member_Access_On_Same_Type(bool async) + { + await base.Conditional_Navigation_With_Member_Access_On_Same_Type(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`FullName` +FROM (( + SELECT `g`.`Nickname`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name`) +INNER JOIN `Cities` AS `c0` ON `u`.`CityOfBirthName` = `c0`.`Name` +WHERE IIF(`c`.`Name` IS NOT NULL, `c`.`Nation`, `c0`.`Nation`) = 'Tyrus' +"""); + } + + public override async Task Conditional_Navigation_With_Member_Access_On_Related_Types(bool async) + { + await base.Conditional_Navigation_With_Member_Access_On_Related_Types(async); + + AssertSql( + """ +SELECT `l`.`Name` +FROM (`LocustHordes` AS `l` +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`ThreatLevel` + FROM `LocustLeaders` AS `l0` + UNION ALL + SELECT `l1`.`Name`, `l1`.`ThreatLevel` + FROM `LocustCommanders` AS `l1` +) AS `u` ON `l`.`DeputyCommanderName` = `u`.`Name`) +LEFT JOIN `LocustCommanders` AS `l2` ON `l`.`CommanderName` = `l2`.`Name` +WHERE IIF(`u`.`Name` IS NOT NULL, `u`.`ThreatLevel`, `l2`.`ThreatLevel`) = CINT(4) +"""); + } + + public override async Task Select_Singleton_Navigation_With_Member_Access(bool async) + { + await base.Select_Singleton_Navigation_With_Member_Access(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` = 'Marcus' AND (`u`.`CityOfBirthName` <> 'Ephyra' OR `u`.`CityOfBirthName` IS NULL) +"""); + } + + public override async Task Select_Where_Navigation(bool async) + { + await base.Select_Where_Navigation(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` = 'Marcus' +"""); + } + + public override async Task Select_Where_Navigation_Equals_Navigation(bool async) + { + await base.Select_Where_Navigation_Equals_Navigation(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` +FROM (( + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` + FROM `Tags` AS `t`, + `Tags` AS `t0` +) AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `s`.`GearNickName` = `u`.`Nickname` AND `s`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` +) AS `u0` ON `s`.`GearNickName0` = `u0`.`Nickname` AND `s`.`GearSquadId0` = `u0`.`SquadId` +WHERE (`u`.`Nickname` = `u0`.`Nickname` OR (`u`.`Nickname` IS NULL AND `u0`.`Nickname` IS NULL)) AND (`u`.`SquadId` = `u0`.`SquadId` OR (`u`.`SquadId` IS NULL AND `u0`.`SquadId` IS NULL)) +"""); + } + + public override async Task Select_Where_Navigation_Null(bool async) + { + await base.Select_Where_Navigation_Null(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` IS NULL OR `u`.`SquadId` IS NULL +"""); + } + + public override async Task Select_Where_Navigation_Null_Reverse(bool async) + { + await base.Select_Where_Navigation_Null_Reverse(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` IS NULL OR `u`.`SquadId` IS NULL +"""); + } + + public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(bool async) + { + await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(async); + + AssertSql( + """ +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` +FROM (( + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0` + FROM `Tags` AS `t`, + `Tags` AS `t0` +) AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `s`.`GearNickName` = `u`.`Nickname` AND `s`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` +) AS `u0` ON `s`.`GearNickName0` = `u0`.`Nickname` AND `s`.`GearSquadId0` = `u0`.`SquadId` +WHERE `u`.`Nickname` = `u0`.`Nickname` OR (`u`.`Nickname` IS NULL AND `u0`.`Nickname` IS NULL) +"""); + } + + public override async Task Optional_Navigation_Null_Coalesce_To_Clr_Type(bool async) + { + await base.Optional_Navigation_Null_Coalesce_To_Clr_Type(async); + + AssertSql( +""" +SELECT TOP 1 IIF(`w0`.`IsAutomatic` IS NULL, FALSE, `w0`.`IsAutomatic`) AS `IsAutomatic` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY `w`.`Id` +"""); + } + + public override async Task Where_subquery_boolean(bool async) + { + await base.Where_subquery_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +"""); + } + + public override async Task Where_subquery_boolean_with_pushdown(bool async) + { + await base.Where_subquery_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +"""); + } + + public override async Task Where_subquery_distinct_firstordefault_boolean(bool async) + { + await base.Where_subquery_distinct_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`)) +"""); + } + + public override async Task Where_subquery_distinct_firstordefault_boolean_with_pushdown(bool async) + { + await base.Where_subquery_distinct_firstordefault_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +"""); + } + + public override async Task Where_subquery_distinct_first_boolean(bool async) + { + await base.Where_subquery_distinct_first_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_singleordefault_boolean1(bool async) + { + await base.Where_subquery_distinct_singleordefault_boolean1(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`)) +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_singleordefault_boolean2(bool async) + { + await base.Where_subquery_distinct_singleordefault_boolean2(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_singleordefault_boolean_with_pushdown(bool async) + { + await base.Where_subquery_distinct_singleordefault_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_lastordefault_boolean(bool async) + { + await base.Where_subquery_distinct_lastordefault_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE NOT (( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id` DESC)) +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_last_boolean(bool async) + { + await base.Where_subquery_distinct_last_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE NOT (`u`.`HasSoulPatch`) AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id` DESC) +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_orderby_firstordefault_boolean(bool async) + { + await base.Where_subquery_distinct_orderby_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`)) +"""); + } + + public override async Task Where_subquery_distinct_orderby_firstordefault_boolean_with_pushdown(bool async) + { + await base.Where_subquery_distinct_orderby_firstordefault_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +"""); + } + + public override async Task Where_subquery_union_firstordefault_boolean(bool async) + { + await base.Where_subquery_union_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND ( + SELECT TOP 1 `u0`.`IsAutomatic` + FROM ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + UNION + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE `u`.`FullName` = `w0`.`OwnerFullName` + ) AS `u0` + ORDER BY `u0`.`Id`) +"""); + } + + public override async Task Where_subquery_join_firstordefault_boolean(bool async) + { + await base.Where_subquery_join_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + INNER JOIN ( + SELECT `w0`.`Id` + FROM `Weapons` AS `w0` + WHERE `u`.`FullName` = `w0`.`OwnerFullName` + ) AS `w1` ON `w`.`Id` = `w1`.`Id` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +"""); + } + + public override async Task Where_subquery_left_join_firstordefault_boolean(bool async) + { + await base.Where_subquery_left_join_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `w0`.`Id` + FROM `Weapons` AS `w0` + WHERE `u`.`FullName` = `w0`.`OwnerFullName` + ) AS `w1` ON `w`.`Id` = `w1`.`Id` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +"""); + } + + public override async Task Where_subquery_concat_firstordefault_boolean(bool async) + { + await base.Where_subquery_concat_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND ( + SELECT TOP 1 `u0`.`IsAutomatic` + FROM ( + SELECT `w`.`Id`, `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + UNION ALL + SELECT `w0`.`Id`, `w0`.`IsAutomatic` + FROM `Weapons` AS `w0` + WHERE `u`.`FullName` = `w0`.`OwnerFullName` + ) AS `u0` + ORDER BY `u0`.`Id`) +"""); + } + + public override async Task Concat_with_count(bool async) + { + await base.Concat_with_count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Officers` AS `o` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` + UNION ALL + SELECT 1 + FROM `Officers` AS `o0` +) AS `u1` +"""); + } + + public override async Task Concat_scalars_with_count(bool async) + { + await base.Concat_scalars_with_count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Officers` AS `o` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` + UNION ALL + SELECT 1 + FROM `Officers` AS `o0` +) AS `u1` +"""); + } + + public override async Task Concat_anonymous_with_count(bool async) + { + await base.Concat_anonymous_with_count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Officers` AS `o` + ) AS `u` + UNION ALL + SELECT 1 + FROM ( + SELECT 1 + FROM `Gears` AS `g0` + UNION ALL + SELECT 1 + FROM `Officers` AS `o0` + ) AS `u0` +) AS `u1` +"""); + } + + public override async Task Concat_with_scalar_projection(bool async) + { + await base.Concat_with_scalar_projection(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +UNION ALL +SELECT `o`.`Nickname` +FROM `Officers` AS `o` +UNION ALL +SELECT `g0`.`Nickname` +FROM `Gears` AS `g0` +UNION ALL +SELECT `o0`.`Nickname` +FROM `Officers` AS `o0` +"""); + } + + public override async Task Select_navigation_with_concat_and_count(bool async) + { + await base.Select_navigation_with_concat_and_count(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + UNION ALL + SELECT 1 + FROM `Weapons` AS `w0` + WHERE `u`.`FullName` = `w0`.`OwnerFullName` + ) AS `u0`) +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE NOT (`u`.`HasSoulPatch`) +"""); + } + + public override async Task Concat_with_collection_navigations(bool async) + { + await base.Concat_with_collection_navigations(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + UNION + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE `u`.`FullName` = `w0`.`OwnerFullName` + ) AS `u0`) +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` +"""); + } + + public override async Task Union_with_collection_navigations(bool async) + { + await base.Union_with_collection_navigations(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` + UNION + SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`AssignedCityName`, `o1`.`CityOfBirthName`, `o1`.`FullName`, `o1`.`HasSoulPatch`, `o1`.`LeaderNickname`, `o1`.`LeaderSquadId`, `o1`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o1` + ) AS `u1` + WHERE `u`.`Nickname` = `u1`.`LeaderNickname` AND `u`.`SquadId` = `u1`.`LeaderSquadId` + ) AS `u2`) +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_subquery_distinct_firstordefault(bool async) + { + await base.Select_subquery_distinct_firstordefault(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w0`.`Name` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` +"""); + } + + public override async Task Singleton_Navigation_With_Member_Access(bool async) + { + await base.Singleton_Navigation_With_Member_Access(async); + + AssertSql( + """ +SELECT `u`.`CityOfBirthName` AS `B` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`CityOfBirthName` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` = 'Marcus' AND (`u`.`CityOfBirthName` <> 'Ephyra' OR `u`.`CityOfBirthName` IS NULL) +"""); + } + + public override async Task GroupJoin_Composite_Key(bool async) + { + await base.GroupJoin_Composite_Key(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM `Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +"""); + } + + public override async Task Join_navigation_translated_to_subquery_composite_key(bool async) + { + await base.Join_navigation_translated_to_subquery_composite_key(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `s`.`Note` +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN ( + SELECT `t`.`Note`, `u0`.`FullName` + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` + FROM `Officers` AS `o0` + ) AS `u0` ON `t`.`GearNickName` = `u0`.`Nickname` AND `t`.`GearSquadId` = `u0`.`SquadId` +) AS `s` ON `u`.`FullName` = `s`.`FullName` +"""); + } + + public override async Task Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(bool async) + { + await base.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `s`.`Note` +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN ( + SELECT `t`.`Note`, `u0`.`FullName` + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` + FROM `Officers` AS `o0` + ) AS `u0` ON `t`.`GearNickName` = `u0`.`Nickname` AND `t`.`GearSquadId` = `u0`.`SquadId` +) AS `s` ON `u`.`FullName` = `s`.`FullName` +"""); + } + + public override async Task Join_with_order_by_without_skip_or_take(bool async) + { + await base.Join_with_order_by_without_skip_or_take(async); + + AssertSql( + """ +SELECT `w`.`Name`, `u`.`FullName` +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +"""); + } + + public override async Task Join_with_order_by_without_skip_or_take_nested(bool async) + { + await base.Join_with_order_by_without_skip_or_take_nested(async); + + AssertSql( + """ +SELECT `w`.`Name`, `u`.`FullName` +FROM (`Squads` AS `s` +INNER JOIN ( + SELECT `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` ON `s`.`Id` = `u`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`FullName` IS NOT NULL AND `w`.`OwnerFullName` IS NOT NULL +"""); + } + + public override async Task Collection_with_inheritance_and_join_include_joined(bool async) + { + await base.Collection_with_inheritance_and_join_include_joined(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` AND `u`.`SquadId` = `t0`.`GearSquadId` +"""); + } + + public override async Task Collection_with_inheritance_and_join_include_source(bool async) + { + await base.Collection_with_inheritance_and_join_include_source(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` +FROM (( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` AND `u`.`SquadId` = `t0`.`GearSquadId` +"""); + } + + public override async Task Non_unicode_string_literal_is_used_for_non_unicode_column(bool async) + { + await base.Non_unicode_string_literal_is_used_for_non_unicode_column(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = 'Unknown' +"""); + } + + public override async Task Non_unicode_string_literal_is_used_for_non_unicode_column_right(bool async) + { + await base.Non_unicode_string_literal_is_used_for_non_unicode_column_right(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE 'Unknown' = `c`.`Location` +"""); + } + + public override async Task Non_unicode_parameter_is_used_for_non_unicode_column(bool async) + { + await base.Non_unicode_parameter_is_used_for_non_unicode_column(async); + + AssertSql( + """ +@value='Unknown' (Size = 100) + +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = @value +"""); + } + + public override async Task Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(bool async) + { + await base.Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(async); + + AssertSql( + """ +@cities1='Unknown' (Size = 100) +@cities2='Jacinto's location' (Size = 100) +@cities3='Ephyra's location' (Size = 100) + +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` IN (@cities1, @cities2, @cities3) +"""); + } + + public override async Task Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(bool async) + { + await base.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = 'Unknown' AND ( + SELECT COUNT(*) + FROM ( + SELECT `g`.`Nickname`, `g`.`CityOfBirthName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`CityOfBirthName` + FROM `Officers` AS `o` + ) AS `u` + WHERE `c`.`Name` = `u`.`CityOfBirthName` AND `u`.`Nickname` = 'Paduk') = 1 +"""); + } + + public override async Task Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(bool async) + { + await base.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +WHERE `u`.`Nickname` = 'Marcus' AND `c`.`Location` = 'Jacinto''s location' +"""); + } + + public override async Task Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(bool async) + { + await base.Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` LIKE '%Jacinto%' +"""); + } + + public override async Task Unicode_string_literals_is_used_for_non_unicode_column_with_concat(bool async) + { + await base.Unicode_string_literals_is_used_for_non_unicode_column_with_concat(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE IIF(`c`.`Location` IS NULL, '', `c`.`Location`) & 'Added' LIKE '%Add%' +"""); + } + + public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result1() + { + base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result1(); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +"""); + } + + public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result2() + { + base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result2(); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(async); + + // Issue#16897 + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(async); + + // Issue#16897 + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` +FROM ((((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `u0`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w2` ON `u`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async); + + // Issue#16897 + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(async); + + // Issue#16897 + AssertSql( + """ +SELECT `u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId`, `u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL, `w3`.`Id`, `w3`.`AmmunitionType`, `w3`.`IsAutomatic`, `w3`.`Name`, `w3`.`OwnerFullName`, `w3`.`SynergyWithId`, `w4`.`Id`, `w4`.`AmmunitionType`, `w4`.`IsAutomatic`, `w4`.`Name`, `w4`.`OwnerFullName`, `w4`.`SynergyWithId` +FROM ((((((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `u0`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w2` ON `u`.`FullName` = `w2`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w3` ON `u0`.`FullName` = `w3`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w4` ON `u`.`FullName` = `w4`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id`, `w2`.`Id`, `w3`.`Id` +"""); + } + + public override async Task Coalesce_operator_in_predicate(bool async) + { + await base.Coalesce_operator_in_predicate(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`u`.`HasSoulPatch` IS NULL, FALSE, `u`.`HasSoulPatch`) +"""); + } + + public override async Task Coalesce_operator_in_predicate_with_other_conditions(bool async) + { + await base.Coalesce_operator_in_predicate_with_other_conditions(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`u`.`HasSoulPatch` IS NULL, FALSE, `u`.`HasSoulPatch`) +"""); + } + + public override async Task Coalesce_operator_in_projection_with_other_conditions(bool async) + { + await base.Coalesce_operator_in_projection_with_other_conditions(async); + + AssertSql( + """ +SELECT (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`u`.`HasSoulPatch` IS NULL, FALSE, `u`.`HasSoulPatch`) +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `u`.`HasSoulPatch` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate2(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate2(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`HasSoulPatch` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate_negated(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate_negated(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE NOT (`u`.`HasSoulPatch`) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate_negated_complex1(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE NOT (IIF(`u`.`HasSoulPatch`, TRUE, `u`.`HasSoulPatch`)) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate_negated_complex2(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate_negated_complex2(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE NOT (IIF(NOT (`u`.`HasSoulPatch`), FALSE, `u`.`HasSoulPatch`)) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_conditional_expression(bool async) + { + await base.Optional_navigation_type_compensation_works_with_conditional_expression(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`u`.`HasSoulPatch`, TRUE, FALSE) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_binary_expression(bool async) + { + await base.Optional_navigation_type_compensation_works_with_binary_expression(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`HasSoulPatch` OR (`t`.`Note` LIKE '%Cole%') +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_binary_and_expression(bool async) + { + await base.Optional_navigation_type_compensation_works_with_binary_and_expression(async); + + AssertSql( + """ +SELECT `u`.`HasSoulPatch` AND (`t`.`Note` LIKE '%Cole%') AND `t`.`Note` IS NOT NULL +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_projection(bool async) + { + await base.Optional_navigation_type_compensation_works_with_projection(async); + + AssertSql( + """ +SELECT `u`.`SquadId` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(bool async) + { + await base.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(async); + + AssertSql( + """ +SELECT `u`.`SquadId` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_DTOs(bool async) + { + await base.Optional_navigation_type_compensation_works_with_DTOs(async); + + AssertSql( + """ +SELECT `u`.`SquadId` AS `Id` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_list_initializers(bool async) + { + await base.Optional_navigation_type_compensation_works_with_list_initializers(async); + + AssertSql( + """ +SELECT `u`.`SquadId`, `u`.`SquadId` + 1 +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_array_initializers(bool async) + { + await base.Optional_navigation_type_compensation_works_with_array_initializers(async); + + AssertSql( + """ +SELECT `u`.`SquadId` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_orderby(bool async) + { + await base.Optional_navigation_type_compensation_works_with_orderby(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +ORDER BY `u`.`SquadId` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_all(bool async) + { + await base.Optional_navigation_type_compensation_works_with_all(async); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` + WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND NOT (`u`.`HasSoulPatch`)) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_negated_predicate(bool async) + { + await base.Optional_navigation_type_compensation_works_with_negated_predicate(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND NOT (`u`.`HasSoulPatch`) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_contains(bool async) + { + await base.Optional_navigation_type_compensation_works_with_contains(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `u`.`SquadId` IN ( + SELECT `u0`.`SquadId` + FROM ( + SELECT `g0`.`SquadId` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`SquadId` + FROM `Officers` AS `o0` + ) AS `u0` +) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_skip(bool async) + { + await base.Optional_navigation_type_compensation_works_with_skip(async); + + AssertSql(); + } + + public override async Task Optional_navigation_type_compensation_works_with_take(bool async) + { + await base.Optional_navigation_type_compensation_works_with_take(async); + + AssertSql(); + } + + public override async Task Select_correlated_filtered_collection(bool async) + { + await base.Select_correlated_filtered_collection(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `c`.`Name`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`CityOfBirthName`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`Name` <> 'Lancer' OR `w`.`Name` IS NULL +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `c`.`Name` IN ('Ephyra', 'Hanover') +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `c`.`Name` +"""); + } + + public override async Task Select_correlated_filtered_collection_with_composite_key(bool async) + { + await base.Select_correlated_filtered_collection_with_composite_key(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u0`.`Nickname` <> 'Dom' +) AS `u1` ON `u`.`Nickname` = `u1`.`LeaderNickname` AND `u`.`SquadId` = `u1`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname` +"""); + } + + public override async Task Select_correlated_filtered_collection_works_with_caching(bool async) + { + await base.Select_correlated_filtered_collection_works_with_caching(async); + + AssertSql( + """ +SELECT `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` +ORDER BY `t`.`Note`, `t`.`Id`, `u`.`Nickname` +"""); + } + + public override async Task Join_predicate_value_equals_condition(bool async) + { + await base.Join_predicate_value_equals_condition(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] +) AS [t] +INNER JOIN [Weapons] AS [w] ON [w].[SynergyWithId] IS NOT NULL +"""); + } + + public override async Task Join_predicate_value(bool async) + { + await base.Join_predicate_value(async); + + AssertSql( +""" +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Weapons` AS `w` ON `u`.`HasSoulPatch` +"""); + } + + public override async Task Join_predicate_condition_equals_condition(bool async) + { + await base.Join_predicate_condition_equals_condition(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] +) AS [t] +INNER JOIN [Weapons] AS [w] ON [w].[SynergyWithId] IS NOT NULL +"""); + } + + public override async Task Left_join_predicate_value_equals_condition(bool async) + { + await base.Left_join_predicate_value_equals_condition(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] +) AS [t] +LEFT JOIN [Weapons] AS [w] ON [w].[SynergyWithId] IS NOT NULL +"""); + } + + public override async Task Left_join_predicate_value(bool async) + { + await base.Left_join_predicate_value(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`HasSoulPatch` +"""); + } + + public override async Task Left_join_predicate_condition_equals_condition(bool async) + { + await base.Left_join_predicate_condition_equals_condition(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] +) AS [t] +LEFT JOIN [Weapons] AS [w] ON [w].[SynergyWithId] IS NOT NULL +"""); + } + + public override async Task Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used( + bool async) + { + await base.Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used(async); + + AssertSql(); + } + + public override async Task Complex_predicate_with_AndAlso_and_nullable_bool_property(bool async) + { + await base.Complex_predicate_with_AndAlso_and_nullable_bool_property(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName` +WHERE `w`.`Id` <> 50 AND NOT (`u`.`HasSoulPatch`) +"""); + } + + public override async Task Distinct_with_optional_navigation_is_translated_to_sql(bool async) + { + await base.Distinct_with_optional_navigation_is_translated_to_sql(async); + + AssertSql( + """ +SELECT DISTINCT `u`.`HasSoulPatch` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Sum_with_optional_navigation_is_translated_to_sql(bool async) + { + await base.Sum_with_optional_navigation_is_translated_to_sql(async); + + AssertSql( + """ +SELECT IIF(SUM(`u`.`SquadId`) IS NULL, 0, SUM(`u`.`SquadId`)) +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Count_with_optional_navigation_is_translated_to_sql(bool async) + { + await base.Count_with_optional_navigation_is_translated_to_sql(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL +"""); + } + + public override async Task FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(bool async) + { + await base.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(async); + + AssertSql( + """ +SELECT TOP 1 `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `s`.`Id` = `u`.`SquadId` +WHERE `s`.`Name` = 'Kilo' +"""); + } + + public override async Task Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(bool async) + { + await base.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(async); + + AssertSql( + """ +SELECT `s`.`Name` +FROM `Squads` AS `s` +WHERE NOT EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` + WHERE `s`.`Id` = `u`.`SquadId` AND `t`.`Note` = 'Dom''s Tag') +"""); + } + + public override async Task All_with_optional_navigation_is_translated_to_sql(bool async) + { + await base.All_with_optional_navigation_is_translated_to_sql(async); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` + WHERE `t`.`Note` = 'Foo') +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Contains_with_local_nullable_guid_list_closure(bool async) + { + await base.Contains_with_local_nullable_guid_list_closure(async); + + AssertSql( + """ +@ids1='df36f493-463f-4123-83f9-6b135deeb7ba' +@ids2='23cbcf9b-ce14-45cf-aafa-2c2667ebfdd3' +@ids3='ab1b82d7-88db-42bd-a132-7eef9aa68af4' + +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +WHERE `t`.`Id` IN (@ids1, @ids2, @ids3) +"""); + } + + public override async Task Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(bool async) + { + await base.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(async); + + AssertSql( + """ +SELECT `u`.`FullName` +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` +ORDER BY `u`.`Rank` +"""); + } + + public override async Task Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(bool async) + { + await base.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(async); + + AssertSql( + """ +SELECT `u`.`FullName` +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE NOT (`u`.`HasSoulPatch`) +ORDER BY `u`.`FullName` +"""); + } + + public override async Task Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(bool async) + { + await base.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(async); + + AssertSql( + """ +SELECT `u`.`FullName` +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE NOT (`u`.`HasSoulPatch`) +ORDER BY `u`.`FullName` +"""); + } + + public override async Task Where_is_properly_lifted_from_subquery_created_by_include(bool async) + { + await base.Where_is_properly_lifted_from_subquery_created_by_include(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `u`.`FullName` <> 'Augustus Cole' AND NOT (`u`.`HasSoulPatch`) +ORDER BY `u`.`FullName` +"""); + } + + public override async Task Subquery_is_lifted_from_main_from_clause_of_SelectMany(bool async) + { + await base.Subquery_is_lifted_from_main_from_clause_of_SelectMany(async); + + AssertSql( + """ +SELECT `u`.`FullName` AS `Name1`, `u0`.`FullName` AS `Name2` +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u`, +( + SELECT `g0`.`FullName`, `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`FullName`, `o0`.`HasSoulPatch` + FROM `Officers` AS `o0` +) AS `u0` +WHERE `u`.`HasSoulPatch` AND NOT (`u0`.`HasSoulPatch`) +ORDER BY `u`.`FullName` +"""); + } + + public override async Task Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(bool async) + { + await base.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(async); + + AssertSql( + """ +SELECT `u`.`FullName` +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u`, +`Tags` AS `t` +WHERE `u`.`HasSoulPatch` +ORDER BY `u`.`FullName` +"""); + } + + public override async Task Subquery_containing_join_projecting_main_from_clause_gets_lifted(bool async) + { + await base.Subquery_containing_join_projecting_main_from_clause_gets_lifted(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM ( + SELECT `g`.`Nickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(bool async) + { + await base.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM ( + SELECT `g`.`Nickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Subquery_containing_join_gets_lifted_clashing_names(bool async) + { + await base.Subquery_containing_join_gets_lifted_clashing_names(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM (( + SELECT `g`.`Nickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` +WHERE `t`.`GearNickName` <> 'Cole Train' OR `t`.`GearNickName` IS NULL +ORDER BY `u`.`Nickname`, `t0`.`Id` +"""); + } + + public override async Task Subquery_created_by_include_gets_lifted_nested(bool async) + { + await base.Subquery_created_by_include_gets_lifted_nested(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +WHERE EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AND NOT (`u`.`HasSoulPatch`) +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Subquery_is_lifted_from_additional_from_clause(bool async) + { + await base.Subquery_is_lifted_from_additional_from_clause(async); + + AssertSql( + """ +SELECT `u`.`FullName` AS `Name1`, `u0`.`FullName` AS `Name2` +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u`, +( + SELECT `g0`.`FullName`, `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`FullName`, `o0`.`HasSoulPatch` + FROM `Officers` AS `o0` +) AS `u0` +WHERE `u`.`HasSoulPatch` AND NOT (`u0`.`HasSoulPatch`) +ORDER BY `u`.`FullName` +"""); + } + + public override async Task Subquery_with_result_operator_is_not_lifted(bool async) + { + await base.Subquery_with_result_operator_is_not_lifted(async); + + AssertSql( + """ +@p='2' + +SELECT `u0`.`FullName` +FROM ( + SELECT TOP @p `u`.`FullName`, `u`.`Rank` + FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`Rank` + FROM `Officers` AS `o` + ) AS `u` + WHERE NOT (`u`.`HasSoulPatch`) + ORDER BY `u`.`FullName` +) AS `u0` +ORDER BY `u0`.`Rank` +"""); + } + + public override async Task Skip_with_orderby_followed_by_orderBy_is_pushed_down(bool async) + { + await base.Skip_with_orderby_followed_by_orderBy_is_pushed_down(async); + + AssertSql( +""" +@__p_0='1' + +SELECT [t0].[FullName] +FROM ( + SELECT [t].[FullName], [t].[Rank] + FROM ( + SELECT [g].[FullName], [g].[HasSoulPatch], [g].[Rank] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[FullName], [o].[HasSoulPatch], [o].[Rank] + FROM [Officers] AS [o] + ) AS [t] + WHERE [t].[HasSoulPatch] = CAST(0 AS bit) + ORDER BY [t].[FullName] + OFFSET @__p_0 ROWS +) AS [t0] +ORDER BY [t0].[Rank] +"""); + } + + public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_down1(bool async) + { + await base.Take_without_orderby_followed_by_orderBy_is_pushed_down1(async); + + AssertSql( + """ +@p='999' + +SELECT `u0`.`FullName` +FROM ( + SELECT TOP @p `u`.`FullName`, `u`.`Rank` + FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`Rank` + FROM `Officers` AS `o` + ) AS `u` + WHERE NOT (`u`.`HasSoulPatch`) +) AS `u0` +ORDER BY `u0`.`Rank` +"""); + } + + public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_down2(bool async) + { + await base.Take_without_orderby_followed_by_orderBy_is_pushed_down2(async); + + AssertSql( + """ +@p='999' + +SELECT `u0`.`FullName` +FROM ( + SELECT TOP @p `u`.`FullName`, `u`.`Rank` + FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`Rank` + FROM `Officers` AS `o` + ) AS `u` + WHERE NOT (`u`.`HasSoulPatch`) +) AS `u0` +ORDER BY `u0`.`Rank` +"""); + } + + public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_down3(bool async) + { + await base.Take_without_orderby_followed_by_orderBy_is_pushed_down3(async); + + AssertSql( + """ +@p='999' + +SELECT `u0`.`FullName` +FROM ( + SELECT TOP @p `u`.`FullName`, `u`.`Rank` + FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`Rank` + FROM `Officers` AS `o` + ) AS `u` + WHERE NOT (`u`.`HasSoulPatch`) +) AS `u0` +ORDER BY `u0`.`FullName`, `u0`.`Rank` +"""); + } + + public override async Task Select_length_of_string_property(bool async) + { + await base.Select_length_of_string_property(async); + + AssertSql( +""" +SELECT `w`.`Name`, IIF(LEN(`w`.`Name`) IS NULL, NULL, CLNG(LEN(`w`.`Name`))) AS `Length` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Client_method_on_collection_navigation_in_outer_join_key(bool async) + { + await base.Client_method_on_collection_navigation_in_outer_join_key(async); + + AssertSql(); + } + + public override async Task Member_access_on_derived_entity_using_cast(bool async) + { + await base.Member_access_on_derived_entity_using_cast(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`Eradicated` +FROM `LocustHordes` AS `l` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Member_access_on_derived_materialized_entity_using_cast(bool async) + { + await base.Member_access_on_derived_materialized_entity_using_cast(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated` +FROM `LocustHordes` AS `l` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Member_access_on_derived_entity_using_cast_and_let(bool async) + { + await base.Member_access_on_derived_entity_using_cast_and_let(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`Eradicated` +FROM `LocustHordes` AS `l` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Property_access_on_derived_entity_using_cast(bool async) + { + await base.Property_access_on_derived_entity_using_cast(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`Eradicated` +FROM `LocustHordes` AS `l` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Navigation_access_on_derived_entity_using_cast(bool async) + { + await base.Navigation_access_on_derived_entity_using_cast(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l0`.`ThreatLevel` AS `Threat` +FROM `LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Navigation_access_on_derived_materialized_entity_using_cast(bool async) + { + await base.Navigation_access_on_derived_materialized_entity_using_cast(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, `l0`.`ThreatLevel` AS `Threat` +FROM `LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Navigation_access_via_EFProperty_on_derived_entity_using_cast(bool async) + { + await base.Navigation_access_via_EFProperty_on_derived_entity_using_cast(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l0`.`ThreatLevel` AS `Threat` +FROM `LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Navigation_access_fk_on_derived_entity_using_cast(bool async) + { + await base.Navigation_access_fk_on_derived_entity_using_cast(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l0`.`Name` AS `CommanderName` +FROM `LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Collection_navigation_access_on_derived_entity_using_cast(bool async) + { + await base.Collection_navigation_access_on_derived_entity_using_cast(async); + + AssertSql( + """ +SELECT `l`.`Name`, ( + SELECT COUNT(*) + FROM ( + SELECT `l0`.`LocustHordeId` + FROM `LocustLeaders` AS `l0` + UNION ALL + SELECT `l1`.`LocustHordeId` + FROM `LocustCommanders` AS `l1` + ) AS `u` + WHERE `l`.`Id` = `u`.`LocustHordeId`) AS `LeadersCount` +FROM `LocustHordes` AS `l` +ORDER BY `l`.`Name` +"""); + } + + public override async Task Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(bool async) + { + await base.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(async); + + AssertSql( + """ +SELECT `l`.`Name`, `u`.`Name` AS `LeaderName` +FROM `LocustHordes` AS `l` +INNER JOIN ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId` + FROM `LocustLeaders` AS `l0` + UNION ALL + SELECT `l1`.`Name`, `l1`.`LocustHordeId` + FROM `LocustCommanders` AS `l1` +) AS `u` ON `l`.`Id` = `u`.`LocustHordeId` +ORDER BY `u`.`Name` +"""); + } + + public override async Task Include_on_derived_entity_using_OfType(bool async) + { + await base.Include_on_derived_entity_using_OfType(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM (`LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) +LEFT JOIN ( + SELECT `l1`.`Name`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l1` + UNION ALL + SELECT `l2`.`Name`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l2`.`DefeatedByNickname`, `l2`.`DefeatedBySquadId`, `l2`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l2` +) AS `u` ON `l`.`Id` = `u`.`LocustHordeId` +ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Name` +"""); + } + + public override async Task Distinct_on_subquery_doesnt_get_lifted(bool async) + { + await base.Distinct_on_subquery_doesnt_get_lifted(async); + + AssertSql( + """ +SELECT `u0`.`HasSoulPatch` +FROM ( + SELECT DISTINCT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` +) AS `u0` +"""); + } + + public override async Task Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(bool async) + { + await base.Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(async); + + AssertSql( +""" +SELECT `l`.`Eradicated` +FROM `LocustHordes` AS `l` +"""); + } + + public override async Task Comparing_two_collection_navigations_composite_key(bool async) + { + await base.Comparing_two_collection_navigations_composite_key(async); + + AssertSql( + """ +SELECT `u`.`Nickname` AS `Nickname1`, `u0`.`Nickname` AS `Nickname2` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u`, +( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` +) AS `u0` +WHERE `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Comparing_two_collection_navigations_inheritance(bool async) + { + await base.Comparing_two_collection_navigations_inheritance(async); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Nickname` +FROM (( + SELECT `l`.`Name`, `l`.`CommanderName`, `u`.`Nickname`, `u`.`SquadId` + FROM `LocustHordes` AS `l`, + ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `u`.`HasSoulPatch` +) AS `s` +LEFT JOIN `LocustCommanders` AS `l0` ON `s`.`CommanderName` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` +) AS `u0` ON `l0`.`DefeatedByNickname` = `u0`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u0`.`SquadId` +WHERE `u0`.`Nickname` = `s`.`Nickname` AND `u0`.`SquadId` = `s`.`SquadId` +"""); + } + + public override async Task Comparing_entities_using_Equals_inheritance(bool async) + { + await base.Comparing_entities_using_Equals_inheritance(async); + + AssertSql( + """ +SELECT `u`.`Nickname` AS `Nickname1`, `u0`.`Nickname` AS `Nickname2` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u`, +( + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` +) AS `u0` +WHERE `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` +ORDER BY `u`.`Nickname`, `u0`.`Nickname` +"""); + } + + public override async Task Contains_on_nullable_array_produces_correct_sql(bool async) + { + await base.Contains_on_nullable_array_produces_correct_sql(async); + + AssertSql( + """ +@cities1='Ephyra' (Size = 255) + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +WHERE `u`.`SquadId` < 2 AND (`c`.`Name` IS NULL OR `c`.`Name` = @cities1) +"""); + } + + public override async Task Optional_navigation_with_collection_composite_key(bool async) + { + await base.Optional_navigation_with_collection_composite_key(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Discriminator` = 'Officer' AND ( + SELECT COUNT(*) + FROM ( + SELECT `g0`.`Nickname`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` IS NOT NULL AND `u`.`SquadId` IS NOT NULL AND `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` AND `u0`.`Nickname` = 'Dom') > 0 +"""); + } + + public override async Task Select_null_conditional_with_inheritance(bool async) + { + await base.Select_null_conditional_with_inheritance(async); + + AssertSql( +""" +SELECT IIF(`l`.`CommanderName` IS NOT NULL, `l`.`CommanderName`, NULL) +FROM `LocustHordes` AS `l` +"""); + } + + public override async Task Select_null_conditional_with_inheritance_negative(bool async) + { + await base.Select_null_conditional_with_inheritance_negative(async); + + AssertSql( + """ +SELECT IIF(`l`.`CommanderName` IS NOT NULL, `l`.`Eradicated`, NULL) +FROM `LocustHordes` AS `l` +"""); + } + + public override async Task Project_collection_navigation_with_inheritance1(bool async) + { + await base.Project_collection_navigation_with_inheritance1(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Name`, `l1`.`Id`, `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ((`LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `LocustHordes` AS `l1` ON `l0`.`Name` = `l1`.`CommanderName`) +LEFT JOIN ( + SELECT `l2`.`Name`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l2` + UNION ALL + SELECT `l3`.`Name`, `l3`.`LocustHordeId`, `l3`.`ThreatLevel`, `l3`.`ThreatLevelByte`, `l3`.`ThreatLevelNullableByte`, `l3`.`DefeatedByNickname`, `l3`.`DefeatedBySquadId`, `l3`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l3` +) AS `u` ON `l1`.`Id` = `u`.`LocustHordeId` +ORDER BY `l`.`Id`, `l0`.`Name`, `l1`.`Id` +"""); + } + + public override async Task Project_collection_navigation_with_inheritance2(bool async) + { + await base.Project_collection_navigation_with_inheritance2(async); + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ((`LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `l0`.`DefeatedByNickname` = `u`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Project_collection_navigation_with_inheritance3(bool async) + { + await base.Project_collection_navigation_with_inheritance3(async); + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ((`LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `l0`.`DefeatedByNickname` = `u`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Include_reference_on_derived_type_using_string(bool async) + { + await base.Include_reference_on_derived_type_using_string(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` +"""); + } + + public override async Task Include_reference_on_derived_type_using_string_nested1(bool async) + { + await base.Include_reference_on_derived_type_using_string_nested1(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM (( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u0`.`SquadId` = `s`.`Id` +"""); + } + + public override async Task Include_reference_on_derived_type_using_string_nested2(bool async) + { + await base.Include_reference_on_derived_type_using_string_nested2(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Name`, `s`.`Location`, `s`.`Nation` +FROM (( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId`) +LEFT JOIN ( + SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u1` + INNER JOIN `Cities` AS `c` ON `u1`.`CityOfBirthName` = `c`.`Name` +) AS `s` ON (`u0`.`Nickname` = `s`.`LeaderNickname` OR (`u0`.`Nickname` IS NULL AND `s`.`LeaderNickname` IS NULL)) AND `u0`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `u`.`Name`, `u0`.`Nickname`, `u0`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Include_reference_on_derived_type_using_lambda(bool async) + { + await base.Include_reference_on_derived_type_using_lambda(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` +"""); + } + + public override async Task Include_reference_on_derived_type_using_lambda_with_soft_cast(bool async) + { + await base.Include_reference_on_derived_type_using_lambda_with_soft_cast(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` +"""); + } + + public override async Task Include_reference_on_derived_type_using_lambda_with_tracking(bool async) + { + await base.Include_reference_on_derived_type_using_lambda_with_tracking(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` +"""); + } + + public override async Task Include_collection_on_derived_type_using_string(bool async) + { + await base.Include_collection_on_derived_type_using_string(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Include_collection_on_derived_type_using_lambda(bool async) + { + await base.Include_collection_on_derived_type_using_lambda(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Include_collection_on_derived_type_using_lambda_with_soft_cast(bool async) + { + await base.Include_collection_on_derived_type_using_lambda_with_soft_cast(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Include_base_navigation_on_derived_entity(bool async) + { + await base.Include_base_navigation_on_derived_entity(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task ThenInclude_collection_on_derived_after_base_reference(bool async) + { + await base.ThenInclude_collection_on_derived_after_base_reference(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task ThenInclude_collection_on_derived_after_derived_reference(bool async) + { + await base.ThenInclude_collection_on_derived_after_derived_reference(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ((`LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `l0`.`DefeatedByNickname` = `u`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task ThenInclude_collection_on_derived_after_derived_collection(bool async) + { + await base.ThenInclude_collection_on_derived_after_derived_collection(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`Discriminator0` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u1`.`Nickname` AS `Nickname0`, `u1`.`SquadId` AS `SquadId0`, `u1`.`AssignedCityName` AS `AssignedCityName0`, `u1`.`CityOfBirthName` AS `CityOfBirthName0`, `u1`.`FullName` AS `FullName0`, `u1`.`HasSoulPatch` AS `HasSoulPatch0`, `u1`.`LeaderNickname` AS `LeaderNickname0`, `u1`.`LeaderSquadId` AS `LeaderSquadId0`, `u1`.`Rank` AS `Rank0`, `u1`.`Discriminator` AS `Discriminator0` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`AssignedCityName`, `o1`.`CityOfBirthName`, `o1`.`FullName`, `o1`.`HasSoulPatch`, `o1`.`LeaderNickname`, `o1`.`LeaderSquadId`, `o1`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o1` + ) AS `u1` ON `u0`.`Nickname` = `u1`.`LeaderNickname` AND `u0`.`SquadId` = `u1`.`LeaderSquadId` +) AS `s` ON `u`.`Nickname` = `s`.`LeaderNickname` AND `u`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task ThenInclude_reference_on_derived_after_derived_collection(bool async) + { + await base.ThenInclude_reference_on_derived_after_derived_collection(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator0` +FROM `LocustHordes` AS `l` +LEFT JOIN ( + SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` AS `Discriminator0` + FROM ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l0` + UNION ALL + SELECT `l1`.`Name`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l1` + ) AS `u` + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` +) AS `s` ON `l`.`Id` = `s`.`LocustHordeId` +ORDER BY `l`.`Id`, `s`.`Name`, `s`.`Nickname` +"""); + } + + public override async Task Multiple_derived_included_on_one_method(bool async) + { + await base.Multiple_derived_included_on_one_method(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ((`LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `l0`.`DefeatedByNickname` = `u`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Include_on_derived_multi_level(bool async) + { + await base.Include_on_derived_multi_level(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator`, `s1`.`Id`, `s1`.`Banner`, `s1`.`Banner5`, `s1`.`InternalNumber`, `s1`.`Name`, `s1`.`SquadId0`, `s1`.`MissionId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s0`.`SquadId` AS `SquadId0`, `s0`.`MissionId` + FROM (( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` + INNER JOIN `Squads` AS `s` ON `u0`.`SquadId` = `s`.`Id`) + LEFT JOIN `SquadMissions` AS `s0` ON `s`.`Id` = `s0`.`SquadId` +) AS `s1` ON `u`.`Nickname` = `s1`.`LeaderNickname` AND `u`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`SquadId0` +"""); + } + + public override async Task Projecting_nullable_bool_in_conditional_works(bool async) + { + await base.Projecting_nullable_bool_in_conditional_works(async); + + AssertSql( + """ +SELECT IIF(`u`.`Nickname` IS NOT NULL AND `u`.`SquadId` IS NOT NULL, `u`.`HasSoulPatch`, FALSE) AS `Prop` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +"""); + } + + public override async Task ToString_enum_property_projection(bool async) + { + await base.ToString_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`u`.`Rank` = 0, 'None', IIF(`u`.`Rank` = 1, 'Private', IIF(`u`.`Rank` = 2, 'Corporal', IIF(`u`.`Rank` = 4, 'Sergeant', IIF(`u`.`Rank` = 8, 'Lieutenant', IIF(`u`.`Rank` = 16, 'Captain', IIF(`u`.`Rank` = 32, 'Major', IIF(`u`.`Rank` = 64, 'Colonel', IIF(`u`.`Rank` = 128, 'General', (`u`.`Rank` & '')))))))))) +FROM ( + SELECT `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task ToString_nullable_enum_property_projection(bool async) + { + await base.ToString_nullable_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_enum_contains(bool async) + { + await base.ToString_enum_contains(async); + + AssertSql( + """ +SELECT `m`.`CodeName` +FROM `Missions` AS `m` +WHERE (`m`.`Difficulty` & '') LIKE '%Med%' +"""); + } + + public override async Task ToString_nullable_enum_contains(bool async) + { + await base.ToString_nullable_enum_contains(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) LIKE '%Cart%' +"""); + } + + public override async Task Correlated_collections_naked_navigation_with_ToList(bool async) + { + await base.Correlated_collections_naked_navigation_with_ToList(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(bool async) + { + await base.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) +FROM ( + SELECT `g`.`Nickname`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Correlated_collections_naked_navigation_with_ToArray(bool async) + { + await base.Correlated_collections_naked_navigation_with_ToArray(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection(bool async) + { + await base.Correlated_collections_basic_projection(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection_explicit_to_list(bool async) + { + await base.Correlated_collections_basic_projection_explicit_to_list(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection_explicit_to_array(bool async) + { + await base.Correlated_collections_basic_projection_explicit_to_array(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection_ordered(bool async) + { + await base.Correlated_collections_basic_projection_ordered(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `w0`.`Name` DESC +"""); + } + + public override async Task Correlated_collections_basic_projection_composite_key(bool async) + { + await base.Correlated_collections_basic_projection_composite_key(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname`, `u1`.`FullName`, `u1`.`SquadId` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `u0`.`Nickname`, `u0`.`FullName`, `u0`.`SquadId`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE NOT (`u0`.`HasSoulPatch`) +) AS `u1` ON `u`.`Nickname` = `u1`.`LeaderNickname` AND `u`.`SquadId` = `u1`.`LeaderSquadId` +WHERE `u`.`Nickname` <> 'Foo' +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname` +"""); + } + + public override async Task Correlated_collections_basic_projecting_single_property(bool async) + { + await base.Correlated_collections_basic_projecting_single_property(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Name`, `w0`.`Id` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Name`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projecting_constant(bool async) + { + await base.Correlated_collections_basic_projecting_constant(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`c`, `w0`.`Id` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT 'BFG' AS `c`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projecting_constant_bool(bool async) + { + await base.Correlated_collections_basic_projecting_constant_bool(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`c`, `w0`.`Id` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT TRUE AS `c`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_projection_of_collection_thru_navigation(bool async) + { + await base.Correlated_collections_projection_of_collection_thru_navigation(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s1`.`SquadId`, `s1`.`MissionId` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId` + FROM `SquadMissions` AS `s0` + WHERE `s0`.`MissionId` <> 17 +) AS `s1` ON `s`.`Id` = `s1`.`SquadId` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s1`.`SquadId` +"""); + } + + public override async Task Correlated_collections_project_anonymous_collection_result(bool async) + { + await base.Correlated_collections_project_anonymous_collection_result(async); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Id`, `u`.`FullName`, `u`.`Rank`, `u`.`Nickname`, `u`.`SquadId` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` ON `s`.`Id` = `u`.`SquadId` +WHERE `s`.`Id` < 20 +ORDER BY `s`.`Id`, `u`.`Nickname` +"""); + } + + public override async Task Correlated_collections_nested(bool async) + { + await base.Correlated_collections_nested(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` + FROM (`SquadMissions` AS `s0` + INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) + LEFT JOIN ( + SELECT `s1`.`SquadId`, `s1`.`MissionId` + FROM `SquadMissions` AS `s1` + WHERE `s1`.`SquadId` < 7 + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` + WHERE `s0`.`MissionId` < 42 +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` +"""); + } + + public override async Task Correlated_collections_nested_mixed_streaming_with_buffer1(bool async) + { + await base.Correlated_collections_nested_mixed_streaming_with_buffer1(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` + FROM (`SquadMissions` AS `s0` + INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) + LEFT JOIN ( + SELECT `s1`.`SquadId`, `s1`.`MissionId` + FROM `SquadMissions` AS `s1` + WHERE `s1`.`SquadId` < 2 + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` + WHERE `s0`.`MissionId` < 3 +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` +"""); + } + + public override async Task Correlated_collections_nested_mixed_streaming_with_buffer2(bool async) + { + await base.Correlated_collections_nested_mixed_streaming_with_buffer2(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` + FROM (`SquadMissions` AS `s0` + INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) + LEFT JOIN ( + SELECT `s1`.`SquadId`, `s1`.`MissionId` + FROM `SquadMissions` AS `s1` + WHERE `s1`.`SquadId` < 7 + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` + WHERE `s0`.`MissionId` < 42 +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` +"""); + } + + public override async Task Correlated_collections_nested_with_custom_ordering(bool async) + { + await base.Correlated_collections_nested_with_custom_ordering(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s`.`FullName`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `u0`.`Rank`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank` + FROM `Officers` AS `o0` + ) AS `u0` + LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL + ) AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName` + WHERE `u0`.`FullName` <> 'Foo' +) AS `s` ON `u`.`Nickname` = `s`.`LeaderNickname` AND `u`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `u`.`Nickname`, `u`.`SquadId`, `s`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s`.`IsAutomatic`) +"""); + } + + public override async Task Correlated_collections_same_collection_projected_multiple_times(bool async) + { + await base.Correlated_collections_same_collection_projected_multiple_times(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` +) AS `w1` ON `u`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE `w0`.`IsAutomatic` +) AS `w2` ON `u`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `w1`.`Id` +"""); + } + + public override async Task Correlated_collections_similar_collection_projected_multiple_times(bool async) + { + await base.Correlated_collections_similar_collection_projected_multiple_times(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` +) AS `w1` ON `u`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE NOT (`w0`.`IsAutomatic`) +) AS `w2` ON `u`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `u`.`Rank`, `u`.`Nickname`, `u`.`SquadId`, `w1`.`OwnerFullName`, `w1`.`Id`, NOT (`w2`.`IsAutomatic`) +"""); + } + + public override async Task Correlated_collections_different_collections_projected(bool async) + { + await base.Correlated_collections_different_collections_projected(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id`, `u0`.`Nickname`, `u0`.`Rank`, `u0`.`SquadId` +FROM (( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Name`, `w`.`IsAutomatic`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `u0`.`FullName`, `u0`.`Nickname` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(bool async) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(async); + AssertSql( + """ +SELECT `u`.`FullName` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(bool async) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(async); + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` +FROM ((( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` +) AS `u1` ON `t`.`GearNickName` = `u1`.`Nickname` AND `t`.`GearSquadId` = `u1`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u2`.`Nickname`, `u2`.`SquadId` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`FullName` + FROM `Officers` AS `o2` + ) AS `u2` ON `w`.`OwnerFullName` = `u2`.`FullName` +) AS `s` ON `u1`.`FullName` = `s`.`OwnerFullName` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, NOT (`s`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`Id` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings( + bool async) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` +FROM ((( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` +) AS `u1` ON `t`.`GearNickName` = `u1`.`Nickname` AND `t`.`GearSquadId` = `u1`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u2`.`Nickname`, `u2`.`SquadId` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`FullName` + FROM `Officers` AS `o2` + ) AS `u2` ON `w`.`OwnerFullName` = `u2`.`FullName` +) AS `s` ON `u1`.`FullName` = `s`.`OwnerFullName` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, NOT (`s`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`Id` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings( + bool async) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(async); + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` +FROM ((( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` +) AS `u1` ON `t`.`GearNickName` = `u1`.`Nickname` AND `t`.`GearSquadId` = `u1`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u2`.`Nickname`, `u2`.`SquadId`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `u2`.`FullName` IS NOT NULL AND `u2`.`FullName` = `w0`.`OwnerFullName`) AS `c` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`FullName` + FROM `Officers` AS `o2` + ) AS `u2` ON `w`.`OwnerFullName` = `u2`.`FullName` +) AS `s` ON `u1`.`FullName` = `s`.`OwnerFullName` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id` DESC, `s`.`c`, `s`.`Nickname` +"""); + } + + public override async Task Correlated_collections_multiple_nested_complex_collections(bool async) + { + await base.Correlated_collections_multiple_nested_complex_collections(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Name`, `s1`.`IsAutomatic`, `s1`.`Id1`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00`, `s2`.`Id`, `s2`.`AmmunitionType`, `s2`.`IsAutomatic`, `s2`.`Name`, `s2`.`OwnerFullName`, `s2`.`SynergyWithId`, `s2`.`Nickname`, `s2`.`SquadId` +FROM (((( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` +) AS `u1` ON `t`.`GearNickName` = `u1`.`Nickname` AND `t`.`GearSquadId` = `u1`.`SquadId`) +LEFT JOIN ( + SELECT `u2`.`FullName`, `u2`.`Nickname`, `u2`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Name`, `s0`.`IsAutomatic`, `s0`.`Id1`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `u2`.`Rank`, `s0`.`IsAutomatic0`, `u2`.`LeaderNickname`, `u2`.`LeaderSquadId` + FROM ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`FullName`, `o2`.`LeaderNickname`, `o2`.`LeaderSquadId`, `o2`.`Rank` + FROM `Officers` AS `o2` + ) AS `u2` + LEFT JOIN ( + SELECT `w`.`Id`, `u3`.`Nickname`, `u3`.`SquadId`, `s`.`Id` AS `Id0`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id` AS `Id1`, `u4`.`Nickname` AS `Nickname0`, `u4`.`HasSoulPatch`, `u4`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic` AS `IsAutomatic0`, `w`.`OwnerFullName` + FROM (((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`FullName` + FROM `Gears` AS `g2` + UNION ALL + SELECT `o3`.`Nickname`, `o3`.`SquadId`, `o3`.`FullName` + FROM `Officers` AS `o3` + ) AS `u3` ON `w`.`OwnerFullName` = `u3`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u3`.`SquadId` = `s`.`Id`) + LEFT JOIN `Weapons` AS `w0` ON `u3`.`FullName` = `w0`.`OwnerFullName`) + LEFT JOIN ( + SELECT `g3`.`Nickname`, `g3`.`SquadId`, `g3`.`HasSoulPatch` + FROM `Gears` AS `g3` + UNION ALL + SELECT `o4`.`Nickname`, `o4`.`SquadId`, `o4`.`HasSoulPatch` + FROM `Officers` AS `o4` + ) AS `u4` ON `s`.`Id` = `u4`.`SquadId` + WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL + ) AS `s0` ON `u2`.`FullName` = `s0`.`OwnerFullName` + WHERE `u2`.`FullName` <> 'Foo' +) AS `s1` ON `u`.`Nickname` = `s1`.`LeaderNickname` AND `u`.`SquadId` = `s1`.`LeaderSquadId`) +LEFT JOIN ( + SELECT `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `u5`.`Nickname`, `u5`.`SquadId` + FROM `Weapons` AS `w1` + LEFT JOIN ( + SELECT `g4`.`Nickname`, `g4`.`SquadId`, `g4`.`FullName` + FROM `Gears` AS `g4` + UNION ALL + SELECT `o5`.`Nickname`, `o5`.`SquadId`, `o5`.`FullName` + FROM `Officers` AS `o5` + ) AS `u5` ON `w1`.`OwnerFullName` = `u5`.`FullName` +) AS `s2` ON `u1`.`FullName` = `s2`.`OwnerFullName` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s1`.`Rank`, `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`IsAutomatic0`), `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Id1`, `s1`.`Nickname00`, `s1`.`SquadId00`, NOT (`s2`.`IsAutomatic`), `s2`.`Nickname` DESC, `s2`.`Id` +"""); + } + + public override async Task Correlated_collections_inner_subquery_selector_references_outer_qsre(bool async) + { + await base.Correlated_collections_inner_subquery_selector_references_outer_qsre(async); + + AssertSql( +""" +SELECT [t].[FullName], [t].[Nickname], [t].[SquadId], [t0].[ReportName], [t0].[OfficerName], [t0].[Nickname], [t0].[SquadId] +FROM ( + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [t1].[FullName] AS [ReportName], [t].[FullName] AS [OfficerName], [t1].[Nickname], [t1].[SquadId] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId] + FROM [Gears] AS [g] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[FullName], [o0].[LeaderNickname], [o0].[LeaderSquadId] + FROM [Officers] AS [o0] + ) AS [t1] + WHERE [t].[Nickname] = [t1].[LeaderNickname] AND [t].[SquadId] = [t1].[LeaderSquadId] +) AS [t0] +ORDER BY [t].[Nickname], [t].[SquadId], [t0].[Nickname] +"""); + } + + public override async Task Correlated_collections_inner_subquery_predicate_references_outer_qsre(bool async) + { + await base.Correlated_collections_inner_subquery_predicate_references_outer_qsre(async); + + AssertSql( +""" +SELECT [t].[FullName], [t].[Nickname], [t].[SquadId], [t0].[ReportName], [t0].[Nickname], [t0].[SquadId] +FROM ( + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [t1].[FullName] AS [ReportName], [t1].[Nickname], [t1].[SquadId] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId] + FROM [Gears] AS [g] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[FullName], [o0].[LeaderNickname], [o0].[LeaderSquadId] + FROM [Officers] AS [o0] + ) AS [t1] + WHERE [t].[Nickname] = [t1].[LeaderNickname] AND [t].[SquadId] = [t1].[LeaderSquadId] AND [t].[FullName] <> N'Foo' +) AS [t0] +ORDER BY [t].[Nickname], [t].[SquadId], [t0].[Nickname] +"""); + } + + public override async Task Correlated_collections_nested_inner_subquery_references_outer_qsre_one_level_up(bool async) + { + await base.Correlated_collections_nested_inner_subquery_references_outer_qsre_one_level_up(async); + + AssertSql( +""" +SELECT [t].[FullName], [t].[Nickname], [t].[SquadId], [t1].[FullName], [t1].[Nickname], [t1].[SquadId], [t1].[Name], [t1].[Nickname0], [t1].[Id] +FROM ( + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +LEFT JOIN ( + SELECT [t0].[FullName], [t0].[Nickname], [t0].[SquadId], [t2].[Name], [t2].[Nickname] AS [Nickname0], [t2].[Id], [t0].[LeaderNickname], [t0].[LeaderSquadId] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId] + FROM [Gears] AS [g] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[FullName], [o0].[LeaderNickname], [o0].[LeaderSquadId] + FROM [Officers] AS [o0] + ) AS [t0] + OUTER APPLY ( + SELECT [w].[Name], [t0].[Nickname], [w].[Id] + FROM [Weapons] AS [w] + WHERE [t0].[FullName] = [w].[OwnerFullName] AND ([w].[Name] <> N'Bar' OR ([w].[Name] IS NULL)) + ) AS [t2] + WHERE [t0].[FullName] <> N'Foo' +) AS [t1] ON [t].[Nickname] = [t1].[LeaderNickname] AND [t].[SquadId] = [t1].[LeaderSquadId] +ORDER BY [t].[Nickname], [t].[SquadId], [t1].[Nickname], [t1].[SquadId] +"""); + } + + public override async Task Correlated_collections_nested_inner_subquery_references_outer_qsre_two_levels_up(bool async) + { + await base.Correlated_collections_nested_inner_subquery_references_outer_qsre_two_levels_up(async); + + AssertSql( +""" +SELECT [t].[FullName], [t].[Nickname], [t].[SquadId], [t1].[FullName], [t1].[Nickname], [t1].[SquadId], [t1].[Name], [t1].[Nickname0], [t1].[Id] +FROM ( + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [t0].[FullName], [t0].[Nickname], [t0].[SquadId], [t2].[Name], [t2].[Nickname] AS [Nickname0], [t2].[Id] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId] + FROM [Gears] AS [g] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[FullName], [o0].[LeaderNickname], [o0].[LeaderSquadId] + FROM [Officers] AS [o0] + ) AS [t0] + LEFT JOIN ( + SELECT [w].[Name], [t].[Nickname], [w].[Id], [w].[OwnerFullName] + FROM [Weapons] AS [w] + WHERE [w].[Name] <> N'Bar' OR ([w].[Name] IS NULL) + ) AS [t2] ON [t0].[FullName] = [t2].[OwnerFullName] + WHERE [t].[Nickname] = [t0].[LeaderNickname] AND [t].[SquadId] = [t0].[LeaderSquadId] AND [t0].[FullName] <> N'Foo' +) AS [t1] +ORDER BY [t].[Nickname], [t].[SquadId], [t1].[Nickname], [t1].[SquadId] +"""); + } + + public override async Task Correlated_collections_on_select_many(bool async) + { + await base.Correlated_collections_on_select_many(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `s`.`Name`, `u`.`SquadId`, `s`.`Id`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName`), +(`Squads` AS `s` +LEFT JOIN ( + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE NOT (`u0`.`HasSoulPatch`) +) AS `u1` ON `s`.`Id` = `u1`.`SquadId`) +WHERE `u`.`HasSoulPatch` +ORDER BY `u`.`Nickname`, `s`.`Id` DESC, `u`.`SquadId`, `w0`.`Id`, `u1`.`Nickname` +"""); + } + + public override async Task Correlated_collections_with_Skip(bool async) + { + await base.Correlated_collections_with_Skip(async); + + AssertSql( +""" +SELECT [s].[Id], [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] + FROM ( + SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator], ROW_NUMBER() OVER(PARTITION BY [t].[SquadId] ORDER BY [t].[Nickname]) AS [row] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] + ) AS [t] + ) AS [t0] + WHERE 1 < [t0].[row] +) AS [t1] ON [s].[Id] = [t1].[SquadId] +ORDER BY [s].[Name], [s].[Id], [t1].[SquadId], [t1].[Nickname] +"""); + } + + public override async Task Correlated_collections_with_Take(bool async) + { + await base.Correlated_collections_with_Take(async); + + AssertSql( +""" +SELECT [s].[Id], [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] + FROM ( + SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator], ROW_NUMBER() OVER(PARTITION BY [t].[SquadId] ORDER BY [t].[Nickname]) AS [row] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] + ) AS [t] + ) AS [t0] + WHERE [t0].[row] <= 2 +) AS [t1] ON [s].[Id] = [t1].[SquadId] +ORDER BY [s].[Name], [s].[Id], [t1].[SquadId], [t1].[Nickname] +"""); + } + + public override async Task Correlated_collections_with_Distinct(bool async) + { + await base.Correlated_collections_with_Distinct(async); + + AssertSql( +""" +SELECT [s].[Id], [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator] +FROM [Squads] AS [s] +OUTER APPLY ( + SELECT DISTINCT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] + FROM ( + SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] + ) AS [t] + WHERE [s].[Id] = [t].[SquadId] + ORDER BY [t].[Nickname] + OFFSET 0 ROWS + ) AS [t0] +) AS [t1] +ORDER BY [s].[Name], [s].[Id], [t1].[Nickname] +"""); + } + + public override async Task Correlated_collections_with_FirstOrDefault(bool async) + { + await base.Correlated_collections_with_FirstOrDefault(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `u`.`FullName` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` + ORDER BY `u`.`Nickname`) +FROM `Squads` AS `s` +ORDER BY `s`.`Name` +"""); + } + + public override async Task Correlated_collections_on_left_join_with_predicate(bool async) + { + await base.Correlated_collections_on_left_join_with_predicate(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `t`.`Id`, `u`.`SquadId`, `w`.`Name`, `w`.`Id` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE NOT (`u`.`HasSoulPatch`) +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_on_RightJoin_with_predicate(bool async) + { + await base.Correlated_collections_on_RightJoin_with_predicate(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `w`.`Name`, `w`.`Id` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +RIGHT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE NOT (`u`.`HasSoulPatch`) +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task Correlated_collections_on_left_join_with_null_value(bool async) + { + await base.Correlated_collections_on_left_join_with_null_value(async); + + AssertSql( + """ +SELECT `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Name`, `w`.`Id` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collections_left_join_with_self_reference(bool async) + { + await base.Correlated_collections_left_join_with_self_reference(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Correlated_collections_deeply_nested_left_join(bool async) + { + await base.Correlated_collections_deeply_nested_left_join(async); + + AssertSql( + """ +SELECT `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` +FROM ((`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) +LEFT JOIN ( + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName`, `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`HasSoulPatch` + FROM `Officers` AS `o0` + ) AS `u0` + LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` + ) AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName` + WHERE `u0`.`HasSoulPatch` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `t`.`Note`, `u`.`Nickname` DESC, `t`.`Id`, `u`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` +"""); + } + + public override async Task Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(bool async) + { + await base.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(async); + + AssertSql( + """ +SELECT `w`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId`, `s0`.`Rank` +FROM ((`Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) +LEFT JOIN ( + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `u0`.`Rank`, `u0`.`FullName` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName`, `g0`.`Rank` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`Rank` + FROM `Officers` AS `o0` + ) AS `u0` + LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE NOT (`w0`.`IsAutomatic`) + ) AS `w1` ON `u0`.`FullName` = `w1`.`OwnerFullName` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `w`.`Name`, `w`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s0`.`FullName` DESC, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id` +"""); + } + + public override async Task Correlated_collections_complex_scenario1(bool async) + { + await base.Correlated_collections_complex_scenario1(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `s`.`Id` AS `Id0`, `u1`.`Nickname` AS `Nickname0`, `u1`.`HasSoulPatch`, `u1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` + FROM `Officers` AS `o0` + ) AS `u0` ON `w`.`OwnerFullName` = `u0`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u0`.`SquadId` = `s`.`Id`) + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`HasSoulPatch` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`HasSoulPatch` + FROM `Officers` AS `o1` + ) AS `u1` ON `s`.`Id` = `u1`.`SquadId` +) AS `s0` ON `u`.`FullName` = `s0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0` +"""); + } + + public override async Task Correlated_collections_complex_scenario2(bool async) + { + await base.Correlated_collections_complex_scenario2(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + LEFT JOIN ( + SELECT `w`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id` AS `Id0`, `u2`.`Nickname` AS `Nickname0`, `u2`.`HasSoulPatch`, `u2`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` + ) AS `u1` ON `w`.`OwnerFullName` = `u1`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u1`.`SquadId` = `s`.`Id`) + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`HasSoulPatch` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`HasSoulPatch` + FROM `Officers` AS `o2` + ) AS `u2` ON `s`.`Id` = `u2`.`SquadId` + ) AS `s0` ON `u0`.`FullName` = `s0`.`OwnerFullName` +) AS `s1` ON `u`.`Nickname` = `s1`.`LeaderNickname` AND `u`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00` +"""); + } + + public override async Task Correlated_collections_with_funky_orderby_complex_scenario1(bool async) + { + await base.Correlated_collections_with_funky_orderby_complex_scenario1(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `s`.`Id` AS `Id0`, `u1`.`Nickname` AS `Nickname0`, `u1`.`HasSoulPatch`, `u1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` + FROM `Officers` AS `o0` + ) AS `u0` ON `w`.`OwnerFullName` = `u0`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u0`.`SquadId` = `s`.`Id`) + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`HasSoulPatch` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`HasSoulPatch` + FROM `Officers` AS `o1` + ) AS `u1` ON `s`.`Id` = `u1`.`SquadId` +) AS `s0` ON `u`.`FullName` = `s0`.`OwnerFullName` +ORDER BY `u`.`FullName`, `u`.`Nickname` DESC, `u`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0` +"""); + } + + public override async Task Correlated_collections_with_funky_orderby_complex_scenario2(bool async) + { + await base.Correlated_collections_with_funky_orderby_complex_scenario2(async); + + AssertSql( + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `u0`.`HasSoulPatch` AS `HasSoulPatch0`, `s0`.`IsAutomatic`, `s0`.`Name`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + LEFT JOIN ( + SELECT `w`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id` AS `Id0`, `u2`.`Nickname` AS `Nickname0`, `u2`.`HasSoulPatch`, `u2`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` + ) AS `u1` ON `w`.`OwnerFullName` = `u1`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u1`.`SquadId` = `s`.`Id`) + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`HasSoulPatch` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`HasSoulPatch` + FROM `Officers` AS `o2` + ) AS `u2` ON `s`.`Id` = `u2`.`SquadId` + ) AS `s0` ON `u0`.`FullName` = `s0`.`OwnerFullName` +) AS `s1` ON `u`.`Nickname` = `s1`.`LeaderNickname` AND `u`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY NOT (`u`.`HasSoulPatch`), `u`.`LeaderNickname`, `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s1`.`FullName`, NOT (`s1`.`HasSoulPatch0`) DESC, `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`IsAutomatic`), `s1`.`Name` DESC, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00` +"""); + } + + public override async Task Correlated_collection_with_top_level_FirstOrDefault(bool async) + { + await base.Correlated_collection_with_top_level_FirstOrDefault(async); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`FullName` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + ORDER BY `u`.`Nickname` +) AS `u0` +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u0`.`Nickname`, `u0`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_top_level_Count(bool async) + { + await base.Correlated_collection_with_top_level_Count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Correlated_collection_with_top_level_Last_with_orderby_on_outer(bool async) + { + await base.Correlated_collection_with_top_level_Last_with_orderby_on_outer(async); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`FullName` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + ORDER BY `u`.`FullName` +) AS `u0` +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_top_level_Last_with_order_by_on_inner(bool async) + { + await base.Correlated_collection_with_top_level_Last_with_order_by_on_inner(async); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`FullName` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + ORDER BY `u`.`FullName` DESC +) AS `u0` +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u0`.`FullName` DESC, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Name` +"""); + } + + public override async Task Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(bool async) + { + await base.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`CapitalName`, `l2`.`Name`, `l2`.`ServerAddress`, `l2`.`CommanderName`, `l2`.`DeputyCommanderName`, `l2`.`Eradicated` +FROM ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name` + FROM `LocustCommanders` AS `l0` +) AS `u` +INNER JOIN ( + SELECT `l1`.`Id`, `l1`.`CapitalName`, `l1`.`Name`, `l1`.`ServerAddress`, `l1`.`CommanderName`, `l1`.`DeputyCommanderName`, `l1`.`Eradicated` + FROM `LocustHordes` AS `l1` + WHERE `l1`.`Name` = 'Swarm' +) AS `l2` ON `u`.`Name` = `l2`.`CommanderName` +WHERE `l2`.`Eradicated` <> TRUE OR `l2`.`Eradicated` IS NULL +"""); + } + + public override async Task Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(bool async) + { + await base.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(async); + + AssertSql( + """ +SELECT `l2`.`Id`, `l2`.`CapitalName`, `l2`.`Name`, `l2`.`ServerAddress`, `l2`.`CommanderName`, `l2`.`DeputyCommanderName`, `l2`.`Eradicated` +FROM ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`CapitalName`, `l1`.`Name`, `l1`.`ServerAddress`, `l1`.`CommanderName`, `l1`.`DeputyCommanderName`, `l1`.`Eradicated` + FROM `LocustHordes` AS `l1` + WHERE `l1`.`Name` = 'Swarm' +) AS `l2` ON `u`.`Name` = `l2`.`CommanderName` +WHERE `l2`.`Eradicated` <> TRUE OR `l2`.`Eradicated` IS NULL +"""); + } + + public override async Task Include_on_derived_type_with_order_by_and_paging(bool async) + { + await base.Include_on_derived_type_with_order_by_and_paging(async); + + AssertSql( + """ +@p='10' + +SELECT `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator0` AS `Discriminator`, `s`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP @p `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` AS `Discriminator0`, `t`.`Id`, `t`.`Note` + FROM (( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` + ) AS `u` + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId`) + LEFT JOIN `Tags` AS `t` ON (`u0`.`Nickname` = `t`.`GearNickName` OR (`u0`.`Nickname` IS NULL AND `t`.`GearNickName` IS NULL)) AND (`u0`.`SquadId` = `t`.`GearSquadId` OR (`u0`.`SquadId` IS NULL AND `t`.`GearSquadId` IS NULL)) + ORDER BY `t`.`Note` +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`Note`, `s`.`Name`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id` +"""); + } + + public override async Task Select_required_navigation_on_derived_type(bool async) + { + await base.Select_required_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `l1`.`Name` +FROM ( + SELECT CVar(NULL) AS `HighCommandId` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`HighCommandId` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN `LocustHighCommands` AS `l1` ON IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) = `l1`.`Id` +"""); + } + + public override async Task Select_required_navigation_on_the_same_type_with_cast(bool async) + { + await base.Select_required_navigation_on_the_same_type_with_cast(async); + + AssertSql( + """ +SELECT `c`.`Name` +FROM ( + SELECT `g`.`CityOfBirthName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`CityOfBirthName` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +"""); + } + + public override async Task Where_required_navigation_on_derived_type(bool async) + { + await base.Where_required_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN `LocustHighCommands` AS `l1` ON IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) = `l1`.`Id` +WHERE `l1`.`IsOperational` +"""); + } + + public override async Task Outer_parameter_in_join_key(bool async) + { + await base.Outer_parameter_in_join_key(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t1].[Note], [t1].[Id], [t1].[Nickname], [t1].[SquadId] +FROM ( + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [t0].[Note], [t0].[Id], [t2].[Nickname], [t2].[SquadId] + FROM [Tags] AS [t0] + INNER JOIN ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[FullName] + FROM [Officers] AS [o0] + ) AS [t2] ON [t].[FullName] = [t2].[FullName] +) AS [t1] +ORDER BY [t].[Nickname], [t].[SquadId], [t1].[Id], [t1].[Nickname] +"""); + } + + public override async Task Outer_parameter_in_join_key_inner_and_outer(bool async) + { + await base.Outer_parameter_in_join_key_inner_and_outer(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t1].[Note], [t1].[Id], [t1].[Nickname], [t1].[SquadId] +FROM ( + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [t0].[Note], [t0].[Id], [t2].[Nickname], [t2].[SquadId] + FROM [Tags] AS [t0] + INNER JOIN ( + SELECT [g].[Nickname], [g].[SquadId] + FROM [Gears] AS [g] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId] + FROM [Officers] AS [o0] + ) AS [t2] ON [t].[FullName] = [t].[Nickname] +) AS [t1] +ORDER BY [t].[Nickname], [t].[SquadId], [t1].[Id], [t1].[Nickname] +"""); + } + + public override async Task Outer_parameter_in_group_join_with_DefaultIfEmpty(bool async) + { + await base.Outer_parameter_in_group_join_with_DefaultIfEmpty(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t1].[Note], [t1].[Id], [t1].[Nickname], [t1].[SquadId] +FROM ( + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [t0].[Note], [t0].[Id], [t2].[Nickname], [t2].[SquadId] + FROM [Tags] AS [t0] + LEFT JOIN ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[FullName] + FROM [Officers] AS [o0] + ) AS [t2] ON [t].[FullName] = [t2].[FullName] +) AS [t1] +ORDER BY [t].[Nickname], [t].[SquadId], [t1].[Id], [t1].[Nickname] +"""); + } + + public override async Task Negated_bool_ternary_inside_anonymous_type_in_projection(bool async) + { + await base.Negated_bool_ternary_inside_anonymous_type_in_projection(async); + + AssertSql( + """ +SELECT NOT (IIF(`u`.`HasSoulPatch`, TRUE, IIF(`u`.`HasSoulPatch` IS NULL, TRUE, `u`.`HasSoulPatch`))) AS `c` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +"""); + } + + public override async Task Order_by_entity_qsre(bool async) + { + await base.Order_by_entity_qsre(async); + + AssertSql( + """ +SELECT `u`.`FullName` +FROM ( + SELECT `g`.`Nickname`, `g`.`AssignedCityName`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`AssignedCityName`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +ORDER BY `c`.`Name`, `u`.`Nickname` DESC +"""); + } + + public override async Task Order_by_entity_qsre_with_inheritance(bool async) + { + await base.Order_by_entity_qsre_with_inheritance(async); + + AssertSql( + """ +SELECT `u`.`Name` +FROM ( + SELECT `l`.`Name`, `l`.`HighCommandId` + FROM `LocustCommanders` AS `l` +) AS `u` +INNER JOIN `LocustHighCommands` AS `l0` ON `u`.`HighCommandId` = `l0`.`Id` +ORDER BY `l0`.`Id`, `u`.`Name` +"""); + } + + public override async Task Order_by_entity_qsre_composite_key(bool async) + { + await base.Order_by_entity_qsre_composite_key(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Order_by_entity_qsre_with_other_orderbys(bool async) + { + await base.Order_by_entity_qsre_with_other_orderbys(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w`.`IsAutomatic`), `u`.`Nickname` DESC, `u`.`SquadId` DESC, `w0`.`Id`, `w`.`Name` +"""); + } + + public override async Task Join_on_entity_qsre_keys(bool async) + { + await base.Join_on_entity_qsre_keys(async); + + AssertSql( +""" +SELECT `w`.`Name` AS `Name1`, `w0`.`Name` AS `Name2` +FROM `Weapons` AS `w` +INNER JOIN `Weapons` AS `w0` ON `w`.`Id` = `w0`.`Id` +"""); + } + + public override async Task Join_on_entity_qsre_keys_composite_key(bool async) + { + await base.Join_on_entity_qsre_keys_composite_key(async); + + AssertSql( + """ +SELECT `u`.`FullName` AS `GearName1`, `u0`.`FullName` AS `GearName2` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` +"""); + } + + public override async Task Join_on_entity_qsre_keys_inheritance(bool async) + { + await base.Join_on_entity_qsre_keys_inheritance(async); + + AssertSql( + """ +SELECT `u`.`FullName` AS `GearName`, `u0`.`FullName` AS `OfficerName` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN ( + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` +"""); + } + + public override async Task Join_on_entity_qsre_keys_outer_key_is_navigation(bool async) + { + await base.Join_on_entity_qsre_keys_outer_key_is_navigation(async); + + AssertSql( + """ +SELECT `w`.`Name` AS `Name1`, `w1`.`Name` AS `Name2` +FROM (`Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id`) +LEFT JOIN `Weapons` AS `w1` ON `w0`.`Id` = `w1`.`Id` +WHERE `w0`.`Id` IS NOT NULL AND `w1`.`Id` IS NOT NULL +"""); + } + + public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation(bool async) + { + await base.Join_on_entity_qsre_keys_inner_key_is_navigation(async); + + AssertSql( + """ +SELECT `c`.`Name` AS `CityName`, `s`.`Nickname` AS `GearNickname` +FROM `Cities` AS `c` +INNER JOIN ( + SELECT `u`.`Nickname`, `c0`.`Name` + FROM ( + SELECT `g`.`Nickname`, `g`.`AssignedCityName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`AssignedCityName` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN `Cities` AS `c0` ON `u`.`AssignedCityName` = `c0`.`Name` +) AS `s` ON `c`.`Name` = `s`.`Name` +"""); + } + + public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(bool async) + { + await base.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `s`.`Note` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN ( + SELECT `t`.`Note`, `u0`.`Nickname`, `u0`.`SquadId` + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` + ) AS `u0` ON `t`.`GearNickName` = `u0`.`Nickname` AND `t`.`GearSquadId` = `u0`.`SquadId` + WHERE `t`.`Note` IN ('Cole''s Tag', 'Dom''s Tag') +) AS `s` ON `u`.`Nickname` = `s`.`Nickname` AND `u`.`SquadId` = `s`.`SquadId` +"""); + } + + public override async Task Join_on_entity_qsre_keys_inner_key_is_nested_navigation(bool async) + { + await base.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(async); + + AssertSql( + """ +SELECT `s`.`Name` AS `SquadName`, `s1`.`Name` AS `WeaponName` +FROM `Squads` AS `s` +INNER JOIN ( + SELECT `w`.`Name`, `s0`.`Id` AS `Id0` + FROM (`Weapons` AS `w` + LEFT JOIN ( + SELECT `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `u`.`SquadId` = `s0`.`Id` + WHERE `w`.`IsAutomatic` +) AS `s1` ON `s`.`Id` = `s1`.`Id0` +"""); + } + + public override async Task GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(bool async) + { + await base.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(async); + + AssertSql( + """ +SELECT `s`.`Name` AS `SquadName`, `s1`.`Name` AS `WeaponName` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `w`.`Name`, `s0`.`Id` AS `Id0` + FROM (`Weapons` AS `w` + LEFT JOIN ( + SELECT `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `u`.`SquadId` = `s0`.`Id` +) AS `s1` ON `s`.`Id` = `s1`.`Id0` +"""); + } + + public override async Task Streaming_correlated_collection_issue_11403(bool async) + { + await base.Streaming_correlated_collection_issue_11403(async); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ( + SELECT TOP 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`FullName` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + ORDER BY `u`.`Nickname` +) AS `u0` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE NOT (`w`.`IsAutomatic`) +) AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u0`.`Nickname`, `u0`.`SquadId`, `w0`.`Id` +"""); + } + + public override async Task Project_one_value_type_from_empty_collection(bool async) + { + await base.Project_one_value_type_from_empty_collection(async); + AssertSql( + """ +SELECT `s`.`Name`, IIF(( + SELECT TOP 1 `u`.`SquadId` + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`) IS NULL, 0, ( + SELECT TOP 1 `u`.`SquadId` + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`)) AS `SquadId` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Kilo' +"""); + } + + public override async Task Project_one_value_type_converted_to_nullable_from_empty_collection(bool async) + { + await base.Project_one_value_type_converted_to_nullable_from_empty_collection(async); + AssertSql( + """ +SELECT `s`.`Name`, ( + SELECT TOP 1 `u`.`SquadId` + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`) AS `SquadId` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Kilo' +"""); + } + + public override async Task Project_one_value_type_with_client_projection_from_empty_collection(bool async) + { + await base.Project_one_value_type_with_client_projection_from_empty_collection(async); + + AssertSql( +""" +SELECT [s].[Name], [t1].[SquadId], [t1].[LeaderSquadId], [t1].[c] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t0].[SquadId], [t0].[LeaderSquadId], [t0].[c] + FROM ( + SELECT [t].[SquadId], [t].[LeaderSquadId], 1 AS [c], ROW_NUMBER() OVER(PARTITION BY [t].[SquadId] ORDER BY [t].[Nickname], [t].[SquadId]) AS [row] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[HasSoulPatch], [g].[LeaderSquadId] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[HasSoulPatch], [o].[LeaderSquadId] + FROM [Officers] AS [o] + ) AS [t] + WHERE [t].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t0] + WHERE [t0].[row] <= 1 +) AS [t1] ON [s].[Id] = [t1].[SquadId] +WHERE [s].[Name] = N'Kilo' +"""); + } + + public override async Task Filter_on_subquery_projecting_one_value_type_from_empty_collection(bool async) + { + await base.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async); + + AssertSql( + """ +SELECT `s`.`Name` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Kilo' AND IIF(( + SELECT TOP 1 `u`.`SquadId` + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`) IS NULL, 0, ( + SELECT TOP 1 `u`.`SquadId` + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`)) <> 0 +"""); + } + + public override async Task Select_subquery_projecting_single_constant_int(bool async) + { + await base.Select_subquery_projecting_single_constant_int(async); + + AssertSql( + """ +SELECT `s`.`Name`, IIF(( + SELECT TOP 1 42 + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`) IS NULL, 0, ( + SELECT TOP 1 42 + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`)) AS `Gear` +FROM `Squads` AS `s` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_string(bool async) + { + await base.Select_subquery_projecting_single_constant_string(async); + + AssertSql( + """ +SELECT `s`.`Name`, ( + SELECT TOP 1 'Foo' + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`) AS `Gear` +FROM `Squads` AS `s` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_bool(bool async) + { + await base.Select_subquery_projecting_single_constant_bool(async); + + AssertSql( + """ +SELECT `s`.`Name`, IIF(( + SELECT TOP 1 TRUE + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`) IS NULL, FALSE, ( + SELECT TOP 1 TRUE + FROM ( + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch`)) AS `Gear` +FROM `Squads` AS `s` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_inside_anonymous(bool async) + { + await base.Select_subquery_projecting_single_constant_inside_anonymous(async); + + AssertSql( +""" +SELECT [s].[Name], [t1].[One] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t0].[One], [t0].[SquadId] + FROM ( + SELECT 1 AS [One], [t].[SquadId], ROW_NUMBER() OVER(PARTITION BY [t].[SquadId] ORDER BY [t].[Nickname], [t].[SquadId]) AS [row] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[HasSoulPatch] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[HasSoulPatch] + FROM [Officers] AS [o] + ) AS [t] + WHERE [t].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t0] + WHERE [t0].[row] <= 1 +) AS [t1] ON [s].[Id] = [t1].[SquadId] +"""); + } + + public override async Task Select_subquery_projecting_multiple_constants_inside_anonymous(bool async) + { + await base.Select_subquery_projecting_multiple_constants_inside_anonymous(async); + + AssertSql( +""" +SELECT [s].[Name], [t1].[True1], [t1].[False1], [t1].[c] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t0].[True1], [t0].[False1], [t0].[c], [t0].[SquadId] + FROM ( + SELECT CAST(1 AS bit) AS [True1], CAST(0 AS bit) AS [False1], 1 AS [c], [t].[SquadId], ROW_NUMBER() OVER(PARTITION BY [t].[SquadId] ORDER BY [t].[Nickname], [t].[SquadId]) AS [row] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[HasSoulPatch] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[HasSoulPatch] + FROM [Officers] AS [o] + ) AS [t] + WHERE [t].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t0] + WHERE [t0].[row] <= 1 +) AS [t1] ON [s].[Id] = [t1].[SquadId] +"""); + } + + public override async Task Include_with_order_by_constant(bool async) + { + await base.Include_with_order_by_constant(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `s`.`Id` = `u`.`SquadId` +ORDER BY `s`.`Id`, `u`.`Nickname` +"""); + } + + public override async Task Correlated_collection_order_by_constant(bool async) + { + await base.Correlated_collection_order_by_constant(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Name`, `w`.`Id` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_null_of_non_mapped_type(bool async) + { + await base.Select_subquery_projecting_single_constant_null_of_non_mapped_type(async); + + AssertSql( +""" +SELECT [s].[Name], [t1].[c] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t0].[c], [t0].[SquadId] + FROM ( + SELECT 1 AS [c], [t].[SquadId], ROW_NUMBER() OVER(PARTITION BY [t].[SquadId] ORDER BY [t].[Nickname], [t].[SquadId]) AS [row] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[HasSoulPatch] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[HasSoulPatch] + FROM [Officers] AS [o] + ) AS [t] + WHERE [t].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t0] + WHERE [t0].[row] <= 1 +) AS [t1] ON [s].[Id] = [t1].[SquadId] +"""); + } + + public override async Task Select_subquery_projecting_single_constant_of_non_mapped_type(bool async) + { + await base.Select_subquery_projecting_single_constant_of_non_mapped_type(async); + + AssertSql( +""" +SELECT [s].[Name], [t1].[c] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t0].[c], [t0].[SquadId] + FROM ( + SELECT 1 AS [c], [t].[SquadId], ROW_NUMBER() OVER(PARTITION BY [t].[SquadId] ORDER BY [t].[Nickname], [t].[SquadId]) AS [row] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[HasSoulPatch] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[HasSoulPatch] + FROM [Officers] AS [o] + ) AS [t] + WHERE [t].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t0] + WHERE [t0].[row] <= 1 +) AS [t1] ON [s].[Id] = [t1].[SquadId] +"""); + } + + public override async Task Include_collection_OrderBy_aggregate(bool async) + { + await base.Include_collection_OrderBy_aggregate(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`Discriminator0`, `s`.`c` +FROM ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname` AS `Nickname0`, `u0`.`SquadId` AS `SquadId0`, `u0`.`AssignedCityName` AS `AssignedCityName0`, `u0`.`CityOfBirthName` AS `CityOfBirthName0`, `u0`.`FullName` AS `FullName0`, `u0`.`HasSoulPatch` AS `HasSoulPatch0`, `u0`.`LeaderNickname` AS `LeaderNickname0`, `u0`.`LeaderSquadId` AS `LeaderSquadId0`, `u0`.`Rank` AS `Rank0`, `u0`.`Discriminator` AS `Discriminator0`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AS `c` + FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Include_collection_with_complex_OrderBy2(bool async) + { + await base.Include_collection_with_complex_OrderBy2(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`Discriminator0`, `s`.`c` +FROM ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname` AS `Nickname0`, `u0`.`SquadId` AS `SquadId0`, `u0`.`AssignedCityName` AS `AssignedCityName0`, `u0`.`CityOfBirthName` AS `CityOfBirthName0`, `u0`.`FullName` AS `FullName0`, `u0`.`HasSoulPatch` AS `HasSoulPatch0`, `u0`.`LeaderNickname` AS `LeaderNickname0`, `u0`.`LeaderSquadId` AS `LeaderSquadId0`, `u0`.`Rank` AS `Rank0`, `u0`.`Discriminator` AS `Discriminator0`, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) AS `c` + FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +) AS `s` +ORDER BY NOT (`s`.`c`), `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Include_collection_with_complex_OrderBy3(bool async) + { + await base.Include_collection_with_complex_OrderBy3(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`Discriminator0`, `s`.`c` +FROM ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname` AS `Nickname0`, `u0`.`SquadId` AS `SquadId0`, `u0`.`AssignedCityName` AS `AssignedCityName0`, `u0`.`CityOfBirthName` AS `CityOfBirthName0`, `u0`.`FullName` AS `FullName0`, `u0`.`HasSoulPatch` AS `HasSoulPatch0`, `u0`.`LeaderNickname` AS `LeaderNickname0`, `u0`.`LeaderSquadId` AS `LeaderSquadId0`, `u0`.`Rank` AS `Rank0`, `u0`.`Discriminator` AS `Discriminator0`, IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) AS `c` + FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +) AS `s` +ORDER BY NOT (`s`.`c`), `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Correlated_collection_with_complex_OrderBy(bool async) + { + await base.Correlated_collection_with_complex_OrderBy(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`c` +FROM ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname` AS `Nickname0`, `u1`.`SquadId` AS `SquadId0`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AS `c` + FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN ( + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE NOT (`u0`.`HasSoulPatch`) + ) AS `u1` ON `u`.`Nickname` = `u1`.`LeaderNickname` AND `u`.`SquadId` = `u1`.`LeaderSquadId` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Correlated_collection_with_very_complex_order_by(bool async) + { + await base.Correlated_collection_with_very_complex_order_by(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`c` +FROM ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u2`.`Nickname` AS `Nickname0`, `u2`.`SquadId` AS `SquadId0`, `u2`.`AssignedCityName`, `u2`.`CityOfBirthName`, `u2`.`FullName`, `u2`.`HasSoulPatch`, `u2`.`LeaderNickname`, `u2`.`LeaderSquadId`, `u2`.`Rank`, `u2`.`Discriminator`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = IIF(( + SELECT TOP 1 `u0`.`HasSoulPatch` + FROM ( + SELECT `g`.`Nickname`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`HasSoulPatch` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u0`.`Nickname` = 'Marcus') IS NULL, FALSE, ( + SELECT TOP 1 `u0`.`HasSoulPatch` + FROM ( + SELECT `g`.`Nickname`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`HasSoulPatch` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u0`.`Nickname` = 'Marcus'))) AS `c` + FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN ( + SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`AssignedCityName`, `o1`.`CityOfBirthName`, `o1`.`FullName`, `o1`.`HasSoulPatch`, `o1`.`LeaderNickname`, `o1`.`LeaderSquadId`, `o1`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o1` + ) AS `u1` + WHERE NOT (`u1`.`HasSoulPatch`) + ) AS `u2` ON `u`.`Nickname` = `u2`.`LeaderNickname` AND `u`.`SquadId` = `u2`.`LeaderSquadId` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` +"""); + } + + public override async Task Cast_to_derived_type_after_OfType_works(bool async) + { + await base.Cast_to_derived_type_after_OfType_works(async); + + AssertSql( +""" +SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` +FROM `Officers` AS `o` +"""); + } + + public override async Task Select_subquery_boolean(bool async) + { + await base.Select_subquery_boolean(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_subquery_boolean_with_pushdown(bool async) + { + await base.Select_subquery_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_subquery_int_with_inside_cast_and_coalesce(bool async) + { + await base.Select_subquery_int_with_inside_cast_and_coalesce(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 42, ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_subquery_int_with_outside_cast_and_coalesce(bool async) + { + await base.Select_subquery_int_with_outside_cast_and_coalesce(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 0, ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_subquery_int_with_pushdown_and_coalesce(bool async) + { + await base.Select_subquery_int_with_pushdown_and_coalesce(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 42, ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_subquery_int_with_pushdown_and_coalesce2(bool async) + { + await base.Select_subquery_int_with_pushdown_and_coalesce2(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, ( + SELECT TOP 1 `w0`.`Id` + FROM `Weapons` AS `w0` + WHERE `u`.`FullName` = `w0`.`OwnerFullName` + ORDER BY `w0`.`Id`), ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_subquery_boolean_empty(bool async) + { + await base.Select_subquery_boolean_empty(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ORDER BY `w`.`Id`)) +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_subquery_boolean_empty_with_pushdown(bool async) + { + await base.Select_subquery_boolean_empty_with_pushdown(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ORDER BY `w`.`Id`) +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean1(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean1(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`)) +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean2(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean2(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_with_pushdown(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_empty1(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean_empty1(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ) AS `w0`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ) AS `w0`)) +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_empty2(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean_empty2(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG') IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG')) +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_empty_with_pushdown(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean_empty_with_pushdown(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ) AS `w0`) +FROM ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` +"""); + } + + public override async Task Cast_subquery_to_base_type_using_typed_ToList(bool async) + { + await base.Cast_subquery_to_base_type_using_typed_ToList(async); + + AssertSql( + """ +SELECT `c`.`Name`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Nickname`, `u`.`Rank`, `u`.`SquadId` +FROM `Cities` AS `c` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` ON `c`.`Name` = `u`.`AssignedCityName` +WHERE `c`.`Name` = 'Ephyra' +ORDER BY `c`.`Name`, `u`.`Nickname` +"""); + } + + public override async Task Cast_ordered_subquery_to_base_type_using_typed_ToArray(bool async) + { + await base.Cast_ordered_subquery_to_base_type_using_typed_ToArray(async); + + AssertSql( + """ +SELECT `c`.`Name`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Nickname`, `u`.`Rank`, `u`.`SquadId` +FROM `Cities` AS `c` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` ON `c`.`Name` = `u`.`AssignedCityName` +WHERE `c`.`Name` = 'Ephyra' +ORDER BY `c`.`Name`, `u`.`Nickname` DESC +"""); + } + + public override async Task Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(bool async) + { + await base.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Name`, `w`.`Id` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Double_order_by_on_nullable_bool_coming_from_optional_navigation(bool async) + { + await base.Double_order_by_on_nullable_bool_coming_from_optional_navigation(async); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`IsAutomatic`), `w0`.`Id` +"""); + } + + public override async Task Double_order_by_on_Like(bool async) + { + await base.Double_order_by_on_Like(async); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT ((`w0`.`Name` LIKE '%Lancer') AND `w0`.`Name` IS NOT NULL) +"""); + } + + public override async Task Double_order_by_on_is_null(bool async) + { + await base.Double_order_by_on_is_null(async); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`Name` IS NULL) +"""); + } + + public override async Task Double_order_by_on_string_compare(bool async) + { + await base.Double_order_by_on_string_compare(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +ORDER BY NOT (`w`.`Name` = 'Marcus'' Lancer' AND `w`.`Name` IS NOT NULL), `w`.`Id` +"""); + } + + public override async Task Double_order_by_binary_expression(bool async) + { + await base.Double_order_by_binary_expression(async); + + AssertSql( + """ +SELECT `w0`.`Binary` +FROM ( + SELECT `w`.`Id` + 2 AS `Binary` + FROM `Weapons` AS `w` +) AS `w0` +ORDER BY `w0`.`Binary` +"""); + } + + public override async Task String_compare_with_null_conditional_argument(bool async) + { + await base.String_compare_with_null_conditional_argument(async); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`Name` = 'Marcus'' Lancer' AND `w0`.`Name` IS NOT NULL) +"""); + } + + public override async Task String_compare_with_null_conditional_argument2(bool async) + { + await base.String_compare_with_null_conditional_argument2(async); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT ('Marcus'' Lancer' = `w0`.`Name` AND `w0`.`Name` IS NOT NULL) +"""); + } + + public override async Task String_concat_with_null_conditional_argument(bool async) + { + await base.String_concat_with_null_conditional_argument(async); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY IIF(`w0`.`Name` IS NULL, '', `w0`.`Name`) & (5 & '') +"""); + } + + public override async Task String_concat_with_null_conditional_argument2(bool async) + { + await base.String_concat_with_null_conditional_argument2(async); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY IIF(`w0`.`Name` IS NULL, '', `w0`.`Name`) & 'Marcus'' Lancer' +"""); + } + + public override async Task String_concat_on_various_types(bool async) + { + await base.String_concat_on_various_types(async); + + AssertSql( + """ +SELECT ('HasSoulPatch ' & (`u`.`HasSoulPatch` & '')) & ' HasSoulPatch' AS `HasSoulPatch`, ('Rank ' & (`u`.`Rank` & '')) & ' Rank' AS `Rank`, ('SquadId ' & (`u`.`SquadId` & '')) & ' SquadId' AS `SquadId`, ('Rating ' & IIF((`m`.`Rating` & '') IS NULL, '', (`m`.`Rating` & ''))) & ' Rating' AS `Rating`, ('Timeline ' & (`m`.`Timeline` & '')) & ' Timeline' AS `Timeline` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u`, +`Missions` AS `m` +ORDER BY `u`.`Nickname`, `m`.`Id` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Average(bool async) + { + await base.GroupBy_Property_Include_Select_Average(async); + + AssertSql( + """ +SELECT AVG(CDBL(`u`.`SquadId`)) +FROM ( + SELECT `g`.`SquadId`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +GROUP BY `u`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Sum(bool async) + { + await base.GroupBy_Property_Include_Select_Sum(async); + + AssertSql( + """ +SELECT IIF(SUM(`u`.`SquadId`) IS NULL, 0, SUM(`u`.`SquadId`)) +FROM ( + SELECT `g`.`SquadId`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +GROUP BY `u`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Count(bool async) + { + await base.GroupBy_Property_Include_Select_Count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +GROUP BY `u`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_LongCount(bool async) + { + await base.GroupBy_Property_Include_Select_LongCount(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +GROUP BY `u`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Min(bool async) + { + await base.GroupBy_Property_Include_Select_Min(async); + + AssertSql( + """ +SELECT MIN(`u`.`SquadId`) +FROM ( + SELECT `g`.`SquadId`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +GROUP BY `u`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Aggregate_with_anonymous_selector(bool async) + { + await base.GroupBy_Property_Include_Aggregate_with_anonymous_selector(async); + + AssertSql( + """ +SELECT `u`.`Nickname` AS `Key`, COUNT(*) AS `c` +FROM ( + SELECT `g`.`Nickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname` + FROM `Officers` AS `o` +) AS `u` +GROUP BY `u`.`Nickname` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Group_by_with_include_with_entity_in_result_selector(bool async) + { + await base.Group_by_with_include_with_entity_in_result_selector(async); + + AssertSql( +""" +SELECT [t0].[Rank], [t0].[c], [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator], [t1].[Name], [t1].[Location], [t1].[Nation] +FROM ( + SELECT [t].[Rank], COUNT(*) AS [c] + FROM ( + SELECT [g].[Rank] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Rank] + FROM [Officers] AS [o] + ) AS [t] + GROUP BY [t].[Rank] +) AS [t0] +LEFT JOIN ( + SELECT [t2].[Nickname], [t2].[SquadId], [t2].[AssignedCityName], [t2].[CityOfBirthName], [t2].[FullName], [t2].[HasSoulPatch], [t2].[LeaderNickname], [t2].[LeaderSquadId], [t2].[Rank], [t2].[Discriminator], [t2].[Name], [t2].[Location], [t2].[Nation] + FROM ( + SELECT [t3].[Nickname], [t3].[SquadId], [t3].[AssignedCityName], [t3].[CityOfBirthName], [t3].[FullName], [t3].[HasSoulPatch], [t3].[LeaderNickname], [t3].[LeaderSquadId], [t3].[Rank], [t3].[Discriminator], [c].[Name], [c].[Location], [c].[Nation], ROW_NUMBER() OVER(PARTITION BY [t3].[Rank] ORDER BY [t3].[Nickname]) AS [row] + FROM ( + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g0] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[AssignedCityName], [o0].[CityOfBirthName], [o0].[FullName], [o0].[HasSoulPatch], [o0].[LeaderNickname], [o0].[LeaderSquadId], [o0].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o0] + ) AS [t3] + INNER JOIN [Cities] AS [c] ON [t3].[CityOfBirthName] = [c].[Name] + ) AS [t2] + WHERE [t2].[row] <= 1 +) AS [t1] ON [t0].[Rank] = [t1].[Rank] +ORDER BY [t0].[Rank] +"""); + } + + public override async Task GroupBy_Property_Include_Select_Max(bool async) + { + await base.GroupBy_Property_Include_Select_Max(async); + + AssertSql( + """ +SELECT MAX(`u`.`SquadId`) +FROM ( + SELECT `g`.`SquadId`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +GROUP BY `u`.`Rank` +"""); + } + + public override async Task Include_with_group_by_and_FirstOrDefault_gets_properly_applied(bool async) + { + await base.Include_with_group_by_and_FirstOrDefault_gets_properly_applied(async); + + AssertSql( +""" +SELECT [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator], [t1].[Name], [t1].[Location], [t1].[Nation] +FROM ( + SELECT [t].[Rank] + FROM ( + SELECT [g].[Rank] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Rank] + FROM [Officers] AS [o] + ) AS [t] + GROUP BY [t].[Rank] +) AS [t0] +LEFT JOIN ( + SELECT [t2].[Nickname], [t2].[SquadId], [t2].[AssignedCityName], [t2].[CityOfBirthName], [t2].[FullName], [t2].[HasSoulPatch], [t2].[LeaderNickname], [t2].[LeaderSquadId], [t2].[Rank], [t2].[Discriminator], [t2].[Name], [t2].[Location], [t2].[Nation] + FROM ( + SELECT [t3].[Nickname], [t3].[SquadId], [t3].[AssignedCityName], [t3].[CityOfBirthName], [t3].[FullName], [t3].[HasSoulPatch], [t3].[LeaderNickname], [t3].[LeaderSquadId], [t3].[Rank], [t3].[Discriminator], [c].[Name], [c].[Location], [c].[Nation], ROW_NUMBER() OVER(PARTITION BY [t3].[Rank] ORDER BY [t3].[Nickname], [t3].[SquadId], [c].[Name]) AS [row] + FROM ( + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g0] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[AssignedCityName], [o0].[CityOfBirthName], [o0].[FullName], [o0].[HasSoulPatch], [o0].[LeaderNickname], [o0].[LeaderSquadId], [o0].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o0] + ) AS [t3] + INNER JOIN [Cities] AS [c] ON [t3].[CityOfBirthName] = [c].[Name] + WHERE [t3].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t2] + WHERE [t2].[row] <= 1 +) AS [t1] ON [t0].[Rank] = [t1].[Rank] +"""); + } + + public override async Task Include_collection_with_Cast_to_base(bool async) + { + await base.Include_collection_with_Cast_to_base(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Include_with_client_method_and_member_access_still_applies_includes(bool async) + { + await base.Include_with_client_method_and_member_access_still_applies_includes(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +"""); + } + + public override async Task Include_with_projection_of_unmapped_property_still_gets_applied(bool async) + { + await base.Include_with_projection_of_unmapped_property_still_gets_applied(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection() + { + await base.Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection(); + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +WHERE `s`.`Name` = 'Delta' +ORDER BY `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` +"""); + } + + public override async Task OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(bool async) + { + await base.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(async); + + AssertSql( + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))) = 5, NULL) +FROM ( + SELECT `g`.`Nickname`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +ORDER BY NOT (IIF(`u`.`LeaderNickname` IS NOT NULL, TRUE, FALSE)) +"""); + } + + public override async Task GetValueOrDefault_in_projection(bool async) + { + await base.GetValueOrDefault_in_projection(async); + + AssertSql( +""" +SELECT IIF(`w`.`SynergyWithId` IS NULL, 0, `w`.`SynergyWithId`) +FROM `Weapons` AS `w` +"""); + } + + public override async Task GetValueOrDefault_in_filter(bool async) + { + await base.GetValueOrDefault_in_filter(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`SynergyWithId` IS NULL, 0, `w`.`SynergyWithId`) = 0 +"""); + } + + public override async Task GetValueOrDefault_in_filter_non_nullable_column(bool async) + { + await base.GetValueOrDefault_in_filter_non_nullable_column(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`Id` = 0 +"""); + } + + public override async Task GetValueOrDefault_in_order_by(bool async) + { + await base.GetValueOrDefault_in_order_by(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +ORDER BY IIF(`w`.`SynergyWithId` IS NULL, 0, `w`.`SynergyWithId`), `w`.`Id` +"""); + } + + public override async Task GetValueOrDefault_with_argument(bool async) + { + await base.GetValueOrDefault_with_argument(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`SynergyWithId` IS NULL, `w`.`Id`, `w`.`SynergyWithId`) = 1 +"""); + } + + public override async Task GetValueOrDefault_with_argument_complex(bool async) + { + await base.GetValueOrDefault_with_argument_complex(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`SynergyWithId` IS NULL, IIF(LEN(`w`.`Name`) IS NULL, NULL, CLNG(LEN(`w`.`Name`))) + 42, `w`.`SynergyWithId`) > 10 +"""); + } + + public override async Task Filter_with_complex_predicate_containing_subquery(bool async) + { + await base.Filter_with_complex_predicate_containing_subquery(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`FullName` <> 'Dom' AND EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic`) +"""); + } + + public override async Task Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let( + bool async) + { + await base.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` + ORDER BY `w`.`AmmunitionType` DESC) AS `WeaponName` +FROM ( + SELECT `g`.`Nickname`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`Nickname` <> 'Dom' +"""); + } + + public override async Task + Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(bool async) + { + await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`u`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `u`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `u`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) +"""); + } + + public override async Task + Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(bool async) + { + await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex( + async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` +WHERE IIF(LEN(`s`.`Name`) IS NULL, NULL, MID(`t`.`Note`, 0 + 1, IIF(LEN(`s`.`Name`) IS NULL, NULL, CLNG(LEN(`s`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) +"""); + } + + public override async Task OfTypeNav1(bool async) + { + await base.OfTypeNav1(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM (( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` AND `u`.`SquadId` = `t0`.`GearSquadId` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND (`t0`.`Note` <> 'Bar' OR `t0`.`Note` IS NULL) +"""); + } + + public override async Task OfTypeNav2(bool async) + { + await base.OfTypeNav2(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM (( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND (`c`.`Location` <> 'Bar' OR `c`.`Location` IS NULL) +"""); + } + + public override async Task OfTypeNav3(bool async) + { + await base.OfTypeNav3(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ((( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +INNER JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` AND `u`.`SquadId` = `t0`.`GearSquadId` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND (`t0`.`Note` <> 'Bar' OR `t0`.`Note` IS NULL) +"""); + } + + public override async Task Nav_rewrite_Distinct_with_convert() + { + await base.Nav_rewrite_Distinct_with_convert(); + + AssertSql(); + } + + public override async Task Nav_rewrite_Distinct_with_convert_anonymous() + { + await base.Nav_rewrite_Distinct_with_convert_anonymous(); + + AssertSql(); + } + + public override async Task Nav_rewrite_with_convert1(bool async) + { + await base.Nav_rewrite_with_convert1(async); + + AssertSql( +""" +SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` +FROM (`LocustHordes` AS `l` +LEFT JOIN `Cities` AS `c` ON `l`.`CapitalName` = `c`.`Name`) +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +WHERE `c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL +"""); + } + + public override async Task Nav_rewrite_with_convert2(bool async) + { + await base.Nav_rewrite_with_convert2(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated` +FROM (`LocustHordes` AS `l` +LEFT JOIN `Cities` AS `c` ON `l`.`CapitalName` = `c`.`Name`) +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`l0`.`Name` <> 'Bar' OR `l0`.`Name` IS NULL) +"""); + } + + public override async Task Nav_rewrite_with_convert3(bool async) + { + await base.Nav_rewrite_with_convert3(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated` +FROM (`LocustHordes` AS `l` +LEFT JOIN `Cities` AS `c` ON `l`.`CapitalName` = `c`.`Name`) +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`l0`.`Name` <> 'Bar' OR `l0`.`Name` IS NULL) +"""); + } + + public override async Task Where_contains_on_navigation_with_composite_keys(bool async) + { + await base.Where_contains_on_navigation_with_composite_keys(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `Cities` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`CityOfBirthName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`CityOfBirthName` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `c`.`Name` = `u0`.`CityOfBirthName` AND `u0`.`Nickname` = `u`.`Nickname` AND `u0`.`SquadId` = `u`.`SquadId`)) +"""); + } + + public override async Task Include_with_complex_order_by(bool async) + { + await base.Include_with_complex_order_by(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`c` +FROM ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Gnasher%')) AS `c` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Anonymous_projection_take_followed_by_projecting_single_element_from_collection_navigation(bool async) + { + await base.Anonymous_projection_take_followed_by_projecting_single_element_from_collection_navigation(async); + + AssertSql( +""" +@__p_0='25' + +SELECT [t1].[Id], [t1].[AmmunitionType], [t1].[IsAutomatic], [t1].[Name], [t1].[OwnerFullName], [t1].[SynergyWithId] +FROM ( + SELECT TOP(@__p_0) [t].[FullName] + FROM ( + SELECT [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[FullName] + FROM [Officers] AS [o] + ) AS [t] +) AS [t0] +LEFT JOIN ( + SELECT [t2].[Id], [t2].[AmmunitionType], [t2].[IsAutomatic], [t2].[Name], [t2].[OwnerFullName], [t2].[SynergyWithId] + FROM ( + SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId], ROW_NUMBER() OVER(PARTITION BY [w].[OwnerFullName] ORDER BY [w].[Id]) AS [row] + FROM [Weapons] AS [w] + ) AS [t2] + WHERE [t2].[row] <= 1 +) AS [t1] ON [t0].[FullName] = [t1].[OwnerFullName] +"""); + } + + public override async Task Bool_projection_from_subquery_treated_appropriately_in_where(bool async) + { + await base.Bool_projection_from_subquery_treated_appropriately_in_where(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE ( + SELECT TOP 1 `u`.`HasSoulPatch` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + ORDER BY `u`.`Nickname`, `u`.`SquadId`) +"""); + } + + public override async Task DateTimeOffset_Contains_Less_than_Greater_than(bool async) + { + var dto = LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(599898024001234567, new TimeSpan(1, 30, 0))); + var start = dto.AddDays(-1); + var end = dto.AddDays(1); + var dates = new[] { dto }; + + await AssertQuery( + async, + ss => ss.Set().Where( + m => start <= m.Timeline.Date && m.Timeline < end && dates.Contains(m.Timeline))); + + AssertSql( + """ +@start='1902-01-01T08:30:00.0000000Z' (DbType = DateTime) +@end='1902-01-03T08:30:00.0000000Z' (DbType = DateTime) +@dates1='1902-01-02T08:30:00.0000000Z' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE @start <= DATEVALUE(`m`.`Timeline`) AND `m`.`Timeline` < @end AND `m`.`Timeline` = @dates1 +"""); + } + + public override Task DateTimeOffsetNow_minus_timespan(bool async) + => AssertTranslationFailed(() => base.DateTimeOffsetNow_minus_timespan(async)); + + public override async Task Navigation_inside_interpolated_string_expanded(bool async) + { + await base.Navigation_inside_interpolated_string_expanded(async); + + AssertSql( + """ +SELECT `w`.`SynergyWithId` IS NOT NULL, `w0`.`OwnerFullName` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +"""); + } + + public override async Task Left_join_projection_using_coalesce_tracking(bool async) + { + await base.Left_join_projection_using_coalesce_tracking(async); + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname` +"""); + } + + public override async Task Left_join_projection_using_conditional_tracking(bool async) + { + await base.Left_join_projection_using_conditional_tracking(async); + AssertSql( + """ +SELECT `u0`.`Nickname` IS NULL OR `u0`.`SquadId` IS NULL, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname` +"""); + } + + public override async Task Project_collection_navigation_nested_with_take_composite_key(bool async) + { + await base.Project_collection_navigation_nested_with_take_composite_key(async); + + AssertSql( +""" +SELECT [t].[Id], [t0].[Nickname], [t0].[SquadId], [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator] +FROM [Tags] AS [t] +LEFT JOIN ( + SELECT [g].[Nickname], [g].[SquadId], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] +) AS [t0] ON [t].[GearNickName] = [t0].[Nickname] AND [t].[GearSquadId] = [t0].[SquadId] +LEFT JOIN ( + SELECT [t2].[Nickname], [t2].[SquadId], [t2].[AssignedCityName], [t2].[CityOfBirthName], [t2].[FullName], [t2].[HasSoulPatch], [t2].[LeaderNickname], [t2].[LeaderSquadId], [t2].[Rank], [t2].[Discriminator] + FROM ( + SELECT [t3].[Nickname], [t3].[SquadId], [t3].[AssignedCityName], [t3].[CityOfBirthName], [t3].[FullName], [t3].[HasSoulPatch], [t3].[LeaderNickname], [t3].[LeaderSquadId], [t3].[Rank], [t3].[Discriminator], ROW_NUMBER() OVER(PARTITION BY [t3].[LeaderNickname], [t3].[LeaderSquadId] ORDER BY [t3].[Nickname], [t3].[SquadId]) AS [row] + FROM ( + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g0] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[AssignedCityName], [o0].[CityOfBirthName], [o0].[FullName], [o0].[HasSoulPatch], [o0].[LeaderNickname], [o0].[LeaderSquadId], [o0].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o0] + ) AS [t3] + ) AS [t2] + WHERE [t2].[row] <= 50 +) AS [t1] ON ([t0].[Nickname] = [t1].[LeaderNickname] OR (([t0].[Nickname] IS NULL) AND ([t1].[LeaderNickname] IS NULL))) AND [t0].[SquadId] = [t1].[LeaderSquadId] +WHERE [t0].[Discriminator] = N'Officer' +ORDER BY [t].[Id], [t0].[Nickname], [t0].[SquadId], [t1].[Nickname] +"""); + } + + public override async Task Project_collection_navigation_nested_composite_key(bool async) + { + await base.Project_collection_navigation_nested_composite_key(async); + + AssertSql( + """ +SELECT `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +WHERE `u`.`Discriminator` = 'Officer' +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task Null_checks_in_correlated_predicate_are_correctly_translated(bool async) + { + await base.Null_checks_in_correlated_predicate_are_correctly_translated(async); + + AssertSql( + """ +SELECT `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`Note` IS NOT NULL +ORDER BY `t`.`Id`, `u`.`Nickname` +"""); + } + + public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(bool async) + { + await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(async); + + AssertSql( + """ +@isAutomatic='True' + +SELECT `u`.`Nickname`, `u`.`FullName`, `w0`.`Id` IS NOT NULL AS `Collection` +FROM ( + SELECT `g`.`Nickname`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` = @isAutomatic +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +"""); + } + + public override async Task DefaultIfEmpty_top_level_over_column_with_nullable_value_type(bool async) + { + await base.DefaultIfEmpty_top_level_over_column_with_nullable_value_type(async); + + AssertSql( + """ +SELECT `m0`.`Rating` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `m`.`Rating` + FROM `Missions` AS `m` + WHERE `m`.`Id` = -1 +) AS `m0` ON TRUE +"""); + } + + public override async Task DefaultIfEmpty_top_level_over_arbitrary_expression_with_nullable_value_type(bool async) + { + await base.DefaultIfEmpty_top_level_over_arbitrary_expression_with_nullable_value_type(async); + + AssertSql( + """ +SELECT `m0`.`c` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `m`.`Rating` + 2.0 AS `c` + FROM `Missions` AS `m` + WHERE `m`.`Id` = -1 +) AS `m0` ON TRUE +"""); + } + + public override async Task DefaultIfEmpty_top_level_over_arbitrary_expression_with_non_nullable_value_type(bool async) + { + await base.DefaultIfEmpty_top_level_over_arbitrary_expression_with_non_nullable_value_type(async); + + AssertSql( + """ +SELECT IIF(`m0`.`c` IS NULL, 0, `m0`.`c`) +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `m`.`Id` + 2 AS `c` + FROM `Missions` AS `m` + WHERE `m`.`Id` = -1 +) AS `m0` ON TRUE +"""); + } + + public override async Task Join_with_inner_being_a_subquery_projecting_single_property(bool async) + { + await base.Join_with_inner_being_a_subquery_projecting_single_property(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN ( + SELECT `g0`.`Nickname` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`Nickname` +"""); + } + + public override async Task Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(bool async) + { + await base.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN ( + SELECT `g0`.`Nickname` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`Nickname` +"""); + } + + public override async Task Navigation_based_on_complex_expression1(bool async) + { + await base.Navigation_based_on_complex_expression1(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated` +FROM `LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +WHERE `l0`.`Name` IS NOT NULL +"""); + } + + public override async Task Navigation_based_on_complex_expression2(bool async) + { + await base.Navigation_based_on_complex_expression2(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated` +FROM `LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +WHERE `l0`.`Name` IS NOT NULL +"""); + } + + public override async Task Navigation_based_on_complex_expression3(bool async) + { + await base.Navigation_based_on_complex_expression3(async); + + AssertSql( +""" +SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` +FROM `LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name` +"""); + } + + public override async Task Navigation_based_on_complex_expression4(bool async) + { + await base.Navigation_based_on_complex_expression4(async); + + AssertSql( + """ +SELECT TRUE, `l1`.`Name`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, `s`.`Name0`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Discriminator` +FROM ( + SELECT `l`.`CommanderName`, `u`.`Name` AS `Name0`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` + FROM `LocustHordes` AS `l`, + ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` + ) AS `u` +) AS `s` +LEFT JOIN `LocustCommanders` AS `l1` ON `s`.`CommanderName` = `l1`.`Name` +"""); + } + + public override async Task Navigation_based_on_complex_expression5(bool async) + { + await base.Navigation_based_on_complex_expression5(async); + + AssertSql( + """ +SELECT `l1`.`Name`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM (`LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l1` ON `l`.`CommanderName` = `l1`.`Name`), +( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +"""); + } + + public override async Task Navigation_based_on_complex_expression6(bool async) + { + await base.Navigation_based_on_complex_expression6(async); + + AssertSql( + """ +SELECT `l1`.`Name` = 'Queen Myrrah' AND `l1`.`Name` IS NOT NULL, `l1`.`Name`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM (`LocustHordes` AS `l` +LEFT JOIN `LocustCommanders` AS `l1` ON `l`.`CommanderName` = `l1`.`Name`), +( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +"""); + } + + public override async Task Select_as_operator(bool async) + { + await base.Select_as_operator(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` +FROM `LocustLeaders` AS `l` +UNION ALL +SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` +FROM `LocustCommanders` AS `l0` +"""); + } + + public override async Task Select_datetimeoffset_comparison_in_projection(bool async) + { + await base.Select_datetimeoffset_comparison_in_projection(async); + + AssertSql( + """ +SELECT `m`.`Timeline` > NOW() +FROM `Missions` AS `m` +"""); + } + + public override async Task OfType_in_subquery_works(bool async) + { + await base.OfType_in_subquery_works(async); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Location`, `s`.`Nation` +FROM `Officers` AS `o` +INNER JOIN ( + SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation`, `u`.`LeaderNickname`, `u`.`LeaderSquadId` + FROM ( + SELECT `o0`.`AssignedCityName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u` + LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +) AS `s` ON `o`.`Nickname` = `s`.`LeaderNickname` AND `o`.`SquadId` = `s`.`LeaderSquadId` +"""); + } + + public override async Task Nullable_bool_comparison_is_translated_to_server(bool async) + { + await base.Nullable_bool_comparison_is_translated_to_server(async); + + AssertSql( + """ +SELECT `l`.`Eradicated` = TRUE AND `l`.`Eradicated` IS NOT NULL AS `IsEradicated` +FROM `LocustHordes` AS `l` +"""); + } + + public override async Task Accessing_reference_navigation_collection_composition_generates_single_query(bool async) + { + await base.Accessing_reference_navigation_collection_composition_generates_single_query(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`Id0` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`IsAutomatic`, `w0`.`Name`, `w0`.`Id` AS `Id0`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +) AS `s` ON `u`.`FullName` = `s`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s`.`Id` +"""); + } + + public override async Task Reference_include_chain_loads_correctly_when_middle_is_null(bool async) + { + await base.Reference_include_chain_loads_correctly_when_middle_is_null(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` +ORDER BY `t`.`Note` +"""); + } + + public override async Task Accessing_property_of_optional_navigation_in_child_projection_works(bool async) + { + await base.Accessing_property_of_optional_navigation_in_child_projection_works(async); + + AssertSql( + """ +SELECT `u`.`Nickname` IS NOT NULL AND `u`.`SquadId` IS NOT NULL, `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Nickname`, `s`.`Id`, `s`.`SquadId` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN ( + SELECT `u0`.`Nickname`, `w`.`Id`, `u0`.`SquadId`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` + FROM `Officers` AS `o0` + ) AS `u0` ON `w`.`OwnerFullName` = `u0`.`FullName` +) AS `s` ON `u`.`FullName` = `s`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s`.`Nickname` +"""); + } + + public override async Task Collection_navigation_ofType_filter_works(bool async) + { + await base.Collection_navigation_ofType_filter_works(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `o`.`Nickname`, `o`.`CityOfBirthName` + FROM `Officers` AS `o` + ) AS `u` + WHERE `c`.`Name` = `u`.`CityOfBirthName` AND `u`.`Nickname` = 'Marcus') +"""); + } + + public override async Task Query_reusing_parameter_doesnt_declare_duplicate_parameter(bool async) + { + await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter(async); + + AssertSql( + """ +@prm_Inner_Nickname='Marcus' (Size = 255) + +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT DISTINCT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + WHERE `u`.`Nickname` <> @prm_Inner_Nickname +) AS `u0` +ORDER BY `u0`.`FullName` +"""); + } + + public override async Task Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(bool async) + { + await base.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async); + + AssertSql( + """ +@squadId='1' + +SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` +FROM ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` + WHERE `s`.`Id` IN ( + SELECT `s0`.`Id` + FROM `Squads` AS `s0` + WHERE `s0`.`Id` = @squadId + ) + UNION ALL + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` + ) AS `u0` + INNER JOIN `Squads` AS `s1` ON `u0`.`SquadId` = `s1`.`Id` + WHERE `s1`.`Id` IN ( + SELECT `s2`.`Id` + FROM `Squads` AS `s2` + WHERE `s2`.`Id` = @squadId + ) +) AS `u1` +ORDER BY `u1`.`FullName` +"""); + } + + public override async Task Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(bool async) + { + await base.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async); + + AssertSql( + """ +@gearId='1' + +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`SquadId` = @gearId AND `u`.`SquadId` = @gearId) +"""); + } + + public override async Task Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(bool async) + { + await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(async); + + AssertSql( + """ +@entity_equality_prm_Inner_Squad_Id='1' (Nullable = true) + +SELECT `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` +FROM ( + SELECT DISTINCT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` + WHERE `s`.`Id` = @entity_equality_prm_Inner_Squad_Id +) AS `s1` +INNER JOIN `Squads` AS `s0` ON `s1`.`SquadId` = `s0`.`Id` +WHERE `s0`.`Id` = @entity_equality_prm_Inner_Squad_Id +ORDER BY `s1`.`FullName` +"""); + } + + public override async Task Complex_GroupBy_after_set_operator(bool async) + { + await base.Complex_GroupBy_after_set_operator(async); + + AssertSql( + """ +SELECT `u1`.`Name`, `u1`.`Count`, IIF(SUM(`u1`.`Count`) IS NULL, 0, SUM(`u1`.`Count`)) AS `Sum` +FROM ( + SELECT `c`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AS `Count` + FROM ( + SELECT `g`.`AssignedCityName`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`AssignedCityName`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` + UNION ALL + SELECT `c0`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `u0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + FROM ( + SELECT `g0`.`CityOfBirthName`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`CityOfBirthName`, `o0`.`FullName` + FROM `Officers` AS `o0` + ) AS `u0` + INNER JOIN `Cities` AS `c0` ON `u0`.`CityOfBirthName` = `c0`.`Name` +) AS `u1` +GROUP BY `u1`.`Name`, `u1`.`Count` +"""); + } + + public override async Task Complex_GroupBy_after_set_operator_using_result_selector(bool async) + { + await base.Complex_GroupBy_after_set_operator_using_result_selector(async); + + AssertSql( + """ +SELECT `u1`.`Name`, `u1`.`Count`, IIF(SUM(`u1`.`Count`) IS NULL, 0, SUM(`u1`.`Count`)) AS `Sum` +FROM ( + SELECT `c`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AS `Count` + FROM ( + SELECT `g`.`AssignedCityName`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`AssignedCityName`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` + UNION ALL + SELECT `c0`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `u0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + FROM ( + SELECT `g0`.`CityOfBirthName`, `g0`.`FullName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`CityOfBirthName`, `o0`.`FullName` + FROM `Officers` AS `o0` + ) AS `u0` + INNER JOIN `Cities` AS `c0` ON `u0`.`CityOfBirthName` = `c0`.`Name` +) AS `u1` +GROUP BY `u1`.`Name`, `u1`.`Count` +"""); + } + + public override async Task Left_join_with_GroupBy_with_composite_group_key(bool async) + { + await base.Left_join_with_GroupBy_with_composite_group_key(async); + + AssertSql( + """ +SELECT `u`.`CityOfBirthName`, `u`.`HasSoulPatch` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`CityOfBirthName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` +GROUP BY `u`.`CityOfBirthName`, `u`.`HasSoulPatch` +"""); + } + + public override async Task GroupBy_with_boolean_grouping_key(bool async) + { + await base.GroupBy_with_boolean_grouping_key(async); + + AssertSql( + """ +SELECT `u0`.`CityOfBirthName`, `u0`.`HasSoulPatch`, `u0`.`IsMarcus`, COUNT(*) AS `Count` +FROM ( + SELECT `u`.`CityOfBirthName`, `u`.`HasSoulPatch`, `u`.`Nickname` = 'Marcus' AS `IsMarcus` + FROM ( + SELECT `g`.`Nickname`, `g`.`CityOfBirthName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`CityOfBirthName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` +) AS `u0` +GROUP BY `u0`.`CityOfBirthName`, `u0`.`HasSoulPatch`, `u0`.`IsMarcus` +"""); + } + + public override async Task GroupBy_with_boolean_groupin_key_thru_navigation_access(bool async) + { + await base.GroupBy_with_boolean_groupin_key_thru_navigation_access(async); + + AssertSql( + """ +SELECT `u`.`HasSoulPatch`, LCASE(`s`.`Name`) AS `Name` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` +GROUP BY `u`.`HasSoulPatch`, `s`.`Name` +"""); + } + + public override async Task Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(bool async) + { + await base.Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(async); + + AssertSql( + """ +SELECT `c`.`Name` +FROM ( + SELECT `g`.`CityOfBirthName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`CityOfBirthName` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +GROUP BY `c`.`Name` +"""); + } + + public override async Task Group_by_on_StartsWith_with_null_parameter_as_argument(bool async) + { + await base.Group_by_on_StartsWith_with_null_parameter_as_argument(async); + + AssertSql( + """ +SELECT `u0`.`Key` +FROM ( + SELECT FALSE AS `Key` + FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` +) AS `u0` +GROUP BY `u0`.`Key` +"""); + } + + public override async Task Group_by_with_having_StartsWith_with_null_parameter_as_argument(bool async) + { + await base.Group_by_with_having_StartsWith_with_null_parameter_as_argument(async); + AssertSql( + """ +SELECT `u`.`FullName` +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +GROUP BY `u`.`FullName` +HAVING FALSE +"""); + } + + public override async Task Select_StartsWith_with_null_parameter_as_argument(bool async) + { + await base.Select_StartsWith_with_null_parameter_as_argument(async); + + AssertSql( + """ +SELECT FALSE +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Select_null_parameter_is_not_null(bool async) + { + await base.Select_null_parameter_is_not_null(async); + + AssertSql( + """ +@p='False' + +SELECT CBOOL(@p) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Where_null_parameter_is_not_null(bool async) + { + await base.Where_null_parameter_is_not_null(async); + + AssertSql( + """ +@p='False' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE @p +"""); + } + + public override async Task OrderBy_StartsWith_with_null_parameter_as_argument(bool async) + { + await base.OrderBy_StartsWith_with_null_parameter_as_argument(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task OrderBy_Contains_empty_list(bool async) + { + await base.OrderBy_Contains_empty_list(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Where_with_enum_flags_parameter(bool async) + { + await base.Where_with_enum_flags_parameter(async); + + AssertSql( + """ +@rank='1' (Nullable = true) + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE (`u`.`Rank` BAND @rank) = @rank +""", + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +""", + // + """ +@rank='2' (Nullable = true) + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE (`u`.`Rank` BOR @rank) <> @rank +""", + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE FALSE +"""); + } + + public override async Task FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(bool async) + { + await base.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +WHERE `c`.`Name` = ( + SELECT TOP 1 `c0`.`Name` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`CityOfBirthName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`CityOfBirthName` + FROM `Officers` AS `o0` + ) AS `u0` + INNER JOIN `Cities` AS `c0` ON `u0`.`CityOfBirthName` = `c0`.`Name` + ORDER BY `u0`.`Nickname`) OR (`c`.`Name` IS NULL AND ( + SELECT TOP 1 `c0`.`Name` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`CityOfBirthName` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`CityOfBirthName` + FROM `Officers` AS `o0` + ) AS `u0` + INNER JOIN `Cities` AS `c0` ON `u0`.`CityOfBirthName` = `c0`.`Name` + ORDER BY `u0`.`Nickname`) IS NULL) +"""); + } + + public override async Task Bitwise_operation_with_non_null_parameter_optimizes_null_checks(bool async) + { + await base.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async); + + AssertSql( + """ +@ranks='134' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE (`u`.`Rank` BAND @ranks) <> 0 +""", + // + """ +@ranks='134' + +SELECT (`u`.`Rank` BOR @ranks) = @ranks +FROM ( + SELECT `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +""", + // + """ +@ranks='134' + +SELECT (`u`.`Rank` BOR (`u`.`Rank` BOR (@ranks BOR (`u`.`Rank` BOR @ranks)))) = @ranks +FROM ( + SELECT `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Bitwise_operation_with_null_arguments(bool async) + { + await base.Bitwise_operation_with_null_arguments(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +""", + // + """ +@prm='2' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE (`w`.`AmmunitionType` BAND @prm) <> 0 OR `w`.`AmmunitionType` IS NULL +""", + // + """ +@prm='1' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE (`w`.`AmmunitionType` BAND @prm) = @prm +"""); + } + + public override async Task Logical_operation_with_non_null_parameter_optimizes_null_checks(bool async) + { + await base.Logical_operation_with_non_null_parameter_optimizes_null_checks(async); + + AssertSql( + """ +@prm='True' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` <> @prm +""", + // + """ +@prm='False' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` <> @prm +"""); + } + + public override async Task Cast_OfType_works_correctly(bool async) + { + await base.Cast_OfType_works_correctly(async); + + AssertSql( +""" +SELECT `o`.`FullName` +FROM `Officers` AS `o` +"""); + } + + public override async Task Join_inner_source_custom_projection_followed_by_filter(bool async) + { + await base.Join_inner_source_custom_projection_followed_by_filter(async); + + AssertSql( + """ +SELECT IIF(`l1`.`Name` = 'Locust', TRUE, NULL) AS `IsEradicated`, `l1`.`CommanderName`, `l1`.`Name` +FROM ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name` + FROM `LocustCommanders` AS `l0` +) AS `u` +INNER JOIN `LocustHordes` AS `l1` ON `u`.`Name` = `l1`.`CommanderName` +WHERE IIF(`l1`.`Name` = 'Locust', TRUE, NULL) <> TRUE OR IIF(`l1`.`Name` = 'Locust', TRUE, NULL) IS NULL +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public async Task Byte_array_filter_by_length_literal2(bool async) + { + await AssertQuery( + async, + ss => ss.Set().Where(w => EF.Functions.ByteArrayLength(w.Banner) == 2), + ss => ss.Set().Where(w => w.Banner != null && w.Banner.Length == 2)); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = 2 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public async Task Byte_array_filter_by_length_parameter2(bool async) + { + var someByteArr = new[] { (byte)42, (byte)24 }; + await AssertQuery( + async, + ss => ss.Set().Where(w => EF.Functions.ByteArrayLength(w.Banner) == someByteArr.Length), + ss => ss.Set().Where(w => w.Banner != null && w.Banner.Length == someByteArr.Length)); + + AssertSql( + """ +@p='2' + +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = @p +"""); + } + + [ConditionalFact] + public virtual void Byte_array_filter_by_length_parameter_compiled2() + { + var query = EF.CompileQuery( + (GearsOfWarContext context, byte[] byteArrayParam) + => context.Squads.Where(w => EF.Functions.ByteArrayLength(w.Banner) == EF.Functions.ByteArrayLength(byteArrayParam)).Count()); + + using var context = CreateContext(); + var byteQueryParam = new[] { (byte)42, (byte)128 }; + + Assert.Equal(2, query(context, byteQueryParam)); + + AssertSql( + """ +@byteArrayParam='0x2A80' (Size = 510) + +SELECT COUNT(*) +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = IIF(IIF(ASCB(RIGHTB(@byteArrayParam, 1)) = 0, LENB(@byteArrayParam) - 1, LENB(@byteArrayParam)) IS NULL, NULL, CLNG(IIF(ASCB(RIGHTB(@byteArrayParam, 1)) = 0, LENB(@byteArrayParam) - 1, LENB(@byteArrayParam)))) +"""); + } + + public override async Task Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(bool async) + { + var exception = await Assert.ThrowsAsync(() => base.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(async)); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public async Task Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n2(bool async) + { + await AssertQuery( + async, + ss => ss.Set().Where(w => EF.Functions.ByteArrayLength(w.Banner5) == 5), + ss => ss.Set().Where(w => w.Banner5 != null && w.Banner5.Length == 5)); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner5`, 1)) = 0, LENB(`s`.`Banner5`) - 1, LENB(`s`.`Banner5`)) = 5 +"""); + } + + public override async Task Conditional_expression_with_test_being_simplified_to_constant_simple(bool isAsync) + { + await base.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync); + + AssertSql( + """ +@prm='True' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(`u`.`HasSoulPatch` = @prm, TRUE, FALSE) +"""); + } + + public override async Task Conditional_expression_with_test_being_simplified_to_constant_complex(bool isAsync) + { + await base.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync); + + AssertSql( + """ +@prm='True' +@prm2='Marcus' Lancer' (Size = 255) + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(`u`.`HasSoulPatch` = @prm, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `w`.`Id` = `u`.`SquadId`) = @prm2, FALSE) +"""); + } + + public override async Task OrderBy_bool_coming_from_optional_navigation(bool async) + { + await base.OrderBy_bool_coming_from_optional_navigation(async); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`IsAutomatic`) +"""); + } + + public override async Task DateTimeOffset_Date_returns_datetime(bool async) + { + var dateTimeOffset = new DateTimeOffset(102, 3, 1, 8, 0, 0, new TimeSpan(-5, 0, 0)); + + await AssertQuery( + async, + ss => ss.Set().Where(m => m.Timeline.Date >= dateTimeOffset.Date)); + + AssertSql( + """ +@dateTimeOffset_Date='0102-03-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEVALUE(`m`.`Timeline`) >= CDATE(@dateTimeOffset_Date) +"""); + } + + public override async Task Conditional_with_conditions_evaluating_to_false_gets_optimized(bool async) + { + await base.Conditional_with_conditions_evaluating_to_false_gets_optimized(async); + + AssertSql( + """ +SELECT `u`.`FullName` +FROM ( + SELECT `g`.`Nickname`, `g`.`CityOfBirthName`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`CityOfBirthName`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Conditional_with_conditions_evaluating_to_true_gets_optimized(bool async) + { + await base.Conditional_with_conditions_evaluating_to_true_gets_optimized(async); + + AssertSql( + """ +SELECT `u`.`CityOfBirthName` +FROM ( + SELECT `g`.`Nickname`, `g`.`CityOfBirthName`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`CityOfBirthName`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Projecting_required_string_column_compared_to_null_parameter(bool async) + { + await base.Projecting_required_string_column_compared_to_null_parameter(async); + + AssertSql( + """ +SELECT FALSE +FROM ( + SELECT `g`.`Nickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Group_by_nullable_property_HasValue_and_project_the_grouping_key(bool async) + { + await base.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async); + + AssertSql( + """ +SELECT `w0`.`Key` +FROM ( + SELECT `w`.`SynergyWithId` IS NOT NULL AS `Key` + FROM `Weapons` AS `w` +) AS `w0` +GROUP BY `w0`.`Key` +"""); + } + + public override async Task Group_by_nullable_property_and_project_the_grouping_key_HasValue(bool async) + { + await base.Group_by_nullable_property_and_project_the_grouping_key_HasValue(async); + + AssertSql( + """ +SELECT `w`.`SynergyWithId` IS NOT NULL +FROM `Weapons` AS `w` +GROUP BY `w`.`SynergyWithId` +"""); + } + + public override async Task Checked_context_with_cast_does_not_fail(bool isAsync) + { + await base.Checked_context_with_cast_does_not_fail(isAsync); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +WHERE CBYTE(`u`.`ThreatLevel`) >= CBYTE(5) +"""); + } + + public override async Task Checked_context_with_addition_does_not_fail(bool isAsync) + { + await base.Checked_context_with_addition_does_not_fail(isAsync); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +WHERE CLNG(`u`.`ThreatLevel`) <= (5 + CLNG(`u`.`ThreatLevel`)) +"""); + } + + public override async Task Contains_on_collection_of_byte_subquery(bool async) + { + await base.Contains_on_collection_of_byte_subquery(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +WHERE `u`.`ThreatLevelByte` IN ( + SELECT `u0`.`ThreatLevelByte` + FROM ( + SELECT `l1`.`ThreatLevelByte` + FROM `LocustLeaders` AS `l1` + UNION ALL + SELECT `l2`.`ThreatLevelByte` + FROM `LocustCommanders` AS `l2` + ) AS `u0` +) +"""); + } + + public override async Task Contains_on_collection_of_nullable_byte_subquery(bool async) + { + await base.Contains_on_collection_of_nullable_byte_subquery(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `l1`.`ThreatLevelNullableByte` + FROM `LocustLeaders` AS `l1` + UNION ALL + SELECT `l2`.`ThreatLevelNullableByte` + FROM `LocustCommanders` AS `l2` + ) AS `u0` + WHERE `u0`.`ThreatLevelNullableByte` = `u`.`ThreatLevelNullableByte` OR (`u0`.`ThreatLevelNullableByte` IS NULL AND `u`.`ThreatLevelNullableByte` IS NULL)) +"""); + } + + public override async Task Contains_on_collection_of_nullable_byte_subquery_null_constant(bool async) + { + await base.Contains_on_collection_of_nullable_byte_subquery_null_constant(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `l1`.`ThreatLevelNullableByte` + FROM `LocustLeaders` AS `l1` + UNION ALL + SELECT `l2`.`ThreatLevelNullableByte` + FROM `LocustCommanders` AS `l2` + ) AS `u0` + WHERE `u0`.`ThreatLevelNullableByte` IS NULL) +"""); + } + + public override async Task Contains_on_collection_of_nullable_byte_subquery_null_parameter(bool async) + { + await base.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT `l1`.`ThreatLevelNullableByte` + FROM `LocustLeaders` AS `l1` + UNION ALL + SELECT `l2`.`ThreatLevelNullableByte` + FROM `LocustCommanders` AS `l2` + ) AS `u0` + WHERE `u0`.`ThreatLevelNullableByte` IS NULL) +"""); + } + + public override async Task Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion( + bool async) + { + await base.Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion(async); + + AssertSql( +""" +SELECT [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator] +FROM ( + SELECT [l].[ThreatLevelByte] + FROM [LocustLeaders] AS [l] + UNION ALL + SELECT [l0].[ThreatLevelByte] + FROM [LocustCommanders] AS [l0] +) AS [t] +CROSS APPLY ( + SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] + ) AS [t0] + WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT [l1].[Name], [l1].[LocustHordeId], [l1].[ThreatLevel], [l1].[ThreatLevelByte], [l1].[ThreatLevelNullableByte], NULL AS [DefeatedByNickname], NULL AS [DefeatedBySquadId], NULL AS [HighCommandId], N'LocustLeader' AS [Discriminator] + FROM [LocustLeaders] AS [l1] + UNION ALL + SELECT [l2].[Name], [l2].[LocustHordeId], [l2].[ThreatLevel], [l2].[ThreatLevelByte], [l2].[ThreatLevelNullableByte], [l2].[DefeatedByNickname], [l2].[DefeatedBySquadId], [l2].[HighCommandId], N'LocustCommander' AS [Discriminator] + FROM [LocustCommanders] AS [l2] + ) AS [t2] + WHERE [t2].[ThreatLevelByte] = [t].[ThreatLevelByte]) +) AS [t1] +"""); + } + + public override async Task Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion_negated( + bool async) + { + await base.Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion_negated(async); + + AssertSql( +""" +SELECT [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator] +FROM ( + SELECT [l].[ThreatLevelByte] + FROM [LocustLeaders] AS [l] + UNION ALL + SELECT [l0].[ThreatLevelByte] + FROM [LocustCommanders] AS [l0] +) AS [t] +CROSS APPLY ( + SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] + ) AS [t0] + WHERE NOT (EXISTS ( + SELECT 1 + FROM ( + SELECT [l1].[Name], [l1].[LocustHordeId], [l1].[ThreatLevel], [l1].[ThreatLevelByte], [l1].[ThreatLevelNullableByte], NULL AS [DefeatedByNickname], NULL AS [DefeatedBySquadId], NULL AS [HighCommandId], N'LocustLeader' AS [Discriminator] + FROM [LocustLeaders] AS [l1] + UNION ALL + SELECT [l2].[Name], [l2].[LocustHordeId], [l2].[ThreatLevel], [l2].[ThreatLevelByte], [l2].[ThreatLevelNullableByte], [l2].[DefeatedByNickname], [l2].[DefeatedBySquadId], [l2].[HighCommandId], N'LocustCommander' AS [Discriminator] + FROM [LocustCommanders] AS [l2] + ) AS [t2] + WHERE [t2].[ThreatLevelByte] = [t].[ThreatLevelByte])) +) AS [t1] +"""); + } + + public override async Task Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion(bool async) + { + await base.Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion(async); + + AssertSql( +""" +SELECT [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator] +FROM ( + SELECT [l].[ThreatLevelNullableByte] + FROM [LocustLeaders] AS [l] + UNION ALL + SELECT [l0].[ThreatLevelNullableByte] + FROM [LocustCommanders] AS [l0] +) AS [t] +CROSS APPLY ( + SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] + ) AS [t0] + WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT [l1].[Name], [l1].[LocustHordeId], [l1].[ThreatLevel], [l1].[ThreatLevelByte], [l1].[ThreatLevelNullableByte], NULL AS [DefeatedByNickname], NULL AS [DefeatedBySquadId], NULL AS [HighCommandId], N'LocustLeader' AS [Discriminator] + FROM [LocustLeaders] AS [l1] + UNION ALL + SELECT [l2].[Name], [l2].[LocustHordeId], [l2].[ThreatLevel], [l2].[ThreatLevelByte], [l2].[ThreatLevelNullableByte], [l2].[DefeatedByNickname], [l2].[DefeatedBySquadId], [l2].[HighCommandId], N'LocustCommander' AS [Discriminator] + FROM [LocustCommanders] AS [l2] + ) AS [t2] + WHERE [t2].[ThreatLevelNullableByte] = [t].[ThreatLevelNullableByte] OR (([t2].[ThreatLevelNullableByte] IS NULL) AND ([t].[ThreatLevelNullableByte] IS NULL))) +) AS [t1] +"""); + } + + public override async Task Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion_negated(bool async) + { + await base.Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion_negated(async); + + AssertSql( +""" +SELECT [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator] +FROM ( + SELECT [l].[ThreatLevelNullableByte] + FROM [LocustLeaders] AS [l] + UNION ALL + SELECT [l0].[ThreatLevelNullableByte] + FROM [LocustCommanders] AS [l0] +) AS [t] +CROSS APPLY ( + SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] + ) AS [t0] + WHERE NOT (EXISTS ( + SELECT 1 + FROM ( + SELECT [l1].[Name], [l1].[LocustHordeId], [l1].[ThreatLevel], [l1].[ThreatLevelByte], [l1].[ThreatLevelNullableByte], NULL AS [DefeatedByNickname], NULL AS [DefeatedBySquadId], NULL AS [HighCommandId], N'LocustLeader' AS [Discriminator] + FROM [LocustLeaders] AS [l1] + UNION ALL + SELECT [l2].[Name], [l2].[LocustHordeId], [l2].[ThreatLevel], [l2].[ThreatLevelByte], [l2].[ThreatLevelNullableByte], [l2].[DefeatedByNickname], [l2].[DefeatedBySquadId], [l2].[HighCommandId], N'LocustCommander' AS [Discriminator] + FROM [LocustCommanders] AS [l2] + ) AS [t2] + WHERE [t2].[ThreatLevelNullableByte] = [t].[ThreatLevelNullableByte] OR (([t2].[ThreatLevelNullableByte] IS NULL) AND ([t].[ThreatLevelNullableByte] IS NULL)))) +) AS [t1] +"""); + } + + public override async Task Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(bool async) + { + await base.Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(async); + + AssertSql( + """ +@prm='1' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE @prm = `w`.`AmmunitionType` +"""); + } + + public override async Task Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(bool async) + { + await base.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async); + + AssertSql( + """ +@prm='133' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE (@prm BAND `u`.`Rank`) = `u`.`Rank` +"""); + } + + public override async Task Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(bool async) + { + await base.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async); + + AssertSql( + """ +@prm='5' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE (@prm BAND CLNG(CINT(`u`.`Rank`))) = CLNG(`u`.`Rank`) +"""); + } + + public override async Task Constant_enum_with_same_underlying_value_as_previously_parameterized_int(bool async) + { + await base.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `u`.`Rank` BAND 1 +FROM ( + SELECT `g`.`Nickname`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Enum_array_contains(bool async) + { + await base.Enum_array_contains(async); + + AssertSql( + """ +@types1='1' + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +WHERE `w0`.`Id` IS NOT NULL AND (`w0`.`AmmunitionType` IS NULL OR `w0`.`AmmunitionType` = @types1) +"""); + } + + public override async Task Coalesce_with_non_root_evaluatable_Convert(bool async) + { + await base.Coalesce_with_non_root_evaluatable_Convert(async); + + AssertSql( + """ +@rank='1' (Nullable = true) + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE @rank = `u`.`Rank` +"""); + } + + /*[ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public async Task DataLength_function_for_string_parameter(bool async) + { + await AssertQueryScalar( + async, + ss => ss.Set().Select(m => EF.Functions.DataLength(m.CodeName)), + ss => ss.Set().Select(m => (int?)(m.CodeName.Length * 2))); + + AssertSql( +""" +SELECT CAST(DATALENGTH([m].[CodeName]) AS int) +FROM [Missions] AS [m] +"""); + }*/ + + public override async Task CompareTo_used_with_non_unicode_string_column_and_constant(bool async) + { + await base.CompareTo_used_with_non_unicode_string_column_and_constant(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = 'Unknown' +"""); + } + + public override async Task Coalesce_used_with_non_unicode_string_column_and_constant(bool async) + { + await base.Coalesce_used_with_non_unicode_string_column_and_constant(async); + + AssertSql( + """ +SELECT IIF(`c`.`Location` IS NULL, 'Unknown', `c`.`Location`) +FROM `Cities` AS `c` +"""); + } + + public override async Task Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(bool async) + { + await base.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, COUNT(*) AS `Count` +FROM (`Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`CityOfBirthName`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`CityOfBirthName`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +GROUP BY `c`.`Name`, `c`.`Location` +ORDER BY `c`.`Location` +"""); + } + + public override async Task SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(bool async) + { + await base.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Weapons` AS `w` ON `u`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +ORDER BY `u`.`Nickname`, `w`.`Id` +"""); + } + + public override async Task SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(bool async) + { + await base.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +ORDER BY `u`.`Nickname`, `w`.`Id` +"""); + } + + public override async Task SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join( + bool async) + { + await base.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w` + LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +) AS `s` ON `u`.`FullName` <> `s`.`OwnerFullName` OR `s`.`OwnerFullName` IS NULL +ORDER BY `u`.`Nickname`, `s`.`Id` +"""); + } + + public override async Task SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(bool async) + { + await base.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +"""); + } + + public override async Task Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(bool async) + { + await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` AND `u`.`SquadId` < `w`.`Id` +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(bool async) + { + await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` AND `u`.`SquadId` <= `w`.`Id` +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(bool async) + { + await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` AND `u`.`SquadId` >= `w`.`Id` +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task SelectMany_predicate_with_non_equality_comparison_with_Take_doesnt_convert_to_join(bool async) + { + await base.SelectMany_predicate_with_non_equality_comparison_with_Take_doesnt_convert_to_join(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator], [t0].[Id], [t0].[AmmunitionType], [t0].[IsAutomatic], [t0].[Name], [t0].[OwnerFullName], [t0].[SynergyWithId] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] +) AS [t] +CROSS APPLY ( + SELECT TOP(3) [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] + FROM [Weapons] AS [w] + WHERE [w].[OwnerFullName] <> [t].[FullName] OR ([w].[OwnerFullName] IS NULL) + ORDER BY [w].[Id] +) AS [t0] +ORDER BY [t].[Nickname], [t0].[Id] +"""); + } + + public override async Task FirstOrDefault_over_int_compared_to_zero(bool async) + { + await base.FirstOrDefault_over_int_compared_to_zero(async); + + AssertSql( + """ +SELECT `s`.`Name` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Delta' AND IIF(( + SELECT TOP 1 `u`.`SquadId` + FROM ( + SELECT `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` + ORDER BY `u`.`FullName`) IS NULL, 0, ( + SELECT TOP 1 `u`.`SquadId` + FROM ( + SELECT `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` + ORDER BY `u`.`FullName`)) <> 0 +"""); + } + + public override async Task Correlated_collection_with_inner_collection_references_element_two_levels_up(bool async) + { + await base.Correlated_collection_with_inner_collection_references_element_two_levels_up(async); + + AssertSql( +""" +SELECT [t].[FullName], [t].[Nickname], [t].[SquadId], [t0].[ReportName], [t0].[OfficerName], [t0].[Nickname], [t0].[SquadId] +FROM ( + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [t1].[FullName] AS [ReportName], [t].[FullName] AS [OfficerName], [t1].[Nickname], [t1].[SquadId] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId] + FROM [Gears] AS [g] + UNION ALL + SELECT [o0].[Nickname], [o0].[SquadId], [o0].[FullName], [o0].[LeaderNickname], [o0].[LeaderSquadId] + FROM [Officers] AS [o0] + ) AS [t1] + WHERE [t].[Nickname] = [t1].[LeaderNickname] AND [t].[SquadId] = [t1].[LeaderSquadId] +) AS [t0] +ORDER BY [t].[Nickname], [t].[SquadId], [t0].[Nickname] +"""); + } + + public override async Task Accessing_derived_property_using_hard_and_soft_cast(bool async) + { + await base.Accessing_derived_property_using_hard_and_soft_cast(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +WHERE `u`.`Discriminator` = 'LocustCommander' AND (IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) <> 0 OR IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) IS NULL) +""", + // + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +WHERE `u`.`Discriminator` = 'LocustCommander' AND (IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) <> 0 OR IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) IS NULL) +"""); + } + + public override async Task Cast_to_derived_followed_by_include_and_FirstOrDefault(bool async) + { + await base.Cast_to_derived_followed_by_include_and_FirstOrDefault(async); + + AssertSql( + """ +SELECT TOP 1 `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` +WHERE `u`.`Name` LIKE '%Queen%' +"""); + } + + public override async Task Correlated_collection_take(bool async) + { + await base.Correlated_collection_take(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [c].[Name], [t0].[Id], [t0].[AmmunitionType], [t0].[IsAutomatic], [t0].[Name], [t0].[OwnerFullName], [t0].[SynergyWithId], [c].[Location], [c].[Nation] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[CityOfBirthName], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[CityOfBirthName], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +INNER JOIN [Cities] AS [c] ON [t].[CityOfBirthName] = [c].[Name] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[AmmunitionType], [t1].[IsAutomatic], [t1].[Name], [t1].[OwnerFullName], [t1].[SynergyWithId] + FROM ( + SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId], ROW_NUMBER() OVER(PARTITION BY [w].[OwnerFullName] ORDER BY [w].[Id]) AS [row] + FROM [Weapons] AS [w] + ) AS [t1] + WHERE [t1].[row] <= 10 +) AS [t0] ON [t].[FullName] = [t0].[OwnerFullName] +ORDER BY [t].[Nickname], [t].[SquadId], [c].[Name] +"""); + } + + public override async Task Project_shadow_properties(bool async) + { + await base.Project_shadow_properties(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`AssignedCityName` +FROM `Gears` AS `g` +UNION ALL +SELECT `o`.`Nickname`, `o`.`AssignedCityName` +FROM `Officers` AS `o` +"""); + } + + public override async Task Composite_key_entity_equal(bool async) + { + await base.Composite_key_entity_equal(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u`, +( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` +WHERE `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` +"""); + } + + public override async Task Composite_key_entity_not_equal(bool async) + { + await base.Composite_key_entity_not_equal(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u`, +( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` +WHERE `u`.`Nickname` <> `u0`.`Nickname` OR `u`.`SquadId` <> `u0`.`SquadId` +"""); + } + + public override async Task Composite_key_entity_equal_null(bool async) + { + await base.Composite_key_entity_equal_null(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND `u`.`DefeatedBySquadId` = `u0`.`SquadId` +WHERE `u0`.`Nickname` IS NULL OR `u0`.`SquadId` IS NULL +"""); + } + + public override async Task Composite_key_entity_not_equal_null(bool async) + { + await base.Composite_key_entity_not_equal_null(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND `u`.`DefeatedBySquadId` = `u0`.`SquadId` +WHERE `u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_comparison(bool async) + { + await base.Projecting_property_converted_to_nullable_with_comparison(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, `u`.`SquadId`, `u`.`HasSoulPatch` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) = 1 +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_addition(bool async) + { + await base.Projecting_property_converted_to_nullable_with_addition(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, `u`.`SquadId`, `u`.`HasSoulPatch` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) + 1) = 2 +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_addition_and_final_projection(bool async) + { + await base.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async); + + AssertSql( + """ +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) + 1 AS `Value` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_conditional(bool async) + { + await base.Projecting_property_converted_to_nullable_with_conditional(async); + + AssertSql( + """ +SELECT IIF(`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL, IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL), -1) +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_function_call(bool async) + { + await base.Projecting_property_converted_to_nullable_with_function_call(async); + + AssertSql( + """ +SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL), 0 + 1, 3) +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_function_call2(bool async) + { + await base.Projecting_property_converted_to_nullable_with_function_call2(async); + + AssertSql( + """ +SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL)) AS `Function` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_element_init(bool async) + { + await base.Projecting_property_converted_to_nullable_into_element_init(async); + + AssertSql( + """ +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) + 1 +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_member_assignment(bool async) + { + await base.Projecting_property_converted_to_nullable_into_member_assignment(async); + + AssertSql( + """ +SELECT IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) AS `Id` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_new_array(bool async) + { + await base.Projecting_property_converted_to_nullable_into_new_array(async); + + AssertSql( + """ +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) + 1 +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_unary(bool async) + { + await base.Projecting_property_converted_to_nullable_into_unary(async); + + AssertSql( + """ +SELECT `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL AND NOT (IIF(`t`.`GearNickName` IS NOT NULL, `u`.`HasSoulPatch`, NULL)) +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_member_access(bool async) + { + await base.Projecting_property_converted_to_nullable_into_member_access(async); + + AssertSql( + """ +SELECT `u`.`Nickname` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`CityOfBirthName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE DATEPART('m', `t`.`IssueDate`) <> 5 +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_and_use_it_in_order_by(bool async) + { + await base.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, `u`.`SquadId`, `u`.`HasSoulPatch` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL +ORDER BY IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL), `t`.`Note` +"""); + } + + public override async Task Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(bool async) + { + await base.Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t`.`Id` IS NULL AS `IsNull`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `c`.`Name` IS NULL AS `IsNull`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s`.`Id` IS NULL AS `IsNull` +FROM ((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` +"""); + } + + public override async Task Project_navigation_defined_on_derived_from_entity_with_inheritance_using_soft_cast(bool async) + { + await base.Project_navigation_defined_on_derived_from_entity_with_inheritance_using_soft_cast(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u0`.`Nickname` IS NULL OR `u0`.`SquadId` IS NULL AS `IsNull`, `l1`.`Id`, `l1`.`CapitalName`, `l1`.`Name`, `l1`.`ServerAddress`, `l1`.`CommanderName`, `l1`.`DeputyCommanderName`, `l1`.`Eradicated`, `l1`.`Id` IS NULL AS `IsNull`, `l2`.`Id`, `l2`.`IsOperational`, `l2`.`Name`, `l2`.`Id` IS NULL AS `IsNull` +FROM ((( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId`) +LEFT JOIN `LocustHordes` AS `l1` ON `u`.`Name` = `l1`.`CommanderName`) +LEFT JOIN `LocustHighCommands` AS `l2` ON IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) = `l2`.`Id` +"""); + } + + public override async Task Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(bool async) + { + await base.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`HasSoulPatch0`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP @p1 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`HasSoulPatch0` + FROM ( + SELECT TOP @p + @p1 `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u1`.`HasSoulPatch` AS `HasSoulPatch0` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + LEFT JOIN ( + SELECT MIN(IIF(LEN(`u0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u0`.`Nickname`)))) AS `c`, `u0`.`HasSoulPatch` + FROM ( + SELECT `g0`.`Nickname`, `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`HasSoulPatch` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u0`.`Nickname` <> 'Dom' + GROUP BY `u0`.`HasSoulPatch` + ) AS `u1` ON IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))) = `u1`.`c` + WHERE `u1`.`c` IS NOT NULL + ORDER BY `u`.`Nickname` + ) AS `s` + ORDER BY `s`.`Nickname` DESC +) AS `s0` +LEFT JOIN `Weapons` AS `w` ON `s0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s0`.`Nickname`, `s0`.`SquadId`, NOT (`s0`.`HasSoulPatch0`) +"""); + } + + public override async Task Where_bool_column_and_Contains(bool async) + { + await base.Where_bool_column_and_Contains(async); + + AssertSql( + """ +@values1='False' +@values2='True' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND `u`.`HasSoulPatch` IN (@values1, @values2) +"""); + } + + public override async Task Where_bool_column_or_Contains(bool async) + { + await base.Where_bool_column_or_Contains(async); + + AssertSql( + """ +@values1='False' +@values2='True' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE `u`.`HasSoulPatch` AND `u`.`HasSoulPatch` IN (@values1, @values2) +"""); + } + + public override async Task Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(bool async) + { + await base.Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(async); + + AssertSql( + """ +@place='Ephyra's location' (Size = 255) +@place0='Ephyra's location' (Size = 100) + +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Nation` = @place OR `c`.`Location` = @place0 OR `c`.`Location` = @place0 +"""); + } + + public override async Task Enum_matching_take_value_gets_different_type_mapping(bool async) + { + await base.Enum_matching_take_value_gets_different_type_mapping(async); + + AssertSql( + """ +@p='1' +@value='1' + +SELECT TOP @p `u`.`Rank` BAND @value +FROM ( + SELECT `g`.`Nickname`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` +ORDER BY `u`.`Nickname` +"""); + } + + public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(bool async) + { + await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async); + + AssertSql( + """ +@prm='1' + +SELECT `u`.`Nickname`, `u`.`FullName`, `w0`.`Id` IS NOT NULL AS `Collection` +FROM ( + SELECT `g`.`Nickname`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`Id` > @prm +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +"""); + } + + public override async Task Project_entity_and_collection_element(bool async) + { + await base.Project_entity_and_collection_element(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator], [s].[Id], [s].[Banner], [s].[Banner5], [s].[InternalNumber], [s].[Name], [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId], [t0].[Id], [t0].[AmmunitionType], [t0].[IsAutomatic], [t0].[Name], [t0].[OwnerFullName], [t0].[SynergyWithId] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] +) AS [t] +INNER JOIN [Squads] AS [s] ON [t].[SquadId] = [s].[Id] +LEFT JOIN [Weapons] AS [w] ON [t].[FullName] = [w].[OwnerFullName] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[AmmunitionType], [t1].[IsAutomatic], [t1].[Name], [t1].[OwnerFullName], [t1].[SynergyWithId] + FROM ( + SELECT [w0].[Id], [w0].[AmmunitionType], [w0].[IsAutomatic], [w0].[Name], [w0].[OwnerFullName], [w0].[SynergyWithId], ROW_NUMBER() OVER(PARTITION BY [w0].[OwnerFullName] ORDER BY [w0].[Id]) AS [row] + FROM [Weapons] AS [w0] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[FullName] = [t0].[OwnerFullName] +ORDER BY [t].[Nickname], [t].[SquadId], [s].[Id] +"""); + } + + public override async Task Correlated_collection_via_SelectMany_with_Distinct_missing_indentifying_columns_in_projection(bool async) + { + await base.Correlated_collection_via_SelectMany_with_Distinct_missing_indentifying_columns_in_projection(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t1].[HasSoulPatch] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT DISTINCT [t2].[HasSoulPatch] + FROM [Weapons] AS [w] + LEFT JOIN ( + SELECT [g0].[AssignedCityName], [g0].[FullName] + FROM [Gears] AS [g0] + UNION ALL + SELECT [o0].[AssignedCityName], [o0].[FullName] + FROM [Officers] AS [o0] + ) AS [t0] ON [w].[OwnerFullName] = [t0].[FullName] + LEFT JOIN [Cities] AS [c] ON [t0].[AssignedCityName] = [c].[Name] + INNER JOIN ( + SELECT [g1].[CityOfBirthName], [g1].[HasSoulPatch] + FROM [Gears] AS [g1] + UNION ALL + SELECT [o1].[CityOfBirthName], [o1].[HasSoulPatch] + FROM [Officers] AS [o1] + ) AS [t2] ON [c].[Name] = [t2].[CityOfBirthName] + WHERE [t].[FullName] = [w].[OwnerFullName] +) AS [t1] +ORDER BY [t].[Nickname], [t].[SquadId] +"""); + } + + public override async Task Basic_query_gears(bool async) + { + await base.Basic_query_gears(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` +FROM `Gears` AS `g` +UNION ALL +SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` +FROM `Officers` AS `o` +"""); + } + + public override async Task Contains_on_readonly_enumerable(bool async) + { + await base.Contains_on_readonly_enumerable(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` = 1 +"""); + } + + public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(bool async) + { + await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async); + + AssertSql( + """ +@isAutomatic='True' + +SELECT `u`.`Nickname`, `u`.`FullName`, `w0`.`Id` IS NOT NULL AS `Collection` +FROM ( + SELECT `g`.`Nickname`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` <> @isAutomatic +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +"""); + } + + public override async Task Trying_to_access_unmapped_property_in_projection(bool async) + { + await base.Trying_to_access_unmapped_property_in_projection(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` +FROM `Gears` AS `g` +UNION ALL +SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` +FROM `Officers` AS `o` +"""); + } + + public override async Task Cast_to_derived_type_causes_client_eval(bool async) + { + await base.Cast_to_derived_type_causes_client_eval(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` +FROM `Gears` AS `g` +UNION ALL +SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` +FROM `Officers` AS `o` +"""); + } + + public override async Task Comparison_with_value_converted_subclass(bool async) + { + await base.Comparison_with_value_converted_subclass(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated` +FROM `LocustHordes` AS `l` +WHERE `l`.`ServerAddress` = '127.0.0.1' +"""); + } + + public override async Task Project_equality_with_value_converted_property(bool async) + { + await base.Project_equality_with_value_converted_property(async); + + AssertSql( + """ +SELECT `m`.`Difficulty` = 'Unknown' +FROM `Missions` AS `m` +"""); + } + + public override async Task FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(bool async) + { + //await base.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async); + await AssertQuery( + async, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault() + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault(new DateTime(100, 1, 1)) + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }); + + AssertSql( + """ +SELECT `u`.`Nickname`, IIF(( + SELECT TOP 1 `t1`.`IssueDate` + FROM `Tags` AS `t1` + WHERE `t1`.`GearNickName` = `u`.`FullName` + ORDER BY `t1`.`Id`) IS NULL, #0100-01-01#, ( + SELECT TOP 1 `t1`.`IssueDate` + FROM `Tags` AS `t1` + WHERE `t1`.`GearNickName` = `u`.`FullName` + ORDER BY `t1`.`Id`)) AS `invalidTagIssueDate` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`IssueDate` > IIF(( + SELECT TOP 1 `t0`.`IssueDate` + FROM `Tags` AS `t0` + WHERE `t0`.`GearNickName` = `u`.`FullName` + ORDER BY `t0`.`Id`) IS NULL, #0100-01-01#, ( + SELECT TOP 1 `t0`.`IssueDate` + FROM `Tags` AS `t0` + WHERE `t0`.`GearNickName` = `u`.`FullName` + ORDER BY `t0`.`Id`)) +"""); + } + + public override async Task + Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection_multiple_grouping_keys( + bool async) + { + await base + .Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection_multiple_grouping_keys( + async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t0].[IsAutomatic], [t0].[Name], [t0].[Count] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [w].[IsAutomatic], [w].[Name], COUNT(*) AS [Count] + FROM [Weapons] AS [w] + WHERE [t].[FullName] = [w].[OwnerFullName] + GROUP BY [w].[IsAutomatic], [w].[Name] +) AS [t0] +ORDER BY [t].[Nickname], [t].[SquadId], [t0].[IsAutomatic] +"""); + } + + public override async Task Sum_with_no_data_nullable_double(bool async) + { + await base.Sum_with_no_data_nullable_double(async); + + AssertSql( +""" +SELECT IIF(SUM(`m`.`Rating`) IS NULL, 0.0, SUM(`m`.`Rating`)) +FROM `Missions` AS `m` +WHERE `m`.`CodeName` = 'Operation Foobar' +"""); + } + + public override async Task Correlated_collection_with_distinct_not_projecting_identifier_column(bool async) + { + await base.Correlated_collection_with_distinct_not_projecting_identifier_column(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t0].[Name], [t0].[IsAutomatic] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT DISTINCT [w].[Name], [w].[IsAutomatic] + FROM [Weapons] AS [w] + WHERE [t].[FullName] = [w].[OwnerFullName] +) AS [t0] +ORDER BY [t].[Nickname], [t].[SquadId], [t0].[Name] +"""); + } + + public override async Task Include_after_Select_throws(bool async) + { + await base.Include_after_Select_throws(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `LocustHordes` AS `l` +LEFT JOIN `Cities` AS `c` ON `l`.`CapitalName` = `c`.`Name` +"""); + } + + public override async Task Cast_to_derived_followed_by_multiple_includes(bool async) + { + await base.Cast_to_derived_followed_by_multiple_includes(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`Name` LIKE '%Queen%' +ORDER BY `u`.`Name`, `u0`.`Nickname`, `u0`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_distinct_projecting_identifier_column(bool async) + { + await base.Correlated_collection_with_distinct_projecting_identifier_column(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t0].[Id], [t0].[Name] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT DISTINCT [w].[Id], [w].[Name] + FROM [Weapons] AS [w] + WHERE [t].[FullName] = [w].[OwnerFullName] +) AS [t0] +ORDER BY [t].[Nickname], [t].[SquadId] +"""); + } + + public override async Task Where_equals_method_on_nullable_with_object_overload(bool async) + { + await base.Where_equals_method_on_nullable_with_object_overload(async); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE `m`.`Rating` IS NULL +"""); + } + + public override async Task + Correlated_collection_with_groupby_not_projecting_identifier_column_but_only_grouping_key_in_final_projection(bool async) + { + await base.Correlated_collection_with_groupby_not_projecting_identifier_column_but_only_grouping_key_in_final_projection(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t0].[Key] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [w].[IsAutomatic] AS [Key] + FROM [Weapons] AS [w] + WHERE [t].[FullName] = [w].[OwnerFullName] + GROUP BY [w].[IsAutomatic] +) AS [t0] +ORDER BY [t].[Nickname], [t].[SquadId] +"""); + } + + public override async Task Project_derivied_entity_with_convert_to_parent(bool async) + { + await base.Project_derivied_entity_with_convert_to_parent(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated` +FROM `LocustHordes` AS `l` +"""); + } + + public override async Task Include_after_SelectMany_throws(bool async) + { + await base.Include_after_SelectMany_throws(async); + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM ((`LocustHordes` AS `l` +LEFT JOIN `Cities` AS `c` ON `l`.`CapitalName` = `c`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` ON `c`.`Name` = `u`.`CityOfBirthName`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` +WHERE `c`.`Name` IS NOT NULL AND `u`.`CityOfBirthName` IS NOT NULL AND `u`.`SquadId` IS NOT NULL AND `s`.`Id` IS NOT NULL +"""); + } + + public override async Task Correlated_collection_with_distinct_projecting_identifier_column_composite_key(bool async) + { + await base.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async); + + AssertSql( + """ +SELECT `s`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`HasSoulPatch` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT DISTINCT `u`.`Nickname`, `u`.`SquadId`, `u`.`HasSoulPatch` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` +) AS `u0` ON `s`.`Id` = `u0`.`SquadId` +ORDER BY `s`.`Id`, `u0`.`Nickname` +"""); + } + + public override async Task Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(bool async) + { + await base.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`Discriminator` = 'Officer' AS `IsOfficer` +FROM ( + SELECT `g`.`Nickname`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task GroupBy_Select_sum(bool async) + { + await base.GroupBy_Select_sum(async); + + AssertSql( +""" +SELECT IIF(SUM(`m`.`Rating`) IS NULL, 0.0, SUM(`m`.`Rating`)) +FROM `Missions` AS `m` +GROUP BY `m`.`CodeName` +"""); + } + + public override async Task ToString_boolean_property_nullable(bool async) + { + await base.ToString_boolean_property_nullable(async); + + AssertSql( + """ +SELECT IIF(`l`.`Eradicated` = FALSE, 'False', IIF(`l`.`Eradicated`, 'True', '')) +FROM `LocustHordes` AS `l` +"""); + } + + public override async Task ToString_boolean_computed_nullable(bool async) + { + await base.ToString_boolean_computed_nullable(async); + + AssertSql( + """ +SELECT IIF((`l`.`Eradicated` OR (`l`.`CommanderName` = 'Unknown' AND `l`.`CommanderName` IS NOT NULL)) = FALSE, 'False', IIF(`l`.`Eradicated` OR `l`.`CommanderName` = 'Unknown', 'True', '')) +FROM `LocustHordes` AS `l` +"""); + } + + public override async Task Correlated_collection_after_distinct_3_levels(bool async) + { + await base.Correlated_collection_after_distinct_3_levels(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[Name], [t2].[Nickname], [t2].[FullName], [t2].[HasSoulPatch], [t2].[Id], [t2].[Name], [t2].[Nickname0], [t2].[FullName0], [t2].[HasSoulPatch0], [t2].[Id0] +FROM ( + SELECT DISTINCT [s].[Id], [s].[Name] + FROM [Squads] AS [s] +) AS [t] +OUTER APPLY ( + SELECT [t0].[Nickname], [t0].[FullName], [t0].[HasSoulPatch], [t1].[Id], [t1].[Name], [t1].[Nickname] AS [Nickname0], [t1].[FullName] AS [FullName0], [t1].[HasSoulPatch] AS [HasSoulPatch0], [t1].[Id0] + FROM ( + SELECT DISTINCT [t3].[Nickname], [t3].[FullName], [t3].[HasSoulPatch] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName], [g].[HasSoulPatch] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName], [o].[HasSoulPatch] + FROM [Officers] AS [o] + ) AS [t3] + WHERE [t3].[SquadId] = [t].[Id] + ) AS [t0] + OUTER APPLY ( + SELECT [t].[Id], [t].[Name], [t0].[Nickname], [t0].[FullName], [t0].[HasSoulPatch], [w].[Id] AS [Id0] + FROM [Weapons] AS [w] + WHERE [w].[OwnerFullName] = [t0].[FullName] + ) AS [t1] +) AS [t2] +ORDER BY [t].[Id], [t2].[Nickname], [t2].[FullName], [t2].[HasSoulPatch] +"""); + } + + public override async Task ToString_string_property_projection(bool async) + { + await base.ToString_string_property_projection(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_boolean_property_non_nullable(bool async) + { + await base.ToString_boolean_property_non_nullable(async); + AssertSql( + """ +SELECT IIF(NOT (`w`.`IsAutomatic`), 'False', 'True') +FROM `Weapons` AS `w` +"""); + } + + public override async Task Include_on_derived_entity_with_cast(bool async) + { + await base.Include_on_derived_entity_with_cast(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `LocustHordes` AS `l` +LEFT JOIN `Cities` AS `c` ON `l`.`CapitalName` = `c`.`Name` +ORDER BY `l`.`Id` +"""); + } + + public override async Task String_concat_nullable_expressions_are_coalesced(bool async) + { + await base.String_concat_nullable_expressions_are_coalesced(async); + + AssertSql( + """ +SELECT ((`u`.`FullName` & '') & IIF(`u`.`LeaderNickname` IS NULL, '', `u`.`LeaderNickname`)) & '' +FROM ( + SELECT `g`.`FullName`, `g`.`LeaderNickname` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`FullName`, `o`.`LeaderNickname` + FROM `Officers` AS `o` +) AS `u` +"""); + } + + public override async Task Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(bool async) + { + await base.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`Name`, `w0`.`OwnerFullName` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT DISTINCT `w`.`Id`, `w`.`Name`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection( + bool async) + { + await base.Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t0].[Key], [t0].[Count] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [w].[IsAutomatic] AS [Key], COUNT(*) AS [Count] + FROM [Weapons] AS [w] + WHERE [t].[FullName] = [w].[OwnerFullName] + GROUP BY [w].[IsAutomatic] +) AS [t0] +ORDER BY [t].[Nickname], [t].[SquadId] +"""); + } + + public override async Task Project_discriminator_columns(bool async) + { + await base.Project_discriminator_columns(async); + + AssertSql(); + } + + public override async Task + Correlated_collection_with_groupby_with_complex_grouping_key_not_projecting_identifier_column_with_group_aggregate_in_final_projection( + bool async) + { + await base + .Correlated_collection_with_groupby_with_complex_grouping_key_not_projecting_identifier_column_with_group_aggregate_in_final_projection( + async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t0].[Key], [t0].[Count] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +OUTER APPLY ( + SELECT [t1].[Key], COUNT(*) AS [Count] + FROM ( + SELECT CAST(LEN([w].[Name]) AS int) AS [Key] + FROM [Weapons] AS [w] + WHERE [t].[FullName] = [w].[OwnerFullName] + ) AS [t1] + GROUP BY [t1].[Key] +) AS [t0] +ORDER BY [t].[Nickname], [t].[SquadId] +"""); + } + + public override async Task Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions( + bool async) + { + await base.Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions(async); + + AssertSql(); + } + + public override async Task Client_eval_followed_by_aggregate_operation(bool async) + { + await base.Client_eval_followed_by_aggregate_operation(async); + + AssertSql(); + } + + public override async Task Client_member_and_unsupported_string_Equals_in_the_same_query(bool async) + { + await base.Client_member_and_unsupported_string_Equals_in_the_same_query(async); + + AssertSql(); + } + + public override async Task Client_side_equality_with_parameter_works_with_optional_navigations(bool async) + { + await base.Client_side_equality_with_parameter_works_with_optional_navigations(async); + + AssertSql(); + } + + public override async Task Correlated_collection_order_by_constant_null_of_non_mapped_type(bool async) + { + await base.Correlated_collection_order_by_constant_null_of_non_mapped_type(async); + + AssertSql(); + } + + public override async Task GetValueOrDefault_on_DateTimeOffset(bool async) + { + await base.GetValueOrDefault_on_DateTimeOffset(async); + + AssertSql(); + } + + public override async Task Where_coalesce_with_anonymous_types(bool async) + { + await base.Where_coalesce_with_anonymous_types(async); + + AssertSql(); + } + + public override async Task Projecting_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(bool async) + { + await base.Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Correlated_collection_with_distinct_3_levels(bool async) + { + await base.Correlated_collection_with_distinct_3_levels(async); + + AssertSql(); + } + + public override async Task Correlated_collection_after_distinct_3_levels_without_original_identifiers(bool async) + { + await base.Correlated_collection_after_distinct_3_levels_without_original_identifiers(async); + + AssertSql(); + } + + public override async Task Checked_context_throws_on_client_evaluation(bool async) + { + await base.Checked_context_throws_on_client_evaluation(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_throws_informative_error(bool async) + { + await base.Trying_to_access_unmapped_property_throws_informative_error(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_inside_aggregate(bool async) + { + await base.Trying_to_access_unmapped_property_inside_aggregate(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_inside_subquery(bool async) + { + await base.Trying_to_access_unmapped_property_inside_subquery(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_inside_join_key_selector(bool async) + { + await base.Trying_to_access_unmapped_property_inside_join_key_selector(async); + + AssertSql(); + } + + public override async Task Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(bool async) + { + await base.Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(async); + + AssertSql(); + } + + public override async Task Include_after_select_with_cast_throws(bool async) + { + await base.Include_after_select_with_cast_throws(async); + + AssertSql(); + } + + public override async Task Include_after_select_with_entity_projection_throws(bool async) + { + await base.Include_after_select_with_entity_projection_throws(async); + + AssertSql(); + } + + public override async Task Include_after_select_anonymous_projection_throws(bool async) + { + await base.Include_after_select_anonymous_projection_throws(async); + + AssertSql(); + } + + public override async Task Group_by_with_aggregate_max_on_entity_type(bool async) + { + await base.Group_by_with_aggregate_max_on_entity_type(async); + + AssertSql(); + } + + public override async Task Include_collection_and_invalid_navigation_using_string_throws(bool async) + { + await base.Include_collection_and_invalid_navigation_using_string_throws(async); + + AssertSql(); + } + + public override async Task Include_with_concat(bool async) + { + await base.Include_with_concat(async); + + AssertSql(); + } + + public override async Task Join_with_complex_key_selector(bool async) + { + await base.Join_with_complex_key_selector(async); + + AssertSql( +""" +SELECT `s`.`Id`, `t0`.`Id` AS `TagId` +FROM `Squads` AS `s`, +( + SELECT `t`.`Id` + FROM `Tags` AS `t` + WHERE `t`.`Note` = 'Marcus'' Tag' +) AS `t0` +"""); + } + + public override async Task Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(bool async) + { + await base.Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(async); + + AssertSql(); + } + + public override async Task Select_correlated_filtered_collection_returning_queryable_throws(bool async) + { + await base.Select_correlated_filtered_collection_returning_queryable_throws(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_predicate(bool async) + { + await base.Client_method_on_collection_navigation_in_predicate(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(bool async) + { + await base.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_order_by(bool async) + { + await base.Client_method_on_collection_navigation_in_order_by(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_additional_from_clause(bool async) + { + await base.Client_method_on_collection_navigation_in_additional_from_clause(async); + + AssertSql(); + } + + public override async Task Include_multiple_one_to_one_and_one_to_many_self_reference(bool async) + { + await base.Include_multiple_one_to_one_and_one_to_many_self_reference(async); + + AssertSql(); + } + + public override async Task Include_multiple_one_to_one_and_one_to_one_and_one_to_many(bool async) + { + await base.Include_multiple_one_to_one_and_one_to_one_and_one_to_many(async); + + AssertSql(); + } + + public override async Task Include_multiple_include_then_include(bool async) + { + await base.Include_multiple_include_then_include(async); + + AssertSql(); + } + + public override async Task Select_Where_Navigation_Client(bool async) + { + await base.Select_Where_Navigation_Client(async); + + AssertSql(); + } + + public override async Task Where_subquery_equality_to_null_with_composite_key(bool async) + { + await base.Where_subquery_equality_to_null_with_composite_key(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE NOT EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId`) +"""); + } + + public override async Task Where_subquery_equality_to_null_with_composite_key_should_match_nulls(bool async) + { + await base.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE NOT EXISTS ( + SELECT 1 + FROM ( + SELECT `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId`, `o`.`FullName` + FROM `Officers` AS `o` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`FullName` = 'Anthony Carmine') +"""); + } + + public override async Task Where_subquery_equality_to_null_without_composite_key(bool async) + { + await base.Where_subquery_equality_to_null_without_composite_key(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) +"""); + } + + public override async Task Where_subquery_equality_to_null_without_composite_key_should_match_null(bool async) + { + await base.Where_subquery_equality_to_null_without_composite_key_should_match_null(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'Hammer of Dawn') +"""); + } + + public override async Task Include_reference_on_derived_type_using_EF_Property(bool async) + { + await base.Include_reference_on_derived_type_using_EF_Property(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` +"""); + } + + public override async Task Include_collection_on_derived_type_using_EF_Property(bool async) + { + await base.Include_collection_on_derived_type_using_EF_Property(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task EF_Property_based_Include_navigation_on_derived_type(bool async) + { + await base.EF_Property_based_Include_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` +FROM ( + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` +"""); + } + + public override async Task ElementAt_basic_with_OrderBy(bool async) + { + await base.ElementAt_basic_with_OrderBy(async); + + AssertSql( + """ +@p='0' + +SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` +FROM ( + SELECT TOP 1 `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` + FROM ( + SELECT TOP @p + 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + ORDER BY `u`.`FullName` + ) AS `u0` + ORDER BY `u0`.`FullName` DESC +) AS `u1` +ORDER BY `u1`.`FullName` +"""); + } + + public override async Task ElementAtOrDefault_basic_with_OrderBy(bool async) + { + await base.ElementAtOrDefault_basic_with_OrderBy(async); + + AssertSql( + """ +@p='1' + +SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` +FROM ( + SELECT TOP 1 `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` + FROM ( + SELECT TOP @p + 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + ORDER BY `u`.`FullName` + ) AS `u0` + ORDER BY `u0`.`FullName` DESC +) AS `u1` +ORDER BY `u1`.`FullName` +"""); + } + + public override async Task ElementAtOrDefault_basic_with_OrderBy_parameter(bool async) + { + await base.ElementAtOrDefault_basic_with_OrderBy_parameter(async); + + AssertSql( + """ +@p='2' + +SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` +FROM ( + SELECT TOP 1 `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` + FROM ( + SELECT TOP @p + 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` + FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` + ) AS `u` + ORDER BY `u`.`FullName` + ) AS `u0` + ORDER BY `u0`.`FullName` DESC +) AS `u1` +ORDER BY `u1`.`FullName` +"""); + } + + public override async Task Where_subquery_with_ElementAtOrDefault_equality_to_null_with_composite_key(bool async) + { + await base.Where_subquery_with_ElementAtOrDefault_equality_to_null_with_composite_key(async); + + AssertSql( + """ +SELECT [s].[Id], [s].[Banner], [s].[Banner5], [s].[InternalNumber], [s].[Name] +FROM [Squads] AS [s] +WHERE NOT EXISTS ( + SELECT 1 + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] + ) AS [t] + WHERE [s].[Id] = [t].[SquadId] + ORDER BY [t].[Nickname] + OFFSET 2 ROWS) +"""); + } + + public override async Task Where_subquery_with_ElementAt_using_column_as_index(bool async) + { + await base.Where_subquery_with_ElementAt_using_column_as_index(async); + + AssertSql( + """ +SELECT [s].[Id], [s].[Banner], [s].[Banner5], [s].[InternalNumber], [s].[Name] +FROM [Squads] AS [s] +WHERE ( + SELECT [t].[Nickname] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], N'Gear' AS [Discriminator] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[AssignedCityName], [o].[CityOfBirthName], [o].[FullName], [o].[HasSoulPatch], [o].[LeaderNickname], [o].[LeaderSquadId], [o].[Rank], N'Officer' AS [Discriminator] + FROM [Officers] AS [o] + ) AS [t] + WHERE [s].[Id] = [t].[SquadId] + ORDER BY [t].[Nickname] + OFFSET [s].[Id] ROWS FETCH NEXT 1 ROWS ONLY) = N'Cole Train' +"""); + } + + public override async Task Using_indexer_on_byte_array_and_string_in_projection(bool async) + { + await base.Using_indexer_on_byte_array_and_string_in_projection(async); + + AssertSql( + """ +SELECT `s`.`Id`, ASCB(MIDB(`s`.`Banner`, 0 + 1, 1)), `s`.`Name` +FROM `Squads` AS `s` +"""); + } + + public override async Task Set_operator_with_navigation_in_projection_groupby_aggregate(bool async) + { + await base.Set_operator_with_navigation_in_projection_groupby_aggregate(async); + + AssertSql( +""" +SELECT `s`.`Name`, ( + SELECT IIF(SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`)))) IS NULL, 0, SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`))))) + FROM (( + SELECT `g2`.`SquadId`, `g2`.`CityOfBirthName` + FROM `Gears` AS `g2` + UNION ALL + SELECT `o2`.`SquadId`, `o2`.`CityOfBirthName` + FROM `Officers` AS `o2` + ) AS `u3` + INNER JOIN `Squads` AS `s0` ON `u3`.`SquadId` = `s0`.`Id`) + INNER JOIN `Cities` AS `c` ON `u3`.`CityOfBirthName` = `c`.`Name` + WHERE 'Marcus' IN ( + SELECT `u4`.`Nickname` + FROM ( + SELECT `u5`.`Nickname` + FROM ( + SELECT `g3`.`Nickname` + FROM `Gears` AS `g3` + UNION ALL + SELECT `o3`.`Nickname` + FROM `Officers` AS `o3` + ) AS `u5` + UNION ALL + SELECT `u6`.`Nickname` + FROM ( + SELECT `g4`.`Nickname` + FROM `Gears` AS `g4` + UNION ALL + SELECT `o4`.`Nickname` + FROM `Officers` AS `o4` + ) AS `u6` + ) AS `u4` + ) AND (`s`.`Name` = `s0`.`Name` OR (`s`.`Name` IS NULL AND `s0`.`Name` IS NULL))) AS `SumOfLengths` +FROM ( + SELECT `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` +INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` +WHERE 'Marcus' IN ( + SELECT `u2`.`Nickname` + FROM ( + SELECT `u0`.`Nickname` + FROM ( + SELECT `g0`.`Nickname` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname` + FROM `Officers` AS `o0` + ) AS `u0` + UNION ALL + SELECT `u1`.`Nickname` + FROM ( + SELECT `g1`.`Nickname` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o1`.`Nickname` + FROM `Officers` AS `o1` + ) AS `u1` + ) AS `u2` +) +GROUP BY `s`.`Name` +"""); + } + + public override async Task Nav_expansion_inside_Contains_argument(bool async) + { + await base.Nav_expansion_inside_Contains_argument(async); + + AssertSql( + """ +@numbers1='1' +@numbers2='-1' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`), 1, 0) IN (@numbers1, @numbers2) +"""); + } + + public override async Task Nav_expansion_with_member_pushdown_inside_Contains_argument(bool async) + { + await base.Nav_expansion_with_member_pushdown_inside_Contains_argument(async); + + AssertSql( + """ +@weapons1='Marcus' Lancer' (Size = 255) +@weapons2='Dom's Gnasher' (Size = 255) + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IN (@weapons1, @weapons2) +"""); + } + + public override async Task Subquery_inside_Take_argument(bool async) + { + await base.Subquery_inside_Take_argument(async); + + AssertSql( + """ +@__numbers_0='[0,1,2]' (Size = 4000) + +SELECT [t].[Nickname], [t].[SquadId], [t0].[Id], [t0].[AmmunitionType], [t0].[IsAutomatic], [t0].[Name], [t0].[OwnerFullName], [t0].[SynergyWithId] +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[FullName] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId], [o].[FullName] + FROM [Officers] AS [o] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[AmmunitionType], [t1].[IsAutomatic], [t1].[Name], [t1].[OwnerFullName], [t1].[SynergyWithId] + FROM ( + SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId], ROW_NUMBER() OVER(PARTITION BY [w].[OwnerFullName] ORDER BY [w].[Id]) AS [row] + FROM [Weapons] AS [w] + ) AS [t1] + WHERE [t1].[row] <= COALESCE(( + SELECT [n].[value] + FROM OPENJSON(@__numbers_0) WITH ([value] int '$') AS [n] + ORDER BY [n].[value] + OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY), 0) +) AS [t0] ON [t].[FullName] = [t0].[OwnerFullName] +ORDER BY [t].[Nickname], [t].[SquadId], [t0].[OwnerFullName], [t0].[Id] +"""); + } + + public override async Task Nav_expansion_inside_Skip_correlated_to_source(bool async) + { + await base.Nav_expansion_inside_Skip_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Nav_expansion_inside_Take_correlated_to_source(bool async) + { + await base.Nav_expansion_inside_Take_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Nav_expansion_with_member_pushdown_inside_Take_correlated_to_source(bool async) + { + await base.Nav_expansion_with_member_pushdown_inside_Take_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Nav_expansion_inside_ElementAt_correlated_to_source(bool async) + { + await base.Nav_expansion_inside_ElementAt_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Include_one_to_many_on_composite_key_then_orderby_key_properties(bool async) + { + await base.Include_one_to_many_on_composite_key_then_orderby_key_properties(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`SquadId`, `u`.`Nickname` +"""); + } + + public override async Task Find_underlying_property_after_GroupJoin_DefaultIfEmpty(bool async) + { + await base.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async); + + AssertSql( + """ +SELECT `u`.`FullName`, IIF(`u0`.`ThreatLevel` IS NULL, NULL, CLNG(`u0`.`ThreatLevel`)) AS `ThreatLevel` +FROM ( + SELECT `g`.`Nickname`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `l`.`ThreatLevel`, `l`.`DefeatedByNickname` + FROM `LocustCommanders` AS `l` +) AS `u0` ON `u`.`Nickname` = `u0`.`DefeatedByNickname` +"""); + } + + public override async Task Join_include_coalesce_simple(bool async) + { + await base.Join_include_coalesce_simple(async); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`Nickname` = 'Marcus' +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +""", + // + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +""", + // + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Join_include_coalesce_nested(bool async) + { + await base.Join_include_coalesce_nested(async); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`Nickname` = 'Marcus' +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +""", + // + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId` +FROM (((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `u0`.`FullName` = `w1`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w0`.`Id` +"""); + } + + public override async Task Join_include_conditional(bool async) + { + await base.Join_include_conditional(async); + + AssertSql( + """ +SELECT `u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`Nickname` = 'Marcus' +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +"""); + } + + public override async Task Derived_reference_is_skipped_when_base_type(bool async) + { + await base.Derived_reference_is_skipped_when_base_type(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `l1`.`Id`, `l1`.`IsOperational`, `l1`.`Name` +FROM ( + SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l` + UNION ALL + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN `LocustHighCommands` AS `l1` ON IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) = `l1`.`Id` +"""); + } + + public override async Task Nested_contains_with_enum(bool async) + { + await base.Nested_contains_with_enum(async); + + AssertSql( + """ +@ranks1='1' +@key='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@keys1='0a47bcb7-a1cb-4345-8944-c58f82d6aac7' +@keys2='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(`u`.`Rank` = @ranks1, @key, @key) IN (@keys1, @keys2) +""", + // + """ +@ammoTypes1='1' +@key='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@keys1='0a47bcb7-a1cb-4345-8944-c58f82d6aac7' +@keys2='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = @ammoTypes1, @key, @key) IN (@keys1, @keys2) +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedFixture.cs new file mode 100644 index 00000000..a0c88c63 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedFixture.cs @@ -0,0 +1,8 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCInheritanceQueryLibRedFixture : TPCInheritanceQueryLibRedFixtureBase +{ +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedFixtureBase.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedFixtureBase.cs new file mode 100644 index 00000000..257cbab1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedFixtureBase.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public abstract class TPCInheritanceQueryLibRedFixtureBase : TPCInheritanceQueryFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override bool UseGeneratedKeys + => false; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedTest.cs new file mode 100644 index 00000000..4d967ded --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedTest.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using Microsoft.EntityFrameworkCore.Query; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCInheritanceQueryLibRedTest(TPCInheritanceQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : TPCInheritanceQueryLibRedTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedTestBase.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedTestBase.cs new file mode 100644 index 00000000..4762ce05 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCInheritanceQueryLibRedTestBase.cs @@ -0,0 +1,742 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public abstract class TPCInheritanceQueryLibRedTestBase(TFixture fixture, ITestOutputHelper testOutputHelper) + : TPCInheritanceQueryTestBase(fixture, testOutputHelper) + where TFixture : TPCInheritanceQueryLibRedFixtureBase, new() +{ + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType().BaseType!); + + public override async Task Byte_enum_value_constant_used_in_projection(bool async) + { + await base.Byte_enum_value_constant_used_in_projection(async); + + AssertSql( + """ +SELECT IIF(`k`.`IsFlightless`, CBYTE(0), CBYTE(1)) +FROM `Kiwi` AS `k` +"""); + } + + public override async Task Can_filter_all_animals(bool async) + { + await base.Can_filter_all_animals(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`Name` = 'Great spotted kiwi' +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_include_animals(bool async) + { + await base.Can_include_animals(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM `Countries` AS `c` +LEFT JOIN ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` ON `c`.`Id` = `u`.`CountryId` +ORDER BY `c`.`Name`, `c`.`Id` +"""); + } + + public override async Task Can_include_prey(bool async) + { + await base.Can_include_prey(async); + + AssertSql( + """ +SELECT `e1`.`Id`, `e1`.`CountryId`, `e1`.`Name`, `e1`.`Species`, `e1`.`EagleId`, `e1`.`IsFlightless`, `e1`.`Group`, `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT TOP 2 `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group` + FROM `Eagle` AS `e` +) AS `e1` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CountryId`, `e0`.`Name`, `e0`.`Species`, `e0`.`EagleId`, `e0`.`IsFlightless`, `e0`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e0` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` ON `e1`.`Id` = `u`.`EagleId` +ORDER BY `e1`.`Id` +"""); + } + + public override async Task Can_insert_update_delete() + => await base.Can_insert_update_delete(); + + public override async Task Can_query_all_animals(bool async) + { + await base.Can_query_all_animals(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_query_all_birds(bool async) + { + await base.Can_query_all_birds(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_query_all_plants(bool async) + { + await base.Can_query_all_plants(async); + + AssertSql( + """ +SELECT `u`.`Species`, `u`.`CountryId`, `u`.`Genus`, `u`.`Name`, `u`.`HasThorns`, `u`.`AdditionalInfo_Nickname`, `u`.`AdditionalInfo_LeafStructure_AreLeavesBig`, `u`.`AdditionalInfo_LeafStructure_NumLeaves`, `u`.`Discriminator` +FROM ( + SELECT `d`.`Species`, `d`.`CountryId`, `d`.`Genus`, `d`.`Name`, `d`.`AdditionalInfo_Nickname`, `d`.`AdditionalInfo_LeafStructure_AreLeavesBig`, `d`.`AdditionalInfo_LeafStructure_NumLeaves`, CVar(NULL) AS `HasThorns`, 'Daisy' AS `Discriminator` + FROM `Daisies` AS `d` + UNION ALL + SELECT `r`.`Species`, `r`.`CountryId`, `r`.`Genus`, `r`.`Name`, NULL AS `AdditionalInfo_Nickname`, CVar(NULL) AS `AdditionalInfo_LeafStructure_AreLeavesBig`, CVar(NULL) AS `AdditionalInfo_LeafStructure_NumLeaves`, `r`.`HasThorns`, 'Rose' AS `Discriminator` + FROM `Roses` AS `r` +) AS `u` +ORDER BY `u`.`Species` +"""); + } + + public override async Task Filter_on_property_inside_complex_type_on_derived_type(bool async) + { + await base.Filter_on_property_inside_complex_type_on_derived_type(async); + + AssertSql( + """ +SELECT `d`.`Species`, `d`.`CountryId`, `d`.`Genus`, `d`.`Name`, `d`.`AdditionalInfo_Nickname`, `d`.`AdditionalInfo_LeafStructure_AreLeavesBig`, `d`.`AdditionalInfo_LeafStructure_NumLeaves` +FROM `Daisies` AS `d` +WHERE `d`.`AdditionalInfo_LeafStructure_AreLeavesBig` +"""); + } + + public override async Task Can_query_all_types_when_shared_column(bool async) + { + await base.Can_query_all_types_when_shared_column(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`SortIndex`, CVar(NULL) AS `CaffeineGrams`, CVar(NULL) AS `CokeCO2`, CVar(NULL) AS `SugarGrams`, CVar(NULL) AS `LiltCO2`, CVar(NULL) AS `SugarGrams0`, CVar(NULL) AS `CaffeineGrams0`, CVar(NULL) AS `HasMilk`, 'Drink' AS `Discriminator` +FROM `Drinks` AS `d` +UNION ALL +SELECT `c`.`Id`, `c`.`SortIndex`, `c`.`CaffeineGrams`, `c`.`CokeCO2`, `c`.`SugarGrams`, CVar(NULL) AS `LiltCO2`, CVar(NULL) AS `SugarGrams0`, CVar(NULL) AS `CaffeineGrams0`, CVar(NULL) AS `HasMilk`, 'Coke' AS `Discriminator` +FROM `Coke` AS `c` +UNION ALL +SELECT `l`.`Id`, `l`.`SortIndex`, CVar(NULL) AS `CaffeineGrams`, CVar(NULL) AS `CokeCO2`, CVar(NULL) AS `SugarGrams`, `l`.`LiltCO2`, `l`.`SugarGrams` AS `SugarGrams0`, CVar(NULL) AS `CaffeineGrams0`, CVar(NULL) AS `HasMilk`, 'Lilt' AS `Discriminator` +FROM `Lilt` AS `l` +UNION ALL +SELECT `t`.`Id`, `t`.`SortIndex`, CVar(NULL) AS `CaffeineGrams`, CVar(NULL) AS `CokeCO2`, CVar(NULL) AS `SugarGrams`, CVar(NULL) AS `LiltCO2`, CVar(NULL) AS `SugarGrams0`, `t`.`CaffeineGrams` AS `CaffeineGrams0`, `t`.`HasMilk`, 'Tea' AS `Discriminator` +FROM `Tea` AS `t` +"""); + } + + public override async Task Can_query_just_kiwis(bool async) + { + await base.Can_query_just_kiwis(async); + + AssertSql( + """ +SELECT TOP 2 `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task Can_query_just_roses(bool async) + { + await base.Can_query_just_roses(async); + + AssertSql( + """ +SELECT TOP 2 `r`.`Species`, `r`.`CountryId`, `r`.`Genus`, `r`.`Name`, `r`.`HasThorns` +FROM `Roses` AS `r` +"""); + } + + public override async Task Can_query_when_shared_column(bool async) + { + await base.Can_query_when_shared_column(async); + + AssertSql( + """ +SELECT TOP 2 `c`.`Id`, `c`.`SortIndex`, `c`.`CaffeineGrams`, `c`.`CokeCO2`, `c`.`SugarGrams` +FROM `Coke` AS `c` +""", + // + """ +SELECT TOP 2 `l`.`Id`, `l`.`SortIndex`, `l`.`LiltCO2`, `l`.`SugarGrams` +FROM `Lilt` AS `l` +""", + // + """ +SELECT TOP 2 `t`.`Id`, `t`.`SortIndex`, `t`.`CaffeineGrams`, `t`.`HasMilk` +FROM `Tea` AS `t` +"""); + } + + public override async Task Can_use_backwards_is_animal(bool async) + { + await base.Can_use_backwards_is_animal(async); + + AssertSql( + """ +SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task Can_use_backwards_of_type_animal(bool async) + { + await base.Can_use_backwards_of_type_animal(async); + + AssertSql( + """ +SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task Can_use_is_kiwi(bool async) + { + await base.Can_use_is_kiwi(async); + + AssertSql( + """ +SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task Can_use_is_kiwi_with_cast(bool async) + { + await base.Can_use_is_kiwi_with_cast(async); + + AssertSql( + """ +SELECT IIF(`u`.`Discriminator` = 'Kiwi', `u`.`FoundOn`, CBYTE(0)) AS `Value` +FROM ( + SELECT CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +"""); + } + + public override async Task Can_use_is_kiwi_in_projection(bool async) + { + await base.Can_use_is_kiwi_in_projection(async); + + AssertSql( + """ +SELECT `u`.`Discriminator` = 'Kiwi' +FROM ( + SELECT 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +"""); + } + + public override async Task Can_use_is_kiwi_with_other_predicate(bool async) + { + await base.Can_use_is_kiwi_with_other_predicate(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`Discriminator` = 'Kiwi' AND `u`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_of_type_animal(bool async) + { + await base.Can_use_of_type_animal(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird(bool async) + { + await base.Can_use_of_type_bird(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_first(bool async) + { + await base.Can_use_of_type_bird_first(async); + + AssertSql( + """ +SELECT TOP 1 `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_predicate(bool async) + { + await base.Can_use_of_type_bird_predicate(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_with_projection(bool async) + { + await base.Can_use_of_type_bird_with_projection(async); + + AssertSql( + """ +SELECT `e`.`EagleId` +FROM `Eagle` AS `e` +UNION ALL +SELECT `k`.`EagleId` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task Can_use_of_type_kiwi(bool async) + { + await base.Can_use_of_type_kiwi(async); + + AssertSql( + """ +SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task Can_use_of_type_kiwi_where_north_on_derived_property(bool async) + { + await base.Can_use_of_type_kiwi_where_north_on_derived_property(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`FoundOn` = CBYTE(0) +"""); + } + + public override async Task Can_use_of_type_kiwi_where_south_on_derived_property(bool async) + { + await base.Can_use_of_type_kiwi_where_south_on_derived_property(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`FoundOn` = CBYTE(1) +"""); + } + + public override async Task Can_use_of_type_rose(bool async) + { + await base.Can_use_of_type_rose(async); + + AssertSql( + """ +SELECT `r`.`Species`, `r`.`CountryId`, `r`.`Genus`, `r`.`Name`, `r`.`HasThorns`, 'Rose' AS `Discriminator` +FROM `Roses` AS `r` +"""); + } + + public override async Task Member_access_on_intermediate_type_works() + { + await base.Member_access_on_intermediate_type_works(); + + AssertSql( + """ +SELECT `k`.`Name` +FROM `Kiwi` AS `k` +ORDER BY `k`.`Name` +"""); + } + + public override async Task OfType_Union_OfType(bool async) + { + await base.OfType_Union_OfType(async); + + AssertSql(); + } + + public override async Task OfType_Union_subquery(bool async) + { + await base.OfType_Union_subquery(async); + + AssertSql(); + } + + public override async Task Setting_foreign_key_to_a_different_type_throws() + => await base.Setting_foreign_key_to_a_different_type_throws(); + + public override async Task Subquery_OfType(bool async) + { + await base.Subquery_OfType(async); + + AssertSql( + """ +@p='5' + +SELECT DISTINCT `u0`.`Id`, `u0`.`CountryId`, `u0`.`Name`, `u0`.`Species`, `u0`.`EagleId`, `u0`.`IsFlightless`, `u0`.`FoundOn`, `u0`.`Discriminator` +FROM ( + SELECT TOP @p `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`FoundOn`, `u`.`Discriminator` + FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` + ) AS `u` + ORDER BY `u`.`Species` +) AS `u0` +WHERE `u0`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Union_entity_equality(bool async) + { + await base.Union_entity_equality(async); + + AssertSql(); + } + + public override async Task Union_siblings_with_duplicate_property_in_subquery(bool async) + { + await base.Union_siblings_with_duplicate_property_in_subquery(async); + + AssertSql(); + } + + public override async Task Is_operator_on_result_of_FirstOrDefault(bool async) + { + await base.Is_operator_on_result_of_FirstOrDefault(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT TOP 1 `u0`.`Discriminator` + FROM ( + SELECT `e0`.`Name`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e0` + UNION ALL + SELECT `k0`.`Name`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k0` + ) AS `u0` + WHERE `u0`.`Name` = 'Great spotted kiwi' + ) AS `u1` + WHERE `u1`.`Discriminator` = 'Kiwi') +ORDER BY `u`.`Species` +"""); + } + + public override async Task Selecting_only_base_properties_on_base_type(bool async) + { + await base.Selecting_only_base_properties_on_base_type(async); + + AssertSql( + """ +SELECT `e`.`Name` +FROM `Eagle` AS `e` +UNION ALL +SELECT `k`.`Name` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task Selecting_only_base_properties_on_derived_type(bool async) + { + await base.Selecting_only_base_properties_on_derived_type(async); + + AssertSql( + """ +SELECT `e`.`Name` +FROM `Eagle` AS `e` +UNION ALL +SELECT `k`.`Name` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task Can_query_all_animal_views(bool async) + { + await base.Can_query_all_animal_views(async); + + AssertSql(); + } + + public override async Task Discriminator_used_when_projection_over_derived_type(bool async) + { + await base.Discriminator_used_when_projection_over_derived_type(async); + + AssertSql(); + } + + public override async Task Discriminator_used_when_projection_over_derived_type2(bool async) + { + await base.Discriminator_used_when_projection_over_derived_type2(async); + + AssertSql(); + } + + public override async Task Discriminator_used_when_projection_over_of_type(bool async) + { + await base.Discriminator_used_when_projection_over_of_type(async); + + AssertSql(); + } + + public override async Task Discriminator_with_cast_in_shadow_property(bool async) + { + await base.Discriminator_with_cast_in_shadow_property(async); + + AssertSql(); + } + + public override void Using_from_sql_throws() + { + base.Using_from_sql_throws(); + + AssertSql(); + } + + public override async Task Using_is_operator_on_multiple_type_with_no_result(bool async) + { + await base.Using_is_operator_on_multiple_type_with_no_result(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`Discriminator` = 'Eagle' +"""); + } + + public override async Task Using_is_operator_with_of_type_on_multiple_type_with_no_result(bool async) + { + await base.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`Discriminator` +FROM ( + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`Discriminator` = 'Eagle' +"""); + } + + public override async Task Using_OfType_on_multiple_type_with_no_result(bool async) + { + await base.Using_OfType_on_multiple_type_with_no_result(async); + + AssertSql(); + } + + public override async Task GetType_in_hierarchy_in_abstract_base_type(bool async) + { + await base.GetType_in_hierarchy_in_abstract_base_type(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE FALSE +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE FALSE +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` +FROM `Eagle` AS `e` +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling2(async); + + AssertSql( + """ +SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async); + + AssertSql( + """ +SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` +FROM `Kiwi` AS `k` +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` +FROM ( + SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + FROM `Eagle` AS `e` + UNION ALL + SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + FROM `Kiwi` AS `k` +) AS `u` +WHERE `u`.`Discriminator` <> 'Kiwi' +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCManyToManyNoTrackingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCManyToManyNoTrackingQueryLibRedTest.cs new file mode 100644 index 00000000..2c7952a0 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCManyToManyNoTrackingQueryLibRedTest.cs @@ -0,0 +1,2815 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCManyToManyNoTrackingQueryLibRedTest : TPCManyToManyNoTrackingQueryRelationalTestBase +{ + public TPCManyToManyNoTrackingQueryLibRedTest(TPCManyToManyQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Skip_navigation_all(bool async) + { + await base.Skip_navigation_all(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE NOT EXISTS ( + SELECT `j`.`OneId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` NOT LIKE '%B%' OR `e0`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_without_predicate(bool async) + { + await base.Skip_navigation_any_without_predicate(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_any_with_predicate(bool async) + { + await base.Skip_navigation_any_with_predicate(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`OneSkipSharedId` AND (`e1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains(bool async) + { + await base.Skip_navigation_contains(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate(bool async) + { + await base.Skip_navigation_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate(bool async) + { + await base.Skip_navigation_count_with_predicate(async); + + AssertSql( + """ +SELECT `e0`.`Id`, `e0`.`Name`, `e0`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`Name`, ( + SELECT COUNT(*) + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `b`.`Id`, `b`.`Name` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name` + FROM `Leaves` AS `l` + ) AS `u` ON `j`.`EntityBranchId` = `u`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`u`.`Name` LIKE 'L%')) AS `c` + FROM `EntityOnes` AS `e` +) AS `e0` +ORDER BY `e0`.`c`, `e0`.`Id` +"""); + } + + public override async Task Skip_navigation_long_count_without_predicate(bool async) + { + await base.Skip_navigation_long_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +"""); + } + + public override async Task Skip_navigation_long_count_with_predicate(bool async) + { + await base.Skip_navigation_long_count_with_predicate(async); + + AssertSql( + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( + SELECT COUNT(*) + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwos` AS `e` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` +"""); + } + + public override async Task Skip_navigation_select_many_average(bool async) + { + await base.Skip_navigation_select_many_average(async); + + AssertSql( + """ +SELECT AVG(CDBL(`s`.`Key1`)) +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_max(bool async) + { + await base.Skip_navigation_select_many_max(async); + + AssertSql( + """ +SELECT MAX(`s`.`Key1`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Key1`, `j`.`ThreeId` + FROM `JoinThreeToCompositeKeyFull` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +"""); + } + + public override async Task Skip_navigation_select_many_min(bool async) + { + await base.Skip_navigation_select_many_min(async); + + AssertSql( + """ +SELECT MIN(`s`.`Id`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `u`.`Id`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_sum(bool async) + { + await base.Skip_navigation_select_many_sum(async); + + AssertSql( + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) +FROM ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` +) AS `u` +INNER JOIN ( + SELECT `e0`.`Key1`, `e`.`RootSkipSharedId` + FROM `EntityCompositeKeyEntityRoot` AS `e` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_subquery_average(bool async) + { + await base.Skip_navigation_select_subquery_average(async); + + AssertSql( +""" +SELECT ( + SELECT AVG(CDBL(`e`.`Key1`)) + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `l`.`Id` = `j`.`LeafId`) +FROM `Leaves` AS `l` +"""); + } + + public override async Task Skip_navigation_select_subquery_max(bool async) + { + await base.Skip_navigation_select_subquery_max(async); + + AssertSql( +""" +SELECT ( + SELECT MAX(`e0`.`Id`) + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_min(bool async) + { + await base.Skip_navigation_select_subquery_min(async); + + AssertSql( +""" +SELECT ( + SELECT MIN(`e0`.`Id`) + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`ThreeId`) +FROM `EntityThrees` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_sum(bool async) + { + await base.Skip_navigation_select_subquery_sum(async); + + AssertSql( +""" +SELECT ( + SELECT IIF(SUM(`e1`.`Id`) IS NULL, 0, SUM(`e1`.`Id`)) + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityOnes` AS `e1` ON `e0`.`OneSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`TwoSkipSharedId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_order_by_first_or_default(bool async) + { + await base.Skip_navigation_order_by_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_order_by_single_or_default(bool async) + { + await base.Skip_navigation_order_by_single_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT TOP(1) [t].[Id], [t].[Name] + FROM ( + SELECT TOP(1) [e0].[Id], [e0].[Name] + FROM [JoinOneSelfPayload] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[RightId] = [e0].[Id] + WHERE [e].[Id] = [j].[LeftId] + ORDER BY [e0].[Id] + ) AS [t] + ORDER BY [t].[Id] +) AS [t0] +"""); + } + + public override async Task Skip_navigation_order_by_last_or_default(bool async) + { + await base.Skip_navigation_order_by_last_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM ( + SELECT [b].[Id] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id] + FROM [Leaves] AS [l] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Name], [t1].[EntityBranchId] + FROM ( + SELECT [e].[Id], [e].[Name], [j].[EntityBranchId], ROW_NUMBER() OVER(PARTITION BY [j].[EntityBranchId] ORDER BY [e].[Id] DESC) AS [row] + FROM [JoinOneToBranch] AS [j] + INNER JOIN [EntityOnes] AS [e] ON [j].[EntityOneId] = [e].[Id] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Id] = [t0].[EntityBranchId] +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id] DESC) AS [row] + FROM [JoinTwoToThree] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_cast(bool async) + { + await base.Skip_navigation_cast(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +"""); + } + + public override async Task Skip_navigation_of_type(bool async) + { + await base.Skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` + WHERE `u`.`Discriminator` = 'EntityLeaf' +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Join_with_skip_navigation(bool async) + { + await base.Join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +INNER JOIN [EntityTwos] AS [e0] ON [e].[Id] = ( + SELECT TOP(1) [e2].[Id] + FROM [EntityTwoEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[SelfSkipSharedRightId] = [e2].[Id] + WHERE [e0].[Id] = [e1].[SelfSkipSharedLeftId] + ORDER BY [e2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation(bool async) + { + await base.Left_join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN [EntityCompositeKeys] AS [e0] ON ( + SELECT TOP(1) [e2].[Id] + FROM [EntityCompositeKeyEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[TwoSkipSharedId] = [e2].[Id] + WHERE [e].[Key1] = [e1].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [e1].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [e1].[CompositeKeySkipSharedKey3] + ORDER BY [e2].[Id]) = ( + SELECT TOP(1) [e3].[Id] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e3] ON [j].[ThreeId] = [e3].[Id] + WHERE [e0].[Key1] = [j].[CompositeId1] AND [e0].[Key2] = [j].[CompositeId2] AND [e0].[Key3] = [j].[CompositeId3] + ORDER BY [e3].[Id]) +ORDER BY [e].[Key1], [e0].[Key1], [e].[Key2], [e0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation(bool async) + { + await base.Select_many_over_skip_navigation(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` +) AS `u` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where(bool async) + { + await base.Select_many_over_skip_navigation_where(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneSkipSharedId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[OneSkipSharedId], ROW_NUMBER() OVER(PARTITION BY [e0].[OneSkipSharedId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityOneEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Id] = [t0].[OneSkipSharedId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_of_type(bool async) + { + await base.Select_many_over_skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` + WHERE `u`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_cast(bool async) + { + await base.Select_many_over_skip_navigation_cast(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `j`.`EntityOneId` + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + ) AS `u` ON `j`.`EntityBranchId` = `u`.`Id` +) AS `s` ON `e`.`Id` = `s`.`EntityOneId` +"""); + } + + public override async Task Select_skip_navigation(bool async) + { + await base.Select_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Select_skip_navigation_multiple(bool async) + { + await base.Select_skip_navigation_multiple(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` +FROM ((`EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` + FROM `EntityTwoEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) +LEFT JOIN ( + SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e3` + INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` +"""); + } + + public override async Task Select_skip_navigation_first_or_default(bool async) + { + await base.Select_skip_navigation_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Key1], [t0].[Key2], [t0].[Key3], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Key1], [e0].[Key2]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [j].[CompositeId1] = [e0].[Key1] AND [j].[CompositeId2] = [e0].[Key2] AND [j].[CompositeId3] = [e0].[Key3] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +ORDER BY [e].[Id] +"""); + } + + public override async Task Include_skip_navigation(bool async) + { + await base.Include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference(bool async) + { + await base.Include_skip_navigation_then_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`EntityBranchId`, `s`.`EntityOneId` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id`) + LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j0`.`EntityBranchId`, `j0`.`EntityOneId` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` + ) AS `s` ON `l`.`Id` = `s`.`EntityBranchId` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` + FROM ((`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId`, `j0`.`RightId` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference(bool async) + { + await base.Include_skip_navigation_and_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Filtered_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by(bool async) + { + await base.Filtered_include_skip_navigation_order_by(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[SelfSkipSharedLeftId], [t0].[SelfSkipSharedRightId] +FROM [EntityTwos] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[SelfSkipSharedLeftId], [t].[SelfSkipSharedRightId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[SelfSkipSharedLeftId], [e0].[SelfSkipSharedRightId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[Id0] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[Id0], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[Id] AS [Id0], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where(bool async) + { + await base.Filtered_then_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`OneId`, `s0`.`ThreeId` +FROM ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`OneId`, `s`.`ThreeId` + FROM (`EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` < 10 + ) AS `s` ON `e0`.`Id` = `s`.`ThreeId` +) AS `s0` ON `u`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `u`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[Name], [t].[Number], [t].[Slumber], [t].[IsGreen], [t].[IsBrown], [t].[Discriminator], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[Name], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Id], [t1].[CollectionInverseId], [t1].[Name0], [t1].[ReferenceInverseId], [t1].[Id0] +FROM ( + SELECT [r].[Id], [r].[Name], NULL AS [Number], NULL AS [Slumber], NULL AS [IsGreen], NULL AS [IsBrown], N'EntityRoot' AS [Discriminator] + FROM [Roots] AS [r] + UNION ALL + SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [Slumber], NULL AS [IsGreen], NULL AS [IsBrown], N'EntityBranch' AS [Discriminator] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id], [l].[Name], [l].[Number], NULL AS [Slumber], [l].[IsGreen], NULL AS [IsBrown], N'EntityLeaf' AS [Discriminator] + FROM [Leaves] AS [l] + UNION ALL + SELECT [l0].[Id], [l0].[Name], NULL AS [Number], [l0].[Slumber], NULL AS [IsGreen], [l0].[IsBrown], N'EntityLeaf2' AS [Discriminator] + FROM [Leaf2s] AS [l0] +) AS [t] +LEFT JOIN ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId], [t0].[Id0], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] + LEFT JOIN ( + SELECT [t2].[Id], [t2].[CollectionInverseId], [t2].[Name], [t2].[ReferenceInverseId], [t2].[Id0], [t2].[CompositeId1], [t2].[CompositeId2], [t2].[CompositeId3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j].[Id] AS [Id0], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e1].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e1] ON [j].[ThreeId] = [e1].[Id] + ) AS [t2] + WHERE 1 < [t2].[row] AND [t2].[row] <= 3 + ) AS [t0] ON [e0].[Key1] = [t0].[CompositeId1] AND [e0].[Key2] = [t0].[CompositeId2] AND [e0].[Key3] = [t0].[CompositeId3] +) AS [t1] ON [t].[Id] = [t1].[RootSkipSharedId] +ORDER BY [t].[Id], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +FROM `Leaves` AS `l` +LEFT JOIN ( + SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + ) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` + WHERE `e`.`Key1` < 5 +) AS `s0` ON `l`.`Id` = `s0`.`LeafId` +ORDER BY `l`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId], [t1].[TwoId], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0], [t1].[ThreeId], [t1].[TwoId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[ThreeId], [j0].[TwoId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId], [t1].[TwoId], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0], [t1].[ThreeId], [t1].[TwoId0] +FROM [EntityOnes] AS [e] +LEFT JOIN ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId], [t].[TwoId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[ThreeId], [j0].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[TwoId] + WHERE [e0].[Id] < 10 +) AS [t1] ON [e].[Id] = [t1].[OneId] +ORDER BY [e].[Id], [t1].[OneId], [t1].[TwoId], [t1].[Id], [t1].[TwoId0], [t1].[Id0] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined(bool async) + { + await base.Filter_include_on_skip_navigation_combined(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId], [t3].[Id], [t3].[Name], [t3].[OneId], [t3].[ThreeId], [t3].[Id0], [t3].[CollectionInverseId], [t3].[ExtraId], [t3].[Name0], [t3].[ReferenceInverseId], [t3].[OneId0], [t3].[TwoId], [t3].[Id1], [t3].[Name1], [t3].[Number], [t3].[IsGreen], [t3].[Discriminator], [t3].[EntityBranchId], [t3].[EntityOneId] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [e0].[Id], [e0].[Name], [j].[OneId], [j].[ThreeId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId], [t0].[OneId] AS [OneId0], [t0].[TwoId], [t1].[Id] AS [Id1], [t1].[Name] AS [Name1], [t1].[Number], [t1].[IsGreen], [t1].[Discriminator], [t1].[EntityBranchId], [t1].[EntityOneId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[OneId], [j0].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[OneId] + LEFT JOIN ( + SELECT [t2].[Id], [t2].[Name], [t2].[Number], [t2].[IsGreen], [t2].[Discriminator], [j1].[EntityBranchId], [j1].[EntityOneId] + FROM [JoinOneToBranch] AS [j1] + INNER JOIN ( + SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [IsGreen], N'EntityBranch' AS [Discriminator] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id], [l].[Name], [l].[Number], [l].[IsGreen], N'EntityLeaf' AS [Discriminator] + FROM [Leaves] AS [l] + ) AS [t2] ON [j1].[EntityBranchId] = [t2].[Id] + WHERE [t2].[Id] < 20 + ) AS [t1] ON [e0].[Id] = [t1].[EntityOneId] + WHERE [e0].[Id] < 10 +) AS [t3] ON [e].[Id] = [t3].[ThreeId] +ORDER BY [e].[Id], [t3].[OneId], [t3].[ThreeId], [t3].[Id], [t3].[OneId0], [t3].[Id0], [t3].[TwoId], [t3].[EntityBranchId], [t3].[EntityOneId] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0`, `s0`.`ThreeId`, `s0`.`TwoId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0`, `s`.`ThreeId`, `s`.`TwoId` + FROM `EntityTwos` AS `e0` + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` + WHERE `e0`.`Id` > 15 +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` +"""); + } + + public override async Task Includes_accessed_via_different_path_are_merged(bool async) + { + await base.Includes_accessed_via_different_path_are_merged(async); + + AssertSql(); + } + + public override async Task Filtered_includes_accessed_via_different_path_are_merged(bool async) + { + await base.Filtered_includes_accessed_via_different_path_are_merged(async); + + AssertSql(); + } + + public override async Task Include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_split(bool async) + { + await base.Include_skip_navigation_then_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +FROM (`EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `l`.`Id`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3`) +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j0`.`EntityBranchId` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`ThreeId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Include_skip_navigation_and_reference_split(bool async) + { + await base.Include_skip_navigation_and_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` +ORDER BY `e`.`Id`, `e0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +INNER JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id] +FROM [EntityTwos] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[SelfSkipSharedLeftId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[SelfSkipSharedLeftId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_then_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator` +FROM ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` +) AS `u` +ORDER BY `u`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId` +FROM ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` +) AS `u` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +FROM (( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` +) AS `u` +INNER JOIN ( + SELECT `e0`.`Id`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Name`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` < 10 +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[Name], [t].[Number], [t].[Slumber], [t].[IsGreen], [t].[IsBrown], [t].[Discriminator] +FROM ( + SELECT [r].[Id], [r].[Name], NULL AS [Number], NULL AS [Slumber], NULL AS [IsGreen], NULL AS [IsBrown], N'EntityRoot' AS [Discriminator] + FROM [Roots] AS [r] + UNION ALL + SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [Slumber], NULL AS [IsGreen], NULL AS [IsBrown], N'EntityBranch' AS [Discriminator] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id], [l].[Name], [l].[Number], NULL AS [Slumber], [l].[IsGreen], NULL AS [IsBrown], N'EntityLeaf' AS [Discriminator] + FROM [Leaves] AS [l] + UNION ALL + SELECT [l0].[Id], [l0].[Name], NULL AS [Number], [l0].[Slumber], NULL AS [IsGreen], [l0].[IsBrown], N'EntityLeaf2' AS [Discriminator] + FROM [Leaf2s] AS [l0] +) AS [t] +ORDER BY [t].[Id] +""", +// +""" +SELECT [t0].[Key1], [t0].[Key2], [t0].[Key3], [t0].[Name], [t].[Id], [t0].[RootSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3] +FROM ( + SELECT [r].[Id] + FROM [Roots] AS [r] + UNION ALL + SELECT [b].[Id] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id] + FROM [Leaves] AS [l] + UNION ALL + SELECT [l0].[Id] + FROM [Leaf2s] AS [l0] +) AS [t] +INNER JOIN ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] +) AS [t0] ON [t].[Id] = [t0].[RootSkipSharedId] +ORDER BY [t].[Id], [t0].[RootSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Key1], [t0].[Key2], [t0].[Key3] +""", +// +""" +SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [t].[Id], [t0].[RootSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Key1], [t0].[Key2], [t0].[Key3] +FROM ( + SELECT [r].[Id] + FROM [Roots] AS [r] + UNION ALL + SELECT [b].[Id] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id] + FROM [Leaves] AS [l] + UNION ALL + SELECT [l0].[Id] + FROM [Leaf2s] AS [l0] +) AS [t] +INNER JOIN ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] +) AS [t0] ON [t].[Id] = [t0].[RootSkipSharedId] +INNER JOIN ( + SELECT [t2].[Id], [t2].[CollectionInverseId], [t2].[Name], [t2].[ReferenceInverseId], [t2].[CompositeId1], [t2].[CompositeId2], [t2].[CompositeId3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e1].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e1] ON [j].[ThreeId] = [e1].[Id] + ) AS [t2] + WHERE 1 < [t2].[row] AND [t2].[row] <= 3 +) AS [t1] ON [t0].[Key1] = [t1].[CompositeId1] AND [t0].[Key2] = [t1].[CompositeId2] AND [t0].[Key3] = [t1].[CompositeId3] +ORDER BY [t].[Id], [t0].[RootSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Key1], [t0].[Key2], [t0].[Key3], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen` +FROM `Leaves` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +FROM `Leaves` AS `l` +INNER JOIN ( + SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `e`.`Key1` < 5 +) AS `s` ON `l`.`Id` = `s`.`LeafId` +ORDER BY `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +FROM (`Leaves` AS `l` +INNER JOIN ( + SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `e`.`Key1` < 5 +) AS `s` ON `l`.`Id` = `s`.`LeafId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE `s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL +ORDER BY `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t0].[OneId], [t0].[TwoId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +""", +// +""" +SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [e].[Id], [t0].[OneId], [t0].[TwoId], [t0].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[OneId], [t].[TwoId] + FROM ( + SELECT [e0].[Id], [j].[OneId], [j].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +INNER JOIN ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[TwoId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 +) AS [t1] ON [t0].[Id] = [t1].[TwoId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[TwoId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[TwoId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[TwoId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id], [t0].[TwoId], [t0].[Id] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityTwos` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[Id], [t].[Name], [e].[Id], [t].[OneId], [t].[ThreeId] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [e0].[Name], [j].[OneId], [j].[ThreeId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [j].[OneId], [j].[ThreeId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[OneId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id], [t0].[OneId], [t0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Name], [t0].[Number], [t0].[IsGreen], [t0].[Discriminator], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [j].[OneId], [j].[ThreeId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[Name], [t1].[Number], [t1].[IsGreen], [t1].[Discriminator], [j0].[EntityOneId] + FROM [JoinOneToBranch] AS [j0] + INNER JOIN ( + SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [IsGreen], N'EntityBranch' AS [Discriminator] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id], [l].[Name], [l].[Number], [l].[IsGreen], N'EntityLeaf' AS [Discriminator] + FROM [Leaves] AS [l] + ) AS [t1] ON [j0].[EntityBranchId] = [t1].[Id] + WHERE [t1].[Id] < 20 +) AS [t0] ON [t].[Id] = [t0].[EntityOneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_inverse_throws_in_no_tracking(bool async) + { + await base.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async); + + AssertSql(); + } + + public override async Task Include_skip_navigation_then_include_inverse_works_for_tracking_query(bool async) + { + await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_include(bool async) + { + await base.Throws_when_different_filtered_include(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_then_include(bool async) + { + await base.Throws_when_different_filtered_then_include(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_then_include_via_different_paths(bool async) + { + await base.Throws_when_different_filtered_then_include_via_different_paths(async); + + AssertSql(); + } + + public override async Task Select_many_over_skip_navigation_where_non_equality(bool async) + { + await base.Select_many_over_skip_navigation_where_non_equality(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0`, `e0`.`Id` AS `Id0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` AND `e`.`Id` <> `s`.`Id0` +"""); + } + + public override async Task Contains_on_skip_collection_navigation(bool async) + { + await base.Contains_on_skip_collection_navigation(async); + + AssertSql( + """ +@entity_equality_two_Id='1' (Nullable = true) + +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = @entity_equality_two_Id) +"""); + } + + public override async Task GetType_in_hierarchy_in_base_type(bool async) + { + await base.GetType_in_hierarchy_in_base_type(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` +FROM `Roots` AS `r` +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` +FROM `Branches` AS `b` +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` +FROM `Leaves` AS `l` +"""); + } + + public override async Task GetType_in_hierarchy_in_querying_base_type(bool async) + { + await base.GetType_in_hierarchy_in_querying_base_type(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator` +FROM ( + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` +) AS `u` +WHERE FALSE +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_EF_Property(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_EF_Property(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_EF_Property( + bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_EF_Property(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId], [t1].[TwoId], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0], [t1].[ThreeId], [t1].[TwoId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[ThreeId], [j0].[TwoId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async); + + AssertSql(); + } + + public override async Task Skip_navigation_all_unidirectional(bool async) + { + await base.Skip_navigation_all_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE NOT EXISTS ( + SELECT `u0`.`OneId` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND (`u1`.`Name` NOT LIKE '%B%' OR `u1`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_with_predicate_unidirectional(bool async) + { + await base.Skip_navigation_any_with_predicate_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoSkipSharedId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`u1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains_unidirectional(bool async) + { + await base.Skip_navigation_contains_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneToThreePayloadFullShared` AS `u0` + INNER JOIN `UnidirectionalEntityThrees` AS `u1` ON `u0`.`ThreeId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND `u1`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate_unidirectional(bool async) + { + await base.Skip_navigation_count_without_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneSelfPayload` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate_unidirectional(bool async) + { + await base.Skip_navigation_count_with_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`c` +FROM ( + SELECT `u`.`Id`, `u`.`Name`, ( + SELECT COUNT(*) + FROM `UnidirectionalJoinOneToBranch` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name` + FROM `UnidirectionalBranches` AS `u1` + UNION ALL + SELECT `u2`.`Id`, `u2`.`Name` + FROM `UnidirectionalLeaves` AS `u2` + ) AS `u3` ON `u0`.`UnidirectionalEntityBranchId` = `u3`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`u3`.`Name` LIKE 'L%')) AS `c` + FROM `UnidirectionalEntityOnes` AS `u` +) AS `u4` +ORDER BY `u4`.`c`, `u4`.`Id` +"""); + } + + public override async Task Skip_navigation_select_subquery_average_unidirectional(bool async) + { + await base.Skip_navigation_select_subquery_average_unidirectional(async); + + AssertSql( +""" +SELECT ( + SELECT AVG(CDBL(`u1`.`Key1`)) + FROM `UnidirectionalJoinCompositeKeyToLeaf` AS `u0` + INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u1` ON `u0`.`CompositeId1` = `u1`.`Key1` AND `u0`.`CompositeId2` = `u1`.`Key2` AND `u0`.`CompositeId3` = `u1`.`Key3` + WHERE `u`.`Id` = `u0`.`LeafId`) +FROM `UnidirectionalLeaves` AS `u` +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default_unidirectional(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityThrees] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [u0].[ThreeId] ORDER BY [u1].[Id] DESC) AS [row] + FROM [UnidirectionalJoinTwoToThree] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [u].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_of_type_unidirectional(bool async) + { + await base.Skip_navigation_of_type_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, `u4`.`IsGreen`, `u4`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` + FROM `UnidirectionalRoots` AS `u1` + UNION ALL + SELECT `u2`.`Id`, `u2`.`Name`, `u2`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` + FROM `UnidirectionalBranches` AS `u2` + UNION ALL + SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` + FROM `UnidirectionalLeaves` AS `u3` + ) AS `u4` ON `u0`.`RootSkipSharedId` = `u4`.`Id` + WHERE `u4`.`Discriminator` = 'UnidirectionalEntityLeaf' +) AS `s` ON `u`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Join_with_skip_navigation_unidirectional(bool async) + { + await base.Join_with_skip_navigation_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Id], [u].[CollectionInverseId], [u].[ExtraId], [u].[Name], [u].[ReferenceInverseId], [u0].[Id], [u0].[CollectionInverseId], [u0].[ExtraId], [u0].[Name], [u0].[ReferenceInverseId] +FROM [UnidirectionalEntityTwos] AS [u] +INNER JOIN [UnidirectionalEntityTwos] AS [u0] ON [u].[Id] = ( + SELECT TOP(1) [u2].[Id] + FROM [UnidirectionalEntityTwoUnidirectionalEntityTwo] AS [u1] + INNER JOIN [UnidirectionalEntityTwos] AS [u2] ON [u1].[SelfSkipSharedRightId] = [u2].[Id] + WHERE [u0].[Id] = [u1].[UnidirectionalEntityTwoId] + ORDER BY [u2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation_unidirectional(bool async) + { + await base.Left_join_with_skip_navigation_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [u0].[Key1], [u0].[Key2], [u0].[Key3], [u0].[Name] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN [UnidirectionalEntityCompositeKeys] AS [u0] ON ( + SELECT TOP(1) [u2].[Id] + FROM [UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo] AS [u1] + INNER JOIN [UnidirectionalEntityTwos] AS [u2] ON [u1].[TwoSkipSharedId] = [u2].[Id] + WHERE [u].[Key1] = [u1].[UnidirectionalEntityCompositeKeyKey1] AND [u].[Key2] = [u1].[UnidirectionalEntityCompositeKeyKey2] AND [u].[Key3] = [u1].[UnidirectionalEntityCompositeKeyKey3] + ORDER BY [u2].[Id]) = ( + SELECT TOP(1) [u4].[Id] + FROM [UnidirectionalJoinThreeToCompositeKeyFull] AS [u3] + INNER JOIN [UnidirectionalEntityThrees] AS [u4] ON [u3].[ThreeId] = [u4].[Id] + WHERE [u0].[Key1] = [u3].[CompositeId1] AND [u0].[Key2] = [u3].[CompositeId2] AND [u0].[Key3] = [u3].[CompositeId3] + ORDER BY [u4].[Id]) +ORDER BY [u].[Key1], [u0].[Key1], [u].[Key2], [u0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM ( + SELECT `u`.`Id` + FROM `UnidirectionalRoots` AS `u` + UNION ALL + SELECT `u0`.`Id` + FROM `UnidirectionalBranches` AS `u0` + UNION ALL + SELECT `u1`.`Id` + FROM `UnidirectionalLeaves` AS `u1` +) AS `u2` +INNER JOIN ( + SELECT `u4`.`Id`, `u4`.`CollectionInverseId`, `u4`.`Name`, `u4`.`ReferenceInverseId`, `u3`.`UnidirectionalEntityRootId` + FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u3` + INNER JOIN `UnidirectionalEntityThrees` AS `u4` ON `u3`.`ThreeSkipSharedId` = `u4`.`Id` +) AS `s` ON `u2`.`Id` = `s`.`UnidirectionalEntityRootId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_where_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` AS `OneId0` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityOnes] AS [u] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[UnidirectionalEntityOneId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[UnidirectionalEntityOneId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityOneId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityOneUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoSkipSharedId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [u].[Id] = [t0].[UnidirectionalEntityOneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityOnes] AS [u] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[OneId], ROW_NUMBER() OVER(PARTITION BY [u0].[OneId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalJoinOneToThreePayloadFullShared] AS [u0] + INNER JOIN [UnidirectionalEntityThrees] AS [u1] ON [u0].[ThreeId] = [u1].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [u].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_cast_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_cast_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` +FROM `UnidirectionalEntityOnes` AS `u` +INNER JOIN ( + SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, `u3`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` + FROM `UnidirectionalJoinOneToBranch` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` + FROM `UnidirectionalBranches` AS `u1` + UNION ALL + SELECT `u2`.`Id`, `u2`.`Name`, `u2`.`Number`, `u2`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` + FROM `UnidirectionalLeaves` AS `u2` + ) AS `u3` ON `u0`.`UnidirectionalEntityBranchId` = `u3`.`Id` +) AS `s` ON `u`.`Id` = `s`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Select_skip_navigation_unidirectional(bool async) + { + await base.Select_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u0`.`LeftId`, `u0`.`RightId` + FROM `UnidirectionalJoinOneSelfPayload` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RightId` +ORDER BY `u`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, `u4`.`IsGreen`, `u4`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` + FROM `UnidirectionalRoots` AS `u1` + UNION ALL + SELECT `u2`.`Id`, `u2`.`Name`, `u2`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` + FROM `UnidirectionalBranches` AS `u2` + UNION ALL + SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` + FROM `UnidirectionalLeaves` AS `u3` + ) AS `u4` ON `u0`.`RootSkipSharedId` = `u4`.`Id` +) AS `s` ON `u`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_unidirectional(bool async) + { + await base.Include_skip_navigation_then_reference_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` +FROM `UnidirectionalEntityTwos` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`TwoId` + FROM (`UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId` +) AS `s` ON `u`.`Id` = `s`.`TwoId` +ORDER BY `u`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`UnidirectionalEntityBranchId`, `s`.`UnidirectionalEntityOneId` + FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` + INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u0`.`LeafId` = `u1`.`Id`) + LEFT JOIN ( + SELECT `u3`.`Id`, `u3`.`Name`, `u2`.`UnidirectionalEntityBranchId`, `u2`.`UnidirectionalEntityOneId` + FROM `UnidirectionalJoinOneToBranch` AS `u2` + INNER JOIN `UnidirectionalEntityOnes` AS `u3` ON `u2`.`UnidirectionalEntityOneId` = `u3`.`Id` + ) AS `s` ON `u1`.`Id` = `s`.`UnidirectionalEntityBranchId` +) AS `s0` ON `u`.`Key1` = `s0`.`CompositeId1` AND `u`.`Key2` = `s0`.`CompositeId2` AND `u`.`Key3` = `s0`.`CompositeId3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` + FROM ((`UnidirectionalJoinOneToThreePayloadFull` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `u4`.`Id`, `u4`.`Name`, `u3`.`LeftId`, `u3`.`RightId` + FROM `UnidirectionalJoinOneSelfPayload` AS `u3` + INNER JOIN `UnidirectionalEntityOnes` AS `u4` ON `u3`.`RightId` = `u4`.`Id` + ) AS `s` ON `u1`.`Id` = `s`.`LeftId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference_unidirectional(bool async) + { + await base.Include_skip_navigation_and_reference_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` +FROM (`UnidirectionalEntityTwos` AS `u` +LEFT JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`Id` = `u0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `u2`.`Id`, `u2`.`Name`, `u1`.`TwoSkipSharedId`, `u1`.`UnidirectionalEntityOneId` + FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u1` + INNER JOIN `UnidirectionalEntityOnes` AS `u2` ON `u1`.`UnidirectionalEntityOneId` = `u2`.`Id` +) AS `s` ON `u`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `u`.`Id`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_where_unidirectional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`ThreeId`, `u0`.`TwoId` + FROM `UnidirectionalJoinTwoToThree` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`ThreeId` +ORDER BY `u`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Id], [u].[CollectionInverseId], [u].[ExtraId], [u].[Name], [u].[ReferenceInverseId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[SelfSkipSharedRightId], [t0].[UnidirectionalEntityTwoId] +FROM [UnidirectionalEntityTwos] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[SelfSkipSharedRightId], [t].[UnidirectionalEntityTwoId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[SelfSkipSharedRightId], [u0].[UnidirectionalEntityTwoId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityTwoId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityTwoUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[SelfSkipSharedRightId] = [u1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [u].[Id] = [t0].[UnidirectionalEntityTwoId] +ORDER BY [u].[Id], [t0].[UnidirectionalEntityTwoId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[TwoSkipSharedId], [t0].[UnidirectionalEntityCompositeKeyKey1], [t0].[UnidirectionalEntityCompositeKeyKey2], [t0].[UnidirectionalEntityCompositeKeyKey3] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[TwoSkipSharedId], [t].[UnidirectionalEntityCompositeKeyKey1], [t].[UnidirectionalEntityCompositeKeyKey2], [t].[UnidirectionalEntityCompositeKeyKey3] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[TwoSkipSharedId], [u0].[UnidirectionalEntityCompositeKeyKey1], [u0].[UnidirectionalEntityCompositeKeyKey2], [u0].[UnidirectionalEntityCompositeKeyKey3], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityCompositeKeyKey1], [u0].[UnidirectionalEntityCompositeKeyKey2], [u0].[UnidirectionalEntityCompositeKeyKey3] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoSkipSharedId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [u].[Key1] = [t0].[UnidirectionalEntityCompositeKeyKey1] AND [u].[Key2] = [t0].[UnidirectionalEntityCompositeKeyKey2] AND [u].[Key3] = [t0].[UnidirectionalEntityCompositeKeyKey3] +ORDER BY [u].[Key1], [u].[Key2], [u].[Key3], [t0].[UnidirectionalEntityCompositeKeyKey1], [t0].[UnidirectionalEntityCompositeKeyKey2], [t0].[UnidirectionalEntityCompositeKeyKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_unidirectional(async); + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[Id0] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[Id0], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[Id] AS [Id0], [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalJoinThreeToCompositeKeyFull] AS [u0] + INNER JOIN [UnidirectionalEntityThrees] AS [u1] ON [u0].[ThreeId] = [u1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [u].[Key1] = [t0].[CompositeId1] AND [u].[Key2] = [t0].[CompositeId2] AND [u].[Key3] = [t0].[CompositeId3] +ORDER BY [u].[Key1], [u].[Key2], [u].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +FROM `UnidirectionalLeaves` AS `u` +LEFT JOIN ( + SELECT `u1`.`Key1`, `u1`.`Key2`, `u1`.`Key3`, `u1`.`Name`, `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` + FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` + INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u1` ON `u0`.`CompositeId1` = `u1`.`Key1` AND `u0`.`CompositeId2` = `u1`.`Key2` AND `u0`.`CompositeId3` = `u1`.`Key3`) + LEFT JOIN ( + SELECT `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`ExtraId`, `u3`.`Name`, `u3`.`ReferenceInverseId`, `u2`.`TwoSkipSharedId`, `u2`.`UnidirectionalEntityCompositeKeyKey1`, `u2`.`UnidirectionalEntityCompositeKeyKey2`, `u2`.`UnidirectionalEntityCompositeKeyKey3` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo` AS `u2` + INNER JOIN `UnidirectionalEntityTwos` AS `u3` ON `u2`.`TwoSkipSharedId` = `u3`.`Id` + ) AS `s` ON `u1`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u1`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u1`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` + WHERE `u1`.`Key1` < 5 +) AS `s0` ON `u`.`Id` = `s0`.`LeafId` +ORDER BY `u`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_unidirectional(bool async) + { + await base.Filter_include_on_skip_navigation_combined_unidirectional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Throws_when_different_filtered_include_unidirectional(bool async) + { + await base.Throws_when_different_filtered_include_unidirectional(async); + + AssertSql(); + } + + public override async Task Includes_accessed_via_different_path_are_merged_unidirectional(bool async) + { + await base.Includes_accessed_via_different_path_are_merged_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[Id0] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[Id0], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[Id] AS [Id0], [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalJoinThreeToCompositeKeyFull] AS [u0] + INNER JOIN [UnidirectionalEntityThrees] AS [u1] ON [u0].[ThreeId] = [u1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [u].[Key1] = [t0].[CompositeId1] AND [u].[Key2] = [t0].[CompositeId2] AND [u].[Key3] = [t0].[CompositeId3] +ORDER BY [u].[Key1], [u].[Key2], [u].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Select_many_over_skip_navigation_where_non_equality_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_where_non_equality_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` AS `OneId0`, `u1`.`Id` AS `Id0` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId0` AND `u`.`Id` <> `s`.`Id0` +"""); + } + + public override async Task Contains_on_skip_collection_navigation_unidirectional(bool async) + { + await base.Contains_on_skip_collection_navigation_unidirectional(async); + + AssertSql( + """ +@entity_equality_two_Id='1' (Nullable = true) + +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND `u1`.`Id` = @entity_equality_two_Id) +"""); + } + + public override async Task GetType_in_hierarchy_in_base_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_base_type_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` +FROM `UnidirectionalRoots` AS `u` +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` +FROM `UnidirectionalBranches` AS `u` +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_unidirectional(async); + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` +FROM `UnidirectionalLeaves` AS `u` +"""); + } + + public override async Task GetType_in_hierarchy_in_querying_base_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_querying_base_type_unidirectional(async); + + AssertSql( + """ +SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `u1`.`Discriminator` +FROM ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` + FROM `UnidirectionalBranches` AS `u` + UNION ALL + SELECT `u0`.`Id`, `u0`.`Name`, `u0`.`Number`, `u0`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` + FROM `UnidirectionalLeaves` AS `u0` +) AS `u1` +WHERE FALSE +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCManyToManyQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCManyToManyQueryLibRedFixture.cs new file mode 100644 index 00000000..ba059af6 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCManyToManyQueryLibRedFixture.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCManyToManyQueryLibRedFixture : TPCManyToManyQueryRelationalFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCManyToManyQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCManyToManyQueryLibRedTest.cs new file mode 100644 index 00000000..183f3604 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCManyToManyQueryLibRedTest.cs @@ -0,0 +1,2839 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCManyToManyQueryLibRedTest : TPCManyToManyQueryRelationalTestBase +{ + public TPCManyToManyQueryLibRedTest(TPCManyToManyQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Skip_navigation_all(bool async) + { + await base.Skip_navigation_all(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE NOT EXISTS ( + SELECT `j`.`OneId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` NOT LIKE '%B%' OR `e0`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_without_predicate(bool async) + { + await base.Skip_navigation_any_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_any_with_predicate(bool async) + { + await base.Skip_navigation_any_with_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`OneSkipSharedId` AND (`e1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains(bool async) + { + await base.Skip_navigation_contains(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate(bool async) + { + await base.Skip_navigation_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate(bool async) + { + await base.Skip_navigation_count_with_predicate(async); + + AssertSql( + """ +SELECT `e0`.`Id`, `e0`.`Name`, `e0`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`Name`, ( + SELECT COUNT(*) + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `b`.`Id`, `b`.`Name` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name` + FROM `Leaves` AS `l` + ) AS `u` ON `j`.`EntityBranchId` = `u`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`u`.`Name` LIKE 'L%')) AS `c` + FROM `EntityOnes` AS `e` +) AS `e0` +ORDER BY `e0`.`c`, `e0`.`Id` +"""); + } + + public override async Task Skip_navigation_long_count_without_predicate(bool async) + { + await base.Skip_navigation_long_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +"""); + } + + public override async Task Skip_navigation_long_count_with_predicate(bool async) + { + await base.Skip_navigation_long_count_with_predicate(async); + + AssertSql( + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( + SELECT COUNT(*) + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwos` AS `e` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` +"""); + } + + public override async Task Skip_navigation_select_many_average(bool async) + { + await base.Skip_navigation_select_many_average(async); + + AssertSql( + """ +SELECT AVG(CDBL(`s`.`Key1`)) +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_max(bool async) + { + await base.Skip_navigation_select_many_max(async); + + AssertSql( + """ +SELECT MAX(`s`.`Key1`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Key1`, `j`.`ThreeId` + FROM `JoinThreeToCompositeKeyFull` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +"""); + } + + public override async Task Skip_navigation_select_many_min(bool async) + { + await base.Skip_navigation_select_many_min(async); + + AssertSql( + """ +SELECT MIN(`s`.`Id`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `u`.`Id`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_sum(bool async) + { + await base.Skip_navigation_select_many_sum(async); + + AssertSql( + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) +FROM ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` +) AS `u` +INNER JOIN ( + SELECT `e0`.`Key1`, `e`.`RootSkipSharedId` + FROM `EntityCompositeKeyEntityRoot` AS `e` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_subquery_average(bool async) + { + await base.Skip_navigation_select_subquery_average(async); + + AssertSql( +""" +SELECT ( + SELECT AVG(CDBL(`e`.`Key1`)) + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `l`.`Id` = `j`.`LeafId`) +FROM `Leaves` AS `l` +"""); + } + + public override async Task Skip_navigation_select_subquery_max(bool async) + { + await base.Skip_navigation_select_subquery_max(async); + + AssertSql( +""" +SELECT ( + SELECT MAX(`e0`.`Id`) + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_min(bool async) + { + await base.Skip_navigation_select_subquery_min(async); + + AssertSql( +""" +SELECT ( + SELECT MIN(`e0`.`Id`) + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`ThreeId`) +FROM `EntityThrees` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_sum(bool async) + { + await base.Skip_navigation_select_subquery_sum(async); + + AssertSql( +""" +SELECT ( + SELECT IIF(SUM(`e1`.`Id`) IS NULL, 0, SUM(`e1`.`Id`)) + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityOnes` AS `e1` ON `e0`.`OneSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`TwoSkipSharedId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_order_by_first_or_default(bool async) + { + await base.Skip_navigation_order_by_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_order_by_single_or_default(bool async) + { + await base.Skip_navigation_order_by_single_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT TOP(1) [t].[Id], [t].[Name] + FROM ( + SELECT TOP(1) [e0].[Id], [e0].[Name] + FROM [JoinOneSelfPayload] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[RightId] = [e0].[Id] + WHERE [e].[Id] = [j].[LeftId] + ORDER BY [e0].[Id] + ) AS [t] + ORDER BY [t].[Id] +) AS [t0] +"""); + } + + public override async Task Skip_navigation_order_by_last_or_default(bool async) + { + await base.Skip_navigation_order_by_last_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM ( + SELECT [b].[Id] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id] + FROM [Leaves] AS [l] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[Name], [t1].[EntityBranchId] + FROM ( + SELECT [e].[Id], [e].[Name], [j].[EntityBranchId], ROW_NUMBER() OVER(PARTITION BY [j].[EntityBranchId] ORDER BY [e].[Id] DESC) AS [row] + FROM [JoinOneToBranch] AS [j] + INNER JOIN [EntityOnes] AS [e] ON [j].[EntityOneId] = [e].[Id] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Id] = [t0].[EntityBranchId] +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id] DESC) AS [row] + FROM [JoinTwoToThree] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_cast(bool async) + { + await base.Skip_navigation_cast(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +"""); + } + + public override async Task Skip_navigation_of_type(bool async) + { + await base.Skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` + WHERE `u`.`Discriminator` = 'EntityLeaf' +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Join_with_skip_navigation(bool async) + { + await base.Join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +INNER JOIN [EntityTwos] AS [e0] ON [e].[Id] = ( + SELECT TOP(1) [e2].[Id] + FROM [EntityTwoEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[SelfSkipSharedRightId] = [e2].[Id] + WHERE [e0].[Id] = [e1].[SelfSkipSharedLeftId] + ORDER BY [e2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation(bool async) + { + await base.Left_join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN [EntityCompositeKeys] AS [e0] ON ( + SELECT TOP(1) [e2].[Id] + FROM [EntityCompositeKeyEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[TwoSkipSharedId] = [e2].[Id] + WHERE [e].[Key1] = [e1].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [e1].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [e1].[CompositeKeySkipSharedKey3] + ORDER BY [e2].[Id]) = ( + SELECT TOP(1) [e3].[Id] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e3] ON [j].[ThreeId] = [e3].[Id] + WHERE [e0].[Key1] = [j].[CompositeId1] AND [e0].[Key2] = [j].[CompositeId2] AND [e0].[Key3] = [j].[CompositeId3] + ORDER BY [e3].[Id]) +ORDER BY [e].[Key1], [e0].[Key1], [e].[Key2], [e0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation(bool async) + { + await base.Select_many_over_skip_navigation(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` +) AS `u` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where(bool async) + { + await base.Select_many_over_skip_navigation_where(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneSkipSharedId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[OneSkipSharedId], ROW_NUMBER() OVER(PARTITION BY [e0].[OneSkipSharedId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityOneEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Id] = [t0].[OneSkipSharedId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_of_type(bool async) + { + await base.Select_many_over_skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` + WHERE `u`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_cast(bool async) + { + await base.Select_many_over_skip_navigation_cast(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `j`.`EntityOneId` + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + ) AS `u` ON `j`.`EntityBranchId` = `u`.`Id` +) AS `s` ON `e`.`Id` = `s`.`EntityOneId` +"""); + } + + public override async Task Select_skip_navigation(bool async) + { + await base.Select_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Select_skip_navigation_multiple(bool async) + { + await base.Select_skip_navigation_multiple(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` +FROM ((`EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` + FROM `EntityTwoEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) +LEFT JOIN ( + SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e3` + INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` +"""); + } + + public override async Task Select_skip_navigation_first_or_default(bool async) + { + await base.Select_skip_navigation_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Key1], [t0].[Key2], [t0].[Key3], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Key1], [e0].[Key2]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [j].[CompositeId1] = [e0].[Key1] AND [j].[CompositeId2] = [e0].[Key2] AND [j].[CompositeId3] = [e0].[Key3] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +ORDER BY [e].[Id] +"""); + } + + public override async Task Include_skip_navigation(bool async) + { + await base.Include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference(bool async) + { + await base.Include_skip_navigation_then_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id0`, `s0`.`Name0` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `s`.`EntityBranchId`, `s`.`EntityOneId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id`) + LEFT JOIN ( + SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` + ) AS `s` ON `l`.`Id` = `s`.`EntityBranchId` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` + FROM ((`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference(bool async) + { + await base.Include_skip_navigation_and_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Filtered_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by(bool async) + { + await base.Filtered_include_skip_navigation_order_by(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [t0].[SelfSkipSharedLeftId], [t0].[SelfSkipSharedRightId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +LEFT JOIN ( + SELECT [t].[SelfSkipSharedLeftId], [t].[SelfSkipSharedRightId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[SelfSkipSharedLeftId], [e0].[SelfSkipSharedRightId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e0].[Id] AS [Id0], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where(bool async) + { + await base.Filtered_then_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id0`, `s0`.`Name0` +FROM ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` +) AS `u` +LEFT JOIN ( + SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` + FROM (`EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e1`.`Id`, `e1`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` < 10 + ) AS `s` ON `e0`.`Id` = `s`.`ThreeId` +) AS `s0` ON `u`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `u`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[Name], [t].[Number], [t].[Slumber], [t].[IsGreen], [t].[IsBrown], [t].[Discriminator], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[Name], [t1].[Id], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[ThreeId], [t1].[Id0], [t1].[CollectionInverseId], [t1].[Name0], [t1].[ReferenceInverseId] +FROM ( + SELECT [r].[Id], [r].[Name], NULL AS [Number], NULL AS [Slumber], NULL AS [IsGreen], NULL AS [IsBrown], N'EntityRoot' AS [Discriminator] + FROM [Roots] AS [r] + UNION ALL + SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [Slumber], NULL AS [IsGreen], NULL AS [IsBrown], N'EntityBranch' AS [Discriminator] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id], [l].[Name], [l].[Number], NULL AS [Slumber], [l].[IsGreen], NULL AS [IsBrown], N'EntityLeaf' AS [Discriminator] + FROM [Leaves] AS [l] + UNION ALL + SELECT [l0].[Id], [l0].[Name], NULL AS [Number], [l0].[Slumber], NULL AS [IsGreen], [l0].[IsBrown], N'EntityLeaf2' AS [Discriminator] + FROM [Leaf2s] AS [l0] +) AS [t] +LEFT JOIN ( + SELECT [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] + LEFT JOIN ( + SELECT [t2].[Id], [t2].[CompositeId1], [t2].[CompositeId2], [t2].[CompositeId3], [t2].[ThreeId], [t2].[Id0], [t2].[CollectionInverseId], [t2].[Name], [t2].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e1].[Id] AS [Id0], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e1].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e1] ON [j].[ThreeId] = [e1].[Id] + ) AS [t2] + WHERE 1 < [t2].[row] AND [t2].[row] <= 3 + ) AS [t0] ON [e0].[Key1] = [t0].[CompositeId1] AND [e0].[Key2] = [t0].[CompositeId2] AND [e0].[Key3] = [t0].[CompositeId3] +) AS [t1] ON [t].[Id] = [t1].[RootSkipSharedId] +ORDER BY [t].[Id], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[Id0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` +FROM `Leaves` AS `l` +LEFT JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3`) + LEFT JOIN ( + SELECT `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + ) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` + WHERE `e`.`Key1` < 5 +) AS `s0` ON `l`.`Id` = `s0`.`LeafId` +ORDER BY `l`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[ThreeId], [t1].[TwoId0], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[ThreeId], [t1].[TwoId0], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0] +FROM [EntityOnes] AS [e] +LEFT JOIN ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[ThreeId], [t].[TwoId], [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[TwoId] + WHERE [e0].[Id] < 10 +) AS [t1] ON [e].[Id] = [t1].[OneId] +ORDER BY [e].[Id], [t1].[OneId], [t1].[TwoId], [t1].[Id], [t1].[TwoId0], [t1].[Id0] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined(bool async) + { + await base.Filter_include_on_skip_navigation_combined(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId], [t3].[OneId], [t3].[ThreeId], [t3].[Payload], [t3].[Id], [t3].[Name], [t3].[OneId0], [t3].[TwoId], [t3].[JoinOneToTwoExtraId], [t3].[Id0], [t3].[CollectionInverseId], [t3].[ExtraId], [t3].[Name0], [t3].[ReferenceInverseId], [t3].[EntityBranchId], [t3].[EntityOneId], [t3].[Id1], [t3].[Name1], [t3].[Number], [t3].[IsGreen], [t3].[Discriminator] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [j].[Payload], [e0].[Id], [e0].[Name], [t0].[OneId] AS [OneId0], [t0].[TwoId], [t0].[JoinOneToTwoExtraId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId], [t1].[EntityBranchId], [t1].[EntityOneId], [t1].[Id] AS [Id1], [t1].[Name] AS [Name1], [t1].[Number], [t1].[IsGreen], [t1].[Discriminator] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j0].[OneId], [j0].[TwoId], [j0].[JoinOneToTwoExtraId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[OneId] + LEFT JOIN ( + SELECT [j1].[EntityBranchId], [j1].[EntityOneId], [t2].[Id], [t2].[Name], [t2].[Number], [t2].[IsGreen], [t2].[Discriminator] + FROM [JoinOneToBranch] AS [j1] + INNER JOIN ( + SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [IsGreen], N'EntityBranch' AS [Discriminator] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id], [l].[Name], [l].[Number], [l].[IsGreen], N'EntityLeaf' AS [Discriminator] + FROM [Leaves] AS [l] + ) AS [t2] ON [j1].[EntityBranchId] = [t2].[Id] + WHERE [t2].[Id] < 20 + ) AS [t1] ON [e0].[Id] = [t1].[EntityOneId] + WHERE [e0].[Id] < 10 +) AS [t3] ON [e].[Id] = [t3].[ThreeId] +ORDER BY [e].[Id], [t3].[OneId], [t3].[ThreeId], [t3].[Id], [t3].[OneId0], [t3].[Id0], [t3].[TwoId], [t3].[EntityBranchId], [t3].[EntityOneId] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`ThreeId`, `s0`.`TwoId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM `EntityTwos` AS `e0` + LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` + WHERE `e0`.`Id` > 15 +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` +"""); + } + + public override async Task Includes_accessed_via_different_path_are_merged(bool async) + { + await base.Includes_accessed_via_different_path_are_merged(async); + + AssertSql(); + } + + public override async Task Filtered_includes_accessed_via_different_path_are_merged(bool async) + { + await base.Filtered_includes_accessed_via_different_path_are_merged(async); + + AssertSql(); + } + + public override async Task Include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_split(bool async) + { + await base.Include_skip_navigation_then_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +""", + // + """ +SELECT `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id`, `s0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +FROM (`EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `l`.`Id` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3`) +LEFT JOIN ( + SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id`, `e1`.`Id` AS `Id0` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Include_skip_navigation_and_reference_split(bool async) + { + await base.Include_skip_navigation_and_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` +ORDER BY `e`.`Id`, `e0`.`Id` +""", + // + """ +SELECT `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +INNER JOIN ( + SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[SelfSkipSharedLeftId], [t0].[SelfSkipSharedRightId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id] +FROM [EntityTwos] AS [e] +INNER JOIN ( + SELECT [t].[SelfSkipSharedLeftId], [t].[SelfSkipSharedRightId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[SelfSkipSharedLeftId], [e0].[SelfSkipSharedRightId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e0].[Id] AS [Id0], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_then_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator` +FROM ( + SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` + FROM `Leaf2s` AS `l0` +) AS `u` +ORDER BY `u`.`Id` +""", + // + """ +SELECT `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `u`.`Id` +FROM ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` +) AS `u` +INNER JOIN ( + SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +""", + // + """ +SELECT `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +FROM (( + SELECT `r`.`Id` + FROM `Roots` AS `r` + UNION ALL + SELECT `b`.`Id` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id` + FROM `Leaves` AS `l` + UNION ALL + SELECT `l0`.`Id` + FROM `Leaf2s` AS `l0` +) AS `u` +INNER JOIN ( + SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId`) +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e1`.`Id`, `e1`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` < 10 +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[Name], [t].[Number], [t].[Slumber], [t].[IsGreen], [t].[IsBrown], [t].[Discriminator] +FROM ( + SELECT [r].[Id], [r].[Name], NULL AS [Number], NULL AS [Slumber], NULL AS [IsGreen], NULL AS [IsBrown], N'EntityRoot' AS [Discriminator] + FROM [Roots] AS [r] + UNION ALL + SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [Slumber], NULL AS [IsGreen], NULL AS [IsBrown], N'EntityBranch' AS [Discriminator] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id], [l].[Name], [l].[Number], NULL AS [Slumber], [l].[IsGreen], NULL AS [IsBrown], N'EntityLeaf' AS [Discriminator] + FROM [Leaves] AS [l] + UNION ALL + SELECT [l0].[Id], [l0].[Name], NULL AS [Number], [l0].[Slumber], NULL AS [IsGreen], [l0].[IsBrown], N'EntityLeaf2' AS [Discriminator] + FROM [Leaf2s] AS [l0] +) AS [t] +ORDER BY [t].[Id] +""", +// +""" +SELECT [t0].[RootSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Key1], [t0].[Key2], [t0].[Key3], [t0].[Name], [t].[Id] +FROM ( + SELECT [r].[Id] + FROM [Roots] AS [r] + UNION ALL + SELECT [b].[Id] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id] + FROM [Leaves] AS [l] + UNION ALL + SELECT [l0].[Id] + FROM [Leaf2s] AS [l0] +) AS [t] +INNER JOIN ( + SELECT [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] +) AS [t0] ON [t].[Id] = [t0].[RootSkipSharedId] +ORDER BY [t].[Id], [t0].[RootSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Key1], [t0].[Key2], [t0].[Key3] +""", +// +""" +SELECT [t1].[Id], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[ThreeId], [t1].[Id0], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [t].[Id], [t0].[RootSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Key1], [t0].[Key2], [t0].[Key3] +FROM ( + SELECT [r].[Id] + FROM [Roots] AS [r] + UNION ALL + SELECT [b].[Id] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id] + FROM [Leaves] AS [l] + UNION ALL + SELECT [l0].[Id] + FROM [Leaf2s] AS [l0] +) AS [t] +INNER JOIN ( + SELECT [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3], [e0].[Key1], [e0].[Key2], [e0].[Key3] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] +) AS [t0] ON [t].[Id] = [t0].[RootSkipSharedId] +INNER JOIN ( + SELECT [t2].[Id], [t2].[CompositeId1], [t2].[CompositeId2], [t2].[CompositeId3], [t2].[ThreeId], [t2].[Id0], [t2].[CollectionInverseId], [t2].[Name], [t2].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e1].[Id] AS [Id0], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e1].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e1] ON [j].[ThreeId] = [e1].[Id] + ) AS [t2] + WHERE 1 < [t2].[row] AND [t2].[row] <= 3 +) AS [t1] ON [t0].[Key1] = [t1].[CompositeId1] AND [t0].[Key2] = [t1].[CompositeId2] AND [t0].[Key3] = [t1].[CompositeId3] +ORDER BY [t].[Id], [t0].[RootSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Key1], [t0].[Key2], [t0].[Key3], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[Id0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen` +FROM `Leaves` AS `l` +ORDER BY `l`.`Id` +""", + // + """ +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `l`.`Id` +FROM `Leaves` AS `l` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `e`.`Key1` < 5 +) AS `s` ON `l`.`Id` = `s`.`LeafId` +ORDER BY `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +""", + // + """ +SELECT `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +FROM (`Leaves` AS `l` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `e`.`Key1` < 5 +) AS `s` ON `l`.`Id` = `s`.`LeafId`) +LEFT JOIN ( + SELECT `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE `s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL +ORDER BY `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[OneId], [t0].[TwoId], [t0].[JoinOneToTwoExtraId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +""", +// +""" +SELECT [t1].[ThreeId], [t1].[TwoId], [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [e].[Id], [t0].[OneId], [t0].[TwoId], [t0].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[OneId], [t].[TwoId], [t].[Id] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [e0].[Id], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +INNER JOIN ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 +) AS [t1] ON [t0].[Id] = [t1].[TwoId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [e].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +""", +// +""" +SELECT [t0].[ThreeId], [t0].[TwoId], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[TwoId], [e0].[Id] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +INNER JOIN ( + SELECT [t1].[ThreeId], [t1].[TwoId], [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId] + FROM ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[TwoId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id], [t0].[TwoId], [t0].[Id] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityTwos` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `e0`.`Id`, `e1`.`Id` AS `Id0` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[OneId], [t].[ThreeId], [t].[Payload], [t].[Id], [t].[Name], [e].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [j].[Payload], [e0].[Id], [e0].[Name] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +""", +// +""" +SELECT [t0].[OneId], [t0].[TwoId], [t0].[JoinOneToTwoExtraId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [e0].[Id] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId] + FROM ( + SELECT [j0].[OneId], [j0].[TwoId], [j0].[JoinOneToTwoExtraId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id], [t0].[OneId], [t0].[Id] +""", +// +""" +SELECT [t0].[EntityBranchId], [t0].[EntityOneId], [t0].[Id], [t0].[Name], [t0].[Number], [t0].[IsGreen], [t0].[Discriminator], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [e0].[Id] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [j0].[EntityBranchId], [j0].[EntityOneId], [t1].[Id], [t1].[Name], [t1].[Number], [t1].[IsGreen], [t1].[Discriminator] + FROM [JoinOneToBranch] AS [j0] + INNER JOIN ( + SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [IsGreen], N'EntityBranch' AS [Discriminator] + FROM [Branches] AS [b] + UNION ALL + SELECT [l].[Id], [l].[Name], [l].[Number], [l].[IsGreen], N'EntityLeaf' AS [Discriminator] + FROM [Leaves] AS [l] + ) AS [t1] ON [j0].[EntityBranchId] = [t1].[Id] + WHERE [t1].[Id] < 20 +) AS [t0] ON [t].[Id] = [t0].[EntityOneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` +""", + // + """ +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_inverse_works_for_tracking_query(bool async) + { + await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId0`, `s0`.`ThreeId0`, `s0`.`Payload0`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `s`.`OneId` AS `OneId0`, `s`.`ThreeId` AS `ThreeId0`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `j0`.`OneId`, `j0`.`ThreeId`, `j0`.`Payload`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `JoinOneToThreePayloadFullShared` AS `j0` + INNER JOIN `EntityThrees` AS `e1` ON `j0`.`ThreeId` = `e1`.`Id` + ) AS `s` ON `e0`.`Id` = `s`.`OneId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`OneId0`, `s0`.`ThreeId0` +"""); + } + + public override async Task Throws_when_different_filtered_include(bool async) + { + await base.Throws_when_different_filtered_include(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_then_include(bool async) + { + await base.Throws_when_different_filtered_then_include(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_then_include_via_different_paths(bool async) + { + await base.Throws_when_different_filtered_then_include_via_different_paths(async); + + AssertSql(); + } + + public override async Task Select_many_over_skip_navigation_where_non_equality(bool async) + { + await base.Select_many_over_skip_navigation_where_non_equality(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0`, `e0`.`Id` AS `Id0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` AND `e`.`Id` <> `s`.`Id0` +"""); + } + + public override async Task Contains_on_skip_collection_navigation(bool async) + { + await base.Contains_on_skip_collection_navigation(async); + + AssertSql( + """ +@entity_equality_two_Id='1' (Nullable = true) + +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = @entity_equality_two_Id) +"""); + } + + public override async Task GetType_in_hierarchy_in_base_type(bool async) + { + await base.GetType_in_hierarchy_in_base_type(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` +FROM `Roots` AS `r` +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityBranch' AS `Discriminator` +FROM `Branches` AS `b` +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, CVar(NULL) AS `Slumber`, `l`.`IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityLeaf' AS `Discriminator` +FROM `Leaves` AS `l` +"""); + } + + public override async Task GetType_in_hierarchy_in_querying_base_type(bool async) + { + await base.GetType_in_hierarchy_in_querying_base_type(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator` +FROM ( + SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` + FROM `Branches` AS `b` + UNION ALL + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` + FROM `Leaves` AS `l` +) AS `u` +WHERE FALSE +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_EF_Property(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_EF_Property(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_EF_Property( + bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_EF_Property(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[ThreeId], [t1].[TwoId0], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Skip_navigation_all_unidirectional(bool async) + { + await base.Skip_navigation_all_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE NOT EXISTS ( + SELECT `u0`.`OneId` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND (`u1`.`Name` NOT LIKE '%B%' OR `u1`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_with_predicate_unidirectional(bool async) + { + await base.Skip_navigation_any_with_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoSkipSharedId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`u1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains_unidirectional(bool async) + { + await base.Skip_navigation_contains_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneToThreePayloadFullShared` AS `u0` + INNER JOIN `UnidirectionalEntityThrees` AS `u1` ON `u0`.`ThreeId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND `u1`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate_unidirectional(bool async) + { + await base.Skip_navigation_count_without_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneSelfPayload` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate_unidirectional(bool async) + { + await base.Skip_navigation_count_with_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`c` +FROM ( + SELECT `u`.`Id`, `u`.`Name`, ( + SELECT COUNT(*) + FROM `UnidirectionalJoinOneToBranch` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name` + FROM `UnidirectionalBranches` AS `u1` + UNION ALL + SELECT `u2`.`Id`, `u2`.`Name` + FROM `UnidirectionalLeaves` AS `u2` + ) AS `u3` ON `u0`.`UnidirectionalEntityBranchId` = `u3`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`u3`.`Name` LIKE 'L%')) AS `c` + FROM `UnidirectionalEntityOnes` AS `u` +) AS `u4` +ORDER BY `u4`.`c`, `u4`.`Id` +"""); + } + + public override async Task Skip_navigation_select_subquery_average_unidirectional(bool async) + { + await base.Skip_navigation_select_subquery_average_unidirectional(async); + + AssertSql( +""" +SELECT ( + SELECT AVG(CDBL(`u1`.`Key1`)) + FROM `UnidirectionalJoinCompositeKeyToLeaf` AS `u0` + INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u1` ON `u0`.`CompositeId1` = `u1`.`Key1` AND `u0`.`CompositeId2` = `u1`.`Key2` AND `u0`.`CompositeId3` = `u1`.`Key3` + WHERE `u`.`Id` = `u0`.`LeafId`) +FROM `UnidirectionalLeaves` AS `u` +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default_unidirectional(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityThrees] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [u0].[ThreeId] ORDER BY [u1].[Id] DESC) AS [row] + FROM [UnidirectionalJoinTwoToThree] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [u].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_of_type_unidirectional(bool async) + { + await base.Skip_navigation_of_type_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, `u4`.`IsGreen`, `u4`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` + FROM `UnidirectionalRoots` AS `u1` + UNION ALL + SELECT `u2`.`Id`, `u2`.`Name`, `u2`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` + FROM `UnidirectionalBranches` AS `u2` + UNION ALL + SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` + FROM `UnidirectionalLeaves` AS `u3` + ) AS `u4` ON `u0`.`RootSkipSharedId` = `u4`.`Id` + WHERE `u4`.`Discriminator` = 'UnidirectionalEntityLeaf' +) AS `s` ON `u`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Join_with_skip_navigation_unidirectional(bool async) + { + await base.Join_with_skip_navigation_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Id], [u].[CollectionInverseId], [u].[ExtraId], [u].[Name], [u].[ReferenceInverseId], [u0].[Id], [u0].[CollectionInverseId], [u0].[ExtraId], [u0].[Name], [u0].[ReferenceInverseId] +FROM [UnidirectionalEntityTwos] AS [u] +INNER JOIN [UnidirectionalEntityTwos] AS [u0] ON [u].[Id] = ( + SELECT TOP(1) [u2].[Id] + FROM [UnidirectionalEntityTwoUnidirectionalEntityTwo] AS [u1] + INNER JOIN [UnidirectionalEntityTwos] AS [u2] ON [u1].[SelfSkipSharedRightId] = [u2].[Id] + WHERE [u0].[Id] = [u1].[UnidirectionalEntityTwoId] + ORDER BY [u2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation_unidirectional(bool async) + { + await base.Left_join_with_skip_navigation_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [u0].[Key1], [u0].[Key2], [u0].[Key3], [u0].[Name] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN [UnidirectionalEntityCompositeKeys] AS [u0] ON ( + SELECT TOP(1) [u2].[Id] + FROM [UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo] AS [u1] + INNER JOIN [UnidirectionalEntityTwos] AS [u2] ON [u1].[TwoSkipSharedId] = [u2].[Id] + WHERE [u].[Key1] = [u1].[UnidirectionalEntityCompositeKeyKey1] AND [u].[Key2] = [u1].[UnidirectionalEntityCompositeKeyKey2] AND [u].[Key3] = [u1].[UnidirectionalEntityCompositeKeyKey3] + ORDER BY [u2].[Id]) = ( + SELECT TOP(1) [u4].[Id] + FROM [UnidirectionalJoinThreeToCompositeKeyFull] AS [u3] + INNER JOIN [UnidirectionalEntityThrees] AS [u4] ON [u3].[ThreeId] = [u4].[Id] + WHERE [u0].[Key1] = [u3].[CompositeId1] AND [u0].[Key2] = [u3].[CompositeId2] AND [u0].[Key3] = [u3].[CompositeId3] + ORDER BY [u4].[Id]) +ORDER BY [u].[Key1], [u0].[Key1], [u].[Key2], [u0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM ( + SELECT `u`.`Id` + FROM `UnidirectionalRoots` AS `u` + UNION ALL + SELECT `u0`.`Id` + FROM `UnidirectionalBranches` AS `u0` + UNION ALL + SELECT `u1`.`Id` + FROM `UnidirectionalLeaves` AS `u1` +) AS `u2` +INNER JOIN ( + SELECT `u4`.`Id`, `u4`.`CollectionInverseId`, `u4`.`Name`, `u4`.`ReferenceInverseId`, `u3`.`UnidirectionalEntityRootId` + FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u3` + INNER JOIN `UnidirectionalEntityThrees` AS `u4` ON `u3`.`ThreeSkipSharedId` = `u4`.`Id` +) AS `s` ON `u2`.`Id` = `s`.`UnidirectionalEntityRootId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_where_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` AS `OneId0` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityOnes] AS [u] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[UnidirectionalEntityOneId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[UnidirectionalEntityOneId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityOneId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityOneUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoSkipSharedId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [u].[Id] = [t0].[UnidirectionalEntityOneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityOnes] AS [u] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[OneId], ROW_NUMBER() OVER(PARTITION BY [u0].[OneId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalJoinOneToThreePayloadFullShared] AS [u0] + INNER JOIN [UnidirectionalEntityThrees] AS [u1] ON [u0].[ThreeId] = [u1].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [u].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_cast_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_cast_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` +FROM `UnidirectionalEntityOnes` AS `u` +INNER JOIN ( + SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, `u3`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` + FROM `UnidirectionalJoinOneToBranch` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` + FROM `UnidirectionalBranches` AS `u1` + UNION ALL + SELECT `u2`.`Id`, `u2`.`Name`, `u2`.`Number`, `u2`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` + FROM `UnidirectionalLeaves` AS `u2` + ) AS `u3` ON `u0`.`UnidirectionalEntityBranchId` = `u3`.`Id` +) AS `s` ON `u`.`Id` = `s`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Select_skip_navigation_unidirectional(bool async) + { + await base.Select_skip_navigation_unidirectional(async); + AssertSql( + """ +SELECT `u`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u0`.`LeftId`, `u0`.`RightId` + FROM `UnidirectionalJoinOneSelfPayload` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RightId` +ORDER BY `u`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3`, `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, `u4`.`IsGreen`, `u4`.`Discriminator` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` + FROM `UnidirectionalRoots` AS `u1` + UNION ALL + SELECT `u2`.`Id`, `u2`.`Name`, `u2`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` + FROM `UnidirectionalBranches` AS `u2` + UNION ALL + SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` + FROM `UnidirectionalLeaves` AS `u3` + ) AS `u4` ON `u0`.`RootSkipSharedId` = `u4`.`Id` +) AS `s` ON `u`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_unidirectional(bool async) + { + await base.Include_skip_navigation_then_reference_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`UnidirectionalJoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityTwos` AS `u` +LEFT JOIN ( + SELECT `u0`.`OneId`, `u0`.`TwoId`, `u0`.`UnidirectionalJoinOneToTwoExtraId`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId` + FROM (`UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId` +) AS `s` ON `u`.`Id` = `s`.`TwoId` +ORDER BY `u`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId`, `s0`.`Id0`, `s0`.`Name0` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `s`.`UnidirectionalEntityBranchId`, `s`.`UnidirectionalEntityOneId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` + FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` + INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u0`.`LeafId` = `u1`.`Id`) + LEFT JOIN ( + SELECT `u2`.`UnidirectionalEntityBranchId`, `u2`.`UnidirectionalEntityOneId`, `u3`.`Id`, `u3`.`Name` + FROM `UnidirectionalJoinOneToBranch` AS `u2` + INNER JOIN `UnidirectionalEntityOnes` AS `u3` ON `u2`.`UnidirectionalEntityOneId` = `u3`.`Id` + ) AS `s` ON `u1`.`Id` = `s`.`UnidirectionalEntityBranchId` +) AS `s0` ON `u`.`Key1` = `s0`.`CompositeId1` AND `u`.`Key2` = `s0`.`CompositeId2` AND `u`.`Key3` = `s0`.`CompositeId3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` + FROM ((`UnidirectionalJoinOneToThreePayloadFull` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `u3`.`LeftId`, `u3`.`RightId`, `u3`.`Payload`, `u4`.`Id`, `u4`.`Name` + FROM `UnidirectionalJoinOneSelfPayload` AS `u3` + INNER JOIN `UnidirectionalEntityOnes` AS `u4` ON `u3`.`RightId` = `u4`.`Id` + ) AS `s` ON `u1`.`Id` = `s`.`LeftId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference_unidirectional(bool async) + { + await base.Include_skip_navigation_and_reference_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId`, `s`.`Id`, `s`.`Name`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` +FROM (`UnidirectionalEntityTwos` AS `u` +LEFT JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`Id` = `u0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `u1`.`TwoSkipSharedId`, `u1`.`UnidirectionalEntityOneId`, `u2`.`Id`, `u2`.`Name` + FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u1` + INNER JOIN `UnidirectionalEntityOnes` AS `u2` ON `u1`.`UnidirectionalEntityOneId` = `u2`.`Id` +) AS `s` ON `u`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `u`.`Id`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId0`, `s0`.`ThreeId0`, `s0`.`Payload0`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `s`.`OneId` AS `OneId0`, `s`.`ThreeId` AS `ThreeId0`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` + FROM (`UnidirectionalJoinOneToThreePayloadFullShared` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN ( + SELECT `u2`.`OneId`, `u2`.`ThreeId`, `u2`.`Payload`, `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`Name`, `u3`.`ReferenceInverseId` + FROM `UnidirectionalJoinOneToThreePayloadFullShared` AS `u2` + INNER JOIN `UnidirectionalEntityThrees` AS `u3` ON `u2`.`ThreeId` = `u3`.`Id` + ) AS `s` ON `u1`.`Id` = `s`.`OneId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`OneId0`, `s0`.`ThreeId0` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_where_unidirectional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u0`.`ThreeId`, `u0`.`TwoId`, `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId` + FROM `UnidirectionalJoinTwoToThree` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`ThreeId` +ORDER BY `u`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Id], [u].[CollectionInverseId], [u].[ExtraId], [u].[Name], [u].[ReferenceInverseId], [t0].[SelfSkipSharedRightId], [t0].[UnidirectionalEntityTwoId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityTwos] AS [u] +LEFT JOIN ( + SELECT [t].[SelfSkipSharedRightId], [t].[UnidirectionalEntityTwoId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [u0].[SelfSkipSharedRightId], [u0].[UnidirectionalEntityTwoId], [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityTwoId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityTwoUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[SelfSkipSharedRightId] = [u1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [u].[Id] = [t0].[UnidirectionalEntityTwoId] +ORDER BY [u].[Id], [t0].[UnidirectionalEntityTwoId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [t0].[TwoSkipSharedId], [t0].[UnidirectionalEntityCompositeKeyKey1], [t0].[UnidirectionalEntityCompositeKeyKey2], [t0].[UnidirectionalEntityCompositeKeyKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[UnidirectionalEntityCompositeKeyKey1], [t].[UnidirectionalEntityCompositeKeyKey2], [t].[UnidirectionalEntityCompositeKeyKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [u0].[TwoSkipSharedId], [u0].[UnidirectionalEntityCompositeKeyKey1], [u0].[UnidirectionalEntityCompositeKeyKey2], [u0].[UnidirectionalEntityCompositeKeyKey3], [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityCompositeKeyKey1], [u0].[UnidirectionalEntityCompositeKeyKey2], [u0].[UnidirectionalEntityCompositeKeyKey3] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoSkipSharedId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [u].[Key1] = [t0].[UnidirectionalEntityCompositeKeyKey1] AND [u].[Key2] = [t0].[UnidirectionalEntityCompositeKeyKey2] AND [u].[Key3] = [t0].[UnidirectionalEntityCompositeKeyKey3] +ORDER BY [u].[Key1], [u].[Key2], [u].[Key3], [t0].[UnidirectionalEntityCompositeKeyKey1], [t0].[UnidirectionalEntityCompositeKeyKey2], [t0].[UnidirectionalEntityCompositeKeyKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [u0].[Id], [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3], [u0].[ThreeId], [u1].[Id] AS [Id0], [u1].[CollectionInverseId], [u1].[Name], [u1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalJoinThreeToCompositeKeyFull] AS [u0] + INNER JOIN [UnidirectionalEntityThrees] AS [u1] ON [u0].[ThreeId] = [u1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [u].[Key1] = [t0].[CompositeId1] AND [u].[Key2] = [t0].[CompositeId2] AND [u].[Key3] = [t0].[CompositeId3] +ORDER BY [u].[Key1], [u].[Key2], [u].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` +FROM `UnidirectionalLeaves` AS `u` +LEFT JOIN ( + SELECT `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `u1`.`Key1`, `u1`.`Key2`, `u1`.`Key3`, `u1`.`Name`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` + FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` + INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u1` ON `u0`.`CompositeId1` = `u1`.`Key1` AND `u0`.`CompositeId2` = `u1`.`Key2` AND `u0`.`CompositeId3` = `u1`.`Key3`) + LEFT JOIN ( + SELECT `u2`.`TwoSkipSharedId`, `u2`.`UnidirectionalEntityCompositeKeyKey1`, `u2`.`UnidirectionalEntityCompositeKeyKey2`, `u2`.`UnidirectionalEntityCompositeKeyKey3`, `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`ExtraId`, `u3`.`Name`, `u3`.`ReferenceInverseId` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo` AS `u2` + INNER JOIN `UnidirectionalEntityTwos` AS `u3` ON `u2`.`TwoSkipSharedId` = `u3`.`Id` + ) AS `s` ON `u1`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u1`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u1`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` + WHERE `u1`.`Key1` < 5 +) AS `s0` ON `u`.`Id` = `s0`.`LeafId` +ORDER BY `u`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_unidirectional(bool async) + { + await base.Filter_include_on_skip_navigation_combined_unidirectional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Throws_when_different_filtered_include_unidirectional(bool async) + { + await base.Throws_when_different_filtered_include_unidirectional(async); + + AssertSql(); + } + + public override async Task Includes_accessed_via_different_path_are_merged_unidirectional(bool async) + { + await base.Includes_accessed_via_different_path_are_merged_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Id], [u].[CollectionInverseId], [u].[Name], [u].[ReferenceInverseId], [t0].[OneId], [t0].[ThreeId], [t0].[Payload], [t0].[Id], [t0].[Name], [t0].[OneId0], [t0].[ThreeId0], [t0].[Payload0], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name0], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityThrees] AS [u] +LEFT JOIN ( + SELECT [u0].[OneId], [u0].[ThreeId], [u0].[Payload], [u1].[Id], [u1].[Name], [t].[OneId] AS [OneId0], [t].[ThreeId] AS [ThreeId0], [t].[Payload] AS [Payload0], [t].[Id] AS [Id0], [t].[CollectionInverseId], [t].[Name] AS [Name0], [t].[ReferenceInverseId] + FROM [UnidirectionalJoinOneToThreePayloadFullShared] AS [u0] + INNER JOIN [UnidirectionalEntityOnes] AS [u1] ON [u0].[OneId] = [u1].[Id] + LEFT JOIN ( + SELECT [u2].[OneId], [u2].[ThreeId], [u2].[Payload], [u3].[Id], [u3].[CollectionInverseId], [u3].[Name], [u3].[ReferenceInverseId] + FROM [UnidirectionalJoinOneToThreePayloadFullShared] AS [u2] + INNER JOIN [UnidirectionalEntityThrees] AS [u3] ON [u2].[ThreeId] = [u3].[Id] + ) AS [t] ON [u1].[Id] = [t].[OneId] +) AS [t0] ON [u].[Id] = [t0].[ThreeId] +ORDER BY [u].[Id], [t0].[OneId], [t0].[ThreeId], [t0].[Id], [t0].[OneId0], [t0].[ThreeId0] +"""); + } + + public override async Task Select_many_over_skip_navigation_where_non_equality_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_where_non_equality_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` AS `OneId0`, `u1`.`Id` AS `Id0` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId0` AND `u`.`Id` <> `s`.`Id0` +"""); + } + + public override async Task Contains_on_skip_collection_navigation_unidirectional(bool async) + { + await base.Contains_on_skip_collection_navigation_unidirectional(async); + + AssertSql( + """ +@entity_equality_two_Id='1' (Nullable = true) + +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND `u1`.`Id` = @entity_equality_two_Id) +"""); + } + + public override async Task GetType_in_hierarchy_in_base_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_base_type_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` +FROM `UnidirectionalRoots` AS `u` +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type_unidirectional(async); + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` +FROM `UnidirectionalBranches` AS `u` +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` +FROM `UnidirectionalLeaves` AS `u` +"""); + } + + public override async Task GetType_in_hierarchy_in_querying_base_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_querying_base_type_unidirectional(async); + + AssertSql( + """ +SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `u1`.`Discriminator` +FROM ( + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` + FROM `UnidirectionalBranches` AS `u` + UNION ALL + SELECT `u0`.`Id`, `u0`.`Name`, `u0`.`Number`, `u0`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` + FROM `UnidirectionalLeaves` AS `u0` +) AS `u1` +WHERE FALSE +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPCRelationshipsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPCRelationshipsQueryLibRedTest.cs new file mode 100644 index 00000000..0c8ef2d0 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPCRelationshipsQueryLibRedTest.cs @@ -0,0 +1,2746 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPCRelationshipsQueryLibRedTest + : TPCRelationshipsQueryTestBase +{ + public TPCRelationshipsQueryLibRedTest( + TPCRelationshipsQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override void Changes_in_derived_related_entities_are_detected() + { + base.Changes_in_derived_related_entities_are_detected(); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`BaseInheritanceRelationshipEntityId`, `s`.`Id1`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `s`.`Id0`, `s`.`Name0`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator` +FROM ((( + SELECT TOP 2 `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id` AS `Id0`, `o`.`Name` AS `Name0`, `d0`.`Id` AS `Id1`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM (( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` + ) AS `u` + LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) + LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` + WHERE `u`.`Name` = 'Derived1(4)' +) AS `s` +LEFT JOIN `OwnedCollections` AS `o0` ON `s`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d2` +) AS `u0` ON `s`.`Id` = `u0`.`BaseParentId` +ORDER BY `s`.`Id`, `s`.`BaseInheritanceRelationshipEntityId`, `s`.`Id1`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance(bool async) + { + await base.Include_collection_without_inheritance(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `CollectionsOnBase` AS `c` ON `u`.`Id` = `c`.`ParentId` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_reverse(bool async) + { + await base.Include_collection_without_inheritance_reverse(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM ((((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `c`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter(bool async) + { + await base.Include_collection_without_inheritance_with_filter(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `CollectionsOnBase` AS `c` ON `u`.`Id` = `c`.`ParentId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter_reverse(bool async) + { + await base.Include_collection_without_inheritance_with_filter_reverse(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM ((((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL +ORDER BY `c`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance(bool async) + { + await base.Include_collection_with_inheritance(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d2` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived1(bool async) + { + await base.Include_collection_with_inheritance_on_derived1(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d1` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId` +ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived2(bool async) + { + await base.Include_collection_with_inheritance_on_derived2(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`Id`, `u`.`Name`, `u`.`ParentId`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseCollectionOnDerived' AS `Discriminator` + FROM `BaseCollectionsOnDerived` AS `b` + UNION ALL + SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` + FROM `DerivedCollectionsOnDerived` AS `d1` +) AS `u` ON `d`.`Id` = `u`.`ParentId` +ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived3(bool async) + { + await base.Include_collection_with_inheritance_on_derived3(async); + + AssertSql( +""" +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `d1`.`Id`, `d1`.`Name`, `d1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedCollectionsOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived_reverse(bool async) + { + await base.Include_collection_with_inheritance_on_derived_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentId`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (((( + SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseCollectionOnDerived' AS `Discriminator` + FROM `BaseCollectionsOnDerived` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` + FROM `DerivedCollectionsOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`ParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance_reverse(bool async) + { + await base.Include_collection_with_inheritance_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM ((((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter(bool async) + { + await base.Include_collection_with_inheritance_with_filter(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d2` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter_reverse(bool async) + { + await base.Include_collection_with_inheritance_with_filter_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM ((((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance(bool async) + { + await base.Include_reference_without_inheritance(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `ReferencesOnBase` AS `r` ON `u`.`Id` = `r`.`ParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_on_derived1(bool async) + { + await base.Include_reference_without_inheritance_on_derived1(async); + + AssertSql( +""" +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN `ReferencesOnBase` AS `r` ON `d`.`Id` = `r`.`ParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_on_derived2(bool async) + { + await base.Include_reference_without_inheritance_on_derived2(async); + + AssertSql( +""" +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN `ReferencesOnDerived` AS `r` ON `d`.`Id` = `r`.`ParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_on_derived_reverse(bool async) + { + await base.Include_reference_without_inheritance_on_derived_reverse(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM (((`ReferencesOnDerived` AS `r` +LEFT JOIN `DerivedEntities` AS `d` ON `r`.`ParentId` = `d`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_reverse(bool async) + { + await base.Include_reference_without_inheritance_reverse(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM ((((`ReferencesOnBase` AS `r` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `r`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_with_filter(bool async) + { + await base.Include_reference_without_inheritance_with_filter(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `ReferencesOnBase` AS `r` ON `u`.`Id` = `r`.`ParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_with_filter_reverse(bool async) + { + await base.Include_reference_without_inheritance_with_filter_reverse(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM ((((`ReferencesOnBase` AS `r` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `r`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `r`.`Name` <> 'Bar' OR `r`.`Name` IS NULL +ORDER BY `r`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance(bool async) + { + await base.Include_reference_with_inheritance(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived1(bool async) + { + await base.Include_reference_with_inheritance_on_derived1(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived2(bool async) + { + await base.Include_reference_with_inheritance_on_derived2(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseReferenceOnDerived' AS `Discriminator` + FROM `BaseReferencesOnDerived` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` + FROM `DerivedReferencesOnDerived` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived4(bool async) + { + await base.Include_reference_with_inheritance_on_derived4(async); + + AssertSql( +""" +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN `DerivedReferencesOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_reverse(bool async) + { + await base.Include_reference_with_inheritance_on_derived_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseReferenceOnDerived' AS `Discriminator` + FROM `BaseReferencesOnDerived` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` + FROM `DerivedReferencesOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`BaseParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter1(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter1(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `d`.`Name` <> 'Bar' OR `d`.`Name` IS NULL +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter2(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter2(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseReferenceOnDerived' AS `Discriminator` + FROM `BaseReferencesOnDerived` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` + FROM `DerivedReferencesOnDerived` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `d`.`Name` <> 'Bar' OR `d`.`Name` IS NULL +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter4(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter4(async); + + AssertSql( +""" +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId` +FROM (((`DerivedEntities` AS `d` +LEFT JOIN `DerivedReferencesOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `d`.`Name` <> 'Bar' OR `d`.`Name` IS NULL +ORDER BY `d`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter_reverse(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseReferenceOnDerived' AS `Discriminator` + FROM `BaseReferencesOnDerived` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` + FROM `DerivedReferencesOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`BaseParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_reverse(bool async) + { + await base.Include_reference_with_inheritance_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM ((((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_with_filter(bool async) + { + await base.Include_reference_with_inheritance_with_filter(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_with_filter_reverse(bool async) + { + await base.Include_reference_with_inheritance_with_filter_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM ((((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_self_reference_with_inheritance(bool async) + { + await base.Include_self_reference_with_inheritance(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `d0`.`Name`, `d0`.`BaseId`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `o2`.`Name`, `o0`.`Id`, `o0`.`Name`, `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (((((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = IIF(`d0`.`BaseId` IS NULL, NULL, CLNG(`d0`.`BaseId`))) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o2` ON `d0`.`Id` = `o2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `d0`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `d3`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_self_reference_with_inheritance_reverse(bool async) + { + await base.Include_self_reference_with_inheritance_reverse(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `o2`.`Name`, `o0`.`Id`, `o0`.`Name`, `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM (((((((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u` ON IIF(`d`.`BaseId` IS NULL, NULL, CLNG(`d`.`BaseId`)) = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `d`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o2` ON `u`.`Id` = `o2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `d3`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_collection_reference_on_non_entity_base(bool async) + { + await base.Nested_include_collection_reference_on_non_entity_base(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0` +FROM `ReferencedEntities` AS `r` +LEFT JOIN ( + SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` + FROM `PrincipalEntities` AS `p` + LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` +ORDER BY `r`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection(bool async) + { + await base.Nested_include_with_inheritance_collection_collection(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s`.`Id0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator0` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id` AS `Id0`, `u1`.`Name` AS `Name0`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` AS `Discriminator0` + FROM ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d2` + ) AS `u0` + LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` + ) AS `u1` ON `u0`.`Id` = `u1`.`ParentCollectionId` +) AS `s` ON `u`.`Id` = `s`.`BaseParentId` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection_reverse(bool async) + { + await base.Nested_include_with_inheritance_collection_collection_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM (((((( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u1`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference(bool async) + { + await base.Nested_include_with_inheritance_collection_reference(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s`.`Id0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator0` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id` AS `Id0`, `u1`.`Name` AS `Name0`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` AS `Discriminator0` + FROM ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d2` + ) AS `u0` + LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` + FROM `NestedReferences` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` + FROM `NestedReferencesDerived` AS `n0` + ) AS `u1` ON `u0`.`Id` = `u1`.`ParentCollectionId` +) AS `s` ON `u`.`Id` = `s`.`BaseParentId` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference_reverse(bool async) + { + await base.Nested_include_with_inheritance_collection_reference_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM (((((( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` + FROM `NestedReferences` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` + FROM `NestedReferencesDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u1`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection(bool async) + { + await base.Nested_include_with_inheritance_reference_collection(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` +FROM (((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u1` ON `u0`.`Id` = `u1`.`ParentReferenceId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_on_base(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_on_base(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`ParentCollectionId`, `u0`.`ParentReferenceId`, `u0`.`Discriminator` +FROM ((((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u0` ON `u`.`Id` = `u0`.`ParentReferenceId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_reverse(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM (((((( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u1`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_reference(bool async) + { + await base.Nested_include_with_inheritance_reference_reference(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Name`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` +FROM (((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` + FROM `NestedReferences` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` + FROM `NestedReferencesDerived` AS `n0` +) AS `u1` ON `u0`.`Id` = `u1`.`ParentReferenceId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_reference_on_base(bool async) + { + await base.Nested_include_with_inheritance_reference_reference_on_base(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator`, `u0`.`Name`, `u0`.`ParentCollectionId`, `u0`.`ParentReferenceId`, `u0`.`Discriminator` +FROM ((((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` + FROM `NestedReferences` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` + FROM `NestedReferencesDerived` AS `n0` +) AS `u0` ON `u`.`Id` = `u0`.`ParentReferenceId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_reference_reverse(bool async) + { + await base.Nested_include_with_inheritance_reference_reference_reverse(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM (((((( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` + FROM `NestedReferences` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` + FROM `NestedReferencesDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u1`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Collection_projection_on_base_type(bool async) + { + await base.Collection_projection_on_base_type(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator` +FROM ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id` +"""); + } + + public override async Task Include_on_derived_type_with_queryable_Cast(bool async) + { + await base.Include_on_derived_type_with_queryable_Cast(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `d2`.`Id`, `d2`.`Name`, `d2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId` +FROM ((((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedCollectionsOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_split(bool async) + { + await base.Include_collection_with_inheritance_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d3`.`Id`, `d3`.`BaseParentId`, `d3`.`Name`, `d3`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d3` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_reverse_split(bool async) + { + await base.Include_collection_with_inheritance_reverse_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM ((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM (((( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u0`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u0`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u0`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +""", + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM (((( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u0`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u0`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u0`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter_split(bool async) + { + await base.Include_collection_with_inheritance_with_filter_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id`, `b`.`Name` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id`, `b`.`Name` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id`, `b`.`Name` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d3`.`Id`, `d3`.`BaseParentId`, `d3`.`Name`, `d3`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d3` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter_reverse_split(bool async) + { + await base.Include_collection_with_inheritance_with_filter_reverse_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM ((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM (((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u0`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u0`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE (`u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL) AND (`u0`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +""", + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM (((( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u0`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u0`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE (`u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL) AND (`u0`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_split(bool async) + { + await base.Include_collection_without_inheritance_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `CollectionsOnBase` AS `c` ON `u`.`Id` = `c`.`ParentId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_reverse_split(bool async) + { + await base.Include_collection_without_inheritance_reverse_split(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM ((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `c`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM (((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM (((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter_split(bool async) + { + await base.Include_collection_without_inheritance_with_filter_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id`, `b`.`Name` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id`, `b`.`Name` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id`, `b`.`Name` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `CollectionsOnBase` AS `c` ON `u`.`Id` = `c`.`ParentId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter_reverse_split(bool async) + { + await base.Include_collection_without_inheritance_with_filter_reverse_split(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM ((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL +ORDER BY `c`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM (((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`u`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM (((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`u`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived1_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived1_split(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM (`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM (`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM (`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d2` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived2_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived2_split(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM (`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM (`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentId`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM (`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseCollectionOnDerived' AS `Discriminator` + FROM `BaseCollectionsOnDerived` AS `b` + UNION ALL + SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` + FROM `DerivedCollectionsOnDerived` AS `d2` +) AS `u` ON `d`.`Id` = `u`.`ParentId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived3_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived3_split(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM (`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM (`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM (`DerivedEntities` AS `d` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedCollectionsOnDerived` AS `d2` ON `d`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived_reverse_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived_reverse_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentId`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (( + SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseCollectionOnDerived' AS `Discriminator` + FROM `BaseCollectionsOnDerived` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` + FROM `DerivedCollectionsOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`ParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM ((( + SELECT `b`.`Id`, `b`.`ParentId` + FROM `BaseCollectionsOnDerived` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`ParentId` + FROM `DerivedCollectionsOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`ParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o1` ON `d0`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `d0`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM ((( + SELECT `b`.`Id`, `b`.`ParentId` + FROM `BaseCollectionsOnDerived` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`ParentId` + FROM `DerivedCollectionsOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`ParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `d0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `d0`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_split(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator` +FROM ((( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM (((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u`.`Id` = `d2`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +""", + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM (((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u`.`Id` = `d2`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +""", + // + """ +SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM (((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u`.`Id` = `d2`.`Id`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u1` ON `u0`.`Id` = `u1`.`ParentReferenceId` +WHERE `u0`.`Id` IS NOT NULL AND `u1`.`ParentReferenceId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_on_base_split(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_on_base_split(async); + + AssertSql( + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator` +FROM (`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM ((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM ((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `d`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +""", + // + """ +SELECT `u0`.`Id`, `u0`.`Name`, `u0`.`ParentCollectionId`, `u0`.`ParentReferenceId`, `u0`.`Discriminator`, `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +FROM ((`DerivedEntities` AS `d` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u0` ON `u`.`Id` = `u0`.`ParentReferenceId` +WHERE `u`.`Id` IS NOT NULL AND `u0`.`ParentReferenceId` IS NOT NULL +ORDER BY `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_reverse_split(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_reverse_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM (((( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM ((((( + SELECT `n`.`Id`, `n`.`ParentReferenceId` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`ParentReferenceId` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u1`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +""", + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM ((((( + SELECT `n`.`Id`, `n`.`ParentReferenceId` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`ParentReferenceId` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u1`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference_split(bool async) + { + await base.Nested_include_with_inheritance_collection_reference_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s`.`Id0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator0` AS `Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN ( + SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id` AS `Id0`, `u1`.`Name` AS `Name0`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` AS `Discriminator0` + FROM ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d3`.`Id`, `d3`.`BaseParentId`, `d3`.`Name`, `d3`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d3` + ) AS `u0` + LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` + FROM `NestedReferences` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` + FROM `NestedReferencesDerived` AS `n0` + ) AS `u1` ON `u0`.`Id` = `u1`.`ParentCollectionId` +) AS `s` ON `u`.`Id` = `s`.`BaseParentId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference_reverse_split(bool async) + { + await base.Nested_include_with_inheritance_collection_reference_reverse_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM (((( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` + FROM `NestedReferences` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` + FROM `NestedReferencesDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM ((((( + SELECT `n`.`Id`, `n`.`ParentCollectionId` + FROM `NestedReferences` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`ParentCollectionId` + FROM `NestedReferencesDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u1`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +""", + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM ((((( + SELECT `n`.`Id`, `n`.`ParentCollectionId` + FROM `NestedReferences` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`ParentCollectionId` + FROM `NestedReferencesDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u1`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection_split(bool async) + { + await base.Nested_include_with_inheritance_collection_collection_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d3`.`Id`, `d3`.`BaseParentId`, `d3`.`Name`, `d3`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d3` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `u0`.`Id` +""", + // + """ +SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `u0`.`Id` +FROM (((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d3`.`Id`, `d3`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d3` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u1` ON `u0`.`Id` = `u1`.`ParentCollectionId` +WHERE `u0`.`Id` IS NOT NULL AND `u1`.`ParentCollectionId` IS NOT NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `u0`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection_reverse_split(bool async) + { + await base.Nested_include_with_inheritance_collection_collection_reverse_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` +FROM (((( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM ((((( + SELECT `n`.`Id`, `n`.`ParentCollectionId` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`ParentCollectionId` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u1`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +""", + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +FROM ((((( + SELECT `n`.`Id`, `n`.`ParentCollectionId` + FROM `NestedCollections` AS `n` + UNION ALL + SELECT `n0`.`Id`, `n0`.`ParentCollectionId` + FROM `NestedCollectionsDerived` AS `n0` +) AS `u` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + UNION ALL + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u1`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` +"""); + } + + public override async Task Nested_include_collection_reference_on_non_entity_base_split(bool async) + { + await base.Nested_include_collection_reference_on_non_entity_base_split(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `ReferencedEntities` AS `r` +ORDER BY `r`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0`, `r`.`Id` +FROM `ReferencedEntities` AS `r` +INNER JOIN ( + SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` + FROM `PrincipalEntities` AS `p` + LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` +ORDER BY `r`.`Id` +"""); + } + + public override async Task Collection_projection_on_base_type_split(bool async) + { + await base.Collection_projection_on_base_type_split(async); + + AssertSql( + """ +SELECT `u`.`Id` +FROM ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +ORDER BY `u`.`Id` +""", + // + """ +SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u`.`Id` +FROM ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +INNER JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + UNION ALL + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id` +"""); + } + + public override async Task Include_on_derived_type_with_queryable_Cast_split(bool async) + { + await base.Include_on_derived_type_with_queryable_Cast_split(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` +FROM (( + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` +""", + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +""", + // + """ +SELECT `d3`.`Id`, `d3`.`Name`, `d3`.`ParentId`, `d3`.`DerivedInheritanceRelationshipEntityId`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +FROM ((( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` + UNION ALL + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedCollectionsOnDerived` AS `d3` ON `u`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override void Entity_can_make_separate_relationships_with_base_type_and_derived_type_both() + { + base.Entity_can_make_separate_relationships_with_base_type_and_derived_type_both(); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class TPCRelationshipsQueryLibRedFixture : TPCRelationshipsQueryRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPHInheritanceQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPHInheritanceQueryLibRedFixture.cs new file mode 100644 index 00000000..f7065b7e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPHInheritanceQueryLibRedFixture.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPHInheritanceQueryLibRedFixture : TPHInheritanceQueryFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPHInheritanceQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPHInheritanceQueryLibRedTest.cs new file mode 100644 index 00000000..ec4ff00d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPHInheritanceQueryLibRedTest.cs @@ -0,0 +1,749 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.InheritanceModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPHInheritanceQueryLibRedTest(TPHInheritanceQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : TPHInheritanceQueryTestBase(fixture, testOutputHelper) +{ + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + [ConditionalFact] + public virtual void Common_property_shares_column() + { + using var context = CreateContext(); + var liltType = context.Model.FindEntityType(typeof(Lilt)); + var cokeType = context.Model.FindEntityType(typeof(Coke)); + var teaType = context.Model.FindEntityType(typeof(Tea)); + + Assert.Equal("SugarGrams", cokeType.FindProperty("SugarGrams").GetColumnName()); + Assert.Equal("CaffeineGrams", cokeType.FindProperty("CaffeineGrams").GetColumnName()); + Assert.Equal("CokeCO2", cokeType.FindProperty("Carbonation").GetColumnName()); + + Assert.Equal("SugarGrams", liltType.FindProperty("SugarGrams").GetColumnName()); + Assert.Equal("LiltCO2", liltType.FindProperty("Carbonation").GetColumnName()); + + Assert.Equal("CaffeineGrams", teaType.FindProperty("CaffeineGrams").GetColumnName()); + Assert.Equal("HasMilk", teaType.FindProperty("HasMilk").GetColumnName()); + } + + public override async Task Can_query_when_shared_column(bool async) + { + await base.Can_query_when_shared_column(async); + + AssertSql( +""" +SELECT TOP 2 `d`.`Id`, `d`.`Discriminator`, `d`.`SortIndex`, `d`.`CaffeineGrams`, `d`.`CokeCO2`, `d`.`SugarGrams` +FROM `Drinks` AS `d` +WHERE `d`.`Discriminator` = 1 +""", + // +""" +SELECT TOP 2 `d`.`Id`, `d`.`Discriminator`, `d`.`SortIndex`, `d`.`LiltCO2`, `d`.`SugarGrams` +FROM `Drinks` AS `d` +WHERE `d`.`Discriminator` = 2 +""", + // +""" +SELECT TOP 2 `d`.`Id`, `d`.`Discriminator`, `d`.`SortIndex`, `d`.`CaffeineGrams`, `d`.`HasMilk` +FROM `Drinks` AS `d` +WHERE `d`.`Discriminator` = 3 +"""); + } + + public override void FromSql_on_root() + { + base.FromSql_on_root(); + + AssertSql( +""" +select * from `Animals` +"""); + } + + public override void FromSql_on_derived() + { + base.FromSql_on_derived(); + + AssertSql( +""" +SELECT `m`.`Id`, `m`.`CountryId`, `m`.`Discriminator`, `m`.`Name`, `m`.`Species`, `m`.`EagleId`, `m`.`IsFlightless`, `m`.`Group` +FROM ( + select * from `Animals` +) AS `m` +WHERE `m`.`Discriminator` = 'Eagle' +"""); + } + + public override async Task Can_query_all_types_when_shared_column(bool async) + { + await base.Can_query_all_types_when_shared_column(async); + + AssertSql( +""" +SELECT `d`.`Id`, `d`.`Discriminator`, `d`.`SortIndex`, `d`.`CaffeineGrams`, `d`.`CokeCO2`, `d`.`SugarGrams`, `d`.`LiltCO2`, `d`.`HasMilk` +FROM `Drinks` AS `d` +"""); + } + + public override async Task Can_use_of_type_animal(bool async) + { + await base.Can_use_of_type_animal(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_is_kiwi(bool async) + { + await base.Can_use_is_kiwi(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Can_use_is_kiwi_with_cast(bool async) + { + await base.Can_use_is_kiwi_with_cast(async); + + AssertSql( +""" +SELECT IIF(`a`.`Discriminator` = 'Kiwi', `a`.`FoundOn`, CBYTE(0)) AS `Value` +FROM `Animals` AS `a` +"""); + } + + public override async Task Can_use_is_kiwi_with_other_predicate(bool async) + { + await base.Can_use_is_kiwi_with_other_predicate(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' AND `a`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_is_kiwi_in_projection(bool async) + { + await base.Can_use_is_kiwi_in_projection(async); + + AssertSql( + """ +SELECT `a`.`Discriminator` = 'Kiwi' +FROM `Animals` AS `a` +"""); + } + + public override async Task Can_use_of_type_bird(bool async) + { + await base.Can_use_of_type_bird(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_predicate(bool async) + { + await base.Can_use_of_type_bird_predicate(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`CountryId` = 1 +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_with_projection(bool async) + { + await base.Can_use_of_type_bird_with_projection(async); + + AssertSql( +""" +SELECT `a`.`EagleId` +FROM `Animals` AS `a` +"""); + } + + public override async Task Can_use_of_type_bird_first(bool async) + { + await base.Can_use_of_type_bird_first(async); + + AssertSql( +""" +SELECT TOP 1 `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_kiwi(bool async) + { + await base.Can_use_of_type_kiwi(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Can_use_of_type_rose(bool async) + { + await base.Can_use_of_type_rose(async); + + AssertSql( +""" +SELECT `p`.`Species`, `p`.`CountryId`, `p`.`Genus`, `p`.`Name`, `p`.`HasThorns` +FROM `Plants` AS `p` +WHERE `p`.`Genus` = 0 +"""); + } + + public override async Task Can_query_all_animals(bool async) + { + await base.Can_query_all_animals(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_query_all_animal_views(bool async) + { + await base.Can_query_all_animal_views(async); + + AssertSql( +""" +SELECT `m`.`CountryId`, `m`.`Discriminator`, `m`.`Name`, `m`.`EagleId`, `m`.`IsFlightless`, `m`.`Group`, `m`.`FoundOn` +FROM ( + SELECT * FROM Animals +) AS `m` +ORDER BY `m`.`CountryId` +"""); + } + + public override async Task Can_query_all_plants(bool async) + { + await base.Can_query_all_plants(async); + + AssertSql( +""" +SELECT `p`.`Species`, `p`.`CountryId`, `p`.`Genus`, `p`.`Name`, `p`.`HasThorns` +FROM `Plants` AS `p` +ORDER BY `p`.`Species` +"""); + } + + public override async Task Filter_on_property_inside_complex_type_on_derived_type(bool async) + { + await base.Filter_on_property_inside_complex_type_on_derived_type(async); + + AssertSql(); + } + + public override async Task Can_filter_all_animals(bool async) + { + await base.Can_filter_all_animals(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Name` = 'Great spotted kiwi' +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_query_all_birds(bool async) + { + await base.Can_query_all_birds(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_query_just_kiwis(bool async) + { + await base.Can_query_just_kiwis(async); + + AssertSql( +""" +SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Can_query_just_roses(bool async) + { + await base.Can_query_just_roses(async); + + AssertSql( +""" +SELECT TOP 2 `p`.`Species`, `p`.`CountryId`, `p`.`Genus`, `p`.`Name`, `p`.`HasThorns` +FROM `Plants` AS `p` +WHERE `p`.`Genus` = 0 +"""); + } + + public override async Task Can_include_prey(bool async) + { + await base.Can_include_prey(async); + + AssertSql( + """ +SELECT `a1`.`Id`, `a1`.`CountryId`, `a1`.`Discriminator`, `a1`.`Name`, `a1`.`Species`, `a1`.`EagleId`, `a1`.`IsFlightless`, `a1`.`Group`, `a0`.`Id`, `a0`.`CountryId`, `a0`.`Discriminator`, `a0`.`Name`, `a0`.`Species`, `a0`.`EagleId`, `a0`.`IsFlightless`, `a0`.`Group`, `a0`.`FoundOn` +FROM ( + SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group` + FROM `Animals` AS `a` + WHERE `a`.`Discriminator` = 'Eagle' +) AS `a1` +LEFT JOIN `Animals` AS `a0` ON `a1`.`Id` = `a0`.`EagleId` +ORDER BY `a1`.`Id` +"""); + } + + public override async Task Can_include_animals(bool async) + { + await base.Can_include_animals(async); + + AssertSql( +""" +SELECT `c`.`Id`, `c`.`Name`, `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Countries` AS `c` +LEFT JOIN `Animals` AS `a` ON `c`.`Id` = `a`.`CountryId` +ORDER BY `c`.`Name`, `c`.`Id` +"""); + } + + public override async Task Can_use_of_type_kiwi_where_north_on_derived_property(bool async) + { + await base.Can_use_of_type_kiwi_where_north_on_derived_property(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' AND `a`.`FoundOn` = CBYTE(0) +"""); + } + + public override async Task Can_use_of_type_kiwi_where_south_on_derived_property(bool async) + { + await base.Can_use_of_type_kiwi_where_south_on_derived_property(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' AND `a`.`FoundOn` = CBYTE(1) +"""); + } + + public override async Task Discriminator_used_when_projection_over_derived_type(bool async) + { + await base.Discriminator_used_when_projection_over_derived_type(async); + + AssertSql( +""" +SELECT `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Discriminator_used_when_projection_over_derived_type2(bool async) + { + await base.Discriminator_used_when_projection_over_derived_type2(async); + + AssertSql( +""" +SELECT `a`.`IsFlightless`, `a`.`Discriminator` +FROM `Animals` AS `a` +"""); + } + + public override async Task Discriminator_used_when_projection_over_of_type(bool async) + { + await base.Discriminator_used_when_projection_over_of_type(async); + + AssertSql( +""" +SELECT `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Can_insert_update_delete() + => await base.Can_insert_update_delete(); + + public override async Task Byte_enum_value_constant_used_in_projection(bool async) + { + await base.Byte_enum_value_constant_used_in_projection(async); + + AssertSql( + """ +SELECT IIF(`a`.`IsFlightless`, CBYTE(0), CBYTE(1)) +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Union_siblings_with_duplicate_property_in_subquery(bool async) + { + await base.Union_siblings_with_duplicate_property_in_subquery(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[Discriminator], [t].[CaffeineGrams], [t].[CokeCO2], [t].[SugarGrams], [t].[Carbonation], [t].[SugarGrams0], [t].[CaffeineGrams0], [t].[HasMilk] +FROM ( + SELECT [d].[Id], [d].[Discriminator], [d].[CaffeineGrams], [d].[CokeCO2], [d].[SugarGrams], NULL AS [CaffeineGrams0], NULL AS [HasMilk], NULL AS [Carbonation], NULL AS [SugarGrams0] + FROM [Drinks] AS [d] + WHERE [d].[Discriminator] = N'Coke' + UNION + SELECT [d0].[Id], [d0].[Discriminator], NULL AS [CaffeineGrams], NULL AS [CokeCO2], NULL AS [SugarGrams], [d0].[CaffeineGrams] AS [CaffeineGrams0], [d0].[HasMilk], NULL AS [Carbonation], NULL AS [SugarGrams0] + FROM [Drinks] AS [d0] + WHERE [d0].[Discriminator] = N'Tea' +) AS [t] +WHERE [t].[Id] > 0 +"""); + } + + public override async Task OfType_Union_subquery(bool async) + { + await base.OfType_Union_subquery(async); + + AssertSql( +""" +SELECT [t].[Species], [t].[CountryId], [t].[Discriminator], [t].[Name], [t].[EagleId], [t].[IsFlightless], [t].[FoundOn] +FROM ( + SELECT [a].[Species], [a].[CountryId], [a].[Discriminator], [a].[Name], [a].[EagleId], [a].[IsFlightless], [a].[FoundOn] + FROM [Animals] AS [a] + WHERE [a].[Discriminator] IN (N'Eagle', N'Kiwi') AND ([a].[Discriminator] = N'Kiwi') + UNION + SELECT [a0].[Species], [a0].[CountryId], [a0].[Discriminator], [a0].[Name], [a0].[EagleId], [a0].[IsFlightless], [a0].[FoundOn] + FROM [Animals] AS [a0] + WHERE [a0].[Discriminator] IN (N'Eagle', N'Kiwi') AND ([a0].[Discriminator] = N'Kiwi') +) AS [t] +WHERE ([t].[FoundOn] = CAST(0 AS tinyint)) AND [t].[FoundOn] IS NOT NULL +"""); + } + + public override async Task OfType_Union_OfType(bool async) + { + await base.OfType_Union_OfType(async); + + AssertSql(" "); + } + + public override async Task Subquery_OfType(bool async) + { + await base.Subquery_OfType(async); + + AssertSql( + """ +@p='5' + +SELECT DISTINCT `a0`.`Id`, `a0`.`CountryId`, `a0`.`Discriminator`, `a0`.`Name`, `a0`.`Species`, `a0`.`EagleId`, `a0`.`IsFlightless`, `a0`.`FoundOn` +FROM ( + SELECT TOP @p `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` + FROM `Animals` AS `a` + ORDER BY `a`.`Species` +) AS `a0` +WHERE `a0`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Union_entity_equality(bool async) + { + await base.Union_entity_equality(async); + + AssertSql( +""" +SELECT [t].[Species], [t].[CountryId], [t].[Discriminator], [t].[Name], [t].[EagleId], [t].[IsFlightless], [t].[Group], [t].[FoundOn] +FROM ( + SELECT [a].[Species], [a].[CountryId], [a].[Discriminator], [a].[Name], [a].[EagleId], [a].[IsFlightless], [a].[FoundOn], NULL AS [Group] + FROM [Animals] AS [a] + WHERE [a].[Discriminator] = N'Kiwi' + UNION + SELECT [a0].[Species], [a0].[CountryId], [a0].[Discriminator], [a0].[Name], [a0].[EagleId], [a0].[IsFlightless], NULL AS [FoundOn], [a0].[Group] + FROM [Animals] AS [a0] + WHERE [a0].[Discriminator] = N'Eagle' +) AS [t] +WHERE 0 = 1 +"""); + } + + public override async Task Member_access_on_intermediate_type_works() + { + await base.Member_access_on_intermediate_type_works(); + + AssertSql( +""" +SELECT `a`.`Name` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +ORDER BY `a`.`Name` +"""); + } + + public override void Casting_to_base_type_joining_with_query_type_works() + { + base.Casting_to_base_type_joining_with_query_type_works(); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `m`.`CountryId`, `m`.`Discriminator`, `m`.`Name`, `m`.`EagleId`, `m`.`IsFlightless`, `m`.`Group`, `m`.`FoundOn` +FROM `Animals` AS `a` +INNER JOIN ( + Select * from `Animals` +) AS `m` ON `a`.`Name` = `m`.`Name` +WHERE `a`.`Discriminator` = 'Eagle' +"""); + } + + public override async Task Is_operator_on_result_of_FirstOrDefault(bool async) + { + await base.Is_operator_on_result_of_FirstOrDefault(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE ( + SELECT TOP 1 `a0`.`Discriminator` + FROM `Animals` AS `a0` + WHERE `a0`.`Name` = 'Great spotted kiwi') = 'Kiwi' +ORDER BY `a`.`Species` +"""); + } + + public override async Task Selecting_only_base_properties_on_base_type(bool async) + { + await base.Selecting_only_base_properties_on_base_type(async); + + AssertSql( +""" +SELECT `a`.`Name` +FROM `Animals` AS `a` +"""); + } + + public override async Task Selecting_only_base_properties_on_derived_type(bool async) + { + await base.Selecting_only_base_properties_on_derived_type(async); + + AssertSql( +""" +SELECT `a`.`Name` +FROM `Animals` AS `a` +"""); + } + + public override async Task Can_use_backwards_of_type_animal(bool async) + { + await base.Can_use_backwards_of_type_animal(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Can_use_backwards_is_animal(bool async) + { + await base.Can_use_backwards_is_animal(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Discriminator_with_cast_in_shadow_property(bool async) + { + await base.Discriminator_with_cast_in_shadow_property(async); + + AssertSql( +""" +SELECT `a`.`Name` AS `Predator` +FROM `Animals` AS `a` +WHERE 'Kiwi' = `a`.`Discriminator` +"""); + } + + public override async Task Setting_foreign_key_to_a_different_type_throws() + { + await base.Setting_foreign_key_to_a_different_type_throws(); + + AssertSql( + """ +SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +""", + // + """ +@p0='0' +@p1='Eagle' (Nullable = false) (Size = 8) +@p2='2' (Nullable = true) +@p3='1' (Nullable = true) +@p4='False' (Nullable = true) +@p5='Bald eagle' (Size = 255) +@p6='Haliaeetus leucocephalus' (Size = 100) + +INSERT INTO `Animals` (`CountryId`, `Discriminator`, `EagleId`, `Group`, `IsFlightless`, `Name`, `Species`) +VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6); +SELECT `Id` +FROM `Animals` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Using_is_operator_on_multiple_type_with_no_result(bool async) + { + await base.Using_is_operator_on_multiple_type_with_no_result(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE FALSE +"""); + } + + public override async Task Using_is_operator_with_of_type_on_multiple_type_with_no_result(bool async) + { + await base.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group` +FROM `Animals` AS `a` +WHERE FALSE +"""); + } + + public override async Task Using_OfType_on_multiple_type_with_no_result(bool async) + { + await base.Using_OfType_on_multiple_type_with_no_result(async); + + AssertSql(); + } + + public override async Task GetType_in_hierarchy_in_abstract_base_type(bool async) + { + await base.GetType_in_hierarchy_in_abstract_base_type(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE FALSE +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE FALSE +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Eagle' +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling2(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group`, `a`.`FoundOn` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` <> 'Kiwi' +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTFiltersInheritanceQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTFiltersInheritanceQueryLibRedFixture.cs new file mode 100644 index 00000000..fdfeace6 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTFiltersInheritanceQueryLibRedFixture.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTFiltersInheritanceQueryLibRedFixture : TPTInheritanceQueryLibRedFixture +{ + public override bool EnableFilters + => true; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTFiltersInheritanceQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTFiltersInheritanceQueryLibRedTest.cs new file mode 100644 index 00000000..116f8f14 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTFiltersInheritanceQueryLibRedTest.cs @@ -0,0 +1,202 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTFiltersInheritanceQueryLibRedTest : TPTFiltersInheritanceQueryTestBase +{ + public TPTFiltersInheritanceQueryLibRedTest( + TPTFiltersInheritanceQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + //Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Can_use_of_type_animal(bool async) + { + await base.Can_use_of_type_animal(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_is_kiwi(bool async) + { + await base.Can_use_is_kiwi(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 AND `k`.`Id` IS NOT NULL +"""); + } + + public override async Task Can_use_is_kiwi_with_other_predicate(bool async) + { + await base.Can_use_is_kiwi_with_other_predicate(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 AND `k`.`Id` IS NOT NULL AND `a`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_is_kiwi_in_projection(bool async) + { + await base.Can_use_is_kiwi_in_projection(async); + + AssertSql( + """ +SELECT `k`.`Id` IS NOT NULL +FROM `Animals` AS `a` +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_of_type_bird(bool async) + { + await base.Can_use_of_type_bird(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 AND (`k`.`Id` IS NOT NULL OR `e`.`Id` IS NOT NULL) +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_predicate(bool async) + { + await base.Can_use_of_type_bird_predicate(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 AND (`k`.`Id` IS NOT NULL OR `e`.`Id` IS NOT NULL) +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_with_projection(bool async) + { + await base.Can_use_of_type_bird_with_projection(async); + + AssertSql( +""" +SELECT `a`.`Name` +FROM (`Animals` AS `a` +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 AND (`k`.`Id` IS NOT NULL OR `e`.`Id` IS NOT NULL) +"""); + } + + public override async Task Can_use_of_type_bird_first(bool async) + { + await base.Can_use_of_type_bird_first(async); + + AssertSql( +""" +SELECT TOP 1 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 AND (`k`.`Id` IS NOT NULL OR `e`.`Id` IS NOT NULL) +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_kiwi(bool async) + { + await base.Can_use_of_type_kiwi(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', NULL) AS `Discriminator` +FROM (`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 AND `k`.`Id` IS NOT NULL +"""); + } + + public override async Task Can_use_derived_set(bool async) + { + await base.Can_use_derived_set(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group` +FROM (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id` +WHERE `a`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_IgnoreQueryFilters_and_GetDatabaseValues(bool async) + { + await base.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async); + + AssertSql( + """ +SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group` +FROM (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id` +""", + // + """ +@p='1' + +SELECT TOP 1 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group` +FROM (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id` +WHERE `a`.`Id` = @p +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTGearsOfWarQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTGearsOfWarQueryLibRedFixture.cs new file mode 100644 index 00000000..0deb9fa9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTGearsOfWarQueryLibRedFixture.cs @@ -0,0 +1,110 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTGearsOfWarQueryLibRedFixture : TPTGearsOfWarQueryRelationalFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(g => g.Location).HasColumnType("varchar(100)"); + } + + protected override async Task SeedAsync(GearsOfWarContext context) + { + // Drop constraint to workaround LibRed limitation regarding compound foreign keys and NULL. + await context.Database.ExecuteSqlAsync($"ALTER TABLE `Gears` DROP CONSTRAINT `FK_Gears_Officers_LeaderNickname_LeaderSquadId`"); + + var squads = GearsOfWarData.CreateSquads(); + var missions = GearsOfWarData.CreateMissions(); + var squadMissions = GearsOfWarData.CreateSquadMissions(); + var cities = GearsOfWarData.CreateCities(); + var weapons = GearsOfWarData.CreateWeapons(); + var tags = GearsOfWarData.CreateTags(); + var gears = GearsOfWarData.CreateGears(); + var locustLeaders = GearsOfWarData.CreateLocustLeaders(); + var factions = GearsOfWarData.CreateFactions(); + var locustHighCommands = GearsOfWarData.CreateHighCommands(); + + foreach (var mission in missions) + { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } + } + + foreach (var tag in tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } + } + + GearsOfWarData.WireUp( + squads, missions, squadMissions, cities, weapons, tags, gears, locustLeaders, factions, locustHighCommands); + + context.Squads.AddRange(squads); + context.Missions.AddRange(missions); + context.SquadMissions.AddRange(squadMissions); + context.Cities.AddRange(cities); + context.Weapons.AddRange(weapons); + context.Tags.AddRange(tags); + context.Gears.AddRange(gears); + context.LocustLeaders.AddRange(locustLeaders); + context.Factions.AddRange(factions); + context.LocustHighCommands.AddRange(locustHighCommands); + await context.SaveChangesAsync(); + + GearsOfWarData.WireUp2(locustLeaders, factions); + + await context.SaveChangesAsync(); + } + + public override ISetSource GetExpectedData() + { + var data = (GearsOfWarData)base.GetExpectedData(); + + foreach (var mission in data.Missions) + { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } + mission.Timeline = LibRedTestHelpers.GetExpectedValue(mission.Timeline); + mission.Duration = new TimeSpan(mission.Duration.Days, mission.Duration.Hours, mission.Duration.Minutes, mission.Duration.Seconds); + } + + foreach (var tag in data.Tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } + } + + return data; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTGearsOfWarQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTGearsOfWarQueryLibRedTest.cs new file mode 100644 index 00000000..10bd17a6 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTGearsOfWarQueryLibRedTest.cs @@ -0,0 +1,10098 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Xunit; +using Xunit.Abstractions; +using Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel; +using System; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTGearsOfWarQueryLibRedTest : TPTGearsOfWarQueryRelationalTestBase +{ +#pragma warning disable IDE0060 // Remove unused parameter + public TPTGearsOfWarQueryLibRedTest(TPTGearsOfWarQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) +#pragma warning restore IDE0060 // Remove unused parameter + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Non_string_concat_uses_appropriate_type_mapping(bool async) + { + await base.Non_string_concat_uses_appropriate_type_mapping(async); + + AssertSql( + """ +SELECT `m`.`Duration` +FROM `Missions` AS `m` +"""); + } + + public override async Task Entity_equality_empty(bool async) + { + await base.Entity_equality_empty(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE FALSE +"""); + } + + public override async Task Include_multiple_one_to_one_and_one_to_many(bool async) + { + await base.Include_multiple_one_to_one_and_one_to_many(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Include_multiple_one_to_one_optional_and_one_to_one_required(bool async) + { + await base.Include_multiple_one_to_one_optional_and_one_to_one_required(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Banner`, `s0`.`Banner5`, `s0`.`InternalNumber`, `s0`.`Name` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` +"""); + } + + public override async Task Include_multiple_circular(bool async) + { + await base.Include_multiple_circular(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `s`.`Nickname` +"""); + } + + public override async Task Include_multiple_circular_with_filter(bool async) + { + await base.Include_multiple_circular_with_filter(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` +WHERE `g`.`Nickname` = 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `s`.`Nickname` +"""); + } + + public override async Task Include_using_alternate_key(bool async) + { + await base.Include_using_alternate_key(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `g`.`Nickname` = 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Include_navigation_on_derived_type(bool async) + { + await base.Include_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` +"""); + } + + public override async Task String_based_Include_navigation_on_derived_type(bool async) + { + await base.String_based_Include_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` +"""); + } + + public override async Task Select_Where_Navigation_Included(bool async) + { + await base.Select_Where_Navigation_Included(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` = 'Marcus' +"""); + } + + public override async Task Include_with_join_reference1(bool async) + { + await base.Include_with_join_reference1(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +"""); + } + + public override async Task Include_with_join_reference2(bool async) + { + await base.Include_with_join_reference2(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `s`.`CityOfBirthName` = `c`.`Name` +WHERE `s`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +"""); + } + + public override async Task Include_with_join_collection1(bool async) + { + await base.Include_with_join_collection1(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task Include_with_join_collection2(bool async) + { + await base.Include_with_join_collection2(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Include_where_list_contains_navigation(bool async) + { + await base.Include_where_list_contains_navigation(async); + + AssertSql( + """ +SELECT `t`.`Id` +FROM `Tags` AS `t` +""", + // + """ +@tags1='b39a6fba-9026-4d69-828e-fd7068673e57' +@tags2='34c8d86e-a4ac-4be5-827f-584dda348a07' +@tags3='70534e05-782c-4052-8720-c2c54481ce5f' +@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34' +@tags5='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags6='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags7='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags8='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags9='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags10='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Id` IS NOT NULL AND `t`.`Id` IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10) +"""); + } + + public override async Task Include_where_list_contains_navigation2(bool async) + { + await base.Include_where_list_contains_navigation2(async); + + AssertSql( + """ +SELECT `t`.`Id` +FROM `Tags` AS `t` +""", + // + """ +@tags1='b39a6fba-9026-4d69-828e-fd7068673e57' +@tags2='34c8d86e-a4ac-4be5-827f-584dda348a07' +@tags3='70534e05-782c-4052-8720-c2c54481ce5f' +@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34' +@tags5='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags6='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags7='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags8='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags9='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags10='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `c`.`Location` IS NOT NULL AND `t`.`Id` IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10) +"""); + } + + public override async Task Navigation_accessed_twice_outside_and_inside_subquery(bool async) + { + await base.Navigation_accessed_twice_outside_and_inside_subquery(async); + + AssertSql( + """ +SELECT `t`.`Id` +FROM `Tags` AS `t` +""", + // + """ +@tags1='b39a6fba-9026-4d69-828e-fd7068673e57' +@tags2='34c8d86e-a4ac-4be5-827f-584dda348a07' +@tags3='70534e05-782c-4052-8720-c2c54481ce5f' +@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34' +@tags5='df36f493-463f-4123-83f9-6b135deeb7ba' +@tags6='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags7='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags8='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags9='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' +@tags10='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Id` IS NOT NULL AND `t`.`Id` IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10) +"""); + } + + public override async Task Include_with_join_multi_level(bool async) + { + await base.Include_with_join_multi_level(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `c`.`Name`, `s`.`Nickname` +"""); + } + + public override async Task Include_with_join_and_inheritance1(bool async) + { + await base.Include_with_join_and_inheritance1(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `s`.`CityOfBirthName` = `c`.`Name` +WHERE `s`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +"""); + } + + public override async Task Include_with_join_and_inheritance_with_orderby_before_and_after_include(bool async) + { + await base.Include_with_join_and_inheritance_with_orderby_before_and_after_include(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `t`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s0` ON `s`.`Nickname` = `s0`.`LeaderNickname` AND `s`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY NOT (`s`.`HasSoulPatch`), `s`.`Nickname` DESC, `t`.`Id`, `s`.`SquadId`, `s0`.`Nickname` +"""); + } + + public override async Task Include_with_join_and_inheritance2(bool async) + { + await base.Include_with_join_and_inheritance2(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task Include_with_join_and_inheritance3(bool async) + { + await base.Include_with_join_and_inheritance3(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `t`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s0` ON `s`.`Nickname` = `s0`.`LeaderNickname` AND `s`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname` +"""); + } + + public override async Task Include_with_nested_navigation_in_order_by(bool async) + { + await base.Include_with_nested_navigation_in_order_by(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `s`.`CityOfBirthName` = `c`.`Name` +WHERE `s`.`Nickname` <> 'Paduk' OR `s`.`Nickname` IS NULL +ORDER BY `c`.`Name`, `w`.`Id` +"""); + } + + public override async Task Where_count_subquery_without_collision(bool async) + { + await base.Where_count_subquery_without_collision(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) = 2 +"""); + } + + public override async Task Where_any_subquery_without_collision(bool async) + { + await base.Where_any_subquery_without_collision(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) +"""); + } + + public override async Task Select_inverted_boolean(bool async) + { + await base.Select_inverted_boolean(async); + + AssertSql( + """ +SELECT `w`.`Id`, NOT (`w`.`IsAutomatic`) AS `Manual` +FROM `Weapons` AS `w` +WHERE `w`.`IsAutomatic` +"""); + } + + public override async Task Select_inverted_nullable_boolean(bool async) + { + await base.Select_inverted_nullable_boolean(async); + + AssertSql( + """ +SELECT `f`.`Id`, NOT (`l`.`Eradicated`) AS `Alive` +FROM `Factions` AS `f` +INNER JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +"""); + } + + public override async Task Select_comparison_with_null(bool async) + { + await base.Select_comparison_with_null(async); + + AssertSql( + """ +@ammunitionType='1' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType` = @ammunitionType AND `w`.`AmmunitionType` IS NOT NULL AS `Cartridge` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` = @ammunitionType +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType` IS NULL AS `Cartridge` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +"""); + } + + public override async Task Select_null_parameter(bool async) + { + await base.Select_null_parameter(async); + + AssertSql( + """ +@ammunitionType='1' (Nullable = true) + +SELECT `w`.`Id`, @ammunitionType AS `AmmoType` +FROM `Weapons` AS `w` +""", + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` +FROM `Weapons` AS `w` +""", + // + """ +@ammunitionType='2' (Nullable = true) + +SELECT `w`.`Id`, @ammunitionType AS `AmmoType` +FROM `Weapons` AS `w` +""", + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_with_boolean(bool async) + { + await base.Select_ternary_operation_with_boolean(async); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(`w`.`IsAutomatic`, 1, 0) AS `Num` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_with_inverted_boolean(bool async) + { + await base.Select_ternary_operation_with_inverted_boolean(async); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(NOT (`w`.`IsAutomatic`), 1, 0) AS `Num` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_with_has_value_not_null(bool async) + { + await base.Select_ternary_operation_with_has_value_not_null(async); + + AssertSql( +""" +SELECT `w`.`Id`, IIF(`w`.`AmmunitionType` IS NOT NULL AND `w`.`AmmunitionType` = 1, 'Yes', 'No') AS `IsCartridge` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NOT NULL AND `w`.`AmmunitionType` = 1 +"""); + } + + public override async Task Select_ternary_operation_multiple_conditions(bool async) + { + await base.Select_ternary_operation_multiple_conditions(async); + + AssertSql( +""" +SELECT `w`.`Id`, IIF(`w`.`AmmunitionType` = 2 AND `w`.`SynergyWithId` = 1, 'Yes', 'No') AS `IsCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_ternary_operation_multiple_conditions_2(bool async) + { + await base.Select_ternary_operation_multiple_conditions_2(async); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(NOT (`w`.`IsAutomatic`) AND `w`.`SynergyWithId` = 1, 'Yes', 'No') AS `IsCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_multiple_conditions(bool async) + { + await base.Select_multiple_conditions(async); + + AssertSql( + """ +SELECT `w`.`Id`, NOT (`w`.`IsAutomatic`) AND `w`.`SynergyWithId` = 1 AND `w`.`SynergyWithId` IS NOT NULL AS `IsCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Select_nested_ternary_operations(bool async) + { + await base.Select_nested_ternary_operations(async); + + AssertSql( + """ +SELECT `w`.`Id`, IIF(NOT (`w`.`IsAutomatic`), IIF(`w`.`AmmunitionType` = 1, 'ManualCartridge', 'Manual'), 'Auto') AS `IsManualCartridge` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Null_propagation_optimization1(bool async) + { + await base.Null_propagation_optimization1(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`LeaderNickname` = 'Marcus' +"""); + } + + public override async Task Null_propagation_optimization2(bool async) + { + await base.Null_propagation_optimization2(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(`g`.`LeaderNickname` IS NULL, NULL, `g`.`LeaderNickname` LIKE '%us') +"""); + } + + public override async Task Null_propagation_optimization3(bool async) + { + await base.Null_propagation_optimization3(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(`g`.`LeaderNickname` IS NOT NULL, `g`.`LeaderNickname` LIKE '%us', NULL) +"""); + } + + public override async Task Null_propagation_optimization4(bool async) + { + await base.Null_propagation_optimization4(async); + + // issue #16050 + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(`g`.`LeaderNickname` IS NULL, NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`)))) = 5 +"""); + } + + public override async Task Null_propagation_optimization5(bool async) + { + await base.Null_propagation_optimization5(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), NULL) = 5 +"""); + } + + public override async Task Null_propagation_optimization6(bool async) + { + await base.Null_propagation_optimization6(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), NULL) = 5 +"""); + } + + public override async Task Select_null_propagation_optimization7(bool async) + { + await base.Select_null_propagation_optimization7(async); + + AssertSql( +""" +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, `g`.`LeaderNickname` & `g`.`LeaderNickname`, NULL) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_optimization8(bool async) + { + await base.Select_null_propagation_optimization8(async); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NULL, '', `g`.`LeaderNickname`) & IIF(`g`.`LeaderNickname` IS NULL, '', `g`.`LeaderNickname`) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_optimization9(bool async) + { + await base.Select_null_propagation_optimization9(async); + + AssertSql( + """ +SELECT IIF(LEN(`g`.`FullName`) IS NULL, NULL, CLNG(LEN(`g`.`FullName`))) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_negative1(bool async) + { + await base.Select_null_propagation_negative1(async); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, NULL) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_negative2(bool async) + { + await base.Select_null_propagation_negative2(async); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, `s`.`LeaderNickname`, NULL) +FROM `Gears` AS `g`, +( + SELECT `g0`.`LeaderNickname` + FROM `Gears` AS `g0` +) AS `s` +"""); + } + + public override async Task Select_null_propagation_negative3(bool async) + { + await base.Select_null_propagation_negative3(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, IIF(`s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, `s`.`LeaderNickname` IS NOT NULL, NULL) AS `Condition` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`LeaderNickname` + FROM `Gears` AS `g0` +) AS `s` ON `g`.`HasSoulPatch` +ORDER BY `s`.`Nickname` +"""); + } + + public override async Task Select_null_propagation_negative4(bool async) + { + await base.Select_null_propagation_negative4(async); + + AssertSql( + """ +SELECT `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, `s`.`Nickname` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` +) AS `s` ON `g`.`HasSoulPatch` +ORDER BY `s`.`Nickname` +"""); + } + + public override async Task Select_null_propagation_negative5(bool async) + { + await base.Select_null_propagation_negative5(async); + + AssertSql( + """ +SELECT `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, `s`.`Nickname` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` +) AS `s` ON `g`.`HasSoulPatch` +ORDER BY `s`.`Nickname` +"""); + } + + public override async Task Select_null_propagation_negative6(bool async) + { + await base.Select_null_propagation_negative6(async); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, FALSE, NULL) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_negative7(bool async) + { + await base.Select_null_propagation_negative7(async); + + AssertSql( +""" +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, TRUE, NULL) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_negative8(bool async) + { + await base.Select_null_propagation_negative8(async); + + AssertSql( + """ +SELECT IIF(`s0`.`Id` IS NOT NULL, `c`.`Name`, NULL) +FROM ((`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) +LEFT JOIN `Cities` AS `c` ON `s`.`AssignedCityName` = `c`.`Name` +"""); + } + + public override async Task Select_null_propagation_negative9(bool async) + { + await base.Select_null_propagation_negative9(async); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, NULL) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_propagation_works_for_navigations_with_composite_keys(bool async) + { + await base.Select_null_propagation_works_for_navigations_with_composite_keys(async); + + AssertSql( + """ +SELECT `s`.`Nickname` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +"""); + } + + public override async Task Select_null_propagation_works_for_multiple_navigations_with_composite_keys(bool async) + { + await base.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(async); + + AssertSql( + """ +SELECT IIF(`c`.`Name` IS NOT NULL, `c`.`Name`, NULL) +FROM (((`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Tags` AS `t0` ON (`s`.`Nickname` = `t0`.`GearNickName` OR (`s`.`Nickname` IS NULL AND `t0`.`GearNickName` IS NULL)) AND (`s`.`SquadId` = `t0`.`GearSquadId` OR (`s`.`SquadId` IS NULL AND `t0`.`GearSquadId` IS NULL))) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName` + FROM `Gears` AS `g0` +) AS `s0` ON `t0`.`GearNickName` = `s0`.`Nickname` AND `t0`.`GearSquadId` = `s0`.`SquadId`) +LEFT JOIN `Cities` AS `c` ON `s0`.`AssignedCityName` = `c`.`Name` +"""); + } + + public override async Task Select_conditional_with_anonymous_type_and_null_constant(bool async) + { + await base.Select_conditional_with_anonymous_type_and_null_constant(async); + + AssertSql( + """ +SELECT `g`.`LeaderNickname` IS NOT NULL, `g`.`HasSoulPatch` +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Select_conditional_with_anonymous_types(bool async) + { + await base.Select_conditional_with_anonymous_types(async); + + AssertSql( + """ +SELECT `g`.`LeaderNickname` IS NOT NULL, `g`.`Nickname`, `g`.`FullName` +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_conditional_equality_1(bool async) + { + await base.Where_conditional_equality_1(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +WHERE `g`.`LeaderNickname` IS NULL +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_conditional_equality_2(bool async) + { + await base.Where_conditional_equality_2(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +WHERE `g`.`LeaderNickname` IS NULL +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_conditional_equality_3(bool async) + { + await base.Where_conditional_equality_3(async); + + AssertSql( + """ +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Select_coalesce_with_anonymous_types(bool async) + { + await base.Select_coalesce_with_anonymous_types(async); + + AssertSql( +""" +SELECT `g`.`LeaderNickname`, `g`.`FullName` +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_compare_anonymous_types(bool async) + { + await base.Where_compare_anonymous_types(async); + + AssertSql(); + } + + public override async Task Where_member_access_on_anonymous_type(bool async) + { + await base.Where_member_access_on_anonymous_type(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +WHERE `g`.`LeaderNickname` = 'Marcus' +"""); + } + + public override async Task Where_compare_anonymous_types_with_uncorrelated_members(bool async) + { + await base.Where_compare_anonymous_types_with_uncorrelated_members(async); + + AssertSql( + """ +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +WHERE FALSE +"""); + } + + public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(bool async) + { + await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` +FROM (( + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` + FROM `Tags` AS `t`, + `Tags` AS `t0` +) AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s0` ON `s`.`GearNickName` = `s0`.`Nickname` AND `s`.`GearSquadId` = `s0`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` +) AS `s1` ON `s`.`GearNickName0` = `s1`.`Nickname` AND `s`.`GearSquadId0` = `s1`.`SquadId` +WHERE `s0`.`Nickname` = `s1`.`Nickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`Nickname` IS NULL) +"""); + } + + public override async Task Conditional_Navigation_With_Trivial_Member_Access(bool async) + { + await base.Conditional_Navigation_With_Trivial_Member_Access(async); + + AssertSql( + """ +SELECT `g`.`Nickname` +FROM (`Gears` AS `g` +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name`) +INNER JOIN `Cities` AS `c0` ON `g`.`CityOfBirthName` = `c0`.`Name` +WHERE IIF(`c`.`Name` IS NOT NULL, `c`.`Name`, `c0`.`Name`) <> 'Ephyra' +"""); + } + + public override async Task Conditional_Navigation_With_Member_Access_On_Same_Type(bool async) + { + await base.Conditional_Navigation_With_Member_Access_On_Same_Type(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`FullName` +FROM (`Gears` AS `g` +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name`) +INNER JOIN `Cities` AS `c0` ON `g`.`CityOfBirthName` = `c0`.`Name` +WHERE IIF(`c`.`Name` IS NOT NULL, `c`.`Nation`, `c0`.`Nation`) = 'Tyrus' +"""); + } + + public override async Task Conditional_Navigation_With_Member_Access_On_Related_Types(bool async) + { + await base.Conditional_Navigation_With_Member_Access_On_Related_Types(async); + + AssertSql( + """ +SELECT `f`.`Name` +FROM ((`Factions` AS `f` +INNER JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`ThreatLevel` + FROM `LocustLeaders` AS `l0` +) AS `s` ON `l`.`DeputyCommanderName` = `s`.`Name`) +LEFT JOIN ( + SELECT `l1`.`Name`, `l1`.`ThreatLevel` + FROM `LocustLeaders` AS `l1` + INNER JOIN `LocustCommanders` AS `l2` ON `l1`.`Name` = `l2`.`Name` +) AS `s0` ON `l`.`CommanderName` = `s0`.`Name` +WHERE IIF(`s`.`Name` IS NOT NULL, `s`.`ThreatLevel`, `s0`.`ThreatLevel`) = CINT(4) +"""); + } + + public override async Task Select_Singleton_Navigation_With_Member_Access(bool async) + { + await base.Select_Singleton_Navigation_With_Member_Access(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` = 'Marcus' AND (`s`.`CityOfBirthName` <> 'Ephyra' OR `s`.`CityOfBirthName` IS NULL) +"""); + } + + public override async Task Select_Where_Navigation(bool async) + { + await base.Select_Where_Navigation(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` = 'Marcus' +"""); + } + + public override async Task Select_Where_Navigation_Equals_Navigation(bool async) + { + await base.Select_Where_Navigation_Equals_Navigation(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` +FROM (( + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` + FROM `Tags` AS `t`, + `Tags` AS `t0` +) AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s0` ON `s`.`GearNickName` = `s0`.`Nickname` AND `s`.`GearSquadId` = `s0`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` +) AS `s1` ON `s`.`GearNickName0` = `s1`.`Nickname` AND `s`.`GearSquadId0` = `s1`.`SquadId` +WHERE (`s0`.`Nickname` = `s1`.`Nickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`Nickname` IS NULL)) AND (`s0`.`SquadId` = `s1`.`SquadId` OR (`s0`.`SquadId` IS NULL AND `s1`.`SquadId` IS NULL)) +"""); + } + + public override async Task Select_Where_Navigation_Null(bool async) + { + await base.Select_Where_Navigation_Null(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` IS NULL OR `s`.`SquadId` IS NULL +"""); + } + + public override async Task Select_Where_Navigation_Null_Reverse(bool async) + { + await base.Select_Where_Navigation_Null_Reverse(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` IS NULL OR `s`.`SquadId` IS NULL +"""); + } + + public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(bool async) + { + await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(async); + + AssertSql( + """ +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` +FROM (( + SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0` + FROM `Tags` AS `t`, + `Tags` AS `t0` +) AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s0` ON `s`.`GearNickName` = `s0`.`Nickname` AND `s`.`GearSquadId` = `s0`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` +) AS `s1` ON `s`.`GearNickName0` = `s1`.`Nickname` AND `s`.`GearSquadId0` = `s1`.`SquadId` +WHERE `s0`.`Nickname` = `s1`.`Nickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`Nickname` IS NULL) +"""); + } + + public override async Task Optional_Navigation_Null_Coalesce_To_Clr_Type(bool async) + { + await base.Optional_Navigation_Null_Coalesce_To_Clr_Type(async); + + AssertSql( +""" +SELECT TOP 1 IIF(`w0`.`IsAutomatic` IS NULL, FALSE, `w0`.`IsAutomatic`) AS `IsAutomatic` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY `w`.`Id` +"""); + } + + public override async Task Where_subquery_boolean(bool async) + { + await base.Where_subquery_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +"""); + } + + public override async Task Where_subquery_boolean_with_pushdown(bool async) + { + await base.Where_subquery_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +"""); + } + + public override async Task Where_subquery_distinct_firstordefault_boolean(bool async) + { + await base.Where_subquery_distinct_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`)) +"""); + } + + public override async Task Where_subquery_distinct_firstordefault_boolean_with_pushdown(bool async) + { + await base.Where_subquery_distinct_firstordefault_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +"""); + } + + public override async Task Where_subquery_distinct_first_boolean(bool async) + { + await base.Where_subquery_distinct_first_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_singleordefault_boolean1(bool async) + { + await base.Where_subquery_distinct_singleordefault_boolean1(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`)) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_singleordefault_boolean2(bool async) + { + await base.Where_subquery_distinct_singleordefault_boolean2(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_singleordefault_boolean_with_pushdown(bool async) + { + await base.Where_subquery_distinct_singleordefault_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_lastordefault_boolean(bool async) + { + await base.Where_subquery_distinct_lastordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE NOT (( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id` DESC)) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_last_boolean(bool async) + { + await base.Where_subquery_distinct_last_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE NOT (`g`.`HasSoulPatch`) AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id` DESC) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Where_subquery_distinct_orderby_firstordefault_boolean(bool async) + { + await base.Where_subquery_distinct_orderby_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`)) +"""); + } + + public override async Task Where_subquery_distinct_orderby_firstordefault_boolean_with_pushdown(bool async) + { + await base.Where_subquery_distinct_orderby_firstordefault_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +"""); + } + + public override async Task Where_subquery_union_firstordefault_boolean(bool async) + { + await base.Where_subquery_union_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `u`.`IsAutomatic` + FROM ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + UNION + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `u` + ORDER BY `u`.`Id`) +"""); + } + + public override async Task Where_subquery_join_firstordefault_boolean(bool async) + { + await base.Where_subquery_join_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + INNER JOIN ( + SELECT `w0`.`Id` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `w1` ON `w`.`Id` = `w1`.`Id` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +"""); + } + + public override async Task Where_subquery_left_join_firstordefault_boolean(bool async) + { + await base.Where_subquery_left_join_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `w0`.`Id` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `w1` ON `w`.`Id` = `w1`.`Id` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +"""); + } + + public override async Task Where_subquery_concat_firstordefault_boolean(bool async) + { + await base.Where_subquery_concat_firstordefault_boolean(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND ( + SELECT TOP 1 `u`.`IsAutomatic` + FROM ( + SELECT `w`.`Id`, `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + UNION ALL + SELECT `w0`.`Id`, `w0`.`IsAutomatic` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `u` + ORDER BY `u`.`Id`) +"""); + } + + public override async Task Concat_with_count(bool async) + { + await base.Concat_with_count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` +) AS `u` +"""); + } + + public override async Task Concat_scalars_with_count(bool async) + { + await base.Concat_scalars_with_count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` +) AS `u` +"""); + } + + public override async Task Concat_anonymous_with_count(bool async) + { + await base.Concat_anonymous_with_count(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` +) AS `u` +"""); + } + + public override async Task Concat_with_scalar_projection(bool async) + { + await base.Concat_with_scalar_projection(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +UNION ALL +SELECT `g0`.`Nickname` +FROM `Gears` AS `g0` +"""); + } + + public override async Task Select_navigation_with_concat_and_count(bool async) + { + await base.Select_navigation_with_concat_and_count(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + UNION ALL + SELECT 1 + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `u`) +FROM `Gears` AS `g` +WHERE NOT (`g`.`HasSoulPatch`) +"""); + } + + public override async Task Concat_with_collection_navigations(bool async) + { + await base.Concat_with_collection_navigations(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + UNION + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ) AS `u`) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Union_with_collection_navigations(bool async) + { + await base.Union_with_collection_navigations(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` + UNION + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, IIF(`o1`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g1` + LEFT JOIN `Officers` AS `o1` ON `g1`.`Nickname` = `o1`.`Nickname` AND `g1`.`SquadId` = `o1`.`SquadId` + WHERE `g`.`Nickname` = `g1`.`LeaderNickname` AND `g`.`SquadId` = `g1`.`LeaderSquadId` + ) AS `u`) +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `o`.`Nickname` IS NOT NULL +"""); + } + + public override async Task Select_subquery_distinct_firstordefault(bool async) + { + await base.Select_subquery_distinct_firstordefault(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w0`.`Name` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ) AS `w0` + ORDER BY `w0`.`Id`) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Singleton_Navigation_With_Member_Access(bool async) + { + await base.Singleton_Navigation_With_Member_Access(async); + + AssertSql( + """ +SELECT `s`.`CityOfBirthName` AS `B` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` = 'Marcus' AND (`s`.`CityOfBirthName` <> 'Ephyra' OR `s`.`CityOfBirthName` IS NULL) +"""); + } + + public override async Task GroupJoin_Composite_Key(bool async) + { + await base.GroupJoin_Composite_Key(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM `Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +"""); + } + + public override async Task Join_navigation_translated_to_subquery_composite_key(bool async) + { + await base.Join_navigation_translated_to_subquery_composite_key(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `s0`.`Note` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `t`.`Note`, `s`.`FullName` + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +) AS `s0` ON `g`.`FullName` = `s0`.`FullName` +"""); + } + + public override async Task Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(bool async) + { + await base.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `s0`.`Note` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `t`.`Note`, `s`.`FullName` + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +) AS `s0` ON `g`.`FullName` = `s0`.`FullName` +"""); + } + + public override async Task Join_with_order_by_without_skip_or_take(bool async) + { + await base.Join_with_order_by_without_skip_or_take(async); + + AssertSql( +""" +SELECT `w`.`Name`, `g`.`FullName` +FROM `Gears` AS `g` +INNER JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +"""); + } + + public override async Task Join_with_order_by_without_skip_or_take_nested(bool async) + { + await base.Join_with_order_by_without_skip_or_take_nested(async); + + AssertSql( + """ +SELECT `w`.`Name`, `s0`.`FullName` +FROM (`Squads` AS `s` +INNER JOIN ( + SELECT `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `s0`.`FullName` = `w`.`OwnerFullName` +WHERE `s0`.`FullName` IS NOT NULL AND `w`.`OwnerFullName` IS NOT NULL +"""); + } + + public override async Task Collection_with_inheritance_and_join_include_joined(bool async) + { + await base.Collection_with_inheritance_and_join_include_joined(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Tags` AS `t0` ON `s`.`Nickname` = `t0`.`GearNickName` AND `s`.`SquadId` = `t0`.`GearSquadId` +"""); + } + + public override async Task Collection_with_inheritance_and_join_include_source(bool async) + { + await base.Collection_with_inheritance_and_join_include_source(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Tags` AS `t0` ON `g`.`Nickname` = `t0`.`GearNickName` AND `g`.`SquadId` = `t0`.`GearSquadId` +WHERE `o`.`Nickname` IS NOT NULL +"""); + } + + public override async Task Non_unicode_string_literal_is_used_for_non_unicode_column(bool async) + { + await base.Non_unicode_string_literal_is_used_for_non_unicode_column(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = 'Unknown' +"""); + } + + public override async Task Non_unicode_string_literal_is_used_for_non_unicode_column_right(bool async) + { + await base.Non_unicode_string_literal_is_used_for_non_unicode_column_right(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE 'Unknown' = `c`.`Location` +"""); + } + + public override async Task Non_unicode_parameter_is_used_for_non_unicode_column(bool async) + { + await base.Non_unicode_parameter_is_used_for_non_unicode_column(async); + + AssertSql( + """ +@value='Unknown' (Size = 100) + +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = @value +"""); + } + + public override async Task Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(bool async) + { + await base.Non_unicode_string_literals_in_contains_is_used_for_non_unicode_column(async); + + AssertSql( + """ +@cities1='Unknown' (Size = 100) +@cities2='Jacinto's location' (Size = 100) +@cities3='Ephyra's location' (Size = 100) + +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` IN (@cities1, @cities2, @cities3) +"""); + } + + public override async Task Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(bool async) + { + await base.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = 'Unknown' AND ( + SELECT COUNT(*) + FROM `Gears` AS `g` + WHERE `c`.`Name` = `g`.`CityOfBirthName` AND `g`.`Nickname` = 'Paduk') = 1 +"""); + } + + public override async Task Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(bool async) + { + await base.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +WHERE `g`.`Nickname` = 'Marcus' AND `c`.`Location` = 'Jacinto''s location' +"""); + } + + public override async Task Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(bool async) + { + await base.Non_unicode_string_literals_is_used_for_non_unicode_column_with_contains(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` LIKE '%Jacinto%' +"""); + } + + public override async Task Unicode_string_literals_is_used_for_non_unicode_column_with_concat(bool async) + { + await base.Unicode_string_literals_is_used_for_non_unicode_column_with_concat(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE IIF(`c`.`Location` IS NULL, '', `c`.`Location`) & 'Added' LIKE '%Add%' +"""); + } + + public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result1() + { + base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result1(); + + // Issue#16897 + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result2() + { + base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result2(); + + // Issue#16897 + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result3(async); + + // Issue#16897 + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesce_result4(async); + + // Issue#16897 + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` +FROM (((((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `s`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `s`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async); + + // Issue#16897 + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` + WHERE `o0`.`Nickname` IS NOT NULL +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(async); + + // Issue#16897 + AssertSql( + """ +SELECT `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(bool async) + { + await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId`, `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, `w3`.`Id`, `w3`.`AmmunitionType`, `w3`.`IsAutomatic`, `w3`.`Name`, `w3`.`OwnerFullName`, `w3`.`SynergyWithId`, `w4`.`Id`, `w4`.`AmmunitionType`, `w4`.`IsAutomatic`, `w4`.`Name`, `w4`.`OwnerFullName`, `w4`.`SynergyWithId` +FROM (((((((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `s`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `s`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w3` ON `s`.`FullName` = `w3`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w4` ON `g`.`FullName` = `w4`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id`, `w2`.`Id`, `w3`.`Id` +"""); + } + + public override async Task Coalesce_operator_in_predicate(bool async) + { + await base.Coalesce_operator_in_predicate(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`s`.`HasSoulPatch` IS NULL, FALSE, `s`.`HasSoulPatch`) +"""); + } + + public override async Task Coalesce_operator_in_predicate_with_other_conditions(bool async) + { + await base.Coalesce_operator_in_predicate_with_other_conditions(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`s`.`HasSoulPatch` IS NULL, FALSE, `s`.`HasSoulPatch`) +"""); + } + + public override async Task Coalesce_operator_in_projection_with_other_conditions(bool async) + { + await base.Coalesce_operator_in_projection_with_other_conditions(async); + + AssertSql( + """ +SELECT (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`s`.`HasSoulPatch` IS NULL, FALSE, `s`.`HasSoulPatch`) +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `s`.`HasSoulPatch` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate2(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate2(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`HasSoulPatch` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate_negated(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate_negated(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE NOT (`s`.`HasSoulPatch`) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate_negated_complex1(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE NOT (IIF(`s`.`HasSoulPatch`, TRUE, `s`.`HasSoulPatch`)) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_predicate_negated_complex2(bool async) + { + await base.Optional_navigation_type_compensation_works_with_predicate_negated_complex2(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE NOT (IIF(NOT (`s`.`HasSoulPatch`), FALSE, `s`.`HasSoulPatch`)) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_conditional_expression(bool async) + { + await base.Optional_navigation_type_compensation_works_with_conditional_expression(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`s`.`HasSoulPatch`, TRUE, FALSE) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_binary_expression(bool async) + { + await base.Optional_navigation_type_compensation_works_with_binary_expression(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`HasSoulPatch` OR (`t`.`Note` LIKE '%Cole%') +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_binary_and_expression(bool async) + { + await base.Optional_navigation_type_compensation_works_with_binary_and_expression(async); + + AssertSql( + """ +SELECT `s`.`HasSoulPatch` AND (`t`.`Note` LIKE '%Cole%') AND `t`.`Note` IS NOT NULL +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_projection(bool async) + { + await base.Optional_navigation_type_compensation_works_with_projection(async); + + AssertSql( + """ +SELECT `s`.`SquadId` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(bool async) + { + await base.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(async); + + AssertSql( + """ +SELECT `s`.`SquadId` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_DTOs(bool async) + { + await base.Optional_navigation_type_compensation_works_with_DTOs(async); + + AssertSql( + """ +SELECT `s`.`SquadId` AS `Id` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_list_initializers(bool async) + { + await base.Optional_navigation_type_compensation_works_with_list_initializers(async); + + AssertSql( + """ +SELECT `s`.`SquadId`, `s`.`SquadId` + 1 +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_array_initializers(bool async) + { + await base.Optional_navigation_type_compensation_works_with_array_initializers(async); + + AssertSql( + """ +SELECT `s`.`SquadId` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_orderby(bool async) + { + await base.Optional_navigation_type_compensation_works_with_orderby(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL +ORDER BY `s`.`SquadId` +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_all(bool async) + { + await base.Optional_navigation_type_compensation_works_with_all(async); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` + WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND NOT (`s`.`HasSoulPatch`)) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_negated_predicate(bool async) + { + await base.Optional_navigation_type_compensation_works_with_negated_predicate(async); +AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND NOT (`s`.`HasSoulPatch`) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_contains(bool async) + { + await base.Optional_navigation_type_compensation_works_with_contains(async); +AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `s`.`SquadId` IN ( + SELECT `g0`.`SquadId` + FROM `Gears` AS `g0` +) +"""); + } + + public override async Task Optional_navigation_type_compensation_works_with_skip(bool async) + { + await base.Optional_navigation_type_compensation_works_with_skip(async); + + AssertSql(); + } + + public override async Task Optional_navigation_type_compensation_works_with_take(bool async) + { + await base.Optional_navigation_type_compensation_works_with_take(async); + + AssertSql(); + } + + public override async Task Select_correlated_filtered_collection(bool async) + { + await base.Select_correlated_filtered_collection(async); +AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM (`Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`Name` <> 'Lancer' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `c`.`Name` IN ('Ephyra', 'Hanover') +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name` +"""); + } + + public override async Task Select_correlated_filtered_collection_with_composite_key(bool async) + { + await base.Select_correlated_filtered_collection_with_composite_key(async); +AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` + WHERE `g0`.`Nickname` <> 'Dom' +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` +"""); + } + + public override async Task Select_correlated_filtered_collection_works_with_caching(bool async) + { + await base.Select_correlated_filtered_collection_works_with_caching(async); +AssertSql( + """ +SELECT `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` +ORDER BY `t`.`Note`, `t`.`Id`, `s`.`Nickname` +"""); + } + + public override async Task Join_predicate_value_equals_condition(bool async) + { + await base.Join_predicate_value_equals_condition(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' +END AS [Discriminator] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +INNER JOIN [Weapons] AS [w] ON [w].[SynergyWithId] IS NOT NULL +"""); + } + + public override async Task Join_predicate_value(bool async) + { + await base.Join_predicate_value(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Weapons` AS `w` ON `g`.`HasSoulPatch` +"""); + } + + public override async Task Join_predicate_condition_equals_condition(bool async) + { + await base.Join_predicate_condition_equals_condition(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' +END AS [Discriminator] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +INNER JOIN [Weapons] AS [w] ON [w].[SynergyWithId] IS NOT NULL +"""); + } + + public override async Task Left_join_predicate_value_equals_condition(bool async) + { + await base.Left_join_predicate_value_equals_condition(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' +END AS [Discriminator] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +LEFT JOIN [Weapons] AS [w] ON [w].[SynergyWithId] IS NOT NULL +"""); + } + + public override async Task Left_join_predicate_value(bool async) + { + await base.Left_join_predicate_value(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`HasSoulPatch` +"""); + } + + public override async Task Left_join_predicate_condition_equals_condition(bool async) + { + await base.Left_join_predicate_condition_equals_condition(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' +END AS [Discriminator] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +LEFT JOIN [Weapons] AS [w] ON [w].[SynergyWithId] IS NOT NULL +"""); + } + + public override async Task Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used( + bool async) + { + await base.Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used(async); + + AssertSql(); + } + + public override async Task Complex_predicate_with_AndAlso_and_nullable_bool_property(bool async) + { + await base.Complex_predicate_with_AndAlso_and_nullable_bool_property(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName` +WHERE `w`.`Id` <> 50 AND NOT (`s`.`HasSoulPatch`) +"""); + } + + public override async Task Distinct_with_optional_navigation_is_translated_to_sql(bool async) + { + await base.Distinct_with_optional_navigation_is_translated_to_sql(async); + + AssertSql( +""" +SELECT DISTINCT `g`.`HasSoulPatch` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Sum_with_optional_navigation_is_translated_to_sql(bool async) + { + await base.Sum_with_optional_navigation_is_translated_to_sql(async); + + AssertSql( +""" +SELECT IIF(SUM(`g`.`SquadId`) IS NULL, 0, SUM(`g`.`SquadId`)) +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL +"""); + } + + public override async Task Count_with_optional_navigation_is_translated_to_sql(bool async) + { + await base.Count_with_optional_navigation_is_translated_to_sql(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL +"""); + } + + public override async Task FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(bool async) + { + await base.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(async); + + AssertSql( + """ +SELECT TOP 1 `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +WHERE `s`.`Name` = 'Kilo' +"""); + } + + public override async Task Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(bool async) + { + await base.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(async); + + AssertSql( + """ +SELECT `s`.`Name` +FROM `Squads` AS `s` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` + WHERE `s`.`Id` = `g`.`SquadId` AND `t`.`Note` = 'Dom''s Tag') +"""); + } + + public override async Task All_with_optional_navigation_is_translated_to_sql(bool async) + { + await base.All_with_optional_navigation_is_translated_to_sql(async); + + AssertSql( + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` + WHERE `t`.`Note` = 'Foo') +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Contains_with_local_nullable_guid_list_closure(bool async) + { + await base.Contains_with_local_nullable_guid_list_closure(async); + + AssertSql( + """ +@ids1='df36f493-463f-4123-83f9-6b135deeb7ba' +@ids2='23cbcf9b-ce14-45cf-aafa-2c2667ebfdd3' +@ids3='ab1b82d7-88db-42bd-a132-7eef9aa68af4' + +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +WHERE `t`.`Id` IN (@ids1, @ids2, @ids3) +"""); + } + + public override async Task Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(bool async) + { + await base.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(async); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +ORDER BY `g`.`Rank` +"""); + } + + public override async Task Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(bool async) + { + await base.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(async); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +WHERE NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(bool async) + { + await base.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(async); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +WHERE NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Where_is_properly_lifted_from_subquery_created_by_include(bool async) + { + await base.Where_is_properly_lifted_from_subquery_created_by_include(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `g`.`FullName` <> 'Augustus Cole' AND NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Subquery_is_lifted_from_main_from_clause_of_SelectMany(bool async) + { + await base.Subquery_is_lifted_from_main_from_clause_of_SelectMany(async); + + AssertSql( + """ +SELECT `g`.`FullName` AS `Name1`, `s`.`FullName` AS `Name2` +FROM `Gears` AS `g`, +( + SELECT `g0`.`FullName`, `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` +) AS `s` +WHERE `g`.`HasSoulPatch` AND NOT (`s`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(bool async) + { + await base.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(async); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g`, +`Tags` AS `t` +WHERE `g`.`HasSoulPatch` +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Subquery_containing_join_projecting_main_from_clause_gets_lifted(bool async) + { + await base.Subquery_containing_join_projecting_main_from_clause_gets_lifted(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +INNER JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(bool async) + { + await base.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Subquery_containing_join_gets_lifted_clashing_names(bool async) + { + await base.Subquery_containing_join_gets_lifted_clashing_names(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM (`Gears` AS `g` +INNER JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Tags` AS `t0` ON `g`.`Nickname` = `t0`.`GearNickName` +WHERE `t`.`GearNickName` <> 'Cole Train' OR `t`.`GearNickName` IS NULL +ORDER BY `g`.`Nickname`, `t0`.`Id` +"""); + } + + public override async Task Subquery_created_by_include_gets_lifted_nested(bool async) + { + await base.Subquery_created_by_include_gets_lifted_nested(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +WHERE EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AND NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Subquery_is_lifted_from_additional_from_clause(bool async) + { + await base.Subquery_is_lifted_from_additional_from_clause(async); + + AssertSql( + """ +SELECT `g`.`FullName` AS `Name1`, `s`.`FullName` AS `Name2` +FROM `Gears` AS `g`, +( + SELECT `g0`.`FullName`, `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` +) AS `s` +WHERE `g`.`HasSoulPatch` AND NOT (`s`.`HasSoulPatch`) +ORDER BY `g`.`FullName` +"""); + } + + public override async Task Subquery_with_result_operator_is_not_lifted(bool async) + { + await base.Subquery_with_result_operator_is_not_lifted(async); + + AssertSql( + """ +@p='2' + +SELECT `s`.`FullName` +FROM ( + SELECT TOP @p `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (`g`.`HasSoulPatch`) + ORDER BY `g`.`FullName` +) AS `s` +ORDER BY `s`.`Rank` +"""); + } + + public override async Task Skip_with_orderby_followed_by_orderBy_is_pushed_down(bool async) + { + await base.Skip_with_orderby_followed_by_orderBy_is_pushed_down(async); + + AssertSql( +""" +@__p_0='1' + +SELECT [t].[FullName] +FROM ( + SELECT [g].[FullName], [g].[Rank] + FROM [Gears] AS [g] + WHERE [g].[HasSoulPatch] = CAST(0 AS bit) + ORDER BY [g].[FullName] + OFFSET @__p_0 ROWS +) AS [t] +ORDER BY [t].[Rank] +"""); + } + + public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_down1(bool async) + { + await base.Take_without_orderby_followed_by_orderBy_is_pushed_down1(async); + + AssertSql( + """ +@p='999' + +SELECT `s`.`FullName` +FROM ( + SELECT TOP @p `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (`g`.`HasSoulPatch`) +) AS `s` +ORDER BY `s`.`Rank` +"""); + } + + public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_down2(bool async) + { + await base.Take_without_orderby_followed_by_orderBy_is_pushed_down2(async); + + AssertSql( + """ +@p='999' + +SELECT `s`.`FullName` +FROM ( + SELECT TOP @p `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (`g`.`HasSoulPatch`) +) AS `s` +ORDER BY `s`.`Rank` +"""); + } + + public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_down3(bool async) + { + await base.Take_without_orderby_followed_by_orderBy_is_pushed_down3(async); + + AssertSql( + """ +@p='999' + +SELECT `s`.`FullName` +FROM ( + SELECT TOP @p `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE NOT (`g`.`HasSoulPatch`) +) AS `s` +ORDER BY `s`.`FullName`, `s`.`Rank` +"""); + } + + public override async Task Select_length_of_string_property(bool async) + { + await base.Select_length_of_string_property(async); + + AssertSql( +""" +SELECT `w`.`Name`, IIF(LEN(`w`.`Name`) IS NULL, NULL, CLNG(LEN(`w`.`Name`))) AS `Length` +FROM `Weapons` AS `w` +"""); + } + + public override async Task Client_method_on_collection_navigation_in_outer_join_key(bool async) + { + await base.Client_method_on_collection_navigation_in_outer_join_key(async); + + AssertSql(); + } + + public override async Task Member_access_on_derived_entity_using_cast(bool async) + { + await base.Member_access_on_derived_entity_using_cast(async); + + AssertSql( +""" +SELECT `f`.`Name`, `l`.`Eradicated` +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name` +"""); + } + + public override async Task Member_access_on_derived_materialized_entity_using_cast(bool async) + { + await base.Member_access_on_derived_materialized_entity_using_cast(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name` +"""); + } + + public override async Task Member_access_on_derived_entity_using_cast_and_let(bool async) + { + await base.Member_access_on_derived_entity_using_cast_and_let(async); + + AssertSql( + """ +SELECT `f`.`Name`, `l`.`Eradicated` +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name` +"""); + } + + public override async Task Property_access_on_derived_entity_using_cast(bool async) + { + await base.Property_access_on_derived_entity_using_cast(async); + + AssertSql( +""" +SELECT `f`.`Name`, `l`.`Eradicated` +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name` +"""); + } + + public override async Task Navigation_access_on_derived_entity_using_cast(bool async) + { + await base.Navigation_access_on_derived_entity_using_cast(async); + + AssertSql( + """ +SELECT `f`.`Name`, `s`.`ThreatLevel` AS `Threat` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`ThreatLevel` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name` +"""); + } + + public override async Task Navigation_access_on_derived_materialized_entity_using_cast(bool async) + { + await base.Navigation_access_on_derived_materialized_entity_using_cast(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s`.`ThreatLevel` AS `Threat` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`ThreatLevel` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name` +"""); + } + + public override async Task Navigation_access_via_EFProperty_on_derived_entity_using_cast(bool async) + { + await base.Navigation_access_via_EFProperty_on_derived_entity_using_cast(async); + + AssertSql( + """ +SELECT `f`.`Name`, `s`.`ThreatLevel` AS `Threat` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`ThreatLevel` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name` +"""); + } + + public override async Task Navigation_access_fk_on_derived_entity_using_cast(bool async) + { + await base.Navigation_access_fk_on_derived_entity_using_cast(async); + + AssertSql( + """ +SELECT `f`.`Name`, `s`.`Name` AS `CommanderName` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name` +"""); + } + + public override async Task Collection_navigation_access_on_derived_entity_using_cast(bool async) + { + await base.Collection_navigation_access_on_derived_entity_using_cast(async); + + AssertSql( + """ +SELECT `f`.`Name`, ( + SELECT COUNT(*) + FROM `LocustLeaders` AS `l0` + WHERE `f`.`Id` = `l0`.`LocustHordeId`) AS `LeadersCount` +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name` +"""); + } + + public override async Task Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(bool async) + { + await base.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(async); +AssertSql( + """ +SELECT `f`.`Name`, `s`.`Name` AS `LeaderName` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +INNER JOIN ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId` + FROM `LocustLeaders` AS `l0` +) AS `s` ON `f`.`Id` = `s`.`LocustHordeId` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `s`.`Name` +"""); + } + + public override async Task Include_on_derived_entity_using_OfType(bool async) + { + await base.Include_on_derived_entity_using_OfType(async); +AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s0`.`Name`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s0`.`Discriminator` +FROM ((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) +LEFT JOIN ( + SELECT `l2`.`Name`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l3`.`DefeatedByNickname`, `l3`.`DefeatedBySquadId`, `l3`.`HighCommandId`, IIF(`l3`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` + FROM `LocustLeaders` AS `l2` + LEFT JOIN `LocustCommanders` AS `l3` ON `l2`.`Name` = `l3`.`Name` +) AS `s0` ON `f`.`Id` = `s0`.`LocustHordeId` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Name`, `f`.`Id`, `s`.`Name` +"""); + } + + public override async Task Distinct_on_subquery_doesnt_get_lifted(bool async) + { + await base.Distinct_on_subquery_doesnt_get_lifted(async); +AssertSql( + """ +SELECT `s`.`HasSoulPatch` +FROM ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` +"""); + } + + public override async Task Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(bool async) + { + await base.Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(async); + + AssertSql( +""" +SELECT `l`.`Eradicated` +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +"""); + } + + public override async Task Comparing_two_collection_navigations_composite_key(bool async) + { + await base.Comparing_two_collection_navigations_composite_key(async); +AssertSql( + """ +SELECT `g`.`Nickname` AS `Nickname1`, `s`.`Nickname` AS `Nickname2` +FROM `Gears` AS `g`, +( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` +) AS `s` +WHERE `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Comparing_two_collection_navigations_inheritance(bool async) + { + await base.Comparing_two_collection_navigations_inheritance(async); + + AssertSql( + """ +SELECT `s0`.`Name`, `s0`.`Nickname` +FROM (( + SELECT `f`.`Name`, `l`.`CommanderName`, `s`.`Nickname`, `s`.`SquadId` + FROM (`Factions` AS `f` + LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`), + ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL + ) AS `s` + WHERE `l`.`Id` IS NOT NULL AND `s`.`HasSoulPatch` +) AS `s0` +LEFT JOIN ( + SELECT `l0`.`Name`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s1` ON `s0`.`CommanderName` = `s1`.`Name`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` +) AS `s2` ON `s1`.`DefeatedByNickname` = `s2`.`Nickname` AND `s1`.`DefeatedBySquadId` = `s2`.`SquadId` +WHERE `s2`.`Nickname` = `s0`.`Nickname` AND `s2`.`SquadId` = `s0`.`SquadId` +"""); + } + + public override async Task Comparing_entities_using_Equals_inheritance(bool async) + { + await base.Comparing_entities_using_Equals_inheritance(async); +AssertSql( + """ +SELECT `g`.`Nickname` AS `Nickname1`, `s`.`Nickname` AS `Nickname2` +FROM `Gears` AS `g`, +( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o` ON `g0`.`Nickname` = `o`.`Nickname` AND `g0`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s` +WHERE `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` +ORDER BY `g`.`Nickname`, `s`.`Nickname` +"""); + } + + public override async Task Contains_on_nullable_array_produces_correct_sql(bool async) + { + await base.Contains_on_nullable_array_produces_correct_sql(async); + + AssertSql( + """ +@cities1='Ephyra' (Size = 255) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` +WHERE `g`.`SquadId` < 2 AND (`c`.`Name` IS NULL OR `c`.`Name` = @cities1) +"""); + } + + public override async Task Optional_navigation_with_collection_composite_key(bool async) + { + await base.Optional_navigation_with_collection_composite_key(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Discriminator` = 'Officer' AND ( + SELECT COUNT(*) + FROM `Gears` AS `g0` + WHERE `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL AND `s`.`Nickname` = `g0`.`LeaderNickname` AND `s`.`SquadId` = `g0`.`LeaderSquadId` AND `g0`.`Nickname` = 'Dom') > 0 +"""); + } + + public override async Task Select_null_conditional_with_inheritance(bool async) + { + await base.Select_null_conditional_with_inheritance(async); + + AssertSql( +""" +SELECT IIF(`l`.`CommanderName` IS NOT NULL, `l`.`CommanderName`, NULL) +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `l`.`Id` IS NOT NULL +"""); + } + + public override async Task Select_null_conditional_with_inheritance_negative(bool async) + { + await base.Select_null_conditional_with_inheritance_negative(async); + + AssertSql( +""" +SELECT IIF(`l`.`CommanderName` IS NOT NULL, `l`.`Eradicated`, NULL) +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `l`.`Id` IS NOT NULL +"""); + } + + public override async Task Project_collection_navigation_with_inheritance1(bool async) + { + await base.Project_collection_navigation_with_inheritance1(async); + + AssertSql( + """ +SELECT `f`.`Id`, `s`.`Name`, `s0`.`Id`, `s1`.`Name`, `s1`.`LocustHordeId`, `s1`.`ThreatLevel`, `s1`.`ThreatLevelByte`, `s1`.`ThreatLevelNullableByte`, `s1`.`DefeatedByNickname`, `s1`.`DefeatedBySquadId`, `s1`.`HighCommandId`, `s1`.`Discriminator` +FROM (((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) +LEFT JOIN ( + SELECT `f0`.`Id`, `l2`.`CommanderName` + FROM `Factions` AS `f0` + INNER JOIN `LocustHordes` AS `l2` ON `f0`.`Id` = `l2`.`Id` +) AS `s0` ON `s`.`Name` = `s0`.`CommanderName`) +LEFT JOIN ( + SELECT `l3`.`Name`, `l3`.`LocustHordeId`, `l3`.`ThreatLevel`, `l3`.`ThreatLevelByte`, `l3`.`ThreatLevelNullableByte`, `l4`.`DefeatedByNickname`, `l4`.`DefeatedBySquadId`, `l4`.`HighCommandId`, IIF(`l4`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` + FROM `LocustLeaders` AS `l3` + LEFT JOIN `LocustCommanders` AS `l4` ON `l3`.`Name` = `l4`.`Name` +) AS `s1` ON `s0`.`Id` = `s1`.`LocustHordeId` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Id` +"""); + } + + public override async Task Project_collection_navigation_with_inheritance2(bool async) + { + await base.Project_collection_navigation_with_inheritance2(async); + + AssertSql( + """ +SELECT `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` +FROM (((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s0` ON `s`.`DefeatedByNickname` = `s0`.`Nickname` AND `s`.`DefeatedBySquadId` = `s0`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o` ON `g0`.`Nickname` = `o`.`Nickname` AND `g0`.`SquadId` = `o`.`SquadId` +) AS `s1` ON (`s0`.`Nickname` = `s1`.`LeaderNickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`LeaderNickname` IS NULL)) AND `s0`.`SquadId` = `s1`.`LeaderSquadId` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname` +"""); + } + + public override async Task Project_collection_navigation_with_inheritance3(bool async) + { + await base.Project_collection_navigation_with_inheritance3(async); + + AssertSql( + """ +SELECT `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` +FROM (((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s0` ON `s`.`DefeatedByNickname` = `s0`.`Nickname` AND `s`.`DefeatedBySquadId` = `s0`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o` ON `g0`.`Nickname` = `o`.`Nickname` AND `g0`.`SquadId` = `o`.`SquadId` +) AS `s1` ON (`s0`.`Nickname` = `s1`.`LeaderNickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`LeaderNickname` IS NULL)) AND `s0`.`SquadId` = `s1`.`LeaderSquadId` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname` +"""); + } + + public override async Task Include_reference_on_derived_type_using_string(bool async) + { + await base.Include_reference_on_derived_type_using_string(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +"""); + } + + public override async Task Include_reference_on_derived_type_using_string_nested1(bool async) + { + await base.Include_reference_on_derived_type_using_string_nested1(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Banner`, `s0`.`Banner5`, `s0`.`InternalNumber`, `s0`.`Name` +FROM ((`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` +"""); + } + + public override async Task Include_reference_on_derived_type_using_string_nested2(bool async) + { + await base.Include_reference_on_derived_type_using_string_nested2(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Name`, `s0`.`Location`, `s0`.`Nation` +FROM ((`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` + FROM (`Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) + INNER JOIN `Cities` AS `c` ON `g0`.`CityOfBirthName` = `c`.`Name` +) AS `s0` ON (`s`.`Nickname` = `s0`.`LeaderNickname` OR (`s`.`Nickname` IS NULL AND `s0`.`LeaderNickname` IS NULL)) AND `s`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY `l`.`Name`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname`, `s0`.`SquadId` +"""); + } + + public override async Task Include_reference_on_derived_type_using_lambda(bool async) + { + await base.Include_reference_on_derived_type_using_lambda(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +"""); + } + + public override async Task Include_reference_on_derived_type_using_lambda_with_soft_cast(bool async) + { + await base.Include_reference_on_derived_type_using_lambda_with_soft_cast(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +"""); + } + + public override async Task Include_reference_on_derived_type_using_lambda_with_tracking(bool async) + { + await base.Include_reference_on_derived_type_using_lambda_with_tracking(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +"""); + } + + public override async Task Include_collection_on_derived_type_using_string(bool async) + { + await base.Include_collection_on_derived_type_using_string(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` +"""); + } + + public override async Task Include_collection_on_derived_type_using_lambda(bool async) + { + await base.Include_collection_on_derived_type_using_lambda(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` +"""); + } + + public override async Task Include_collection_on_derived_type_using_lambda_with_soft_cast(bool async) + { + await base.Include_collection_on_derived_type_using_lambda_with_soft_cast(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` +"""); + } + + public override async Task Include_base_navigation_on_derived_entity(bool async) + { + await base.Include_base_navigation_on_derived_entity(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task ThenInclude_collection_on_derived_after_base_reference(bool async) + { + await base.ThenInclude_collection_on_derived_after_base_reference(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task ThenInclude_collection_on_derived_after_derived_reference(bool async) + { + await base.ThenInclude_collection_on_derived_after_derived_reference(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` +FROM (((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s0` ON `s`.`DefeatedByNickname` = `s0`.`Nickname` AND `s`.`DefeatedBySquadId` = `s0`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s1` ON (`s0`.`Nickname` = `s1`.`LeaderNickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`LeaderNickname` IS NULL)) AND `s0`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname` +"""); + } + + public override async Task ThenInclude_collection_on_derived_after_derived_collection(bool async) + { + await base.ThenInclude_collection_on_derived_after_derived_collection(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName0`, `s0`.`CityOfBirthName0`, `s0`.`FullName0`, `s0`.`HasSoulPatch0`, `s0`.`LeaderNickname0`, `s0`.`LeaderSquadId0`, `s0`.`Rank0`, `s0`.`Discriminator0` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName` AS `AssignedCityName0`, `s`.`CityOfBirthName` AS `CityOfBirthName0`, `s`.`FullName` AS `FullName0`, `s`.`HasSoulPatch` AS `HasSoulPatch0`, `s`.`LeaderNickname` AS `LeaderNickname0`, `s`.`LeaderSquadId` AS `LeaderSquadId0`, `s`.`Rank` AS `Rank0`, `s`.`Discriminator` AS `Discriminator0` + FROM (`Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, IIF(`o1`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g1` + LEFT JOIN `Officers` AS `o1` ON `g1`.`Nickname` = `o1`.`Nickname` AND `g1`.`SquadId` = `o1`.`SquadId` + ) AS `s` ON `g0`.`Nickname` = `s`.`LeaderNickname` AND `g0`.`SquadId` = `s`.`LeaderSquadId` +) AS `s0` ON `g`.`Nickname` = `s0`.`LeaderNickname` AND `g`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` +"""); + } + + public override async Task ThenInclude_reference_on_derived_after_derived_collection(bool async) + { + await base.ThenInclude_reference_on_derived_after_derived_collection(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s0`.`Name`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s0`.`Discriminator`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator0` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, IIF(`l1`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` AS `Discriminator0` + FROM (`LocustLeaders` AS `l0` + LEFT JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name`) + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + ) AS `s` ON `l1`.`DefeatedByNickname` = `s`.`Nickname` AND `l1`.`DefeatedBySquadId` = `s`.`SquadId` +) AS `s0` ON `f`.`Id` = `s0`.`LocustHordeId` +ORDER BY `f`.`Id`, `s0`.`Name`, `s0`.`Nickname` +"""); + } + + public override async Task Multiple_derived_included_on_one_method(bool async) + { + await base.Multiple_derived_included_on_one_method(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` +FROM (((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s0` ON `s`.`DefeatedByNickname` = `s0`.`Nickname` AND `s`.`DefeatedBySquadId` = `s0`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s1` ON (`s0`.`Nickname` = `s1`.`LeaderNickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`LeaderNickname` IS NULL)) AND `s0`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname` +"""); + } + + public override async Task Include_on_derived_multi_level(bool async) + { + await base.Include_on_derived_multi_level(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator`, `s1`.`Id`, `s1`.`Banner`, `s1`.`Banner5`, `s1`.`InternalNumber`, `s1`.`Name`, `s1`.`SquadId0`, `s1`.`MissionId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s0`.`SquadId` AS `SquadId0`, `s0`.`MissionId` + FROM ((`Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) + INNER JOIN `Squads` AS `s` ON `g0`.`SquadId` = `s`.`Id`) + LEFT JOIN `SquadMissions` AS `s0` ON `s`.`Id` = `s0`.`SquadId` +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`SquadId0` +"""); + } + + public override async Task Projecting_nullable_bool_in_conditional_works(bool async) + { + await base.Projecting_nullable_bool_in_conditional_works(async); + + AssertSql( + """ +SELECT IIF(`s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, `s`.`HasSoulPatch`, FALSE) AS `Prop` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +"""); + } + + public override async Task ToString_enum_property_projection(bool async) + { + await base.ToString_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`g`.`Rank` = 0, 'None', IIF(`g`.`Rank` = 1, 'Private', IIF(`g`.`Rank` = 2, 'Corporal', IIF(`g`.`Rank` = 4, 'Sergeant', IIF(`g`.`Rank` = 8, 'Lieutenant', IIF(`g`.`Rank` = 16, 'Captain', IIF(`g`.`Rank` = 32, 'Major', IIF(`g`.`Rank` = 64, 'Colonel', IIF(`g`.`Rank` = 128, 'General', (`g`.`Rank` & '')))))))))) +FROM `Gears` AS `g` +"""); + } + + public override async Task ToString_nullable_enum_property_projection(bool async) + { + await base.ToString_nullable_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_enum_contains(bool async) + { + await base.ToString_enum_contains(async); + + AssertSql( + """ +SELECT `m`.`CodeName` +FROM `Missions` AS `m` +WHERE (`m`.`Difficulty` & '') LIKE '%Med%' +"""); + } + + public override async Task ToString_nullable_enum_contains(bool async) + { + await base.ToString_nullable_enum_contains(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) LIKE '%Cart%' +"""); + } + + public override async Task Correlated_collections_naked_navigation_with_ToList(bool async) + { + await base.Correlated_collections_naked_navigation_with_ToList(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(bool async) + { + await base.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(async); + + AssertSql( +""" +SELECT ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) +FROM `Gears` AS `g` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Correlated_collections_naked_navigation_with_ToArray(bool async) + { + await base.Correlated_collections_naked_navigation_with_ToArray(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection(bool async) + { + await base.Correlated_collections_basic_projection(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection_explicit_to_list(bool async) + { + await base.Correlated_collections_basic_projection_explicit_to_list(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection_explicit_to_array(bool async) + { + await base.Correlated_collections_basic_projection_explicit_to_array(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projection_ordered(bool async) + { + await base.Correlated_collections_basic_projection_ordered(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name` DESC +"""); + } + + public override async Task Correlated_collections_basic_projection_composite_key(bool async) + { + await base.Correlated_collections_basic_projection_composite_key(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`FullName`, `s`.`SquadId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`FullName`, `g0`.`SquadId`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + WHERE NOT (`g0`.`HasSoulPatch`) +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +WHERE `o`.`Nickname` IS NOT NULL AND `g`.`Nickname` <> 'Foo' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` +"""); + } + + public override async Task Correlated_collections_basic_projecting_single_property(bool async) + { + await base.Correlated_collections_basic_projecting_single_property(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name`, `w0`.`Id` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Name`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projecting_constant(bool async) + { + await base.Correlated_collections_basic_projecting_constant(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`c`, `w0`.`Id` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT 'BFG' AS `c`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_basic_projecting_constant_bool(bool async) + { + await base.Correlated_collections_basic_projecting_constant_bool(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`c`, `w0`.`Id` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT TRUE AS `c`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collections_projection_of_collection_thru_navigation(bool async) + { + await base.Correlated_collections_projection_of_collection_thru_navigation(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s1`.`SquadId`, `s1`.`MissionId` +FROM (`Gears` AS `g` +INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId` + FROM `SquadMissions` AS `s0` + WHERE `s0`.`MissionId` <> 17 +) AS `s1` ON `s`.`Id` = `s1`.`SquadId` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s1`.`SquadId` +"""); + } + + public override async Task Correlated_collections_project_anonymous_collection_result(bool async) + { + await base.Correlated_collections_project_anonymous_collection_result(async); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Id`, `s0`.`FullName`, `s0`.`Rank`, `s0`.`Nickname`, `s0`.`SquadId` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `g`.`FullName`, `g`.`Rank`, `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +WHERE `s`.`Id` < 20 +ORDER BY `s`.`Id`, `s0`.`Nickname` +"""); + } + + public override async Task Correlated_collections_nested(bool async) + { + await base.Correlated_collections_nested(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` + FROM (`SquadMissions` AS `s0` + INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) + LEFT JOIN ( + SELECT `s1`.`SquadId`, `s1`.`MissionId` + FROM `SquadMissions` AS `s1` + WHERE `s1`.`SquadId` < 7 + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` + WHERE `s0`.`MissionId` < 42 +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` +"""); + } + + public override async Task Correlated_collections_nested_mixed_streaming_with_buffer1(bool async) + { + await base.Correlated_collections_nested_mixed_streaming_with_buffer1(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` + FROM (`SquadMissions` AS `s0` + INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) + LEFT JOIN ( + SELECT `s1`.`SquadId`, `s1`.`MissionId` + FROM `SquadMissions` AS `s1` + WHERE `s1`.`SquadId` < 2 + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` + WHERE `s0`.`MissionId` < 3 +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` +"""); + } + + public override async Task Correlated_collections_nested_mixed_streaming_with_buffer2(bool async) + { + await base.Correlated_collections_nested_mixed_streaming_with_buffer2(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` + FROM (`SquadMissions` AS `s0` + INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) + LEFT JOIN ( + SELECT `s1`.`SquadId`, `s1`.`MissionId` + FROM `SquadMissions` AS `s1` + WHERE `s1`.`SquadId` < 7 + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` + WHERE `s0`.`MissionId` < 42 +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` +"""); + } + + public override async Task Correlated_collections_nested_with_custom_ordering(bool async) + { + await base.Correlated_collections_nested_with_custom_ordering(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`FullName`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `g0`.`Rank`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL + ) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` + WHERE `g0`.`FullName` <> 'Foo' +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `g`.`Nickname`, `g`.`SquadId`, `s`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s`.`IsAutomatic`) +"""); + } + + public override async Task Correlated_collections_same_collection_projected_multiple_times(bool async) + { + await base.Correlated_collections_same_collection_projected_multiple_times(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` +) AS `w1` ON `g`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE `w0`.`IsAutomatic` +) AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id` +"""); + } + + public override async Task Correlated_collections_similar_collection_projected_multiple_times(bool async) + { + await base.Correlated_collections_similar_collection_projected_multiple_times(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` +) AS `w1` ON `g`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE NOT (`w0`.`IsAutomatic`) +) AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`OwnerFullName`, `w1`.`Id`, NOT (`w2`.`IsAutomatic`) +"""); + } + + public override async Task Correlated_collections_different_collections_projected(bool async) + { + await base.Correlated_collections_different_collections_projected(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id`, `s`.`Nickname`, `s`.`Rank`, `s`.`SquadId` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Name`, `w`.`IsAutomatic`, `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`Rank`, `g0`.`SquadId`, `g0`.`FullName`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `s`.`FullName`, `s`.`Nickname` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(bool async) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(async); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(bool async) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId`, `s1`.`Nickname`, `s1`.`SquadId` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s0`.`Nickname`, `s0`.`SquadId` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`FullName` + FROM `Gears` AS `g2` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName` +) AS `s1` ON `s`.`FullName` = `s1`.`OwnerFullName` +WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s1`.`IsAutomatic`), `s1`.`Nickname` DESC, `s1`.`Id` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings( + bool async) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId`, `s1`.`Nickname`, `s1`.`SquadId` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s0`.`Nickname`, `s0`.`SquadId` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`FullName` + FROM `Gears` AS `g2` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName` +) AS `s1` ON `s`.`FullName` = `s1`.`OwnerFullName` +WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s1`.`IsAutomatic`), `s1`.`Nickname` DESC, `s1`.`Id` +"""); + } + + public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings( + bool async) + { + await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId`, `s1`.`Nickname`, `s1`.`SquadId` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s0`.`Nickname`, `s0`.`SquadId`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `s0`.`FullName` IS NOT NULL AND `s0`.`FullName` = `w0`.`OwnerFullName`) AS `c` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`FullName` + FROM `Gears` AS `g2` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName` +) AS `s1` ON `s`.`FullName` = `s1`.`OwnerFullName` +WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id` DESC, `s1`.`c`, `s1`.`Nickname` +"""); + } + + public override async Task Correlated_collections_multiple_nested_complex_collections(bool async) + { + await base.Correlated_collections_multiple_nested_complex_collections(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s5`.`FullName`, `s5`.`Nickname`, `s5`.`SquadId`, `s5`.`Id`, `s5`.`Nickname0`, `s5`.`SquadId0`, `s5`.`Id0`, `s5`.`Name`, `s5`.`IsAutomatic`, `s5`.`Id1`, `s5`.`Nickname00`, `s5`.`HasSoulPatch`, `s5`.`SquadId00`, `s6`.`Id`, `s6`.`AmmunitionType`, `s6`.`IsAutomatic`, `s6`.`Name`, `s6`.`OwnerFullName`, `s6`.`SynergyWithId`, `s6`.`Nickname`, `s6`.`SquadId` +FROM ((((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN ( + SELECT `g2`.`FullName`, `g2`.`Nickname`, `g2`.`SquadId`, `s4`.`Id`, `s4`.`Nickname` AS `Nickname0`, `s4`.`SquadId` AS `SquadId0`, `s4`.`Id0`, `s4`.`Name`, `s4`.`IsAutomatic`, `s4`.`Id1`, `s4`.`Nickname0` AS `Nickname00`, `s4`.`HasSoulPatch`, `s4`.`SquadId0` AS `SquadId00`, `g2`.`Rank`, `s4`.`IsAutomatic0`, `g2`.`LeaderNickname`, `g2`.`LeaderSquadId` + FROM `Gears` AS `g2` + LEFT JOIN ( + SELECT `w`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Id` AS `Id0`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id` AS `Id1`, `s3`.`Nickname` AS `Nickname0`, `s3`.`HasSoulPatch`, `s3`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic` AS `IsAutomatic0`, `w`.`OwnerFullName` + FROM (((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g3`.`Nickname`, `g3`.`SquadId`, `g3`.`FullName` + FROM `Gears` AS `g3` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName`) + LEFT JOIN `Squads` AS `s1` ON `s0`.`SquadId` = `s1`.`Id`) + LEFT JOIN `Weapons` AS `w0` ON `s0`.`FullName` = `w0`.`OwnerFullName`) + LEFT JOIN ( + SELECT `g4`.`Nickname`, `g4`.`HasSoulPatch`, `g4`.`SquadId` + FROM `Gears` AS `g4` + ) AS `s3` ON `s1`.`Id` = `s3`.`SquadId` + WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL + ) AS `s4` ON `g2`.`FullName` = `s4`.`OwnerFullName` + WHERE `g2`.`FullName` <> 'Foo' +) AS `s5` ON `g`.`Nickname` = `s5`.`LeaderNickname` AND `g`.`SquadId` = `s5`.`LeaderSquadId`) +LEFT JOIN ( + SELECT `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `s2`.`Nickname`, `s2`.`SquadId` + FROM `Weapons` AS `w1` + LEFT JOIN ( + SELECT `g5`.`Nickname`, `g5`.`SquadId`, `g5`.`FullName` + FROM `Gears` AS `g5` + ) AS `s2` ON `w1`.`OwnerFullName` = `s2`.`FullName` +) AS `s6` ON `s`.`FullName` = `s6`.`OwnerFullName` +WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s5`.`Rank`, `s5`.`Nickname`, `s5`.`SquadId`, NOT (`s5`.`IsAutomatic0`), `s5`.`Id`, `s5`.`Nickname0`, `s5`.`SquadId0`, `s5`.`Id0`, `s5`.`Id1`, `s5`.`Nickname00`, `s5`.`SquadId00`, NOT (`s6`.`IsAutomatic`), `s6`.`Nickname` DESC, `s6`.`Id` +"""); + } + + public override async Task Correlated_collections_inner_subquery_selector_references_outer_qsre(bool async) + { + await base.Correlated_collections_inner_subquery_selector_references_outer_qsre(async); + + AssertSql( +""" +SELECT [g].[FullName], [g].[Nickname], [g].[SquadId], [t].[ReportName], [t].[OfficerName], [t].[Nickname], [t].[SquadId] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +OUTER APPLY ( + SELECT [g0].[FullName] AS [ReportName], [g].[FullName] AS [OfficerName], [g0].[Nickname], [g0].[SquadId] + FROM [Gears] AS [g0] + WHERE [g].[Nickname] = [g0].[LeaderNickname] AND [g].[SquadId] = [g0].[LeaderSquadId] +) AS [t] +WHERE [o].[Nickname] IS NOT NULL +ORDER BY [g].[Nickname], [g].[SquadId], [t].[Nickname] +"""); + } + + public override async Task Correlated_collections_inner_subquery_predicate_references_outer_qsre(bool async) + { + await base.Correlated_collections_inner_subquery_predicate_references_outer_qsre(async); + + AssertSql( +""" +SELECT [g].[FullName], [g].[Nickname], [g].[SquadId], [t].[ReportName], [t].[Nickname], [t].[SquadId] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +OUTER APPLY ( + SELECT [g0].[FullName] AS [ReportName], [g0].[Nickname], [g0].[SquadId] + FROM [Gears] AS [g0] + WHERE [g].[Nickname] = [g0].[LeaderNickname] AND [g].[SquadId] = [g0].[LeaderSquadId] AND [g].[FullName] <> N'Foo' +) AS [t] +WHERE [o].[Nickname] IS NOT NULL +ORDER BY [g].[Nickname], [g].[SquadId], [t].[Nickname] +"""); + } + + public override async Task Correlated_collections_nested_inner_subquery_references_outer_qsre_one_level_up(bool async) + { + await base.Correlated_collections_nested_inner_subquery_references_outer_qsre_one_level_up(async); + + AssertSql( +""" +SELECT [g].[FullName], [g].[Nickname], [g].[SquadId], [t0].[FullName], [t0].[Nickname], [t0].[SquadId], [t0].[Name], [t0].[Nickname0], [t0].[Id] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +LEFT JOIN ( + SELECT [g0].[FullName], [g0].[Nickname], [g0].[SquadId], [t].[Name], [t].[Nickname] AS [Nickname0], [t].[Id], [g0].[LeaderNickname], [g0].[LeaderSquadId] + FROM [Gears] AS [g0] + OUTER APPLY ( + SELECT [w].[Name], [g0].[Nickname], [w].[Id] + FROM [Weapons] AS [w] + WHERE [g0].[FullName] = [w].[OwnerFullName] AND ([w].[Name] <> N'Bar' OR ([w].[Name] IS NULL)) + ) AS [t] + WHERE [g0].[FullName] <> N'Foo' +) AS [t0] ON [g].[Nickname] = [t0].[LeaderNickname] AND [g].[SquadId] = [t0].[LeaderSquadId] +WHERE [o].[Nickname] IS NOT NULL +ORDER BY [g].[Nickname], [g].[SquadId], [t0].[Nickname], [t0].[SquadId] +"""); + } + + public override async Task Correlated_collections_nested_inner_subquery_references_outer_qsre_two_levels_up(bool async) + { + await base.Correlated_collections_nested_inner_subquery_references_outer_qsre_two_levels_up(async); + + AssertSql( +""" +SELECT [g].[FullName], [g].[Nickname], [g].[SquadId], [t0].[FullName], [t0].[Nickname], [t0].[SquadId], [t0].[Name], [t0].[Nickname0], [t0].[Id] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +OUTER APPLY ( + SELECT [g0].[FullName], [g0].[Nickname], [g0].[SquadId], [t].[Name], [t].[Nickname] AS [Nickname0], [t].[Id] + FROM [Gears] AS [g0] + LEFT JOIN ( + SELECT [w].[Name], [g].[Nickname], [w].[Id], [w].[OwnerFullName] + FROM [Weapons] AS [w] + WHERE [w].[Name] <> N'Bar' OR ([w].[Name] IS NULL) + ) AS [t] ON [g0].[FullName] = [t].[OwnerFullName] + WHERE [g].[Nickname] = [g0].[LeaderNickname] AND [g].[SquadId] = [g0].[LeaderSquadId] AND [g0].[FullName] <> N'Foo' +) AS [t0] +WHERE [o].[Nickname] IS NOT NULL +ORDER BY [g].[Nickname], [g].[SquadId], [t0].[Nickname], [t0].[SquadId] +"""); + } + + public override async Task Correlated_collections_on_select_many(bool async) + { + await base.Correlated_collections_on_select_many(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `s`.`Name`, `g`.`SquadId`, `s`.`Id`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName`), +(`Squads` AS `s` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o` ON `g0`.`Nickname` = `o`.`Nickname` AND `g0`.`SquadId` = `o`.`SquadId` + WHERE NOT (`g0`.`HasSoulPatch`) +) AS `s0` ON `s`.`Id` = `s0`.`SquadId`) +WHERE `g`.`HasSoulPatch` +ORDER BY `g`.`Nickname`, `s`.`Id` DESC, `g`.`SquadId`, `w0`.`Id`, `s0`.`Nickname` +"""); + } + + public override async Task Correlated_collections_with_Skip(bool async) + { + await base.Correlated_collections_with_Skip(async); + + AssertSql( +""" +SELECT [s].[Id], [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator], ROW_NUMBER() OVER(PARTITION BY [g].[SquadId] ORDER BY [g].[Nickname]) AS [row] + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] + ) AS [t] + WHERE 1 < [t].[row] +) AS [t0] ON [s].[Id] = [t0].[SquadId] +ORDER BY [s].[Name], [s].[Id], [t0].[SquadId], [t0].[Nickname] +"""); + } + + public override async Task Correlated_collections_with_Take(bool async) + { + await base.Correlated_collections_with_Take(async); + + AssertSql( +""" +SELECT [s].[Id], [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator], ROW_NUMBER() OVER(PARTITION BY [g].[SquadId] ORDER BY [g].[Nickname]) AS [row] + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [s].[Id] = [t0].[SquadId] +ORDER BY [s].[Name], [s].[Id], [t0].[SquadId], [t0].[Nickname] +"""); + } + + public override async Task Correlated_collections_with_Distinct(bool async) + { + await base.Correlated_collections_with_Distinct(async); + + AssertSql( +""" +SELECT [s].[Id], [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator] +FROM [Squads] AS [s] +OUTER APPLY ( + SELECT DISTINCT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] + FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator] + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] + WHERE [s].[Id] = [g].[SquadId] + ORDER BY [g].[Nickname] + OFFSET 0 ROWS + ) AS [t] +) AS [t0] +ORDER BY [s].[Name], [s].[Id], [t0].[Nickname] +"""); + } + + public override async Task Correlated_collections_with_FirstOrDefault(bool async) + { + await base.Correlated_collections_with_FirstOrDefault(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `g`.`FullName` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` + ORDER BY `g`.`Nickname`) +FROM `Squads` AS `s` +ORDER BY `s`.`Name` +"""); + } + + public override async Task Correlated_collections_on_left_join_with_predicate(bool async) + { + await base.Correlated_collections_on_left_join_with_predicate(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `t`.`Id`, `s`.`SquadId`, `w`.`Name`, `w`.`Id` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +WHERE NOT (`s`.`HasSoulPatch`) +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Correlated_collections_on_RightJoin_with_predicate(bool async) + { + await base.Correlated_collections_on_RightJoin_with_predicate(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `w`.`Name`, `w`.`Id` +FROM (`Gears` AS `g` +RIGHT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE NOT (`g`.`HasSoulPatch`) +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +"""); + } + + public override async Task Correlated_collections_on_left_join_with_null_value(bool async) + { + await base.Correlated_collections_on_left_join_with_null_value(async); + + AssertSql( + """ +SELECT `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Name`, `w`.`Id` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Correlated_collections_left_join_with_self_reference(bool async) + { + await base.Correlated_collections_left_join_with_self_reference(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`FullName`, `s0`.`Nickname`, `s0`.`SquadId` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` +) AS `s0` ON (`s`.`Nickname` = `s0`.`LeaderNickname` OR (`s`.`Nickname` IS NULL AND `s0`.`LeaderNickname` IS NULL)) AND `s`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname` +"""); + } + + public override async Task Correlated_collections_deeply_nested_left_join(bool async) + { + await base.Correlated_collections_deeply_nested_left_join(async); + + AssertSql( + """ +SELECT `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId` +FROM ((`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` + ) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` + WHERE `g0`.`HasSoulPatch` +) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` +ORDER BY `t`.`Note`, `s`.`Nickname` DESC, `t`.`Id`, `s`.`SquadId`, `s0`.`Id`, `s1`.`Nickname`, `s1`.`SquadId` +"""); + } + + public override async Task Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(bool async) + { + await base.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(async); + + AssertSql( + """ +SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId`, `s1`.`Rank` +FROM ((`Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `g0`.`Rank`, `g0`.`FullName` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w0` + WHERE NOT (`w0`.`IsAutomatic`) + ) AS `w1` ON `g0`.`FullName` = `w1`.`OwnerFullName` +) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` +ORDER BY `w`.`Name`, `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id`, `s1`.`FullName` DESC, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id` +"""); + } + + public override async Task Correlated_collections_complex_scenario1(bool async) + { + await base.Correlated_collections_complex_scenario1(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s2`.`Id`, `s2`.`Nickname`, `s2`.`SquadId`, `s2`.`Id0`, `s2`.`Nickname0`, `s2`.`HasSoulPatch`, `s2`.`SquadId0` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id` AS `Id0`, `s1`.`Nickname` AS `Nickname0`, `s1`.`HasSoulPatch`, `s1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + ) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`HasSoulPatch`, `g1`.`SquadId` + FROM `Gears` AS `g1` + ) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` +) AS `s2` ON `g`.`FullName` = `s2`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s2`.`Id`, `s2`.`Nickname`, `s2`.`SquadId`, `s2`.`Id0`, `s2`.`Nickname0` +"""); + } + + public override async Task Correlated_collections_complex_scenario2(bool async) + { + await base.Correlated_collections_complex_scenario2(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s3`.`FullName`, `s3`.`Nickname`, `s3`.`SquadId`, `s3`.`Id`, `s3`.`Nickname0`, `s3`.`SquadId0`, `s3`.`Id0`, `s3`.`Nickname00`, `s3`.`HasSoulPatch`, `s3`.`SquadId00` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `s2`.`Id`, `s2`.`Nickname` AS `Nickname0`, `s2`.`SquadId` AS `SquadId0`, `s2`.`Id0`, `s2`.`Nickname0` AS `Nickname00`, `s2`.`HasSoulPatch`, `s2`.`SquadId0` AS `SquadId00`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id` AS `Id0`, `s1`.`Nickname` AS `Nickname0`, `s1`.`HasSoulPatch`, `s1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` + ) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) + LEFT JOIN ( + SELECT `g2`.`Nickname`, `g2`.`HasSoulPatch`, `g2`.`SquadId` + FROM `Gears` AS `g2` + ) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` + ) AS `s2` ON `g0`.`FullName` = `s2`.`OwnerFullName` +) AS `s3` ON `g`.`Nickname` = `s3`.`LeaderNickname` AND `g`.`SquadId` = `s3`.`LeaderSquadId` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s3`.`Nickname`, `s3`.`SquadId`, `s3`.`Id`, `s3`.`Nickname0`, `s3`.`SquadId0`, `s3`.`Id0`, `s3`.`Nickname00` +"""); + } + + public override async Task Correlated_collections_with_funky_orderby_complex_scenario1(bool async) + { + await base.Correlated_collections_with_funky_orderby_complex_scenario1(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s2`.`Id`, `s2`.`Nickname`, `s2`.`SquadId`, `s2`.`Id0`, `s2`.`Nickname0`, `s2`.`HasSoulPatch`, `s2`.`SquadId0` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id` AS `Id0`, `s1`.`Nickname` AS `Nickname0`, `s1`.`HasSoulPatch`, `s1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + ) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`HasSoulPatch`, `g1`.`SquadId` + FROM `Gears` AS `g1` + ) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` +) AS `s2` ON `g`.`FullName` = `s2`.`OwnerFullName` +ORDER BY `g`.`FullName`, `g`.`Nickname` DESC, `g`.`SquadId`, `s2`.`Id`, `s2`.`Nickname`, `s2`.`SquadId`, `s2`.`Id0`, `s2`.`Nickname0` +"""); + } + + public override async Task Correlated_collections_with_funky_orderby_complex_scenario2(bool async) + { + await base.Correlated_collections_with_funky_orderby_complex_scenario2(async); + + AssertSql( + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s3`.`FullName`, `s3`.`Nickname`, `s3`.`SquadId`, `s3`.`Id`, `s3`.`Nickname0`, `s3`.`SquadId0`, `s3`.`Id0`, `s3`.`Nickname00`, `s3`.`HasSoulPatch`, `s3`.`SquadId00` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `s2`.`Id`, `s2`.`Nickname` AS `Nickname0`, `s2`.`SquadId` AS `SquadId0`, `s2`.`Id0`, `s2`.`Nickname0` AS `Nickname00`, `s2`.`HasSoulPatch`, `s2`.`SquadId0` AS `SquadId00`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `s2`.`IsAutomatic`, `s2`.`Name`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + LEFT JOIN ( + SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id` AS `Id0`, `s1`.`Nickname` AS `Nickname0`, `s1`.`HasSoulPatch`, `s1`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName` + FROM ((`Weapons` AS `w` + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` + ) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) + LEFT JOIN ( + SELECT `g2`.`Nickname`, `g2`.`HasSoulPatch`, `g2`.`SquadId` + FROM `Gears` AS `g2` + ) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` + ) AS `s2` ON `g0`.`FullName` = `s2`.`OwnerFullName` +) AS `s3` ON `g`.`Nickname` = `s3`.`LeaderNickname` AND `g`.`SquadId` = `s3`.`LeaderSquadId` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY NOT (`g`.`HasSoulPatch`), `g`.`LeaderNickname`, `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s3`.`FullName`, NOT (`s3`.`HasSoulPatch0`) DESC, `s3`.`Nickname`, `s3`.`SquadId`, NOT (`s3`.`IsAutomatic`), `s3`.`Name` DESC, `s3`.`Id`, `s3`.`Nickname0`, `s3`.`SquadId0`, `s3`.`Id0`, `s3`.`Nickname00` +"""); + } + + public override async Task Correlated_collection_with_top_level_FirstOrDefault(bool async) + { + await base.Correlated_collection_with_top_level_FirstOrDefault(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`Nickname` +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_top_level_Count(bool async) + { + await base.Correlated_collection_with_top_level_Count(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM `Gears` AS `g` +"""); + } + + public override async Task Correlated_collection_with_top_level_Last_with_orderby_on_outer(bool async) + { + await base.Correlated_collection_with_top_level_Last_with_orderby_on_outer(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`FullName` +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`FullName`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_top_level_Last_with_order_by_on_inner(bool async) + { + await base.Correlated_collection_with_top_level_Last_with_order_by_on_inner(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`FullName` DESC +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`FullName` DESC, `s`.`Nickname`, `s`.`SquadId`, `w`.`Name` +"""); + } + + public override async Task Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(bool async) + { + await base.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CapitalName`, `s`.`Name`, `s`.`ServerAddress`, `s`.`CommanderName`, `s`.`DeputyCommanderName`, `s`.`Eradicated`, `s`.`Discriminator` +FROM `LocustLeaders` AS `l` +INNER JOIN ( + SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l0`.`CommanderName`, `l0`.`DeputyCommanderName`, `l0`.`Eradicated`, IIF(`l0`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` + FROM `Factions` AS `f` + LEFT JOIN `LocustHordes` AS `l0` ON `f`.`Id` = `l0`.`Id` + WHERE `l0`.`Id` IS NOT NULL AND `f`.`Name` = 'Swarm' +) AS `s` ON `l`.`Name` = `s`.`CommanderName` +WHERE `s`.`Eradicated` <> TRUE OR `s`.`Eradicated` IS NULL +"""); + } + + public override async Task Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(bool async) + { + await base.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CapitalName`, `s`.`Name`, `s`.`ServerAddress`, `s`.`CommanderName`, `s`.`DeputyCommanderName`, `s`.`Eradicated`, `s`.`Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN ( + SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l0`.`CommanderName`, `l0`.`DeputyCommanderName`, `l0`.`Eradicated`, IIF(`l0`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` + FROM `Factions` AS `f` + LEFT JOIN `LocustHordes` AS `l0` ON `f`.`Id` = `l0`.`Id` + WHERE `l0`.`Id` IS NOT NULL AND `f`.`Name` = 'Swarm' +) AS `s` ON `l`.`Name` = `s`.`CommanderName` +WHERE `s`.`Eradicated` <> TRUE OR `s`.`Eradicated` IS NULL +"""); + } + + public override async Task Include_on_derived_type_with_order_by_and_paging(bool async) + { + await base.Include_on_derived_type_with_order_by_and_paging(async); + + AssertSql( + """ +@p='10' + +SELECT `s0`.`Name`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s0`.`Discriminator`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator0` AS `Discriminator`, `s0`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP @p `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` AS `Discriminator0`, `t`.`Id`, `t`.`Note` + FROM ((`LocustLeaders` AS `l` + LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) + LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + ) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId`) + LEFT JOIN `Tags` AS `t` ON (`s`.`Nickname` = `t`.`GearNickName` OR (`s`.`Nickname` IS NULL AND `t`.`GearNickName` IS NULL)) AND (`s`.`SquadId` = `t`.`GearSquadId` OR (`s`.`SquadId` IS NULL AND `t`.`GearSquadId` IS NULL)) + ORDER BY `t`.`Note` +) AS `s0` +LEFT JOIN `Weapons` AS `w` ON `s0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s0`.`Note`, `s0`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id` +"""); + } + + public override async Task Select_required_navigation_on_derived_type(bool async) + { + await base.Select_required_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `l1`.`Name` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN `LocustHighCommands` AS `l1` ON `l0`.`HighCommandId` = `l1`.`Id` +"""); + } + + public override async Task Select_required_navigation_on_the_same_type_with_cast(bool async) + { + await base.Select_required_navigation_on_the_same_type_with_cast(async); + + AssertSql( +""" +SELECT `c`.`Name` +FROM `Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +"""); + } + + public override async Task Where_required_navigation_on_derived_type(bool async) + { + await base.Where_required_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN `LocustHighCommands` AS `l1` ON `l0`.`HighCommandId` = `l1`.`Id` +WHERE `l1`.`IsOperational` +"""); + } + + public override async Task Outer_parameter_in_join_key(bool async) + { + await base.Outer_parameter_in_join_key(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [t1].[Note], [t1].[Id], [t1].[Nickname], [t1].[SquadId] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +OUTER APPLY ( + SELECT [t].[Note], [t].[Id], [t0].[Nickname], [t0].[SquadId] + FROM [Tags] AS [t] + INNER JOIN ( + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[FullName] + FROM [Gears] AS [g0] + ) AS [t0] ON [g].[FullName] = [t0].[FullName] +) AS [t1] +WHERE [o].[Nickname] IS NOT NULL +ORDER BY [g].[Nickname], [g].[SquadId], [t1].[Id], [t1].[Nickname] +"""); + } + + public override async Task Outer_parameter_in_join_key_inner_and_outer(bool async) + { + await base.Outer_parameter_in_join_key_inner_and_outer(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [t1].[Note], [t1].[Id], [t1].[Nickname], [t1].[SquadId] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +OUTER APPLY ( + SELECT [t].[Note], [t].[Id], [t0].[Nickname], [t0].[SquadId] + FROM [Tags] AS [t] + INNER JOIN ( + SELECT [g0].[Nickname], [g0].[SquadId] + FROM [Gears] AS [g0] + ) AS [t0] ON [g].[FullName] = [g].[Nickname] +) AS [t1] +WHERE [o].[Nickname] IS NOT NULL +ORDER BY [g].[Nickname], [g].[SquadId], [t1].[Id], [t1].[Nickname] +"""); + } + + public override async Task Outer_parameter_in_group_join_with_DefaultIfEmpty(bool async) + { + await base.Outer_parameter_in_group_join_with_DefaultIfEmpty(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [t1].[Note], [t1].[Id], [t1].[Nickname], [t1].[SquadId] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +OUTER APPLY ( + SELECT [t].[Note], [t].[Id], [t0].[Nickname], [t0].[SquadId] + FROM [Tags] AS [t] + LEFT JOIN ( + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[FullName] + FROM [Gears] AS [g0] + ) AS [t0] ON [g].[FullName] = [t0].[FullName] +) AS [t1] +WHERE [o].[Nickname] IS NOT NULL +ORDER BY [g].[Nickname], [g].[SquadId], [t1].[Id], [t1].[Nickname] +"""); + } + + public override async Task Negated_bool_ternary_inside_anonymous_type_in_projection(bool async) + { + await base.Negated_bool_ternary_inside_anonymous_type_in_projection(async); + + AssertSql( + """ +SELECT NOT (IIF(`s`.`HasSoulPatch`, TRUE, IIF(`s`.`HasSoulPatch` IS NULL, TRUE, `s`.`HasSoulPatch`))) AS `c` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +"""); + } + + public override async Task Order_by_entity_qsre(bool async) + { + await base.Order_by_entity_qsre(async); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` +ORDER BY `c`.`Name`, `g`.`Nickname` DESC +"""); + } + + public override async Task Order_by_entity_qsre_with_inheritance(bool async) + { + await base.Order_by_entity_qsre_with_inheritance(async); + + AssertSql( +""" +SELECT `l`.`Name` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN `LocustHighCommands` AS `l1` ON `l0`.`HighCommandId` = `l1`.`Id` +WHERE (`l0`.`Name` IS NOT NULL) AND (`l0`.`HighCommandId` IS NOT NULL AND `l1`.`Id` IS NOT NULL) +ORDER BY `l1`.`Id`, `l`.`Name` +"""); + } + + public override async Task Order_by_entity_qsre_composite_key(bool async) + { + await base.Order_by_entity_qsre_composite_key(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName` +ORDER BY `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Order_by_entity_qsre_with_other_orderbys(bool async) + { + await base.Order_by_entity_qsre_with_other_orderbys(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`SquadId` DESC, `w0`.`Id`, `w`.`Name` +"""); + } + + public override async Task Join_on_entity_qsre_keys(bool async) + { + await base.Join_on_entity_qsre_keys(async); + + AssertSql( +""" +SELECT `w`.`Name` AS `Name1`, `w0`.`Name` AS `Name2` +FROM `Weapons` AS `w` +INNER JOIN `Weapons` AS `w0` ON `w`.`Id` = `w0`.`Id` +"""); + } + + public override async Task Join_on_entity_qsre_keys_composite_key(bool async) + { + await base.Join_on_entity_qsre_keys_composite_key(async); + + AssertSql( + """ +SELECT `g`.`FullName` AS `GearName1`, `s`.`FullName` AS `GearName2` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` +"""); + } + + public override async Task Join_on_entity_qsre_keys_inheritance(bool async) + { + await base.Join_on_entity_qsre_keys_inheritance(async); + + AssertSql( + """ +SELECT `g`.`FullName` AS `GearName`, `s`.`FullName` AS `OfficerName` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o` ON `g0`.`Nickname` = `o`.`Nickname` AND `g0`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` +"""); + } + + public override async Task Join_on_entity_qsre_keys_outer_key_is_navigation(bool async) + { + await base.Join_on_entity_qsre_keys_outer_key_is_navigation(async); + + AssertSql( + """ +SELECT `w`.`Name` AS `Name1`, `w1`.`Name` AS `Name2` +FROM (`Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id`) +LEFT JOIN `Weapons` AS `w1` ON `w0`.`Id` = `w1`.`Id` +WHERE `w0`.`Id` IS NOT NULL AND `w1`.`Id` IS NOT NULL +"""); + } + + public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation(bool async) + { + await base.Join_on_entity_qsre_keys_inner_key_is_navigation(async); + + AssertSql( + """ +SELECT `c`.`Name` AS `CityName`, `s`.`Nickname` AS `GearNickname` +FROM `Cities` AS `c` +INNER JOIN ( + SELECT `g`.`Nickname`, `c0`.`Name` + FROM `Gears` AS `g` + LEFT JOIN `Cities` AS `c0` ON `g`.`AssignedCityName` = `c0`.`Name` +) AS `s` ON `c`.`Name` = `s`.`Name` +"""); + } + + public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(bool async) + { + await base.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `s0`.`Note` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `t`.`Note`, `s`.`Nickname`, `s`.`SquadId` + FROM `Tags` AS `t` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` + WHERE `t`.`Note` IN ('Cole''s Tag', 'Dom''s Tag') +) AS `s0` ON `g`.`Nickname` = `s0`.`Nickname` AND `g`.`SquadId` = `s0`.`SquadId` +"""); + } + + public override async Task Join_on_entity_qsre_keys_inner_key_is_nested_navigation(bool async) + { + await base.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(async); + + AssertSql( + """ +SELECT `s`.`Name` AS `SquadName`, `s2`.`Name` AS `WeaponName` +FROM `Squads` AS `s` +INNER JOIN ( + SELECT `w`.`Name`, `s1`.`Id` AS `Id0` + FROM (`Weapons` AS `w` + LEFT JOIN ( + SELECT `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName`) + LEFT JOIN `Squads` AS `s1` ON `s0`.`SquadId` = `s1`.`Id` + WHERE `w`.`IsAutomatic` +) AS `s2` ON `s`.`Id` = `s2`.`Id0` +"""); + } + + public override async Task GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(bool async) + { + await base.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(async); + + AssertSql( + """ +SELECT `s`.`Name` AS `SquadName`, `s2`.`Name` AS `WeaponName` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `w`.`Name`, `s1`.`Id` AS `Id0` + FROM (`Weapons` AS `w` + LEFT JOIN ( + SELECT `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName`) + LEFT JOIN `Squads` AS `s1` ON `s0`.`SquadId` = `s1`.`Id` +) AS `s2` ON `s`.`Id` = `s2`.`Id0` +"""); + } + + public override async Task Streaming_correlated_collection_issue_11403(bool async) + { + await base.Streaming_correlated_collection_issue_11403(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`Nickname` +) AS `s` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE NOT (`w`.`IsAutomatic`) +) AS `w0` ON `s`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `s`.`Nickname`, `s`.`SquadId`, `w0`.`Id` +"""); + } + + public override async Task Project_one_value_type_from_empty_collection(bool async) + { + await base.Project_one_value_type_from_empty_collection(async); + + AssertSql( + """ +SELECT `s`.`Name`, IIF(( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) IS NULL, 0, ( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`)) AS `SquadId` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Kilo' +"""); + } + + public override async Task Project_one_value_type_converted_to_nullable_from_empty_collection(bool async) + { + await base.Project_one_value_type_converted_to_nullable_from_empty_collection(async); + + AssertSql( + """ +SELECT `s`.`Name`, ( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) AS `SquadId` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Kilo' +"""); + } + + public override async Task Project_one_value_type_with_client_projection_from_empty_collection(bool async) + { + await base.Project_one_value_type_with_client_projection_from_empty_collection(async); + + AssertSql( +""" +SELECT [s].[Name], [t0].[SquadId], [t0].[LeaderSquadId], [t0].[c] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t].[SquadId], [t].[LeaderSquadId], [t].[c] + FROM ( + SELECT [g].[SquadId], [g].[LeaderSquadId], 1 AS [c], ROW_NUMBER() OVER(PARTITION BY [g].[SquadId] ORDER BY [g].[Nickname], [g].[SquadId]) AS [row] + FROM [Gears] AS [g] + WHERE [g].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [s].[Id] = [t0].[SquadId] +WHERE [s].[Name] = N'Kilo' +"""); + } + + public override async Task Filter_on_subquery_projecting_one_value_type_from_empty_collection(bool async) + { + await base.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async); + + AssertSql( + """ +SELECT `s`.`Name` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Kilo' AND IIF(( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) IS NULL, 0, ( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`)) <> 0 +"""); + } + + public override async Task Select_subquery_projecting_single_constant_int(bool async) + { + await base.Select_subquery_projecting_single_constant_int(async); + + AssertSql( + """ +SELECT `s`.`Name`, IIF(( + SELECT TOP 1 42 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) IS NULL, 0, ( + SELECT TOP 1 42 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`)) AS `Gear` +FROM `Squads` AS `s` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_string(bool async) + { + await base.Select_subquery_projecting_single_constant_string(async); + + AssertSql( + """ +SELECT `s`.`Name`, ( + SELECT TOP 1 'Foo' + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) AS `Gear` +FROM `Squads` AS `s` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_bool(bool async) + { + await base.Select_subquery_projecting_single_constant_bool(async); + + AssertSql( + """ +SELECT `s`.`Name`, IIF(( + SELECT TOP 1 TRUE + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`) IS NULL, FALSE, ( + SELECT TOP 1 TRUE + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch`)) AS `Gear` +FROM `Squads` AS `s` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_inside_anonymous(bool async) + { + await base.Select_subquery_projecting_single_constant_inside_anonymous(async); + + AssertSql( +""" +SELECT [s].[Name], [t0].[One] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t].[One], [t].[SquadId] + FROM ( + SELECT 1 AS [One], [g].[SquadId], ROW_NUMBER() OVER(PARTITION BY [g].[SquadId] ORDER BY [g].[Nickname], [g].[SquadId]) AS [row] + FROM [Gears] AS [g] + WHERE [g].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [s].[Id] = [t0].[SquadId] +"""); + } + + public override async Task Select_subquery_projecting_multiple_constants_inside_anonymous(bool async) + { + await base.Select_subquery_projecting_multiple_constants_inside_anonymous(async); + + AssertSql( +""" +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `t` ON `s`.`Id` = `t`.`SquadId` +ORDER BY `s`.`Id`, `t`.`Nickname` +"""); + } + + public override async Task Include_with_order_by_constant(bool async) + { + await base.Include_with_order_by_constant(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `s`.`Id`, `s0`.`Nickname` +"""); + } + + public override async Task Correlated_collection_order_by_constant(bool async) + { + await base.Correlated_collection_order_by_constant(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Name`, `w`.`Id` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Select_subquery_projecting_single_constant_null_of_non_mapped_type(bool async) + { + await base.Select_subquery_projecting_single_constant_null_of_non_mapped_type(async); + + AssertSql( +""" +SELECT [s].[Name], [t0].[c] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t].[c], [t].[SquadId] + FROM ( + SELECT 1 AS [c], [g].[SquadId], ROW_NUMBER() OVER(PARTITION BY [g].[SquadId] ORDER BY [g].[Nickname], [g].[SquadId]) AS [row] + FROM [Gears] AS [g] + WHERE [g].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [s].[Id] = [t0].[SquadId] +"""); + } + + public override async Task Select_subquery_projecting_single_constant_of_non_mapped_type(bool async) + { + await base.Select_subquery_projecting_single_constant_of_non_mapped_type(async); + + AssertSql( +""" +SELECT [s].[Name], [t0].[c] +FROM [Squads] AS [s] +LEFT JOIN ( + SELECT [t].[c], [t].[SquadId] + FROM ( + SELECT 1 AS [c], [g].[SquadId], ROW_NUMBER() OVER(PARTITION BY [g].[SquadId] ORDER BY [g].[Nickname], [g].[SquadId]) AS [row] + FROM [Gears] AS [g] + WHERE [g].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [s].[Id] = [t0].[SquadId] +"""); + } + + public override async Task Include_collection_OrderBy_aggregate(bool async) + { + await base.Include_collection_OrderBy_aggregate(async); + + AssertSql( + """ +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName0`, `s0`.`CityOfBirthName0`, `s0`.`FullName0`, `s0`.`HasSoulPatch0`, `s0`.`LeaderNickname0`, `s0`.`LeaderSquadId0`, `s0`.`Rank0`, `s0`.`Discriminator0`, `s0`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName` AS `AssignedCityName0`, `s`.`CityOfBirthName` AS `CityOfBirthName0`, `s`.`FullName` AS `FullName0`, `s`.`HasSoulPatch` AS `HasSoulPatch0`, `s`.`LeaderNickname` AS `LeaderNickname0`, `s`.`LeaderSquadId` AS `LeaderSquadId0`, `s`.`Rank` AS `Rank0`, `s`.`Discriminator` AS `Discriminator0`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `c` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s0` +ORDER BY `s0`.`c`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` +"""); + } + + public override async Task Include_collection_with_complex_OrderBy2(bool async) + { + await base.Include_collection_with_complex_OrderBy2(async); + + AssertSql( +""" +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName0`, `s0`.`CityOfBirthName0`, `s0`.`FullName0`, `s0`.`HasSoulPatch0`, `s0`.`LeaderNickname0`, `s0`.`LeaderSquadId0`, `s0`.`Rank0`, `s0`.`Discriminator0`, `s0`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName` AS `AssignedCityName0`, `s`.`CityOfBirthName` AS `CityOfBirthName0`, `s`.`FullName` AS `FullName0`, `s`.`HasSoulPatch` AS `HasSoulPatch0`, `s`.`LeaderNickname` AS `LeaderNickname0`, `s`.`LeaderSquadId` AS `LeaderSquadId0`, `s`.`Rank` AS `Rank0`, `s`.`Discriminator` AS `Discriminator0`, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) AS `c` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s0` +ORDER BY NOT (`s0`.`c`), `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` +"""); + } + + public override async Task Include_collection_with_complex_OrderBy3(bool async) + { + await base.Include_collection_with_complex_OrderBy3(async); + + AssertSql( +""" +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName0`, `s0`.`CityOfBirthName0`, `s0`.`FullName0`, `s0`.`HasSoulPatch0`, `s0`.`LeaderNickname0`, `s0`.`LeaderSquadId0`, `s0`.`Rank0`, `s0`.`Discriminator0`, `s0`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName` AS `AssignedCityName0`, `s`.`CityOfBirthName` AS `CityOfBirthName0`, `s`.`FullName` AS `FullName0`, `s`.`HasSoulPatch` AS `HasSoulPatch0`, `s`.`LeaderNickname` AS `LeaderNickname0`, `s`.`LeaderSquadId` AS `LeaderSquadId0`, `s`.`Rank` AS `Rank0`, `s`.`Discriminator` AS `Discriminator0`, IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) AS `c` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s0` +ORDER BY NOT (`s0`.`c`), `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` +"""); + } + + public override async Task Correlated_collection_with_complex_OrderBy(bool async) + { + await base.Correlated_collection_with_complex_OrderBy(async); + + AssertSql( + """ +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `c` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` + WHERE NOT (`g0`.`HasSoulPatch`) + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s0` +ORDER BY `s0`.`c`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` +"""); + } + + public override async Task Correlated_collection_with_very_complex_order_by(bool async) + { + await base.Correlated_collection_with_very_complex_order_by(async); + + AssertSql( + """ +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = IIF(( + SELECT TOP 1 `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` = 'Marcus') IS NULL, FALSE, ( + SELECT TOP 1 `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` = 'Marcus'))) AS `c` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + LEFT JOIN ( + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g1` + LEFT JOIN `Officers` AS `o0` ON `g1`.`Nickname` = `o0`.`Nickname` AND `g1`.`SquadId` = `o0`.`SquadId` + WHERE NOT (`g1`.`HasSoulPatch`) + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s0` +ORDER BY `s0`.`c`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` +"""); + } + + public override async Task Cast_to_derived_type_after_OfType_works(bool async) + { + await base.Cast_to_derived_type_after_OfType_works(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `o`.`Nickname` IS NOT NULL +"""); + } + + public override async Task Select_subquery_boolean(bool async) + { + await base.Select_subquery_boolean(async); + + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_boolean_with_pushdown(bool async) + { + await base.Select_subquery_boolean_with_pushdown(async); + + AssertSql( +""" +SELECT ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_int_with_inside_cast_and_coalesce(bool async) + { + await base.Select_subquery_int_with_inside_cast_and_coalesce(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 42, ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_int_with_outside_cast_and_coalesce(bool async) + { + await base.Select_subquery_int_with_outside_cast_and_coalesce(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 0, ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_int_with_pushdown_and_coalesce(bool async) + { + await base.Select_subquery_int_with_pushdown_and_coalesce(async); + + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 42, ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_int_with_pushdown_and_coalesce2(bool async) + { + await base.Select_subquery_int_with_pushdown_and_coalesce2(async); + + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, ( + SELECT TOP 1 `w0`.`Id` + FROM `Weapons` AS `w0` + WHERE `g`.`FullName` = `w0`.`OwnerFullName` + ORDER BY `w0`.`Id`), ( + SELECT TOP 1 `w`.`Id` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_boolean_empty(bool async) + { + await base.Select_subquery_boolean_empty(async); + + AssertSql( +""" +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ORDER BY `w`.`Id`)) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_boolean_empty_with_pushdown(bool async) + { + await base.Select_subquery_boolean_empty_with_pushdown(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ORDER BY `w`.`Id`) +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean1(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean1(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`)) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean2(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean2(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_with_pushdown(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean_with_pushdown(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%') + ) AS `w0`) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_empty1(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean_empty1(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ) AS `w0`) IS NULL, FALSE, ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ) AS `w0`)) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_empty2(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean_empty2(async); + + AssertSql( + """ +SELECT IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG') IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG')) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Select_subquery_distinct_singleordefault_boolean_empty_with_pushdown(bool async) + { + await base.Select_subquery_distinct_singleordefault_boolean_empty_with_pushdown(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `w0`.`IsAutomatic` + FROM ( + SELECT DISTINCT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + ) AS `w0`) +FROM `Gears` AS `g` +WHERE `g`.`HasSoulPatch` +"""); + } + + public override async Task Cast_subquery_to_base_type_using_typed_ToList(bool async) + { + await base.Cast_subquery_to_base_type_using_typed_ToList(async); + + AssertSql( + """ +SELECT `c`.`Name`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Nickname`, `s`.`Rank`, `s`.`SquadId` +FROM `Cities` AS `c` +LEFT JOIN ( + SELECT `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Nickname`, `g`.`Rank`, `g`.`SquadId`, `g`.`AssignedCityName` + FROM `Gears` AS `g` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` +WHERE `c`.`Name` = 'Ephyra' +ORDER BY `c`.`Name`, `s`.`Nickname` +"""); + } + + public override async Task Cast_ordered_subquery_to_base_type_using_typed_ToArray(bool async) + { + await base.Cast_ordered_subquery_to_base_type_using_typed_ToArray(async); + + AssertSql( + """ +SELECT `c`.`Name`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Nickname`, `s`.`Rank`, `s`.`SquadId` +FROM `Cities` AS `c` +LEFT JOIN ( + SELECT `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Nickname`, `g`.`Rank`, `g`.`SquadId`, `g`.`AssignedCityName` + FROM `Gears` AS `g` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` +WHERE `c`.`Name` = 'Ephyra' +ORDER BY `c`.`Name`, `s`.`Nickname` DESC +"""); + } + + public override async Task Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(bool async) + { + await base.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Name`, `w`.`Id` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Double_order_by_on_nullable_bool_coming_from_optional_navigation(bool async) + { + await base.Double_order_by_on_nullable_bool_coming_from_optional_navigation(async); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`IsAutomatic`), `w0`.`Id` +"""); + } + + public override async Task Double_order_by_on_Like(bool async) + { + await base.Double_order_by_on_Like(async); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT ((`w0`.`Name` LIKE '%Lancer') AND `w0`.`Name` IS NOT NULL) +"""); + } + + public override async Task Double_order_by_on_is_null(bool async) + { + await base.Double_order_by_on_is_null(async); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`Name` IS NULL) +"""); + } + + public override async Task Double_order_by_on_string_compare(bool async) + { + await base.Double_order_by_on_string_compare(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +ORDER BY NOT (`w`.`Name` = 'Marcus'' Lancer' AND `w`.`Name` IS NOT NULL), `w`.`Id` +"""); + } + + public override async Task Double_order_by_binary_expression(bool async) + { + await base.Double_order_by_binary_expression(async); + + AssertSql( + """ +SELECT `w0`.`Binary` +FROM ( + SELECT `w`.`Id` + 2 AS `Binary` + FROM `Weapons` AS `w` +) AS `w0` +ORDER BY `w0`.`Binary` +"""); + } + + public override async Task String_compare_with_null_conditional_argument(bool async) + { + await base.String_compare_with_null_conditional_argument(async); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`Name` = 'Marcus'' Lancer' AND `w0`.`Name` IS NOT NULL) +"""); + } + + public override async Task String_compare_with_null_conditional_argument2(bool async) + { + await base.String_compare_with_null_conditional_argument2(async); + + AssertSql( + """ +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT ('Marcus'' Lancer' = `w0`.`Name` AND `w0`.`Name` IS NOT NULL) +"""); + } + + public override async Task String_concat_with_null_conditional_argument(bool async) + { + await base.String_concat_with_null_conditional_argument(async); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY IIF(`w0`.`Name` IS NULL, '', `w0`.`Name`) & (5 & '') +"""); + } + + public override async Task String_concat_with_null_conditional_argument2(bool async) + { + await base.String_concat_with_null_conditional_argument2(async); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY IIF(`w0`.`Name` IS NULL, '', `w0`.`Name`) & 'Marcus'' Lancer' +"""); + } + + public override async Task String_concat_on_various_types(bool async) + { + await base.String_concat_on_various_types(async); + + AssertSql( + """ +SELECT ('HasSoulPatch ' & (`g`.`HasSoulPatch` & '')) & ' HasSoulPatch' AS `HasSoulPatch`, ('Rank ' & (`g`.`Rank` & '')) & ' Rank' AS `Rank`, ('SquadId ' & (`g`.`SquadId` & '')) & ' SquadId' AS `SquadId`, ('Rating ' & IIF((`m`.`Rating` & '') IS NULL, '', (`m`.`Rating` & ''))) & ' Rating' AS `Rating`, ('Timeline ' & (`m`.`Timeline` & '')) & ' Timeline' AS `Timeline` +FROM `Gears` AS `g`, +`Missions` AS `m` +ORDER BY `g`.`Nickname`, `m`.`Id` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Average(bool async) + { + await base.GroupBy_Property_Include_Select_Average(async); + + AssertSql( +""" +SELECT AVG(CDBL(`g`.`SquadId`)) +FROM `Gears` AS `g` +GROUP BY `g`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Sum(bool async) + { + await base.GroupBy_Property_Include_Select_Sum(async); + + AssertSql( +""" +SELECT IIF(SUM(`g`.`SquadId`) IS NULL, 0, SUM(`g`.`SquadId`)) +FROM `Gears` AS `g` +GROUP BY `g`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Count(bool async) + { + await base.GroupBy_Property_Include_Select_Count(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM `Gears` AS `g` +GROUP BY `g`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_LongCount(bool async) + { + await base.GroupBy_Property_Include_Select_LongCount(async); + + AssertSql( +""" +SELECT COUNT(*) +FROM `Gears` AS `g` +GROUP BY `g`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Select_Min(bool async) + { + await base.GroupBy_Property_Include_Select_Min(async); + + AssertSql( +""" +SELECT MIN(`g`.`SquadId`) +FROM `Gears` AS `g` +GROUP BY `g`.`Rank` +"""); + } + + public override async Task GroupBy_Property_Include_Aggregate_with_anonymous_selector(bool async) + { + await base.GroupBy_Property_Include_Aggregate_with_anonymous_selector(async); + + AssertSql( +""" +SELECT `g`.`Nickname` AS `Key`, COUNT(*) AS `c` +FROM `Gears` AS `g` +GROUP BY `g`.`Nickname` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Group_by_with_include_with_entity_in_result_selector(bool async) + { + await base.Group_by_with_include_with_entity_in_result_selector(async); + + AssertSql( +""" +SELECT [t].[Rank], [t].[c], [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator], [t0].[Name], [t0].[Location], [t0].[Nation] +FROM ( + SELECT [g].[Rank], COUNT(*) AS [c] + FROM [Gears] AS [g] + GROUP BY [g].[Rank] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator], [t1].[Name], [t1].[Location], [t1].[Nation] + FROM ( + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank], CASE + WHEN [o0].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator], [c].[Name], [c].[Location], [c].[Nation], ROW_NUMBER() OVER(PARTITION BY [g0].[Rank] ORDER BY [g0].[Nickname]) AS [row] + FROM [Gears] AS [g0] + LEFT JOIN [Officers] AS [o0] ON [g0].[Nickname] = [o0].[Nickname] AND [g0].[SquadId] = [o0].[SquadId] + INNER JOIN [Cities] AS [c] ON [g0].[CityOfBirthName] = [c].[Name] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Rank] = [t0].[Rank] +ORDER BY [t].[Rank] +"""); + } + + public override async Task GroupBy_Property_Include_Select_Max(bool async) + { + await base.GroupBy_Property_Include_Select_Max(async); + + AssertSql( +""" +SELECT MAX(`g`.`SquadId`) +FROM `Gears` AS `g` +GROUP BY `g`.`Rank` +"""); + } + + public override async Task Include_with_group_by_and_FirstOrDefault_gets_properly_applied(bool async) + { + await base.Include_with_group_by_and_FirstOrDefault_gets_properly_applied(async); + + AssertSql( +""" +SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOfBirthName], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [t0].[Discriminator], [t0].[Name], [t0].[Location], [t0].[Nation] +FROM ( + SELECT [g].[Rank] + FROM [Gears] AS [g] + GROUP BY [g].[Rank] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator], [t1].[Name], [t1].[Location], [t1].[Nation] + FROM ( + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank], CASE + WHEN [o0].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator], [c].[Name], [c].[Location], [c].[Nation], ROW_NUMBER() OVER(PARTITION BY [g0].[Rank] ORDER BY [g0].[Nickname], [g0].[SquadId], [c].[Name]) AS [row] + FROM [Gears] AS [g0] + LEFT JOIN [Officers] AS [o0] ON [g0].[Nickname] = [o0].[Nickname] AND [g0].[SquadId] = [o0].[SquadId] + INNER JOIN [Cities] AS [c] ON [g0].[CityOfBirthName] = [c].[Name] + WHERE [g0].[HasSoulPatch] = CAST(1 AS bit) + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[Rank] = [t0].[Rank] +"""); + } + + public override async Task Include_collection_with_Cast_to_base(bool async) + { + await base.Include_collection_with_Cast_to_base(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Include_with_client_method_and_member_access_still_applies_includes(bool async) + { + await base.Include_with_client_method_and_member_access_still_applies_includes(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +"""); + } + + public override async Task Include_with_projection_of_unmapped_property_still_gets_applied(bool async) + { + await base.Include_with_projection_of_unmapped_property_still_gets_applied(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection() + { + await base.Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection(); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +WHERE `s`.`Name` = 'Delta' +ORDER BY `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` +"""); + } + + public override async Task OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(bool async) + { + await base.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(async); + + AssertSql( + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, NULL) +FROM `Gears` AS `g` +ORDER BY NOT (IIF(`g`.`LeaderNickname` IS NOT NULL, TRUE, FALSE)) +"""); + } + + public override async Task GetValueOrDefault_in_projection(bool async) + { + await base.GetValueOrDefault_in_projection(async); + + AssertSql( +""" +SELECT IIF(`w`.`SynergyWithId` IS NULL, 0, `w`.`SynergyWithId`) +FROM `Weapons` AS `w` +"""); + } + + public override async Task GetValueOrDefault_in_filter(bool async) + { + await base.GetValueOrDefault_in_filter(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`SynergyWithId` IS NULL, 0, `w`.`SynergyWithId`) = 0 +"""); + } + + public override async Task GetValueOrDefault_in_filter_non_nullable_column(bool async) + { + await base.GetValueOrDefault_in_filter_non_nullable_column(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`Id` = 0 +"""); + } + + public override async Task GetValueOrDefault_in_order_by(bool async) + { + await base.GetValueOrDefault_in_order_by(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +ORDER BY IIF(`w`.`SynergyWithId` IS NULL, 0, `w`.`SynergyWithId`), `w`.`Id` +"""); + } + + public override async Task GetValueOrDefault_with_argument(bool async) + { + await base.GetValueOrDefault_with_argument(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`SynergyWithId` IS NULL, `w`.`Id`, `w`.`SynergyWithId`) = 1 +"""); + } + + public override async Task GetValueOrDefault_with_argument_complex(bool async) + { + await base.GetValueOrDefault_with_argument_complex(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`SynergyWithId` IS NULL, IIF(LEN(`w`.`Name`) IS NULL, NULL, CLNG(LEN(`w`.`Name`))) + 42, `w`.`SynergyWithId`) > 10 +"""); + } + + public override async Task Filter_with_complex_predicate_containing_subquery(bool async) + { + await base.Filter_with_complex_predicate_containing_subquery(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`FullName` <> 'Dom' AND EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic`) +"""); + } + + public override async Task Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let( + bool async) + { + await base.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` + ORDER BY `w`.`AmmunitionType` DESC) AS `WeaponName` +FROM `Gears` AS `g` +WHERE `g`.`Nickname` <> 'Dom' +"""); + } + + public override async Task + Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(bool async) + { + await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`s`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `s`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) +"""); + } + + public override async Task + Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(bool async) + { + await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex( + async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` +WHERE IIF(LEN(`s0`.`Name`) IS NULL, NULL, MID(`t`.`Note`, 0 + 1, IIF(LEN(`s0`.`Name`) IS NULL, NULL, CLNG(LEN(`s0`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s0`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) +"""); + } + + public override async Task OfTypeNav1(bool async) + { + await base.OfTypeNav1(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Tags` AS `t0` ON `g`.`Nickname` = `t0`.`GearNickName` AND `g`.`SquadId` = `t0`.`GearSquadId` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND `o`.`Nickname` IS NOT NULL AND (`t0`.`Note` <> 'Bar' OR `t0`.`Note` IS NULL) +"""); + } + + public override async Task OfTypeNav2(bool async) + { + await base.OfTypeNav2(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND `o`.`Nickname` IS NOT NULL AND (`c`.`Location` <> 'Bar' OR `c`.`Location` IS NULL) +"""); + } + + public override async Task OfTypeNav3(bool async) + { + await base.OfTypeNav3(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +INNER JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Tags` AS `t0` ON `g`.`Nickname` = `t0`.`GearNickName` AND `g`.`SquadId` = `t0`.`GearSquadId` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND `o`.`Nickname` IS NOT NULL AND (`t0`.`Note` <> 'Bar' OR `t0`.`Note` IS NULL) +"""); + } + + public override async Task Nav_rewrite_Distinct_with_convert() + { + await base.Nav_rewrite_Distinct_with_convert(); + + AssertSql(); + } + + public override async Task Nav_rewrite_Distinct_with_convert_anonymous() + { + await base.Nav_rewrite_Distinct_with_convert_anonymous(); + + AssertSql(); + } + + public override async Task Nav_rewrite_with_convert1(bool async) + { + await base.Nav_rewrite_with_convert1(async); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId` +FROM ((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE `c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL +"""); + } + + public override async Task Nav_rewrite_with_convert2(bool async) + { + await base.Nav_rewrite_with_convert2(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` +FROM ((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) +LEFT JOIN ( + SELECT `l0`.`Name` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`s`.`Name` <> 'Bar' OR `s`.`Name` IS NULL) +"""); + } + + public override async Task Nav_rewrite_with_convert3(bool async) + { + await base.Nav_rewrite_with_convert3(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` +FROM ((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) +LEFT JOIN ( + SELECT `l0`.`Name` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`s`.`Name` <> 'Bar' OR `s`.`Name` IS NULL) +"""); + } + + public override async Task Where_contains_on_navigation_with_composite_keys(bool async) + { + await base.Where_contains_on_navigation_with_composite_keys(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE EXISTS ( + SELECT 1 + FROM `Cities` AS `c` + WHERE EXISTS ( + SELECT 1 + FROM `Gears` AS `g0` + WHERE `c`.`Name` = `g0`.`CityOfBirthName` AND `g0`.`Nickname` = `g`.`Nickname` AND `g0`.`SquadId` = `g`.`SquadId`)) +"""); + } + + public override async Task Include_with_complex_order_by(bool async) + { + await base.Include_with_complex_order_by(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`c` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Gnasher%')) AS `c` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Anonymous_projection_take_followed_by_projecting_single_element_from_collection_navigation(bool async) + { + await base.Anonymous_projection_take_followed_by_projecting_single_element_from_collection_navigation(async); + + AssertSql( +""" +@__p_0='25' + +SELECT [t0].[Id], [t0].[AmmunitionType], [t0].[IsAutomatic], [t0].[Name], [t0].[OwnerFullName], [t0].[SynergyWithId] +FROM ( + SELECT TOP(@__p_0) [g].[FullName] + FROM [Gears] AS [g] +) AS [t] +LEFT JOIN ( + SELECT [t1].[Id], [t1].[AmmunitionType], [t1].[IsAutomatic], [t1].[Name], [t1].[OwnerFullName], [t1].[SynergyWithId] + FROM ( + SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId], ROW_NUMBER() OVER(PARTITION BY [w].[OwnerFullName] ORDER BY [w].[Id]) AS [row] + FROM [Weapons] AS [w] + ) AS [t1] + WHERE [t1].[row] <= 1 +) AS [t0] ON [t].[FullName] = [t0].[OwnerFullName] +"""); + } + + public override async Task Bool_projection_from_subquery_treated_appropriately_in_where(bool async) + { + await base.Bool_projection_from_subquery_treated_appropriately_in_where(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE ( + SELECT TOP 1 `g`.`HasSoulPatch` + FROM `Gears` AS `g` + ORDER BY `g`.`Nickname`, `g`.`SquadId`) +"""); + } + + public override async Task DateTimeOffset_Contains_Less_than_Greater_than(bool async) + { + var dto = LibRedTestHelpers.GetExpectedValue(new DateTimeOffset(599898024001234567, new TimeSpan(1, 30, 0))); + var start = dto.AddDays(-1); + var end = dto.AddDays(1); + var dates = new[] { dto }; + + await AssertQuery( + async, + ss => ss.Set().Where( + m => start <= m.Timeline.Date && m.Timeline < end && dates.Contains(m.Timeline))); + + AssertSql( + """ +@start='1902-01-01T08:30:00.0000000Z' (DbType = DateTime) +@end='1902-01-03T08:30:00.0000000Z' (DbType = DateTime) +@dates1='1902-01-02T08:30:00.0000000Z' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE @start <= DATEVALUE(`m`.`Timeline`) AND `m`.`Timeline` < @end AND `m`.`Timeline` = @dates1 +"""); + } + + public override Task DateTimeOffsetNow_minus_timespan(bool async) + => AssertTranslationFailed(() => base.DateTimeOffsetNow_minus_timespan(async)); + + public override async Task Navigation_inside_interpolated_string_expanded(bool async) + { + await base.Navigation_inside_interpolated_string_expanded(async); + + AssertSql( + """ +SELECT `w`.`SynergyWithId` IS NOT NULL, `w0`.`OwnerFullName` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +"""); + } + + public override async Task Left_join_projection_using_coalesce_tracking(bool async) + { + await base.Left_join_projection_using_coalesce_tracking(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname` +"""); + } + + public override async Task Left_join_projection_using_conditional_tracking(bool async) + { + await base.Left_join_projection_using_conditional_tracking(async); + + AssertSql( + """ +SELECT `s`.`Nickname` IS NULL OR `s`.`SquadId` IS NULL, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname` +"""); + } + + public override async Task Project_collection_navigation_nested_with_take_composite_key(bool async) + { + await base.Project_collection_navigation_nested_with_take_composite_key(async); + + AssertSql( +""" +SELECT [t].[Id], [t0].[Nickname], [t0].[SquadId], [t1].[Nickname], [t1].[SquadId], [t1].[AssignedCityName], [t1].[CityOfBirthName], [t1].[FullName], [t1].[HasSoulPatch], [t1].[LeaderNickname], [t1].[LeaderSquadId], [t1].[Rank], [t1].[Discriminator] +FROM [Tags] AS [t] +LEFT JOIN ( + SELECT [g].[Nickname], [g].[SquadId], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator] + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +) AS [t0] ON [t].[GearNickName] = [t0].[Nickname] AND [t].[GearSquadId] = [t0].[SquadId] +LEFT JOIN ( + SELECT [t2].[Nickname], [t2].[SquadId], [t2].[AssignedCityName], [t2].[CityOfBirthName], [t2].[FullName], [t2].[HasSoulPatch], [t2].[LeaderNickname], [t2].[LeaderSquadId], [t2].[Rank], [t2].[Discriminator] + FROM ( + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank], CASE + WHEN [o0].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator], ROW_NUMBER() OVER(PARTITION BY [g0].[LeaderNickname], [g0].[LeaderSquadId] ORDER BY [g0].[Nickname], [g0].[SquadId]) AS [row] + FROM [Gears] AS [g0] + LEFT JOIN [Officers] AS [o0] ON [g0].[Nickname] = [o0].[Nickname] AND [g0].[SquadId] = [o0].[SquadId] + ) AS [t2] + WHERE [t2].[row] <= 50 +) AS [t1] ON ([t0].[Nickname] = [t1].[LeaderNickname] OR (([t0].[Nickname] IS NULL) AND ([t1].[LeaderNickname] IS NULL))) AND [t0].[SquadId] = [t1].[LeaderSquadId] +WHERE [t0].[Discriminator] = N'Officer' +ORDER BY [t].[Id], [t0].[Nickname], [t0].[SquadId], [t1].[Nickname] +"""); + } + + public override async Task Project_collection_navigation_nested_composite_key(bool async) + { + await base.Project_collection_navigation_nested_composite_key(async); + + AssertSql( + """ +SELECT `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s0` ON (`s`.`Nickname` = `s0`.`LeaderNickname` OR (`s`.`Nickname` IS NULL AND `s0`.`LeaderNickname` IS NULL)) AND `s`.`SquadId` = `s0`.`LeaderSquadId` +WHERE `s`.`Discriminator` = 'Officer' +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname` +"""); + } + + public override async Task Null_checks_in_correlated_predicate_are_correctly_translated(bool async) + { + await base.Null_checks_in_correlated_predicate_are_correctly_translated(async); + + AssertSql( + """ +SELECT `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`Note` IS NOT NULL +ORDER BY `t`.`Id`, `s`.`Nickname` +"""); + } + + public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(bool async) + { + await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(async); + + AssertSql( + """ +@isAutomatic='True' + +SELECT `g`.`Nickname`, `g`.`FullName`, `w0`.`Id` IS NOT NULL AS `Collection` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` = @isAutomatic +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +"""); + } + + public override async Task DefaultIfEmpty_top_level_over_column_with_nullable_value_type(bool async) + { + await base.DefaultIfEmpty_top_level_over_column_with_nullable_value_type(async); + + AssertSql( + """ +SELECT `m0`.`Rating` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `m`.`Rating` + FROM `Missions` AS `m` + WHERE `m`.`Id` = -1 +) AS `m0` ON TRUE +"""); + } + + public override async Task DefaultIfEmpty_top_level_over_arbitrary_expression_with_nullable_value_type(bool async) + { + await base.DefaultIfEmpty_top_level_over_arbitrary_expression_with_nullable_value_type(async); + + AssertSql( + """ +SELECT `m0`.`c` +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `m`.`Rating` + 2.0 AS `c` + FROM `Missions` AS `m` + WHERE `m`.`Id` = -1 +) AS `m0` ON TRUE +"""); + } + + public override async Task DefaultIfEmpty_top_level_over_arbitrary_expression_with_non_nullable_value_type(bool async) + { + await base.DefaultIfEmpty_top_level_over_arbitrary_expression_with_non_nullable_value_type(async); + + AssertSql( + """ +SELECT IIF(`m0`.`c` IS NULL, 0, `m0`.`c`) +FROM ( + SELECT 1 + FROM (SELECT COUNT(*) FROM `#Dual`) +) AS `e` +LEFT JOIN ( + SELECT `m`.`Id` + 2 AS `c` + FROM `Missions` AS `m` + WHERE `m`.`Id` = -1 +) AS `m0` ON TRUE +"""); + } + + public override async Task Join_with_inner_being_a_subquery_projecting_single_property(bool async) + { + await base.Join_with_inner_being_a_subquery_projecting_single_property(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN ( + SELECT `g0`.`Nickname` + FROM `Gears` AS `g0` +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` +"""); + } + + public override async Task Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(bool async) + { + await base.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN ( + SELECT `g0`.`Nickname` + FROM `Gears` AS `g0` +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` +"""); + } + + public override async Task Navigation_based_on_complex_expression1(bool async) + { + await base.Navigation_based_on_complex_expression1(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE IIF(`l`.`Id` IS NOT NULL, `s`.`Name` IS NOT NULL, FALSE) +"""); + } + + public override async Task Navigation_based_on_complex_expression2(bool async) + { + await base.Navigation_based_on_complex_expression2(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE `l`.`Id` IS NOT NULL AND `s`.`Name` IS NOT NULL +"""); + } + + public override async Task Navigation_based_on_complex_expression3(bool async) + { + await base.Navigation_based_on_complex_expression3(async); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` + FROM `LocustLeaders` AS `l0` + INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE `l`.`Id` IS NOT NULL +"""); + } + + public override async Task Navigation_based_on_complex_expression4(bool async) + { + await base.Navigation_based_on_complex_expression4(async); + + AssertSql( + """ +SELECT `s0`.`Discriminator` = 'LocustHorde' AND `s0`.`Discriminator` IS NOT NULL, `s1`.`Name`, `s1`.`LocustHordeId`, `s1`.`ThreatLevel`, `s1`.`ThreatLevelByte`, `s1`.`ThreatLevelNullableByte`, `s1`.`DefeatedByNickname`, `s1`.`DefeatedBySquadId`, `s1`.`HighCommandId`, `s0`.`Name0`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s0`.`Discriminator0` AS `Discriminator` +FROM ( + SELECT `l`.`CommanderName`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s`.`Name` AS `Name0`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Discriminator` AS `Discriminator0` + FROM (`Factions` AS `f` + LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`), + ( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, IIF(`l1`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` + FROM `LocustLeaders` AS `l0` + LEFT JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` + WHERE `l1`.`Name` IS NOT NULL + ) AS `s` +) AS `s0` +LEFT JOIN ( + SELECT `l2`.`Name`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l3`.`DefeatedByNickname`, `l3`.`DefeatedBySquadId`, `l3`.`HighCommandId` + FROM `LocustLeaders` AS `l2` + INNER JOIN `LocustCommanders` AS `l3` ON `l2`.`Name` = `l3`.`Name` +) AS `s1` ON `s0`.`CommanderName` = `s1`.`Name` +"""); + } + + public override async Task Navigation_based_on_complex_expression5(bool async) + { + await base.Navigation_based_on_complex_expression5(async); + + AssertSql( + """ +SELECT `s0`.`Name`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Discriminator` +FROM ((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l2`.`Name`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l3`.`DefeatedByNickname`, `l3`.`DefeatedBySquadId`, `l3`.`HighCommandId` + FROM `LocustLeaders` AS `l2` + INNER JOIN `LocustCommanders` AS `l3` ON `l2`.`Name` = `l3`.`Name` +) AS `s0` ON `l`.`CommanderName` = `s0`.`Name`), +( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, IIF(`l1`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` + FROM `LocustLeaders` AS `l0` + LEFT JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` + WHERE `l1`.`Name` IS NOT NULL +) AS `s` +WHERE `l`.`Id` IS NOT NULL +"""); + } + + public override async Task Navigation_based_on_complex_expression6(bool async) + { + await base.Navigation_based_on_complex_expression6(async); + + AssertSql( + """ +SELECT `s0`.`Name` = 'Queen Myrrah' AND `s0`.`Name` IS NOT NULL, `s0`.`Name`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Discriminator` +FROM ((`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `l2`.`Name`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l3`.`DefeatedByNickname`, `l3`.`DefeatedBySquadId`, `l3`.`HighCommandId` + FROM `LocustLeaders` AS `l2` + INNER JOIN `LocustCommanders` AS `l3` ON `l2`.`Name` = `l3`.`Name` +) AS `s0` ON `l`.`CommanderName` = `s0`.`Name`), +( + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, IIF(`l1`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` + FROM `LocustLeaders` AS `l0` + LEFT JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` + WHERE `l1`.`Name` IS NOT NULL +) AS `s` +WHERE `l`.`Id` IS NOT NULL +"""); + } + + public override async Task Select_as_operator(bool async) + { + await base.Select_as_operator(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` +"""); + } + + public override async Task Select_datetimeoffset_comparison_in_projection(bool async) + { + await base.Select_datetimeoffset_comparison_in_projection(async); + + AssertSql( + """ +SELECT `m`.`Timeline` > NOW() +FROM `Missions` AS `m` +"""); + } + + public override async Task OfType_in_subquery_works(bool async) + { + await base.OfType_in_subquery_works(async); + + AssertSql( + """ +SELECT `s`.`Name`, `s`.`Location`, `s`.`Nation` +FROM (`Gears` AS `g` +INNER JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN ( + SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM (`Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) + LEFT JOIN `Cities` AS `c` ON `g0`.`AssignedCityName` = `c`.`Name` + WHERE `o0`.`Nickname` IS NOT NULL +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +"""); + } + + public override async Task Nullable_bool_comparison_is_translated_to_server(bool async) + { + await base.Nullable_bool_comparison_is_translated_to_server(async); + + AssertSql( + """ +SELECT `l`.`Eradicated` = TRUE AND `l`.`Eradicated` IS NOT NULL AS `IsEradicated` +FROM `Factions` AS `f` +INNER JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +"""); + } + + public override async Task Accessing_reference_navigation_collection_composition_generates_single_query(bool async) + { + await base.Accessing_reference_navigation_collection_composition_generates_single_query(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`Id0` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`IsAutomatic`, `w0`.`Name`, `w0`.`Id` AS `Id0`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +) AS `s` ON `g`.`FullName` = `s`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Id` +"""); + } + + public override async Task Reference_include_chain_loads_correctly_when_middle_is_null(bool async) + { + await base.Reference_include_chain_loads_correctly_when_middle_is_null(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Banner`, `s0`.`Banner5`, `s0`.`InternalNumber`, `s0`.`Name` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` +ORDER BY `t`.`Note` +"""); + } + + public override async Task Accessing_property_of_optional_navigation_in_child_projection_works(bool async) + { + await base.Accessing_property_of_optional_navigation_in_child_projection_works(async); + + AssertSql( + """ +SELECT `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Nickname`, `s1`.`Id`, `s1`.`SquadId` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN ( + SELECT `s0`.`Nickname`, `w`.`Id`, `s0`.`SquadId`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName` +) AS `s1` ON `s`.`FullName` = `s1`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id`, `s1`.`Nickname` +"""); + } + + public override async Task Collection_navigation_ofType_filter_works(bool async) + { + await base.Collection_navigation_ofType_filter_works(async); + + AssertSql( +""" +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + WHERE `c`.`Name` = `g`.`CityOfBirthName` AND `o`.`Nickname` IS NOT NULL AND `g`.`Nickname` = 'Marcus') +"""); + } + + public override async Task Query_reusing_parameter_doesnt_declare_duplicate_parameter(bool async) + { + await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter(async); + + AssertSql( + """ +@prm_Inner_Nickname='Marcus' (Size = 255) + +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + WHERE `g`.`Nickname` <> @prm_Inner_Nickname +) AS `s` +ORDER BY `s`.`FullName` +"""); + } + + public override async Task Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(bool async) + { + await base.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async); + + AssertSql( + """ +@squadId='1' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` + WHERE `s`.`Id` IN ( + SELECT `s0`.`Id` + FROM `Squads` AS `s0` + WHERE `s0`.`Id` = @squadId + ) + UNION ALL + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM (`Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) + INNER JOIN `Squads` AS `s1` ON `g0`.`SquadId` = `s1`.`Id` + WHERE `s1`.`Id` IN ( + SELECT `s2`.`Id` + FROM `Squads` AS `s2` + WHERE `s2`.`Id` = @squadId + ) +) AS `u` +ORDER BY `u`.`FullName` +"""); + } + + public override async Task Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(bool async) + { + await base.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async); + + AssertSql( + """ +@gearId='1' + +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`SquadId` = @gearId AND `g`.`SquadId` = @gearId) +"""); + } + + public override async Task Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(bool async) + { + await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(async); + + AssertSql( + """ +@entity_equality_prm_Inner_Squad_Id='1' (Nullable = true) + +SELECT `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` +FROM ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` + WHERE `s`.`Id` = @entity_equality_prm_Inner_Squad_Id +) AS `s1` +INNER JOIN `Squads` AS `s0` ON `s1`.`SquadId` = `s0`.`Id` +WHERE `s0`.`Id` = @entity_equality_prm_Inner_Squad_Id +ORDER BY `s1`.`FullName` +"""); + } + + public override async Task Complex_GroupBy_after_set_operator(bool async) + { + await base.Complex_GroupBy_after_set_operator(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`Count`, IIF(SUM(`u`.`Count`) IS NULL, 0, SUM(`u`.`Count`)) AS `Sum` +FROM ( + SELECT `c`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g` + LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` + UNION ALL + SELECT `c0`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` +) AS `u` +GROUP BY `u`.`Name`, `u`.`Count` +"""); + } + + public override async Task Complex_GroupBy_after_set_operator_using_result_selector(bool async) + { + await base.Complex_GroupBy_after_set_operator_using_result_selector(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`Count`, IIF(SUM(`u`.`Count`) IS NULL, 0, SUM(`u`.`Count`)) AS `Sum` +FROM ( + SELECT `c`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g` + LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` + UNION ALL + SELECT `c0`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` +) AS `u` +GROUP BY `u`.`Name`, `u`.`Count` +"""); + } + + public override async Task Left_join_with_GroupBy_with_composite_group_key(bool async) + { + await base.Left_join_with_GroupBy_with_composite_group_key(async); + + AssertSql( +""" +SELECT `g`.`CityOfBirthName`, `g`.`HasSoulPatch` +FROM (`Gears` AS `g` +INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` +GROUP BY `g`.`CityOfBirthName`, `g`.`HasSoulPatch` +"""); + } + + public override async Task GroupBy_with_boolean_grouping_key(bool async) + { + await base.GroupBy_with_boolean_grouping_key(async); + + AssertSql( + """ +SELECT `s`.`CityOfBirthName`, `s`.`HasSoulPatch`, `s`.`IsMarcus`, COUNT(*) AS `Count` +FROM ( + SELECT `g`.`CityOfBirthName`, `g`.`HasSoulPatch`, `g`.`Nickname` = 'Marcus' AS `IsMarcus` + FROM `Gears` AS `g` +) AS `s` +GROUP BY `s`.`CityOfBirthName`, `s`.`HasSoulPatch`, `s`.`IsMarcus` +"""); + } + + public override async Task GroupBy_with_boolean_groupin_key_thru_navigation_access(bool async) + { + await base.GroupBy_with_boolean_groupin_key_thru_navigation_access(async); + + AssertSql( + """ +SELECT `s`.`HasSoulPatch`, LCASE(`s0`.`Name`) AS `Name` +FROM (`Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` +GROUP BY `s`.`HasSoulPatch`, `s0`.`Name` +"""); + } + + public override async Task Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(bool async) + { + await base.Group_by_over_projection_with_multiple_properties_accessed_thru_navigation(async); + + AssertSql( +""" +SELECT `c`.`Name` +FROM `Gears` AS `g` +INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name` +GROUP BY `c`.`Name` +"""); + } + + public override async Task Group_by_on_StartsWith_with_null_parameter_as_argument(bool async) + { + await base.Group_by_on_StartsWith_with_null_parameter_as_argument(async); + + AssertSql( + """ +SELECT `s`.`Key` +FROM ( + SELECT FALSE AS `Key` + FROM `Gears` AS `g` +) AS `s` +GROUP BY `s`.`Key` +"""); + } + + public override async Task Group_by_with_having_StartsWith_with_null_parameter_as_argument(bool async) + { + await base.Group_by_with_having_StartsWith_with_null_parameter_as_argument(async); + + AssertSql( + """ +SELECT `g`.`FullName` +FROM `Gears` AS `g` +GROUP BY `g`.`FullName` +HAVING FALSE +"""); + } + + public override async Task Select_StartsWith_with_null_parameter_as_argument(bool async) + { + await base.Select_StartsWith_with_null_parameter_as_argument(async); + + AssertSql( +""" +SELECT FALSE +FROM `Gears` AS `g` +"""); + } + + public override async Task Select_null_parameter_is_not_null(bool async) + { + await base.Select_null_parameter_is_not_null(async); + + AssertSql( + """ +@p='False' + +SELECT CBOOL(@p) +FROM `Gears` AS `g` +"""); + } + + public override async Task Where_null_parameter_is_not_null(bool async) + { + await base.Where_null_parameter_is_not_null(async); + + AssertSql( + """ +@p='False' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE @p +"""); + } + + public override async Task OrderBy_StartsWith_with_null_parameter_as_argument(bool async) + { + await base.OrderBy_StartsWith_with_null_parameter_as_argument(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task OrderBy_Contains_empty_list(bool async) + { + await base.OrderBy_Contains_empty_list(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +"""); + } + + public override async Task Where_with_enum_flags_parameter(bool async) + { + await base.Where_with_enum_flags_parameter(async); +AssertSql( + """ +@rank='1' (Nullable = true) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE (`g`.`Rank` BAND @rank) = @rank +""", + // + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +""", + // + """ +@rank='2' (Nullable = true) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE (`g`.`Rank` BOR @rank) <> @rank +""", + // + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE FALSE +"""); + } + + public override async Task FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(bool async) + { + await base.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` +WHERE `c`.`Name` = ( + SELECT TOP 1 `c0`.`Name` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` + ORDER BY `g0`.`Nickname`) OR (`c`.`Name` IS NULL AND ( + SELECT TOP 1 `c0`.`Name` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` + ORDER BY `g0`.`Nickname`) IS NULL) +"""); + } + + public override async Task Bitwise_operation_with_non_null_parameter_optimizes_null_checks(bool async) + { + await base.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async); + + AssertSql( + """ +@ranks='134' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE (`g`.`Rank` BAND @ranks) <> 0 +""", + // + """ +@ranks='134' + +SELECT (`g`.`Rank` BOR @ranks) = @ranks +FROM `Gears` AS `g` +""", + // + """ +@ranks='134' + +SELECT (`g`.`Rank` BOR (`g`.`Rank` BOR (@ranks BOR (`g`.`Rank` BOR @ranks)))) = @ranks +FROM `Gears` AS `g` +"""); + } + + public override async Task Bitwise_operation_with_null_arguments(bool async) + { + await base.Bitwise_operation_with_null_arguments(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` IS NULL +""", + // + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +""", + // + """ +@prm='2' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE (`w`.`AmmunitionType` BAND @prm) <> 0 OR `w`.`AmmunitionType` IS NULL +""", + // + """ +@prm='1' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE (`w`.`AmmunitionType` BAND @prm) = @prm +"""); + } + + public override async Task Logical_operation_with_non_null_parameter_optimizes_null_checks(bool async) + { + await base.Logical_operation_with_non_null_parameter_optimizes_null_checks(async); + + AssertSql( + """ +@prm='True' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` <> @prm +""", + // + """ +@prm='False' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` <> @prm +"""); + } + + public override async Task Cast_OfType_works_correctly(bool async) + { + await base.Cast_OfType_works_correctly(async); + + AssertSql( +""" +SELECT `g`.`FullName` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `o`.`Nickname` IS NOT NULL +"""); + } + + public override async Task Join_inner_source_custom_projection_followed_by_filter(bool async) + { + await base.Join_inner_source_custom_projection_followed_by_filter(async); + + AssertSql( + """ +SELECT IIF(`s`.`Name` = 'Locust', TRUE, NULL) AS `IsEradicated`, `s`.`CommanderName`, `s`.`Name` +FROM `LocustLeaders` AS `l` +INNER JOIN ( + SELECT `f`.`Name`, `l0`.`CommanderName` + FROM `Factions` AS `f` + LEFT JOIN `LocustHordes` AS `l0` ON `f`.`Id` = `l0`.`Id` + WHERE `l0`.`Id` IS NOT NULL +) AS `s` ON `l`.`Name` = `s`.`CommanderName` +WHERE IIF(`s`.`Name` = 'Locust', TRUE, NULL) <> TRUE OR IIF(`s`.`Name` = 'Locust', TRUE, NULL) IS NULL +"""); + } + + [ConditionalFact] + public virtual void Byte_array_filter_by_length_parameter_compiled2() + { + var query = EF.CompileQuery( + (GearsOfWarContext context, byte[] byteArrayParam) + => context.Squads.Where(w => EF.Functions.ByteArrayLength(w.Banner) == EF.Functions.ByteArrayLength(byteArrayParam)).Count()); + + using var context = CreateContext(); + var byteQueryParam = new[] { (byte)42, (byte)128 }; + + Assert.Equal(2, query(context, byteQueryParam)); + + AssertSql( + """ +@byteArrayParam='0x2A80' (Size = 510) + +SELECT COUNT(*) +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = IIF(IIF(ASCB(RIGHTB(@byteArrayParam, 1)) = 0, LENB(@byteArrayParam) - 1, LENB(@byteArrayParam)) IS NULL, NULL, CLNG(IIF(ASCB(RIGHTB(@byteArrayParam, 1)) = 0, LENB(@byteArrayParam) - 1, LENB(@byteArrayParam)))) +"""); + } + + public override async Task Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(bool async) + { + var exception = await Assert.ThrowsAsync(() => base.Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n(async)); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public async Task Byte_array_filter_by_length_literal_does_not_cast_on_varbinary_n2(bool async) + { + await AssertQuery( + async, + ss => ss.Set().Where(w => EF.Functions.ByteArrayLength(w.Banner5) == 5), + ss => ss.Set().Where(w => w.Banner5 != null && w.Banner5.Length == 5)); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE IIF(ASCB(RIGHTB(`s`.`Banner5`, 1)) = 0, LENB(`s`.`Banner5`) - 1, LENB(`s`.`Banner5`)) = 5 +"""); + } + + public override async Task Conditional_expression_with_test_being_simplified_to_constant_simple(bool isAsync) + { + await base.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync); + + AssertSql( + """ +@prm='True' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(`g`.`HasSoulPatch` = @prm, TRUE, FALSE) +"""); + } + + public override async Task Conditional_expression_with_test_being_simplified_to_constant_complex(bool isAsync) + { + await base.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync); + + AssertSql( + """ +@prm='True' +@prm2='Marcus' Lancer' (Size = 255) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(`g`.`HasSoulPatch` = @prm, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `w`.`Id` = `g`.`SquadId`) = @prm2, FALSE) +"""); + } + + public override async Task OrderBy_bool_coming_from_optional_navigation(bool async) + { + await base.OrderBy_bool_coming_from_optional_navigation(async); + + AssertSql( +""" +SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +ORDER BY NOT (`w0`.`IsAutomatic`) +"""); + } + + public override async Task DateTimeOffset_Date_returns_datetime(bool async) + { + var dateTimeOffset = new DateTimeOffset(102, 3, 1, 8, 0, 0, new TimeSpan(-5, 0, 0)); + + await AssertQuery( + async, + ss => ss.Set().Where(m => m.Timeline.Date >= dateTimeOffset.Date)); + + AssertSql( + """ +@dateTimeOffset_Date='0102-03-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEVALUE(`m`.`Timeline`) >= CDATE(@dateTimeOffset_Date) +"""); + } + + public override async Task Conditional_with_conditions_evaluating_to_false_gets_optimized(bool async) + { + await base.Conditional_with_conditions_evaluating_to_false_gets_optimized(async); + + AssertSql( +""" +SELECT `g`.`FullName` +FROM `Gears` AS `g` +"""); + } + + public override async Task Conditional_with_conditions_evaluating_to_true_gets_optimized(bool async) + { + await base.Conditional_with_conditions_evaluating_to_true_gets_optimized(async); + + AssertSql( +""" +SELECT `g`.`CityOfBirthName` +FROM `Gears` AS `g` +"""); + } + + public override async Task Projecting_required_string_column_compared_to_null_parameter(bool async) + { + await base.Projecting_required_string_column_compared_to_null_parameter(async); + + AssertSql( + """ +SELECT FALSE +FROM `Gears` AS `g` +"""); + } + + public override async Task Group_by_nullable_property_HasValue_and_project_the_grouping_key(bool async) + { + await base.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async); + + AssertSql( + """ +SELECT `w0`.`Key` +FROM ( + SELECT `w`.`SynergyWithId` IS NOT NULL AS `Key` + FROM `Weapons` AS `w` +) AS `w0` +GROUP BY `w0`.`Key` +"""); + } + + public override async Task Group_by_nullable_property_and_project_the_grouping_key_HasValue(bool async) + { + await base.Group_by_nullable_property_and_project_the_grouping_key_HasValue(async); + + AssertSql( + """ +SELECT `w`.`SynergyWithId` IS NOT NULL +FROM `Weapons` AS `w` +GROUP BY `w`.`SynergyWithId` +"""); + } + + public override async Task Checked_context_with_cast_does_not_fail(bool isAsync) + { + await base.Checked_context_with_cast_does_not_fail(isAsync); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` +WHERE CBYTE(`l`.`ThreatLevel`) >= CBYTE(5) +"""); + } + + public override async Task Checked_context_with_addition_does_not_fail(bool isAsync) + { + await base.Checked_context_with_addition_does_not_fail(isAsync); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` +WHERE CLNG(`l`.`ThreatLevel`) <= (5 + CLNG(`l`.`ThreatLevel`)) +"""); + } + + public override async Task Contains_on_collection_of_byte_subquery(bool async) + { + await base.Contains_on_collection_of_byte_subquery(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` +WHERE `l`.`ThreatLevelByte` IN ( + SELECT `l1`.`ThreatLevelByte` + FROM `LocustLeaders` AS `l1` +) +"""); + } + + public override async Task Contains_on_collection_of_nullable_byte_subquery(bool async) + { + await base.Contains_on_collection_of_nullable_byte_subquery(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` +WHERE EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l1` + WHERE `l1`.`ThreatLevelNullableByte` = `l`.`ThreatLevelNullableByte` OR (`l1`.`ThreatLevelNullableByte` IS NULL AND `l`.`ThreatLevelNullableByte` IS NULL)) +"""); + } + + public override async Task Contains_on_collection_of_nullable_byte_subquery_null_constant(bool async) + { + await base.Contains_on_collection_of_nullable_byte_subquery_null_constant(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` +WHERE EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l1` + WHERE `l1`.`ThreatLevelNullableByte` IS NULL) +"""); + } + + public override async Task Contains_on_collection_of_nullable_byte_subquery_null_parameter(bool async) + { + await base.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` +WHERE EXISTS ( + SELECT 1 + FROM `LocustLeaders` AS `l1` + WHERE `l1`.`ThreatLevelNullableByte` IS NULL) +"""); + } + + public override async Task Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion( + bool async) + { + await base.Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] +FROM [LocustLeaders] AS [l] +CROSS APPLY ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator] + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] + WHERE EXISTS ( + SELECT 1 + FROM [LocustLeaders] AS [l1] + LEFT JOIN [LocustCommanders] AS [l2] ON [l1].[Name] = [l2].[Name] + WHERE [l1].[ThreatLevelByte] = [l].[ThreatLevelByte]) +) AS [t] +"""); + } + + public override async Task Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion_negated( + bool async) + { + await base.Subquery_projecting_non_nullable_scalar_contains_non_nullable_value_doesnt_need_null_expansion_negated(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] +FROM [LocustLeaders] AS [l] +CROSS APPLY ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator] + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] + WHERE NOT (EXISTS ( + SELECT 1 + FROM [LocustLeaders] AS [l1] + LEFT JOIN [LocustCommanders] AS [l2] ON [l1].[Name] = [l2].[Name] + WHERE [l1].[ThreatLevelByte] = [l].[ThreatLevelByte])) +) AS [t] +"""); + } + + public override async Task Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion(bool async) + { + await base.Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] +FROM [LocustLeaders] AS [l] +CROSS APPLY ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator] + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] + WHERE EXISTS ( + SELECT 1 + FROM [LocustLeaders] AS [l1] + LEFT JOIN [LocustCommanders] AS [l2] ON [l1].[Name] = [l2].[Name] + WHERE [l1].[ThreatLevelNullableByte] = [l].[ThreatLevelNullableByte] OR (([l1].[ThreatLevelNullableByte] IS NULL) AND ([l].[ThreatLevelNullableByte] IS NULL))) +) AS [t] +"""); + } + + public override async Task Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion_negated(bool async) + { + await base.Subquery_projecting_nullable_scalar_contains_nullable_value_needs_null_expansion_negated(async); + + AssertSql( +""" +SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOfBirthName], [t].[FullName], [t].[HasSoulPatch], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [t].[Discriminator] +FROM [LocustLeaders] AS [l] +CROSS APPLY ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' + END AS [Discriminator] + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] + WHERE NOT (EXISTS ( + SELECT 1 + FROM [LocustLeaders] AS [l1] + LEFT JOIN [LocustCommanders] AS [l2] ON [l1].[Name] = [l2].[Name] + WHERE [l1].[ThreatLevelNullableByte] = [l].[ThreatLevelNullableByte] OR (([l1].[ThreatLevelNullableByte] IS NULL) AND ([l].[ThreatLevelNullableByte] IS NULL)))) +) AS [t] +"""); + } + + public override async Task Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(bool async) + { + await base.Enum_closure_typed_as_underlying_type_generates_correct_parameter_type(async); + + AssertSql( + """ +@prm='1' (Nullable = true) + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE @prm = `w`.`AmmunitionType` +"""); + } + + public override async Task Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(bool async) + { + await base.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async); + + AssertSql( + """ +@prm='133' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE (@prm BAND `g`.`Rank`) = `g`.`Rank` +"""); + } + + public override async Task Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(bool async) + { + await base.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async); + + AssertSql( + """ +@prm='5' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE (@prm BAND CLNG(CINT(`g`.`Rank`))) = CLNG(`g`.`Rank`) +"""); + } + + public override async Task Constant_enum_with_same_underlying_value_as_previously_parameterized_int(bool async) + { + await base.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async); + + AssertSql( + """ +@p='1' + +SELECT TOP @p `g`.`Rank` BAND 1 +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Enum_array_contains(bool async) + { + await base.Enum_array_contains(async); + + AssertSql( + """ +@types1='1' + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +WHERE `w0`.`Id` IS NOT NULL AND (`w0`.`AmmunitionType` IS NULL OR `w0`.`AmmunitionType` = @types1) +"""); + } + + public override async Task Coalesce_with_non_root_evaluatable_Convert(bool async) + { + await base.Coalesce_with_non_root_evaluatable_Convert(async); + + AssertSql( + """ +@rank='1' (Nullable = true) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE @rank = `g`.`Rank` +"""); + } + + /*[ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public async Task DataLength_function_for_string_parameter(bool async) + { + await AssertQueryScalar( + async, + ss => ss.Set().Select(m => EF.Functions.DataLength(m.CodeName)), + ss => ss.Set().Select(m => (int?)(m.CodeName.Length * 2))); + + AssertSql( +""" +SELECT CAST(DATALENGTH([m].[CodeName]) AS int) +FROM [Missions] AS [m] +"""); + }*/ + + public override async Task CompareTo_used_with_non_unicode_string_column_and_constant(bool async) + { + await base.CompareTo_used_with_non_unicode_string_column_and_constant(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Location` = 'Unknown' +"""); + } + + public override async Task Coalesce_used_with_non_unicode_string_column_and_constant(bool async) + { + await base.Coalesce_used_with_non_unicode_string_column_and_constant(async); + + AssertSql( +""" +SELECT IIF(`c`.`Location` IS NULL, 'Unknown', `c`.`Location`) +FROM `Cities` AS `c` +"""); + } + + public override async Task Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(bool async) + { + await base.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async); + + AssertSql( + """ +SELECT `c`.`Name`, `c`.`Location`, COUNT(*) AS `Count` +FROM (`Weapons` AS `w` +LEFT JOIN ( + SELECT `g`.`CityOfBirthName`, `g`.`FullName` + FROM `Gears` AS `g` +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `s`.`CityOfBirthName` = `c`.`Name` +GROUP BY `c`.`Name`, `c`.`Location` +ORDER BY `c`.`Location` +"""); + } + + public override async Task SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(bool async) + { + await base.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +INNER JOIN `Weapons` AS `w` ON `g`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +ORDER BY `g`.`Nickname`, `w`.`Id` +"""); + } + + public override async Task SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(bool async) + { + await base.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +ORDER BY `g`.`Nickname`, `w`.`Id` +"""); + } + + public override async Task SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join( + bool async) + { + await base.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + FROM `Weapons` AS `w` + LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +) AS `s` ON `g`.`FullName` <> `s`.`OwnerFullName` OR `s`.`OwnerFullName` IS NULL +ORDER BY `g`.`Nickname`, `s`.`Id` +"""); + } + + public override async Task SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(bool async) + { + await base.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async); + + AssertSql( +""" +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +"""); + } + + public override async Task Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(bool async) + { + await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` AND `g`.`SquadId` < `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(bool async) + { + await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` AND `g`.`SquadId` <= `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(bool async) + { + await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` AND `g`.`SquadId` >= `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task SelectMany_predicate_with_non_equality_comparison_with_Take_doesnt_convert_to_join(bool async) + { + await base.SelectMany_predicate_with_non_equality_comparison_with_Take_doesnt_convert_to_join(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' +END AS [Discriminator], [t].[Id], [t].[AmmunitionType], [t].[IsAutomatic], [t].[Name], [t].[OwnerFullName], [t].[SynergyWithId] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +CROSS APPLY ( + SELECT TOP(3) [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] + FROM [Weapons] AS [w] + WHERE [w].[OwnerFullName] <> [g].[FullName] OR ([w].[OwnerFullName] IS NULL) + ORDER BY [w].[Id] +) AS [t] +ORDER BY [g].[Nickname], [t].[Id] +"""); + } + + public override async Task FirstOrDefault_over_int_compared_to_zero(bool async) + { + await base.FirstOrDefault_over_int_compared_to_zero(async); + + AssertSql( + """ +SELECT `s`.`Name` +FROM `Squads` AS `s` +WHERE `s`.`Name` = 'Delta' AND IIF(( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` + ORDER BY `g`.`FullName`) IS NULL, 0, ( + SELECT TOP 1 `g`.`SquadId` + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` + ORDER BY `g`.`FullName`)) <> 0 +"""); + } + + public override async Task Correlated_collection_with_inner_collection_references_element_two_levels_up(bool async) + { + await base.Correlated_collection_with_inner_collection_references_element_two_levels_up(async); + + AssertSql( +""" +SELECT [g].[FullName], [g].[Nickname], [g].[SquadId], [t].[ReportName], [t].[OfficerName], [t].[Nickname], [t].[SquadId] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +OUTER APPLY ( + SELECT [g0].[FullName] AS [ReportName], [g].[FullName] AS [OfficerName], [g0].[Nickname], [g0].[SquadId] + FROM [Gears] AS [g0] + WHERE [g].[Nickname] = [g0].[LeaderNickname] AND [g].[SquadId] = [g0].[LeaderSquadId] +) AS [t] +WHERE [o].[Nickname] IS NOT NULL +ORDER BY [g].[Nickname], [g].[SquadId], [t].[Nickname] +"""); + } + + public override async Task Accessing_derived_property_using_hard_and_soft_cast(bool async) + { + await base.Accessing_derived_property_using_hard_and_soft_cast(async); + + AssertSql( +""" +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` +WHERE `l0`.`Name` IS NOT NULL AND (`l0`.`HighCommandId` <> 0 OR `l0`.`HighCommandId` IS NULL) +""", +// +""" +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` +WHERE `l0`.`Name` IS NOT NULL AND (`l0`.`HighCommandId` <> 0 OR `l0`.`HighCommandId` IS NULL) +"""); + } + + public override async Task Cast_to_derived_followed_by_include_and_FirstOrDefault(bool async) + { + await base.Cast_to_derived_followed_by_include_and_FirstOrDefault(async); +AssertSql( + """ +SELECT TOP 1 `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +WHERE `l`.`Name` LIKE '%Queen%' +"""); + } + + public override async Task Correlated_collection_take(bool async) + { + await base.Correlated_collection_take(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [c].[Name], [t0].[Id], [t0].[AmmunitionType], [t0].[IsAutomatic], [t0].[Name], [t0].[OwnerFullName], [t0].[SynergyWithId], [c].[Location], [c].[Nation] +FROM [Gears] AS [g] +INNER JOIN [Cities] AS [c] ON [g].[CityOfBirthName] = [c].[Name] +LEFT JOIN ( + SELECT [t].[Id], [t].[AmmunitionType], [t].[IsAutomatic], [t].[Name], [t].[OwnerFullName], [t].[SynergyWithId] + FROM ( + SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId], ROW_NUMBER() OVER(PARTITION BY [w].[OwnerFullName] ORDER BY [w].[Id]) AS [row] + FROM [Weapons] AS [w] + ) AS [t] + WHERE [t].[row] <= 10 +) AS [t0] ON [g].[FullName] = [t0].[OwnerFullName] +ORDER BY [g].[Nickname], [g].[SquadId], [c].[Name] +"""); + } + + public override async Task Project_shadow_properties(bool async) + { + await base.Project_shadow_properties(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`AssignedCityName` +FROM `Gears` AS `g` +"""); + } + + public override async Task Composite_key_entity_equal(bool async) + { + await base.Composite_key_entity_equal(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`), +( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` +WHERE `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` +"""); + } + + public override async Task Composite_key_entity_not_equal(bool async) + { + await base.Composite_key_entity_not_equal(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`), +( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` +WHERE `g`.`Nickname` <> `s`.`Nickname` OR `g`.`SquadId` <> `s`.`SquadId` +"""); + } + + public override async Task Composite_key_entity_equal_null(bool async) + { + await base.Composite_key_entity_equal_null(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +WHERE `l0`.`Name` IS NOT NULL AND (`s`.`Nickname` IS NULL OR `s`.`SquadId` IS NULL) +"""); + } + + public override async Task Composite_key_entity_not_equal_null(bool async) + { + await base.Composite_key_entity_not_equal_null(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +WHERE `l0`.`Name` IS NOT NULL AND `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_comparison(bool async) + { + await base.Projecting_property_converted_to_nullable_with_comparison(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, `s`.`SquadId`, `s`.`HasSoulPatch` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) = 1 +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_addition(bool async) + { + await base.Projecting_property_converted_to_nullable_with_addition(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, `s`.`SquadId`, `s`.`HasSoulPatch` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) + 1) = 2 +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_addition_and_final_projection(bool async) + { + await base.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async); + + AssertSql( + """ +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) + 1 AS `Value` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_conditional(bool async) + { + await base.Projecting_property_converted_to_nullable_with_conditional(async); + + AssertSql( + """ +SELECT IIF(`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL, IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL), -1) +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_function_call(bool async) + { + await base.Projecting_property_converted_to_nullable_with_function_call(async); + + AssertSql( + """ +SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL), 0 + 1, 3) +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_with_function_call2(bool async) + { + await base.Projecting_property_converted_to_nullable_with_function_call2(async); + + AssertSql( + """ +SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL)) AS `Function` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_element_init(bool async) + { + await base.Projecting_property_converted_to_nullable_into_element_init(async); + + AssertSql( + """ +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`s`.`Nickname`) IS NULL, NULL, CLNG(LEN(`s`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) + 1 +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_member_assignment(bool async) + { + await base.Projecting_property_converted_to_nullable_into_member_assignment(async); + + AssertSql( + """ +SELECT IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) AS `Id` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_new_array(bool async) + { + await base.Projecting_property_converted_to_nullable_into_new_array(async); + + AssertSql( + """ +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`s`.`Nickname`) IS NULL, NULL, CLNG(LEN(`s`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) + 1 +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_unary(bool async) + { + await base.Projecting_property_converted_to_nullable_into_unary(async); + + AssertSql( + """ +SELECT `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL AND NOT (IIF(`t`.`GearNickName` IS NOT NULL, `s`.`HasSoulPatch`, NULL)) +ORDER BY `t`.`Note` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_into_member_access(bool async) + { + await base.Projecting_property_converted_to_nullable_into_member_access(async); + + AssertSql( +""" +SELECT `g`.`Nickname` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE DATEPART('m', `t`.`IssueDate`) <> 5 +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task Projecting_property_converted_to_nullable_and_use_it_in_order_by(bool async) + { + await base.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async); + + AssertSql( + """ +SELECT `t`.`Note`, `t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, `s`.`SquadId`, `s`.`HasSoulPatch` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL +ORDER BY IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL), `t`.`Note` +"""); + } + + public override async Task Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(bool async) + { + await base.Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t`.`Id` IS NULL AS `IsNull`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `c`.`Name` IS NULL AS `IsNull`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s`.`Id` IS NULL AS `IsNull` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` +"""); + } + + public override async Task Project_navigation_defined_on_derived_from_entity_with_inheritance_using_soft_cast(bool async) + { + await base.Project_navigation_defined_on_derived_from_entity_with_inheritance_using_soft_cast(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Nickname` IS NULL OR `s`.`SquadId` IS NULL AS `IsNull`, `s0`.`Id`, `s0`.`CapitalName`, `s0`.`Name`, `s0`.`ServerAddress`, `s0`.`CommanderName`, `s0`.`DeputyCommanderName`, `s0`.`Eradicated`, `s0`.`Id` IS NULL AS `IsNull`, `l2`.`Id`, `l2`.`IsOperational`, `l2`.`Name`, `l2`.`Id` IS NULL AS `IsNull` +FROM (((`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId`) +LEFT JOIN ( + SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l1`.`CommanderName`, `l1`.`DeputyCommanderName`, `l1`.`Eradicated` + FROM `Factions` AS `f` + INNER JOIN `LocustHordes` AS `l1` ON `f`.`Id` = `l1`.`Id` +) AS `s0` ON `l`.`Name` = `s0`.`CommanderName`) +LEFT JOIN `LocustHighCommands` AS `l2` ON `l0`.`HighCommandId` = `l2`.`Id` +"""); + } + + public override async Task Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(bool async) + { + await base.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async); + + AssertSql( + """ +@p1='10' +@p='0' + +SELECT `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator`, `s1`.`HasSoulPatch0`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP @p1 `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`HasSoulPatch0` + FROM ( + SELECT TOP @p + @p1 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`HasSoulPatch` AS `HasSoulPatch0` + FROM (`Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + LEFT JOIN ( + SELECT MIN(IIF(LEN(`g0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g0`.`Nickname`)))) AS `c`, `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` <> 'Dom' + GROUP BY `g0`.`HasSoulPatch` + ) AS `s` ON IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = `s`.`c` + WHERE `s`.`c` IS NOT NULL + ORDER BY `g`.`Nickname` + ) AS `s0` + ORDER BY `s0`.`Nickname` DESC +) AS `s1` +LEFT JOIN `Weapons` AS `w` ON `s1`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`HasSoulPatch0`) +"""); + } + + public override async Task Where_bool_column_and_Contains(bool async) + { + await base.Where_bool_column_and_Contains(async); + + AssertSql( + """ +@values1='False' +@values2='True' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND `g`.`HasSoulPatch` IN (@values1, @values2) +"""); + } + + public override async Task Where_bool_column_or_Contains(bool async) + { + await base.Where_bool_column_or_Contains(async); + + AssertSql( + """ +@values1='False' +@values2='True' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE `g`.`HasSoulPatch` AND `g`.`HasSoulPatch` IN (@values1, @values2) +"""); + } + + public override async Task Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(bool async) + { + await base.Parameter_used_multiple_times_take_appropriate_inferred_type_mapping(async); + + AssertSql( + """ +@place='Ephyra's location' (Size = 255) +@place0='Ephyra's location' (Size = 100) + +SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM `Cities` AS `c` +WHERE `c`.`Nation` = @place OR `c`.`Location` = @place0 OR `c`.`Location` = @place0 +"""); + } + + public override async Task Enum_matching_take_value_gets_different_type_mapping(bool async) + { + await base.Enum_matching_take_value_gets_different_type_mapping(async); + + AssertSql( + """ +@p='1' +@value='1' + +SELECT TOP @p `g`.`Rank` BAND @value +FROM `Gears` AS `g` +ORDER BY `g`.`Nickname` +"""); + } + + public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(bool async) + { + await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async); + + AssertSql( + """ +@prm='1' + +SELECT `g`.`Nickname`, `g`.`FullName`, `w0`.`Id` IS NOT NULL AS `Collection` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`Id` > @prm +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +"""); + } + + public override async Task Project_entity_and_collection_element(bool async) + { + await base.Project_entity_and_collection_element(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE + WHEN [o].[Nickname] IS NOT NULL THEN N'Officer' +END AS [Discriminator], [s].[Id], [s].[Banner], [s].[Banner5], [s].[InternalNumber], [s].[Name], [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId], [t0].[Id], [t0].[AmmunitionType], [t0].[IsAutomatic], [t0].[Name], [t0].[OwnerFullName], [t0].[SynergyWithId] +FROM [Gears] AS [g] +LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] +INNER JOIN [Squads] AS [s] ON [g].[SquadId] = [s].[Id] +LEFT JOIN [Weapons] AS [w] ON [g].[FullName] = [w].[OwnerFullName] +LEFT JOIN ( + SELECT [t].[Id], [t].[AmmunitionType], [t].[IsAutomatic], [t].[Name], [t].[OwnerFullName], [t].[SynergyWithId] + FROM ( + SELECT [w0].[Id], [w0].[AmmunitionType], [w0].[IsAutomatic], [w0].[Name], [w0].[OwnerFullName], [w0].[SynergyWithId], ROW_NUMBER() OVER(PARTITION BY [w0].[OwnerFullName] ORDER BY [w0].[Id]) AS [row] + FROM [Weapons] AS [w0] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [g].[FullName] = [t0].[OwnerFullName] +ORDER BY [g].[Nickname], [g].[SquadId], [s].[Id] +"""); + } + + public override async Task Correlated_collection_via_SelectMany_with_Distinct_missing_indentifying_columns_in_projection(bool async) + { + await base.Correlated_collection_via_SelectMany_with_Distinct_missing_indentifying_columns_in_projection(async); + + AssertSql( +""" +@__isAutomatic_0='True' + +SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`t`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` <> @__isAutomatic_0 +) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +"""); + } + + public override async Task Basic_query_gears(bool async) + { + await base.Basic_query_gears(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +"""); + } + + public override async Task Contains_on_readonly_enumerable(bool async) + { + await base.Contains_on_readonly_enumerable(async); + + AssertSql( + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE `w`.`AmmunitionType` = 1 +"""); + } + + public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(bool async) + { + await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async); + + AssertSql( + """ +@isAutomatic='True' + +SELECT `g`.`Nickname`, `g`.`FullName`, `w0`.`Id` IS NOT NULL AS `Collection` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` <> @isAutomatic +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +"""); + } + + public override async Task Trying_to_access_unmapped_property_in_projection(bool async) + { + await base.Trying_to_access_unmapped_property_in_projection(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +"""); + } + + public override async Task Cast_to_derived_type_causes_client_eval(bool async) + { + await base.Cast_to_derived_type_causes_client_eval(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +"""); + } + + public override async Task Comparison_with_value_converted_subclass(bool async) + { + await base.Comparison_with_value_converted_subclass(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `f`.`ServerAddress` = '127.0.0.1' +"""); + } + + public override async Task Project_equality_with_value_converted_property(bool async) + { + await base.Project_equality_with_value_converted_property(async); + + AssertSql( + """ +SELECT `m`.`Difficulty` = 'Unknown' +FROM `Missions` AS `m` +"""); + } + + public override async Task FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(bool async) + { + //await base.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async); + await AssertQuery( + async, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault() + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault(new DateTime(100, 1, 1)) + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }); + + AssertSql( + """ +SELECT `g`.`Nickname`, IIF(( + SELECT TOP 1 `t1`.`IssueDate` + FROM `Tags` AS `t1` + WHERE `t1`.`GearNickName` = `g`.`FullName` + ORDER BY `t1`.`Id`) IS NULL, #0100-01-01#, ( + SELECT TOP 1 `t1`.`IssueDate` + FROM `Tags` AS `t1` + WHERE `t1`.`GearNickName` = `g`.`FullName` + ORDER BY `t1`.`Id`)) AS `invalidTagIssueDate` +FROM `Gears` AS `g` +LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`IssueDate` > IIF(( + SELECT TOP 1 `t0`.`IssueDate` + FROM `Tags` AS `t0` + WHERE `t0`.`GearNickName` = `g`.`FullName` + ORDER BY `t0`.`Id`) IS NULL, #0100-01-01#, ( + SELECT TOP 1 `t0`.`IssueDate` + FROM `Tags` AS `t0` + WHERE `t0`.`GearNickName` = `g`.`FullName` + ORDER BY `t0`.`Id`)) +"""); + } + + public override async Task + Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection_multiple_grouping_keys( + bool async) + { + await base + .Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection_multiple_grouping_keys( + async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [t].[IsAutomatic], [t].[Name], [t].[Count] +FROM [Gears] AS [g] +OUTER APPLY ( + SELECT [w].[IsAutomatic], [w].[Name], COUNT(*) AS [Count] + FROM [Weapons] AS [w] + WHERE [g].[FullName] = [w].[OwnerFullName] + GROUP BY [w].[IsAutomatic], [w].[Name] +) AS [t] +ORDER BY [g].[Nickname], [g].[SquadId], [t].[IsAutomatic] +"""); + } + + public override async Task + Correlated_collection_with_groupby_with_complex_grouping_key_not_projecting_identifier_column_with_group_aggregate_in_final_projection( + bool async) + { + await base + .Correlated_collection_with_groupby_with_complex_grouping_key_not_projecting_identifier_column_with_group_aggregate_in_final_projection( + async); + + AssertSql( + """ +SELECT IIF(SUM(`m`.`Rating`) IS NULL, 0.0, SUM(`m`.`Rating`)) +FROM `Missions` AS `m` +WHERE `m`.`CodeName` = 'Operation Foobar' +"""); + } + + public override async Task Sum_with_no_data_nullable_double(bool async) + { + await base.Sum_with_no_data_nullable_double(async); + + AssertSql( +""" +SELECT IIF(SUM(`m`.`Rating`) IS NULL, 0.0, SUM(`m`.`Rating`)) +FROM `Missions` AS `m` +WHERE `m`.`CodeName` = 'Operation Foobar' +"""); + } + + public override async Task Correlated_collection_with_distinct_not_projecting_identifier_column(bool async) + { + await base.Correlated_collection_with_distinct_not_projecting_identifier_column(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [t].[Name], [t].[IsAutomatic] +FROM [Gears] AS [g] +OUTER APPLY ( + SELECT DISTINCT [w].[Name], [w].[IsAutomatic] + FROM [Weapons] AS [w] + WHERE [g].[FullName] = [w].[OwnerFullName] +) AS [t] +ORDER BY [g].[Nickname], [g].[SquadId], [t].[Name] +"""); + } + + public override async Task Include_after_Select_throws(bool async) + { + await base.Include_after_Select_throws(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name` +"""); + } + + public override async Task Cast_to_derived_followed_by_multiple_includes(bool async) + { + await base.Cast_to_derived_followed_by_multiple_includes(async); +AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ((`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +WHERE `l`.`Name` LIKE '%Queen%' +ORDER BY `l`.`Name`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_distinct_projecting_identifier_column(bool async) + { + await base.Correlated_collection_with_distinct_projecting_identifier_column(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [t].[Id], [t].[Name] +FROM [Gears] AS [g] +OUTER APPLY ( + SELECT DISTINCT [w].[Id], [w].[Name] + FROM [Weapons] AS [w] + WHERE [g].[FullName] = [w].[OwnerFullName] +) AS [t] +ORDER BY [g].[Nickname], [g].[SquadId] +"""); + } + + public override async Task Where_equals_method_on_nullable_with_object_overload(bool async) + { + await base.Where_equals_method_on_nullable_with_object_overload(async); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE `m`.`Rating` IS NULL +"""); + } + + public override async Task + Correlated_collection_with_groupby_not_projecting_identifier_column_but_only_grouping_key_in_final_projection(bool async) + { + await base.Correlated_collection_with_groupby_not_projecting_identifier_column_but_only_grouping_key_in_final_projection(async); + + AssertSql( +""" +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `l`.`Id` IS NOT NULL +"""); + } + + public override async Task Project_derivied_entity_with_convert_to_parent(bool async) + { + await base.Project_derivied_entity_with_convert_to_parent(async); + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` +FROM `Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +WHERE `l`.`Id` IS NOT NULL +"""); + } + + public override async Task Include_after_SelectMany_throws(bool async) + { + await base.Include_after_SelectMany_throws(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Banner`, `s0`.`Banner5`, `s0`.`InternalNumber`, `s0`.`Name` +FROM ((`Factions` AS `f` +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `c`.`Name` = `s`.`CityOfBirthName`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` +WHERE `c`.`Name` IS NOT NULL AND `s`.`CityOfBirthName` IS NOT NULL AND `s`.`SquadId` IS NOT NULL AND `s0`.`Id` IS NOT NULL +"""); + } + + public override async Task Correlated_collection_with_distinct_projecting_identifier_column_composite_key(bool async) + { + await base.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`HasSoulPatch` +FROM `Squads` AS `s` +LEFT JOIN ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `s`.`Id`, `s0`.`Nickname` +"""); + } + + public override async Task Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(bool async) + { + await base.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `o`.`Nickname` IS NOT NULL AS `IsOfficer` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +"""); + } + + public override async Task GroupBy_Select_sum(bool async) + { + await base.GroupBy_Select_sum(async); + + AssertSql( + """ +SELECT IIF(SUM(`m`.`Rating`) IS NULL, 0.0, SUM(`m`.`Rating`)) +FROM `Missions` AS `m` +GROUP BY `m`.`CodeName` +"""); + } + + public override async Task ToString_boolean_property_nullable(bool async) + { + await base.ToString_boolean_property_nullable(async); + + AssertSql( + """ +SELECT IIF(`l`.`Eradicated` = FALSE, 'False', IIF(`l`.`Eradicated`, 'True', '')) +FROM `Factions` AS `f` +INNER JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +"""); + } + + public override async Task ToString_boolean_computed_nullable(bool async) + { + await base.ToString_boolean_computed_nullable(async); + + AssertSql( + """ +SELECT IIF((`l`.`Eradicated` OR (`l`.`CommanderName` = 'Unknown' AND `l`.`CommanderName` IS NOT NULL)) = FALSE, 'False', IIF(`l`.`Eradicated` OR `l`.`CommanderName` = 'Unknown', 'True', '')) +FROM `Factions` AS `f` +INNER JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` +"""); + } + + public override async Task Correlated_collection_after_distinct_3_levels(bool async) + { + await base.Correlated_collection_after_distinct_3_levels(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[Name], [t1].[Nickname], [t1].[FullName], [t1].[HasSoulPatch], [t1].[Id], [t1].[Name], [t1].[Nickname0], [t1].[FullName0], [t1].[HasSoulPatch0], [t1].[Id0] +FROM ( + SELECT DISTINCT [s].[Id], [s].[Name] + FROM [Squads] AS [s] +) AS [t] +OUTER APPLY ( + SELECT [t0].[Nickname], [t0].[FullName], [t0].[HasSoulPatch], [t2].[Id], [t2].[Name], [t2].[Nickname] AS [Nickname0], [t2].[FullName] AS [FullName0], [t2].[HasSoulPatch] AS [HasSoulPatch0], [t2].[Id0] + FROM ( + SELECT DISTINCT [g].[Nickname], [g].[FullName], [g].[HasSoulPatch] + FROM [Gears] AS [g] + WHERE [g].[SquadId] = [t].[Id] + ) AS [t0] + OUTER APPLY ( + SELECT [t].[Id], [t].[Name], [t0].[Nickname], [t0].[FullName], [t0].[HasSoulPatch], [w].[Id] AS [Id0] + FROM [Weapons] AS [w] + WHERE [w].[OwnerFullName] = [t0].[FullName] + ) AS [t2] +) AS [t1] +ORDER BY [t].[Id], [t1].[Nickname], [t1].[FullName], [t1].[HasSoulPatch] +"""); + } + + public override async Task ToString_string_property_projection(bool async) + { + await base.ToString_string_property_projection(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_boolean_property_non_nullable(bool async) + { + await base.ToString_boolean_property_non_nullable(async); + + AssertSql( + """ +SELECT IIF(NOT (`w`.`IsAutomatic`), 'False', 'True') +FROM `Weapons` AS `w` +"""); + } + + public override async Task Include_on_derived_entity_with_cast(bool async) + { + await base.Include_on_derived_entity_with_cast(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`DeputyCommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +FROM (`Factions` AS `f` +LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) +LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name` +WHERE `l`.`Id` IS NOT NULL +ORDER BY `f`.`Id` +"""); + } + + public override async Task String_concat_nullable_expressions_are_coalesced(bool async) + { + await base.String_concat_nullable_expressions_are_coalesced(async); + AssertSql( + """ +SELECT ((`g`.`FullName` & '') & IIF(`g`.`LeaderNickname` IS NULL, '', `g`.`LeaderNickname`)) & '' +FROM `Gears` AS `g` +"""); + } + + public override async Task Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(bool async) + { + await base.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`Name`, `w0`.`OwnerFullName` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT DISTINCT `w`.`Id`, `w`.`Name`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId` +"""); + } + + public override async Task Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection( + bool async) + { + await base.Correlated_collection_with_groupby_not_projecting_identifier_column_with_group_aggregate_in_final_projection(async); + + AssertSql( +""" +SELECT [g].[Nickname], [g].[SquadId], [t].[Key], [t].[Count] +FROM [Gears] AS [g] +OUTER APPLY ( + SELECT [w].[IsAutomatic] AS [Key], COUNT(*) AS [Count] + FROM [Weapons] AS [w] + WHERE [g].[FullName] = [w].[OwnerFullName] + GROUP BY [w].[IsAutomatic] +) AS [t] +ORDER BY [g].[Nickname], [g].[SquadId] +"""); + } + + public override async Task Project_discriminator_columns(bool async) + { + await base.Project_discriminator_columns(async); + + AssertSql(); + } + + public override async Task Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions( + bool async) + { + await base.Correlated_collection_with_distinct_not_projecting_identifier_column_also_projecting_complex_expressions(async); + + AssertSql(); + } + + public override async Task Client_eval_followed_by_aggregate_operation(bool async) + { + await base.Client_eval_followed_by_aggregate_operation(async); + + AssertSql(); + } + + public override async Task Client_member_and_unsupported_string_Equals_in_the_same_query(bool async) + { + await base.Client_member_and_unsupported_string_Equals_in_the_same_query(async); + + AssertSql(); + } + + public override async Task Client_side_equality_with_parameter_works_with_optional_navigations(bool async) + { + await base.Client_side_equality_with_parameter_works_with_optional_navigations(async); + + AssertSql(); + } + + public override async Task Correlated_collection_order_by_constant_null_of_non_mapped_type(bool async) + { + await base.Correlated_collection_order_by_constant_null_of_non_mapped_type(async); + + AssertSql(); + } + + public override async Task GetValueOrDefault_on_DateTimeOffset(bool async) + { + await base.GetValueOrDefault_on_DateTimeOffset(async); + + AssertSql(); + } + + public override async Task Where_coalesce_with_anonymous_types(bool async) + { + await base.Where_coalesce_with_anonymous_types(async); + + AssertSql(); + } + + public override async Task Projecting_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_some_properties_as_well_as_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_entity_as_well_as_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(bool async) + { + await base.Projecting_entity_as_well_as_complex_correlated_collection_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(bool async) + { + await base.Projecting_entity_as_well_as_correlated_collection_of_scalars_followed_by_Distinct(async); + + AssertSql(); + } + + public override async Task Correlated_collection_with_distinct_3_levels(bool async) + { + await base.Correlated_collection_with_distinct_3_levels(async); + + AssertSql(); + } + + public override async Task Correlated_collection_after_distinct_3_levels_without_original_identifiers(bool async) + { + await base.Correlated_collection_after_distinct_3_levels_without_original_identifiers(async); + + AssertSql(); + } + + public override async Task Checked_context_throws_on_client_evaluation(bool async) + { + await base.Checked_context_throws_on_client_evaluation(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_throws_informative_error(bool async) + { + await base.Trying_to_access_unmapped_property_throws_informative_error(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_inside_aggregate(bool async) + { + await base.Trying_to_access_unmapped_property_inside_aggregate(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_inside_subquery(bool async) + { + await base.Trying_to_access_unmapped_property_inside_subquery(async); + + AssertSql(); + } + + public override async Task Trying_to_access_unmapped_property_inside_join_key_selector(bool async) + { + await base.Trying_to_access_unmapped_property_inside_join_key_selector(async); + + AssertSql(); + } + + public override async Task Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(bool async) + { + await base.Client_projection_with_nested_unmapped_property_bubbles_up_translation_failure_info(async); + + AssertSql(); + } + + public override async Task Include_after_select_with_cast_throws(bool async) + { + await base.Include_after_select_with_cast_throws(async); + + AssertSql(); + } + + public override async Task Include_after_select_with_entity_projection_throws(bool async) + { + await base.Include_after_select_with_entity_projection_throws(async); + + AssertSql(); + } + + public override async Task Include_after_select_anonymous_projection_throws(bool async) + { + await base.Include_after_select_anonymous_projection_throws(async); + + AssertSql(); + } + + public override async Task Group_by_with_aggregate_max_on_entity_type(bool async) + { + await base.Group_by_with_aggregate_max_on_entity_type(async); + + AssertSql(); + } + + public override async Task Include_collection_and_invalid_navigation_using_string_throws(bool async) + { + await base.Include_collection_and_invalid_navigation_using_string_throws(async); + + AssertSql(); + } + + public override async Task Include_with_concat(bool async) + { + await base.Include_with_concat(async); + + AssertSql(); + } + + public override async Task Join_with_complex_key_selector(bool async) + { + await base.Join_with_complex_key_selector(async); + + AssertSql( +""" +SELECT `s`.`Id`, `t0`.`Id` AS `TagId` +FROM `Squads` AS `s`, +( + SELECT `t`.`Id` + FROM `Tags` AS `t` + WHERE `t`.`Note` = 'Marcus'' Tag' +) AS `t0` +"""); + } + + public override async Task Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(bool async) + { + await base.Streaming_correlated_collection_issue_11403_returning_ordered_enumerable_throws(async); + + AssertSql(); + } + + public override async Task Select_correlated_filtered_collection_returning_queryable_throws(bool async) + { + await base.Select_correlated_filtered_collection_returning_queryable_throws(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_predicate(bool async) + { + await base.Client_method_on_collection_navigation_in_predicate(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(bool async) + { + await base.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_order_by(bool async) + { + await base.Client_method_on_collection_navigation_in_order_by(async); + + AssertSql(); + } + + public override async Task Client_method_on_collection_navigation_in_additional_from_clause(bool async) + { + await base.Client_method_on_collection_navigation_in_additional_from_clause(async); + + AssertSql(); + } + + public override async Task Include_multiple_one_to_one_and_one_to_many_self_reference(bool async) + { + await base.Include_multiple_one_to_one_and_one_to_many_self_reference(async); + + AssertSql(); + } + + public override async Task Include_multiple_one_to_one_and_one_to_one_and_one_to_many(bool async) + { + await base.Include_multiple_one_to_one_and_one_to_one_and_one_to_many(async); + + AssertSql(); + } + + public override async Task Include_multiple_include_then_include(bool async) + { + await base.Include_multiple_include_then_include(async); + + AssertSql(); + } + + public override async Task Select_Where_Navigation_Client(bool async) + { + await base.Select_Where_Navigation_Client(async); + + AssertSql(); + } + + public override async Task Where_subquery_equality_to_null_with_composite_key(bool async) + { + await base.Where_subquery_equality_to_null_with_composite_key(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId`) +"""); + } + + public override async Task Where_subquery_equality_to_null_with_composite_key_should_match_nulls(bool async) + { + await base.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +FROM `Squads` AS `s` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Gears` AS `g` + WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`FullName` = 'Anthony Carmine') +"""); + } + + public override async Task Where_subquery_equality_to_null_without_composite_key(bool async) + { + await base.Where_subquery_equality_to_null_without_composite_key(async); + + AssertSql( +""" +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) +"""); + } + + public override async Task Where_subquery_equality_to_null_without_composite_key_should_match_null(bool async) + { + await base.Where_subquery_equality_to_null_without_composite_key_should_match_null(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE NOT EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'Hammer of Dawn') +"""); + } + + public override async Task Include_reference_on_derived_type_using_EF_Property(bool async) + { + await base.Include_reference_on_derived_type_using_EF_Property(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +"""); + } + + public override async Task Include_collection_on_derived_type_using_EF_Property(bool async) + { + await base.Include_collection_on_derived_type_using_EF_Property(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` +"""); + } + + public override async Task EF_Property_based_Include_navigation_on_derived_type(bool async) + { + await base.EF_Property_based_Include_navigation_on_derived_type(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +WHERE `o`.`Nickname` IS NOT NULL +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` +"""); + } + + public override async Task ElementAt_basic_with_OrderBy(bool async) + { + await base.ElementAt_basic_with_OrderBy(async); + + AssertSql( + """ +@p='0' + +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` +FROM ( + SELECT TOP 1 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` + FROM ( + SELECT TOP @p + 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + ORDER BY `g`.`FullName` + ) AS `s` + ORDER BY `s`.`FullName` DESC +) AS `s0` +ORDER BY `s0`.`FullName` +"""); + } + + public override async Task ElementAtOrDefault_basic_with_OrderBy(bool async) + { + await base.ElementAtOrDefault_basic_with_OrderBy(async); + + AssertSql( + """ +@p='1' + +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` +FROM ( + SELECT TOP 1 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` + FROM ( + SELECT TOP @p + 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + ORDER BY `g`.`FullName` + ) AS `s` + ORDER BY `s`.`FullName` DESC +) AS `s0` +ORDER BY `s0`.`FullName` +"""); + } + + public override async Task ElementAtOrDefault_basic_with_OrderBy_parameter(bool async) + { + await base.ElementAtOrDefault_basic_with_OrderBy_parameter(async); + + AssertSql( + """ +@p='2' + +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` +FROM ( + SELECT TOP 1 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` + FROM ( + SELECT TOP @p + 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g` + LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` + ORDER BY `g`.`FullName` + ) AS `s` + ORDER BY `s`.`FullName` DESC +) AS `s0` +ORDER BY `s0`.`FullName` +"""); + } + + public override async Task Where_subquery_with_ElementAtOrDefault_equality_to_null_with_composite_key(bool async) + { + await base.Where_subquery_with_ElementAtOrDefault_equality_to_null_with_composite_key(async); + + AssertSql( +""" +SELECT [s].[Id], [s].[Banner], [s].[Banner5], [s].[InternalNumber], [s].[Name] +FROM [Squads] AS [s] +WHERE NOT EXISTS ( + SELECT 1 + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] + WHERE [s].[Id] = [g].[SquadId] + ORDER BY [g].[Nickname] + OFFSET 2 ROWS) +"""); + } + + public override async Task Where_subquery_with_ElementAt_using_column_as_index(bool async) + { + await base.Where_subquery_with_ElementAt_using_column_as_index(async); + + AssertSql( +""" +SELECT [s].[Id], [s].[Banner], [s].[Banner5], [s].[InternalNumber], [s].[Name] +FROM [Squads] AS [s] +WHERE ( + SELECT [g].[Nickname] + FROM [Gears] AS [g] + LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId] + WHERE [s].[Id] = [g].[SquadId] + ORDER BY [g].[Nickname] + OFFSET [s].[Id] ROWS FETCH NEXT 1 ROWS ONLY) = N'Cole Train' +"""); + } + + public override async Task Using_indexer_on_byte_array_and_string_in_projection(bool async) + { + await base.Using_indexer_on_byte_array_and_string_in_projection(async); + + AssertSql( + """ +SELECT `s`.`Id`, ASCB(MIDB(`s`.`Banner`, 0 + 1, 1)), `s`.`Name` +FROM `Squads` AS `s` +"""); + } + + public override async Task Set_operator_with_navigation_in_projection_groupby_aggregate(bool async) + { + await base.Set_operator_with_navigation_in_projection_groupby_aggregate(async); + + AssertSql( + """ +SELECT `s`.`Name`, ( + SELECT IIF(SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`)))) IS NULL, 0, SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`))))) + FROM (`Gears` AS `g2` + INNER JOIN `Squads` AS `s0` ON `g2`.`SquadId` = `s0`.`Id`) + INNER JOIN `Cities` AS `c` ON `g2`.`CityOfBirthName` = `c`.`Name` + WHERE 'Marcus' IN ( + SELECT `u0`.`Nickname` + FROM ( + SELECT `g3`.`Nickname` + FROM `Gears` AS `g3` + UNION ALL + SELECT `g4`.`Nickname` + FROM `Gears` AS `g4` + ) AS `u0` + ) AND (`s`.`Name` = `s0`.`Name` OR (`s`.`Name` IS NULL AND `s0`.`Name` IS NULL))) AS `SumOfLengths` +FROM `Gears` AS `g` +INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` +WHERE 'Marcus' IN ( + SELECT `u`.`Nickname` + FROM ( + SELECT `g0`.`Nickname` + FROM `Gears` AS `g0` + UNION ALL + SELECT `g1`.`Nickname` + FROM `Gears` AS `g1` + ) AS `u` +) +GROUP BY `s`.`Name` +"""); + } + + public override async Task Nav_expansion_inside_Contains_argument(bool async) + { + await base.Nav_expansion_inside_Contains_argument(async); + + AssertSql( + """ +@numbers1='1' +@numbers2='-1' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(EXISTS ( + SELECT 1 + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`), 1, 0) IN (@numbers1, @numbers2) +"""); + } + + public override async Task Nav_expansion_with_member_pushdown_inside_Contains_argument(bool async) + { + await base.Nav_expansion_with_member_pushdown_inside_Contains_argument(async); + + AssertSql( + """ +@weapons1='Marcus' Lancer' (Size = 255) +@weapons2='Dom's Gnasher' (Size = 255) + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IN (@weapons1, @weapons2) +"""); + } + + public override async Task Subquery_inside_Take_argument(bool async) + { + await base.Subquery_inside_Take_argument(async); + + AssertSql( + """ +@__numbers_0='[0,1,2]' (Size = 4000) + +SELECT [g].[Nickname], [g].[SquadId], [t0].[Id], [t0].[AmmunitionType], [t0].[IsAutomatic], [t0].[Name], [t0].[OwnerFullName], [t0].[SynergyWithId] +FROM [Gears] AS [g] +LEFT JOIN ( + SELECT [t].[Id], [t].[AmmunitionType], [t].[IsAutomatic], [t].[Name], [t].[OwnerFullName], [t].[SynergyWithId] + FROM ( + SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId], ROW_NUMBER() OVER(PARTITION BY [w].[OwnerFullName] ORDER BY [w].[Id]) AS [row] + FROM [Weapons] AS [w] + ) AS [t] + WHERE [t].[row] <= COALESCE(( + SELECT [n].[value] + FROM OPENJSON(@__numbers_0) WITH ([value] int '$') AS [n] + ORDER BY [n].[value] + OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY), 0) +) AS [t0] ON [g].[FullName] = [t0].[OwnerFullName] +ORDER BY [g].[Nickname], [g].[SquadId], [t0].[OwnerFullName], [t0].[Id] +"""); + } + + public override async Task Nav_expansion_inside_Skip_correlated_to_source(bool async) + { + await base.Nav_expansion_inside_Skip_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Nav_expansion_inside_Take_correlated_to_source(bool async) + { + await base.Nav_expansion_inside_Take_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Nav_expansion_with_member_pushdown_inside_Take_correlated_to_source(bool async) + { + await base.Nav_expansion_with_member_pushdown_inside_Take_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Nav_expansion_inside_ElementAt_correlated_to_source(bool async) + { + await base.Nav_expansion_inside_ElementAt_correlated_to_source(async); + + AssertSql(); + } + + public override async Task Include_one_to_many_on_composite_key_then_orderby_key_properties(bool async) + { + await base.Include_one_to_many_on_composite_key_then_orderby_key_properties(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`SquadId`, `g`.`Nickname` +"""); + } + + public override async Task Find_underlying_property_after_GroupJoin_DefaultIfEmpty(bool async) + { + await base.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async); + + AssertSql( + """ +SELECT `g`.`FullName`, IIF(`s`.`ThreatLevel` IS NULL, NULL, CLNG(`s`.`ThreatLevel`)) AS `ThreatLevel` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `l`.`ThreatLevel`, `l0`.`DefeatedByNickname` + FROM `LocustLeaders` AS `l` + LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` + WHERE `l0`.`Name` IS NOT NULL +) AS `s` ON `g`.`Nickname` = `s`.`DefeatedByNickname` +"""); + } + + public override async Task Join_include_coalesce_simple(bool async) + { + await base.Join_include_coalesce_simple(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`Nickname` = 'Marcus' +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +""", + // + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +""", + // + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Join_include_coalesce_nested(bool async) + { + await base.Join_include_coalesce_nested(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`Nickname` = 'Marcus' +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +""", + // + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId` +FROM ((((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `s`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `s`.`FullName` = `w1`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w0`.`Id` +"""); + } + + public override async Task Join_include_conditional(bool async) + { + await base.Join_include_conditional(async); + + AssertSql( + """ +SELECT `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`Nickname` = 'Marcus' +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Derived_reference_is_skipped_when_base_type(bool async) + { + await base.Derived_reference_is_skipped_when_base_type(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `l1`.`Id`, `l1`.`IsOperational`, `l1`.`Name` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN `LocustHighCommands` AS `l1` ON `l0`.`HighCommandId` = `l1`.`Id` +"""); + } + + public override async Task Nested_contains_with_enum(bool async) + { + await base.Nested_contains_with_enum(async); + + AssertSql( + """ +@ranks1='1' +@key='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@keys1='0a47bcb7-a1cb-4345-8944-c58f82d6aac7' +@keys2='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(`g`.`Rank` = @ranks1, @key, @key) IN (@keys1, @keys2) +""", + // + """ +@ammoTypes1='1' +@key='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@keys1='0a47bcb7-a1cb-4345-8944-c58f82d6aac7' +@keys2='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = @ammoTypes1, @key, @key) IN (@keys1, @keys2) +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTInheritanceQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTInheritanceQueryLibRedFixture.cs new file mode 100644 index 00000000..348ff10b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTInheritanceQueryLibRedFixture.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTInheritanceQueryLibRedFixture : TPTInheritanceQueryFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + //modelBuilder.UseKeySequences(); + + base.OnModelCreating(modelBuilder, context); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTInheritanceQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTInheritanceQueryLibRedTest.cs new file mode 100644 index 00000000..a122fa6a --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTInheritanceQueryLibRedTest.cs @@ -0,0 +1,763 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTInheritanceQueryLibRedTest(TPTInheritanceQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : TPTInheritanceQueryTestBase(fixture, testOutputHelper) +{ + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Byte_enum_value_constant_used_in_projection(bool async) + { + await base.Byte_enum_value_constant_used_in_projection(async); + + AssertSql( + """ +SELECT IIF(`b`.`IsFlightless`, CBYTE(0), CBYTE(1)) +FROM (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +"""); + } + + public override async Task Can_filter_all_animals(bool async) + { + await base.Can_filter_all_animals(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`Name` = 'Great spotted kiwi' +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_include_animals(bool async) + { + await base.Can_include_animals(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `s`.`Id`, `s`.`CountryId`, `s`.`Name`, `s`.`Species`, `s`.`EagleId`, `s`.`IsFlightless`, `s`.`Group`, `s`.`FoundOn`, `s`.`Discriminator` +FROM `Countries` AS `c` +LEFT JOIN ( + SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` + FROM ((`Animals` AS `a` + LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) + LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) + LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +) AS `s` ON `c`.`Id` = `s`.`CountryId` +ORDER BY `c`.`Name`, `c`.`Id` +"""); + } + + public override async Task Can_include_prey(bool async) + { + await base.Can_include_prey(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CountryId`, `s`.`Name`, `s`.`Species`, `s`.`EagleId`, `s`.`IsFlightless`, `s`.`Group`, `s0`.`Id`, `s0`.`CountryId`, `s0`.`Name`, `s0`.`Species`, `s0`.`EagleId`, `s0`.`IsFlightless`, `s0`.`Group`, `s0`.`FoundOn`, `s0`.`Discriminator` +FROM ( + SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group` + FROM (`Animals` AS `a` + INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) + INNER JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id` +) AS `s` +LEFT JOIN ( + SELECT `a0`.`Id`, `a0`.`CountryId`, `a0`.`Name`, `a0`.`Species`, `b0`.`EagleId`, `b0`.`IsFlightless`, `e0`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e0`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` + FROM ((`Animals` AS `a0` + INNER JOIN `Birds` AS `b0` ON `a0`.`Id` = `b0`.`Id`) + LEFT JOIN `Eagle` AS `e0` ON `a0`.`Id` = `e0`.`Id`) + LEFT JOIN `Kiwi` AS `k` ON `a0`.`Id` = `k`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EagleId` +ORDER BY `s`.`Id` +"""); + } + + public override async Task Can_insert_update_delete() + => await base.Can_insert_update_delete(); + + public override async Task Can_query_all_animals(bool async) + { + await base.Can_query_all_animals(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_query_all_birds(bool async) + { + await base.Can_query_all_birds(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_query_all_plants(bool async) + { + await base.Can_query_all_plants(async); + + AssertSql( + """ +SELECT `p`.`Species`, `p`.`CountryId`, `p`.`Genus`, `p`.`Name`, `r`.`HasThorns`, `d`.`AdditionalInfo_Nickname`, `d`.`AdditionalInfo_LeafStructure_AreLeavesBig`, `d`.`AdditionalInfo_LeafStructure_NumLeaves`, IIF(`r`.`Species` IS NOT NULL, 'Rose', IIF(`d`.`Species` IS NOT NULL, 'Daisy', NULL)) AS `Discriminator` +FROM (`Plants` AS `p` +LEFT JOIN `Daisies` AS `d` ON `p`.`Species` = `d`.`Species`) +LEFT JOIN `Roses` AS `r` ON `p`.`Species` = `r`.`Species` +ORDER BY `p`.`Species` +"""); + } + + public override async Task Filter_on_property_inside_complex_type_on_derived_type(bool async) + { + await base.Filter_on_property_inside_complex_type_on_derived_type(async); + + AssertSql( + """ +SELECT `p`.`Species`, `p`.`CountryId`, `p`.`Genus`, `p`.`Name`, `d`.`AdditionalInfo_Nickname`, `d`.`AdditionalInfo_LeafStructure_AreLeavesBig`, `d`.`AdditionalInfo_LeafStructure_NumLeaves` +FROM (`Plants` AS `p` +INNER JOIN `Flowers` AS `f` ON `p`.`Species` = `f`.`Species`) +INNER JOIN `Daisies` AS `d` ON `p`.`Species` = `d`.`Species` +WHERE `d`.`AdditionalInfo_LeafStructure_AreLeavesBig` +"""); + } + + public override async Task Can_query_all_types_when_shared_column(bool async) + { + await base.Can_query_all_types_when_shared_column(async); + + AssertSql( +""" +SELECT `d`.`Id`, `d`.`SortIndex`, `c`.`CaffeineGrams`, `c`.`CokeCO2`, `c`.`SugarGrams`, `l`.`LiltCO2`, `l`.`SugarGrams`, `t`.`CaffeineGrams`, `t`.`HasMilk`, IIF(`t`.`Id` IS NOT NULL, 'Tea', IIF(`l`.`Id` IS NOT NULL, 'Lilt', IIF(`c`.`Id` IS NOT NULL, 'Coke', NULL))) AS `Discriminator` +FROM ((`Drinks` AS `d` +LEFT JOIN `Coke` AS `c` ON `d`.`Id` = `c`.`Id`) +LEFT JOIN `Lilt` AS `l` ON `d`.`Id` = `l`.`Id`) +LEFT JOIN `Tea` AS `t` ON `d`.`Id` = `t`.`Id` +"""); + } + + public override async Task Can_query_just_kiwis(bool async) + { + await base.Can_query_just_kiwis(async); + + AssertSql( +""" +SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn` +FROM (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +"""); + } + + public override async Task Can_query_just_roses(bool async) + { + await base.Can_query_just_roses(async); + + AssertSql( +""" +SELECT TOP 2 `p`.`Species`, `p`.`CountryId`, `p`.`Genus`, `p`.`Name`, `r`.`HasThorns` +FROM (`Plants` AS `p` +INNER JOIN `Flowers` AS `f` ON `p`.`Species` = `f`.`Species`) +INNER JOIN `Roses` AS `r` ON `p`.`Species` = `r`.`Species` +"""); + } + + public override async Task Can_query_when_shared_column(bool async) + { + await base.Can_query_when_shared_column(async); + + AssertSql( +""" +SELECT TOP 2 `d`.`Id`, `d`.`SortIndex`, `c`.`CaffeineGrams`, `c`.`CokeCO2`, `c`.`SugarGrams` +FROM `Drinks` AS `d` +INNER JOIN `Coke` AS `c` ON `d`.`Id` = `c`.`Id` +""", +// +""" +SELECT TOP 2 `d`.`Id`, `d`.`SortIndex`, `l`.`LiltCO2`, `l`.`SugarGrams` +FROM `Drinks` AS `d` +INNER JOIN `Lilt` AS `l` ON `d`.`Id` = `l`.`Id` +""", +// +""" +SELECT TOP 2 `d`.`Id`, `d`.`SortIndex`, `t`.`CaffeineGrams`, `t`.`HasMilk` +FROM `Drinks` AS `d` +INNER JOIN `Tea` AS `t` ON `d`.`Id` = `t`.`Id` +"""); + } + + public override async Task Can_use_backwards_is_animal(bool async) + { + await base.Can_use_backwards_is_animal(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn` +FROM (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +"""); + } + + public override async Task Can_use_backwards_of_type_animal(bool async) + { + await base.Can_use_backwards_of_type_animal(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn` +FROM (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +"""); + } + + public override async Task Can_use_is_kiwi(bool async) + { + await base.Can_use_is_kiwi(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL +"""); + } + + public override async Task Can_use_is_kiwi_with_cast(bool async) + { + await base.Can_use_is_kiwi_with_cast(async); + + AssertSql( + """ +SELECT IIF(`k`.`Id` IS NOT NULL, `k`.`FoundOn`, CBYTE(0)) AS `Value` +FROM `Animals` AS `a` +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +"""); + } + + public override async Task Can_use_is_kiwi_in_projection(bool async) + { + await base.Can_use_is_kiwi_in_projection(async); + + AssertSql( + """ +SELECT `k`.`Id` IS NOT NULL +FROM `Animals` AS `a` +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +"""); + } + + public override async Task Can_use_is_kiwi_with_other_predicate(bool async) + { + await base.Can_use_is_kiwi_with_other_predicate(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL AND `a`.`CountryId` = 1 +"""); + } + + public override async Task Can_use_of_type_animal(bool async) + { + await base.Can_use_of_type_animal(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird(bool async) + { + await base.Can_use_of_type_bird(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL OR `e`.`Id` IS NOT NULL +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_first(bool async) + { + await base.Can_use_of_type_bird_first(async); + + AssertSql( +""" +SELECT TOP 1 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL OR `e`.`Id` IS NOT NULL +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_predicate(bool async) + { + await base.Can_use_of_type_bird_predicate(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `a`.`CountryId` = 1 AND (`k`.`Id` IS NOT NULL OR `e`.`Id` IS NOT NULL) +ORDER BY `a`.`Species` +"""); + } + + public override async Task Can_use_of_type_bird_with_projection(bool async) + { + await base.Can_use_of_type_bird_with_projection(async); + + AssertSql( +""" +SELECT `b`.`EagleId` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL OR `e`.`Id` IS NOT NULL +"""); + } + + public override async Task Can_use_of_type_kiwi(bool async) + { + await base.Can_use_of_type_kiwi(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', NULL) AS `Discriminator` +FROM (`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL +"""); + } + + public override async Task Can_use_of_type_kiwi_where_north_on_derived_property(bool async) + { + await base.Can_use_of_type_kiwi_where_north_on_derived_property(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', NULL) AS `Discriminator` +FROM (`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL AND `k`.`FoundOn` = CBYTE(0) +"""); + } + + public override async Task Can_use_of_type_kiwi_where_south_on_derived_property(bool async) + { + await base.Can_use_of_type_kiwi_where_south_on_derived_property(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', NULL) AS `Discriminator` +FROM (`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL AND `k`.`FoundOn` = CBYTE(1) +"""); + } + + public override async Task Can_use_of_type_rose(bool async) + { + await base.Can_use_of_type_rose(async); + + AssertSql( +""" +SELECT `p`.`Species`, `p`.`CountryId`, `p`.`Genus`, `p`.`Name`, `r`.`HasThorns`, IIF(`r`.`Species` IS NOT NULL, 'Rose', NULL) AS `Discriminator` +FROM `Plants` AS `p` +LEFT JOIN `Roses` AS `r` ON `p`.`Species` = `r`.`Species` +WHERE `r`.`Species` IS NOT NULL +"""); + } + + public override async Task Member_access_on_intermediate_type_works() + { + await base.Member_access_on_intermediate_type_works(); + + AssertSql( +""" +SELECT `a`.`Name` +FROM (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +ORDER BY `a`.`Name` +"""); + } + + public override async Task OfType_Union_OfType(bool async) + { + await base.OfType_Union_OfType(async); + + AssertSql(" "); + } + + public override async Task OfType_Union_subquery(bool async) + { + await base.OfType_Union_subquery(async); + + AssertSql(" "); + } + + public override async Task Setting_foreign_key_to_a_different_type_throws() + { + await base.Setting_foreign_key_to_a_different_type_throws(); + + AssertSql( +""" +SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn` +FROM (`Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +INNER JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +""", +// +$""" +@p0='0' +@p1='Bald eagle' (Size = 255) +@p2='Haliaeetus leucocephalus' (Size = 100) + +INSERT INTO `Animals` (`CountryId`, `Name`, `Species`) +VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}); +SELECT `Id` +FROM `Animals` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Subquery_OfType(bool async) + { + await base.Subquery_OfType(async); + + AssertSql( + """ +@p='5' + +SELECT DISTINCT `s`.`Id`, `s`.`CountryId`, `s`.`Name`, `s`.`Species`, `s`.`EagleId`, `s`.`IsFlightless`, `s`.`FoundOn`, `s`.`Discriminator` +FROM ( + SELECT TOP @p `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` + FROM ((`Animals` AS `a` + INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) + LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) + LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` + ORDER BY `a`.`Species` +) AS `s` +WHERE `s`.`Discriminator` = 'Kiwi' +"""); + } + + public override async Task Union_entity_equality(bool async) + { + await base.Union_entity_equality(async); + + AssertSql(" "); + } + + public override async Task Union_siblings_with_duplicate_property_in_subquery(bool async) + { + await base.Union_siblings_with_duplicate_property_in_subquery(async); + + AssertSql( +""" +SELECT [a].[Id], [a].[CountryId], [a].[Name], [a].[Species], [b].[EagleId], [b].[IsFlightless], [e].[Group], [k].[FoundOn], CASE + WHEN [k].[Id] IS NOT NULL THEN N'Kiwi' + WHEN [e].[Id] IS NOT NULL THEN N'Eagle' +END AS [Discriminator] +FROM [Animals] AS [a] +LEFT JOIN [Birds] AS [b] ON [a].[Id] = [b].[Id] +LEFT JOIN [Eagle] AS [e] ON [a].[Id] = [e].[Id] +LEFT JOIN [Kiwi] AS [k] ON [a].[Id] = [k].[Id] +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT TOP(1) [a0].[Id], [a0].[CountryId], [a0].[Name], [a0].[Species], [b0].[EagleId], [b0].[IsFlightless], [e0].[Group], [k0].[FoundOn], CASE + WHEN [k0].[Id] IS NOT NULL THEN N'Kiwi' + WHEN [e0].[Id] IS NOT NULL THEN N'Eagle' + END AS [Discriminator], [k0].[Id] AS [Id0] + FROM [Animals] AS [a0] + LEFT JOIN [Birds] AS [b0] ON [a0].[Id] = [b0].[Id] + LEFT JOIN [Eagle] AS [e0] ON [a0].[Id] = [e0].[Id] + LEFT JOIN [Kiwi] AS [k0] ON [a0].[Id] = [k0].[Id] + WHERE [a0].[Name] = N'Great spotted kiwi' + ) AS [t] + WHERE [t].[Id0] IS NOT NULL) +ORDER BY [a].[Species] +"""); + } + + public override async Task Is_operator_on_result_of_FirstOrDefault(bool async) + { + await base.Is_operator_on_result_of_FirstOrDefault(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT TOP 1 `k0`.`Id` AS `Id0` + FROM `Animals` AS `a0` + LEFT JOIN `Kiwi` AS `k0` ON `a0`.`Id` = `k0`.`Id` + WHERE `a0`.`Name` = 'Great spotted kiwi' + ) AS `s` + WHERE `s`.`Id0` IS NOT NULL) +ORDER BY `a`.`Species` +"""); + } + + public override async Task Selecting_only_base_properties_on_base_type(bool async) + { + await base.Selecting_only_base_properties_on_base_type(async); + + AssertSql( +""" +SELECT `a`.`Name` +FROM `Animals` AS `a` +"""); + } + + public override async Task Selecting_only_base_properties_on_derived_type(bool async) + { + await base.Selecting_only_base_properties_on_derived_type(async); + + AssertSql( +""" +SELECT `a`.`Name` +FROM `Animals` AS `a` +INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id` +"""); + } + + public override async Task Can_query_all_animal_views(bool async) + { + await base.Can_query_all_animal_views(async); + + AssertSql(); + } + + public override async Task Discriminator_used_when_projection_over_derived_type(bool async) + { + await base.Discriminator_used_when_projection_over_derived_type(async); + + AssertSql(); + } + + public override async Task Discriminator_used_when_projection_over_derived_type2(bool async) + { + await base.Discriminator_used_when_projection_over_derived_type2(async); + + AssertSql(); + } + + public override async Task Discriminator_used_when_projection_over_of_type(bool async) + { + await base.Discriminator_used_when_projection_over_of_type(async); + + AssertSql(); + } + + public override async Task Discriminator_with_cast_in_shadow_property(bool async) + { + await base.Discriminator_with_cast_in_shadow_property(async); + + AssertSql(); + } + + public override void Using_from_sql_throws() + { + base.Using_from_sql_throws(); + + AssertSql(); + } + + public override async Task Using_is_operator_on_multiple_type_with_no_result(bool async) + { + await base.Using_is_operator_on_multiple_type_with_no_result(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL AND `e`.`Id` IS NOT NULL +"""); + } + + public override async Task Using_is_operator_with_of_type_on_multiple_type_with_no_result(bool async) + { + await base.Using_is_operator_with_of_type_on_multiple_type_with_no_result(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL AND `e`.`Id` IS NOT NULL +"""); + } + + public override async Task Using_OfType_on_multiple_type_with_no_result(bool async) + { + await base.Using_OfType_on_multiple_type_with_no_result(async); + + AssertSql(); + } + + public override async Task GetType_in_hierarchy_in_abstract_base_type(bool async) + { + await base.GetType_in_hierarchy_in_abstract_base_type(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE FALSE +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE FALSE +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `e`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling2(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling2_reverse(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_with_sibling2_not_equal(async); + + AssertSql( +""" +SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) +LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) +LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` +WHERE `k`.`Id` IS NULL +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTManyToManyNoTrackingQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTManyToManyNoTrackingQueryLibRedTest.cs new file mode 100644 index 00000000..618f33c7 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTManyToManyNoTrackingQueryLibRedTest.cs @@ -0,0 +1,2736 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTManyToManyNoTrackingQueryLibRedTest : TPTManyToManyNoTrackingQueryRelationalTestBase< + TPTManyToManyQueryLibRedFixture> +{ + public TPTManyToManyNoTrackingQueryLibRedTest(TPTManyToManyQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Skip_navigation_all(bool async) + { + await base.Skip_navigation_all(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE NOT EXISTS ( + SELECT `j`.`OneId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` NOT LIKE '%B%' OR `e0`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_without_predicate(bool async) + { + await base.Skip_navigation_any_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_any_with_predicate(bool async) + { + await base.Skip_navigation_any_with_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`OneSkipSharedId` AND (`e1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains(bool async) + { + await base.Skip_navigation_contains(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate(bool async) + { + await base.Skip_navigation_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate(bool async) + { + await base.Skip_navigation_count_with_predicate(async); + + AssertSql( + """ +SELECT `e0`.`Id`, `e0`.`Name`, `e0`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`Name`, ( + SELECT COUNT(*) + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name` + FROM `Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id` + ) AS `s` ON `j`.`EntityBranchId` = `s`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`s`.`Name` LIKE 'L%')) AS `c` + FROM `EntityOnes` AS `e` +) AS `e0` +ORDER BY `e0`.`c`, `e0`.`Id` +"""); + } + + public override async Task Skip_navigation_long_count_without_predicate(bool async) + { + await base.Skip_navigation_long_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +"""); + } + + public override async Task Skip_navigation_long_count_with_predicate(bool async) + { + await base.Skip_navigation_long_count_with_predicate(async); + + AssertSql( + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( + SELECT COUNT(*) + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwos` AS `e` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` +"""); + } + + public override async Task Skip_navigation_select_many_average(bool async) + { + await base.Skip_navigation_select_many_average(async); + + AssertSql( + """ +SELECT AVG(CDBL(`s`.`Key1`)) +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_max(bool async) + { + await base.Skip_navigation_select_many_max(async); + + AssertSql( + """ +SELECT MAX(`s`.`Key1`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Key1`, `j`.`ThreeId` + FROM `JoinThreeToCompositeKeyFull` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +"""); + } + + public override async Task Skip_navigation_select_many_min(bool async) + { + await base.Skip_navigation_select_many_min(async); + + AssertSql( + """ +SELECT MIN(`s0`.`Id`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `s`.`Id`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_sum(bool async) + { + await base.Skip_navigation_select_many_sum(async); + + AssertSql( + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) +FROM `Roots` AS `r` +INNER JOIN ( + SELECT `e0`.`Key1`, `e`.`RootSkipSharedId` + FROM `EntityCompositeKeyEntityRoot` AS `e` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_subquery_average(bool async) + { + await base.Skip_navigation_select_subquery_average(async); + + AssertSql( +""" +SELECT ( + SELECT AVG(CDBL(`e`.`Key1`)) + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `r`.`Id` = `j`.`LeafId`) +FROM (`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` +"""); + } + + public override async Task Skip_navigation_select_subquery_max(bool async) + { + await base.Skip_navigation_select_subquery_max(async); + + AssertSql( +""" +SELECT ( + SELECT MAX(`e0`.`Id`) + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_min(bool async) + { + await base.Skip_navigation_select_subquery_min(async); + + AssertSql( +""" +SELECT ( + SELECT MIN(`e0`.`Id`) + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`ThreeId`) +FROM `EntityThrees` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_sum(bool async) + { + await base.Skip_navigation_select_subquery_sum(async); + + AssertSql( +""" +SELECT ( + SELECT IIF(SUM(`e1`.`Id`) IS NULL, 0, SUM(`e1`.`Id`)) + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityOnes` AS `e1` ON `e0`.`OneSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`TwoSkipSharedId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_order_by_first_or_default(bool async) + { + await base.Skip_navigation_order_by_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_order_by_single_or_default(bool async) + { + await base.Skip_navigation_order_by_single_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT TOP(1) [t].[Id], [t].[Name] + FROM ( + SELECT TOP(1) [e0].[Id], [e0].[Name] + FROM [JoinOneSelfPayload] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[RightId] = [e0].[Id] + WHERE [e].[Id] = [j].[LeftId] + ORDER BY [e0].[Id] + ) AS [t] + ORDER BY [t].[Id] +) AS [t0] +"""); + } + + public override async Task Skip_navigation_order_by_last_or_default(bool async) + { + await base.Skip_navigation_order_by_last_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [Roots] AS [r] +INNER JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[EntityBranchId] + FROM ( + SELECT [e].[Id], [e].[Name], [j].[EntityBranchId], ROW_NUMBER() OVER(PARTITION BY [j].[EntityBranchId] ORDER BY [e].[Id] DESC) AS [row] + FROM [JoinOneToBranch] AS [j] + INNER JOIN [EntityOnes] AS [e] ON [j].[EntityOneId] = [e].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [r].[Id] = [t0].[EntityBranchId] +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id] DESC) AS [row] + FROM [JoinTwoToThree] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_cast(bool async) + { + await base.Skip_navigation_cast(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` +"""); + } + + public override async Task Skip_navigation_of_type(bool async) + { + await base.Skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM ((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` = 'EntityLeaf' +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Join_with_skip_navigation(bool async) + { + await base.Join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +INNER JOIN [EntityTwos] AS [e0] ON [e].[Id] = ( + SELECT TOP(1) [e2].[Id] + FROM [EntityTwoEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[SelfSkipSharedRightId] = [e2].[Id] + WHERE [e0].[Id] = [e1].[SelfSkipSharedLeftId] + ORDER BY [e2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation(bool async) + { + await base.Left_join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN [EntityCompositeKeys] AS [e0] ON ( + SELECT TOP(1) [e2].[Id] + FROM [EntityCompositeKeyEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[TwoSkipSharedId] = [e2].[Id] + WHERE [e].[Key1] = [e1].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [e1].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [e1].[CompositeKeySkipSharedKey3] + ORDER BY [e2].[Id]) = ( + SELECT TOP(1) [e3].[Id] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e3] ON [j].[ThreeId] = [e3].[Id] + WHERE [e0].[Key1] = [j].[CompositeId1] AND [e0].[Key2] = [j].[CompositeId2] AND [e0].[Key3] = [j].[CompositeId3] + ORDER BY [e3].[Id]) +ORDER BY [e].[Key1], [e0].[Key1], [e].[Key2], [e0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation(bool async) + { + await base.Select_many_over_skip_navigation(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `Roots` AS `r` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where(bool async) + { + await base.Select_many_over_skip_navigation_where(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneSkipSharedId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[OneSkipSharedId], ROW_NUMBER() OVER(PARTITION BY [e0].[OneSkipSharedId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityOneEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Id] = [t0].[OneSkipSharedId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_of_type(bool async) + { + await base.Select_many_over_skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM ((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s0` ON `e`.`Id` = `s0`.`ThreeSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_cast(bool async) + { + await base.Select_many_over_skip_navigation_cast(async); + + AssertSql( + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `j`.`EntityOneId` + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', NULL) AS `Discriminator` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`EntityBranchId` = `s`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`EntityOneId` +"""); + } + + public override async Task Select_skip_navigation(bool async) + { + await base.Select_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Select_skip_navigation_multiple(bool async) + { + await base.Select_skip_navigation_multiple(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` +FROM ((`EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` + FROM `EntityTwoEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) +LEFT JOIN ( + SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e3` + INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` +"""); + } + + public override async Task Select_skip_navigation_first_or_default(bool async) + { + await base.Select_skip_navigation_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Key1], [t0].[Key2], [t0].[Key3], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Key1], [e0].[Key2]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [j].[CompositeId1] = [e0].[Key1] AND [j].[CompositeId2] = [e0].[Key2] AND [j].[CompositeId3] = [e0].[Key3] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +ORDER BY [e].[Id] +"""); + } + + public override async Task Include_skip_navigation(bool async) + { + await base.Include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`Slumber`, `s0`.`IsGreen`, `s0`.`IsBrown`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM (((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference(bool async) + { + await base.Include_skip_navigation_then_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s1`.`Id`, `s1`.`Name`, `s1`.`Number`, `s1`.`IsGreen`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id0`, `s1`.`Name0`, `s1`.`EntityBranchId`, `s1`.`EntityOneId` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s0`.`Id` AS `Id0`, `s0`.`Name` AS `Name0`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id`) + LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j0`.`EntityBranchId`, `j0`.`EntityOneId` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` + ) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +) AS `s1` ON `e`.`Key1` = `s1`.`CompositeId1` AND `e`.`Key2` = `s1`.`CompositeId2` AND `e`.`Key3` = `s1`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`EntityBranchId`, `s1`.`EntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` + FROM ((`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId`, `j0`.`RightId` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference(bool async) + { + await base.Include_skip_navigation_and_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Filtered_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by(bool async) + { + await base.Filtered_include_skip_navigation_order_by(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[SelfSkipSharedLeftId], [t0].[SelfSkipSharedRightId] +FROM [EntityTwos] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[SelfSkipSharedLeftId], [t].[SelfSkipSharedRightId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[SelfSkipSharedLeftId], [e0].[SelfSkipSharedRightId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[Id0] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[Id0], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[Id] AS [Id0], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where(bool async) + { + await base.Filtered_then_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`OneId`, `s0`.`ThreeId` +FROM ((((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id`) +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`OneId`, `s`.`ThreeId` + FROM (`EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` < 10 + ) AS `s` ON `e0`.`Id` = `s`.`ThreeId` +) AS `s0` ON `r`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `r`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [r].[Id], [r].[Name], [b].[Number], [b0].[Slumber], [l].[IsGreen], [l0].[IsBrown], CASE + WHEN [l0].[Id] IS NOT NULL THEN N'EntityLeaf2' + WHEN [l].[Id] IS NOT NULL THEN N'EntityLeaf' + WHEN [b].[Id] IS NOT NULL THEN N'EntityBranch' +END AS [Discriminator], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[Name], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Id], [t1].[CollectionInverseId], [t1].[Name0], [t1].[ReferenceInverseId], [t1].[Id0] +FROM [Roots] AS [r] +LEFT JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] +LEFT JOIN [Branch2s] AS [b0] ON [r].[Id] = [b0].[Id] +LEFT JOIN [Leaves] AS [l] ON [r].[Id] = [l].[Id] +LEFT JOIN [Leaf2s] AS [l0] ON [r].[Id] = [l0].[Id] +LEFT JOIN ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId], [t0].[Id0], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] + LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[Id0], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j].[Id] AS [Id0], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e1].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e1] ON [j].[ThreeId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Key1] = [t0].[CompositeId1] AND [e0].[Key2] = [t0].[CompositeId2] AND [e0].[Key3] = [t0].[CompositeId3] +) AS [t1] ON [r].[Id] = [t1].[RootSkipSharedId] +ORDER BY [r].[Id], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +FROM ((`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + ) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` + WHERE `e`.`Key1` < 5 +) AS `s0` ON `r`.`Id` = `s0`.`LeafId` +ORDER BY `r`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId], [t1].[TwoId], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0], [t1].[ThreeId], [t1].[TwoId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[ThreeId], [j0].[TwoId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId], [t1].[TwoId], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0], [t1].[ThreeId], [t1].[TwoId0] +FROM [EntityOnes] AS [e] +LEFT JOIN ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId], [t].[TwoId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[ThreeId], [j0].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[TwoId] + WHERE [e0].[Id] < 10 +) AS [t1] ON [e].[Id] = [t1].[OneId] +ORDER BY [e].[Id], [t1].[OneId], [t1].[TwoId], [t1].[Id], [t1].[TwoId0], [t1].[Id0] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined(bool async) + { + await base.Filter_include_on_skip_navigation_combined(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId], [t3].[Id], [t3].[Name], [t3].[OneId], [t3].[ThreeId], [t3].[Id0], [t3].[CollectionInverseId], [t3].[ExtraId], [t3].[Name0], [t3].[ReferenceInverseId], [t3].[OneId0], [t3].[TwoId], [t3].[Id1], [t3].[Name1], [t3].[Number], [t3].[IsGreen], [t3].[Discriminator], [t3].[EntityBranchId], [t3].[EntityOneId] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [e0].[Id], [e0].[Name], [j].[OneId], [j].[ThreeId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId], [t0].[OneId] AS [OneId0], [t0].[TwoId], [t1].[Id] AS [Id1], [t1].[Name] AS [Name1], [t1].[Number], [t1].[IsGreen], [t1].[Discriminator], [t1].[EntityBranchId], [t1].[EntityOneId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[OneId], [j0].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[OneId] + LEFT JOIN ( + SELECT [t2].[Id], [t2].[Name], [t2].[Number], [t2].[IsGreen], [t2].[Discriminator], [j1].[EntityBranchId], [j1].[EntityOneId] + FROM [JoinOneToBranch] AS [j1] + INNER JOIN ( + SELECT [r].[Id], [r].[Name], [b].[Number], [l].[IsGreen], CASE + WHEN [l].[Id] IS NOT NULL THEN N'EntityLeaf' + END AS [Discriminator] + FROM [Roots] AS [r] + INNER JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] + LEFT JOIN [Leaves] AS [l] ON [r].[Id] = [l].[Id] + ) AS [t2] ON [j1].[EntityBranchId] = [t2].[Id] + WHERE [t2].[Id] < 20 + ) AS [t1] ON [e0].[Id] = [t1].[EntityOneId] + WHERE [e0].[Id] < 10 +) AS [t3] ON [e].[Id] = [t3].[ThreeId] +ORDER BY [e].[Id], [t3].[OneId], [t3].[ThreeId], [t3].[Id], [t3].[OneId0], [t3].[Id0], [t3].[TwoId], [t3].[EntityBranchId], [t3].[EntityOneId] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0`, `s0`.`ThreeId`, `s0`.`TwoId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0`, `s`.`ThreeId`, `s`.`TwoId` + FROM `EntityTwos` AS `e0` + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` + WHERE `e0`.`Id` > 15 +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` +"""); + } + + public override async Task Includes_accessed_via_different_path_are_merged(bool async) + { + await base.Includes_accessed_via_different_path_are_merged(async); + + AssertSql(" "); + } + + public override async Task Filtered_includes_accessed_via_different_path_are_merged(bool async) + { + await base.Filtered_includes_accessed_via_different_path_are_merged(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM (((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` +) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +"""); + } + + public override async Task Include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`Slumber`, `s0`.`IsGreen`, `s0`.`IsBrown`, `s0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM (((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_split(bool async) + { + await base.Include_skip_navigation_then_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` +""", + // + """ +SELECT `s1`.`Id`, `s1`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` +FROM (`EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `s`.`Id`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `r`.`Id` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3`) +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j0`.`EntityBranchId` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` +) AS `s1` ON `s0`.`Id` = `s1`.`EntityBranchId` +WHERE `s0`.`Id` IS NOT NULL AND `s1`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`ThreeId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Include_skip_navigation_and_reference_split(bool async) + { + await base.Include_skip_navigation_and_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` +ORDER BY `e`.`Id`, `e0`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +INNER JOIN ( + SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`TwoSkipSharedId` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id] +FROM [EntityTwos] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[SelfSkipSharedLeftId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[SelfSkipSharedLeftId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_then_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` +FROM (((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` +ORDER BY `r`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId` +FROM `Roots` AS `r` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +FROM (`Roots` AS `r` +INNER JOIN ( + SELECT `e0`.`Id`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`Name`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` < 10 +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [r].[Id], [r].[Name], [b].[Number], [b0].[Slumber], [l].[IsGreen], [l0].[IsBrown], CASE + WHEN [l0].[Id] IS NOT NULL THEN N'EntityLeaf2' + WHEN [l].[Id] IS NOT NULL THEN N'EntityLeaf' + WHEN [b].[Id] IS NOT NULL THEN N'EntityBranch' +END AS [Discriminator] +FROM [Roots] AS [r] +LEFT JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] +LEFT JOIN [Branch2s] AS [b0] ON [r].[Id] = [b0].[Id] +LEFT JOIN [Leaves] AS [l] ON [r].[Id] = [l].[Id] +LEFT JOIN [Leaf2s] AS [l0] ON [r].[Id] = [l0].[Id] +ORDER BY [r].[Id] +""", +// +""" +SELECT [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [r].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] +FROM [Roots] AS [r] +INNER JOIN ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] +) AS [t] ON [r].[Id] = [t].[RootSkipSharedId] +ORDER BY [r].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [r].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3] +FROM [Roots] AS [r] +INNER JOIN ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] +) AS [t] ON [r].[Id] = [t].[RootSkipSharedId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e1].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e1] ON [j].[ThreeId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Key1] = [t0].[CompositeId1] AND [t].[Key2] = [t0].[CompositeId2] AND [t].[Key3] = [t0].[CompositeId3] +ORDER BY [r].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` +FROM (`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` +ORDER BY `r`.`Id` +""", + // + """ +SELECT `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` +FROM ((`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +INNER JOIN ( + SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `e`.`Key1` < 5 +) AS `s` ON `r`.`Id` = `s`.`LeafId` +ORDER BY `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +FROM (((`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +INNER JOIN ( + SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `e`.`Key1` < 5 +) AS `s` ON `r`.`Id` = `s`.`LeafId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE `s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL +ORDER BY `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t0].[OneId], [t0].[TwoId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +""", +// +""" +SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [e].[Id], [t0].[OneId], [t0].[TwoId], [t0].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[OneId], [t].[TwoId] + FROM ( + SELECT [e0].[Id], [j].[OneId], [j].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +INNER JOIN ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[TwoId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 +) AS [t1] ON [t0].[Id] = [t1].[TwoId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[TwoId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[TwoId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[TwoId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[TwoId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id], [t0].[TwoId], [t0].[Id] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityTwos` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`TwoId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[Id], [t].[Name], [e].[Id], [t].[OneId], [t].[ThreeId] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [e0].[Name], [j].[OneId], [j].[ThreeId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [j].[OneId], [j].[ThreeId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[OneId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id], [t0].[OneId], [t0].[Id] +""", +// +""" +SELECT [t0].[Id], [t0].[Name], [t0].[Number], [t0].[IsGreen], [t0].[Discriminator], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [e0].[Id], [j].[OneId], [j].[ThreeId] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[Name], [t1].[Number], [t1].[IsGreen], [t1].[Discriminator], [j0].[EntityOneId] + FROM [JoinOneToBranch] AS [j0] + INNER JOIN ( + SELECT [r].[Id], [r].[Name], [b].[Number], [l].[IsGreen], CASE + WHEN [l].[Id] IS NOT NULL THEN N'EntityLeaf' + END AS [Discriminator] + FROM [Roots] AS [r] + INNER JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] + LEFT JOIN [Leaves] AS [l] ON [r].[Id] = [l].[Id] + ) AS [t1] ON [j0].[EntityBranchId] = [t1].[Id] + WHERE [t1].[Id] < 20 +) AS [t0] ON [t].[Id] = [t0].[EntityOneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_inverse_throws_in_no_tracking(bool async) + { + await base.Include_skip_navigation_then_include_inverse_throws_in_no_tracking(async); + + AssertSql(); + } + + public override async Task Include_skip_navigation_then_include_inverse_works_for_tracking_query(bool async) + { + await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_include(bool async) + { + await base.Throws_when_different_filtered_include(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_then_include(bool async) + { + await base.Throws_when_different_filtered_then_include(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_then_include_via_different_paths(bool async) + { + await base.Throws_when_different_filtered_then_include_via_different_paths(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `t` ON `e`.`Id` = `t`.`OneId` AND `e`.`Id` <> `t`.`Id` +"""); + } + + public override async Task Select_many_over_skip_navigation_where_non_equality(bool async) + { + await base.Select_many_over_skip_navigation_where_non_equality(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0`, `e0`.`Id` AS `Id0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` AND `e`.`Id` <> `s`.`Id0` +"""); + } + + public override async Task Contains_on_skip_collection_navigation(bool async) + { + await base.Contains_on_skip_collection_navigation(async); + + AssertSql( + """ +@entity_equality_two_Id='1' (Nullable = true) + +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = @entity_equality_two_Id) +"""); + } + + public override async Task GetType_in_hierarchy_in_base_type(bool async) + { + await base.GetType_in_hierarchy_in_base_type(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` +FROM (((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` +WHERE `l0`.`Id` IS NULL AND `l`.`Id` IS NULL AND `b`.`Id` IS NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` +FROM (((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` +WHERE `l`.`Id` IS NULL AND `b`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` +FROM (((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` +WHERE `l`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_querying_base_type(bool async) + { + await base.GetType_in_hierarchy_in_querying_base_type(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', NULL) AS `Discriminator` +FROM (`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` +WHERE FALSE +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_EF_Property(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_EF_Property(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_EF_Property( + bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_EF_Property(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[OneId], [t1].[TwoId], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0], [t1].[ThreeId], [t1].[TwoId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId], [t].[TwoId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], [j].[TwoId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], [j0].[ThreeId], [j0].[TwoId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async); + + AssertSql(); + } + + public override async Task Skip_navigation_all_unidirectional(bool async) + { + await base.Skip_navigation_all_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE NOT EXISTS ( + SELECT `u0`.`OneId` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND (`u1`.`Name` NOT LIKE '%B%' OR `u1`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_with_predicate_unidirectional(bool async) + { + await base.Skip_navigation_any_with_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoSkipSharedId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`u1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains_unidirectional(bool async) + { + await base.Skip_navigation_contains_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneToThreePayloadFullShared` AS `u0` + INNER JOIN `UnidirectionalEntityThrees` AS `u1` ON `u0`.`ThreeId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND `u1`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate_unidirectional(bool async) + { + await base.Skip_navigation_count_without_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneSelfPayload` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate_unidirectional(bool async) + { + await base.Skip_navigation_count_with_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`c` +FROM ( + SELECT `u`.`Id`, `u`.`Name`, ( + SELECT COUNT(*) + FROM `UnidirectionalJoinOneToBranch` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name` + FROM `UnidirectionalRoots` AS `u1` + INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id` + ) AS `s` ON `u0`.`UnidirectionalEntityBranchId` = `s`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`s`.`Name` LIKE 'L%')) AS `c` + FROM `UnidirectionalEntityOnes` AS `u` +) AS `u4` +ORDER BY `u4`.`c`, `u4`.`Id` +"""); + } + + public override async Task Skip_navigation_select_subquery_average_unidirectional(bool async) + { + await base.Skip_navigation_select_subquery_average_unidirectional(async); + + AssertSql( +""" +SELECT ( + SELECT AVG(CDBL(`u3`.`Key1`)) + FROM `UnidirectionalJoinCompositeKeyToLeaf` AS `u2` + INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u3` ON `u2`.`CompositeId1` = `u3`.`Key1` AND `u2`.`CompositeId2` = `u3`.`Key2` AND `u2`.`CompositeId3` = `u3`.`Key3` + WHERE `u`.`Id` = `u2`.`LeafId`) +FROM (`UnidirectionalRoots` AS `u` +INNER JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default_unidirectional(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityThrees] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [u0].[ThreeId] ORDER BY [u1].[Id] DESC) AS [row] + FROM [UnidirectionalJoinTwoToThree] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [u].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_of_type_unidirectional(bool async) + { + await base.Skip_navigation_of_type_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u2`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` + FROM (`UnidirectionalRoots` AS `u1` + LEFT JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) + LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` + ) AS `s` ON `u0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` = 'UnidirectionalEntityLeaf' +) AS `s0` ON `u`.`Key1` = `s0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s0`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Join_with_skip_navigation_unidirectional(bool async) + { + await base.Join_with_skip_navigation_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Id], [u].[CollectionInverseId], [u].[ExtraId], [u].[Name], [u].[ReferenceInverseId], [u0].[Id], [u0].[CollectionInverseId], [u0].[ExtraId], [u0].[Name], [u0].[ReferenceInverseId] +FROM [UnidirectionalEntityTwos] AS [u] +INNER JOIN [UnidirectionalEntityTwos] AS [u0] ON [u].[Id] = ( + SELECT TOP(1) [u2].[Id] + FROM [UnidirectionalEntityTwoUnidirectionalEntityTwo] AS [u1] + INNER JOIN [UnidirectionalEntityTwos] AS [u2] ON [u1].[SelfSkipSharedRightId] = [u2].[Id] + WHERE [u0].[Id] = [u1].[UnidirectionalEntityTwoId] + ORDER BY [u2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation_unidirectional(bool async) + { + await base.Left_join_with_skip_navigation_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [u0].[Key1], [u0].[Key2], [u0].[Key3], [u0].[Name] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN [UnidirectionalEntityCompositeKeys] AS [u0] ON ( + SELECT TOP(1) [u2].[Id] + FROM [UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo] AS [u1] + INNER JOIN [UnidirectionalEntityTwos] AS [u2] ON [u1].[TwoSkipSharedId] = [u2].[Id] + WHERE [u].[Key1] = [u1].[UnidirectionalEntityCompositeKeyKey1] AND [u].[Key2] = [u1].[UnidirectionalEntityCompositeKeyKey2] AND [u].[Key3] = [u1].[UnidirectionalEntityCompositeKeyKey3] + ORDER BY [u2].[Id]) = ( + SELECT TOP(1) [u4].[Id] + FROM [UnidirectionalJoinThreeToCompositeKeyFull] AS [u3] + INNER JOIN [UnidirectionalEntityThrees] AS [u4] ON [u3].[ThreeId] = [u4].[Id] + WHERE [u0].[Key1] = [u3].[CompositeId1] AND [u0].[Key2] = [u3].[CompositeId2] AND [u0].[Key3] = [u3].[CompositeId3] + ORDER BY [u4].[Id]) +ORDER BY [u].[Key1], [u0].[Key1], [u].[Key2], [u0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalRoots` AS `u` +INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`UnidirectionalEntityRootId` + FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u0` + INNER JOIN `UnidirectionalEntityThrees` AS `u1` ON `u0`.`ThreeSkipSharedId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`UnidirectionalEntityRootId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_where_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` AS `OneId0` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityOnes] AS [u] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[UnidirectionalEntityOneId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[UnidirectionalEntityOneId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityOneId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityOneUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoSkipSharedId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [u].[Id] = [t0].[UnidirectionalEntityOneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityOnes] AS [u] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[OneId], ROW_NUMBER() OVER(PARTITION BY [u0].[OneId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalJoinOneToThreePayloadFullShared] AS [u0] + INNER JOIN [UnidirectionalEntityThrees] AS [u1] ON [u0].[ThreeId] = [u1].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [u].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_cast_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_cast_unidirectional(async); + + AssertSql( + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` +FROM `UnidirectionalEntityOnes` AS `u` +INNER JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` + FROM `UnidirectionalJoinOneToBranch` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', NULL) AS `Discriminator` + FROM (`UnidirectionalRoots` AS `u1` + INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) + LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` + ) AS `s` ON `u0`.`UnidirectionalEntityBranchId` = `s`.`Id` +) AS `s0` ON `u`.`Id` = `s0`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Select_skip_navigation_unidirectional(bool async) + { + await base.Select_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u0`.`LeftId`, `u0`.`RightId` + FROM `UnidirectionalJoinOneSelfPayload` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RightId` +ORDER BY `u`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u2`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` + FROM (`UnidirectionalRoots` AS `u1` + LEFT JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) + LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` + ) AS `s` ON `u0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `u`.`Key1` = `s0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s0`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_unidirectional(bool async) + { + await base.Include_skip_navigation_then_reference_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` +FROM `UnidirectionalEntityTwos` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`TwoId` + FROM (`UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId` +) AS `s` ON `u`.`Id` = `s`.`TwoId` +ORDER BY `u`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s1`.`Id`, `s1`.`Name`, `s1`.`Number`, `s1`.`IsGreen`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id0`, `s1`.`Name0`, `s1`.`UnidirectionalEntityBranchId`, `s1`.`UnidirectionalEntityOneId` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `s0`.`Id` AS `Id0`, `s0`.`Name` AS `Name0`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId` + FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen` + FROM (`UnidirectionalRoots` AS `u1` + INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) + INNER JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` + ) AS `s` ON `u0`.`LeafId` = `s`.`Id`) + LEFT JOIN ( + SELECT `u5`.`Id`, `u5`.`Name`, `u4`.`UnidirectionalEntityBranchId`, `u4`.`UnidirectionalEntityOneId` + FROM `UnidirectionalJoinOneToBranch` AS `u4` + INNER JOIN `UnidirectionalEntityOnes` AS `u5` ON `u4`.`UnidirectionalEntityOneId` = `u5`.`Id` + ) AS `s0` ON `s`.`Id` = `s0`.`UnidirectionalEntityBranchId` +) AS `s1` ON `u`.`Key1` = `s1`.`CompositeId1` AND `u`.`Key2` = `s1`.`CompositeId2` AND `u`.`Key3` = `s1`.`CompositeId3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`UnidirectionalEntityBranchId`, `s1`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` + FROM ((`UnidirectionalJoinOneToThreePayloadFull` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `u4`.`Id`, `u4`.`Name`, `u3`.`LeftId`, `u3`.`RightId` + FROM `UnidirectionalJoinOneSelfPayload` AS `u3` + INNER JOIN `UnidirectionalEntityOnes` AS `u4` ON `u3`.`RightId` = `u4`.`Id` + ) AS `s` ON `u1`.`Id` = `s`.`LeftId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference_unidirectional(bool async) + { + await base.Include_skip_navigation_and_reference_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` +FROM (`UnidirectionalEntityTwos` AS `u` +LEFT JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`Id` = `u0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `u2`.`Id`, `u2`.`Name`, `u1`.`TwoSkipSharedId`, `u1`.`UnidirectionalEntityOneId` + FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u1` + INNER JOIN `UnidirectionalEntityOnes` AS `u2` ON `u1`.`UnidirectionalEntityOneId` = `u2`.`Id` +) AS `s` ON `u`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `u`.`Id`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_where_unidirectional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_unidirectional(async); + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`ThreeId`, `u0`.`TwoId` + FROM `UnidirectionalJoinTwoToThree` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`ThreeId` +ORDER BY `u`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Id], [u].[CollectionInverseId], [u].[ExtraId], [u].[Name], [u].[ReferenceInverseId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[SelfSkipSharedRightId], [t0].[UnidirectionalEntityTwoId] +FROM [UnidirectionalEntityTwos] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[SelfSkipSharedRightId], [t].[UnidirectionalEntityTwoId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[SelfSkipSharedRightId], [u0].[UnidirectionalEntityTwoId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityTwoId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityTwoUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[SelfSkipSharedRightId] = [u1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [u].[Id] = [t0].[UnidirectionalEntityTwoId] +ORDER BY [u].[Id], [t0].[UnidirectionalEntityTwoId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[TwoSkipSharedId], [t0].[UnidirectionalEntityCompositeKeyKey1], [t0].[UnidirectionalEntityCompositeKeyKey2], [t0].[UnidirectionalEntityCompositeKeyKey3] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[TwoSkipSharedId], [t].[UnidirectionalEntityCompositeKeyKey1], [t].[UnidirectionalEntityCompositeKeyKey2], [t].[UnidirectionalEntityCompositeKeyKey3] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[TwoSkipSharedId], [u0].[UnidirectionalEntityCompositeKeyKey1], [u0].[UnidirectionalEntityCompositeKeyKey2], [u0].[UnidirectionalEntityCompositeKeyKey3], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityCompositeKeyKey1], [u0].[UnidirectionalEntityCompositeKeyKey2], [u0].[UnidirectionalEntityCompositeKeyKey3] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoSkipSharedId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [u].[Key1] = [t0].[UnidirectionalEntityCompositeKeyKey1] AND [u].[Key2] = [t0].[UnidirectionalEntityCompositeKeyKey2] AND [u].[Key3] = [t0].[UnidirectionalEntityCompositeKeyKey3] +ORDER BY [u].[Key1], [u].[Key2], [u].[Key3], [t0].[UnidirectionalEntityCompositeKeyKey1], [t0].[UnidirectionalEntityCompositeKeyKey2], [t0].[UnidirectionalEntityCompositeKeyKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_unidirectional(async); + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [t0].[Id0] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[Id0], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[Id] AS [Id0], [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3], ROW_NUMBER() OVER(PARTITION BY [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalJoinThreeToCompositeKeyFull] AS [u0] + INNER JOIN [UnidirectionalEntityThrees] AS [u1] ON [u0].[ThreeId] = [u1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [u].[Key1] = [t0].[CompositeId1] AND [u].[Key2] = [t0].[CompositeId2] AND [u].[Key3] = [t0].[CompositeId3] +ORDER BY [u].[Key1], [u].[Key2], [u].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +FROM ((`UnidirectionalRoots` AS `u` +INNER JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id`) +LEFT JOIN ( + SELECT `u3`.`Key1`, `u3`.`Key2`, `u3`.`Key3`, `u3`.`Name`, `u2`.`LeafId`, `u2`.`CompositeId1`, `u2`.`CompositeId2`, `u2`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` + FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u2` + INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u3` ON `u2`.`CompositeId1` = `u3`.`Key1` AND `u2`.`CompositeId2` = `u3`.`Key2` AND `u2`.`CompositeId3` = `u3`.`Key3`) + LEFT JOIN ( + SELECT `u5`.`Id`, `u5`.`CollectionInverseId`, `u5`.`ExtraId`, `u5`.`Name`, `u5`.`ReferenceInverseId`, `u4`.`TwoSkipSharedId`, `u4`.`UnidirectionalEntityCompositeKeyKey1`, `u4`.`UnidirectionalEntityCompositeKeyKey2`, `u4`.`UnidirectionalEntityCompositeKeyKey3` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo` AS `u4` + INNER JOIN `UnidirectionalEntityTwos` AS `u5` ON `u4`.`TwoSkipSharedId` = `u5`.`Id` + ) AS `s` ON `u3`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u3`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u3`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` + WHERE `u3`.`Key1` < 5 +) AS `s0` ON `u`.`Id` = `s0`.`LeafId` +ORDER BY `u`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_unidirectional(bool async) + { + await base.Filter_include_on_skip_navigation_combined_unidirectional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Throws_when_different_filtered_include_unidirectional(bool async) + { + await base.Throws_when_different_filtered_include_unidirectional(async); + + AssertSql(); + } + + public override async Task Includes_accessed_via_different_path_are_merged_unidirectional(bool async) + { + await base.Includes_accessed_via_different_path_are_merged_unidirectional(async); + + AssertSql(); + } + + public override async Task Select_many_over_skip_navigation_where_non_equality_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_where_non_equality_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` AS `OneId0`, `u1`.`Id` AS `Id0` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId0` AND `u`.`Id` <> `s`.`Id0` +"""); + } + + public override async Task Contains_on_skip_collection_navigation_unidirectional(bool async) + { + await base.Contains_on_skip_collection_navigation_unidirectional(async); + + AssertSql( + """ +@entity_equality_two_Id='1' (Nullable = true) + +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND `u1`.`Id` = @entity_equality_two_Id) +"""); + } + + public override async Task GetType_in_hierarchy_in_base_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_base_type_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, IIF(`u1`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u0`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` +FROM (`UnidirectionalRoots` AS `u` +LEFT JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +LEFT JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +WHERE `u1`.`Id` IS NULL AND `u0`.`Id` IS NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, IIF(`u1`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u0`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` +FROM (`UnidirectionalRoots` AS `u` +LEFT JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +LEFT JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +WHERE `u1`.`Id` IS NULL AND `u0`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, IIF(`u1`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u0`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` +FROM (`UnidirectionalRoots` AS `u` +LEFT JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +LEFT JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +WHERE `u1`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_querying_base_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_querying_base_type_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, IIF(`u1`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', NULL) AS `Discriminator` +FROM (`UnidirectionalRoots` AS `u` +INNER JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +LEFT JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +WHERE FALSE +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTManyToManyQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTManyToManyQueryLibRedFixture.cs new file mode 100644 index 00000000..833c666c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTManyToManyQueryLibRedFixture.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTManyToManyQueryLibRedFixture : TPTManyToManyQueryRelationalFixture +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTManyToManyQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTManyToManyQueryLibRedTest.cs new file mode 100644 index 00000000..da4001e3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTManyToManyQueryLibRedTest.cs @@ -0,0 +1,2759 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTManyToManyQueryLibRedTest : TPTManyToManyQueryRelationalTestBase +{ + public TPTManyToManyQueryLibRedTest(TPTManyToManyQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Skip_navigation_all(bool async) + { + await base.Skip_navigation_all(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE NOT EXISTS ( + SELECT `j`.`OneId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` NOT LIKE '%B%' OR `e0`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_without_predicate(bool async) + { + await base.Skip_navigation_any_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND (`e0`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_any_with_predicate(bool async) + { + await base.Skip_navigation_any_with_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`OneSkipSharedId` AND (`e1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains(bool async) + { + await base.Skip_navigation_contains(async); + + AssertSql( +""" +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate(bool async) + { + await base.Skip_navigation_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate(bool async) + { + await base.Skip_navigation_count_with_predicate(async); + + AssertSql( + """ +SELECT `e0`.`Id`, `e0`.`Name`, `e0`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`Name`, ( + SELECT COUNT(*) + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name` + FROM `Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id` + ) AS `s` ON `j`.`EntityBranchId` = `s`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`s`.`Name` LIKE 'L%')) AS `c` + FROM `EntityOnes` AS `e` +) AS `e0` +ORDER BY `e0`.`c`, `e0`.`Id` +"""); + } + + public override async Task Skip_navigation_long_count_without_predicate(bool async) + { + await base.Skip_navigation_long_count_without_predicate(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +"""); + } + + public override async Task Skip_navigation_long_count_with_predicate(bool async) + { + await base.Skip_navigation_long_count_with_predicate(async); + + AssertSql( + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` +FROM ( + SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( + SELECT COUNT(*) + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwos` AS `e` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` +"""); + } + + public override async Task Skip_navigation_select_many_average(bool async) + { + await base.Skip_navigation_select_many_average(async); + + AssertSql( + """ +SELECT AVG(CDBL(`s`.`Key1`)) +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_max(bool async) + { + await base.Skip_navigation_select_many_max(async); + + AssertSql( + """ +SELECT MAX(`s`.`Key1`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `e0`.`Key1`, `j`.`ThreeId` + FROM `JoinThreeToCompositeKeyFull` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +"""); + } + + public override async Task Skip_navigation_select_many_min(bool async) + { + await base.Skip_navigation_select_many_min(async); + + AssertSql( + """ +SELECT MIN(`s0`.`Id`) +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `s`.`Id`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN ( + SELECT `r`.`Id` + FROM `Roots` AS `r` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_many_sum(bool async) + { + await base.Skip_navigation_select_many_sum(async); + + AssertSql( + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) +FROM `Roots` AS `r` +INNER JOIN ( + SELECT `e0`.`Key1`, `e`.`RootSkipSharedId` + FROM `EntityCompositeKeyEntityRoot` AS `e` + INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Skip_navigation_select_subquery_average(bool async) + { + await base.Skip_navigation_select_subquery_average(async); + + AssertSql( +""" +SELECT ( + SELECT AVG(CDBL(`e`.`Key1`)) + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `r`.`Id` = `j`.`LeafId`) +FROM (`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` +"""); + } + + public override async Task Skip_navigation_select_subquery_max(bool async) + { + await base.Skip_navigation_select_subquery_max(async); + + AssertSql( +""" +SELECT ( + SELECT MAX(`e0`.`Id`) + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`TwoId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_min(bool async) + { + await base.Skip_navigation_select_subquery_min(async); + + AssertSql( +""" +SELECT ( + SELECT MIN(`e0`.`Id`) + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`ThreeId`) +FROM `EntityThrees` AS `e` +"""); + } + + public override async Task Skip_navigation_select_subquery_sum(bool async) + { + await base.Skip_navigation_select_subquery_sum(async); + + AssertSql( +""" +SELECT ( + SELECT IIF(SUM(`e1`.`Id`) IS NULL, 0, SUM(`e1`.`Id`)) + FROM `EntityOneEntityTwo` AS `e0` + INNER JOIN `EntityOnes` AS `e1` ON `e0`.`OneSkipSharedId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`TwoSkipSharedId`) +FROM `EntityTwos` AS `e` +"""); + } + + public override async Task Skip_navigation_order_by_first_or_default(bool async) + { + await base.Skip_navigation_order_by_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_order_by_single_or_default(bool async) + { + await base.Skip_navigation_order_by_single_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT TOP(1) [t].[Id], [t].[Name] + FROM ( + SELECT TOP(1) [e0].[Id], [e0].[Name] + FROM [JoinOneSelfPayload] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[RightId] = [e0].[Id] + WHERE [e].[Id] = [j].[LeftId] + ORDER BY [e0].[Id] + ) AS [t] + ORDER BY [t].[Id] +) AS [t0] +"""); + } + + public override async Task Skip_navigation_order_by_last_or_default(bool async) + { + await base.Skip_navigation_order_by_last_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[Name] +FROM [Roots] AS [r] +INNER JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] +LEFT JOIN ( + SELECT [t].[Id], [t].[Name], [t].[EntityBranchId] + FROM ( + SELECT [e].[Id], [e].[Name], [j].[EntityBranchId], ROW_NUMBER() OVER(PARTITION BY [j].[EntityBranchId] ORDER BY [e].[Id] DESC) AS [row] + FROM [JoinOneToBranch] AS [j] + INNER JOIN [EntityOnes] AS [e] ON [j].[EntityOneId] = [e].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [r].[Id] = [t0].[EntityBranchId] +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Id] DESC) AS [row] + FROM [JoinTwoToThree] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_cast(bool async) + { + await base.Skip_navigation_cast(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` +"""); + } + + public override async Task Skip_navigation_of_type(bool async) + { + await base.Skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM ((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` = 'EntityLeaf' +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Join_with_skip_navigation(bool async) + { + await base.Join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +INNER JOIN [EntityTwos] AS [e0] ON [e].[Id] = ( + SELECT TOP(1) [e2].[Id] + FROM [EntityTwoEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[SelfSkipSharedRightId] = [e2].[Id] + WHERE [e0].[Id] = [e1].[SelfSkipSharedLeftId] + ORDER BY [e2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation(bool async) + { + await base.Left_join_with_skip_navigation(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN [EntityCompositeKeys] AS [e0] ON ( + SELECT TOP(1) [e2].[Id] + FROM [EntityCompositeKeyEntityTwo] AS [e1] + INNER JOIN [EntityTwos] AS [e2] ON [e1].[TwoSkipSharedId] = [e2].[Id] + WHERE [e].[Key1] = [e1].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [e1].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [e1].[CompositeKeySkipSharedKey3] + ORDER BY [e2].[Id]) = ( + SELECT TOP(1) [e3].[Id] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e3] ON [j].[ThreeId] = [e3].[Id] + WHERE [e0].[Key1] = [j].[CompositeId1] AND [e0].[Key2] = [j].[CompositeId2] AND [e0].[Key3] = [j].[CompositeId3] + ORDER BY [e3].[Id]) +ORDER BY [e].[Key1], [e0].[Key1], [e].[Key2], [e0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation(bool async) + { + await base.Select_many_over_skip_navigation(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `Roots` AS `r` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where(bool async) + { + await base.Select_many_over_skip_navigation_where(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[OneSkipSharedId] + FROM ( + SELECT [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], [e0].[OneSkipSharedId], ROW_NUMBER() OVER(PARTITION BY [e0].[OneSkipSharedId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityOneEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Id] = [t0].[OneSkipSharedId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [j].[OneId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToThreePayloadFullShared] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [e].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_of_type(bool async) + { + await base.Select_many_over_skip_navigation_of_type(async); + + AssertSql( + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `e0`.`ThreeSkipSharedId` + FROM `EntityRootEntityThree` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM ((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s0` ON `e`.`Id` = `s0`.`ThreeSkipSharedId` +"""); + } + + public override async Task Select_many_over_skip_navigation_cast(bool async) + { + await base.Select_many_over_skip_navigation_cast(async); + + AssertSql( + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `j`.`EntityOneId` + FROM `JoinOneToBranch` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', NULL) AS `Discriminator` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`EntityBranchId` = `s`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`EntityOneId` +"""); + } + + public override async Task Select_skip_navigation(bool async) + { + await base.Select_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` + FROM `JoinOneSelfPayload` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Select_skip_navigation_multiple(bool async) + { + await base.Select_skip_navigation_multiple(async); + + AssertSql( + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` +FROM ((`EntityTwos` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN ( + SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` + FROM `EntityTwoEntityTwo` AS `e1` + INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) +LEFT JOIN ( + SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` + FROM `EntityCompositeKeyEntityTwo` AS `e3` + INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` +"""); + } + + public override async Task Select_skip_navigation_first_or_default(bool async) + { + await base.Select_skip_navigation_first_or_default(async); + + AssertSql( +""" +SELECT [t0].[Key1], [t0].[Key2], [t0].[Key3], [t0].[Name] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [t].[ThreeId] + FROM ( + SELECT [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [j].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [j].[ThreeId] ORDER BY [e0].[Key1], [e0].[Key2]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [j].[CompositeId1] = [e0].[Key1] AND [j].[CompositeId2] = [e0].[Key2] AND [j].[CompositeId3] = [e0].[Key3] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [e].[Id] = [t0].[ThreeId] +ORDER BY [e].[Id] +"""); + } + + public override async Task Include_skip_navigation(bool async) + { + await base.Include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`Slumber`, `s0`.`IsGreen`, `s0`.`IsBrown`, `s0`.`Discriminator` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM (((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference(bool async) + { + await base.Include_skip_navigation_then_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`Name`, `s1`.`Number`, `s1`.`IsGreen`, `s1`.`EntityBranchId`, `s1`.`EntityOneId`, `s1`.`Id0`, `s1`.`Name0` +FROM `EntityCompositeKeys` AS `e` +LEFT JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id` AS `Id0`, `s0`.`Name` AS `Name0` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id`) + LEFT JOIN ( + SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` + ) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +) AS `s1` ON `e`.`Key1` = `s1`.`CompositeId1` AND `e`.`Key2` = `s1`.`CompositeId2` AND `e`.`Key3` = `s1`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`EntityBranchId`, `s1`.`EntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` + FROM ((`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference(bool async) + { + await base.Include_skip_navigation_and_reference(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` +"""); + } + + public override async Task Filtered_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by(bool async) + { + await base.Filtered_include_skip_navigation_order_by(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId], [t0].[SelfSkipSharedLeftId], [t0].[SelfSkipSharedRightId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +LEFT JOIN ( + SELECT [t].[SelfSkipSharedLeftId], [t].[SelfSkipSharedRightId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[SelfSkipSharedLeftId], [e0].[SelfSkipSharedRightId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e0].[Id] AS [Id0], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where(bool async) + { + await base.Filtered_then_include_skip_navigation_where(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id0`, `s0`.`Name0` +FROM ((((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id`) +LEFT JOIN ( + SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` + FROM (`EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e1`.`Id`, `e1`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` < 10 + ) AS `s` ON `e0`.`Id` = `s`.`ThreeId` +) AS `s0` ON `r`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `r`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [r].[Id], [r].[Name], [b].[Number], [b0].[Slumber], [l].[IsGreen], [l0].[IsBrown], CASE + WHEN [l0].[Id] IS NOT NULL THEN N'EntityLeaf2' + WHEN [l].[Id] IS NOT NULL THEN N'EntityLeaf' + WHEN [b].[Id] IS NOT NULL THEN N'EntityBranch' +END AS [Discriminator], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[Name], [t1].[Id], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[ThreeId], [t1].[Id0], [t1].[CollectionInverseId], [t1].[Name0], [t1].[ReferenceInverseId] +FROM [Roots] AS [r] +LEFT JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] +LEFT JOIN [Branch2s] AS [b0] ON [r].[Id] = [b0].[Id] +LEFT JOIN [Leaves] AS [l] ON [r].[Id] = [l].[Id] +LEFT JOIN [Leaf2s] AS [l0] ON [r].[Id] = [l0].[Id] +LEFT JOIN ( + SELECT [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name], [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] + LEFT JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e1].[Id] AS [Id0], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e1].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e1] ON [j].[ThreeId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Key1] = [t0].[CompositeId1] AND [e0].[Key2] = [t0].[CompositeId2] AND [e0].[Key3] = [t0].[CompositeId3] +) AS [t1] ON [r].[Id] = [t1].[RootSkipSharedId] +ORDER BY [r].[Id], [t1].[RootSkipSharedId], [t1].[CompositeKeySkipSharedKey1], [t1].[CompositeKeySkipSharedKey2], [t1].[CompositeKeySkipSharedKey3], [t1].[Key1], [t1].[Key2], [t1].[Key3], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[Id0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` +FROM ((`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` + FROM (`JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3`) + LEFT JOIN ( + SELECT `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` + ) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` + WHERE `e`.`Key1` < 5 +) AS `s0` ON `r`.`Id` = `s0`.`LeafId` +ORDER BY `r`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[ThreeId], [t1].[TwoId0], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[ThreeId], [t1].[TwoId0], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0] +FROM [EntityOnes] AS [e] +LEFT JOIN ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[ThreeId], [t].[TwoId], [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[TwoId] + WHERE [e0].[Id] < 10 +) AS [t1] ON [e].[Id] = [t1].[OneId] +ORDER BY [e].[Id], [t1].[OneId], [t1].[TwoId], [t1].[Id], [t1].[TwoId0], [t1].[Id0] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined(bool async) + { + await base.Filter_include_on_skip_navigation_combined(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId], [t3].[OneId], [t3].[ThreeId], [t3].[Payload], [t3].[Id], [t3].[Name], [t3].[OneId0], [t3].[TwoId], [t3].[JoinOneToTwoExtraId], [t3].[Id0], [t3].[CollectionInverseId], [t3].[ExtraId], [t3].[Name0], [t3].[ReferenceInverseId], [t3].[EntityBranchId], [t3].[EntityOneId], [t3].[Id1], [t3].[Name1], [t3].[Number], [t3].[IsGreen], [t3].[Discriminator] +FROM [EntityThrees] AS [e] +LEFT JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [j].[Payload], [e0].[Id], [e0].[Name], [t0].[OneId] AS [OneId0], [t0].[TwoId], [t0].[JoinOneToTwoExtraId], [t0].[Id] AS [Id0], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId], [t1].[EntityBranchId], [t1].[EntityOneId], [t1].[Id] AS [Id1], [t1].[Name] AS [Name1], [t1].[Number], [t1].[IsGreen], [t1].[Discriminator] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + LEFT JOIN ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j0].[OneId], [j0].[TwoId], [j0].[JoinOneToTwoExtraId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 + ) AS [t0] ON [e0].[Id] = [t0].[OneId] + LEFT JOIN ( + SELECT [j1].[EntityBranchId], [j1].[EntityOneId], [t2].[Id], [t2].[Name], [t2].[Number], [t2].[IsGreen], [t2].[Discriminator] + FROM [JoinOneToBranch] AS [j1] + INNER JOIN ( + SELECT [r].[Id], [r].[Name], [b].[Number], [l].[IsGreen], CASE + WHEN [l].[Id] IS NOT NULL THEN N'EntityLeaf' + END AS [Discriminator] + FROM [Roots] AS [r] + INNER JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] + LEFT JOIN [Leaves] AS [l] ON [r].[Id] = [l].[Id] + ) AS [t2] ON [j1].[EntityBranchId] = [t2].[Id] + WHERE [t2].[Id] < 20 + ) AS [t1] ON [e0].[Id] = [t1].[EntityOneId] + WHERE [e0].[Id] < 10 +) AS [t3] ON [e].[Id] = [t3].[ThreeId] +ORDER BY [e].[Id], [t3].[OneId], [t3].[ThreeId], [t3].[Id], [t3].[OneId0], [t3].[Id0], [t3].[TwoId], [t3].[EntityBranchId], [t3].[EntityOneId] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`ThreeId`, `s0`.`TwoId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM `EntityTwos` AS `e0` + LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` + WHERE `e0`.`Id` > 15 +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` +"""); + } + + public override async Task Includes_accessed_via_different_path_are_merged(bool async) + { + await base.Includes_accessed_via_different_path_are_merged(async); + + AssertSql(" "); + } + + public override async Task Filtered_includes_accessed_via_different_path_are_merged(bool async) + { + await base.Filtered_includes_accessed_via_different_path_are_merged(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM (((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` +) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +"""); + } + + public override async Task Include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`Slumber`, `s0`.`IsGreen`, `s0`.`IsBrown`, `s0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator` + FROM `EntityCompositeKeyEntityRoot` AS `e0` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` + FROM (((`Roots` AS `r` + LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) + LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) + LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_split(bool async) + { + await base.Include_skip_navigation_then_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` +FROM `EntityCompositeKeys` AS `e` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +""", + // + """ +SELECT `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +FROM `EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` +""", + // + """ +SELECT `s1`.`EntityBranchId`, `s1`.`EntityOneId`, `s1`.`Id`, `s1`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` +FROM (`EntityCompositeKeys` AS `e` +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN ( + SELECT `r`.`Id` + FROM (`Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) + INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3`) +LEFT JOIN ( + SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToBranch` AS `j0` + INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` +) AS `s1` ON `s0`.`Id` = `s1`.`EntityBranchId` +WHERE `s0`.`Id` IS NOT NULL AND `s1`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_split(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id`, `e1`.`Id` AS `Id0` + FROM (`JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` + FROM `JoinOneSelfPayload` AS `j0` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Include_skip_navigation_and_reference_split(bool async) + { + await base.Include_skip_navigation_and_reference_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` +ORDER BY `e`.`Id`, `e0`.`Id` +""", + // + """ +SELECT `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` +FROM (`EntityTwos` AS `e` +LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) +INNER JOIN ( + SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` + FROM `EntityOneEntityTwo` AS `e1` + INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[ExtraId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityTwos] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[SelfSkipSharedLeftId], [t0].[SelfSkipSharedRightId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id] +FROM [EntityTwos] AS [e] +INNER JOIN ( + SELECT [t].[SelfSkipSharedLeftId], [t].[SelfSkipSharedRightId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[SelfSkipSharedLeftId], [e0].[SelfSkipSharedRightId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[SelfSkipSharedLeftId] ORDER BY [e1].[Id]) AS [row] + FROM [EntityTwoEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[SelfSkipSharedRightId] = [e1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [e].[Id] = [t0].[SelfSkipSharedLeftId] +ORDER BY [e].[Id], [t0].[SelfSkipSharedLeftId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name] +FROM [EntityCompositeKeys] AS [e] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Key1], [e].[Key2], [e].[Key3] +FROM [EntityCompositeKeys] AS [e] +INNER JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e0].[Id] AS [Id0], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e0].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e0] ON [j].[ThreeId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Key1] = [t0].[CompositeId1] AND [e].[Key2] = [t0].[CompositeId2] AND [e].[Key3] = [t0].[CompositeId3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_then_include_skip_navigation_where_split(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` +FROM (((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` +ORDER BY `r`.`Id` +""", + // + """ +SELECT `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `r`.`Id` +FROM `Roots` AS `r` +INNER JOIN ( + SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +""", + // + """ +SELECT `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +FROM (`Roots` AS `r` +INNER JOIN ( + SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id` + FROM `EntityRootEntityThree` AS `e` + INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId`) +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e1`.`Id`, `e1`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` + WHERE `e1`.`Id` < 10 +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` +"""); + } + + public override async Task Filtered_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [r].[Id], [r].[Name], [b].[Number], [b0].[Slumber], [l].[IsGreen], [l0].[IsBrown], CASE + WHEN [l0].[Id] IS NOT NULL THEN N'EntityLeaf2' + WHEN [l].[Id] IS NOT NULL THEN N'EntityLeaf' + WHEN [b].[Id] IS NOT NULL THEN N'EntityBranch' +END AS [Discriminator] +FROM [Roots] AS [r] +LEFT JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] +LEFT JOIN [Branch2s] AS [b0] ON [r].[Id] = [b0].[Id] +LEFT JOIN [Leaves] AS [l] ON [r].[Id] = [l].[Id] +LEFT JOIN [Leaf2s] AS [l0] ON [r].[Id] = [l0].[Id] +ORDER BY [r].[Id] +""", +// +""" +SELECT [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3], [t].[Name], [r].[Id] +FROM [Roots] AS [r] +INNER JOIN ( + SELECT [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3], [e0].[Key1], [e0].[Key2], [e0].[Key3], [e0].[Name] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] +) AS [t] ON [r].[Id] = [t].[RootSkipSharedId] +ORDER BY [r].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3] +""", +// +""" +SELECT [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [r].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3] +FROM [Roots] AS [r] +INNER JOIN ( + SELECT [e].[RootSkipSharedId], [e].[CompositeKeySkipSharedKey1], [e].[CompositeKeySkipSharedKey2], [e].[CompositeKeySkipSharedKey3], [e0].[Key1], [e0].[Key2], [e0].[Key3] + FROM [EntityCompositeKeyEntityRoot] AS [e] + INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3] +) AS [t] ON [r].[Id] = [t].[RootSkipSharedId] +INNER JOIN ( + SELECT [t1].[Id], [t1].[CompositeId1], [t1].[CompositeId2], [t1].[CompositeId3], [t1].[ThreeId], [t1].[Id0], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId] + FROM ( + SELECT [j].[Id], [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3], [j].[ThreeId], [e1].[Id] AS [Id0], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[CompositeId1], [j].[CompositeId2], [j].[CompositeId3] ORDER BY [e1].[Id]) AS [row] + FROM [JoinThreeToCompositeKeyFull] AS [j] + INNER JOIN [EntityThrees] AS [e1] ON [j].[ThreeId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Key1] = [t0].[CompositeId1] AND [t].[Key2] = [t0].[CompositeId2] AND [t].[Key3] = [t0].[CompositeId3] +ORDER BY [r].[Id], [t].[RootSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Key1], [t].[Key2], [t].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` +FROM (`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` +ORDER BY `r`.`Id` +""", + // + """ +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `r`.`Id` +FROM ((`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `e`.`Key1` < 5 +) AS `s` ON `r`.`Id` = `s`.`LeafId` +ORDER BY `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +""", + // + """ +SELECT `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +FROM (((`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +INNER JOIN ( + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` + FROM `JoinCompositeKeyToLeaf` AS `j` + INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` + WHERE `e`.`Key1` < 5 +) AS `s` ON `r`.`Id` = `s`.`LeafId`) +LEFT JOIN ( + SELECT `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityCompositeKeyEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE `s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL +ORDER BY `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t0].[OneId], [t0].[TwoId], [t0].[JoinOneToTwoExtraId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +""", +// +""" +SELECT [t1].[ThreeId], [t1].[TwoId], [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId], [e].[Id], [t0].[OneId], [t0].[TwoId], [t0].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [t].[OneId], [t].[TwoId], [t].[Id] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [e0].[Id], ROW_NUMBER() OVER(PARTITION BY [j].[OneId] ORDER BY [e0].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [e].[Id] = [t0].[OneId] +INNER JOIN ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 +) AS [t1] ON [t0].[Id] = [t1].[TwoId] +ORDER BY [e].[Id], [t0].[OneId], [t0].[Id], [t0].[TwoId] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_order_by_skip_take_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name] +FROM [EntityOnes] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [e].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +""", +// +""" +SELECT [t0].[ThreeId], [t0].[TwoId], [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id] +FROM [EntityOnes] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[TwoId], [e0].[Id] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[OneId] +INNER JOIN ( + SELECT [t1].[ThreeId], [t1].[TwoId], [t1].[Id], [t1].[CollectionInverseId], [t1].[Name], [t1].[ReferenceInverseId] + FROM ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[TwoId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[TwoId] +ORDER BY [e].[Id], [t].[OneId], [t].[TwoId], [t].[Id], [t0].[TwoId], [t0].[Id] +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityTwos` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityTwos` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +FROM (`EntityTwos` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `e0`.`Id`, `e1`.`Id` AS `Id0` + FROM (`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(bool async) + { + await base.Filter_include_on_skip_navigation_combined_with_filtered_then_includes_split(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[CollectionInverseId], [e].[Name], [e].[ReferenceInverseId] +FROM [EntityThrees] AS [e] +ORDER BY [e].[Id] +""", +// +""" +SELECT [t].[OneId], [t].[ThreeId], [t].[Payload], [t].[Id], [t].[Name], [e].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [j].[Payload], [e0].[Id], [e0].[Name] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +""", +// +""" +SELECT [t0].[OneId], [t0].[TwoId], [t0].[JoinOneToTwoExtraId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [e0].[Id] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId] + FROM ( + SELECT [j0].[OneId], [j0].[TwoId], [j0].[JoinOneToTwoExtraId], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [j0].[OneId] ORDER BY [e1].[Id]) AS [row] + FROM [JoinOneToTwo] AS [j0] + INNER JOIN [EntityTwos] AS [e1] ON [j0].[TwoId] = [e1].[Id] + ) AS [t1] + WHERE 1 < [t1].[row] AND [t1].[row] <= 3 +) AS [t0] ON [t].[Id] = [t0].[OneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id], [t0].[OneId], [t0].[Id] +""", +// +""" +SELECT [t0].[EntityBranchId], [t0].[EntityOneId], [t0].[Id], [t0].[Name], [t0].[Number], [t0].[IsGreen], [t0].[Discriminator], [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +FROM [EntityThrees] AS [e] +INNER JOIN ( + SELECT [j].[OneId], [j].[ThreeId], [e0].[Id] + FROM [JoinOneToThreePayloadFull] AS [j] + INNER JOIN [EntityOnes] AS [e0] ON [j].[OneId] = [e0].[Id] + WHERE [e0].[Id] < 10 +) AS [t] ON [e].[Id] = [t].[ThreeId] +INNER JOIN ( + SELECT [j0].[EntityBranchId], [j0].[EntityOneId], [t1].[Id], [t1].[Name], [t1].[Number], [t1].[IsGreen], [t1].[Discriminator] + FROM [JoinOneToBranch] AS [j0] + INNER JOIN ( + SELECT [r].[Id], [r].[Name], [b].[Number], [l].[IsGreen], CASE + WHEN [l].[Id] IS NOT NULL THEN N'EntityLeaf' + END AS [Discriminator] + FROM [Roots] AS [r] + INNER JOIN [Branches] AS [b] ON [r].[Id] = [b].[Id] + LEFT JOIN [Leaves] AS [l] ON [r].[Id] = [l].[Id] + ) AS [t1] ON [j0].[EntityBranchId] = [t1].[Id] + WHERE [t1].[Id] < 20 +) AS [t0] ON [t].[Id] = [t0].[EntityOneId] +ORDER BY [e].[Id], [t].[OneId], [t].[ThreeId], [t].[Id] +"""); + } + + public override async Task Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(bool async) + { + await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` +FROM `EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +FROM (`EntityThrees` AS `e` +INNER JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id` + FROM `JoinOneToThreePayloadFull` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` > 15 +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) +LEFT JOIN ( + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `EntityTwos` AS `e1` + WHERE `e1`.`Id` < 5 +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` +"""); + } + + public override async Task Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(bool async) + { + await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation_split(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` +FROM `EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` +""", + // + """ +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` +FROM (`EntityOnes` AS `e` +INNER JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId` + FROM `EntityTwos` AS `e0` + WHERE `e0`.`Id` > 15 +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) +LEFT JOIN ( + SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `JoinTwoToThree` AS `j` + INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` + WHERE `e1`.`Id` < 5 +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_inverse_works_for_tracking_query(bool async) + { + await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId0`, `s0`.`ThreeId0`, `s0`.`Payload0`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `s`.`OneId` AS `OneId0`, `s`.`ThreeId` AS `ThreeId0`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` + FROM (`JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN ( + SELECT `j0`.`OneId`, `j0`.`ThreeId`, `j0`.`Payload`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` + FROM `JoinOneToThreePayloadFullShared` AS `j0` + INNER JOIN `EntityThrees` AS `e1` ON `j0`.`ThreeId` = `e1`.`Id` + ) AS `s` ON `e0`.`Id` = `s`.`OneId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`OneId0`, `s0`.`ThreeId0` +"""); + } + + public override async Task Throws_when_different_filtered_include(bool async) + { + await base.Throws_when_different_filtered_include(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_then_include(bool async) + { + await base.Throws_when_different_filtered_then_include(async); + + AssertSql(); + } + + public override async Task Throws_when_different_filtered_then_include_via_different_paths(bool async) + { + await base.Throws_when_different_filtered_then_include_via_different_paths(async); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `t` ON `e`.`Id` = `t`.`OneId` AND `e`.`Id` <> `t`.`Id` +"""); + } + + public override async Task Select_many_over_skip_navigation_where_non_equality(bool async) + { + await base.Select_many_over_skip_navigation_where_non_equality(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `EntityOnes` AS `e` +LEFT JOIN ( + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` AS `OneId0`, `e0`.`Id` AS `Id0` + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId0` AND `e`.`Id` <> `s`.`Id0` +"""); + } + + public override async Task Contains_on_skip_collection_navigation(bool async) + { + await base.Contains_on_skip_collection_navigation(async); + + AssertSql( + """ +@entity_equality_two_Id='1' (Nullable = true) + +SELECT `e`.`Id`, `e`.`Name` +FROM `EntityOnes` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `JoinOneToTwo` AS `j` + INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` + WHERE `e`.`Id` = `j`.`OneId` AND `e0`.`Id` = @entity_equality_two_Id) +"""); + } + + public override async Task GetType_in_hierarchy_in_base_type(bool async) + { + await base.GetType_in_hierarchy_in_base_type(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` +FROM (((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` +WHERE `l0`.`Id` IS NULL AND `l`.`Id` IS NULL AND `b`.`Id` IS NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` +FROM (((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` +WHERE `l`.`Id` IS NULL AND `b`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type(async); + + AssertSql( +""" +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` +FROM (((`Roots` AS `r` +LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) +LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` +WHERE `l`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_querying_base_type(bool async) + { + await base.GetType_in_hierarchy_in_querying_base_type(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', NULL) AS `Discriminator` +FROM (`Roots` AS `r` +INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) +LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` +WHERE FALSE +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_EF_Property(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_EF_Property(async); + + AssertSql( +""" +SELECT [e].[Key1], [e].[Key2], [e].[Key3], [e].[Name], [t0].[TwoSkipSharedId], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [EntityCompositeKeys] AS [e] +LEFT JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[CompositeKeySkipSharedKey1], [t].[CompositeKeySkipSharedKey2], [t].[CompositeKeySkipSharedKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [e0].[TwoSkipSharedId], [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3], [e1].[Id], [e1].[CollectionInverseId], [e1].[ExtraId], [e1].[Name], [e1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [e0].[CompositeKeySkipSharedKey1], [e0].[CompositeKeySkipSharedKey2], [e0].[CompositeKeySkipSharedKey3] ORDER BY [e1].[Id]) AS [row] + FROM [EntityCompositeKeyEntityTwo] AS [e0] + INNER JOIN [EntityTwos] AS [e1] ON [e0].[TwoSkipSharedId] = [e1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [e].[Key1] = [t0].[CompositeKeySkipSharedKey1] AND [e].[Key2] = [t0].[CompositeKeySkipSharedKey2] AND [e].[Key3] = [t0].[CompositeKeySkipSharedKey3] +ORDER BY [e].[Key1], [e].[Key2], [e].[Key3], [t0].[CompositeKeySkipSharedKey1], [t0].[CompositeKeySkipSharedKey2], [t0].[CompositeKeySkipSharedKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_EF_Property( + bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_then_include_skip_navigation_where_EF_Property(async); + + AssertSql( +""" +SELECT [e].[Id], [e].[Name], [t1].[OneId], [t1].[TwoId], [t1].[JoinOneToTwoExtraId], [t1].[Id], [t1].[CollectionInverseId], [t1].[ExtraId], [t1].[Name], [t1].[ReferenceInverseId], [t1].[ThreeId], [t1].[TwoId0], [t1].[Id0], [t1].[CollectionInverseId0], [t1].[Name0], [t1].[ReferenceInverseId0] +FROM [EntityOnes] AS [e] +OUTER APPLY ( + SELECT [t].[OneId], [t].[TwoId], [t].[JoinOneToTwoExtraId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t0].[ThreeId], [t0].[TwoId] AS [TwoId0], [t0].[Id] AS [Id0], [t0].[CollectionInverseId] AS [CollectionInverseId0], [t0].[Name] AS [Name0], [t0].[ReferenceInverseId] AS [ReferenceInverseId0] + FROM ( + SELECT [j].[OneId], [j].[TwoId], [j].[JoinOneToTwoExtraId], [e0].[Id], [e0].[CollectionInverseId], [e0].[ExtraId], [e0].[Name], [e0].[ReferenceInverseId] + FROM [JoinOneToTwo] AS [j] + INNER JOIN [EntityTwos] AS [e0] ON [j].[TwoId] = [e0].[Id] + WHERE [e].[Id] = [j].[OneId] + ORDER BY [e0].[Id] + OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY + ) AS [t] + LEFT JOIN ( + SELECT [j0].[ThreeId], [j0].[TwoId], [e1].[Id], [e1].[CollectionInverseId], [e1].[Name], [e1].[ReferenceInverseId] + FROM [JoinTwoToThree] AS [j0] + INNER JOIN [EntityThrees] AS [e1] ON [j0].[ThreeId] = [e1].[Id] + WHERE [e1].[Id] < 10 + ) AS [t0] ON [t].[Id] = [t0].[TwoId] +) AS [t1] +ORDER BY [e].[Id], [t1].[Id], [t1].[OneId], [t1].[TwoId], [t1].[ThreeId], [t1].[TwoId0] +"""); + } + + public override async Task Skip_navigation_all_unidirectional(bool async) + { + await base.Skip_navigation_all_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE NOT EXISTS ( + SELECT `u0`.`OneId` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND (`u1`.`Name` NOT LIKE '%B%' OR `u1`.`Name` IS NULL)) +"""); + } + + public override async Task Skip_navigation_any_with_predicate_unidirectional(bool async) + { + await base.Skip_navigation_any_with_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoSkipSharedId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`u1`.`Name` LIKE '%B%')) +"""); + } + + public override async Task Skip_navigation_contains_unidirectional(bool async) + { + await base.Skip_navigation_contains_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneToThreePayloadFullShared` AS `u0` + INNER JOIN `UnidirectionalEntityThrees` AS `u1` ON `u0`.`ThreeId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND `u1`.`Id` = 1) +"""); + } + + public override async Task Skip_navigation_count_without_predicate_unidirectional(bool async) + { + await base.Skip_navigation_count_without_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneSelfPayload` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`RightId`) +"""); + } + + public override async Task Skip_navigation_count_with_predicate_unidirectional(bool async) + { + await base.Skip_navigation_count_with_predicate_unidirectional(async); + + AssertSql( + """ +SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`c` +FROM ( + SELECT `u`.`Id`, `u`.`Name`, ( + SELECT COUNT(*) + FROM `UnidirectionalJoinOneToBranch` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name` + FROM `UnidirectionalRoots` AS `u1` + INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id` + ) AS `s` ON `u0`.`UnidirectionalEntityBranchId` = `s`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`s`.`Name` LIKE 'L%')) AS `c` + FROM `UnidirectionalEntityOnes` AS `u` +) AS `u4` +ORDER BY `u4`.`c`, `u4`.`Id` +"""); + } + + public override async Task Skip_navigation_select_subquery_average_unidirectional(bool async) + { + await base.Skip_navigation_select_subquery_average_unidirectional(async); + + AssertSql( +""" +SELECT ( + SELECT AVG(CDBL(`u3`.`Key1`)) + FROM `UnidirectionalJoinCompositeKeyToLeaf` AS `u2` + INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u3` ON `u2`.`CompositeId1` = `u3`.`Key1` AND `u2`.`CompositeId2` = `u3`.`Key2` AND `u2`.`CompositeId3` = `u3`.`Key3` + WHERE `u`.`Id` = `u2`.`LeafId`) +FROM (`UnidirectionalRoots` AS `u` +INNER JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +"""); + } + + public override async Task Skip_navigation_order_by_reverse_first_or_default_unidirectional(bool async) + { + await base.Skip_navigation_order_by_reverse_first_or_default_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityThrees] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[ThreeId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[ThreeId], ROW_NUMBER() OVER(PARTITION BY [u0].[ThreeId] ORDER BY [u1].[Id] DESC) AS [row] + FROM [UnidirectionalJoinTwoToThree] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 1 +) AS [t0] ON [u].[Id] = [t0].[ThreeId] +"""); + } + + public override async Task Skip_navigation_of_type_unidirectional(bool async) + { + await base.Skip_navigation_of_type_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u2`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` + FROM (`UnidirectionalRoots` AS `u1` + LEFT JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) + LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` + ) AS `s` ON `u0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` = 'UnidirectionalEntityLeaf' +) AS `s0` ON `u`.`Key1` = `s0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s0`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Join_with_skip_navigation_unidirectional(bool async) + { + await base.Join_with_skip_navigation_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Id], [u].[CollectionInverseId], [u].[ExtraId], [u].[Name], [u].[ReferenceInverseId], [u0].[Id], [u0].[CollectionInverseId], [u0].[ExtraId], [u0].[Name], [u0].[ReferenceInverseId] +FROM [UnidirectionalEntityTwos] AS [u] +INNER JOIN [UnidirectionalEntityTwos] AS [u0] ON [u].[Id] = ( + SELECT TOP(1) [u2].[Id] + FROM [UnidirectionalEntityTwoUnidirectionalEntityTwo] AS [u1] + INNER JOIN [UnidirectionalEntityTwos] AS [u2] ON [u1].[SelfSkipSharedRightId] = [u2].[Id] + WHERE [u0].[Id] = [u1].[UnidirectionalEntityTwoId] + ORDER BY [u2].[Id]) +"""); + } + + public override async Task Left_join_with_skip_navigation_unidirectional(bool async) + { + await base.Left_join_with_skip_navigation_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [u0].[Key1], [u0].[Key2], [u0].[Key3], [u0].[Name] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN [UnidirectionalEntityCompositeKeys] AS [u0] ON ( + SELECT TOP(1) [u2].[Id] + FROM [UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo] AS [u1] + INNER JOIN [UnidirectionalEntityTwos] AS [u2] ON [u1].[TwoSkipSharedId] = [u2].[Id] + WHERE [u].[Key1] = [u1].[UnidirectionalEntityCompositeKeyKey1] AND [u].[Key2] = [u1].[UnidirectionalEntityCompositeKeyKey2] AND [u].[Key3] = [u1].[UnidirectionalEntityCompositeKeyKey3] + ORDER BY [u2].[Id]) = ( + SELECT TOP(1) [u4].[Id] + FROM [UnidirectionalJoinThreeToCompositeKeyFull] AS [u3] + INNER JOIN [UnidirectionalEntityThrees] AS [u4] ON [u3].[ThreeId] = [u4].[Id] + WHERE [u0].[Key1] = [u3].[CompositeId1] AND [u0].[Key2] = [u3].[CompositeId2] AND [u0].[Key3] = [u3].[CompositeId3] + ORDER BY [u4].[Id]) +ORDER BY [u].[Key1], [u0].[Key1], [u].[Key2], [u0].[Key2] +"""); + } + + public override async Task Select_many_over_skip_navigation_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalRoots` AS `u` +INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`UnidirectionalEntityRootId` + FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u0` + INNER JOIN `UnidirectionalEntityThrees` AS `u1` ON `u0`.`ThreeSkipSharedId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`UnidirectionalEntityRootId` +"""); + } + + public override async Task Select_many_over_skip_navigation_where_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_where_unidirectional(async); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` AS `OneId0` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId0` +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_take_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_order_by_take_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityOnes] AS [u] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId], [t].[UnidirectionalEntityOneId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[UnidirectionalEntityOneId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityOneId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityOneUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoSkipSharedId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [u].[Id] = [t0].[UnidirectionalEntityOneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_order_by_skip_take_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_order_by_skip_take_unidirectional(async); + + AssertSql( +""" +SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityOnes] AS [u] +INNER JOIN ( + SELECT [t].[Id], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId], [t].[OneId] + FROM ( + SELECT [u1].[Id], [u1].[CollectionInverseId], [u1].[Name], [u1].[ReferenceInverseId], [u0].[OneId], ROW_NUMBER() OVER(PARTITION BY [u0].[OneId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalJoinOneToThreePayloadFullShared] AS [u0] + INNER JOIN [UnidirectionalEntityThrees] AS [u1] ON [u0].[ThreeId] = [u1].[Id] + ) AS [t] + WHERE 2 < [t].[row] AND [t].[row] <= 5 +) AS [t0] ON [u].[Id] = [t0].[OneId] +"""); + } + + public override async Task Select_many_over_skip_navigation_cast_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_cast_unidirectional(async); + + AssertSql( + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` +FROM `UnidirectionalEntityOnes` AS `u` +INNER JOIN ( + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` + FROM `UnidirectionalJoinOneToBranch` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', NULL) AS `Discriminator` + FROM (`UnidirectionalRoots` AS `u1` + INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) + LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` + ) AS `s` ON `u0`.`UnidirectionalEntityBranchId` = `s`.`Id` +) AS `s0` ON `u`.`Id` = `s0`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Select_skip_navigation_unidirectional(bool async) + { + await base.Select_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u0`.`LeftId`, `u0`.`RightId` + FROM `UnidirectionalJoinOneSelfPayload` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RightId` +ORDER BY `u`.`Id`, `s`.`LeftId`, `s`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u2`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` + FROM (`UnidirectionalRoots` AS `u1` + LEFT JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) + LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` + ) AS `s` ON `u0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `u`.`Key1` = `s0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s0`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Include_skip_navigation_then_reference_unidirectional(bool async) + { + await base.Include_skip_navigation_then_reference_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`UnidirectionalJoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityTwos` AS `u` +LEFT JOIN ( + SELECT `u0`.`OneId`, `u0`.`TwoId`, `u0`.`UnidirectionalJoinOneToTwoExtraId`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId` + FROM (`UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId` +) AS `s` ON `u`.`Id` = `s`.`TwoId` +ORDER BY `u`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` +"""); + } + + public override async Task Include_skip_navigation_then_include_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`Name`, `s1`.`Number`, `s1`.`IsGreen`, `s1`.`UnidirectionalEntityBranchId`, `s1`.`UnidirectionalEntityOneId`, `s1`.`Id0`, `s1`.`Name0` +FROM `UnidirectionalEntityCompositeKeys` AS `u` +LEFT JOIN ( + SELECT `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId`, `s0`.`Id` AS `Id0`, `s0`.`Name` AS `Name0` + FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` + INNER JOIN ( + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen` + FROM (`UnidirectionalRoots` AS `u1` + INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) + INNER JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` + ) AS `s` ON `u0`.`LeafId` = `s`.`Id`) + LEFT JOIN ( + SELECT `u4`.`UnidirectionalEntityBranchId`, `u4`.`UnidirectionalEntityOneId`, `u5`.`Id`, `u5`.`Name` + FROM `UnidirectionalJoinOneToBranch` AS `u4` + INNER JOIN `UnidirectionalEntityOnes` AS `u5` ON `u4`.`UnidirectionalEntityOneId` = `u5`.`Id` + ) AS `s0` ON `s`.`Id` = `s0`.`UnidirectionalEntityBranchId` +) AS `s1` ON `u`.`Key1` = `s1`.`CompositeId1` AND `u`.`Key2` = `s1`.`CompositeId2` AND `u`.`Key3` = `s1`.`CompositeId3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`UnidirectionalEntityBranchId`, `s1`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` + FROM ((`UnidirectionalJoinOneToThreePayloadFull` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId`) + LEFT JOIN ( + SELECT `u3`.`LeftId`, `u3`.`RightId`, `u3`.`Payload`, `u4`.`Id`, `u4`.`Name` + FROM `UnidirectionalJoinOneSelfPayload` AS `u3` + INNER JOIN `UnidirectionalEntityOnes` AS `u4` ON `u3`.`RightId` = `u4`.`Id` + ) AS `s` ON `u1`.`Id` = `s`.`LeftId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` +"""); + } + + public override async Task Include_skip_navigation_and_reference_unidirectional(bool async) + { + await base.Include_skip_navigation_and_reference_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId`, `s`.`Id`, `s`.`Name`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` +FROM (`UnidirectionalEntityTwos` AS `u` +LEFT JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`Id` = `u0`.`ReferenceInverseId`) +LEFT JOIN ( + SELECT `u1`.`TwoSkipSharedId`, `u1`.`UnidirectionalEntityOneId`, `u2`.`Id`, `u2`.`Name` + FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u1` + INNER JOIN `UnidirectionalEntityOnes` AS `u2` ON `u1`.`UnidirectionalEntityOneId` = `u2`.`Id` +) AS `s` ON `u`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `u`.`Id`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId` +"""); + } + + public override async Task Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(bool async) + { + await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId0`, `s0`.`ThreeId0`, `s0`.`Payload0`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `s`.`OneId` AS `OneId0`, `s`.`ThreeId` AS `ThreeId0`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` + FROM (`UnidirectionalJoinOneToThreePayloadFullShared` AS `u0` + INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) + LEFT JOIN ( + SELECT `u2`.`OneId`, `u2`.`ThreeId`, `u2`.`Payload`, `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`Name`, `u3`.`ReferenceInverseId` + FROM `UnidirectionalJoinOneToThreePayloadFullShared` AS `u2` + INNER JOIN `UnidirectionalEntityThrees` AS `u3` ON `u2`.`ThreeId` = `u3`.`Id` + ) AS `s` ON `u1`.`Id` = `s`.`OneId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`OneId0`, `s0`.`ThreeId0` +"""); + } + + public override async Task Filtered_include_skip_navigation_where_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_where_unidirectional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` +FROM `EntityThrees` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` + FROM `JoinOneToThreePayloadFullShared` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityThrees` AS `u` +LEFT JOIN ( + SELECT `u0`.`ThreeId`, `u0`.`TwoId`, `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId` + FROM `UnidirectionalJoinTwoToThree` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`ThreeId` +ORDER BY `u`.`Id`, `s`.`Id`, `s`.`ThreeId` +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Id], [u].[CollectionInverseId], [u].[ExtraId], [u].[Name], [u].[ReferenceInverseId], [t0].[SelfSkipSharedRightId], [t0].[UnidirectionalEntityTwoId], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityTwos] AS [u] +LEFT JOIN ( + SELECT [t].[SelfSkipSharedRightId], [t].[UnidirectionalEntityTwoId], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [u0].[SelfSkipSharedRightId], [u0].[UnidirectionalEntityTwoId], [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityTwoId] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityTwoUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[SelfSkipSharedRightId] = [u1].[Id] + ) AS [t] + WHERE 2 < [t].[row] +) AS [t0] ON [u].[Id] = [t0].[UnidirectionalEntityTwoId] +ORDER BY [u].[Id], [t0].[UnidirectionalEntityTwoId], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_take_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_take_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [t0].[TwoSkipSharedId], [t0].[UnidirectionalEntityCompositeKeyKey1], [t0].[UnidirectionalEntityCompositeKeyKey2], [t0].[UnidirectionalEntityCompositeKeyKey3], [t0].[Id], [t0].[CollectionInverseId], [t0].[ExtraId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN ( + SELECT [t].[TwoSkipSharedId], [t].[UnidirectionalEntityCompositeKeyKey1], [t].[UnidirectionalEntityCompositeKeyKey2], [t].[UnidirectionalEntityCompositeKeyKey3], [t].[Id], [t].[CollectionInverseId], [t].[ExtraId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [u0].[TwoSkipSharedId], [u0].[UnidirectionalEntityCompositeKeyKey1], [u0].[UnidirectionalEntityCompositeKeyKey2], [u0].[UnidirectionalEntityCompositeKeyKey3], [u1].[Id], [u1].[CollectionInverseId], [u1].[ExtraId], [u1].[Name], [u1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [u0].[UnidirectionalEntityCompositeKeyKey1], [u0].[UnidirectionalEntityCompositeKeyKey2], [u0].[UnidirectionalEntityCompositeKeyKey3] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo] AS [u0] + INNER JOIN [UnidirectionalEntityTwos] AS [u1] ON [u0].[TwoSkipSharedId] = [u1].[Id] + ) AS [t] + WHERE [t].[row] <= 2 +) AS [t0] ON [u].[Key1] = [t0].[UnidirectionalEntityCompositeKeyKey1] AND [u].[Key2] = [t0].[UnidirectionalEntityCompositeKeyKey2] AND [u].[Key3] = [t0].[UnidirectionalEntityCompositeKeyKey3] +ORDER BY [u].[Key1], [u].[Key2], [u].[Key3], [t0].[UnidirectionalEntityCompositeKeyKey1], [t0].[UnidirectionalEntityCompositeKeyKey2], [t0].[UnidirectionalEntityCompositeKeyKey3], [t0].[Id] +"""); + } + + public override async Task Filtered_include_skip_navigation_order_by_skip_take_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_order_by_skip_take_unidirectional(async); + + AssertSql( +""" +SELECT [u].[Key1], [u].[Key2], [u].[Key3], [u].[Name], [t0].[Id], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[ThreeId], [t0].[Id0], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId] +FROM [UnidirectionalEntityCompositeKeys] AS [u] +LEFT JOIN ( + SELECT [t].[Id], [t].[CompositeId1], [t].[CompositeId2], [t].[CompositeId3], [t].[ThreeId], [t].[Id0], [t].[CollectionInverseId], [t].[Name], [t].[ReferenceInverseId] + FROM ( + SELECT [u0].[Id], [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3], [u0].[ThreeId], [u1].[Id] AS [Id0], [u1].[CollectionInverseId], [u1].[Name], [u1].[ReferenceInverseId], ROW_NUMBER() OVER(PARTITION BY [u0].[CompositeId1], [u0].[CompositeId2], [u0].[CompositeId3] ORDER BY [u1].[Id]) AS [row] + FROM [UnidirectionalJoinThreeToCompositeKeyFull] AS [u0] + INNER JOIN [UnidirectionalEntityThrees] AS [u1] ON [u0].[ThreeId] = [u1].[Id] + ) AS [t] + WHERE 1 < [t].[row] AND [t].[row] <= 3 +) AS [t0] ON [u].[Key1] = [t0].[CompositeId1] AND [u].[Key2] = [t0].[CompositeId2] AND [u].[Key3] = [t0].[CompositeId3] +ORDER BY [u].[Key1], [u].[Key2], [u].[Key3], [t0].[CompositeId1], [t0].[CompositeId2], [t0].[CompositeId3], [t0].[Id0] +"""); + } + + public override async Task Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(bool async) + { + await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` +FROM ((`UnidirectionalRoots` AS `u` +INNER JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id`) +LEFT JOIN ( + SELECT `u2`.`LeafId`, `u2`.`CompositeId1`, `u2`.`CompositeId2`, `u2`.`CompositeId3`, `u3`.`Key1`, `u3`.`Key2`, `u3`.`Key3`, `u3`.`Name`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` + FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u2` + INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u3` ON `u2`.`CompositeId1` = `u3`.`Key1` AND `u2`.`CompositeId2` = `u3`.`Key2` AND `u2`.`CompositeId3` = `u3`.`Key3`) + LEFT JOIN ( + SELECT `u4`.`TwoSkipSharedId`, `u4`.`UnidirectionalEntityCompositeKeyKey1`, `u4`.`UnidirectionalEntityCompositeKeyKey2`, `u4`.`UnidirectionalEntityCompositeKeyKey3`, `u5`.`Id`, `u5`.`CollectionInverseId`, `u5`.`ExtraId`, `u5`.`Name`, `u5`.`ReferenceInverseId` + FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo` AS `u4` + INNER JOIN `UnidirectionalEntityTwos` AS `u5` ON `u4`.`TwoSkipSharedId` = `u5`.`Id` + ) AS `s` ON `u3`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u3`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u3`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` + WHERE `u3`.`Key1` < 5 +) AS `s0` ON `u`.`Id` = `s0`.`LeafId` +ORDER BY `u`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` +"""); + } + + public override async Task Filter_include_on_skip_navigation_combined_unidirectional(bool async) + { + await base.Filter_include_on_skip_navigation_combined_unidirectional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` +FROM `EntityTwos` AS `e` +LEFT JOIN ( + SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` + FROM ((`JoinOneToTwo` AS `j` + INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) + LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) + LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` + WHERE `e0`.`Id` < 10 +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Throws_when_different_filtered_include_unidirectional(bool async) + { + await base.Throws_when_different_filtered_include_unidirectional(async); + + AssertSql(); + } + + public override async Task Includes_accessed_via_different_path_are_merged_unidirectional(bool async) + { + await base.Includes_accessed_via_different_path_are_merged_unidirectional(async); + + AssertSql(); + } + + public override async Task Select_many_over_skip_navigation_where_non_equality_unidirectional(bool async) + { + await base.Select_many_over_skip_navigation_where_non_equality_unidirectional(async); + AssertSql( + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` +FROM `UnidirectionalEntityOnes` AS `u` +LEFT JOIN ( + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` AS `OneId0`, `u1`.`Id` AS `Id0` + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId0` AND `u`.`Id` <> `s`.`Id0` +"""); + } + + public override async Task Contains_on_skip_collection_navigation_unidirectional(bool async) + { + await base.Contains_on_skip_collection_navigation_unidirectional(async); + + AssertSql( + """ +@entity_equality_two_Id='1' (Nullable = true) + +SELECT `u`.`Id`, `u`.`Name` +FROM `UnidirectionalEntityOnes` AS `u` +WHERE EXISTS ( + SELECT 1 + FROM `UnidirectionalJoinOneToTwo` AS `u0` + INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` + WHERE `u`.`Id` = `u0`.`OneId` AND `u1`.`Id` = @entity_equality_two_Id) +"""); + } + + public override async Task GetType_in_hierarchy_in_base_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_base_type_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, IIF(`u1`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u0`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` +FROM (`UnidirectionalRoots` AS `u` +LEFT JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +LEFT JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +WHERE `u1`.`Id` IS NULL AND `u0`.`Id` IS NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_intermediate_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_intermediate_type_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, IIF(`u1`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u0`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` +FROM (`UnidirectionalRoots` AS `u` +LEFT JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +LEFT JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +WHERE `u1`.`Id` IS NULL AND `u0`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_leaf_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_leaf_type_unidirectional(async); + + AssertSql( +""" +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, IIF(`u1`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u0`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` +FROM (`UnidirectionalRoots` AS `u` +LEFT JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +LEFT JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +WHERE `u1`.`Id` IS NOT NULL +"""); + } + + public override async Task GetType_in_hierarchy_in_querying_base_type_unidirectional(bool async) + { + await base.GetType_in_hierarchy_in_querying_base_type_unidirectional(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, IIF(`u1`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', NULL) AS `Discriminator` +FROM (`UnidirectionalRoots` AS `u` +INNER JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) +LEFT JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id` +WHERE FALSE +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/TPTRelationshipsQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/TPTRelationshipsQueryLibRedTest.cs new file mode 100644 index 00000000..d7a2e49f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/TPTRelationshipsQueryLibRedTest.cs @@ -0,0 +1,1972 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class TPTRelationshipsQueryLibRedTest + : TPTRelationshipsQueryTestBase +{ + public TPTRelationshipsQueryLibRedTest( + TPTRelationshipsQueryLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override void Changes_in_derived_related_entities_are_detected() + { + base.Changes_in_derived_related_entities_are_detected(); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name`, `s0`.`Id`, `s0`.`BaseParentId`, `s0`.`Name`, `s0`.`DerivedProperty`, `s0`.`Discriminator` +FROM ((( + SELECT TOP 2 `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` + WHERE `b`.`Name` = 'Derived1(4)' +) AS `s` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b1` + LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`BaseParentId` +ORDER BY `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance(bool async) + { + await base.Include_collection_without_inheritance(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_reverse(bool async) + { + await base.Include_collection_without_inheritance_reverse(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM ((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `c`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter(bool async) + { + await base.Include_collection_without_inheritance_with_filter(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter_reverse(bool async) + { + await base.Include_collection_without_inheritance_with_filter_reverse(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM ((`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL +ORDER BY `c`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance(bool async) + { + await base.Include_collection_with_inheritance(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b1` + LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived1(bool async) + { + await base.Include_collection_with_inheritance_on_derived1(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b1` + LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived2(bool async) + { + await base.Include_collection_with_inheritance_on_derived2(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b1`.`Id`, `b1`.`Name`, `b1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator` + FROM `BaseCollectionsOnDerived` AS `b1` + LEFT JOIN `DerivedCollectionsOnDerived` AS `d1` ON `b1`.`Id` = `d1`.`Id` +) AS `s` ON `b`.`Id` = `s`.`ParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived3(bool async) + { + await base.Include_collection_with_inheritance_on_derived3(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b1`.`Id`, `b1`.`Name`, `b1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b1` + INNER JOIN `DerivedCollectionsOnDerived` AS `d1` ON `b1`.`Id` = `d1`.`Id` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived_reverse(bool async) + { + await base.Include_collection_with_inheritance_on_derived_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (((`BaseCollectionsOnDerived` AS `b` +LEFT JOIN `DerivedCollectionsOnDerived` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance_reverse(bool async) + { + await base.Include_collection_with_inheritance_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (((`BaseCollectionsOnBase` AS `b` +LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter(bool async) + { + await base.Include_collection_with_inheritance_with_filter(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b1` + LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter_reverse(bool async) + { + await base.Include_collection_with_inheritance_with_filter_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (((`BaseCollectionsOnBase` AS `b` +LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance(bool async) + { + await base.Include_reference_without_inheritance(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `ReferencesOnBase` AS `r` ON `b`.`Id` = `r`.`ParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_on_derived1(bool async) + { + await base.Include_reference_without_inheritance_on_derived1(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `ReferencesOnBase` AS `r` ON `b`.`Id` = `r`.`ParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_on_derived2(bool async) + { + await base.Include_reference_without_inheritance_on_derived2(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `ReferencesOnDerived` AS `r` ON `b`.`Id` = `r`.`ParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_on_derived_reverse(bool async) + { + await base.Include_reference_without_inheritance_on_derived_reverse(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM ((`ReferencesOnDerived` AS `r` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `r`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_reverse(bool async) + { + await base.Include_reference_without_inheritance_reverse(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM ((`ReferencesOnBase` AS `r` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `r`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_with_filter(bool async) + { + await base.Include_reference_without_inheritance_with_filter(async); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `ReferencesOnBase` AS `r` ON `b`.`Id` = `r`.`ParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `r`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_without_inheritance_with_filter_reverse(bool async) + { + await base.Include_reference_without_inheritance_with_filter_reverse(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM ((`ReferencesOnBase` AS `r` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `r`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +WHERE `r`.`Name` <> 'Bar' OR `r`.`Name` IS NULL +ORDER BY `r`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance(bool async) + { + await base.Include_reference_with_inheritance(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived1(bool async) + { + await base.Include_reference_with_inheritance_on_derived1(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived2(bool async) + { + await base.Include_reference_with_inheritance_on_derived2(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedInheritanceRelationshipEntityId`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator` + FROM `BaseReferencesOnDerived` AS `b0` + LEFT JOIN `DerivedReferencesOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived4(bool async) + { + await base.Include_reference_with_inheritance_on_derived4(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedInheritanceRelationshipEntityId` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseReferencesOnDerived` AS `b0` + INNER JOIN `DerivedReferencesOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_reverse(bool async) + { + await base.Include_reference_with_inheritance_on_derived_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (((`BaseReferencesOnDerived` AS `b` +LEFT JOIN `DerivedReferencesOnDerived` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter1(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter1(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter2(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter2(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedInheritanceRelationshipEntityId`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator` + FROM `BaseReferencesOnDerived` AS `b0` + LEFT JOIN `DerivedReferencesOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter4(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter4(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedInheritanceRelationshipEntityId` +FROM (((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseReferencesOnDerived` AS `b0` + INNER JOIN `DerivedReferencesOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_on_derived_with_filter_reverse(bool async) + { + await base.Include_reference_with_inheritance_on_derived_with_filter_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (((`BaseReferencesOnDerived` AS `b` +LEFT JOIN `DerivedReferencesOnDerived` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_reverse(bool async) + { + await base.Include_reference_with_inheritance_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (((`BaseReferencesOnBase` AS `b` +LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_with_filter(bool async) + { + await base.Include_reference_with_inheritance_with_filter(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_reference_with_inheritance_with_filter_reverse(bool async) + { + await base.Include_reference_with_inheritance_with_filter_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (((`BaseReferencesOnBase` AS `b` +LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_self_reference_with_inheritance(bool async) + { + await base.Include_self_reference_with_inheritance(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Name`, `s`.`BaseId`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (((((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Include_self_reference_with_inheritance_reverse(bool async) + { + await base.Include_self_reference_with_inheritance_reverse(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (((((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `d`.`BaseId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_collection_reference_on_non_entity_base(bool async) + { + await base.Nested_include_collection_reference_on_non_entity_base(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0` +FROM `ReferencedEntities` AS `r` +LEFT JOIN ( + SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` + FROM `PrincipalEntities` AS `p` + LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` +ORDER BY `r`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection(bool async) + { + await base.Nested_include_with_inheritance_collection_collection(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s0`.`Id`, `s0`.`BaseParentId`, `s0`.`Name`, `s0`.`DerivedProperty`, `s0`.`Discriminator`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator0` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator` AS `Discriminator0` + FROM (`BaseCollectionsOnBase` AS `b1` + LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id`) + LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` + FROM `NestedCollections` AS `n` + LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` + ) AS `s` ON `b1`.`Id` = `s`.`ParentCollectionId` +) AS `s0` ON `b`.`Id` = `s0`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `s0`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection_reverse(bool async) + { + await base.Nested_include_with_inheritance_collection_collection_reverse(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` +FROM ((((`NestedCollections` AS `n` +LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference(bool async) + { + await base.Nested_include_with_inheritance_collection_reference(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s0`.`Id`, `s0`.`BaseParentId`, `s0`.`Name`, `s0`.`DerivedProperty`, `s0`.`Discriminator`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator0` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator` AS `Discriminator0` + FROM (`BaseCollectionsOnBase` AS `b1` + LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id`) + LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator` + FROM `NestedReferences` AS `n` + LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` + ) AS `s` ON `b1`.`Id` = `s`.`ParentCollectionId` +) AS `s0` ON `b`.`Id` = `s0`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `s0`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference_reverse(bool async) + { + await base.Nested_include_with_inheritance_collection_reference_reverse(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` +FROM ((((`NestedReferences` AS `n` +LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection(bool async) + { + await base.Nested_include_with_inheritance_reference_collection(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator` +FROM ((((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` + FROM `NestedCollections` AS `n` + LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_on_base(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_on_base(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator` +FROM ((((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` + FROM `NestedCollections` AS `n` + LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_reverse(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_reverse(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` +FROM ((((`NestedCollections` AS `n` +LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_reference(bool async) + { + await base.Nested_include_with_inheritance_reference_reference(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator` +FROM ((((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator` + FROM `NestedReferences` AS `n` + LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_reference_on_base(bool async) + { + await base.Nested_include_with_inheritance_reference_reference_on_base(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator` +FROM ((((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator` + FROM `NestedReferences` AS `n` + LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_reference_reverse(bool async) + { + await base.Nested_include_with_inheritance_reference_reference_reverse(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` +FROM ((((`NestedReferences` AS `n` +LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +"""); + } + + public override async Task Collection_projection_on_base_type(bool async) + { + await base.Collection_projection_on_base_type(async); + + AssertSql( + """ +SELECT `b`.`Id`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator` +FROM `BaseEntities` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b0`.`Id` = `d`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_on_derived_type_with_queryable_Cast(bool async) + { + await base.Include_on_derived_type_with_queryable_Cast(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId` +FROM (((`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN ( + SELECT `b1`.`Id`, `b1`.`Name`, `b1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b1` + INNER JOIN `DerivedCollectionsOnDerived` AS `d1` ON `b1`.`Id` = `d1`.`Id` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_split(bool async) + { + await base.Include_collection_with_inheritance_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN ( + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_reverse_split(bool async) + { + await base.Include_collection_with_inheritance_reverse_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id` +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter_split(bool async) + { + await base.Include_collection_with_inheritance_with_filter_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN ( + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_with_filter_reverse_split(bool async) + { + await base.Include_collection_with_inheritance_with_filter_reverse_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`s`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` +FROM (`BaseCollectionsOnBase` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`s`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `b`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_split(bool async) + { + await base.Include_collection_without_inheritance_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_reverse_split(bool async) + { + await base.Include_collection_without_inheritance_reverse_split(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM `CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id` +ORDER BY `c`.`Id`, `s`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `c`.`Id`, `s`.`Id` +FROM (`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `s`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `c`.`Id`, `s`.`Id` +FROM (`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter_split(bool async) + { + await base.Include_collection_without_inheritance_with_filter_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` +WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_without_inheritance_with_filter_reverse_split(bool async) + { + await base.Include_collection_without_inheritance_with_filter_reverse_split(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM `CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b` + LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id` +WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL +ORDER BY `c`.`Id`, `s`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `c`.`Id`, `s`.`Id` +FROM (`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`s`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `s`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `c`.`Id`, `s`.`Id` +FROM (`CollectionsOnBase` AS `c` +LEFT JOIN ( + SELECT `b`.`Id` + FROM `BaseEntities` AS `b` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`s`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `s`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived1_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived1_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +INNER JOIN ( + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived2_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived2_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId`, `s`.`Discriminator`, `b`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +INNER JOIN ( + SELECT `b2`.`Id`, `b2`.`Name`, `b2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator` + FROM `BaseCollectionsOnDerived` AS `b2` + LEFT JOIN `DerivedCollectionsOnDerived` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`ParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived3_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived3_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +INNER JOIN ( + SELECT `b2`.`Id`, `b2`.`Name`, `b2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b2` + INNER JOIN `DerivedCollectionsOnDerived` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_collection_with_inheritance_on_derived_reverse_split(bool async) + { + await base.Include_collection_with_inheritance_on_derived_reverse_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` +FROM (`BaseCollectionsOnDerived` AS `b` +LEFT JOIN `DerivedCollectionsOnDerived` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`ParentId` = `s`.`Id` +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` +FROM (`BaseCollectionsOnDerived` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` +FROM (`BaseCollectionsOnDerived` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` + INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`ParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_split(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` +FROM (`BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` +FROM (`BaseEntities` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b0` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` +FROM (`BaseEntities` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b0` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `b`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator`, `b`.`Id`, `s`.`Id` +FROM (`BaseEntities` AS `b` +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b0` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` + FROM `NestedCollections` AS `n` + LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ParentReferenceId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_on_base_split(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_on_base_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` +FROM (`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b0` + LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` +FROM ((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b0` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` +FROM ((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b0` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `b`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator`, `b`.`Id`, `s`.`Id` +FROM ((`BaseEntities` AS `b` +INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b0` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` + FROM `NestedCollections` AS `n` + LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ParentReferenceId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_reference_collection_reverse_split(bool async) + { + await base.Nested_include_with_inheritance_reference_collection_reverse_split(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` +FROM ((`NestedCollections` AS `n` +LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` + FROM `BaseReferencesOnBase` AS `b` + LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` +FROM ((`NestedCollections` AS `n` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b` +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s0`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` +FROM ((`NestedCollections` AS `n` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseReferencesOnBase` AS `b` +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference_split(bool async) + { + await base.Nested_include_with_inheritance_collection_reference_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`BaseParentId`, `s0`.`Name`, `s0`.`DerivedProperty`, `s0`.`Discriminator`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator0` AS `Discriminator`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN ( + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator` AS `Discriminator0` + FROM (`BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id`) + LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator` + FROM `NestedReferences` AS `n` + LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` + ) AS `s` ON `b2`.`Id` = `s`.`ParentCollectionId` +) AS `s0` ON `b`.`Id` = `s0`.`BaseParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_reference_reverse_split(bool async) + { + await base.Nested_include_with_inheritance_collection_reference_reverse_split(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` +FROM ((`NestedReferences` AS `n` +LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` +FROM ((`NestedReferences` AS `n` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s0`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` +FROM ((`NestedReferences` AS `n` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection_split(bool async) + { + await base.Nested_include_with_inheritance_collection_collection_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN ( + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `s`.`Id` +""", + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator`, `b`.`Id`, `s`.`Id` +FROM (`BaseEntities` AS `b` +INNER JOIN ( + SELECT `b2`.`Id`, `b2`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b2` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +LEFT JOIN ( + SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` + FROM `NestedCollections` AS `n` + LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentCollectionId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ParentCollectionId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` +"""); + } + + public override async Task Nested_include_with_inheritance_collection_collection_reverse_split(bool async) + { + await base.Nested_include_with_inheritance_collection_collection_reverse_split(async); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` +FROM ((`NestedCollections` AS `n` +LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b` + LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id` +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` + FROM `BaseEntities` AS `b0` + LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` +""", + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` +FROM ((`NestedCollections` AS `n` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s0`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` +""", + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` +FROM ((`NestedCollections` AS `n` +LEFT JOIN ( + SELECT `b`.`Id`, `b`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b` +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) +LEFT JOIN ( + SELECT `b0`.`Id` + FROM `BaseEntities` AS `b0` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` +"""); + } + + public override async Task Nested_include_collection_reference_on_non_entity_base_split(bool async) + { + await base.Nested_include_collection_reference_on_non_entity_base_split(async); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `ReferencedEntities` AS `r` +ORDER BY `r`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0`, `r`.`Id` +FROM `ReferencedEntities` AS `r` +INNER JOIN ( + SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` + FROM `PrincipalEntities` AS `p` + LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` +ORDER BY `r`.`Id` +"""); + } + + public override async Task Collection_projection_on_base_type_split(bool async) + { + await base.Collection_projection_on_base_type_split(async); + + AssertSql( + """ +SELECT `b`.`Id` +FROM `BaseEntities` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN ( + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedProperty`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` + LEFT JOIN `DerivedCollectionsOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_on_derived_type_with_queryable_Cast_split(bool async) + { + await base.Include_on_derived_type_with_queryable_Cast_split(async); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +FROM `BaseEntities` AS `b` +LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id` +""", + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` +FROM `BaseEntities` AS `b` +INNER JOIN ( + SELECT `b2`.`Id`, `b2`.`Name`, `b2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b2` + INNER JOIN `DerivedCollectionsOnDerived` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Id` >= 4 +ORDER BY `b`.`Id` +"""); + } + + public override void Entity_can_make_separate_relationships_with_base_type_and_derived_type_both() + { + base.Entity_can_make_separate_relationships_with_base_type_and_derived_type_both(); + + AssertSql(); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class TPTRelationshipsQueryLibRedFixture : TPTRelationshipsQueryRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/ToSqlQueryLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/ToSqlQueryLibRedTest.cs new file mode 100644 index 00000000..d329ea49 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/ToSqlQueryLibRedTest.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query; + +public class ToSqlQueryLibRedTest(NonSharedFixture fixture) : ToSqlQueryTestBase(fixture) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public override async Task Entity_type_with_navigation_mapped_to_SqlQuery(bool async) + { + await base.Entity_type_with_navigation_mapped_to_SqlQuery(async); + + AssertSql( +""" +SELECT [a].[Id], [a].[Name], [a].[PostStatAuthorId], [m].[Count] AS [PostCount] +FROM [Authors] AS [a] +LEFT JOIN ( + SELECT * FROM PostStats +) AS [m] ON [a].[PostStatAuthorId] = [m].[AuthorId] +"""); + } + + private void AssertSql(params string[] expected) + => TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/BasicTypesQueryLibRedFixture.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/BasicTypesQueryLibRedFixture.cs new file mode 100644 index 00000000..d25e655f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/BasicTypesQueryLibRedFixture.cs @@ -0,0 +1,148 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query.Translations; +using Microsoft.EntityFrameworkCore.TestModels.BasicTypesModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations; + +public class BasicTypesQueryLibRedFixture : BasicTypesQueryFixtureBase, ITestSqlLoggerFactory +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().Property(b => b.Decimal).HasColumnType("decimal(18,2)"); + modelBuilder.Entity().Property(b => b.Decimal).HasColumnType("decimal(18,2)"); + } + + protected override Task SeedAsync(BasicTypesContext context) + { + var data = new BasicTypesData(); + //for every data.BasicTypesEntities and data.NullableBasicTypesEntities take the DateTime and DateTimeOffset and set the milliseconds to 0 + foreach (var entity in data.BasicTypesEntities) + { + entity.DateTime = new DateTime(entity.DateTime.Year, entity.DateTime.Month, entity.DateTime.Day, entity.DateTime.Hour, entity.DateTime.Minute, entity.DateTime.Second); + entity.DateTimeOffset = new DateTimeOffset(entity.DateTimeOffset.Year, entity.DateTimeOffset.Month, entity.DateTimeOffset.Day, entity.DateTimeOffset.Hour, entity.DateTimeOffset.Minute, entity.DateTimeOffset.Second, entity.DateTimeOffset.Offset); + entity.TimeOnly = new TimeOnly(entity.TimeOnly.Hour, entity.TimeOnly.Minute, entity.TimeOnly.Second); + entity.TimeSpan = new TimeSpan(entity.TimeSpan.Days, entity.TimeSpan.Hours, entity.TimeSpan.Minutes, entity.TimeSpan.Seconds); + if (entity.DateOnly.Year < 100) + { + entity.DateOnly = entity.DateOnly.AddYears(100); // Adjust for LibRed's handling of DateOnly + } + if (entity.DateTime.Year < 100) + { + entity.DateTime = entity.DateTime.AddYears(100); // Adjust for LibRed's handling of DateTime + } + if (entity.DateTimeOffset.Year < 100) + { + entity.DateTimeOffset = entity.DateTimeOffset.AddYears(100); // Adjust for LibRed's handling of DateTimeOffset + } + } + + foreach (var entity in data.NullableBasicTypesEntities) + { + if (entity.DateTime.HasValue) + { + entity.DateTime = new DateTime(entity.DateTime.Value.Year, entity.DateTime.Value.Month, entity.DateTime.Value.Day, entity.DateTime.Value.Hour, entity.DateTime.Value.Minute, entity.DateTime.Value.Second); + } + if (entity.DateTimeOffset.HasValue) + { + entity.DateTimeOffset = new DateTimeOffset(entity.DateTimeOffset.Value.Year, entity.DateTimeOffset.Value.Month, entity.DateTimeOffset.Value.Day, entity.DateTimeOffset.Value.Hour, entity.DateTimeOffset.Value.Minute, entity.DateTimeOffset.Value.Second, entity.DateTimeOffset.Value.Offset); + } + if (entity.TimeOnly.HasValue) + { + entity.TimeOnly = new TimeOnly(entity.TimeOnly.Value.Hour, entity.TimeOnly.Value.Minute, entity.TimeOnly.Value.Second); + } + if (entity.TimeSpan.HasValue) + { + entity.TimeSpan = new TimeSpan(entity.TimeSpan.Value.Days, entity.TimeSpan.Value.Hours, entity.TimeSpan.Value.Minutes, entity.TimeSpan.Value.Seconds); + } + if (entity.DateOnly.HasValue && entity.DateOnly.Value.Year < 100) + { + entity.DateOnly = entity.DateOnly.Value.AddYears(100); // Adjust for LibRed's handling of DateOnly + } + if (entity.DateTime.HasValue && entity.DateTime.Value.Year < 100) + { + entity.DateTime = entity.DateTime.Value.AddYears(100); // Adjust for LibRed's handling of DateTime + } + if (entity.DateTimeOffset.HasValue && entity.DateTimeOffset.Value.Year < 100) + { + entity.DateTimeOffset = entity.DateTimeOffset.Value.AddYears(100); // Adjust for LibRed's handling of DateTimeOffset + } + } + + context.AddRange(data.BasicTypesEntities); + context.AddRange(data.NullableBasicTypesEntities); + return context.SaveChangesAsync(); + } + + public override ISetSource GetExpectedData() + { + BasicTypesData result = (BasicTypesData)base.GetExpectedData(); + result.BasicTypesEntities.ForEach(b => + { + b.DateTime = new DateTime(b.DateTime.Year, b.DateTime.Month, b.DateTime.Day, b.DateTime.Hour, b.DateTime.Minute, b.DateTime.Second); + b.DateTimeOffset = new DateTimeOffset(b.DateTimeOffset.Year, b.DateTimeOffset.Month, b.DateTimeOffset.Day, b.DateTimeOffset.Hour, b.DateTimeOffset.Minute, b.DateTimeOffset.Second, b.DateTimeOffset.Offset).ToUniversalTime(); + b.TimeOnly = new TimeOnly(b.TimeOnly.Hour, b.TimeOnly.Minute, b.TimeOnly.Second); + b.TimeSpan = new TimeSpan(b.TimeSpan.Days, b.TimeSpan.Hours, b.TimeSpan.Minutes, b.TimeSpan.Seconds); + if (b.DateOnly.Year < 100) + { + b.DateOnly = b.DateOnly.AddYears(100); // Adjust for LibRed's handling of DateOnly + } + if (b.DateTime.Year < 100) + { + b.DateTime = b.DateTime.AddYears(100); // Adjust for LibRed's handling of DateTime + } + if (b.DateTimeOffset.Year < 100) + { + b.DateTimeOffset = b.DateTimeOffset.AddYears(100); // Adjust for LibRed's handling of DateTimeOffset + } + }); + + result.NullableBasicTypesEntities.ForEach(b => + { + if (b.DateTime.HasValue) + { + b.DateTime = new DateTime(b.DateTime.Value.Year, b.DateTime.Value.Month, b.DateTime.Value.Day, b.DateTime.Value.Hour, b.DateTime.Value.Minute, b.DateTime.Value.Second); + } + if (b.DateTimeOffset.HasValue) + { + b.DateTimeOffset = new DateTimeOffset(b.DateTimeOffset.Value.Year, b.DateTimeOffset.Value.Month, b.DateTimeOffset.Value.Day, b.DateTimeOffset.Value.Hour, b.DateTimeOffset.Value.Minute, b.DateTimeOffset.Value.Second, b.DateTimeOffset.Value.Offset).ToUniversalTime(); + } + if (b.TimeOnly.HasValue) + { + b.TimeOnly = new TimeOnly(b.TimeOnly.Value.Hour, b.TimeOnly.Value.Minute, b.TimeOnly.Value.Second); + } + if (b.TimeSpan.HasValue) + { + b.TimeSpan = new TimeSpan(b.TimeSpan.Value.Days, b.TimeSpan.Value.Hours, b.TimeSpan.Value.Minutes, b.TimeSpan.Value.Seconds); + } + if (b.DateOnly.HasValue && b.DateOnly.Value.Year < 100) + { + b.DateOnly = b.DateOnly.Value.AddYears(100); // Adjust for LibRed's handling of DateOnly + } + if (b.DateTime.HasValue && b.DateTime.Value.Year < 100) + { + b.DateTime = b.DateTime.Value.AddYears(100); // Adjust for LibRed's handling of DateTime + } + if (b.DateTimeOffset.HasValue && b.DateTimeOffset.Value.Year < 100) + { + b.DateTimeOffset = b.DateTimeOffset.Value.AddYears(100); // Adjust for LibRed's handling of DateTimeOffset + } + }); + + return result; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/ByteArrayTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/ByteArrayTranslationsLibRedTest.cs new file mode 100644 index 00000000..a6cf10f3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/ByteArrayTranslationsLibRedTest.cs @@ -0,0 +1,115 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations; + +public class ByteArrayTranslationsLibRedTest : ByteArrayTranslationsTestBase +{ + public ByteArrayTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Length() + { + await base.Length(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CAST(DATALENGTH([b].[ByteArray]) AS int) = 4 +"""); + } + + public override async Task Index() + { + await base.Index(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CAST(DATALENGTH([b].[ByteArray]) AS int) >= 3 AND CAST(SUBSTRING([b].[ByteArray], 2 + 1, 1) AS tinyint) = CAST(190 AS tinyint) +"""); + } + + public override async Task First() + { + await base.First(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CAST(DATALENGTH([b].[ByteArray]) AS int) >= 1 AND CAST(SUBSTRING([b].[ByteArray], 1, 1) AS tinyint) = CAST(222 AS tinyint) +"""); + } + + public override async Task Contains_with_constant() + { + await base.Contains_with_constant(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE INSTR(1, STRCONV(`b`.`ByteArray`, 64), 0x01, 0) > 0 +"""); + } + + public override async Task Contains_with_parameter() + { + await base.Contains_with_parameter(); + + AssertSql( + """ +@someByte='1' (Size = 1) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE INSTR(1, STRCONV(`b`.`ByteArray`, 64), CHR(@someByte), 0) > 0 +"""); + } + + public override async Task Contains_with_column() + { + await base.Contains_with_column(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE INSTR(1, STRCONV(`b`.`ByteArray`, 64), CHR(`b`.`Byte`), 0) > 0 +"""); + } + + public override async Task SequenceEqual() + { + await base.SequenceEqual(); + + AssertSql( + """ +@byteArrayParam='0xDEADBEEF' (Size = 510) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`ByteArray` = @byteArrayParam +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/EnumTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/EnumTranslationsLibRedTest.cs new file mode 100644 index 00000000..8188f733 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/EnumTranslationsLibRedTest.cs @@ -0,0 +1,315 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations; + +public class EnumTranslationsLibRedTest : EnumTranslationsTestBase +{ + public EnumTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + #region Equality + + public override async Task Equality_to_constant() + { + await base.Equality_to_constant(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Enum` = 0 +"""); + } + + public override async Task Equality_to_parameter() + { + await base.Equality_to_parameter(); + + AssertSql( + """ +@basicEnum='0' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Enum` = @basicEnum +"""); + } + + public override async Task Equality_nullable_enum_to_constant() + { + await base.Equality_nullable_enum_to_constant(); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE `n`.`Enum` = 0 +"""); + } + + public override async Task Equality_nullable_enum_to_parameter() + { + await base.Equality_nullable_enum_to_parameter(); + + AssertSql( + """ +@basicEnum='0' + +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE `n`.`Enum` = @basicEnum +"""); + } + + public override async Task Equality_nullable_enum_to_null_constant() + { + await base.Equality_nullable_enum_to_null_constant(); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE `n`.`Enum` IS NULL +"""); + } + + public override async Task Equality_nullable_enum_to_null_parameter() + { + await base.Equality_nullable_enum_to_null_parameter(); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE `n`.`Enum` IS NULL +"""); + } + + public override async Task Equality_nullable_enum_to_nullable_parameter() + { + await base.Equality_nullable_enum_to_nullable_parameter(); + + AssertSql( + """ +@basicEnum='0' (Nullable = true) + +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE `n`.`Enum` = @basicEnum +"""); + } + + #endregion Equality + + public override async Task Bitwise_and_enum_constant() + { + await base.Bitwise_and_enum_constant(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND 1) > 0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND 1) = 1 +"""); + } + + public override async Task Bitwise_and_integral_constant() + { + await base.Bitwise_and_integral_constant(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND 8) = 8 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (CLNG(`b`.`FlagsEnum`) BAND 8) = 8 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (CLNG(CINT(`b`.`FlagsEnum`)) BAND CINT(8)) = CINT(8) +"""); + } + + public override async Task Bitwise_and_nullable_enum_with_constant() + { + await base.Bitwise_and_nullable_enum_with_constant(); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE (`n`.`FlagsEnum` BAND 8) > 0 +"""); + } + + public override async Task Where_bitwise_and_nullable_enum_with_null_constant() + { + await base.Where_bitwise_and_nullable_enum_with_null_constant(); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE (`n`.`FlagsEnum` BAND NULL) > 0 +"""); + } + + public override async Task Where_bitwise_and_nullable_enum_with_non_nullable_parameter() + { + await base.Where_bitwise_and_nullable_enum_with_non_nullable_parameter(); + + AssertSql( + """ +@flagsEnum='8' + +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE (`n`.`FlagsEnum` BAND @flagsEnum) > 0 +"""); + } + + public override async Task Where_bitwise_and_nullable_enum_with_nullable_parameter() + { + await base.Where_bitwise_and_nullable_enum_with_nullable_parameter(); + + AssertSql( + """ +@flagsEnum='8' (Nullable = true) + +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE (`n`.`FlagsEnum` BAND @flagsEnum) > 0 +""", + // + """ +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE (`n`.`FlagsEnum` BAND NULL) > 0 +"""); + } + + public override async Task Bitwise_or() + { + await base.Bitwise_or(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BOR 8) > 0 +"""); + } + + public override async Task Bitwise_projects_values_in_select() + { + await base.Bitwise_projects_values_in_select(); + + AssertSql( + """ +SELECT TOP 1 (`b`.`FlagsEnum` BAND 8) = 8 AS `BitwiseTrue`, (`b`.`FlagsEnum` BAND 8) = 4 AS `BitwiseFalse`, `b`.`FlagsEnum` BAND 8 AS `BitwiseValue` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND 8) = 8 +"""); + } + + public override async Task HasFlag() + { + await base.HasFlag(); + +AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND 8) = 8 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND 12) = 12 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND 8) = 8 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND 8) = 8 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (8 BAND `b`.`FlagsEnum`) = `b`.`FlagsEnum` +""", + // + """ +SELECT TOP 1 (`b`.`FlagsEnum` BAND 8) = 8 AS `hasFlagTrue`, (`b`.`FlagsEnum` BAND 4) = 4 AS `hasFlagFalse` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND 8) = 8 +"""); + } + + public override async Task HasFlag_with_non_nullable_parameter() + { + await base.HasFlag_with_non_nullable_parameter(); + + AssertSql( + """ +@flagsEnum='8' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND @flagsEnum) = @flagsEnum +"""); + } + + public override async Task HasFlag_with_nullable_parameter() + { + await base.HasFlag_with_nullable_parameter(); + + AssertSql( + """ +@flagsEnum='8' (Nullable = true) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`FlagsEnum` BAND @flagsEnum) = @flagsEnum +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/GuidTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/GuidTranslationsLibRedTest.cs new file mode 100644 index 00000000..5dc4320c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/GuidTranslationsLibRedTest.cs @@ -0,0 +1,69 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations; + +public class GuidTranslationsLibRedTest : GuidTranslationsTestBase +{ + public GuidTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task New_with_constant() + { + await base.New_with_constant(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Guid` = {df36f493-463f-4123-83f9-6b135deeb7ba} +"""); + } + + public override async Task New_with_parameter() + { + await base.New_with_parameter(); + + AssertSql( + """ +@p='df36f493-463f-4123-83f9-6b135deeb7ba' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Guid` = @p +"""); + } + + public override async Task ToString_projection() + { + await base.ToString_projection(); + + AssertSql( + """ +SELECT (`b`.`Guid` & '') +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task NewGuid() + { + await base.NewGuid(); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/MathTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/MathTranslationsLibRedTest.cs new file mode 100644 index 00000000..2499928f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/MathTranslationsLibRedTest.cs @@ -0,0 +1,811 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations; + +public class MathTranslationsLibRedTest : MathTranslationsTestBase +{ + public MathTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Abs_decimal() + { + await base.Abs_decimal(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ABS(`b`.`Decimal`) = 9.5 +"""); + } + + public override async Task Abs_int() + { + await base.Abs_int(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ABS(`b`.`Int`) = 9 +"""); + } + + public override async Task Abs_double() + { + await base.Abs_double(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ABS(`b`.`Double`) = 9.5 +"""); + } + + public override async Task Abs_float() + { + await base.Abs_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(ABS(`b`.`Float`) IS NULL, NULL, CDBL(ABS(`b`.`Float`))) = 9.5 +"""); + } + + public override async Task Ceiling() + { + await base.Ceiling(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(FIX(`b`.`Double`) = `b`.`Double`, FIX(`b`.`Double`), FIX(`b`.`Double`) + 1.0) = 9.0 +"""); + } + + public override async Task Ceiling_float() + { + await base.Ceiling_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(FIX(`b`.`Float`) = `b`.`Float`, FIX(`b`.`Float`), FIX(`b`.`Float`) + 1) = 9 +"""); + } + + public override async Task Floor_decimal() + { + await base.Floor_decimal(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE FIX(`b`.`Decimal`) = 8.0 +"""); + } + + public override async Task Floor_double() + { + await base.Floor_double(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE FIX(`b`.`Double`) = 8.0 +"""); + } + + public override async Task Floor_float() + { + await base.Floor_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE FIX(`b`.`Float`) = 8 +"""); + } + + public override async Task Power() + { + await base.Power(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Int`)^2.0 = 64.0 +"""); + } + + public override async Task Power_float() + { + await base.Power_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Float`^2 > 73 AND `b`.`Float`^2 < 74 +"""); + } + + public override async Task Round_decimal() + { + await base.Round_decimal(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ROUND(`b`.`Decimal`, 0) = 9.0 +""", + // + """ +SELECT ROUND(`b`.`Decimal`, 0) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Round_double() + { + await base.Round_double(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ROUND(`b`.`Double`, 0) = 9.0 +""", + // + """ +SELECT ROUND(`b`.`Double`, 0) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Round_float() + { + await base.Round_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CSNG(ROUND(`b`.`Float`, 0)) = 9 +""", + // + """ +SELECT CSNG(ROUND(`b`.`Float`, 0)) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Round_with_digits_decimal() + { + await base.Round_with_digits_decimal(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ROUND(`b`.`Decimal`, 1) = 255.1 +"""); + } + + public override async Task Round_with_digits_double() + { + await base.Round_with_digits_double(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ROUND(`b`.`Double`, 1) = 255.1 +"""); + } + + public override async Task Round_with_digits_float() + { + await base.Round_with_digits_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ROUND(CDBL(`b`.`Float`), 1) = 255.1 +"""); + } + + public override async Task Truncate_decimal() + { + await base.Truncate_decimal(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE FIX(`b`.`Decimal`) = 8.0 +""", + // + """ +SELECT FIX(`b`.`Decimal`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Truncate_double() + { + await base.Truncate_double(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE FIX(`b`.`Double`) = 8.0 +""", + // + """ +SELECT FIX(`b`.`Double`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Truncate_float() + { + await base.Truncate_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(FIX(`b`.`Float`) IS NULL, NULL, CSNG(FIX(`b`.`Float`))) = 8 +""", + // + """ +SELECT IIF(FIX(`b`.`Float`) IS NULL, NULL, CSNG(FIX(`b`.`Float`))) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Truncate_project_and_order_by_it_twice() + { + await base.Truncate_project_and_order_by_it_twice(); + + AssertSql( + """ +SELECT `b0`.`A` +FROM ( + SELECT FIX(`b`.`Double`) AS `A` + FROM `BasicTypesEntities` AS `b` +) AS `b0` +ORDER BY `b0`.`A` +"""); + } + + // issue #16038 + // AssertSql( + // @"SELECT ROUND(CAST([o].[OrderID] AS float), 0, 1) AS [A] + //FROM [Orders] AS [o] + //WHERE [o].[OrderID] < 10250 + //ORDER BY [A]"); + public override async Task Truncate_project_and_order_by_it_twice2() + { + await base.Truncate_project_and_order_by_it_twice2(); + + AssertSql( + """ +SELECT `b0`.`A` +FROM ( + SELECT FIX(`b`.`Double`) AS `A` + FROM `BasicTypesEntities` AS `b` +) AS `b0` +ORDER BY `b0`.`A` DESC +"""); + } + + // issue #16038 + // AssertSql( + // @"SELECT ROUND(CAST([o].[OrderID] AS float), 0, 1) AS [A] + //FROM [Orders] AS [o] + //WHERE [o].[OrderID] < 10250 + //ORDER BY [A] DESC"); + public override async Task Truncate_project_and_order_by_it_twice3() + { + await base.Truncate_project_and_order_by_it_twice3(); + + AssertSql( + """ +SELECT `b0`.`A` +FROM ( + SELECT FIX(`b`.`Double`) AS `A` + FROM `BasicTypesEntities` AS `b` +) AS `b0` +ORDER BY `b0`.`A` DESC +"""); + } + + public override async Task Exp() + { + await base.Exp(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE EXP(`b`.`Double`) > 1.0 +"""); + } + + public override async Task Exp_float() + { + await base.Exp_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE EXP(`b`.`Float`) > 1 +"""); + } + + public override async Task Log() + { + await base.Log(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Double` > 0.0 AND LOG(`b`.`Double`) <> 0.0 +"""); + } + + public override async Task Log_float() + { + await base.Log_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Float` > 0 AND LOG(`b`.`Float`) <> 0 +"""); + } + + public override async Task Log_with_newBase() + { + await base.Log_with_newBase(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Double` > 0.0 AND (LOG(`b`.`Double`) / LOG(7.0)) <> 0.0 +"""); + } + + public override async Task Log_with_newBase_float() + { + await base.Log_with_newBase_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Float` > 0 AND (LOG(`b`.`Float`) / LOG(7)) <> 0 +"""); + } + + public override async Task Log10() + { + await base.Log10(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Double` > 0.0 AND (LOG(`b`.`Double`) / 2.302585092994046) <> 0.0 +"""); + } + + public override async Task Log10_float() + { + await base.Log10_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Float` > 0 AND (LOG(`b`.`Float`) / 2.3025851) <> 0 +"""); + } + + public override async Task Log2() + => await AssertTranslationFailed(() => base.Log2()); + + public override async Task Sqrt() + { + await base.Sqrt(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Double` > 0.0 AND SQR(`b`.`Double`) > 0.0 +"""); + } + + public override async Task Sqrt_float() + { + await base.Sqrt_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Float` > 0 AND SQR(`b`.`Float`) > 0 +"""); + } + + public override async Task Sign() + { + await base.Sign(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE SGN(`b`.`Double`) > 0 +"""); + } + + public override async Task Sign_float() + { + await base.Sign_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE SGN(`b`.`Float`) > 0 +"""); + } + + public override async Task Max() + { + await base.Max(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(`b`.`Int` > (`b`.`Short` - CINT(3)), `b`.`Int`, `b`.`Short` - CINT(3)) = `b`.`Int` +"""); + } + + public override async Task Max_nested() + { + await base.Max_nested(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(IIF((`b`.`Short` - CINT(3)) > `b`.`Int`, `b`.`Short` - CINT(3), `b`.`Int`) > 1, IIF((`b`.`Short` - CINT(3)) > `b`.`Int`, `b`.`Short` - CINT(3), `b`.`Int`), 1) = `b`.`Int` +"""); + } + + public override async Task Max_nested_twice() + { + await base.Max_nested_twice(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(IIF(IIF(1 > `b`.`Int`, 1, `b`.`Int`) > 2, IIF(1 > `b`.`Int`, 1, `b`.`Int`), 2) > (`b`.`Short` - CINT(3)), IIF(IIF(1 > `b`.`Int`, 1, `b`.`Int`) > 2, IIF(1 > `b`.`Int`, 1, `b`.`Int`), 2), `b`.`Short` - CINT(3)) = `b`.`Int` +"""); + } + + public override async Task Min() + { + await base.Min(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(`b`.`Int` < (`b`.`Short` + CINT(3)), `b`.`Int`, `b`.`Short` + CINT(3)) = `b`.`Int` +"""); + } + + public override async Task Min_nested() + { + await base.Min_nested(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(IIF((`b`.`Short` + CINT(3)) < `b`.`Int`, `b`.`Short` + CINT(3), `b`.`Int`) < 99999, IIF((`b`.`Short` + CINT(3)) < `b`.`Int`, `b`.`Short` + CINT(3), `b`.`Int`), 99999) = `b`.`Int` +"""); + } + + public override async Task Min_nested_twice() + { + await base.Min_nested_twice(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(IIF(IIF(99999 < `b`.`Int`, 99999, `b`.`Int`) < 99998, IIF(99999 < `b`.`Int`, 99999, `b`.`Int`), 99998) < (`b`.`Short` + CINT(3)), IIF(IIF(99999 < `b`.`Int`, 99999, `b`.`Int`) < 99998, IIF(99999 < `b`.`Int`, 99999, `b`.`Int`), 99998), `b`.`Short` + CINT(3)) = `b`.`Int` +"""); + } + + public override async Task Degrees() + { + await base.Degrees(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Double` * (180.0 / 3.141592653589793)) > 0.0 +"""); + } + + public override async Task Degrees_float() + { + await base.Degrees_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Float` * (180 / 3.1415927)) > 0 +"""); + } + + public override async Task Radians() + { + await base.Radians(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Double` * (3.141592653589793 / 180.0)) > 0.0 +"""); + } + + public override async Task Radians_float() + { + await base.Radians_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Float` * (3.1415927 / 180)) > 0 +"""); + } + + #region Trigonometry + + public override async Task Acos() + { + await base.Acos(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Double` >= -1.0 AND `b`.`Double` <= 1.0 AND (1.5707963267948966 + ATN(-`b`.`Double` / SQR(-(`b`.`Double` * `b`.`Double`) + 1.0))) > 1.0 +"""); + } + + public override async Task Acos_float() + { + await base.Acos_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Float` >= -1 AND `b`.`Float` <= 1 AND (1.5707963267948966 + ATN(-`b`.`Float` / SQR(-(`b`.`Float` * `b`.`Float`) + 1))) > 0.0 +"""); + } + + public override async Task Acosh() + => await AssertTranslationFailed(() => base.Acosh()); + + public override async Task Asin() + { + await base.Asin(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Double` >= -1.0 AND `b`.`Double` <= 1.0 AND ATN(`b`.`Double` / SQR(-(`b`.`Double` * `b`.`Double`) + 1.0)) > -1.7976931348623157E+308 +"""); + } + + public override async Task Asin_float() + { + await base.Asin_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Float` >= -1 AND `b`.`Float` <= 1 AND IIF(ATN(`b`.`Float` / SQR(-(`b`.`Float` * `b`.`Float`) + 1)) IS NULL, NULL, CDBL(ATN(`b`.`Float` / SQR(-(`b`.`Float` * `b`.`Float`) + 1)))) > -1.7976931348623157E+308 +"""); + } + + public override async Task Asinh() + => await AssertTranslationFailed(() => base.Asinh()); + + public override async Task Atan() + { + await base.Atan(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ATN(`b`.`Double`) > 0.0 +"""); + } + + public override async Task Atan_float() + { + await base.Atan_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ATN(`b`.`Float`) > 0 +"""); + } + + public override async Task Atanh() + => await AssertTranslationFailed(() => base.Atanh()); + + public override async Task Atan2() + { + await base.Atan2(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ATN(`b`.`Double` / 1.0) > 0.0 +"""); + } + + public override async Task Atan2_float() + { + await base.Atan2_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ATN(`b`.`Float` / 1) > 0 +"""); + } + + public override async Task Cos() + { + await base.Cos(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE COS(`b`.`Double`) > 0.0 +"""); + } + + public override async Task Cos_float() + { + await base.Cos_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE COS(`b`.`Float`) > 0 +"""); + } + + public override async Task Cosh() + => await AssertTranslationFailed(() => base.Cosh()); + + public override async Task Sin() + { + await base.Sin(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE SIN(`b`.`Double`) > 0.0 +"""); + } + + public override async Task Sin_float() + { + await base.Sin_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE SIN(`b`.`Float`) > 0 +"""); + } + + public override async Task Sinh() + => await AssertTranslationFailed(() => base.Sinh()); + + public override async Task Tan() + { + await base.Tan(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TAN(`b`.`Double`) > 0.0 +"""); + } + + public override async Task Tan_float() + { + await base.Tan_float(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TAN(`b`.`Float`) > 0 +"""); + } + + public override async Task Tanh() + => await AssertTranslationFailed(() => base.Tanh()); + + #endregion Trigonometry + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/MiscellaneousTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/MiscellaneousTranslationsLibRedTest.cs new file mode 100644 index 00000000..c2a32bc2 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/MiscellaneousTranslationsLibRedTest.cs @@ -0,0 +1,815 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations; +using Microsoft.EntityFrameworkCore.TestModels.BasicTypesModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Linq; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations; + +public class MiscellaneousTranslationsLibRedTest : MiscellaneousTranslationsRelationalTestBase +{ + public MiscellaneousTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + #region Random + + public override async Task Random_on_EF_Functions() + { + await base.Random_on_EF_Functions(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `BasicTypesEntities` AS `b` +WHERE Rnd() >= 0.0 AND Rnd() < 1.0 +"""); + } + + public override async Task Random_Shared_Next_with_no_args() + { + await base.Random_Shared_Next_with_no_args(); + + AssertSql(); + } + + public override async Task Random_Shared_Next_with_one_arg() + { + await base.Random_Shared_Next_with_one_arg(); + + AssertSql(); + } + + public override async Task Random_Shared_Next_with_two_args() + { + await base.Random_Shared_Next_with_two_args(); + + AssertSql(); + } + + public override async Task Random_new_Next_with_no_args() + { + await base.Random_new_Next_with_no_args(); + + AssertSql(); + } + + public override async Task Random_new_Next_with_one_arg() + { + await base.Random_new_Next_with_one_arg(); + + AssertSql(); + } + + public override async Task Random_new_Next_with_two_args() + { + await base.Random_new_Next_with_two_args(); + + AssertSql(); + } + + #endregion Random + + #region Convert + + public override async Task Convert_ToBoolean() + { + await base.Convert_ToBoolean(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBOOL(`b`.`Bool`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBOOL(`b`.`Byte`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBOOL(`b`.`Decimal`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBOOL(`b`.`Double`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBOOL(`b`.`Float`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBOOL(`b`.`Short`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBOOL(`b`.`Int`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBOOL(`b`.`Long`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBOOL(`b`.`Int`) +"""); + } + + public override async Task Convert_ToByte() + { + await base.Convert_ToByte(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBYTE(`b`.`Bool` * -1) = CBYTE(1) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CBYTE(`b`.`Byte`) = CBYTE(8) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Decimal` >= 0.0 AND `b`.`Decimal` <= 255.0 AND CBYTE(`b`.`Decimal`) = CBYTE(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Double` >= 0.0 AND `b`.`Double` <= 255.0 AND CBYTE(`b`.`Double`) = CBYTE(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Float` >= 0 AND `b`.`Float` <= 255 AND CBYTE(`b`.`Float`) = CBYTE(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Short` >= CINT(0) AND `b`.`Short` <= CINT(255) AND CBYTE(`b`.`Short`) = CBYTE(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` >= 0 AND `b`.`Int` <= 255 AND CBYTE(`b`.`Int`) = CBYTE(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Long` >= 0 AND `b`.`Long` <= 255 AND CBYTE(`b`.`Long`) = CBYTE(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` >= 0 AND `b`.`Int` <= 255 AND CBYTE((`b`.`Int` & '')) = CBYTE(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` >= 0 AND `b`.`Int` <= 255 AND CBYTE(`b`.`Int`) = CBYTE(12) +"""); + } + + public override async Task Convert_ToDecimal() + { + await base.Convert_ToDecimal(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC(`b`.`Bool` * -1) = 1.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC(`b`.`Byte`) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC(`b`.`Decimal`) = 8.6 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC(`b`.`Double`) = 8.6 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC(`b`.`Float`) = 8.6 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC(`b`.`Short`) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC(`b`.`Int`) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC(`b`.`Long`) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC((`b`.`Int` & '')) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDEC(`b`.`Int`) = 8.0 +"""); + } + + public override async Task Convert_ToDouble() + { + await base.Convert_ToDouble(); + +AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Bool` * -1) = 1.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Byte`) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Decimal`) = 8.6 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Double`) > 8.0 AND CDBL(`b`.`Double`) < 9.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Float`) > 8.0 AND CDBL(`b`.`Float`) < 9.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Short`) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Int`) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Long`) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL((`b`.`Int` & '')) = 8.0 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CDBL(`b`.`Int`) = 8.0 +"""); + } + + public override async Task Convert_ToInt16() + { + await base.Convert_ToInt16(); + +AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT(`b`.`Bool` * -1) = CINT(1) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT(`b`.`Byte`) = CINT(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT(`b`.`Decimal`) = CINT(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT(`b`.`Double`) = CINT(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT(`b`.`Float`) = CINT(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT(`b`.`Short`) = CINT(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT(`b`.`Int`) = CINT(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT(`b`.`Long`) = CINT(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT((`b`.`Int` & '')) = CINT(12) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CINT(`b`.`Int`) = CINT(12) +"""); + } + + public override async Task Convert_ToInt32() + { + await base.Convert_ToInt32(); + +AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG(`b`.`Bool` * -1) = 1 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG(`b`.`Byte`) = 12 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG(`b`.`Decimal`) = 12 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG(`b`.`Double`) = 12 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG(`b`.`Float`) = 12 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG(`b`.`Short`) = 12 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG(`b`.`Int`) = 12 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG(`b`.`Long`) = 12 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG((`b`.`Int` & '')) = 12 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE CLNG(`b`.`Int`) = 12 +"""); + } + + public override async Task Convert_ToInt64() + { + await base.Convert_ToInt64(); + +AssertSql( +""" +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, [b].[Bool]) = CAST(1 AS bigint) +""", + // + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, [b].[Byte]) = CAST(12 AS bigint) +""", + // + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, [b].[Decimal]) = CAST(12 AS bigint) +""", + // + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, [b].[Double]) = CAST(12 AS bigint) +""", + // + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, [b].[Float]) = CAST(12 AS bigint) +""", + // + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, [b].[Short]) = CAST(12 AS bigint) +""", + // + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, [b].[Int]) = CAST(12 AS bigint) +""", + // + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, [b].[Long]) = CAST(12 AS bigint) +""", + // + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, CONVERT(nvarchar(max), [b].[Int])) = CAST(12 AS bigint) +""", + // + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE CONVERT(bigint, [b].[Int]) = CAST(12 AS bigint) +"""); + } + + public override async Task Convert_ToString() + { + await base.Convert_ToString(); + + AssertSql( +""" +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Bool` & '') <> '' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Byte` & '') = '8' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Decimal` & '') <> '' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Double` & '') <> '' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Float` & '') <> '' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Short` & '') = '8' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` & '') = '8' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Long` & '') = '8' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`String` & '') = 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`String` & '') = 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`DateTime` & '') LIKE '%1998%' +"""); + } + + #endregion Convert + + #region Compare + + public override async Task Int_Compare_to_simple_zero() + { + await base.Int_Compare_to_simple_zero(); + +AssertSql( + """ +@orderId='8' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` = @orderId +""", + // + """ +@orderId='8' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` <> @orderId +""", + // + """ +@orderId='8' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` > @orderId +""", + // + """ +@orderId='8' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` <= @orderId +""", + // + """ +@orderId='8' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` > @orderId +""", + // + """ +@orderId='8' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` <= @orderId +"""); + } + + public override async Task DateTime_Compare_to_simple_zero(bool compareTo) + { + await base.DateTime_Compare_to_simple_zero(compareTo); + + AssertSql( + """ +@dateTime='1998-05-04T15:30:10.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` = CDATE(@dateTime) +""", + // + """ +@dateTime='1998-05-04T15:30:10.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` <> CDATE(@dateTime) +""", + // + """ +@dateTime='1998-05-04T15:30:10.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` > CDATE(@dateTime) +""", + // + """ +@dateTime='1998-05-04T15:30:10.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` <= CDATE(@dateTime) +""", + // + """ +@dateTime='1998-05-04T15:30:10.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` > CDATE(@dateTime) +""", + // + """ +@dateTime='1998-05-04T15:30:10.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` <= CDATE(@dateTime) +"""); + } + + public override async Task TimeSpan_Compare_to_simple_zero(bool compareTo) + { + await base.TimeSpan_Compare_to_simple_zero(compareTo); + + AssertSql( + """ +@timeSpan='01:02:03' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`TimeSpan` = @timeSpan +""", + // + """ +@timeSpan='01:02:03' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`TimeSpan` <> @timeSpan +""", + // + """ +@timeSpan='01:02:03' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`TimeSpan` > @timeSpan +""", + // + """ +@timeSpan='01:02:03' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`TimeSpan` <= @timeSpan +""", + // + """ +@timeSpan='01:02:03' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`TimeSpan` > @timeSpan +""", + // + """ +@timeSpan='01:02:03' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`TimeSpan` <= @timeSpan +"""); + } + + #endregion Compare + + + [ConditionalFact] + public virtual async Task Sum_over_bool() + { + await AssertSum( + async: true, + ss => ss.Set().Select(o => Convert.ToInt32(o.Bool))); + + AssertSql( + """ +SELECT IIF(SUM(CLNG(`b`.`Bool` * -1)) IS NULL, 0, SUM(CLNG(`b`.`Bool` * -1))) +FROM `BasicTypesEntities` AS `b` +"""); + } + + [ConditionalFact] + public virtual async Task Sum_over_bool_with_ternary() + { + await AssertSum( + async: true, + ss => ss.Set().Select(o => o.Bool ? 1 : 0)); + + AssertSql( + """ +SELECT IIF(SUM(IIF(`b`.`Bool`, 1, 0)) IS NULL, 0, SUM(IIF(`b`.`Bool`, 1, 0))) +FROM `BasicTypesEntities` AS `b` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/ArithmeticOperatorTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/ArithmeticOperatorTranslationsLibRedTest.cs new file mode 100644 index 00000000..f24ac1ca --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/ArithmeticOperatorTranslationsLibRedTest.cs @@ -0,0 +1,87 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Operators; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Operators; + +public class ArithmeticOperatorTranslationsLibRedTest : ArithmeticOperatorTranslationsTestBase +{ + public ArithmeticOperatorTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Add() + { + await base.Add(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` + 2) = 10 +"""); + } + + public override async Task Subtract() + { + await base.Subtract(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` - 3) = 5 +"""); + } + + public override async Task Multiply() + { + await base.Multiply(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` * 2) = 16 +"""); + } + + public override async Task Modulo() + { + await base.Modulo(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` MOD 3) = 2 +"""); + } + + public override async Task Minus() + { + await base.Minus(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE -`b`.`Int` = -8 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/BitwiseOperatorTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/BitwiseOperatorTranslationsLibRedTest.cs new file mode 100644 index 00000000..4e855b1b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/BitwiseOperatorTranslationsLibRedTest.cs @@ -0,0 +1,214 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Operators; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Operators; + +public class BitwiseOperatorTranslationsLibRedTest : BitwiseOperatorTranslationsTestBase +{ + public BitwiseOperatorTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Or() + { + await base.Or(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (CLNG(`b`.`Int`) BOR `b`.`Long`) = 7 +""", + // + """ +SELECT CLNG(`b`.`Int`) BOR `b`.`Long` +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Or_over_boolean() + { + await base.Or_over_boolean(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` = 12 OR `b`.`String` = 'Seattle' +""", + // + """ +SELECT `b`.`Int` = 12 OR `b`.`String` = 'Seattle' +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Or_multiple() + { + await base.Or_multiple(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (IIF((`b`.`Int` BOR CLNG(`b`.`Short`)) IS NULL, NULL, CLNG(`b`.`Int` BOR CLNG(`b`.`Short`))) BOR `b`.`Long`) = 7 +"""); + } + + public override async Task And() + { + await base.And(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` BAND CLNG(`b`.`Short`)) = 2 +""", + // + """ +SELECT `b`.`Int` BAND CLNG(`b`.`Short`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task And_over_boolean() + { + await base.And_over_boolean(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` = 8 AND `b`.`String` = 'Seattle' +""", + // + """ +SELECT `b`.`Int` = 8 AND `b`.`String` = 'Seattle' +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Xor() + { + await base.Xor(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` BXOR CLNG(`b`.`Short`)) = 1 +""", + // + """ +SELECT `b`.`Int` BXOR CLNG(`b`.`Short`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Xor_over_boolean() + { + await base.Xor_over_boolean(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` = `b`.`Short`) BXOR (`b`.`String` = 'Seattle') +"""); + } + + public override async Task Complement() + { + await base.Complement(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (BNOT`b`.`Int`) = -9 +"""); + } + + public override async Task And_or_over_boolean() + { + await base.And_or_over_boolean(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` = 12 AND `b`.`Short` = CINT(12)) OR `b`.`String` = 'Seattle' +"""); + } + + public override async Task Or_with_logical_or() + { + await base.Or_with_logical_or(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` = 12 OR `b`.`Short` = CINT(12) OR `b`.`String` = 'Seattle' +"""); + } + + public override async Task And_with_logical_and() + { + await base.And_with_logical_and(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` = 8 AND `b`.`Short` = CINT(8) AND `b`.`String` = 'Seattle' +"""); + } + + public override async Task Or_with_logical_and() + { + await base.Or_with_logical_and(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` = 8 OR `b`.`Short` = CINT(9)) AND `b`.`String` = 'Seattle' +"""); + } + + public override async Task And_with_logical_or() + { + await base.And_with_logical_or(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` = 12 AND `b`.`Short` = CINT(12)) OR `b`.`String` = 'Seattle' +"""); + } + + public override Task Left_shift() + => AssertTranslationFailed(() => base.Left_shift()); + + public override Task Right_shift() + => AssertTranslationFailed(() => base.Right_shift()); + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/ComparisonOperatorTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/ComparisonOperatorTranslationsLibRedTest.cs new file mode 100644 index 00000000..c245c0b7 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/ComparisonOperatorTranslationsLibRedTest.cs @@ -0,0 +1,99 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Operators; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Operators; + +public class ComparisonOperatorTranslationsLibRedTest : ComparisonOperatorTranslationsTestBase +{ + public ComparisonOperatorTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Equal() + { + await base.Equal(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` = 8 +"""); + } + + public override async Task NotEqual() + { + await base.NotEqual(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` <> 8 +"""); + } + + public override async Task GreaterThan() + { + await base.GreaterThan(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` > 8 +"""); + } + + public override async Task GreaterThanOrEqual() + { + await base.GreaterThanOrEqual(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` >= 8 +"""); + } + + public override async Task LessThan() + { + await base.LessThan(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` < 8 +"""); + } + + public override async Task LessThanOrEqual() + { + await base.LessThanOrEqual(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` <= 8 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/LogicalOperatorTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/LogicalOperatorTranslationsLibRedTest.cs new file mode 100644 index 00000000..06a93a49 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/LogicalOperatorTranslationsLibRedTest.cs @@ -0,0 +1,99 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Operators; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Operators; + +public class LogicalOperatorTranslationsLibRedTest : LogicalOperatorTranslationsTestBase +{ + public LogicalOperatorTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task And() + { + await base.And(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` = 8 AND `b`.`String` = 'Seattle' +"""); + } + + public override async Task And_with_bool_property() + { + await base.And_with_bool_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Bool` AND `b`.`String` = 'Seattle' +"""); + } + + public override async Task Or() + { + await base.Or(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` = 999 OR `b`.`String` = 'Seattle' +"""); + } + + public override async Task Or_with_bool_property() + { + await base.Or_with_bool_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Bool` OR `b`.`String` = 'Seattle' +"""); + } + + public override async Task Not() + { + await base.Not(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`Int` <> 999 +"""); + } + + public override async Task Not_with_bool_property() + { + await base.Not_with_bool_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE NOT (`b`.`Bool`) +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/MiscellaneousOperatorTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/MiscellaneousOperatorTranslationsLibRedTest.cs new file mode 100644 index 00000000..3d9a18c4 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Operators/MiscellaneousOperatorTranslationsLibRedTest.cs @@ -0,0 +1,51 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Operators; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Operators; + +public class MiscellaneousOperatorTranslationsLibRedTest : MiscellaneousOperatorTranslationsTestBase +{ + public MiscellaneousOperatorTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Conditional() + { + await base.Conditional(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(`b`.`Int` = 8, `b`.`String`, 'Foo') = 'Seattle' +"""); + } + + public override async Task Coalesce() + { + await base.Coalesce(); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE IIF(`n`.`String` IS NULL, 'Unknown', `n`.`String`) = 'Seattle' +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/StringTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/StringTranslationsLibRedTest.cs new file mode 100644 index 00000000..8f10e480 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/StringTranslationsLibRedTest.cs @@ -0,0 +1,1627 @@ +using Microsoft.EntityFrameworkCore.Query.Translations; +using Microsoft.EntityFrameworkCore.TestModels.BasicTypesModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System; +using System.Linq; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations; + +public class StringTranslationsLibRedTest : StringTranslationsRelationalTestBase +{ + public StringTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + protected override bool IsCaseSensitive + => false; + + #region Equals + + public override async Task Equals() + { + await base.Equals(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` = 'seattle' +"""); + } + + public override async Task Equals_with_OrdinalIgnoreCase() + { + await base.Equals_with_OrdinalIgnoreCase(); + + AssertSql(); + } + + public override async Task Equals_with_Ordinal() + { + await base.Equals_with_Ordinal(); + + AssertSql(); + } + + public override async Task Static_Equals() + { + await base.Static_Equals(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` = 'seattle' +"""); + } + + public override async Task Static_Equals_with_OrdinalIgnoreCase() + { + await base.Static_Equals_with_OrdinalIgnoreCase(); + + AssertSql(); + } + + public override async Task Static_Equals_with_Ordinal() + { + await base.Static_Equals_with_Ordinal(); + + AssertSql(); + } + + #endregion Equals + + #region Miscellaneous + + public override async Task Length() + { + await base.Length(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) = 7 +"""); + } + + public override async Task ToUpper() + { + await base.ToUpper(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE UCASE(`b`.`String`) = 'SEATTLE' +""", + // + """ +SELECT UCASE(`b`.`String`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task ToLower() + { + await base.ToLower(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE LCASE(`b`.`String`) = 'seattle' +""", + // + """ +SELECT LCASE(`b`.`String`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + #endregion Miscellaneous + + #region IndexOf + + public override async Task IndexOf() + { + await base.IndexOf(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (INSTR(1, `b`.`String`, 'Eattl', 1) - 1) <> -1 +"""); + } + + public override async Task IndexOf_Char() + { + await base.IndexOf_Char(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (INSTR(1, `b`.`String`, 'e', 1) - 1) <> -1 +"""); + } + + public override async Task IndexOf_with_empty_string() + { + await base.IndexOf_with_empty_string(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task IndexOf_with_one_parameter_arg() + { + await base.IndexOf_with_one_parameter_arg(); + + AssertSql( + """ +@pattern='Eattl' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (INSTR(1, `b`.`String`, @pattern, 1) - IIF(@pattern = '', 0, 1)) = 1 +"""); + + } + + public override async Task IndexOf_with_one_parameter_arg_char() + { + await base.IndexOf_with_one_parameter_arg_char(); + + AssertSql( + """ +@pattern='e' (DbType = String) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (INSTR(1, `b`.`String`, @pattern, 1) - IIF(@pattern = '', 0, 1)) = 1 +"""); + + } + + public override async Task IndexOf_with_constant_starting_position() + { + await base.IndexOf_with_constant_starting_position(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) > 2 AND (INSTR(3, `b`.`String`, 'e', 1) - 1) = 6 +"""); + } + + public override async Task IndexOf_with_constant_starting_position_char() + { + await base.IndexOf_with_constant_starting_position_char(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) > 2 AND (INSTR(3, `b`.`String`, 'e', 1) - 1) = 6 +"""); + } + + public override async Task IndexOf_with_parameter_starting_position() + { + await base.IndexOf_with_parameter_starting_position(); + + AssertSql( + """ +@start='2' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) > 2 AND (INSTR(@start + 1, `b`.`String`, 'E', 1) - 1) = 6 +"""); + } + + public override async Task IndexOf_with_parameter_starting_position_char() + { + await base.IndexOf_with_parameter_starting_position_char(); + + AssertSql( + """ +@start='2' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) > 2 AND (INSTR(@start + 1, `b`.`String`, 'e', 1) - 1) = 6 +"""); + } + + public override async Task IndexOf_after_ToString() + { + await base.IndexOf_after_ToString(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (INSTR(1, (`b`.`Int` & ''), '55', 1) - 1) = 1 +"""); + } + + public override async Task IndexOf_over_ToString() + { + await base.IndexOf_over_ToString(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (INSTR(1, '12559', (`b`.`Int` & ''), 1) - IIF((`b`.`Int` & '') = '', 0, 1)) = 1 +"""); + } + + #endregion IndexOf + + #region Replace + + public override async Task Replace() + { + await base.Replace(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE REPLACE(`b`.`String`, 'sea', 'rea') = 'reattle' +"""); + } + + public override async Task Replace_Char() + { + await base.Replace_Char(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE REPLACE(`b`.`String`, 'S', 'R') = 'Reattle' +"""); + } + + public override async Task Replace_with_empty_string() + { + await base.Replace_with_empty_string(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <> '' AND REPLACE(`b`.`String`, `b`.`String`, '') = '' +"""); + } + + public override async Task Replace_using_property_arguments() + { + await base.Replace_using_property_arguments(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <> '' AND REPLACE(`b`.`String`, `b`.`String`, (`b`.`Int` & '')) = (`b`.`Int` & '') +"""); + } + + #endregion Replace + + #region Substring + + public override async Task Substring() + { + await base.Substring(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 3 AND MID(`b`.`String`, 1 + 1, 2) = 'ea' +"""); + } + + public override async Task Substring_with_one_arg_with_zero_startIndex() + { + await base.Substring_with_one_arg_with_zero_startIndex(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE MID(`b`.`String`, 0 + 1, LEN(`b`.`String`)) = 'Seattle' +"""); + } + + public override async Task Substring_with_one_arg_with_constant() + { + await base.Substring_with_one_arg_with_constant(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 1 AND MID(`b`.`String`, 1 + 1, LEN(`b`.`String`)) = 'eattle' +"""); + } + + public override async Task Substring_with_one_arg_with_parameter() + { + await base.Substring_with_one_arg_with_parameter(); + + AssertSql( + """ +@start='2' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 2 AND MID(`b`.`String`, @start + 1, LEN(`b`.`String`)) = 'attle' +"""); + } + + public override async Task Substring_with_two_args_with_zero_startIndex() + { + await base.Substring_with_two_args_with_zero_startIndex(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 3 AND MID(`b`.`String`, 0 + 1, 3) = 'Sea' +"""); + } + + public override async Task Substring_with_two_args_with_zero_length() + { + await base.Substring_with_two_args_with_zero_length(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 2 AND MID(`b`.`String`, 2 + 1, 0) = '' +"""); + } + + public override async Task Substring_with_two_args_with_parameter() + { + await base.Substring_with_two_args_with_parameter(); + + AssertSql( + """ +@start='2' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(LEN(`b`.`String`) IS NULL, NULL, CLNG(LEN(`b`.`String`))) >= 5 AND MID(`b`.`String`, IIF(@start = -1, 0, @start) + 1, 3) = 'att' +"""); + } + + public override async Task Substring_with_two_args_with_IndexOf() + { + await base.Substring_with_two_args_with_IndexOf(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`String` LIKE '%a%') AND MID(`b`.`String`, IIF((INSTR(1, `b`.`String`, 'a', 1) - 1) = -1, 0, INSTR(1, `b`.`String`, 'a', 1) - 1) + 1, 3) = 'att' +"""); + } + + #endregion Substring + + #region IsNullOrEmpty/Whitespace + + public override async Task IsNullOrEmpty() + { + await base.IsNullOrEmpty(); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE `n`.`String` IS NULL OR (`n`.`String` LIKE '') +""", + // + """ +SELECT `n`.`String` IS NULL OR (`n`.`String` LIKE '') +FROM `NullableBasicTypesEntities` AS `n` +"""); + } + + public override async Task IsNullOrEmpty_negated() + { + await base.IsNullOrEmpty_negated(); + + AssertSql( + """ +SELECT `n`.`Id`, `n`.`Bool`, `n`.`Byte`, `n`.`ByteArray`, `n`.`DateOnly`, `n`.`DateTime`, `n`.`DateTimeOffset`, `n`.`Decimal`, `n`.`Double`, `n`.`Enum`, `n`.`FlagsEnum`, `n`.`Float`, `n`.`Guid`, `n`.`Int`, `n`.`Long`, `n`.`Short`, `n`.`String`, `n`.`TimeOnly`, `n`.`TimeSpan` +FROM `NullableBasicTypesEntities` AS `n` +WHERE `n`.`String` IS NOT NULL AND `n`.`String` NOT LIKE '' +""", + // + """ +SELECT `n`.`String` IS NOT NULL AND `n`.`String` NOT LIKE '' +FROM `NullableBasicTypesEntities` AS `n` +"""); + } + + public override async Task IsNullOrWhiteSpace() + { + await base.IsNullOrWhiteSpace(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` = '' +"""); + } + + #endregion IsNullOrEmpty/Whitespace + + #region StartsWith + + public override async Task StartsWith_Literal() + { + await base.StartsWith_Literal(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE 'se%' +"""); + } + + public override async Task StartsWith_Literal_Char() + { + await base.StartsWith_Literal_Char(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE 'S%' +"""); + } + + public override async Task StartsWith_Parameter() + { + await base.StartsWith_Parameter(); + + AssertSql( + """ +@pattern_startswith='se%' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE @pattern_startswith +"""); + } + + public override async Task StartsWith_Parameter_Char() + { + await base.StartsWith_Parameter_Char(); + + AssertSql( + """ +@pattern_startswith='S%' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE @pattern_startswith +"""); + } + + public override async Task StartsWith_Column() + { + await base.StartsWith_Column(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE LEFT(`b`.`String`, IIF(LEN(`b`.`String`) IS NULL, 0, LEN(`b`.`String`))) = `b`.`String` +"""); + } + + public override async Task StartsWith_with_StringComparison_Ordinal() + { + await base.StartsWith_with_StringComparison_Ordinal(); + + AssertSql(); + } + + public override async Task StartsWith_with_StringComparison_OrdinalIgnoreCase() + { + await base.StartsWith_with_StringComparison_OrdinalIgnoreCase(); + + AssertSql(); + } + + public override async Task StartsWith_with_StringComparison_unsupported() + { + await base.StartsWith_with_StringComparison_unsupported(); + + AssertSql(); + } + + #endregion StartsWith + + #region EndsWith + + public override async Task EndsWith_Literal() + { + await base.EndsWith_Literal(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE '%Le' +"""); + } + + public override async Task EndsWith_Literal_Char() + { + await base.EndsWith_Literal_Char(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE '%e' +"""); + } + + public override async Task EndsWith_Parameter() + { + await base.EndsWith_Parameter(); + + AssertSql( + """ +@pattern_endswith='%LE' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE @pattern_endswith +"""); + } + + public override async Task EndsWith_Parameter_Char() + { + await base.EndsWith_Parameter_Char(); + + AssertSql( + """ +@pattern_endswith='%e' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE @pattern_endswith +"""); + } + + public override async Task EndsWith_Column() + { + // SQL Server trims trailing whitespace for length calculations, making our EndsWith() column translation not work reliably in that + // case + await AssertQuery(ss => ss.Set().Where(b => b.String == "Seattle" && b.String.EndsWith(b.String))); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` = 'Seattle' AND RIGHT(`b`.`String`, IIF(LEN(`b`.`String`) IS NULL, 0, LEN(`b`.`String`))) = `b`.`String` +"""); + } + + public override async Task EndsWith_with_StringComparison_Ordinal() + { + await base.EndsWith_with_StringComparison_Ordinal(); + + AssertSql(); + } + + public override async Task EndsWith_with_StringComparison_OrdinalIgnoreCase() + { + await base.EndsWith_with_StringComparison_OrdinalIgnoreCase(); + + AssertSql(); + } + + public override async Task EndsWith_with_StringComparison_unsupported() + { + await base.EndsWith_with_StringComparison_unsupported(); + + AssertSql(); + } + + #endregion EndsWith + + #region Contains + + public override async Task Contains_Literal() + { + await AssertQuery( + + ss => ss.Set().Where(c => c.String.Contains("eattl")), // SQL Server is case-insensitive by default + ss => ss.Set().Where(c => c.String.Contains("eattl", StringComparison.OrdinalIgnoreCase))); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE '%eattl%' +"""); + } + + public override async Task Contains_Literal_Char() + { + await AssertQuery( + + ss => ss.Set().Where(c => c.String.Contains('e'))); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE '%e%' +"""); + } + + public override async Task Contains_Column() + { + await base.Contains_Column(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE INSTR(1, `b`.`String`, `b`.`String`, 1) > 0 OR (`b`.`String` LIKE '') +""", + // + """ +SELECT INSTR(1, `b`.`String`, `b`.`String`, 1) > 0 OR (`b`.`String` LIKE '') +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Contains_negated() + { + await base.Contains_negated(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` NOT LIKE '%Eattle%' +""", + // + """ +SELECT `b`.`String` NOT LIKE '%Eattle%' +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task Contains_with_StringComparison_Ordinal() + { + await base.Contains_with_StringComparison_Ordinal(); + + AssertSql(); + } + + public override async Task Contains_with_StringComparison_OrdinalIgnoreCase() + { + await base.Contains_with_StringComparison_OrdinalIgnoreCase(); + + AssertSql(); + } + + public override async Task Contains_with_StringComparison_unsupported() + { + await base.Contains_with_StringComparison_unsupported(); + + AssertSql(); + } + + public override async Task Contains_constant_with_whitespace() + { + await base.Contains_constant_with_whitespace(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE '% %' +"""); + } + + public override async Task Contains_parameter_with_whitespace() + { + await base.Contains_parameter_with_whitespace(); + + AssertSql( + """ +@pattern_contains='% %' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` LIKE @pattern_contains +"""); + } + + #endregion Contains + + #region TrimStart + + public override async Task TrimStart_without_arguments() + { + await base.TrimStart_without_arguments(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE LTRIM(`b`.`String`) = 'Boston ' +"""); + } + + public override Task TrimStart_with_char_argument() + => AssertTranslationFailed(() => base.TrimStart_with_char_argument()); + + public override Task TrimStart_with_char_array_argument() + => AssertTranslationFailed(() => base.TrimStart_with_char_array_argument()); + + #endregion TrimStart + + #region TrimEnd + + public override async Task TrimEnd_without_arguments() + { + await base.TrimEnd_without_arguments(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE RTRIM(`b`.`String`) = ' Boston' +"""); + } + + public override Task TrimEnd_with_char_argument() + => AssertTranslationFailed(() => base.TrimEnd_with_char_argument()); + + public override Task TrimEnd_with_char_array_argument() + => AssertTranslationFailed(() => base.TrimEnd_with_char_array_argument()); + + #endregion TrimEnd + + #region Trim + + public override async Task Trim_without_argument_in_predicate() + { + await base.Trim_without_argument_in_predicate(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TRIM(`b`.`String`) = 'Boston' +"""); + } + + public override async Task Trim_with_char_argument_in_predicate() + { + // String.Trim with parameters. Issue #22927. + await AssertTranslationFailed(() => base.Trim_with_char_argument_in_predicate()); + + AssertSql(); + } + + public override async Task Trim_with_char_array_argument_in_predicate() + { + // String.Trim with parameters. Issue #22927. + await AssertTranslationFailed(() => base.Trim_with_char_array_argument_in_predicate()); + + AssertSql(); + } + + #endregion Trim + + #region Compare + + public override async Task Compare_simple_zero() + { + await base.Compare_simple_zero(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` = 'seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <> 'seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > 'seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= 'seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > 'seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= 'seattle' +"""); + } + + public override async Task Compare_simple_one() + { + await base.Compare_simple_one(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` < 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= 'Seattle' +"""); + } + + public override async Task Compare_with_parameter() + { + await base.Compare_with_parameter(); + + AssertSql( + """ +@basicTypeEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > @basicTypeEntity_String +""", + // + """ +@basicTypeEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` < @basicTypeEntity_String +""", + // + """ +@basicTypeEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= @basicTypeEntity_String +""", + // + """ +@basicTypeEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= @basicTypeEntity_String +""", + // + """ +@basicTypeEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= @basicTypeEntity_String +""", + // + """ +@basicTypeEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= @basicTypeEntity_String +"""); + } + + public override async Task Compare_simple_more_than_one() + { + await base.Compare_simple_more_than_one(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(`b`.`String` = 'Seattle', 0, IIF(`b`.`String` > 'Seattle', 1, IIF(`b`.`String` < 'Seattle', -1, NULL))) = 42 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(`b`.`String` = 'Seattle', 0, IIF(`b`.`String` > 'Seattle', 1, IIF(`b`.`String` < 'Seattle', -1, NULL))) > 42 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE 42 > IIF(`b`.`String` = 'Seattle', 0, IIF(`b`.`String` > 'Seattle', 1, IIF(`b`.`String` < 'Seattle', -1, NULL))) +"""); + } + + public override async Task Compare_nested() + { + await base.Compare_nested(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` = ('M' & `b`.`String`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <> MID(`b`.`String`, 0 + 1, 0) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > REPLACE('Seattle', 'Sea', `b`.`String`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= ('M' & `b`.`String`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > MID(`b`.`String`, 0 + 1, 0) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` < REPLACE('Seattle', 'Sea', `b`.`String`) +"""); + } + + public override async Task Compare_multi_predicate() + { + await base.Compare_multi_predicate(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= 'Seattle' AND `b`.`String` < 'Toronto' +"""); + } + + public override async Task CompareTo_simple_zero() + { + await base.CompareTo_simple_zero(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` = 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <> 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= 'Seattle' +"""); + } + + public override async Task CompareTo_simple_one() + { + await base.CompareTo_simple_one(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` < 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= 'Seattle' +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= 'Seattle' +"""); + } + + public override async Task CompareTo_with_parameter() + { + await base.CompareTo_with_parameter(); + + AssertSql( + """ +@basicTypesEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > @basicTypesEntity_String +""", + // + """ +@basicTypesEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` < @basicTypesEntity_String +""", + // + """ +@basicTypesEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= @basicTypesEntity_String +""", + // + """ +@basicTypesEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= @basicTypesEntity_String +""", + // + """ +@basicTypesEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= @basicTypesEntity_String +""", + // + """ +@basicTypesEntity_String='Seattle' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= @basicTypesEntity_String +"""); + } + + public override async Task CompareTo_simple_more_than_one() + { + await base.CompareTo_simple_more_than_one(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(`b`.`String` = 'Seattle', 0, IIF(`b`.`String` > 'Seattle', 1, IIF(`b`.`String` < 'Seattle', -1, NULL))) = 42 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE IIF(`b`.`String` = 'Seattle', 0, IIF(`b`.`String` > 'Seattle', 1, IIF(`b`.`String` < 'Seattle', -1, NULL))) > 42 +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE 42 > IIF(`b`.`String` = 'Seattle', 0, IIF(`b`.`String` > 'Seattle', 1, IIF(`b`.`String` < 'Seattle', -1, NULL))) +"""); + } + + public override async Task CompareTo_nested() + { + await base.CompareTo_nested(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` = ('M' & `b`.`String`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <> MID(`b`.`String`, 0 + 1, 0) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > REPLACE('Seattle', 'Sea', `b`.`String`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` <= ('M' & `b`.`String`) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` > MID(`b`.`String`, 0 + 1, 0) +""", + // + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` < REPLACE('Seattle', 'Sea', `b`.`String`) +"""); + } + + public override async Task Compare_to_multi_predicate() + { + await base.Compare_to_multi_predicate(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`String` >= 'Seattle' AND `b`.`String` < 'Toronto' +"""); + } + + #endregion Compare + + #region Join + + public override async Task Join_over_non_nullable_column() + { + await base.Join_over_non_nullable_column(); + + AssertSql( + """ +SELECT `b1`.`Int`, `b0`.`String`, `b0`.`Id` +FROM ( + SELECT `b`.`Int` + FROM `BasicTypesEntities` AS `b` + GROUP BY `b`.`Int` +) AS `b1` +LEFT JOIN `BasicTypesEntities` AS `b0` ON `b1`.`Int` = `b0`.`Int` +ORDER BY `b1`.`Int` +"""); + } + + public override async Task Join_over_nullable_column() + { + await base.Join_over_nullable_column(); + + AssertSql( + """ +SELECT `n3`.`Key`, `n1`.`String`, `n1`.`Id` +FROM ( + SELECT `n0`.`Key` + FROM ( + SELECT IIF(`n`.`Int` IS NULL, 0, `n`.`Int`) AS `Key` + FROM `NullableBasicTypesEntities` AS `n` + ) AS `n0` + GROUP BY `n0`.`Key` +) AS `n3` +LEFT JOIN ( + SELECT `n2`.`Id`, `n2`.`String`, IIF(`n2`.`Int` IS NULL, 0, `n2`.`Int`) AS `Key` + FROM `NullableBasicTypesEntities` AS `n2` +) AS `n1` ON `n3`.`Key` = `n1`.`Key` +ORDER BY `n3`.`Key` +"""); + } + + public override async Task Join_with_predicate() + { + await base.Join_with_predicate(); + + AssertSql( + """ +SELECT `b1`.`Int`, `b2`.`String`, `b2`.`Id` +FROM ( + SELECT `b`.`Int` + FROM `BasicTypesEntities` AS `b` + GROUP BY `b`.`Int` +) AS `b1` +LEFT JOIN ( + SELECT `b0`.`String`, `b0`.`Id`, `b0`.`Int` + FROM `BasicTypesEntities` AS `b0` + WHERE IIF(LEN(`b0`.`String`) IS NULL, NULL, CLNG(LEN(`b0`.`String`))) > 6 +) AS `b2` ON `b1`.`Int` = `b2`.`Int` +ORDER BY `b1`.`Int` +"""); + } + + public override async Task Join_with_ordering() + { + await base.Join_with_ordering(); + + AssertSql( + """ +SELECT `b1`.`Int`, `b0`.`String`, `b0`.`Id` +FROM ( + SELECT `b`.`Int` + FROM `BasicTypesEntities` AS `b` + GROUP BY `b`.`Int` +) AS `b1` +LEFT JOIN `BasicTypesEntities` AS `b0` ON `b1`.`Int` = `b0`.`Int` +ORDER BY `b1`.`Int`, `b0`.`Id` DESC +"""); + } + + public override async Task Join_non_aggregate() + { + await base.Join_non_aggregate(); + + AssertSql( + """ +@foo='foo' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ((((((`b`.`String` & '|') & @foo) & '|') & '') & '|') & 'bar') = 'Seattle|foo||bar' +"""); + } + + #endregion Join + + #region Concatenation + + public override async Task Concat_operator() + { + await base.Concat_operator(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`String` & 'Boston') = 'SeattleBoston' +"""); + } + + public override async Task Concat_aggregate() + { + await base.Concat_aggregate(); + + AssertSql( + """ +SELECT `b1`.`Int`, `b0`.`String`, `b0`.`Id` +FROM ( + SELECT `b`.`Int` + FROM `BasicTypesEntities` AS `b` + GROUP BY `b`.`Int` +) AS `b1` +LEFT JOIN `BasicTypesEntities` AS `b0` ON `b1`.`Int` = `b0`.`Int` +ORDER BY `b1`.`Int` +"""); + } + + public override async Task Concat_string_int_comparison1() + { + await base.Concat_string_int_comparison1(); + + AssertSql( + """ +@i='10' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`String` & (@i & '')) = 'Seattle10' +"""); + } + + public override async Task Concat_string_int_comparison2() + { + await base.Concat_string_int_comparison2(); + + AssertSql( + """ +@i='10' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ((@i & '') & `b`.`String`) = '10Seattle' +"""); + } + + public override async Task Concat_string_int_comparison3() + { + await base.Concat_string_int_comparison3(); + + AssertSql( + """ +@p='30' +@j='21' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ((((@p & '') & `b`.`String`) & (@j & '')) & (42 & '')) = '30Seattle2142' +"""); + } + + public override async Task Concat_string_int_comparison4() + { + await base.Concat_string_int_comparison4(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ((`b`.`Int` & '') & `b`.`String`) = '8Seattle' +"""); + } + + public override async Task Concat_string_string_comparison() + { + await base.Concat_string_string_comparison(); + + AssertSql( + """ +@i='A' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (@i & `b`.`String`) = 'ASeattle' +"""); + } + + public override async Task Concat_method_comparison() + { + await base.Concat_method_comparison(); + + AssertSql( + """ +@i='A' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (@i & `b`.`String`) = 'ASeattle' +"""); + } + + public override async Task Concat_method_comparison_2() + { + await base.Concat_method_comparison_2(); + + AssertSql( + """ +@i='A' (Size = 255) +@j='B' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (@i & (@j & `b`.`String`)) = 'ABSeattle' +"""); + } + + public override async Task Concat_method_comparison_3() + { + await base.Concat_method_comparison_3(); + + AssertSql( + """ +@i='A' (Size = 255) +@j='B' (Size = 255) +@k='C' (Size = 255) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (@i & (@j & (@k & `b`.`String`))) = 'ABCSeattle' +"""); + } + + #endregion Concatenation + + #region LINQ Operators + + public override async Task FirstOrDefault() + { + await base.FirstOrDefault(); + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE MID(`b`.`String`, 1, 1) = 'S' +"""); + } + + public override async Task LastOrDefault() + { + await base.LastOrDefault(); + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE MID(`b`.`String`, IIF(LEN(`b`.`String`) = 0, 1, LEN(`b`.`String`)), 1) = 'e' +"""); + } + + #endregion LINQ Operators + + #region Like + + public override async Task Where_Like_and_comparison() + { + await base.Where_Like_and_comparison(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`String` LIKE 'S%') AND `b`.`Int` = 8 +"""); + } + + public override async Task Where_Like_or_comparison() + { + await base.Where_Like_or_comparison(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`String` LIKE 'S%') OR `b`.`Int` = 2147483647 +"""); + } + + public override async Task Like_with_non_string_column_using_ToString() + { + await base.Like_with_non_string_column_using_ToString(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` & '') LIKE '%5%' +"""); + } + + public override async Task Like_with_non_string_column_using_double_cast() + { + await base.Like_with_non_string_column_using_double_cast(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`Int` & '') LIKE '%5%' +"""); + } + + #endregion Like + + #region Regex + + public override Task Regex_IsMatch() + => AssertTranslationFailed(() => base.Regex_IsMatch()); + + public override Task Regex_IsMatch_constant_input() + => AssertTranslationFailed(() => base.Regex_IsMatch_constant_input()); + + #endregion Regex + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + protected override void ClearLog() + => Fixture.TestSqlLoggerFactory.Clear(); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/DateOnlyTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/DateOnlyTranslationsLibRedTest.cs new file mode 100644 index 00000000..b50985a8 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/DateOnlyTranslationsLibRedTest.cs @@ -0,0 +1,232 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Temporal; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Temporal; + +public class DateOnlyTranslationsLibRedTest : DateOnlyTranslationsTestBase +{ + public DateOnlyTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Year() + { + await base.Year(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('yyyy', `b`.`DateOnly`) = 1990 +"""); + } + + public override async Task Month() + { + await base.Month(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('m', `b`.`DateOnly`) = 11 +"""); + } + + public override async Task Day() + { + await base.Day(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('d', `b`.`DateOnly`) = 10 +"""); + } + + public override async Task DayOfYear() + { + await base.DayOfYear(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('y', `b`.`DateOnly`) = 314 +"""); + } + + public override async Task DayOfWeek() + { + await AssertTranslationFailed(() => base.DayOfWeek()); + + AssertSql(); + } + + public override async Task DayNumber() + { + await base.DayNumber(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (DATEDIFF('d', #0100-01-01#, `b`.`DateOnly`) + 36159) = 726780 +"""); + } + + public override async Task AddYears() + { + await base.AddYears(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEADD('yyyy', CLNG(3), `b`.`DateOnly`) = #1993-11-10# +"""); + } + + public override async Task AddMonths() + { + await base.AddMonths(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEADD('m', CLNG(3), `b`.`DateOnly`) = #1991-02-10# +"""); + } + + public override async Task AddDays() + { + await base.AddDays(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEADD('d', CLNG(3), `b`.`DateOnly`) = #1990-11-13# +"""); + } + + public override async Task DayNumber_subtraction() + { + await base.DayNumber_subtraction(); + + AssertSql( + """ +@DayNumber='726775' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE ((DATEDIFF('d', #0100-01-01#, `b`.`DateOnly`) + 36159) - @DayNumber) = 5 +"""); + } + + public override async Task FromDateTime() + { + await base.FromDateTime(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEVALUE(`b`.`DateTime`) = #1998-05-04# +"""); + } + + public override async Task FromDateTime_compared_to_property() + { + await base.FromDateTime_compared_to_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEVALUE(`b`.`DateTime`) = `b`.`DateOnly` +"""); + } + + public override async Task FromDateTime_compared_to_constant_and_parameter() + { + await base.FromDateTime_compared_to_constant_and_parameter(); + + AssertSql( + """ +@dateOnly='0002-10-11T00:00:00.0000000' (DbType = Date) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEVALUE(`b`.`DateTime`) IN (@dateOnly, #1998-05-04#) +"""); + } + + public override async Task ToDateTime_property_with_constant_TimeOnly() + { + await base.ToDateTime_property_with_constant_TimeOnly(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (DateSerial(DATEPART('yyyy', `b`.`DateOnly`), DATEPART('m', `b`.`DateOnly`), DATEPART('d', `b`.`DateOnly`)) + TimeSerial(21, 5, 19)) = #2020-01-01 21:05:19# +"""); + } + + public override async Task ToDateTime_property_with_property_TimeOnly() + { + await base.ToDateTime_property_with_property_TimeOnly(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (DateSerial(DATEPART('yyyy', `b`.`DateOnly`), DATEPART('m', `b`.`DateOnly`), DATEPART('d', `b`.`DateOnly`)) + TimeSerial(DATEPART('h', `b`.`TimeOnly`), DATEPART('n', `b`.`TimeOnly`), DATEPART('s', `b`.`TimeOnly`))) = #2020-01-01 15:30:10# +"""); + } + + public override async Task ToDateTime_constant_DateTime_with_property_TimeOnly() + { + await base.ToDateTime_constant_DateTime_with_property_TimeOnly(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (DateSerial(1990, 11, 10) + TimeSerial(DATEPART('h', `b`.`TimeOnly`), DATEPART('n', `b`.`TimeOnly`), DATEPART('s', `b`.`TimeOnly`))) = #1990-11-10 15:30:10# +"""); + } + + public override async Task ToDateTime_with_complex_DateTime() + { + await AssertTranslationFailed(() => base.ToDateTime_with_complex_DateTime()); + + AssertSql(); + } + + public override async Task ToDateTime_with_complex_TimeOnly() + { + await AssertTranslationFailed(() => base.ToDateTime_with_complex_TimeOnly()); + + AssertSql(); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/DateTimeOffsetTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/DateTimeOffsetTranslationsLibRedTest.cs new file mode 100644 index 00000000..2670076c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/DateTimeOffsetTranslationsLibRedTest.cs @@ -0,0 +1,311 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Temporal; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Temporal; + +public class DateTimeOffsetTranslationsLibRedTest : DateTimeOffsetTranslationsTestBase +{ + public DateTimeOffsetTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Now() + { + await base.Now(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTimeOffset` <> NOW() +"""); + } + + public override async Task UtcNow() + { + await base.UtcNow(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTimeOffset` <> DATEADD('n', -480.0, NOW()) +"""); + } + + public override async Task Date() + { + await base.Date(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEVALUE(`b`.`DateTimeOffset`) > #0100-01-01# +"""); + } + + public override async Task Year() + { + await base.Year(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('yyyy', `b`.`DateTimeOffset`) = 1998 +"""); + } + + public override async Task Month() + { + await base.Month(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('m', `b`.`DateTimeOffset`) = 5 +"""); + } + + public override async Task DayOfYear() + { + await base.DayOfYear(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('y', `b`.`DateTimeOffset`) = 124 +"""); + } + + public override async Task Day() + { + await base.Day(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('d', `b`.`DateTimeOffset`) = 4 +"""); + } + + public override async Task Hour() + { + await base.Hour(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('h', `b`.`DateTimeOffset`) = 15 +"""); + } + + public override async Task Minute() + { + await base.Minute(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('n', `b`.`DateTimeOffset`) = 30 +"""); + } + + public override async Task Second() + { + await base.Second(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('s', `b`.`DateTimeOffset`) = 10 +"""); + } + + public override async Task Millisecond() + { + await base.Millisecond(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(millisecond, [b].[DateTimeOffset]) = 123 +"""); + } + + public override async Task Microsecond() + { + await base.Microsecond(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(microsecond, [b].[DateTimeOffset]) % 1000 = 456 +"""); + } + + public override async Task Nanosecond() + { + await base.Nanosecond(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(nanosecond, [b].[DateTimeOffset]) % 1000 = 400 +"""); + } + + public override async Task TimeOfDay() + { + await base.TimeOfDay(); + + AssertSql( + """ +SELECT TIMEVALUE(`b`.`DateTimeOffset`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task AddYears() + { + await base.AddYears(); + + AssertSql( + """ +SELECT DATEADD('yyyy', 1, `b`.`DateTimeOffset`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task AddMonths() + { + await base.AddMonths(); + + AssertSql( + """ +SELECT DATEADD('m', 1, `b`.`DateTimeOffset`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task AddDays() + { + await base.AddDays(); + + AssertSql( + """ +SELECT DATEADD('d', 1.0, `b`.`DateTimeOffset`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task AddHours() + { + await base.AddHours(); + + AssertSql( + """ +SELECT DATEADD('h', 1.0, `b`.`DateTimeOffset`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task AddMinutes() + { + await base.AddMinutes(); + + AssertSql( + """ +SELECT DATEADD('n', 1.0, `b`.`DateTimeOffset`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task AddSeconds() + { + await base.AddSeconds(); + + AssertSql( + """ +SELECT DATEADD('s', 1.0, `b`.`DateTimeOffset`) +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task AddMilliseconds() + { + await base.AddMilliseconds(); + + AssertSql( + """ +SELECT `b`.`DateTimeOffset` +FROM `BasicTypesEntities` AS `b` +"""); + } + + public override async Task ToUnixTimeMilliseconds() + { + await base.ToUnixTimeMilliseconds(); + + AssertSql( + """ +@unixEpochMilliseconds='894295810000' + +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEDIFF_BIG(millisecond, '1970-01-01T00:00:00.0000000+00:00', [b].[DateTimeOffset]) = @unixEpochMilliseconds +"""); + } + + public override async Task ToUnixTimeSecond() + { + await base.ToUnixTimeSecond(); + + AssertSql( + """ +@unixEpochSeconds='894295810' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEDIFF('s', CDATE('1970-01-01 00:00:00'), `b`.`DateTimeOffset`) = @unixEpochSeconds +"""); + } + + public override async Task Milliseconds_parameter_and_constant() + { + await base.Milliseconds_parameter_and_constant(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTimeOffset` = CDATE('1902-01-02 08:30:00') +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/DateTimeTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/DateTimeTranslationsLibRedTest.cs new file mode 100644 index 00000000..715aa6d8 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/DateTimeTranslationsLibRedTest.cs @@ -0,0 +1,258 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Temporal; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Globalization; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Temporal; + +public class DateTimeTranslationsLibRedTest : DateTimeTranslationsTestBase +{ + public DateTimeTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Now() + { + await base.Now(); + + AssertSql( + """ +@myDatetime='2015-04-10T00:00:00.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE NOW() <> CDATE(@myDatetime) +"""); + } + + public override async Task UtcNow() + { + await base.UtcNow(); + + AssertSql( + """ +@myDatetime='2015-04-10T00:00:00.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEADD('n', -480.0, NOW()) <> CDATE(@myDatetime) +"""); + } + + public override async Task Today() + { + await base.Today(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` = DATEVALUE(DATE()) +"""); + } + + public override async Task Date() + { + await base.Date(); + + AssertSql( + """ +@myDatetime='1998-05-04T00:00:00.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEVALUE(`b`.`DateTime`) = CDATE(@myDatetime) +"""); + } + + public override async Task AddYear() + { + await base.AddYear(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('yyyy', DATEADD('yyyy', 1, `b`.`DateTime`)) = 1999 +"""); + } + + public override async Task Year() + { + await base.Year(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('yyyy', `b`.`DateTime`) = 1998 +"""); + } + + public override async Task Month() + { + await base.Month(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('m', `b`.`DateTime`) = 5 +"""); + } + + public override async Task DayOfYear() + { + await base.DayOfYear(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('y', `b`.`DateTime`) = 124 +"""); + } + + public override async Task Day() + { + await base.Day(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('d', `b`.`DateTime`) = 4 +"""); + } + + public override async Task Hour() + { + await base.Hour(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('h', `b`.`DateTime`) = 15 +"""); + } + + public override async Task Minute() + { + await base.Minute(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('n', `b`.`DateTime`) = 30 +"""); + } + + public override async Task Second() + { + await base.Second(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('s', `b`.`DateTime`) = 10 +"""); + } + + public override async Task Millisecond() + { + await base.Millisecond(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(millisecond, [b].[DateTime]) = 123 +"""); + } + + public override async Task TimeOfDay() + { + await base.TimeOfDay(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TIMEVALUE(`b`.`DateTime`) = TIMEVALUE('00:00:00') +"""); + } + + public override Task subtract_and_TotalDays() + => AssertTranslationFailed(() => base.subtract_and_TotalDays()); + + public override async Task Parse_with_constant() + { + var t = CultureInfo.CurrentCulture; + await base.Parse_with_constant(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` = #1998-05-04 15:30:10# +"""); + } + + public override async Task Parse_with_parameter() + { + await base.Parse_with_parameter(); + + AssertSql( + """ +@Parse='1998-05-04T15:30:10.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` = CDATE(@Parse) +"""); + } + + public override async Task New_with_constant() + { + await base.New_with_constant(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` = #1998-05-04 15:30:10# +"""); + } + + public override async Task New_with_parameters() + { + await base.New_with_parameters(); + + AssertSql( + """ +@p='1998-05-04T15:30:10.0000000' (DbType = DateTime) + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE `b`.`DateTime` = CDATE(@p) +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/TimeOnlyTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/TimeOnlyTranslationsLibRedTest.cs new file mode 100644 index 00000000..8e4e138c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/TimeOnlyTranslationsLibRedTest.cs @@ -0,0 +1,225 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Temporal; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Temporal; + +public class TimeOnlyTranslationsLibRedTest : TimeOnlyTranslationsTestBase +{ + public TimeOnlyTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Hour() + { + await base.Hour(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('h', `b`.`TimeOnly`) = 15 +"""); + } + + public override async Task Minute() + { + await base.Minute(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('n', `b`.`TimeOnly`) = 30 +"""); + } + + public override async Task Second() + { + await base.Second(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('s', `b`.`TimeOnly`) = 10 +"""); + } + + public override async Task Millisecond() + { + await base.Millisecond(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(millisecond, [b].[TimeOnly]) = 123 +"""); + } + + public override async Task Microsecond() + { + await base.Microsecond(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(microsecond, [b].[TimeOnly]) % 1000 = 456 +"""); + } + + public override async Task Nanosecond() + { + await base.Nanosecond(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(nanosecond, [b].[TimeOnly]) % 1000 = 400 +"""); + } + + public override async Task AddHours() + { + await base.AddHours(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TIMEVALUE(DATEADD('h', CLNG(3.0), `b`.`TimeOnly`)) = TIMEVALUE('18:30:10') +"""); + } + + public override async Task AddMinutes() + { + await base.AddMinutes(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TIMEVALUE(DATEADD('n', CLNG(3.0), `b`.`TimeOnly`)) = TIMEVALUE('15:33:10') +"""); + } + + public override async Task Add_TimeSpan() + { + await AssertTranslationFailed(() => base.Add_TimeSpan()); + + AssertSql(); + } + + public override async Task IsBetween() + { + await base.IsBetween(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE (`b`.`TimeOnly` >= TIMEVALUE('14:00:00')) BAND (`b`.`TimeOnly` < TIMEVALUE('16:00:00')) +"""); + } + + public override async Task Subtract() + { + await AssertTranslationFailed(() => base.Subtract()); + + AssertSql(); + } + + public override async Task FromDateTime_compared_to_property() + { + await base.FromDateTime_compared_to_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TIMEVALUE(`b`.`DateTime`) = `b`.`TimeOnly` +"""); + } + + public override async Task FromDateTime_compared_to_parameter() + { + await base.FromDateTime_compared_to_parameter(); + + AssertSql( + """ +@time='15:30:10' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TIMEVALUE(`b`.`DateTime`) = TIMEVALUE(@time) +"""); + } + + public override async Task FromDateTime_compared_to_constant() + { + await base.FromDateTime_compared_to_constant(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TIMEVALUE(`b`.`DateTime`) = TIMEVALUE('15:30:10') +"""); + } + + public override async Task FromTimeSpan_compared_to_property() + { + await base.FromTimeSpan_compared_to_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TIMEVALUE(`b`.`TimeSpan`) < `b`.`TimeOnly` +"""); + } + + public override async Task FromTimeSpan_compared_to_parameter() + { + await base.FromTimeSpan_compared_to_parameter(); + + AssertSql( + """ +@time='01:02:03' + +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE TIMEVALUE(`b`.`TimeSpan`) = TIMEVALUE(@time) +"""); + } + + public override async Task Order_by_FromTimeSpan() + { + await base.Order_by_FromTimeSpan(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +ORDER BY TIMEVALUE(`b`.`TimeSpan`) +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/TimeSpanTranslationsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/TimeSpanTranslationsLibRedTest.cs new file mode 100644 index 00000000..829567ac --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/Translations/Temporal/TimeSpanTranslationsLibRedTest.cs @@ -0,0 +1,99 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Translations.Temporal; +using Microsoft.EntityFrameworkCore.TestUtilities; +using System.Threading.Tasks; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query.Translations.Temporal; + +public class TimeSpanTranslationsLibRedTest : TimeSpanTranslationsTestBase +{ + public TimeSpanTranslationsLibRedTest(BasicTypesQueryLibRedFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Hours() + { + await base.Hours(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('h', `b`.`TimeSpan`) = 3 +"""); + } + + public override async Task Minutes() + { + await base.Minutes(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('n', `b`.`TimeSpan`) = 4 +"""); + } + + public override async Task Seconds() + { + await base.Seconds(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Bool`, `b`.`Byte`, `b`.`ByteArray`, `b`.`DateOnly`, `b`.`DateTime`, `b`.`DateTimeOffset`, `b`.`Decimal`, `b`.`Double`, `b`.`Enum`, `b`.`FlagsEnum`, `b`.`Float`, `b`.`Guid`, `b`.`Int`, `b`.`Long`, `b`.`Short`, `b`.`String`, `b`.`TimeOnly`, `b`.`TimeSpan` +FROM `BasicTypesEntities` AS `b` +WHERE DATEPART('s', `b`.`TimeSpan`) = 5 +"""); + } + + public override async Task Milliseconds() + { + await base.Milliseconds(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(millisecond, [b].[TimeSpan]) = 678 +"""); + } + + public override async Task Microseconds() + { + await base.Microseconds(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(microsecond, [b].[TimeSpan]) % 1000 = 912 +"""); + } + + public override async Task Nanoseconds() + { + await base.Nanoseconds(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Bool], [b].[Byte], [b].[ByteArray], [b].[DateOnly], [b].[DateTime], [b].[DateTimeOffset], [b].[Decimal], [b].[Double], [b].[Enum], [b].[FlagsEnum], [b].[Float], [b].[Guid], [b].[Int], [b].[Long], [b].[Short], [b].[String], [b].[TimeOnly], [b].[TimeSpan] +FROM [BasicTypesEntities] AS [b] +WHERE DATEPART(nanosecond, [b].[TimeSpan]) % 1000 = 400 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Query/WarningsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Query/WarningsLibRedTest.cs new file mode 100644 index 00000000..4581c400 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Query/WarningsLibRedTest.cs @@ -0,0 +1,10 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Query +{ + public class WarningsLibRedTest(NorthwindQueryLibRedFixture fixture) + : WarningsTestBase>(fixture); +} diff --git a/test/EFCore.LibRed.FunctionalTests/QueryExpressionInterceptionLibRedTestBase.cs b/test/EFCore.LibRed.FunctionalTests/QueryExpressionInterceptionLibRedTestBase.cs new file mode 100644 index 00000000..2678f2b3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/QueryExpressionInterceptionLibRedTestBase.cs @@ -0,0 +1,66 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public abstract class QueryExpressionInterceptionLibRedTestBase( + QueryExpressionInterceptionLibRedTestBase.InterceptionLibRedFixtureBase fixture) + : QueryExpressionInterceptionTestBase(fixture) +{ + public abstract class InterceptionLibRedFixtureBase : InterceptionFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override IServiceCollection InjectInterceptors( + IServiceCollection serviceCollection, + IEnumerable injectedInterceptors) + => base.InjectInterceptors(serviceCollection.AddEntityFrameworkLibRed(), injectedInterceptors); + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + new LibRedDbContextOptionsBuilder(base.AddOptions(builder)) + .ExecutionStrategy(d => new LibRedExecutionStrategy(d)); + return builder; + } + } + + public class QueryExpressionInterceptionLibRedTest(QueryExpressionInterceptionLibRedTest.InterceptionLibRedFixture fixture) + : QueryExpressionInterceptionLibRedTestBase(fixture), + IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override string StoreName + => "QueryExpressionInterception"; + + protected override bool ShouldSubscribeToDiagnosticListener + => false; + } + } + + public class QueryExpressionInterceptionWithDiagnosticsLibRedTest( + QueryExpressionInterceptionWithDiagnosticsLibRedTest.InterceptionLibRedFixture fixture) + : QueryExpressionInterceptionLibRedTestBase(fixture), + IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override string StoreName + => "QueryExpressionInterceptionWithDiagnostics"; + + protected override bool ShouldSubscribeToDiagnosticListener + => true; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/SaveChangesInterceptionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/SaveChangesInterceptionLibRedTest.cs new file mode 100644 index 00000000..4aa50f00 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/SaveChangesInterceptionLibRedTest.cs @@ -0,0 +1,210 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + + +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Threading; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; +#nullable disable +public abstract class SaveChangesInterceptionLibRedTestBase( + SaveChangesInterceptionLibRedTestBase.InterceptionLibRedFixtureBase fixture) + : SaveChangesInterceptionTestBase(fixture) +{ + [ConditionalTheory] + [InlineData(false, false, false)] + [InlineData(true, false, false)] + [InlineData(false, true, false)] + [InlineData(true, true, false)] + [InlineData(false, false, true)] + [InlineData(true, false, true)] + [InlineData(false, true, true)] + [InlineData(true, true, true)] + public virtual async Task Intercept_concurrency_with_relational_specific_data(bool async, bool inject, bool noAcceptChanges) + { + var saveChangesInterceptor = new RelationalConcurrencySaveChangesInterceptor(); + var commandInterceptor = new TestCommandInterceptor(); + + var context = await CreateContextAsync(saveChangesInterceptor, commandInterceptor); + + using var _ = context; + + using var transaction = context.Database.BeginTransaction(); + + var entry = context.Entry(new Singularity { Id = 35, Type = "Red Dwarf" }); + entry.State = EntityState.Modified; + + using var listener = Fixture.SubscribeToDiagnosticListener(context.ContextId); + + Exception thrown = null; + + try + { + var __ = noAcceptChanges + ? async + ? await context.SaveChangesAsync() + : context.SaveChanges() + : async + ? await context.SaveChangesAsync(acceptAllChangesOnSuccess: false) + : context.SaveChanges(acceptAllChangesOnSuccess: false); + } + catch (Exception e) + { + thrown = e; + } + + Assert.Equal(async, saveChangesInterceptor.AsyncCalled); + Assert.NotEqual(async, saveChangesInterceptor.SyncCalled); + Assert.NotEqual(saveChangesInterceptor.AsyncCalled, saveChangesInterceptor.SyncCalled); + Assert.False(saveChangesInterceptor.FailedCalled); + Assert.Same(context, saveChangesInterceptor.Context); + Assert.Same(thrown, saveChangesInterceptor.Exception); + + Assert.True(saveChangesInterceptor.ConcurrencyExceptionCalled); + Assert.Equal(1, saveChangesInterceptor.Entries.Count); + Assert.Same(entry.Entity, saveChangesInterceptor.Entries[0].Entity); + + Assert.Same(commandInterceptor.Connection, saveChangesInterceptor.Connection); + Assert.Same(commandInterceptor.Command, saveChangesInterceptor.Command); + Assert.Same(commandInterceptor.DataReader, saveChangesInterceptor.DataReader); + Assert.Equal(commandInterceptor.ConnectionId, saveChangesInterceptor.ConnectionId); + Assert.Equal(commandInterceptor.CommandId, saveChangesInterceptor.CommandId); + } + + protected class RelationalConcurrencySaveChangesInterceptor : SaveChangesInterceptorBase + { + public DbConnection Connection { get; set; } + public DbCommand Command { get; set; } + public DbDataReader DataReader { get; set; } + public Guid CommandId { get; set; } + public Guid ConnectionId { get; set; } + + public override InterceptionResult ThrowingConcurrencyException(ConcurrencyExceptionEventData eventData, InterceptionResult result) + { + RecordEventData((RelationalConcurrencyExceptionEventData)eventData); + + return base.ThrowingConcurrencyException(eventData, result); + } + + public override ValueTask ThrowingConcurrencyExceptionAsync( + ConcurrencyExceptionEventData eventData, + InterceptionResult result, + CancellationToken cancellationToken = default) + { + RecordEventData((RelationalConcurrencyExceptionEventData)eventData); + + return base.ThrowingConcurrencyExceptionAsync(eventData, result, cancellationToken); + } + + private void RecordEventData(RelationalConcurrencyExceptionEventData eventData) + { + Assert.NotNull(eventData.Connection); + Assert.NotNull(eventData.Command); + Assert.NotNull(eventData.DataReader); + + DataReader = eventData.DataReader; + Command = eventData.Command; + Connection = eventData.Connection; + ConnectionId = eventData.ConnectionId; + CommandId = eventData.CommandId; + } + } + + protected class TestCommandInterceptor : IDbCommandInterceptor + { + public DbConnection Connection { get; set; } + public DbCommand Command { get; set; } + public DbDataReader DataReader { get; set; } + public Guid CommandId { get; set; } + public Guid ConnectionId { get; set; } + + public virtual DbDataReader ReaderExecuted( + DbCommand command, + CommandExecutedEventData eventData, + DbDataReader result) + { + RecordEventData(command, eventData, result); + + return result; + } + + public virtual ValueTask ReaderExecutedAsync( + DbCommand command, + CommandExecutedEventData eventData, + DbDataReader result, + CancellationToken cancellationToken = default) + { + RecordEventData(command, eventData, result); + + return ValueTask.FromResult(result); + } + + private void RecordEventData(DbCommand command, CommandExecutedEventData eventData, DbDataReader result) + { + DataReader = result; + Command = command; + Connection = command.Connection; + ConnectionId = eventData.ConnectionId; + CommandId = eventData.CommandId; + } + } + + public abstract class InterceptionLibRedFixtureBase : InterceptionFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override IServiceCollection InjectInterceptors( + IServiceCollection serviceCollection, + IEnumerable injectedInterceptors) + => base.InjectInterceptors(serviceCollection.AddEntityFrameworkLibRed(), injectedInterceptors); + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + new LibRedDbContextOptionsBuilder(base.AddOptions(builder)) + .ExecutionStrategy(d => new LibRedExecutionStrategy(d)); + return builder; + } + } + + public class SaveChangesInterceptionLibRedTest(SaveChangesInterceptionLibRedTest.InterceptionLibRedFixture fixture) + : SaveChangesInterceptionLibRedTestBase(fixture), + IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override string StoreName + => "SaveChangesInterception"; + + protected override bool ShouldSubscribeToDiagnosticListener + => false; + } + } + + public class SaveChangesInterceptionWithDiagnosticsLibRedTest( + SaveChangesInterceptionWithDiagnosticsLibRedTest.InterceptionLibRedFixture fixture) + : SaveChangesInterceptionLibRedTestBase(fixture), + IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override string StoreName + => "SaveChangesInterceptionWithDiagnostics"; + + protected override bool ShouldSubscribeToDiagnosticListener + => true; + } + } +} + \ No newline at end of file diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DbContextModelBuilder.cs new file mode 100644 index 00000000..22893740 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DbContextModelBuilder.cs @@ -0,0 +1,2930 @@ +// +using System; +using System.Collections.Generic; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Update.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 8) + { + } + + partial void Initialize() + { + var dependentBase = DependentBaseEntityType.Create(this); + var manyTypes = ManyTypesEntityType.Create(this); + var principalBase = PrincipalBaseEntityType.Create(this); + var ownedType = OwnedTypeEntityType.Create(this); + var ownedType0 = OwnedType0EntityType.Create(this); + var principalBasePrincipalDerivedDependentBasebyte = PrincipalBasePrincipalDerivedDependentBasebyteEntityType.Create(this); + var dependentDerived = DependentDerivedEntityType.Create(this, dependentBase); + var principalDerived = PrincipalDerivedEntityType.Create(this, principalBase); + + DependentBaseEntityType.CreateForeignKey1(dependentBase, principalBase); + DependentBaseEntityType.CreateForeignKey2(dependentBase, principalDerived); + OwnedTypeEntityType.CreateForeignKey1(ownedType, principalBase); + OwnedTypeEntityType.CreateForeignKey2(ownedType, ownedType); + OwnedType0EntityType.CreateForeignKey1(ownedType0, principalDerived); + PrincipalBasePrincipalDerivedDependentBasebyteEntityType.CreateForeignKey1(principalBasePrincipalDerivedDependentBasebyte, principalDerived); + PrincipalBasePrincipalDerivedDependentBasebyteEntityType.CreateForeignKey2(principalBasePrincipalDerivedDependentBasebyte, principalBase); + PrincipalDerivedEntityType.CreateForeignKey1(principalDerived, principalBase); + + PrincipalBaseEntityType.CreateSkipNavigation1(principalBase, principalDerived, principalBasePrincipalDerivedDependentBasebyte); + PrincipalDerivedEntityType.CreateSkipNavigation1(principalDerived, principalBase, principalBasePrincipalDerivedDependentBasebyte); + + DependentBaseEntityType.CreateAnnotations(dependentBase); + ManyTypesEntityType.CreateAnnotations(manyTypes); + PrincipalBaseEntityType.CreateAnnotations(principalBase); + OwnedTypeEntityType.CreateAnnotations(ownedType); + OwnedType0EntityType.CreateAnnotations(ownedType0); + PrincipalBasePrincipalDerivedDependentBasebyteEntityType.CreateAnnotations(principalBasePrincipalDerivedDependentBasebyte); + DependentDerivedEntityType.CreateAnnotations(dependentDerived); + PrincipalDerivedEntityType.CreateAnnotations(principalDerived); + + AddAnnotation("Jet:IdentityIncrement", 2); + AddAnnotation("Jet:IdentitySeed", 3); + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + + var dependentBase = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase")!; + + var defaultTableMappings = new List>(); + dependentBase.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", null, relationalModel); + var dataColumnBase = new ColumnBase("Data", "char(20)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Data", dataColumnBase); + var enumDiscriminatorColumnBase = new ColumnBase("EnumDiscriminator", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("EnumDiscriminator", enumDiscriminatorColumnBase); + var idColumnBase = new ColumnBase("Id", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Id", idColumnBase); + var moneyColumnBase = new ColumnBase("Money", "decimal(9,3)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Money", moneyColumnBase); + var principalAlternateIdColumnBase = new ColumnBase("PrincipalAlternateId", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("PrincipalAlternateId", principalAlternateIdColumnBase); + var principalIdColumnBase = new ColumnBase("PrincipalId", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("PrincipalId", principalIdColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase = new TableMappingBase(dependentBase, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase, true); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase, false); + defaultTableMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalAlternateIdColumnBase, dependentBase.FindProperty("PrincipalAlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalIdColumnBase, dependentBase.FindProperty("PrincipalId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumDiscriminatorColumnBase, dependentBase.FindProperty("EnumDiscriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, dependentBase.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + + var tableMappings = new List(); + dependentBase.SetRuntimeAnnotation("Relational:TableMappings", tableMappings); + var dependentBasebyteTable = new Table("DependentBase", null, relationalModel); + var principalIdColumn = new Column("PrincipalId", "integer", dependentBasebyteTable); + dependentBasebyteTable.Columns.Add("PrincipalId", principalIdColumn); + principalIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalIdColumn); + var principalAlternateIdColumn = new Column("PrincipalAlternateId", "uniqueidentifier", dependentBasebyteTable); + dependentBasebyteTable.Columns.Add("PrincipalAlternateId", principalAlternateIdColumn); + principalAlternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalAlternateIdColumn); + var dataColumn = new Column("Data", "char(20)", dependentBasebyteTable) + { + IsNullable = true + }; + dependentBasebyteTable.Columns.Add("Data", dataColumn); + dataColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dataColumn); + var enumDiscriminatorColumn = new Column("EnumDiscriminator", "integer", dependentBasebyteTable); + dependentBasebyteTable.Columns.Add("EnumDiscriminator", enumDiscriminatorColumn); + enumDiscriminatorColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumDiscriminatorColumn); + var idColumn = new Column("Id", "byte", dependentBasebyteTable) + { + IsNullable = true + }; + dependentBasebyteTable.Columns.Add("Id", idColumn); + idColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn); + var moneyColumn = new Column("Money", "decimal(9,3)", dependentBasebyteTable) + { + IsNullable = true + }; + dependentBasebyteTable.Columns.Add("Money", moneyColumn); + moneyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(moneyColumn); + relationalModel.Tables.Add(("DependentBase", null), dependentBasebyteTable); + var dependentBasebyteTableMapping = new TableMapping(dependentBase, dependentBasebyteTable, true) + { + IsSharedTablePrincipal = true, + }; + dependentBasebyteTable.AddTypeMapping(dependentBasebyteTableMapping, false); + tableMappings.Add(dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(principalAlternateIdColumn, dependentBase.FindProperty("PrincipalAlternateId")!, dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(principalIdColumn, dependentBase.FindProperty("PrincipalId")!, dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(enumDiscriminatorColumn, dependentBase.FindProperty("EnumDiscriminator")!, dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(idColumn, dependentBase.FindProperty("Id")!, dependentBasebyteTableMapping); + + var dependentDerived = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived")!; + + var defaultTableMappings0 = new List>(); + dependentDerived.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings0); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0 = new TableMappingBase(dependentDerived, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0, false); + defaultTableMappings0.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)principalAlternateIdColumnBase, dependentDerived.FindProperty("PrincipalAlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)principalIdColumnBase, dependentDerived.FindProperty("PrincipalId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)dataColumnBase, dependentDerived.FindProperty("Data")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)enumDiscriminatorColumnBase, dependentDerived.FindProperty("EnumDiscriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, dependentDerived.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)moneyColumnBase, dependentDerived.FindProperty("Money")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + + var tableMappings0 = new List(); + dependentDerived.SetRuntimeAnnotation("Relational:TableMappings", tableMappings0); + var dependentBasebyteTableMapping0 = new TableMapping(dependentDerived, dependentBasebyteTable, null) + { + IsSharedTablePrincipal = false, + }; + dependentBasebyteTable.AddTypeMapping(dependentBasebyteTableMapping0, false); + tableMappings0.Add(dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(principalAlternateIdColumn, dependentDerived.FindProperty("PrincipalAlternateId")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(principalIdColumn, dependentDerived.FindProperty("PrincipalId")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(dataColumn, dependentDerived.FindProperty("Data")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(enumDiscriminatorColumn, dependentDerived.FindProperty("EnumDiscriminator")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(idColumn, dependentDerived.FindProperty("Id")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(moneyColumn, dependentDerived.FindProperty("Money")!, dependentBasebyteTableMapping0); + var pK_DependentBasebyte = new UniqueConstraint("PK_DependentBase", dependentBasebyteTable, new[] { principalIdColumn, principalAlternateIdColumn }); + dependentBasebyteTable.PrimaryKey = pK_DependentBasebyte; + pK_DependentBasebyte.SetRowKeyValueFactory(new CompositeRowKeyValueFactory(pK_DependentBasebyte)); + var pK_DependentBasebyteKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId", "PrincipalAlternateId" }); + pK_DependentBasebyte.MappedKeys.Add(pK_DependentBasebyteKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_DependentBasebyteKey).Add(pK_DependentBasebyte); + dependentBasebyteTable.UniqueConstraints.Add("PK_DependentBase", pK_DependentBasebyte); + var iX_DependentBasebyte_PrincipalId = new TableIndex( + "IX_DependentBase_PrincipalId", dependentBasebyteTable, new[] { principalIdColumn }, true); + iX_DependentBasebyte_PrincipalId.SetRowIndexValueFactory(new SimpleRowIndexValueFactory(iX_DependentBasebyte_PrincipalId)); + var iX_DependentBasebyte_PrincipalIdIx = RelationalModel.GetIndex(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId" }); + iX_DependentBasebyte_PrincipalId.MappedIndexes.Add(iX_DependentBasebyte_PrincipalIdIx); + RelationalModel.GetOrCreateTableIndexes(iX_DependentBasebyte_PrincipalIdIx).Add(iX_DependentBasebyte_PrincipalId); + dependentBasebyteTable.Indexes.Add("IX_DependentBase_PrincipalId", iX_DependentBasebyte_PrincipalId); + + var manyTypes = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes")!; + + var defaultTableMappings1 = new List>(); + manyTypes.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings1); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes", null, relationalModel); + var boolColumnBase = new ColumnBase("Bool", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Bool", boolColumnBase); + var boolArrayColumnBase = new ColumnBase("BoolArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolArray", boolArrayColumnBase); + var boolReadOnlyCollectionColumnBase = new ColumnBase("BoolReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolReadOnlyCollection", boolReadOnlyCollectionColumnBase); + var boolToStringConverterPropertyColumnBase = new ColumnBase("BoolToStringConverterProperty", "varchar(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolToStringConverterProperty", boolToStringConverterPropertyColumnBase); + var boolToTwoValuesConverterPropertyColumnBase = new ColumnBase("BoolToTwoValuesConverterProperty", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolToTwoValuesConverterProperty", boolToTwoValuesConverterPropertyColumnBase); + var boolToZeroOneConverterPropertyColumnBase = new ColumnBase("BoolToZeroOneConverterProperty", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolToZeroOneConverterProperty", boolToZeroOneConverterPropertyColumnBase); + var bytesColumnBase = new ColumnBase("Bytes", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Bytes", bytesColumnBase); + var bytesArrayColumnBase = new ColumnBase("BytesArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BytesArray", bytesArrayColumnBase); + var bytesToStringConverterPropertyColumnBase = new ColumnBase("BytesToStringConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BytesToStringConverterProperty", bytesToStringConverterPropertyColumnBase); + var castingConverterPropertyColumnBase = new ColumnBase("CastingConverterProperty", "decimal(18,2)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("CastingConverterProperty", castingConverterPropertyColumnBase); + var charColumnBase = new ColumnBase("Char", "varchar(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Char", charColumnBase); + var charArrayColumnBase = new ColumnBase("CharArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("CharArray", charArrayColumnBase); + var charToStringConverterPropertyColumnBase = new ColumnBase("CharToStringConverterProperty", "char(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("CharToStringConverterProperty", charToStringConverterPropertyColumnBase); + var dateOnlyColumnBase = new ColumnBase("DateOnly", "date", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateOnly", dateOnlyColumnBase); + var dateOnlyArrayColumnBase = new ColumnBase("DateOnlyArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateOnlyArray", dateOnlyArrayColumnBase); + var dateOnlyToStringConverterPropertyColumnBase = new ColumnBase("DateOnlyToStringConverterProperty", "varchar(10)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateOnlyToStringConverterProperty", dateOnlyToStringConverterPropertyColumnBase); + var dateTimeColumnBase = new ColumnBase("DateTime", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTime", dateTimeColumnBase); + var dateTimeArrayColumnBase = new ColumnBase("DateTimeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeArray", dateTimeArrayColumnBase); + var dateTimeOffsetToBinaryConverterPropertyColumnBase = new ColumnBase("DateTimeOffsetToBinaryConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeOffsetToBinaryConverterProperty", dateTimeOffsetToBinaryConverterPropertyColumnBase); + var dateTimeOffsetToBytesConverterPropertyColumnBase = new ColumnBase("DateTimeOffsetToBytesConverterProperty", "varbinary(12)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeOffsetToBytesConverterProperty", dateTimeOffsetToBytesConverterPropertyColumnBase); + var dateTimeOffsetToStringConverterPropertyColumnBase = new ColumnBase("DateTimeOffsetToStringConverterProperty", "varchar(48)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeOffsetToStringConverterProperty", dateTimeOffsetToStringConverterPropertyColumnBase); + var dateTimeToBinaryConverterPropertyColumnBase = new ColumnBase("DateTimeToBinaryConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeToBinaryConverterProperty", dateTimeToBinaryConverterPropertyColumnBase); + var dateTimeToStringConverterPropertyColumnBase = new ColumnBase("DateTimeToStringConverterProperty", "varchar(48)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeToStringConverterProperty", dateTimeToStringConverterPropertyColumnBase); + var dateTimeToTicksConverterPropertyColumnBase = new ColumnBase("DateTimeToTicksConverterProperty", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeToTicksConverterProperty", dateTimeToTicksConverterPropertyColumnBase); + var decimalColumnBase = new ColumnBase("Decimal", "decimal(18,2)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Decimal", decimalColumnBase); + var decimalArrayColumnBase = new ColumnBase("DecimalArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DecimalArray", decimalArrayColumnBase); + var decimalNumberToBytesConverterPropertyColumnBase = new ColumnBase("DecimalNumberToBytesConverterProperty", "varbinary(16)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DecimalNumberToBytesConverterProperty", decimalNumberToBytesConverterPropertyColumnBase); + var decimalNumberToStringConverterPropertyColumnBase = new ColumnBase("DecimalNumberToStringConverterProperty", "varchar(64)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DecimalNumberToStringConverterProperty", decimalNumberToStringConverterPropertyColumnBase); + var doubleColumnBase = new ColumnBase("Double", "double", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Double", doubleColumnBase); + var doubleArrayColumnBase = new ColumnBase("DoubleArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DoubleArray", doubleArrayColumnBase); + var doubleNumberToBytesConverterPropertyColumnBase = new ColumnBase("DoubleNumberToBytesConverterProperty", "varbinary(8)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DoubleNumberToBytesConverterProperty", doubleNumberToBytesConverterPropertyColumnBase); + var doubleNumberToStringConverterPropertyColumnBase = new ColumnBase("DoubleNumberToStringConverterProperty", "varchar(64)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DoubleNumberToStringConverterProperty", doubleNumberToStringConverterPropertyColumnBase); + var enum16ColumnBase = new ColumnBase("Enum16", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16", enum16ColumnBase); + var enum16ArrayColumnBase = new ColumnBase("Enum16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16Array", enum16ArrayColumnBase); + var enum16AsStringColumnBase = new ColumnBase("Enum16AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16AsString", enum16AsStringColumnBase); + var enum16AsStringArrayColumnBase = new ColumnBase("Enum16AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16AsStringArray", enum16AsStringArrayColumnBase); + var enum16AsStringCollectionColumnBase = new ColumnBase("Enum16AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16AsStringCollection", enum16AsStringCollectionColumnBase); + var enum16CollectionColumnBase = new ColumnBase("Enum16Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16Collection", enum16CollectionColumnBase); + var enum32ColumnBase = new ColumnBase("Enum32", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32", enum32ColumnBase); + var enum32ArrayColumnBase = new ColumnBase("Enum32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32Array", enum32ArrayColumnBase); + var enum32AsStringColumnBase = new ColumnBase("Enum32AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32AsString", enum32AsStringColumnBase); + var enum32AsStringArrayColumnBase = new ColumnBase("Enum32AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32AsStringArray", enum32AsStringArrayColumnBase); + var enum32AsStringCollectionColumnBase = new ColumnBase("Enum32AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32AsStringCollection", enum32AsStringCollectionColumnBase); + var enum32CollectionColumnBase = new ColumnBase("Enum32Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32Collection", enum32CollectionColumnBase); + var enum64ColumnBase = new ColumnBase("Enum64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64", enum64ColumnBase); + var enum64ArrayColumnBase = new ColumnBase("Enum64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64Array", enum64ArrayColumnBase); + var enum64AsStringColumnBase = new ColumnBase("Enum64AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64AsString", enum64AsStringColumnBase); + var enum64AsStringArrayColumnBase = new ColumnBase("Enum64AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64AsStringArray", enum64AsStringArrayColumnBase); + var enum64AsStringCollectionColumnBase = new ColumnBase("Enum64AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64AsStringCollection", enum64AsStringCollectionColumnBase); + var enum64CollectionColumnBase = new ColumnBase("Enum64Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64Collection", enum64CollectionColumnBase); + var enum8ColumnBase = new ColumnBase("Enum8", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8", enum8ColumnBase); + var enum8ArrayColumnBase = new ColumnBase("Enum8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8Array", enum8ArrayColumnBase); + var enum8AsStringColumnBase = new ColumnBase("Enum8AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8AsString", enum8AsStringColumnBase); + var enum8AsStringArrayColumnBase = new ColumnBase("Enum8AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8AsStringArray", enum8AsStringArrayColumnBase); + var enum8AsStringCollectionColumnBase = new ColumnBase("Enum8AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8AsStringCollection", enum8AsStringCollectionColumnBase); + var enum8CollectionColumnBase = new ColumnBase("Enum8Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8Collection", enum8CollectionColumnBase); + var enumToNumberConverterPropertyColumnBase = new ColumnBase("EnumToNumberConverterProperty", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumToNumberConverterProperty", enumToNumberConverterPropertyColumnBase); + var enumToStringConverterPropertyColumnBase = new ColumnBase("EnumToStringConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumToStringConverterProperty", enumToStringConverterPropertyColumnBase); + var enumU16ColumnBase = new ColumnBase("EnumU16", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16", enumU16ColumnBase); + var enumU16ArrayColumnBase = new ColumnBase("EnumU16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16Array", enumU16ArrayColumnBase); + var enumU16AsStringColumnBase = new ColumnBase("EnumU16AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16AsString", enumU16AsStringColumnBase); + var enumU16AsStringArrayColumnBase = new ColumnBase("EnumU16AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16AsStringArray", enumU16AsStringArrayColumnBase); + var enumU16AsStringCollectionColumnBase = new ColumnBase("EnumU16AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16AsStringCollection", enumU16AsStringCollectionColumnBase); + var enumU16CollectionColumnBase = new ColumnBase("EnumU16Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16Collection", enumU16CollectionColumnBase); + var enumU32ColumnBase = new ColumnBase("EnumU32", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32", enumU32ColumnBase); + var enumU32ArrayColumnBase = new ColumnBase("EnumU32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32Array", enumU32ArrayColumnBase); + var enumU32AsStringColumnBase = new ColumnBase("EnumU32AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32AsString", enumU32AsStringColumnBase); + var enumU32AsStringArrayColumnBase = new ColumnBase("EnumU32AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32AsStringArray", enumU32AsStringArrayColumnBase); + var enumU32AsStringCollectionColumnBase = new ColumnBase("EnumU32AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32AsStringCollection", enumU32AsStringCollectionColumnBase); + var enumU32CollectionColumnBase = new ColumnBase("EnumU32Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32Collection", enumU32CollectionColumnBase); + var enumU64ColumnBase = new ColumnBase("EnumU64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64", enumU64ColumnBase); + var enumU64ArrayColumnBase = new ColumnBase("EnumU64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64Array", enumU64ArrayColumnBase); + var enumU64AsStringColumnBase = new ColumnBase("EnumU64AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64AsString", enumU64AsStringColumnBase); + var enumU64AsStringArrayColumnBase = new ColumnBase("EnumU64AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64AsStringArray", enumU64AsStringArrayColumnBase); + var enumU64AsStringCollectionColumnBase = new ColumnBase("EnumU64AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64AsStringCollection", enumU64AsStringCollectionColumnBase); + var enumU64CollectionColumnBase = new ColumnBase("EnumU64Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64Collection", enumU64CollectionColumnBase); + var enumU8ColumnBase = new ColumnBase("EnumU8", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8", enumU8ColumnBase); + var enumU8ArrayColumnBase = new ColumnBase("EnumU8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8Array", enumU8ArrayColumnBase); + var enumU8AsStringColumnBase = new ColumnBase("EnumU8AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8AsString", enumU8AsStringColumnBase); + var enumU8AsStringArrayColumnBase = new ColumnBase("EnumU8AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8AsStringArray", enumU8AsStringArrayColumnBase); + var enumU8AsStringCollectionColumnBase = new ColumnBase("EnumU8AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8AsStringCollection", enumU8AsStringCollectionColumnBase); + var enumU8CollectionColumnBase = new ColumnBase("EnumU8Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8Collection", enumU8CollectionColumnBase); + var floatColumnBase = new ColumnBase("Float", "single", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Float", floatColumnBase); + var floatArrayColumnBase = new ColumnBase("FloatArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("FloatArray", floatArrayColumnBase); + var guidColumnBase = new ColumnBase("Guid", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Guid", guidColumnBase); + var guidArrayColumnBase = new ColumnBase("GuidArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("GuidArray", guidArrayColumnBase); + var guidToBytesConverterPropertyColumnBase = new ColumnBase("GuidToBytesConverterProperty", "varbinary(16)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("GuidToBytesConverterProperty", guidToBytesConverterPropertyColumnBase); + var guidToStringConverterPropertyColumnBase = new ColumnBase("GuidToStringConverterProperty", "varchar(36)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("GuidToStringConverterProperty", guidToStringConverterPropertyColumnBase); + var iPAddressColumnBase = new ColumnBase("IPAddress", "varchar(45)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddress", iPAddressColumnBase); + var iPAddressArrayColumnBase = new ColumnBase("IPAddressArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddressArray", iPAddressArrayColumnBase); + var iPAddressReadOnlyCollectionColumnBase = new ColumnBase("IPAddressReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddressReadOnlyCollection", iPAddressReadOnlyCollectionColumnBase); + var iPAddressToBytesConverterPropertyColumnBase = new ColumnBase("IPAddressToBytesConverterProperty", "varbinary(16)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddressToBytesConverterProperty", iPAddressToBytesConverterPropertyColumnBase); + var iPAddressToStringConverterPropertyColumnBase = new ColumnBase("IPAddressToStringConverterProperty", "varchar(45)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddressToStringConverterProperty", iPAddressToStringConverterPropertyColumnBase); + var idColumnBase0 = new ColumnBase("Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Id", idColumnBase0); + var int16ColumnBase = new ColumnBase("Int16", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int16", int16ColumnBase); + var int16ArrayColumnBase = new ColumnBase("Int16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int16Array", int16ArrayColumnBase); + var int32ColumnBase = new ColumnBase("Int32", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int32", int32ColumnBase); + var int32ArrayColumnBase = new ColumnBase("Int32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int32Array", int32ArrayColumnBase); + var int32ReadOnlyCollectionColumnBase = new ColumnBase("Int32ReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int32ReadOnlyCollection", int32ReadOnlyCollectionColumnBase); + var int64ColumnBase = new ColumnBase("Int64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int64", int64ColumnBase); + var int64ArrayColumnBase = new ColumnBase("Int64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int64Array", int64ArrayColumnBase); + var int8ColumnBase = new ColumnBase("Int8", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int8", int8ColumnBase); + var int8ArrayColumnBase = new ColumnBase("Int8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int8Array", int8ArrayColumnBase); + var intNumberToBytesConverterPropertyColumnBase = new ColumnBase("IntNumberToBytesConverterProperty", "varbinary(4)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IntNumberToBytesConverterProperty", intNumberToBytesConverterPropertyColumnBase); + var intNumberToStringConverterPropertyColumnBase = new ColumnBase("IntNumberToStringConverterProperty", "varchar(64)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IntNumberToStringConverterProperty", intNumberToStringConverterPropertyColumnBase); + var nullIntToNullStringConverterPropertyColumnBase = new ColumnBase("NullIntToNullStringConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullIntToNullStringConverterProperty", nullIntToNullStringConverterPropertyColumnBase); + var nullableBoolColumnBase = new ColumnBase("NullableBool", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableBool", nullableBoolColumnBase); + var nullableBoolArrayColumnBase = new ColumnBase("NullableBoolArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableBoolArray", nullableBoolArrayColumnBase); + var nullableBytesColumnBase = new ColumnBase("NullableBytes", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableBytes", nullableBytesColumnBase); + var nullableBytesArrayColumnBase = new ColumnBase("NullableBytesArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableBytesArray", nullableBytesArrayColumnBase); + var nullableCharColumnBase = new ColumnBase("NullableChar", "varchar(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableChar", nullableCharColumnBase); + var nullableCharArrayColumnBase = new ColumnBase("NullableCharArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableCharArray", nullableCharArrayColumnBase); + var nullableDateOnlyColumnBase = new ColumnBase("NullableDateOnly", "date", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDateOnly", nullableDateOnlyColumnBase); + var nullableDateOnlyArrayColumnBase = new ColumnBase("NullableDateOnlyArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDateOnlyArray", nullableDateOnlyArrayColumnBase); + var nullableDateTimeColumnBase = new ColumnBase("NullableDateTime", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDateTime", nullableDateTimeColumnBase); + var nullableDateTimeArrayColumnBase = new ColumnBase("NullableDateTimeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDateTimeArray", nullableDateTimeArrayColumnBase); + var nullableDecimalColumnBase = new ColumnBase("NullableDecimal", "decimal(18,2)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDecimal", nullableDecimalColumnBase); + var nullableDecimalArrayColumnBase = new ColumnBase("NullableDecimalArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDecimalArray", nullableDecimalArrayColumnBase); + var nullableDoubleColumnBase = new ColumnBase("NullableDouble", "double", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDouble", nullableDoubleColumnBase); + var nullableDoubleArrayColumnBase = new ColumnBase("NullableDoubleArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDoubleArray", nullableDoubleArrayColumnBase); + var nullableEnum16ColumnBase = new ColumnBase("NullableEnum16", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16", nullableEnum16ColumnBase); + var nullableEnum16ArrayColumnBase = new ColumnBase("NullableEnum16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16Array", nullableEnum16ArrayColumnBase); + var nullableEnum16AsStringColumnBase = new ColumnBase("NullableEnum16AsString", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16AsString", nullableEnum16AsStringColumnBase); + var nullableEnum16AsStringArrayColumnBase = new ColumnBase("NullableEnum16AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16AsStringArray", nullableEnum16AsStringArrayColumnBase); + var nullableEnum16AsStringCollectionColumnBase = new ColumnBase("NullableEnum16AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16AsStringCollection", nullableEnum16AsStringCollectionColumnBase); + var nullableEnum16CollectionColumnBase = new ColumnBase("NullableEnum16Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16Collection", nullableEnum16CollectionColumnBase); + var nullableEnum32ColumnBase = new ColumnBase("NullableEnum32", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32", nullableEnum32ColumnBase); + var nullableEnum32ArrayColumnBase = new ColumnBase("NullableEnum32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32Array", nullableEnum32ArrayColumnBase); + var nullableEnum32AsStringColumnBase = new ColumnBase("NullableEnum32AsString", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32AsString", nullableEnum32AsStringColumnBase); + var nullableEnum32AsStringArrayColumnBase = new ColumnBase("NullableEnum32AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32AsStringArray", nullableEnum32AsStringArrayColumnBase); + var nullableEnum32AsStringCollectionColumnBase = new ColumnBase("NullableEnum32AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32AsStringCollection", nullableEnum32AsStringCollectionColumnBase); + var nullableEnum32CollectionColumnBase = new ColumnBase("NullableEnum32Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32Collection", nullableEnum32CollectionColumnBase); + var nullableEnum64ColumnBase = new ColumnBase("NullableEnum64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64", nullableEnum64ColumnBase); + var nullableEnum64ArrayColumnBase = new ColumnBase("NullableEnum64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64Array", nullableEnum64ArrayColumnBase); + var nullableEnum64AsStringColumnBase = new ColumnBase("NullableEnum64AsString", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64AsString", nullableEnum64AsStringColumnBase); + var nullableEnum64AsStringArrayColumnBase = new ColumnBase("NullableEnum64AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64AsStringArray", nullableEnum64AsStringArrayColumnBase); + var nullableEnum64AsStringCollectionColumnBase = new ColumnBase("NullableEnum64AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64AsStringCollection", nullableEnum64AsStringCollectionColumnBase); + var nullableEnum64CollectionColumnBase = new ColumnBase("NullableEnum64Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64Collection", nullableEnum64CollectionColumnBase); + var nullableEnum8ColumnBase = new ColumnBase("NullableEnum8", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8", nullableEnum8ColumnBase); + var nullableEnum8ArrayColumnBase = new ColumnBase("NullableEnum8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8Array", nullableEnum8ArrayColumnBase); + var nullableEnum8AsStringColumnBase = new ColumnBase("NullableEnum8AsString", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8AsString", nullableEnum8AsStringColumnBase); + var nullableEnum8AsStringArrayColumnBase = new ColumnBase("NullableEnum8AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8AsStringArray", nullableEnum8AsStringArrayColumnBase); + var nullableEnum8AsStringCollectionColumnBase = new ColumnBase("NullableEnum8AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8AsStringCollection", nullableEnum8AsStringCollectionColumnBase); + var nullableEnum8CollectionColumnBase = new ColumnBase("NullableEnum8Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8Collection", nullableEnum8CollectionColumnBase); + var nullableEnumU16ColumnBase = new ColumnBase("NullableEnumU16", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16", nullableEnumU16ColumnBase); + var nullableEnumU16ArrayColumnBase = new ColumnBase("NullableEnumU16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16Array", nullableEnumU16ArrayColumnBase); + var nullableEnumU16AsStringColumnBase = new ColumnBase("NullableEnumU16AsString", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16AsString", nullableEnumU16AsStringColumnBase); + var nullableEnumU16AsStringArrayColumnBase = new ColumnBase("NullableEnumU16AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16AsStringArray", nullableEnumU16AsStringArrayColumnBase); + var nullableEnumU16AsStringCollectionColumnBase = new ColumnBase("NullableEnumU16AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16AsStringCollection", nullableEnumU16AsStringCollectionColumnBase); + var nullableEnumU16CollectionColumnBase = new ColumnBase("NullableEnumU16Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16Collection", nullableEnumU16CollectionColumnBase); + var nullableEnumU32ColumnBase = new ColumnBase("NullableEnumU32", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32", nullableEnumU32ColumnBase); + var nullableEnumU32ArrayColumnBase = new ColumnBase("NullableEnumU32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32Array", nullableEnumU32ArrayColumnBase); + var nullableEnumU32AsStringColumnBase = new ColumnBase("NullableEnumU32AsString", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32AsString", nullableEnumU32AsStringColumnBase); + var nullableEnumU32AsStringArrayColumnBase = new ColumnBase("NullableEnumU32AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32AsStringArray", nullableEnumU32AsStringArrayColumnBase); + var nullableEnumU32AsStringCollectionColumnBase = new ColumnBase("NullableEnumU32AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32AsStringCollection", nullableEnumU32AsStringCollectionColumnBase); + var nullableEnumU32CollectionColumnBase = new ColumnBase("NullableEnumU32Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32Collection", nullableEnumU32CollectionColumnBase); + var nullableEnumU64ColumnBase = new ColumnBase("NullableEnumU64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64", nullableEnumU64ColumnBase); + var nullableEnumU64ArrayColumnBase = new ColumnBase("NullableEnumU64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64Array", nullableEnumU64ArrayColumnBase); + var nullableEnumU64AsStringColumnBase = new ColumnBase("NullableEnumU64AsString", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64AsString", nullableEnumU64AsStringColumnBase); + var nullableEnumU64AsStringArrayColumnBase = new ColumnBase("NullableEnumU64AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64AsStringArray", nullableEnumU64AsStringArrayColumnBase); + var nullableEnumU64AsStringCollectionColumnBase = new ColumnBase("NullableEnumU64AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64AsStringCollection", nullableEnumU64AsStringCollectionColumnBase); + var nullableEnumU64CollectionColumnBase = new ColumnBase("NullableEnumU64Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64Collection", nullableEnumU64CollectionColumnBase); + var nullableEnumU8ColumnBase = new ColumnBase("NullableEnumU8", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8", nullableEnumU8ColumnBase); + var nullableEnumU8ArrayColumnBase = new ColumnBase("NullableEnumU8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8Array", nullableEnumU8ArrayColumnBase); + var nullableEnumU8AsStringColumnBase = new ColumnBase("NullableEnumU8AsString", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8AsString", nullableEnumU8AsStringColumnBase); + var nullableEnumU8AsStringArrayColumnBase = new ColumnBase("NullableEnumU8AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8AsStringArray", nullableEnumU8AsStringArrayColumnBase); + var nullableEnumU8AsStringCollectionColumnBase = new ColumnBase("NullableEnumU8AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8AsStringCollection", nullableEnumU8AsStringCollectionColumnBase); + var nullableEnumU8CollectionColumnBase = new ColumnBase("NullableEnumU8Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8Collection", nullableEnumU8CollectionColumnBase); + var nullableFloatColumnBase = new ColumnBase("NullableFloat", "single", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableFloat", nullableFloatColumnBase); + var nullableFloatArrayColumnBase = new ColumnBase("NullableFloatArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableFloatArray", nullableFloatArrayColumnBase); + var nullableGuidColumnBase = new ColumnBase("NullableGuid", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableGuid", nullableGuidColumnBase); + var nullableGuidArrayColumnBase = new ColumnBase("NullableGuidArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableGuidArray", nullableGuidArrayColumnBase); + var nullableIPAddressColumnBase = new ColumnBase("NullableIPAddress", "varchar(45)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableIPAddress", nullableIPAddressColumnBase); + var nullableIPAddressArrayColumnBase = new ColumnBase("NullableIPAddressArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableIPAddressArray", nullableIPAddressArrayColumnBase); + var nullableInt16ColumnBase = new ColumnBase("NullableInt16", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt16", nullableInt16ColumnBase); + var nullableInt16ArrayColumnBase = new ColumnBase("NullableInt16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt16Array", nullableInt16ArrayColumnBase); + var nullableInt32ColumnBase = new ColumnBase("NullableInt32", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt32", nullableInt32ColumnBase); + var nullableInt32ArrayColumnBase = new ColumnBase("NullableInt32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt32Array", nullableInt32ArrayColumnBase); + var nullableInt64ColumnBase = new ColumnBase("NullableInt64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt64", nullableInt64ColumnBase); + var nullableInt64ArrayColumnBase = new ColumnBase("NullableInt64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt64Array", nullableInt64ArrayColumnBase); + var nullableInt8ColumnBase = new ColumnBase("NullableInt8", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt8", nullableInt8ColumnBase); + var nullableInt8ArrayColumnBase = new ColumnBase("NullableInt8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt8Array", nullableInt8ArrayColumnBase); + var nullablePhysicalAddressColumnBase = new ColumnBase("NullablePhysicalAddress", "varchar(20)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullablePhysicalAddress", nullablePhysicalAddressColumnBase); + var nullablePhysicalAddressArrayColumnBase = new ColumnBase("NullablePhysicalAddressArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullablePhysicalAddressArray", nullablePhysicalAddressArrayColumnBase); + var nullableStringColumnBase = new ColumnBase("NullableString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableString", nullableStringColumnBase); + var nullableStringArrayColumnBase = new ColumnBase("NullableStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableStringArray", nullableStringArrayColumnBase); + var nullableTimeOnlyColumnBase = new ColumnBase("NullableTimeOnly", "time", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableTimeOnly", nullableTimeOnlyColumnBase); + var nullableTimeOnlyArrayColumnBase = new ColumnBase("NullableTimeOnlyArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableTimeOnlyArray", nullableTimeOnlyArrayColumnBase); + var nullableTimeSpanColumnBase = new ColumnBase("NullableTimeSpan", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableTimeSpan", nullableTimeSpanColumnBase); + var nullableTimeSpanArrayColumnBase = new ColumnBase("NullableTimeSpanArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableTimeSpanArray", nullableTimeSpanArrayColumnBase); + var nullableUInt16ColumnBase = new ColumnBase("NullableUInt16", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt16", nullableUInt16ColumnBase); + var nullableUInt16ArrayColumnBase = new ColumnBase("NullableUInt16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt16Array", nullableUInt16ArrayColumnBase); + var nullableUInt32ColumnBase = new ColumnBase("NullableUInt32", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt32", nullableUInt32ColumnBase); + var nullableUInt32ArrayColumnBase = new ColumnBase("NullableUInt32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt32Array", nullableUInt32ArrayColumnBase); + var nullableUInt64ColumnBase = new ColumnBase("NullableUInt64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt64", nullableUInt64ColumnBase); + var nullableUInt64ArrayColumnBase = new ColumnBase("NullableUInt64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt64Array", nullableUInt64ArrayColumnBase); + var nullableUInt8ColumnBase = new ColumnBase("NullableUInt8", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt8", nullableUInt8ColumnBase); + var nullableUInt8ArrayColumnBase = new ColumnBase("NullableUInt8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt8Array", nullableUInt8ArrayColumnBase); + var nullableUriColumnBase = new ColumnBase("NullableUri", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUri", nullableUriColumnBase); + var nullableUriArrayColumnBase = new ColumnBase("NullableUriArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUriArray", nullableUriArrayColumnBase); + var physicalAddressColumnBase = new ColumnBase("PhysicalAddress", "varchar(20)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("PhysicalAddress", physicalAddressColumnBase); + var physicalAddressArrayColumnBase = new ColumnBase("PhysicalAddressArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("PhysicalAddressArray", physicalAddressArrayColumnBase); + var physicalAddressToBytesConverterPropertyColumnBase = new ColumnBase("PhysicalAddressToBytesConverterProperty", "varbinary(8)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("PhysicalAddressToBytesConverterProperty", physicalAddressToBytesConverterPropertyColumnBase); + var physicalAddressToStringConverterPropertyColumnBase = new ColumnBase("PhysicalAddressToStringConverterProperty", "varchar(20)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("PhysicalAddressToStringConverterProperty", physicalAddressToStringConverterPropertyColumnBase); + var stringColumnBase = new ColumnBase("String", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("String", stringColumnBase); + var stringArrayColumnBase = new ColumnBase("StringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringArray", stringArrayColumnBase); + var stringReadOnlyCollectionColumnBase = new ColumnBase("StringReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringReadOnlyCollection", stringReadOnlyCollectionColumnBase); + var stringToBoolConverterPropertyColumnBase = new ColumnBase("StringToBoolConverterProperty", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToBoolConverterProperty", stringToBoolConverterPropertyColumnBase); + var stringToBytesConverterPropertyColumnBase = new ColumnBase("StringToBytesConverterProperty", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToBytesConverterProperty", stringToBytesConverterPropertyColumnBase); + var stringToCharConverterPropertyColumnBase = new ColumnBase("StringToCharConverterProperty", "varchar(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToCharConverterProperty", stringToCharConverterPropertyColumnBase); + var stringToDateOnlyConverterPropertyColumnBase = new ColumnBase("StringToDateOnlyConverterProperty", "date", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDateOnlyConverterProperty", stringToDateOnlyConverterPropertyColumnBase); + var stringToDateTimeConverterPropertyColumnBase = new ColumnBase("StringToDateTimeConverterProperty", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDateTimeConverterProperty", stringToDateTimeConverterPropertyColumnBase); + var stringToDateTimeOffsetConverterPropertyColumnBase = new ColumnBase("StringToDateTimeOffsetConverterProperty", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDateTimeOffsetConverterProperty", stringToDateTimeOffsetConverterPropertyColumnBase); + var stringToDecimalNumberConverterPropertyColumnBase = new ColumnBase("StringToDecimalNumberConverterProperty", "decimal(18,2)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDecimalNumberConverterProperty", stringToDecimalNumberConverterPropertyColumnBase); + var stringToDoubleNumberConverterPropertyColumnBase = new ColumnBase("StringToDoubleNumberConverterProperty", "double", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDoubleNumberConverterProperty", stringToDoubleNumberConverterPropertyColumnBase); + var stringToEnumConverterPropertyColumnBase = new ColumnBase("StringToEnumConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToEnumConverterProperty", stringToEnumConverterPropertyColumnBase); + var stringToGuidConverterPropertyColumnBase = new ColumnBase("StringToGuidConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToGuidConverterProperty", stringToGuidConverterPropertyColumnBase); + var stringToIntNumberConverterPropertyColumnBase = new ColumnBase("StringToIntNumberConverterProperty", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToIntNumberConverterProperty", stringToIntNumberConverterPropertyColumnBase); + var stringToTimeOnlyConverterPropertyColumnBase = new ColumnBase("StringToTimeOnlyConverterProperty", "time", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToTimeOnlyConverterProperty", stringToTimeOnlyConverterPropertyColumnBase); + var stringToTimeSpanConverterPropertyColumnBase = new ColumnBase("StringToTimeSpanConverterProperty", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToTimeSpanConverterProperty", stringToTimeSpanConverterPropertyColumnBase); + var stringToUriConverterPropertyColumnBase = new ColumnBase("StringToUriConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToUriConverterProperty", stringToUriConverterPropertyColumnBase); + var timeOnlyColumnBase = new ColumnBase("TimeOnly", "time", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeOnly", timeOnlyColumnBase); + var timeOnlyArrayColumnBase = new ColumnBase("TimeOnlyArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeOnlyArray", timeOnlyArrayColumnBase); + var timeOnlyToStringConverterPropertyColumnBase = new ColumnBase("TimeOnlyToStringConverterProperty", "varchar(48)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeOnlyToStringConverterProperty", timeOnlyToStringConverterPropertyColumnBase); + var timeOnlyToTicksConverterPropertyColumnBase = new ColumnBase("TimeOnlyToTicksConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeOnlyToTicksConverterProperty", timeOnlyToTicksConverterPropertyColumnBase); + var timeSpanColumnBase = new ColumnBase("TimeSpan", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeSpan", timeSpanColumnBase); + var timeSpanArrayColumnBase = new ColumnBase("TimeSpanArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeSpanArray", timeSpanArrayColumnBase); + var timeSpanToStringConverterPropertyColumnBase = new ColumnBase("TimeSpanToStringConverterProperty", "varchar(48)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeSpanToStringConverterProperty", timeSpanToStringConverterPropertyColumnBase); + var timeSpanToTicksConverterPropertyColumnBase = new ColumnBase("TimeSpanToTicksConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeSpanToTicksConverterProperty", timeSpanToTicksConverterPropertyColumnBase); + var uInt16ColumnBase = new ColumnBase("UInt16", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt16", uInt16ColumnBase); + var uInt16ArrayColumnBase = new ColumnBase("UInt16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt16Array", uInt16ArrayColumnBase); + var uInt32ColumnBase = new ColumnBase("UInt32", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt32", uInt32ColumnBase); + var uInt32ArrayColumnBase = new ColumnBase("UInt32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt32Array", uInt32ArrayColumnBase); + var uInt64ColumnBase = new ColumnBase("UInt64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt64", uInt64ColumnBase); + var uInt64ArrayColumnBase = new ColumnBase("UInt64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt64Array", uInt64ArrayColumnBase); + var uInt8ColumnBase = new ColumnBase("UInt8", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt8", uInt8ColumnBase); + var uInt8ArrayColumnBase = new ColumnBase("UInt8Array", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt8Array", uInt8ArrayColumnBase); + var uInt8ReadOnlyCollectionColumnBase = new ColumnBase("UInt8ReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt8ReadOnlyCollection", uInt8ReadOnlyCollectionColumnBase); + var uriColumnBase = new ColumnBase("Uri", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Uri", uriColumnBase); + var uriArrayColumnBase = new ColumnBase("UriArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UriArray", uriArrayColumnBase); + var uriToStringConverterPropertyColumnBase = new ColumnBase("UriToStringConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UriToStringConverterProperty", uriToStringConverterPropertyColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase = new TableMappingBase(manyTypes, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase, false); + defaultTableMappings1.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase0, manyTypes.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolColumnBase, manyTypes.FindProperty("Bool")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolArrayColumnBase, manyTypes.FindProperty("BoolArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolReadOnlyCollectionColumnBase, manyTypes.FindProperty("BoolReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolToStringConverterPropertyColumnBase, manyTypes.FindProperty("BoolToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolToTwoValuesConverterPropertyColumnBase, manyTypes.FindProperty("BoolToTwoValuesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolToZeroOneConverterPropertyColumnBase, manyTypes.FindProperty("BoolToZeroOneConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)bytesColumnBase, manyTypes.FindProperty("Bytes")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)bytesArrayColumnBase, manyTypes.FindProperty("BytesArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)bytesToStringConverterPropertyColumnBase, manyTypes.FindProperty("BytesToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)castingConverterPropertyColumnBase, manyTypes.FindProperty("CastingConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)charColumnBase, manyTypes.FindProperty("Char")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)charArrayColumnBase, manyTypes.FindProperty("CharArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)charToStringConverterPropertyColumnBase, manyTypes.FindProperty("CharToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateOnlyColumnBase, manyTypes.FindProperty("DateOnly")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateOnlyArrayColumnBase, manyTypes.FindProperty("DateOnlyArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateOnlyToStringConverterPropertyColumnBase, manyTypes.FindProperty("DateOnlyToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeColumnBase, manyTypes.FindProperty("DateTime")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeArrayColumnBase, manyTypes.FindProperty("DateTimeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeOffsetToBinaryConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeOffsetToBinaryConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeOffsetToBytesConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeOffsetToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeOffsetToStringConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeOffsetToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeToBinaryConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeToBinaryConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeToStringConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeToTicksConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeToTicksConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)decimalColumnBase, manyTypes.FindProperty("Decimal")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)decimalArrayColumnBase, manyTypes.FindProperty("DecimalArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)decimalNumberToBytesConverterPropertyColumnBase, manyTypes.FindProperty("DecimalNumberToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)decimalNumberToStringConverterPropertyColumnBase, manyTypes.FindProperty("DecimalNumberToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)doubleColumnBase, manyTypes.FindProperty("Double")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)doubleArrayColumnBase, manyTypes.FindProperty("DoubleArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)doubleNumberToBytesConverterPropertyColumnBase, manyTypes.FindProperty("DoubleNumberToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)doubleNumberToStringConverterPropertyColumnBase, manyTypes.FindProperty("DoubleNumberToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16ColumnBase, manyTypes.FindProperty("Enum16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16ArrayColumnBase, manyTypes.FindProperty("Enum16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16AsStringColumnBase, manyTypes.FindProperty("Enum16AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16AsStringArrayColumnBase, manyTypes.FindProperty("Enum16AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16AsStringCollectionColumnBase, manyTypes.FindProperty("Enum16AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16CollectionColumnBase, manyTypes.FindProperty("Enum16Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32ColumnBase, manyTypes.FindProperty("Enum32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32ArrayColumnBase, manyTypes.FindProperty("Enum32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32AsStringColumnBase, manyTypes.FindProperty("Enum32AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32AsStringArrayColumnBase, manyTypes.FindProperty("Enum32AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32AsStringCollectionColumnBase, manyTypes.FindProperty("Enum32AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32CollectionColumnBase, manyTypes.FindProperty("Enum32Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64ColumnBase, manyTypes.FindProperty("Enum64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64ArrayColumnBase, manyTypes.FindProperty("Enum64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64AsStringColumnBase, manyTypes.FindProperty("Enum64AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64AsStringArrayColumnBase, manyTypes.FindProperty("Enum64AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64AsStringCollectionColumnBase, manyTypes.FindProperty("Enum64AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64CollectionColumnBase, manyTypes.FindProperty("Enum64Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8ColumnBase, manyTypes.FindProperty("Enum8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8ArrayColumnBase, manyTypes.FindProperty("Enum8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8AsStringColumnBase, manyTypes.FindProperty("Enum8AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8AsStringArrayColumnBase, manyTypes.FindProperty("Enum8AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8AsStringCollectionColumnBase, manyTypes.FindProperty("Enum8AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8CollectionColumnBase, manyTypes.FindProperty("Enum8Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumToNumberConverterPropertyColumnBase, manyTypes.FindProperty("EnumToNumberConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumToStringConverterPropertyColumnBase, manyTypes.FindProperty("EnumToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16ColumnBase, manyTypes.FindProperty("EnumU16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16ArrayColumnBase, manyTypes.FindProperty("EnumU16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16AsStringColumnBase, manyTypes.FindProperty("EnumU16AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16AsStringArrayColumnBase, manyTypes.FindProperty("EnumU16AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16AsStringCollectionColumnBase, manyTypes.FindProperty("EnumU16AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16CollectionColumnBase, manyTypes.FindProperty("EnumU16Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32ColumnBase, manyTypes.FindProperty("EnumU32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32ArrayColumnBase, manyTypes.FindProperty("EnumU32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32AsStringColumnBase, manyTypes.FindProperty("EnumU32AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32AsStringArrayColumnBase, manyTypes.FindProperty("EnumU32AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32AsStringCollectionColumnBase, manyTypes.FindProperty("EnumU32AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32CollectionColumnBase, manyTypes.FindProperty("EnumU32Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64ColumnBase, manyTypes.FindProperty("EnumU64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64ArrayColumnBase, manyTypes.FindProperty("EnumU64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64AsStringColumnBase, manyTypes.FindProperty("EnumU64AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64AsStringArrayColumnBase, manyTypes.FindProperty("EnumU64AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64AsStringCollectionColumnBase, manyTypes.FindProperty("EnumU64AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64CollectionColumnBase, manyTypes.FindProperty("EnumU64Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8ColumnBase, manyTypes.FindProperty("EnumU8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8ArrayColumnBase, manyTypes.FindProperty("EnumU8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8AsStringColumnBase, manyTypes.FindProperty("EnumU8AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8AsStringArrayColumnBase, manyTypes.FindProperty("EnumU8AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8AsStringCollectionColumnBase, manyTypes.FindProperty("EnumU8AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8CollectionColumnBase, manyTypes.FindProperty("EnumU8Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)floatColumnBase, manyTypes.FindProperty("Float")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)floatArrayColumnBase, manyTypes.FindProperty("FloatArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)guidColumnBase, manyTypes.FindProperty("Guid")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)guidArrayColumnBase, manyTypes.FindProperty("GuidArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)guidToBytesConverterPropertyColumnBase, manyTypes.FindProperty("GuidToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)guidToStringConverterPropertyColumnBase, manyTypes.FindProperty("GuidToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressColumnBase, manyTypes.FindProperty("IPAddress")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressArrayColumnBase, manyTypes.FindProperty("IPAddressArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressReadOnlyCollectionColumnBase, manyTypes.FindProperty("IPAddressReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressToBytesConverterPropertyColumnBase, manyTypes.FindProperty("IPAddressToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressToStringConverterPropertyColumnBase, manyTypes.FindProperty("IPAddressToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int16ColumnBase, manyTypes.FindProperty("Int16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int16ArrayColumnBase, manyTypes.FindProperty("Int16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int32ColumnBase, manyTypes.FindProperty("Int32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int32ArrayColumnBase, manyTypes.FindProperty("Int32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int32ReadOnlyCollectionColumnBase, manyTypes.FindProperty("Int32ReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int64ColumnBase, manyTypes.FindProperty("Int64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int64ArrayColumnBase, manyTypes.FindProperty("Int64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int8ColumnBase, manyTypes.FindProperty("Int8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int8ArrayColumnBase, manyTypes.FindProperty("Int8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)intNumberToBytesConverterPropertyColumnBase, manyTypes.FindProperty("IntNumberToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)intNumberToStringConverterPropertyColumnBase, manyTypes.FindProperty("IntNumberToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullIntToNullStringConverterPropertyColumnBase, manyTypes.FindProperty("NullIntToNullStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableBoolColumnBase, manyTypes.FindProperty("NullableBool")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableBoolArrayColumnBase, manyTypes.FindProperty("NullableBoolArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableBytesColumnBase, manyTypes.FindProperty("NullableBytes")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableBytesArrayColumnBase, manyTypes.FindProperty("NullableBytesArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableCharColumnBase, manyTypes.FindProperty("NullableChar")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableCharArrayColumnBase, manyTypes.FindProperty("NullableCharArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDateOnlyColumnBase, manyTypes.FindProperty("NullableDateOnly")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDateOnlyArrayColumnBase, manyTypes.FindProperty("NullableDateOnlyArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDateTimeColumnBase, manyTypes.FindProperty("NullableDateTime")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDateTimeArrayColumnBase, manyTypes.FindProperty("NullableDateTimeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDecimalColumnBase, manyTypes.FindProperty("NullableDecimal")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDecimalArrayColumnBase, manyTypes.FindProperty("NullableDecimalArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDoubleColumnBase, manyTypes.FindProperty("NullableDouble")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDoubleArrayColumnBase, manyTypes.FindProperty("NullableDoubleArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16ColumnBase, manyTypes.FindProperty("NullableEnum16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16ArrayColumnBase, manyTypes.FindProperty("NullableEnum16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16AsStringColumnBase, manyTypes.FindProperty("NullableEnum16AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnum16AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnum16AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16CollectionColumnBase, manyTypes.FindProperty("NullableEnum16Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32ColumnBase, manyTypes.FindProperty("NullableEnum32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32ArrayColumnBase, manyTypes.FindProperty("NullableEnum32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32AsStringColumnBase, manyTypes.FindProperty("NullableEnum32AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnum32AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnum32AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32CollectionColumnBase, manyTypes.FindProperty("NullableEnum32Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64ColumnBase, manyTypes.FindProperty("NullableEnum64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64ArrayColumnBase, manyTypes.FindProperty("NullableEnum64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64AsStringColumnBase, manyTypes.FindProperty("NullableEnum64AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnum64AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnum64AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64CollectionColumnBase, manyTypes.FindProperty("NullableEnum64Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8ColumnBase, manyTypes.FindProperty("NullableEnum8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8ArrayColumnBase, manyTypes.FindProperty("NullableEnum8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8AsStringColumnBase, manyTypes.FindProperty("NullableEnum8AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnum8AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnum8AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8CollectionColumnBase, manyTypes.FindProperty("NullableEnum8Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16ColumnBase, manyTypes.FindProperty("NullableEnumU16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16ArrayColumnBase, manyTypes.FindProperty("NullableEnumU16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16AsStringColumnBase, manyTypes.FindProperty("NullableEnumU16AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnumU16AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnumU16AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16CollectionColumnBase, manyTypes.FindProperty("NullableEnumU16Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32ColumnBase, manyTypes.FindProperty("NullableEnumU32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32ArrayColumnBase, manyTypes.FindProperty("NullableEnumU32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32AsStringColumnBase, manyTypes.FindProperty("NullableEnumU32AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnumU32AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnumU32AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32CollectionColumnBase, manyTypes.FindProperty("NullableEnumU32Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64ColumnBase, manyTypes.FindProperty("NullableEnumU64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64ArrayColumnBase, manyTypes.FindProperty("NullableEnumU64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64AsStringColumnBase, manyTypes.FindProperty("NullableEnumU64AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnumU64AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnumU64AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64CollectionColumnBase, manyTypes.FindProperty("NullableEnumU64Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8ColumnBase, manyTypes.FindProperty("NullableEnumU8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8ArrayColumnBase, manyTypes.FindProperty("NullableEnumU8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8AsStringColumnBase, manyTypes.FindProperty("NullableEnumU8AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnumU8AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnumU8AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8CollectionColumnBase, manyTypes.FindProperty("NullableEnumU8Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableFloatColumnBase, manyTypes.FindProperty("NullableFloat")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableFloatArrayColumnBase, manyTypes.FindProperty("NullableFloatArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableGuidColumnBase, manyTypes.FindProperty("NullableGuid")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableGuidArrayColumnBase, manyTypes.FindProperty("NullableGuidArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableIPAddressColumnBase, manyTypes.FindProperty("NullableIPAddress")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableIPAddressArrayColumnBase, manyTypes.FindProperty("NullableIPAddressArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt16ColumnBase, manyTypes.FindProperty("NullableInt16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt16ArrayColumnBase, manyTypes.FindProperty("NullableInt16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt32ColumnBase, manyTypes.FindProperty("NullableInt32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt32ArrayColumnBase, manyTypes.FindProperty("NullableInt32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt64ColumnBase, manyTypes.FindProperty("NullableInt64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt64ArrayColumnBase, manyTypes.FindProperty("NullableInt64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt8ColumnBase, manyTypes.FindProperty("NullableInt8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt8ArrayColumnBase, manyTypes.FindProperty("NullableInt8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullablePhysicalAddressColumnBase, manyTypes.FindProperty("NullablePhysicalAddress")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullablePhysicalAddressArrayColumnBase, manyTypes.FindProperty("NullablePhysicalAddressArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableStringColumnBase, manyTypes.FindProperty("NullableString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableStringArrayColumnBase, manyTypes.FindProperty("NullableStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableTimeOnlyColumnBase, manyTypes.FindProperty("NullableTimeOnly")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableTimeOnlyArrayColumnBase, manyTypes.FindProperty("NullableTimeOnlyArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableTimeSpanColumnBase, manyTypes.FindProperty("NullableTimeSpan")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableTimeSpanArrayColumnBase, manyTypes.FindProperty("NullableTimeSpanArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt16ColumnBase, manyTypes.FindProperty("NullableUInt16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt16ArrayColumnBase, manyTypes.FindProperty("NullableUInt16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt32ColumnBase, manyTypes.FindProperty("NullableUInt32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt32ArrayColumnBase, manyTypes.FindProperty("NullableUInt32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt64ColumnBase, manyTypes.FindProperty("NullableUInt64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt64ArrayColumnBase, manyTypes.FindProperty("NullableUInt64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt8ColumnBase, manyTypes.FindProperty("NullableUInt8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt8ArrayColumnBase, manyTypes.FindProperty("NullableUInt8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUriColumnBase, manyTypes.FindProperty("NullableUri")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUriArrayColumnBase, manyTypes.FindProperty("NullableUriArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)physicalAddressColumnBase, manyTypes.FindProperty("PhysicalAddress")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)physicalAddressArrayColumnBase, manyTypes.FindProperty("PhysicalAddressArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)physicalAddressToBytesConverterPropertyColumnBase, manyTypes.FindProperty("PhysicalAddressToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)physicalAddressToStringConverterPropertyColumnBase, manyTypes.FindProperty("PhysicalAddressToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringColumnBase, manyTypes.FindProperty("String")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringArrayColumnBase, manyTypes.FindProperty("StringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringReadOnlyCollectionColumnBase, manyTypes.FindProperty("StringReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToBoolConverterPropertyColumnBase, manyTypes.FindProperty("StringToBoolConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToBytesConverterPropertyColumnBase, manyTypes.FindProperty("StringToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToCharConverterPropertyColumnBase, manyTypes.FindProperty("StringToCharConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDateOnlyConverterPropertyColumnBase, manyTypes.FindProperty("StringToDateOnlyConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDateTimeConverterPropertyColumnBase, manyTypes.FindProperty("StringToDateTimeConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDateTimeOffsetConverterPropertyColumnBase, manyTypes.FindProperty("StringToDateTimeOffsetConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDecimalNumberConverterPropertyColumnBase, manyTypes.FindProperty("StringToDecimalNumberConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDoubleNumberConverterPropertyColumnBase, manyTypes.FindProperty("StringToDoubleNumberConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToEnumConverterPropertyColumnBase, manyTypes.FindProperty("StringToEnumConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToGuidConverterPropertyColumnBase, manyTypes.FindProperty("StringToGuidConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToIntNumberConverterPropertyColumnBase, manyTypes.FindProperty("StringToIntNumberConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToTimeOnlyConverterPropertyColumnBase, manyTypes.FindProperty("StringToTimeOnlyConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToTimeSpanConverterPropertyColumnBase, manyTypes.FindProperty("StringToTimeSpanConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToUriConverterPropertyColumnBase, manyTypes.FindProperty("StringToUriConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeOnlyColumnBase, manyTypes.FindProperty("TimeOnly")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeOnlyArrayColumnBase, manyTypes.FindProperty("TimeOnlyArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeOnlyToStringConverterPropertyColumnBase, manyTypes.FindProperty("TimeOnlyToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeOnlyToTicksConverterPropertyColumnBase, manyTypes.FindProperty("TimeOnlyToTicksConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeSpanColumnBase, manyTypes.FindProperty("TimeSpan")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeSpanArrayColumnBase, manyTypes.FindProperty("TimeSpanArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeSpanToStringConverterPropertyColumnBase, manyTypes.FindProperty("TimeSpanToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeSpanToTicksConverterPropertyColumnBase, manyTypes.FindProperty("TimeSpanToTicksConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt16ColumnBase, manyTypes.FindProperty("UInt16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt16ArrayColumnBase, manyTypes.FindProperty("UInt16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt32ColumnBase, manyTypes.FindProperty("UInt32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt32ArrayColumnBase, manyTypes.FindProperty("UInt32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt64ColumnBase, manyTypes.FindProperty("UInt64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt64ArrayColumnBase, manyTypes.FindProperty("UInt64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt8ColumnBase, manyTypes.FindProperty("UInt8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt8ArrayColumnBase, manyTypes.FindProperty("UInt8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt8ReadOnlyCollectionColumnBase, manyTypes.FindProperty("UInt8ReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uriColumnBase, manyTypes.FindProperty("Uri")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uriArrayColumnBase, manyTypes.FindProperty("UriArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uriToStringConverterPropertyColumnBase, manyTypes.FindProperty("UriToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + + var tableMappings1 = new List(); + manyTypes.SetRuntimeAnnotation("Relational:TableMappings", tableMappings1); + var manyTypesTable = new Table("ManyTypes", null, relationalModel); + var idColumn0 = new Column("Id", "integer", manyTypesTable); + manyTypesTable.Columns.Add("Id", idColumn0); + idColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn0); + idColumn0.AddAnnotation("Jet:Identity", "3, 2"); + var boolColumn = new Column("Bool", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Bool", boolColumn); + boolColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolColumn); + var boolArrayColumn = new Column("BoolArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("BoolArray", boolArrayColumn); + boolArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolArrayColumn); + var boolReadOnlyCollectionColumn = new Column("BoolReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("BoolReadOnlyCollection", boolReadOnlyCollectionColumn); + boolReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolReadOnlyCollectionColumn); + var boolToStringConverterPropertyColumn = new Column("BoolToStringConverterProperty", "varchar(1)", manyTypesTable); + manyTypesTable.Columns.Add("BoolToStringConverterProperty", boolToStringConverterPropertyColumn); + boolToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolToStringConverterPropertyColumn); + var boolToTwoValuesConverterPropertyColumn = new Column("BoolToTwoValuesConverterProperty", "byte", manyTypesTable); + manyTypesTable.Columns.Add("BoolToTwoValuesConverterProperty", boolToTwoValuesConverterPropertyColumn); + boolToTwoValuesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolToTwoValuesConverterPropertyColumn); + var boolToZeroOneConverterPropertyColumn = new Column("BoolToZeroOneConverterProperty", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("BoolToZeroOneConverterProperty", boolToZeroOneConverterPropertyColumn); + boolToZeroOneConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolToZeroOneConverterPropertyColumn); + var bytesColumn = new Column("Bytes", "longbinary", manyTypesTable); + manyTypesTable.Columns.Add("Bytes", bytesColumn); + bytesColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(bytesColumn); + var bytesArrayColumn = new Column("BytesArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("BytesArray", bytesArrayColumn); + bytesArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(bytesArrayColumn); + var bytesToStringConverterPropertyColumn = new Column("BytesToStringConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("BytesToStringConverterProperty", bytesToStringConverterPropertyColumn); + bytesToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(bytesToStringConverterPropertyColumn); + var castingConverterPropertyColumn = new Column("CastingConverterProperty", "decimal(18,2)", manyTypesTable); + manyTypesTable.Columns.Add("CastingConverterProperty", castingConverterPropertyColumn); + castingConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(castingConverterPropertyColumn); + var charColumn = new Column("Char", "varchar(1)", manyTypesTable); + manyTypesTable.Columns.Add("Char", charColumn); + charColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(charColumn); + var charArrayColumn = new Column("CharArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("CharArray", charArrayColumn); + charArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(charArrayColumn); + var charToStringConverterPropertyColumn = new Column("CharToStringConverterProperty", "char(1)", manyTypesTable); + manyTypesTable.Columns.Add("CharToStringConverterProperty", charToStringConverterPropertyColumn); + charToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(charToStringConverterPropertyColumn); + var dateOnlyColumn = new Column("DateOnly", "date", manyTypesTable); + manyTypesTable.Columns.Add("DateOnly", dateOnlyColumn); + dateOnlyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateOnlyColumn); + var dateOnlyArrayColumn = new Column("DateOnlyArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("DateOnlyArray", dateOnlyArrayColumn); + dateOnlyArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateOnlyArrayColumn); + var dateOnlyToStringConverterPropertyColumn = new Column("DateOnlyToStringConverterProperty", "varchar(10)", manyTypesTable); + manyTypesTable.Columns.Add("DateOnlyToStringConverterProperty", dateOnlyToStringConverterPropertyColumn); + dateOnlyToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateOnlyToStringConverterPropertyColumn); + var dateTimeColumn = new Column("DateTime", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("DateTime", dateTimeColumn); + dateTimeColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeColumn); + var dateTimeArrayColumn = new Column("DateTimeArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeArray", dateTimeArrayColumn); + dateTimeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeArrayColumn); + var dateTimeOffsetToBinaryConverterPropertyColumn = new Column("DateTimeOffsetToBinaryConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeOffsetToBinaryConverterProperty", dateTimeOffsetToBinaryConverterPropertyColumn); + dateTimeOffsetToBinaryConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeOffsetToBinaryConverterPropertyColumn); + var dateTimeOffsetToBytesConverterPropertyColumn = new Column("DateTimeOffsetToBytesConverterProperty", "varbinary(12)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeOffsetToBytesConverterProperty", dateTimeOffsetToBytesConverterPropertyColumn); + dateTimeOffsetToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeOffsetToBytesConverterPropertyColumn); + var dateTimeOffsetToStringConverterPropertyColumn = new Column("DateTimeOffsetToStringConverterProperty", "varchar(48)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeOffsetToStringConverterProperty", dateTimeOffsetToStringConverterPropertyColumn); + dateTimeOffsetToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeOffsetToStringConverterPropertyColumn); + var dateTimeToBinaryConverterPropertyColumn = new Column("DateTimeToBinaryConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeToBinaryConverterProperty", dateTimeToBinaryConverterPropertyColumn); + dateTimeToBinaryConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeToBinaryConverterPropertyColumn); + var dateTimeToStringConverterPropertyColumn = new Column("DateTimeToStringConverterProperty", "varchar(48)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeToStringConverterProperty", dateTimeToStringConverterPropertyColumn); + dateTimeToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeToStringConverterPropertyColumn); + var dateTimeToTicksConverterPropertyColumn = new Column("DateTimeToTicksConverterProperty", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeToTicksConverterProperty", dateTimeToTicksConverterPropertyColumn); + dateTimeToTicksConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeToTicksConverterPropertyColumn); + var decimalColumn = new Column("Decimal", "decimal(18,2)", manyTypesTable); + manyTypesTable.Columns.Add("Decimal", decimalColumn); + decimalColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(decimalColumn); + var decimalArrayColumn = new Column("DecimalArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("DecimalArray", decimalArrayColumn); + decimalArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(decimalArrayColumn); + var decimalNumberToBytesConverterPropertyColumn = new Column("DecimalNumberToBytesConverterProperty", "varbinary(16)", manyTypesTable); + manyTypesTable.Columns.Add("DecimalNumberToBytesConverterProperty", decimalNumberToBytesConverterPropertyColumn); + decimalNumberToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(decimalNumberToBytesConverterPropertyColumn); + var decimalNumberToStringConverterPropertyColumn = new Column("DecimalNumberToStringConverterProperty", "varchar(64)", manyTypesTable); + manyTypesTable.Columns.Add("DecimalNumberToStringConverterProperty", decimalNumberToStringConverterPropertyColumn); + decimalNumberToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(decimalNumberToStringConverterPropertyColumn); + var doubleColumn = new Column("Double", "double", manyTypesTable); + manyTypesTable.Columns.Add("Double", doubleColumn); + doubleColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(doubleColumn); + var doubleArrayColumn = new Column("DoubleArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("DoubleArray", doubleArrayColumn); + doubleArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(doubleArrayColumn); + var doubleNumberToBytesConverterPropertyColumn = new Column("DoubleNumberToBytesConverterProperty", "varbinary(8)", manyTypesTable); + manyTypesTable.Columns.Add("DoubleNumberToBytesConverterProperty", doubleNumberToBytesConverterPropertyColumn); + doubleNumberToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(doubleNumberToBytesConverterPropertyColumn); + var doubleNumberToStringConverterPropertyColumn = new Column("DoubleNumberToStringConverterProperty", "varchar(64)", manyTypesTable); + manyTypesTable.Columns.Add("DoubleNumberToStringConverterProperty", doubleNumberToStringConverterPropertyColumn); + doubleNumberToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(doubleNumberToStringConverterPropertyColumn); + var enum16Column = new Column("Enum16", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Enum16", enum16Column); + enum16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16Column); + var enum16ArrayColumn = new Column("Enum16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16Array", enum16ArrayColumn); + enum16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16ArrayColumn); + var enum16AsStringColumn = new Column("Enum16AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16AsString", enum16AsStringColumn); + enum16AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16AsStringColumn); + var enum16AsStringArrayColumn = new Column("Enum16AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16AsStringArray", enum16AsStringArrayColumn); + enum16AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16AsStringArrayColumn); + var enum16AsStringCollectionColumn = new Column("Enum16AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16AsStringCollection", enum16AsStringCollectionColumn); + enum16AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16AsStringCollectionColumn); + var enum16CollectionColumn = new Column("Enum16Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16Collection", enum16CollectionColumn); + enum16CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16CollectionColumn); + var enum32Column = new Column("Enum32", "integer", manyTypesTable); + manyTypesTable.Columns.Add("Enum32", enum32Column); + enum32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32Column); + var enum32ArrayColumn = new Column("Enum32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32Array", enum32ArrayColumn); + enum32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32ArrayColumn); + var enum32AsStringColumn = new Column("Enum32AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32AsString", enum32AsStringColumn); + enum32AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32AsStringColumn); + var enum32AsStringArrayColumn = new Column("Enum32AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32AsStringArray", enum32AsStringArrayColumn); + enum32AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32AsStringArrayColumn); + var enum32AsStringCollectionColumn = new Column("Enum32AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32AsStringCollection", enum32AsStringCollectionColumn); + enum32AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32AsStringCollectionColumn); + var enum32CollectionColumn = new Column("Enum32Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32Collection", enum32CollectionColumn); + enum32CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32CollectionColumn); + var enum64Column = new Column("Enum64", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64", enum64Column); + enum64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64Column); + var enum64ArrayColumn = new Column("Enum64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64Array", enum64ArrayColumn); + enum64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64ArrayColumn); + var enum64AsStringColumn = new Column("Enum64AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64AsString", enum64AsStringColumn); + enum64AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64AsStringColumn); + var enum64AsStringArrayColumn = new Column("Enum64AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64AsStringArray", enum64AsStringArrayColumn); + enum64AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64AsStringArrayColumn); + var enum64AsStringCollectionColumn = new Column("Enum64AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64AsStringCollection", enum64AsStringCollectionColumn); + enum64AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64AsStringCollectionColumn); + var enum64CollectionColumn = new Column("Enum64Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64Collection", enum64CollectionColumn); + enum64CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64CollectionColumn); + var enum8Column = new Column("Enum8", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Enum8", enum8Column); + enum8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8Column); + var enum8ArrayColumn = new Column("Enum8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8Array", enum8ArrayColumn); + enum8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8ArrayColumn); + var enum8AsStringColumn = new Column("Enum8AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8AsString", enum8AsStringColumn); + enum8AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8AsStringColumn); + var enum8AsStringArrayColumn = new Column("Enum8AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8AsStringArray", enum8AsStringArrayColumn); + enum8AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8AsStringArrayColumn); + var enum8AsStringCollectionColumn = new Column("Enum8AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8AsStringCollection", enum8AsStringCollectionColumn); + enum8AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8AsStringCollectionColumn); + var enum8CollectionColumn = new Column("Enum8Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8Collection", enum8CollectionColumn); + enum8CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8CollectionColumn); + var enumToNumberConverterPropertyColumn = new Column("EnumToNumberConverterProperty", "integer", manyTypesTable); + manyTypesTable.Columns.Add("EnumToNumberConverterProperty", enumToNumberConverterPropertyColumn); + enumToNumberConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumToNumberConverterPropertyColumn); + var enumToStringConverterPropertyColumn = new Column("EnumToStringConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumToStringConverterProperty", enumToStringConverterPropertyColumn); + enumToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumToStringConverterPropertyColumn); + var enumU16Column = new Column("EnumU16", "integer", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16", enumU16Column); + enumU16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16Column); + var enumU16ArrayColumn = new Column("EnumU16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16Array", enumU16ArrayColumn); + enumU16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16ArrayColumn); + var enumU16AsStringColumn = new Column("EnumU16AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16AsString", enumU16AsStringColumn); + enumU16AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16AsStringColumn); + var enumU16AsStringArrayColumn = new Column("EnumU16AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16AsStringArray", enumU16AsStringArrayColumn); + enumU16AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16AsStringArrayColumn); + var enumU16AsStringCollectionColumn = new Column("EnumU16AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16AsStringCollection", enumU16AsStringCollectionColumn); + enumU16AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16AsStringCollectionColumn); + var enumU16CollectionColumn = new Column("EnumU16Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16Collection", enumU16CollectionColumn); + enumU16CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16CollectionColumn); + var enumU32Column = new Column("EnumU32", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32", enumU32Column); + enumU32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32Column); + var enumU32ArrayColumn = new Column("EnumU32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32Array", enumU32ArrayColumn); + enumU32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32ArrayColumn); + var enumU32AsStringColumn = new Column("EnumU32AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32AsString", enumU32AsStringColumn); + enumU32AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32AsStringColumn); + var enumU32AsStringArrayColumn = new Column("EnumU32AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32AsStringArray", enumU32AsStringArrayColumn); + enumU32AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32AsStringArrayColumn); + var enumU32AsStringCollectionColumn = new Column("EnumU32AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32AsStringCollection", enumU32AsStringCollectionColumn); + enumU32AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32AsStringCollectionColumn); + var enumU32CollectionColumn = new Column("EnumU32Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32Collection", enumU32CollectionColumn); + enumU32CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32CollectionColumn); + var enumU64Column = new Column("EnumU64", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64", enumU64Column); + enumU64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64Column); + var enumU64ArrayColumn = new Column("EnumU64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64Array", enumU64ArrayColumn); + enumU64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64ArrayColumn); + var enumU64AsStringColumn = new Column("EnumU64AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64AsString", enumU64AsStringColumn); + enumU64AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64AsStringColumn); + var enumU64AsStringArrayColumn = new Column("EnumU64AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64AsStringArray", enumU64AsStringArrayColumn); + enumU64AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64AsStringArrayColumn); + var enumU64AsStringCollectionColumn = new Column("EnumU64AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64AsStringCollection", enumU64AsStringCollectionColumn); + enumU64AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64AsStringCollectionColumn); + var enumU64CollectionColumn = new Column("EnumU64Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64Collection", enumU64CollectionColumn); + enumU64CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64CollectionColumn); + var enumU8Column = new Column("EnumU8", "byte", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8", enumU8Column); + enumU8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8Column); + var enumU8ArrayColumn = new Column("EnumU8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8Array", enumU8ArrayColumn); + enumU8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8ArrayColumn); + var enumU8AsStringColumn = new Column("EnumU8AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8AsString", enumU8AsStringColumn); + enumU8AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8AsStringColumn); + var enumU8AsStringArrayColumn = new Column("EnumU8AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8AsStringArray", enumU8AsStringArrayColumn); + enumU8AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8AsStringArrayColumn); + var enumU8AsStringCollectionColumn = new Column("EnumU8AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8AsStringCollection", enumU8AsStringCollectionColumn); + enumU8AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8AsStringCollectionColumn); + var enumU8CollectionColumn = new Column("EnumU8Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8Collection", enumU8CollectionColumn); + enumU8CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8CollectionColumn); + var floatColumn = new Column("Float", "single", manyTypesTable); + manyTypesTable.Columns.Add("Float", floatColumn); + floatColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(floatColumn); + var floatArrayColumn = new Column("FloatArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("FloatArray", floatArrayColumn); + floatArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(floatArrayColumn); + var guidColumn = new Column("Guid", "uniqueidentifier", manyTypesTable); + manyTypesTable.Columns.Add("Guid", guidColumn); + guidColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(guidColumn); + var guidArrayColumn = new Column("GuidArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("GuidArray", guidArrayColumn); + guidArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(guidArrayColumn); + var guidToBytesConverterPropertyColumn = new Column("GuidToBytesConverterProperty", "varbinary(16)", manyTypesTable); + manyTypesTable.Columns.Add("GuidToBytesConverterProperty", guidToBytesConverterPropertyColumn); + guidToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(guidToBytesConverterPropertyColumn); + var guidToStringConverterPropertyColumn = new Column("GuidToStringConverterProperty", "varchar(36)", manyTypesTable); + manyTypesTable.Columns.Add("GuidToStringConverterProperty", guidToStringConverterPropertyColumn); + guidToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(guidToStringConverterPropertyColumn); + var iPAddressColumn = new Column("IPAddress", "varchar(45)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddress", iPAddressColumn); + iPAddressColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressColumn); + var iPAddressArrayColumn = new Column("IPAddressArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddressArray", iPAddressArrayColumn); + iPAddressArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressArrayColumn); + var iPAddressReadOnlyCollectionColumn = new Column("IPAddressReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddressReadOnlyCollection", iPAddressReadOnlyCollectionColumn); + iPAddressReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressReadOnlyCollectionColumn); + var iPAddressToBytesConverterPropertyColumn = new Column("IPAddressToBytesConverterProperty", "varbinary(16)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddressToBytesConverterProperty", iPAddressToBytesConverterPropertyColumn); + iPAddressToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressToBytesConverterPropertyColumn); + var iPAddressToStringConverterPropertyColumn = new Column("IPAddressToStringConverterProperty", "varchar(45)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddressToStringConverterProperty", iPAddressToStringConverterPropertyColumn); + iPAddressToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressToStringConverterPropertyColumn); + var int16Column = new Column("Int16", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Int16", int16Column); + int16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(int16Column); + var int16ArrayColumn = new Column("Int16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int16Array", int16ArrayColumn); + int16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int16ArrayColumn); + var int32Column = new Column("Int32", "integer", manyTypesTable); + manyTypesTable.Columns.Add("Int32", int32Column); + int32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(int32Column); + var int32ArrayColumn = new Column("Int32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int32Array", int32ArrayColumn); + int32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int32ArrayColumn); + var int32ReadOnlyCollectionColumn = new Column("Int32ReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int32ReadOnlyCollection", int32ReadOnlyCollectionColumn); + int32ReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int32ReadOnlyCollectionColumn); + var int64Column = new Column("Int64", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("Int64", int64Column); + int64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(int64Column); + var int64ArrayColumn = new Column("Int64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int64Array", int64ArrayColumn); + int64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int64ArrayColumn); + var int8Column = new Column("Int8", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Int8", int8Column); + int8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(int8Column); + var int8ArrayColumn = new Column("Int8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int8Array", int8ArrayColumn); + int8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int8ArrayColumn); + var intNumberToBytesConverterPropertyColumn = new Column("IntNumberToBytesConverterProperty", "varbinary(4)", manyTypesTable); + manyTypesTable.Columns.Add("IntNumberToBytesConverterProperty", intNumberToBytesConverterPropertyColumn); + intNumberToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(intNumberToBytesConverterPropertyColumn); + var intNumberToStringConverterPropertyColumn = new Column("IntNumberToStringConverterProperty", "varchar(64)", manyTypesTable); + manyTypesTable.Columns.Add("IntNumberToStringConverterProperty", intNumberToStringConverterPropertyColumn); + intNumberToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(intNumberToStringConverterPropertyColumn); + var nullIntToNullStringConverterPropertyColumn = new Column("NullIntToNullStringConverterProperty", "varchar(255)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullIntToNullStringConverterProperty", nullIntToNullStringConverterPropertyColumn); + nullIntToNullStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullIntToNullStringConverterPropertyColumn); + var nullableBoolColumn = new Column("NullableBool", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableBool", nullableBoolColumn); + nullableBoolColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableBoolColumn); + var nullableBoolArrayColumn = new Column("NullableBoolArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableBoolArray", nullableBoolArrayColumn); + nullableBoolArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableBoolArrayColumn); + var nullableBytesColumn = new Column("NullableBytes", "longbinary", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableBytes", nullableBytesColumn); + nullableBytesColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableBytesColumn); + var nullableBytesArrayColumn = new Column("NullableBytesArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableBytesArray", nullableBytesArrayColumn); + nullableBytesArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableBytesArrayColumn); + var nullableCharColumn = new Column("NullableChar", "varchar(1)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableChar", nullableCharColumn); + nullableCharColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableCharColumn); + var nullableCharArrayColumn = new Column("NullableCharArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableCharArray", nullableCharArrayColumn); + nullableCharArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableCharArrayColumn); + var nullableDateOnlyColumn = new Column("NullableDateOnly", "date", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableDateOnly", nullableDateOnlyColumn); + nullableDateOnlyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDateOnlyColumn); + var nullableDateOnlyArrayColumn = new Column("NullableDateOnlyArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableDateOnlyArray", nullableDateOnlyArrayColumn); + nullableDateOnlyArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDateOnlyArrayColumn); + var nullableDateTimeColumn = new Column("NullableDateTime", "datetime", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableDateTime", nullableDateTimeColumn); + nullableDateTimeColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDateTimeColumn); + var nullableDateTimeArrayColumn = new Column("NullableDateTimeArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableDateTimeArray", nullableDateTimeArrayColumn); + nullableDateTimeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDateTimeArrayColumn); + var nullableDecimalColumn = new Column("NullableDecimal", "decimal(18,2)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableDecimal", nullableDecimalColumn); + nullableDecimalColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDecimalColumn); + var nullableDecimalArrayColumn = new Column("NullableDecimalArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableDecimalArray", nullableDecimalArrayColumn); + nullableDecimalArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDecimalArrayColumn); + var nullableDoubleColumn = new Column("NullableDouble", "double", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableDouble", nullableDoubleColumn); + nullableDoubleColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDoubleColumn); + var nullableDoubleArrayColumn = new Column("NullableDoubleArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableDoubleArray", nullableDoubleArrayColumn); + nullableDoubleArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDoubleArrayColumn); + var nullableEnum16Column = new Column("NullableEnum16", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum16", nullableEnum16Column); + nullableEnum16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16Column); + var nullableEnum16ArrayColumn = new Column("NullableEnum16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum16Array", nullableEnum16ArrayColumn); + nullableEnum16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16ArrayColumn); + var nullableEnum16AsStringColumn = new Column("NullableEnum16AsString", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum16AsString", nullableEnum16AsStringColumn); + nullableEnum16AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16AsStringColumn); + var nullableEnum16AsStringArrayColumn = new Column("NullableEnum16AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum16AsStringArray", nullableEnum16AsStringArrayColumn); + nullableEnum16AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16AsStringArrayColumn); + var nullableEnum16AsStringCollectionColumn = new Column("NullableEnum16AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum16AsStringCollection", nullableEnum16AsStringCollectionColumn); + nullableEnum16AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16AsStringCollectionColumn); + var nullableEnum16CollectionColumn = new Column("NullableEnum16Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum16Collection", nullableEnum16CollectionColumn); + nullableEnum16CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16CollectionColumn); + var nullableEnum32Column = new Column("NullableEnum32", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum32", nullableEnum32Column); + nullableEnum32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32Column); + var nullableEnum32ArrayColumn = new Column("NullableEnum32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum32Array", nullableEnum32ArrayColumn); + nullableEnum32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32ArrayColumn); + var nullableEnum32AsStringColumn = new Column("NullableEnum32AsString", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum32AsString", nullableEnum32AsStringColumn); + nullableEnum32AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32AsStringColumn); + var nullableEnum32AsStringArrayColumn = new Column("NullableEnum32AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum32AsStringArray", nullableEnum32AsStringArrayColumn); + nullableEnum32AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32AsStringArrayColumn); + var nullableEnum32AsStringCollectionColumn = new Column("NullableEnum32AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum32AsStringCollection", nullableEnum32AsStringCollectionColumn); + nullableEnum32AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32AsStringCollectionColumn); + var nullableEnum32CollectionColumn = new Column("NullableEnum32Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum32Collection", nullableEnum32CollectionColumn); + nullableEnum32CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32CollectionColumn); + var nullableEnum64Column = new Column("NullableEnum64", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum64", nullableEnum64Column); + nullableEnum64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64Column); + var nullableEnum64ArrayColumn = new Column("NullableEnum64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum64Array", nullableEnum64ArrayColumn); + nullableEnum64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64ArrayColumn); + var nullableEnum64AsStringColumn = new Column("NullableEnum64AsString", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum64AsString", nullableEnum64AsStringColumn); + nullableEnum64AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64AsStringColumn); + var nullableEnum64AsStringArrayColumn = new Column("NullableEnum64AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum64AsStringArray", nullableEnum64AsStringArrayColumn); + nullableEnum64AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64AsStringArrayColumn); + var nullableEnum64AsStringCollectionColumn = new Column("NullableEnum64AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum64AsStringCollection", nullableEnum64AsStringCollectionColumn); + nullableEnum64AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64AsStringCollectionColumn); + var nullableEnum64CollectionColumn = new Column("NullableEnum64Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum64Collection", nullableEnum64CollectionColumn); + nullableEnum64CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64CollectionColumn); + var nullableEnum8Column = new Column("NullableEnum8", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum8", nullableEnum8Column); + nullableEnum8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8Column); + var nullableEnum8ArrayColumn = new Column("NullableEnum8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum8Array", nullableEnum8ArrayColumn); + nullableEnum8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8ArrayColumn); + var nullableEnum8AsStringColumn = new Column("NullableEnum8AsString", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum8AsString", nullableEnum8AsStringColumn); + nullableEnum8AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8AsStringColumn); + var nullableEnum8AsStringArrayColumn = new Column("NullableEnum8AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum8AsStringArray", nullableEnum8AsStringArrayColumn); + nullableEnum8AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8AsStringArrayColumn); + var nullableEnum8AsStringCollectionColumn = new Column("NullableEnum8AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum8AsStringCollection", nullableEnum8AsStringCollectionColumn); + nullableEnum8AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8AsStringCollectionColumn); + var nullableEnum8CollectionColumn = new Column("NullableEnum8Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum8Collection", nullableEnum8CollectionColumn); + nullableEnum8CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8CollectionColumn); + var nullableEnumU16Column = new Column("NullableEnumU16", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU16", nullableEnumU16Column); + nullableEnumU16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16Column); + var nullableEnumU16ArrayColumn = new Column("NullableEnumU16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU16Array", nullableEnumU16ArrayColumn); + nullableEnumU16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16ArrayColumn); + var nullableEnumU16AsStringColumn = new Column("NullableEnumU16AsString", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU16AsString", nullableEnumU16AsStringColumn); + nullableEnumU16AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16AsStringColumn); + var nullableEnumU16AsStringArrayColumn = new Column("NullableEnumU16AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU16AsStringArray", nullableEnumU16AsStringArrayColumn); + nullableEnumU16AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16AsStringArrayColumn); + var nullableEnumU16AsStringCollectionColumn = new Column("NullableEnumU16AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU16AsStringCollection", nullableEnumU16AsStringCollectionColumn); + nullableEnumU16AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16AsStringCollectionColumn); + var nullableEnumU16CollectionColumn = new Column("NullableEnumU16Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU16Collection", nullableEnumU16CollectionColumn); + nullableEnumU16CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16CollectionColumn); + var nullableEnumU32Column = new Column("NullableEnumU32", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU32", nullableEnumU32Column); + nullableEnumU32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32Column); + var nullableEnumU32ArrayColumn = new Column("NullableEnumU32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU32Array", nullableEnumU32ArrayColumn); + nullableEnumU32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32ArrayColumn); + var nullableEnumU32AsStringColumn = new Column("NullableEnumU32AsString", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU32AsString", nullableEnumU32AsStringColumn); + nullableEnumU32AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32AsStringColumn); + var nullableEnumU32AsStringArrayColumn = new Column("NullableEnumU32AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU32AsStringArray", nullableEnumU32AsStringArrayColumn); + nullableEnumU32AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32AsStringArrayColumn); + var nullableEnumU32AsStringCollectionColumn = new Column("NullableEnumU32AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU32AsStringCollection", nullableEnumU32AsStringCollectionColumn); + nullableEnumU32AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32AsStringCollectionColumn); + var nullableEnumU32CollectionColumn = new Column("NullableEnumU32Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU32Collection", nullableEnumU32CollectionColumn); + nullableEnumU32CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32CollectionColumn); + var nullableEnumU64Column = new Column("NullableEnumU64", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU64", nullableEnumU64Column); + nullableEnumU64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64Column); + var nullableEnumU64ArrayColumn = new Column("NullableEnumU64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU64Array", nullableEnumU64ArrayColumn); + nullableEnumU64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64ArrayColumn); + var nullableEnumU64AsStringColumn = new Column("NullableEnumU64AsString", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU64AsString", nullableEnumU64AsStringColumn); + nullableEnumU64AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64AsStringColumn); + var nullableEnumU64AsStringArrayColumn = new Column("NullableEnumU64AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU64AsStringArray", nullableEnumU64AsStringArrayColumn); + nullableEnumU64AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64AsStringArrayColumn); + var nullableEnumU64AsStringCollectionColumn = new Column("NullableEnumU64AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU64AsStringCollection", nullableEnumU64AsStringCollectionColumn); + nullableEnumU64AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64AsStringCollectionColumn); + var nullableEnumU64CollectionColumn = new Column("NullableEnumU64Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU64Collection", nullableEnumU64CollectionColumn); + nullableEnumU64CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64CollectionColumn); + var nullableEnumU8Column = new Column("NullableEnumU8", "byte", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU8", nullableEnumU8Column); + nullableEnumU8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8Column); + var nullableEnumU8ArrayColumn = new Column("NullableEnumU8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU8Array", nullableEnumU8ArrayColumn); + nullableEnumU8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8ArrayColumn); + var nullableEnumU8AsStringColumn = new Column("NullableEnumU8AsString", "byte", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU8AsString", nullableEnumU8AsStringColumn); + nullableEnumU8AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8AsStringColumn); + var nullableEnumU8AsStringArrayColumn = new Column("NullableEnumU8AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU8AsStringArray", nullableEnumU8AsStringArrayColumn); + nullableEnumU8AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8AsStringArrayColumn); + var nullableEnumU8AsStringCollectionColumn = new Column("NullableEnumU8AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU8AsStringCollection", nullableEnumU8AsStringCollectionColumn); + nullableEnumU8AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8AsStringCollectionColumn); + var nullableEnumU8CollectionColumn = new Column("NullableEnumU8Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU8Collection", nullableEnumU8CollectionColumn); + nullableEnumU8CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8CollectionColumn); + var nullableFloatColumn = new Column("NullableFloat", "single", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableFloat", nullableFloatColumn); + nullableFloatColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableFloatColumn); + var nullableFloatArrayColumn = new Column("NullableFloatArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableFloatArray", nullableFloatArrayColumn); + nullableFloatArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableFloatArrayColumn); + var nullableGuidColumn = new Column("NullableGuid", "uniqueidentifier", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableGuid", nullableGuidColumn); + nullableGuidColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableGuidColumn); + var nullableGuidArrayColumn = new Column("NullableGuidArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableGuidArray", nullableGuidArrayColumn); + nullableGuidArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableGuidArrayColumn); + var nullableIPAddressColumn = new Column("NullableIPAddress", "varchar(45)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableIPAddress", nullableIPAddressColumn); + nullableIPAddressColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableIPAddressColumn); + var nullableIPAddressArrayColumn = new Column("NullableIPAddressArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableIPAddressArray", nullableIPAddressArrayColumn); + nullableIPAddressArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableIPAddressArrayColumn); + var nullableInt16Column = new Column("NullableInt16", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableInt16", nullableInt16Column); + nullableInt16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt16Column); + var nullableInt16ArrayColumn = new Column("NullableInt16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableInt16Array", nullableInt16ArrayColumn); + nullableInt16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt16ArrayColumn); + var nullableInt32Column = new Column("NullableInt32", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableInt32", nullableInt32Column); + nullableInt32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt32Column); + var nullableInt32ArrayColumn = new Column("NullableInt32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableInt32Array", nullableInt32ArrayColumn); + nullableInt32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt32ArrayColumn); + var nullableInt64Column = new Column("NullableInt64", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableInt64", nullableInt64Column); + nullableInt64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt64Column); + var nullableInt64ArrayColumn = new Column("NullableInt64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableInt64Array", nullableInt64ArrayColumn); + nullableInt64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt64ArrayColumn); + var nullableInt8Column = new Column("NullableInt8", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableInt8", nullableInt8Column); + nullableInt8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt8Column); + var nullableInt8ArrayColumn = new Column("NullableInt8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableInt8Array", nullableInt8ArrayColumn); + nullableInt8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt8ArrayColumn); + var nullablePhysicalAddressColumn = new Column("NullablePhysicalAddress", "varchar(20)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullablePhysicalAddress", nullablePhysicalAddressColumn); + nullablePhysicalAddressColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullablePhysicalAddressColumn); + var nullablePhysicalAddressArrayColumn = new Column("NullablePhysicalAddressArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullablePhysicalAddressArray", nullablePhysicalAddressArrayColumn); + nullablePhysicalAddressArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullablePhysicalAddressArrayColumn); + var nullableStringColumn = new Column("NullableString", "varchar(255)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableString", nullableStringColumn); + nullableStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableStringColumn); + var nullableStringArrayColumn = new Column("NullableStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableStringArray", nullableStringArrayColumn); + nullableStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableStringArrayColumn); + var nullableTimeOnlyColumn = new Column("NullableTimeOnly", "time", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableTimeOnly", nullableTimeOnlyColumn); + nullableTimeOnlyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableTimeOnlyColumn); + var nullableTimeOnlyArrayColumn = new Column("NullableTimeOnlyArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableTimeOnlyArray", nullableTimeOnlyArrayColumn); + nullableTimeOnlyArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableTimeOnlyArrayColumn); + var nullableTimeSpanColumn = new Column("NullableTimeSpan", "datetime", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableTimeSpan", nullableTimeSpanColumn); + nullableTimeSpanColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableTimeSpanColumn); + var nullableTimeSpanArrayColumn = new Column("NullableTimeSpanArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableTimeSpanArray", nullableTimeSpanArrayColumn); + nullableTimeSpanArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableTimeSpanArrayColumn); + var nullableUInt16Column = new Column("NullableUInt16", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUInt16", nullableUInt16Column); + nullableUInt16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt16Column); + var nullableUInt16ArrayColumn = new Column("NullableUInt16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUInt16Array", nullableUInt16ArrayColumn); + nullableUInt16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt16ArrayColumn); + var nullableUInt32Column = new Column("NullableUInt32", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUInt32", nullableUInt32Column); + nullableUInt32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt32Column); + var nullableUInt32ArrayColumn = new Column("NullableUInt32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUInt32Array", nullableUInt32ArrayColumn); + nullableUInt32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt32ArrayColumn); + var nullableUInt64Column = new Column("NullableUInt64", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUInt64", nullableUInt64Column); + nullableUInt64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt64Column); + var nullableUInt64ArrayColumn = new Column("NullableUInt64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUInt64Array", nullableUInt64ArrayColumn); + nullableUInt64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt64ArrayColumn); + var nullableUInt8Column = new Column("NullableUInt8", "byte", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUInt8", nullableUInt8Column); + nullableUInt8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt8Column); + var nullableUInt8ArrayColumn = new Column("NullableUInt8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUInt8Array", nullableUInt8ArrayColumn); + nullableUInt8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt8ArrayColumn); + var nullableUriColumn = new Column("NullableUri", "varchar(255)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUri", nullableUriColumn); + nullableUriColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUriColumn); + var nullableUriArrayColumn = new Column("NullableUriArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUriArray", nullableUriArrayColumn); + nullableUriArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUriArrayColumn); + var physicalAddressColumn = new Column("PhysicalAddress", "varchar(20)", manyTypesTable); + manyTypesTable.Columns.Add("PhysicalAddress", physicalAddressColumn); + physicalAddressColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(physicalAddressColumn); + var physicalAddressArrayColumn = new Column("PhysicalAddressArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("PhysicalAddressArray", physicalAddressArrayColumn); + physicalAddressArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(physicalAddressArrayColumn); + var physicalAddressToBytesConverterPropertyColumn = new Column("PhysicalAddressToBytesConverterProperty", "varbinary(8)", manyTypesTable); + manyTypesTable.Columns.Add("PhysicalAddressToBytesConverterProperty", physicalAddressToBytesConverterPropertyColumn); + physicalAddressToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(physicalAddressToBytesConverterPropertyColumn); + var physicalAddressToStringConverterPropertyColumn = new Column("PhysicalAddressToStringConverterProperty", "varchar(20)", manyTypesTable); + manyTypesTable.Columns.Add("PhysicalAddressToStringConverterProperty", physicalAddressToStringConverterPropertyColumn); + physicalAddressToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(physicalAddressToStringConverterPropertyColumn); + var stringColumn = new Column("String", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("String", stringColumn); + stringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringColumn); + var stringArrayColumn = new Column("StringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("StringArray", stringArrayColumn); + stringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringArrayColumn); + var stringReadOnlyCollectionColumn = new Column("StringReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("StringReadOnlyCollection", stringReadOnlyCollectionColumn); + stringReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringReadOnlyCollectionColumn); + var stringToBoolConverterPropertyColumn = new Column("StringToBoolConverterProperty", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("StringToBoolConverterProperty", stringToBoolConverterPropertyColumn); + stringToBoolConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToBoolConverterPropertyColumn); + var stringToBytesConverterPropertyColumn = new Column("StringToBytesConverterProperty", "longbinary", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("StringToBytesConverterProperty", stringToBytesConverterPropertyColumn); + stringToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToBytesConverterPropertyColumn); + var stringToCharConverterPropertyColumn = new Column("StringToCharConverterProperty", "varchar(1)", manyTypesTable); + manyTypesTable.Columns.Add("StringToCharConverterProperty", stringToCharConverterPropertyColumn); + stringToCharConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToCharConverterPropertyColumn); + var stringToDateOnlyConverterPropertyColumn = new Column("StringToDateOnlyConverterProperty", "date", manyTypesTable); + manyTypesTable.Columns.Add("StringToDateOnlyConverterProperty", stringToDateOnlyConverterPropertyColumn); + stringToDateOnlyConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDateOnlyConverterPropertyColumn); + var stringToDateTimeConverterPropertyColumn = new Column("StringToDateTimeConverterProperty", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("StringToDateTimeConverterProperty", stringToDateTimeConverterPropertyColumn); + stringToDateTimeConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDateTimeConverterPropertyColumn); + var stringToDateTimeOffsetConverterPropertyColumn = new Column("StringToDateTimeOffsetConverterProperty", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("StringToDateTimeOffsetConverterProperty", stringToDateTimeOffsetConverterPropertyColumn); + stringToDateTimeOffsetConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDateTimeOffsetConverterPropertyColumn); + var stringToDecimalNumberConverterPropertyColumn = new Column("StringToDecimalNumberConverterProperty", "decimal(18,2)", manyTypesTable); + manyTypesTable.Columns.Add("StringToDecimalNumberConverterProperty", stringToDecimalNumberConverterPropertyColumn); + stringToDecimalNumberConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDecimalNumberConverterPropertyColumn); + var stringToDoubleNumberConverterPropertyColumn = new Column("StringToDoubleNumberConverterProperty", "double", manyTypesTable); + manyTypesTable.Columns.Add("StringToDoubleNumberConverterProperty", stringToDoubleNumberConverterPropertyColumn); + stringToDoubleNumberConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDoubleNumberConverterPropertyColumn); + var stringToEnumConverterPropertyColumn = new Column("StringToEnumConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("StringToEnumConverterProperty", stringToEnumConverterPropertyColumn); + stringToEnumConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToEnumConverterPropertyColumn); + var stringToGuidConverterPropertyColumn = new Column("StringToGuidConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("StringToGuidConverterProperty", stringToGuidConverterPropertyColumn); + stringToGuidConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToGuidConverterPropertyColumn); + var stringToIntNumberConverterPropertyColumn = new Column("StringToIntNumberConverterProperty", "integer", manyTypesTable); + manyTypesTable.Columns.Add("StringToIntNumberConverterProperty", stringToIntNumberConverterPropertyColumn); + stringToIntNumberConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToIntNumberConverterPropertyColumn); + var stringToTimeOnlyConverterPropertyColumn = new Column("StringToTimeOnlyConverterProperty", "time", manyTypesTable); + manyTypesTable.Columns.Add("StringToTimeOnlyConverterProperty", stringToTimeOnlyConverterPropertyColumn); + stringToTimeOnlyConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToTimeOnlyConverterPropertyColumn); + var stringToTimeSpanConverterPropertyColumn = new Column("StringToTimeSpanConverterProperty", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("StringToTimeSpanConverterProperty", stringToTimeSpanConverterPropertyColumn); + stringToTimeSpanConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToTimeSpanConverterPropertyColumn); + var stringToUriConverterPropertyColumn = new Column("StringToUriConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("StringToUriConverterProperty", stringToUriConverterPropertyColumn); + stringToUriConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToUriConverterPropertyColumn); + var timeOnlyColumn = new Column("TimeOnly", "time", manyTypesTable); + manyTypesTable.Columns.Add("TimeOnly", timeOnlyColumn); + timeOnlyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeOnlyColumn); + var timeOnlyArrayColumn = new Column("TimeOnlyArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("TimeOnlyArray", timeOnlyArrayColumn); + timeOnlyArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeOnlyArrayColumn); + var timeOnlyToStringConverterPropertyColumn = new Column("TimeOnlyToStringConverterProperty", "varchar(48)", manyTypesTable); + manyTypesTable.Columns.Add("TimeOnlyToStringConverterProperty", timeOnlyToStringConverterPropertyColumn); + timeOnlyToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeOnlyToStringConverterPropertyColumn); + var timeOnlyToTicksConverterPropertyColumn = new Column("TimeOnlyToTicksConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("TimeOnlyToTicksConverterProperty", timeOnlyToTicksConverterPropertyColumn); + timeOnlyToTicksConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeOnlyToTicksConverterPropertyColumn); + var timeSpanColumn = new Column("TimeSpan", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("TimeSpan", timeSpanColumn); + timeSpanColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeSpanColumn); + var timeSpanArrayColumn = new Column("TimeSpanArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("TimeSpanArray", timeSpanArrayColumn); + timeSpanArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeSpanArrayColumn); + var timeSpanToStringConverterPropertyColumn = new Column("TimeSpanToStringConverterProperty", "varchar(48)", manyTypesTable); + manyTypesTable.Columns.Add("TimeSpanToStringConverterProperty", timeSpanToStringConverterPropertyColumn); + timeSpanToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeSpanToStringConverterPropertyColumn); + var timeSpanToTicksConverterPropertyColumn = new Column("TimeSpanToTicksConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("TimeSpanToTicksConverterProperty", timeSpanToTicksConverterPropertyColumn); + timeSpanToTicksConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeSpanToTicksConverterPropertyColumn); + var uInt16Column = new Column("UInt16", "integer", manyTypesTable); + manyTypesTable.Columns.Add("UInt16", uInt16Column); + uInt16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt16Column); + var uInt16ArrayColumn = new Column("UInt16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UInt16Array", uInt16ArrayColumn); + uInt16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt16ArrayColumn); + var uInt32Column = new Column("UInt32", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("UInt32", uInt32Column); + uInt32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt32Column); + var uInt32ArrayColumn = new Column("UInt32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UInt32Array", uInt32ArrayColumn); + uInt32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt32ArrayColumn); + var uInt64Column = new Column("UInt64", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("UInt64", uInt64Column); + uInt64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt64Column); + var uInt64ArrayColumn = new Column("UInt64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UInt64Array", uInt64ArrayColumn); + uInt64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt64ArrayColumn); + var uInt8Column = new Column("UInt8", "byte", manyTypesTable); + manyTypesTable.Columns.Add("UInt8", uInt8Column); + uInt8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt8Column); + var uInt8ArrayColumn = new Column("UInt8Array", "longbinary", manyTypesTable); + manyTypesTable.Columns.Add("UInt8Array", uInt8ArrayColumn); + uInt8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt8ArrayColumn); + var uInt8ReadOnlyCollectionColumn = new Column("UInt8ReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UInt8ReadOnlyCollection", uInt8ReadOnlyCollectionColumn); + uInt8ReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt8ReadOnlyCollectionColumn); + var uriColumn = new Column("Uri", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Uri", uriColumn); + uriColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uriColumn); + var uriArrayColumn = new Column("UriArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UriArray", uriArrayColumn); + uriArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uriArrayColumn); + var uriToStringConverterPropertyColumn = new Column("UriToStringConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UriToStringConverterProperty", uriToStringConverterPropertyColumn); + uriToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uriToStringConverterPropertyColumn); + relationalModel.Tables.Add(("ManyTypes", null), manyTypesTable); + var manyTypesTableMapping = new TableMapping(manyTypes, manyTypesTable, null); + manyTypesTable.AddTypeMapping(manyTypesTableMapping, false); + tableMappings1.Add(manyTypesTableMapping); + RelationalModel.CreateColumnMapping(idColumn0, manyTypes.FindProperty("Id")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolColumn, manyTypes.FindProperty("Bool")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolArrayColumn, manyTypes.FindProperty("BoolArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolReadOnlyCollectionColumn, manyTypes.FindProperty("BoolReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolToStringConverterPropertyColumn, manyTypes.FindProperty("BoolToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolToTwoValuesConverterPropertyColumn, manyTypes.FindProperty("BoolToTwoValuesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolToZeroOneConverterPropertyColumn, manyTypes.FindProperty("BoolToZeroOneConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(bytesColumn, manyTypes.FindProperty("Bytes")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(bytesArrayColumn, manyTypes.FindProperty("BytesArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(bytesToStringConverterPropertyColumn, manyTypes.FindProperty("BytesToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(castingConverterPropertyColumn, manyTypes.FindProperty("CastingConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(charColumn, manyTypes.FindProperty("Char")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(charArrayColumn, manyTypes.FindProperty("CharArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(charToStringConverterPropertyColumn, manyTypes.FindProperty("CharToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateOnlyColumn, manyTypes.FindProperty("DateOnly")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateOnlyArrayColumn, manyTypes.FindProperty("DateOnlyArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateOnlyToStringConverterPropertyColumn, manyTypes.FindProperty("DateOnlyToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeColumn, manyTypes.FindProperty("DateTime")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeArrayColumn, manyTypes.FindProperty("DateTimeArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeOffsetToBinaryConverterPropertyColumn, manyTypes.FindProperty("DateTimeOffsetToBinaryConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeOffsetToBytesConverterPropertyColumn, manyTypes.FindProperty("DateTimeOffsetToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeOffsetToStringConverterPropertyColumn, manyTypes.FindProperty("DateTimeOffsetToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeToBinaryConverterPropertyColumn, manyTypes.FindProperty("DateTimeToBinaryConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeToStringConverterPropertyColumn, manyTypes.FindProperty("DateTimeToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeToTicksConverterPropertyColumn, manyTypes.FindProperty("DateTimeToTicksConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(decimalColumn, manyTypes.FindProperty("Decimal")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(decimalArrayColumn, manyTypes.FindProperty("DecimalArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(decimalNumberToBytesConverterPropertyColumn, manyTypes.FindProperty("DecimalNumberToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(decimalNumberToStringConverterPropertyColumn, manyTypes.FindProperty("DecimalNumberToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(doubleColumn, manyTypes.FindProperty("Double")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(doubleArrayColumn, manyTypes.FindProperty("DoubleArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(doubleNumberToBytesConverterPropertyColumn, manyTypes.FindProperty("DoubleNumberToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(doubleNumberToStringConverterPropertyColumn, manyTypes.FindProperty("DoubleNumberToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16Column, manyTypes.FindProperty("Enum16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16ArrayColumn, manyTypes.FindProperty("Enum16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16AsStringColumn, manyTypes.FindProperty("Enum16AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16AsStringArrayColumn, manyTypes.FindProperty("Enum16AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16AsStringCollectionColumn, manyTypes.FindProperty("Enum16AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16CollectionColumn, manyTypes.FindProperty("Enum16Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32Column, manyTypes.FindProperty("Enum32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32ArrayColumn, manyTypes.FindProperty("Enum32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32AsStringColumn, manyTypes.FindProperty("Enum32AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32AsStringArrayColumn, manyTypes.FindProperty("Enum32AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32AsStringCollectionColumn, manyTypes.FindProperty("Enum32AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32CollectionColumn, manyTypes.FindProperty("Enum32Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64Column, manyTypes.FindProperty("Enum64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64ArrayColumn, manyTypes.FindProperty("Enum64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64AsStringColumn, manyTypes.FindProperty("Enum64AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64AsStringArrayColumn, manyTypes.FindProperty("Enum64AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64AsStringCollectionColumn, manyTypes.FindProperty("Enum64AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64CollectionColumn, manyTypes.FindProperty("Enum64Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8Column, manyTypes.FindProperty("Enum8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8ArrayColumn, manyTypes.FindProperty("Enum8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8AsStringColumn, manyTypes.FindProperty("Enum8AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8AsStringArrayColumn, manyTypes.FindProperty("Enum8AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8AsStringCollectionColumn, manyTypes.FindProperty("Enum8AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8CollectionColumn, manyTypes.FindProperty("Enum8Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumToNumberConverterPropertyColumn, manyTypes.FindProperty("EnumToNumberConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumToStringConverterPropertyColumn, manyTypes.FindProperty("EnumToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16Column, manyTypes.FindProperty("EnumU16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16ArrayColumn, manyTypes.FindProperty("EnumU16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16AsStringColumn, manyTypes.FindProperty("EnumU16AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16AsStringArrayColumn, manyTypes.FindProperty("EnumU16AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16AsStringCollectionColumn, manyTypes.FindProperty("EnumU16AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16CollectionColumn, manyTypes.FindProperty("EnumU16Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32Column, manyTypes.FindProperty("EnumU32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32ArrayColumn, manyTypes.FindProperty("EnumU32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32AsStringColumn, manyTypes.FindProperty("EnumU32AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32AsStringArrayColumn, manyTypes.FindProperty("EnumU32AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32AsStringCollectionColumn, manyTypes.FindProperty("EnumU32AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32CollectionColumn, manyTypes.FindProperty("EnumU32Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64Column, manyTypes.FindProperty("EnumU64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64ArrayColumn, manyTypes.FindProperty("EnumU64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64AsStringColumn, manyTypes.FindProperty("EnumU64AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64AsStringArrayColumn, manyTypes.FindProperty("EnumU64AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64AsStringCollectionColumn, manyTypes.FindProperty("EnumU64AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64CollectionColumn, manyTypes.FindProperty("EnumU64Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8Column, manyTypes.FindProperty("EnumU8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8ArrayColumn, manyTypes.FindProperty("EnumU8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8AsStringColumn, manyTypes.FindProperty("EnumU8AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8AsStringArrayColumn, manyTypes.FindProperty("EnumU8AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8AsStringCollectionColumn, manyTypes.FindProperty("EnumU8AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8CollectionColumn, manyTypes.FindProperty("EnumU8Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(floatColumn, manyTypes.FindProperty("Float")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(floatArrayColumn, manyTypes.FindProperty("FloatArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(guidColumn, manyTypes.FindProperty("Guid")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(guidArrayColumn, manyTypes.FindProperty("GuidArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(guidToBytesConverterPropertyColumn, manyTypes.FindProperty("GuidToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(guidToStringConverterPropertyColumn, manyTypes.FindProperty("GuidToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressColumn, manyTypes.FindProperty("IPAddress")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressArrayColumn, manyTypes.FindProperty("IPAddressArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressReadOnlyCollectionColumn, manyTypes.FindProperty("IPAddressReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressToBytesConverterPropertyColumn, manyTypes.FindProperty("IPAddressToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressToStringConverterPropertyColumn, manyTypes.FindProperty("IPAddressToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int16Column, manyTypes.FindProperty("Int16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int16ArrayColumn, manyTypes.FindProperty("Int16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int32Column, manyTypes.FindProperty("Int32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int32ArrayColumn, manyTypes.FindProperty("Int32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int32ReadOnlyCollectionColumn, manyTypes.FindProperty("Int32ReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int64Column, manyTypes.FindProperty("Int64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int64ArrayColumn, manyTypes.FindProperty("Int64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int8Column, manyTypes.FindProperty("Int8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int8ArrayColumn, manyTypes.FindProperty("Int8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(intNumberToBytesConverterPropertyColumn, manyTypes.FindProperty("IntNumberToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(intNumberToStringConverterPropertyColumn, manyTypes.FindProperty("IntNumberToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullIntToNullStringConverterPropertyColumn, manyTypes.FindProperty("NullIntToNullStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableBoolColumn, manyTypes.FindProperty("NullableBool")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableBoolArrayColumn, manyTypes.FindProperty("NullableBoolArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableBytesColumn, manyTypes.FindProperty("NullableBytes")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableBytesArrayColumn, manyTypes.FindProperty("NullableBytesArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableCharColumn, manyTypes.FindProperty("NullableChar")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableCharArrayColumn, manyTypes.FindProperty("NullableCharArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDateOnlyColumn, manyTypes.FindProperty("NullableDateOnly")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDateOnlyArrayColumn, manyTypes.FindProperty("NullableDateOnlyArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDateTimeColumn, manyTypes.FindProperty("NullableDateTime")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDateTimeArrayColumn, manyTypes.FindProperty("NullableDateTimeArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDecimalColumn, manyTypes.FindProperty("NullableDecimal")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDecimalArrayColumn, manyTypes.FindProperty("NullableDecimalArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDoubleColumn, manyTypes.FindProperty("NullableDouble")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDoubleArrayColumn, manyTypes.FindProperty("NullableDoubleArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16Column, manyTypes.FindProperty("NullableEnum16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16ArrayColumn, manyTypes.FindProperty("NullableEnum16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16AsStringColumn, manyTypes.FindProperty("NullableEnum16AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16AsStringArrayColumn, manyTypes.FindProperty("NullableEnum16AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16AsStringCollectionColumn, manyTypes.FindProperty("NullableEnum16AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16CollectionColumn, manyTypes.FindProperty("NullableEnum16Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32Column, manyTypes.FindProperty("NullableEnum32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32ArrayColumn, manyTypes.FindProperty("NullableEnum32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32AsStringColumn, manyTypes.FindProperty("NullableEnum32AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32AsStringArrayColumn, manyTypes.FindProperty("NullableEnum32AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32AsStringCollectionColumn, manyTypes.FindProperty("NullableEnum32AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32CollectionColumn, manyTypes.FindProperty("NullableEnum32Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64Column, manyTypes.FindProperty("NullableEnum64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64ArrayColumn, manyTypes.FindProperty("NullableEnum64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64AsStringColumn, manyTypes.FindProperty("NullableEnum64AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64AsStringArrayColumn, manyTypes.FindProperty("NullableEnum64AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64AsStringCollectionColumn, manyTypes.FindProperty("NullableEnum64AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64CollectionColumn, manyTypes.FindProperty("NullableEnum64Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8Column, manyTypes.FindProperty("NullableEnum8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8ArrayColumn, manyTypes.FindProperty("NullableEnum8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8AsStringColumn, manyTypes.FindProperty("NullableEnum8AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8AsStringArrayColumn, manyTypes.FindProperty("NullableEnum8AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8AsStringCollectionColumn, manyTypes.FindProperty("NullableEnum8AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8CollectionColumn, manyTypes.FindProperty("NullableEnum8Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16Column, manyTypes.FindProperty("NullableEnumU16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16ArrayColumn, manyTypes.FindProperty("NullableEnumU16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16AsStringColumn, manyTypes.FindProperty("NullableEnumU16AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16AsStringArrayColumn, manyTypes.FindProperty("NullableEnumU16AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16AsStringCollectionColumn, manyTypes.FindProperty("NullableEnumU16AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16CollectionColumn, manyTypes.FindProperty("NullableEnumU16Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32Column, manyTypes.FindProperty("NullableEnumU32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32ArrayColumn, manyTypes.FindProperty("NullableEnumU32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32AsStringColumn, manyTypes.FindProperty("NullableEnumU32AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32AsStringArrayColumn, manyTypes.FindProperty("NullableEnumU32AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32AsStringCollectionColumn, manyTypes.FindProperty("NullableEnumU32AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32CollectionColumn, manyTypes.FindProperty("NullableEnumU32Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64Column, manyTypes.FindProperty("NullableEnumU64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64ArrayColumn, manyTypes.FindProperty("NullableEnumU64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64AsStringColumn, manyTypes.FindProperty("NullableEnumU64AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64AsStringArrayColumn, manyTypes.FindProperty("NullableEnumU64AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64AsStringCollectionColumn, manyTypes.FindProperty("NullableEnumU64AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64CollectionColumn, manyTypes.FindProperty("NullableEnumU64Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8Column, manyTypes.FindProperty("NullableEnumU8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8ArrayColumn, manyTypes.FindProperty("NullableEnumU8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8AsStringColumn, manyTypes.FindProperty("NullableEnumU8AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8AsStringArrayColumn, manyTypes.FindProperty("NullableEnumU8AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8AsStringCollectionColumn, manyTypes.FindProperty("NullableEnumU8AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8CollectionColumn, manyTypes.FindProperty("NullableEnumU8Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableFloatColumn, manyTypes.FindProperty("NullableFloat")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableFloatArrayColumn, manyTypes.FindProperty("NullableFloatArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableGuidColumn, manyTypes.FindProperty("NullableGuid")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableGuidArrayColumn, manyTypes.FindProperty("NullableGuidArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableIPAddressColumn, manyTypes.FindProperty("NullableIPAddress")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableIPAddressArrayColumn, manyTypes.FindProperty("NullableIPAddressArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt16Column, manyTypes.FindProperty("NullableInt16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt16ArrayColumn, manyTypes.FindProperty("NullableInt16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt32Column, manyTypes.FindProperty("NullableInt32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt32ArrayColumn, manyTypes.FindProperty("NullableInt32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt64Column, manyTypes.FindProperty("NullableInt64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt64ArrayColumn, manyTypes.FindProperty("NullableInt64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt8Column, manyTypes.FindProperty("NullableInt8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt8ArrayColumn, manyTypes.FindProperty("NullableInt8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullablePhysicalAddressColumn, manyTypes.FindProperty("NullablePhysicalAddress")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullablePhysicalAddressArrayColumn, manyTypes.FindProperty("NullablePhysicalAddressArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableStringColumn, manyTypes.FindProperty("NullableString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableStringArrayColumn, manyTypes.FindProperty("NullableStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableTimeOnlyColumn, manyTypes.FindProperty("NullableTimeOnly")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableTimeOnlyArrayColumn, manyTypes.FindProperty("NullableTimeOnlyArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableTimeSpanColumn, manyTypes.FindProperty("NullableTimeSpan")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableTimeSpanArrayColumn, manyTypes.FindProperty("NullableTimeSpanArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt16Column, manyTypes.FindProperty("NullableUInt16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt16ArrayColumn, manyTypes.FindProperty("NullableUInt16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt32Column, manyTypes.FindProperty("NullableUInt32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt32ArrayColumn, manyTypes.FindProperty("NullableUInt32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt64Column, manyTypes.FindProperty("NullableUInt64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt64ArrayColumn, manyTypes.FindProperty("NullableUInt64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt8Column, manyTypes.FindProperty("NullableUInt8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt8ArrayColumn, manyTypes.FindProperty("NullableUInt8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUriColumn, manyTypes.FindProperty("NullableUri")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUriArrayColumn, manyTypes.FindProperty("NullableUriArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(physicalAddressColumn, manyTypes.FindProperty("PhysicalAddress")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(physicalAddressArrayColumn, manyTypes.FindProperty("PhysicalAddressArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(physicalAddressToBytesConverterPropertyColumn, manyTypes.FindProperty("PhysicalAddressToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(physicalAddressToStringConverterPropertyColumn, manyTypes.FindProperty("PhysicalAddressToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringColumn, manyTypes.FindProperty("String")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringArrayColumn, manyTypes.FindProperty("StringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringReadOnlyCollectionColumn, manyTypes.FindProperty("StringReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToBoolConverterPropertyColumn, manyTypes.FindProperty("StringToBoolConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToBytesConverterPropertyColumn, manyTypes.FindProperty("StringToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToCharConverterPropertyColumn, manyTypes.FindProperty("StringToCharConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDateOnlyConverterPropertyColumn, manyTypes.FindProperty("StringToDateOnlyConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDateTimeConverterPropertyColumn, manyTypes.FindProperty("StringToDateTimeConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDateTimeOffsetConverterPropertyColumn, manyTypes.FindProperty("StringToDateTimeOffsetConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDecimalNumberConverterPropertyColumn, manyTypes.FindProperty("StringToDecimalNumberConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDoubleNumberConverterPropertyColumn, manyTypes.FindProperty("StringToDoubleNumberConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToEnumConverterPropertyColumn, manyTypes.FindProperty("StringToEnumConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToGuidConverterPropertyColumn, manyTypes.FindProperty("StringToGuidConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToIntNumberConverterPropertyColumn, manyTypes.FindProperty("StringToIntNumberConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToTimeOnlyConverterPropertyColumn, manyTypes.FindProperty("StringToTimeOnlyConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToTimeSpanConverterPropertyColumn, manyTypes.FindProperty("StringToTimeSpanConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToUriConverterPropertyColumn, manyTypes.FindProperty("StringToUriConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeOnlyColumn, manyTypes.FindProperty("TimeOnly")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeOnlyArrayColumn, manyTypes.FindProperty("TimeOnlyArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeOnlyToStringConverterPropertyColumn, manyTypes.FindProperty("TimeOnlyToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeOnlyToTicksConverterPropertyColumn, manyTypes.FindProperty("TimeOnlyToTicksConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeSpanColumn, manyTypes.FindProperty("TimeSpan")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeSpanArrayColumn, manyTypes.FindProperty("TimeSpanArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeSpanToStringConverterPropertyColumn, manyTypes.FindProperty("TimeSpanToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeSpanToTicksConverterPropertyColumn, manyTypes.FindProperty("TimeSpanToTicksConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt16Column, manyTypes.FindProperty("UInt16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt16ArrayColumn, manyTypes.FindProperty("UInt16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt32Column, manyTypes.FindProperty("UInt32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt32ArrayColumn, manyTypes.FindProperty("UInt32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt64Column, manyTypes.FindProperty("UInt64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt64ArrayColumn, manyTypes.FindProperty("UInt64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt8Column, manyTypes.FindProperty("UInt8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt8ArrayColumn, manyTypes.FindProperty("UInt8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt8ReadOnlyCollectionColumn, manyTypes.FindProperty("UInt8ReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uriColumn, manyTypes.FindProperty("Uri")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uriArrayColumn, manyTypes.FindProperty("UriArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uriToStringConverterPropertyColumn, manyTypes.FindProperty("UriToStringConverterProperty")!, manyTypesTableMapping); + var pK_ManyTypes = new UniqueConstraint("PK_ManyTypes", manyTypesTable, new[] { idColumn0 }); + manyTypesTable.PrimaryKey = pK_ManyTypes; + pK_ManyTypes.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_ManyTypes)); + var pK_ManyTypesKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes", + new[] { "Id" }); + pK_ManyTypes.MappedKeys.Add(pK_ManyTypesKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_ManyTypesKey).Add(pK_ManyTypes); + manyTypesTable.UniqueConstraints.Add("PK_ManyTypes", pK_ManyTypes); + + var principalBase = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase")!; + + var defaultTableMappings2 = new List>(); + principalBase.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings2); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", null, relationalModel); + var alternateIdColumnBase = new ColumnBase("AlternateId", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("AlternateId", alternateIdColumnBase); + var detailsColumnBase = new ColumnBase("Details", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Details", detailsColumnBase); + var enum1ColumnBase = new ColumnBase("Enum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Enum1", enum1ColumnBase); + var enum2ColumnBase = new ColumnBase("Enum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Enum2", enum2ColumnBase); + var flagsEnum1ColumnBase = new ColumnBase("FlagsEnum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("FlagsEnum1", flagsEnum1ColumnBase); + var flagsEnum2ColumnBase = new ColumnBase("FlagsEnum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("FlagsEnum2", flagsEnum2ColumnBase); + var idColumnBase1 = new ColumnBase("Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Id", idColumnBase1); + var numberColumnBase = new ColumnBase("Number", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Number", numberColumnBase); + var principalBaseAlternateIdColumnBase = new ColumnBase("PrincipalBaseAlternateId", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("PrincipalBaseAlternateId", principalBaseAlternateIdColumnBase); + var principalBaseIdColumnBase = new ColumnBase("PrincipalBaseId", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("PrincipalBaseId", principalBaseIdColumnBase); + var refTypeArrayColumnBase = new ColumnBase("RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeArray", refTypeArrayColumnBase); + var refTypeEnumerableColumnBase = new ColumnBase("RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumnBase); + var refTypeIListColumnBase = new ColumnBase("RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeIList", refTypeIListColumnBase); + var refTypeListColumnBase = new ColumnBase("RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeList", refTypeListColumnBase); + var valueTypeArrayColumnBase = new ColumnBase("ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeArray", valueTypeArrayColumnBase); + var valueTypeEnumerableColumnBase = new ColumnBase("ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumnBase); + var valueTypeIListColumnBase = new ColumnBase("ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeIList", valueTypeIListColumnBase); + var valueTypeListColumnBase = new ColumnBase("ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeList", valueTypeListColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase = new TableMappingBase(principalBase, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, true); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase, false); + defaultTableMappings2.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)alternateIdColumnBase, principalBase.FindProperty("AlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase1, principalBase.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum1ColumnBase, principalBase.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum2ColumnBase, principalBase.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum1ColumnBase, principalBase.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum2ColumnBase, principalBase.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase, principalBase.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase, principalBase.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase, principalBase.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase, principalBase.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase, principalBase.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase, principalBase.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase, principalBase.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase, principalBase.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + + var tableMappings2 = new List(); + principalBase.SetRuntimeAnnotation("Relational:TableMappings", tableMappings2); + var principalBaseTable = new Table("PrincipalBase", "mySchema", relationalModel); + var idColumn1 = new Column("Id", "integer", principalBaseTable); + principalBaseTable.Columns.Add("Id", idColumn1); + idColumn1.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn1); + idColumn1.AddAnnotation("Jet:Identity", "2, 3"); + var alternateIdColumn = new Column("AlternateId", "uniqueidentifier", principalBaseTable); + principalBaseTable.Columns.Add("AlternateId", alternateIdColumn); + alternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(alternateIdColumn); + var enum1Column = new Column("Enum1", "integer", principalBaseTable); + principalBaseTable.Columns.Add("Enum1", enum1Column); + enum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum1Column); + var enum2Column = new Column("Enum2", "integer", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Enum2", enum2Column); + enum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum2Column); + var flagsEnum1Column = new Column("FlagsEnum1", "integer", principalBaseTable); + principalBaseTable.Columns.Add("FlagsEnum1", flagsEnum1Column); + flagsEnum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum1Column); + var flagsEnum2Column = new Column("FlagsEnum2", "integer", principalBaseTable); + principalBaseTable.Columns.Add("FlagsEnum2", flagsEnum2Column); + flagsEnum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum2Column); + var owned_NumberColumn = new Column("Owned_Number", "integer", principalBaseTable); + principalBaseTable.Columns.Add("Owned_Number", owned_NumberColumn); + owned_NumberColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_NumberColumn); + var owned_RefTypeArrayColumn = new Column("Owned_RefTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_RefTypeArray", owned_RefTypeArrayColumn); + owned_RefTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_RefTypeArrayColumn); + var owned_RefTypeEnumerableColumn = new Column("Owned_RefTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_RefTypeEnumerable", owned_RefTypeEnumerableColumn); + owned_RefTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_RefTypeEnumerableColumn); + var owned_RefTypeIListColumn = new Column("Owned_RefTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_RefTypeIList", owned_RefTypeIListColumn); + owned_RefTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_RefTypeIListColumn); + var owned_RefTypeListColumn = new Column("Owned_RefTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_RefTypeList", owned_RefTypeListColumn); + owned_RefTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_RefTypeListColumn); + var owned_ValueTypeArrayColumn = new Column("Owned_ValueTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_ValueTypeArray", owned_ValueTypeArrayColumn); + owned_ValueTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_ValueTypeArrayColumn); + var owned_ValueTypeEnumerableColumn = new Column("Owned_ValueTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_ValueTypeEnumerable", owned_ValueTypeEnumerableColumn); + owned_ValueTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_ValueTypeEnumerableColumn); + var owned_ValueTypeIListColumn = new Column("Owned_ValueTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_ValueTypeIList", owned_ValueTypeIListColumn); + owned_ValueTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_ValueTypeIListColumn); + var owned_ValueTypeListColumn = new Column("Owned_ValueTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_ValueTypeList", owned_ValueTypeListColumn); + owned_ValueTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_ValueTypeListColumn); + var refTypeArrayColumn = new Column("RefTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeArray", refTypeArrayColumn); + refTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeArrayColumn); + var refTypeEnumerableColumn = new Column("RefTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumn); + refTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeEnumerableColumn); + var refTypeIListColumn = new Column("RefTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeIList", refTypeIListColumn); + refTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeIListColumn); + var refTypeListColumn = new Column("RefTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeList", refTypeListColumn); + refTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeListColumn); + var valueTypeArrayColumn = new Column("ValueTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeArray", valueTypeArrayColumn); + valueTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeArrayColumn); + var valueTypeEnumerableColumn = new Column("ValueTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumn); + valueTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeEnumerableColumn); + var valueTypeIListColumn = new Column("ValueTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeIList", valueTypeIListColumn); + valueTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeIListColumn); + var valueTypeListColumn = new Column("ValueTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeList", valueTypeListColumn); + valueTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeListColumn); + relationalModel.Tables.Add(("PrincipalBase", "mySchema"), principalBaseTable); + var principalBaseTableMapping = new TableMapping(principalBase, principalBaseTable, true) + { + IsSharedTablePrincipal = true, + }; + principalBaseTable.AddTypeMapping(principalBaseTableMapping, false); + tableMappings2.Add(principalBaseTableMapping); + RelationalModel.CreateColumnMapping(alternateIdColumn, principalBase.FindProperty("AlternateId")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(idColumn1, principalBase.FindProperty("Id")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(enum1Column, principalBase.FindProperty("Enum1")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(enum2Column, principalBase.FindProperty("Enum2")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum1Column, principalBase.FindProperty("FlagsEnum1")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum2Column, principalBase.FindProperty("FlagsEnum2")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeArrayColumn, principalBase.FindProperty("RefTypeArray")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeEnumerableColumn, principalBase.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeIListColumn, principalBase.FindProperty("RefTypeIList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeListColumn, principalBase.FindProperty("RefTypeList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeArrayColumn, principalBase.FindProperty("ValueTypeArray")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeEnumerableColumn, principalBase.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeIListColumn, principalBase.FindProperty("ValueTypeIList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeListColumn, principalBase.FindProperty("ValueTypeList")!, principalBaseTableMapping); + + var ownedType = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType")!; + + var defaultTableMappings3 = new List>(); + ownedType.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings3); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0 = new TableMappingBase(ownedType, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0, false); + defaultTableMappings3.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)principalBaseAlternateIdColumnBase, ownedType.FindProperty("PrincipalBaseAlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)principalBaseIdColumnBase, ownedType.FindProperty("PrincipalBaseId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)detailsColumnBase, ownedType.FindProperty("Details")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)numberColumnBase, ownedType.FindProperty("Number")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase, ownedType.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase, ownedType.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase, ownedType.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase, ownedType.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase, ownedType.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase, ownedType.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase, ownedType.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase, ownedType.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + + var tableMappings3 = new List(); + ownedType.SetRuntimeAnnotation("Relational:TableMappings", tableMappings3); + var principalBaseTableMapping0 = new TableMapping(ownedType, principalBaseTable, null) + { + IsSharedTablePrincipal = false, + IsSplitEntityTypePrincipal = true + }; + principalBaseTable.AddTypeMapping(principalBaseTableMapping0, false); + tableMappings3.Add(principalBaseTableMapping0); + principalBaseTable.AddRowInternalForeignKey(ownedType, RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType", + new[] { "PrincipalBaseId", "PrincipalBaseAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id", "AlternateId" })); + RelationalModel.CreateColumnMapping(alternateIdColumn, ownedType.FindProperty("PrincipalBaseAlternateId")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(idColumn1, ownedType.FindProperty("PrincipalBaseId")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_NumberColumn, ownedType.FindProperty("Number")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_RefTypeArrayColumn, ownedType.FindProperty("RefTypeArray")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_RefTypeEnumerableColumn, ownedType.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_RefTypeIListColumn, ownedType.FindProperty("RefTypeIList")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_RefTypeListColumn, ownedType.FindProperty("RefTypeList")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_ValueTypeArrayColumn, ownedType.FindProperty("ValueTypeArray")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_ValueTypeEnumerableColumn, ownedType.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_ValueTypeIListColumn, ownedType.FindProperty("ValueTypeIList")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_ValueTypeListColumn, ownedType.FindProperty("ValueTypeList")!, principalBaseTableMapping0); + var detailsTable = new Table("Details", null, relationalModel); + var principalBaseIdColumn = new Column("PrincipalBaseId", "integer", detailsTable); + detailsTable.Columns.Add("PrincipalBaseId", principalBaseIdColumn); + principalBaseIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalBaseIdColumn); + var principalBaseAlternateIdColumn = new Column("PrincipalBaseAlternateId", "uniqueidentifier", detailsTable); + detailsTable.Columns.Add("PrincipalBaseAlternateId", principalBaseAlternateIdColumn); + principalBaseAlternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalBaseAlternateIdColumn); + var detailsColumn = new Column("Details", "varchar(255)", detailsTable) + { + IsNullable = true + }; + detailsTable.Columns.Add("Details", detailsColumn); + detailsColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(detailsColumn); + relationalModel.Tables.Add(("Details", null), detailsTable); + var detailsTableMapping = new TableMapping(ownedType, detailsTable, null) + { + IsSplitEntityTypePrincipal = false + }; + detailsTable.AddTypeMapping(detailsTableMapping, false); + tableMappings3.Add(detailsTableMapping); + RelationalModel.CreateColumnMapping(principalBaseAlternateIdColumn, ownedType.FindProperty("PrincipalBaseAlternateId")!, detailsTableMapping); + RelationalModel.CreateColumnMapping(principalBaseIdColumn, ownedType.FindProperty("PrincipalBaseId")!, detailsTableMapping); + RelationalModel.CreateColumnMapping(detailsColumn, ownedType.FindProperty("Details")!, detailsTableMapping); + var pK_Details = new UniqueConstraint("PK_Details", detailsTable, new[] { principalBaseIdColumn, principalBaseAlternateIdColumn }); + detailsTable.PrimaryKey = pK_Details; + pK_Details.SetRowKeyValueFactory(new CompositeRowKeyValueFactory(pK_Details)); + var pK_DetailsKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType", + new[] { "PrincipalBaseId", "PrincipalBaseAlternateId" }); + pK_Details.MappedKeys.Add(pK_DetailsKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_DetailsKey).Add(pK_Details); + detailsTable.UniqueConstraints.Add("PK_Details", pK_Details); + + var principalDerived = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>")!; + + var defaultTableMappings4 = new List>(); + principalDerived.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings4); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1 = new TableMappingBase(principalDerived, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1, false); + defaultTableMappings4.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)alternateIdColumnBase, principalDerived.FindProperty("AlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase1, principalDerived.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)enum1ColumnBase, principalDerived.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)enum2ColumnBase, principalDerived.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum1ColumnBase, principalDerived.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum2ColumnBase, principalDerived.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase, principalDerived.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase, principalDerived.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase, principalDerived.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase, principalDerived.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase, principalDerived.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase, principalDerived.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase, principalDerived.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase, principalDerived.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", null, relationalModel); + var alternateIdColumnBase0 = new ColumnBase("AlternateId", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("AlternateId", alternateIdColumnBase0); + var idColumnBase2 = new ColumnBase("Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Id", idColumnBase2); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase = new TableMappingBase(principalDerived, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase, false); + defaultTableMappings4.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)alternateIdColumnBase0, principalDerived.FindProperty("AlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase2, principalDerived.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + + var tableMappings4 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:TableMappings", tableMappings4); + var principalBaseTableMapping1 = new TableMapping(principalDerived, principalBaseTable, null) + { + IsSharedTablePrincipal = false, + }; + principalBaseTable.AddTypeMapping(principalBaseTableMapping1, false); + tableMappings4.Add(principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(alternateIdColumn, principalDerived.FindProperty("AlternateId")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(idColumn1, principalDerived.FindProperty("Id")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(enum1Column, principalDerived.FindProperty("Enum1")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(enum2Column, principalDerived.FindProperty("Enum2")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(flagsEnum1Column, principalDerived.FindProperty("FlagsEnum1")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(flagsEnum2Column, principalDerived.FindProperty("FlagsEnum2")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(refTypeArrayColumn, principalDerived.FindProperty("RefTypeArray")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(refTypeEnumerableColumn, principalDerived.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(refTypeIListColumn, principalDerived.FindProperty("RefTypeIList")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(refTypeListColumn, principalDerived.FindProperty("RefTypeList")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(valueTypeArrayColumn, principalDerived.FindProperty("ValueTypeArray")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(valueTypeEnumerableColumn, principalDerived.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(valueTypeIListColumn, principalDerived.FindProperty("ValueTypeIList")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(valueTypeListColumn, principalDerived.FindProperty("ValueTypeList")!, principalBaseTableMapping1); + var aK_PrincipalBase_Id = new UniqueConstraint("AK_PrincipalBase_Id", principalBaseTable, new[] { idColumn1 }); + aK_PrincipalBase_Id.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(aK_PrincipalBase_Id)); + var aK_PrincipalBase_IdKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id" }); + aK_PrincipalBase_Id.MappedKeys.Add(aK_PrincipalBase_IdKey); + RelationalModel.GetOrCreateUniqueConstraints(aK_PrincipalBase_IdKey).Add(aK_PrincipalBase_Id); + principalBaseTable.UniqueConstraints.Add("AK_PrincipalBase_Id", aK_PrincipalBase_Id); + var pK = new UniqueConstraint("PK", principalBaseTable, new[] { idColumn1, alternateIdColumn }); + principalBaseTable.PrimaryKey = pK; + pK.SetRowKeyValueFactory(new CompositeRowKeyValueFactory(pK)); + var pKKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id", "AlternateId" }); + pK.MappedKeys.Add(pKKey); + RelationalModel.GetOrCreateUniqueConstraints(pKKey).Add(pK); + pK.MappedKeys.Add(pK_DetailsKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_DetailsKey).Add(pK); + principalBaseTable.UniqueConstraints.Add("PK", pK); + var iX_PrincipalBase_AlternateId_Id = new TableIndex( + "IX_PrincipalBase_AlternateId_Id", principalBaseTable, new[] { alternateIdColumn, idColumn1 }, false); + iX_PrincipalBase_AlternateId_Id.SetRowIndexValueFactory(new CompositeRowIndexValueFactory(iX_PrincipalBase_AlternateId_Id)); + var iX_PrincipalBase_AlternateId_IdIx = RelationalModel.GetIndex(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "AlternateId", "Id" }); + iX_PrincipalBase_AlternateId_Id.MappedIndexes.Add(iX_PrincipalBase_AlternateId_IdIx); + RelationalModel.GetOrCreateTableIndexes(iX_PrincipalBase_AlternateId_IdIx).Add(iX_PrincipalBase_AlternateId_Id); + principalBaseTable.Indexes.Add("IX_PrincipalBase_AlternateId_Id", iX_PrincipalBase_AlternateId_Id); + var principalDerivedTable = new Table("PrincipalDerived", null, relationalModel); + var derivedIdColumn = new Column("DerivedId", "integer", principalDerivedTable); + principalDerivedTable.Columns.Add("DerivedId", derivedIdColumn); + derivedIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(derivedIdColumn); + var alternateIdColumn0 = new Column("AlternateId", "uniqueidentifier", principalDerivedTable); + principalDerivedTable.Columns.Add("AlternateId", alternateIdColumn0); + alternateIdColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(alternateIdColumn0); + relationalModel.Tables.Add(("PrincipalDerived", null), principalDerivedTable); + var principalDerivedTableMapping = new TableMapping(principalDerived, principalDerivedTable, null); + principalDerivedTable.AddTypeMapping(principalDerivedTableMapping, false); + tableMappings4.Add(principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(alternateIdColumn0, principalDerived.FindProperty("AlternateId")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(derivedIdColumn, principalDerived.FindProperty("Id")!, principalDerivedTableMapping); + var aK_PrincipalDerived_DerivedId = new UniqueConstraint("AK_PrincipalDerived_DerivedId", principalDerivedTable, new[] { derivedIdColumn }); + aK_PrincipalDerived_DerivedId.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(aK_PrincipalDerived_DerivedId)); + aK_PrincipalDerived_DerivedId.MappedKeys.Add(aK_PrincipalBase_IdKey); + RelationalModel.GetOrCreateUniqueConstraints(aK_PrincipalBase_IdKey).Add(aK_PrincipalDerived_DerivedId); + principalDerivedTable.UniqueConstraints.Add("AK_PrincipalDerived_DerivedId", aK_PrincipalDerived_DerivedId); + var pK0 = new UniqueConstraint("PK", principalDerivedTable, new[] { derivedIdColumn, alternateIdColumn0 }); + principalDerivedTable.PrimaryKey = pK0; + pK0.SetRowKeyValueFactory(new CompositeRowKeyValueFactory(pK0)); + pK0.MappedKeys.Add(pKKey); + RelationalModel.GetOrCreateUniqueConstraints(pKKey).Add(pK0); + principalDerivedTable.UniqueConstraints.Add("PK", pK0); + var iX_PrincipalDerived_AlternateId_DerivedId = new TableIndex( + "IX_PrincipalDerived_AlternateId_DerivedId", principalDerivedTable, new[] { alternateIdColumn0, derivedIdColumn }, false); + iX_PrincipalDerived_AlternateId_DerivedId.SetRowIndexValueFactory(new CompositeRowIndexValueFactory(iX_PrincipalDerived_AlternateId_DerivedId)); + iX_PrincipalDerived_AlternateId_DerivedId.MappedIndexes.Add(iX_PrincipalBase_AlternateId_IdIx); + RelationalModel.GetOrCreateTableIndexes(iX_PrincipalBase_AlternateId_IdIx).Add(iX_PrincipalDerived_AlternateId_DerivedId); + principalDerivedTable.Indexes.Add("IX_PrincipalDerived_AlternateId_DerivedId", iX_PrincipalDerived_AlternateId_DerivedId); + + var ownedType0 = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>.ManyOwned#OwnedType")!; + + var defaultTableMappings5 = new List>(); + ownedType0.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings5); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>.ManyOwned#OwnedType", null, relationalModel); + var detailsColumnBase0 = new ColumnBase("Details", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("Details", detailsColumnBase0); + var idColumnBase3 = new ColumnBase("Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("Id", idColumnBase3); + var numberColumnBase0 = new ColumnBase("Number", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("Number", numberColumnBase0); + var principalDerivedDependentBasebyteAlternateIdColumnBase = new ColumnBase("PrincipalDerived>AlternateId", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("PrincipalDerived>AlternateId", principalDerivedDependentBasebyteAlternateIdColumnBase); + var principalDerivedDependentBasebyteIdColumnBase = new ColumnBase("PrincipalDerived>Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("PrincipalDerived>Id", principalDerivedDependentBasebyteIdColumnBase); + var refTypeArrayColumnBase0 = new ColumnBase("RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("RefTypeArray", refTypeArrayColumnBase0); + var refTypeEnumerableColumnBase0 = new ColumnBase("RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumnBase0); + var refTypeIListColumnBase0 = new ColumnBase("RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("RefTypeIList", refTypeIListColumnBase0); + var refTypeListColumnBase0 = new ColumnBase("RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("RefTypeList", refTypeListColumnBase0); + var valueTypeArrayColumnBase0 = new ColumnBase("ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("ValueTypeArray", valueTypeArrayColumnBase0); + var valueTypeEnumerableColumnBase0 = new ColumnBase("ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumnBase0); + var valueTypeIListColumnBase0 = new ColumnBase("ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("ValueTypeIList", valueTypeIListColumnBase0); + var valueTypeListColumnBase0 = new ColumnBase("ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.Columns.Add("ValueTypeList", valueTypeListColumnBase0); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>.ManyOwned#OwnedType", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase = new TableMappingBase(ownedType0, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase, false); + defaultTableMappings5.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase3, ownedType0.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalDerivedDependentBasebyteAlternateIdColumnBase, ownedType0.FindProperty("PrincipalDerivedAlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalDerivedDependentBasebyteIdColumnBase, ownedType0.FindProperty("PrincipalDerivedId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)detailsColumnBase0, ownedType0.FindProperty("Details")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)numberColumnBase0, ownedType0.FindProperty("Number")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase0, ownedType0.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase0, ownedType0.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase0, ownedType0.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase0, ownedType0.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase0, ownedType0.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase0, ownedType0.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase0, ownedType0.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase0, ownedType0.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteManyOwnedOwnedTypeMappingBase); + + var tableMappings5 = new List(); + ownedType0.SetRuntimeAnnotation("Relational:TableMappings", tableMappings5); + var manyOwnedTable = new Table("ManyOwned", null, relationalModel); + var principalDerivedDependentBasebyteIdColumn = new Column("PrincipalDerived>Id", "integer", manyOwnedTable); + manyOwnedTable.Columns.Add("PrincipalDerived>Id", principalDerivedDependentBasebyteIdColumn); + principalDerivedDependentBasebyteIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalDerivedDependentBasebyteIdColumn); + var principalDerivedDependentBasebyteAlternateIdColumn = new Column("PrincipalDerived>AlternateId", "uniqueidentifier", manyOwnedTable); + manyOwnedTable.Columns.Add("PrincipalDerived>AlternateId", principalDerivedDependentBasebyteAlternateIdColumn); + principalDerivedDependentBasebyteAlternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalDerivedDependentBasebyteAlternateIdColumn); + var idColumn2 = new Column("Id", "integer", manyOwnedTable); + manyOwnedTable.Columns.Add("Id", idColumn2); + idColumn2.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn2); + idColumn2.AddAnnotation("Jet:Identity", "3, 2"); + var detailsColumn0 = new Column("Details", "varchar(255)", manyOwnedTable) + { + IsNullable = true + }; + manyOwnedTable.Columns.Add("Details", detailsColumn0); + detailsColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(detailsColumn0); + var numberColumn = new Column("Number", "integer", manyOwnedTable); + manyOwnedTable.Columns.Add("Number", numberColumn); + numberColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(numberColumn); + var refTypeArrayColumn0 = new Column("RefTypeArray", "varchar(255)", manyOwnedTable) + { + IsNullable = true + }; + manyOwnedTable.Columns.Add("RefTypeArray", refTypeArrayColumn0); + refTypeArrayColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeArrayColumn0); + var refTypeEnumerableColumn0 = new Column("RefTypeEnumerable", "varchar(255)", manyOwnedTable) + { + IsNullable = true + }; + manyOwnedTable.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumn0); + refTypeEnumerableColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeEnumerableColumn0); + var refTypeIListColumn0 = new Column("RefTypeIList", "varchar(255)", manyOwnedTable) + { + IsNullable = true + }; + manyOwnedTable.Columns.Add("RefTypeIList", refTypeIListColumn0); + refTypeIListColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeIListColumn0); + var refTypeListColumn0 = new Column("RefTypeList", "varchar(255)", manyOwnedTable) + { + IsNullable = true + }; + manyOwnedTable.Columns.Add("RefTypeList", refTypeListColumn0); + refTypeListColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeListColumn0); + var valueTypeArrayColumn0 = new Column("ValueTypeArray", "varchar(255)", manyOwnedTable) + { + IsNullable = true + }; + manyOwnedTable.Columns.Add("ValueTypeArray", valueTypeArrayColumn0); + valueTypeArrayColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeArrayColumn0); + var valueTypeEnumerableColumn0 = new Column("ValueTypeEnumerable", "varchar(255)", manyOwnedTable) + { + IsNullable = true + }; + manyOwnedTable.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumn0); + valueTypeEnumerableColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeEnumerableColumn0); + var valueTypeIListColumn0 = new Column("ValueTypeIList", "varchar(255)", manyOwnedTable) + { + IsNullable = true + }; + manyOwnedTable.Columns.Add("ValueTypeIList", valueTypeIListColumn0); + valueTypeIListColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeIListColumn0); + var valueTypeListColumn0 = new Column("ValueTypeList", "varchar(255)", manyOwnedTable) + { + IsNullable = true + }; + manyOwnedTable.Columns.Add("ValueTypeList", valueTypeListColumn0); + valueTypeListColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeListColumn0); + relationalModel.Tables.Add(("ManyOwned", null), manyOwnedTable); + var manyOwnedTableMapping = new TableMapping(ownedType0, manyOwnedTable, null); + manyOwnedTable.AddTypeMapping(manyOwnedTableMapping, false); + tableMappings5.Add(manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(idColumn2, ownedType0.FindProperty("Id")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(principalDerivedDependentBasebyteAlternateIdColumn, ownedType0.FindProperty("PrincipalDerivedAlternateId")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(principalDerivedDependentBasebyteIdColumn, ownedType0.FindProperty("PrincipalDerivedId")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(detailsColumn0, ownedType0.FindProperty("Details")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(numberColumn, ownedType0.FindProperty("Number")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(refTypeArrayColumn0, ownedType0.FindProperty("RefTypeArray")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(refTypeEnumerableColumn0, ownedType0.FindProperty("RefTypeEnumerable")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(refTypeIListColumn0, ownedType0.FindProperty("RefTypeIList")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(refTypeListColumn0, ownedType0.FindProperty("RefTypeList")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(valueTypeArrayColumn0, ownedType0.FindProperty("ValueTypeArray")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(valueTypeEnumerableColumn0, ownedType0.FindProperty("ValueTypeEnumerable")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(valueTypeIListColumn0, ownedType0.FindProperty("ValueTypeIList")!, manyOwnedTableMapping); + RelationalModel.CreateColumnMapping(valueTypeListColumn0, ownedType0.FindProperty("ValueTypeList")!, manyOwnedTableMapping); + var pK_ManyOwned = new UniqueConstraint("PK_ManyOwned", manyOwnedTable, new[] { principalDerivedDependentBasebyteIdColumn, principalDerivedDependentBasebyteAlternateIdColumn, idColumn2 }); + manyOwnedTable.PrimaryKey = pK_ManyOwned; + pK_ManyOwned.SetRowKeyValueFactory(new CompositeRowKeyValueFactory(pK_ManyOwned)); + var pK_ManyOwnedKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>.ManyOwned#OwnedType", + new[] { "PrincipalDerivedId", "PrincipalDerivedAlternateId", "Id" }); + pK_ManyOwned.MappedKeys.Add(pK_ManyOwnedKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_ManyOwnedKey).Add(pK_ManyOwned); + manyOwnedTable.UniqueConstraints.Add("PK_ManyOwned", pK_ManyOwned); + + var principalBasePrincipalDerivedDependentBasebyte = FindEntityType("PrincipalBasePrincipalDerived>")!; + + var defaultTableMappings6 = new List>(); + principalBasePrincipalDerivedDependentBasebyte.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings6); + var principalBasePrincipalDerivedDependentBasebyteTableBase = new TableBase("PrincipalBasePrincipalDerived>", null, relationalModel); + var derivedsAlternateIdColumnBase = new ColumnBase("DerivedsAlternateId", "uniqueidentifier", principalBasePrincipalDerivedDependentBasebyteTableBase); + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("DerivedsAlternateId", derivedsAlternateIdColumnBase); + var derivedsIdColumnBase = new ColumnBase("DerivedsId", "integer", principalBasePrincipalDerivedDependentBasebyteTableBase); + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("DerivedsId", derivedsIdColumnBase); + var principalsAlternateIdColumnBase = new ColumnBase("PrincipalsAlternateId", "uniqueidentifier", principalBasePrincipalDerivedDependentBasebyteTableBase); + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("PrincipalsAlternateId", principalsAlternateIdColumnBase); + var principalsIdColumnBase = new ColumnBase("PrincipalsId", "integer", principalBasePrincipalDerivedDependentBasebyteTableBase); + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("PrincipalsId", principalsIdColumnBase); + var rowidColumnBase = new ColumnBase("rowid", "varbinary(8)", principalBasePrincipalDerivedDependentBasebyteTableBase) + { + IsNullable = true + }; + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("rowid", rowidColumnBase); + relationalModel.DefaultTables.Add("PrincipalBasePrincipalDerived>", principalBasePrincipalDerivedDependentBasebyteTableBase); + var principalBasePrincipalDerivedDependentBasebyteMappingBase = new TableMappingBase(principalBasePrincipalDerivedDependentBasebyte, principalBasePrincipalDerivedDependentBasebyteTableBase, null); + principalBasePrincipalDerivedDependentBasebyteTableBase.AddTypeMapping(principalBasePrincipalDerivedDependentBasebyteMappingBase, false); + defaultTableMappings6.Add(principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)derivedsAlternateIdColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("DerivedsAlternateId")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)derivedsIdColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("DerivedsId")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalsAlternateIdColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("PrincipalsAlternateId")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalsIdColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("PrincipalsId")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)rowidColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("rowid")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + + var tableMappings6 = new List(); + principalBasePrincipalDerivedDependentBasebyte.SetRuntimeAnnotation("Relational:TableMappings", tableMappings6); + var principalBasePrincipalDerivedDependentBasebyteTable = new Table("PrincipalBasePrincipalDerived>", null, relationalModel); + var derivedsIdColumn = new Column("DerivedsId", "integer", principalBasePrincipalDerivedDependentBasebyteTable); + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("DerivedsId", derivedsIdColumn); + derivedsIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(derivedsIdColumn); + var derivedsAlternateIdColumn = new Column("DerivedsAlternateId", "uniqueidentifier", principalBasePrincipalDerivedDependentBasebyteTable); + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("DerivedsAlternateId", derivedsAlternateIdColumn); + derivedsAlternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(derivedsAlternateIdColumn); + var principalsIdColumn = new Column("PrincipalsId", "integer", principalBasePrincipalDerivedDependentBasebyteTable); + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("PrincipalsId", principalsIdColumn); + principalsIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalsIdColumn); + var principalsAlternateIdColumn = new Column("PrincipalsAlternateId", "uniqueidentifier", principalBasePrincipalDerivedDependentBasebyteTable); + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("PrincipalsAlternateId", principalsAlternateIdColumn); + principalsAlternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalsAlternateIdColumn); + var rowidColumn = new Column("rowid", "varbinary(8)", principalBasePrincipalDerivedDependentBasebyteTable) + { + IsNullable = true + }; + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("rowid", rowidColumn); + rowidColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(rowidColumn); + relationalModel.Tables.Add(("PrincipalBasePrincipalDerived>", null), principalBasePrincipalDerivedDependentBasebyteTable); + var principalBasePrincipalDerivedDependentBasebyteTableMapping = new TableMapping(principalBasePrincipalDerivedDependentBasebyte, principalBasePrincipalDerivedDependentBasebyteTable, null); + principalBasePrincipalDerivedDependentBasebyteTable.AddTypeMapping(principalBasePrincipalDerivedDependentBasebyteTableMapping, false); + tableMappings6.Add(principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(derivedsAlternateIdColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("DerivedsAlternateId")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(derivedsIdColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("DerivedsId")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(principalsAlternateIdColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("PrincipalsAlternateId")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(principalsIdColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("PrincipalsId")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(rowidColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("rowid")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + var pK_PrincipalBasePrincipalDerivedDependentBasebyte = new UniqueConstraint("PK_PrincipalBasePrincipalDerived>", principalBasePrincipalDerivedDependentBasebyteTable, new[] { derivedsIdColumn, derivedsAlternateIdColumn, principalsIdColumn, principalsAlternateIdColumn }); + principalBasePrincipalDerivedDependentBasebyteTable.PrimaryKey = pK_PrincipalBasePrincipalDerivedDependentBasebyte; + pK_PrincipalBasePrincipalDerivedDependentBasebyte.SetRowKeyValueFactory(new CompositeRowKeyValueFactory(pK_PrincipalBasePrincipalDerivedDependentBasebyte)); + var pK_PrincipalBasePrincipalDerivedDependentBasebyteKey = RelationalModel.GetKey(this, + "PrincipalBasePrincipalDerived>", + new[] { "DerivedsId", "DerivedsAlternateId", "PrincipalsId", "PrincipalsAlternateId" }); + pK_PrincipalBasePrincipalDerivedDependentBasebyte.MappedKeys.Add(pK_PrincipalBasePrincipalDerivedDependentBasebyteKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_PrincipalBasePrincipalDerivedDependentBasebyteKey).Add(pK_PrincipalBasePrincipalDerivedDependentBasebyte); + principalBasePrincipalDerivedDependentBasebyteTable.UniqueConstraints.Add("PK_PrincipalBasePrincipalDerived>", pK_PrincipalBasePrincipalDerivedDependentBasebyte); + var iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa = new TableIndex( + "IX_PrincipalBasePrincipalDerived>_Principa~", principalBasePrincipalDerivedDependentBasebyteTable, new[] { principalsIdColumn, principalsAlternateIdColumn }, false); + iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa.SetRowIndexValueFactory(new CompositeRowIndexValueFactory(iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa)); + var iX_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaIx = RelationalModel.GetIndex(this, + "PrincipalBasePrincipalDerived>", + new[] { "PrincipalsId", "PrincipalsAlternateId" }); + iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa.MappedIndexes.Add(iX_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaIx); + RelationalModel.GetOrCreateTableIndexes(iX_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaIx).Add(iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + principalBasePrincipalDerivedDependentBasebyteTable.Indexes.Add("IX_PrincipalBasePrincipalDerived>_Principa~", iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + var fK_DependentBasebyte_PrincipalBase_PrincipalId = new ForeignKeyConstraint( + "FK_DependentBase_PrincipalBase_PrincipalId", dependentBasebyteTable, principalBaseTable, + new[] { principalIdColumn }, + principalBaseTable.FindUniqueConstraint("AK_PrincipalBase_Id")!, ReferentialAction.Cascade); + fK_DependentBasebyte_PrincipalBase_PrincipalId.SetRowForeignKeyValueFactory(RowForeignKeyValueFactoryFactory.CreateSimpleNonNullableFactory(fK_DependentBasebyte_PrincipalBase_PrincipalId)); + var fK_DependentBasebyte_PrincipalBase_PrincipalIdFk = RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id" }); + fK_DependentBasebyte_PrincipalBase_PrincipalId.MappedForeignKeys.Add(fK_DependentBasebyte_PrincipalBase_PrincipalIdFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_DependentBasebyte_PrincipalBase_PrincipalIdFk).Add(fK_DependentBasebyte_PrincipalBase_PrincipalId); + dependentBasebyteTable.ForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalBase_PrincipalId); + principalBaseTable.ReferencingForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalBase_PrincipalId); + var fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalA = new ForeignKeyConstraint( + "FK_DependentBase_PrincipalDerived_PrincipalId_PrincipalA~", dependentBasebyteTable, principalDerivedTable, + new[] { principalIdColumn, principalAlternateIdColumn }, + principalDerivedTable.FindUniqueConstraint("PK")!, ReferentialAction.NoAction); + fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalA.SetRowForeignKeyValueFactory(new CompositeRowForeignKeyValueFactory(fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalA)); + var fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalAFk = RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId", "PrincipalAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + new[] { "Id", "AlternateId" }); + fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalA.MappedForeignKeys.Add(fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalAFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalAFk).Add(fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalA); + dependentBasebyteTable.ForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalA); + principalDerivedTable.ReferencingForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalDerived_PrincipalId_PrincipalA); + var fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternate = new ForeignKeyConstraint( + "FK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternate~", detailsTable, principalBaseTable, + new[] { principalBaseIdColumn, principalBaseAlternateIdColumn }, + principalBaseTable.FindUniqueConstraint("PK")!, ReferentialAction.Cascade); + fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternate.SetRowForeignKeyValueFactory(new CompositeRowForeignKeyValueFactory(fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternate)); + var fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternateFk = RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType", + new[] { "PrincipalBaseId", "PrincipalBaseAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType", + new[] { "PrincipalBaseId", "PrincipalBaseAlternateId" }); + fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternate.MappedForeignKeys.Add(fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternateFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternateFk).Add(fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternate); + detailsTable.ForeignKeyConstraints.Add(fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternate); + principalBaseTable.ReferencingForeignKeyConstraints.Add(fK_Details_PrincipalBase_PrincipalBaseId_PrincipalBaseAlternate); + var fK_ManyOwned_PrincipalDerived_PrincipalDerivedDependentBaseby = new ForeignKeyConstraint( + "FK_ManyOwned_PrincipalDerived_PrincipalDerived>.ManyOwned#OwnedType", + new[] { "PrincipalDerivedId", "PrincipalDerivedAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + new[] { "Id", "AlternateId" }); + fK_ManyOwned_PrincipalDerived_PrincipalDerivedDependentBaseby.MappedForeignKeys.Add(fK_ManyOwned_PrincipalDerived_PrincipalDerivedDependentBasebyFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_ManyOwned_PrincipalDerived_PrincipalDerivedDependentBasebyFk).Add(fK_ManyOwned_PrincipalDerived_PrincipalDerivedDependentBaseby); + manyOwnedTable.ForeignKeyConstraints.Add(fK_ManyOwned_PrincipalDerived_PrincipalDerivedDependentBaseby); + principalDerivedTable.ReferencingForeignKeyConstraints.Add(fK_ManyOwned_PrincipalDerived_PrincipalDerivedDependentBaseby); + var fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa = new ForeignKeyConstraint( + "FK_PrincipalBasePrincipalDerived>_Principa~", principalBasePrincipalDerivedDependentBasebyteTable, principalDerivedTable, + new[] { derivedsIdColumn, derivedsAlternateIdColumn }, + principalDerivedTable.FindUniqueConstraint("PK")!, ReferentialAction.Cascade); + fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa.SetRowForeignKeyValueFactory(new CompositeRowForeignKeyValueFactory(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa)); + var fK_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaFk = RelationalModel.GetForeignKey(this, + "PrincipalBasePrincipalDerived>", + new[] { "DerivedsId", "DerivedsAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + new[] { "Id", "AlternateId" }); + fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa.MappedForeignKeys.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaFk).Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + principalBasePrincipalDerivedDependentBasebyteTable.ForeignKeyConstraints.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + principalDerivedTable.ReferencingForeignKeyConstraints.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + var fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1 = new ForeignKeyConstraint( + "FK_PrincipalBasePrincipalDerived>_Princip~1", principalBasePrincipalDerivedDependentBasebyteTable, principalBaseTable, + new[] { principalsIdColumn, principalsAlternateIdColumn }, + principalBaseTable.FindUniqueConstraint("PK")!, ReferentialAction.NoAction); + fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1.SetRowForeignKeyValueFactory(new CompositeRowForeignKeyValueFactory(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1)); + var fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1Fk = RelationalModel.GetForeignKey(this, + "PrincipalBasePrincipalDerived>", + new[] { "PrincipalsId", "PrincipalsAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id", "AlternateId" }); + fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1.MappedForeignKeys.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1Fk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1Fk).Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1); + principalBasePrincipalDerivedDependentBasebyteTable.ForeignKeyConstraints.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1); + principalBaseTable.ReferencingForeignKeyConstraints.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1); + var fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateId = new ForeignKeyConstraint( + "FK_PrincipalDerived_PrincipalBase_DerivedId_AlternateId", principalDerivedTable, principalBaseTable, + new[] { derivedIdColumn, alternateIdColumn0 }, + principalBaseTable.FindUniqueConstraint("PK")!, ReferentialAction.Cascade); + fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateId.SetRowForeignKeyValueFactory(new CompositeRowForeignKeyValueFactory(fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateId)); + var fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateIdFk = RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + new[] { "Id", "AlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id", "AlternateId" }); + fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateId.MappedForeignKeys.Add(fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateIdFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateIdFk).Add(fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateId); + principalDerivedTable.ForeignKeyConstraints.Add(fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateId); + principalBaseTable.ReferencingForeignKeyConstraints.Add(fK_PrincipalDerived_PrincipalBase_DerivedId_AlternateId); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentBaseEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentBaseEntityType.cs new file mode 100644 index 00000000..789da39f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentBaseEntityType.cs @@ -0,0 +1,354 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.ValueGeneration; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DependentBaseEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + typeof(CompiledModelTestBase.DependentBase), + baseEntityType, + discriminatorProperty: "EnumDiscriminator", + discriminatorValue: CompiledModelTestBase.Enum1.One, + derivedTypesCount: 1, + propertyCount: 4, + navigationCount: 1, + foreignKeyCount: 2, + unnamedIndexCount: 1, + keyCount: 1); + + var principalId = runtimeEntityType.AddProperty( + "PrincipalId", + typeof(long), + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + principalId.SetAccessors( + long (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && entry.ReadShadowValue(0) == 0L ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + long (IInternalEntry entry) => entry.ReadShadowValue(0), + long (IInternalEntry entry) => entry.ReadOriginalValue(principalId, 0), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalId, 0)); + principalId.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: 0, + relationshipIndex: 0, + storeGenerationIndex: 0); + principalId.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + keyComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)))); + principalId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalId)); + principalId.SetSentinelFromProviderValue(0); + + var principalAlternateId = runtimeEntityType.AddProperty( + "PrincipalAlternateId", + typeof(Guid), + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + principalAlternateId.SetAccessors( + Guid (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(1) ? entry.ReadStoreGeneratedValue(1) : (entry.FlaggedAsTemporary(1) && entry.ReadShadowValue(1) == new Guid("00000000-0000-0000-0000-000000000000") ? entry.ReadTemporaryValue(1) : entry.ReadShadowValue(1))), + Guid (IInternalEntry entry) => entry.ReadShadowValue(1), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(principalAlternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalAlternateId, 1)); + principalAlternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: 1, + relationshipIndex: 1, + storeGenerationIndex: 1); + principalAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + principalAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalAlternateId)); + + var enumDiscriminator = runtimeEntityType.AddProperty( + "EnumDiscriminator", + typeof(CompiledModelTestBase.Enum1), + afterSaveBehavior: PropertySaveBehavior.Throw, + valueGeneratorFactory: new DiscriminatorValueGeneratorFactory().Create); + enumDiscriminator.SetAccessors( + CompiledModelTestBase.Enum1 (IInternalEntry entry) => entry.ReadShadowValue(2), + CompiledModelTestBase.Enum1 (IInternalEntry entry) => entry.ReadShadowValue(2), + CompiledModelTestBase.Enum1 (IInternalEntry entry) => entry.ReadOriginalValue(enumDiscriminator, 2), + CompiledModelTestBase.Enum1 (IInternalEntry entry) => entry.GetCurrentValue(enumDiscriminator)); + enumDiscriminator.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: 2, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumDiscriminator.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum1 v1, CompiledModelTestBase.Enum1 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum1 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum1 (CompiledModelTestBase.Enum1 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum1 v1, CompiledModelTestBase.Enum1 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum1 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum1 (CompiledModelTestBase.Enum1 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum1 value) => ((int)value), + CompiledModelTestBase.Enum1 (int value) => ((CompiledModelTestBase.Enum1)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum1 value) => ((int)value), + CompiledModelTestBase.Enum1 (int value) => ((CompiledModelTestBase.Enum1)value)))); + enumDiscriminator.SetSentinelFromProviderValue(0); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(byte?), + propertyInfo: typeof(CompiledModelTestBase.DependentBase).GetProperty("Id", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + id.SetGetter( + byte? (CompiledModelTestBase.DependentBase instance) => DependentBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.DependentBase instance) => !(DependentBaseUnsafeAccessors.Id(instance).HasValue)); + id.SetSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, byte? value) => + { + DependentBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, byte? value) => + { + DependentBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + byte? (IInternalEntry entry) => DependentBaseUnsafeAccessors.Id(((CompiledModelTestBase.DependentBase)(entry.Entity))), + byte? (IInternalEntry entry) => DependentBaseUnsafeAccessors.Id(((CompiledModelTestBase.DependentBase)(entry.Entity))), + byte? (IInternalEntry entry) => entry.ReadOriginalValue(id, 3), + byte? (IInternalEntry entry) => entry.GetCurrentValue(id)); + id.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + id.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)); + id.SetComparer(new NullableValueComparer(id.TypeMapping.Comparer)); + id.SetKeyComparer(new NullableValueComparer(id.TypeMapping.KeyComparer)); + + var key = runtimeEntityType.AddKey( + new[] { principalId, principalAlternateId }); + runtimeEntityType.SetPrimaryKey(key); + + var index = runtimeEntityType.AddIndex( + new[] { principalId }, + unique: true); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true); + + return runtimeForeignKey; + } + + public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalId"), declaringEntityType.FindProperty("PrincipalAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.ClientNoAction, + unique: true, + required: true); + + var principal = declaringEntityType.AddNavigation("Principal", + runtimeForeignKey, + onDependent: true, + typeof(CompiledModelTestBase.PrincipalDerived>), + propertyInfo: typeof(CompiledModelTestBase.DependentBase).GetProperty("Principal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + principal.SetGetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.DependentBase instance) => DependentBaseUnsafeAccessors.Principal(instance), + bool (CompiledModelTestBase.DependentBase instance) => DependentBaseUnsafeAccessors.Principal(instance) == null); + principal.SetSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, CompiledModelTestBase.PrincipalDerived> value) => + { + DependentBaseUnsafeAccessors.Principal(instance) = value; + return instance; + }); + principal.SetMaterializationSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, CompiledModelTestBase.PrincipalDerived> value) => + { + DependentBaseUnsafeAccessors.Principal(instance) = value; + return instance; + }); + principal.SetAccessors( + CompiledModelTestBase.PrincipalDerived> (IInternalEntry entry) => DependentBaseUnsafeAccessors.Principal(((CompiledModelTestBase.DependentBase)(entry.Entity))), + CompiledModelTestBase.PrincipalDerived> (IInternalEntry entry) => DependentBaseUnsafeAccessors.Principal(((CompiledModelTestBase.DependentBase)(entry.Entity))), + null, + CompiledModelTestBase.PrincipalDerived> (IInternalEntry entry) => entry.GetCurrentValue>>(principal)); + principal.SetPropertyIndexes( + index: 0, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 2, + storeGenerationIndex: -1); + var dependent = principalEntityType.AddNavigation("Dependent", + runtimeForeignKey, + onDependent: false, + typeof(CompiledModelTestBase.DependentBase), + propertyInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetProperty("Dependent", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + eagerLoaded: true, + lazyLoadingEnabled: false); + + dependent.SetGetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Dependent(instance), + bool (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Dependent(instance) == null); + dependent.SetSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, CompiledModelTestBase.DependentBase value) => + { + PrincipalDerivedUnsafeAccessors>.Dependent(instance) = value; + return instance; + }); + dependent.SetMaterializationSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, CompiledModelTestBase.DependentBase value) => + { + PrincipalDerivedUnsafeAccessors>.Dependent(instance) = value; + return instance; + }); + dependent.SetAccessors( + CompiledModelTestBase.DependentBase (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Dependent(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + CompiledModelTestBase.DependentBase (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Dependent(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + null, + CompiledModelTestBase.DependentBase (IInternalEntry entry) => entry.GetCurrentValue>(dependent)); + dependent.SetPropertyIndexes( + index: 2, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 4, + storeGenerationIndex: -1); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var principalId = runtimeEntityType.FindProperty("PrincipalId"); + var principalAlternateId = runtimeEntityType.FindProperty("PrincipalAlternateId"); + var enumDiscriminator = runtimeEntityType.FindProperty("EnumDiscriminator"); + var id = runtimeEntityType.FindProperty("Id"); + var key = runtimeEntityType.FindKey(new[] { principalId, principalAlternateId }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key)); + var principal = runtimeEntityType.FindNavigation("Principal"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.DependentBase)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalId)), ((ValueComparer)(((IProperty)principalAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalAlternateId)), ((ValueComparer)(((IProperty)enumDiscriminator).GetValueComparer())).Snapshot(source.GetCurrentValue(enumDiscriminator)), (source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalAlternateId).GetValueComparer())).Snapshot(default(Guid)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalId") ? ((long)(source["PrincipalId"])) : 0L), (source.ContainsKey("PrincipalAlternateId") ? ((Guid)(source["PrincipalAlternateId"])) : new Guid("00000000-0000-0000-0000-000000000000")), (source.ContainsKey("EnumDiscriminator") ? ((CompiledModelTestBase.Enum1)(source["EnumDiscriminator"])) : CompiledModelTestBase.Enum1.Default))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(CompiledModelTestBase.Enum1))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.DependentBase)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalId)), ((ValueComparer)(((IProperty)principalAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalAlternateId)), source.GetCurrentValue>>(principal)))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 4, + navigationCount: 1, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 4, + shadowCount: 3, + relationshipCount: 3, + storeGeneratedCount: 2)); + runtimeEntityType.AddAnnotation("DiscriminatorMappingComplete", false); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:MappingStrategy", "TPH"); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "DependentBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentBaseUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentBaseUnsafeAccessors.cs new file mode 100644 index 00000000..d7a27e94 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentBaseUnsafeAccessors.cs @@ -0,0 +1,18 @@ +// +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DependentBaseUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TKey Id(CompiledModelTestBase.DependentBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.PrincipalDerived> Principal(CompiledModelTestBase.DependentBase @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentDerivedEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentDerivedEntityType.cs new file mode 100644 index 00000000..720b15cb --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentDerivedEntityType.cs @@ -0,0 +1,174 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DependentDerivedEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived", + typeof(CompiledModelTestBase.DependentDerived), + baseEntityType, + discriminatorProperty: "EnumDiscriminator", + discriminatorValue: CompiledModelTestBase.Enum1.Two, + propertyCount: 2); + + var data = runtimeEntityType.AddProperty( + "Data", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.DependentDerived).GetProperty("Data", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentDerived).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true, + maxLength: 20, + unicode: false); + data.SetGetter( + string (CompiledModelTestBase.DependentDerived instance) => DependentDerivedUnsafeAccessors.Data(instance), + bool (CompiledModelTestBase.DependentDerived instance) => DependentDerivedUnsafeAccessors.Data(instance) == null); + data.SetSetter( + CompiledModelTestBase.DependentDerived (CompiledModelTestBase.DependentDerived instance, string value) => + { + DependentDerivedUnsafeAccessors.Data(instance) = value; + return instance; + }); + data.SetMaterializationSetter( + CompiledModelTestBase.DependentDerived (CompiledModelTestBase.DependentDerived instance, string value) => + { + DependentDerivedUnsafeAccessors.Data(instance) = value; + return instance; + }); + data.SetAccessors( + string (IInternalEntry entry) => DependentDerivedUnsafeAccessors.Data(((CompiledModelTestBase.DependentDerived)(entry.Entity))), + string (IInternalEntry entry) => DependentDerivedUnsafeAccessors.Data(((CompiledModelTestBase.DependentDerived)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(data, 4), + string (IInternalEntry entry) => entry.GetCurrentValue(data)); + data.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + data.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "char(20)", + size: 20, + unicode: false, + fixedLength: true)); + data.AddAnnotation("Relational:IsFixedLength", true); + + var money = runtimeEntityType.AddProperty( + "Money", + typeof(decimal), + precision: 9, + scale: 3, + sentinel: 0m); + money.SetAccessors( + decimal (IInternalEntry entry) => entry.ReadShadowValue(3), + decimal (IInternalEntry entry) => entry.ReadShadowValue(3), + decimal (IInternalEntry entry) => entry.ReadOriginalValue(money, 5), + decimal (IInternalEntry entry) => entry.GetCurrentValue(money)); + money.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: 3, + relationshipIndex: -1, + storeGenerationIndex: -1); + money.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(9,3)", + precision: 9, + scale: 3)); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var principalId = runtimeEntityType.FindProperty("PrincipalId"); + var principalAlternateId = runtimeEntityType.FindProperty("PrincipalAlternateId"); + var enumDiscriminator = runtimeEntityType.FindProperty("EnumDiscriminator"); + var id = runtimeEntityType.FindProperty("Id"); + var data = runtimeEntityType.FindProperty("Data"); + var money = runtimeEntityType.FindProperty("Money"); + var principal = runtimeEntityType.FindNavigation("Principal"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.DependentDerived)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalId)), ((ValueComparer)(((IProperty)principalAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalAlternateId)), ((ValueComparer)(((IProperty)enumDiscriminator).GetValueComparer())).Snapshot(source.GetCurrentValue(enumDiscriminator)), (source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(data) == null ? null : ((ValueComparer)(((IProperty)data).GetValueComparer())).Snapshot(source.GetCurrentValue(data))), ((ValueComparer)(((IProperty)money).GetValueComparer())).Snapshot(source.GetCurrentValue(money))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalAlternateId).GetValueComparer())).Snapshot(default(Guid)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalId") ? ((long)(source["PrincipalId"])) : 0L), (source.ContainsKey("PrincipalAlternateId") ? ((Guid)(source["PrincipalAlternateId"])) : new Guid("00000000-0000-0000-0000-000000000000")), (source.ContainsKey("EnumDiscriminator") ? ((CompiledModelTestBase.Enum1)(source["EnumDiscriminator"])) : CompiledModelTestBase.Enum1.Default), (source.ContainsKey("Money") ? ((decimal)(source["Money"])) : 0M))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(CompiledModelTestBase.Enum1), default(decimal))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.DependentDerived)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalId)), ((ValueComparer)(((IProperty)principalAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalAlternateId)), source.GetCurrentValue>>(principal)))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 6, + navigationCount: 1, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 6, + shadowCount: 4, + relationshipCount: 3, + storeGeneratedCount: 2)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "DependentBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentDerivedUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentDerivedUnsafeAccessors.cs new file mode 100644 index 00000000..8847446b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/DependentDerivedUnsafeAccessors.cs @@ -0,0 +1,16 @@ +// +using System; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DependentDerivedUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string Data(CompiledModelTestBase.DependentDerived @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesEntityType.cs new file mode 100644 index 00000000..17cf64de --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesEntityType.cs @@ -0,0 +1,16362 @@ +// +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Reflection; +using System.Text; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class ManyTypesEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes", + typeof(CompiledModelTestBase.ManyTypes), + baseEntityType, + propertyCount: 241, + keyCount: 1); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(CompiledModelTestBase.ManyTypesId), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + valueConverter: new CompiledModelTestBase.ManyTypesIdConverter()); + id.SetGetter( + CompiledModelTestBase.ManyTypesId (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Id(instance).Equals(default(CompiledModelTestBase.ManyTypesId))); + id.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.ManyTypesId value) => + { + ManyTypesUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.ManyTypesId value) => + { + ManyTypesUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + CompiledModelTestBase.ManyTypesId (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && ManyTypesUnsafeAccessors.Id(((CompiledModelTestBase.ManyTypes)(entry.Entity))).Equals(default(CompiledModelTestBase.ManyTypesId)) ? entry.ReadTemporaryValue(0) : ManyTypesUnsafeAccessors.Id(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + CompiledModelTestBase.ManyTypesId (IInternalEntry entry) => ManyTypesUnsafeAccessors.Id(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.ManyTypesId (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + CompiledModelTestBase.ManyTypesId (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: 0); + id.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.ManyTypesId v1, CompiledModelTestBase.ManyTypesId v2) => v1.Equals(v2), + int (CompiledModelTestBase.ManyTypesId v) => ((object)v).GetHashCode(), + CompiledModelTestBase.ManyTypesId (CompiledModelTestBase.ManyTypesId v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.ManyTypesId v1, CompiledModelTestBase.ManyTypesId v2) => v1.Equals(v2), + int (CompiledModelTestBase.ManyTypesId v) => ((object)v).GetHashCode(), + CompiledModelTestBase.ManyTypesId (CompiledModelTestBase.ManyTypesId v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.ManyTypesId v) => v.Id, + CompiledModelTestBase.ManyTypesId (int v) => new CompiledModelTestBase.ManyTypesId(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.ManyTypesId v) => v.Id, + CompiledModelTestBase.ManyTypesId (int v) => new CompiledModelTestBase.ManyTypesId(v)))); + id.SetCurrentValueComparer(new CurrentProviderValueComparer(id)); + id.SetSentinelFromProviderValue(0); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var @bool = runtimeEntityType.AddProperty( + "Bool", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Bool", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: false); + @bool.SetGetter( + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Bool(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Bool(instance) == false); + @bool.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.Bool(instance) = value; + return instance; + }); + @bool.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.Bool(instance) = value; + return instance; + }); + @bool.SetAccessors( + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.Bool(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.Bool(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => entry.ReadOriginalValue(@bool, 1), + bool (IInternalEntry entry) => entry.GetCurrentValue(@bool)); + @bool.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @bool.TypeMapping = JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)); + + var boolArray = runtimeEntityType.AddProperty( + "BoolArray", + typeof(bool[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolArray.SetGetter( + bool[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolArray(instance) == null); + boolArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool[] value) => + { + ManyTypesUnsafeAccessors.BoolArray(instance) = value; + return instance; + }); + boolArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool[] value) => + { + ManyTypesUnsafeAccessors.BoolArray(instance) = value; + return instance; + }); + boolArray.SetAccessors( + bool[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool[] (IInternalEntry entry) => entry.ReadOriginalValue(boolArray, 2), + bool[] (IInternalEntry entry) => entry.GetCurrentValue(boolArray)); + boolArray.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonBoolReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonBoolReaderWriter.Instance), + elementMapping: JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))); + var boolArrayElementType = boolArray.SetElementType(typeof(bool)); + boolArrayElementType.TypeMapping = boolArray.TypeMapping.ElementTypeMapping; + + var boolReadOnlyCollection = runtimeEntityType.AddProperty( + "BoolReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_boolReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance) == null); + boolReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance) = ((List)value); + return instance; + }); + boolReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance) = ((List)value); + return instance; + }); + boolReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._boolReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._boolReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(boolReadOnlyCollection, 3), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(boolReadOnlyCollection)); + boolReadOnlyCollection.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, bool>(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)), + keyComparer: new ListOfValueTypesComparer, bool>(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, bool>( + JsonBoolReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, bool>( + JsonBoolReaderWriter.Instance), + elementMapping: JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))); + var boolReadOnlyCollectionElementType = boolReadOnlyCollection.SetElementType(typeof(bool)); + boolReadOnlyCollectionElementType.TypeMapping = boolReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var boolToStringConverterProperty = runtimeEntityType.AddProperty( + "BoolToStringConverterProperty", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolToStringConverterProperty.SetGetter( + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToStringConverterProperty(instance) == false); + boolToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToStringConverterProperty(instance) = value; + return instance; + }); + boolToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToStringConverterProperty(instance) = value; + return instance; + }); + boolToStringConverterProperty.SetAccessors( + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => entry.ReadOriginalValue(boolToStringConverterProperty, 4), + bool (IInternalEntry entry) => entry.GetCurrentValue(boolToStringConverterProperty)); + boolToStringConverterProperty.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (bool v) => ((string)((v ? "B" : "A"))), + bool (string v) => !(string.IsNullOrEmpty(v)) && ((int)(v.ToUpperInvariant()[0])) == ((int)("B".ToUpperInvariant()[0]))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (bool v) => ((string)((v ? "B" : "A"))), + bool (string v) => !(string.IsNullOrEmpty(v)) && ((int)(v.ToUpperInvariant()[0])) == ((int)("B".ToUpperInvariant()[0]))))); + boolToStringConverterProperty.SetSentinelFromProviderValue("A"); + + var boolToTwoValuesConverterProperty = runtimeEntityType.AddProperty( + "BoolToTwoValuesConverterProperty", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolToTwoValuesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolToTwoValuesConverterProperty.SetGetter( + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(instance) == false); + boolToTwoValuesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(instance) = value; + return instance; + }); + boolToTwoValuesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(instance) = value; + return instance; + }); + boolToTwoValuesConverterProperty.SetAccessors( + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => entry.ReadOriginalValue(boolToTwoValuesConverterProperty, 5), + bool (IInternalEntry entry) => entry.GetCurrentValue(boolToTwoValuesConverterProperty)); + boolToTwoValuesConverterProperty.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolToTwoValuesConverterProperty.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (bool v) => ((byte)((v ? 1 : 0))), + bool (byte v) => v == 1), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (bool v) => ((byte)((v ? 1 : 0))), + bool (byte v) => v == 1))); + boolToTwoValuesConverterProperty.SetSentinelFromProviderValue((byte)0); + + var boolToZeroOneConverterProperty = runtimeEntityType.AddProperty( + "BoolToZeroOneConverterProperty", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolToZeroOneConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new BoolToZeroOneConverter()); + boolToZeroOneConverterProperty.SetGetter( + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(instance) == false); + boolToZeroOneConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(instance) = value; + return instance; + }); + boolToZeroOneConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(instance) = value; + return instance; + }); + boolToZeroOneConverterProperty.SetAccessors( + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => entry.ReadOriginalValue(boolToZeroOneConverterProperty, 6), + bool (IInternalEntry entry) => entry.GetCurrentValue(boolToZeroOneConverterProperty)); + boolToZeroOneConverterProperty.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolToZeroOneConverterProperty.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (bool v) => ((short)((v ? 1 : 0))), + bool (short v) => v == 1), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (bool v) => ((short)((v ? 1 : 0))), + bool (short v) => v == 1))); + boolToZeroOneConverterProperty.SetSentinelFromProviderValue((short)0); + + var bytes = runtimeEntityType.AddProperty( + "Bytes", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Bytes", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + bytes.SetGetter( + byte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Bytes(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Bytes(instance) == null); + bytes.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.Bytes(instance) = value; + return instance; + }); + bytes.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.Bytes(instance) = value; + return instance; + }); + bytes.SetAccessors( + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Bytes(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Bytes(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(bytes, 7), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(bytes)); + bytes.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + bytes.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + var bytesArray = runtimeEntityType.AddProperty( + "BytesArray", + typeof(byte[][]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BytesArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + bytesArray.SetGetter( + byte[][] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BytesArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BytesArray(instance) == null); + bytesArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[][] value) => + { + ManyTypesUnsafeAccessors.BytesArray(instance) = value; + return instance; + }); + bytesArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[][] value) => + { + ManyTypesUnsafeAccessors.BytesArray(instance) = value; + return instance; + }); + bytesArray.SetAccessors( + byte[][] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BytesArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[][] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BytesArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[][] (IInternalEntry entry) => entry.ReadOriginalValue(bytesArray, 8), + byte[][] (IInternalEntry entry) => entry.GetCurrentValue(bytesArray)); + bytesArray.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + bytesArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + JsonByteArrayReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + JsonByteArrayReaderWriter.Instance), + elementMapping: JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None)); + var bytesArrayElementType = bytesArray.SetElementType(typeof(byte[])); + bytesArrayElementType.TypeMapping = bytesArray.TypeMapping.ElementTypeMapping; + + var bytesToStringConverterProperty = runtimeEntityType.AddProperty( + "BytesToStringConverterProperty", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BytesToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new BytesToStringConverter(), + valueComparer: new ArrayStructuralComparer()); + bytesToStringConverterProperty.SetGetter( + byte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BytesToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BytesToStringConverterProperty(instance) == null); + bytesToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.BytesToStringConverterProperty(instance) = value; + return instance; + }); + bytesToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.BytesToStringConverterProperty(instance) = value; + return instance; + }); + bytesToStringConverterProperty.SetAccessors( + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BytesToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BytesToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(bytesToStringConverterProperty, 9), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(bytesToStringConverterProperty)); + bytesToStringConverterProperty.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + bytesToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (byte[] v) => Convert.ToBase64String(v), + byte[] (string v) => Convert.FromBase64String(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (byte[] v) => Convert.ToBase64String(v), + byte[] (string v) => Convert.FromBase64String(v)))); + + var castingConverterProperty = runtimeEntityType.AddProperty( + "CastingConverterProperty", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("CastingConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new CastingConverter()); + castingConverterProperty.SetGetter( + int (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CastingConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CastingConverterProperty(instance) == 0); + castingConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.CastingConverterProperty(instance) = value; + return instance; + }); + castingConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.CastingConverterProperty(instance) = value; + return instance; + }); + castingConverterProperty.SetAccessors( + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.CastingConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.CastingConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(castingConverterProperty, 10), + int (IInternalEntry entry) => entry.GetCurrentValue(castingConverterProperty)); + castingConverterProperty.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + castingConverterProperty.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + converter: new ValueConverter( + decimal (int v) => ((decimal)v), + int (decimal v) => ((int)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (int v) => ((decimal)v), + int (decimal v) => ((int)v)))); + castingConverterProperty.SetSentinelFromProviderValue(0m); + + var @char = runtimeEntityType.AddProperty( + "Char", + typeof(char), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Char", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + @char.SetGetter( + char (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Char(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Char(instance) == '\0'); + @char.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char value) => + { + ManyTypesUnsafeAccessors.Char(instance) = value; + return instance; + }); + @char.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char value) => + { + ManyTypesUnsafeAccessors.Char(instance) = value; + return instance; + }); + @char.SetAccessors( + char (IInternalEntry entry) => ManyTypesUnsafeAccessors.Char(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char (IInternalEntry entry) => ManyTypesUnsafeAccessors.Char(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char (IInternalEntry entry) => entry.ReadOriginalValue(@char, 11), + char (IInternalEntry entry) => entry.GetCurrentValue(@char)); + @char.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @char.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))); + @char.SetSentinelFromProviderValue("\0"); + + var charArray = runtimeEntityType.AddProperty( + "CharArray", + typeof(char[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("CharArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + charArray.SetGetter( + char[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CharArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CharArray(instance) == null); + charArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char[] value) => + { + ManyTypesUnsafeAccessors.CharArray(instance) = value; + return instance; + }); + charArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char[] value) => + { + ManyTypesUnsafeAccessors.CharArray(instance) = value; + return instance; + }); + charArray.SetAccessors( + char[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.CharArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.CharArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char[] (IInternalEntry entry) => entry.ReadOriginalValue(charArray, 12), + char[] (IInternalEntry entry) => entry.GetCurrentValue(charArray)); + charArray.SetPropertyIndexes( + index: 12, + originalValueIndex: 12, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + charArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0]))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0]))))); + var charArrayElementType = charArray.SetElementType(typeof(char)); + charArrayElementType.TypeMapping = charArray.TypeMapping.ElementTypeMapping; + + var charToStringConverterProperty = runtimeEntityType.AddProperty( + "CharToStringConverterProperty", + typeof(char), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("CharToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new CharToStringConverter()); + charToStringConverterProperty.SetGetter( + char (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CharToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CharToStringConverterProperty(instance) == '\0'); + charToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char value) => + { + ManyTypesUnsafeAccessors.CharToStringConverterProperty(instance) = value; + return instance; + }); + charToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char value) => + { + ManyTypesUnsafeAccessors.CharToStringConverterProperty(instance) = value; + return instance; + }); + charToStringConverterProperty.SetAccessors( + char (IInternalEntry entry) => ManyTypesUnsafeAccessors.CharToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char (IInternalEntry entry) => ManyTypesUnsafeAccessors.CharToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char (IInternalEntry entry) => entry.ReadOriginalValue(charToStringConverterProperty, 13), + char (IInternalEntry entry) => entry.GetCurrentValue(charToStringConverterProperty)); + charToStringConverterProperty.SetPropertyIndexes( + index: 13, + originalValueIndex: 13, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + charToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "char(1)", + size: 1, + fixedLength: true), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))); + charToStringConverterProperty.SetSentinelFromProviderValue("\0"); + charToStringConverterProperty.AddAnnotation("Relational:IsFixedLength", true); + + var dateOnly = runtimeEntityType.AddProperty( + "DateOnly", + typeof(DateOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new DateOnly(1, 1, 1)); + dateOnly.SetGetter( + DateOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnly(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnly(instance) == default(DateOnly)); + dateOnly.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly value) => + { + ManyTypesUnsafeAccessors.DateOnly(instance) = value; + return instance; + }); + dateOnly.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly value) => + { + ManyTypesUnsafeAccessors.DateOnly(instance) = value; + return instance; + }); + dateOnly.SetAccessors( + DateOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly (IInternalEntry entry) => entry.ReadOriginalValue(dateOnly, 14), + DateOnly (IInternalEntry entry) => entry.GetCurrentValue(dateOnly)); + dateOnly.SetPropertyIndexes( + index: 14, + originalValueIndex: 14, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateOnly.TypeMapping = JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v)); + + var dateOnlyArray = runtimeEntityType.AddProperty( + "DateOnlyArray", + typeof(DateOnly[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + dateOnlyArray.SetGetter( + DateOnly[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnlyArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnlyArray(instance) == null); + dateOnlyArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly[] value) => + { + ManyTypesUnsafeAccessors.DateOnlyArray(instance) = value; + return instance; + }); + dateOnlyArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly[] value) => + { + ManyTypesUnsafeAccessors.DateOnlyArray(instance) = value; + return instance; + }); + dateOnlyArray.SetAccessors( + DateOnly[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly[] (IInternalEntry entry) => entry.ReadOriginalValue(dateOnlyArray, 15), + DateOnly[] (IInternalEntry entry) => entry.GetCurrentValue(dateOnlyArray)); + dateOnlyArray.SetPropertyIndexes( + index: 15, + originalValueIndex: 15, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateOnlyArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateOnlyReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateOnlyReaderWriter.Instance), + elementMapping: JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v))); + var dateOnlyArrayElementType = dateOnlyArray.SetElementType(typeof(DateOnly)); + dateOnlyArrayElementType.TypeMapping = dateOnlyArray.TypeMapping.ElementTypeMapping; + + var dateOnlyToStringConverterProperty = runtimeEntityType.AddProperty( + "DateOnlyToStringConverterProperty", + typeof(DateOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateOnlyToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateOnlyToStringConverter()); + dateOnlyToStringConverterProperty.SetGetter( + DateOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(instance) == default(DateOnly)); + dateOnlyToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly value) => + { + ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(instance) = value; + return instance; + }); + dateOnlyToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly value) => + { + ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(instance) = value; + return instance; + }); + dateOnlyToStringConverterProperty.SetAccessors( + DateOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly (IInternalEntry entry) => entry.ReadOriginalValue(dateOnlyToStringConverterProperty, 16), + DateOnly (IInternalEntry entry) => entry.GetCurrentValue(dateOnlyToStringConverterProperty)); + dateOnlyToStringConverterProperty.SetPropertyIndexes( + index: 16, + originalValueIndex: 16, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateOnlyToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(10)", + size: 10), + converter: new ValueConverter( + string (DateOnly v) => v.ToString("yyyy\\-MM\\-dd"), + DateOnly (string v) => DateOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (DateOnly v) => v.ToString("yyyy\\-MM\\-dd"), + DateOnly (string v) => DateOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None)))); + dateOnlyToStringConverterProperty.SetSentinelFromProviderValue("0001-01-01"); + + var dateTime = runtimeEntityType.AddProperty( + "DateTime", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + dateTime.SetGetter( + DateTime (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTime(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTime(instance) == default(DateTime)); + dateTime.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTime(instance) = value; + return instance; + }); + dateTime.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTime(instance) = value; + return instance; + }); + dateTime.SetAccessors( + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTime(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTime(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => entry.ReadOriginalValue(dateTime, 17), + DateTime (IInternalEntry entry) => entry.GetCurrentValue(dateTime)); + dateTime.SetPropertyIndexes( + index: 17, + originalValueIndex: 17, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTime.TypeMapping = JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)); + + var dateTimeArray = runtimeEntityType.AddProperty( + "DateTimeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + dateTimeArray.SetGetter( + DateTime[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeArray(instance) == null); + dateTimeArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime[] value) => + { + ManyTypesUnsafeAccessors.DateTimeArray(instance) = value; + return instance; + }); + dateTimeArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime[] value) => + { + ManyTypesUnsafeAccessors.DateTimeArray(instance) = value; + return instance; + }); + dateTimeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeArray, 18), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(dateTimeArray)); + dateTimeArray.SetPropertyIndexes( + index: 18, + originalValueIndex: 18, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var dateTimeArrayElementType = dateTimeArray.SetElementType(typeof(DateTime)); + dateTimeArrayElementType.TypeMapping = dateTimeArray.TypeMapping.ElementTypeMapping; + + var dateTimeOffsetToBinaryConverterProperty = runtimeEntityType.AddProperty( + "DateTimeOffsetToBinaryConverterProperty", + typeof(DateTimeOffset), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeOffsetToBinaryConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeOffsetToBinaryConverter()); + dateTimeOffsetToBinaryConverterProperty.SetGetter( + DateTimeOffset (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(instance).EqualsExact(default(DateTimeOffset))); + dateTimeOffsetToBinaryConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToBinaryConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToBinaryConverterProperty.SetAccessors( + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeOffsetToBinaryConverterProperty, 19), + DateTimeOffset (IInternalEntry entry) => entry.GetCurrentValue(dateTimeOffsetToBinaryConverterProperty)); + dateTimeOffsetToBinaryConverterProperty.SetPropertyIndexes( + index: 19, + originalValueIndex: 19, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeOffsetToBinaryConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + keyComparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (DateTimeOffset v) => DateTimeOffsetToBinaryConverter.ToLong(v), + DateTimeOffset (long v) => DateTimeOffsetToBinaryConverter.ToDateTimeOffset(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (DateTimeOffset v) => DateTimeOffsetToBinaryConverter.ToLong(v), + DateTimeOffset (long v) => DateTimeOffsetToBinaryConverter.ToDateTimeOffset(v)))); + dateTimeOffsetToBinaryConverterProperty.SetSentinelFromProviderValue(0L); + + var dateTimeOffsetToBytesConverterProperty = runtimeEntityType.AddProperty( + "DateTimeOffsetToBytesConverterProperty", + typeof(DateTimeOffset), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeOffsetToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeOffsetToBytesConverter()); + dateTimeOffsetToBytesConverterProperty.SetGetter( + DateTimeOffset (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(instance).EqualsExact(default(DateTimeOffset))); + dateTimeOffsetToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToBytesConverterProperty.SetAccessors( + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeOffsetToBytesConverterProperty, 20), + DateTimeOffset (IInternalEntry entry) => entry.GetCurrentValue(dateTimeOffsetToBytesConverterProperty)); + dateTimeOffsetToBytesConverterProperty.SetPropertyIndexes( + index: 20, + originalValueIndex: 20, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeOffsetToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + keyComparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(12)", + size: 12), + converter: new ValueConverter( + byte[] (DateTimeOffset v) => DateTimeOffsetToBytesConverter.ToBytes(v), + DateTimeOffset (byte[] v) => DateTimeOffsetToBytesConverter.FromBytes(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (DateTimeOffset v) => DateTimeOffsetToBytesConverter.ToBytes(v), + DateTimeOffset (byte[] v) => DateTimeOffsetToBytesConverter.FromBytes(v)))); + dateTimeOffsetToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + + var dateTimeOffsetToStringConverterProperty = runtimeEntityType.AddProperty( + "DateTimeOffsetToStringConverterProperty", + typeof(DateTimeOffset), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeOffsetToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeOffsetToStringConverter()); + dateTimeOffsetToStringConverterProperty.SetGetter( + DateTimeOffset (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(instance).EqualsExact(default(DateTimeOffset))); + dateTimeOffsetToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToStringConverterProperty.SetAccessors( + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeOffsetToStringConverterProperty, 21), + DateTimeOffset (IInternalEntry entry) => entry.GetCurrentValue(dateTimeOffsetToStringConverterProperty)); + dateTimeOffsetToStringConverterProperty.SetPropertyIndexes( + index: 21, + originalValueIndex: 21, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeOffsetToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + keyComparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(48)", + size: 48), + converter: new ValueConverter( + string (DateTimeOffset v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFFzzz"), + DateTimeOffset (string v) => DateTimeOffset.Parse(v, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (DateTimeOffset v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFFzzz"), + DateTimeOffset (string v) => DateTimeOffset.Parse(v, CultureInfo.InvariantCulture)))); + dateTimeOffsetToStringConverterProperty.SetSentinelFromProviderValue("0001-01-01 00:00:00+00:00"); + + var dateTimeToBinaryConverterProperty = runtimeEntityType.AddProperty( + "DateTimeToBinaryConverterProperty", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeToBinaryConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeToBinaryConverter()); + dateTimeToBinaryConverterProperty.SetGetter( + DateTime (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(instance) == default(DateTime)); + dateTimeToBinaryConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(instance) = value; + return instance; + }); + dateTimeToBinaryConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(instance) = value; + return instance; + }); + dateTimeToBinaryConverterProperty.SetAccessors( + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeToBinaryConverterProperty, 22), + DateTime (IInternalEntry entry) => entry.GetCurrentValue(dateTimeToBinaryConverterProperty)); + dateTimeToBinaryConverterProperty.SetPropertyIndexes( + index: 22, + originalValueIndex: 22, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeToBinaryConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (DateTime v) => v.ToBinary(), + DateTime (long v) => DateTime.FromBinary(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (DateTime v) => v.ToBinary(), + DateTime (long v) => DateTime.FromBinary(v)))); + dateTimeToBinaryConverterProperty.SetSentinelFromProviderValue(0L); + + var dateTimeToStringConverterProperty = runtimeEntityType.AddProperty( + "DateTimeToStringConverterProperty", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeToStringConverter()); + dateTimeToStringConverterProperty.SetGetter( + DateTime (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(instance) == default(DateTime)); + dateTimeToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(instance) = value; + return instance; + }); + dateTimeToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(instance) = value; + return instance; + }); + dateTimeToStringConverterProperty.SetAccessors( + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeToStringConverterProperty, 23), + DateTime (IInternalEntry entry) => entry.GetCurrentValue(dateTimeToStringConverterProperty)); + dateTimeToStringConverterProperty.SetPropertyIndexes( + index: 23, + originalValueIndex: 23, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(48)", + size: 48), + converter: new ValueConverter( + string (DateTime v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFF"), + DateTime (string v) => DateTime.Parse(v, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (DateTime v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFF"), + DateTime (string v) => DateTime.Parse(v, CultureInfo.InvariantCulture)))); + dateTimeToStringConverterProperty.SetSentinelFromProviderValue("0001-01-01 00:00:00"); + + var dateTimeToTicksConverterProperty = runtimeEntityType.AddProperty( + "DateTimeToTicksConverterProperty", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeToTicksConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + dateTimeToTicksConverterProperty.SetGetter( + DateTime (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(instance) == default(DateTime)); + dateTimeToTicksConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(instance) = value; + return instance; + }); + dateTimeToTicksConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(instance) = value; + return instance; + }); + dateTimeToTicksConverterProperty.SetAccessors( + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeToTicksConverterProperty, 24), + DateTime (IInternalEntry entry) => entry.GetCurrentValue(dateTimeToTicksConverterProperty)); + dateTimeToTicksConverterProperty.SetPropertyIndexes( + index: 24, + originalValueIndex: 24, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeToTicksConverterProperty.TypeMapping = JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)); + + var @decimal = runtimeEntityType.AddProperty( + "Decimal", + typeof(decimal), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Decimal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0m); + @decimal.SetGetter( + decimal (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Decimal(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Decimal(instance) == 0M); + @decimal.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.Decimal(instance) = value; + return instance; + }); + @decimal.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.Decimal(instance) = value; + return instance; + }); + @decimal.SetAccessors( + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.Decimal(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.Decimal(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => entry.ReadOriginalValue(@decimal, 25), + decimal (IInternalEntry entry) => entry.GetCurrentValue(@decimal)); + @decimal.SetPropertyIndexes( + index: 25, + originalValueIndex: 25, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @decimal.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v)); + + var decimalArray = runtimeEntityType.AddProperty( + "DecimalArray", + typeof(decimal[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DecimalArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + decimalArray.SetGetter( + decimal[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalArray(instance) == null); + decimalArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal[] value) => + { + ManyTypesUnsafeAccessors.DecimalArray(instance) = value; + return instance; + }); + decimalArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal[] value) => + { + ManyTypesUnsafeAccessors.DecimalArray(instance) = value; + return instance; + }); + decimalArray.SetAccessors( + decimal[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal[] (IInternalEntry entry) => entry.ReadOriginalValue(decimalArray, 26), + decimal[] (IInternalEntry entry) => entry.GetCurrentValue(decimalArray)); + decimalArray.SetPropertyIndexes( + index: 26, + originalValueIndex: 26, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + decimalArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDecimalReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDecimalReaderWriter.Instance), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v))); + var decimalArrayElementType = decimalArray.SetElementType(typeof(decimal)); + decimalArrayElementType.TypeMapping = decimalArray.TypeMapping.ElementTypeMapping; + + var decimalNumberToBytesConverterProperty = runtimeEntityType.AddProperty( + "DecimalNumberToBytesConverterProperty", + typeof(decimal), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DecimalNumberToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToBytesConverter()); + decimalNumberToBytesConverterProperty.SetGetter( + decimal (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(instance) == 0M); + decimalNumberToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(instance) = value; + return instance; + }); + decimalNumberToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(instance) = value; + return instance; + }); + decimalNumberToBytesConverterProperty.SetAccessors( + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => entry.ReadOriginalValue(decimalNumberToBytesConverterProperty, 27), + decimal (IInternalEntry entry) => entry.GetCurrentValue(decimalNumberToBytesConverterProperty)); + decimalNumberToBytesConverterProperty.SetPropertyIndexes( + index: 27, + originalValueIndex: 27, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + decimalNumberToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(16)", + size: 16), + converter: new ValueConverter( + byte[] (decimal v) => NumberToBytesConverter.DecimalToBytes(v), + decimal (byte[] v) => (v == null ? 0M : NumberToBytesConverter.BytesToDecimal(v))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (decimal v) => NumberToBytesConverter.DecimalToBytes(v), + decimal (byte[] v) => (v == null ? 0M : NumberToBytesConverter.BytesToDecimal(v))))); + decimalNumberToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + + var decimalNumberToStringConverterProperty = runtimeEntityType.AddProperty( + "DecimalNumberToStringConverterProperty", + typeof(decimal), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DecimalNumberToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToStringConverter()); + decimalNumberToStringConverterProperty.SetGetter( + decimal (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(instance) == 0M); + decimalNumberToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(instance) = value; + return instance; + }); + decimalNumberToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(instance) = value; + return instance; + }); + decimalNumberToStringConverterProperty.SetAccessors( + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => entry.ReadOriginalValue(decimalNumberToStringConverterProperty, 28), + decimal (IInternalEntry entry) => entry.GetCurrentValue(decimalNumberToStringConverterProperty)); + decimalNumberToStringConverterProperty.SetPropertyIndexes( + index: 28, + originalValueIndex: 28, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + decimalNumberToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(64)", + size: 64), + converter: new ValueConverter( + string (decimal v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + decimal (string v) => decimal.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (decimal v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + decimal (string v) => decimal.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)))); + decimalNumberToStringConverterProperty.SetSentinelFromProviderValue("0"); + + var @double = runtimeEntityType.AddProperty( + "Double", + typeof(double), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Double", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0.0); + @double.SetGetter( + double (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Double(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Double(instance).Equals(0D)); + @double.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.Double(instance) = value; + return instance; + }); + @double.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.Double(instance) = value; + return instance; + }); + @double.SetAccessors( + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.Double(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.Double(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => entry.ReadOriginalValue(@double, 29), + double (IInternalEntry entry) => entry.GetCurrentValue(@double)); + @double.SetPropertyIndexes( + index: 29, + originalValueIndex: 29, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @double.TypeMapping = JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v)); + + var doubleArray = runtimeEntityType.AddProperty( + "DoubleArray", + typeof(double[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DoubleArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + doubleArray.SetGetter( + double[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleArray(instance) == null); + doubleArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double[] value) => + { + ManyTypesUnsafeAccessors.DoubleArray(instance) = value; + return instance; + }); + doubleArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double[] value) => + { + ManyTypesUnsafeAccessors.DoubleArray(instance) = value; + return instance; + }); + doubleArray.SetAccessors( + double[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double[] (IInternalEntry entry) => entry.ReadOriginalValue(doubleArray, 30), + double[] (IInternalEntry entry) => entry.GetCurrentValue(doubleArray)); + doubleArray.SetPropertyIndexes( + index: 30, + originalValueIndex: 30, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + doubleArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDoubleReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDoubleReaderWriter.Instance), + elementMapping: JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v))); + var doubleArrayElementType = doubleArray.SetElementType(typeof(double)); + doubleArrayElementType.TypeMapping = doubleArray.TypeMapping.ElementTypeMapping; + + var doubleNumberToBytesConverterProperty = runtimeEntityType.AddProperty( + "DoubleNumberToBytesConverterProperty", + typeof(double), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DoubleNumberToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToBytesConverter()); + doubleNumberToBytesConverterProperty.SetGetter( + double (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(instance).Equals(0D)); + doubleNumberToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(instance) = value; + return instance; + }); + doubleNumberToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(instance) = value; + return instance; + }); + doubleNumberToBytesConverterProperty.SetAccessors( + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => entry.ReadOriginalValue(doubleNumberToBytesConverterProperty, 31), + double (IInternalEntry entry) => entry.GetCurrentValue(doubleNumberToBytesConverterProperty)); + doubleNumberToBytesConverterProperty.SetPropertyIndexes( + index: 31, + originalValueIndex: 31, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + doubleNumberToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(8)", + size: 8), + converter: new ValueConverter( + byte[] (double v) => NumberToBytesConverter.ReverseLong(BitConverter.GetBytes(v)), + double (byte[] v) => (v == null ? 0D : BitConverter.ToDouble(NumberToBytesConverter.ReverseLong(v), 0))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (double v) => NumberToBytesConverter.ReverseLong(BitConverter.GetBytes(v)), + double (byte[] v) => (v == null ? 0D : BitConverter.ToDouble(NumberToBytesConverter.ReverseLong(v), 0))))); + doubleNumberToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }); + + var doubleNumberToStringConverterProperty = runtimeEntityType.AddProperty( + "DoubleNumberToStringConverterProperty", + typeof(double), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DoubleNumberToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToStringConverter()); + doubleNumberToStringConverterProperty.SetGetter( + double (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(instance).Equals(0D)); + doubleNumberToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(instance) = value; + return instance; + }); + doubleNumberToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(instance) = value; + return instance; + }); + doubleNumberToStringConverterProperty.SetAccessors( + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => entry.ReadOriginalValue(doubleNumberToStringConverterProperty, 32), + double (IInternalEntry entry) => entry.GetCurrentValue(doubleNumberToStringConverterProperty)); + doubleNumberToStringConverterProperty.SetPropertyIndexes( + index: 32, + originalValueIndex: 32, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + doubleNumberToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(64)", + size: 64), + converter: new ValueConverter( + string (double v) => string.Format(CultureInfo.InvariantCulture, "{0:R}", ((object)v)), + double (string v) => double.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (double v) => string.Format(CultureInfo.InvariantCulture, "{0:R}", ((object)v)), + double (string v) => double.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)))); + doubleNumberToStringConverterProperty.SetSentinelFromProviderValue("0"); + + var enum16 = runtimeEntityType.AddProperty( + "Enum16", + typeof(CompiledModelTestBase.Enum16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16.SetGetter( + CompiledModelTestBase.Enum16 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum16(instance))), ((object)(CompiledModelTestBase.Enum16.Default)))); + enum16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16 value) => + { + ManyTypesUnsafeAccessors.Enum16(instance) = value; + return instance; + }); + enum16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16 value) => + { + ManyTypesUnsafeAccessors.Enum16(instance) = value; + return instance; + }); + enum16.SetAccessors( + CompiledModelTestBase.Enum16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => entry.ReadOriginalValue(enum16, 33), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => entry.GetCurrentValue(enum16)); + enum16.SetPropertyIndexes( + index: 33, + originalValueIndex: 33, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))); + enum16.SetSentinelFromProviderValue((short)0); + + var enum16Array = runtimeEntityType.AddProperty( + "Enum16Array", + typeof(CompiledModelTestBase.Enum16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16Array.SetGetter( + CompiledModelTestBase.Enum16[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16Array(instance) == null); + enum16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16[] value) => + { + ManyTypesUnsafeAccessors.Enum16Array(instance) = value; + return instance; + }); + enum16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16[] value) => + { + ManyTypesUnsafeAccessors.Enum16Array(instance) = value; + return instance; + }); + enum16Array.SetAccessors( + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => entry.ReadOriginalValue(enum16Array, 34), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => entry.GetCurrentValue(enum16Array)); + enum16Array.SetPropertyIndexes( + index: 34, + originalValueIndex: 34, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var enum16ArrayElementType = enum16Array.SetElementType(typeof(CompiledModelTestBase.Enum16)); + enum16ArrayElementType.TypeMapping = enum16Array.TypeMapping.ElementTypeMapping; + + var enum16AsString = runtimeEntityType.AddProperty( + "Enum16AsString", + typeof(CompiledModelTestBase.Enum16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum16AsString.SetGetter( + CompiledModelTestBase.Enum16 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum16AsString(instance))), ((object)(CompiledModelTestBase.Enum16.Default)))); + enum16AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16 value) => + { + ManyTypesUnsafeAccessors.Enum16AsString(instance) = value; + return instance; + }); + enum16AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16 value) => + { + ManyTypesUnsafeAccessors.Enum16AsString(instance) = value; + return instance; + }); + enum16AsString.SetAccessors( + CompiledModelTestBase.Enum16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => entry.ReadOriginalValue(enum16AsString, 35), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => entry.GetCurrentValue(enum16AsString)); + enum16AsString.SetPropertyIndexes( + index: 35, + originalValueIndex: 35, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enum16AsString.SetSentinelFromProviderValue("Default"); + + var enum16AsStringArray = runtimeEntityType.AddProperty( + "Enum16AsStringArray", + typeof(CompiledModelTestBase.Enum16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16AsStringArray.SetGetter( + CompiledModelTestBase.Enum16[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsStringArray(instance) == null); + enum16AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16[] value) => + { + ManyTypesUnsafeAccessors.Enum16AsStringArray(instance) = value; + return instance; + }); + enum16AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16[] value) => + { + ManyTypesUnsafeAccessors.Enum16AsStringArray(instance) = value; + return instance; + }); + enum16AsStringArray.SetAccessors( + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => entry.ReadOriginalValue(enum16AsStringArray, 36), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => entry.GetCurrentValue(enum16AsStringArray)); + enum16AsStringArray.SetPropertyIndexes( + index: 36, + originalValueIndex: 36, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum16AsStringArrayElementType = enum16AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum16), + providerClrType: typeof(string)); + enum16AsStringArrayElementType.TypeMapping = enum16AsStringArray.TypeMapping.ElementTypeMapping; + + var enum16AsStringCollection = runtimeEntityType.AddProperty( + "Enum16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsStringCollection(instance) == null); + enum16AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum16AsStringCollection(instance) = value; + return instance; + }); + enum16AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum16AsStringCollection(instance) = value; + return instance; + }); + enum16AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum16AsStringCollection, 37), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum16AsStringCollection)); + enum16AsStringCollection.SetPropertyIndexes( + index: 37, + originalValueIndex: 37, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum16>(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum16>(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum16AsStringCollectionElementType = enum16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum16), + providerClrType: typeof(string)); + enum16AsStringCollectionElementType.TypeMapping = enum16AsStringCollection.TypeMapping.ElementTypeMapping; + + var enum16Collection = runtimeEntityType.AddProperty( + "Enum16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16Collection(instance) == null); + enum16Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum16Collection(instance) = value; + return instance; + }); + enum16Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum16Collection(instance) = value; + return instance; + }); + enum16Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum16Collection, 38), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum16Collection)); + enum16Collection.SetPropertyIndexes( + index: 38, + originalValueIndex: 38, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum16>(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum16>(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var enum16CollectionElementType = enum16Collection.SetElementType(typeof(CompiledModelTestBase.Enum16)); + enum16CollectionElementType.TypeMapping = enum16Collection.TypeMapping.ElementTypeMapping; + + var enum32 = runtimeEntityType.AddProperty( + "Enum32", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32.SetGetter( + CompiledModelTestBase.Enum32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum32(instance))), ((object)(CompiledModelTestBase.Enum32.Default)))); + enum32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.Enum32(instance) = value; + return instance; + }); + enum32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.Enum32(instance) = value; + return instance; + }); + enum32.SetAccessors( + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.ReadOriginalValue(enum32, 39), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.GetCurrentValue(enum32)); + enum32.SetPropertyIndexes( + index: 39, + originalValueIndex: 39, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))); + enum32.SetSentinelFromProviderValue(0); + + var enum32Array = runtimeEntityType.AddProperty( + "Enum32Array", + typeof(CompiledModelTestBase.Enum32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32Array.SetGetter( + CompiledModelTestBase.Enum32[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32Array(instance) == null); + enum32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32[] value) => + { + ManyTypesUnsafeAccessors.Enum32Array(instance) = value; + return instance; + }); + enum32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32[] value) => + { + ManyTypesUnsafeAccessors.Enum32Array(instance) = value; + return instance; + }); + enum32Array.SetAccessors( + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => entry.ReadOriginalValue(enum32Array, 40), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => entry.GetCurrentValue(enum32Array)); + enum32Array.SetPropertyIndexes( + index: 40, + originalValueIndex: 40, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var enum32ArrayElementType = enum32Array.SetElementType(typeof(CompiledModelTestBase.Enum32)); + enum32ArrayElementType.TypeMapping = enum32Array.TypeMapping.ElementTypeMapping; + + var enum32AsString = runtimeEntityType.AddProperty( + "Enum32AsString", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum32AsString.SetGetter( + CompiledModelTestBase.Enum32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum32AsString(instance))), ((object)(CompiledModelTestBase.Enum32.Default)))); + enum32AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.Enum32AsString(instance) = value; + return instance; + }); + enum32AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.Enum32AsString(instance) = value; + return instance; + }); + enum32AsString.SetAccessors( + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.ReadOriginalValue(enum32AsString, 41), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.GetCurrentValue(enum32AsString)); + enum32AsString.SetPropertyIndexes( + index: 41, + originalValueIndex: 41, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enum32AsString.SetSentinelFromProviderValue("Default"); + + var enum32AsStringArray = runtimeEntityType.AddProperty( + "Enum32AsStringArray", + typeof(CompiledModelTestBase.Enum32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32AsStringArray.SetGetter( + CompiledModelTestBase.Enum32[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsStringArray(instance) == null); + enum32AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32[] value) => + { + ManyTypesUnsafeAccessors.Enum32AsStringArray(instance) = value; + return instance; + }); + enum32AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32[] value) => + { + ManyTypesUnsafeAccessors.Enum32AsStringArray(instance) = value; + return instance; + }); + enum32AsStringArray.SetAccessors( + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => entry.ReadOriginalValue(enum32AsStringArray, 42), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => entry.GetCurrentValue(enum32AsStringArray)); + enum32AsStringArray.SetPropertyIndexes( + index: 42, + originalValueIndex: 42, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum32AsStringArrayElementType = enum32AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum32), + providerClrType: typeof(string)); + enum32AsStringArrayElementType.TypeMapping = enum32AsStringArray.TypeMapping.ElementTypeMapping; + + var enum32AsStringCollection = runtimeEntityType.AddProperty( + "Enum32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsStringCollection(instance) == null); + enum32AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum32AsStringCollection(instance) = value; + return instance; + }); + enum32AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum32AsStringCollection(instance) = value; + return instance; + }); + enum32AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum32AsStringCollection, 43), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum32AsStringCollection)); + enum32AsStringCollection.SetPropertyIndexes( + index: 43, + originalValueIndex: 43, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum32>(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum32>(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum32AsStringCollectionElementType = enum32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum32), + providerClrType: typeof(string)); + enum32AsStringCollectionElementType.TypeMapping = enum32AsStringCollection.TypeMapping.ElementTypeMapping; + + var enum32Collection = runtimeEntityType.AddProperty( + "Enum32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32Collection(instance) == null); + enum32Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum32Collection(instance) = value; + return instance; + }); + enum32Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum32Collection(instance) = value; + return instance; + }); + enum32Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum32Collection, 44), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum32Collection)); + enum32Collection.SetPropertyIndexes( + index: 44, + originalValueIndex: 44, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum32>(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum32>(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var enum32CollectionElementType = enum32Collection.SetElementType(typeof(CompiledModelTestBase.Enum32)); + enum32CollectionElementType.TypeMapping = enum32Collection.TypeMapping.ElementTypeMapping; + + var enum64 = runtimeEntityType.AddProperty( + "Enum64", + typeof(CompiledModelTestBase.Enum64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64.SetGetter( + CompiledModelTestBase.Enum64 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum64(instance))), ((object)(CompiledModelTestBase.Enum64.Default)))); + enum64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64 value) => + { + ManyTypesUnsafeAccessors.Enum64(instance) = value; + return instance; + }); + enum64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64 value) => + { + ManyTypesUnsafeAccessors.Enum64(instance) = value; + return instance; + }); + enum64.SetAccessors( + CompiledModelTestBase.Enum64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => entry.ReadOriginalValue(enum64, 45), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => entry.GetCurrentValue(enum64)); + enum64.SetPropertyIndexes( + index: 45, + originalValueIndex: 45, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))); + enum64.SetSentinelFromProviderValue(0L); + + var enum64Array = runtimeEntityType.AddProperty( + "Enum64Array", + typeof(CompiledModelTestBase.Enum64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64Array.SetGetter( + CompiledModelTestBase.Enum64[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64Array(instance) == null); + enum64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64[] value) => + { + ManyTypesUnsafeAccessors.Enum64Array(instance) = value; + return instance; + }); + enum64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64[] value) => + { + ManyTypesUnsafeAccessors.Enum64Array(instance) = value; + return instance; + }); + enum64Array.SetAccessors( + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => entry.ReadOriginalValue(enum64Array, 46), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => entry.GetCurrentValue(enum64Array)); + enum64Array.SetPropertyIndexes( + index: 46, + originalValueIndex: 46, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var enum64ArrayElementType = enum64Array.SetElementType(typeof(CompiledModelTestBase.Enum64)); + enum64ArrayElementType.TypeMapping = enum64Array.TypeMapping.ElementTypeMapping; + + var enum64AsString = runtimeEntityType.AddProperty( + "Enum64AsString", + typeof(CompiledModelTestBase.Enum64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum64AsString.SetGetter( + CompiledModelTestBase.Enum64 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum64AsString(instance))), ((object)(CompiledModelTestBase.Enum64.Default)))); + enum64AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64 value) => + { + ManyTypesUnsafeAccessors.Enum64AsString(instance) = value; + return instance; + }); + enum64AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64 value) => + { + ManyTypesUnsafeAccessors.Enum64AsString(instance) = value; + return instance; + }); + enum64AsString.SetAccessors( + CompiledModelTestBase.Enum64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => entry.ReadOriginalValue(enum64AsString, 47), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => entry.GetCurrentValue(enum64AsString)); + enum64AsString.SetPropertyIndexes( + index: 47, + originalValueIndex: 47, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enum64AsString.SetSentinelFromProviderValue("Default"); + + var enum64AsStringArray = runtimeEntityType.AddProperty( + "Enum64AsStringArray", + typeof(CompiledModelTestBase.Enum64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64AsStringArray.SetGetter( + CompiledModelTestBase.Enum64[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsStringArray(instance) == null); + enum64AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64[] value) => + { + ManyTypesUnsafeAccessors.Enum64AsStringArray(instance) = value; + return instance; + }); + enum64AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64[] value) => + { + ManyTypesUnsafeAccessors.Enum64AsStringArray(instance) = value; + return instance; + }); + enum64AsStringArray.SetAccessors( + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => entry.ReadOriginalValue(enum64AsStringArray, 48), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => entry.GetCurrentValue(enum64AsStringArray)); + enum64AsStringArray.SetPropertyIndexes( + index: 48, + originalValueIndex: 48, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum64AsStringArrayElementType = enum64AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum64), + providerClrType: typeof(string)); + enum64AsStringArrayElementType.TypeMapping = enum64AsStringArray.TypeMapping.ElementTypeMapping; + + var enum64AsStringCollection = runtimeEntityType.AddProperty( + "Enum64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsStringCollection(instance) == null); + enum64AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum64AsStringCollection(instance) = value; + return instance; + }); + enum64AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum64AsStringCollection(instance) = value; + return instance; + }); + enum64AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum64AsStringCollection, 49), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum64AsStringCollection)); + enum64AsStringCollection.SetPropertyIndexes( + index: 49, + originalValueIndex: 49, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum64>(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum64>(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum64AsStringCollectionElementType = enum64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum64), + providerClrType: typeof(string)); + enum64AsStringCollectionElementType.TypeMapping = enum64AsStringCollection.TypeMapping.ElementTypeMapping; + + var enum64Collection = runtimeEntityType.AddProperty( + "Enum64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64Collection(instance) == null); + enum64Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum64Collection(instance) = value; + return instance; + }); + enum64Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum64Collection(instance) = value; + return instance; + }); + enum64Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum64Collection, 50), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum64Collection)); + enum64Collection.SetPropertyIndexes( + index: 50, + originalValueIndex: 50, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum64>(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum64>(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var enum64CollectionElementType = enum64Collection.SetElementType(typeof(CompiledModelTestBase.Enum64)); + enum64CollectionElementType.TypeMapping = enum64Collection.TypeMapping.ElementTypeMapping; + + var enum8 = runtimeEntityType.AddProperty( + "Enum8", + typeof(CompiledModelTestBase.Enum8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8.SetGetter( + CompiledModelTestBase.Enum8 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum8(instance))), ((object)(CompiledModelTestBase.Enum8.Default)))); + enum8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8 value) => + { + ManyTypesUnsafeAccessors.Enum8(instance) = value; + return instance; + }); + enum8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8 value) => + { + ManyTypesUnsafeAccessors.Enum8(instance) = value; + return instance; + }); + enum8.SetAccessors( + CompiledModelTestBase.Enum8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => entry.ReadOriginalValue(enum8, 51), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => entry.GetCurrentValue(enum8)); + enum8.SetPropertyIndexes( + index: 51, + originalValueIndex: 51, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))); + enum8.SetSentinelFromProviderValue((short)0); + + var enum8Array = runtimeEntityType.AddProperty( + "Enum8Array", + typeof(CompiledModelTestBase.Enum8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8Array.SetGetter( + CompiledModelTestBase.Enum8[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8Array(instance) == null); + enum8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8[] value) => + { + ManyTypesUnsafeAccessors.Enum8Array(instance) = value; + return instance; + }); + enum8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8[] value) => + { + ManyTypesUnsafeAccessors.Enum8Array(instance) = value; + return instance; + }); + enum8Array.SetAccessors( + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => entry.ReadOriginalValue(enum8Array, 52), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => entry.GetCurrentValue(enum8Array)); + enum8Array.SetPropertyIndexes( + index: 52, + originalValueIndex: 52, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var enum8ArrayElementType = enum8Array.SetElementType(typeof(CompiledModelTestBase.Enum8)); + enum8ArrayElementType.TypeMapping = enum8Array.TypeMapping.ElementTypeMapping; + + var enum8AsString = runtimeEntityType.AddProperty( + "Enum8AsString", + typeof(CompiledModelTestBase.Enum8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum8AsString.SetGetter( + CompiledModelTestBase.Enum8 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum8AsString(instance))), ((object)(CompiledModelTestBase.Enum8.Default)))); + enum8AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8 value) => + { + ManyTypesUnsafeAccessors.Enum8AsString(instance) = value; + return instance; + }); + enum8AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8 value) => + { + ManyTypesUnsafeAccessors.Enum8AsString(instance) = value; + return instance; + }); + enum8AsString.SetAccessors( + CompiledModelTestBase.Enum8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => entry.ReadOriginalValue(enum8AsString, 53), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => entry.GetCurrentValue(enum8AsString)); + enum8AsString.SetPropertyIndexes( + index: 53, + originalValueIndex: 53, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enum8AsString.SetSentinelFromProviderValue("Default"); + + var enum8AsStringArray = runtimeEntityType.AddProperty( + "Enum8AsStringArray", + typeof(CompiledModelTestBase.Enum8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8AsStringArray.SetGetter( + CompiledModelTestBase.Enum8[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsStringArray(instance) == null); + enum8AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8[] value) => + { + ManyTypesUnsafeAccessors.Enum8AsStringArray(instance) = value; + return instance; + }); + enum8AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8[] value) => + { + ManyTypesUnsafeAccessors.Enum8AsStringArray(instance) = value; + return instance; + }); + enum8AsStringArray.SetAccessors( + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => entry.ReadOriginalValue(enum8AsStringArray, 54), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => entry.GetCurrentValue(enum8AsStringArray)); + enum8AsStringArray.SetPropertyIndexes( + index: 54, + originalValueIndex: 54, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum8AsStringArrayElementType = enum8AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum8), + providerClrType: typeof(string)); + enum8AsStringArrayElementType.TypeMapping = enum8AsStringArray.TypeMapping.ElementTypeMapping; + + var enum8AsStringCollection = runtimeEntityType.AddProperty( + "Enum8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsStringCollection(instance) == null); + enum8AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum8AsStringCollection(instance) = value; + return instance; + }); + enum8AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum8AsStringCollection(instance) = value; + return instance; + }); + enum8AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum8AsStringCollection, 55), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum8AsStringCollection)); + enum8AsStringCollection.SetPropertyIndexes( + index: 55, + originalValueIndex: 55, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum8>(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum8>(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum8AsStringCollectionElementType = enum8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum8), + providerClrType: typeof(string)); + enum8AsStringCollectionElementType.TypeMapping = enum8AsStringCollection.TypeMapping.ElementTypeMapping; + + var enum8Collection = runtimeEntityType.AddProperty( + "Enum8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8Collection(instance) == null); + enum8Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum8Collection(instance) = value; + return instance; + }); + enum8Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum8Collection(instance) = value; + return instance; + }); + enum8Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum8Collection, 56), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum8Collection)); + enum8Collection.SetPropertyIndexes( + index: 56, + originalValueIndex: 56, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum8>(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum8>(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var enum8CollectionElementType = enum8Collection.SetElementType(typeof(CompiledModelTestBase.Enum8)); + enum8CollectionElementType.TypeMapping = enum8Collection.TypeMapping.ElementTypeMapping; + + var enumToNumberConverterProperty = runtimeEntityType.AddProperty( + "EnumToNumberConverterProperty", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumToNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new EnumToNumberConverter()); + enumToNumberConverterProperty.SetGetter( + CompiledModelTestBase.Enum32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(instance))), ((object)(CompiledModelTestBase.Enum32.Default)))); + enumToNumberConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(instance) = value; + return instance; + }); + enumToNumberConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(instance) = value; + return instance; + }); + enumToNumberConverterProperty.SetAccessors( + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.ReadOriginalValue(enumToNumberConverterProperty, 57), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.GetCurrentValue(enumToNumberConverterProperty)); + enumToNumberConverterProperty.SetPropertyIndexes( + index: 57, + originalValueIndex: 57, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumToNumberConverterProperty.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))); + enumToNumberConverterProperty.SetSentinelFromProviderValue(0); + + var enumToStringConverterProperty = runtimeEntityType.AddProperty( + "EnumToStringConverterProperty", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new EnumToStringConverter()); + enumToStringConverterProperty.SetGetter( + CompiledModelTestBase.Enum32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumToStringConverterProperty(instance))), ((object)(CompiledModelTestBase.Enum32.Default)))); + enumToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.EnumToStringConverterProperty(instance) = value; + return instance; + }); + enumToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.EnumToStringConverterProperty(instance) = value; + return instance; + }); + enumToStringConverterProperty.SetAccessors( + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.ReadOriginalValue(enumToStringConverterProperty, 58), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.GetCurrentValue(enumToStringConverterProperty)); + enumToStringConverterProperty.SetPropertyIndexes( + index: 58, + originalValueIndex: 58, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumToStringConverterProperty.SetSentinelFromProviderValue("Default"); + + var enumU16 = runtimeEntityType.AddProperty( + "EnumU16", + typeof(CompiledModelTestBase.EnumU16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16.SetGetter( + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU16(instance))), ((object)(CompiledModelTestBase.EnumU16.Min)))); + enumU16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16 value) => + { + ManyTypesUnsafeAccessors.EnumU16(instance) = value; + return instance; + }); + enumU16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16 value) => + { + ManyTypesUnsafeAccessors.EnumU16(instance) = value; + return instance; + }); + enumU16.SetAccessors( + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => entry.ReadOriginalValue(enumU16, 59), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => entry.GetCurrentValue(enumU16)); + enumU16.SetPropertyIndexes( + index: 59, + originalValueIndex: 59, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))); + enumU16.SetSentinelFromProviderValue(0); + + var enumU16Array = runtimeEntityType.AddProperty( + "EnumU16Array", + typeof(CompiledModelTestBase.EnumU16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16Array.SetGetter( + CompiledModelTestBase.EnumU16[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16Array(instance) == null); + enumU16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16[] value) => + { + ManyTypesUnsafeAccessors.EnumU16Array(instance) = value; + return instance; + }); + enumU16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16[] value) => + { + ManyTypesUnsafeAccessors.EnumU16Array(instance) = value; + return instance; + }); + enumU16Array.SetAccessors( + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU16Array, 60), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => entry.GetCurrentValue(enumU16Array)); + enumU16Array.SetPropertyIndexes( + index: 60, + originalValueIndex: 60, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var enumU16ArrayElementType = enumU16Array.SetElementType(typeof(CompiledModelTestBase.EnumU16)); + enumU16ArrayElementType.TypeMapping = enumU16Array.TypeMapping.ElementTypeMapping; + + var enumU16AsString = runtimeEntityType.AddProperty( + "EnumU16AsString", + typeof(CompiledModelTestBase.EnumU16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU16AsString.SetGetter( + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU16AsString(instance))), ((object)(CompiledModelTestBase.EnumU16.Min)))); + enumU16AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16 value) => + { + ManyTypesUnsafeAccessors.EnumU16AsString(instance) = value; + return instance; + }); + enumU16AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16 value) => + { + ManyTypesUnsafeAccessors.EnumU16AsString(instance) = value; + return instance; + }); + enumU16AsString.SetAccessors( + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => entry.ReadOriginalValue(enumU16AsString, 61), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => entry.GetCurrentValue(enumU16AsString)); + enumU16AsString.SetPropertyIndexes( + index: 61, + originalValueIndex: 61, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumU16AsString.SetSentinelFromProviderValue("Min"); + + var enumU16AsStringArray = runtimeEntityType.AddProperty( + "EnumU16AsStringArray", + typeof(CompiledModelTestBase.EnumU16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16AsStringArray.SetGetter( + CompiledModelTestBase.EnumU16[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsStringArray(instance) == null); + enumU16AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16[] value) => + { + ManyTypesUnsafeAccessors.EnumU16AsStringArray(instance) = value; + return instance; + }); + enumU16AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16[] value) => + { + ManyTypesUnsafeAccessors.EnumU16AsStringArray(instance) = value; + return instance; + }); + enumU16AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU16AsStringArray, 62), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => entry.GetCurrentValue(enumU16AsStringArray)); + enumU16AsStringArray.SetPropertyIndexes( + index: 62, + originalValueIndex: 62, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU16AsStringArrayElementType = enumU16AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU16), + providerClrType: typeof(string)); + enumU16AsStringArrayElementType.TypeMapping = enumU16AsStringArray.TypeMapping.ElementTypeMapping; + + var enumU16AsStringCollection = runtimeEntityType.AddProperty( + "EnumU16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsStringCollection(instance) == null); + enumU16AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU16AsStringCollection(instance) = value; + return instance; + }); + enumU16AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU16AsStringCollection(instance) = value; + return instance; + }); + enumU16AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU16AsStringCollection, 63), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU16AsStringCollection)); + enumU16AsStringCollection.SetPropertyIndexes( + index: 63, + originalValueIndex: 63, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU16>(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU16>(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU16AsStringCollectionElementType = enumU16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU16), + providerClrType: typeof(string)); + enumU16AsStringCollectionElementType.TypeMapping = enumU16AsStringCollection.TypeMapping.ElementTypeMapping; + + var enumU16Collection = runtimeEntityType.AddProperty( + "EnumU16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16Collection(instance) == null); + enumU16Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU16Collection(instance) = value; + return instance; + }); + enumU16Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU16Collection(instance) = value; + return instance; + }); + enumU16Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU16Collection, 64), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU16Collection)); + enumU16Collection.SetPropertyIndexes( + index: 64, + originalValueIndex: 64, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU16>(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU16>(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var enumU16CollectionElementType = enumU16Collection.SetElementType(typeof(CompiledModelTestBase.EnumU16)); + enumU16CollectionElementType.TypeMapping = enumU16Collection.TypeMapping.ElementTypeMapping; + + var enumU32 = runtimeEntityType.AddProperty( + "EnumU32", + typeof(CompiledModelTestBase.EnumU32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32.SetGetter( + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU32(instance))), ((object)(CompiledModelTestBase.EnumU32.Min)))); + enumU32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32 value) => + { + ManyTypesUnsafeAccessors.EnumU32(instance) = value; + return instance; + }); + enumU32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32 value) => + { + ManyTypesUnsafeAccessors.EnumU32(instance) = value; + return instance; + }); + enumU32.SetAccessors( + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => entry.ReadOriginalValue(enumU32, 65), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => entry.GetCurrentValue(enumU32)); + enumU32.SetPropertyIndexes( + index: 65, + originalValueIndex: 65, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))); + enumU32.SetSentinelFromProviderValue(0L); + + var enumU32Array = runtimeEntityType.AddProperty( + "EnumU32Array", + typeof(CompiledModelTestBase.EnumU32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32Array.SetGetter( + CompiledModelTestBase.EnumU32[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32Array(instance) == null); + enumU32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32[] value) => + { + ManyTypesUnsafeAccessors.EnumU32Array(instance) = value; + return instance; + }); + enumU32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32[] value) => + { + ManyTypesUnsafeAccessors.EnumU32Array(instance) = value; + return instance; + }); + enumU32Array.SetAccessors( + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU32Array, 66), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => entry.GetCurrentValue(enumU32Array)); + enumU32Array.SetPropertyIndexes( + index: 66, + originalValueIndex: 66, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var enumU32ArrayElementType = enumU32Array.SetElementType(typeof(CompiledModelTestBase.EnumU32)); + enumU32ArrayElementType.TypeMapping = enumU32Array.TypeMapping.ElementTypeMapping; + + var enumU32AsString = runtimeEntityType.AddProperty( + "EnumU32AsString", + typeof(CompiledModelTestBase.EnumU32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU32AsString.SetGetter( + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU32AsString(instance))), ((object)(CompiledModelTestBase.EnumU32.Min)))); + enumU32AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32 value) => + { + ManyTypesUnsafeAccessors.EnumU32AsString(instance) = value; + return instance; + }); + enumU32AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32 value) => + { + ManyTypesUnsafeAccessors.EnumU32AsString(instance) = value; + return instance; + }); + enumU32AsString.SetAccessors( + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => entry.ReadOriginalValue(enumU32AsString, 67), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => entry.GetCurrentValue(enumU32AsString)); + enumU32AsString.SetPropertyIndexes( + index: 67, + originalValueIndex: 67, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumU32AsString.SetSentinelFromProviderValue("Min"); + + var enumU32AsStringArray = runtimeEntityType.AddProperty( + "EnumU32AsStringArray", + typeof(CompiledModelTestBase.EnumU32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32AsStringArray.SetGetter( + CompiledModelTestBase.EnumU32[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsStringArray(instance) == null); + enumU32AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32[] value) => + { + ManyTypesUnsafeAccessors.EnumU32AsStringArray(instance) = value; + return instance; + }); + enumU32AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32[] value) => + { + ManyTypesUnsafeAccessors.EnumU32AsStringArray(instance) = value; + return instance; + }); + enumU32AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU32AsStringArray, 68), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => entry.GetCurrentValue(enumU32AsStringArray)); + enumU32AsStringArray.SetPropertyIndexes( + index: 68, + originalValueIndex: 68, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU32AsStringArrayElementType = enumU32AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU32), + providerClrType: typeof(string)); + enumU32AsStringArrayElementType.TypeMapping = enumU32AsStringArray.TypeMapping.ElementTypeMapping; + + var enumU32AsStringCollection = runtimeEntityType.AddProperty( + "EnumU32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsStringCollection(instance) == null); + enumU32AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU32AsStringCollection(instance) = value; + return instance; + }); + enumU32AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU32AsStringCollection(instance) = value; + return instance; + }); + enumU32AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU32AsStringCollection, 69), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU32AsStringCollection)); + enumU32AsStringCollection.SetPropertyIndexes( + index: 69, + originalValueIndex: 69, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU32>(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU32>(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU32AsStringCollectionElementType = enumU32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU32), + providerClrType: typeof(string)); + enumU32AsStringCollectionElementType.TypeMapping = enumU32AsStringCollection.TypeMapping.ElementTypeMapping; + + var enumU32Collection = runtimeEntityType.AddProperty( + "EnumU32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32Collection(instance) == null); + enumU32Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU32Collection(instance) = value; + return instance; + }); + enumU32Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU32Collection(instance) = value; + return instance; + }); + enumU32Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU32Collection, 70), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU32Collection)); + enumU32Collection.SetPropertyIndexes( + index: 70, + originalValueIndex: 70, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU32>(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU32>(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var enumU32CollectionElementType = enumU32Collection.SetElementType(typeof(CompiledModelTestBase.EnumU32)); + enumU32CollectionElementType.TypeMapping = enumU32Collection.TypeMapping.ElementTypeMapping; + + var enumU64 = runtimeEntityType.AddProperty( + "EnumU64", + typeof(CompiledModelTestBase.EnumU64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64.SetGetter( + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU64(instance))), ((object)(CompiledModelTestBase.EnumU64.Min)))); + enumU64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64 value) => + { + ManyTypesUnsafeAccessors.EnumU64(instance) = value; + return instance; + }); + enumU64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64 value) => + { + ManyTypesUnsafeAccessors.EnumU64(instance) = value; + return instance; + }); + enumU64.SetAccessors( + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => entry.ReadOriginalValue(enumU64, 71), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => entry.GetCurrentValue(enumU64)); + enumU64.SetPropertyIndexes( + index: 71, + originalValueIndex: 71, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))); + enumU64.SetSentinelFromProviderValue(0m); + + var enumU64Array = runtimeEntityType.AddProperty( + "EnumU64Array", + typeof(CompiledModelTestBase.EnumU64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64Array.SetGetter( + CompiledModelTestBase.EnumU64[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64Array(instance) == null); + enumU64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64[] value) => + { + ManyTypesUnsafeAccessors.EnumU64Array(instance) = value; + return instance; + }); + enumU64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64[] value) => + { + ManyTypesUnsafeAccessors.EnumU64Array(instance) = value; + return instance; + }); + enumU64Array.SetAccessors( + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU64Array, 72), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => entry.GetCurrentValue(enumU64Array)); + enumU64Array.SetPropertyIndexes( + index: 72, + originalValueIndex: 72, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var enumU64ArrayElementType = enumU64Array.SetElementType(typeof(CompiledModelTestBase.EnumU64)); + enumU64ArrayElementType.TypeMapping = enumU64Array.TypeMapping.ElementTypeMapping; + + var enumU64AsString = runtimeEntityType.AddProperty( + "EnumU64AsString", + typeof(CompiledModelTestBase.EnumU64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU64AsString.SetGetter( + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU64AsString(instance))), ((object)(CompiledModelTestBase.EnumU64.Min)))); + enumU64AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64 value) => + { + ManyTypesUnsafeAccessors.EnumU64AsString(instance) = value; + return instance; + }); + enumU64AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64 value) => + { + ManyTypesUnsafeAccessors.EnumU64AsString(instance) = value; + return instance; + }); + enumU64AsString.SetAccessors( + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => entry.ReadOriginalValue(enumU64AsString, 73), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => entry.GetCurrentValue(enumU64AsString)); + enumU64AsString.SetPropertyIndexes( + index: 73, + originalValueIndex: 73, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumU64AsString.SetSentinelFromProviderValue("Min"); + + var enumU64AsStringArray = runtimeEntityType.AddProperty( + "EnumU64AsStringArray", + typeof(CompiledModelTestBase.EnumU64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64AsStringArray.SetGetter( + CompiledModelTestBase.EnumU64[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsStringArray(instance) == null); + enumU64AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64[] value) => + { + ManyTypesUnsafeAccessors.EnumU64AsStringArray(instance) = value; + return instance; + }); + enumU64AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64[] value) => + { + ManyTypesUnsafeAccessors.EnumU64AsStringArray(instance) = value; + return instance; + }); + enumU64AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU64AsStringArray, 74), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => entry.GetCurrentValue(enumU64AsStringArray)); + enumU64AsStringArray.SetPropertyIndexes( + index: 74, + originalValueIndex: 74, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU64AsStringArrayElementType = enumU64AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU64), + providerClrType: typeof(string)); + enumU64AsStringArrayElementType.TypeMapping = enumU64AsStringArray.TypeMapping.ElementTypeMapping; + + var enumU64AsStringCollection = runtimeEntityType.AddProperty( + "EnumU64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsStringCollection(instance) == null); + enumU64AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU64AsStringCollection(instance) = value; + return instance; + }); + enumU64AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU64AsStringCollection(instance) = value; + return instance; + }); + enumU64AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU64AsStringCollection, 75), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU64AsStringCollection)); + enumU64AsStringCollection.SetPropertyIndexes( + index: 75, + originalValueIndex: 75, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU64>(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU64>(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU64AsStringCollectionElementType = enumU64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU64), + providerClrType: typeof(string)); + enumU64AsStringCollectionElementType.TypeMapping = enumU64AsStringCollection.TypeMapping.ElementTypeMapping; + + var enumU64Collection = runtimeEntityType.AddProperty( + "EnumU64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64Collection(instance) == null); + enumU64Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU64Collection(instance) = value; + return instance; + }); + enumU64Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU64Collection(instance) = value; + return instance; + }); + enumU64Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU64Collection, 76), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU64Collection)); + enumU64Collection.SetPropertyIndexes( + index: 76, + originalValueIndex: 76, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU64>(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU64>(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var enumU64CollectionElementType = enumU64Collection.SetElementType(typeof(CompiledModelTestBase.EnumU64)); + enumU64CollectionElementType.TypeMapping = enumU64Collection.TypeMapping.ElementTypeMapping; + + var enumU8 = runtimeEntityType.AddProperty( + "EnumU8", + typeof(CompiledModelTestBase.EnumU8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8.SetGetter( + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU8(instance))), ((object)(CompiledModelTestBase.EnumU8.Min)))); + enumU8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8 value) => + { + ManyTypesUnsafeAccessors.EnumU8(instance) = value; + return instance; + }); + enumU8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8 value) => + { + ManyTypesUnsafeAccessors.EnumU8(instance) = value; + return instance; + }); + enumU8.SetAccessors( + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => entry.ReadOriginalValue(enumU8, 77), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => entry.GetCurrentValue(enumU8)); + enumU8.SetPropertyIndexes( + index: 77, + originalValueIndex: 77, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))); + enumU8.SetSentinelFromProviderValue((byte)0); + + var enumU8Array = runtimeEntityType.AddProperty( + "EnumU8Array", + typeof(CompiledModelTestBase.EnumU8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8Array.SetGetter( + CompiledModelTestBase.EnumU8[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8Array(instance) == null); + enumU8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8[] value) => + { + ManyTypesUnsafeAccessors.EnumU8Array(instance) = value; + return instance; + }); + enumU8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8[] value) => + { + ManyTypesUnsafeAccessors.EnumU8Array(instance) = value; + return instance; + }); + enumU8Array.SetAccessors( + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU8Array, 78), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => entry.GetCurrentValue(enumU8Array)); + enumU8Array.SetPropertyIndexes( + index: 78, + originalValueIndex: 78, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var enumU8ArrayElementType = enumU8Array.SetElementType(typeof(CompiledModelTestBase.EnumU8)); + enumU8ArrayElementType.TypeMapping = enumU8Array.TypeMapping.ElementTypeMapping; + + var enumU8AsString = runtimeEntityType.AddProperty( + "EnumU8AsString", + typeof(CompiledModelTestBase.EnumU8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU8AsString.SetGetter( + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU8AsString(instance))), ((object)(CompiledModelTestBase.EnumU8.Min)))); + enumU8AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8 value) => + { + ManyTypesUnsafeAccessors.EnumU8AsString(instance) = value; + return instance; + }); + enumU8AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8 value) => + { + ManyTypesUnsafeAccessors.EnumU8AsString(instance) = value; + return instance; + }); + enumU8AsString.SetAccessors( + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => entry.ReadOriginalValue(enumU8AsString, 79), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => entry.GetCurrentValue(enumU8AsString)); + enumU8AsString.SetPropertyIndexes( + index: 79, + originalValueIndex: 79, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumU8AsString.SetSentinelFromProviderValue("Min"); + + var enumU8AsStringArray = runtimeEntityType.AddProperty( + "EnumU8AsStringArray", + typeof(CompiledModelTestBase.EnumU8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8AsStringArray.SetGetter( + CompiledModelTestBase.EnumU8[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsStringArray(instance) == null); + enumU8AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8[] value) => + { + ManyTypesUnsafeAccessors.EnumU8AsStringArray(instance) = value; + return instance; + }); + enumU8AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8[] value) => + { + ManyTypesUnsafeAccessors.EnumU8AsStringArray(instance) = value; + return instance; + }); + enumU8AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU8AsStringArray, 80), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => entry.GetCurrentValue(enumU8AsStringArray)); + enumU8AsStringArray.SetPropertyIndexes( + index: 80, + originalValueIndex: 80, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU8AsStringArrayElementType = enumU8AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU8), + providerClrType: typeof(string)); + enumU8AsStringArrayElementType.TypeMapping = enumU8AsStringArray.TypeMapping.ElementTypeMapping; + + var enumU8AsStringCollection = runtimeEntityType.AddProperty( + "EnumU8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsStringCollection(instance) == null); + enumU8AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU8AsStringCollection(instance) = value; + return instance; + }); + enumU8AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU8AsStringCollection(instance) = value; + return instance; + }); + enumU8AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU8AsStringCollection, 81), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU8AsStringCollection)); + enumU8AsStringCollection.SetPropertyIndexes( + index: 81, + originalValueIndex: 81, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU8>(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU8>(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU8AsStringCollectionElementType = enumU8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU8), + providerClrType: typeof(string)); + enumU8AsStringCollectionElementType.TypeMapping = enumU8AsStringCollection.TypeMapping.ElementTypeMapping; + + var enumU8Collection = runtimeEntityType.AddProperty( + "EnumU8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8Collection(instance) == null); + enumU8Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU8Collection(instance) = value; + return instance; + }); + enumU8Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU8Collection(instance) = value; + return instance; + }); + enumU8Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU8Collection, 82), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU8Collection)); + enumU8Collection.SetPropertyIndexes( + index: 82, + originalValueIndex: 82, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU8>(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU8>(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var enumU8CollectionElementType = enumU8Collection.SetElementType(typeof(CompiledModelTestBase.EnumU8)); + enumU8CollectionElementType.TypeMapping = enumU8Collection.TypeMapping.ElementTypeMapping; + + var @float = runtimeEntityType.AddProperty( + "Float", + typeof(float), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Float", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0f); + @float.SetGetter( + float (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Float(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Float(instance).Equals(0F)); + @float.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float value) => + { + ManyTypesUnsafeAccessors.Float(instance) = value; + return instance; + }); + @float.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float value) => + { + ManyTypesUnsafeAccessors.Float(instance) = value; + return instance; + }); + @float.SetAccessors( + float (IInternalEntry entry) => ManyTypesUnsafeAccessors.Float(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float (IInternalEntry entry) => ManyTypesUnsafeAccessors.Float(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float (IInternalEntry entry) => entry.ReadOriginalValue(@float, 83), + float (IInternalEntry entry) => entry.GetCurrentValue(@float)); + @float.SetPropertyIndexes( + index: 83, + originalValueIndex: 83, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @float.TypeMapping = JetFloatTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + keyComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + providerValueComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v)); + + var floatArray = runtimeEntityType.AddProperty( + "FloatArray", + typeof(float[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("FloatArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + floatArray.SetGetter( + float[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.FloatArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.FloatArray(instance) == null); + floatArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float[] value) => + { + ManyTypesUnsafeAccessors.FloatArray(instance) = value; + return instance; + }); + floatArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float[] value) => + { + ManyTypesUnsafeAccessors.FloatArray(instance) = value; + return instance; + }); + floatArray.SetAccessors( + float[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.FloatArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.FloatArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float[] (IInternalEntry entry) => entry.ReadOriginalValue(floatArray, 84), + float[] (IInternalEntry entry) => entry.GetCurrentValue(floatArray)); + floatArray.SetPropertyIndexes( + index: 84, + originalValueIndex: 84, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + floatArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonFloatReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonFloatReaderWriter.Instance), + elementMapping: JetFloatTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + keyComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + providerValueComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v))); + var floatArrayElementType = floatArray.SetElementType(typeof(float)); + floatArrayElementType.TypeMapping = floatArray.TypeMapping.ElementTypeMapping; + + var guid = runtimeEntityType.AddProperty( + "Guid", + typeof(Guid), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Guid", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + guid.SetGetter( + Guid (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Guid(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Guid(instance) == new Guid("00000000-0000-0000-0000-000000000000")); + guid.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.Guid(instance) = value; + return instance; + }); + guid.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.Guid(instance) = value; + return instance; + }); + guid.SetAccessors( + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.Guid(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.Guid(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(guid, 85), + Guid (IInternalEntry entry) => entry.GetCurrentValue(guid)); + guid.SetPropertyIndexes( + index: 85, + originalValueIndex: 85, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + guid.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + + var guidArray = runtimeEntityType.AddProperty( + "GuidArray", + typeof(Guid[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("GuidArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + guidArray.SetGetter( + Guid[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidArray(instance) == null); + guidArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid[] value) => + { + ManyTypesUnsafeAccessors.GuidArray(instance) = value; + return instance; + }); + guidArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid[] value) => + { + ManyTypesUnsafeAccessors.GuidArray(instance) = value; + return instance; + }); + guidArray.SetAccessors( + Guid[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid[] (IInternalEntry entry) => entry.ReadOriginalValue(guidArray, 86), + Guid[] (IInternalEntry entry) => entry.GetCurrentValue(guidArray)); + guidArray.SetPropertyIndexes( + index: 86, + originalValueIndex: 86, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + guidArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonGuidReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonGuidReaderWriter.Instance), + elementMapping: JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v))); + var guidArrayElementType = guidArray.SetElementType(typeof(Guid)); + guidArrayElementType.TypeMapping = guidArray.TypeMapping.ElementTypeMapping; + + var guidToBytesConverterProperty = runtimeEntityType.AddProperty( + "GuidToBytesConverterProperty", + typeof(Guid), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("GuidToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new GuidToBytesConverter()); + guidToBytesConverterProperty.SetGetter( + Guid (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(instance) == new Guid("00000000-0000-0000-0000-000000000000")); + guidToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(instance) = value; + return instance; + }); + guidToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(instance) = value; + return instance; + }); + guidToBytesConverterProperty.SetAccessors( + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(guidToBytesConverterProperty, 87), + Guid (IInternalEntry entry) => entry.GetCurrentValue(guidToBytesConverterProperty)); + guidToBytesConverterProperty.SetPropertyIndexes( + index: 87, + originalValueIndex: 87, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + guidToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(16)", + size: 16), + converter: new ValueConverter( + byte[] (Guid v) => v.ToByteArray(), + Guid (byte[] v) => new Guid(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (Guid v) => v.ToByteArray(), + Guid (byte[] v) => new Guid(v)))); + guidToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + + var guidToStringConverterProperty = runtimeEntityType.AddProperty( + "GuidToStringConverterProperty", + typeof(Guid), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("GuidToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new GuidToStringConverter()); + guidToStringConverterProperty.SetGetter( + Guid (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidToStringConverterProperty(instance) == new Guid("00000000-0000-0000-0000-000000000000")); + guidToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.GuidToStringConverterProperty(instance) = value; + return instance; + }); + guidToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.GuidToStringConverterProperty(instance) = value; + return instance; + }); + guidToStringConverterProperty.SetAccessors( + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(guidToStringConverterProperty, 88), + Guid (IInternalEntry entry) => entry.GetCurrentValue(guidToStringConverterProperty)); + guidToStringConverterProperty.SetPropertyIndexes( + index: 88, + originalValueIndex: 88, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + guidToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(36)", + size: 36), + converter: new ValueConverter( + string (Guid v) => v.ToString("D"), + Guid (string v) => new Guid(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Guid v) => v.ToString("D"), + Guid (string v) => new Guid(v)))); + guidToStringConverterProperty.SetSentinelFromProviderValue("00000000-0000-0000-0000-000000000000"); + + var iPAddress = runtimeEntityType.AddProperty( + "IPAddress", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + iPAddress.SetGetter( + IPAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddress(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddress(instance) == null); + iPAddress.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddress(instance) = value; + return instance; + }); + iPAddress.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddress(instance) = value; + return instance; + }); + iPAddress.SetAccessors( + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => entry.ReadOriginalValue(iPAddress, 89), + IPAddress (IInternalEntry entry) => entry.GetCurrentValue(iPAddress)); + iPAddress.SetPropertyIndexes( + index: 89, + originalValueIndex: 89, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddress.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))); + + var iPAddressArray = runtimeEntityType.AddProperty( + "IPAddressArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + iPAddressArray.SetGetter( + IPAddress[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressArray(instance) == null); + iPAddressArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress[] value) => + { + ManyTypesUnsafeAccessors.IPAddressArray(instance) = value; + return instance; + }); + iPAddressArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress[] value) => + { + ManyTypesUnsafeAccessors.IPAddressArray(instance) = value; + return instance; + }); + iPAddressArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(iPAddressArray, 90), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(iPAddressArray)); + iPAddressArray.SetPropertyIndexes( + index: 90, + originalValueIndex: 90, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddressArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var iPAddressArrayElementType = iPAddressArray.SetElementType(typeof(IPAddress)); + iPAddressArrayElementType.TypeMapping = iPAddressArray.TypeMapping.ElementTypeMapping; + + var iPAddressReadOnlyCollection = runtimeEntityType.AddProperty( + "IPAddressReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_ipAddressReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + iPAddressReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance) == null); + iPAddressReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance) = ((List)value); + return instance; + }); + iPAddressReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance) = ((List)value); + return instance; + }); + iPAddressReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(iPAddressReadOnlyCollection, 91), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(iPAddressReadOnlyCollection)); + iPAddressReadOnlyCollection.SetPropertyIndexes( + index: 91, + originalValueIndex: 91, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddressReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var iPAddressReadOnlyCollectionElementType = iPAddressReadOnlyCollection.SetElementType(typeof(IPAddress), + providerClrType: typeof(string)); + iPAddressReadOnlyCollectionElementType.TypeMapping = iPAddressReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var iPAddressToBytesConverterProperty = runtimeEntityType.AddProperty( + "IPAddressToBytesConverterProperty", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new IPAddressToBytesConverter()); + iPAddressToBytesConverterProperty.SetGetter( + IPAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(instance) == null); + iPAddressToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(instance) = value; + return instance; + }); + iPAddressToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(instance) = value; + return instance; + }); + iPAddressToBytesConverterProperty.SetAccessors( + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => entry.ReadOriginalValue(iPAddressToBytesConverterProperty, 92), + IPAddress (IInternalEntry entry) => entry.GetCurrentValue(iPAddressToBytesConverterProperty)); + iPAddressToBytesConverterProperty.SetPropertyIndexes( + index: 92, + originalValueIndex: 92, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddressToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(16)", + size: 16), + converter: new ValueConverter( + byte[] (IPAddress v) => v.GetAddressBytes(), + IPAddress (byte[] v) => new IPAddress(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (IPAddress v) => v.GetAddressBytes(), + IPAddress (byte[] v) => new IPAddress(v)))); + + var iPAddressToStringConverterProperty = runtimeEntityType.AddProperty( + "IPAddressToStringConverterProperty", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new IPAddressToStringConverter()); + iPAddressToStringConverterProperty.SetGetter( + IPAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(instance) == null); + iPAddressToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(instance) = value; + return instance; + }); + iPAddressToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(instance) = value; + return instance; + }); + iPAddressToStringConverterProperty.SetAccessors( + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => entry.ReadOriginalValue(iPAddressToStringConverterProperty, 93), + IPAddress (IInternalEntry entry) => entry.GetCurrentValue(iPAddressToStringConverterProperty)); + iPAddressToStringConverterProperty.SetPropertyIndexes( + index: 93, + originalValueIndex: 93, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddressToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))); + + var int16 = runtimeEntityType.AddProperty( + "Int16", + typeof(short), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: (short)0); + int16.SetGetter( + short (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int16(instance) == 0); + int16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short value) => + { + ManyTypesUnsafeAccessors.Int16(instance) = value; + return instance; + }); + int16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short value) => + { + ManyTypesUnsafeAccessors.Int16(instance) = value; + return instance; + }); + int16.SetAccessors( + short (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short (IInternalEntry entry) => entry.ReadOriginalValue(int16, 94), + short (IInternalEntry entry) => entry.GetCurrentValue(int16)); + int16.SetPropertyIndexes( + index: 94, + originalValueIndex: 94, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int16.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)); + + var int16Array = runtimeEntityType.AddProperty( + "Int16Array", + typeof(short[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int16Array.SetGetter( + short[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int16Array(instance) == null); + int16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short[] value) => + { + ManyTypesUnsafeAccessors.Int16Array(instance) = value; + return instance; + }); + int16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short[] value) => + { + ManyTypesUnsafeAccessors.Int16Array(instance) = value; + return instance; + }); + int16Array.SetAccessors( + short[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short[] (IInternalEntry entry) => entry.ReadOriginalValue(int16Array, 95), + short[] (IInternalEntry entry) => entry.GetCurrentValue(int16Array)); + int16Array.SetPropertyIndexes( + index: 95, + originalValueIndex: 95, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var int16ArrayElementType = int16Array.SetElementType(typeof(short)); + int16ArrayElementType.TypeMapping = int16Array.TypeMapping.ElementTypeMapping; + + var int32 = runtimeEntityType.AddProperty( + "Int32", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0); + int32.SetGetter( + int (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int32(instance) == 0); + int32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.Int32(instance) = value; + return instance; + }); + int32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.Int32(instance) = value; + return instance; + }); + int32.SetAccessors( + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(int32, 96), + int (IInternalEntry entry) => entry.GetCurrentValue(int32)); + int32.SetPropertyIndexes( + index: 96, + originalValueIndex: 96, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int32.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + + var int32Array = runtimeEntityType.AddProperty( + "Int32Array", + typeof(int[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int32Array.SetGetter( + int[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int32Array(instance) == null); + int32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int[] value) => + { + ManyTypesUnsafeAccessors.Int32Array(instance) = value; + return instance; + }); + int32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int[] value) => + { + ManyTypesUnsafeAccessors.Int32Array(instance) = value; + return instance; + }); + int32Array.SetAccessors( + int[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int[] (IInternalEntry entry) => entry.ReadOriginalValue(int32Array, 97), + int[] (IInternalEntry entry) => entry.GetCurrentValue(int32Array)); + int32Array.SetPropertyIndexes( + index: 97, + originalValueIndex: 97, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonInt32ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonInt32ReaderWriter.Instance), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))); + var int32ArrayElementType = int32Array.SetElementType(typeof(int)); + int32ArrayElementType.TypeMapping = int32Array.TypeMapping.ElementTypeMapping; + + var int32ReadOnlyCollection = runtimeEntityType.AddProperty( + "Int32ReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int32ReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_int32ReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int32ReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance) == null); + int32ReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance) = ((List)value); + return instance; + }); + int32ReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance) = ((List)value); + return instance; + }); + int32ReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._int32ReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._int32ReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(int32ReadOnlyCollection, 98), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(int32ReadOnlyCollection)); + int32ReadOnlyCollection.SetPropertyIndexes( + index: 98, + originalValueIndex: 98, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int32ReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, int>(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)), + keyComparer: new ListOfValueTypesComparer, int>(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, int>( + JsonInt32ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, int>( + JsonInt32ReaderWriter.Instance), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))); + var int32ReadOnlyCollectionElementType = int32ReadOnlyCollection.SetElementType(typeof(int)); + int32ReadOnlyCollectionElementType.TypeMapping = int32ReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var int64 = runtimeEntityType.AddProperty( + "Int64", + typeof(long), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0L); + int64.SetGetter( + long (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int64(instance) == 0L); + int64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long value) => + { + ManyTypesUnsafeAccessors.Int64(instance) = value; + return instance; + }); + int64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long value) => + { + ManyTypesUnsafeAccessors.Int64(instance) = value; + return instance; + }); + int64.SetAccessors( + long (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long (IInternalEntry entry) => entry.ReadOriginalValue(int64, 99), + long (IInternalEntry entry) => entry.GetCurrentValue(int64)); + int64.SetPropertyIndexes( + index: 99, + originalValueIndex: 99, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int64.TypeMapping = LibRedLongTypeMapping.Default; + + var int64Array = runtimeEntityType.AddProperty( + "Int64Array", + typeof(long[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int64Array.SetGetter( + long[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int64Array(instance) == null); + int64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long[] value) => + { + ManyTypesUnsafeAccessors.Int64Array(instance) = value; + return instance; + }); + int64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long[] value) => + { + ManyTypesUnsafeAccessors.Int64Array(instance) = value; + return instance; + }); + int64Array.SetAccessors( + long[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long[] (IInternalEntry entry) => entry.ReadOriginalValue(int64Array, 100), + long[] (IInternalEntry entry) => entry.GetCurrentValue(int64Array)); + int64Array.SetPropertyIndexes( + index: 100, + originalValueIndex: 100, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonInt64ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonInt64ReaderWriter.Instance), + elementMapping: LibRedLongTypeMapping.Default); + var int64ArrayElementType = int64Array.SetElementType(typeof(long)); + int64ArrayElementType.TypeMapping = int64Array.TypeMapping.ElementTypeMapping; + + var int8 = runtimeEntityType.AddProperty( + "Int8", + typeof(sbyte), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int8.SetGetter( + sbyte (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int8(instance) == 0); + int8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte value) => + { + ManyTypesUnsafeAccessors.Int8(instance) = value; + return instance; + }); + int8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte value) => + { + ManyTypesUnsafeAccessors.Int8(instance) = value; + return instance; + }); + int8.SetAccessors( + sbyte (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte (IInternalEntry entry) => entry.ReadOriginalValue(int8, 101), + sbyte (IInternalEntry entry) => entry.GetCurrentValue(int8)); + int8.SetPropertyIndexes( + index: 101, + originalValueIndex: 101, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int8.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + keyComparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)))); + int8.SetSentinelFromProviderValue((short)0); + + var int8Array = runtimeEntityType.AddProperty( + "Int8Array", + typeof(sbyte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int8Array.SetGetter( + sbyte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int8Array(instance) == null); + int8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte[] value) => + { + ManyTypesUnsafeAccessors.Int8Array(instance) = value; + return instance; + }); + int8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte[] value) => + { + ManyTypesUnsafeAccessors.Int8Array(instance) = value; + return instance; + }); + int8Array.SetAccessors( + sbyte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte[] (IInternalEntry entry) => entry.ReadOriginalValue(int8Array, 102), + sbyte[] (IInternalEntry entry) => entry.GetCurrentValue(int8Array)); + int8Array.SetPropertyIndexes( + index: 102, + originalValueIndex: 102, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + keyComparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v))))); + var int8ArrayElementType = int8Array.SetElementType(typeof(sbyte)); + int8ArrayElementType.TypeMapping = int8Array.TypeMapping.ElementTypeMapping; + + var intNumberToBytesConverterProperty = runtimeEntityType.AddProperty( + "IntNumberToBytesConverterProperty", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IntNumberToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToBytesConverter()); + intNumberToBytesConverterProperty.SetGetter( + int (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(instance) == 0); + intNumberToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(instance) = value; + return instance; + }); + intNumberToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(instance) = value; + return instance; + }); + intNumberToBytesConverterProperty.SetAccessors( + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(intNumberToBytesConverterProperty, 103), + int (IInternalEntry entry) => entry.GetCurrentValue(intNumberToBytesConverterProperty)); + intNumberToBytesConverterProperty.SetPropertyIndexes( + index: 103, + originalValueIndex: 103, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + intNumberToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(4)", + size: 4), + converter: new ValueConverter( + byte[] (int v) => NumberToBytesConverter.ReverseInt(BitConverter.GetBytes(v)), + int (byte[] v) => (v == null ? 0 : BitConverter.ToInt32(NumberToBytesConverter.ReverseInt((v.Length == 0 ? new byte[4] : v)), 0))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (int v) => NumberToBytesConverter.ReverseInt(BitConverter.GetBytes(v)), + int (byte[] v) => (v == null ? 0 : BitConverter.ToInt32(NumberToBytesConverter.ReverseInt((v.Length == 0 ? new byte[4] : v)), 0))))); + intNumberToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0 }); + + var intNumberToStringConverterProperty = runtimeEntityType.AddProperty( + "IntNumberToStringConverterProperty", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IntNumberToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToStringConverter()); + intNumberToStringConverterProperty.SetGetter( + int (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(instance) == 0); + intNumberToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(instance) = value; + return instance; + }); + intNumberToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(instance) = value; + return instance; + }); + intNumberToStringConverterProperty.SetAccessors( + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(intNumberToStringConverterProperty, 104), + int (IInternalEntry entry) => entry.GetCurrentValue(intNumberToStringConverterProperty)); + intNumberToStringConverterProperty.SetPropertyIndexes( + index: 104, + originalValueIndex: 104, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + intNumberToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(64)", + size: 64), + converter: new ValueConverter( + string (int v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + int (string v) => int.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (int v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + int (string v) => int.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)))); + intNumberToStringConverterProperty.SetSentinelFromProviderValue("0"); + + var nullIntToNullStringConverterProperty = runtimeEntityType.AddProperty( + "NullIntToNullStringConverterProperty", + typeof(int?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullIntToNullStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true, + valueConverter: new CompiledModelTestBase.NullIntToNullStringConverter()); + nullIntToNullStringConverterProperty.SetGetter( + int? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(instance).HasValue)); + nullIntToNullStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? value) => + { + ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(instance) = value; + return instance; + }); + nullIntToNullStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? value) => + { + ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(instance) = value; + return instance; + }); + nullIntToNullStringConverterProperty.SetAccessors( + int? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? (IInternalEntry entry) => entry.ReadOriginalValue(nullIntToNullStringConverterProperty, 105), + int? (IInternalEntry entry) => entry.GetCurrentValue(nullIntToNullStringConverterProperty)); + nullIntToNullStringConverterProperty.SetPropertyIndexes( + index: 105, + originalValueIndex: 105, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullIntToNullStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int? v1, int? v2) => v1 == v2, + int (int? v) => ((int)v), + int? (int? v) => v), + keyComparer: new ValueComparer( + bool (int? v1, int? v2) => v1 == v2, + int (int? v) => ((int)v), + int? (int? v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (int? v) => (v == null ? null : ((object)v).ToString()), + int? (string v) => (v == null || v == "" ? null : ((int? )(int.Parse(v)))), + convertsNulls: true), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (int? v) => (v == null ? null : ((object)v).ToString()), + int? (string v) => (v == null || v == "" ? null : ((int? )(int.Parse(v)))), + convertsNulls: true))); + + var nullableBool = runtimeEntityType.AddProperty( + "NullableBool", + typeof(bool?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBool", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableBool.SetGetter( + bool? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBool(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableBool(instance).HasValue)); + nullableBool.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool? value) => + { + ManyTypesUnsafeAccessors.NullableBool(instance) = value; + return instance; + }); + nullableBool.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool? value) => + { + ManyTypesUnsafeAccessors.NullableBool(instance) = value; + return instance; + }); + nullableBool.SetAccessors( + bool? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBool(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBool(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool? (IInternalEntry entry) => entry.ReadOriginalValue(nullableBool, 106), + bool? (IInternalEntry entry) => entry.GetCurrentValue(nullableBool)); + nullableBool.SetPropertyIndexes( + index: 106, + originalValueIndex: 106, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableBool.TypeMapping = JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)); + nullableBool.SetComparer(new NullableValueComparer(nullableBool.TypeMapping.Comparer)); + nullableBool.SetKeyComparer(new NullableValueComparer(nullableBool.TypeMapping.KeyComparer)); + + var nullableBoolArray = runtimeEntityType.AddProperty( + "NullableBoolArray", + typeof(bool?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBoolArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableBoolArray.SetGetter( + bool? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBoolArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBoolArray(instance) == null); + nullableBoolArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool? [] value) => + { + ManyTypesUnsafeAccessors.NullableBoolArray(instance) = value; + return instance; + }); + nullableBoolArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool? [] value) => + { + ManyTypesUnsafeAccessors.NullableBoolArray(instance) = value; + return instance; + }); + nullableBoolArray.SetAccessors( + bool? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBoolArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBoolArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableBoolArray, 107), + bool? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableBoolArray)); + nullableBoolArray.SetPropertyIndexes( + index: 107, + originalValueIndex: 107, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableBoolArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonBoolReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonBoolReaderWriter.Instance), + elementMapping: JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))); + var nullableBoolArrayElementType = nullableBoolArray.SetElementType(typeof(bool?), + nullable: true); + nullableBoolArrayElementType.TypeMapping = nullableBoolArray.TypeMapping.ElementTypeMapping; + nullableBoolArrayElementType.SetComparer(new NullableValueComparer(nullableBoolArrayElementType.TypeMapping.Comparer)); + + var nullableBytes = runtimeEntityType.AddProperty( + "NullableBytes", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBytes", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableBytes.SetGetter( + byte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBytes(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBytes(instance) == null); + nullableBytes.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.NullableBytes(instance) = value; + return instance; + }); + nullableBytes.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.NullableBytes(instance) = value; + return instance; + }); + nullableBytes.SetAccessors( + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBytes(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBytes(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(nullableBytes, 108), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(nullableBytes)); + nullableBytes.SetPropertyIndexes( + index: 108, + originalValueIndex: 108, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableBytes.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + var nullableBytesArray = runtimeEntityType.AddProperty( + "NullableBytesArray", + typeof(byte[][]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBytesArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableBytesArray.SetGetter( + byte[][] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBytesArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBytesArray(instance) == null); + nullableBytesArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[][] value) => + { + ManyTypesUnsafeAccessors.NullableBytesArray(instance) = value; + return instance; + }); + nullableBytesArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[][] value) => + { + ManyTypesUnsafeAccessors.NullableBytesArray(instance) = value; + return instance; + }); + nullableBytesArray.SetAccessors( + byte[][] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBytesArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[][] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBytesArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[][] (IInternalEntry entry) => entry.ReadOriginalValue(nullableBytesArray, 109), + byte[][] (IInternalEntry entry) => entry.GetCurrentValue(nullableBytesArray)); + nullableBytesArray.SetPropertyIndexes( + index: 109, + originalValueIndex: 109, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableBytesArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + JsonByteArrayReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + JsonByteArrayReaderWriter.Instance), + elementMapping: JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None)); + var nullableBytesArrayElementType = nullableBytesArray.SetElementType(typeof(byte[]), + nullable: true); + nullableBytesArrayElementType.TypeMapping = nullableBytesArray.TypeMapping.ElementTypeMapping; + + var nullableChar = runtimeEntityType.AddProperty( + "NullableChar", + typeof(char?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableChar", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableChar.SetGetter( + char? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableChar(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableChar(instance).HasValue)); + nullableChar.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char? value) => + { + ManyTypesUnsafeAccessors.NullableChar(instance) = value; + return instance; + }); + nullableChar.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char? value) => + { + ManyTypesUnsafeAccessors.NullableChar(instance) = value; + return instance; + }); + nullableChar.SetAccessors( + char? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableChar(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableChar(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char? (IInternalEntry entry) => entry.ReadOriginalValue(nullableChar, 110), + char? (IInternalEntry entry) => entry.GetCurrentValue(nullableChar)); + nullableChar.SetPropertyIndexes( + index: 110, + originalValueIndex: 110, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableChar.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))); + nullableChar.SetComparer(new NullableValueComparer(nullableChar.TypeMapping.Comparer)); + nullableChar.SetKeyComparer(new NullableValueComparer(nullableChar.TypeMapping.KeyComparer)); + + var nullableCharArray = runtimeEntityType.AddProperty( + "NullableCharArray", + typeof(char?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableCharArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableCharArray.SetGetter( + char? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableCharArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableCharArray(instance) == null); + nullableCharArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char? [] value) => + { + ManyTypesUnsafeAccessors.NullableCharArray(instance) = value; + return instance; + }); + nullableCharArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char? [] value) => + { + ManyTypesUnsafeAccessors.NullableCharArray(instance) = value; + return instance; + }); + nullableCharArray.SetAccessors( + char? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableCharArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableCharArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableCharArray, 111), + char? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableCharArray)); + nullableCharArray.SetPropertyIndexes( + index: 111, + originalValueIndex: 111, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableCharArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0]))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0]))))); + var nullableCharArrayElementType = nullableCharArray.SetElementType(typeof(char?), + nullable: true); + nullableCharArrayElementType.TypeMapping = nullableCharArray.TypeMapping.ElementTypeMapping; + nullableCharArrayElementType.SetComparer(new NullableValueComparer(nullableCharArrayElementType.TypeMapping.Comparer)); + + var nullableDateOnly = runtimeEntityType.AddProperty( + "NullableDateOnly", + typeof(DateOnly?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableDateOnly.SetGetter( + DateOnly? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateOnly(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableDateOnly(instance).HasValue)); + nullableDateOnly.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly? value) => + { + ManyTypesUnsafeAccessors.NullableDateOnly(instance) = value; + return instance; + }); + nullableDateOnly.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly? value) => + { + ManyTypesUnsafeAccessors.NullableDateOnly(instance) = value; + return instance; + }); + nullableDateOnly.SetAccessors( + DateOnly? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly? (IInternalEntry entry) => entry.ReadOriginalValue(nullableDateOnly, 112), + DateOnly? (IInternalEntry entry) => entry.GetCurrentValue(nullableDateOnly)); + nullableDateOnly.SetPropertyIndexes( + index: 112, + originalValueIndex: 112, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDateOnly.TypeMapping = JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v)); + nullableDateOnly.SetComparer(new NullableValueComparer(nullableDateOnly.TypeMapping.Comparer)); + nullableDateOnly.SetKeyComparer(new NullableValueComparer(nullableDateOnly.TypeMapping.KeyComparer)); + + var nullableDateOnlyArray = runtimeEntityType.AddProperty( + "NullableDateOnlyArray", + typeof(DateOnly?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableDateOnlyArray.SetGetter( + DateOnly? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateOnlyArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateOnlyArray(instance) == null); + nullableDateOnlyArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly? [] value) => + { + ManyTypesUnsafeAccessors.NullableDateOnlyArray(instance) = value; + return instance; + }); + nullableDateOnlyArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly? [] value) => + { + ManyTypesUnsafeAccessors.NullableDateOnlyArray(instance) = value; + return instance; + }); + nullableDateOnlyArray.SetAccessors( + DateOnly? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableDateOnlyArray, 113), + DateOnly? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableDateOnlyArray)); + nullableDateOnlyArray.SetPropertyIndexes( + index: 113, + originalValueIndex: 113, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDateOnlyArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonDateOnlyReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonDateOnlyReaderWriter.Instance), + elementMapping: JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v))); + var nullableDateOnlyArrayElementType = nullableDateOnlyArray.SetElementType(typeof(DateOnly?), + nullable: true); + nullableDateOnlyArrayElementType.TypeMapping = nullableDateOnlyArray.TypeMapping.ElementTypeMapping; + nullableDateOnlyArrayElementType.SetComparer(new NullableValueComparer(nullableDateOnlyArrayElementType.TypeMapping.Comparer)); + + var nullableDateTime = runtimeEntityType.AddProperty( + "NullableDateTime", + typeof(DateTime?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableDateTime.SetGetter( + DateTime? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateTime(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableDateTime(instance).HasValue)); + nullableDateTime.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime? value) => + { + ManyTypesUnsafeAccessors.NullableDateTime(instance) = value; + return instance; + }); + nullableDateTime.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime? value) => + { + ManyTypesUnsafeAccessors.NullableDateTime(instance) = value; + return instance; + }); + nullableDateTime.SetAccessors( + DateTime? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateTime(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateTime(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime? (IInternalEntry entry) => entry.ReadOriginalValue(nullableDateTime, 114), + DateTime? (IInternalEntry entry) => entry.GetCurrentValue(nullableDateTime)); + nullableDateTime.SetPropertyIndexes( + index: 114, + originalValueIndex: 114, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDateTime.TypeMapping = JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)); + nullableDateTime.SetComparer(new NullableValueComparer(nullableDateTime.TypeMapping.Comparer)); + nullableDateTime.SetKeyComparer(new NullableValueComparer(nullableDateTime.TypeMapping.KeyComparer)); + + var nullableDateTimeArray = runtimeEntityType.AddProperty( + "NullableDateTimeArray", + typeof(DateTime?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateTimeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableDateTimeArray.SetGetter( + DateTime? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateTimeArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateTimeArray(instance) == null); + nullableDateTimeArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime? [] value) => + { + ManyTypesUnsafeAccessors.NullableDateTimeArray(instance) = value; + return instance; + }); + nullableDateTimeArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime? [] value) => + { + ManyTypesUnsafeAccessors.NullableDateTimeArray(instance) = value; + return instance; + }); + nullableDateTimeArray.SetAccessors( + DateTime? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateTimeArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateTimeArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableDateTimeArray, 115), + DateTime? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableDateTimeArray)); + nullableDateTimeArray.SetPropertyIndexes( + index: 115, + originalValueIndex: 115, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDateTimeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var nullableDateTimeArrayElementType = nullableDateTimeArray.SetElementType(typeof(DateTime?), + nullable: true); + nullableDateTimeArrayElementType.TypeMapping = nullableDateTimeArray.TypeMapping.ElementTypeMapping; + nullableDateTimeArrayElementType.SetComparer(new NullableValueComparer(nullableDateTimeArrayElementType.TypeMapping.Comparer)); + + var nullableDecimal = runtimeEntityType.AddProperty( + "NullableDecimal", + typeof(decimal?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDecimal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableDecimal.SetGetter( + decimal? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDecimal(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableDecimal(instance).HasValue)); + nullableDecimal.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal? value) => + { + ManyTypesUnsafeAccessors.NullableDecimal(instance) = value; + return instance; + }); + nullableDecimal.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal? value) => + { + ManyTypesUnsafeAccessors.NullableDecimal(instance) = value; + return instance; + }); + nullableDecimal.SetAccessors( + decimal? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDecimal(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDecimal(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal? (IInternalEntry entry) => entry.ReadOriginalValue(nullableDecimal, 116), + decimal? (IInternalEntry entry) => entry.GetCurrentValue(nullableDecimal)); + nullableDecimal.SetPropertyIndexes( + index: 116, + originalValueIndex: 116, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDecimal.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v)); + nullableDecimal.SetComparer(new NullableValueComparer(nullableDecimal.TypeMapping.Comparer)); + nullableDecimal.SetKeyComparer(new NullableValueComparer(nullableDecimal.TypeMapping.KeyComparer)); + + var nullableDecimalArray = runtimeEntityType.AddProperty( + "NullableDecimalArray", + typeof(decimal?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDecimalArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableDecimalArray.SetGetter( + decimal? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDecimalArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDecimalArray(instance) == null); + nullableDecimalArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal? [] value) => + { + ManyTypesUnsafeAccessors.NullableDecimalArray(instance) = value; + return instance; + }); + nullableDecimalArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal? [] value) => + { + ManyTypesUnsafeAccessors.NullableDecimalArray(instance) = value; + return instance; + }); + nullableDecimalArray.SetAccessors( + decimal? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDecimalArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDecimalArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableDecimalArray, 117), + decimal? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableDecimalArray)); + nullableDecimalArray.SetPropertyIndexes( + index: 117, + originalValueIndex: 117, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDecimalArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonDecimalReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonDecimalReaderWriter.Instance), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v))); + var nullableDecimalArrayElementType = nullableDecimalArray.SetElementType(typeof(decimal?), + nullable: true); + nullableDecimalArrayElementType.TypeMapping = nullableDecimalArray.TypeMapping.ElementTypeMapping; + nullableDecimalArrayElementType.SetComparer(new NullableValueComparer(nullableDecimalArrayElementType.TypeMapping.Comparer)); + + var nullableDouble = runtimeEntityType.AddProperty( + "NullableDouble", + typeof(double?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDouble", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableDouble.SetGetter( + double? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDouble(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableDouble(instance).HasValue)); + nullableDouble.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double? value) => + { + ManyTypesUnsafeAccessors.NullableDouble(instance) = value; + return instance; + }); + nullableDouble.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double? value) => + { + ManyTypesUnsafeAccessors.NullableDouble(instance) = value; + return instance; + }); + nullableDouble.SetAccessors( + double? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDouble(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDouble(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double? (IInternalEntry entry) => entry.ReadOriginalValue(nullableDouble, 118), + double? (IInternalEntry entry) => entry.GetCurrentValue(nullableDouble)); + nullableDouble.SetPropertyIndexes( + index: 118, + originalValueIndex: 118, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDouble.TypeMapping = JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v)); + nullableDouble.SetComparer(new NullableValueComparer(nullableDouble.TypeMapping.Comparer)); + nullableDouble.SetKeyComparer(new NullableValueComparer(nullableDouble.TypeMapping.KeyComparer)); + + var nullableDoubleArray = runtimeEntityType.AddProperty( + "NullableDoubleArray", + typeof(double?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDoubleArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableDoubleArray.SetGetter( + double? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDoubleArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDoubleArray(instance) == null); + nullableDoubleArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double? [] value) => + { + ManyTypesUnsafeAccessors.NullableDoubleArray(instance) = value; + return instance; + }); + nullableDoubleArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double? [] value) => + { + ManyTypesUnsafeAccessors.NullableDoubleArray(instance) = value; + return instance; + }); + nullableDoubleArray.SetAccessors( + double? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDoubleArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDoubleArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableDoubleArray, 119), + double? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableDoubleArray)); + nullableDoubleArray.SetPropertyIndexes( + index: 119, + originalValueIndex: 119, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDoubleArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonDoubleReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonDoubleReaderWriter.Instance), + elementMapping: JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v))); + var nullableDoubleArrayElementType = nullableDoubleArray.SetElementType(typeof(double?), + nullable: true); + nullableDoubleArrayElementType.TypeMapping = nullableDoubleArray.TypeMapping.ElementTypeMapping; + nullableDoubleArrayElementType.SetComparer(new NullableValueComparer(nullableDoubleArrayElementType.TypeMapping.Comparer)); + + var nullableEnum16 = runtimeEntityType.AddProperty( + "NullableEnum16", + typeof(CompiledModelTestBase.Enum16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum16.SetGetter( + CompiledModelTestBase.Enum16? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum16(instance).HasValue)); + nullableEnum16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? value) => + { + ManyTypesUnsafeAccessors.NullableEnum16(instance) = (value == null ? value : ((CompiledModelTestBase.Enum16? )(((CompiledModelTestBase.Enum16)value)))); + return instance; + }); + nullableEnum16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? value) => + { + ManyTypesUnsafeAccessors.NullableEnum16(instance) = (value == null ? value : ((CompiledModelTestBase.Enum16? )(((CompiledModelTestBase.Enum16)value)))); + return instance; + }); + nullableEnum16.SetAccessors( + CompiledModelTestBase.Enum16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum16, 120), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum16)); + nullableEnum16.SetPropertyIndexes( + index: 120, + originalValueIndex: 120, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))); + nullableEnum16.SetComparer(new NullableValueComparer(nullableEnum16.TypeMapping.Comparer)); + nullableEnum16.SetKeyComparer(new NullableValueComparer(nullableEnum16.TypeMapping.KeyComparer)); + + var nullableEnum16Array = runtimeEntityType.AddProperty( + "NullableEnum16Array", + typeof(CompiledModelTestBase.Enum16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum16Array.SetGetter( + CompiledModelTestBase.Enum16? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16Array(instance) == null); + nullableEnum16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum16Array(instance) = value; + return instance; + }); + nullableEnum16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum16Array(instance) = value; + return instance; + }); + nullableEnum16Array.SetAccessors( + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum16Array, 121), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum16Array)); + nullableEnum16Array.SetPropertyIndexes( + index: 121, + originalValueIndex: 121, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var nullableEnum16ArrayElementType = nullableEnum16Array.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + nullableEnum16ArrayElementType.TypeMapping = nullableEnum16Array.TypeMapping.ElementTypeMapping; + nullableEnum16ArrayElementType.SetComparer(new NullableValueComparer(nullableEnum16ArrayElementType.TypeMapping.Comparer)); + + var nullableEnum16AsString = runtimeEntityType.AddProperty( + "NullableEnum16AsString", + typeof(CompiledModelTestBase.Enum16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum16AsString.SetGetter( + CompiledModelTestBase.Enum16? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum16AsString(instance).HasValue)); + nullableEnum16AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum16? )(((CompiledModelTestBase.Enum16)value)))); + return instance; + }); + nullableEnum16AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum16? )(((CompiledModelTestBase.Enum16)value)))); + return instance; + }); + nullableEnum16AsString.SetAccessors( + CompiledModelTestBase.Enum16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum16AsString, 122), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum16AsString)); + nullableEnum16AsString.SetPropertyIndexes( + index: 122, + originalValueIndex: 122, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16AsString.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))); + nullableEnum16AsString.SetComparer(new NullableValueComparer(nullableEnum16AsString.TypeMapping.Comparer)); + nullableEnum16AsString.SetKeyComparer(new NullableValueComparer(nullableEnum16AsString.TypeMapping.KeyComparer)); + + var nullableEnum16AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum16AsStringArray", + typeof(CompiledModelTestBase.Enum16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum16AsStringArray.SetGetter( + CompiledModelTestBase.Enum16? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(instance) == null); + nullableEnum16AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(instance) = value; + return instance; + }); + nullableEnum16AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(instance) = value; + return instance; + }); + nullableEnum16AsStringArray.SetAccessors( + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum16AsStringArray, 123), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum16AsStringArray)); + nullableEnum16AsStringArray.SetPropertyIndexes( + index: 123, + originalValueIndex: 123, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var nullableEnum16AsStringArrayElementType = nullableEnum16AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + nullableEnum16AsStringArrayElementType.TypeMapping = nullableEnum16AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnum16AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnum16AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnum16AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum16AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(instance) == null); + nullableEnum16AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(instance) = value; + return instance; + }); + nullableEnum16AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(instance) = value; + return instance; + }); + nullableEnum16AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum16AsStringCollection, 124), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum16AsStringCollection)); + nullableEnum16AsStringCollection.SetPropertyIndexes( + index: 124, + originalValueIndex: 124, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var nullableEnum16AsStringCollectionElementType = nullableEnum16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + nullableEnum16AsStringCollectionElementType.TypeMapping = nullableEnum16AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnum16AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnum16AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnum16Collection = runtimeEntityType.AddProperty( + "NullableEnum16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum16Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16Collection(instance) == null); + nullableEnum16Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum16Collection(instance) = value; + return instance; + }); + nullableEnum16Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum16Collection(instance) = value; + return instance; + }); + nullableEnum16Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum16Collection, 125), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum16Collection)); + nullableEnum16Collection.SetPropertyIndexes( + index: 125, + originalValueIndex: 125, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var nullableEnum16CollectionElementType = nullableEnum16Collection.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + nullableEnum16CollectionElementType.TypeMapping = nullableEnum16Collection.TypeMapping.ElementTypeMapping; + nullableEnum16CollectionElementType.SetComparer(new NullableValueComparer(nullableEnum16CollectionElementType.TypeMapping.Comparer)); + + var nullableEnum32 = runtimeEntityType.AddProperty( + "NullableEnum32", + typeof(CompiledModelTestBase.Enum32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum32.SetGetter( + CompiledModelTestBase.Enum32? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum32(instance).HasValue)); + nullableEnum32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? value) => + { + ManyTypesUnsafeAccessors.NullableEnum32(instance) = (value == null ? value : ((CompiledModelTestBase.Enum32? )(((CompiledModelTestBase.Enum32)value)))); + return instance; + }); + nullableEnum32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? value) => + { + ManyTypesUnsafeAccessors.NullableEnum32(instance) = (value == null ? value : ((CompiledModelTestBase.Enum32? )(((CompiledModelTestBase.Enum32)value)))); + return instance; + }); + nullableEnum32.SetAccessors( + CompiledModelTestBase.Enum32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum32, 126), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum32)); + nullableEnum32.SetPropertyIndexes( + index: 126, + originalValueIndex: 126, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))); + nullableEnum32.SetComparer(new NullableValueComparer(nullableEnum32.TypeMapping.Comparer)); + nullableEnum32.SetKeyComparer(new NullableValueComparer(nullableEnum32.TypeMapping.KeyComparer)); + + var nullableEnum32Array = runtimeEntityType.AddProperty( + "NullableEnum32Array", + typeof(CompiledModelTestBase.Enum32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum32Array.SetGetter( + CompiledModelTestBase.Enum32? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32Array(instance) == null); + nullableEnum32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum32Array(instance) = value; + return instance; + }); + nullableEnum32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum32Array(instance) = value; + return instance; + }); + nullableEnum32Array.SetAccessors( + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum32Array, 127), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum32Array)); + nullableEnum32Array.SetPropertyIndexes( + index: 127, + originalValueIndex: 127, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var nullableEnum32ArrayElementType = nullableEnum32Array.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + nullableEnum32ArrayElementType.TypeMapping = nullableEnum32Array.TypeMapping.ElementTypeMapping; + nullableEnum32ArrayElementType.SetComparer(new NullableValueComparer(nullableEnum32ArrayElementType.TypeMapping.Comparer)); + + var nullableEnum32AsString = runtimeEntityType.AddProperty( + "NullableEnum32AsString", + typeof(CompiledModelTestBase.Enum32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum32AsString.SetGetter( + CompiledModelTestBase.Enum32? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum32AsString(instance).HasValue)); + nullableEnum32AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum32? )(((CompiledModelTestBase.Enum32)value)))); + return instance; + }); + nullableEnum32AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum32? )(((CompiledModelTestBase.Enum32)value)))); + return instance; + }); + nullableEnum32AsString.SetAccessors( + CompiledModelTestBase.Enum32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum32AsString, 128), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum32AsString)); + nullableEnum32AsString.SetPropertyIndexes( + index: 128, + originalValueIndex: 128, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32AsString.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))); + nullableEnum32AsString.SetComparer(new NullableValueComparer(nullableEnum32AsString.TypeMapping.Comparer)); + nullableEnum32AsString.SetKeyComparer(new NullableValueComparer(nullableEnum32AsString.TypeMapping.KeyComparer)); + + var nullableEnum32AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum32AsStringArray", + typeof(CompiledModelTestBase.Enum32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum32AsStringArray.SetGetter( + CompiledModelTestBase.Enum32? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(instance) == null); + nullableEnum32AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(instance) = value; + return instance; + }); + nullableEnum32AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(instance) = value; + return instance; + }); + nullableEnum32AsStringArray.SetAccessors( + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum32AsStringArray, 129), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum32AsStringArray)); + nullableEnum32AsStringArray.SetPropertyIndexes( + index: 129, + originalValueIndex: 129, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var nullableEnum32AsStringArrayElementType = nullableEnum32AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + nullableEnum32AsStringArrayElementType.TypeMapping = nullableEnum32AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnum32AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnum32AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnum32AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum32AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(instance) == null); + nullableEnum32AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(instance) = value; + return instance; + }); + nullableEnum32AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(instance) = value; + return instance; + }); + nullableEnum32AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum32AsStringCollection, 130), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum32AsStringCollection)); + nullableEnum32AsStringCollection.SetPropertyIndexes( + index: 130, + originalValueIndex: 130, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var nullableEnum32AsStringCollectionElementType = nullableEnum32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + nullableEnum32AsStringCollectionElementType.TypeMapping = nullableEnum32AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnum32AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnum32AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnum32Collection = runtimeEntityType.AddProperty( + "NullableEnum32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum32Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32Collection(instance) == null); + nullableEnum32Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum32Collection(instance) = value; + return instance; + }); + nullableEnum32Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum32Collection(instance) = value; + return instance; + }); + nullableEnum32Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum32Collection, 131), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum32Collection)); + nullableEnum32Collection.SetPropertyIndexes( + index: 131, + originalValueIndex: 131, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var nullableEnum32CollectionElementType = nullableEnum32Collection.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + nullableEnum32CollectionElementType.TypeMapping = nullableEnum32Collection.TypeMapping.ElementTypeMapping; + nullableEnum32CollectionElementType.SetComparer(new NullableValueComparer(nullableEnum32CollectionElementType.TypeMapping.Comparer)); + + var nullableEnum64 = runtimeEntityType.AddProperty( + "NullableEnum64", + typeof(CompiledModelTestBase.Enum64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum64.SetGetter( + CompiledModelTestBase.Enum64? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum64(instance).HasValue)); + nullableEnum64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? value) => + { + ManyTypesUnsafeAccessors.NullableEnum64(instance) = (value == null ? value : ((CompiledModelTestBase.Enum64? )(((CompiledModelTestBase.Enum64)value)))); + return instance; + }); + nullableEnum64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? value) => + { + ManyTypesUnsafeAccessors.NullableEnum64(instance) = (value == null ? value : ((CompiledModelTestBase.Enum64? )(((CompiledModelTestBase.Enum64)value)))); + return instance; + }); + nullableEnum64.SetAccessors( + CompiledModelTestBase.Enum64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum64, 132), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum64)); + nullableEnum64.SetPropertyIndexes( + index: 132, + originalValueIndex: 132, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))); + nullableEnum64.SetComparer(new NullableValueComparer(nullableEnum64.TypeMapping.Comparer)); + nullableEnum64.SetKeyComparer(new NullableValueComparer(nullableEnum64.TypeMapping.KeyComparer)); + + var nullableEnum64Array = runtimeEntityType.AddProperty( + "NullableEnum64Array", + typeof(CompiledModelTestBase.Enum64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum64Array.SetGetter( + CompiledModelTestBase.Enum64? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64Array(instance) == null); + nullableEnum64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum64Array(instance) = value; + return instance; + }); + nullableEnum64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum64Array(instance) = value; + return instance; + }); + nullableEnum64Array.SetAccessors( + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum64Array, 133), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum64Array)); + nullableEnum64Array.SetPropertyIndexes( + index: 133, + originalValueIndex: 133, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var nullableEnum64ArrayElementType = nullableEnum64Array.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + nullableEnum64ArrayElementType.TypeMapping = nullableEnum64Array.TypeMapping.ElementTypeMapping; + nullableEnum64ArrayElementType.SetComparer(new NullableValueComparer(nullableEnum64ArrayElementType.TypeMapping.Comparer)); + + var nullableEnum64AsString = runtimeEntityType.AddProperty( + "NullableEnum64AsString", + typeof(CompiledModelTestBase.Enum64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum64AsString.SetGetter( + CompiledModelTestBase.Enum64? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum64AsString(instance).HasValue)); + nullableEnum64AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum64? )(((CompiledModelTestBase.Enum64)value)))); + return instance; + }); + nullableEnum64AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum64? )(((CompiledModelTestBase.Enum64)value)))); + return instance; + }); + nullableEnum64AsString.SetAccessors( + CompiledModelTestBase.Enum64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum64AsString, 134), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum64AsString)); + nullableEnum64AsString.SetPropertyIndexes( + index: 134, + originalValueIndex: 134, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64AsString.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))); + nullableEnum64AsString.SetComparer(new NullableValueComparer(nullableEnum64AsString.TypeMapping.Comparer)); + nullableEnum64AsString.SetKeyComparer(new NullableValueComparer(nullableEnum64AsString.TypeMapping.KeyComparer)); + + var nullableEnum64AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum64AsStringArray", + typeof(CompiledModelTestBase.Enum64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum64AsStringArray.SetGetter( + CompiledModelTestBase.Enum64? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(instance) == null); + nullableEnum64AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(instance) = value; + return instance; + }); + nullableEnum64AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(instance) = value; + return instance; + }); + nullableEnum64AsStringArray.SetAccessors( + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum64AsStringArray, 135), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum64AsStringArray)); + nullableEnum64AsStringArray.SetPropertyIndexes( + index: 135, + originalValueIndex: 135, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var nullableEnum64AsStringArrayElementType = nullableEnum64AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + nullableEnum64AsStringArrayElementType.TypeMapping = nullableEnum64AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnum64AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnum64AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnum64AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum64AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(instance) == null); + nullableEnum64AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(instance) = value; + return instance; + }); + nullableEnum64AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(instance) = value; + return instance; + }); + nullableEnum64AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum64AsStringCollection, 136), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum64AsStringCollection)); + nullableEnum64AsStringCollection.SetPropertyIndexes( + index: 136, + originalValueIndex: 136, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var nullableEnum64AsStringCollectionElementType = nullableEnum64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + nullableEnum64AsStringCollectionElementType.TypeMapping = nullableEnum64AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnum64AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnum64AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnum64Collection = runtimeEntityType.AddProperty( + "NullableEnum64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum64Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64Collection(instance) == null); + nullableEnum64Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum64Collection(instance) = value; + return instance; + }); + nullableEnum64Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum64Collection(instance) = value; + return instance; + }); + nullableEnum64Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum64Collection, 137), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum64Collection)); + nullableEnum64Collection.SetPropertyIndexes( + index: 137, + originalValueIndex: 137, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var nullableEnum64CollectionElementType = nullableEnum64Collection.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + nullableEnum64CollectionElementType.TypeMapping = nullableEnum64Collection.TypeMapping.ElementTypeMapping; + nullableEnum64CollectionElementType.SetComparer(new NullableValueComparer(nullableEnum64CollectionElementType.TypeMapping.Comparer)); + + var nullableEnum8 = runtimeEntityType.AddProperty( + "NullableEnum8", + typeof(CompiledModelTestBase.Enum8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum8.SetGetter( + CompiledModelTestBase.Enum8? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum8(instance).HasValue)); + nullableEnum8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? value) => + { + ManyTypesUnsafeAccessors.NullableEnum8(instance) = (value == null ? value : ((CompiledModelTestBase.Enum8? )(((CompiledModelTestBase.Enum8)value)))); + return instance; + }); + nullableEnum8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? value) => + { + ManyTypesUnsafeAccessors.NullableEnum8(instance) = (value == null ? value : ((CompiledModelTestBase.Enum8? )(((CompiledModelTestBase.Enum8)value)))); + return instance; + }); + nullableEnum8.SetAccessors( + CompiledModelTestBase.Enum8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum8, 138), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum8)); + nullableEnum8.SetPropertyIndexes( + index: 138, + originalValueIndex: 138, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))); + nullableEnum8.SetComparer(new NullableValueComparer(nullableEnum8.TypeMapping.Comparer)); + nullableEnum8.SetKeyComparer(new NullableValueComparer(nullableEnum8.TypeMapping.KeyComparer)); + + var nullableEnum8Array = runtimeEntityType.AddProperty( + "NullableEnum8Array", + typeof(CompiledModelTestBase.Enum8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum8Array.SetGetter( + CompiledModelTestBase.Enum8? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8Array(instance) == null); + nullableEnum8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum8Array(instance) = value; + return instance; + }); + nullableEnum8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum8Array(instance) = value; + return instance; + }); + nullableEnum8Array.SetAccessors( + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum8Array, 139), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum8Array)); + nullableEnum8Array.SetPropertyIndexes( + index: 139, + originalValueIndex: 139, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var nullableEnum8ArrayElementType = nullableEnum8Array.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + nullableEnum8ArrayElementType.TypeMapping = nullableEnum8Array.TypeMapping.ElementTypeMapping; + nullableEnum8ArrayElementType.SetComparer(new NullableValueComparer(nullableEnum8ArrayElementType.TypeMapping.Comparer)); + + var nullableEnum8AsString = runtimeEntityType.AddProperty( + "NullableEnum8AsString", + typeof(CompiledModelTestBase.Enum8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum8AsString.SetGetter( + CompiledModelTestBase.Enum8? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum8AsString(instance).HasValue)); + nullableEnum8AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum8? )(((CompiledModelTestBase.Enum8)value)))); + return instance; + }); + nullableEnum8AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum8? )(((CompiledModelTestBase.Enum8)value)))); + return instance; + }); + nullableEnum8AsString.SetAccessors( + CompiledModelTestBase.Enum8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum8AsString, 140), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum8AsString)); + nullableEnum8AsString.SetPropertyIndexes( + index: 140, + originalValueIndex: 140, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8AsString.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))); + nullableEnum8AsString.SetComparer(new NullableValueComparer(nullableEnum8AsString.TypeMapping.Comparer)); + nullableEnum8AsString.SetKeyComparer(new NullableValueComparer(nullableEnum8AsString.TypeMapping.KeyComparer)); + + var nullableEnum8AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum8AsStringArray", + typeof(CompiledModelTestBase.Enum8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum8AsStringArray.SetGetter( + CompiledModelTestBase.Enum8? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(instance) == null); + nullableEnum8AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(instance) = value; + return instance; + }); + nullableEnum8AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(instance) = value; + return instance; + }); + nullableEnum8AsStringArray.SetAccessors( + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum8AsStringArray, 141), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum8AsStringArray)); + nullableEnum8AsStringArray.SetPropertyIndexes( + index: 141, + originalValueIndex: 141, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var nullableEnum8AsStringArrayElementType = nullableEnum8AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + nullableEnum8AsStringArrayElementType.TypeMapping = nullableEnum8AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnum8AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnum8AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnum8AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum8AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(instance) == null); + nullableEnum8AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(instance) = value; + return instance; + }); + nullableEnum8AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(instance) = value; + return instance; + }); + nullableEnum8AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum8AsStringCollection, 142), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum8AsStringCollection)); + nullableEnum8AsStringCollection.SetPropertyIndexes( + index: 142, + originalValueIndex: 142, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var nullableEnum8AsStringCollectionElementType = nullableEnum8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + nullableEnum8AsStringCollectionElementType.TypeMapping = nullableEnum8AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnum8AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnum8AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnum8Collection = runtimeEntityType.AddProperty( + "NullableEnum8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum8Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8Collection(instance) == null); + nullableEnum8Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum8Collection(instance) = value; + return instance; + }); + nullableEnum8Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum8Collection(instance) = value; + return instance; + }); + nullableEnum8Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum8Collection, 143), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum8Collection)); + nullableEnum8Collection.SetPropertyIndexes( + index: 143, + originalValueIndex: 143, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var nullableEnum8CollectionElementType = nullableEnum8Collection.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + nullableEnum8CollectionElementType.TypeMapping = nullableEnum8Collection.TypeMapping.ElementTypeMapping; + nullableEnum8CollectionElementType.SetComparer(new NullableValueComparer(nullableEnum8CollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU16 = runtimeEntityType.AddProperty( + "NullableEnumU16", + typeof(CompiledModelTestBase.EnumU16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU16.SetGetter( + CompiledModelTestBase.EnumU16? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU16(instance).HasValue)); + nullableEnumU16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU16? )(((CompiledModelTestBase.EnumU16)value)))); + return instance; + }); + nullableEnumU16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU16? )(((CompiledModelTestBase.EnumU16)value)))); + return instance; + }); + nullableEnumU16.SetAccessors( + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU16, 144), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU16)); + nullableEnumU16.SetPropertyIndexes( + index: 144, + originalValueIndex: 144, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))); + nullableEnumU16.SetComparer(new NullableValueComparer(nullableEnumU16.TypeMapping.Comparer)); + nullableEnumU16.SetKeyComparer(new NullableValueComparer(nullableEnumU16.TypeMapping.KeyComparer)); + + var nullableEnumU16Array = runtimeEntityType.AddProperty( + "NullableEnumU16Array", + typeof(CompiledModelTestBase.EnumU16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU16Array.SetGetter( + CompiledModelTestBase.EnumU16? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16Array(instance) == null); + nullableEnumU16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16Array(instance) = value; + return instance; + }); + nullableEnumU16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16Array(instance) = value; + return instance; + }); + nullableEnumU16Array.SetAccessors( + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU16Array, 145), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU16Array)); + nullableEnumU16Array.SetPropertyIndexes( + index: 145, + originalValueIndex: 145, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var nullableEnumU16ArrayElementType = nullableEnumU16Array.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + nullableEnumU16ArrayElementType.TypeMapping = nullableEnumU16Array.TypeMapping.ElementTypeMapping; + nullableEnumU16ArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU16ArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU16AsString = runtimeEntityType.AddProperty( + "NullableEnumU16AsString", + typeof(CompiledModelTestBase.EnumU16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU16AsString.SetGetter( + CompiledModelTestBase.EnumU16? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU16AsString(instance).HasValue)); + nullableEnumU16AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU16? )(((CompiledModelTestBase.EnumU16)value)))); + return instance; + }); + nullableEnumU16AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU16? )(((CompiledModelTestBase.EnumU16)value)))); + return instance; + }); + nullableEnumU16AsString.SetAccessors( + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU16AsString, 146), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU16AsString)); + nullableEnumU16AsString.SetPropertyIndexes( + index: 146, + originalValueIndex: 146, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16AsString.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))); + nullableEnumU16AsString.SetComparer(new NullableValueComparer(nullableEnumU16AsString.TypeMapping.Comparer)); + nullableEnumU16AsString.SetKeyComparer(new NullableValueComparer(nullableEnumU16AsString.TypeMapping.KeyComparer)); + + var nullableEnumU16AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU16AsStringArray", + typeof(CompiledModelTestBase.EnumU16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU16AsStringArray.SetGetter( + CompiledModelTestBase.EnumU16? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(instance) == null); + nullableEnumU16AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(instance) = value; + return instance; + }); + nullableEnumU16AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(instance) = value; + return instance; + }); + nullableEnumU16AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU16AsStringArray, 147), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU16AsStringArray)); + nullableEnumU16AsStringArray.SetPropertyIndexes( + index: 147, + originalValueIndex: 147, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var nullableEnumU16AsStringArrayElementType = nullableEnumU16AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + nullableEnumU16AsStringArrayElementType.TypeMapping = nullableEnumU16AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnumU16AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU16AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU16AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU16AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(instance) == null); + nullableEnumU16AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU16AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU16AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU16AsStringCollection, 148), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU16AsStringCollection)); + nullableEnumU16AsStringCollection.SetPropertyIndexes( + index: 148, + originalValueIndex: 148, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var nullableEnumU16AsStringCollectionElementType = nullableEnumU16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + nullableEnumU16AsStringCollectionElementType.TypeMapping = nullableEnumU16AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnumU16AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU16AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU16Collection = runtimeEntityType.AddProperty( + "NullableEnumU16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU16Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16Collection(instance) == null); + nullableEnumU16Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16Collection(instance) = value; + return instance; + }); + nullableEnumU16Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16Collection(instance) = value; + return instance; + }); + nullableEnumU16Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU16Collection, 149), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU16Collection)); + nullableEnumU16Collection.SetPropertyIndexes( + index: 149, + originalValueIndex: 149, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var nullableEnumU16CollectionElementType = nullableEnumU16Collection.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + nullableEnumU16CollectionElementType.TypeMapping = nullableEnumU16Collection.TypeMapping.ElementTypeMapping; + nullableEnumU16CollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU16CollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU32 = runtimeEntityType.AddProperty( + "NullableEnumU32", + typeof(CompiledModelTestBase.EnumU32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU32.SetGetter( + CompiledModelTestBase.EnumU32? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU32(instance).HasValue)); + nullableEnumU32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU32? )(((CompiledModelTestBase.EnumU32)value)))); + return instance; + }); + nullableEnumU32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU32? )(((CompiledModelTestBase.EnumU32)value)))); + return instance; + }); + nullableEnumU32.SetAccessors( + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU32, 150), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU32)); + nullableEnumU32.SetPropertyIndexes( + index: 150, + originalValueIndex: 150, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))); + nullableEnumU32.SetComparer(new NullableValueComparer(nullableEnumU32.TypeMapping.Comparer)); + nullableEnumU32.SetKeyComparer(new NullableValueComparer(nullableEnumU32.TypeMapping.KeyComparer)); + + var nullableEnumU32Array = runtimeEntityType.AddProperty( + "NullableEnumU32Array", + typeof(CompiledModelTestBase.EnumU32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU32Array.SetGetter( + CompiledModelTestBase.EnumU32? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32Array(instance) == null); + nullableEnumU32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32Array(instance) = value; + return instance; + }); + nullableEnumU32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32Array(instance) = value; + return instance; + }); + nullableEnumU32Array.SetAccessors( + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU32Array, 151), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU32Array)); + nullableEnumU32Array.SetPropertyIndexes( + index: 151, + originalValueIndex: 151, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var nullableEnumU32ArrayElementType = nullableEnumU32Array.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + nullableEnumU32ArrayElementType.TypeMapping = nullableEnumU32Array.TypeMapping.ElementTypeMapping; + nullableEnumU32ArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU32ArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU32AsString = runtimeEntityType.AddProperty( + "NullableEnumU32AsString", + typeof(CompiledModelTestBase.EnumU32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU32AsString.SetGetter( + CompiledModelTestBase.EnumU32? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU32AsString(instance).HasValue)); + nullableEnumU32AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU32? )(((CompiledModelTestBase.EnumU32)value)))); + return instance; + }); + nullableEnumU32AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU32? )(((CompiledModelTestBase.EnumU32)value)))); + return instance; + }); + nullableEnumU32AsString.SetAccessors( + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU32AsString, 152), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU32AsString)); + nullableEnumU32AsString.SetPropertyIndexes( + index: 152, + originalValueIndex: 152, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32AsString.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))); + nullableEnumU32AsString.SetComparer(new NullableValueComparer(nullableEnumU32AsString.TypeMapping.Comparer)); + nullableEnumU32AsString.SetKeyComparer(new NullableValueComparer(nullableEnumU32AsString.TypeMapping.KeyComparer)); + + var nullableEnumU32AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU32AsStringArray", + typeof(CompiledModelTestBase.EnumU32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU32AsStringArray.SetGetter( + CompiledModelTestBase.EnumU32? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(instance) == null); + nullableEnumU32AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(instance) = value; + return instance; + }); + nullableEnumU32AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(instance) = value; + return instance; + }); + nullableEnumU32AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU32AsStringArray, 153), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU32AsStringArray)); + nullableEnumU32AsStringArray.SetPropertyIndexes( + index: 153, + originalValueIndex: 153, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var nullableEnumU32AsStringArrayElementType = nullableEnumU32AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + nullableEnumU32AsStringArrayElementType.TypeMapping = nullableEnumU32AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnumU32AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU32AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU32AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU32AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(instance) == null); + nullableEnumU32AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU32AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU32AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU32AsStringCollection, 154), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU32AsStringCollection)); + nullableEnumU32AsStringCollection.SetPropertyIndexes( + index: 154, + originalValueIndex: 154, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var nullableEnumU32AsStringCollectionElementType = nullableEnumU32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + nullableEnumU32AsStringCollectionElementType.TypeMapping = nullableEnumU32AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnumU32AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU32AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU32Collection = runtimeEntityType.AddProperty( + "NullableEnumU32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU32Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32Collection(instance) == null); + nullableEnumU32Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32Collection(instance) = value; + return instance; + }); + nullableEnumU32Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32Collection(instance) = value; + return instance; + }); + nullableEnumU32Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU32Collection, 155), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU32Collection)); + nullableEnumU32Collection.SetPropertyIndexes( + index: 155, + originalValueIndex: 155, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var nullableEnumU32CollectionElementType = nullableEnumU32Collection.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + nullableEnumU32CollectionElementType.TypeMapping = nullableEnumU32Collection.TypeMapping.ElementTypeMapping; + nullableEnumU32CollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU32CollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU64 = runtimeEntityType.AddProperty( + "NullableEnumU64", + typeof(CompiledModelTestBase.EnumU64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU64.SetGetter( + CompiledModelTestBase.EnumU64? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU64(instance).HasValue)); + nullableEnumU64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU64? )(((CompiledModelTestBase.EnumU64)value)))); + return instance; + }); + nullableEnumU64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU64? )(((CompiledModelTestBase.EnumU64)value)))); + return instance; + }); + nullableEnumU64.SetAccessors( + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU64, 156), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU64)); + nullableEnumU64.SetPropertyIndexes( + index: 156, + originalValueIndex: 156, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))); + nullableEnumU64.SetComparer(new NullableValueComparer(nullableEnumU64.TypeMapping.Comparer)); + nullableEnumU64.SetKeyComparer(new NullableValueComparer(nullableEnumU64.TypeMapping.KeyComparer)); + + var nullableEnumU64Array = runtimeEntityType.AddProperty( + "NullableEnumU64Array", + typeof(CompiledModelTestBase.EnumU64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU64Array.SetGetter( + CompiledModelTestBase.EnumU64? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64Array(instance) == null); + nullableEnumU64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64Array(instance) = value; + return instance; + }); + nullableEnumU64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64Array(instance) = value; + return instance; + }); + nullableEnumU64Array.SetAccessors( + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU64Array, 157), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU64Array)); + nullableEnumU64Array.SetPropertyIndexes( + index: 157, + originalValueIndex: 157, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var nullableEnumU64ArrayElementType = nullableEnumU64Array.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + nullableEnumU64ArrayElementType.TypeMapping = nullableEnumU64Array.TypeMapping.ElementTypeMapping; + nullableEnumU64ArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU64ArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU64AsString = runtimeEntityType.AddProperty( + "NullableEnumU64AsString", + typeof(CompiledModelTestBase.EnumU64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU64AsString.SetGetter( + CompiledModelTestBase.EnumU64? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU64AsString(instance).HasValue)); + nullableEnumU64AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU64? )(((CompiledModelTestBase.EnumU64)value)))); + return instance; + }); + nullableEnumU64AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU64? )(((CompiledModelTestBase.EnumU64)value)))); + return instance; + }); + nullableEnumU64AsString.SetAccessors( + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU64AsString, 158), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU64AsString)); + nullableEnumU64AsString.SetPropertyIndexes( + index: 158, + originalValueIndex: 158, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64AsString.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))); + nullableEnumU64AsString.SetComparer(new NullableValueComparer(nullableEnumU64AsString.TypeMapping.Comparer)); + nullableEnumU64AsString.SetKeyComparer(new NullableValueComparer(nullableEnumU64AsString.TypeMapping.KeyComparer)); + + var nullableEnumU64AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU64AsStringArray", + typeof(CompiledModelTestBase.EnumU64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU64AsStringArray.SetGetter( + CompiledModelTestBase.EnumU64? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(instance) == null); + nullableEnumU64AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(instance) = value; + return instance; + }); + nullableEnumU64AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(instance) = value; + return instance; + }); + nullableEnumU64AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU64AsStringArray, 159), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU64AsStringArray)); + nullableEnumU64AsStringArray.SetPropertyIndexes( + index: 159, + originalValueIndex: 159, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var nullableEnumU64AsStringArrayElementType = nullableEnumU64AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + nullableEnumU64AsStringArrayElementType.TypeMapping = nullableEnumU64AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnumU64AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU64AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU64AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU64AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(instance) == null); + nullableEnumU64AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU64AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU64AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU64AsStringCollection, 160), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU64AsStringCollection)); + nullableEnumU64AsStringCollection.SetPropertyIndexes( + index: 160, + originalValueIndex: 160, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var nullableEnumU64AsStringCollectionElementType = nullableEnumU64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + nullableEnumU64AsStringCollectionElementType.TypeMapping = nullableEnumU64AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnumU64AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU64AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU64Collection = runtimeEntityType.AddProperty( + "NullableEnumU64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU64Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64Collection(instance) == null); + nullableEnumU64Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64Collection(instance) = value; + return instance; + }); + nullableEnumU64Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64Collection(instance) = value; + return instance; + }); + nullableEnumU64Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU64Collection, 161), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU64Collection)); + nullableEnumU64Collection.SetPropertyIndexes( + index: 161, + originalValueIndex: 161, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var nullableEnumU64CollectionElementType = nullableEnumU64Collection.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + nullableEnumU64CollectionElementType.TypeMapping = nullableEnumU64Collection.TypeMapping.ElementTypeMapping; + nullableEnumU64CollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU64CollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU8 = runtimeEntityType.AddProperty( + "NullableEnumU8", + typeof(CompiledModelTestBase.EnumU8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU8.SetGetter( + CompiledModelTestBase.EnumU8? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU8(instance).HasValue)); + nullableEnumU8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU8? )(((CompiledModelTestBase.EnumU8)value)))); + return instance; + }); + nullableEnumU8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU8? )(((CompiledModelTestBase.EnumU8)value)))); + return instance; + }); + nullableEnumU8.SetAccessors( + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU8, 162), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU8)); + nullableEnumU8.SetPropertyIndexes( + index: 162, + originalValueIndex: 162, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))); + nullableEnumU8.SetComparer(new NullableValueComparer(nullableEnumU8.TypeMapping.Comparer)); + nullableEnumU8.SetKeyComparer(new NullableValueComparer(nullableEnumU8.TypeMapping.KeyComparer)); + + var nullableEnumU8Array = runtimeEntityType.AddProperty( + "NullableEnumU8Array", + typeof(CompiledModelTestBase.EnumU8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU8Array.SetGetter( + CompiledModelTestBase.EnumU8? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8Array(instance) == null); + nullableEnumU8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8Array(instance) = value; + return instance; + }); + nullableEnumU8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8Array(instance) = value; + return instance; + }); + nullableEnumU8Array.SetAccessors( + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU8Array, 163), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU8Array)); + nullableEnumU8Array.SetPropertyIndexes( + index: 163, + originalValueIndex: 163, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var nullableEnumU8ArrayElementType = nullableEnumU8Array.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + nullableEnumU8ArrayElementType.TypeMapping = nullableEnumU8Array.TypeMapping.ElementTypeMapping; + nullableEnumU8ArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU8ArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU8AsString = runtimeEntityType.AddProperty( + "NullableEnumU8AsString", + typeof(CompiledModelTestBase.EnumU8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU8AsString.SetGetter( + CompiledModelTestBase.EnumU8? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU8AsString(instance).HasValue)); + nullableEnumU8AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU8? )(((CompiledModelTestBase.EnumU8)value)))); + return instance; + }); + nullableEnumU8AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU8? )(((CompiledModelTestBase.EnumU8)value)))); + return instance; + }); + nullableEnumU8AsString.SetAccessors( + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU8AsString, 164), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU8AsString)); + nullableEnumU8AsString.SetPropertyIndexes( + index: 164, + originalValueIndex: 164, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8AsString.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))); + nullableEnumU8AsString.SetComparer(new NullableValueComparer(nullableEnumU8AsString.TypeMapping.Comparer)); + nullableEnumU8AsString.SetKeyComparer(new NullableValueComparer(nullableEnumU8AsString.TypeMapping.KeyComparer)); + + var nullableEnumU8AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU8AsStringArray", + typeof(CompiledModelTestBase.EnumU8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU8AsStringArray.SetGetter( + CompiledModelTestBase.EnumU8? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(instance) == null); + nullableEnumU8AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(instance) = value; + return instance; + }); + nullableEnumU8AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(instance) = value; + return instance; + }); + nullableEnumU8AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU8AsStringArray, 165), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU8AsStringArray)); + nullableEnumU8AsStringArray.SetPropertyIndexes( + index: 165, + originalValueIndex: 165, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var nullableEnumU8AsStringArrayElementType = nullableEnumU8AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + nullableEnumU8AsStringArrayElementType.TypeMapping = nullableEnumU8AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnumU8AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU8AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU8AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU8AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(instance) == null); + nullableEnumU8AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU8AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU8AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU8AsStringCollection, 166), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU8AsStringCollection)); + nullableEnumU8AsStringCollection.SetPropertyIndexes( + index: 166, + originalValueIndex: 166, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var nullableEnumU8AsStringCollectionElementType = nullableEnumU8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + nullableEnumU8AsStringCollectionElementType.TypeMapping = nullableEnumU8AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnumU8AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU8AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU8Collection = runtimeEntityType.AddProperty( + "NullableEnumU8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU8Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8Collection(instance) == null); + nullableEnumU8Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8Collection(instance) = value; + return instance; + }); + nullableEnumU8Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8Collection(instance) = value; + return instance; + }); + nullableEnumU8Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU8Collection, 167), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU8Collection)); + nullableEnumU8Collection.SetPropertyIndexes( + index: 167, + originalValueIndex: 167, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var nullableEnumU8CollectionElementType = nullableEnumU8Collection.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + nullableEnumU8CollectionElementType.TypeMapping = nullableEnumU8Collection.TypeMapping.ElementTypeMapping; + nullableEnumU8CollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU8CollectionElementType.TypeMapping.Comparer)); + + var nullableFloat = runtimeEntityType.AddProperty( + "NullableFloat", + typeof(float?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableFloat", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableFloat.SetGetter( + float? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableFloat(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableFloat(instance).HasValue)); + nullableFloat.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float? value) => + { + ManyTypesUnsafeAccessors.NullableFloat(instance) = value; + return instance; + }); + nullableFloat.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float? value) => + { + ManyTypesUnsafeAccessors.NullableFloat(instance) = value; + return instance; + }); + nullableFloat.SetAccessors( + float? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableFloat(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableFloat(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float? (IInternalEntry entry) => entry.ReadOriginalValue(nullableFloat, 168), + float? (IInternalEntry entry) => entry.GetCurrentValue(nullableFloat)); + nullableFloat.SetPropertyIndexes( + index: 168, + originalValueIndex: 168, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableFloat.TypeMapping = JetFloatTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + keyComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + providerValueComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v)); + nullableFloat.SetComparer(new NullableValueComparer(nullableFloat.TypeMapping.Comparer)); + nullableFloat.SetKeyComparer(new NullableValueComparer(nullableFloat.TypeMapping.KeyComparer)); + + var nullableFloatArray = runtimeEntityType.AddProperty( + "NullableFloatArray", + typeof(float?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableFloatArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableFloatArray.SetGetter( + float? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableFloatArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableFloatArray(instance) == null); + nullableFloatArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float? [] value) => + { + ManyTypesUnsafeAccessors.NullableFloatArray(instance) = value; + return instance; + }); + nullableFloatArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float? [] value) => + { + ManyTypesUnsafeAccessors.NullableFloatArray(instance) = value; + return instance; + }); + nullableFloatArray.SetAccessors( + float? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableFloatArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableFloatArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableFloatArray, 169), + float? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableFloatArray)); + nullableFloatArray.SetPropertyIndexes( + index: 169, + originalValueIndex: 169, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableFloatArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonFloatReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonFloatReaderWriter.Instance), + elementMapping: JetFloatTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + keyComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + providerValueComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v))); + var nullableFloatArrayElementType = nullableFloatArray.SetElementType(typeof(float?), + nullable: true); + nullableFloatArrayElementType.TypeMapping = nullableFloatArray.TypeMapping.ElementTypeMapping; + nullableFloatArrayElementType.SetComparer(new NullableValueComparer(nullableFloatArrayElementType.TypeMapping.Comparer)); + + var nullableGuid = runtimeEntityType.AddProperty( + "NullableGuid", + typeof(Guid?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableGuid", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableGuid.SetGetter( + Guid? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableGuid(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableGuid(instance).HasValue)); + nullableGuid.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid? value) => + { + ManyTypesUnsafeAccessors.NullableGuid(instance) = value; + return instance; + }); + nullableGuid.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid? value) => + { + ManyTypesUnsafeAccessors.NullableGuid(instance) = value; + return instance; + }); + nullableGuid.SetAccessors( + Guid? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableGuid(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableGuid(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid? (IInternalEntry entry) => entry.ReadOriginalValue(nullableGuid, 170), + Guid? (IInternalEntry entry) => entry.GetCurrentValue(nullableGuid)); + nullableGuid.SetPropertyIndexes( + index: 170, + originalValueIndex: 170, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableGuid.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + nullableGuid.SetComparer(new NullableValueComparer(nullableGuid.TypeMapping.Comparer)); + nullableGuid.SetKeyComparer(new NullableValueComparer(nullableGuid.TypeMapping.KeyComparer)); + + var nullableGuidArray = runtimeEntityType.AddProperty( + "NullableGuidArray", + typeof(Guid?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableGuidArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableGuidArray.SetGetter( + Guid? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableGuidArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableGuidArray(instance) == null); + nullableGuidArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid? [] value) => + { + ManyTypesUnsafeAccessors.NullableGuidArray(instance) = value; + return instance; + }); + nullableGuidArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid? [] value) => + { + ManyTypesUnsafeAccessors.NullableGuidArray(instance) = value; + return instance; + }); + nullableGuidArray.SetAccessors( + Guid? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableGuidArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableGuidArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableGuidArray, 171), + Guid? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableGuidArray)); + nullableGuidArray.SetPropertyIndexes( + index: 171, + originalValueIndex: 171, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableGuidArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonGuidReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonGuidReaderWriter.Instance), + elementMapping: JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v))); + var nullableGuidArrayElementType = nullableGuidArray.SetElementType(typeof(Guid?), + nullable: true); + nullableGuidArrayElementType.TypeMapping = nullableGuidArray.TypeMapping.ElementTypeMapping; + nullableGuidArrayElementType.SetComparer(new NullableValueComparer(nullableGuidArrayElementType.TypeMapping.Comparer)); + + var nullableIPAddress = runtimeEntityType.AddProperty( + "NullableIPAddress", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableIPAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableIPAddress.SetGetter( + IPAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableIPAddress(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableIPAddress(instance) == null); + nullableIPAddress.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.NullableIPAddress(instance) = value; + return instance; + }); + nullableIPAddress.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.NullableIPAddress(instance) = value; + return instance; + }); + nullableIPAddress.SetAccessors( + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableIPAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableIPAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => entry.ReadOriginalValue(nullableIPAddress, 172), + IPAddress (IInternalEntry entry) => entry.GetCurrentValue(nullableIPAddress)); + nullableIPAddress.SetPropertyIndexes( + index: 172, + originalValueIndex: 172, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableIPAddress.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))); + + var nullableIPAddressArray = runtimeEntityType.AddProperty( + "NullableIPAddressArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableIPAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableIPAddressArray.SetGetter( + IPAddress[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableIPAddressArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableIPAddressArray(instance) == null); + nullableIPAddressArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress[] value) => + { + ManyTypesUnsafeAccessors.NullableIPAddressArray(instance) = value; + return instance; + }); + nullableIPAddressArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress[] value) => + { + ManyTypesUnsafeAccessors.NullableIPAddressArray(instance) = value; + return instance; + }); + nullableIPAddressArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableIPAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableIPAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(nullableIPAddressArray, 173), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(nullableIPAddressArray)); + nullableIPAddressArray.SetPropertyIndexes( + index: 173, + originalValueIndex: 173, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableIPAddressArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var nullableIPAddressArrayElementType = nullableIPAddressArray.SetElementType(typeof(IPAddress), + nullable: true); + nullableIPAddressArrayElementType.TypeMapping = nullableIPAddressArray.TypeMapping.ElementTypeMapping; + + var nullableInt16 = runtimeEntityType.AddProperty( + "NullableInt16", + typeof(short?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableInt16.SetGetter( + short? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableInt16(instance).HasValue)); + nullableInt16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short? value) => + { + ManyTypesUnsafeAccessors.NullableInt16(instance) = value; + return instance; + }); + nullableInt16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short? value) => + { + ManyTypesUnsafeAccessors.NullableInt16(instance) = value; + return instance; + }); + nullableInt16.SetAccessors( + short? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short? (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt16, 174), + short? (IInternalEntry entry) => entry.GetCurrentValue(nullableInt16)); + nullableInt16.SetPropertyIndexes( + index: 174, + originalValueIndex: 174, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt16.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)); + nullableInt16.SetComparer(new NullableValueComparer(nullableInt16.TypeMapping.Comparer)); + nullableInt16.SetKeyComparer(new NullableValueComparer(nullableInt16.TypeMapping.KeyComparer)); + + var nullableInt16Array = runtimeEntityType.AddProperty( + "NullableInt16Array", + typeof(short?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableInt16Array.SetGetter( + short? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt16Array(instance) == null); + nullableInt16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt16Array(instance) = value; + return instance; + }); + nullableInt16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt16Array(instance) = value; + return instance; + }); + nullableInt16Array.SetAccessors( + short? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt16Array, 175), + short? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableInt16Array)); + nullableInt16Array.SetPropertyIndexes( + index: 175, + originalValueIndex: 175, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var nullableInt16ArrayElementType = nullableInt16Array.SetElementType(typeof(short?), + nullable: true); + nullableInt16ArrayElementType.TypeMapping = nullableInt16Array.TypeMapping.ElementTypeMapping; + nullableInt16ArrayElementType.SetComparer(new NullableValueComparer(nullableInt16ArrayElementType.TypeMapping.Comparer)); + + var nullableInt32 = runtimeEntityType.AddProperty( + "NullableInt32", + typeof(int?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableInt32.SetGetter( + int? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableInt32(instance).HasValue)); + nullableInt32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? value) => + { + ManyTypesUnsafeAccessors.NullableInt32(instance) = value; + return instance; + }); + nullableInt32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? value) => + { + ManyTypesUnsafeAccessors.NullableInt32(instance) = value; + return instance; + }); + nullableInt32.SetAccessors( + int? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt32, 176), + int? (IInternalEntry entry) => entry.GetCurrentValue(nullableInt32)); + nullableInt32.SetPropertyIndexes( + index: 176, + originalValueIndex: 176, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt32.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + nullableInt32.SetComparer(new NullableValueComparer(nullableInt32.TypeMapping.Comparer)); + nullableInt32.SetKeyComparer(new NullableValueComparer(nullableInt32.TypeMapping.KeyComparer)); + + var nullableInt32Array = runtimeEntityType.AddProperty( + "NullableInt32Array", + typeof(int?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableInt32Array.SetGetter( + int? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt32Array(instance) == null); + nullableInt32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt32Array(instance) = value; + return instance; + }); + nullableInt32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt32Array(instance) = value; + return instance; + }); + nullableInt32Array.SetAccessors( + int? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt32Array, 177), + int? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableInt32Array)); + nullableInt32Array.SetPropertyIndexes( + index: 177, + originalValueIndex: 177, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonInt32ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonInt32ReaderWriter.Instance), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))); + var nullableInt32ArrayElementType = nullableInt32Array.SetElementType(typeof(int?), + nullable: true); + nullableInt32ArrayElementType.TypeMapping = nullableInt32Array.TypeMapping.ElementTypeMapping; + nullableInt32ArrayElementType.SetComparer(new NullableValueComparer(nullableInt32ArrayElementType.TypeMapping.Comparer)); + + var nullableInt64 = runtimeEntityType.AddProperty( + "NullableInt64", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableInt64.SetGetter( + long? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableInt64(instance).HasValue)); + nullableInt64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long? value) => + { + ManyTypesUnsafeAccessors.NullableInt64(instance) = value; + return instance; + }); + nullableInt64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long? value) => + { + ManyTypesUnsafeAccessors.NullableInt64(instance) = value; + return instance; + }); + nullableInt64.SetAccessors( + long? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long? (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt64, 178), + long? (IInternalEntry entry) => entry.GetCurrentValue(nullableInt64)); + nullableInt64.SetPropertyIndexes( + index: 178, + originalValueIndex: 178, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt64.TypeMapping = LibRedLongTypeMapping.Default; + nullableInt64.SetComparer(new NullableValueComparer(nullableInt64.TypeMapping.Comparer)); + nullableInt64.SetKeyComparer(new NullableValueComparer(nullableInt64.TypeMapping.KeyComparer)); + + var nullableInt64Array = runtimeEntityType.AddProperty( + "NullableInt64Array", + typeof(long?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableInt64Array.SetGetter( + long? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt64Array(instance) == null); + nullableInt64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt64Array(instance) = value; + return instance; + }); + nullableInt64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt64Array(instance) = value; + return instance; + }); + nullableInt64Array.SetAccessors( + long? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt64Array, 179), + long? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableInt64Array)); + nullableInt64Array.SetPropertyIndexes( + index: 179, + originalValueIndex: 179, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonInt64ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonInt64ReaderWriter.Instance), + elementMapping: LibRedLongTypeMapping.Default); + var nullableInt64ArrayElementType = nullableInt64Array.SetElementType(typeof(long?), + nullable: true); + nullableInt64ArrayElementType.TypeMapping = nullableInt64Array.TypeMapping.ElementTypeMapping; + nullableInt64ArrayElementType.SetComparer(new NullableValueComparer(nullableInt64ArrayElementType.TypeMapping.Comparer)); + + var nullableInt8 = runtimeEntityType.AddProperty( + "NullableInt8", + typeof(sbyte?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableInt8.SetGetter( + sbyte? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableInt8(instance).HasValue)); + nullableInt8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte? value) => + { + ManyTypesUnsafeAccessors.NullableInt8(instance) = value; + return instance; + }); + nullableInt8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte? value) => + { + ManyTypesUnsafeAccessors.NullableInt8(instance) = value; + return instance; + }); + nullableInt8.SetAccessors( + sbyte? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte? (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt8, 180), + sbyte? (IInternalEntry entry) => entry.GetCurrentValue(nullableInt8)); + nullableInt8.SetPropertyIndexes( + index: 180, + originalValueIndex: 180, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt8.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + keyComparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)))); + nullableInt8.SetComparer(new NullableValueComparer(nullableInt8.TypeMapping.Comparer)); + nullableInt8.SetKeyComparer(new NullableValueComparer(nullableInt8.TypeMapping.KeyComparer)); + + var nullableInt8Array = runtimeEntityType.AddProperty( + "NullableInt8Array", + typeof(sbyte?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableInt8Array.SetGetter( + sbyte? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt8Array(instance) == null); + nullableInt8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt8Array(instance) = value; + return instance; + }); + nullableInt8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt8Array(instance) = value; + return instance; + }); + nullableInt8Array.SetAccessors( + sbyte? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt8Array, 181), + sbyte? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableInt8Array)); + nullableInt8Array.SetPropertyIndexes( + index: 181, + originalValueIndex: 181, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + keyComparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v))))); + var nullableInt8ArrayElementType = nullableInt8Array.SetElementType(typeof(sbyte?), + nullable: true); + nullableInt8ArrayElementType.TypeMapping = nullableInt8Array.TypeMapping.ElementTypeMapping; + nullableInt8ArrayElementType.SetComparer(new NullableValueComparer(nullableInt8ArrayElementType.TypeMapping.Comparer)); + + var nullablePhysicalAddress = runtimeEntityType.AddProperty( + "NullablePhysicalAddress", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullablePhysicalAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullablePhysicalAddress.SetGetter( + PhysicalAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullablePhysicalAddress(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullablePhysicalAddress(instance) == null); + nullablePhysicalAddress.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.NullablePhysicalAddress(instance) = value; + return instance; + }); + nullablePhysicalAddress.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.NullablePhysicalAddress(instance) = value; + return instance; + }); + nullablePhysicalAddress.SetAccessors( + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullablePhysicalAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullablePhysicalAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => entry.ReadOriginalValue(nullablePhysicalAddress, 182), + PhysicalAddress (IInternalEntry entry) => entry.GetCurrentValue(nullablePhysicalAddress)); + nullablePhysicalAddress.SetPropertyIndexes( + index: 182, + originalValueIndex: 182, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullablePhysicalAddress.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))); + + var nullablePhysicalAddressArray = runtimeEntityType.AddProperty( + "NullablePhysicalAddressArray", + typeof(PhysicalAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullablePhysicalAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullablePhysicalAddressArray.SetGetter( + PhysicalAddress[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(instance) == null); + nullablePhysicalAddressArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress[] value) => + { + ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(instance) = value; + return instance; + }); + nullablePhysicalAddressArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress[] value) => + { + ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(instance) = value; + return instance; + }); + nullablePhysicalAddressArray.SetAccessors( + PhysicalAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(nullablePhysicalAddressArray, 183), + PhysicalAddress[] (IInternalEntry entry) => entry.GetCurrentValue(nullablePhysicalAddressArray)); + nullablePhysicalAddressArray.SetPropertyIndexes( + index: 183, + originalValueIndex: 183, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullablePhysicalAddressArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v))))); + var nullablePhysicalAddressArrayElementType = nullablePhysicalAddressArray.SetElementType(typeof(PhysicalAddress), + nullable: true); + nullablePhysicalAddressArrayElementType.TypeMapping = nullablePhysicalAddressArray.TypeMapping.ElementTypeMapping; + + var nullableString = runtimeEntityType.AddProperty( + "NullableString", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableString.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableString(instance) == null); + nullableString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.NullableString(instance) = value; + return instance; + }); + nullableString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.NullableString(instance) = value; + return instance; + }); + nullableString.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(nullableString, 184), + string (IInternalEntry entry) => entry.GetCurrentValue(nullableString)); + nullableString.SetPropertyIndexes( + index: 184, + originalValueIndex: 184, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var nullableStringArray = runtimeEntityType.AddProperty( + "NullableStringArray", + typeof(string[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableStringArray.SetGetter( + string[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableStringArray(instance) == null); + nullableStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string[] value) => + { + ManyTypesUnsafeAccessors.NullableStringArray(instance) = value; + return instance; + }); + nullableStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string[] value) => + { + ManyTypesUnsafeAccessors.NullableStringArray(instance) = value; + return instance; + }); + nullableStringArray.SetAccessors( + string[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string[] (IInternalEntry entry) => entry.ReadOriginalValue(nullableStringArray, 185), + string[] (IInternalEntry entry) => entry.GetCurrentValue(nullableStringArray)); + nullableStringArray.SetPropertyIndexes( + index: 185, + originalValueIndex: 185, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var nullableStringArrayElementType = nullableStringArray.SetElementType(typeof(string), + nullable: true); + nullableStringArrayElementType.TypeMapping = nullableStringArray.TypeMapping.ElementTypeMapping; + + var nullableTimeOnly = runtimeEntityType.AddProperty( + "NullableTimeOnly", + typeof(TimeOnly?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableTimeOnly.SetGetter( + TimeOnly? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeOnly(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableTimeOnly(instance).HasValue)); + nullableTimeOnly.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly? value) => + { + ManyTypesUnsafeAccessors.NullableTimeOnly(instance) = value; + return instance; + }); + nullableTimeOnly.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly? value) => + { + ManyTypesUnsafeAccessors.NullableTimeOnly(instance) = value; + return instance; + }); + nullableTimeOnly.SetAccessors( + TimeOnly? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly? (IInternalEntry entry) => entry.ReadOriginalValue(nullableTimeOnly, 186), + TimeOnly? (IInternalEntry entry) => entry.GetCurrentValue(nullableTimeOnly)); + nullableTimeOnly.SetPropertyIndexes( + index: 186, + originalValueIndex: 186, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableTimeOnly.TypeMapping = JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v)); + nullableTimeOnly.SetComparer(new NullableValueComparer(nullableTimeOnly.TypeMapping.Comparer)); + nullableTimeOnly.SetKeyComparer(new NullableValueComparer(nullableTimeOnly.TypeMapping.KeyComparer)); + + var nullableTimeOnlyArray = runtimeEntityType.AddProperty( + "NullableTimeOnlyArray", + typeof(TimeOnly?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableTimeOnlyArray.SetGetter( + TimeOnly? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeOnlyArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeOnlyArray(instance) == null); + nullableTimeOnlyArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly? [] value) => + { + ManyTypesUnsafeAccessors.NullableTimeOnlyArray(instance) = value; + return instance; + }); + nullableTimeOnlyArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly? [] value) => + { + ManyTypesUnsafeAccessors.NullableTimeOnlyArray(instance) = value; + return instance; + }); + nullableTimeOnlyArray.SetAccessors( + TimeOnly? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableTimeOnlyArray, 187), + TimeOnly? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableTimeOnlyArray)); + nullableTimeOnlyArray.SetPropertyIndexes( + index: 187, + originalValueIndex: 187, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableTimeOnlyArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonTimeOnlyReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonTimeOnlyReaderWriter.Instance), + elementMapping: JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v))); + var nullableTimeOnlyArrayElementType = nullableTimeOnlyArray.SetElementType(typeof(TimeOnly?), + nullable: true); + nullableTimeOnlyArrayElementType.TypeMapping = nullableTimeOnlyArray.TypeMapping.ElementTypeMapping; + nullableTimeOnlyArrayElementType.SetComparer(new NullableValueComparer(nullableTimeOnlyArrayElementType.TypeMapping.Comparer)); + + var nullableTimeSpan = runtimeEntityType.AddProperty( + "NullableTimeSpan", + typeof(TimeSpan?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeSpan", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableTimeSpan.SetGetter( + TimeSpan? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeSpan(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableTimeSpan(instance).HasValue)); + nullableTimeSpan.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan? value) => + { + ManyTypesUnsafeAccessors.NullableTimeSpan(instance) = value; + return instance; + }); + nullableTimeSpan.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan? value) => + { + ManyTypesUnsafeAccessors.NullableTimeSpan(instance) = value; + return instance; + }); + nullableTimeSpan.SetAccessors( + TimeSpan? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeSpan(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeSpan(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan? (IInternalEntry entry) => entry.ReadOriginalValue(nullableTimeSpan, 188), + TimeSpan? (IInternalEntry entry) => entry.GetCurrentValue(nullableTimeSpan)); + nullableTimeSpan.SetPropertyIndexes( + index: 188, + originalValueIndex: 188, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableTimeSpan.TypeMapping = JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v)); + nullableTimeSpan.SetComparer(new NullableValueComparer(nullableTimeSpan.TypeMapping.Comparer)); + nullableTimeSpan.SetKeyComparer(new NullableValueComparer(nullableTimeSpan.TypeMapping.KeyComparer)); + + var nullableTimeSpanArray = runtimeEntityType.AddProperty( + "NullableTimeSpanArray", + typeof(TimeSpan?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeSpanArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableTimeSpanArray.SetGetter( + TimeSpan? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeSpanArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeSpanArray(instance) == null); + nullableTimeSpanArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan? [] value) => + { + ManyTypesUnsafeAccessors.NullableTimeSpanArray(instance) = value; + return instance; + }); + nullableTimeSpanArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan? [] value) => + { + ManyTypesUnsafeAccessors.NullableTimeSpanArray(instance) = value; + return instance; + }); + nullableTimeSpanArray.SetAccessors( + TimeSpan? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeSpanArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeSpanArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableTimeSpanArray, 189), + TimeSpan? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableTimeSpanArray)); + nullableTimeSpanArray.SetPropertyIndexes( + index: 189, + originalValueIndex: 189, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableTimeSpanArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonTimeSpanReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonTimeSpanReaderWriter.Instance), + elementMapping: JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v))); + var nullableTimeSpanArrayElementType = nullableTimeSpanArray.SetElementType(typeof(TimeSpan?), + nullable: true); + nullableTimeSpanArrayElementType.TypeMapping = nullableTimeSpanArray.TypeMapping.ElementTypeMapping; + nullableTimeSpanArrayElementType.SetComparer(new NullableValueComparer(nullableTimeSpanArrayElementType.TypeMapping.Comparer)); + + var nullableUInt16 = runtimeEntityType.AddProperty( + "NullableUInt16", + typeof(ushort?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUInt16.SetGetter( + ushort? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableUInt16(instance).HasValue)); + nullableUInt16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort? value) => + { + ManyTypesUnsafeAccessors.NullableUInt16(instance) = value; + return instance; + }); + nullableUInt16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort? value) => + { + ManyTypesUnsafeAccessors.NullableUInt16(instance) = value; + return instance; + }); + nullableUInt16.SetAccessors( + ushort? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort? (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt16, 190), + ushort? (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt16)); + nullableUInt16.SetPropertyIndexes( + index: 190, + originalValueIndex: 190, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt16.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + keyComparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)))); + nullableUInt16.SetComparer(new NullableValueComparer(nullableUInt16.TypeMapping.Comparer)); + nullableUInt16.SetKeyComparer(new NullableValueComparer(nullableUInt16.TypeMapping.KeyComparer)); + + var nullableUInt16Array = runtimeEntityType.AddProperty( + "NullableUInt16Array", + typeof(ushort?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUInt16Array.SetGetter( + ushort? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt16Array(instance) == null); + nullableUInt16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt16Array(instance) = value; + return instance; + }); + nullableUInt16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt16Array(instance) = value; + return instance; + }); + nullableUInt16Array.SetAccessors( + ushort? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt16Array, 191), + ushort? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt16Array)); + nullableUInt16Array.SetPropertyIndexes( + index: 191, + originalValueIndex: 191, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + keyComparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v))))); + var nullableUInt16ArrayElementType = nullableUInt16Array.SetElementType(typeof(ushort?), + nullable: true); + nullableUInt16ArrayElementType.TypeMapping = nullableUInt16Array.TypeMapping.ElementTypeMapping; + nullableUInt16ArrayElementType.SetComparer(new NullableValueComparer(nullableUInt16ArrayElementType.TypeMapping.Comparer)); + + var nullableUInt32 = runtimeEntityType.AddProperty( + "NullableUInt32", + typeof(uint?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUInt32.SetGetter( + uint? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableUInt32(instance).HasValue)); + nullableUInt32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint? value) => + { + ManyTypesUnsafeAccessors.NullableUInt32(instance) = value; + return instance; + }); + nullableUInt32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint? value) => + { + ManyTypesUnsafeAccessors.NullableUInt32(instance) = value; + return instance; + }); + nullableUInt32.SetAccessors( + uint? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint? (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt32, 192), + uint? (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt32)); + nullableUInt32.SetPropertyIndexes( + index: 192, + originalValueIndex: 192, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt32.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + keyComparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)))); + nullableUInt32.SetComparer(new NullableValueComparer(nullableUInt32.TypeMapping.Comparer)); + nullableUInt32.SetKeyComparer(new NullableValueComparer(nullableUInt32.TypeMapping.KeyComparer)); + + var nullableUInt32Array = runtimeEntityType.AddProperty( + "NullableUInt32Array", + typeof(uint?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUInt32Array.SetGetter( + uint? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt32Array(instance) == null); + nullableUInt32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt32Array(instance) = value; + return instance; + }); + nullableUInt32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt32Array(instance) = value; + return instance; + }); + nullableUInt32Array.SetAccessors( + uint? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt32Array, 193), + uint? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt32Array)); + nullableUInt32Array.SetPropertyIndexes( + index: 193, + originalValueIndex: 193, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + keyComparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v))))); + var nullableUInt32ArrayElementType = nullableUInt32Array.SetElementType(typeof(uint?), + nullable: true); + nullableUInt32ArrayElementType.TypeMapping = nullableUInt32Array.TypeMapping.ElementTypeMapping; + nullableUInt32ArrayElementType.SetComparer(new NullableValueComparer(nullableUInt32ArrayElementType.TypeMapping.Comparer)); + + var nullableUInt64 = runtimeEntityType.AddProperty( + "NullableUInt64", + typeof(ulong?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUInt64.SetGetter( + ulong? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableUInt64(instance).HasValue)); + nullableUInt64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong? value) => + { + ManyTypesUnsafeAccessors.NullableUInt64(instance) = value; + return instance; + }); + nullableUInt64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong? value) => + { + ManyTypesUnsafeAccessors.NullableUInt64(instance) = value; + return instance; + }); + nullableUInt64.SetAccessors( + ulong? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong? (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt64, 194), + ulong? (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt64)); + nullableUInt64.SetPropertyIndexes( + index: 194, + originalValueIndex: 194, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt64.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + keyComparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)))); + nullableUInt64.SetComparer(new NullableValueComparer(nullableUInt64.TypeMapping.Comparer)); + nullableUInt64.SetKeyComparer(new NullableValueComparer(nullableUInt64.TypeMapping.KeyComparer)); + + var nullableUInt64Array = runtimeEntityType.AddProperty( + "NullableUInt64Array", + typeof(ulong?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUInt64Array.SetGetter( + ulong? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt64Array(instance) == null); + nullableUInt64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt64Array(instance) = value; + return instance; + }); + nullableUInt64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt64Array(instance) = value; + return instance; + }); + nullableUInt64Array.SetAccessors( + ulong? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt64Array, 195), + ulong? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt64Array)); + nullableUInt64Array.SetPropertyIndexes( + index: 195, + originalValueIndex: 195, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + keyComparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v))))); + var nullableUInt64ArrayElementType = nullableUInt64Array.SetElementType(typeof(ulong?), + nullable: true); + nullableUInt64ArrayElementType.TypeMapping = nullableUInt64Array.TypeMapping.ElementTypeMapping; + nullableUInt64ArrayElementType.SetComparer(new NullableValueComparer(nullableUInt64ArrayElementType.TypeMapping.Comparer)); + + var nullableUInt8 = runtimeEntityType.AddProperty( + "NullableUInt8", + typeof(byte?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUInt8.SetGetter( + byte? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableUInt8(instance).HasValue)); + nullableUInt8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte? value) => + { + ManyTypesUnsafeAccessors.NullableUInt8(instance) = value; + return instance; + }); + nullableUInt8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte? value) => + { + ManyTypesUnsafeAccessors.NullableUInt8(instance) = value; + return instance; + }); + nullableUInt8.SetAccessors( + byte? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte? (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt8, 196), + byte? (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt8)); + nullableUInt8.SetPropertyIndexes( + index: 196, + originalValueIndex: 196, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt8.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)); + nullableUInt8.SetComparer(new NullableValueComparer(nullableUInt8.TypeMapping.Comparer)); + nullableUInt8.SetKeyComparer(new NullableValueComparer(nullableUInt8.TypeMapping.KeyComparer)); + + var nullableUInt8Array = runtimeEntityType.AddProperty( + "NullableUInt8Array", + typeof(byte?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUInt8Array.SetGetter( + byte? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt8Array(instance) == null); + nullableUInt8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt8Array(instance) = value; + return instance; + }); + nullableUInt8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt8Array(instance) = value; + return instance; + }); + nullableUInt8Array.SetAccessors( + byte? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt8Array, 197), + byte? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt8Array)); + nullableUInt8Array.SetPropertyIndexes( + index: 197, + originalValueIndex: 197, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var nullableUInt8ArrayElementType = nullableUInt8Array.SetElementType(typeof(byte?), + nullable: true); + nullableUInt8ArrayElementType.TypeMapping = nullableUInt8Array.TypeMapping.ElementTypeMapping; + nullableUInt8ArrayElementType.SetComparer(new NullableValueComparer(nullableUInt8ArrayElementType.TypeMapping.Comparer)); + + var nullableUri = runtimeEntityType.AddProperty( + "NullableUri", + typeof(Uri), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUri", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUri.SetGetter( + Uri (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUri(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUri(instance) == null); + nullableUri.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.NullableUri(instance) = value; + return instance; + }); + nullableUri.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.NullableUri(instance) = value; + return instance; + }); + nullableUri.SetAccessors( + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUri(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUri(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => entry.ReadOriginalValue(nullableUri, 198), + Uri (IInternalEntry entry) => entry.GetCurrentValue(nullableUri)); + nullableUri.SetPropertyIndexes( + index: 198, + originalValueIndex: 198, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUri.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))); + + var nullableUriArray = runtimeEntityType.AddProperty( + "NullableUriArray", + typeof(Uri[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUriArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUriArray.SetGetter( + Uri[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUriArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUriArray(instance) == null); + nullableUriArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri[] value) => + { + ManyTypesUnsafeAccessors.NullableUriArray(instance) = value; + return instance; + }); + nullableUriArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri[] value) => + { + ManyTypesUnsafeAccessors.NullableUriArray(instance) = value; + return instance; + }); + nullableUriArray.SetAccessors( + Uri[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUriArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUriArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri[] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUriArray, 199), + Uri[] (IInternalEntry entry) => entry.GetCurrentValue(nullableUriArray)); + nullableUriArray.SetPropertyIndexes( + index: 199, + originalValueIndex: 199, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUriArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute))))); + var nullableUriArrayElementType = nullableUriArray.SetElementType(typeof(Uri), + nullable: true); + nullableUriArrayElementType.TypeMapping = nullableUriArray.TypeMapping.ElementTypeMapping; + + var physicalAddress = runtimeEntityType.AddProperty( + "PhysicalAddress", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + physicalAddress.SetGetter( + PhysicalAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddress(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddress(instance) == null); + physicalAddress.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddress(instance) = value; + return instance; + }); + physicalAddress.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddress(instance) = value; + return instance; + }); + physicalAddress.SetAccessors( + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => entry.ReadOriginalValue(physicalAddress, 200), + PhysicalAddress (IInternalEntry entry) => entry.GetCurrentValue(physicalAddress)); + physicalAddress.SetPropertyIndexes( + index: 200, + originalValueIndex: 200, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + physicalAddress.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))); + + var physicalAddressArray = runtimeEntityType.AddProperty( + "PhysicalAddressArray", + typeof(PhysicalAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + physicalAddressArray.SetGetter( + PhysicalAddress[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressArray(instance) == null); + physicalAddressArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress[] value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressArray(instance) = value; + return instance; + }); + physicalAddressArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress[] value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressArray(instance) = value; + return instance; + }); + physicalAddressArray.SetAccessors( + PhysicalAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(physicalAddressArray, 201), + PhysicalAddress[] (IInternalEntry entry) => entry.GetCurrentValue(physicalAddressArray)); + physicalAddressArray.SetPropertyIndexes( + index: 201, + originalValueIndex: 201, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + physicalAddressArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v))))); + var physicalAddressArrayElementType = physicalAddressArray.SetElementType(typeof(PhysicalAddress)); + physicalAddressArrayElementType.TypeMapping = physicalAddressArray.TypeMapping.ElementTypeMapping; + + var physicalAddressToBytesConverterProperty = runtimeEntityType.AddProperty( + "PhysicalAddressToBytesConverterProperty", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddressToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new PhysicalAddressToBytesConverter()); + physicalAddressToBytesConverterProperty.SetGetter( + PhysicalAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(instance) == null); + physicalAddressToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(instance) = value; + return instance; + }); + physicalAddressToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(instance) = value; + return instance; + }); + physicalAddressToBytesConverterProperty.SetAccessors( + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => entry.ReadOriginalValue(physicalAddressToBytesConverterProperty, 202), + PhysicalAddress (IInternalEntry entry) => entry.GetCurrentValue(physicalAddressToBytesConverterProperty)); + physicalAddressToBytesConverterProperty.SetPropertyIndexes( + index: 202, + originalValueIndex: 202, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + physicalAddressToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(8)", + size: 8), + converter: new ValueConverter( + byte[] (PhysicalAddress v) => v.GetAddressBytes(), + PhysicalAddress (byte[] v) => new PhysicalAddress(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (PhysicalAddress v) => v.GetAddressBytes(), + PhysicalAddress (byte[] v) => new PhysicalAddress(v)))); + + var physicalAddressToStringConverterProperty = runtimeEntityType.AddProperty( + "PhysicalAddressToStringConverterProperty", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddressToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new PhysicalAddressToStringConverter()); + physicalAddressToStringConverterProperty.SetGetter( + PhysicalAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(instance) == null); + physicalAddressToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(instance) = value; + return instance; + }); + physicalAddressToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(instance) = value; + return instance; + }); + physicalAddressToStringConverterProperty.SetAccessors( + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => entry.ReadOriginalValue(physicalAddressToStringConverterProperty, 203), + PhysicalAddress (IInternalEntry entry) => entry.GetCurrentValue(physicalAddressToStringConverterProperty)); + physicalAddressToStringConverterProperty.SetPropertyIndexes( + index: 203, + originalValueIndex: 203, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + physicalAddressToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))); + + var @string = runtimeEntityType.AddProperty( + "String", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("String", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + @string.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.String(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.String(instance) == null); + @string.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.String(instance) = value; + return instance; + }); + @string.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.String(instance) = value; + return instance; + }); + @string.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.String(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.String(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(@string, 204), + string (IInternalEntry entry) => entry.GetCurrentValue(@string)); + @string.SetPropertyIndexes( + index: 204, + originalValueIndex: 204, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @string.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var stringArray = runtimeEntityType.AddProperty( + "StringArray", + typeof(string[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + stringArray.SetGetter( + string[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringArray(instance) == null); + stringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string[] value) => + { + ManyTypesUnsafeAccessors.StringArray(instance) = value; + return instance; + }); + stringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string[] value) => + { + ManyTypesUnsafeAccessors.StringArray(instance) = value; + return instance; + }); + stringArray.SetAccessors( + string[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string[] (IInternalEntry entry) => entry.ReadOriginalValue(stringArray, 205), + string[] (IInternalEntry entry) => entry.GetCurrentValue(stringArray)); + stringArray.SetPropertyIndexes( + index: 205, + originalValueIndex: 205, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var stringArrayElementType = stringArray.SetElementType(typeof(string)); + stringArrayElementType.TypeMapping = stringArray.TypeMapping.ElementTypeMapping; + + var stringReadOnlyCollection = runtimeEntityType.AddProperty( + "StringReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_stringReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + stringReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance) == null); + stringReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance) = ((List)value); + return instance; + }); + stringReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance) = ((List)value); + return instance; + }); + stringReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._stringReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._stringReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(stringReadOnlyCollection, 206), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(stringReadOnlyCollection)); + stringReadOnlyCollection.SetPropertyIndexes( + index: 206, + originalValueIndex: 206, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var stringReadOnlyCollectionElementType = stringReadOnlyCollection.SetElementType(typeof(string)); + stringReadOnlyCollectionElementType.TypeMapping = stringReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var stringToBoolConverterProperty = runtimeEntityType.AddProperty( + "StringToBoolConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToBoolConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToBoolConverter()); + stringToBoolConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToBoolConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToBoolConverterProperty(instance) == null); + stringToBoolConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToBoolConverterProperty(instance) = value; + return instance; + }); + stringToBoolConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToBoolConverterProperty(instance) = value; + return instance; + }); + stringToBoolConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToBoolConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToBoolConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToBoolConverterProperty, 207), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToBoolConverterProperty)); + stringToBoolConverterProperty.SetPropertyIndexes( + index: 207, + originalValueIndex: 207, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToBoolConverterProperty.TypeMapping = JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + converter: new ValueConverter( + bool (string v) => Convert.ToBoolean(v), + string (bool v) => Convert.ToString(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonBoolReaderWriter.Instance, + new ValueConverter( + bool (string v) => Convert.ToBoolean(v), + string (bool v) => Convert.ToString(v)))); + + var stringToBytesConverterProperty = runtimeEntityType.AddProperty( + "StringToBytesConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + stringToBytesConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToBytesConverterProperty(instance) == null); + stringToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToBytesConverterProperty(instance) = value; + return instance; + }); + stringToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToBytesConverterProperty(instance) = value; + return instance; + }); + stringToBytesConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToBytesConverterProperty, 208), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToBytesConverterProperty)); + stringToBytesConverterProperty.SetPropertyIndexes( + index: 208, + originalValueIndex: 208, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + converter: new ValueConverter( + byte[] (string v) => Encoding.GetEncoding(12000).GetBytes(v), + string (byte[] v) => Encoding.GetEncoding(12000).GetString(v)), + storeTypePostfix: StoreTypePostfix.None, + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (string v) => Encoding.GetEncoding(12000).GetBytes(v), + string (byte[] v) => Encoding.GetEncoding(12000).GetString(v)))); + + var stringToCharConverterProperty = runtimeEntityType.AddProperty( + "StringToCharConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToCharConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToCharConverter()); + stringToCharConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToCharConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToCharConverterProperty(instance) == null); + stringToCharConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToCharConverterProperty(instance) = value; + return instance; + }); + stringToCharConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToCharConverterProperty(instance) = value; + return instance; + }); + stringToCharConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToCharConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToCharConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToCharConverterProperty, 209), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToCharConverterProperty)); + stringToCharConverterProperty.SetPropertyIndexes( + index: 209, + originalValueIndex: 209, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToCharConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (string v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)((v.Length < 1 ? '\0' : v[0])))), + string (string v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)((v.Length < 1 ? '\0' : v[0]))))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (string v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)((v.Length < 1 ? '\0' : v[0])))), + string (string v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)((v.Length < 1 ? '\0' : v[0]))))))); + + var stringToDateOnlyConverterProperty = runtimeEntityType.AddProperty( + "StringToDateOnlyConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDateOnlyConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToDateOnlyConverter()); + stringToDateOnlyConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(instance) == null); + stringToDateOnlyConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(instance) = value; + return instance; + }); + stringToDateOnlyConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(instance) = value; + return instance; + }); + stringToDateOnlyConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDateOnlyConverterProperty, 210), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDateOnlyConverterProperty)); + stringToDateOnlyConverterProperty.SetPropertyIndexes( + index: 210, + originalValueIndex: 210, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDateOnlyConverterProperty.TypeMapping = JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 10), + converter: new ValueConverter( + DateOnly (string v) => DateOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None), + string (DateOnly v) => v.ToString("yyyy\\-MM\\-dd")), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDateOnlyReaderWriter.Instance, + new ValueConverter( + DateOnly (string v) => DateOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None), + string (DateOnly v) => v.ToString("yyyy\\-MM\\-dd")))); + + var stringToDateTimeConverterProperty = runtimeEntityType.AddProperty( + "StringToDateTimeConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDateTimeConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToDateTimeConverter()); + stringToDateTimeConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(instance) == null); + stringToDateTimeConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(instance) = value; + return instance; + }); + stringToDateTimeConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(instance) = value; + return instance; + }); + stringToDateTimeConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDateTimeConverterProperty, 211), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDateTimeConverterProperty)); + stringToDateTimeConverterProperty.SetPropertyIndexes( + index: 211, + originalValueIndex: 211, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDateTimeConverterProperty.TypeMapping = JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 48), + converter: new ValueConverter( + DateTime (string v) => DateTime.Parse(v, CultureInfo.InvariantCulture), + string (DateTime v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFF")), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDateTimeReaderWriter.Instance, + new ValueConverter( + DateTime (string v) => DateTime.Parse(v, CultureInfo.InvariantCulture), + string (DateTime v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFF")))); + + var stringToDateTimeOffsetConverterProperty = runtimeEntityType.AddProperty( + "StringToDateTimeOffsetConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDateTimeOffsetConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToDateTimeOffsetConverter()); + stringToDateTimeOffsetConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(instance) == null); + stringToDateTimeOffsetConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(instance) = value; + return instance; + }); + stringToDateTimeOffsetConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(instance) = value; + return instance; + }); + stringToDateTimeOffsetConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDateTimeOffsetConverterProperty, 212), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDateTimeOffsetConverterProperty)); + stringToDateTimeOffsetConverterProperty.SetPropertyIndexes( + index: 212, + originalValueIndex: 212, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDateTimeOffsetConverterProperty.TypeMapping = JetDateTimeOffsetTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 48), + converter: new ValueConverter( + DateTimeOffset (string v) => DateTimeOffset.Parse(v, CultureInfo.InvariantCulture), + string (DateTimeOffset v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFFzzz")), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDateTimeOffsetReaderWriter.Instance, + new ValueConverter( + DateTimeOffset (string v) => DateTimeOffset.Parse(v, CultureInfo.InvariantCulture), + string (DateTimeOffset v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFFzzz")))); + + var stringToDecimalNumberConverterProperty = runtimeEntityType.AddProperty( + "StringToDecimalNumberConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDecimalNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToNumberConverter()); + stringToDecimalNumberConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(instance) == null); + stringToDecimalNumberConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(instance) = value; + return instance; + }); + stringToDecimalNumberConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(instance) = value; + return instance; + }); + stringToDecimalNumberConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDecimalNumberConverterProperty, 213), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDecimalNumberConverterProperty)); + stringToDecimalNumberConverterProperty.SetPropertyIndexes( + index: 213, + originalValueIndex: 213, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDecimalNumberConverterProperty.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 64), + converter: new ValueConverter( + decimal (string v) => decimal.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (decimal v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (string v) => decimal.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (decimal v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v))))); + + var stringToDoubleNumberConverterProperty = runtimeEntityType.AddProperty( + "StringToDoubleNumberConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDoubleNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToNumberConverter()); + stringToDoubleNumberConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(instance) == null); + stringToDoubleNumberConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(instance) = value; + return instance; + }); + stringToDoubleNumberConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(instance) = value; + return instance; + }); + stringToDoubleNumberConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDoubleNumberConverterProperty, 214), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDoubleNumberConverterProperty)); + stringToDoubleNumberConverterProperty.SetPropertyIndexes( + index: 214, + originalValueIndex: 214, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDoubleNumberConverterProperty.TypeMapping = JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 64), + converter: new ValueConverter( + double (string v) => double.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (double v) => string.Format(CultureInfo.InvariantCulture, "{0:R}", ((object)v))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDoubleReaderWriter.Instance, + new ValueConverter( + double (string v) => double.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (double v) => string.Format(CultureInfo.InvariantCulture, "{0:R}", ((object)v))))); + + var stringToEnumConverterProperty = runtimeEntityType.AddProperty( + "StringToEnumConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToEnumConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToEnumConverter()); + stringToEnumConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToEnumConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToEnumConverterProperty(instance) == null); + stringToEnumConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToEnumConverterProperty(instance) = value; + return instance; + }); + stringToEnumConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToEnumConverterProperty(instance) = value; + return instance; + }); + stringToEnumConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToEnumConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToEnumConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToEnumConverterProperty, 215), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToEnumConverterProperty)); + stringToEnumConverterProperty.SetPropertyIndexes( + index: 215, + originalValueIndex: 215, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToEnumConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (string v) => ((long)(StringEnumConverter.ConvertToEnum(v))), + string (long value) => ((object)((CompiledModelTestBase.EnumU32)value)).ToString()), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (string v) => ((long)(StringEnumConverter.ConvertToEnum(v))), + string (long value) => ((object)((CompiledModelTestBase.EnumU32)value)).ToString()))); + + var stringToGuidConverterProperty = runtimeEntityType.AddProperty( + "StringToGuidConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToGuidConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + stringToGuidConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToGuidConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToGuidConverterProperty(instance) == null); + stringToGuidConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToGuidConverterProperty(instance) = value; + return instance; + }); + stringToGuidConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToGuidConverterProperty(instance) = value; + return instance; + }); + stringToGuidConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToGuidConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToGuidConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToGuidConverterProperty, 216), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToGuidConverterProperty)); + stringToGuidConverterProperty.SetPropertyIndexes( + index: 216, + originalValueIndex: 216, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToGuidConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var stringToIntNumberConverterProperty = runtimeEntityType.AddProperty( + "StringToIntNumberConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToIntNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToNumberConverter()); + stringToIntNumberConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(instance) == null); + stringToIntNumberConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(instance) = value; + return instance; + }); + stringToIntNumberConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(instance) = value; + return instance; + }); + stringToIntNumberConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToIntNumberConverterProperty, 217), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToIntNumberConverterProperty)); + stringToIntNumberConverterProperty.SetPropertyIndexes( + index: 217, + originalValueIndex: 217, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToIntNumberConverterProperty.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 64), + converter: new ValueConverter( + int (string v) => int.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (int v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (string v) => int.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (int v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v))))); + + var stringToTimeOnlyConverterProperty = runtimeEntityType.AddProperty( + "StringToTimeOnlyConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToTimeOnlyConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToTimeOnlyConverter()); + stringToTimeOnlyConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(instance) == null); + stringToTimeOnlyConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(instance) = value; + return instance; + }); + stringToTimeOnlyConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(instance) = value; + return instance; + }); + stringToTimeOnlyConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToTimeOnlyConverterProperty, 218), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToTimeOnlyConverterProperty)); + stringToTimeOnlyConverterProperty.SetPropertyIndexes( + index: 218, + originalValueIndex: 218, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToTimeOnlyConverterProperty.TypeMapping = JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 48), + converter: new ValueConverter( + TimeOnly (string v) => TimeOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None), + string (TimeOnly v) => (v.Ticks % 10000000L == 0L ? string.Format(CultureInfo.InvariantCulture, "{0:HH\\:mm\\:ss}", ((object)v)) : v.ToString("o"))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonTimeOnlyReaderWriter.Instance, + new ValueConverter( + TimeOnly (string v) => TimeOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None), + string (TimeOnly v) => (v.Ticks % 10000000L == 0L ? string.Format(CultureInfo.InvariantCulture, "{0:HH\\:mm\\:ss}", ((object)v)) : v.ToString("o"))))); + + var stringToTimeSpanConverterProperty = runtimeEntityType.AddProperty( + "StringToTimeSpanConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToTimeSpanConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToTimeSpanConverter()); + stringToTimeSpanConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(instance) == null); + stringToTimeSpanConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(instance) = value; + return instance; + }); + stringToTimeSpanConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(instance) = value; + return instance; + }); + stringToTimeSpanConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToTimeSpanConverterProperty, 219), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToTimeSpanConverterProperty)); + stringToTimeSpanConverterProperty.SetPropertyIndexes( + index: 219, + originalValueIndex: 219, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToTimeSpanConverterProperty.TypeMapping = JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 48), + converter: new ValueConverter( + TimeSpan (string v) => TimeSpan.Parse(v, CultureInfo.InvariantCulture), + string (TimeSpan v) => v.ToString("c")), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonTimeSpanReaderWriter.Instance, + new ValueConverter( + TimeSpan (string v) => TimeSpan.Parse(v, CultureInfo.InvariantCulture), + string (TimeSpan v) => v.ToString("c")))); + + var stringToUriConverterProperty = runtimeEntityType.AddProperty( + "StringToUriConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToUriConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToUriConverter()); + stringToUriConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToUriConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToUriConverterProperty(instance) == null); + stringToUriConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToUriConverterProperty(instance) = value; + return instance; + }); + stringToUriConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToUriConverterProperty(instance) = value; + return instance; + }); + stringToUriConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToUriConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToUriConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToUriConverterProperty, 220), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToUriConverterProperty)); + stringToUriConverterProperty.SetPropertyIndexes( + index: 220, + originalValueIndex: 220, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToUriConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (string v) => ((object)new Uri(v, UriKind.RelativeOrAbsolute)).ToString(), + string (string v) => ((object)new Uri(v, UriKind.RelativeOrAbsolute)).ToString()), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (string v) => ((object)new Uri(v, UriKind.RelativeOrAbsolute)).ToString(), + string (string v) => ((object)new Uri(v, UriKind.RelativeOrAbsolute)).ToString()))); + + var timeOnly = runtimeEntityType.AddProperty( + "TimeOnly", + typeof(TimeOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new TimeOnly(0, 0, 0)); + timeOnly.SetGetter( + TimeOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnly(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnly(instance) == default(TimeOnly)); + timeOnly.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnly(instance) = value; + return instance; + }); + timeOnly.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnly(instance) = value; + return instance; + }); + timeOnly.SetAccessors( + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => entry.ReadOriginalValue(timeOnly, 221), + TimeOnly (IInternalEntry entry) => entry.GetCurrentValue(timeOnly)); + timeOnly.SetPropertyIndexes( + index: 221, + originalValueIndex: 221, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeOnly.TypeMapping = JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v)); + + var timeOnlyArray = runtimeEntityType.AddProperty( + "TimeOnlyArray", + typeof(TimeOnly[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + timeOnlyArray.SetGetter( + TimeOnly[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyArray(instance) == null); + timeOnlyArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly[] value) => + { + ManyTypesUnsafeAccessors.TimeOnlyArray(instance) = value; + return instance; + }); + timeOnlyArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly[] value) => + { + ManyTypesUnsafeAccessors.TimeOnlyArray(instance) = value; + return instance; + }); + timeOnlyArray.SetAccessors( + TimeOnly[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly[] (IInternalEntry entry) => entry.ReadOriginalValue(timeOnlyArray, 222), + TimeOnly[] (IInternalEntry entry) => entry.GetCurrentValue(timeOnlyArray)); + timeOnlyArray.SetPropertyIndexes( + index: 222, + originalValueIndex: 222, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeOnlyArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonTimeOnlyReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonTimeOnlyReaderWriter.Instance), + elementMapping: JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v))); + var timeOnlyArrayElementType = timeOnlyArray.SetElementType(typeof(TimeOnly)); + timeOnlyArrayElementType.TypeMapping = timeOnlyArray.TypeMapping.ElementTypeMapping; + + var timeOnlyToStringConverterProperty = runtimeEntityType.AddProperty( + "TimeOnlyToStringConverterProperty", + typeof(TimeOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnlyToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeOnlyToStringConverter()); + timeOnlyToStringConverterProperty.SetGetter( + TimeOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(instance) == default(TimeOnly)); + timeOnlyToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(instance) = value; + return instance; + }); + timeOnlyToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(instance) = value; + return instance; + }); + timeOnlyToStringConverterProperty.SetAccessors( + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => entry.ReadOriginalValue(timeOnlyToStringConverterProperty, 223), + TimeOnly (IInternalEntry entry) => entry.GetCurrentValue(timeOnlyToStringConverterProperty)); + timeOnlyToStringConverterProperty.SetPropertyIndexes( + index: 223, + originalValueIndex: 223, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeOnlyToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(48)", + size: 48), + converter: new ValueConverter( + string (TimeOnly v) => (v.Ticks % 10000000L == 0L ? string.Format(CultureInfo.InvariantCulture, "{0:HH\\:mm\\:ss}", ((object)v)) : v.ToString("o")), + TimeOnly (string v) => TimeOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (TimeOnly v) => (v.Ticks % 10000000L == 0L ? string.Format(CultureInfo.InvariantCulture, "{0:HH\\:mm\\:ss}", ((object)v)) : v.ToString("o")), + TimeOnly (string v) => TimeOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None)))); + timeOnlyToStringConverterProperty.SetSentinelFromProviderValue("00:00:00"); + + var timeOnlyToTicksConverterProperty = runtimeEntityType.AddProperty( + "TimeOnlyToTicksConverterProperty", + typeof(TimeOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnlyToTicksConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeOnlyToTicksConverter()); + timeOnlyToTicksConverterProperty.SetGetter( + TimeOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(instance) == default(TimeOnly)); + timeOnlyToTicksConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(instance) = value; + return instance; + }); + timeOnlyToTicksConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(instance) = value; + return instance; + }); + timeOnlyToTicksConverterProperty.SetAccessors( + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => entry.ReadOriginalValue(timeOnlyToTicksConverterProperty, 224), + TimeOnly (IInternalEntry entry) => entry.GetCurrentValue(timeOnlyToTicksConverterProperty)); + timeOnlyToTicksConverterProperty.SetPropertyIndexes( + index: 224, + originalValueIndex: 224, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeOnlyToTicksConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (TimeOnly v) => v.Ticks, + TimeOnly (long v) => new TimeOnly(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (TimeOnly v) => v.Ticks, + TimeOnly (long v) => new TimeOnly(v)))); + timeOnlyToTicksConverterProperty.SetSentinelFromProviderValue(0L); + + var timeSpan = runtimeEntityType.AddProperty( + "TimeSpan", + typeof(TimeSpan), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpan", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new TimeSpan(0, 0, 0, 0, 0)); + timeSpan.SetGetter( + TimeSpan (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpan(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpan(instance) == default(TimeSpan)); + timeSpan.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpan(instance) = value; + return instance; + }); + timeSpan.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpan(instance) = value; + return instance; + }); + timeSpan.SetAccessors( + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpan(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpan(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => entry.ReadOriginalValue(timeSpan, 225), + TimeSpan (IInternalEntry entry) => entry.GetCurrentValue(timeSpan)); + timeSpan.SetPropertyIndexes( + index: 225, + originalValueIndex: 225, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeSpan.TypeMapping = JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v)); + + var timeSpanArray = runtimeEntityType.AddProperty( + "TimeSpanArray", + typeof(TimeSpan[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpanArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + timeSpanArray.SetGetter( + TimeSpan[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanArray(instance) == null); + timeSpanArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan[] value) => + { + ManyTypesUnsafeAccessors.TimeSpanArray(instance) = value; + return instance; + }); + timeSpanArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan[] value) => + { + ManyTypesUnsafeAccessors.TimeSpanArray(instance) = value; + return instance; + }); + timeSpanArray.SetAccessors( + TimeSpan[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan[] (IInternalEntry entry) => entry.ReadOriginalValue(timeSpanArray, 226), + TimeSpan[] (IInternalEntry entry) => entry.GetCurrentValue(timeSpanArray)); + timeSpanArray.SetPropertyIndexes( + index: 226, + originalValueIndex: 226, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeSpanArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonTimeSpanReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonTimeSpanReaderWriter.Instance), + elementMapping: JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v))); + var timeSpanArrayElementType = timeSpanArray.SetElementType(typeof(TimeSpan)); + timeSpanArrayElementType.TypeMapping = timeSpanArray.TypeMapping.ElementTypeMapping; + + var timeSpanToStringConverterProperty = runtimeEntityType.AddProperty( + "TimeSpanToStringConverterProperty", + typeof(TimeSpan), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpanToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeSpanToStringConverter()); + timeSpanToStringConverterProperty.SetGetter( + TimeSpan (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(instance) == default(TimeSpan)); + timeSpanToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(instance) = value; + return instance; + }); + timeSpanToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(instance) = value; + return instance; + }); + timeSpanToStringConverterProperty.SetAccessors( + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => entry.ReadOriginalValue(timeSpanToStringConverterProperty, 227), + TimeSpan (IInternalEntry entry) => entry.GetCurrentValue(timeSpanToStringConverterProperty)); + timeSpanToStringConverterProperty.SetPropertyIndexes( + index: 227, + originalValueIndex: 227, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeSpanToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(48)", + size: 48), + converter: new ValueConverter( + string (TimeSpan v) => v.ToString("c"), + TimeSpan (string v) => TimeSpan.Parse(v, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (TimeSpan v) => v.ToString("c"), + TimeSpan (string v) => TimeSpan.Parse(v, CultureInfo.InvariantCulture)))); + timeSpanToStringConverterProperty.SetSentinelFromProviderValue("00:00:00"); + + var timeSpanToTicksConverterProperty = runtimeEntityType.AddProperty( + "TimeSpanToTicksConverterProperty", + typeof(TimeSpan), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpanToTicksConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeSpanToTicksConverter()); + timeSpanToTicksConverterProperty.SetGetter( + TimeSpan (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(instance) == default(TimeSpan)); + timeSpanToTicksConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(instance) = value; + return instance; + }); + timeSpanToTicksConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(instance) = value; + return instance; + }); + timeSpanToTicksConverterProperty.SetAccessors( + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => entry.ReadOriginalValue(timeSpanToTicksConverterProperty, 228), + TimeSpan (IInternalEntry entry) => entry.GetCurrentValue(timeSpanToTicksConverterProperty)); + timeSpanToTicksConverterProperty.SetPropertyIndexes( + index: 228, + originalValueIndex: 228, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeSpanToTicksConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (TimeSpan v) => v.Ticks, + TimeSpan (long v) => new TimeSpan(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (TimeSpan v) => v.Ticks, + TimeSpan (long v) => new TimeSpan(v)))); + timeSpanToTicksConverterProperty.SetSentinelFromProviderValue(0L); + + var uInt16 = runtimeEntityType.AddProperty( + "UInt16", + typeof(ushort), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt16.SetGetter( + ushort (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt16(instance) == 0); + uInt16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort value) => + { + ManyTypesUnsafeAccessors.UInt16(instance) = value; + return instance; + }); + uInt16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort value) => + { + ManyTypesUnsafeAccessors.UInt16(instance) = value; + return instance; + }); + uInt16.SetAccessors( + ushort (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort (IInternalEntry entry) => entry.ReadOriginalValue(uInt16, 229), + ushort (IInternalEntry entry) => entry.GetCurrentValue(uInt16)); + uInt16.SetPropertyIndexes( + index: 229, + originalValueIndex: 229, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt16.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + keyComparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)))); + uInt16.SetSentinelFromProviderValue(0); + + var uInt16Array = runtimeEntityType.AddProperty( + "UInt16Array", + typeof(ushort[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt16Array.SetGetter( + ushort[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt16Array(instance) == null); + uInt16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort[] value) => + { + ManyTypesUnsafeAccessors.UInt16Array(instance) = value; + return instance; + }); + uInt16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort[] value) => + { + ManyTypesUnsafeAccessors.UInt16Array(instance) = value; + return instance; + }); + uInt16Array.SetAccessors( + ushort[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort[] (IInternalEntry entry) => entry.ReadOriginalValue(uInt16Array, 230), + ushort[] (IInternalEntry entry) => entry.GetCurrentValue(uInt16Array)); + uInt16Array.SetPropertyIndexes( + index: 230, + originalValueIndex: 230, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + keyComparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v))))); + var uInt16ArrayElementType = uInt16Array.SetElementType(typeof(ushort)); + uInt16ArrayElementType.TypeMapping = uInt16Array.TypeMapping.ElementTypeMapping; + + var uInt32 = runtimeEntityType.AddProperty( + "UInt32", + typeof(uint), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt32.SetGetter( + uint (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt32(instance) == 0U); + uInt32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint value) => + { + ManyTypesUnsafeAccessors.UInt32(instance) = value; + return instance; + }); + uInt32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint value) => + { + ManyTypesUnsafeAccessors.UInt32(instance) = value; + return instance; + }); + uInt32.SetAccessors( + uint (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint (IInternalEntry entry) => entry.ReadOriginalValue(uInt32, 231), + uint (IInternalEntry entry) => entry.GetCurrentValue(uInt32)); + uInt32.SetPropertyIndexes( + index: 231, + originalValueIndex: 231, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt32.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + keyComparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)))); + uInt32.SetSentinelFromProviderValue(0L); + + var uInt32Array = runtimeEntityType.AddProperty( + "UInt32Array", + typeof(uint[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt32Array.SetGetter( + uint[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt32Array(instance) == null); + uInt32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint[] value) => + { + ManyTypesUnsafeAccessors.UInt32Array(instance) = value; + return instance; + }); + uInt32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint[] value) => + { + ManyTypesUnsafeAccessors.UInt32Array(instance) = value; + return instance; + }); + uInt32Array.SetAccessors( + uint[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint[] (IInternalEntry entry) => entry.ReadOriginalValue(uInt32Array, 232), + uint[] (IInternalEntry entry) => entry.GetCurrentValue(uInt32Array)); + uInt32Array.SetPropertyIndexes( + index: 232, + originalValueIndex: 232, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + keyComparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v))))); + var uInt32ArrayElementType = uInt32Array.SetElementType(typeof(uint)); + uInt32ArrayElementType.TypeMapping = uInt32Array.TypeMapping.ElementTypeMapping; + + var uInt64 = runtimeEntityType.AddProperty( + "UInt64", + typeof(ulong), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt64.SetGetter( + ulong (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt64(instance) == 0UL); + uInt64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong value) => + { + ManyTypesUnsafeAccessors.UInt64(instance) = value; + return instance; + }); + uInt64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong value) => + { + ManyTypesUnsafeAccessors.UInt64(instance) = value; + return instance; + }); + uInt64.SetAccessors( + ulong (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong (IInternalEntry entry) => entry.ReadOriginalValue(uInt64, 233), + ulong (IInternalEntry entry) => entry.GetCurrentValue(uInt64)); + uInt64.SetPropertyIndexes( + index: 233, + originalValueIndex: 233, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt64.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + keyComparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)))); + uInt64.SetSentinelFromProviderValue(0m); + + var uInt64Array = runtimeEntityType.AddProperty( + "UInt64Array", + typeof(ulong[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt64Array.SetGetter( + ulong[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt64Array(instance) == null); + uInt64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong[] value) => + { + ManyTypesUnsafeAccessors.UInt64Array(instance) = value; + return instance; + }); + uInt64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong[] value) => + { + ManyTypesUnsafeAccessors.UInt64Array(instance) = value; + return instance; + }); + uInt64Array.SetAccessors( + ulong[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong[] (IInternalEntry entry) => entry.ReadOriginalValue(uInt64Array, 234), + ulong[] (IInternalEntry entry) => entry.GetCurrentValue(uInt64Array)); + uInt64Array.SetPropertyIndexes( + index: 234, + originalValueIndex: 234, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + keyComparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v))))); + var uInt64ArrayElementType = uInt64Array.SetElementType(typeof(ulong)); + uInt64ArrayElementType.TypeMapping = uInt64Array.TypeMapping.ElementTypeMapping; + + var uInt8 = runtimeEntityType.AddProperty( + "UInt8", + typeof(byte), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: (byte)0); + uInt8.SetGetter( + byte (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt8(instance) == 0); + uInt8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte value) => + { + ManyTypesUnsafeAccessors.UInt8(instance) = value; + return instance; + }); + uInt8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte value) => + { + ManyTypesUnsafeAccessors.UInt8(instance) = value; + return instance; + }); + uInt8.SetAccessors( + byte (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte (IInternalEntry entry) => entry.ReadOriginalValue(uInt8, 235), + byte (IInternalEntry entry) => entry.GetCurrentValue(uInt8)); + uInt8.SetPropertyIndexes( + index: 235, + originalValueIndex: 235, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt8.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)); + + var uInt8Array = runtimeEntityType.AddProperty( + "UInt8Array", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt8Array.SetGetter( + byte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt8Array(instance) == null); + uInt8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.UInt8Array(instance) = value; + return instance; + }); + uInt8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.UInt8Array(instance) = value; + return instance; + }); + uInt8Array.SetAccessors( + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(uInt8Array, 236), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(uInt8Array)); + uInt8Array.SetPropertyIndexes( + index: 236, + originalValueIndex: 236, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt8Array.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + var uInt8ReadOnlyCollection = runtimeEntityType.AddProperty( + "UInt8ReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt8ReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_uInt8ReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt8ReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance) == null); + uInt8ReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance) = ((List)value); + return instance; + }); + uInt8ReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance) = ((List)value); + return instance; + }); + uInt8ReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(uInt8ReadOnlyCollection, 237), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(uInt8ReadOnlyCollection)); + uInt8ReadOnlyCollection.SetPropertyIndexes( + index: 237, + originalValueIndex: 237, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt8ReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var uInt8ReadOnlyCollectionElementType = uInt8ReadOnlyCollection.SetElementType(typeof(byte)); + uInt8ReadOnlyCollectionElementType.TypeMapping = uInt8ReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var uri = runtimeEntityType.AddProperty( + "Uri", + typeof(Uri), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Uri", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uri.SetGetter( + Uri (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Uri(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Uri(instance) == null); + uri.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.Uri(instance) = value; + return instance; + }); + uri.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.Uri(instance) = value; + return instance; + }); + uri.SetAccessors( + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.Uri(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.Uri(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => entry.ReadOriginalValue(uri, 238), + Uri (IInternalEntry entry) => entry.GetCurrentValue(uri)); + uri.SetPropertyIndexes( + index: 238, + originalValueIndex: 238, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uri.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))); + + var uriArray = runtimeEntityType.AddProperty( + "UriArray", + typeof(Uri[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UriArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uriArray.SetGetter( + Uri[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UriArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UriArray(instance) == null); + uriArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri[] value) => + { + ManyTypesUnsafeAccessors.UriArray(instance) = value; + return instance; + }); + uriArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri[] value) => + { + ManyTypesUnsafeAccessors.UriArray(instance) = value; + return instance; + }); + uriArray.SetAccessors( + Uri[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UriArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UriArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri[] (IInternalEntry entry) => entry.ReadOriginalValue(uriArray, 239), + Uri[] (IInternalEntry entry) => entry.GetCurrentValue(uriArray)); + uriArray.SetPropertyIndexes( + index: 239, + originalValueIndex: 239, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uriArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute))))); + var uriArrayElementType = uriArray.SetElementType(typeof(Uri)); + uriArrayElementType.TypeMapping = uriArray.TypeMapping.ElementTypeMapping; + + var uriToStringConverterProperty = runtimeEntityType.AddProperty( + "UriToStringConverterProperty", + typeof(Uri), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UriToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new UriToStringConverter()); + uriToStringConverterProperty.SetGetter( + Uri (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UriToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UriToStringConverterProperty(instance) == null); + uriToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.UriToStringConverterProperty(instance) = value; + return instance; + }); + uriToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.UriToStringConverterProperty(instance) = value; + return instance; + }); + uriToStringConverterProperty.SetAccessors( + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.UriToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.UriToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => entry.ReadOriginalValue(uriToStringConverterProperty, 240), + Uri (IInternalEntry entry) => entry.GetCurrentValue(uriToStringConverterProperty)); + uriToStringConverterProperty.SetPropertyIndexes( + index: 240, + originalValueIndex: 240, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uriToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))); + + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var @bool = runtimeEntityType.FindProperty("Bool"); + var boolArray = runtimeEntityType.FindProperty("BoolArray"); + var boolReadOnlyCollection = runtimeEntityType.FindProperty("BoolReadOnlyCollection"); + var boolToStringConverterProperty = runtimeEntityType.FindProperty("BoolToStringConverterProperty"); + var boolToTwoValuesConverterProperty = runtimeEntityType.FindProperty("BoolToTwoValuesConverterProperty"); + var boolToZeroOneConverterProperty = runtimeEntityType.FindProperty("BoolToZeroOneConverterProperty"); + var bytes = runtimeEntityType.FindProperty("Bytes"); + var bytesArray = runtimeEntityType.FindProperty("BytesArray"); + var bytesToStringConverterProperty = runtimeEntityType.FindProperty("BytesToStringConverterProperty"); + var castingConverterProperty = runtimeEntityType.FindProperty("CastingConverterProperty"); + var @char = runtimeEntityType.FindProperty("Char"); + var charArray = runtimeEntityType.FindProperty("CharArray"); + var charToStringConverterProperty = runtimeEntityType.FindProperty("CharToStringConverterProperty"); + var dateOnly = runtimeEntityType.FindProperty("DateOnly"); + var dateOnlyArray = runtimeEntityType.FindProperty("DateOnlyArray"); + var dateOnlyToStringConverterProperty = runtimeEntityType.FindProperty("DateOnlyToStringConverterProperty"); + var dateTime = runtimeEntityType.FindProperty("DateTime"); + var dateTimeArray = runtimeEntityType.FindProperty("DateTimeArray"); + var dateTimeOffsetToBinaryConverterProperty = runtimeEntityType.FindProperty("DateTimeOffsetToBinaryConverterProperty"); + var dateTimeOffsetToBytesConverterProperty = runtimeEntityType.FindProperty("DateTimeOffsetToBytesConverterProperty"); + var dateTimeOffsetToStringConverterProperty = runtimeEntityType.FindProperty("DateTimeOffsetToStringConverterProperty"); + var dateTimeToBinaryConverterProperty = runtimeEntityType.FindProperty("DateTimeToBinaryConverterProperty"); + var dateTimeToStringConverterProperty = runtimeEntityType.FindProperty("DateTimeToStringConverterProperty"); + var dateTimeToTicksConverterProperty = runtimeEntityType.FindProperty("DateTimeToTicksConverterProperty"); + var @decimal = runtimeEntityType.FindProperty("Decimal"); + var decimalArray = runtimeEntityType.FindProperty("DecimalArray"); + var decimalNumberToBytesConverterProperty = runtimeEntityType.FindProperty("DecimalNumberToBytesConverterProperty"); + var decimalNumberToStringConverterProperty = runtimeEntityType.FindProperty("DecimalNumberToStringConverterProperty"); + var @double = runtimeEntityType.FindProperty("Double"); + var doubleArray = runtimeEntityType.FindProperty("DoubleArray"); + var doubleNumberToBytesConverterProperty = runtimeEntityType.FindProperty("DoubleNumberToBytesConverterProperty"); + var doubleNumberToStringConverterProperty = runtimeEntityType.FindProperty("DoubleNumberToStringConverterProperty"); + var enum16 = runtimeEntityType.FindProperty("Enum16"); + var enum16Array = runtimeEntityType.FindProperty("Enum16Array"); + var enum16AsString = runtimeEntityType.FindProperty("Enum16AsString"); + var enum16AsStringArray = runtimeEntityType.FindProperty("Enum16AsStringArray"); + var enum16AsStringCollection = runtimeEntityType.FindProperty("Enum16AsStringCollection"); + var enum16Collection = runtimeEntityType.FindProperty("Enum16Collection"); + var enum32 = runtimeEntityType.FindProperty("Enum32"); + var enum32Array = runtimeEntityType.FindProperty("Enum32Array"); + var enum32AsString = runtimeEntityType.FindProperty("Enum32AsString"); + var enum32AsStringArray = runtimeEntityType.FindProperty("Enum32AsStringArray"); + var enum32AsStringCollection = runtimeEntityType.FindProperty("Enum32AsStringCollection"); + var enum32Collection = runtimeEntityType.FindProperty("Enum32Collection"); + var enum64 = runtimeEntityType.FindProperty("Enum64"); + var enum64Array = runtimeEntityType.FindProperty("Enum64Array"); + var enum64AsString = runtimeEntityType.FindProperty("Enum64AsString"); + var enum64AsStringArray = runtimeEntityType.FindProperty("Enum64AsStringArray"); + var enum64AsStringCollection = runtimeEntityType.FindProperty("Enum64AsStringCollection"); + var enum64Collection = runtimeEntityType.FindProperty("Enum64Collection"); + var enum8 = runtimeEntityType.FindProperty("Enum8"); + var enum8Array = runtimeEntityType.FindProperty("Enum8Array"); + var enum8AsString = runtimeEntityType.FindProperty("Enum8AsString"); + var enum8AsStringArray = runtimeEntityType.FindProperty("Enum8AsStringArray"); + var enum8AsStringCollection = runtimeEntityType.FindProperty("Enum8AsStringCollection"); + var enum8Collection = runtimeEntityType.FindProperty("Enum8Collection"); + var enumToNumberConverterProperty = runtimeEntityType.FindProperty("EnumToNumberConverterProperty"); + var enumToStringConverterProperty = runtimeEntityType.FindProperty("EnumToStringConverterProperty"); + var enumU16 = runtimeEntityType.FindProperty("EnumU16"); + var enumU16Array = runtimeEntityType.FindProperty("EnumU16Array"); + var enumU16AsString = runtimeEntityType.FindProperty("EnumU16AsString"); + var enumU16AsStringArray = runtimeEntityType.FindProperty("EnumU16AsStringArray"); + var enumU16AsStringCollection = runtimeEntityType.FindProperty("EnumU16AsStringCollection"); + var enumU16Collection = runtimeEntityType.FindProperty("EnumU16Collection"); + var enumU32 = runtimeEntityType.FindProperty("EnumU32"); + var enumU32Array = runtimeEntityType.FindProperty("EnumU32Array"); + var enumU32AsString = runtimeEntityType.FindProperty("EnumU32AsString"); + var enumU32AsStringArray = runtimeEntityType.FindProperty("EnumU32AsStringArray"); + var enumU32AsStringCollection = runtimeEntityType.FindProperty("EnumU32AsStringCollection"); + var enumU32Collection = runtimeEntityType.FindProperty("EnumU32Collection"); + var enumU64 = runtimeEntityType.FindProperty("EnumU64"); + var enumU64Array = runtimeEntityType.FindProperty("EnumU64Array"); + var enumU64AsString = runtimeEntityType.FindProperty("EnumU64AsString"); + var enumU64AsStringArray = runtimeEntityType.FindProperty("EnumU64AsStringArray"); + var enumU64AsStringCollection = runtimeEntityType.FindProperty("EnumU64AsStringCollection"); + var enumU64Collection = runtimeEntityType.FindProperty("EnumU64Collection"); + var enumU8 = runtimeEntityType.FindProperty("EnumU8"); + var enumU8Array = runtimeEntityType.FindProperty("EnumU8Array"); + var enumU8AsString = runtimeEntityType.FindProperty("EnumU8AsString"); + var enumU8AsStringArray = runtimeEntityType.FindProperty("EnumU8AsStringArray"); + var enumU8AsStringCollection = runtimeEntityType.FindProperty("EnumU8AsStringCollection"); + var enumU8Collection = runtimeEntityType.FindProperty("EnumU8Collection"); + var @float = runtimeEntityType.FindProperty("Float"); + var floatArray = runtimeEntityType.FindProperty("FloatArray"); + var guid = runtimeEntityType.FindProperty("Guid"); + var guidArray = runtimeEntityType.FindProperty("GuidArray"); + var guidToBytesConverterProperty = runtimeEntityType.FindProperty("GuidToBytesConverterProperty"); + var guidToStringConverterProperty = runtimeEntityType.FindProperty("GuidToStringConverterProperty"); + var iPAddress = runtimeEntityType.FindProperty("IPAddress"); + var iPAddressArray = runtimeEntityType.FindProperty("IPAddressArray"); + var iPAddressReadOnlyCollection = runtimeEntityType.FindProperty("IPAddressReadOnlyCollection"); + var iPAddressToBytesConverterProperty = runtimeEntityType.FindProperty("IPAddressToBytesConverterProperty"); + var iPAddressToStringConverterProperty = runtimeEntityType.FindProperty("IPAddressToStringConverterProperty"); + var int16 = runtimeEntityType.FindProperty("Int16"); + var int16Array = runtimeEntityType.FindProperty("Int16Array"); + var int32 = runtimeEntityType.FindProperty("Int32"); + var int32Array = runtimeEntityType.FindProperty("Int32Array"); + var int32ReadOnlyCollection = runtimeEntityType.FindProperty("Int32ReadOnlyCollection"); + var int64 = runtimeEntityType.FindProperty("Int64"); + var int64Array = runtimeEntityType.FindProperty("Int64Array"); + var int8 = runtimeEntityType.FindProperty("Int8"); + var int8Array = runtimeEntityType.FindProperty("Int8Array"); + var intNumberToBytesConverterProperty = runtimeEntityType.FindProperty("IntNumberToBytesConverterProperty"); + var intNumberToStringConverterProperty = runtimeEntityType.FindProperty("IntNumberToStringConverterProperty"); + var nullIntToNullStringConverterProperty = runtimeEntityType.FindProperty("NullIntToNullStringConverterProperty"); + var nullableBool = runtimeEntityType.FindProperty("NullableBool"); + var nullableBoolArray = runtimeEntityType.FindProperty("NullableBoolArray"); + var nullableBytes = runtimeEntityType.FindProperty("NullableBytes"); + var nullableBytesArray = runtimeEntityType.FindProperty("NullableBytesArray"); + var nullableChar = runtimeEntityType.FindProperty("NullableChar"); + var nullableCharArray = runtimeEntityType.FindProperty("NullableCharArray"); + var nullableDateOnly = runtimeEntityType.FindProperty("NullableDateOnly"); + var nullableDateOnlyArray = runtimeEntityType.FindProperty("NullableDateOnlyArray"); + var nullableDateTime = runtimeEntityType.FindProperty("NullableDateTime"); + var nullableDateTimeArray = runtimeEntityType.FindProperty("NullableDateTimeArray"); + var nullableDecimal = runtimeEntityType.FindProperty("NullableDecimal"); + var nullableDecimalArray = runtimeEntityType.FindProperty("NullableDecimalArray"); + var nullableDouble = runtimeEntityType.FindProperty("NullableDouble"); + var nullableDoubleArray = runtimeEntityType.FindProperty("NullableDoubleArray"); + var nullableEnum16 = runtimeEntityType.FindProperty("NullableEnum16"); + var nullableEnum16Array = runtimeEntityType.FindProperty("NullableEnum16Array"); + var nullableEnum16AsString = runtimeEntityType.FindProperty("NullableEnum16AsString"); + var nullableEnum16AsStringArray = runtimeEntityType.FindProperty("NullableEnum16AsStringArray"); + var nullableEnum16AsStringCollection = runtimeEntityType.FindProperty("NullableEnum16AsStringCollection"); + var nullableEnum16Collection = runtimeEntityType.FindProperty("NullableEnum16Collection"); + var nullableEnum32 = runtimeEntityType.FindProperty("NullableEnum32"); + var nullableEnum32Array = runtimeEntityType.FindProperty("NullableEnum32Array"); + var nullableEnum32AsString = runtimeEntityType.FindProperty("NullableEnum32AsString"); + var nullableEnum32AsStringArray = runtimeEntityType.FindProperty("NullableEnum32AsStringArray"); + var nullableEnum32AsStringCollection = runtimeEntityType.FindProperty("NullableEnum32AsStringCollection"); + var nullableEnum32Collection = runtimeEntityType.FindProperty("NullableEnum32Collection"); + var nullableEnum64 = runtimeEntityType.FindProperty("NullableEnum64"); + var nullableEnum64Array = runtimeEntityType.FindProperty("NullableEnum64Array"); + var nullableEnum64AsString = runtimeEntityType.FindProperty("NullableEnum64AsString"); + var nullableEnum64AsStringArray = runtimeEntityType.FindProperty("NullableEnum64AsStringArray"); + var nullableEnum64AsStringCollection = runtimeEntityType.FindProperty("NullableEnum64AsStringCollection"); + var nullableEnum64Collection = runtimeEntityType.FindProperty("NullableEnum64Collection"); + var nullableEnum8 = runtimeEntityType.FindProperty("NullableEnum8"); + var nullableEnum8Array = runtimeEntityType.FindProperty("NullableEnum8Array"); + var nullableEnum8AsString = runtimeEntityType.FindProperty("NullableEnum8AsString"); + var nullableEnum8AsStringArray = runtimeEntityType.FindProperty("NullableEnum8AsStringArray"); + var nullableEnum8AsStringCollection = runtimeEntityType.FindProperty("NullableEnum8AsStringCollection"); + var nullableEnum8Collection = runtimeEntityType.FindProperty("NullableEnum8Collection"); + var nullableEnumU16 = runtimeEntityType.FindProperty("NullableEnumU16"); + var nullableEnumU16Array = runtimeEntityType.FindProperty("NullableEnumU16Array"); + var nullableEnumU16AsString = runtimeEntityType.FindProperty("NullableEnumU16AsString"); + var nullableEnumU16AsStringArray = runtimeEntityType.FindProperty("NullableEnumU16AsStringArray"); + var nullableEnumU16AsStringCollection = runtimeEntityType.FindProperty("NullableEnumU16AsStringCollection"); + var nullableEnumU16Collection = runtimeEntityType.FindProperty("NullableEnumU16Collection"); + var nullableEnumU32 = runtimeEntityType.FindProperty("NullableEnumU32"); + var nullableEnumU32Array = runtimeEntityType.FindProperty("NullableEnumU32Array"); + var nullableEnumU32AsString = runtimeEntityType.FindProperty("NullableEnumU32AsString"); + var nullableEnumU32AsStringArray = runtimeEntityType.FindProperty("NullableEnumU32AsStringArray"); + var nullableEnumU32AsStringCollection = runtimeEntityType.FindProperty("NullableEnumU32AsStringCollection"); + var nullableEnumU32Collection = runtimeEntityType.FindProperty("NullableEnumU32Collection"); + var nullableEnumU64 = runtimeEntityType.FindProperty("NullableEnumU64"); + var nullableEnumU64Array = runtimeEntityType.FindProperty("NullableEnumU64Array"); + var nullableEnumU64AsString = runtimeEntityType.FindProperty("NullableEnumU64AsString"); + var nullableEnumU64AsStringArray = runtimeEntityType.FindProperty("NullableEnumU64AsStringArray"); + var nullableEnumU64AsStringCollection = runtimeEntityType.FindProperty("NullableEnumU64AsStringCollection"); + var nullableEnumU64Collection = runtimeEntityType.FindProperty("NullableEnumU64Collection"); + var nullableEnumU8 = runtimeEntityType.FindProperty("NullableEnumU8"); + var nullableEnumU8Array = runtimeEntityType.FindProperty("NullableEnumU8Array"); + var nullableEnumU8AsString = runtimeEntityType.FindProperty("NullableEnumU8AsString"); + var nullableEnumU8AsStringArray = runtimeEntityType.FindProperty("NullableEnumU8AsStringArray"); + var nullableEnumU8AsStringCollection = runtimeEntityType.FindProperty("NullableEnumU8AsStringCollection"); + var nullableEnumU8Collection = runtimeEntityType.FindProperty("NullableEnumU8Collection"); + var nullableFloat = runtimeEntityType.FindProperty("NullableFloat"); + var nullableFloatArray = runtimeEntityType.FindProperty("NullableFloatArray"); + var nullableGuid = runtimeEntityType.FindProperty("NullableGuid"); + var nullableGuidArray = runtimeEntityType.FindProperty("NullableGuidArray"); + var nullableIPAddress = runtimeEntityType.FindProperty("NullableIPAddress"); + var nullableIPAddressArray = runtimeEntityType.FindProperty("NullableIPAddressArray"); + var nullableInt16 = runtimeEntityType.FindProperty("NullableInt16"); + var nullableInt16Array = runtimeEntityType.FindProperty("NullableInt16Array"); + var nullableInt32 = runtimeEntityType.FindProperty("NullableInt32"); + var nullableInt32Array = runtimeEntityType.FindProperty("NullableInt32Array"); + var nullableInt64 = runtimeEntityType.FindProperty("NullableInt64"); + var nullableInt64Array = runtimeEntityType.FindProperty("NullableInt64Array"); + var nullableInt8 = runtimeEntityType.FindProperty("NullableInt8"); + var nullableInt8Array = runtimeEntityType.FindProperty("NullableInt8Array"); + var nullablePhysicalAddress = runtimeEntityType.FindProperty("NullablePhysicalAddress"); + var nullablePhysicalAddressArray = runtimeEntityType.FindProperty("NullablePhysicalAddressArray"); + var nullableString = runtimeEntityType.FindProperty("NullableString"); + var nullableStringArray = runtimeEntityType.FindProperty("NullableStringArray"); + var nullableTimeOnly = runtimeEntityType.FindProperty("NullableTimeOnly"); + var nullableTimeOnlyArray = runtimeEntityType.FindProperty("NullableTimeOnlyArray"); + var nullableTimeSpan = runtimeEntityType.FindProperty("NullableTimeSpan"); + var nullableTimeSpanArray = runtimeEntityType.FindProperty("NullableTimeSpanArray"); + var nullableUInt16 = runtimeEntityType.FindProperty("NullableUInt16"); + var nullableUInt16Array = runtimeEntityType.FindProperty("NullableUInt16Array"); + var nullableUInt32 = runtimeEntityType.FindProperty("NullableUInt32"); + var nullableUInt32Array = runtimeEntityType.FindProperty("NullableUInt32Array"); + var nullableUInt64 = runtimeEntityType.FindProperty("NullableUInt64"); + var nullableUInt64Array = runtimeEntityType.FindProperty("NullableUInt64Array"); + var nullableUInt8 = runtimeEntityType.FindProperty("NullableUInt8"); + var nullableUInt8Array = runtimeEntityType.FindProperty("NullableUInt8Array"); + var nullableUri = runtimeEntityType.FindProperty("NullableUri"); + var nullableUriArray = runtimeEntityType.FindProperty("NullableUriArray"); + var physicalAddress = runtimeEntityType.FindProperty("PhysicalAddress"); + var physicalAddressArray = runtimeEntityType.FindProperty("PhysicalAddressArray"); + var physicalAddressToBytesConverterProperty = runtimeEntityType.FindProperty("PhysicalAddressToBytesConverterProperty"); + var physicalAddressToStringConverterProperty = runtimeEntityType.FindProperty("PhysicalAddressToStringConverterProperty"); + var @string = runtimeEntityType.FindProperty("String"); + var stringArray = runtimeEntityType.FindProperty("StringArray"); + var stringReadOnlyCollection = runtimeEntityType.FindProperty("StringReadOnlyCollection"); + var stringToBoolConverterProperty = runtimeEntityType.FindProperty("StringToBoolConverterProperty"); + var stringToBytesConverterProperty = runtimeEntityType.FindProperty("StringToBytesConverterProperty"); + var stringToCharConverterProperty = runtimeEntityType.FindProperty("StringToCharConverterProperty"); + var stringToDateOnlyConverterProperty = runtimeEntityType.FindProperty("StringToDateOnlyConverterProperty"); + var stringToDateTimeConverterProperty = runtimeEntityType.FindProperty("StringToDateTimeConverterProperty"); + var stringToDateTimeOffsetConverterProperty = runtimeEntityType.FindProperty("StringToDateTimeOffsetConverterProperty"); + var stringToDecimalNumberConverterProperty = runtimeEntityType.FindProperty("StringToDecimalNumberConverterProperty"); + var stringToDoubleNumberConverterProperty = runtimeEntityType.FindProperty("StringToDoubleNumberConverterProperty"); + var stringToEnumConverterProperty = runtimeEntityType.FindProperty("StringToEnumConverterProperty"); + var stringToGuidConverterProperty = runtimeEntityType.FindProperty("StringToGuidConverterProperty"); + var stringToIntNumberConverterProperty = runtimeEntityType.FindProperty("StringToIntNumberConverterProperty"); + var stringToTimeOnlyConverterProperty = runtimeEntityType.FindProperty("StringToTimeOnlyConverterProperty"); + var stringToTimeSpanConverterProperty = runtimeEntityType.FindProperty("StringToTimeSpanConverterProperty"); + var stringToUriConverterProperty = runtimeEntityType.FindProperty("StringToUriConverterProperty"); + var timeOnly = runtimeEntityType.FindProperty("TimeOnly"); + var timeOnlyArray = runtimeEntityType.FindProperty("TimeOnlyArray"); + var timeOnlyToStringConverterProperty = runtimeEntityType.FindProperty("TimeOnlyToStringConverterProperty"); + var timeOnlyToTicksConverterProperty = runtimeEntityType.FindProperty("TimeOnlyToTicksConverterProperty"); + var timeSpan = runtimeEntityType.FindProperty("TimeSpan"); + var timeSpanArray = runtimeEntityType.FindProperty("TimeSpanArray"); + var timeSpanToStringConverterProperty = runtimeEntityType.FindProperty("TimeSpanToStringConverterProperty"); + var timeSpanToTicksConverterProperty = runtimeEntityType.FindProperty("TimeSpanToTicksConverterProperty"); + var uInt16 = runtimeEntityType.FindProperty("UInt16"); + var uInt16Array = runtimeEntityType.FindProperty("UInt16Array"); + var uInt32 = runtimeEntityType.FindProperty("UInt32"); + var uInt32Array = runtimeEntityType.FindProperty("UInt32Array"); + var uInt64 = runtimeEntityType.FindProperty("UInt64"); + var uInt64Array = runtimeEntityType.FindProperty("UInt64Array"); + var uInt8 = runtimeEntityType.FindProperty("UInt8"); + var uInt8Array = runtimeEntityType.FindProperty("UInt8Array"); + var uInt8ReadOnlyCollection = runtimeEntityType.FindProperty("UInt8ReadOnlyCollection"); + var uri = runtimeEntityType.FindProperty("Uri"); + var uriArray = runtimeEntityType.FindProperty("UriArray"); + var uriToStringConverterProperty = runtimeEntityType.FindProperty("UriToStringConverterProperty"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNonNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg = ((ISnapshot)(new Snapshot, bool, bool, bool, byte[], byte[][], byte[], int, char, char[], char, DateOnly, DateOnly[], DateOnly, DateTime, DateTime[], DateTimeOffset, DateTimeOffset, DateTimeOffset, DateTime, DateTime, DateTime, decimal, decimal[], decimal, decimal, double>(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id)), ((ValueComparer)(((IProperty)@bool).GetValueComparer())).Snapshot(source.GetCurrentValue(@bool)), (((IEnumerable)(source.GetCurrentValue(boolArray))) == null ? null : ((bool[])(((ValueComparer>)(((IProperty)boolArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(boolArray))))))), (((IEnumerable)(source.GetCurrentValue>(boolReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer>)(((IProperty)boolReadOnlyCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(boolReadOnlyCollection))))))), ((ValueComparer)(((IProperty)boolToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(boolToStringConverterProperty)), ((ValueComparer)(((IProperty)boolToTwoValuesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(boolToTwoValuesConverterProperty)), ((ValueComparer)(((IProperty)boolToZeroOneConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(boolToZeroOneConverterProperty)), (source.GetCurrentValue(bytes) == null ? null : ((ValueComparer)(((IProperty)bytes).GetValueComparer())).Snapshot(source.GetCurrentValue(bytes))), (((object)(source.GetCurrentValue(bytesArray))) == null ? null : ((byte[][])(((ValueComparer)(((IProperty)bytesArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(bytesArray))))))), (source.GetCurrentValue(bytesToStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)bytesToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(bytesToStringConverterProperty))), ((ValueComparer)(((IProperty)castingConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(castingConverterProperty)), ((ValueComparer)(((IProperty)@char).GetValueComparer())).Snapshot(source.GetCurrentValue(@char)), (((IEnumerable)(source.GetCurrentValue(charArray))) == null ? null : ((char[])(((ValueComparer>)(((IProperty)charArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(charArray))))))), ((ValueComparer)(((IProperty)charToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(charToStringConverterProperty)), ((ValueComparer)(((IProperty)dateOnly).GetValueComparer())).Snapshot(source.GetCurrentValue(dateOnly)), (((IEnumerable)(source.GetCurrentValue(dateOnlyArray))) == null ? null : ((DateOnly[])(((ValueComparer>)(((IProperty)dateOnlyArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(dateOnlyArray))))))), ((ValueComparer)(((IProperty)dateOnlyToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateOnlyToStringConverterProperty)), ((ValueComparer)(((IProperty)dateTime).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTime)), (((IEnumerable)(source.GetCurrentValue(dateTimeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)dateTimeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(dateTimeArray))))))), ((ValueComparer)(((IProperty)dateTimeOffsetToBinaryConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeOffsetToBinaryConverterProperty)), ((ValueComparer)(((IProperty)dateTimeOffsetToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeOffsetToBytesConverterProperty)), ((ValueComparer)(((IProperty)dateTimeOffsetToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeOffsetToStringConverterProperty)), ((ValueComparer)(((IProperty)dateTimeToBinaryConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeToBinaryConverterProperty)), ((ValueComparer)(((IProperty)dateTimeToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeToStringConverterProperty)), ((ValueComparer)(((IProperty)dateTimeToTicksConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeToTicksConverterProperty)), ((ValueComparer)(((IProperty)@decimal).GetValueComparer())).Snapshot(source.GetCurrentValue(@decimal)), (((IEnumerable)(source.GetCurrentValue(decimalArray))) == null ? null : ((decimal[])(((ValueComparer>)(((IProperty)decimalArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(decimalArray))))))), ((ValueComparer)(((IProperty)decimalNumberToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(decimalNumberToBytesConverterProperty)), ((ValueComparer)(((IProperty)decimalNumberToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(decimalNumberToStringConverterProperty)), ((ValueComparer)(((IProperty)@double).GetValueComparer())).Snapshot(source.GetCurrentValue(@double))))); + var structuralType0 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg0 = ((ISnapshot)(new Snapshot, List, CompiledModelTestBase.Enum32, CompiledModelTestBase.Enum32[], CompiledModelTestBase.Enum32, CompiledModelTestBase.Enum32[], List, List, CompiledModelTestBase.Enum64, CompiledModelTestBase.Enum64[], CompiledModelTestBase.Enum64, CompiledModelTestBase.Enum64[], List, List, CompiledModelTestBase.Enum8, CompiledModelTestBase.Enum8[], CompiledModelTestBase.Enum8, CompiledModelTestBase.Enum8[], List, List, CompiledModelTestBase.Enum32, CompiledModelTestBase.Enum32, CompiledModelTestBase.EnumU16>((((IEnumerable)(source.GetCurrentValue(doubleArray))) == null ? null : ((double[])(((ValueComparer>)(((IProperty)doubleArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(doubleArray))))))), ((ValueComparer)(((IProperty)doubleNumberToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(doubleNumberToBytesConverterProperty)), ((ValueComparer)(((IProperty)doubleNumberToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(doubleNumberToStringConverterProperty)), ((ValueComparer)(((IProperty)enum16).GetValueComparer())).Snapshot(source.GetCurrentValue(enum16)), (((IEnumerable)(source.GetCurrentValue(enum16Array))) == null ? null : ((CompiledModelTestBase.Enum16[])(((ValueComparer>)(((IProperty)enum16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum16Array))))))), ((ValueComparer)(((IProperty)enum16AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enum16AsString)), (((IEnumerable)(source.GetCurrentValue(enum16AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum16[])(((ValueComparer>)(((IProperty)enum16AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum16AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enum16AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum16AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum16AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enum16Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum16Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum16Collection))))))), ((ValueComparer)(((IProperty)enum32).GetValueComparer())).Snapshot(source.GetCurrentValue(enum32)), (((IEnumerable)(source.GetCurrentValue(enum32Array))) == null ? null : ((CompiledModelTestBase.Enum32[])(((ValueComparer>)(((IProperty)enum32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum32Array))))))), ((ValueComparer)(((IProperty)enum32AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enum32AsString)), (((IEnumerable)(source.GetCurrentValue(enum32AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum32[])(((ValueComparer>)(((IProperty)enum32AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum32AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enum32AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum32AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum32AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enum32Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum32Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum32Collection))))))), ((ValueComparer)(((IProperty)enum64).GetValueComparer())).Snapshot(source.GetCurrentValue(enum64)), (((IEnumerable)(source.GetCurrentValue(enum64Array))) == null ? null : ((CompiledModelTestBase.Enum64[])(((ValueComparer>)(((IProperty)enum64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum64Array))))))), ((ValueComparer)(((IProperty)enum64AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enum64AsString)), (((IEnumerable)(source.GetCurrentValue(enum64AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum64[])(((ValueComparer>)(((IProperty)enum64AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum64AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enum64AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum64AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum64AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enum64Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum64Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum64Collection))))))), ((ValueComparer)(((IProperty)enum8).GetValueComparer())).Snapshot(source.GetCurrentValue(enum8)), (((IEnumerable)(source.GetCurrentValue(enum8Array))) == null ? null : ((CompiledModelTestBase.Enum8[])(((ValueComparer>)(((IProperty)enum8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum8Array))))))), ((ValueComparer)(((IProperty)enum8AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enum8AsString)), (((IEnumerable)(source.GetCurrentValue(enum8AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum8[])(((ValueComparer>)(((IProperty)enum8AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum8AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enum8AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum8AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum8AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enum8Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum8Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum8Collection))))))), ((ValueComparer)(((IProperty)enumToNumberConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(enumToNumberConverterProperty)), ((ValueComparer)(((IProperty)enumToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(enumToStringConverterProperty)), ((ValueComparer)(((IProperty)enumU16).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU16))))); + var structuralType1 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg1 = ((ISnapshot)(new Snapshot, List, CompiledModelTestBase.EnumU32, CompiledModelTestBase.EnumU32[], CompiledModelTestBase.EnumU32, CompiledModelTestBase.EnumU32[], List, List, CompiledModelTestBase.EnumU64, CompiledModelTestBase.EnumU64[], CompiledModelTestBase.EnumU64, CompiledModelTestBase.EnumU64[], List, List, CompiledModelTestBase.EnumU8, CompiledModelTestBase.EnumU8[], CompiledModelTestBase.EnumU8, CompiledModelTestBase.EnumU8[], List, List, float, float[], Guid, Guid[], Guid, Guid, IPAddress>((((IEnumerable)(source.GetCurrentValue(enumU16Array))) == null ? null : ((CompiledModelTestBase.EnumU16[])(((ValueComparer>)(((IProperty)enumU16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU16Array))))))), ((ValueComparer)(((IProperty)enumU16AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU16AsString)), (((IEnumerable)(source.GetCurrentValue(enumU16AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU16[])(((ValueComparer>)(((IProperty)enumU16AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU16AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enumU16AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU16AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU16AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enumU16Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU16Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU16Collection))))))), ((ValueComparer)(((IProperty)enumU32).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU32)), (((IEnumerable)(source.GetCurrentValue(enumU32Array))) == null ? null : ((CompiledModelTestBase.EnumU32[])(((ValueComparer>)(((IProperty)enumU32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU32Array))))))), ((ValueComparer)(((IProperty)enumU32AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU32AsString)), (((IEnumerable)(source.GetCurrentValue(enumU32AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU32[])(((ValueComparer>)(((IProperty)enumU32AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU32AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enumU32AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU32AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU32AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enumU32Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU32Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU32Collection))))))), ((ValueComparer)(((IProperty)enumU64).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU64)), (((IEnumerable)(source.GetCurrentValue(enumU64Array))) == null ? null : ((CompiledModelTestBase.EnumU64[])(((ValueComparer>)(((IProperty)enumU64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU64Array))))))), ((ValueComparer)(((IProperty)enumU64AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU64AsString)), (((IEnumerable)(source.GetCurrentValue(enumU64AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU64[])(((ValueComparer>)(((IProperty)enumU64AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU64AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enumU64AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU64AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU64AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enumU64Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU64Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU64Collection))))))), ((ValueComparer)(((IProperty)enumU8).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU8)), (((IEnumerable)(source.GetCurrentValue(enumU8Array))) == null ? null : ((CompiledModelTestBase.EnumU8[])(((ValueComparer>)(((IProperty)enumU8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU8Array))))))), ((ValueComparer)(((IProperty)enumU8AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU8AsString)), (((IEnumerable)(source.GetCurrentValue(enumU8AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU8[])(((ValueComparer>)(((IProperty)enumU8AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU8AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enumU8AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU8AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU8AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enumU8Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU8Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU8Collection))))))), ((ValueComparer)(((IProperty)@float).GetValueComparer())).Snapshot(source.GetCurrentValue(@float)), (((IEnumerable)(source.GetCurrentValue(floatArray))) == null ? null : ((float[])(((ValueComparer>)(((IProperty)floatArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(floatArray))))))), ((ValueComparer)(((IProperty)guid).GetValueComparer())).Snapshot(source.GetCurrentValue(guid)), (((IEnumerable)(source.GetCurrentValue(guidArray))) == null ? null : ((Guid[])(((ValueComparer>)(((IProperty)guidArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(guidArray))))))), ((ValueComparer)(((IProperty)guidToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(guidToBytesConverterProperty)), ((ValueComparer)(((IProperty)guidToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(guidToStringConverterProperty)), (source.GetCurrentValue(iPAddress) == null ? null : ((ValueComparer)(((IProperty)iPAddress).GetValueComparer())).Snapshot(source.GetCurrentValue(iPAddress)))))); + var structuralType2 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg2 = ((ISnapshot)(new Snapshot, IPAddress, IPAddress, short, short[], int, int[], IReadOnlyCollection, long, long[], sbyte, sbyte[], int, int, int?, bool?, bool? [], byte[], byte[][], char?, char? [], DateOnly?, DateOnly? [], DateTime?, DateTime? [], decimal?, decimal? [], double?, double? []>((((object)(source.GetCurrentValue(iPAddressArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)iPAddressArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(iPAddressArray))))))), (((object)(source.GetCurrentValue>(iPAddressReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer)(((IProperty)iPAddressReadOnlyCollection).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(iPAddressReadOnlyCollection))))))), (source.GetCurrentValue(iPAddressToBytesConverterProperty) == null ? null : ((ValueComparer)(((IProperty)iPAddressToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(iPAddressToBytesConverterProperty))), (source.GetCurrentValue(iPAddressToStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)iPAddressToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(iPAddressToStringConverterProperty))), ((ValueComparer)(((IProperty)int16).GetValueComparer())).Snapshot(source.GetCurrentValue(int16)), (((IEnumerable)(source.GetCurrentValue(int16Array))) == null ? null : ((short[])(((ValueComparer>)(((IProperty)int16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(int16Array))))))), ((ValueComparer)(((IProperty)int32).GetValueComparer())).Snapshot(source.GetCurrentValue(int32)), (((IEnumerable)(source.GetCurrentValue(int32Array))) == null ? null : ((int[])(((ValueComparer>)(((IProperty)int32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(int32Array))))))), (((IEnumerable)(source.GetCurrentValue>(int32ReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer>)(((IProperty)int32ReadOnlyCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(int32ReadOnlyCollection))))))), ((ValueComparer)(((IProperty)int64).GetValueComparer())).Snapshot(source.GetCurrentValue(int64)), (((IEnumerable)(source.GetCurrentValue(int64Array))) == null ? null : ((long[])(((ValueComparer>)(((IProperty)int64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(int64Array))))))), ((ValueComparer)(((IProperty)int8).GetValueComparer())).Snapshot(source.GetCurrentValue(int8)), (((IEnumerable)(source.GetCurrentValue(int8Array))) == null ? null : ((sbyte[])(((ValueComparer>)(((IProperty)int8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(int8Array))))))), ((ValueComparer)(((IProperty)intNumberToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(intNumberToBytesConverterProperty)), ((ValueComparer)(((IProperty)intNumberToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(intNumberToStringConverterProperty)), (source.GetCurrentValue(nullIntToNullStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)nullIntToNullStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(nullIntToNullStringConverterProperty))), (source.GetCurrentValue(nullableBool) == null ? null : ((ValueComparer)(((IProperty)nullableBool).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableBool))), (((IEnumerable)(source.GetCurrentValue(nullableBoolArray))) == null ? null : ((bool? [])(((ValueComparer>)(((IProperty)nullableBoolArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableBoolArray))))))), (source.GetCurrentValue(nullableBytes) == null ? null : ((ValueComparer)(((IProperty)nullableBytes).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableBytes))), (((object)(source.GetCurrentValue(nullableBytesArray))) == null ? null : ((byte[][])(((ValueComparer)(((IProperty)nullableBytesArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullableBytesArray))))))), (source.GetCurrentValue(nullableChar) == null ? null : ((ValueComparer)(((IProperty)nullableChar).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableChar))), (((IEnumerable)(source.GetCurrentValue(nullableCharArray))) == null ? null : ((char? [])(((ValueComparer>)(((IProperty)nullableCharArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableCharArray))))))), (source.GetCurrentValue(nullableDateOnly) == null ? null : ((ValueComparer)(((IProperty)nullableDateOnly).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableDateOnly))), (((IEnumerable)(source.GetCurrentValue(nullableDateOnlyArray))) == null ? null : ((DateOnly? [])(((ValueComparer>)(((IProperty)nullableDateOnlyArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableDateOnlyArray))))))), (source.GetCurrentValue(nullableDateTime) == null ? null : ((ValueComparer)(((IProperty)nullableDateTime).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableDateTime))), (((IEnumerable)(source.GetCurrentValue(nullableDateTimeArray))) == null ? null : ((DateTime? [])(((ValueComparer>)(((IProperty)nullableDateTimeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableDateTimeArray))))))), (source.GetCurrentValue(nullableDecimal) == null ? null : ((ValueComparer)(((IProperty)nullableDecimal).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableDecimal))), (((IEnumerable)(source.GetCurrentValue(nullableDecimalArray))) == null ? null : ((decimal? [])(((ValueComparer>)(((IProperty)nullableDecimalArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableDecimalArray))))))), (source.GetCurrentValue(nullableDouble) == null ? null : ((ValueComparer)(((IProperty)nullableDouble).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableDouble))), (((IEnumerable)(source.GetCurrentValue(nullableDoubleArray))) == null ? null : ((double? [])(((ValueComparer>)(((IProperty)nullableDoubleArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableDoubleArray)))))))))); + var structuralType3 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg3 = ((ISnapshot)(new Snapshot, List, CompiledModelTestBase.Enum32?, CompiledModelTestBase.Enum32? [], CompiledModelTestBase.Enum32?, CompiledModelTestBase.Enum32? [], List, List, CompiledModelTestBase.Enum64?, CompiledModelTestBase.Enum64? [], CompiledModelTestBase.Enum64?, CompiledModelTestBase.Enum64? [], List, List, CompiledModelTestBase.Enum8?, CompiledModelTestBase.Enum8? [], CompiledModelTestBase.Enum8?, CompiledModelTestBase.Enum8? [], List, List, CompiledModelTestBase.EnumU16?, CompiledModelTestBase.EnumU16? [], CompiledModelTestBase.EnumU16?, CompiledModelTestBase.EnumU16? [], List, List>((source.GetCurrentValue(nullableEnum16) == null ? null : ((ValueComparer)(((IProperty)nullableEnum16).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum16))), (((IEnumerable)(source.GetCurrentValue(nullableEnum16Array))) == null ? null : ((CompiledModelTestBase.Enum16? [])(((ValueComparer>)(((IProperty)nullableEnum16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum16Array))))))), (source.GetCurrentValue(nullableEnum16AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnum16AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum16AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnum16AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum16? [])(((ValueComparer>)(((IProperty)nullableEnum16AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum16AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum16AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum16AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum16AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum16Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum16Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum16Collection))))))), (source.GetCurrentValue(nullableEnum32) == null ? null : ((ValueComparer)(((IProperty)nullableEnum32).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum32))), (((IEnumerable)(source.GetCurrentValue(nullableEnum32Array))) == null ? null : ((CompiledModelTestBase.Enum32? [])(((ValueComparer>)(((IProperty)nullableEnum32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum32Array))))))), (source.GetCurrentValue(nullableEnum32AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnum32AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum32AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnum32AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum32? [])(((ValueComparer>)(((IProperty)nullableEnum32AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum32AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum32AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum32AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum32AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum32Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum32Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum32Collection))))))), (source.GetCurrentValue(nullableEnum64) == null ? null : ((ValueComparer)(((IProperty)nullableEnum64).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum64))), (((IEnumerable)(source.GetCurrentValue(nullableEnum64Array))) == null ? null : ((CompiledModelTestBase.Enum64? [])(((ValueComparer>)(((IProperty)nullableEnum64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum64Array))))))), (source.GetCurrentValue(nullableEnum64AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnum64AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum64AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnum64AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum64? [])(((ValueComparer>)(((IProperty)nullableEnum64AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum64AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum64AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum64AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum64AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum64Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum64Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum64Collection))))))), (source.GetCurrentValue(nullableEnum8) == null ? null : ((ValueComparer)(((IProperty)nullableEnum8).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum8))), (((IEnumerable)(source.GetCurrentValue(nullableEnum8Array))) == null ? null : ((CompiledModelTestBase.Enum8? [])(((ValueComparer>)(((IProperty)nullableEnum8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum8Array))))))), (source.GetCurrentValue(nullableEnum8AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnum8AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum8AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnum8AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum8? [])(((ValueComparer>)(((IProperty)nullableEnum8AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum8AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum8AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum8AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum8AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum8Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum8Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum8Collection))))))), (source.GetCurrentValue(nullableEnumU16) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU16).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU16))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU16Array))) == null ? null : ((CompiledModelTestBase.EnumU16? [])(((ValueComparer>)(((IProperty)nullableEnumU16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU16Array))))))), (source.GetCurrentValue(nullableEnumU16AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU16AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU16AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU16AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU16? [])(((ValueComparer>)(((IProperty)nullableEnumU16AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU16AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU16AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU16AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU16AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU16Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU16Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU16Collection)))))))))); + var structuralType4 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg4 = ((ISnapshot)(new Snapshot, List, CompiledModelTestBase.EnumU64?, CompiledModelTestBase.EnumU64? [], CompiledModelTestBase.EnumU64?, CompiledModelTestBase.EnumU64? [], List, List, CompiledModelTestBase.EnumU8?, CompiledModelTestBase.EnumU8? [], CompiledModelTestBase.EnumU8?, CompiledModelTestBase.EnumU8? [], List, List, float?, float? [], Guid?, Guid? [], IPAddress, IPAddress[], short?, short? [], int?, int? [], long?, long? []>((source.GetCurrentValue(nullableEnumU32) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU32).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU32))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU32Array))) == null ? null : ((CompiledModelTestBase.EnumU32? [])(((ValueComparer>)(((IProperty)nullableEnumU32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU32Array))))))), (source.GetCurrentValue(nullableEnumU32AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU32AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU32AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU32AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU32? [])(((ValueComparer>)(((IProperty)nullableEnumU32AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU32AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU32AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU32AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU32AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU32Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU32Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU32Collection))))))), (source.GetCurrentValue(nullableEnumU64) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU64).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU64))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU64Array))) == null ? null : ((CompiledModelTestBase.EnumU64? [])(((ValueComparer>)(((IProperty)nullableEnumU64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU64Array))))))), (source.GetCurrentValue(nullableEnumU64AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU64AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU64AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU64AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU64? [])(((ValueComparer>)(((IProperty)nullableEnumU64AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU64AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU64AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU64AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU64AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU64Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU64Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU64Collection))))))), (source.GetCurrentValue(nullableEnumU8) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU8).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU8))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU8Array))) == null ? null : ((CompiledModelTestBase.EnumU8? [])(((ValueComparer>)(((IProperty)nullableEnumU8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU8Array))))))), (source.GetCurrentValue(nullableEnumU8AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU8AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU8AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU8AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU8? [])(((ValueComparer>)(((IProperty)nullableEnumU8AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU8AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU8AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU8AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU8AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU8Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU8Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU8Collection))))))), (source.GetCurrentValue(nullableFloat) == null ? null : ((ValueComparer)(((IProperty)nullableFloat).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableFloat))), (((IEnumerable)(source.GetCurrentValue(nullableFloatArray))) == null ? null : ((float? [])(((ValueComparer>)(((IProperty)nullableFloatArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableFloatArray))))))), (source.GetCurrentValue(nullableGuid) == null ? null : ((ValueComparer)(((IProperty)nullableGuid).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableGuid))), (((IEnumerable)(source.GetCurrentValue(nullableGuidArray))) == null ? null : ((Guid? [])(((ValueComparer>)(((IProperty)nullableGuidArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableGuidArray))))))), (source.GetCurrentValue(nullableIPAddress) == null ? null : ((ValueComparer)(((IProperty)nullableIPAddress).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableIPAddress))), (((object)(source.GetCurrentValue(nullableIPAddressArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)nullableIPAddressArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullableIPAddressArray))))))), (source.GetCurrentValue(nullableInt16) == null ? null : ((ValueComparer)(((IProperty)nullableInt16).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableInt16))), (((IEnumerable)(source.GetCurrentValue(nullableInt16Array))) == null ? null : ((short? [])(((ValueComparer>)(((IProperty)nullableInt16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableInt16Array))))))), (source.GetCurrentValue(nullableInt32) == null ? null : ((ValueComparer)(((IProperty)nullableInt32).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableInt32))), (((IEnumerable)(source.GetCurrentValue(nullableInt32Array))) == null ? null : ((int? [])(((ValueComparer>)(((IProperty)nullableInt32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableInt32Array))))))), (source.GetCurrentValue(nullableInt64) == null ? null : ((ValueComparer)(((IProperty)nullableInt64).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableInt64))), (((IEnumerable)(source.GetCurrentValue(nullableInt64Array))) == null ? null : ((long? [])(((ValueComparer>)(((IProperty)nullableInt64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableInt64Array)))))))))); + var structuralType5 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg5 = ((ISnapshot)(new Snapshot, string, string, string>((source.GetCurrentValue(nullableInt8) == null ? null : ((ValueComparer)(((IProperty)nullableInt8).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableInt8))), (((IEnumerable)(source.GetCurrentValue(nullableInt8Array))) == null ? null : ((sbyte? [])(((ValueComparer>)(((IProperty)nullableInt8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableInt8Array))))))), (source.GetCurrentValue(nullablePhysicalAddress) == null ? null : ((ValueComparer)(((IProperty)nullablePhysicalAddress).GetValueComparer())).Snapshot(source.GetCurrentValue(nullablePhysicalAddress))), (((object)(source.GetCurrentValue(nullablePhysicalAddressArray))) == null ? null : ((PhysicalAddress[])(((ValueComparer)(((IProperty)nullablePhysicalAddressArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullablePhysicalAddressArray))))))), (source.GetCurrentValue(nullableString) == null ? null : ((ValueComparer)(((IProperty)nullableString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableString))), (((object)(source.GetCurrentValue(nullableStringArray))) == null ? null : ((string[])(((ValueComparer)(((IProperty)nullableStringArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullableStringArray))))))), (source.GetCurrentValue(nullableTimeOnly) == null ? null : ((ValueComparer)(((IProperty)nullableTimeOnly).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableTimeOnly))), (((IEnumerable)(source.GetCurrentValue(nullableTimeOnlyArray))) == null ? null : ((TimeOnly? [])(((ValueComparer>)(((IProperty)nullableTimeOnlyArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableTimeOnlyArray))))))), (source.GetCurrentValue(nullableTimeSpan) == null ? null : ((ValueComparer)(((IProperty)nullableTimeSpan).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableTimeSpan))), (((IEnumerable)(source.GetCurrentValue(nullableTimeSpanArray))) == null ? null : ((TimeSpan? [])(((ValueComparer>)(((IProperty)nullableTimeSpanArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableTimeSpanArray))))))), (source.GetCurrentValue(nullableUInt16) == null ? null : ((ValueComparer)(((IProperty)nullableUInt16).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUInt16))), (((IEnumerable)(source.GetCurrentValue(nullableUInt16Array))) == null ? null : ((ushort? [])(((ValueComparer>)(((IProperty)nullableUInt16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableUInt16Array))))))), (source.GetCurrentValue(nullableUInt32) == null ? null : ((ValueComparer)(((IProperty)nullableUInt32).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUInt32))), (((IEnumerable)(source.GetCurrentValue(nullableUInt32Array))) == null ? null : ((uint? [])(((ValueComparer>)(((IProperty)nullableUInt32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableUInt32Array))))))), (source.GetCurrentValue(nullableUInt64) == null ? null : ((ValueComparer)(((IProperty)nullableUInt64).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUInt64))), (((IEnumerable)(source.GetCurrentValue(nullableUInt64Array))) == null ? null : ((ulong? [])(((ValueComparer>)(((IProperty)nullableUInt64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableUInt64Array))))))), (source.GetCurrentValue(nullableUInt8) == null ? null : ((ValueComparer)(((IProperty)nullableUInt8).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUInt8))), (((IEnumerable)(source.GetCurrentValue(nullableUInt8Array))) == null ? null : ((byte? [])(((ValueComparer>)(((IProperty)nullableUInt8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableUInt8Array))))))), (source.GetCurrentValue(nullableUri) == null ? null : ((ValueComparer)(((IProperty)nullableUri).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUri))), (((object)(source.GetCurrentValue(nullableUriArray))) == null ? null : ((Uri[])(((ValueComparer)(((IProperty)nullableUriArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullableUriArray))))))), (source.GetCurrentValue(physicalAddress) == null ? null : ((ValueComparer)(((IProperty)physicalAddress).GetValueComparer())).Snapshot(source.GetCurrentValue(physicalAddress))), (((object)(source.GetCurrentValue(physicalAddressArray))) == null ? null : ((PhysicalAddress[])(((ValueComparer)(((IProperty)physicalAddressArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(physicalAddressArray))))))), (source.GetCurrentValue(physicalAddressToBytesConverterProperty) == null ? null : ((ValueComparer)(((IProperty)physicalAddressToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(physicalAddressToBytesConverterProperty))), (source.GetCurrentValue(physicalAddressToStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)physicalAddressToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(physicalAddressToStringConverterProperty))), (source.GetCurrentValue(@string) == null ? null : ((ValueComparer)(((IProperty)@string).GetValueComparer())).Snapshot(source.GetCurrentValue(@string))), (((object)(source.GetCurrentValue(stringArray))) == null ? null : ((string[])(((ValueComparer)(((IProperty)stringArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(stringArray))))))), (((object)(source.GetCurrentValue>(stringReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer)(((IProperty)stringReadOnlyCollection).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(stringReadOnlyCollection))))))), (source.GetCurrentValue(stringToBoolConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToBoolConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToBoolConverterProperty))), (source.GetCurrentValue(stringToBytesConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToBytesConverterProperty))), (source.GetCurrentValue(stringToCharConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToCharConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToCharConverterProperty)))))); + var structuralType6 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg6 = ((ISnapshot)(new Snapshot, Uri, Uri[]>((source.GetCurrentValue(stringToDateOnlyConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDateOnlyConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDateOnlyConverterProperty))), (source.GetCurrentValue(stringToDateTimeConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDateTimeConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDateTimeConverterProperty))), (source.GetCurrentValue(stringToDateTimeOffsetConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDateTimeOffsetConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDateTimeOffsetConverterProperty))), (source.GetCurrentValue(stringToDecimalNumberConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDecimalNumberConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDecimalNumberConverterProperty))), (source.GetCurrentValue(stringToDoubleNumberConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDoubleNumberConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDoubleNumberConverterProperty))), (source.GetCurrentValue(stringToEnumConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToEnumConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToEnumConverterProperty))), (source.GetCurrentValue(stringToGuidConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToGuidConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToGuidConverterProperty))), (source.GetCurrentValue(stringToIntNumberConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToIntNumberConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToIntNumberConverterProperty))), (source.GetCurrentValue(stringToTimeOnlyConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToTimeOnlyConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToTimeOnlyConverterProperty))), (source.GetCurrentValue(stringToTimeSpanConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToTimeSpanConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToTimeSpanConverterProperty))), (source.GetCurrentValue(stringToUriConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToUriConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToUriConverterProperty))), ((ValueComparer)(((IProperty)timeOnly).GetValueComparer())).Snapshot(source.GetCurrentValue(timeOnly)), (((IEnumerable)(source.GetCurrentValue(timeOnlyArray))) == null ? null : ((TimeOnly[])(((ValueComparer>)(((IProperty)timeOnlyArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(timeOnlyArray))))))), ((ValueComparer)(((IProperty)timeOnlyToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(timeOnlyToStringConverterProperty)), ((ValueComparer)(((IProperty)timeOnlyToTicksConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(timeOnlyToTicksConverterProperty)), ((ValueComparer)(((IProperty)timeSpan).GetValueComparer())).Snapshot(source.GetCurrentValue(timeSpan)), (((IEnumerable)(source.GetCurrentValue(timeSpanArray))) == null ? null : ((TimeSpan[])(((ValueComparer>)(((IProperty)timeSpanArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(timeSpanArray))))))), ((ValueComparer)(((IProperty)timeSpanToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(timeSpanToStringConverterProperty)), ((ValueComparer)(((IProperty)timeSpanToTicksConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(timeSpanToTicksConverterProperty)), ((ValueComparer)(((IProperty)uInt16).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt16)), (((IEnumerable)(source.GetCurrentValue(uInt16Array))) == null ? null : ((ushort[])(((ValueComparer>)(((IProperty)uInt16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(uInt16Array))))))), ((ValueComparer)(((IProperty)uInt32).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt32)), (((IEnumerable)(source.GetCurrentValue(uInt32Array))) == null ? null : ((uint[])(((ValueComparer>)(((IProperty)uInt32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(uInt32Array))))))), ((ValueComparer)(((IProperty)uInt64).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt64)), (((IEnumerable)(source.GetCurrentValue(uInt64Array))) == null ? null : ((ulong[])(((ValueComparer>)(((IProperty)uInt64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(uInt64Array))))))), ((ValueComparer)(((IProperty)uInt8).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt8)), (source.GetCurrentValue(uInt8Array) == null ? null : ((ValueComparer)(((IProperty)uInt8Array).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt8Array))), (((IEnumerable)(source.GetCurrentValue>(uInt8ReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer>)(((IProperty)uInt8ReadOnlyCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(uInt8ReadOnlyCollection))))))), (source.GetCurrentValue(uri) == null ? null : ((ValueComparer)(((IProperty)uri).GetValueComparer())).Snapshot(source.GetCurrentValue(uri))), (((object)(source.GetCurrentValue(uriArray))) == null ? null : ((Uri[])(((ValueComparer)(((IProperty)uriArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(uriArray)))))))))); + var structuralType7 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + return ((ISnapshot)(new MultiSnapshot(new ISnapshot[] { liftedArg, liftedArg0, liftedArg1, liftedArg2, liftedArg3, liftedArg4, liftedArg5, liftedArg6, ((ISnapshot)(new Snapshot((source.GetCurrentValue(uriToStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)uriToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(uriToStringConverterProperty)))))) }))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(CompiledModelTestBase.ManyTypesId)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(CompiledModelTestBase.ManyTypesId))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => Snapshot.Empty); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 241, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 241, + shadowCount: 0, + relationshipCount: 1, + storeGeneratedCount: 1)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "ManyTypes"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesUnsafeAccessors.cs new file mode 100644 index 00000000..48de8dc1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/ManyTypesUnsafeAccessors.cs @@ -0,0 +1,739 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.NetworkInformation; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class ManyTypesUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.ManyTypesId Id(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool Bool(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool[] BoolArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_boolReadOnlyCollection")] + public static extern ref List _boolReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool BoolToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool BoolToTwoValuesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool BoolToZeroOneConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] Bytes(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[][] BytesArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] BytesToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int CastingConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char Char(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char[] CharArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char CharToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly DateOnly(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly[] DateOnlyArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly DateOnlyToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime DateTime(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime[] DateTimeArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTimeOffset DateTimeOffsetToBinaryConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTimeOffset DateTimeOffsetToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTimeOffset DateTimeOffsetToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime DateTimeToBinaryConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime DateTimeToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime DateTimeToTicksConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal Decimal(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal[] DecimalArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal DecimalNumberToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal DecimalNumberToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double Double(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double[] DoubleArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double DoubleNumberToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double DoubleNumberToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16 Enum16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16[] Enum16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16 Enum16AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16[] Enum16AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum16AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum16Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32 Enum32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32[] Enum32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32 Enum32AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32[] Enum32AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum32AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum32Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64 Enum64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64[] Enum64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64 Enum64AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64[] Enum64AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum64AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum64Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8 Enum8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8[] Enum8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8 Enum8AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8[] Enum8AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum8AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum8Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32 EnumToNumberConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32 EnumToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16 EnumU16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16[] EnumU16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16 EnumU16AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16[] EnumU16AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU16AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU16Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32 EnumU32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32[] EnumU32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32 EnumU32AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32[] EnumU32AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU32AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU32Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64 EnumU64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64[] EnumU64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64 EnumU64AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64[] EnumU64AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU64AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU64Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8 EnumU8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8[] EnumU8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8 EnumU8AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8[] EnumU8AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU8AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU8Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref float Float(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref float[] FloatArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid Guid(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid[] GuidArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid GuidToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid GuidToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress IPAddress(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress[] IPAddressArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_ipAddressReadOnlyCollection")] + public static extern ref List _ipAddressReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress IPAddressToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress IPAddressToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref short Int16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref short[] Int16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int Int32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int[] Int32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_int32ReadOnlyCollection")] + public static extern ref List _int32ReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long Int64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long[] Int64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref sbyte Int8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref sbyte[] Int8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int IntNumberToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int IntNumberToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int? NullIntToNullStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool? NullableBool(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool?[] NullableBoolArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] NullableBytes(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[][] NullableBytesArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char? NullableChar(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char?[] NullableCharArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly? NullableDateOnly(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly?[] NullableDateOnlyArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime? NullableDateTime(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime?[] NullableDateTimeArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal? NullableDecimal(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal?[] NullableDecimalArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double? NullableDouble(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double?[] NullableDoubleArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16? NullableEnum16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16?[] NullableEnum16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16? NullableEnum16AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16?[] NullableEnum16AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum16AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum16Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32? NullableEnum32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32?[] NullableEnum32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32? NullableEnum32AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32?[] NullableEnum32AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum32AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum32Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64? NullableEnum64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64?[] NullableEnum64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64? NullableEnum64AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64?[] NullableEnum64AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum64AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum64Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8? NullableEnum8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8?[] NullableEnum8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8? NullableEnum8AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8?[] NullableEnum8AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum8AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum8Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16? NullableEnumU16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16?[] NullableEnumU16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16? NullableEnumU16AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16?[] NullableEnumU16AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU16AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU16Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32? NullableEnumU32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32?[] NullableEnumU32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32? NullableEnumU32AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32?[] NullableEnumU32AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU32AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU32Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64? NullableEnumU64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64?[] NullableEnumU64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64? NullableEnumU64AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64?[] NullableEnumU64AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU64AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU64Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8? NullableEnumU8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8?[] NullableEnumU8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8? NullableEnumU8AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8?[] NullableEnumU8AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU8AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU8Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref float? NullableFloat(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref float?[] NullableFloatArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid? NullableGuid(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid?[] NullableGuidArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress NullableIPAddress(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress[] NullableIPAddressArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref short? NullableInt16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref short?[] NullableInt16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int? NullableInt32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int?[] NullableInt32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long? NullableInt64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long?[] NullableInt64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref sbyte? NullableInt8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref sbyte?[] NullableInt8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress NullablePhysicalAddress(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress[] NullablePhysicalAddressArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string NullableString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string[] NullableStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly? NullableTimeOnly(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly?[] NullableTimeOnlyArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan? NullableTimeSpan(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan?[] NullableTimeSpanArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ushort? NullableUInt16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ushort?[] NullableUInt16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref uint? NullableUInt32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref uint?[] NullableUInt32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ulong? NullableUInt64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ulong?[] NullableUInt64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte? NullableUInt8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte?[] NullableUInt8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri NullableUri(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri[] NullableUriArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress PhysicalAddress(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress[] PhysicalAddressArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress PhysicalAddressToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress PhysicalAddressToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string String(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string[] StringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_stringReadOnlyCollection")] + public static extern ref List _stringReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToBoolConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToCharConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDateOnlyConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDateTimeConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDateTimeOffsetConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDecimalNumberConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDoubleNumberConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToEnumConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToGuidConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToIntNumberConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToTimeOnlyConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToTimeSpanConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToUriConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly TimeOnly(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly[] TimeOnlyArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly TimeOnlyToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly TimeOnlyToTicksConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan TimeSpan(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan[] TimeSpanArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan TimeSpanToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan TimeSpanToTicksConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ushort UInt16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ushort[] UInt16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref uint UInt32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref uint[] UInt32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ulong UInt64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ulong[] UInt64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte UInt8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] UInt8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_uInt8ReadOnlyCollection")] + public static extern ref List _uInt8ReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri Uri(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri[] UriArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri UriToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedType0EntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedType0EntityType.cs new file mode 100644 index 00000000..ce3305de --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedType0EntityType.cs @@ -0,0 +1,954 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class OwnedType0EntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>.ManyOwned#OwnedType", + typeof(CompiledModelTestBase.OwnedType), + baseEntityType, + sharedClrType: true, + propertyCount: 13, + servicePropertyCount: 1, + foreignKeyCount: 1, + keyCount: 1); + + var principalDerivedId = runtimeEntityType.AddProperty( + "PrincipalDerivedId", + typeof(long), + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + principalDerivedId.SetAccessors( + long (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && entry.ReadShadowValue(0) == 0L ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + long (IInternalEntry entry) => entry.ReadShadowValue(0), + long (IInternalEntry entry) => entry.ReadOriginalValue(principalDerivedId, 0), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalDerivedId, 0)); + principalDerivedId.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: 0, + relationshipIndex: 0, + storeGenerationIndex: 0); + principalDerivedId.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + keyComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)))); + principalDerivedId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalDerivedId)); + principalDerivedId.SetSentinelFromProviderValue(0); + + var principalDerivedAlternateId = runtimeEntityType.AddProperty( + "PrincipalDerivedAlternateId", + typeof(Guid), + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + principalDerivedAlternateId.SetAccessors( + Guid (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(1) ? entry.ReadStoreGeneratedValue(1) : (entry.FlaggedAsTemporary(1) && entry.ReadShadowValue(1) == new Guid("00000000-0000-0000-0000-000000000000") ? entry.ReadTemporaryValue(1) : entry.ReadShadowValue(1))), + Guid (IInternalEntry entry) => entry.ReadShadowValue(1), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(principalDerivedAlternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalDerivedAlternateId, 1)); + principalDerivedAlternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: 1, + relationshipIndex: 1, + storeGenerationIndex: 1); + principalDerivedAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + principalDerivedAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalDerivedAlternateId)); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(int), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0); + id.SetAccessors( + int (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(2) ? entry.ReadStoreGeneratedValue(2) : (entry.FlaggedAsTemporary(2) && entry.ReadShadowValue(2) == 0 ? entry.ReadTemporaryValue(2) : entry.ReadShadowValue(2))), + int (IInternalEntry entry) => entry.ReadShadowValue(2), + int (IInternalEntry entry) => entry.ReadOriginalValue(id, 2), + int (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 2)); + id.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: 2, + relationshipIndex: 2, + storeGenerationIndex: 2); + id.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var details = runtimeEntityType.AddProperty( + "Details", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_details", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + details.SetGetter( + string (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._details(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._details(instance) == null); + details.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetAccessors( + string (IInternalEntry entry) => OwnedTypeUnsafeAccessors._details(((CompiledModelTestBase.OwnedType)(entry.Entity))), + string (IInternalEntry entry) => OwnedTypeUnsafeAccessors._details(((CompiledModelTestBase.OwnedType)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(details, 3), + string (IInternalEntry entry) => entry.GetCurrentValue(details)); + details.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + details.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var number = runtimeEntityType.AddProperty( + "Number", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Number", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0); + number.SetGetter( + int (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance) == 0); + number.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetAccessors( + int (IInternalEntry entry) => OwnedTypeUnsafeAccessors.Number(((CompiledModelTestBase.OwnedType)(entry.Entity))), + int (IInternalEntry entry) => OwnedTypeUnsafeAccessors.Number(((CompiledModelTestBase.OwnedType)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(number, 4), + int (IInternalEntry entry) => entry.GetCurrentValue(number)); + number.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + number.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance) == null); + refTypeArray.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 5), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 6), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeIList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance) == null); + refTypeIList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 7), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance) == null); + refTypeList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 8), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance) == null); + valueTypeArray.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + DateTime[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 9), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 10), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 11), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance) == null); + valueTypeList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 12), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 12, + originalValueIndex: 12, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + var context = runtimeEntityType.AddServiceProperty( + "Context", + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Context", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + serviceType: typeof(DbContext)); + context.SetPropertyIndexes( + index: -1, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + + var key = runtimeEntityType.AddKey( + new[] { principalDerivedId, principalDerivedAlternateId, id }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalDerivedId"), declaringEntityType.FindProperty("PrincipalDerivedAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + required: true, + ownership: true); + + var manyOwned = principalEntityType.AddNavigation("ManyOwned", + runtimeForeignKey, + onDependent: false, + typeof(IList), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("ManyOwned", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + eagerLoaded: true); + + manyOwned.SetGetter( + IList (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.ManyOwned(instance), + bool (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.ManyOwned(instance) == null); + manyOwned.SetSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, IList value) => + { + PrincipalDerivedUnsafeAccessors>.ManyOwned(instance) = value; + return instance; + }); + manyOwned.SetMaterializationSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, IList value) => + { + PrincipalDerivedUnsafeAccessors>.ManyOwned(instance) = value; + return instance; + }); + manyOwned.SetAccessors( + IList (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + null, + IList (IInternalEntry entry) => entry.GetCurrentValue>(manyOwned)); + manyOwned.SetPropertyIndexes( + index: 3, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 5, + storeGenerationIndex: -1); + manyOwned.SetCollectionAccessor>, IList, CompiledModelTestBase.OwnedType>( + IList (CompiledModelTestBase.PrincipalDerived> entity) => PrincipalDerivedUnsafeAccessors>.ManyOwned(entity), + (CompiledModelTestBase.PrincipalDerived> entity, IList collection) => PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) = ((IList)collection), + (CompiledModelTestBase.PrincipalDerived> entity, IList collection) => PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) = ((IList)collection), + IList (CompiledModelTestBase.PrincipalDerived> entity, Action>, IList> setter) => ClrCollectionAccessorFactory.CreateAndSet>, IList, List>(entity, setter), + IList () => new List()); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var principalDerivedId = runtimeEntityType.FindProperty("PrincipalDerivedId"); + var principalDerivedAlternateId = runtimeEntityType.FindProperty("PrincipalDerivedAlternateId"); + var id = runtimeEntityType.FindProperty("Id"); + var details = runtimeEntityType.FindProperty("Details"); + var number = runtimeEntityType.FindProperty("Number"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var key = runtimeEntityType.FindKey(new[] { principalDerivedId, principalDerivedAlternateId, id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.OwnedType)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>(((ValueComparer)(((IProperty)principalDerivedId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedId)), ((ValueComparer)(((IProperty)principalDerivedAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedAlternateId)), ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id)), (source.GetCurrentValue(details) == null ? null : ((ValueComparer)(((IProperty)details).GetValueComparer())).Snapshot(source.GetCurrentValue(details))), ((ValueComparer)(((IProperty)number).GetValueComparer())).Snapshot(source.GetCurrentValue(number)), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalDerivedId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalDerivedAlternateId).GetValueComparer())).Snapshot(default(Guid)), ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(int)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(int))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalDerivedId") ? ((long)(source["PrincipalDerivedId"])) : 0L), (source.ContainsKey("PrincipalDerivedAlternateId") ? ((Guid)(source["PrincipalDerivedAlternateId"])) : new Guid("00000000-0000-0000-0000-000000000000")), (source.ContainsKey("Id") ? ((int)(source["Id"])) : 0))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(int))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.OwnedType)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalDerivedId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedId)), ((ValueComparer)(((IProperty)principalDerivedAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedAlternateId)), ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 13, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 13, + shadowCount: 3, + relationshipCount: 3, + storeGeneratedCount: 3)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "ManyOwned"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeEntityType.cs new file mode 100644 index 00000000..af9ed25a --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeEntityType.cs @@ -0,0 +1,976 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class OwnedTypeEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType", + typeof(CompiledModelTestBase.OwnedType), + baseEntityType, + sharedClrType: true, + changeTrackingStrategy: ChangeTrackingStrategy.ChangingAndChangedNotificationsWithOriginalValues, + propertyCount: 12, + servicePropertyCount: 1, + foreignKeyCount: 2, + keyCount: 1); + + var principalBaseId = runtimeEntityType.AddProperty( + "PrincipalBaseId", + typeof(long), + propertyAccessMode: PropertyAccessMode.Field, + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + principalBaseId.SetAccessors( + long (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && entry.ReadShadowValue(0) == 0L ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + long (IInternalEntry entry) => entry.ReadShadowValue(0), + long (IInternalEntry entry) => entry.ReadOriginalValue(principalBaseId, 0), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalBaseId, 0)); + principalBaseId.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: 0, + relationshipIndex: 0, + storeGenerationIndex: 0); + principalBaseId.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + keyComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)))); + principalBaseId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalBaseId)); + principalBaseId.SetSentinelFromProviderValue(0); + + var overrides = new StoreObjectDictionary(); + var principalBaseIdPrincipalBase = new RuntimeRelationalPropertyOverrides( + principalBaseId, + StoreObjectIdentifier.Table("PrincipalBase", "mySchema"), + false, + null); + principalBaseIdPrincipalBase.AddAnnotation("Jet:IdentityIncrement", 3); + principalBaseIdPrincipalBase.AddAnnotation("Jet:IdentitySeed", 2); + principalBaseIdPrincipalBase.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + overrides.Add(StoreObjectIdentifier.Table("PrincipalBase", "mySchema"), principalBaseIdPrincipalBase); + principalBaseId.AddAnnotation("Relational:RelationalOverrides", overrides); + + principalBaseId.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var principalBaseAlternateId = runtimeEntityType.AddProperty( + "PrincipalBaseAlternateId", + typeof(Guid), + propertyAccessMode: PropertyAccessMode.Field, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + principalBaseAlternateId.SetAccessors( + Guid (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(1) ? entry.ReadStoreGeneratedValue(1) : (entry.FlaggedAsTemporary(1) && entry.ReadShadowValue(1) == new Guid("00000000-0000-0000-0000-000000000000") ? entry.ReadTemporaryValue(1) : entry.ReadShadowValue(1))), + Guid (IInternalEntry entry) => entry.ReadShadowValue(1), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(principalBaseAlternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalBaseAlternateId, 1)); + principalBaseAlternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: 1, + relationshipIndex: 1, + storeGenerationIndex: 1); + principalBaseAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + principalBaseAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalBaseAlternateId)); + + var details = runtimeEntityType.AddProperty( + "Details", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_details", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + details.SetGetter( + string (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._details(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._details(instance) == null); + details.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetAccessors( + string (IInternalEntry entry) => OwnedTypeUnsafeAccessors._details(((CompiledModelTestBase.OwnedType)(entry.Entity))), + string (IInternalEntry entry) => OwnedTypeUnsafeAccessors._details(((CompiledModelTestBase.OwnedType)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(details, 2), + string (IInternalEntry entry) => entry.GetCurrentValue(details)); + details.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + details.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var overrides0 = new StoreObjectDictionary(); + var detailsDetails = new RuntimeRelationalPropertyOverrides( + details, + StoreObjectIdentifier.Table("Details", null), + false, + null); + overrides0.Add(StoreObjectIdentifier.Table("Details", null), detailsDetails); + details.AddAnnotation("Relational:RelationalOverrides", overrides0); + + + var number = runtimeEntityType.AddProperty( + "Number", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Number", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + sentinel: 0); + number.SetGetter( + int (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance) == 0); + number.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetAccessors( + int (IInternalEntry entry) => OwnedTypeUnsafeAccessors.Number(((CompiledModelTestBase.OwnedType)(entry.Entity))), + int (IInternalEntry entry) => OwnedTypeUnsafeAccessors.Number(((CompiledModelTestBase.OwnedType)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(number, 3), + int (IInternalEntry entry) => entry.GetCurrentValue(number)); + number.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + number.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance) == null); + refTypeArray.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 4), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 5), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeIList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance) == null); + refTypeIList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 6), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance) == null); + refTypeList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 7), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance) == null); + valueTypeArray.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + DateTime[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 8), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 9), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 10), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance) == null); + valueTypeList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 11), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + var context = runtimeEntityType.AddServiceProperty( + "Context", + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Context", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + serviceType: typeof(DbContext)); + context.SetPropertyIndexes( + index: -1, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + + var key = runtimeEntityType.AddKey( + new[] { principalBaseId, principalBaseAlternateId }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalBaseId"), declaringEntityType.FindProperty("PrincipalBaseAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true, + requiredDependent: true, + ownership: true); + + var owned = principalEntityType.AddNavigation("Owned", + runtimeForeignKey, + onDependent: false, + typeof(CompiledModelTestBase.OwnedType), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Owned", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("_ownedField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + eagerLoaded: true); + + owned.SetGetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors._ownedField(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors._ownedField(instance) == null); + owned.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.OwnedType value) => + { + PrincipalBaseUnsafeAccessors._ownedField(instance) = value; + return instance; + }); + owned.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.OwnedType value) => + { + PrincipalBaseUnsafeAccessors._ownedField(instance) = value; + return instance; + }); + owned.SetAccessors( + CompiledModelTestBase.OwnedType (IInternalEntry entry) => PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.OwnedType (IInternalEntry entry) => PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + null, + CompiledModelTestBase.OwnedType (IInternalEntry entry) => entry.GetCurrentValue(owned)); + owned.SetPropertyIndexes( + index: 0, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 2, + storeGenerationIndex: -1); + return runtimeForeignKey; + } + + public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalBaseId"), declaringEntityType.FindProperty("PrincipalBaseAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("PrincipalBaseId"), principalEntityType.FindProperty("PrincipalBaseAlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true, + requiredDependent: true); + + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var principalBaseId = runtimeEntityType.FindProperty("PrincipalBaseId"); + var principalBaseAlternateId = runtimeEntityType.FindProperty("PrincipalBaseAlternateId"); + var details = runtimeEntityType.FindProperty("Details"); + var number = runtimeEntityType.FindProperty("Number"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var key = runtimeEntityType.FindKey(new[] { principalBaseId, principalBaseAlternateId }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.OwnedType)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>(((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId)), ((ValueComparer)(((IProperty)principalBaseAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalBaseAlternateId)), (source.GetCurrentValue(details) == null ? null : ((ValueComparer)(((IProperty)details).GetValueComparer())).Snapshot(source.GetCurrentValue(details))), ((ValueComparer)(((IProperty)number).GetValueComparer())).Snapshot(source.GetCurrentValue(number)), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalBaseAlternateId).GetValueComparer())).Snapshot(default(Guid)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalBaseId") ? ((long)(source["PrincipalBaseId"])) : 0L), (source.ContainsKey("PrincipalBaseAlternateId") ? ((Guid)(source["PrincipalBaseAlternateId"])) : new Guid("00000000-0000-0000-0000-000000000000")))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long), default(Guid))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.OwnedType)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalBaseId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId)), ((ValueComparer)(((IProperty)principalBaseAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalBaseAlternateId))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 12, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 12, + shadowCount: 2, + relationshipCount: 2, + storeGeneratedCount: 2)); + var fragments = new StoreObjectDictionary(); + var detailsFragment = new RuntimeEntityTypeMappingFragment( + runtimeEntityType, + StoreObjectIdentifier.Table("Details", null), + null); + fragments.Add(StoreObjectIdentifier.Table("Details", null), detailsFragment); + runtimeEntityType.AddAnnotation("Relational:MappingFragments", fragments); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", "mySchema"); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeUnsafeAccessors.cs new file mode 100644 index 00000000..ed8d21e3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/OwnedTypeUnsafeAccessors.cs @@ -0,0 +1,45 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class OwnedTypeUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_details")] + public static extern ref string _details(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int Number(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeArray")] + public static extern ref IPAddress[] _refTypeArray(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeEnumerable")] + public static extern ref IEnumerable _refTypeEnumerable(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeIList")] + public static extern ref IList _refTypeIList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeList")] + public static extern ref List _refTypeList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_valueTypeArray")] + public static extern ref DateTime[] _valueTypeArray(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_valueTypeEnumerable")] + public static extern ref IEnumerable _valueTypeEnumerable(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList ValueTypeIList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_valueTypeList")] + public static extern ref List _valueTypeList(CompiledModelTestBase.OwnedType @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseEntityType.cs new file mode 100644 index 00000000..9d7a85c1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseEntityType.cs @@ -0,0 +1,1106 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalBaseEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + typeof(CompiledModelTestBase.PrincipalBase), + baseEntityType, + discriminatorValue: "PrincipalBase", + derivedTypesCount: 1, + propertyCount: 14, + navigationCount: 1, + skipNavigationCount: 1, + unnamedIndexCount: 1, + keyCount: 2); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + id.SetGetter( + long? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Id(instance).HasValue)); + id.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + long? (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && !(PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))).HasValue) ? entry.ReadTemporaryValue(0) : PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + long? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + long? (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + long? (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: 0); + id.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + keyComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)))); + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + id.SetComparer(new NullableValueComparer(id.TypeMapping.Comparer)); + id.SetKeyComparer(new NullableValueComparer(id.TypeMapping.KeyComparer)); + + var overrides = new StoreObjectDictionary(); + var idPrincipalDerived = new RuntimeRelationalPropertyOverrides( + id, + StoreObjectIdentifier.Table("PrincipalDerived", null), + true, + "DerivedId"); + overrides.Add(StoreObjectIdentifier.Table("PrincipalDerived", null), idPrincipalDerived); + id.AddAnnotation("Relational:RelationalOverrides", overrides); + + id.AddAnnotation("Jet:IdentityIncrement", 3); + id.AddAnnotation("Jet:IdentitySeed", 2); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var alternateId = runtimeEntityType.AddProperty( + "AlternateId", + typeof(Guid), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("AlternateId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.FieldDuringConstruction, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000"), + jsonValueReaderWriter: JsonGuidReaderWriter.Instance); + alternateId.SetGetter( + Guid (CompiledModelTestBase.PrincipalBase instance) => instance.AlternateId, + bool (CompiledModelTestBase.PrincipalBase instance) => instance.AlternateId == new Guid("00000000-0000-0000-0000-000000000000")); + alternateId.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, Guid value) => + { + instance.AlternateId = value; + return instance; + }); + alternateId.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, Guid value) => + { + instance.AlternateId = value; + return instance; + }); + alternateId.SetAccessors( + Guid (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(1) ? entry.ReadStoreGeneratedValue(1) : (entry.FlaggedAsTemporary(1) && ((CompiledModelTestBase.PrincipalBase)(entry.Entity)).AlternateId == new Guid("00000000-0000-0000-0000-000000000000") ? entry.ReadTemporaryValue(1) : ((CompiledModelTestBase.PrincipalBase)(entry.Entity)).AlternateId)), + Guid (IInternalEntry entry) => ((CompiledModelTestBase.PrincipalBase)(entry.Entity)).AlternateId, + Guid (IInternalEntry entry) => entry.ReadOriginalValue(alternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(alternateId, 1)); + alternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: 1, + storeGenerationIndex: 1); + alternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + alternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(alternateId)); + + var enum1 = runtimeEntityType.AddProperty( + "Enum1", + typeof(CompiledModelTestBase.AnEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum1.SetGetter( + CompiledModelTestBase.AnEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.Enum1(instance))), ((object)((CompiledModelTestBase.AnEnum)0L)))); + enum1.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetAccessors( + CompiledModelTestBase.AnEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.ReadOriginalValue(enum1, 2), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.GetCurrentValue(enum1)); + enum1.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum1.SetSentinelFromProviderValue(0); + + var enum2 = runtimeEntityType.AddProperty( + "Enum2", + typeof(CompiledModelTestBase.AnEnum?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum2", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + enum2.SetGetter( + CompiledModelTestBase.AnEnum? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Enum2(instance).HasValue)); + enum2.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetAccessors( + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.ReadOriginalValue(enum2, 3), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.GetCurrentValue(enum2)); + enum2.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum2.SetComparer(new NullableValueComparer(enum2.TypeMapping.Comparer)); + enum2.SetKeyComparer(new NullableValueComparer(enum2.TypeMapping.KeyComparer)); + + var flagsEnum1 = runtimeEntityType.AddProperty( + "FlagsEnum1", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum1.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum1(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum1.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum1, 4), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum1)); + flagsEnum1.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum1.SetSentinelFromProviderValue(0); + + var flagsEnum2 = runtimeEntityType.AddProperty( + "FlagsEnum2", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum2", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Property); + flagsEnum2.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Get_FlagsEnum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.Get_FlagsEnum2(instance))), ((object)(CompiledModelTestBase.AFlagsEnum.B | CompiledModelTestBase.AFlagsEnum.C)))); + flagsEnum2.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.Set_FlagsEnum2(instance, value); + return instance; + }); + flagsEnum2.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.Set_FlagsEnum2(instance, value); + return instance; + }); + flagsEnum2.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Get_FlagsEnum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Get_FlagsEnum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum2, 5), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum2)); + flagsEnum2.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum2.SetSentinelFromProviderValue(6); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance) == null); + refTypeArray.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 6), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 7), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance) == null); + refTypeIList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 8), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance) == null); + refTypeList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 9), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) == null); + valueTypeArray.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + DateTime[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 10), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 11), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 12), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 12, + originalValueIndex: 12, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance) == null); + valueTypeList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 13), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 13, + originalValueIndex: 13, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + var key = runtimeEntityType.AddKey( + new[] { id }); + + var key0 = runtimeEntityType.AddKey( + new[] { id, alternateId }); + runtimeEntityType.SetPrimaryKey(key0); + key0.AddAnnotation("Relational:Name", "PK"); + + var index = runtimeEntityType.AddIndex( + new[] { alternateId, id }); + + return runtimeEntityType; + } + + public static RuntimeSkipNavigation CreateSkipNavigation1(RuntimeEntityType declaringEntityType, RuntimeEntityType targetEntityType, RuntimeEntityType joinEntityType) + { + var skipNavigation = declaringEntityType.AddSkipNavigation( + "Deriveds", + targetEntityType, + joinEntityType.FindForeignKey( + new[] { joinEntityType.FindProperty("PrincipalsId"), joinEntityType.FindProperty("PrincipalsAlternateId") }, + declaringEntityType.FindKey(new[] { declaringEntityType.FindProperty("Id"), declaringEntityType.FindProperty("AlternateId") }), + declaringEntityType), + true, + false, + typeof(ICollection), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Deriveds", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var inverse = targetEntityType.FindSkipNavigation("Principals"); + if (inverse != null) + { + skipNavigation.Inverse = inverse; + inverse.Inverse = skipNavigation; + } + + skipNavigation.SetGetter( + ICollection (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Deriveds(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Deriveds(instance) == null); + skipNavigation.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, ICollection value) => + { + PrincipalBaseUnsafeAccessors.Deriveds(instance) = value; + return instance; + }); + skipNavigation.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, ICollection value) => + { + PrincipalBaseUnsafeAccessors.Deriveds(instance) = value; + return instance; + }); + skipNavigation.SetAccessors( + ICollection (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Deriveds(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + ICollection (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Deriveds(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + null, + ICollection (IInternalEntry entry) => entry.GetCurrentValue>(skipNavigation)); + skipNavigation.SetPropertyIndexes( + index: 1, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 3, + storeGenerationIndex: -1); + skipNavigation.SetCollectionAccessor, CompiledModelTestBase.PrincipalBase>( + ICollection (CompiledModelTestBase.PrincipalBase entity) => PrincipalBaseUnsafeAccessors.Deriveds(entity), + (CompiledModelTestBase.PrincipalBase entity, ICollection collection) => PrincipalBaseUnsafeAccessors.Deriveds(entity) = ((ICollection)collection), + (CompiledModelTestBase.PrincipalBase entity, ICollection collection) => PrincipalBaseUnsafeAccessors.Deriveds(entity) = ((ICollection)collection), + ICollection (CompiledModelTestBase.PrincipalBase entity, Action> setter) => ClrCollectionAccessorFactory.CreateAndSetHashSet, CompiledModelTestBase.PrincipalBase>(entity, setter), + ICollection () => ((ICollection)(((ICollection)(new HashSet(ReferenceEqualityComparer.Instance)))))); + return skipNavigation; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var alternateId = runtimeEntityType.FindProperty("AlternateId"); + var enum1 = runtimeEntityType.FindProperty("Enum1"); + var enum2 = runtimeEntityType.FindProperty("Enum2"); + var flagsEnum1 = runtimeEntityType.FindProperty("FlagsEnum1"); + var flagsEnum2 = runtimeEntityType.FindProperty("FlagsEnum2"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + var key0 = runtimeEntityType.FindKey(new[] { id, alternateId }); + key0.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key0)); + key0.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key0)); + var owned = runtimeEntityType.FindNavigation("Owned"); + var deriveds = runtimeEntityType.FindSkipNavigation("Deriveds"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.PrincipalBase)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)alternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), ((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(source.GetCurrentValue(enum1)), (source.GetCurrentValue(enum2) == null ? null : ((ValueComparer)(((IProperty)enum2).GetValueComparer())).Snapshot(source.GetCurrentValue(enum2))), ((ValueComparer)(((IProperty)flagsEnum1).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum1)), ((ValueComparer)(((IProperty)flagsEnum2).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum2)), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot((default(long? ) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(long? ))), ((ValueComparer)(((IProperty)alternateId).GetValueComparer())).Snapshot(default(Guid)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long? ), default(Guid))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => Snapshot.Empty); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.PrincipalBase)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)alternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), source.GetCurrentValue(owned), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(deriveds))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 14, + navigationCount: 2, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 14, + shadowCount: 0, + relationshipCount: 4, + storeGeneratedCount: 2)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:MappingStrategy", "TPT"); + runtimeEntityType.AddAnnotation("Relational:Schema", "mySchema"); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBasePrincipalDerivedDependentBasebyteEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBasePrincipalDerivedDependentBasebyteEntityType.cs new file mode 100644 index 00000000..5f898bb5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBasePrincipalDerivedDependentBasebyteEntityType.cs @@ -0,0 +1,474 @@ +// +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalBasePrincipalDerivedDependentBasebyteEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "PrincipalBasePrincipalDerived>", + typeof(Dictionary), + baseEntityType, + sharedClrType: true, + indexerPropertyInfo: RuntimeEntityType.FindIndexerProperty(typeof(Dictionary)), + propertyBag: true, + propertyCount: 5, + foreignKeyCount: 2, + unnamedIndexCount: 1, + keyCount: 1); + + var derivedsId = runtimeEntityType.AddProperty( + "DerivedsId", + typeof(long), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + derivedsId.SetGetter( + long (Dictionary instance) => ((((IDictionary)instance).ContainsKey("DerivedsId") ? instance["DerivedsId"] : null) == null ? 0L : ((long)((((IDictionary)instance).ContainsKey("DerivedsId") ? instance["DerivedsId"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("DerivedsId") ? instance["DerivedsId"] : null) == null); + derivedsId.SetSetter( + Dictionary (Dictionary instance, long value) => + { + instance["DerivedsId"] = ((object)value); + return instance; + }); + derivedsId.SetMaterializationSetter( + Dictionary (Dictionary instance, long value) => + { + instance["DerivedsId"] = ((object)value); + return instance; + }); + derivedsId.SetAccessors( + long (IInternalEntry entry) => + { + if (entry.FlaggedAsStoreGenerated(0)) + { + return entry.ReadStoreGeneratedValue(0); + } + else + { + { + if (entry.FlaggedAsTemporary(0) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsId") ? ((Dictionary)(entry.Entity))["DerivedsId"] : null) == null) + { + return entry.ReadTemporaryValue(0); + } + else + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsId") ? ((Dictionary)(entry.Entity))["DerivedsId"] : null); + return (nullableValue == null ? default(long) : ((long)nullableValue)); + } + } + } + }, + long (IInternalEntry entry) => + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsId") ? ((Dictionary)(entry.Entity))["DerivedsId"] : null); + return (nullableValue == null ? default(long) : ((long)nullableValue)); + }, + long (IInternalEntry entry) => entry.ReadOriginalValue(derivedsId, 0), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(derivedsId, 0)); + derivedsId.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: 0); + derivedsId.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + keyComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)))); + derivedsId.SetCurrentValueComparer(new EntryCurrentValueComparer(derivedsId)); + + var derivedsAlternateId = runtimeEntityType.AddProperty( + "DerivedsAlternateId", + typeof(Guid), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw); + derivedsAlternateId.SetGetter( + Guid (Dictionary instance) => ((((IDictionary)instance).ContainsKey("DerivedsAlternateId") ? instance["DerivedsAlternateId"] : null) == null ? new Guid("00000000-0000-0000-0000-000000000000") : ((Guid)((((IDictionary)instance).ContainsKey("DerivedsAlternateId") ? instance["DerivedsAlternateId"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("DerivedsAlternateId") ? instance["DerivedsAlternateId"] : null) == null); + derivedsAlternateId.SetSetter( + Dictionary (Dictionary instance, Guid value) => + { + instance["DerivedsAlternateId"] = ((object)value); + return instance; + }); + derivedsAlternateId.SetMaterializationSetter( + Dictionary (Dictionary instance, Guid value) => + { + instance["DerivedsAlternateId"] = ((object)value); + return instance; + }); + derivedsAlternateId.SetAccessors( + Guid (IInternalEntry entry) => + { + if (entry.FlaggedAsStoreGenerated(1)) + { + return entry.ReadStoreGeneratedValue(1); + } + else + { + { + if (entry.FlaggedAsTemporary(1) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsAlternateId") ? ((Dictionary)(entry.Entity))["DerivedsAlternateId"] : null) == null) + { + return entry.ReadTemporaryValue(1); + } + else + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsAlternateId") ? ((Dictionary)(entry.Entity))["DerivedsAlternateId"] : null); + return (nullableValue == null ? default(Guid) : ((Guid)nullableValue)); + } + } + } + }, + Guid (IInternalEntry entry) => + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsAlternateId") ? ((Dictionary)(entry.Entity))["DerivedsAlternateId"] : null); + return (nullableValue == null ? default(Guid) : ((Guid)nullableValue)); + }, + Guid (IInternalEntry entry) => entry.ReadOriginalValue(derivedsAlternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(derivedsAlternateId, 1)); + derivedsAlternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: 1, + storeGenerationIndex: 1); + derivedsAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + derivedsAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(derivedsAlternateId)); + + var principalsId = runtimeEntityType.AddProperty( + "PrincipalsId", + typeof(long), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + principalsId.SetGetter( + long (Dictionary instance) => ((((IDictionary)instance).ContainsKey("PrincipalsId") ? instance["PrincipalsId"] : null) == null ? 0L : ((long)((((IDictionary)instance).ContainsKey("PrincipalsId") ? instance["PrincipalsId"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("PrincipalsId") ? instance["PrincipalsId"] : null) == null); + principalsId.SetSetter( + Dictionary (Dictionary instance, long value) => + { + instance["PrincipalsId"] = ((object)value); + return instance; + }); + principalsId.SetMaterializationSetter( + Dictionary (Dictionary instance, long value) => + { + instance["PrincipalsId"] = ((object)value); + return instance; + }); + principalsId.SetAccessors( + long (IInternalEntry entry) => + { + if (entry.FlaggedAsStoreGenerated(2)) + { + return entry.ReadStoreGeneratedValue(2); + } + else + { + { + if (entry.FlaggedAsTemporary(2) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsId") ? ((Dictionary)(entry.Entity))["PrincipalsId"] : null) == null) + { + return entry.ReadTemporaryValue(2); + } + else + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsId") ? ((Dictionary)(entry.Entity))["PrincipalsId"] : null); + return (nullableValue == null ? default(long) : ((long)nullableValue)); + } + } + } + }, + long (IInternalEntry entry) => + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsId") ? ((Dictionary)(entry.Entity))["PrincipalsId"] : null); + return (nullableValue == null ? default(long) : ((long)nullableValue)); + }, + long (IInternalEntry entry) => entry.ReadOriginalValue(principalsId, 2), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalsId, 2)); + principalsId.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: 2, + storeGenerationIndex: 2); + principalsId.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + keyComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (long v) => ((int)v), + long (int v) => ((long)v)))); + principalsId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalsId)); + + var principalsAlternateId = runtimeEntityType.AddProperty( + "PrincipalsAlternateId", + typeof(Guid), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw); + principalsAlternateId.SetGetter( + Guid (Dictionary instance) => ((((IDictionary)instance).ContainsKey("PrincipalsAlternateId") ? instance["PrincipalsAlternateId"] : null) == null ? new Guid("00000000-0000-0000-0000-000000000000") : ((Guid)((((IDictionary)instance).ContainsKey("PrincipalsAlternateId") ? instance["PrincipalsAlternateId"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("PrincipalsAlternateId") ? instance["PrincipalsAlternateId"] : null) == null); + principalsAlternateId.SetSetter( + Dictionary (Dictionary instance, Guid value) => + { + instance["PrincipalsAlternateId"] = ((object)value); + return instance; + }); + principalsAlternateId.SetMaterializationSetter( + Dictionary (Dictionary instance, Guid value) => + { + instance["PrincipalsAlternateId"] = ((object)value); + return instance; + }); + principalsAlternateId.SetAccessors( + Guid (IInternalEntry entry) => + { + if (entry.FlaggedAsStoreGenerated(3)) + { + return entry.ReadStoreGeneratedValue(3); + } + else + { + { + if (entry.FlaggedAsTemporary(3) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsAlternateId") ? ((Dictionary)(entry.Entity))["PrincipalsAlternateId"] : null) == null) + { + return entry.ReadTemporaryValue(3); + } + else + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsAlternateId") ? ((Dictionary)(entry.Entity))["PrincipalsAlternateId"] : null); + return (nullableValue == null ? default(Guid) : ((Guid)nullableValue)); + } + } + } + }, + Guid (IInternalEntry entry) => + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsAlternateId") ? ((Dictionary)(entry.Entity))["PrincipalsAlternateId"] : null); + return (nullableValue == null ? default(Guid) : ((Guid)nullableValue)); + }, + Guid (IInternalEntry entry) => entry.ReadOriginalValue(principalsAlternateId, 3), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalsAlternateId, 3)); + principalsAlternateId.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: 3, + storeGenerationIndex: 3); + principalsAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + principalsAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalsAlternateId)); + + var rowid = runtimeEntityType.AddProperty( + "rowid", + typeof(byte[]), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + nullable: true, + concurrencyToken: true, + valueGenerated: ValueGenerated.OnAddOrUpdate, + beforeSaveBehavior: PropertySaveBehavior.Ignore, + afterSaveBehavior: PropertySaveBehavior.Ignore); + rowid.SetGetter( + byte[] (Dictionary instance) => ((((IDictionary)instance).ContainsKey("rowid") ? instance["rowid"] : null) == null ? null : ((byte[])((((IDictionary)instance).ContainsKey("rowid") ? instance["rowid"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("rowid") ? instance["rowid"] : null) == null); + rowid.SetSetter( + Dictionary (Dictionary instance, byte[] value) => + { + instance["rowid"] = ((object)value); + return instance; + }); + rowid.SetMaterializationSetter( + Dictionary (Dictionary instance, byte[] value) => + { + instance["rowid"] = ((object)value); + return instance; + }); + rowid.SetAccessors( + byte[] (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(4) ? entry.ReadStoreGeneratedValue(4) : (entry.FlaggedAsTemporary(4) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("rowid") ? ((Dictionary)(entry.Entity))["rowid"] : null) == null ? entry.ReadTemporaryValue(4) : ((byte[])((((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("rowid") ? ((Dictionary)(entry.Entity))["rowid"] : null))))), + byte[] (IInternalEntry entry) => ((byte[])((((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("rowid") ? ((Dictionary)(entry.Entity))["rowid"] : null))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(rowid, 4), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(rowid)); + rowid.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: 4); + rowid.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(v1, v2), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(v), + byte[] (byte[] v) => v.ToArray()), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(8)", + size: 8)); + + var key = runtimeEntityType.AddKey( + new[] { derivedsId, derivedsAlternateId, principalsId, principalsAlternateId }); + runtimeEntityType.SetPrimaryKey(key); + + var index = runtimeEntityType.AddIndex( + new[] { principalsId, principalsAlternateId }); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("DerivedsId"), declaringEntityType.FindProperty("DerivedsAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + required: true); + + return runtimeForeignKey; + } + + public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalsId"), declaringEntityType.FindProperty("PrincipalsAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.ClientCascade, + required: true); + + runtimeForeignKey.AddAnnotation("Relational:Name", "FK_PrincipalBasePrincipalDerived>_Princip~1"); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var derivedsId = runtimeEntityType.FindProperty("DerivedsId"); + var derivedsAlternateId = runtimeEntityType.FindProperty("DerivedsAlternateId"); + var principalsId = runtimeEntityType.FindProperty("PrincipalsId"); + var principalsAlternateId = runtimeEntityType.FindProperty("PrincipalsAlternateId"); + var rowid = runtimeEntityType.FindProperty("rowid"); + var key = runtimeEntityType.FindKey(new[] { derivedsId, derivedsAlternateId, principalsId, principalsAlternateId }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((Dictionary)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)derivedsId).GetValueComparer())).Snapshot(source.GetCurrentValue(derivedsId)), ((ValueComparer)(((IProperty)derivedsAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(derivedsAlternateId)), ((ValueComparer)(((IProperty)principalsId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalsId)), ((ValueComparer)(((IProperty)principalsAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalsAlternateId)), (source.GetCurrentValue(rowid) == null ? null : ((ValueComparer)(((IProperty)rowid).GetValueComparer())).Snapshot(source.GetCurrentValue(rowid)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)derivedsId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)derivedsAlternateId).GetValueComparer())).Snapshot(default(Guid)), ((ValueComparer)(((IProperty)principalsId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalsAlternateId).GetValueComparer())).Snapshot(default(Guid)), (default(byte[]) == null ? null : ((ValueComparer)(((IProperty)rowid).GetValueComparer())).Snapshot(default(byte[]))))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(long), default(Guid), default(byte[]))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => Snapshot.Empty); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((Dictionary)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)derivedsId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(derivedsId)), ((ValueComparer)(((IProperty)derivedsAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(derivedsAlternateId)), ((ValueComparer)(((IProperty)principalsId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalsId)), ((ValueComparer)(((IProperty)principalsAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalsAlternateId))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 5, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 5, + shadowCount: 0, + relationshipCount: 4, + storeGeneratedCount: 5)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBasePrincipalDerived>"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseUnsafeAccessors.cs new file mode 100644 index 00000000..4b43c6dd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalBaseUnsafeAccessors.cs @@ -0,0 +1,63 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class PrincipalBaseUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long? Id(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AnEnum Enum1(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AnEnum? Enum2(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AFlagsEnum FlagsEnum1(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Method, Name = "get_FlagsEnum2")] + public static extern CompiledModelTestBase.AFlagsEnum Get_FlagsEnum2(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Method, Name = "set_FlagsEnum2")] + public static extern void Set_FlagsEnum2(CompiledModelTestBase.PrincipalBase @this, CompiledModelTestBase.AFlagsEnum value); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress[] RefTypeArray(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IEnumerable RefTypeEnumerable(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList RefTypeIList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List RefTypeList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime[] ValueTypeArray(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IEnumerable ValueTypeEnumerable(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList ValueTypeIList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List ValueTypeList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_ownedField")] + public static extern ref CompiledModelTestBase.OwnedType _ownedField(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ICollection Deriveds(CompiledModelTestBase.PrincipalBase @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalDerivedEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalDerivedEntityType.cs new file mode 100644 index 00000000..c234c70b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalDerivedEntityType.cs @@ -0,0 +1,168 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalDerivedEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + typeof(CompiledModelTestBase.PrincipalDerived>), + baseEntityType, + discriminatorValue: "PrincipalDerived>", + propertyCount: 0, + navigationCount: 2, + skipNavigationCount: 1, + foreignKeyCount: 1); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("Id"), declaringEntityType.FindProperty("AlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true); + + return runtimeForeignKey; + } + + public static RuntimeSkipNavigation CreateSkipNavigation1(RuntimeEntityType declaringEntityType, RuntimeEntityType targetEntityType, RuntimeEntityType joinEntityType) + { + var skipNavigation = declaringEntityType.AddSkipNavigation( + "Principals", + targetEntityType, + joinEntityType.FindForeignKey( + new[] { joinEntityType.FindProperty("DerivedsId"), joinEntityType.FindProperty("DerivedsAlternateId") }, + declaringEntityType.FindKey(new[] { declaringEntityType.FindProperty("Id"), declaringEntityType.FindProperty("AlternateId") }), + declaringEntityType), + true, + false, + typeof(ICollection), + propertyInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetProperty("Principals", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var inverse = targetEntityType.FindSkipNavigation("Deriveds"); + if (inverse != null) + { + skipNavigation.Inverse = inverse; + inverse.Inverse = skipNavigation; + } + + skipNavigation.SetGetter( + ICollection (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Principals(instance), + bool (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Principals(instance) == null); + skipNavigation.SetSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, ICollection value) => + { + PrincipalDerivedUnsafeAccessors>.Principals(instance) = value; + return instance; + }); + skipNavigation.SetMaterializationSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, ICollection value) => + { + PrincipalDerivedUnsafeAccessors>.Principals(instance) = value; + return instance; + }); + skipNavigation.SetAccessors( + ICollection (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Principals(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + ICollection (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Principals(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + null, + ICollection (IInternalEntry entry) => entry.GetCurrentValue>(skipNavigation)); + skipNavigation.SetPropertyIndexes( + index: 4, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 6, + storeGenerationIndex: -1); + skipNavigation.SetCollectionAccessor>, ICollection, CompiledModelTestBase.PrincipalBase>( + ICollection (CompiledModelTestBase.PrincipalDerived> entity) => PrincipalDerivedUnsafeAccessors>.Principals(entity), + (CompiledModelTestBase.PrincipalDerived> entity, ICollection collection) => PrincipalDerivedUnsafeAccessors>.Principals(entity) = ((ICollection)collection), + (CompiledModelTestBase.PrincipalDerived> entity, ICollection collection) => PrincipalDerivedUnsafeAccessors>.Principals(entity) = ((ICollection)collection), + ICollection (CompiledModelTestBase.PrincipalDerived> entity, Action>, ICollection> setter) => ClrCollectionAccessorFactory.CreateAndSetHashSet>, ICollection, CompiledModelTestBase.PrincipalBase>(entity, setter), + ICollection () => ((ICollection)(((ICollection)(new HashSet(ReferenceEqualityComparer.Instance)))))); + return skipNavigation; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var alternateId = runtimeEntityType.FindProperty("AlternateId"); + var enum1 = runtimeEntityType.FindProperty("Enum1"); + var enum2 = runtimeEntityType.FindProperty("Enum2"); + var flagsEnum1 = runtimeEntityType.FindProperty("FlagsEnum1"); + var flagsEnum2 = runtimeEntityType.FindProperty("FlagsEnum2"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var owned = runtimeEntityType.FindNavigation("Owned"); + var dependent = runtimeEntityType.FindNavigation("Dependent"); + var manyOwned = runtimeEntityType.FindNavigation("ManyOwned"); + var deriveds = runtimeEntityType.FindSkipNavigation("Deriveds"); + var principals = runtimeEntityType.FindSkipNavigation("Principals"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.PrincipalDerived>)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)alternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), ((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(source.GetCurrentValue(enum1)), (source.GetCurrentValue(enum2) == null ? null : ((ValueComparer)(((IProperty)enum2).GetValueComparer())).Snapshot(source.GetCurrentValue(enum2))), ((ValueComparer)(((IProperty)flagsEnum1).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum1)), ((ValueComparer)(((IProperty)flagsEnum2).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum2)), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot((default(long? ) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(long? ))), ((ValueComparer)(((IProperty)alternateId).GetValueComparer())).Snapshot(default(Guid)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long? ), default(Guid))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => Snapshot.Empty); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.PrincipalDerived>)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)alternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), source.GetCurrentValue(owned), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(deriveds)), source.GetCurrentValue>(dependent), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(manyOwned)), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(principals))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 14, + navigationCount: 5, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 14, + shadowCount: 0, + relationshipCount: 7, + storeGeneratedCount: 2)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalDerived"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalDerivedUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalDerivedUnsafeAccessors.cs new file mode 100644 index 00000000..105dc525 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel/PrincipalDerivedUnsafeAccessors.cs @@ -0,0 +1,23 @@ +// +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class PrincipalDerivedUnsafeAccessors + where TDependent : class + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TDependent Dependent(CompiledModelTestBase.PrincipalDerived @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "ManyOwned")] + public static extern ref IList ManyOwned(CompiledModelTestBase.PrincipalDerived @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ICollection Principals(CompiledModelTestBase.PrincipalDerived @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DbContextModelBuilder.cs new file mode 100644 index 00000000..4844e4f2 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DbContextModelBuilder.cs @@ -0,0 +1,2599 @@ +// +using System; +using System.Collections.Generic; +using System.Text.Json; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Update.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 8) + { + } + + partial void Initialize() + { + var dependentBase = DependentBaseEntityType.Create(this); + var manyTypes = ManyTypesEntityType.Create(this); + var principalBase = PrincipalBaseEntityType.Create(this); + var ownedType = OwnedTypeEntityType.Create(this); + var ownedType0 = OwnedType0EntityType.Create(this); + var principalBasePrincipalDerivedDependentBasebyte = PrincipalBasePrincipalDerivedDependentBasebyteEntityType.Create(this); + var dependentDerived = DependentDerivedEntityType.Create(this, dependentBase); + var principalDerived = PrincipalDerivedEntityType.Create(this, principalBase); + + DependentBaseEntityType.CreateForeignKey1(dependentBase, principalBase); + DependentBaseEntityType.CreateForeignKey2(dependentBase, principalDerived); + OwnedTypeEntityType.CreateForeignKey1(ownedType, principalBase); + OwnedType0EntityType.CreateForeignKey1(ownedType0, principalDerived); + PrincipalBasePrincipalDerivedDependentBasebyteEntityType.CreateForeignKey1(principalBasePrincipalDerivedDependentBasebyte, principalDerived); + PrincipalBasePrincipalDerivedDependentBasebyteEntityType.CreateForeignKey2(principalBasePrincipalDerivedDependentBasebyte, principalBase); + + PrincipalBaseEntityType.CreateSkipNavigation1(principalBase, principalDerived, principalBasePrincipalDerivedDependentBasebyte); + PrincipalDerivedEntityType.CreateSkipNavigation1(principalDerived, principalBase, principalBasePrincipalDerivedDependentBasebyte); + + DependentBaseEntityType.CreateAnnotations(dependentBase); + ManyTypesEntityType.CreateAnnotations(manyTypes); + PrincipalBaseEntityType.CreateAnnotations(principalBase); + OwnedTypeEntityType.CreateAnnotations(ownedType); + OwnedType0EntityType.CreateAnnotations(ownedType0); + PrincipalBasePrincipalDerivedDependentBasebyteEntityType.CreateAnnotations(principalBasePrincipalDerivedDependentBasebyte); + DependentDerivedEntityType.CreateAnnotations(dependentDerived); + PrincipalDerivedEntityType.CreateAnnotations(principalDerived); + + AddAnnotation("Jet:IdentityIncrement", 2); + AddAnnotation("Jet:IdentitySeed", 3); + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + + var dependentBase = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase")!; + + var defaultTableMappings = new List>(); + dependentBase.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", null, relationalModel); + var dataColumnBase = new ColumnBase("Data", "char(20)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Data", dataColumnBase); + var enumDiscriminatorColumnBase = new ColumnBase("EnumDiscriminator", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("EnumDiscriminator", enumDiscriminatorColumnBase); + var idColumnBase = new ColumnBase("Id", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Id", idColumnBase); + var moneyColumnBase = new ColumnBase("Money", "decimal(9,3)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Money", moneyColumnBase); + var principalAlternateIdColumnBase = new ColumnBase("PrincipalAlternateId", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("PrincipalAlternateId", principalAlternateIdColumnBase); + var principalIdColumnBase = new ColumnBase("PrincipalId", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("PrincipalId", principalIdColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase = new TableMappingBase(dependentBase, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase, true); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase, false); + defaultTableMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalAlternateIdColumnBase, dependentBase.FindProperty("PrincipalAlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalIdColumnBase, dependentBase.FindProperty("PrincipalId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumDiscriminatorColumnBase, dependentBase.FindProperty("EnumDiscriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, dependentBase.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + + var tableMappings = new List(); + dependentBase.SetRuntimeAnnotation("Relational:TableMappings", tableMappings); + var dependentBasebyteTable = new Table("DependentBase", null, relationalModel); + var principalIdColumn = new Column("PrincipalId", "decimal(20,0)", dependentBasebyteTable); + dependentBasebyteTable.Columns.Add("PrincipalId", principalIdColumn); + principalIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalIdColumn); + var principalAlternateIdColumn = new Column("PrincipalAlternateId", "uniqueidentifier", dependentBasebyteTable); + dependentBasebyteTable.Columns.Add("PrincipalAlternateId", principalAlternateIdColumn); + principalAlternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalAlternateIdColumn); + var dataColumn = new Column("Data", "char(20)", dependentBasebyteTable) + { + IsNullable = true + }; + dependentBasebyteTable.Columns.Add("Data", dataColumn); + dataColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dataColumn); + var enumDiscriminatorColumn = new Column("EnumDiscriminator", "integer", dependentBasebyteTable); + dependentBasebyteTable.Columns.Add("EnumDiscriminator", enumDiscriminatorColumn); + enumDiscriminatorColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumDiscriminatorColumn); + var idColumn = new Column("Id", "byte", dependentBasebyteTable) + { + IsNullable = true + }; + dependentBasebyteTable.Columns.Add("Id", idColumn); + idColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn); + var moneyColumn = new Column("Money", "decimal(9,3)", dependentBasebyteTable) + { + IsNullable = true + }; + dependentBasebyteTable.Columns.Add("Money", moneyColumn); + moneyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(moneyColumn); + relationalModel.Tables.Add(("DependentBase", null), dependentBasebyteTable); + var dependentBasebyteTableMapping = new TableMapping(dependentBase, dependentBasebyteTable, true) + { + IsSharedTablePrincipal = true, + }; + dependentBasebyteTable.AddTypeMapping(dependentBasebyteTableMapping, false); + tableMappings.Add(dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(principalAlternateIdColumn, dependentBase.FindProperty("PrincipalAlternateId")!, dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(principalIdColumn, dependentBase.FindProperty("PrincipalId")!, dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(enumDiscriminatorColumn, dependentBase.FindProperty("EnumDiscriminator")!, dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(idColumn, dependentBase.FindProperty("Id")!, dependentBasebyteTableMapping); + + var dependentDerived = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived")!; + + var defaultTableMappings0 = new List>(); + dependentDerived.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings0); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0 = new TableMappingBase(dependentDerived, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0, false); + defaultTableMappings0.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)principalAlternateIdColumnBase, dependentDerived.FindProperty("PrincipalAlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)principalIdColumnBase, dependentDerived.FindProperty("PrincipalId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)dataColumnBase, dependentDerived.FindProperty("Data")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)enumDiscriminatorColumnBase, dependentDerived.FindProperty("EnumDiscriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, dependentDerived.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)moneyColumnBase, dependentDerived.FindProperty("Money")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase0); + + var tableMappings0 = new List(); + dependentDerived.SetRuntimeAnnotation("Relational:TableMappings", tableMappings0); + var dependentBasebyteTableMapping0 = new TableMapping(dependentDerived, dependentBasebyteTable, null) + { + IsSharedTablePrincipal = false, + }; + dependentBasebyteTable.AddTypeMapping(dependentBasebyteTableMapping0, false); + tableMappings0.Add(dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(principalAlternateIdColumn, dependentDerived.FindProperty("PrincipalAlternateId")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(principalIdColumn, dependentDerived.FindProperty("PrincipalId")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(dataColumn, dependentDerived.FindProperty("Data")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(enumDiscriminatorColumn, dependentDerived.FindProperty("EnumDiscriminator")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(idColumn, dependentDerived.FindProperty("Id")!, dependentBasebyteTableMapping0); + RelationalModel.CreateColumnMapping(moneyColumn, dependentDerived.FindProperty("Money")!, dependentBasebyteTableMapping0); + var pK_DependentBasebyte = new UniqueConstraint("PK_DependentBase", dependentBasebyteTable, new[] { principalIdColumn, principalAlternateIdColumn }); + dependentBasebyteTable.PrimaryKey = pK_DependentBasebyte; + pK_DependentBasebyte.SetRowKeyValueFactory(new CompositeRowKeyValueFactory(pK_DependentBasebyte)); + var pK_DependentBasebyteKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId", "PrincipalAlternateId" }); + pK_DependentBasebyte.MappedKeys.Add(pK_DependentBasebyteKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_DependentBasebyteKey).Add(pK_DependentBasebyte); + dependentBasebyteTable.UniqueConstraints.Add("PK_DependentBase", pK_DependentBasebyte); + var iX_DependentBasebyte_PrincipalId = new TableIndex( + "IX_DependentBase_PrincipalId", dependentBasebyteTable, new[] { principalIdColumn }, true); + iX_DependentBasebyte_PrincipalId.SetRowIndexValueFactory(new SimpleRowIndexValueFactory(iX_DependentBasebyte_PrincipalId)); + var iX_DependentBasebyte_PrincipalIdIx = RelationalModel.GetIndex(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId" }); + iX_DependentBasebyte_PrincipalId.MappedIndexes.Add(iX_DependentBasebyte_PrincipalIdIx); + RelationalModel.GetOrCreateTableIndexes(iX_DependentBasebyte_PrincipalIdIx).Add(iX_DependentBasebyte_PrincipalId); + dependentBasebyteTable.Indexes.Add("IX_DependentBase_PrincipalId", iX_DependentBasebyte_PrincipalId); + + var manyTypes = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes")!; + + var defaultTableMappings1 = new List>(); + manyTypes.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings1); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes", null, relationalModel); + var boolColumnBase = new ColumnBase("Bool", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Bool", boolColumnBase); + var boolArrayColumnBase = new ColumnBase("BoolArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolArray", boolArrayColumnBase); + var boolReadOnlyCollectionColumnBase = new ColumnBase("BoolReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolReadOnlyCollection", boolReadOnlyCollectionColumnBase); + var boolToStringConverterPropertyColumnBase = new ColumnBase("BoolToStringConverterProperty", "varchar(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolToStringConverterProperty", boolToStringConverterPropertyColumnBase); + var boolToTwoValuesConverterPropertyColumnBase = new ColumnBase("BoolToTwoValuesConverterProperty", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolToTwoValuesConverterProperty", boolToTwoValuesConverterPropertyColumnBase); + var boolToZeroOneConverterPropertyColumnBase = new ColumnBase("BoolToZeroOneConverterProperty", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BoolToZeroOneConverterProperty", boolToZeroOneConverterPropertyColumnBase); + var bytesColumnBase = new ColumnBase("Bytes", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Bytes", bytesColumnBase); + var bytesArrayColumnBase = new ColumnBase("BytesArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BytesArray", bytesArrayColumnBase); + var bytesToStringConverterPropertyColumnBase = new ColumnBase("BytesToStringConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("BytesToStringConverterProperty", bytesToStringConverterPropertyColumnBase); + var castingConverterPropertyColumnBase = new ColumnBase("CastingConverterProperty", "decimal(18,2)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("CastingConverterProperty", castingConverterPropertyColumnBase); + var charColumnBase = new ColumnBase("Char", "varchar(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Char", charColumnBase); + var charArrayColumnBase = new ColumnBase("CharArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("CharArray", charArrayColumnBase); + var charToStringConverterPropertyColumnBase = new ColumnBase("CharToStringConverterProperty", "char(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("CharToStringConverterProperty", charToStringConverterPropertyColumnBase); + var dateOnlyColumnBase = new ColumnBase("DateOnly", "date", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateOnly", dateOnlyColumnBase); + var dateOnlyArrayColumnBase = new ColumnBase("DateOnlyArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateOnlyArray", dateOnlyArrayColumnBase); + var dateOnlyToStringConverterPropertyColumnBase = new ColumnBase("DateOnlyToStringConverterProperty", "varchar(10)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateOnlyToStringConverterProperty", dateOnlyToStringConverterPropertyColumnBase); + var dateTimeColumnBase = new ColumnBase("DateTime", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTime", dateTimeColumnBase); + var dateTimeArrayColumnBase = new ColumnBase("DateTimeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeArray", dateTimeArrayColumnBase); + var dateTimeOffsetToBinaryConverterPropertyColumnBase = new ColumnBase("DateTimeOffsetToBinaryConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeOffsetToBinaryConverterProperty", dateTimeOffsetToBinaryConverterPropertyColumnBase); + var dateTimeOffsetToBytesConverterPropertyColumnBase = new ColumnBase("DateTimeOffsetToBytesConverterProperty", "varbinary(12)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeOffsetToBytesConverterProperty", dateTimeOffsetToBytesConverterPropertyColumnBase); + var dateTimeOffsetToStringConverterPropertyColumnBase = new ColumnBase("DateTimeOffsetToStringConverterProperty", "varchar(48)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeOffsetToStringConverterProperty", dateTimeOffsetToStringConverterPropertyColumnBase); + var dateTimeToBinaryConverterPropertyColumnBase = new ColumnBase("DateTimeToBinaryConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeToBinaryConverterProperty", dateTimeToBinaryConverterPropertyColumnBase); + var dateTimeToStringConverterPropertyColumnBase = new ColumnBase("DateTimeToStringConverterProperty", "varchar(48)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeToStringConverterProperty", dateTimeToStringConverterPropertyColumnBase); + var dateTimeToTicksConverterPropertyColumnBase = new ColumnBase("DateTimeToTicksConverterProperty", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DateTimeToTicksConverterProperty", dateTimeToTicksConverterPropertyColumnBase); + var decimalColumnBase = new ColumnBase("Decimal", "decimal(18,2)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Decimal", decimalColumnBase); + var decimalArrayColumnBase = new ColumnBase("DecimalArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DecimalArray", decimalArrayColumnBase); + var decimalNumberToBytesConverterPropertyColumnBase = new ColumnBase("DecimalNumberToBytesConverterProperty", "varbinary(16)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DecimalNumberToBytesConverterProperty", decimalNumberToBytesConverterPropertyColumnBase); + var decimalNumberToStringConverterPropertyColumnBase = new ColumnBase("DecimalNumberToStringConverterProperty", "varchar(64)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DecimalNumberToStringConverterProperty", decimalNumberToStringConverterPropertyColumnBase); + var doubleColumnBase = new ColumnBase("Double", "double", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Double", doubleColumnBase); + var doubleArrayColumnBase = new ColumnBase("DoubleArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DoubleArray", doubleArrayColumnBase); + var doubleNumberToBytesConverterPropertyColumnBase = new ColumnBase("DoubleNumberToBytesConverterProperty", "varbinary(8)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DoubleNumberToBytesConverterProperty", doubleNumberToBytesConverterPropertyColumnBase); + var doubleNumberToStringConverterPropertyColumnBase = new ColumnBase("DoubleNumberToStringConverterProperty", "varchar(64)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("DoubleNumberToStringConverterProperty", doubleNumberToStringConverterPropertyColumnBase); + var enum16ColumnBase = new ColumnBase("Enum16", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16", enum16ColumnBase); + var enum16ArrayColumnBase = new ColumnBase("Enum16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16Array", enum16ArrayColumnBase); + var enum16AsStringColumnBase = new ColumnBase("Enum16AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16AsString", enum16AsStringColumnBase); + var enum16AsStringArrayColumnBase = new ColumnBase("Enum16AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16AsStringArray", enum16AsStringArrayColumnBase); + var enum16AsStringCollectionColumnBase = new ColumnBase("Enum16AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16AsStringCollection", enum16AsStringCollectionColumnBase); + var enum16CollectionColumnBase = new ColumnBase("Enum16Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum16Collection", enum16CollectionColumnBase); + var enum32ColumnBase = new ColumnBase("Enum32", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32", enum32ColumnBase); + var enum32ArrayColumnBase = new ColumnBase("Enum32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32Array", enum32ArrayColumnBase); + var enum32AsStringColumnBase = new ColumnBase("Enum32AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32AsString", enum32AsStringColumnBase); + var enum32AsStringArrayColumnBase = new ColumnBase("Enum32AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32AsStringArray", enum32AsStringArrayColumnBase); + var enum32AsStringCollectionColumnBase = new ColumnBase("Enum32AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32AsStringCollection", enum32AsStringCollectionColumnBase); + var enum32CollectionColumnBase = new ColumnBase("Enum32Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum32Collection", enum32CollectionColumnBase); + var enum64ColumnBase = new ColumnBase("Enum64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64", enum64ColumnBase); + var enum64ArrayColumnBase = new ColumnBase("Enum64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64Array", enum64ArrayColumnBase); + var enum64AsStringColumnBase = new ColumnBase("Enum64AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64AsString", enum64AsStringColumnBase); + var enum64AsStringArrayColumnBase = new ColumnBase("Enum64AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64AsStringArray", enum64AsStringArrayColumnBase); + var enum64AsStringCollectionColumnBase = new ColumnBase("Enum64AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64AsStringCollection", enum64AsStringCollectionColumnBase); + var enum64CollectionColumnBase = new ColumnBase("Enum64Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum64Collection", enum64CollectionColumnBase); + var enum8ColumnBase = new ColumnBase("Enum8", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8", enum8ColumnBase); + var enum8ArrayColumnBase = new ColumnBase("Enum8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8Array", enum8ArrayColumnBase); + var enum8AsStringColumnBase = new ColumnBase("Enum8AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8AsString", enum8AsStringColumnBase); + var enum8AsStringArrayColumnBase = new ColumnBase("Enum8AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8AsStringArray", enum8AsStringArrayColumnBase); + var enum8AsStringCollectionColumnBase = new ColumnBase("Enum8AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8AsStringCollection", enum8AsStringCollectionColumnBase); + var enum8CollectionColumnBase = new ColumnBase("Enum8Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Enum8Collection", enum8CollectionColumnBase); + var enumToNumberConverterPropertyColumnBase = new ColumnBase("EnumToNumberConverterProperty", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumToNumberConverterProperty", enumToNumberConverterPropertyColumnBase); + var enumToStringConverterPropertyColumnBase = new ColumnBase("EnumToStringConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumToStringConverterProperty", enumToStringConverterPropertyColumnBase); + var enumU16ColumnBase = new ColumnBase("EnumU16", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16", enumU16ColumnBase); + var enumU16ArrayColumnBase = new ColumnBase("EnumU16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16Array", enumU16ArrayColumnBase); + var enumU16AsStringColumnBase = new ColumnBase("EnumU16AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16AsString", enumU16AsStringColumnBase); + var enumU16AsStringArrayColumnBase = new ColumnBase("EnumU16AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16AsStringArray", enumU16AsStringArrayColumnBase); + var enumU16AsStringCollectionColumnBase = new ColumnBase("EnumU16AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16AsStringCollection", enumU16AsStringCollectionColumnBase); + var enumU16CollectionColumnBase = new ColumnBase("EnumU16Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU16Collection", enumU16CollectionColumnBase); + var enumU32ColumnBase = new ColumnBase("EnumU32", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32", enumU32ColumnBase); + var enumU32ArrayColumnBase = new ColumnBase("EnumU32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32Array", enumU32ArrayColumnBase); + var enumU32AsStringColumnBase = new ColumnBase("EnumU32AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32AsString", enumU32AsStringColumnBase); + var enumU32AsStringArrayColumnBase = new ColumnBase("EnumU32AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32AsStringArray", enumU32AsStringArrayColumnBase); + var enumU32AsStringCollectionColumnBase = new ColumnBase("EnumU32AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32AsStringCollection", enumU32AsStringCollectionColumnBase); + var enumU32CollectionColumnBase = new ColumnBase("EnumU32Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU32Collection", enumU32CollectionColumnBase); + var enumU64ColumnBase = new ColumnBase("EnumU64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64", enumU64ColumnBase); + var enumU64ArrayColumnBase = new ColumnBase("EnumU64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64Array", enumU64ArrayColumnBase); + var enumU64AsStringColumnBase = new ColumnBase("EnumU64AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64AsString", enumU64AsStringColumnBase); + var enumU64AsStringArrayColumnBase = new ColumnBase("EnumU64AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64AsStringArray", enumU64AsStringArrayColumnBase); + var enumU64AsStringCollectionColumnBase = new ColumnBase("EnumU64AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64AsStringCollection", enumU64AsStringCollectionColumnBase); + var enumU64CollectionColumnBase = new ColumnBase("EnumU64Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU64Collection", enumU64CollectionColumnBase); + var enumU8ColumnBase = new ColumnBase("EnumU8", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8", enumU8ColumnBase); + var enumU8ArrayColumnBase = new ColumnBase("EnumU8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8Array", enumU8ArrayColumnBase); + var enumU8AsStringColumnBase = new ColumnBase("EnumU8AsString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8AsString", enumU8AsStringColumnBase); + var enumU8AsStringArrayColumnBase = new ColumnBase("EnumU8AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8AsStringArray", enumU8AsStringArrayColumnBase); + var enumU8AsStringCollectionColumnBase = new ColumnBase("EnumU8AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8AsStringCollection", enumU8AsStringCollectionColumnBase); + var enumU8CollectionColumnBase = new ColumnBase("EnumU8Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("EnumU8Collection", enumU8CollectionColumnBase); + var floatColumnBase = new ColumnBase("Float", "single", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Float", floatColumnBase); + var floatArrayColumnBase = new ColumnBase("FloatArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("FloatArray", floatArrayColumnBase); + var guidColumnBase = new ColumnBase("Guid", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Guid", guidColumnBase); + var guidArrayColumnBase = new ColumnBase("GuidArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("GuidArray", guidArrayColumnBase); + var guidToBytesConverterPropertyColumnBase = new ColumnBase("GuidToBytesConverterProperty", "varbinary(16)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("GuidToBytesConverterProperty", guidToBytesConverterPropertyColumnBase); + var guidToStringConverterPropertyColumnBase = new ColumnBase("GuidToStringConverterProperty", "varchar(36)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("GuidToStringConverterProperty", guidToStringConverterPropertyColumnBase); + var iPAddressColumnBase = new ColumnBase("IPAddress", "varchar(45)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddress", iPAddressColumnBase); + var iPAddressArrayColumnBase = new ColumnBase("IPAddressArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddressArray", iPAddressArrayColumnBase); + var iPAddressReadOnlyCollectionColumnBase = new ColumnBase("IPAddressReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddressReadOnlyCollection", iPAddressReadOnlyCollectionColumnBase); + var iPAddressToBytesConverterPropertyColumnBase = new ColumnBase("IPAddressToBytesConverterProperty", "varbinary(16)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddressToBytesConverterProperty", iPAddressToBytesConverterPropertyColumnBase); + var iPAddressToStringConverterPropertyColumnBase = new ColumnBase("IPAddressToStringConverterProperty", "varchar(45)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IPAddressToStringConverterProperty", iPAddressToStringConverterPropertyColumnBase); + var idColumnBase0 = new ColumnBase("Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Id", idColumnBase0); + var int16ColumnBase = new ColumnBase("Int16", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int16", int16ColumnBase); + var int16ArrayColumnBase = new ColumnBase("Int16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int16Array", int16ArrayColumnBase); + var int32ColumnBase = new ColumnBase("Int32", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int32", int32ColumnBase); + var int32ArrayColumnBase = new ColumnBase("Int32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int32Array", int32ArrayColumnBase); + var int32ReadOnlyCollectionColumnBase = new ColumnBase("Int32ReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int32ReadOnlyCollection", int32ReadOnlyCollectionColumnBase); + var int64ColumnBase = new ColumnBase("Int64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int64", int64ColumnBase); + var int64ArrayColumnBase = new ColumnBase("Int64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int64Array", int64ArrayColumnBase); + var int8ColumnBase = new ColumnBase("Int8", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int8", int8ColumnBase); + var int8ArrayColumnBase = new ColumnBase("Int8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Int8Array", int8ArrayColumnBase); + var intNumberToBytesConverterPropertyColumnBase = new ColumnBase("IntNumberToBytesConverterProperty", "varbinary(4)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IntNumberToBytesConverterProperty", intNumberToBytesConverterPropertyColumnBase); + var intNumberToStringConverterPropertyColumnBase = new ColumnBase("IntNumberToStringConverterProperty", "varchar(64)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("IntNumberToStringConverterProperty", intNumberToStringConverterPropertyColumnBase); + var nullIntToNullStringConverterPropertyColumnBase = new ColumnBase("NullIntToNullStringConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullIntToNullStringConverterProperty", nullIntToNullStringConverterPropertyColumnBase); + var nullableBoolColumnBase = new ColumnBase("NullableBool", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableBool", nullableBoolColumnBase); + var nullableBoolArrayColumnBase = new ColumnBase("NullableBoolArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableBoolArray", nullableBoolArrayColumnBase); + var nullableBytesColumnBase = new ColumnBase("NullableBytes", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableBytes", nullableBytesColumnBase); + var nullableBytesArrayColumnBase = new ColumnBase("NullableBytesArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableBytesArray", nullableBytesArrayColumnBase); + var nullableCharColumnBase = new ColumnBase("NullableChar", "varchar(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableChar", nullableCharColumnBase); + var nullableCharArrayColumnBase = new ColumnBase("NullableCharArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableCharArray", nullableCharArrayColumnBase); + var nullableDateOnlyColumnBase = new ColumnBase("NullableDateOnly", "date", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDateOnly", nullableDateOnlyColumnBase); + var nullableDateOnlyArrayColumnBase = new ColumnBase("NullableDateOnlyArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDateOnlyArray", nullableDateOnlyArrayColumnBase); + var nullableDateTimeColumnBase = new ColumnBase("NullableDateTime", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDateTime", nullableDateTimeColumnBase); + var nullableDateTimeArrayColumnBase = new ColumnBase("NullableDateTimeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDateTimeArray", nullableDateTimeArrayColumnBase); + var nullableDecimalColumnBase = new ColumnBase("NullableDecimal", "decimal(18,2)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDecimal", nullableDecimalColumnBase); + var nullableDecimalArrayColumnBase = new ColumnBase("NullableDecimalArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDecimalArray", nullableDecimalArrayColumnBase); + var nullableDoubleColumnBase = new ColumnBase("NullableDouble", "double", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDouble", nullableDoubleColumnBase); + var nullableDoubleArrayColumnBase = new ColumnBase("NullableDoubleArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableDoubleArray", nullableDoubleArrayColumnBase); + var nullableEnum16ColumnBase = new ColumnBase("NullableEnum16", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16", nullableEnum16ColumnBase); + var nullableEnum16ArrayColumnBase = new ColumnBase("NullableEnum16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16Array", nullableEnum16ArrayColumnBase); + var nullableEnum16AsStringColumnBase = new ColumnBase("NullableEnum16AsString", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16AsString", nullableEnum16AsStringColumnBase); + var nullableEnum16AsStringArrayColumnBase = new ColumnBase("NullableEnum16AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16AsStringArray", nullableEnum16AsStringArrayColumnBase); + var nullableEnum16AsStringCollectionColumnBase = new ColumnBase("NullableEnum16AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16AsStringCollection", nullableEnum16AsStringCollectionColumnBase); + var nullableEnum16CollectionColumnBase = new ColumnBase("NullableEnum16Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum16Collection", nullableEnum16CollectionColumnBase); + var nullableEnum32ColumnBase = new ColumnBase("NullableEnum32", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32", nullableEnum32ColumnBase); + var nullableEnum32ArrayColumnBase = new ColumnBase("NullableEnum32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32Array", nullableEnum32ArrayColumnBase); + var nullableEnum32AsStringColumnBase = new ColumnBase("NullableEnum32AsString", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32AsString", nullableEnum32AsStringColumnBase); + var nullableEnum32AsStringArrayColumnBase = new ColumnBase("NullableEnum32AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32AsStringArray", nullableEnum32AsStringArrayColumnBase); + var nullableEnum32AsStringCollectionColumnBase = new ColumnBase("NullableEnum32AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32AsStringCollection", nullableEnum32AsStringCollectionColumnBase); + var nullableEnum32CollectionColumnBase = new ColumnBase("NullableEnum32Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum32Collection", nullableEnum32CollectionColumnBase); + var nullableEnum64ColumnBase = new ColumnBase("NullableEnum64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64", nullableEnum64ColumnBase); + var nullableEnum64ArrayColumnBase = new ColumnBase("NullableEnum64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64Array", nullableEnum64ArrayColumnBase); + var nullableEnum64AsStringColumnBase = new ColumnBase("NullableEnum64AsString", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64AsString", nullableEnum64AsStringColumnBase); + var nullableEnum64AsStringArrayColumnBase = new ColumnBase("NullableEnum64AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64AsStringArray", nullableEnum64AsStringArrayColumnBase); + var nullableEnum64AsStringCollectionColumnBase = new ColumnBase("NullableEnum64AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64AsStringCollection", nullableEnum64AsStringCollectionColumnBase); + var nullableEnum64CollectionColumnBase = new ColumnBase("NullableEnum64Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum64Collection", nullableEnum64CollectionColumnBase); + var nullableEnum8ColumnBase = new ColumnBase("NullableEnum8", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8", nullableEnum8ColumnBase); + var nullableEnum8ArrayColumnBase = new ColumnBase("NullableEnum8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8Array", nullableEnum8ArrayColumnBase); + var nullableEnum8AsStringColumnBase = new ColumnBase("NullableEnum8AsString", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8AsString", nullableEnum8AsStringColumnBase); + var nullableEnum8AsStringArrayColumnBase = new ColumnBase("NullableEnum8AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8AsStringArray", nullableEnum8AsStringArrayColumnBase); + var nullableEnum8AsStringCollectionColumnBase = new ColumnBase("NullableEnum8AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8AsStringCollection", nullableEnum8AsStringCollectionColumnBase); + var nullableEnum8CollectionColumnBase = new ColumnBase("NullableEnum8Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnum8Collection", nullableEnum8CollectionColumnBase); + var nullableEnumU16ColumnBase = new ColumnBase("NullableEnumU16", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16", nullableEnumU16ColumnBase); + var nullableEnumU16ArrayColumnBase = new ColumnBase("NullableEnumU16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16Array", nullableEnumU16ArrayColumnBase); + var nullableEnumU16AsStringColumnBase = new ColumnBase("NullableEnumU16AsString", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16AsString", nullableEnumU16AsStringColumnBase); + var nullableEnumU16AsStringArrayColumnBase = new ColumnBase("NullableEnumU16AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16AsStringArray", nullableEnumU16AsStringArrayColumnBase); + var nullableEnumU16AsStringCollectionColumnBase = new ColumnBase("NullableEnumU16AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16AsStringCollection", nullableEnumU16AsStringCollectionColumnBase); + var nullableEnumU16CollectionColumnBase = new ColumnBase("NullableEnumU16Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU16Collection", nullableEnumU16CollectionColumnBase); + var nullableEnumU32ColumnBase = new ColumnBase("NullableEnumU32", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32", nullableEnumU32ColumnBase); + var nullableEnumU32ArrayColumnBase = new ColumnBase("NullableEnumU32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32Array", nullableEnumU32ArrayColumnBase); + var nullableEnumU32AsStringColumnBase = new ColumnBase("NullableEnumU32AsString", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32AsString", nullableEnumU32AsStringColumnBase); + var nullableEnumU32AsStringArrayColumnBase = new ColumnBase("NullableEnumU32AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32AsStringArray", nullableEnumU32AsStringArrayColumnBase); + var nullableEnumU32AsStringCollectionColumnBase = new ColumnBase("NullableEnumU32AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32AsStringCollection", nullableEnumU32AsStringCollectionColumnBase); + var nullableEnumU32CollectionColumnBase = new ColumnBase("NullableEnumU32Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU32Collection", nullableEnumU32CollectionColumnBase); + var nullableEnumU64ColumnBase = new ColumnBase("NullableEnumU64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64", nullableEnumU64ColumnBase); + var nullableEnumU64ArrayColumnBase = new ColumnBase("NullableEnumU64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64Array", nullableEnumU64ArrayColumnBase); + var nullableEnumU64AsStringColumnBase = new ColumnBase("NullableEnumU64AsString", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64AsString", nullableEnumU64AsStringColumnBase); + var nullableEnumU64AsStringArrayColumnBase = new ColumnBase("NullableEnumU64AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64AsStringArray", nullableEnumU64AsStringArrayColumnBase); + var nullableEnumU64AsStringCollectionColumnBase = new ColumnBase("NullableEnumU64AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64AsStringCollection", nullableEnumU64AsStringCollectionColumnBase); + var nullableEnumU64CollectionColumnBase = new ColumnBase("NullableEnumU64Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU64Collection", nullableEnumU64CollectionColumnBase); + var nullableEnumU8ColumnBase = new ColumnBase("NullableEnumU8", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8", nullableEnumU8ColumnBase); + var nullableEnumU8ArrayColumnBase = new ColumnBase("NullableEnumU8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8Array", nullableEnumU8ArrayColumnBase); + var nullableEnumU8AsStringColumnBase = new ColumnBase("NullableEnumU8AsString", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8AsString", nullableEnumU8AsStringColumnBase); + var nullableEnumU8AsStringArrayColumnBase = new ColumnBase("NullableEnumU8AsStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8AsStringArray", nullableEnumU8AsStringArrayColumnBase); + var nullableEnumU8AsStringCollectionColumnBase = new ColumnBase("NullableEnumU8AsStringCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8AsStringCollection", nullableEnumU8AsStringCollectionColumnBase); + var nullableEnumU8CollectionColumnBase = new ColumnBase("NullableEnumU8Collection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableEnumU8Collection", nullableEnumU8CollectionColumnBase); + var nullableFloatColumnBase = new ColumnBase("NullableFloat", "single", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableFloat", nullableFloatColumnBase); + var nullableFloatArrayColumnBase = new ColumnBase("NullableFloatArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableFloatArray", nullableFloatArrayColumnBase); + var nullableGuidColumnBase = new ColumnBase("NullableGuid", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableGuid", nullableGuidColumnBase); + var nullableGuidArrayColumnBase = new ColumnBase("NullableGuidArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableGuidArray", nullableGuidArrayColumnBase); + var nullableIPAddressColumnBase = new ColumnBase("NullableIPAddress", "varchar(45)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableIPAddress", nullableIPAddressColumnBase); + var nullableIPAddressArrayColumnBase = new ColumnBase("NullableIPAddressArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableIPAddressArray", nullableIPAddressArrayColumnBase); + var nullableInt16ColumnBase = new ColumnBase("NullableInt16", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt16", nullableInt16ColumnBase); + var nullableInt16ArrayColumnBase = new ColumnBase("NullableInt16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt16Array", nullableInt16ArrayColumnBase); + var nullableInt32ColumnBase = new ColumnBase("NullableInt32", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt32", nullableInt32ColumnBase); + var nullableInt32ArrayColumnBase = new ColumnBase("NullableInt32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt32Array", nullableInt32ArrayColumnBase); + var nullableInt64ColumnBase = new ColumnBase("NullableInt64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt64", nullableInt64ColumnBase); + var nullableInt64ArrayColumnBase = new ColumnBase("NullableInt64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt64Array", nullableInt64ArrayColumnBase); + var nullableInt8ColumnBase = new ColumnBase("NullableInt8", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt8", nullableInt8ColumnBase); + var nullableInt8ArrayColumnBase = new ColumnBase("NullableInt8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableInt8Array", nullableInt8ArrayColumnBase); + var nullablePhysicalAddressColumnBase = new ColumnBase("NullablePhysicalAddress", "varchar(20)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullablePhysicalAddress", nullablePhysicalAddressColumnBase); + var nullablePhysicalAddressArrayColumnBase = new ColumnBase("NullablePhysicalAddressArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullablePhysicalAddressArray", nullablePhysicalAddressArrayColumnBase); + var nullableStringColumnBase = new ColumnBase("NullableString", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableString", nullableStringColumnBase); + var nullableStringArrayColumnBase = new ColumnBase("NullableStringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableStringArray", nullableStringArrayColumnBase); + var nullableTimeOnlyColumnBase = new ColumnBase("NullableTimeOnly", "time", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableTimeOnly", nullableTimeOnlyColumnBase); + var nullableTimeOnlyArrayColumnBase = new ColumnBase("NullableTimeOnlyArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableTimeOnlyArray", nullableTimeOnlyArrayColumnBase); + var nullableTimeSpanColumnBase = new ColumnBase("NullableTimeSpan", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableTimeSpan", nullableTimeSpanColumnBase); + var nullableTimeSpanArrayColumnBase = new ColumnBase("NullableTimeSpanArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableTimeSpanArray", nullableTimeSpanArrayColumnBase); + var nullableUInt16ColumnBase = new ColumnBase("NullableUInt16", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt16", nullableUInt16ColumnBase); + var nullableUInt16ArrayColumnBase = new ColumnBase("NullableUInt16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt16Array", nullableUInt16ArrayColumnBase); + var nullableUInt32ColumnBase = new ColumnBase("NullableUInt32", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt32", nullableUInt32ColumnBase); + var nullableUInt32ArrayColumnBase = new ColumnBase("NullableUInt32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt32Array", nullableUInt32ArrayColumnBase); + var nullableUInt64ColumnBase = new ColumnBase("NullableUInt64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt64", nullableUInt64ColumnBase); + var nullableUInt64ArrayColumnBase = new ColumnBase("NullableUInt64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt64Array", nullableUInt64ArrayColumnBase); + var nullableUInt8ColumnBase = new ColumnBase("NullableUInt8", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt8", nullableUInt8ColumnBase); + var nullableUInt8ArrayColumnBase = new ColumnBase("NullableUInt8Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUInt8Array", nullableUInt8ArrayColumnBase); + var nullableUriColumnBase = new ColumnBase("NullableUri", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUri", nullableUriColumnBase); + var nullableUriArrayColumnBase = new ColumnBase("NullableUriArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("NullableUriArray", nullableUriArrayColumnBase); + var physicalAddressColumnBase = new ColumnBase("PhysicalAddress", "varchar(20)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("PhysicalAddress", physicalAddressColumnBase); + var physicalAddressArrayColumnBase = new ColumnBase("PhysicalAddressArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("PhysicalAddressArray", physicalAddressArrayColumnBase); + var physicalAddressToBytesConverterPropertyColumnBase = new ColumnBase("PhysicalAddressToBytesConverterProperty", "varbinary(8)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("PhysicalAddressToBytesConverterProperty", physicalAddressToBytesConverterPropertyColumnBase); + var physicalAddressToStringConverterPropertyColumnBase = new ColumnBase("PhysicalAddressToStringConverterProperty", "varchar(20)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("PhysicalAddressToStringConverterProperty", physicalAddressToStringConverterPropertyColumnBase); + var stringColumnBase = new ColumnBase("String", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("String", stringColumnBase); + var stringArrayColumnBase = new ColumnBase("StringArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringArray", stringArrayColumnBase); + var stringReadOnlyCollectionColumnBase = new ColumnBase("StringReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringReadOnlyCollection", stringReadOnlyCollectionColumnBase); + var stringToBoolConverterPropertyColumnBase = new ColumnBase("StringToBoolConverterProperty", "smallint", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToBoolConverterProperty", stringToBoolConverterPropertyColumnBase); + var stringToBytesConverterPropertyColumnBase = new ColumnBase("StringToBytesConverterProperty", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToBytesConverterProperty", stringToBytesConverterPropertyColumnBase); + var stringToCharConverterPropertyColumnBase = new ColumnBase("StringToCharConverterProperty", "varchar(1)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToCharConverterProperty", stringToCharConverterPropertyColumnBase); + var stringToDateOnlyConverterPropertyColumnBase = new ColumnBase("StringToDateOnlyConverterProperty", "date", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDateOnlyConverterProperty", stringToDateOnlyConverterPropertyColumnBase); + var stringToDateTimeConverterPropertyColumnBase = new ColumnBase("StringToDateTimeConverterProperty", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDateTimeConverterProperty", stringToDateTimeConverterPropertyColumnBase); + var stringToDateTimeOffsetConverterPropertyColumnBase = new ColumnBase("StringToDateTimeOffsetConverterProperty", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDateTimeOffsetConverterProperty", stringToDateTimeOffsetConverterPropertyColumnBase); + var stringToDecimalNumberConverterPropertyColumnBase = new ColumnBase("StringToDecimalNumberConverterProperty", "decimal(18,2)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDecimalNumberConverterProperty", stringToDecimalNumberConverterPropertyColumnBase); + var stringToDoubleNumberConverterPropertyColumnBase = new ColumnBase("StringToDoubleNumberConverterProperty", "double", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToDoubleNumberConverterProperty", stringToDoubleNumberConverterPropertyColumnBase); + var stringToEnumConverterPropertyColumnBase = new ColumnBase("StringToEnumConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToEnumConverterProperty", stringToEnumConverterPropertyColumnBase); + var stringToGuidConverterPropertyColumnBase = new ColumnBase("StringToGuidConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToGuidConverterProperty", stringToGuidConverterPropertyColumnBase); + var stringToIntNumberConverterPropertyColumnBase = new ColumnBase("StringToIntNumberConverterProperty", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToIntNumberConverterProperty", stringToIntNumberConverterPropertyColumnBase); + var stringToTimeOnlyConverterPropertyColumnBase = new ColumnBase("StringToTimeOnlyConverterProperty", "time", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToTimeOnlyConverterProperty", stringToTimeOnlyConverterPropertyColumnBase); + var stringToTimeSpanConverterPropertyColumnBase = new ColumnBase("StringToTimeSpanConverterProperty", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToTimeSpanConverterProperty", stringToTimeSpanConverterPropertyColumnBase); + var stringToUriConverterPropertyColumnBase = new ColumnBase("StringToUriConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("StringToUriConverterProperty", stringToUriConverterPropertyColumnBase); + var timeOnlyColumnBase = new ColumnBase("TimeOnly", "time", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeOnly", timeOnlyColumnBase); + var timeOnlyArrayColumnBase = new ColumnBase("TimeOnlyArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeOnlyArray", timeOnlyArrayColumnBase); + var timeOnlyToStringConverterPropertyColumnBase = new ColumnBase("TimeOnlyToStringConverterProperty", "varchar(48)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeOnlyToStringConverterProperty", timeOnlyToStringConverterPropertyColumnBase); + var timeOnlyToTicksConverterPropertyColumnBase = new ColumnBase("TimeOnlyToTicksConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeOnlyToTicksConverterProperty", timeOnlyToTicksConverterPropertyColumnBase); + var timeSpanColumnBase = new ColumnBase("TimeSpan", "datetime", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeSpan", timeSpanColumnBase); + var timeSpanArrayColumnBase = new ColumnBase("TimeSpanArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeSpanArray", timeSpanArrayColumnBase); + var timeSpanToStringConverterPropertyColumnBase = new ColumnBase("TimeSpanToStringConverterProperty", "varchar(48)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeSpanToStringConverterProperty", timeSpanToStringConverterPropertyColumnBase); + var timeSpanToTicksConverterPropertyColumnBase = new ColumnBase("TimeSpanToTicksConverterProperty", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("TimeSpanToTicksConverterProperty", timeSpanToTicksConverterPropertyColumnBase); + var uInt16ColumnBase = new ColumnBase("UInt16", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt16", uInt16ColumnBase); + var uInt16ArrayColumnBase = new ColumnBase("UInt16Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt16Array", uInt16ArrayColumnBase); + var uInt32ColumnBase = new ColumnBase("UInt32", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt32", uInt32ColumnBase); + var uInt32ArrayColumnBase = new ColumnBase("UInt32Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt32Array", uInt32ArrayColumnBase); + var uInt64ColumnBase = new ColumnBase("UInt64", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt64", uInt64ColumnBase); + var uInt64ArrayColumnBase = new ColumnBase("UInt64Array", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt64Array", uInt64ArrayColumnBase); + var uInt8ColumnBase = new ColumnBase("UInt8", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt8", uInt8ColumnBase); + var uInt8ArrayColumnBase = new ColumnBase("UInt8Array", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt8Array", uInt8ArrayColumnBase); + var uInt8ReadOnlyCollectionColumnBase = new ColumnBase("UInt8ReadOnlyCollection", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UInt8ReadOnlyCollection", uInt8ReadOnlyCollectionColumnBase); + var uriColumnBase = new ColumnBase("Uri", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("Uri", uriColumnBase); + var uriArrayColumnBase = new ColumnBase("UriArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UriArray", uriArrayColumnBase); + var uriToStringConverterPropertyColumnBase = new ColumnBase("UriToStringConverterProperty", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.Columns.Add("UriToStringConverterProperty", uriToStringConverterPropertyColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase = new TableMappingBase(manyTypes, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase, false); + defaultTableMappings1.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase0, manyTypes.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolColumnBase, manyTypes.FindProperty("Bool")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolArrayColumnBase, manyTypes.FindProperty("BoolArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolReadOnlyCollectionColumnBase, manyTypes.FindProperty("BoolReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolToStringConverterPropertyColumnBase, manyTypes.FindProperty("BoolToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolToTwoValuesConverterPropertyColumnBase, manyTypes.FindProperty("BoolToTwoValuesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)boolToZeroOneConverterPropertyColumnBase, manyTypes.FindProperty("BoolToZeroOneConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)bytesColumnBase, manyTypes.FindProperty("Bytes")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)bytesArrayColumnBase, manyTypes.FindProperty("BytesArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)bytesToStringConverterPropertyColumnBase, manyTypes.FindProperty("BytesToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)castingConverterPropertyColumnBase, manyTypes.FindProperty("CastingConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)charColumnBase, manyTypes.FindProperty("Char")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)charArrayColumnBase, manyTypes.FindProperty("CharArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)charToStringConverterPropertyColumnBase, manyTypes.FindProperty("CharToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateOnlyColumnBase, manyTypes.FindProperty("DateOnly")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateOnlyArrayColumnBase, manyTypes.FindProperty("DateOnlyArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateOnlyToStringConverterPropertyColumnBase, manyTypes.FindProperty("DateOnlyToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeColumnBase, manyTypes.FindProperty("DateTime")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeArrayColumnBase, manyTypes.FindProperty("DateTimeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeOffsetToBinaryConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeOffsetToBinaryConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeOffsetToBytesConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeOffsetToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeOffsetToStringConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeOffsetToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeToBinaryConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeToBinaryConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeToStringConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dateTimeToTicksConverterPropertyColumnBase, manyTypes.FindProperty("DateTimeToTicksConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)decimalColumnBase, manyTypes.FindProperty("Decimal")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)decimalArrayColumnBase, manyTypes.FindProperty("DecimalArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)decimalNumberToBytesConverterPropertyColumnBase, manyTypes.FindProperty("DecimalNumberToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)decimalNumberToStringConverterPropertyColumnBase, manyTypes.FindProperty("DecimalNumberToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)doubleColumnBase, manyTypes.FindProperty("Double")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)doubleArrayColumnBase, manyTypes.FindProperty("DoubleArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)doubleNumberToBytesConverterPropertyColumnBase, manyTypes.FindProperty("DoubleNumberToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)doubleNumberToStringConverterPropertyColumnBase, manyTypes.FindProperty("DoubleNumberToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16ColumnBase, manyTypes.FindProperty("Enum16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16ArrayColumnBase, manyTypes.FindProperty("Enum16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16AsStringColumnBase, manyTypes.FindProperty("Enum16AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16AsStringArrayColumnBase, manyTypes.FindProperty("Enum16AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16AsStringCollectionColumnBase, manyTypes.FindProperty("Enum16AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum16CollectionColumnBase, manyTypes.FindProperty("Enum16Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32ColumnBase, manyTypes.FindProperty("Enum32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32ArrayColumnBase, manyTypes.FindProperty("Enum32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32AsStringColumnBase, manyTypes.FindProperty("Enum32AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32AsStringArrayColumnBase, manyTypes.FindProperty("Enum32AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32AsStringCollectionColumnBase, manyTypes.FindProperty("Enum32AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum32CollectionColumnBase, manyTypes.FindProperty("Enum32Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64ColumnBase, manyTypes.FindProperty("Enum64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64ArrayColumnBase, manyTypes.FindProperty("Enum64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64AsStringColumnBase, manyTypes.FindProperty("Enum64AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64AsStringArrayColumnBase, manyTypes.FindProperty("Enum64AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64AsStringCollectionColumnBase, manyTypes.FindProperty("Enum64AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum64CollectionColumnBase, manyTypes.FindProperty("Enum64Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8ColumnBase, manyTypes.FindProperty("Enum8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8ArrayColumnBase, manyTypes.FindProperty("Enum8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8AsStringColumnBase, manyTypes.FindProperty("Enum8AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8AsStringArrayColumnBase, manyTypes.FindProperty("Enum8AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8AsStringCollectionColumnBase, manyTypes.FindProperty("Enum8AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum8CollectionColumnBase, manyTypes.FindProperty("Enum8Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumToNumberConverterPropertyColumnBase, manyTypes.FindProperty("EnumToNumberConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumToStringConverterPropertyColumnBase, manyTypes.FindProperty("EnumToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16ColumnBase, manyTypes.FindProperty("EnumU16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16ArrayColumnBase, manyTypes.FindProperty("EnumU16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16AsStringColumnBase, manyTypes.FindProperty("EnumU16AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16AsStringArrayColumnBase, manyTypes.FindProperty("EnumU16AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16AsStringCollectionColumnBase, manyTypes.FindProperty("EnumU16AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU16CollectionColumnBase, manyTypes.FindProperty("EnumU16Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32ColumnBase, manyTypes.FindProperty("EnumU32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32ArrayColumnBase, manyTypes.FindProperty("EnumU32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32AsStringColumnBase, manyTypes.FindProperty("EnumU32AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32AsStringArrayColumnBase, manyTypes.FindProperty("EnumU32AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32AsStringCollectionColumnBase, manyTypes.FindProperty("EnumU32AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU32CollectionColumnBase, manyTypes.FindProperty("EnumU32Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64ColumnBase, manyTypes.FindProperty("EnumU64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64ArrayColumnBase, manyTypes.FindProperty("EnumU64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64AsStringColumnBase, manyTypes.FindProperty("EnumU64AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64AsStringArrayColumnBase, manyTypes.FindProperty("EnumU64AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64AsStringCollectionColumnBase, manyTypes.FindProperty("EnumU64AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU64CollectionColumnBase, manyTypes.FindProperty("EnumU64Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8ColumnBase, manyTypes.FindProperty("EnumU8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8ArrayColumnBase, manyTypes.FindProperty("EnumU8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8AsStringColumnBase, manyTypes.FindProperty("EnumU8AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8AsStringArrayColumnBase, manyTypes.FindProperty("EnumU8AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8AsStringCollectionColumnBase, manyTypes.FindProperty("EnumU8AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enumU8CollectionColumnBase, manyTypes.FindProperty("EnumU8Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)floatColumnBase, manyTypes.FindProperty("Float")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)floatArrayColumnBase, manyTypes.FindProperty("FloatArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)guidColumnBase, manyTypes.FindProperty("Guid")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)guidArrayColumnBase, manyTypes.FindProperty("GuidArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)guidToBytesConverterPropertyColumnBase, manyTypes.FindProperty("GuidToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)guidToStringConverterPropertyColumnBase, manyTypes.FindProperty("GuidToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressColumnBase, manyTypes.FindProperty("IPAddress")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressArrayColumnBase, manyTypes.FindProperty("IPAddressArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressReadOnlyCollectionColumnBase, manyTypes.FindProperty("IPAddressReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressToBytesConverterPropertyColumnBase, manyTypes.FindProperty("IPAddressToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)iPAddressToStringConverterPropertyColumnBase, manyTypes.FindProperty("IPAddressToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int16ColumnBase, manyTypes.FindProperty("Int16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int16ArrayColumnBase, manyTypes.FindProperty("Int16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int32ColumnBase, manyTypes.FindProperty("Int32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int32ArrayColumnBase, manyTypes.FindProperty("Int32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int32ReadOnlyCollectionColumnBase, manyTypes.FindProperty("Int32ReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int64ColumnBase, manyTypes.FindProperty("Int64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int64ArrayColumnBase, manyTypes.FindProperty("Int64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int8ColumnBase, manyTypes.FindProperty("Int8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)int8ArrayColumnBase, manyTypes.FindProperty("Int8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)intNumberToBytesConverterPropertyColumnBase, manyTypes.FindProperty("IntNumberToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)intNumberToStringConverterPropertyColumnBase, manyTypes.FindProperty("IntNumberToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullIntToNullStringConverterPropertyColumnBase, manyTypes.FindProperty("NullIntToNullStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableBoolColumnBase, manyTypes.FindProperty("NullableBool")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableBoolArrayColumnBase, manyTypes.FindProperty("NullableBoolArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableBytesColumnBase, manyTypes.FindProperty("NullableBytes")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableBytesArrayColumnBase, manyTypes.FindProperty("NullableBytesArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableCharColumnBase, manyTypes.FindProperty("NullableChar")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableCharArrayColumnBase, manyTypes.FindProperty("NullableCharArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDateOnlyColumnBase, manyTypes.FindProperty("NullableDateOnly")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDateOnlyArrayColumnBase, manyTypes.FindProperty("NullableDateOnlyArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDateTimeColumnBase, manyTypes.FindProperty("NullableDateTime")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDateTimeArrayColumnBase, manyTypes.FindProperty("NullableDateTimeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDecimalColumnBase, manyTypes.FindProperty("NullableDecimal")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDecimalArrayColumnBase, manyTypes.FindProperty("NullableDecimalArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDoubleColumnBase, manyTypes.FindProperty("NullableDouble")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableDoubleArrayColumnBase, manyTypes.FindProperty("NullableDoubleArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16ColumnBase, manyTypes.FindProperty("NullableEnum16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16ArrayColumnBase, manyTypes.FindProperty("NullableEnum16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16AsStringColumnBase, manyTypes.FindProperty("NullableEnum16AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnum16AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnum16AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum16CollectionColumnBase, manyTypes.FindProperty("NullableEnum16Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32ColumnBase, manyTypes.FindProperty("NullableEnum32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32ArrayColumnBase, manyTypes.FindProperty("NullableEnum32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32AsStringColumnBase, manyTypes.FindProperty("NullableEnum32AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnum32AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnum32AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum32CollectionColumnBase, manyTypes.FindProperty("NullableEnum32Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64ColumnBase, manyTypes.FindProperty("NullableEnum64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64ArrayColumnBase, manyTypes.FindProperty("NullableEnum64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64AsStringColumnBase, manyTypes.FindProperty("NullableEnum64AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnum64AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnum64AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum64CollectionColumnBase, manyTypes.FindProperty("NullableEnum64Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8ColumnBase, manyTypes.FindProperty("NullableEnum8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8ArrayColumnBase, manyTypes.FindProperty("NullableEnum8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8AsStringColumnBase, manyTypes.FindProperty("NullableEnum8AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnum8AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnum8AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnum8CollectionColumnBase, manyTypes.FindProperty("NullableEnum8Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16ColumnBase, manyTypes.FindProperty("NullableEnumU16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16ArrayColumnBase, manyTypes.FindProperty("NullableEnumU16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16AsStringColumnBase, manyTypes.FindProperty("NullableEnumU16AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnumU16AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnumU16AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU16CollectionColumnBase, manyTypes.FindProperty("NullableEnumU16Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32ColumnBase, manyTypes.FindProperty("NullableEnumU32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32ArrayColumnBase, manyTypes.FindProperty("NullableEnumU32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32AsStringColumnBase, manyTypes.FindProperty("NullableEnumU32AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnumU32AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnumU32AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU32CollectionColumnBase, manyTypes.FindProperty("NullableEnumU32Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64ColumnBase, manyTypes.FindProperty("NullableEnumU64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64ArrayColumnBase, manyTypes.FindProperty("NullableEnumU64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64AsStringColumnBase, manyTypes.FindProperty("NullableEnumU64AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnumU64AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnumU64AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU64CollectionColumnBase, manyTypes.FindProperty("NullableEnumU64Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8ColumnBase, manyTypes.FindProperty("NullableEnumU8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8ArrayColumnBase, manyTypes.FindProperty("NullableEnumU8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8AsStringColumnBase, manyTypes.FindProperty("NullableEnumU8AsString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8AsStringArrayColumnBase, manyTypes.FindProperty("NullableEnumU8AsStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8AsStringCollectionColumnBase, manyTypes.FindProperty("NullableEnumU8AsStringCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableEnumU8CollectionColumnBase, manyTypes.FindProperty("NullableEnumU8Collection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableFloatColumnBase, manyTypes.FindProperty("NullableFloat")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableFloatArrayColumnBase, manyTypes.FindProperty("NullableFloatArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableGuidColumnBase, manyTypes.FindProperty("NullableGuid")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableGuidArrayColumnBase, manyTypes.FindProperty("NullableGuidArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableIPAddressColumnBase, manyTypes.FindProperty("NullableIPAddress")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableIPAddressArrayColumnBase, manyTypes.FindProperty("NullableIPAddressArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt16ColumnBase, manyTypes.FindProperty("NullableInt16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt16ArrayColumnBase, manyTypes.FindProperty("NullableInt16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt32ColumnBase, manyTypes.FindProperty("NullableInt32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt32ArrayColumnBase, manyTypes.FindProperty("NullableInt32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt64ColumnBase, manyTypes.FindProperty("NullableInt64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt64ArrayColumnBase, manyTypes.FindProperty("NullableInt64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt8ColumnBase, manyTypes.FindProperty("NullableInt8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableInt8ArrayColumnBase, manyTypes.FindProperty("NullableInt8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullablePhysicalAddressColumnBase, manyTypes.FindProperty("NullablePhysicalAddress")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullablePhysicalAddressArrayColumnBase, manyTypes.FindProperty("NullablePhysicalAddressArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableStringColumnBase, manyTypes.FindProperty("NullableString")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableStringArrayColumnBase, manyTypes.FindProperty("NullableStringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableTimeOnlyColumnBase, manyTypes.FindProperty("NullableTimeOnly")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableTimeOnlyArrayColumnBase, manyTypes.FindProperty("NullableTimeOnlyArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableTimeSpanColumnBase, manyTypes.FindProperty("NullableTimeSpan")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableTimeSpanArrayColumnBase, manyTypes.FindProperty("NullableTimeSpanArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt16ColumnBase, manyTypes.FindProperty("NullableUInt16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt16ArrayColumnBase, manyTypes.FindProperty("NullableUInt16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt32ColumnBase, manyTypes.FindProperty("NullableUInt32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt32ArrayColumnBase, manyTypes.FindProperty("NullableUInt32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt64ColumnBase, manyTypes.FindProperty("NullableUInt64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt64ArrayColumnBase, manyTypes.FindProperty("NullableUInt64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt8ColumnBase, manyTypes.FindProperty("NullableUInt8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUInt8ArrayColumnBase, manyTypes.FindProperty("NullableUInt8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUriColumnBase, manyTypes.FindProperty("NullableUri")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)nullableUriArrayColumnBase, manyTypes.FindProperty("NullableUriArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)physicalAddressColumnBase, manyTypes.FindProperty("PhysicalAddress")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)physicalAddressArrayColumnBase, manyTypes.FindProperty("PhysicalAddressArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)physicalAddressToBytesConverterPropertyColumnBase, manyTypes.FindProperty("PhysicalAddressToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)physicalAddressToStringConverterPropertyColumnBase, manyTypes.FindProperty("PhysicalAddressToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringColumnBase, manyTypes.FindProperty("String")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringArrayColumnBase, manyTypes.FindProperty("StringArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringReadOnlyCollectionColumnBase, manyTypes.FindProperty("StringReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToBoolConverterPropertyColumnBase, manyTypes.FindProperty("StringToBoolConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToBytesConverterPropertyColumnBase, manyTypes.FindProperty("StringToBytesConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToCharConverterPropertyColumnBase, manyTypes.FindProperty("StringToCharConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDateOnlyConverterPropertyColumnBase, manyTypes.FindProperty("StringToDateOnlyConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDateTimeConverterPropertyColumnBase, manyTypes.FindProperty("StringToDateTimeConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDateTimeOffsetConverterPropertyColumnBase, manyTypes.FindProperty("StringToDateTimeOffsetConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDecimalNumberConverterPropertyColumnBase, manyTypes.FindProperty("StringToDecimalNumberConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToDoubleNumberConverterPropertyColumnBase, manyTypes.FindProperty("StringToDoubleNumberConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToEnumConverterPropertyColumnBase, manyTypes.FindProperty("StringToEnumConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToGuidConverterPropertyColumnBase, manyTypes.FindProperty("StringToGuidConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToIntNumberConverterPropertyColumnBase, manyTypes.FindProperty("StringToIntNumberConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToTimeOnlyConverterPropertyColumnBase, manyTypes.FindProperty("StringToTimeOnlyConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToTimeSpanConverterPropertyColumnBase, manyTypes.FindProperty("StringToTimeSpanConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)stringToUriConverterPropertyColumnBase, manyTypes.FindProperty("StringToUriConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeOnlyColumnBase, manyTypes.FindProperty("TimeOnly")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeOnlyArrayColumnBase, manyTypes.FindProperty("TimeOnlyArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeOnlyToStringConverterPropertyColumnBase, manyTypes.FindProperty("TimeOnlyToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeOnlyToTicksConverterPropertyColumnBase, manyTypes.FindProperty("TimeOnlyToTicksConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeSpanColumnBase, manyTypes.FindProperty("TimeSpan")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeSpanArrayColumnBase, manyTypes.FindProperty("TimeSpanArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeSpanToStringConverterPropertyColumnBase, manyTypes.FindProperty("TimeSpanToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)timeSpanToTicksConverterPropertyColumnBase, manyTypes.FindProperty("TimeSpanToTicksConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt16ColumnBase, manyTypes.FindProperty("UInt16")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt16ArrayColumnBase, manyTypes.FindProperty("UInt16Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt32ColumnBase, manyTypes.FindProperty("UInt32")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt32ArrayColumnBase, manyTypes.FindProperty("UInt32Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt64ColumnBase, manyTypes.FindProperty("UInt64")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt64ArrayColumnBase, manyTypes.FindProperty("UInt64Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt8ColumnBase, manyTypes.FindProperty("UInt8")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt8ArrayColumnBase, manyTypes.FindProperty("UInt8Array")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uInt8ReadOnlyCollectionColumnBase, manyTypes.FindProperty("UInt8ReadOnlyCollection")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uriColumnBase, manyTypes.FindProperty("Uri")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uriArrayColumnBase, manyTypes.FindProperty("UriArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)uriToStringConverterPropertyColumnBase, manyTypes.FindProperty("UriToStringConverterProperty")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseManyTypesMappingBase); + + var tableMappings1 = new List(); + manyTypes.SetRuntimeAnnotation("Relational:TableMappings", tableMappings1); + var manyTypesTable = new Table("ManyTypes", null, relationalModel); + var idColumn0 = new Column("Id", "integer", manyTypesTable); + manyTypesTable.Columns.Add("Id", idColumn0); + idColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn0); + idColumn0.AddAnnotation("Jet:Identity", "3, 2"); + var boolColumn = new Column("Bool", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Bool", boolColumn); + boolColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolColumn); + var boolArrayColumn = new Column("BoolArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("BoolArray", boolArrayColumn); + boolArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolArrayColumn); + var boolReadOnlyCollectionColumn = new Column("BoolReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("BoolReadOnlyCollection", boolReadOnlyCollectionColumn); + boolReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolReadOnlyCollectionColumn); + var boolToStringConverterPropertyColumn = new Column("BoolToStringConverterProperty", "varchar(1)", manyTypesTable); + manyTypesTable.Columns.Add("BoolToStringConverterProperty", boolToStringConverterPropertyColumn); + boolToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolToStringConverterPropertyColumn); + var boolToTwoValuesConverterPropertyColumn = new Column("BoolToTwoValuesConverterProperty", "byte", manyTypesTable); + manyTypesTable.Columns.Add("BoolToTwoValuesConverterProperty", boolToTwoValuesConverterPropertyColumn); + boolToTwoValuesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolToTwoValuesConverterPropertyColumn); + var boolToZeroOneConverterPropertyColumn = new Column("BoolToZeroOneConverterProperty", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("BoolToZeroOneConverterProperty", boolToZeroOneConverterPropertyColumn); + boolToZeroOneConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(boolToZeroOneConverterPropertyColumn); + var bytesColumn = new Column("Bytes", "longbinary", manyTypesTable); + manyTypesTable.Columns.Add("Bytes", bytesColumn); + bytesColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(bytesColumn); + var bytesArrayColumn = new Column("BytesArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("BytesArray", bytesArrayColumn); + bytesArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(bytesArrayColumn); + var bytesToStringConverterPropertyColumn = new Column("BytesToStringConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("BytesToStringConverterProperty", bytesToStringConverterPropertyColumn); + bytesToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(bytesToStringConverterPropertyColumn); + var castingConverterPropertyColumn = new Column("CastingConverterProperty", "decimal(18,2)", manyTypesTable); + manyTypesTable.Columns.Add("CastingConverterProperty", castingConverterPropertyColumn); + castingConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(castingConverterPropertyColumn); + var charColumn = new Column("Char", "varchar(1)", manyTypesTable); + manyTypesTable.Columns.Add("Char", charColumn); + charColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(charColumn); + var charArrayColumn = new Column("CharArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("CharArray", charArrayColumn); + charArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(charArrayColumn); + var charToStringConverterPropertyColumn = new Column("CharToStringConverterProperty", "char(1)", manyTypesTable); + manyTypesTable.Columns.Add("CharToStringConverterProperty", charToStringConverterPropertyColumn); + charToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(charToStringConverterPropertyColumn); + var dateOnlyColumn = new Column("DateOnly", "date", manyTypesTable); + manyTypesTable.Columns.Add("DateOnly", dateOnlyColumn); + dateOnlyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateOnlyColumn); + var dateOnlyArrayColumn = new Column("DateOnlyArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("DateOnlyArray", dateOnlyArrayColumn); + dateOnlyArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateOnlyArrayColumn); + var dateOnlyToStringConverterPropertyColumn = new Column("DateOnlyToStringConverterProperty", "varchar(10)", manyTypesTable); + manyTypesTable.Columns.Add("DateOnlyToStringConverterProperty", dateOnlyToStringConverterPropertyColumn); + dateOnlyToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateOnlyToStringConverterPropertyColumn); + var dateTimeColumn = new Column("DateTime", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("DateTime", dateTimeColumn); + dateTimeColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeColumn); + var dateTimeArrayColumn = new Column("DateTimeArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeArray", dateTimeArrayColumn); + dateTimeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeArrayColumn); + var dateTimeOffsetToBinaryConverterPropertyColumn = new Column("DateTimeOffsetToBinaryConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeOffsetToBinaryConverterProperty", dateTimeOffsetToBinaryConverterPropertyColumn); + dateTimeOffsetToBinaryConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeOffsetToBinaryConverterPropertyColumn); + var dateTimeOffsetToBytesConverterPropertyColumn = new Column("DateTimeOffsetToBytesConverterProperty", "varbinary(12)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeOffsetToBytesConverterProperty", dateTimeOffsetToBytesConverterPropertyColumn); + dateTimeOffsetToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeOffsetToBytesConverterPropertyColumn); + var dateTimeOffsetToStringConverterPropertyColumn = new Column("DateTimeOffsetToStringConverterProperty", "varchar(48)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeOffsetToStringConverterProperty", dateTimeOffsetToStringConverterPropertyColumn); + dateTimeOffsetToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeOffsetToStringConverterPropertyColumn); + var dateTimeToBinaryConverterPropertyColumn = new Column("DateTimeToBinaryConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeToBinaryConverterProperty", dateTimeToBinaryConverterPropertyColumn); + dateTimeToBinaryConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeToBinaryConverterPropertyColumn); + var dateTimeToStringConverterPropertyColumn = new Column("DateTimeToStringConverterProperty", "varchar(48)", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeToStringConverterProperty", dateTimeToStringConverterPropertyColumn); + dateTimeToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeToStringConverterPropertyColumn); + var dateTimeToTicksConverterPropertyColumn = new Column("DateTimeToTicksConverterProperty", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("DateTimeToTicksConverterProperty", dateTimeToTicksConverterPropertyColumn); + dateTimeToTicksConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dateTimeToTicksConverterPropertyColumn); + var decimalColumn = new Column("Decimal", "decimal(18,2)", manyTypesTable); + manyTypesTable.Columns.Add("Decimal", decimalColumn); + decimalColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(decimalColumn); + var decimalArrayColumn = new Column("DecimalArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("DecimalArray", decimalArrayColumn); + decimalArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(decimalArrayColumn); + var decimalNumberToBytesConverterPropertyColumn = new Column("DecimalNumberToBytesConverterProperty", "varbinary(16)", manyTypesTable); + manyTypesTable.Columns.Add("DecimalNumberToBytesConverterProperty", decimalNumberToBytesConverterPropertyColumn); + decimalNumberToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(decimalNumberToBytesConverterPropertyColumn); + var decimalNumberToStringConverterPropertyColumn = new Column("DecimalNumberToStringConverterProperty", "varchar(64)", manyTypesTable); + manyTypesTable.Columns.Add("DecimalNumberToStringConverterProperty", decimalNumberToStringConverterPropertyColumn); + decimalNumberToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(decimalNumberToStringConverterPropertyColumn); + var doubleColumn = new Column("Double", "double", manyTypesTable); + manyTypesTable.Columns.Add("Double", doubleColumn); + doubleColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(doubleColumn); + var doubleArrayColumn = new Column("DoubleArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("DoubleArray", doubleArrayColumn); + doubleArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(doubleArrayColumn); + var doubleNumberToBytesConverterPropertyColumn = new Column("DoubleNumberToBytesConverterProperty", "varbinary(8)", manyTypesTable); + manyTypesTable.Columns.Add("DoubleNumberToBytesConverterProperty", doubleNumberToBytesConverterPropertyColumn); + doubleNumberToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(doubleNumberToBytesConverterPropertyColumn); + var doubleNumberToStringConverterPropertyColumn = new Column("DoubleNumberToStringConverterProperty", "varchar(64)", manyTypesTable); + manyTypesTable.Columns.Add("DoubleNumberToStringConverterProperty", doubleNumberToStringConverterPropertyColumn); + doubleNumberToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(doubleNumberToStringConverterPropertyColumn); + var enum16Column = new Column("Enum16", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Enum16", enum16Column); + enum16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16Column); + var enum16ArrayColumn = new Column("Enum16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16Array", enum16ArrayColumn); + enum16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16ArrayColumn); + var enum16AsStringColumn = new Column("Enum16AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16AsString", enum16AsStringColumn); + enum16AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16AsStringColumn); + var enum16AsStringArrayColumn = new Column("Enum16AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16AsStringArray", enum16AsStringArrayColumn); + enum16AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16AsStringArrayColumn); + var enum16AsStringCollectionColumn = new Column("Enum16AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16AsStringCollection", enum16AsStringCollectionColumn); + enum16AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16AsStringCollectionColumn); + var enum16CollectionColumn = new Column("Enum16Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum16Collection", enum16CollectionColumn); + enum16CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum16CollectionColumn); + var enum32Column = new Column("Enum32", "integer", manyTypesTable); + manyTypesTable.Columns.Add("Enum32", enum32Column); + enum32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32Column); + var enum32ArrayColumn = new Column("Enum32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32Array", enum32ArrayColumn); + enum32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32ArrayColumn); + var enum32AsStringColumn = new Column("Enum32AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32AsString", enum32AsStringColumn); + enum32AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32AsStringColumn); + var enum32AsStringArrayColumn = new Column("Enum32AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32AsStringArray", enum32AsStringArrayColumn); + enum32AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32AsStringArrayColumn); + var enum32AsStringCollectionColumn = new Column("Enum32AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32AsStringCollection", enum32AsStringCollectionColumn); + enum32AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32AsStringCollectionColumn); + var enum32CollectionColumn = new Column("Enum32Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum32Collection", enum32CollectionColumn); + enum32CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum32CollectionColumn); + var enum64Column = new Column("Enum64", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64", enum64Column); + enum64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64Column); + var enum64ArrayColumn = new Column("Enum64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64Array", enum64ArrayColumn); + enum64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64ArrayColumn); + var enum64AsStringColumn = new Column("Enum64AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64AsString", enum64AsStringColumn); + enum64AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64AsStringColumn); + var enum64AsStringArrayColumn = new Column("Enum64AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64AsStringArray", enum64AsStringArrayColumn); + enum64AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64AsStringArrayColumn); + var enum64AsStringCollectionColumn = new Column("Enum64AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64AsStringCollection", enum64AsStringCollectionColumn); + enum64AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64AsStringCollectionColumn); + var enum64CollectionColumn = new Column("Enum64Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum64Collection", enum64CollectionColumn); + enum64CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum64CollectionColumn); + var enum8Column = new Column("Enum8", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Enum8", enum8Column); + enum8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8Column); + var enum8ArrayColumn = new Column("Enum8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8Array", enum8ArrayColumn); + enum8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8ArrayColumn); + var enum8AsStringColumn = new Column("Enum8AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8AsString", enum8AsStringColumn); + enum8AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8AsStringColumn); + var enum8AsStringArrayColumn = new Column("Enum8AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8AsStringArray", enum8AsStringArrayColumn); + enum8AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8AsStringArrayColumn); + var enum8AsStringCollectionColumn = new Column("Enum8AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8AsStringCollection", enum8AsStringCollectionColumn); + enum8AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8AsStringCollectionColumn); + var enum8CollectionColumn = new Column("Enum8Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Enum8Collection", enum8CollectionColumn); + enum8CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enum8CollectionColumn); + var enumToNumberConverterPropertyColumn = new Column("EnumToNumberConverterProperty", "integer", manyTypesTable); + manyTypesTable.Columns.Add("EnumToNumberConverterProperty", enumToNumberConverterPropertyColumn); + enumToNumberConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumToNumberConverterPropertyColumn); + var enumToStringConverterPropertyColumn = new Column("EnumToStringConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumToStringConverterProperty", enumToStringConverterPropertyColumn); + enumToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumToStringConverterPropertyColumn); + var enumU16Column = new Column("EnumU16", "integer", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16", enumU16Column); + enumU16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16Column); + var enumU16ArrayColumn = new Column("EnumU16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16Array", enumU16ArrayColumn); + enumU16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16ArrayColumn); + var enumU16AsStringColumn = new Column("EnumU16AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16AsString", enumU16AsStringColumn); + enumU16AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16AsStringColumn); + var enumU16AsStringArrayColumn = new Column("EnumU16AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16AsStringArray", enumU16AsStringArrayColumn); + enumU16AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16AsStringArrayColumn); + var enumU16AsStringCollectionColumn = new Column("EnumU16AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16AsStringCollection", enumU16AsStringCollectionColumn); + enumU16AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16AsStringCollectionColumn); + var enumU16CollectionColumn = new Column("EnumU16Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU16Collection", enumU16CollectionColumn); + enumU16CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU16CollectionColumn); + var enumU32Column = new Column("EnumU32", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32", enumU32Column); + enumU32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32Column); + var enumU32ArrayColumn = new Column("EnumU32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32Array", enumU32ArrayColumn); + enumU32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32ArrayColumn); + var enumU32AsStringColumn = new Column("EnumU32AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32AsString", enumU32AsStringColumn); + enumU32AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32AsStringColumn); + var enumU32AsStringArrayColumn = new Column("EnumU32AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32AsStringArray", enumU32AsStringArrayColumn); + enumU32AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32AsStringArrayColumn); + var enumU32AsStringCollectionColumn = new Column("EnumU32AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32AsStringCollection", enumU32AsStringCollectionColumn); + enumU32AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32AsStringCollectionColumn); + var enumU32CollectionColumn = new Column("EnumU32Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU32Collection", enumU32CollectionColumn); + enumU32CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU32CollectionColumn); + var enumU64Column = new Column("EnumU64", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64", enumU64Column); + enumU64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64Column); + var enumU64ArrayColumn = new Column("EnumU64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64Array", enumU64ArrayColumn); + enumU64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64ArrayColumn); + var enumU64AsStringColumn = new Column("EnumU64AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64AsString", enumU64AsStringColumn); + enumU64AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64AsStringColumn); + var enumU64AsStringArrayColumn = new Column("EnumU64AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64AsStringArray", enumU64AsStringArrayColumn); + enumU64AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64AsStringArrayColumn); + var enumU64AsStringCollectionColumn = new Column("EnumU64AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64AsStringCollection", enumU64AsStringCollectionColumn); + enumU64AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64AsStringCollectionColumn); + var enumU64CollectionColumn = new Column("EnumU64Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU64Collection", enumU64CollectionColumn); + enumU64CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU64CollectionColumn); + var enumU8Column = new Column("EnumU8", "byte", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8", enumU8Column); + enumU8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8Column); + var enumU8ArrayColumn = new Column("EnumU8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8Array", enumU8ArrayColumn); + enumU8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8ArrayColumn); + var enumU8AsStringColumn = new Column("EnumU8AsString", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8AsString", enumU8AsStringColumn); + enumU8AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8AsStringColumn); + var enumU8AsStringArrayColumn = new Column("EnumU8AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8AsStringArray", enumU8AsStringArrayColumn); + enumU8AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8AsStringArrayColumn); + var enumU8AsStringCollectionColumn = new Column("EnumU8AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8AsStringCollection", enumU8AsStringCollectionColumn); + enumU8AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8AsStringCollectionColumn); + var enumU8CollectionColumn = new Column("EnumU8Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("EnumU8Collection", enumU8CollectionColumn); + enumU8CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(enumU8CollectionColumn); + var floatColumn = new Column("Float", "single", manyTypesTable); + manyTypesTable.Columns.Add("Float", floatColumn); + floatColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(floatColumn); + var floatArrayColumn = new Column("FloatArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("FloatArray", floatArrayColumn); + floatArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(floatArrayColumn); + var guidColumn = new Column("Guid", "uniqueidentifier", manyTypesTable); + manyTypesTable.Columns.Add("Guid", guidColumn); + guidColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(guidColumn); + var guidArrayColumn = new Column("GuidArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("GuidArray", guidArrayColumn); + guidArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(guidArrayColumn); + var guidToBytesConverterPropertyColumn = new Column("GuidToBytesConverterProperty", "varbinary(16)", manyTypesTable); + manyTypesTable.Columns.Add("GuidToBytesConverterProperty", guidToBytesConverterPropertyColumn); + guidToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(guidToBytesConverterPropertyColumn); + var guidToStringConverterPropertyColumn = new Column("GuidToStringConverterProperty", "varchar(36)", manyTypesTable); + manyTypesTable.Columns.Add("GuidToStringConverterProperty", guidToStringConverterPropertyColumn); + guidToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(guidToStringConverterPropertyColumn); + var iPAddressColumn = new Column("IPAddress", "varchar(45)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddress", iPAddressColumn); + iPAddressColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressColumn); + var iPAddressArrayColumn = new Column("IPAddressArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddressArray", iPAddressArrayColumn); + iPAddressArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressArrayColumn); + var iPAddressReadOnlyCollectionColumn = new Column("IPAddressReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddressReadOnlyCollection", iPAddressReadOnlyCollectionColumn); + iPAddressReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressReadOnlyCollectionColumn); + var iPAddressToBytesConverterPropertyColumn = new Column("IPAddressToBytesConverterProperty", "varbinary(16)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddressToBytesConverterProperty", iPAddressToBytesConverterPropertyColumn); + iPAddressToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressToBytesConverterPropertyColumn); + var iPAddressToStringConverterPropertyColumn = new Column("IPAddressToStringConverterProperty", "varchar(45)", manyTypesTable); + manyTypesTable.Columns.Add("IPAddressToStringConverterProperty", iPAddressToStringConverterPropertyColumn); + iPAddressToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(iPAddressToStringConverterPropertyColumn); + var int16Column = new Column("Int16", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Int16", int16Column); + int16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(int16Column); + var int16ArrayColumn = new Column("Int16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int16Array", int16ArrayColumn); + int16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int16ArrayColumn); + var int32Column = new Column("Int32", "integer", manyTypesTable); + manyTypesTable.Columns.Add("Int32", int32Column); + int32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(int32Column); + var int32ArrayColumn = new Column("Int32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int32Array", int32ArrayColumn); + int32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int32ArrayColumn); + var int32ReadOnlyCollectionColumn = new Column("Int32ReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int32ReadOnlyCollection", int32ReadOnlyCollectionColumn); + int32ReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int32ReadOnlyCollectionColumn); + var int64Column = new Column("Int64", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("Int64", int64Column); + int64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(int64Column); + var int64ArrayColumn = new Column("Int64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int64Array", int64ArrayColumn); + int64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int64ArrayColumn); + var int8Column = new Column("Int8", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("Int8", int8Column); + int8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(int8Column); + var int8ArrayColumn = new Column("Int8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Int8Array", int8ArrayColumn); + int8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(int8ArrayColumn); + var intNumberToBytesConverterPropertyColumn = new Column("IntNumberToBytesConverterProperty", "varbinary(4)", manyTypesTable); + manyTypesTable.Columns.Add("IntNumberToBytesConverterProperty", intNumberToBytesConverterPropertyColumn); + intNumberToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(intNumberToBytesConverterPropertyColumn); + var intNumberToStringConverterPropertyColumn = new Column("IntNumberToStringConverterProperty", "varchar(64)", manyTypesTable); + manyTypesTable.Columns.Add("IntNumberToStringConverterProperty", intNumberToStringConverterPropertyColumn); + intNumberToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(intNumberToStringConverterPropertyColumn); + var nullIntToNullStringConverterPropertyColumn = new Column("NullIntToNullStringConverterProperty", "varchar(255)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullIntToNullStringConverterProperty", nullIntToNullStringConverterPropertyColumn); + nullIntToNullStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullIntToNullStringConverterPropertyColumn); + var nullableBoolColumn = new Column("NullableBool", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableBool", nullableBoolColumn); + nullableBoolColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableBoolColumn); + var nullableBoolArrayColumn = new Column("NullableBoolArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableBoolArray", nullableBoolArrayColumn); + nullableBoolArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableBoolArrayColumn); + var nullableBytesColumn = new Column("NullableBytes", "longbinary", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableBytes", nullableBytesColumn); + nullableBytesColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableBytesColumn); + var nullableBytesArrayColumn = new Column("NullableBytesArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableBytesArray", nullableBytesArrayColumn); + nullableBytesArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableBytesArrayColumn); + var nullableCharColumn = new Column("NullableChar", "varchar(1)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableChar", nullableCharColumn); + nullableCharColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableCharColumn); + var nullableCharArrayColumn = new Column("NullableCharArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableCharArray", nullableCharArrayColumn); + nullableCharArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableCharArrayColumn); + var nullableDateOnlyColumn = new Column("NullableDateOnly", "date", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableDateOnly", nullableDateOnlyColumn); + nullableDateOnlyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDateOnlyColumn); + var nullableDateOnlyArrayColumn = new Column("NullableDateOnlyArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableDateOnlyArray", nullableDateOnlyArrayColumn); + nullableDateOnlyArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDateOnlyArrayColumn); + var nullableDateTimeColumn = new Column("NullableDateTime", "datetime", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableDateTime", nullableDateTimeColumn); + nullableDateTimeColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDateTimeColumn); + var nullableDateTimeArrayColumn = new Column("NullableDateTimeArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableDateTimeArray", nullableDateTimeArrayColumn); + nullableDateTimeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDateTimeArrayColumn); + var nullableDecimalColumn = new Column("NullableDecimal", "decimal(18,2)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableDecimal", nullableDecimalColumn); + nullableDecimalColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDecimalColumn); + var nullableDecimalArrayColumn = new Column("NullableDecimalArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableDecimalArray", nullableDecimalArrayColumn); + nullableDecimalArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDecimalArrayColumn); + var nullableDoubleColumn = new Column("NullableDouble", "double", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableDouble", nullableDoubleColumn); + nullableDoubleColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDoubleColumn); + var nullableDoubleArrayColumn = new Column("NullableDoubleArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableDoubleArray", nullableDoubleArrayColumn); + nullableDoubleArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableDoubleArrayColumn); + var nullableEnum16Column = new Column("NullableEnum16", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum16", nullableEnum16Column); + nullableEnum16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16Column); + var nullableEnum16ArrayColumn = new Column("NullableEnum16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum16Array", nullableEnum16ArrayColumn); + nullableEnum16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16ArrayColumn); + var nullableEnum16AsStringColumn = new Column("NullableEnum16AsString", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum16AsString", nullableEnum16AsStringColumn); + nullableEnum16AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16AsStringColumn); + var nullableEnum16AsStringArrayColumn = new Column("NullableEnum16AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum16AsStringArray", nullableEnum16AsStringArrayColumn); + nullableEnum16AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16AsStringArrayColumn); + var nullableEnum16AsStringCollectionColumn = new Column("NullableEnum16AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum16AsStringCollection", nullableEnum16AsStringCollectionColumn); + nullableEnum16AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16AsStringCollectionColumn); + var nullableEnum16CollectionColumn = new Column("NullableEnum16Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum16Collection", nullableEnum16CollectionColumn); + nullableEnum16CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum16CollectionColumn); + var nullableEnum32Column = new Column("NullableEnum32", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum32", nullableEnum32Column); + nullableEnum32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32Column); + var nullableEnum32ArrayColumn = new Column("NullableEnum32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum32Array", nullableEnum32ArrayColumn); + nullableEnum32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32ArrayColumn); + var nullableEnum32AsStringColumn = new Column("NullableEnum32AsString", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum32AsString", nullableEnum32AsStringColumn); + nullableEnum32AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32AsStringColumn); + var nullableEnum32AsStringArrayColumn = new Column("NullableEnum32AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum32AsStringArray", nullableEnum32AsStringArrayColumn); + nullableEnum32AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32AsStringArrayColumn); + var nullableEnum32AsStringCollectionColumn = new Column("NullableEnum32AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum32AsStringCollection", nullableEnum32AsStringCollectionColumn); + nullableEnum32AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32AsStringCollectionColumn); + var nullableEnum32CollectionColumn = new Column("NullableEnum32Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum32Collection", nullableEnum32CollectionColumn); + nullableEnum32CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum32CollectionColumn); + var nullableEnum64Column = new Column("NullableEnum64", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum64", nullableEnum64Column); + nullableEnum64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64Column); + var nullableEnum64ArrayColumn = new Column("NullableEnum64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum64Array", nullableEnum64ArrayColumn); + nullableEnum64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64ArrayColumn); + var nullableEnum64AsStringColumn = new Column("NullableEnum64AsString", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum64AsString", nullableEnum64AsStringColumn); + nullableEnum64AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64AsStringColumn); + var nullableEnum64AsStringArrayColumn = new Column("NullableEnum64AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum64AsStringArray", nullableEnum64AsStringArrayColumn); + nullableEnum64AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64AsStringArrayColumn); + var nullableEnum64AsStringCollectionColumn = new Column("NullableEnum64AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum64AsStringCollection", nullableEnum64AsStringCollectionColumn); + nullableEnum64AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64AsStringCollectionColumn); + var nullableEnum64CollectionColumn = new Column("NullableEnum64Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum64Collection", nullableEnum64CollectionColumn); + nullableEnum64CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum64CollectionColumn); + var nullableEnum8Column = new Column("NullableEnum8", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum8", nullableEnum8Column); + nullableEnum8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8Column); + var nullableEnum8ArrayColumn = new Column("NullableEnum8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum8Array", nullableEnum8ArrayColumn); + nullableEnum8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8ArrayColumn); + var nullableEnum8AsStringColumn = new Column("NullableEnum8AsString", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnum8AsString", nullableEnum8AsStringColumn); + nullableEnum8AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8AsStringColumn); + var nullableEnum8AsStringArrayColumn = new Column("NullableEnum8AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum8AsStringArray", nullableEnum8AsStringArrayColumn); + nullableEnum8AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8AsStringArrayColumn); + var nullableEnum8AsStringCollectionColumn = new Column("NullableEnum8AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum8AsStringCollection", nullableEnum8AsStringCollectionColumn); + nullableEnum8AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8AsStringCollectionColumn); + var nullableEnum8CollectionColumn = new Column("NullableEnum8Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnum8Collection", nullableEnum8CollectionColumn); + nullableEnum8CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnum8CollectionColumn); + var nullableEnumU16Column = new Column("NullableEnumU16", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU16", nullableEnumU16Column); + nullableEnumU16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16Column); + var nullableEnumU16ArrayColumn = new Column("NullableEnumU16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU16Array", nullableEnumU16ArrayColumn); + nullableEnumU16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16ArrayColumn); + var nullableEnumU16AsStringColumn = new Column("NullableEnumU16AsString", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU16AsString", nullableEnumU16AsStringColumn); + nullableEnumU16AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16AsStringColumn); + var nullableEnumU16AsStringArrayColumn = new Column("NullableEnumU16AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU16AsStringArray", nullableEnumU16AsStringArrayColumn); + nullableEnumU16AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16AsStringArrayColumn); + var nullableEnumU16AsStringCollectionColumn = new Column("NullableEnumU16AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU16AsStringCollection", nullableEnumU16AsStringCollectionColumn); + nullableEnumU16AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16AsStringCollectionColumn); + var nullableEnumU16CollectionColumn = new Column("NullableEnumU16Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU16Collection", nullableEnumU16CollectionColumn); + nullableEnumU16CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU16CollectionColumn); + var nullableEnumU32Column = new Column("NullableEnumU32", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU32", nullableEnumU32Column); + nullableEnumU32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32Column); + var nullableEnumU32ArrayColumn = new Column("NullableEnumU32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU32Array", nullableEnumU32ArrayColumn); + nullableEnumU32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32ArrayColumn); + var nullableEnumU32AsStringColumn = new Column("NullableEnumU32AsString", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU32AsString", nullableEnumU32AsStringColumn); + nullableEnumU32AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32AsStringColumn); + var nullableEnumU32AsStringArrayColumn = new Column("NullableEnumU32AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU32AsStringArray", nullableEnumU32AsStringArrayColumn); + nullableEnumU32AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32AsStringArrayColumn); + var nullableEnumU32AsStringCollectionColumn = new Column("NullableEnumU32AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU32AsStringCollection", nullableEnumU32AsStringCollectionColumn); + nullableEnumU32AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32AsStringCollectionColumn); + var nullableEnumU32CollectionColumn = new Column("NullableEnumU32Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU32Collection", nullableEnumU32CollectionColumn); + nullableEnumU32CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU32CollectionColumn); + var nullableEnumU64Column = new Column("NullableEnumU64", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU64", nullableEnumU64Column); + nullableEnumU64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64Column); + var nullableEnumU64ArrayColumn = new Column("NullableEnumU64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU64Array", nullableEnumU64ArrayColumn); + nullableEnumU64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64ArrayColumn); + var nullableEnumU64AsStringColumn = new Column("NullableEnumU64AsString", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU64AsString", nullableEnumU64AsStringColumn); + nullableEnumU64AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64AsStringColumn); + var nullableEnumU64AsStringArrayColumn = new Column("NullableEnumU64AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU64AsStringArray", nullableEnumU64AsStringArrayColumn); + nullableEnumU64AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64AsStringArrayColumn); + var nullableEnumU64AsStringCollectionColumn = new Column("NullableEnumU64AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU64AsStringCollection", nullableEnumU64AsStringCollectionColumn); + nullableEnumU64AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64AsStringCollectionColumn); + var nullableEnumU64CollectionColumn = new Column("NullableEnumU64Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU64Collection", nullableEnumU64CollectionColumn); + nullableEnumU64CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU64CollectionColumn); + var nullableEnumU8Column = new Column("NullableEnumU8", "byte", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU8", nullableEnumU8Column); + nullableEnumU8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8Column); + var nullableEnumU8ArrayColumn = new Column("NullableEnumU8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU8Array", nullableEnumU8ArrayColumn); + nullableEnumU8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8ArrayColumn); + var nullableEnumU8AsStringColumn = new Column("NullableEnumU8AsString", "byte", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableEnumU8AsString", nullableEnumU8AsStringColumn); + nullableEnumU8AsStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8AsStringColumn); + var nullableEnumU8AsStringArrayColumn = new Column("NullableEnumU8AsStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU8AsStringArray", nullableEnumU8AsStringArrayColumn); + nullableEnumU8AsStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8AsStringArrayColumn); + var nullableEnumU8AsStringCollectionColumn = new Column("NullableEnumU8AsStringCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU8AsStringCollection", nullableEnumU8AsStringCollectionColumn); + nullableEnumU8AsStringCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8AsStringCollectionColumn); + var nullableEnumU8CollectionColumn = new Column("NullableEnumU8Collection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableEnumU8Collection", nullableEnumU8CollectionColumn); + nullableEnumU8CollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableEnumU8CollectionColumn); + var nullableFloatColumn = new Column("NullableFloat", "single", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableFloat", nullableFloatColumn); + nullableFloatColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableFloatColumn); + var nullableFloatArrayColumn = new Column("NullableFloatArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableFloatArray", nullableFloatArrayColumn); + nullableFloatArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableFloatArrayColumn); + var nullableGuidColumn = new Column("NullableGuid", "uniqueidentifier", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableGuid", nullableGuidColumn); + nullableGuidColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableGuidColumn); + var nullableGuidArrayColumn = new Column("NullableGuidArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableGuidArray", nullableGuidArrayColumn); + nullableGuidArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableGuidArrayColumn); + var nullableIPAddressColumn = new Column("NullableIPAddress", "varchar(45)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableIPAddress", nullableIPAddressColumn); + nullableIPAddressColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableIPAddressColumn); + var nullableIPAddressArrayColumn = new Column("NullableIPAddressArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableIPAddressArray", nullableIPAddressArrayColumn); + nullableIPAddressArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableIPAddressArrayColumn); + var nullableInt16Column = new Column("NullableInt16", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableInt16", nullableInt16Column); + nullableInt16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt16Column); + var nullableInt16ArrayColumn = new Column("NullableInt16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableInt16Array", nullableInt16ArrayColumn); + nullableInt16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt16ArrayColumn); + var nullableInt32Column = new Column("NullableInt32", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableInt32", nullableInt32Column); + nullableInt32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt32Column); + var nullableInt32ArrayColumn = new Column("NullableInt32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableInt32Array", nullableInt32ArrayColumn); + nullableInt32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt32ArrayColumn); + var nullableInt64Column = new Column("NullableInt64", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableInt64", nullableInt64Column); + nullableInt64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt64Column); + var nullableInt64ArrayColumn = new Column("NullableInt64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableInt64Array", nullableInt64ArrayColumn); + nullableInt64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt64ArrayColumn); + var nullableInt8Column = new Column("NullableInt8", "smallint", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableInt8", nullableInt8Column); + nullableInt8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt8Column); + var nullableInt8ArrayColumn = new Column("NullableInt8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableInt8Array", nullableInt8ArrayColumn); + nullableInt8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableInt8ArrayColumn); + var nullablePhysicalAddressColumn = new Column("NullablePhysicalAddress", "varchar(20)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullablePhysicalAddress", nullablePhysicalAddressColumn); + nullablePhysicalAddressColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullablePhysicalAddressColumn); + var nullablePhysicalAddressArrayColumn = new Column("NullablePhysicalAddressArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullablePhysicalAddressArray", nullablePhysicalAddressArrayColumn); + nullablePhysicalAddressArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullablePhysicalAddressArrayColumn); + var nullableStringColumn = new Column("NullableString", "varchar(255)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableString", nullableStringColumn); + nullableStringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableStringColumn); + var nullableStringArrayColumn = new Column("NullableStringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableStringArray", nullableStringArrayColumn); + nullableStringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableStringArrayColumn); + var nullableTimeOnlyColumn = new Column("NullableTimeOnly", "time", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableTimeOnly", nullableTimeOnlyColumn); + nullableTimeOnlyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableTimeOnlyColumn); + var nullableTimeOnlyArrayColumn = new Column("NullableTimeOnlyArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableTimeOnlyArray", nullableTimeOnlyArrayColumn); + nullableTimeOnlyArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableTimeOnlyArrayColumn); + var nullableTimeSpanColumn = new Column("NullableTimeSpan", "datetime", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableTimeSpan", nullableTimeSpanColumn); + nullableTimeSpanColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableTimeSpanColumn); + var nullableTimeSpanArrayColumn = new Column("NullableTimeSpanArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableTimeSpanArray", nullableTimeSpanArrayColumn); + nullableTimeSpanArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableTimeSpanArrayColumn); + var nullableUInt16Column = new Column("NullableUInt16", "integer", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUInt16", nullableUInt16Column); + nullableUInt16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt16Column); + var nullableUInt16ArrayColumn = new Column("NullableUInt16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUInt16Array", nullableUInt16ArrayColumn); + nullableUInt16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt16ArrayColumn); + var nullableUInt32Column = new Column("NullableUInt32", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUInt32", nullableUInt32Column); + nullableUInt32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt32Column); + var nullableUInt32ArrayColumn = new Column("NullableUInt32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUInt32Array", nullableUInt32ArrayColumn); + nullableUInt32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt32ArrayColumn); + var nullableUInt64Column = new Column("NullableUInt64", "decimal(20,0)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUInt64", nullableUInt64Column); + nullableUInt64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt64Column); + var nullableUInt64ArrayColumn = new Column("NullableUInt64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUInt64Array", nullableUInt64ArrayColumn); + nullableUInt64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt64ArrayColumn); + var nullableUInt8Column = new Column("NullableUInt8", "byte", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUInt8", nullableUInt8Column); + nullableUInt8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt8Column); + var nullableUInt8ArrayColumn = new Column("NullableUInt8Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUInt8Array", nullableUInt8ArrayColumn); + nullableUInt8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUInt8ArrayColumn); + var nullableUriColumn = new Column("NullableUri", "varchar(255)", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("NullableUri", nullableUriColumn); + nullableUriColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUriColumn); + var nullableUriArrayColumn = new Column("NullableUriArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("NullableUriArray", nullableUriArrayColumn); + nullableUriArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(nullableUriArrayColumn); + var physicalAddressColumn = new Column("PhysicalAddress", "varchar(20)", manyTypesTable); + manyTypesTable.Columns.Add("PhysicalAddress", physicalAddressColumn); + physicalAddressColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(physicalAddressColumn); + var physicalAddressArrayColumn = new Column("PhysicalAddressArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("PhysicalAddressArray", physicalAddressArrayColumn); + physicalAddressArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(physicalAddressArrayColumn); + var physicalAddressToBytesConverterPropertyColumn = new Column("PhysicalAddressToBytesConverterProperty", "varbinary(8)", manyTypesTable); + manyTypesTable.Columns.Add("PhysicalAddressToBytesConverterProperty", physicalAddressToBytesConverterPropertyColumn); + physicalAddressToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(physicalAddressToBytesConverterPropertyColumn); + var physicalAddressToStringConverterPropertyColumn = new Column("PhysicalAddressToStringConverterProperty", "varchar(20)", manyTypesTable); + manyTypesTable.Columns.Add("PhysicalAddressToStringConverterProperty", physicalAddressToStringConverterPropertyColumn); + physicalAddressToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(physicalAddressToStringConverterPropertyColumn); + var stringColumn = new Column("String", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("String", stringColumn); + stringColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringColumn); + var stringArrayColumn = new Column("StringArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("StringArray", stringArrayColumn); + stringArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringArrayColumn); + var stringReadOnlyCollectionColumn = new Column("StringReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("StringReadOnlyCollection", stringReadOnlyCollectionColumn); + stringReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringReadOnlyCollectionColumn); + var stringToBoolConverterPropertyColumn = new Column("StringToBoolConverterProperty", "smallint", manyTypesTable); + manyTypesTable.Columns.Add("StringToBoolConverterProperty", stringToBoolConverterPropertyColumn); + stringToBoolConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToBoolConverterPropertyColumn); + var stringToBytesConverterPropertyColumn = new Column("StringToBytesConverterProperty", "longbinary", manyTypesTable) + { + IsNullable = true + }; + manyTypesTable.Columns.Add("StringToBytesConverterProperty", stringToBytesConverterPropertyColumn); + stringToBytesConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToBytesConverterPropertyColumn); + var stringToCharConverterPropertyColumn = new Column("StringToCharConverterProperty", "varchar(1)", manyTypesTable); + manyTypesTable.Columns.Add("StringToCharConverterProperty", stringToCharConverterPropertyColumn); + stringToCharConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToCharConverterPropertyColumn); + var stringToDateOnlyConverterPropertyColumn = new Column("StringToDateOnlyConverterProperty", "date", manyTypesTable); + manyTypesTable.Columns.Add("StringToDateOnlyConverterProperty", stringToDateOnlyConverterPropertyColumn); + stringToDateOnlyConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDateOnlyConverterPropertyColumn); + var stringToDateTimeConverterPropertyColumn = new Column("StringToDateTimeConverterProperty", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("StringToDateTimeConverterProperty", stringToDateTimeConverterPropertyColumn); + stringToDateTimeConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDateTimeConverterPropertyColumn); + var stringToDateTimeOffsetConverterPropertyColumn = new Column("StringToDateTimeOffsetConverterProperty", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("StringToDateTimeOffsetConverterProperty", stringToDateTimeOffsetConverterPropertyColumn); + stringToDateTimeOffsetConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDateTimeOffsetConverterPropertyColumn); + var stringToDecimalNumberConverterPropertyColumn = new Column("StringToDecimalNumberConverterProperty", "decimal(18,2)", manyTypesTable); + manyTypesTable.Columns.Add("StringToDecimalNumberConverterProperty", stringToDecimalNumberConverterPropertyColumn); + stringToDecimalNumberConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDecimalNumberConverterPropertyColumn); + var stringToDoubleNumberConverterPropertyColumn = new Column("StringToDoubleNumberConverterProperty", "double", manyTypesTable); + manyTypesTable.Columns.Add("StringToDoubleNumberConverterProperty", stringToDoubleNumberConverterPropertyColumn); + stringToDoubleNumberConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToDoubleNumberConverterPropertyColumn); + var stringToEnumConverterPropertyColumn = new Column("StringToEnumConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("StringToEnumConverterProperty", stringToEnumConverterPropertyColumn); + stringToEnumConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToEnumConverterPropertyColumn); + var stringToGuidConverterPropertyColumn = new Column("StringToGuidConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("StringToGuidConverterProperty", stringToGuidConverterPropertyColumn); + stringToGuidConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToGuidConverterPropertyColumn); + var stringToIntNumberConverterPropertyColumn = new Column("StringToIntNumberConverterProperty", "integer", manyTypesTable); + manyTypesTable.Columns.Add("StringToIntNumberConverterProperty", stringToIntNumberConverterPropertyColumn); + stringToIntNumberConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToIntNumberConverterPropertyColumn); + var stringToTimeOnlyConverterPropertyColumn = new Column("StringToTimeOnlyConverterProperty", "time", manyTypesTable); + manyTypesTable.Columns.Add("StringToTimeOnlyConverterProperty", stringToTimeOnlyConverterPropertyColumn); + stringToTimeOnlyConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToTimeOnlyConverterPropertyColumn); + var stringToTimeSpanConverterPropertyColumn = new Column("StringToTimeSpanConverterProperty", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("StringToTimeSpanConverterProperty", stringToTimeSpanConverterPropertyColumn); + stringToTimeSpanConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToTimeSpanConverterPropertyColumn); + var stringToUriConverterPropertyColumn = new Column("StringToUriConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("StringToUriConverterProperty", stringToUriConverterPropertyColumn); + stringToUriConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(stringToUriConverterPropertyColumn); + var timeOnlyColumn = new Column("TimeOnly", "time", manyTypesTable); + manyTypesTable.Columns.Add("TimeOnly", timeOnlyColumn); + timeOnlyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeOnlyColumn); + var timeOnlyArrayColumn = new Column("TimeOnlyArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("TimeOnlyArray", timeOnlyArrayColumn); + timeOnlyArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeOnlyArrayColumn); + var timeOnlyToStringConverterPropertyColumn = new Column("TimeOnlyToStringConverterProperty", "varchar(48)", manyTypesTable); + manyTypesTable.Columns.Add("TimeOnlyToStringConverterProperty", timeOnlyToStringConverterPropertyColumn); + timeOnlyToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeOnlyToStringConverterPropertyColumn); + var timeOnlyToTicksConverterPropertyColumn = new Column("TimeOnlyToTicksConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("TimeOnlyToTicksConverterProperty", timeOnlyToTicksConverterPropertyColumn); + timeOnlyToTicksConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeOnlyToTicksConverterPropertyColumn); + var timeSpanColumn = new Column("TimeSpan", "datetime", manyTypesTable); + manyTypesTable.Columns.Add("TimeSpan", timeSpanColumn); + timeSpanColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeSpanColumn); + var timeSpanArrayColumn = new Column("TimeSpanArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("TimeSpanArray", timeSpanArrayColumn); + timeSpanArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeSpanArrayColumn); + var timeSpanToStringConverterPropertyColumn = new Column("TimeSpanToStringConverterProperty", "varchar(48)", manyTypesTable); + manyTypesTable.Columns.Add("TimeSpanToStringConverterProperty", timeSpanToStringConverterPropertyColumn); + timeSpanToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeSpanToStringConverterPropertyColumn); + var timeSpanToTicksConverterPropertyColumn = new Column("TimeSpanToTicksConverterProperty", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("TimeSpanToTicksConverterProperty", timeSpanToTicksConverterPropertyColumn); + timeSpanToTicksConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(timeSpanToTicksConverterPropertyColumn); + var uInt16Column = new Column("UInt16", "integer", manyTypesTable); + manyTypesTable.Columns.Add("UInt16", uInt16Column); + uInt16Column.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt16Column); + var uInt16ArrayColumn = new Column("UInt16Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UInt16Array", uInt16ArrayColumn); + uInt16ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt16ArrayColumn); + var uInt32Column = new Column("UInt32", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("UInt32", uInt32Column); + uInt32Column.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt32Column); + var uInt32ArrayColumn = new Column("UInt32Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UInt32Array", uInt32ArrayColumn); + uInt32ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt32ArrayColumn); + var uInt64Column = new Column("UInt64", "decimal(20,0)", manyTypesTable); + manyTypesTable.Columns.Add("UInt64", uInt64Column); + uInt64Column.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt64Column); + var uInt64ArrayColumn = new Column("UInt64Array", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UInt64Array", uInt64ArrayColumn); + uInt64ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt64ArrayColumn); + var uInt8Column = new Column("UInt8", "byte", manyTypesTable); + manyTypesTable.Columns.Add("UInt8", uInt8Column); + uInt8Column.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt8Column); + var uInt8ArrayColumn = new Column("UInt8Array", "longbinary", manyTypesTable); + manyTypesTable.Columns.Add("UInt8Array", uInt8ArrayColumn); + uInt8ArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt8ArrayColumn); + var uInt8ReadOnlyCollectionColumn = new Column("UInt8ReadOnlyCollection", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UInt8ReadOnlyCollection", uInt8ReadOnlyCollectionColumn); + uInt8ReadOnlyCollectionColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uInt8ReadOnlyCollectionColumn); + var uriColumn = new Column("Uri", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("Uri", uriColumn); + uriColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uriColumn); + var uriArrayColumn = new Column("UriArray", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UriArray", uriArrayColumn); + uriArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uriArrayColumn); + var uriToStringConverterPropertyColumn = new Column("UriToStringConverterProperty", "varchar(255)", manyTypesTable); + manyTypesTable.Columns.Add("UriToStringConverterProperty", uriToStringConverterPropertyColumn); + uriToStringConverterPropertyColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(uriToStringConverterPropertyColumn); + relationalModel.Tables.Add(("ManyTypes", null), manyTypesTable); + var manyTypesTableMapping = new TableMapping(manyTypes, manyTypesTable, null); + manyTypesTable.AddTypeMapping(manyTypesTableMapping, false); + tableMappings1.Add(manyTypesTableMapping); + RelationalModel.CreateColumnMapping(idColumn0, manyTypes.FindProperty("Id")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolColumn, manyTypes.FindProperty("Bool")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolArrayColumn, manyTypes.FindProperty("BoolArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolReadOnlyCollectionColumn, manyTypes.FindProperty("BoolReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolToStringConverterPropertyColumn, manyTypes.FindProperty("BoolToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolToTwoValuesConverterPropertyColumn, manyTypes.FindProperty("BoolToTwoValuesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(boolToZeroOneConverterPropertyColumn, manyTypes.FindProperty("BoolToZeroOneConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(bytesColumn, manyTypes.FindProperty("Bytes")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(bytesArrayColumn, manyTypes.FindProperty("BytesArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(bytesToStringConverterPropertyColumn, manyTypes.FindProperty("BytesToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(castingConverterPropertyColumn, manyTypes.FindProperty("CastingConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(charColumn, manyTypes.FindProperty("Char")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(charArrayColumn, manyTypes.FindProperty("CharArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(charToStringConverterPropertyColumn, manyTypes.FindProperty("CharToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateOnlyColumn, manyTypes.FindProperty("DateOnly")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateOnlyArrayColumn, manyTypes.FindProperty("DateOnlyArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateOnlyToStringConverterPropertyColumn, manyTypes.FindProperty("DateOnlyToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeColumn, manyTypes.FindProperty("DateTime")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeArrayColumn, manyTypes.FindProperty("DateTimeArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeOffsetToBinaryConverterPropertyColumn, manyTypes.FindProperty("DateTimeOffsetToBinaryConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeOffsetToBytesConverterPropertyColumn, manyTypes.FindProperty("DateTimeOffsetToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeOffsetToStringConverterPropertyColumn, manyTypes.FindProperty("DateTimeOffsetToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeToBinaryConverterPropertyColumn, manyTypes.FindProperty("DateTimeToBinaryConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeToStringConverterPropertyColumn, manyTypes.FindProperty("DateTimeToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(dateTimeToTicksConverterPropertyColumn, manyTypes.FindProperty("DateTimeToTicksConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(decimalColumn, manyTypes.FindProperty("Decimal")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(decimalArrayColumn, manyTypes.FindProperty("DecimalArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(decimalNumberToBytesConverterPropertyColumn, manyTypes.FindProperty("DecimalNumberToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(decimalNumberToStringConverterPropertyColumn, manyTypes.FindProperty("DecimalNumberToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(doubleColumn, manyTypes.FindProperty("Double")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(doubleArrayColumn, manyTypes.FindProperty("DoubleArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(doubleNumberToBytesConverterPropertyColumn, manyTypes.FindProperty("DoubleNumberToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(doubleNumberToStringConverterPropertyColumn, manyTypes.FindProperty("DoubleNumberToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16Column, manyTypes.FindProperty("Enum16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16ArrayColumn, manyTypes.FindProperty("Enum16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16AsStringColumn, manyTypes.FindProperty("Enum16AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16AsStringArrayColumn, manyTypes.FindProperty("Enum16AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16AsStringCollectionColumn, manyTypes.FindProperty("Enum16AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum16CollectionColumn, manyTypes.FindProperty("Enum16Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32Column, manyTypes.FindProperty("Enum32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32ArrayColumn, manyTypes.FindProperty("Enum32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32AsStringColumn, manyTypes.FindProperty("Enum32AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32AsStringArrayColumn, manyTypes.FindProperty("Enum32AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32AsStringCollectionColumn, manyTypes.FindProperty("Enum32AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum32CollectionColumn, manyTypes.FindProperty("Enum32Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64Column, manyTypes.FindProperty("Enum64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64ArrayColumn, manyTypes.FindProperty("Enum64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64AsStringColumn, manyTypes.FindProperty("Enum64AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64AsStringArrayColumn, manyTypes.FindProperty("Enum64AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64AsStringCollectionColumn, manyTypes.FindProperty("Enum64AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum64CollectionColumn, manyTypes.FindProperty("Enum64Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8Column, manyTypes.FindProperty("Enum8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8ArrayColumn, manyTypes.FindProperty("Enum8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8AsStringColumn, manyTypes.FindProperty("Enum8AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8AsStringArrayColumn, manyTypes.FindProperty("Enum8AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8AsStringCollectionColumn, manyTypes.FindProperty("Enum8AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enum8CollectionColumn, manyTypes.FindProperty("Enum8Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumToNumberConverterPropertyColumn, manyTypes.FindProperty("EnumToNumberConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumToStringConverterPropertyColumn, manyTypes.FindProperty("EnumToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16Column, manyTypes.FindProperty("EnumU16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16ArrayColumn, manyTypes.FindProperty("EnumU16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16AsStringColumn, manyTypes.FindProperty("EnumU16AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16AsStringArrayColumn, manyTypes.FindProperty("EnumU16AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16AsStringCollectionColumn, manyTypes.FindProperty("EnumU16AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU16CollectionColumn, manyTypes.FindProperty("EnumU16Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32Column, manyTypes.FindProperty("EnumU32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32ArrayColumn, manyTypes.FindProperty("EnumU32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32AsStringColumn, manyTypes.FindProperty("EnumU32AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32AsStringArrayColumn, manyTypes.FindProperty("EnumU32AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32AsStringCollectionColumn, manyTypes.FindProperty("EnumU32AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU32CollectionColumn, manyTypes.FindProperty("EnumU32Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64Column, manyTypes.FindProperty("EnumU64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64ArrayColumn, manyTypes.FindProperty("EnumU64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64AsStringColumn, manyTypes.FindProperty("EnumU64AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64AsStringArrayColumn, manyTypes.FindProperty("EnumU64AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64AsStringCollectionColumn, manyTypes.FindProperty("EnumU64AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU64CollectionColumn, manyTypes.FindProperty("EnumU64Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8Column, manyTypes.FindProperty("EnumU8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8ArrayColumn, manyTypes.FindProperty("EnumU8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8AsStringColumn, manyTypes.FindProperty("EnumU8AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8AsStringArrayColumn, manyTypes.FindProperty("EnumU8AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8AsStringCollectionColumn, manyTypes.FindProperty("EnumU8AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(enumU8CollectionColumn, manyTypes.FindProperty("EnumU8Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(floatColumn, manyTypes.FindProperty("Float")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(floatArrayColumn, manyTypes.FindProperty("FloatArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(guidColumn, manyTypes.FindProperty("Guid")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(guidArrayColumn, manyTypes.FindProperty("GuidArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(guidToBytesConverterPropertyColumn, manyTypes.FindProperty("GuidToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(guidToStringConverterPropertyColumn, manyTypes.FindProperty("GuidToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressColumn, manyTypes.FindProperty("IPAddress")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressArrayColumn, manyTypes.FindProperty("IPAddressArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressReadOnlyCollectionColumn, manyTypes.FindProperty("IPAddressReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressToBytesConverterPropertyColumn, manyTypes.FindProperty("IPAddressToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(iPAddressToStringConverterPropertyColumn, manyTypes.FindProperty("IPAddressToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int16Column, manyTypes.FindProperty("Int16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int16ArrayColumn, manyTypes.FindProperty("Int16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int32Column, manyTypes.FindProperty("Int32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int32ArrayColumn, manyTypes.FindProperty("Int32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int32ReadOnlyCollectionColumn, manyTypes.FindProperty("Int32ReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int64Column, manyTypes.FindProperty("Int64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int64ArrayColumn, manyTypes.FindProperty("Int64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int8Column, manyTypes.FindProperty("Int8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(int8ArrayColumn, manyTypes.FindProperty("Int8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(intNumberToBytesConverterPropertyColumn, manyTypes.FindProperty("IntNumberToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(intNumberToStringConverterPropertyColumn, manyTypes.FindProperty("IntNumberToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullIntToNullStringConverterPropertyColumn, manyTypes.FindProperty("NullIntToNullStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableBoolColumn, manyTypes.FindProperty("NullableBool")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableBoolArrayColumn, manyTypes.FindProperty("NullableBoolArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableBytesColumn, manyTypes.FindProperty("NullableBytes")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableBytesArrayColumn, manyTypes.FindProperty("NullableBytesArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableCharColumn, manyTypes.FindProperty("NullableChar")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableCharArrayColumn, manyTypes.FindProperty("NullableCharArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDateOnlyColumn, manyTypes.FindProperty("NullableDateOnly")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDateOnlyArrayColumn, manyTypes.FindProperty("NullableDateOnlyArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDateTimeColumn, manyTypes.FindProperty("NullableDateTime")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDateTimeArrayColumn, manyTypes.FindProperty("NullableDateTimeArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDecimalColumn, manyTypes.FindProperty("NullableDecimal")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDecimalArrayColumn, manyTypes.FindProperty("NullableDecimalArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDoubleColumn, manyTypes.FindProperty("NullableDouble")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableDoubleArrayColumn, manyTypes.FindProperty("NullableDoubleArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16Column, manyTypes.FindProperty("NullableEnum16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16ArrayColumn, manyTypes.FindProperty("NullableEnum16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16AsStringColumn, manyTypes.FindProperty("NullableEnum16AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16AsStringArrayColumn, manyTypes.FindProperty("NullableEnum16AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16AsStringCollectionColumn, manyTypes.FindProperty("NullableEnum16AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum16CollectionColumn, manyTypes.FindProperty("NullableEnum16Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32Column, manyTypes.FindProperty("NullableEnum32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32ArrayColumn, manyTypes.FindProperty("NullableEnum32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32AsStringColumn, manyTypes.FindProperty("NullableEnum32AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32AsStringArrayColumn, manyTypes.FindProperty("NullableEnum32AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32AsStringCollectionColumn, manyTypes.FindProperty("NullableEnum32AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum32CollectionColumn, manyTypes.FindProperty("NullableEnum32Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64Column, manyTypes.FindProperty("NullableEnum64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64ArrayColumn, manyTypes.FindProperty("NullableEnum64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64AsStringColumn, manyTypes.FindProperty("NullableEnum64AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64AsStringArrayColumn, manyTypes.FindProperty("NullableEnum64AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64AsStringCollectionColumn, manyTypes.FindProperty("NullableEnum64AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum64CollectionColumn, manyTypes.FindProperty("NullableEnum64Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8Column, manyTypes.FindProperty("NullableEnum8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8ArrayColumn, manyTypes.FindProperty("NullableEnum8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8AsStringColumn, manyTypes.FindProperty("NullableEnum8AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8AsStringArrayColumn, manyTypes.FindProperty("NullableEnum8AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8AsStringCollectionColumn, manyTypes.FindProperty("NullableEnum8AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnum8CollectionColumn, manyTypes.FindProperty("NullableEnum8Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16Column, manyTypes.FindProperty("NullableEnumU16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16ArrayColumn, manyTypes.FindProperty("NullableEnumU16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16AsStringColumn, manyTypes.FindProperty("NullableEnumU16AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16AsStringArrayColumn, manyTypes.FindProperty("NullableEnumU16AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16AsStringCollectionColumn, manyTypes.FindProperty("NullableEnumU16AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU16CollectionColumn, manyTypes.FindProperty("NullableEnumU16Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32Column, manyTypes.FindProperty("NullableEnumU32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32ArrayColumn, manyTypes.FindProperty("NullableEnumU32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32AsStringColumn, manyTypes.FindProperty("NullableEnumU32AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32AsStringArrayColumn, manyTypes.FindProperty("NullableEnumU32AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32AsStringCollectionColumn, manyTypes.FindProperty("NullableEnumU32AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU32CollectionColumn, manyTypes.FindProperty("NullableEnumU32Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64Column, manyTypes.FindProperty("NullableEnumU64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64ArrayColumn, manyTypes.FindProperty("NullableEnumU64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64AsStringColumn, manyTypes.FindProperty("NullableEnumU64AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64AsStringArrayColumn, manyTypes.FindProperty("NullableEnumU64AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64AsStringCollectionColumn, manyTypes.FindProperty("NullableEnumU64AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU64CollectionColumn, manyTypes.FindProperty("NullableEnumU64Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8Column, manyTypes.FindProperty("NullableEnumU8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8ArrayColumn, manyTypes.FindProperty("NullableEnumU8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8AsStringColumn, manyTypes.FindProperty("NullableEnumU8AsString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8AsStringArrayColumn, manyTypes.FindProperty("NullableEnumU8AsStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8AsStringCollectionColumn, manyTypes.FindProperty("NullableEnumU8AsStringCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableEnumU8CollectionColumn, manyTypes.FindProperty("NullableEnumU8Collection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableFloatColumn, manyTypes.FindProperty("NullableFloat")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableFloatArrayColumn, manyTypes.FindProperty("NullableFloatArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableGuidColumn, manyTypes.FindProperty("NullableGuid")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableGuidArrayColumn, manyTypes.FindProperty("NullableGuidArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableIPAddressColumn, manyTypes.FindProperty("NullableIPAddress")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableIPAddressArrayColumn, manyTypes.FindProperty("NullableIPAddressArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt16Column, manyTypes.FindProperty("NullableInt16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt16ArrayColumn, manyTypes.FindProperty("NullableInt16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt32Column, manyTypes.FindProperty("NullableInt32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt32ArrayColumn, manyTypes.FindProperty("NullableInt32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt64Column, manyTypes.FindProperty("NullableInt64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt64ArrayColumn, manyTypes.FindProperty("NullableInt64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt8Column, manyTypes.FindProperty("NullableInt8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableInt8ArrayColumn, manyTypes.FindProperty("NullableInt8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullablePhysicalAddressColumn, manyTypes.FindProperty("NullablePhysicalAddress")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullablePhysicalAddressArrayColumn, manyTypes.FindProperty("NullablePhysicalAddressArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableStringColumn, manyTypes.FindProperty("NullableString")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableStringArrayColumn, manyTypes.FindProperty("NullableStringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableTimeOnlyColumn, manyTypes.FindProperty("NullableTimeOnly")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableTimeOnlyArrayColumn, manyTypes.FindProperty("NullableTimeOnlyArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableTimeSpanColumn, manyTypes.FindProperty("NullableTimeSpan")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableTimeSpanArrayColumn, manyTypes.FindProperty("NullableTimeSpanArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt16Column, manyTypes.FindProperty("NullableUInt16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt16ArrayColumn, manyTypes.FindProperty("NullableUInt16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt32Column, manyTypes.FindProperty("NullableUInt32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt32ArrayColumn, manyTypes.FindProperty("NullableUInt32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt64Column, manyTypes.FindProperty("NullableUInt64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt64ArrayColumn, manyTypes.FindProperty("NullableUInt64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt8Column, manyTypes.FindProperty("NullableUInt8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUInt8ArrayColumn, manyTypes.FindProperty("NullableUInt8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUriColumn, manyTypes.FindProperty("NullableUri")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(nullableUriArrayColumn, manyTypes.FindProperty("NullableUriArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(physicalAddressColumn, manyTypes.FindProperty("PhysicalAddress")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(physicalAddressArrayColumn, manyTypes.FindProperty("PhysicalAddressArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(physicalAddressToBytesConverterPropertyColumn, manyTypes.FindProperty("PhysicalAddressToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(physicalAddressToStringConverterPropertyColumn, manyTypes.FindProperty("PhysicalAddressToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringColumn, manyTypes.FindProperty("String")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringArrayColumn, manyTypes.FindProperty("StringArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringReadOnlyCollectionColumn, manyTypes.FindProperty("StringReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToBoolConverterPropertyColumn, manyTypes.FindProperty("StringToBoolConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToBytesConverterPropertyColumn, manyTypes.FindProperty("StringToBytesConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToCharConverterPropertyColumn, manyTypes.FindProperty("StringToCharConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDateOnlyConverterPropertyColumn, manyTypes.FindProperty("StringToDateOnlyConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDateTimeConverterPropertyColumn, manyTypes.FindProperty("StringToDateTimeConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDateTimeOffsetConverterPropertyColumn, manyTypes.FindProperty("StringToDateTimeOffsetConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDecimalNumberConverterPropertyColumn, manyTypes.FindProperty("StringToDecimalNumberConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToDoubleNumberConverterPropertyColumn, manyTypes.FindProperty("StringToDoubleNumberConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToEnumConverterPropertyColumn, manyTypes.FindProperty("StringToEnumConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToGuidConverterPropertyColumn, manyTypes.FindProperty("StringToGuidConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToIntNumberConverterPropertyColumn, manyTypes.FindProperty("StringToIntNumberConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToTimeOnlyConverterPropertyColumn, manyTypes.FindProperty("StringToTimeOnlyConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToTimeSpanConverterPropertyColumn, manyTypes.FindProperty("StringToTimeSpanConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(stringToUriConverterPropertyColumn, manyTypes.FindProperty("StringToUriConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeOnlyColumn, manyTypes.FindProperty("TimeOnly")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeOnlyArrayColumn, manyTypes.FindProperty("TimeOnlyArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeOnlyToStringConverterPropertyColumn, manyTypes.FindProperty("TimeOnlyToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeOnlyToTicksConverterPropertyColumn, manyTypes.FindProperty("TimeOnlyToTicksConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeSpanColumn, manyTypes.FindProperty("TimeSpan")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeSpanArrayColumn, manyTypes.FindProperty("TimeSpanArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeSpanToStringConverterPropertyColumn, manyTypes.FindProperty("TimeSpanToStringConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(timeSpanToTicksConverterPropertyColumn, manyTypes.FindProperty("TimeSpanToTicksConverterProperty")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt16Column, manyTypes.FindProperty("UInt16")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt16ArrayColumn, manyTypes.FindProperty("UInt16Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt32Column, manyTypes.FindProperty("UInt32")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt32ArrayColumn, manyTypes.FindProperty("UInt32Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt64Column, manyTypes.FindProperty("UInt64")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt64ArrayColumn, manyTypes.FindProperty("UInt64Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt8Column, manyTypes.FindProperty("UInt8")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt8ArrayColumn, manyTypes.FindProperty("UInt8Array")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uInt8ReadOnlyCollectionColumn, manyTypes.FindProperty("UInt8ReadOnlyCollection")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uriColumn, manyTypes.FindProperty("Uri")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uriArrayColumn, manyTypes.FindProperty("UriArray")!, manyTypesTableMapping); + RelationalModel.CreateColumnMapping(uriToStringConverterPropertyColumn, manyTypes.FindProperty("UriToStringConverterProperty")!, manyTypesTableMapping); + var pK_ManyTypes = new UniqueConstraint("PK_ManyTypes", manyTypesTable, new[] { idColumn0 }); + manyTypesTable.PrimaryKey = pK_ManyTypes; + pK_ManyTypes.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_ManyTypes)); + var pK_ManyTypesKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes", + new[] { "Id" }); + pK_ManyTypes.MappedKeys.Add(pK_ManyTypesKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_ManyTypesKey).Add(pK_ManyTypes); + manyTypesTable.UniqueConstraints.Add("PK_ManyTypes", pK_ManyTypes); + + var principalBase = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase")!; + + var defaultTableMappings2 = new List>(); + principalBase.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings2); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", null, relationalModel); + var alternateIdColumnBase = new ColumnBase("AlternateId", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("AlternateId", alternateIdColumnBase); + var discriminatorColumnBase = new ColumnBase("Discriminator", "varchar(55)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Discriminator", discriminatorColumnBase); + var enum1ColumnBase = new ColumnBase("Enum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Enum1", enum1ColumnBase); + var enum2ColumnBase = new ColumnBase("Enum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Enum2", enum2ColumnBase); + var flagsEnum1ColumnBase = new ColumnBase("FlagsEnum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("FlagsEnum1", flagsEnum1ColumnBase); + var flagsEnum2ColumnBase = new ColumnBase("FlagsEnum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("FlagsEnum2", flagsEnum2ColumnBase); + var idColumnBase1 = new ColumnBase("Id", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Id", idColumnBase1); + var manyOwnedColumnBase = new JsonColumnBase("ManyOwned", "longchar", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned", manyOwnedColumnBase); + var ownedColumnBase = new JsonColumnBase("Owned", "longchar", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned", ownedColumnBase); + var refTypeArrayColumnBase = new ColumnBase("RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeArray", refTypeArrayColumnBase); + var refTypeEnumerableColumnBase = new ColumnBase("RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumnBase); + var refTypeIListColumnBase = new ColumnBase("RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeIList", refTypeIListColumnBase); + var refTypeListColumnBase = new ColumnBase("RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeList", refTypeListColumnBase); + var valueTypeArrayColumnBase = new ColumnBase("ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeArray", valueTypeArrayColumnBase); + var valueTypeEnumerableColumnBase = new ColumnBase("ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumnBase); + var valueTypeIListColumnBase = new ColumnBase("ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeIList", valueTypeIListColumnBase); + var valueTypeListColumnBase = new ColumnBase("ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeList", valueTypeListColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase = new TableMappingBase(principalBase, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, true); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase, false); + defaultTableMappings2.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)alternateIdColumnBase, principalBase.FindProperty("AlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase1, principalBase.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)discriminatorColumnBase, principalBase.FindProperty("Discriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum1ColumnBase, principalBase.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum2ColumnBase, principalBase.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum1ColumnBase, principalBase.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum2ColumnBase, principalBase.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase, principalBase.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase, principalBase.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase, principalBase.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase, principalBase.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase, principalBase.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase, principalBase.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase, principalBase.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase, principalBase.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + + var tableMappings2 = new List(); + principalBase.SetRuntimeAnnotation("Relational:TableMappings", tableMappings2); + var principalBaseTable = new Table("PrincipalBase", null, relationalModel); + var idColumn1 = new Column("Id", "decimal(20,0)", principalBaseTable); + principalBaseTable.Columns.Add("Id", idColumn1); + idColumn1.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn1); + var alternateIdColumn = new Column("AlternateId", "uniqueidentifier", principalBaseTable); + principalBaseTable.Columns.Add("AlternateId", alternateIdColumn); + alternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(alternateIdColumn); + var discriminatorColumn = new Column("Discriminator", "varchar(55)", principalBaseTable); + principalBaseTable.Columns.Add("Discriminator", discriminatorColumn); + discriminatorColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(discriminatorColumn); + var enum1Column = new Column("Enum1", "integer", principalBaseTable); + principalBaseTable.Columns.Add("Enum1", enum1Column); + enum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum1Column); + var enum2Column = new Column("Enum2", "integer", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Enum2", enum2Column); + enum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum2Column); + var flagsEnum1Column = new Column("FlagsEnum1", "integer", principalBaseTable); + principalBaseTable.Columns.Add("FlagsEnum1", flagsEnum1Column); + flagsEnum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum1Column); + var flagsEnum2Column = new Column("FlagsEnum2", "integer", principalBaseTable); + principalBaseTable.Columns.Add("FlagsEnum2", flagsEnum2Column); + flagsEnum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum2Column); + var manyOwnedColumn = new JsonColumn("ManyOwned", "longchar", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ManyOwned", manyOwnedColumn); + manyOwnedColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(manyOwnedColumn); + var ownedColumn = new JsonColumn("Owned", "longchar", principalBaseTable); + principalBaseTable.Columns.Add("Owned", ownedColumn); + ownedColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(ownedColumn); + var refTypeArrayColumn = new Column("RefTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeArray", refTypeArrayColumn); + refTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeArrayColumn); + var refTypeEnumerableColumn = new Column("RefTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumn); + refTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeEnumerableColumn); + var refTypeIListColumn = new Column("RefTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeIList", refTypeIListColumn); + refTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeIListColumn); + var refTypeListColumn = new Column("RefTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeList", refTypeListColumn); + refTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeListColumn); + var valueTypeArrayColumn = new Column("ValueTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeArray", valueTypeArrayColumn); + valueTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeArrayColumn); + var valueTypeEnumerableColumn = new Column("ValueTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumn); + valueTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeEnumerableColumn); + var valueTypeIListColumn = new Column("ValueTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeIList", valueTypeIListColumn); + valueTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeIListColumn); + var valueTypeListColumn = new Column("ValueTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeList", valueTypeListColumn); + valueTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeListColumn); + relationalModel.Tables.Add(("PrincipalBase", null), principalBaseTable); + var principalBaseTableMapping = new TableMapping(principalBase, principalBaseTable, true) + { + IsSharedTablePrincipal = true, + }; + principalBaseTable.AddTypeMapping(principalBaseTableMapping, false); + tableMappings2.Add(principalBaseTableMapping); + RelationalModel.CreateColumnMapping(alternateIdColumn, principalBase.FindProperty("AlternateId")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(idColumn1, principalBase.FindProperty("Id")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(discriminatorColumn, principalBase.FindProperty("Discriminator")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(enum1Column, principalBase.FindProperty("Enum1")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(enum2Column, principalBase.FindProperty("Enum2")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum1Column, principalBase.FindProperty("FlagsEnum1")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum2Column, principalBase.FindProperty("FlagsEnum2")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeArrayColumn, principalBase.FindProperty("RefTypeArray")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeEnumerableColumn, principalBase.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeIListColumn, principalBase.FindProperty("RefTypeIList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeListColumn, principalBase.FindProperty("RefTypeList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeArrayColumn, principalBase.FindProperty("ValueTypeArray")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeEnumerableColumn, principalBase.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeIListColumn, principalBase.FindProperty("ValueTypeIList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeListColumn, principalBase.FindProperty("ValueTypeList")!, principalBaseTableMapping); + + var ownedType = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType")!; + + var defaultTableMappings3 = new List>(); + ownedType.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings3); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0 = new TableMappingBase(ownedType, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0, null); + defaultTableMappings3.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + + var tableMappings3 = new List(); + ownedType.SetRuntimeAnnotation("Relational:TableMappings", tableMappings3); + var principalBaseTableMapping0 = new TableMapping(ownedType, principalBaseTable, null) + { + IsSharedTablePrincipal = false, + }; + principalBaseTable.AddTypeMapping(principalBaseTableMapping0, null); + tableMappings3.Add(principalBaseTableMapping0); + principalBaseTable.AddRowInternalForeignKey(ownedType, RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType", + new[] { "PrincipalBaseId", "PrincipalBaseAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id", "AlternateId" })); + + var principalDerived = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>")!; + + var defaultTableMappings4 = new List>(); + principalDerived.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings4); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1 = new TableMappingBase(principalDerived, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1, false); + defaultTableMappings4.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)alternateIdColumnBase, principalDerived.FindProperty("AlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase1, principalDerived.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)discriminatorColumnBase, principalDerived.FindProperty("Discriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)enum1ColumnBase, principalDerived.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)enum2ColumnBase, principalDerived.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum1ColumnBase, principalDerived.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum2ColumnBase, principalDerived.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase, principalDerived.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase, principalDerived.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase, principalDerived.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase, principalDerived.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase, principalDerived.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase, principalDerived.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase, principalDerived.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase, principalDerived.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + + var tableMappings4 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:TableMappings", tableMappings4); + var principalBaseTableMapping1 = new TableMapping(principalDerived, principalBaseTable, null) + { + IsSharedTablePrincipal = false, + }; + principalBaseTable.AddTypeMapping(principalBaseTableMapping1, false); + tableMappings4.Add(principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(alternateIdColumn, principalDerived.FindProperty("AlternateId")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(idColumn1, principalDerived.FindProperty("Id")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(discriminatorColumn, principalDerived.FindProperty("Discriminator")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(enum1Column, principalDerived.FindProperty("Enum1")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(enum2Column, principalDerived.FindProperty("Enum2")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(flagsEnum1Column, principalDerived.FindProperty("FlagsEnum1")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(flagsEnum2Column, principalDerived.FindProperty("FlagsEnum2")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(refTypeArrayColumn, principalDerived.FindProperty("RefTypeArray")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(refTypeEnumerableColumn, principalDerived.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(refTypeIListColumn, principalDerived.FindProperty("RefTypeIList")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(refTypeListColumn, principalDerived.FindProperty("RefTypeList")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(valueTypeArrayColumn, principalDerived.FindProperty("ValueTypeArray")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(valueTypeEnumerableColumn, principalDerived.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(valueTypeIListColumn, principalDerived.FindProperty("ValueTypeIList")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(valueTypeListColumn, principalDerived.FindProperty("ValueTypeList")!, principalBaseTableMapping1); + + var ownedType0 = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>.ManyOwned#OwnedType")!; + + var defaultTableMappings5 = new List>(); + ownedType0.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings5); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2 = new TableMappingBase(ownedType0, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2, null); + defaultTableMappings5.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + + var tableMappings5 = new List(); + ownedType0.SetRuntimeAnnotation("Relational:TableMappings", tableMappings5); + var principalBaseTableMapping2 = new TableMapping(ownedType0, principalBaseTable, null) + { + IsSharedTablePrincipal = false, + }; + principalBaseTable.AddTypeMapping(principalBaseTableMapping2, null); + tableMappings5.Add(principalBaseTableMapping2); + principalBaseTable.AddRowInternalForeignKey(ownedType0, RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>.ManyOwned#OwnedType", + new[] { "PrincipalDerivedId", "PrincipalDerivedAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + new[] { "Id", "AlternateId" })); + var aK_PrincipalBase_Id = new UniqueConstraint("AK_PrincipalBase_Id", principalBaseTable, new[] { idColumn1 }); + aK_PrincipalBase_Id.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(aK_PrincipalBase_Id)); + var aK_PrincipalBase_IdKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id" }); + aK_PrincipalBase_Id.MappedKeys.Add(aK_PrincipalBase_IdKey); + RelationalModel.GetOrCreateUniqueConstraints(aK_PrincipalBase_IdKey).Add(aK_PrincipalBase_Id); + principalBaseTable.UniqueConstraints.Add("AK_PrincipalBase_Id", aK_PrincipalBase_Id); + var pK = new UniqueConstraint("PK", principalBaseTable, new[] { idColumn1, alternateIdColumn }); + principalBaseTable.PrimaryKey = pK; + pK.SetRowKeyValueFactory(new CompositeRowKeyValueFactory(pK)); + var pKKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id", "AlternateId" }); + pK.MappedKeys.Add(pKKey); + RelationalModel.GetOrCreateUniqueConstraints(pKKey).Add(pK); + principalBaseTable.UniqueConstraints.Add("PK", pK); + var iX_PrincipalBase_AlternateId_Id = new TableIndex( + "IX_PrincipalBase_AlternateId_Id", principalBaseTable, new[] { alternateIdColumn, idColumn1 }, false); + iX_PrincipalBase_AlternateId_Id.SetRowIndexValueFactory(new CompositeRowIndexValueFactory(iX_PrincipalBase_AlternateId_Id)); + var iX_PrincipalBase_AlternateId_IdIx = RelationalModel.GetIndex(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "AlternateId", "Id" }); + iX_PrincipalBase_AlternateId_Id.MappedIndexes.Add(iX_PrincipalBase_AlternateId_IdIx); + RelationalModel.GetOrCreateTableIndexes(iX_PrincipalBase_AlternateId_IdIx).Add(iX_PrincipalBase_AlternateId_Id); + principalBaseTable.Indexes.Add("IX_PrincipalBase_AlternateId_Id", iX_PrincipalBase_AlternateId_Id); + + var principalBasePrincipalDerivedDependentBasebyte = FindEntityType("PrincipalBasePrincipalDerived>")!; + + var defaultTableMappings6 = new List>(); + principalBasePrincipalDerivedDependentBasebyte.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings6); + var principalBasePrincipalDerivedDependentBasebyteTableBase = new TableBase("PrincipalBasePrincipalDerived>", null, relationalModel); + var derivedsAlternateIdColumnBase = new ColumnBase("DerivedsAlternateId", "uniqueidentifier", principalBasePrincipalDerivedDependentBasebyteTableBase); + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("DerivedsAlternateId", derivedsAlternateIdColumnBase); + var derivedsIdColumnBase = new ColumnBase("DerivedsId", "decimal(20,0)", principalBasePrincipalDerivedDependentBasebyteTableBase); + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("DerivedsId", derivedsIdColumnBase); + var principalsAlternateIdColumnBase = new ColumnBase("PrincipalsAlternateId", "uniqueidentifier", principalBasePrincipalDerivedDependentBasebyteTableBase); + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("PrincipalsAlternateId", principalsAlternateIdColumnBase); + var principalsIdColumnBase = new ColumnBase("PrincipalsId", "decimal(20,0)", principalBasePrincipalDerivedDependentBasebyteTableBase); + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("PrincipalsId", principalsIdColumnBase); + var rowidColumnBase = new ColumnBase("rowid", "varbinary(8)", principalBasePrincipalDerivedDependentBasebyteTableBase) + { + IsNullable = true + }; + principalBasePrincipalDerivedDependentBasebyteTableBase.Columns.Add("rowid", rowidColumnBase); + relationalModel.DefaultTables.Add("PrincipalBasePrincipalDerived>", principalBasePrincipalDerivedDependentBasebyteTableBase); + var principalBasePrincipalDerivedDependentBasebyteMappingBase = new TableMappingBase(principalBasePrincipalDerivedDependentBasebyte, principalBasePrincipalDerivedDependentBasebyteTableBase, null); + principalBasePrincipalDerivedDependentBasebyteTableBase.AddTypeMapping(principalBasePrincipalDerivedDependentBasebyteMappingBase, false); + defaultTableMappings6.Add(principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)derivedsAlternateIdColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("DerivedsAlternateId")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)derivedsIdColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("DerivedsId")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalsAlternateIdColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("PrincipalsAlternateId")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalsIdColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("PrincipalsId")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)rowidColumnBase, principalBasePrincipalDerivedDependentBasebyte.FindProperty("rowid")!, principalBasePrincipalDerivedDependentBasebyteMappingBase); + + var tableMappings6 = new List(); + principalBasePrincipalDerivedDependentBasebyte.SetRuntimeAnnotation("Relational:TableMappings", tableMappings6); + var principalBasePrincipalDerivedDependentBasebyteTable = new Table("PrincipalBasePrincipalDerived>", null, relationalModel); + var derivedsIdColumn = new Column("DerivedsId", "decimal(20,0)", principalBasePrincipalDerivedDependentBasebyteTable); + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("DerivedsId", derivedsIdColumn); + derivedsIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(derivedsIdColumn); + var derivedsAlternateIdColumn = new Column("DerivedsAlternateId", "uniqueidentifier", principalBasePrincipalDerivedDependentBasebyteTable); + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("DerivedsAlternateId", derivedsAlternateIdColumn); + derivedsAlternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(derivedsAlternateIdColumn); + var principalsIdColumn = new Column("PrincipalsId", "decimal(20,0)", principalBasePrincipalDerivedDependentBasebyteTable); + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("PrincipalsId", principalsIdColumn); + principalsIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalsIdColumn); + var principalsAlternateIdColumn = new Column("PrincipalsAlternateId", "uniqueidentifier", principalBasePrincipalDerivedDependentBasebyteTable); + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("PrincipalsAlternateId", principalsAlternateIdColumn); + principalsAlternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalsAlternateIdColumn); + var rowidColumn = new Column("rowid", "varbinary(8)", principalBasePrincipalDerivedDependentBasebyteTable) + { + IsNullable = true + }; + principalBasePrincipalDerivedDependentBasebyteTable.Columns.Add("rowid", rowidColumn); + rowidColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(rowidColumn); + relationalModel.Tables.Add(("PrincipalBasePrincipalDerived>", null), principalBasePrincipalDerivedDependentBasebyteTable); + var principalBasePrincipalDerivedDependentBasebyteTableMapping = new TableMapping(principalBasePrincipalDerivedDependentBasebyte, principalBasePrincipalDerivedDependentBasebyteTable, null); + principalBasePrincipalDerivedDependentBasebyteTable.AddTypeMapping(principalBasePrincipalDerivedDependentBasebyteTableMapping, false); + tableMappings6.Add(principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(derivedsAlternateIdColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("DerivedsAlternateId")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(derivedsIdColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("DerivedsId")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(principalsAlternateIdColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("PrincipalsAlternateId")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(principalsIdColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("PrincipalsId")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(rowidColumn, principalBasePrincipalDerivedDependentBasebyte.FindProperty("rowid")!, principalBasePrincipalDerivedDependentBasebyteTableMapping); + var pK_PrincipalBasePrincipalDerivedDependentBasebyte = new UniqueConstraint("PK_PrincipalBasePrincipalDerived>", principalBasePrincipalDerivedDependentBasebyteTable, new[] { derivedsIdColumn, derivedsAlternateIdColumn, principalsIdColumn, principalsAlternateIdColumn }); + principalBasePrincipalDerivedDependentBasebyteTable.PrimaryKey = pK_PrincipalBasePrincipalDerivedDependentBasebyte; + pK_PrincipalBasePrincipalDerivedDependentBasebyte.SetRowKeyValueFactory(new CompositeRowKeyValueFactory(pK_PrincipalBasePrincipalDerivedDependentBasebyte)); + var pK_PrincipalBasePrincipalDerivedDependentBasebyteKey = RelationalModel.GetKey(this, + "PrincipalBasePrincipalDerived>", + new[] { "DerivedsId", "DerivedsAlternateId", "PrincipalsId", "PrincipalsAlternateId" }); + pK_PrincipalBasePrincipalDerivedDependentBasebyte.MappedKeys.Add(pK_PrincipalBasePrincipalDerivedDependentBasebyteKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_PrincipalBasePrincipalDerivedDependentBasebyteKey).Add(pK_PrincipalBasePrincipalDerivedDependentBasebyte); + principalBasePrincipalDerivedDependentBasebyteTable.UniqueConstraints.Add("PK_PrincipalBasePrincipalDerived>", pK_PrincipalBasePrincipalDerivedDependentBasebyte); + var iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa = new TableIndex( + "IX_PrincipalBasePrincipalDerived>_Principa~", principalBasePrincipalDerivedDependentBasebyteTable, new[] { principalsIdColumn, principalsAlternateIdColumn }, false); + iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa.SetRowIndexValueFactory(new CompositeRowIndexValueFactory(iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa)); + var iX_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaIx = RelationalModel.GetIndex(this, + "PrincipalBasePrincipalDerived>", + new[] { "PrincipalsId", "PrincipalsAlternateId" }); + iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa.MappedIndexes.Add(iX_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaIx); + RelationalModel.GetOrCreateTableIndexes(iX_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaIx).Add(iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + principalBasePrincipalDerivedDependentBasebyteTable.Indexes.Add("IX_PrincipalBasePrincipalDerived>_Principa~", iX_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + var fK_DependentBasebyte_PrincipalBase_PrincipalId = new ForeignKeyConstraint( + "FK_DependentBase_PrincipalBase_PrincipalId", dependentBasebyteTable, principalBaseTable, + new[] { principalIdColumn }, + principalBaseTable.FindUniqueConstraint("AK_PrincipalBase_Id")!, ReferentialAction.Cascade); + fK_DependentBasebyte_PrincipalBase_PrincipalId.SetRowForeignKeyValueFactory(RowForeignKeyValueFactoryFactory.CreateSimpleNonNullableFactory(fK_DependentBasebyte_PrincipalBase_PrincipalId)); + var fK_DependentBasebyte_PrincipalBase_PrincipalIdFk = RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id" }); + fK_DependentBasebyte_PrincipalBase_PrincipalId.MappedForeignKeys.Add(fK_DependentBasebyte_PrincipalBase_PrincipalIdFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_DependentBasebyte_PrincipalBase_PrincipalIdFk).Add(fK_DependentBasebyte_PrincipalBase_PrincipalId); + dependentBasebyteTable.ForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalBase_PrincipalId); + principalBaseTable.ReferencingForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalBase_PrincipalId); + var fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlte = new ForeignKeyConstraint( + "FK_DependentBase_PrincipalBase_PrincipalId_PrincipalAlte~", dependentBasebyteTable, principalBaseTable, + new[] { principalIdColumn, principalAlternateIdColumn }, + principalBaseTable.FindUniqueConstraint("PK")!, ReferentialAction.NoAction); + fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlte.SetRowForeignKeyValueFactory(new CompositeRowForeignKeyValueFactory(fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlte)); + var fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlteFk = RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId", "PrincipalAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + new[] { "Id", "AlternateId" }); + fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlte.MappedForeignKeys.Add(fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlteFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlteFk).Add(fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlte); + dependentBasebyteTable.ForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlte); + principalBaseTable.ReferencingForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalBase_PrincipalId_PrincipalAlte); + var fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa = new ForeignKeyConstraint( + "FK_PrincipalBasePrincipalDerived>_Principa~", principalBasePrincipalDerivedDependentBasebyteTable, principalBaseTable, + new[] { derivedsIdColumn, derivedsAlternateIdColumn }, + principalBaseTable.FindUniqueConstraint("PK")!, ReferentialAction.Cascade); + fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa.SetRowForeignKeyValueFactory(new CompositeRowForeignKeyValueFactory(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa)); + var fK_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaFk = RelationalModel.GetForeignKey(this, + "PrincipalBasePrincipalDerived>", + new[] { "DerivedsId", "DerivedsAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + new[] { "Id", "AlternateId" }); + fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa.MappedForeignKeys.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_PrincipalBasePrincipalDerivedDependentBasebyte_PrincipaFk).Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + principalBasePrincipalDerivedDependentBasebyteTable.ForeignKeyConstraints.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + principalBaseTable.ReferencingForeignKeyConstraints.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Principa); + var fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1 = new ForeignKeyConstraint( + "FK_PrincipalBasePrincipalDerived>_Princip~1", principalBasePrincipalDerivedDependentBasebyteTable, principalBaseTable, + new[] { principalsIdColumn, principalsAlternateIdColumn }, + principalBaseTable.FindUniqueConstraint("PK")!, ReferentialAction.NoAction); + fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1.SetRowForeignKeyValueFactory(new CompositeRowForeignKeyValueFactory(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1)); + var fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1Fk = RelationalModel.GetForeignKey(this, + "PrincipalBasePrincipalDerived>", + new[] { "PrincipalsId", "PrincipalsAlternateId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id", "AlternateId" }); + fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1.MappedForeignKeys.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1Fk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1Fk).Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1); + principalBasePrincipalDerivedDependentBasebyteTable.ForeignKeyConstraints.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1); + principalBaseTable.ReferencingForeignKeyConstraints.Add(fK_PrincipalBasePrincipalDerivedDependentBasebyte_Princip1); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentBaseEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentBaseEntityType.cs new file mode 100644 index 00000000..a648a007 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentBaseEntityType.cs @@ -0,0 +1,334 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.ValueGeneration; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DependentBaseEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + typeof(CompiledModelTestBase.DependentBase), + baseEntityType, + discriminatorProperty: "EnumDiscriminator", + discriminatorValue: CompiledModelTestBase.Enum1.One, + derivedTypesCount: 1, + propertyCount: 4, + navigationCount: 1, + foreignKeyCount: 2, + unnamedIndexCount: 1, + keyCount: 1); + + var principalId = runtimeEntityType.AddProperty( + "PrincipalId", + typeof(long), + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0L); + principalId.SetAccessors( + long (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && entry.ReadShadowValue(0) == 0L ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + long (IInternalEntry entry) => entry.ReadShadowValue(0), + long (IInternalEntry entry) => entry.ReadOriginalValue(principalId, 0), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalId, 0)); + principalId.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: 0, + relationshipIndex: 0, + storeGenerationIndex: 0); + principalId.TypeMapping = LibRedLongTypeMapping.Default; + principalId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalId)); + + var principalAlternateId = runtimeEntityType.AddProperty( + "PrincipalAlternateId", + typeof(Guid), + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + principalAlternateId.SetAccessors( + Guid (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(1) ? entry.ReadStoreGeneratedValue(1) : (entry.FlaggedAsTemporary(1) && entry.ReadShadowValue(1) == new Guid("00000000-0000-0000-0000-000000000000") ? entry.ReadTemporaryValue(1) : entry.ReadShadowValue(1))), + Guid (IInternalEntry entry) => entry.ReadShadowValue(1), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(principalAlternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalAlternateId, 1)); + principalAlternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: 1, + relationshipIndex: 1, + storeGenerationIndex: 1); + principalAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + principalAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalAlternateId)); + + var enumDiscriminator = runtimeEntityType.AddProperty( + "EnumDiscriminator", + typeof(CompiledModelTestBase.Enum1), + afterSaveBehavior: PropertySaveBehavior.Throw, + valueGeneratorFactory: new DiscriminatorValueGeneratorFactory().Create); + enumDiscriminator.SetAccessors( + CompiledModelTestBase.Enum1 (IInternalEntry entry) => entry.ReadShadowValue(2), + CompiledModelTestBase.Enum1 (IInternalEntry entry) => entry.ReadShadowValue(2), + CompiledModelTestBase.Enum1 (IInternalEntry entry) => entry.ReadOriginalValue(enumDiscriminator, 2), + CompiledModelTestBase.Enum1 (IInternalEntry entry) => entry.GetCurrentValue(enumDiscriminator)); + enumDiscriminator.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: 2, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumDiscriminator.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum1 v1, CompiledModelTestBase.Enum1 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum1 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum1 (CompiledModelTestBase.Enum1 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum1 v1, CompiledModelTestBase.Enum1 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum1 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum1 (CompiledModelTestBase.Enum1 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum1 value) => ((int)value), + CompiledModelTestBase.Enum1 (int value) => ((CompiledModelTestBase.Enum1)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum1 value) => ((int)value), + CompiledModelTestBase.Enum1 (int value) => ((CompiledModelTestBase.Enum1)value)))); + enumDiscriminator.SetSentinelFromProviderValue(0); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(byte?), + propertyInfo: typeof(CompiledModelTestBase.DependentBase).GetProperty("Id", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + id.SetGetter( + byte? (CompiledModelTestBase.DependentBase instance) => DependentBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.DependentBase instance) => !(DependentBaseUnsafeAccessors.Id(instance).HasValue)); + id.SetSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, byte? value) => + { + DependentBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, byte? value) => + { + DependentBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + byte? (IInternalEntry entry) => DependentBaseUnsafeAccessors.Id(((CompiledModelTestBase.DependentBase)(entry.Entity))), + byte? (IInternalEntry entry) => DependentBaseUnsafeAccessors.Id(((CompiledModelTestBase.DependentBase)(entry.Entity))), + byte? (IInternalEntry entry) => entry.ReadOriginalValue(id, 3), + byte? (IInternalEntry entry) => entry.GetCurrentValue(id)); + id.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + id.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)); + id.SetComparer(new NullableValueComparer(id.TypeMapping.Comparer)); + id.SetKeyComparer(new NullableValueComparer(id.TypeMapping.KeyComparer)); + + var key = runtimeEntityType.AddKey( + new[] { principalId, principalAlternateId }); + runtimeEntityType.SetPrimaryKey(key); + + var index = runtimeEntityType.AddIndex( + new[] { principalId }, + unique: true); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true); + + return runtimeForeignKey; + } + + public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalId"), declaringEntityType.FindProperty("PrincipalAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.ClientNoAction, + unique: true, + required: true); + + var principal = declaringEntityType.AddNavigation("Principal", + runtimeForeignKey, + onDependent: true, + typeof(CompiledModelTestBase.PrincipalDerived>), + propertyInfo: typeof(CompiledModelTestBase.DependentBase).GetProperty("Principal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + principal.SetGetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.DependentBase instance) => DependentBaseUnsafeAccessors.Principal(instance), + bool (CompiledModelTestBase.DependentBase instance) => DependentBaseUnsafeAccessors.Principal(instance) == null); + principal.SetSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, CompiledModelTestBase.PrincipalDerived> value) => + { + DependentBaseUnsafeAccessors.Principal(instance) = value; + return instance; + }); + principal.SetMaterializationSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, CompiledModelTestBase.PrincipalDerived> value) => + { + DependentBaseUnsafeAccessors.Principal(instance) = value; + return instance; + }); + principal.SetAccessors( + CompiledModelTestBase.PrincipalDerived> (IInternalEntry entry) => DependentBaseUnsafeAccessors.Principal(((CompiledModelTestBase.DependentBase)(entry.Entity))), + CompiledModelTestBase.PrincipalDerived> (IInternalEntry entry) => DependentBaseUnsafeAccessors.Principal(((CompiledModelTestBase.DependentBase)(entry.Entity))), + null, + CompiledModelTestBase.PrincipalDerived> (IInternalEntry entry) => entry.GetCurrentValue>>(principal)); + principal.SetPropertyIndexes( + index: 0, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 2, + storeGenerationIndex: -1); + var dependent = principalEntityType.AddNavigation("Dependent", + runtimeForeignKey, + onDependent: false, + typeof(CompiledModelTestBase.DependentBase), + propertyInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetProperty("Dependent", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + eagerLoaded: true, + lazyLoadingEnabled: false); + + dependent.SetGetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Dependent(instance), + bool (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Dependent(instance) == null); + dependent.SetSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, CompiledModelTestBase.DependentBase value) => + { + PrincipalDerivedUnsafeAccessors>.Dependent(instance) = value; + return instance; + }); + dependent.SetMaterializationSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, CompiledModelTestBase.DependentBase value) => + { + PrincipalDerivedUnsafeAccessors>.Dependent(instance) = value; + return instance; + }); + dependent.SetAccessors( + CompiledModelTestBase.DependentBase (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Dependent(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + CompiledModelTestBase.DependentBase (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Dependent(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + null, + CompiledModelTestBase.DependentBase (IInternalEntry entry) => entry.GetCurrentValue>(dependent)); + dependent.SetPropertyIndexes( + index: 2, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 4, + storeGenerationIndex: -1); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var principalId = runtimeEntityType.FindProperty("PrincipalId"); + var principalAlternateId = runtimeEntityType.FindProperty("PrincipalAlternateId"); + var enumDiscriminator = runtimeEntityType.FindProperty("EnumDiscriminator"); + var id = runtimeEntityType.FindProperty("Id"); + var key = runtimeEntityType.FindKey(new[] { principalId, principalAlternateId }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key)); + var principal = runtimeEntityType.FindNavigation("Principal"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.DependentBase)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalId)), ((ValueComparer)(((IProperty)principalAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalAlternateId)), ((ValueComparer)(((IProperty)enumDiscriminator).GetValueComparer())).Snapshot(source.GetCurrentValue(enumDiscriminator)), (source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalAlternateId).GetValueComparer())).Snapshot(default(Guid)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalId") ? ((long)(source["PrincipalId"])) : 0L), (source.ContainsKey("PrincipalAlternateId") ? ((Guid)(source["PrincipalAlternateId"])) : new Guid("00000000-0000-0000-0000-000000000000")), (source.ContainsKey("EnumDiscriminator") ? ((CompiledModelTestBase.Enum1)(source["EnumDiscriminator"])) : CompiledModelTestBase.Enum1.Default))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(CompiledModelTestBase.Enum1))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.DependentBase)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalId)), ((ValueComparer)(((IProperty)principalAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalAlternateId)), source.GetCurrentValue>>(principal)))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 4, + navigationCount: 1, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 4, + shadowCount: 3, + relationshipCount: 3, + storeGeneratedCount: 2)); + runtimeEntityType.AddAnnotation("DiscriminatorMappingComplete", false); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:MappingStrategy", "TPH"); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "DependentBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentBaseUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentBaseUnsafeAccessors.cs new file mode 100644 index 00000000..d7a27e94 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentBaseUnsafeAccessors.cs @@ -0,0 +1,18 @@ +// +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DependentBaseUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TKey Id(CompiledModelTestBase.DependentBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.PrincipalDerived> Principal(CompiledModelTestBase.DependentBase @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentDerivedEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentDerivedEntityType.cs new file mode 100644 index 00000000..720b15cb --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentDerivedEntityType.cs @@ -0,0 +1,174 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DependentDerivedEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived", + typeof(CompiledModelTestBase.DependentDerived), + baseEntityType, + discriminatorProperty: "EnumDiscriminator", + discriminatorValue: CompiledModelTestBase.Enum1.Two, + propertyCount: 2); + + var data = runtimeEntityType.AddProperty( + "Data", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.DependentDerived).GetProperty("Data", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentDerived).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true, + maxLength: 20, + unicode: false); + data.SetGetter( + string (CompiledModelTestBase.DependentDerived instance) => DependentDerivedUnsafeAccessors.Data(instance), + bool (CompiledModelTestBase.DependentDerived instance) => DependentDerivedUnsafeAccessors.Data(instance) == null); + data.SetSetter( + CompiledModelTestBase.DependentDerived (CompiledModelTestBase.DependentDerived instance, string value) => + { + DependentDerivedUnsafeAccessors.Data(instance) = value; + return instance; + }); + data.SetMaterializationSetter( + CompiledModelTestBase.DependentDerived (CompiledModelTestBase.DependentDerived instance, string value) => + { + DependentDerivedUnsafeAccessors.Data(instance) = value; + return instance; + }); + data.SetAccessors( + string (IInternalEntry entry) => DependentDerivedUnsafeAccessors.Data(((CompiledModelTestBase.DependentDerived)(entry.Entity))), + string (IInternalEntry entry) => DependentDerivedUnsafeAccessors.Data(((CompiledModelTestBase.DependentDerived)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(data, 4), + string (IInternalEntry entry) => entry.GetCurrentValue(data)); + data.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + data.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "char(20)", + size: 20, + unicode: false, + fixedLength: true)); + data.AddAnnotation("Relational:IsFixedLength", true); + + var money = runtimeEntityType.AddProperty( + "Money", + typeof(decimal), + precision: 9, + scale: 3, + sentinel: 0m); + money.SetAccessors( + decimal (IInternalEntry entry) => entry.ReadShadowValue(3), + decimal (IInternalEntry entry) => entry.ReadShadowValue(3), + decimal (IInternalEntry entry) => entry.ReadOriginalValue(money, 5), + decimal (IInternalEntry entry) => entry.GetCurrentValue(money)); + money.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: 3, + relationshipIndex: -1, + storeGenerationIndex: -1); + money.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(9,3)", + precision: 9, + scale: 3)); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var principalId = runtimeEntityType.FindProperty("PrincipalId"); + var principalAlternateId = runtimeEntityType.FindProperty("PrincipalAlternateId"); + var enumDiscriminator = runtimeEntityType.FindProperty("EnumDiscriminator"); + var id = runtimeEntityType.FindProperty("Id"); + var data = runtimeEntityType.FindProperty("Data"); + var money = runtimeEntityType.FindProperty("Money"); + var principal = runtimeEntityType.FindNavigation("Principal"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.DependentDerived)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalId)), ((ValueComparer)(((IProperty)principalAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalAlternateId)), ((ValueComparer)(((IProperty)enumDiscriminator).GetValueComparer())).Snapshot(source.GetCurrentValue(enumDiscriminator)), (source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(data) == null ? null : ((ValueComparer)(((IProperty)data).GetValueComparer())).Snapshot(source.GetCurrentValue(data))), ((ValueComparer)(((IProperty)money).GetValueComparer())).Snapshot(source.GetCurrentValue(money))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalAlternateId).GetValueComparer())).Snapshot(default(Guid)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalId") ? ((long)(source["PrincipalId"])) : 0L), (source.ContainsKey("PrincipalAlternateId") ? ((Guid)(source["PrincipalAlternateId"])) : new Guid("00000000-0000-0000-0000-000000000000")), (source.ContainsKey("EnumDiscriminator") ? ((CompiledModelTestBase.Enum1)(source["EnumDiscriminator"])) : CompiledModelTestBase.Enum1.Default), (source.ContainsKey("Money") ? ((decimal)(source["Money"])) : 0M))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(CompiledModelTestBase.Enum1), default(decimal))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.DependentDerived)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalId)), ((ValueComparer)(((IProperty)principalAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalAlternateId)), source.GetCurrentValue>>(principal)))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 6, + navigationCount: 1, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 6, + shadowCount: 4, + relationshipCount: 3, + storeGeneratedCount: 2)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "DependentBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentDerivedUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentDerivedUnsafeAccessors.cs new file mode 100644 index 00000000..8847446b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/DependentDerivedUnsafeAccessors.cs @@ -0,0 +1,16 @@ +// +using System; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DependentDerivedUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string Data(CompiledModelTestBase.DependentDerived @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesEntityType.cs new file mode 100644 index 00000000..17cf64de --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesEntityType.cs @@ -0,0 +1,16362 @@ +// +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Reflection; +using System.Text; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class ManyTypesEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes", + typeof(CompiledModelTestBase.ManyTypes), + baseEntityType, + propertyCount: 241, + keyCount: 1); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(CompiledModelTestBase.ManyTypesId), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + valueConverter: new CompiledModelTestBase.ManyTypesIdConverter()); + id.SetGetter( + CompiledModelTestBase.ManyTypesId (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Id(instance).Equals(default(CompiledModelTestBase.ManyTypesId))); + id.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.ManyTypesId value) => + { + ManyTypesUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.ManyTypesId value) => + { + ManyTypesUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + CompiledModelTestBase.ManyTypesId (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && ManyTypesUnsafeAccessors.Id(((CompiledModelTestBase.ManyTypes)(entry.Entity))).Equals(default(CompiledModelTestBase.ManyTypesId)) ? entry.ReadTemporaryValue(0) : ManyTypesUnsafeAccessors.Id(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + CompiledModelTestBase.ManyTypesId (IInternalEntry entry) => ManyTypesUnsafeAccessors.Id(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.ManyTypesId (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + CompiledModelTestBase.ManyTypesId (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: 0); + id.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.ManyTypesId v1, CompiledModelTestBase.ManyTypesId v2) => v1.Equals(v2), + int (CompiledModelTestBase.ManyTypesId v) => ((object)v).GetHashCode(), + CompiledModelTestBase.ManyTypesId (CompiledModelTestBase.ManyTypesId v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.ManyTypesId v1, CompiledModelTestBase.ManyTypesId v2) => v1.Equals(v2), + int (CompiledModelTestBase.ManyTypesId v) => ((object)v).GetHashCode(), + CompiledModelTestBase.ManyTypesId (CompiledModelTestBase.ManyTypesId v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.ManyTypesId v) => v.Id, + CompiledModelTestBase.ManyTypesId (int v) => new CompiledModelTestBase.ManyTypesId(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.ManyTypesId v) => v.Id, + CompiledModelTestBase.ManyTypesId (int v) => new CompiledModelTestBase.ManyTypesId(v)))); + id.SetCurrentValueComparer(new CurrentProviderValueComparer(id)); + id.SetSentinelFromProviderValue(0); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var @bool = runtimeEntityType.AddProperty( + "Bool", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Bool", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: false); + @bool.SetGetter( + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Bool(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Bool(instance) == false); + @bool.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.Bool(instance) = value; + return instance; + }); + @bool.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.Bool(instance) = value; + return instance; + }); + @bool.SetAccessors( + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.Bool(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.Bool(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => entry.ReadOriginalValue(@bool, 1), + bool (IInternalEntry entry) => entry.GetCurrentValue(@bool)); + @bool.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @bool.TypeMapping = JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)); + + var boolArray = runtimeEntityType.AddProperty( + "BoolArray", + typeof(bool[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolArray.SetGetter( + bool[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolArray(instance) == null); + boolArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool[] value) => + { + ManyTypesUnsafeAccessors.BoolArray(instance) = value; + return instance; + }); + boolArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool[] value) => + { + ManyTypesUnsafeAccessors.BoolArray(instance) = value; + return instance; + }); + boolArray.SetAccessors( + bool[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool[] (IInternalEntry entry) => entry.ReadOriginalValue(boolArray, 2), + bool[] (IInternalEntry entry) => entry.GetCurrentValue(boolArray)); + boolArray.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonBoolReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonBoolReaderWriter.Instance), + elementMapping: JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))); + var boolArrayElementType = boolArray.SetElementType(typeof(bool)); + boolArrayElementType.TypeMapping = boolArray.TypeMapping.ElementTypeMapping; + + var boolReadOnlyCollection = runtimeEntityType.AddProperty( + "BoolReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_boolReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance) == null); + boolReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance) = ((List)value); + return instance; + }); + boolReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._boolReadOnlyCollection(instance) = ((List)value); + return instance; + }); + boolReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._boolReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._boolReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(boolReadOnlyCollection, 3), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(boolReadOnlyCollection)); + boolReadOnlyCollection.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, bool>(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)), + keyComparer: new ListOfValueTypesComparer, bool>(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, bool>( + JsonBoolReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, bool>( + JsonBoolReaderWriter.Instance), + elementMapping: JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))); + var boolReadOnlyCollectionElementType = boolReadOnlyCollection.SetElementType(typeof(bool)); + boolReadOnlyCollectionElementType.TypeMapping = boolReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var boolToStringConverterProperty = runtimeEntityType.AddProperty( + "BoolToStringConverterProperty", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolToStringConverterProperty.SetGetter( + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToStringConverterProperty(instance) == false); + boolToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToStringConverterProperty(instance) = value; + return instance; + }); + boolToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToStringConverterProperty(instance) = value; + return instance; + }); + boolToStringConverterProperty.SetAccessors( + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => entry.ReadOriginalValue(boolToStringConverterProperty, 4), + bool (IInternalEntry entry) => entry.GetCurrentValue(boolToStringConverterProperty)); + boolToStringConverterProperty.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (bool v) => ((string)((v ? "B" : "A"))), + bool (string v) => !(string.IsNullOrEmpty(v)) && ((int)(v.ToUpperInvariant()[0])) == ((int)("B".ToUpperInvariant()[0]))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (bool v) => ((string)((v ? "B" : "A"))), + bool (string v) => !(string.IsNullOrEmpty(v)) && ((int)(v.ToUpperInvariant()[0])) == ((int)("B".ToUpperInvariant()[0]))))); + boolToStringConverterProperty.SetSentinelFromProviderValue("A"); + + var boolToTwoValuesConverterProperty = runtimeEntityType.AddProperty( + "BoolToTwoValuesConverterProperty", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolToTwoValuesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolToTwoValuesConverterProperty.SetGetter( + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(instance) == false); + boolToTwoValuesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(instance) = value; + return instance; + }); + boolToTwoValuesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(instance) = value; + return instance; + }); + boolToTwoValuesConverterProperty.SetAccessors( + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToTwoValuesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => entry.ReadOriginalValue(boolToTwoValuesConverterProperty, 5), + bool (IInternalEntry entry) => entry.GetCurrentValue(boolToTwoValuesConverterProperty)); + boolToTwoValuesConverterProperty.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolToTwoValuesConverterProperty.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (bool v) => ((byte)((v ? 1 : 0))), + bool (byte v) => v == 1), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (bool v) => ((byte)((v ? 1 : 0))), + bool (byte v) => v == 1))); + boolToTwoValuesConverterProperty.SetSentinelFromProviderValue((byte)0); + + var boolToZeroOneConverterProperty = runtimeEntityType.AddProperty( + "BoolToZeroOneConverterProperty", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolToZeroOneConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new BoolToZeroOneConverter()); + boolToZeroOneConverterProperty.SetGetter( + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(instance) == false); + boolToZeroOneConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(instance) = value; + return instance; + }); + boolToZeroOneConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool value) => + { + ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(instance) = value; + return instance; + }); + boolToZeroOneConverterProperty.SetAccessors( + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => ManyTypesUnsafeAccessors.BoolToZeroOneConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool (IInternalEntry entry) => entry.ReadOriginalValue(boolToZeroOneConverterProperty, 6), + bool (IInternalEntry entry) => entry.GetCurrentValue(boolToZeroOneConverterProperty)); + boolToZeroOneConverterProperty.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + boolToZeroOneConverterProperty.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (bool v) => ((short)((v ? 1 : 0))), + bool (short v) => v == 1), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (bool v) => ((short)((v ? 1 : 0))), + bool (short v) => v == 1))); + boolToZeroOneConverterProperty.SetSentinelFromProviderValue((short)0); + + var bytes = runtimeEntityType.AddProperty( + "Bytes", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Bytes", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + bytes.SetGetter( + byte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Bytes(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Bytes(instance) == null); + bytes.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.Bytes(instance) = value; + return instance; + }); + bytes.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.Bytes(instance) = value; + return instance; + }); + bytes.SetAccessors( + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Bytes(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Bytes(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(bytes, 7), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(bytes)); + bytes.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + bytes.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + var bytesArray = runtimeEntityType.AddProperty( + "BytesArray", + typeof(byte[][]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BytesArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + bytesArray.SetGetter( + byte[][] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BytesArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BytesArray(instance) == null); + bytesArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[][] value) => + { + ManyTypesUnsafeAccessors.BytesArray(instance) = value; + return instance; + }); + bytesArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[][] value) => + { + ManyTypesUnsafeAccessors.BytesArray(instance) = value; + return instance; + }); + bytesArray.SetAccessors( + byte[][] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BytesArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[][] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BytesArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[][] (IInternalEntry entry) => entry.ReadOriginalValue(bytesArray, 8), + byte[][] (IInternalEntry entry) => entry.GetCurrentValue(bytesArray)); + bytesArray.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + bytesArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + JsonByteArrayReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + JsonByteArrayReaderWriter.Instance), + elementMapping: JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None)); + var bytesArrayElementType = bytesArray.SetElementType(typeof(byte[])); + bytesArrayElementType.TypeMapping = bytesArray.TypeMapping.ElementTypeMapping; + + var bytesToStringConverterProperty = runtimeEntityType.AddProperty( + "BytesToStringConverterProperty", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BytesToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new BytesToStringConverter(), + valueComparer: new ArrayStructuralComparer()); + bytesToStringConverterProperty.SetGetter( + byte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BytesToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.BytesToStringConverterProperty(instance) == null); + bytesToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.BytesToStringConverterProperty(instance) = value; + return instance; + }); + bytesToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.BytesToStringConverterProperty(instance) = value; + return instance; + }); + bytesToStringConverterProperty.SetAccessors( + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BytesToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.BytesToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(bytesToStringConverterProperty, 9), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(bytesToStringConverterProperty)); + bytesToStringConverterProperty.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + bytesToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (byte[] v) => Convert.ToBase64String(v), + byte[] (string v) => Convert.FromBase64String(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (byte[] v) => Convert.ToBase64String(v), + byte[] (string v) => Convert.FromBase64String(v)))); + + var castingConverterProperty = runtimeEntityType.AddProperty( + "CastingConverterProperty", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("CastingConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new CastingConverter()); + castingConverterProperty.SetGetter( + int (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CastingConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CastingConverterProperty(instance) == 0); + castingConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.CastingConverterProperty(instance) = value; + return instance; + }); + castingConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.CastingConverterProperty(instance) = value; + return instance; + }); + castingConverterProperty.SetAccessors( + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.CastingConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.CastingConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(castingConverterProperty, 10), + int (IInternalEntry entry) => entry.GetCurrentValue(castingConverterProperty)); + castingConverterProperty.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + castingConverterProperty.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + converter: new ValueConverter( + decimal (int v) => ((decimal)v), + int (decimal v) => ((int)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (int v) => ((decimal)v), + int (decimal v) => ((int)v)))); + castingConverterProperty.SetSentinelFromProviderValue(0m); + + var @char = runtimeEntityType.AddProperty( + "Char", + typeof(char), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Char", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + @char.SetGetter( + char (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Char(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Char(instance) == '\0'); + @char.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char value) => + { + ManyTypesUnsafeAccessors.Char(instance) = value; + return instance; + }); + @char.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char value) => + { + ManyTypesUnsafeAccessors.Char(instance) = value; + return instance; + }); + @char.SetAccessors( + char (IInternalEntry entry) => ManyTypesUnsafeAccessors.Char(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char (IInternalEntry entry) => ManyTypesUnsafeAccessors.Char(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char (IInternalEntry entry) => entry.ReadOriginalValue(@char, 11), + char (IInternalEntry entry) => entry.GetCurrentValue(@char)); + @char.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @char.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))); + @char.SetSentinelFromProviderValue("\0"); + + var charArray = runtimeEntityType.AddProperty( + "CharArray", + typeof(char[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("CharArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + charArray.SetGetter( + char[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CharArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CharArray(instance) == null); + charArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char[] value) => + { + ManyTypesUnsafeAccessors.CharArray(instance) = value; + return instance; + }); + charArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char[] value) => + { + ManyTypesUnsafeAccessors.CharArray(instance) = value; + return instance; + }); + charArray.SetAccessors( + char[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.CharArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.CharArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char[] (IInternalEntry entry) => entry.ReadOriginalValue(charArray, 12), + char[] (IInternalEntry entry) => entry.GetCurrentValue(charArray)); + charArray.SetPropertyIndexes( + index: 12, + originalValueIndex: 12, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + charArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0]))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0]))))); + var charArrayElementType = charArray.SetElementType(typeof(char)); + charArrayElementType.TypeMapping = charArray.TypeMapping.ElementTypeMapping; + + var charToStringConverterProperty = runtimeEntityType.AddProperty( + "CharToStringConverterProperty", + typeof(char), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("CharToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new CharToStringConverter()); + charToStringConverterProperty.SetGetter( + char (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CharToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.CharToStringConverterProperty(instance) == '\0'); + charToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char value) => + { + ManyTypesUnsafeAccessors.CharToStringConverterProperty(instance) = value; + return instance; + }); + charToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char value) => + { + ManyTypesUnsafeAccessors.CharToStringConverterProperty(instance) = value; + return instance; + }); + charToStringConverterProperty.SetAccessors( + char (IInternalEntry entry) => ManyTypesUnsafeAccessors.CharToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char (IInternalEntry entry) => ManyTypesUnsafeAccessors.CharToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char (IInternalEntry entry) => entry.ReadOriginalValue(charToStringConverterProperty, 13), + char (IInternalEntry entry) => entry.GetCurrentValue(charToStringConverterProperty)); + charToStringConverterProperty.SetPropertyIndexes( + index: 13, + originalValueIndex: 13, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + charToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "char(1)", + size: 1, + fixedLength: true), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))); + charToStringConverterProperty.SetSentinelFromProviderValue("\0"); + charToStringConverterProperty.AddAnnotation("Relational:IsFixedLength", true); + + var dateOnly = runtimeEntityType.AddProperty( + "DateOnly", + typeof(DateOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new DateOnly(1, 1, 1)); + dateOnly.SetGetter( + DateOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnly(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnly(instance) == default(DateOnly)); + dateOnly.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly value) => + { + ManyTypesUnsafeAccessors.DateOnly(instance) = value; + return instance; + }); + dateOnly.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly value) => + { + ManyTypesUnsafeAccessors.DateOnly(instance) = value; + return instance; + }); + dateOnly.SetAccessors( + DateOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly (IInternalEntry entry) => entry.ReadOriginalValue(dateOnly, 14), + DateOnly (IInternalEntry entry) => entry.GetCurrentValue(dateOnly)); + dateOnly.SetPropertyIndexes( + index: 14, + originalValueIndex: 14, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateOnly.TypeMapping = JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v)); + + var dateOnlyArray = runtimeEntityType.AddProperty( + "DateOnlyArray", + typeof(DateOnly[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + dateOnlyArray.SetGetter( + DateOnly[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnlyArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnlyArray(instance) == null); + dateOnlyArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly[] value) => + { + ManyTypesUnsafeAccessors.DateOnlyArray(instance) = value; + return instance; + }); + dateOnlyArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly[] value) => + { + ManyTypesUnsafeAccessors.DateOnlyArray(instance) = value; + return instance; + }); + dateOnlyArray.SetAccessors( + DateOnly[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly[] (IInternalEntry entry) => entry.ReadOriginalValue(dateOnlyArray, 15), + DateOnly[] (IInternalEntry entry) => entry.GetCurrentValue(dateOnlyArray)); + dateOnlyArray.SetPropertyIndexes( + index: 15, + originalValueIndex: 15, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateOnlyArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateOnlyReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateOnlyReaderWriter.Instance), + elementMapping: JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v))); + var dateOnlyArrayElementType = dateOnlyArray.SetElementType(typeof(DateOnly)); + dateOnlyArrayElementType.TypeMapping = dateOnlyArray.TypeMapping.ElementTypeMapping; + + var dateOnlyToStringConverterProperty = runtimeEntityType.AddProperty( + "DateOnlyToStringConverterProperty", + typeof(DateOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateOnlyToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateOnlyToStringConverter()); + dateOnlyToStringConverterProperty.SetGetter( + DateOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(instance) == default(DateOnly)); + dateOnlyToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly value) => + { + ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(instance) = value; + return instance; + }); + dateOnlyToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly value) => + { + ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(instance) = value; + return instance; + }); + dateOnlyToStringConverterProperty.SetAccessors( + DateOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateOnlyToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly (IInternalEntry entry) => entry.ReadOriginalValue(dateOnlyToStringConverterProperty, 16), + DateOnly (IInternalEntry entry) => entry.GetCurrentValue(dateOnlyToStringConverterProperty)); + dateOnlyToStringConverterProperty.SetPropertyIndexes( + index: 16, + originalValueIndex: 16, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateOnlyToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(10)", + size: 10), + converter: new ValueConverter( + string (DateOnly v) => v.ToString("yyyy\\-MM\\-dd"), + DateOnly (string v) => DateOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (DateOnly v) => v.ToString("yyyy\\-MM\\-dd"), + DateOnly (string v) => DateOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None)))); + dateOnlyToStringConverterProperty.SetSentinelFromProviderValue("0001-01-01"); + + var dateTime = runtimeEntityType.AddProperty( + "DateTime", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + dateTime.SetGetter( + DateTime (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTime(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTime(instance) == default(DateTime)); + dateTime.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTime(instance) = value; + return instance; + }); + dateTime.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTime(instance) = value; + return instance; + }); + dateTime.SetAccessors( + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTime(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTime(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => entry.ReadOriginalValue(dateTime, 17), + DateTime (IInternalEntry entry) => entry.GetCurrentValue(dateTime)); + dateTime.SetPropertyIndexes( + index: 17, + originalValueIndex: 17, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTime.TypeMapping = JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)); + + var dateTimeArray = runtimeEntityType.AddProperty( + "DateTimeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + dateTimeArray.SetGetter( + DateTime[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeArray(instance) == null); + dateTimeArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime[] value) => + { + ManyTypesUnsafeAccessors.DateTimeArray(instance) = value; + return instance; + }); + dateTimeArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime[] value) => + { + ManyTypesUnsafeAccessors.DateTimeArray(instance) = value; + return instance; + }); + dateTimeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeArray, 18), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(dateTimeArray)); + dateTimeArray.SetPropertyIndexes( + index: 18, + originalValueIndex: 18, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var dateTimeArrayElementType = dateTimeArray.SetElementType(typeof(DateTime)); + dateTimeArrayElementType.TypeMapping = dateTimeArray.TypeMapping.ElementTypeMapping; + + var dateTimeOffsetToBinaryConverterProperty = runtimeEntityType.AddProperty( + "DateTimeOffsetToBinaryConverterProperty", + typeof(DateTimeOffset), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeOffsetToBinaryConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeOffsetToBinaryConverter()); + dateTimeOffsetToBinaryConverterProperty.SetGetter( + DateTimeOffset (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(instance).EqualsExact(default(DateTimeOffset))); + dateTimeOffsetToBinaryConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToBinaryConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToBinaryConverterProperty.SetAccessors( + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToBinaryConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeOffsetToBinaryConverterProperty, 19), + DateTimeOffset (IInternalEntry entry) => entry.GetCurrentValue(dateTimeOffsetToBinaryConverterProperty)); + dateTimeOffsetToBinaryConverterProperty.SetPropertyIndexes( + index: 19, + originalValueIndex: 19, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeOffsetToBinaryConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + keyComparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (DateTimeOffset v) => DateTimeOffsetToBinaryConverter.ToLong(v), + DateTimeOffset (long v) => DateTimeOffsetToBinaryConverter.ToDateTimeOffset(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (DateTimeOffset v) => DateTimeOffsetToBinaryConverter.ToLong(v), + DateTimeOffset (long v) => DateTimeOffsetToBinaryConverter.ToDateTimeOffset(v)))); + dateTimeOffsetToBinaryConverterProperty.SetSentinelFromProviderValue(0L); + + var dateTimeOffsetToBytesConverterProperty = runtimeEntityType.AddProperty( + "DateTimeOffsetToBytesConverterProperty", + typeof(DateTimeOffset), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeOffsetToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeOffsetToBytesConverter()); + dateTimeOffsetToBytesConverterProperty.SetGetter( + DateTimeOffset (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(instance).EqualsExact(default(DateTimeOffset))); + dateTimeOffsetToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToBytesConverterProperty.SetAccessors( + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeOffsetToBytesConverterProperty, 20), + DateTimeOffset (IInternalEntry entry) => entry.GetCurrentValue(dateTimeOffsetToBytesConverterProperty)); + dateTimeOffsetToBytesConverterProperty.SetPropertyIndexes( + index: 20, + originalValueIndex: 20, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeOffsetToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + keyComparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(12)", + size: 12), + converter: new ValueConverter( + byte[] (DateTimeOffset v) => DateTimeOffsetToBytesConverter.ToBytes(v), + DateTimeOffset (byte[] v) => DateTimeOffsetToBytesConverter.FromBytes(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (DateTimeOffset v) => DateTimeOffsetToBytesConverter.ToBytes(v), + DateTimeOffset (byte[] v) => DateTimeOffsetToBytesConverter.FromBytes(v)))); + dateTimeOffsetToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + + var dateTimeOffsetToStringConverterProperty = runtimeEntityType.AddProperty( + "DateTimeOffsetToStringConverterProperty", + typeof(DateTimeOffset), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeOffsetToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeOffsetToStringConverter()); + dateTimeOffsetToStringConverterProperty.SetGetter( + DateTimeOffset (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(instance).EqualsExact(default(DateTimeOffset))); + dateTimeOffsetToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTimeOffset value) => + { + ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(instance) = value; + return instance; + }); + dateTimeOffsetToStringConverterProperty.SetAccessors( + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeOffsetToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTimeOffset (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeOffsetToStringConverterProperty, 21), + DateTimeOffset (IInternalEntry entry) => entry.GetCurrentValue(dateTimeOffsetToStringConverterProperty)); + dateTimeOffsetToStringConverterProperty.SetPropertyIndexes( + index: 21, + originalValueIndex: 21, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeOffsetToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + keyComparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(48)", + size: 48), + converter: new ValueConverter( + string (DateTimeOffset v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFFzzz"), + DateTimeOffset (string v) => DateTimeOffset.Parse(v, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (DateTimeOffset v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFFzzz"), + DateTimeOffset (string v) => DateTimeOffset.Parse(v, CultureInfo.InvariantCulture)))); + dateTimeOffsetToStringConverterProperty.SetSentinelFromProviderValue("0001-01-01 00:00:00+00:00"); + + var dateTimeToBinaryConverterProperty = runtimeEntityType.AddProperty( + "DateTimeToBinaryConverterProperty", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeToBinaryConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeToBinaryConverter()); + dateTimeToBinaryConverterProperty.SetGetter( + DateTime (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(instance) == default(DateTime)); + dateTimeToBinaryConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(instance) = value; + return instance; + }); + dateTimeToBinaryConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(instance) = value; + return instance; + }); + dateTimeToBinaryConverterProperty.SetAccessors( + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToBinaryConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeToBinaryConverterProperty, 22), + DateTime (IInternalEntry entry) => entry.GetCurrentValue(dateTimeToBinaryConverterProperty)); + dateTimeToBinaryConverterProperty.SetPropertyIndexes( + index: 22, + originalValueIndex: 22, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeToBinaryConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (DateTime v) => v.ToBinary(), + DateTime (long v) => DateTime.FromBinary(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (DateTime v) => v.ToBinary(), + DateTime (long v) => DateTime.FromBinary(v)))); + dateTimeToBinaryConverterProperty.SetSentinelFromProviderValue(0L); + + var dateTimeToStringConverterProperty = runtimeEntityType.AddProperty( + "DateTimeToStringConverterProperty", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeToStringConverter()); + dateTimeToStringConverterProperty.SetGetter( + DateTime (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(instance) == default(DateTime)); + dateTimeToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(instance) = value; + return instance; + }); + dateTimeToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(instance) = value; + return instance; + }); + dateTimeToStringConverterProperty.SetAccessors( + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeToStringConverterProperty, 23), + DateTime (IInternalEntry entry) => entry.GetCurrentValue(dateTimeToStringConverterProperty)); + dateTimeToStringConverterProperty.SetPropertyIndexes( + index: 23, + originalValueIndex: 23, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(48)", + size: 48), + converter: new ValueConverter( + string (DateTime v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFF"), + DateTime (string v) => DateTime.Parse(v, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (DateTime v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFF"), + DateTime (string v) => DateTime.Parse(v, CultureInfo.InvariantCulture)))); + dateTimeToStringConverterProperty.SetSentinelFromProviderValue("0001-01-01 00:00:00"); + + var dateTimeToTicksConverterProperty = runtimeEntityType.AddProperty( + "DateTimeToTicksConverterProperty", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeToTicksConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + dateTimeToTicksConverterProperty.SetGetter( + DateTime (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(instance) == default(DateTime)); + dateTimeToTicksConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(instance) = value; + return instance; + }); + dateTimeToTicksConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime value) => + { + ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(instance) = value; + return instance; + }); + dateTimeToTicksConverterProperty.SetAccessors( + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => ManyTypesUnsafeAccessors.DateTimeToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime (IInternalEntry entry) => entry.ReadOriginalValue(dateTimeToTicksConverterProperty, 24), + DateTime (IInternalEntry entry) => entry.GetCurrentValue(dateTimeToTicksConverterProperty)); + dateTimeToTicksConverterProperty.SetPropertyIndexes( + index: 24, + originalValueIndex: 24, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + dateTimeToTicksConverterProperty.TypeMapping = JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)); + + var @decimal = runtimeEntityType.AddProperty( + "Decimal", + typeof(decimal), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Decimal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0m); + @decimal.SetGetter( + decimal (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Decimal(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Decimal(instance) == 0M); + @decimal.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.Decimal(instance) = value; + return instance; + }); + @decimal.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.Decimal(instance) = value; + return instance; + }); + @decimal.SetAccessors( + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.Decimal(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.Decimal(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => entry.ReadOriginalValue(@decimal, 25), + decimal (IInternalEntry entry) => entry.GetCurrentValue(@decimal)); + @decimal.SetPropertyIndexes( + index: 25, + originalValueIndex: 25, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @decimal.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v)); + + var decimalArray = runtimeEntityType.AddProperty( + "DecimalArray", + typeof(decimal[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DecimalArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + decimalArray.SetGetter( + decimal[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalArray(instance) == null); + decimalArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal[] value) => + { + ManyTypesUnsafeAccessors.DecimalArray(instance) = value; + return instance; + }); + decimalArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal[] value) => + { + ManyTypesUnsafeAccessors.DecimalArray(instance) = value; + return instance; + }); + decimalArray.SetAccessors( + decimal[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal[] (IInternalEntry entry) => entry.ReadOriginalValue(decimalArray, 26), + decimal[] (IInternalEntry entry) => entry.GetCurrentValue(decimalArray)); + decimalArray.SetPropertyIndexes( + index: 26, + originalValueIndex: 26, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + decimalArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDecimalReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDecimalReaderWriter.Instance), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v))); + var decimalArrayElementType = decimalArray.SetElementType(typeof(decimal)); + decimalArrayElementType.TypeMapping = decimalArray.TypeMapping.ElementTypeMapping; + + var decimalNumberToBytesConverterProperty = runtimeEntityType.AddProperty( + "DecimalNumberToBytesConverterProperty", + typeof(decimal), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DecimalNumberToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToBytesConverter()); + decimalNumberToBytesConverterProperty.SetGetter( + decimal (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(instance) == 0M); + decimalNumberToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(instance) = value; + return instance; + }); + decimalNumberToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(instance) = value; + return instance; + }); + decimalNumberToBytesConverterProperty.SetAccessors( + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => entry.ReadOriginalValue(decimalNumberToBytesConverterProperty, 27), + decimal (IInternalEntry entry) => entry.GetCurrentValue(decimalNumberToBytesConverterProperty)); + decimalNumberToBytesConverterProperty.SetPropertyIndexes( + index: 27, + originalValueIndex: 27, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + decimalNumberToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(16)", + size: 16), + converter: new ValueConverter( + byte[] (decimal v) => NumberToBytesConverter.DecimalToBytes(v), + decimal (byte[] v) => (v == null ? 0M : NumberToBytesConverter.BytesToDecimal(v))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (decimal v) => NumberToBytesConverter.DecimalToBytes(v), + decimal (byte[] v) => (v == null ? 0M : NumberToBytesConverter.BytesToDecimal(v))))); + decimalNumberToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + + var decimalNumberToStringConverterProperty = runtimeEntityType.AddProperty( + "DecimalNumberToStringConverterProperty", + typeof(decimal), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DecimalNumberToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToStringConverter()); + decimalNumberToStringConverterProperty.SetGetter( + decimal (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(instance) == 0M); + decimalNumberToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(instance) = value; + return instance; + }); + decimalNumberToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal value) => + { + ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(instance) = value; + return instance; + }); + decimalNumberToStringConverterProperty.SetAccessors( + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => ManyTypesUnsafeAccessors.DecimalNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal (IInternalEntry entry) => entry.ReadOriginalValue(decimalNumberToStringConverterProperty, 28), + decimal (IInternalEntry entry) => entry.GetCurrentValue(decimalNumberToStringConverterProperty)); + decimalNumberToStringConverterProperty.SetPropertyIndexes( + index: 28, + originalValueIndex: 28, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + decimalNumberToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(64)", + size: 64), + converter: new ValueConverter( + string (decimal v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + decimal (string v) => decimal.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (decimal v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + decimal (string v) => decimal.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)))); + decimalNumberToStringConverterProperty.SetSentinelFromProviderValue("0"); + + var @double = runtimeEntityType.AddProperty( + "Double", + typeof(double), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Double", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0.0); + @double.SetGetter( + double (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Double(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Double(instance).Equals(0D)); + @double.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.Double(instance) = value; + return instance; + }); + @double.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.Double(instance) = value; + return instance; + }); + @double.SetAccessors( + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.Double(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.Double(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => entry.ReadOriginalValue(@double, 29), + double (IInternalEntry entry) => entry.GetCurrentValue(@double)); + @double.SetPropertyIndexes( + index: 29, + originalValueIndex: 29, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @double.TypeMapping = JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v)); + + var doubleArray = runtimeEntityType.AddProperty( + "DoubleArray", + typeof(double[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DoubleArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + doubleArray.SetGetter( + double[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleArray(instance) == null); + doubleArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double[] value) => + { + ManyTypesUnsafeAccessors.DoubleArray(instance) = value; + return instance; + }); + doubleArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double[] value) => + { + ManyTypesUnsafeAccessors.DoubleArray(instance) = value; + return instance; + }); + doubleArray.SetAccessors( + double[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double[] (IInternalEntry entry) => entry.ReadOriginalValue(doubleArray, 30), + double[] (IInternalEntry entry) => entry.GetCurrentValue(doubleArray)); + doubleArray.SetPropertyIndexes( + index: 30, + originalValueIndex: 30, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + doubleArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDoubleReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDoubleReaderWriter.Instance), + elementMapping: JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v))); + var doubleArrayElementType = doubleArray.SetElementType(typeof(double)); + doubleArrayElementType.TypeMapping = doubleArray.TypeMapping.ElementTypeMapping; + + var doubleNumberToBytesConverterProperty = runtimeEntityType.AddProperty( + "DoubleNumberToBytesConverterProperty", + typeof(double), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DoubleNumberToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToBytesConverter()); + doubleNumberToBytesConverterProperty.SetGetter( + double (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(instance).Equals(0D)); + doubleNumberToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(instance) = value; + return instance; + }); + doubleNumberToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(instance) = value; + return instance; + }); + doubleNumberToBytesConverterProperty.SetAccessors( + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => entry.ReadOriginalValue(doubleNumberToBytesConverterProperty, 31), + double (IInternalEntry entry) => entry.GetCurrentValue(doubleNumberToBytesConverterProperty)); + doubleNumberToBytesConverterProperty.SetPropertyIndexes( + index: 31, + originalValueIndex: 31, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + doubleNumberToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(8)", + size: 8), + converter: new ValueConverter( + byte[] (double v) => NumberToBytesConverter.ReverseLong(BitConverter.GetBytes(v)), + double (byte[] v) => (v == null ? 0D : BitConverter.ToDouble(NumberToBytesConverter.ReverseLong(v), 0))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (double v) => NumberToBytesConverter.ReverseLong(BitConverter.GetBytes(v)), + double (byte[] v) => (v == null ? 0D : BitConverter.ToDouble(NumberToBytesConverter.ReverseLong(v), 0))))); + doubleNumberToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }); + + var doubleNumberToStringConverterProperty = runtimeEntityType.AddProperty( + "DoubleNumberToStringConverterProperty", + typeof(double), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DoubleNumberToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToStringConverter()); + doubleNumberToStringConverterProperty.SetGetter( + double (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(instance).Equals(0D)); + doubleNumberToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(instance) = value; + return instance; + }); + doubleNumberToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double value) => + { + ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(instance) = value; + return instance; + }); + doubleNumberToStringConverterProperty.SetAccessors( + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => ManyTypesUnsafeAccessors.DoubleNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double (IInternalEntry entry) => entry.ReadOriginalValue(doubleNumberToStringConverterProperty, 32), + double (IInternalEntry entry) => entry.GetCurrentValue(doubleNumberToStringConverterProperty)); + doubleNumberToStringConverterProperty.SetPropertyIndexes( + index: 32, + originalValueIndex: 32, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + doubleNumberToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(64)", + size: 64), + converter: new ValueConverter( + string (double v) => string.Format(CultureInfo.InvariantCulture, "{0:R}", ((object)v)), + double (string v) => double.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (double v) => string.Format(CultureInfo.InvariantCulture, "{0:R}", ((object)v)), + double (string v) => double.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)))); + doubleNumberToStringConverterProperty.SetSentinelFromProviderValue("0"); + + var enum16 = runtimeEntityType.AddProperty( + "Enum16", + typeof(CompiledModelTestBase.Enum16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16.SetGetter( + CompiledModelTestBase.Enum16 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum16(instance))), ((object)(CompiledModelTestBase.Enum16.Default)))); + enum16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16 value) => + { + ManyTypesUnsafeAccessors.Enum16(instance) = value; + return instance; + }); + enum16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16 value) => + { + ManyTypesUnsafeAccessors.Enum16(instance) = value; + return instance; + }); + enum16.SetAccessors( + CompiledModelTestBase.Enum16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => entry.ReadOriginalValue(enum16, 33), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => entry.GetCurrentValue(enum16)); + enum16.SetPropertyIndexes( + index: 33, + originalValueIndex: 33, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))); + enum16.SetSentinelFromProviderValue((short)0); + + var enum16Array = runtimeEntityType.AddProperty( + "Enum16Array", + typeof(CompiledModelTestBase.Enum16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16Array.SetGetter( + CompiledModelTestBase.Enum16[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16Array(instance) == null); + enum16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16[] value) => + { + ManyTypesUnsafeAccessors.Enum16Array(instance) = value; + return instance; + }); + enum16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16[] value) => + { + ManyTypesUnsafeAccessors.Enum16Array(instance) = value; + return instance; + }); + enum16Array.SetAccessors( + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => entry.ReadOriginalValue(enum16Array, 34), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => entry.GetCurrentValue(enum16Array)); + enum16Array.SetPropertyIndexes( + index: 34, + originalValueIndex: 34, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var enum16ArrayElementType = enum16Array.SetElementType(typeof(CompiledModelTestBase.Enum16)); + enum16ArrayElementType.TypeMapping = enum16Array.TypeMapping.ElementTypeMapping; + + var enum16AsString = runtimeEntityType.AddProperty( + "Enum16AsString", + typeof(CompiledModelTestBase.Enum16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum16AsString.SetGetter( + CompiledModelTestBase.Enum16 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum16AsString(instance))), ((object)(CompiledModelTestBase.Enum16.Default)))); + enum16AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16 value) => + { + ManyTypesUnsafeAccessors.Enum16AsString(instance) = value; + return instance; + }); + enum16AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16 value) => + { + ManyTypesUnsafeAccessors.Enum16AsString(instance) = value; + return instance; + }); + enum16AsString.SetAccessors( + CompiledModelTestBase.Enum16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => entry.ReadOriginalValue(enum16AsString, 35), + CompiledModelTestBase.Enum16 (IInternalEntry entry) => entry.GetCurrentValue(enum16AsString)); + enum16AsString.SetPropertyIndexes( + index: 35, + originalValueIndex: 35, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enum16AsString.SetSentinelFromProviderValue("Default"); + + var enum16AsStringArray = runtimeEntityType.AddProperty( + "Enum16AsStringArray", + typeof(CompiledModelTestBase.Enum16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16AsStringArray.SetGetter( + CompiledModelTestBase.Enum16[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsStringArray(instance) == null); + enum16AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16[] value) => + { + ManyTypesUnsafeAccessors.Enum16AsStringArray(instance) = value; + return instance; + }); + enum16AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16[] value) => + { + ManyTypesUnsafeAccessors.Enum16AsStringArray(instance) = value; + return instance; + }); + enum16AsStringArray.SetAccessors( + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => entry.ReadOriginalValue(enum16AsStringArray, 36), + CompiledModelTestBase.Enum16[] (IInternalEntry entry) => entry.GetCurrentValue(enum16AsStringArray)); + enum16AsStringArray.SetPropertyIndexes( + index: 36, + originalValueIndex: 36, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum16AsStringArrayElementType = enum16AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum16), + providerClrType: typeof(string)); + enum16AsStringArrayElementType.TypeMapping = enum16AsStringArray.TypeMapping.ElementTypeMapping; + + var enum16AsStringCollection = runtimeEntityType.AddProperty( + "Enum16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16AsStringCollection(instance) == null); + enum16AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum16AsStringCollection(instance) = value; + return instance; + }); + enum16AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum16AsStringCollection(instance) = value; + return instance; + }); + enum16AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum16AsStringCollection, 37), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum16AsStringCollection)); + enum16AsStringCollection.SetPropertyIndexes( + index: 37, + originalValueIndex: 37, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum16>(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum16>(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum16 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum16 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum16AsStringCollectionElementType = enum16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum16), + providerClrType: typeof(string)); + enum16AsStringCollectionElementType.TypeMapping = enum16AsStringCollection.TypeMapping.ElementTypeMapping; + + var enum16Collection = runtimeEntityType.AddProperty( + "Enum16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum16Collection(instance) == null); + enum16Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum16Collection(instance) = value; + return instance; + }); + enum16Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum16Collection(instance) = value; + return instance; + }); + enum16Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum16Collection, 38), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum16Collection)); + enum16Collection.SetPropertyIndexes( + index: 38, + originalValueIndex: 38, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum16Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum16>(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum16>(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var enum16CollectionElementType = enum16Collection.SetElementType(typeof(CompiledModelTestBase.Enum16)); + enum16CollectionElementType.TypeMapping = enum16Collection.TypeMapping.ElementTypeMapping; + + var enum32 = runtimeEntityType.AddProperty( + "Enum32", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32.SetGetter( + CompiledModelTestBase.Enum32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum32(instance))), ((object)(CompiledModelTestBase.Enum32.Default)))); + enum32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.Enum32(instance) = value; + return instance; + }); + enum32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.Enum32(instance) = value; + return instance; + }); + enum32.SetAccessors( + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.ReadOriginalValue(enum32, 39), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.GetCurrentValue(enum32)); + enum32.SetPropertyIndexes( + index: 39, + originalValueIndex: 39, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))); + enum32.SetSentinelFromProviderValue(0); + + var enum32Array = runtimeEntityType.AddProperty( + "Enum32Array", + typeof(CompiledModelTestBase.Enum32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32Array.SetGetter( + CompiledModelTestBase.Enum32[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32Array(instance) == null); + enum32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32[] value) => + { + ManyTypesUnsafeAccessors.Enum32Array(instance) = value; + return instance; + }); + enum32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32[] value) => + { + ManyTypesUnsafeAccessors.Enum32Array(instance) = value; + return instance; + }); + enum32Array.SetAccessors( + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => entry.ReadOriginalValue(enum32Array, 40), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => entry.GetCurrentValue(enum32Array)); + enum32Array.SetPropertyIndexes( + index: 40, + originalValueIndex: 40, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var enum32ArrayElementType = enum32Array.SetElementType(typeof(CompiledModelTestBase.Enum32)); + enum32ArrayElementType.TypeMapping = enum32Array.TypeMapping.ElementTypeMapping; + + var enum32AsString = runtimeEntityType.AddProperty( + "Enum32AsString", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum32AsString.SetGetter( + CompiledModelTestBase.Enum32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum32AsString(instance))), ((object)(CompiledModelTestBase.Enum32.Default)))); + enum32AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.Enum32AsString(instance) = value; + return instance; + }); + enum32AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.Enum32AsString(instance) = value; + return instance; + }); + enum32AsString.SetAccessors( + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.ReadOriginalValue(enum32AsString, 41), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.GetCurrentValue(enum32AsString)); + enum32AsString.SetPropertyIndexes( + index: 41, + originalValueIndex: 41, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enum32AsString.SetSentinelFromProviderValue("Default"); + + var enum32AsStringArray = runtimeEntityType.AddProperty( + "Enum32AsStringArray", + typeof(CompiledModelTestBase.Enum32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32AsStringArray.SetGetter( + CompiledModelTestBase.Enum32[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsStringArray(instance) == null); + enum32AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32[] value) => + { + ManyTypesUnsafeAccessors.Enum32AsStringArray(instance) = value; + return instance; + }); + enum32AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32[] value) => + { + ManyTypesUnsafeAccessors.Enum32AsStringArray(instance) = value; + return instance; + }); + enum32AsStringArray.SetAccessors( + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => entry.ReadOriginalValue(enum32AsStringArray, 42), + CompiledModelTestBase.Enum32[] (IInternalEntry entry) => entry.GetCurrentValue(enum32AsStringArray)); + enum32AsStringArray.SetPropertyIndexes( + index: 42, + originalValueIndex: 42, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum32AsStringArrayElementType = enum32AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum32), + providerClrType: typeof(string)); + enum32AsStringArrayElementType.TypeMapping = enum32AsStringArray.TypeMapping.ElementTypeMapping; + + var enum32AsStringCollection = runtimeEntityType.AddProperty( + "Enum32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32AsStringCollection(instance) == null); + enum32AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum32AsStringCollection(instance) = value; + return instance; + }); + enum32AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum32AsStringCollection(instance) = value; + return instance; + }); + enum32AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum32AsStringCollection, 43), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum32AsStringCollection)); + enum32AsStringCollection.SetPropertyIndexes( + index: 43, + originalValueIndex: 43, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum32>(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum32>(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum32AsStringCollectionElementType = enum32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum32), + providerClrType: typeof(string)); + enum32AsStringCollectionElementType.TypeMapping = enum32AsStringCollection.TypeMapping.ElementTypeMapping; + + var enum32Collection = runtimeEntityType.AddProperty( + "Enum32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum32Collection(instance) == null); + enum32Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum32Collection(instance) = value; + return instance; + }); + enum32Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum32Collection(instance) = value; + return instance; + }); + enum32Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum32Collection, 44), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum32Collection)); + enum32Collection.SetPropertyIndexes( + index: 44, + originalValueIndex: 44, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum32Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum32>(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum32>(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var enum32CollectionElementType = enum32Collection.SetElementType(typeof(CompiledModelTestBase.Enum32)); + enum32CollectionElementType.TypeMapping = enum32Collection.TypeMapping.ElementTypeMapping; + + var enum64 = runtimeEntityType.AddProperty( + "Enum64", + typeof(CompiledModelTestBase.Enum64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64.SetGetter( + CompiledModelTestBase.Enum64 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum64(instance))), ((object)(CompiledModelTestBase.Enum64.Default)))); + enum64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64 value) => + { + ManyTypesUnsafeAccessors.Enum64(instance) = value; + return instance; + }); + enum64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64 value) => + { + ManyTypesUnsafeAccessors.Enum64(instance) = value; + return instance; + }); + enum64.SetAccessors( + CompiledModelTestBase.Enum64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => entry.ReadOriginalValue(enum64, 45), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => entry.GetCurrentValue(enum64)); + enum64.SetPropertyIndexes( + index: 45, + originalValueIndex: 45, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))); + enum64.SetSentinelFromProviderValue(0L); + + var enum64Array = runtimeEntityType.AddProperty( + "Enum64Array", + typeof(CompiledModelTestBase.Enum64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64Array.SetGetter( + CompiledModelTestBase.Enum64[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64Array(instance) == null); + enum64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64[] value) => + { + ManyTypesUnsafeAccessors.Enum64Array(instance) = value; + return instance; + }); + enum64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64[] value) => + { + ManyTypesUnsafeAccessors.Enum64Array(instance) = value; + return instance; + }); + enum64Array.SetAccessors( + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => entry.ReadOriginalValue(enum64Array, 46), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => entry.GetCurrentValue(enum64Array)); + enum64Array.SetPropertyIndexes( + index: 46, + originalValueIndex: 46, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var enum64ArrayElementType = enum64Array.SetElementType(typeof(CompiledModelTestBase.Enum64)); + enum64ArrayElementType.TypeMapping = enum64Array.TypeMapping.ElementTypeMapping; + + var enum64AsString = runtimeEntityType.AddProperty( + "Enum64AsString", + typeof(CompiledModelTestBase.Enum64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum64AsString.SetGetter( + CompiledModelTestBase.Enum64 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum64AsString(instance))), ((object)(CompiledModelTestBase.Enum64.Default)))); + enum64AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64 value) => + { + ManyTypesUnsafeAccessors.Enum64AsString(instance) = value; + return instance; + }); + enum64AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64 value) => + { + ManyTypesUnsafeAccessors.Enum64AsString(instance) = value; + return instance; + }); + enum64AsString.SetAccessors( + CompiledModelTestBase.Enum64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => entry.ReadOriginalValue(enum64AsString, 47), + CompiledModelTestBase.Enum64 (IInternalEntry entry) => entry.GetCurrentValue(enum64AsString)); + enum64AsString.SetPropertyIndexes( + index: 47, + originalValueIndex: 47, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enum64AsString.SetSentinelFromProviderValue("Default"); + + var enum64AsStringArray = runtimeEntityType.AddProperty( + "Enum64AsStringArray", + typeof(CompiledModelTestBase.Enum64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64AsStringArray.SetGetter( + CompiledModelTestBase.Enum64[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsStringArray(instance) == null); + enum64AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64[] value) => + { + ManyTypesUnsafeAccessors.Enum64AsStringArray(instance) = value; + return instance; + }); + enum64AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64[] value) => + { + ManyTypesUnsafeAccessors.Enum64AsStringArray(instance) = value; + return instance; + }); + enum64AsStringArray.SetAccessors( + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => entry.ReadOriginalValue(enum64AsStringArray, 48), + CompiledModelTestBase.Enum64[] (IInternalEntry entry) => entry.GetCurrentValue(enum64AsStringArray)); + enum64AsStringArray.SetPropertyIndexes( + index: 48, + originalValueIndex: 48, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum64AsStringArrayElementType = enum64AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum64), + providerClrType: typeof(string)); + enum64AsStringArrayElementType.TypeMapping = enum64AsStringArray.TypeMapping.ElementTypeMapping; + + var enum64AsStringCollection = runtimeEntityType.AddProperty( + "Enum64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64AsStringCollection(instance) == null); + enum64AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum64AsStringCollection(instance) = value; + return instance; + }); + enum64AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum64AsStringCollection(instance) = value; + return instance; + }); + enum64AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum64AsStringCollection, 49), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum64AsStringCollection)); + enum64AsStringCollection.SetPropertyIndexes( + index: 49, + originalValueIndex: 49, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum64>(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum64>(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum64 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum64 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum64AsStringCollectionElementType = enum64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum64), + providerClrType: typeof(string)); + enum64AsStringCollectionElementType.TypeMapping = enum64AsStringCollection.TypeMapping.ElementTypeMapping; + + var enum64Collection = runtimeEntityType.AddProperty( + "Enum64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum64Collection(instance) == null); + enum64Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum64Collection(instance) = value; + return instance; + }); + enum64Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum64Collection(instance) = value; + return instance; + }); + enum64Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum64Collection, 50), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum64Collection)); + enum64Collection.SetPropertyIndexes( + index: 50, + originalValueIndex: 50, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum64Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum64>(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum64>(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var enum64CollectionElementType = enum64Collection.SetElementType(typeof(CompiledModelTestBase.Enum64)); + enum64CollectionElementType.TypeMapping = enum64Collection.TypeMapping.ElementTypeMapping; + + var enum8 = runtimeEntityType.AddProperty( + "Enum8", + typeof(CompiledModelTestBase.Enum8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8.SetGetter( + CompiledModelTestBase.Enum8 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum8(instance))), ((object)(CompiledModelTestBase.Enum8.Default)))); + enum8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8 value) => + { + ManyTypesUnsafeAccessors.Enum8(instance) = value; + return instance; + }); + enum8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8 value) => + { + ManyTypesUnsafeAccessors.Enum8(instance) = value; + return instance; + }); + enum8.SetAccessors( + CompiledModelTestBase.Enum8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => entry.ReadOriginalValue(enum8, 51), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => entry.GetCurrentValue(enum8)); + enum8.SetPropertyIndexes( + index: 51, + originalValueIndex: 51, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))); + enum8.SetSentinelFromProviderValue((short)0); + + var enum8Array = runtimeEntityType.AddProperty( + "Enum8Array", + typeof(CompiledModelTestBase.Enum8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8Array.SetGetter( + CompiledModelTestBase.Enum8[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8Array(instance) == null); + enum8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8[] value) => + { + ManyTypesUnsafeAccessors.Enum8Array(instance) = value; + return instance; + }); + enum8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8[] value) => + { + ManyTypesUnsafeAccessors.Enum8Array(instance) = value; + return instance; + }); + enum8Array.SetAccessors( + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => entry.ReadOriginalValue(enum8Array, 52), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => entry.GetCurrentValue(enum8Array)); + enum8Array.SetPropertyIndexes( + index: 52, + originalValueIndex: 52, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var enum8ArrayElementType = enum8Array.SetElementType(typeof(CompiledModelTestBase.Enum8)); + enum8ArrayElementType.TypeMapping = enum8Array.TypeMapping.ElementTypeMapping; + + var enum8AsString = runtimeEntityType.AddProperty( + "Enum8AsString", + typeof(CompiledModelTestBase.Enum8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum8AsString.SetGetter( + CompiledModelTestBase.Enum8 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.Enum8AsString(instance))), ((object)(CompiledModelTestBase.Enum8.Default)))); + enum8AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8 value) => + { + ManyTypesUnsafeAccessors.Enum8AsString(instance) = value; + return instance; + }); + enum8AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8 value) => + { + ManyTypesUnsafeAccessors.Enum8AsString(instance) = value; + return instance; + }); + enum8AsString.SetAccessors( + CompiledModelTestBase.Enum8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => entry.ReadOriginalValue(enum8AsString, 53), + CompiledModelTestBase.Enum8 (IInternalEntry entry) => entry.GetCurrentValue(enum8AsString)); + enum8AsString.SetPropertyIndexes( + index: 53, + originalValueIndex: 53, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enum8AsString.SetSentinelFromProviderValue("Default"); + + var enum8AsStringArray = runtimeEntityType.AddProperty( + "Enum8AsStringArray", + typeof(CompiledModelTestBase.Enum8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8AsStringArray.SetGetter( + CompiledModelTestBase.Enum8[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsStringArray(instance) == null); + enum8AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8[] value) => + { + ManyTypesUnsafeAccessors.Enum8AsStringArray(instance) = value; + return instance; + }); + enum8AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8[] value) => + { + ManyTypesUnsafeAccessors.Enum8AsStringArray(instance) = value; + return instance; + }); + enum8AsStringArray.SetAccessors( + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => entry.ReadOriginalValue(enum8AsStringArray, 54), + CompiledModelTestBase.Enum8[] (IInternalEntry entry) => entry.GetCurrentValue(enum8AsStringArray)); + enum8AsStringArray.SetPropertyIndexes( + index: 54, + originalValueIndex: 54, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum8AsStringArrayElementType = enum8AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum8), + providerClrType: typeof(string)); + enum8AsStringArrayElementType.TypeMapping = enum8AsStringArray.TypeMapping.ElementTypeMapping; + + var enum8AsStringCollection = runtimeEntityType.AddProperty( + "Enum8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8AsStringCollection(instance) == null); + enum8AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum8AsStringCollection(instance) = value; + return instance; + }); + enum8AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum8AsStringCollection(instance) = value; + return instance; + }); + enum8AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum8AsStringCollection, 55), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum8AsStringCollection)); + enum8AsStringCollection.SetPropertyIndexes( + index: 55, + originalValueIndex: 55, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum8>(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum8>(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum8 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum8 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enum8AsStringCollectionElementType = enum8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum8), + providerClrType: typeof(string)); + enum8AsStringCollectionElementType.TypeMapping = enum8AsStringCollection.TypeMapping.ElementTypeMapping; + + var enum8Collection = runtimeEntityType.AddProperty( + "Enum8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Enum8Collection(instance) == null); + enum8Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum8Collection(instance) = value; + return instance; + }); + enum8Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.Enum8Collection(instance) = value; + return instance; + }); + enum8Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.Enum8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enum8Collection, 56), + List (IInternalEntry entry) => entry.GetCurrentValue>(enum8Collection)); + enum8Collection.SetPropertyIndexes( + index: 56, + originalValueIndex: 56, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum8Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum8>(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.Enum8>(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var enum8CollectionElementType = enum8Collection.SetElementType(typeof(CompiledModelTestBase.Enum8)); + enum8CollectionElementType.TypeMapping = enum8Collection.TypeMapping.ElementTypeMapping; + + var enumToNumberConverterProperty = runtimeEntityType.AddProperty( + "EnumToNumberConverterProperty", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumToNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new EnumToNumberConverter()); + enumToNumberConverterProperty.SetGetter( + CompiledModelTestBase.Enum32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(instance))), ((object)(CompiledModelTestBase.Enum32.Default)))); + enumToNumberConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(instance) = value; + return instance; + }); + enumToNumberConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(instance) = value; + return instance; + }); + enumToNumberConverterProperty.SetAccessors( + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumToNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.ReadOriginalValue(enumToNumberConverterProperty, 57), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.GetCurrentValue(enumToNumberConverterProperty)); + enumToNumberConverterProperty.SetPropertyIndexes( + index: 57, + originalValueIndex: 57, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumToNumberConverterProperty.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))); + enumToNumberConverterProperty.SetSentinelFromProviderValue(0); + + var enumToStringConverterProperty = runtimeEntityType.AddProperty( + "EnumToStringConverterProperty", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new EnumToStringConverter()); + enumToStringConverterProperty.SetGetter( + CompiledModelTestBase.Enum32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumToStringConverterProperty(instance))), ((object)(CompiledModelTestBase.Enum32.Default)))); + enumToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.EnumToStringConverterProperty(instance) = value; + return instance; + }); + enumToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32 value) => + { + ManyTypesUnsafeAccessors.EnumToStringConverterProperty(instance) = value; + return instance; + }); + enumToStringConverterProperty.SetAccessors( + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.ReadOriginalValue(enumToStringConverterProperty, 58), + CompiledModelTestBase.Enum32 (IInternalEntry entry) => entry.GetCurrentValue(enumToStringConverterProperty)); + enumToStringConverterProperty.SetPropertyIndexes( + index: 58, + originalValueIndex: 58, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.Enum32 v) => ((object)v).ToString(), + CompiledModelTestBase.Enum32 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumToStringConverterProperty.SetSentinelFromProviderValue("Default"); + + var enumU16 = runtimeEntityType.AddProperty( + "EnumU16", + typeof(CompiledModelTestBase.EnumU16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16.SetGetter( + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU16(instance))), ((object)(CompiledModelTestBase.EnumU16.Min)))); + enumU16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16 value) => + { + ManyTypesUnsafeAccessors.EnumU16(instance) = value; + return instance; + }); + enumU16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16 value) => + { + ManyTypesUnsafeAccessors.EnumU16(instance) = value; + return instance; + }); + enumU16.SetAccessors( + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => entry.ReadOriginalValue(enumU16, 59), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => entry.GetCurrentValue(enumU16)); + enumU16.SetPropertyIndexes( + index: 59, + originalValueIndex: 59, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))); + enumU16.SetSentinelFromProviderValue(0); + + var enumU16Array = runtimeEntityType.AddProperty( + "EnumU16Array", + typeof(CompiledModelTestBase.EnumU16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16Array.SetGetter( + CompiledModelTestBase.EnumU16[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16Array(instance) == null); + enumU16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16[] value) => + { + ManyTypesUnsafeAccessors.EnumU16Array(instance) = value; + return instance; + }); + enumU16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16[] value) => + { + ManyTypesUnsafeAccessors.EnumU16Array(instance) = value; + return instance; + }); + enumU16Array.SetAccessors( + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU16Array, 60), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => entry.GetCurrentValue(enumU16Array)); + enumU16Array.SetPropertyIndexes( + index: 60, + originalValueIndex: 60, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var enumU16ArrayElementType = enumU16Array.SetElementType(typeof(CompiledModelTestBase.EnumU16)); + enumU16ArrayElementType.TypeMapping = enumU16Array.TypeMapping.ElementTypeMapping; + + var enumU16AsString = runtimeEntityType.AddProperty( + "EnumU16AsString", + typeof(CompiledModelTestBase.EnumU16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU16AsString.SetGetter( + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU16AsString(instance))), ((object)(CompiledModelTestBase.EnumU16.Min)))); + enumU16AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16 value) => + { + ManyTypesUnsafeAccessors.EnumU16AsString(instance) = value; + return instance; + }); + enumU16AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16 value) => + { + ManyTypesUnsafeAccessors.EnumU16AsString(instance) = value; + return instance; + }); + enumU16AsString.SetAccessors( + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => entry.ReadOriginalValue(enumU16AsString, 61), + CompiledModelTestBase.EnumU16 (IInternalEntry entry) => entry.GetCurrentValue(enumU16AsString)); + enumU16AsString.SetPropertyIndexes( + index: 61, + originalValueIndex: 61, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumU16AsString.SetSentinelFromProviderValue("Min"); + + var enumU16AsStringArray = runtimeEntityType.AddProperty( + "EnumU16AsStringArray", + typeof(CompiledModelTestBase.EnumU16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16AsStringArray.SetGetter( + CompiledModelTestBase.EnumU16[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsStringArray(instance) == null); + enumU16AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16[] value) => + { + ManyTypesUnsafeAccessors.EnumU16AsStringArray(instance) = value; + return instance; + }); + enumU16AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16[] value) => + { + ManyTypesUnsafeAccessors.EnumU16AsStringArray(instance) = value; + return instance; + }); + enumU16AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU16AsStringArray, 62), + CompiledModelTestBase.EnumU16[] (IInternalEntry entry) => entry.GetCurrentValue(enumU16AsStringArray)); + enumU16AsStringArray.SetPropertyIndexes( + index: 62, + originalValueIndex: 62, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU16AsStringArrayElementType = enumU16AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU16), + providerClrType: typeof(string)); + enumU16AsStringArrayElementType.TypeMapping = enumU16AsStringArray.TypeMapping.ElementTypeMapping; + + var enumU16AsStringCollection = runtimeEntityType.AddProperty( + "EnumU16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16AsStringCollection(instance) == null); + enumU16AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU16AsStringCollection(instance) = value; + return instance; + }); + enumU16AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU16AsStringCollection(instance) = value; + return instance; + }); + enumU16AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU16AsStringCollection, 63), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU16AsStringCollection)); + enumU16AsStringCollection.SetPropertyIndexes( + index: 63, + originalValueIndex: 63, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU16>(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU16>(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU16 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU16 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU16AsStringCollectionElementType = enumU16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU16), + providerClrType: typeof(string)); + enumU16AsStringCollectionElementType.TypeMapping = enumU16AsStringCollection.TypeMapping.ElementTypeMapping; + + var enumU16Collection = runtimeEntityType.AddProperty( + "EnumU16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU16Collection(instance) == null); + enumU16Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU16Collection(instance) = value; + return instance; + }); + enumU16Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU16Collection(instance) = value; + return instance; + }); + enumU16Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU16Collection, 64), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU16Collection)); + enumU16Collection.SetPropertyIndexes( + index: 64, + originalValueIndex: 64, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU16Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU16>(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU16>(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var enumU16CollectionElementType = enumU16Collection.SetElementType(typeof(CompiledModelTestBase.EnumU16)); + enumU16CollectionElementType.TypeMapping = enumU16Collection.TypeMapping.ElementTypeMapping; + + var enumU32 = runtimeEntityType.AddProperty( + "EnumU32", + typeof(CompiledModelTestBase.EnumU32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32.SetGetter( + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU32(instance))), ((object)(CompiledModelTestBase.EnumU32.Min)))); + enumU32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32 value) => + { + ManyTypesUnsafeAccessors.EnumU32(instance) = value; + return instance; + }); + enumU32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32 value) => + { + ManyTypesUnsafeAccessors.EnumU32(instance) = value; + return instance; + }); + enumU32.SetAccessors( + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => entry.ReadOriginalValue(enumU32, 65), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => entry.GetCurrentValue(enumU32)); + enumU32.SetPropertyIndexes( + index: 65, + originalValueIndex: 65, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))); + enumU32.SetSentinelFromProviderValue(0L); + + var enumU32Array = runtimeEntityType.AddProperty( + "EnumU32Array", + typeof(CompiledModelTestBase.EnumU32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32Array.SetGetter( + CompiledModelTestBase.EnumU32[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32Array(instance) == null); + enumU32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32[] value) => + { + ManyTypesUnsafeAccessors.EnumU32Array(instance) = value; + return instance; + }); + enumU32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32[] value) => + { + ManyTypesUnsafeAccessors.EnumU32Array(instance) = value; + return instance; + }); + enumU32Array.SetAccessors( + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU32Array, 66), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => entry.GetCurrentValue(enumU32Array)); + enumU32Array.SetPropertyIndexes( + index: 66, + originalValueIndex: 66, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var enumU32ArrayElementType = enumU32Array.SetElementType(typeof(CompiledModelTestBase.EnumU32)); + enumU32ArrayElementType.TypeMapping = enumU32Array.TypeMapping.ElementTypeMapping; + + var enumU32AsString = runtimeEntityType.AddProperty( + "EnumU32AsString", + typeof(CompiledModelTestBase.EnumU32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU32AsString.SetGetter( + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU32AsString(instance))), ((object)(CompiledModelTestBase.EnumU32.Min)))); + enumU32AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32 value) => + { + ManyTypesUnsafeAccessors.EnumU32AsString(instance) = value; + return instance; + }); + enumU32AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32 value) => + { + ManyTypesUnsafeAccessors.EnumU32AsString(instance) = value; + return instance; + }); + enumU32AsString.SetAccessors( + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => entry.ReadOriginalValue(enumU32AsString, 67), + CompiledModelTestBase.EnumU32 (IInternalEntry entry) => entry.GetCurrentValue(enumU32AsString)); + enumU32AsString.SetPropertyIndexes( + index: 67, + originalValueIndex: 67, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumU32AsString.SetSentinelFromProviderValue("Min"); + + var enumU32AsStringArray = runtimeEntityType.AddProperty( + "EnumU32AsStringArray", + typeof(CompiledModelTestBase.EnumU32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32AsStringArray.SetGetter( + CompiledModelTestBase.EnumU32[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsStringArray(instance) == null); + enumU32AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32[] value) => + { + ManyTypesUnsafeAccessors.EnumU32AsStringArray(instance) = value; + return instance; + }); + enumU32AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32[] value) => + { + ManyTypesUnsafeAccessors.EnumU32AsStringArray(instance) = value; + return instance; + }); + enumU32AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU32AsStringArray, 68), + CompiledModelTestBase.EnumU32[] (IInternalEntry entry) => entry.GetCurrentValue(enumU32AsStringArray)); + enumU32AsStringArray.SetPropertyIndexes( + index: 68, + originalValueIndex: 68, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU32AsStringArrayElementType = enumU32AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU32), + providerClrType: typeof(string)); + enumU32AsStringArrayElementType.TypeMapping = enumU32AsStringArray.TypeMapping.ElementTypeMapping; + + var enumU32AsStringCollection = runtimeEntityType.AddProperty( + "EnumU32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32AsStringCollection(instance) == null); + enumU32AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU32AsStringCollection(instance) = value; + return instance; + }); + enumU32AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU32AsStringCollection(instance) = value; + return instance; + }); + enumU32AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU32AsStringCollection, 69), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU32AsStringCollection)); + enumU32AsStringCollection.SetPropertyIndexes( + index: 69, + originalValueIndex: 69, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU32>(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU32>(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU32 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU32 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU32AsStringCollectionElementType = enumU32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU32), + providerClrType: typeof(string)); + enumU32AsStringCollectionElementType.TypeMapping = enumU32AsStringCollection.TypeMapping.ElementTypeMapping; + + var enumU32Collection = runtimeEntityType.AddProperty( + "EnumU32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU32Collection(instance) == null); + enumU32Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU32Collection(instance) = value; + return instance; + }); + enumU32Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU32Collection(instance) = value; + return instance; + }); + enumU32Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU32Collection, 70), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU32Collection)); + enumU32Collection.SetPropertyIndexes( + index: 70, + originalValueIndex: 70, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU32Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU32>(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU32>(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var enumU32CollectionElementType = enumU32Collection.SetElementType(typeof(CompiledModelTestBase.EnumU32)); + enumU32CollectionElementType.TypeMapping = enumU32Collection.TypeMapping.ElementTypeMapping; + + var enumU64 = runtimeEntityType.AddProperty( + "EnumU64", + typeof(CompiledModelTestBase.EnumU64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64.SetGetter( + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU64(instance))), ((object)(CompiledModelTestBase.EnumU64.Min)))); + enumU64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64 value) => + { + ManyTypesUnsafeAccessors.EnumU64(instance) = value; + return instance; + }); + enumU64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64 value) => + { + ManyTypesUnsafeAccessors.EnumU64(instance) = value; + return instance; + }); + enumU64.SetAccessors( + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => entry.ReadOriginalValue(enumU64, 71), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => entry.GetCurrentValue(enumU64)); + enumU64.SetPropertyIndexes( + index: 71, + originalValueIndex: 71, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))); + enumU64.SetSentinelFromProviderValue(0m); + + var enumU64Array = runtimeEntityType.AddProperty( + "EnumU64Array", + typeof(CompiledModelTestBase.EnumU64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64Array.SetGetter( + CompiledModelTestBase.EnumU64[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64Array(instance) == null); + enumU64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64[] value) => + { + ManyTypesUnsafeAccessors.EnumU64Array(instance) = value; + return instance; + }); + enumU64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64[] value) => + { + ManyTypesUnsafeAccessors.EnumU64Array(instance) = value; + return instance; + }); + enumU64Array.SetAccessors( + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU64Array, 72), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => entry.GetCurrentValue(enumU64Array)); + enumU64Array.SetPropertyIndexes( + index: 72, + originalValueIndex: 72, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var enumU64ArrayElementType = enumU64Array.SetElementType(typeof(CompiledModelTestBase.EnumU64)); + enumU64ArrayElementType.TypeMapping = enumU64Array.TypeMapping.ElementTypeMapping; + + var enumU64AsString = runtimeEntityType.AddProperty( + "EnumU64AsString", + typeof(CompiledModelTestBase.EnumU64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU64AsString.SetGetter( + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU64AsString(instance))), ((object)(CompiledModelTestBase.EnumU64.Min)))); + enumU64AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64 value) => + { + ManyTypesUnsafeAccessors.EnumU64AsString(instance) = value; + return instance; + }); + enumU64AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64 value) => + { + ManyTypesUnsafeAccessors.EnumU64AsString(instance) = value; + return instance; + }); + enumU64AsString.SetAccessors( + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => entry.ReadOriginalValue(enumU64AsString, 73), + CompiledModelTestBase.EnumU64 (IInternalEntry entry) => entry.GetCurrentValue(enumU64AsString)); + enumU64AsString.SetPropertyIndexes( + index: 73, + originalValueIndex: 73, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumU64AsString.SetSentinelFromProviderValue("Min"); + + var enumU64AsStringArray = runtimeEntityType.AddProperty( + "EnumU64AsStringArray", + typeof(CompiledModelTestBase.EnumU64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64AsStringArray.SetGetter( + CompiledModelTestBase.EnumU64[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsStringArray(instance) == null); + enumU64AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64[] value) => + { + ManyTypesUnsafeAccessors.EnumU64AsStringArray(instance) = value; + return instance; + }); + enumU64AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64[] value) => + { + ManyTypesUnsafeAccessors.EnumU64AsStringArray(instance) = value; + return instance; + }); + enumU64AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU64AsStringArray, 74), + CompiledModelTestBase.EnumU64[] (IInternalEntry entry) => entry.GetCurrentValue(enumU64AsStringArray)); + enumU64AsStringArray.SetPropertyIndexes( + index: 74, + originalValueIndex: 74, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU64AsStringArrayElementType = enumU64AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU64), + providerClrType: typeof(string)); + enumU64AsStringArrayElementType.TypeMapping = enumU64AsStringArray.TypeMapping.ElementTypeMapping; + + var enumU64AsStringCollection = runtimeEntityType.AddProperty( + "EnumU64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64AsStringCollection(instance) == null); + enumU64AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU64AsStringCollection(instance) = value; + return instance; + }); + enumU64AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU64AsStringCollection(instance) = value; + return instance; + }); + enumU64AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU64AsStringCollection, 75), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU64AsStringCollection)); + enumU64AsStringCollection.SetPropertyIndexes( + index: 75, + originalValueIndex: 75, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU64>(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU64>(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU64 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU64 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU64AsStringCollectionElementType = enumU64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU64), + providerClrType: typeof(string)); + enumU64AsStringCollectionElementType.TypeMapping = enumU64AsStringCollection.TypeMapping.ElementTypeMapping; + + var enumU64Collection = runtimeEntityType.AddProperty( + "EnumU64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU64Collection(instance) == null); + enumU64Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU64Collection(instance) = value; + return instance; + }); + enumU64Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU64Collection(instance) = value; + return instance; + }); + enumU64Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU64Collection, 76), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU64Collection)); + enumU64Collection.SetPropertyIndexes( + index: 76, + originalValueIndex: 76, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU64Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU64>(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU64>(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var enumU64CollectionElementType = enumU64Collection.SetElementType(typeof(CompiledModelTestBase.EnumU64)); + enumU64CollectionElementType.TypeMapping = enumU64Collection.TypeMapping.ElementTypeMapping; + + var enumU8 = runtimeEntityType.AddProperty( + "EnumU8", + typeof(CompiledModelTestBase.EnumU8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8.SetGetter( + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU8(instance))), ((object)(CompiledModelTestBase.EnumU8.Min)))); + enumU8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8 value) => + { + ManyTypesUnsafeAccessors.EnumU8(instance) = value; + return instance; + }); + enumU8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8 value) => + { + ManyTypesUnsafeAccessors.EnumU8(instance) = value; + return instance; + }); + enumU8.SetAccessors( + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => entry.ReadOriginalValue(enumU8, 77), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => entry.GetCurrentValue(enumU8)); + enumU8.SetPropertyIndexes( + index: 77, + originalValueIndex: 77, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))); + enumU8.SetSentinelFromProviderValue((byte)0); + + var enumU8Array = runtimeEntityType.AddProperty( + "EnumU8Array", + typeof(CompiledModelTestBase.EnumU8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8Array.SetGetter( + CompiledModelTestBase.EnumU8[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8Array(instance) == null); + enumU8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8[] value) => + { + ManyTypesUnsafeAccessors.EnumU8Array(instance) = value; + return instance; + }); + enumU8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8[] value) => + { + ManyTypesUnsafeAccessors.EnumU8Array(instance) = value; + return instance; + }); + enumU8Array.SetAccessors( + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU8Array, 78), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => entry.GetCurrentValue(enumU8Array)); + enumU8Array.SetPropertyIndexes( + index: 78, + originalValueIndex: 78, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var enumU8ArrayElementType = enumU8Array.SetElementType(typeof(CompiledModelTestBase.EnumU8)); + enumU8ArrayElementType.TypeMapping = enumU8Array.TypeMapping.ElementTypeMapping; + + var enumU8AsString = runtimeEntityType.AddProperty( + "EnumU8AsString", + typeof(CompiledModelTestBase.EnumU8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU8AsString.SetGetter( + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => object.Equals(((object)(ManyTypesUnsafeAccessors.EnumU8AsString(instance))), ((object)(CompiledModelTestBase.EnumU8.Min)))); + enumU8AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8 value) => + { + ManyTypesUnsafeAccessors.EnumU8AsString(instance) = value; + return instance; + }); + enumU8AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8 value) => + { + ManyTypesUnsafeAccessors.EnumU8AsString(instance) = value; + return instance; + }); + enumU8AsString.SetAccessors( + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => entry.ReadOriginalValue(enumU8AsString, 79), + CompiledModelTestBase.EnumU8 (IInternalEntry entry) => entry.GetCurrentValue(enumU8AsString)); + enumU8AsString.SetPropertyIndexes( + index: 79, + originalValueIndex: 79, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8AsString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)))); + enumU8AsString.SetSentinelFromProviderValue("Min"); + + var enumU8AsStringArray = runtimeEntityType.AddProperty( + "EnumU8AsStringArray", + typeof(CompiledModelTestBase.EnumU8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8AsStringArray.SetGetter( + CompiledModelTestBase.EnumU8[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsStringArray(instance) == null); + enumU8AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8[] value) => + { + ManyTypesUnsafeAccessors.EnumU8AsStringArray(instance) = value; + return instance; + }); + enumU8AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8[] value) => + { + ManyTypesUnsafeAccessors.EnumU8AsStringArray(instance) = value; + return instance; + }); + enumU8AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => entry.ReadOriginalValue(enumU8AsStringArray, 80), + CompiledModelTestBase.EnumU8[] (IInternalEntry entry) => entry.GetCurrentValue(enumU8AsStringArray)); + enumU8AsStringArray.SetPropertyIndexes( + index: 80, + originalValueIndex: 80, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU8AsStringArrayElementType = enumU8AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU8), + providerClrType: typeof(string)); + enumU8AsStringArrayElementType.TypeMapping = enumU8AsStringArray.TypeMapping.ElementTypeMapping; + + var enumU8AsStringCollection = runtimeEntityType.AddProperty( + "EnumU8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8AsStringCollection(instance) == null); + enumU8AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU8AsStringCollection(instance) = value; + return instance; + }); + enumU8AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU8AsStringCollection(instance) = value; + return instance; + }); + enumU8AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU8AsStringCollection, 81), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU8AsStringCollection)); + enumU8AsStringCollection.SetPropertyIndexes( + index: 81, + originalValueIndex: 81, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU8>(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU8>(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (CompiledModelTestBase.EnumU8 v) => ((object)v).ToString(), + CompiledModelTestBase.EnumU8 (string v) => StringEnumConverter.ConvertToEnum(v))))); + var enumU8AsStringCollectionElementType = enumU8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU8), + providerClrType: typeof(string)); + enumU8AsStringCollectionElementType.TypeMapping = enumU8AsStringCollection.TypeMapping.ElementTypeMapping; + + var enumU8Collection = runtimeEntityType.AddProperty( + "EnumU8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.EnumU8Collection(instance) == null); + enumU8Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU8Collection(instance) = value; + return instance; + }); + enumU8Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.EnumU8Collection(instance) = value; + return instance; + }); + enumU8Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.EnumU8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(enumU8Collection, 82), + List (IInternalEntry entry) => entry.GetCurrentValue>(enumU8Collection)); + enumU8Collection.SetPropertyIndexes( + index: 82, + originalValueIndex: 82, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enumU8Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU8>(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + keyComparer: new ListOfValueTypesComparer, CompiledModelTestBase.EnumU8>(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var enumU8CollectionElementType = enumU8Collection.SetElementType(typeof(CompiledModelTestBase.EnumU8)); + enumU8CollectionElementType.TypeMapping = enumU8Collection.TypeMapping.ElementTypeMapping; + + var @float = runtimeEntityType.AddProperty( + "Float", + typeof(float), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Float", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0f); + @float.SetGetter( + float (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Float(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Float(instance).Equals(0F)); + @float.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float value) => + { + ManyTypesUnsafeAccessors.Float(instance) = value; + return instance; + }); + @float.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float value) => + { + ManyTypesUnsafeAccessors.Float(instance) = value; + return instance; + }); + @float.SetAccessors( + float (IInternalEntry entry) => ManyTypesUnsafeAccessors.Float(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float (IInternalEntry entry) => ManyTypesUnsafeAccessors.Float(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float (IInternalEntry entry) => entry.ReadOriginalValue(@float, 83), + float (IInternalEntry entry) => entry.GetCurrentValue(@float)); + @float.SetPropertyIndexes( + index: 83, + originalValueIndex: 83, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @float.TypeMapping = JetFloatTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + keyComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + providerValueComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v)); + + var floatArray = runtimeEntityType.AddProperty( + "FloatArray", + typeof(float[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("FloatArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + floatArray.SetGetter( + float[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.FloatArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.FloatArray(instance) == null); + floatArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float[] value) => + { + ManyTypesUnsafeAccessors.FloatArray(instance) = value; + return instance; + }); + floatArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float[] value) => + { + ManyTypesUnsafeAccessors.FloatArray(instance) = value; + return instance; + }); + floatArray.SetAccessors( + float[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.FloatArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.FloatArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float[] (IInternalEntry entry) => entry.ReadOriginalValue(floatArray, 84), + float[] (IInternalEntry entry) => entry.GetCurrentValue(floatArray)); + floatArray.SetPropertyIndexes( + index: 84, + originalValueIndex: 84, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + floatArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonFloatReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonFloatReaderWriter.Instance), + elementMapping: JetFloatTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + keyComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + providerValueComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v))); + var floatArrayElementType = floatArray.SetElementType(typeof(float)); + floatArrayElementType.TypeMapping = floatArray.TypeMapping.ElementTypeMapping; + + var guid = runtimeEntityType.AddProperty( + "Guid", + typeof(Guid), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Guid", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + guid.SetGetter( + Guid (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Guid(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Guid(instance) == new Guid("00000000-0000-0000-0000-000000000000")); + guid.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.Guid(instance) = value; + return instance; + }); + guid.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.Guid(instance) = value; + return instance; + }); + guid.SetAccessors( + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.Guid(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.Guid(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(guid, 85), + Guid (IInternalEntry entry) => entry.GetCurrentValue(guid)); + guid.SetPropertyIndexes( + index: 85, + originalValueIndex: 85, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + guid.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + + var guidArray = runtimeEntityType.AddProperty( + "GuidArray", + typeof(Guid[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("GuidArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + guidArray.SetGetter( + Guid[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidArray(instance) == null); + guidArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid[] value) => + { + ManyTypesUnsafeAccessors.GuidArray(instance) = value; + return instance; + }); + guidArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid[] value) => + { + ManyTypesUnsafeAccessors.GuidArray(instance) = value; + return instance; + }); + guidArray.SetAccessors( + Guid[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid[] (IInternalEntry entry) => entry.ReadOriginalValue(guidArray, 86), + Guid[] (IInternalEntry entry) => entry.GetCurrentValue(guidArray)); + guidArray.SetPropertyIndexes( + index: 86, + originalValueIndex: 86, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + guidArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonGuidReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonGuidReaderWriter.Instance), + elementMapping: JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v))); + var guidArrayElementType = guidArray.SetElementType(typeof(Guid)); + guidArrayElementType.TypeMapping = guidArray.TypeMapping.ElementTypeMapping; + + var guidToBytesConverterProperty = runtimeEntityType.AddProperty( + "GuidToBytesConverterProperty", + typeof(Guid), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("GuidToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new GuidToBytesConverter()); + guidToBytesConverterProperty.SetGetter( + Guid (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(instance) == new Guid("00000000-0000-0000-0000-000000000000")); + guidToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(instance) = value; + return instance; + }); + guidToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(instance) = value; + return instance; + }); + guidToBytesConverterProperty.SetAccessors( + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(guidToBytesConverterProperty, 87), + Guid (IInternalEntry entry) => entry.GetCurrentValue(guidToBytesConverterProperty)); + guidToBytesConverterProperty.SetPropertyIndexes( + index: 87, + originalValueIndex: 87, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + guidToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(16)", + size: 16), + converter: new ValueConverter( + byte[] (Guid v) => v.ToByteArray(), + Guid (byte[] v) => new Guid(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (Guid v) => v.ToByteArray(), + Guid (byte[] v) => new Guid(v)))); + guidToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + + var guidToStringConverterProperty = runtimeEntityType.AddProperty( + "GuidToStringConverterProperty", + typeof(Guid), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("GuidToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new GuidToStringConverter()); + guidToStringConverterProperty.SetGetter( + Guid (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.GuidToStringConverterProperty(instance) == new Guid("00000000-0000-0000-0000-000000000000")); + guidToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.GuidToStringConverterProperty(instance) = value; + return instance; + }); + guidToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid value) => + { + ManyTypesUnsafeAccessors.GuidToStringConverterProperty(instance) = value; + return instance; + }); + guidToStringConverterProperty.SetAccessors( + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => ManyTypesUnsafeAccessors.GuidToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(guidToStringConverterProperty, 88), + Guid (IInternalEntry entry) => entry.GetCurrentValue(guidToStringConverterProperty)); + guidToStringConverterProperty.SetPropertyIndexes( + index: 88, + originalValueIndex: 88, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + guidToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(36)", + size: 36), + converter: new ValueConverter( + string (Guid v) => v.ToString("D"), + Guid (string v) => new Guid(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Guid v) => v.ToString("D"), + Guid (string v) => new Guid(v)))); + guidToStringConverterProperty.SetSentinelFromProviderValue("00000000-0000-0000-0000-000000000000"); + + var iPAddress = runtimeEntityType.AddProperty( + "IPAddress", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + iPAddress.SetGetter( + IPAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddress(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddress(instance) == null); + iPAddress.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddress(instance) = value; + return instance; + }); + iPAddress.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddress(instance) = value; + return instance; + }); + iPAddress.SetAccessors( + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => entry.ReadOriginalValue(iPAddress, 89), + IPAddress (IInternalEntry entry) => entry.GetCurrentValue(iPAddress)); + iPAddress.SetPropertyIndexes( + index: 89, + originalValueIndex: 89, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddress.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))); + + var iPAddressArray = runtimeEntityType.AddProperty( + "IPAddressArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + iPAddressArray.SetGetter( + IPAddress[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressArray(instance) == null); + iPAddressArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress[] value) => + { + ManyTypesUnsafeAccessors.IPAddressArray(instance) = value; + return instance; + }); + iPAddressArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress[] value) => + { + ManyTypesUnsafeAccessors.IPAddressArray(instance) = value; + return instance; + }); + iPAddressArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(iPAddressArray, 90), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(iPAddressArray)); + iPAddressArray.SetPropertyIndexes( + index: 90, + originalValueIndex: 90, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddressArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var iPAddressArrayElementType = iPAddressArray.SetElementType(typeof(IPAddress)); + iPAddressArrayElementType.TypeMapping = iPAddressArray.TypeMapping.ElementTypeMapping; + + var iPAddressReadOnlyCollection = runtimeEntityType.AddProperty( + "IPAddressReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_ipAddressReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + iPAddressReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance) == null); + iPAddressReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance) = ((List)value); + return instance; + }); + iPAddressReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(instance) = ((List)value); + return instance; + }); + iPAddressReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._ipAddressReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(iPAddressReadOnlyCollection, 91), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(iPAddressReadOnlyCollection)); + iPAddressReadOnlyCollection.SetPropertyIndexes( + index: 91, + originalValueIndex: 91, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddressReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var iPAddressReadOnlyCollectionElementType = iPAddressReadOnlyCollection.SetElementType(typeof(IPAddress), + providerClrType: typeof(string)); + iPAddressReadOnlyCollectionElementType.TypeMapping = iPAddressReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var iPAddressToBytesConverterProperty = runtimeEntityType.AddProperty( + "IPAddressToBytesConverterProperty", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new IPAddressToBytesConverter()); + iPAddressToBytesConverterProperty.SetGetter( + IPAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(instance) == null); + iPAddressToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(instance) = value; + return instance; + }); + iPAddressToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(instance) = value; + return instance; + }); + iPAddressToBytesConverterProperty.SetAccessors( + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => entry.ReadOriginalValue(iPAddressToBytesConverterProperty, 92), + IPAddress (IInternalEntry entry) => entry.GetCurrentValue(iPAddressToBytesConverterProperty)); + iPAddressToBytesConverterProperty.SetPropertyIndexes( + index: 92, + originalValueIndex: 92, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddressToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(16)", + size: 16), + converter: new ValueConverter( + byte[] (IPAddress v) => v.GetAddressBytes(), + IPAddress (byte[] v) => new IPAddress(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (IPAddress v) => v.GetAddressBytes(), + IPAddress (byte[] v) => new IPAddress(v)))); + + var iPAddressToStringConverterProperty = runtimeEntityType.AddProperty( + "IPAddressToStringConverterProperty", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new IPAddressToStringConverter()); + iPAddressToStringConverterProperty.SetGetter( + IPAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(instance) == null); + iPAddressToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(instance) = value; + return instance; + }); + iPAddressToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(instance) = value; + return instance; + }); + iPAddressToStringConverterProperty.SetAccessors( + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.IPAddressToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => entry.ReadOriginalValue(iPAddressToStringConverterProperty, 93), + IPAddress (IInternalEntry entry) => entry.GetCurrentValue(iPAddressToStringConverterProperty)); + iPAddressToStringConverterProperty.SetPropertyIndexes( + index: 93, + originalValueIndex: 93, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + iPAddressToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))); + + var int16 = runtimeEntityType.AddProperty( + "Int16", + typeof(short), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: (short)0); + int16.SetGetter( + short (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int16(instance) == 0); + int16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short value) => + { + ManyTypesUnsafeAccessors.Int16(instance) = value; + return instance; + }); + int16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short value) => + { + ManyTypesUnsafeAccessors.Int16(instance) = value; + return instance; + }); + int16.SetAccessors( + short (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short (IInternalEntry entry) => entry.ReadOriginalValue(int16, 94), + short (IInternalEntry entry) => entry.GetCurrentValue(int16)); + int16.SetPropertyIndexes( + index: 94, + originalValueIndex: 94, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int16.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)); + + var int16Array = runtimeEntityType.AddProperty( + "Int16Array", + typeof(short[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int16Array.SetGetter( + short[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int16Array(instance) == null); + int16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short[] value) => + { + ManyTypesUnsafeAccessors.Int16Array(instance) = value; + return instance; + }); + int16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short[] value) => + { + ManyTypesUnsafeAccessors.Int16Array(instance) = value; + return instance; + }); + int16Array.SetAccessors( + short[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short[] (IInternalEntry entry) => entry.ReadOriginalValue(int16Array, 95), + short[] (IInternalEntry entry) => entry.GetCurrentValue(int16Array)); + int16Array.SetPropertyIndexes( + index: 95, + originalValueIndex: 95, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var int16ArrayElementType = int16Array.SetElementType(typeof(short)); + int16ArrayElementType.TypeMapping = int16Array.TypeMapping.ElementTypeMapping; + + var int32 = runtimeEntityType.AddProperty( + "Int32", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0); + int32.SetGetter( + int (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int32(instance) == 0); + int32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.Int32(instance) = value; + return instance; + }); + int32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.Int32(instance) = value; + return instance; + }); + int32.SetAccessors( + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(int32, 96), + int (IInternalEntry entry) => entry.GetCurrentValue(int32)); + int32.SetPropertyIndexes( + index: 96, + originalValueIndex: 96, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int32.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + + var int32Array = runtimeEntityType.AddProperty( + "Int32Array", + typeof(int[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int32Array.SetGetter( + int[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int32Array(instance) == null); + int32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int[] value) => + { + ManyTypesUnsafeAccessors.Int32Array(instance) = value; + return instance; + }); + int32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int[] value) => + { + ManyTypesUnsafeAccessors.Int32Array(instance) = value; + return instance; + }); + int32Array.SetAccessors( + int[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int[] (IInternalEntry entry) => entry.ReadOriginalValue(int32Array, 97), + int[] (IInternalEntry entry) => entry.GetCurrentValue(int32Array)); + int32Array.SetPropertyIndexes( + index: 97, + originalValueIndex: 97, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonInt32ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonInt32ReaderWriter.Instance), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))); + var int32ArrayElementType = int32Array.SetElementType(typeof(int)); + int32ArrayElementType.TypeMapping = int32Array.TypeMapping.ElementTypeMapping; + + var int32ReadOnlyCollection = runtimeEntityType.AddProperty( + "Int32ReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int32ReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_int32ReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int32ReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance) == null); + int32ReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance) = ((List)value); + return instance; + }); + int32ReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._int32ReadOnlyCollection(instance) = ((List)value); + return instance; + }); + int32ReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._int32ReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._int32ReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(int32ReadOnlyCollection, 98), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(int32ReadOnlyCollection)); + int32ReadOnlyCollection.SetPropertyIndexes( + index: 98, + originalValueIndex: 98, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int32ReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, int>(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)), + keyComparer: new ListOfValueTypesComparer, int>(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, int>( + JsonInt32ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, int>( + JsonInt32ReaderWriter.Instance), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))); + var int32ReadOnlyCollectionElementType = int32ReadOnlyCollection.SetElementType(typeof(int)); + int32ReadOnlyCollectionElementType.TypeMapping = int32ReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var int64 = runtimeEntityType.AddProperty( + "Int64", + typeof(long), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0L); + int64.SetGetter( + long (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int64(instance) == 0L); + int64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long value) => + { + ManyTypesUnsafeAccessors.Int64(instance) = value; + return instance; + }); + int64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long value) => + { + ManyTypesUnsafeAccessors.Int64(instance) = value; + return instance; + }); + int64.SetAccessors( + long (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long (IInternalEntry entry) => entry.ReadOriginalValue(int64, 99), + long (IInternalEntry entry) => entry.GetCurrentValue(int64)); + int64.SetPropertyIndexes( + index: 99, + originalValueIndex: 99, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int64.TypeMapping = LibRedLongTypeMapping.Default; + + var int64Array = runtimeEntityType.AddProperty( + "Int64Array", + typeof(long[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int64Array.SetGetter( + long[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int64Array(instance) == null); + int64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long[] value) => + { + ManyTypesUnsafeAccessors.Int64Array(instance) = value; + return instance; + }); + int64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long[] value) => + { + ManyTypesUnsafeAccessors.Int64Array(instance) = value; + return instance; + }); + int64Array.SetAccessors( + long[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long[] (IInternalEntry entry) => entry.ReadOriginalValue(int64Array, 100), + long[] (IInternalEntry entry) => entry.GetCurrentValue(int64Array)); + int64Array.SetPropertyIndexes( + index: 100, + originalValueIndex: 100, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonInt64ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonInt64ReaderWriter.Instance), + elementMapping: LibRedLongTypeMapping.Default); + var int64ArrayElementType = int64Array.SetElementType(typeof(long)); + int64ArrayElementType.TypeMapping = int64Array.TypeMapping.ElementTypeMapping; + + var int8 = runtimeEntityType.AddProperty( + "Int8", + typeof(sbyte), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int8.SetGetter( + sbyte (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int8(instance) == 0); + int8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte value) => + { + ManyTypesUnsafeAccessors.Int8(instance) = value; + return instance; + }); + int8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte value) => + { + ManyTypesUnsafeAccessors.Int8(instance) = value; + return instance; + }); + int8.SetAccessors( + sbyte (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte (IInternalEntry entry) => entry.ReadOriginalValue(int8, 101), + sbyte (IInternalEntry entry) => entry.GetCurrentValue(int8)); + int8.SetPropertyIndexes( + index: 101, + originalValueIndex: 101, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int8.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + keyComparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)))); + int8.SetSentinelFromProviderValue((short)0); + + var int8Array = runtimeEntityType.AddProperty( + "Int8Array", + typeof(sbyte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int8Array.SetGetter( + sbyte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Int8Array(instance) == null); + int8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte[] value) => + { + ManyTypesUnsafeAccessors.Int8Array(instance) = value; + return instance; + }); + int8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte[] value) => + { + ManyTypesUnsafeAccessors.Int8Array(instance) = value; + return instance; + }); + int8Array.SetAccessors( + sbyte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.Int8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte[] (IInternalEntry entry) => entry.ReadOriginalValue(int8Array, 102), + sbyte[] (IInternalEntry entry) => entry.GetCurrentValue(int8Array)); + int8Array.SetPropertyIndexes( + index: 102, + originalValueIndex: 102, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + int8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + keyComparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v))))); + var int8ArrayElementType = int8Array.SetElementType(typeof(sbyte)); + int8ArrayElementType.TypeMapping = int8Array.TypeMapping.ElementTypeMapping; + + var intNumberToBytesConverterProperty = runtimeEntityType.AddProperty( + "IntNumberToBytesConverterProperty", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IntNumberToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToBytesConverter()); + intNumberToBytesConverterProperty.SetGetter( + int (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(instance) == 0); + intNumberToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(instance) = value; + return instance; + }); + intNumberToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(instance) = value; + return instance; + }); + intNumberToBytesConverterProperty.SetAccessors( + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.IntNumberToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(intNumberToBytesConverterProperty, 103), + int (IInternalEntry entry) => entry.GetCurrentValue(intNumberToBytesConverterProperty)); + intNumberToBytesConverterProperty.SetPropertyIndexes( + index: 103, + originalValueIndex: 103, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + intNumberToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(4)", + size: 4), + converter: new ValueConverter( + byte[] (int v) => NumberToBytesConverter.ReverseInt(BitConverter.GetBytes(v)), + int (byte[] v) => (v == null ? 0 : BitConverter.ToInt32(NumberToBytesConverter.ReverseInt((v.Length == 0 ? new byte[4] : v)), 0))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (int v) => NumberToBytesConverter.ReverseInt(BitConverter.GetBytes(v)), + int (byte[] v) => (v == null ? 0 : BitConverter.ToInt32(NumberToBytesConverter.ReverseInt((v.Length == 0 ? new byte[4] : v)), 0))))); + intNumberToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0 }); + + var intNumberToStringConverterProperty = runtimeEntityType.AddProperty( + "IntNumberToStringConverterProperty", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IntNumberToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToStringConverter()); + intNumberToStringConverterProperty.SetGetter( + int (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(instance) == 0); + intNumberToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(instance) = value; + return instance; + }); + intNumberToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int value) => + { + ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(instance) = value; + return instance; + }); + intNumberToStringConverterProperty.SetAccessors( + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => ManyTypesUnsafeAccessors.IntNumberToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(intNumberToStringConverterProperty, 104), + int (IInternalEntry entry) => entry.GetCurrentValue(intNumberToStringConverterProperty)); + intNumberToStringConverterProperty.SetPropertyIndexes( + index: 104, + originalValueIndex: 104, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + intNumberToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(64)", + size: 64), + converter: new ValueConverter( + string (int v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + int (string v) => int.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (int v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + int (string v) => int.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture)))); + intNumberToStringConverterProperty.SetSentinelFromProviderValue("0"); + + var nullIntToNullStringConverterProperty = runtimeEntityType.AddProperty( + "NullIntToNullStringConverterProperty", + typeof(int?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullIntToNullStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true, + valueConverter: new CompiledModelTestBase.NullIntToNullStringConverter()); + nullIntToNullStringConverterProperty.SetGetter( + int? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(instance).HasValue)); + nullIntToNullStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? value) => + { + ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(instance) = value; + return instance; + }); + nullIntToNullStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? value) => + { + ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(instance) = value; + return instance; + }); + nullIntToNullStringConverterProperty.SetAccessors( + int? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullIntToNullStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? (IInternalEntry entry) => entry.ReadOriginalValue(nullIntToNullStringConverterProperty, 105), + int? (IInternalEntry entry) => entry.GetCurrentValue(nullIntToNullStringConverterProperty)); + nullIntToNullStringConverterProperty.SetPropertyIndexes( + index: 105, + originalValueIndex: 105, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullIntToNullStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int? v1, int? v2) => v1 == v2, + int (int? v) => ((int)v), + int? (int? v) => v), + keyComparer: new ValueComparer( + bool (int? v1, int? v2) => v1 == v2, + int (int? v) => ((int)v), + int? (int? v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (int? v) => (v == null ? null : ((object)v).ToString()), + int? (string v) => (v == null || v == "" ? null : ((int? )(int.Parse(v)))), + convertsNulls: true), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (int? v) => (v == null ? null : ((object)v).ToString()), + int? (string v) => (v == null || v == "" ? null : ((int? )(int.Parse(v)))), + convertsNulls: true))); + + var nullableBool = runtimeEntityType.AddProperty( + "NullableBool", + typeof(bool?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBool", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableBool.SetGetter( + bool? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBool(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableBool(instance).HasValue)); + nullableBool.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool? value) => + { + ManyTypesUnsafeAccessors.NullableBool(instance) = value; + return instance; + }); + nullableBool.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool? value) => + { + ManyTypesUnsafeAccessors.NullableBool(instance) = value; + return instance; + }); + nullableBool.SetAccessors( + bool? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBool(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBool(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool? (IInternalEntry entry) => entry.ReadOriginalValue(nullableBool, 106), + bool? (IInternalEntry entry) => entry.GetCurrentValue(nullableBool)); + nullableBool.SetPropertyIndexes( + index: 106, + originalValueIndex: 106, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableBool.TypeMapping = JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)); + nullableBool.SetComparer(new NullableValueComparer(nullableBool.TypeMapping.Comparer)); + nullableBool.SetKeyComparer(new NullableValueComparer(nullableBool.TypeMapping.KeyComparer)); + + var nullableBoolArray = runtimeEntityType.AddProperty( + "NullableBoolArray", + typeof(bool?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBoolArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableBoolArray.SetGetter( + bool? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBoolArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBoolArray(instance) == null); + nullableBoolArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool? [] value) => + { + ManyTypesUnsafeAccessors.NullableBoolArray(instance) = value; + return instance; + }); + nullableBoolArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, bool? [] value) => + { + ManyTypesUnsafeAccessors.NullableBoolArray(instance) = value; + return instance; + }); + nullableBoolArray.SetAccessors( + bool? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBoolArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBoolArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + bool? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableBoolArray, 107), + bool? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableBoolArray)); + nullableBoolArray.SetPropertyIndexes( + index: 107, + originalValueIndex: 107, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableBoolArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonBoolReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonBoolReaderWriter.Instance), + elementMapping: JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v))); + var nullableBoolArrayElementType = nullableBoolArray.SetElementType(typeof(bool?), + nullable: true); + nullableBoolArrayElementType.TypeMapping = nullableBoolArray.TypeMapping.ElementTypeMapping; + nullableBoolArrayElementType.SetComparer(new NullableValueComparer(nullableBoolArrayElementType.TypeMapping.Comparer)); + + var nullableBytes = runtimeEntityType.AddProperty( + "NullableBytes", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBytes", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableBytes.SetGetter( + byte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBytes(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBytes(instance) == null); + nullableBytes.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.NullableBytes(instance) = value; + return instance; + }); + nullableBytes.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.NullableBytes(instance) = value; + return instance; + }); + nullableBytes.SetAccessors( + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBytes(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBytes(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(nullableBytes, 108), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(nullableBytes)); + nullableBytes.SetPropertyIndexes( + index: 108, + originalValueIndex: 108, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableBytes.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + var nullableBytesArray = runtimeEntityType.AddProperty( + "NullableBytesArray", + typeof(byte[][]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBytesArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableBytesArray.SetGetter( + byte[][] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBytesArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableBytesArray(instance) == null); + nullableBytesArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[][] value) => + { + ManyTypesUnsafeAccessors.NullableBytesArray(instance) = value; + return instance; + }); + nullableBytesArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[][] value) => + { + ManyTypesUnsafeAccessors.NullableBytesArray(instance) = value; + return instance; + }); + nullableBytesArray.SetAccessors( + byte[][] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBytesArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[][] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableBytesArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[][] (IInternalEntry entry) => entry.ReadOriginalValue(nullableBytesArray, 109), + byte[][] (IInternalEntry entry) => entry.GetCurrentValue(nullableBytesArray)); + nullableBytesArray.SetPropertyIndexes( + index: 109, + originalValueIndex: 109, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableBytesArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + JsonByteArrayReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + JsonByteArrayReaderWriter.Instance), + elementMapping: JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None)); + var nullableBytesArrayElementType = nullableBytesArray.SetElementType(typeof(byte[]), + nullable: true); + nullableBytesArrayElementType.TypeMapping = nullableBytesArray.TypeMapping.ElementTypeMapping; + + var nullableChar = runtimeEntityType.AddProperty( + "NullableChar", + typeof(char?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableChar", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableChar.SetGetter( + char? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableChar(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableChar(instance).HasValue)); + nullableChar.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char? value) => + { + ManyTypesUnsafeAccessors.NullableChar(instance) = value; + return instance; + }); + nullableChar.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char? value) => + { + ManyTypesUnsafeAccessors.NullableChar(instance) = value; + return instance; + }); + nullableChar.SetAccessors( + char? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableChar(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableChar(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char? (IInternalEntry entry) => entry.ReadOriginalValue(nullableChar, 110), + char? (IInternalEntry entry) => entry.GetCurrentValue(nullableChar)); + nullableChar.SetPropertyIndexes( + index: 110, + originalValueIndex: 110, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableChar.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))); + nullableChar.SetComparer(new NullableValueComparer(nullableChar.TypeMapping.Comparer)); + nullableChar.SetKeyComparer(new NullableValueComparer(nullableChar.TypeMapping.KeyComparer)); + + var nullableCharArray = runtimeEntityType.AddProperty( + "NullableCharArray", + typeof(char?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableCharArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableCharArray.SetGetter( + char? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableCharArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableCharArray(instance) == null); + nullableCharArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char? [] value) => + { + ManyTypesUnsafeAccessors.NullableCharArray(instance) = value; + return instance; + }); + nullableCharArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, char? [] value) => + { + ManyTypesUnsafeAccessors.NullableCharArray(instance) = value; + return instance; + }); + nullableCharArray.SetAccessors( + char? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableCharArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableCharArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + char? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableCharArray, 111), + char? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableCharArray)); + nullableCharArray.SetPropertyIndexes( + index: 111, + originalValueIndex: 111, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableCharArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0]))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + keyComparer: new ValueComparer( + bool (char v1, char v2) => v1 == v2, + int (char v) => ((int)v), + char (char v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0])), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (char v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v)), + char (string v) => (v.Length < 1 ? '\0' : v[0]))))); + var nullableCharArrayElementType = nullableCharArray.SetElementType(typeof(char?), + nullable: true); + nullableCharArrayElementType.TypeMapping = nullableCharArray.TypeMapping.ElementTypeMapping; + nullableCharArrayElementType.SetComparer(new NullableValueComparer(nullableCharArrayElementType.TypeMapping.Comparer)); + + var nullableDateOnly = runtimeEntityType.AddProperty( + "NullableDateOnly", + typeof(DateOnly?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableDateOnly.SetGetter( + DateOnly? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateOnly(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableDateOnly(instance).HasValue)); + nullableDateOnly.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly? value) => + { + ManyTypesUnsafeAccessors.NullableDateOnly(instance) = value; + return instance; + }); + nullableDateOnly.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly? value) => + { + ManyTypesUnsafeAccessors.NullableDateOnly(instance) = value; + return instance; + }); + nullableDateOnly.SetAccessors( + DateOnly? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly? (IInternalEntry entry) => entry.ReadOriginalValue(nullableDateOnly, 112), + DateOnly? (IInternalEntry entry) => entry.GetCurrentValue(nullableDateOnly)); + nullableDateOnly.SetPropertyIndexes( + index: 112, + originalValueIndex: 112, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDateOnly.TypeMapping = JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v)); + nullableDateOnly.SetComparer(new NullableValueComparer(nullableDateOnly.TypeMapping.Comparer)); + nullableDateOnly.SetKeyComparer(new NullableValueComparer(nullableDateOnly.TypeMapping.KeyComparer)); + + var nullableDateOnlyArray = runtimeEntityType.AddProperty( + "NullableDateOnlyArray", + typeof(DateOnly?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableDateOnlyArray.SetGetter( + DateOnly? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateOnlyArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateOnlyArray(instance) == null); + nullableDateOnlyArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly? [] value) => + { + ManyTypesUnsafeAccessors.NullableDateOnlyArray(instance) = value; + return instance; + }); + nullableDateOnlyArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateOnly? [] value) => + { + ManyTypesUnsafeAccessors.NullableDateOnlyArray(instance) = value; + return instance; + }); + nullableDateOnlyArray.SetAccessors( + DateOnly? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateOnly? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableDateOnlyArray, 113), + DateOnly? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableDateOnlyArray)); + nullableDateOnlyArray.SetPropertyIndexes( + index: 113, + originalValueIndex: 113, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDateOnlyArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonDateOnlyReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonDateOnlyReaderWriter.Instance), + elementMapping: JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + keyComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v))); + var nullableDateOnlyArrayElementType = nullableDateOnlyArray.SetElementType(typeof(DateOnly?), + nullable: true); + nullableDateOnlyArrayElementType.TypeMapping = nullableDateOnlyArray.TypeMapping.ElementTypeMapping; + nullableDateOnlyArrayElementType.SetComparer(new NullableValueComparer(nullableDateOnlyArrayElementType.TypeMapping.Comparer)); + + var nullableDateTime = runtimeEntityType.AddProperty( + "NullableDateTime", + typeof(DateTime?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableDateTime.SetGetter( + DateTime? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateTime(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableDateTime(instance).HasValue)); + nullableDateTime.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime? value) => + { + ManyTypesUnsafeAccessors.NullableDateTime(instance) = value; + return instance; + }); + nullableDateTime.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime? value) => + { + ManyTypesUnsafeAccessors.NullableDateTime(instance) = value; + return instance; + }); + nullableDateTime.SetAccessors( + DateTime? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateTime(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateTime(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime? (IInternalEntry entry) => entry.ReadOriginalValue(nullableDateTime, 114), + DateTime? (IInternalEntry entry) => entry.GetCurrentValue(nullableDateTime)); + nullableDateTime.SetPropertyIndexes( + index: 114, + originalValueIndex: 114, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDateTime.TypeMapping = JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)); + nullableDateTime.SetComparer(new NullableValueComparer(nullableDateTime.TypeMapping.Comparer)); + nullableDateTime.SetKeyComparer(new NullableValueComparer(nullableDateTime.TypeMapping.KeyComparer)); + + var nullableDateTimeArray = runtimeEntityType.AddProperty( + "NullableDateTimeArray", + typeof(DateTime?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateTimeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableDateTimeArray.SetGetter( + DateTime? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateTimeArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDateTimeArray(instance) == null); + nullableDateTimeArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime? [] value) => + { + ManyTypesUnsafeAccessors.NullableDateTimeArray(instance) = value; + return instance; + }); + nullableDateTimeArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, DateTime? [] value) => + { + ManyTypesUnsafeAccessors.NullableDateTimeArray(instance) = value; + return instance; + }); + nullableDateTimeArray.SetAccessors( + DateTime? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateTimeArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDateTimeArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + DateTime? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableDateTimeArray, 115), + DateTime? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableDateTimeArray)); + nullableDateTimeArray.SetPropertyIndexes( + index: 115, + originalValueIndex: 115, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDateTimeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var nullableDateTimeArrayElementType = nullableDateTimeArray.SetElementType(typeof(DateTime?), + nullable: true); + nullableDateTimeArrayElementType.TypeMapping = nullableDateTimeArray.TypeMapping.ElementTypeMapping; + nullableDateTimeArrayElementType.SetComparer(new NullableValueComparer(nullableDateTimeArrayElementType.TypeMapping.Comparer)); + + var nullableDecimal = runtimeEntityType.AddProperty( + "NullableDecimal", + typeof(decimal?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDecimal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableDecimal.SetGetter( + decimal? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDecimal(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableDecimal(instance).HasValue)); + nullableDecimal.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal? value) => + { + ManyTypesUnsafeAccessors.NullableDecimal(instance) = value; + return instance; + }); + nullableDecimal.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal? value) => + { + ManyTypesUnsafeAccessors.NullableDecimal(instance) = value; + return instance; + }); + nullableDecimal.SetAccessors( + decimal? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDecimal(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDecimal(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal? (IInternalEntry entry) => entry.ReadOriginalValue(nullableDecimal, 116), + decimal? (IInternalEntry entry) => entry.GetCurrentValue(nullableDecimal)); + nullableDecimal.SetPropertyIndexes( + index: 116, + originalValueIndex: 116, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDecimal.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v)); + nullableDecimal.SetComparer(new NullableValueComparer(nullableDecimal.TypeMapping.Comparer)); + nullableDecimal.SetKeyComparer(new NullableValueComparer(nullableDecimal.TypeMapping.KeyComparer)); + + var nullableDecimalArray = runtimeEntityType.AddProperty( + "NullableDecimalArray", + typeof(decimal?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDecimalArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableDecimalArray.SetGetter( + decimal? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDecimalArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDecimalArray(instance) == null); + nullableDecimalArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal? [] value) => + { + ManyTypesUnsafeAccessors.NullableDecimalArray(instance) = value; + return instance; + }); + nullableDecimalArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, decimal? [] value) => + { + ManyTypesUnsafeAccessors.NullableDecimalArray(instance) = value; + return instance; + }); + nullableDecimalArray.SetAccessors( + decimal? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDecimalArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDecimalArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + decimal? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableDecimalArray, 117), + decimal? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableDecimalArray)); + nullableDecimalArray.SetPropertyIndexes( + index: 117, + originalValueIndex: 117, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDecimalArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonDecimalReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonDecimalReaderWriter.Instance), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + keyComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v))); + var nullableDecimalArrayElementType = nullableDecimalArray.SetElementType(typeof(decimal?), + nullable: true); + nullableDecimalArrayElementType.TypeMapping = nullableDecimalArray.TypeMapping.ElementTypeMapping; + nullableDecimalArrayElementType.SetComparer(new NullableValueComparer(nullableDecimalArrayElementType.TypeMapping.Comparer)); + + var nullableDouble = runtimeEntityType.AddProperty( + "NullableDouble", + typeof(double?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDouble", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableDouble.SetGetter( + double? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDouble(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableDouble(instance).HasValue)); + nullableDouble.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double? value) => + { + ManyTypesUnsafeAccessors.NullableDouble(instance) = value; + return instance; + }); + nullableDouble.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double? value) => + { + ManyTypesUnsafeAccessors.NullableDouble(instance) = value; + return instance; + }); + nullableDouble.SetAccessors( + double? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDouble(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDouble(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double? (IInternalEntry entry) => entry.ReadOriginalValue(nullableDouble, 118), + double? (IInternalEntry entry) => entry.GetCurrentValue(nullableDouble)); + nullableDouble.SetPropertyIndexes( + index: 118, + originalValueIndex: 118, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDouble.TypeMapping = JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v)); + nullableDouble.SetComparer(new NullableValueComparer(nullableDouble.TypeMapping.Comparer)); + nullableDouble.SetKeyComparer(new NullableValueComparer(nullableDouble.TypeMapping.KeyComparer)); + + var nullableDoubleArray = runtimeEntityType.AddProperty( + "NullableDoubleArray", + typeof(double?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDoubleArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableDoubleArray.SetGetter( + double? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDoubleArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableDoubleArray(instance) == null); + nullableDoubleArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double? [] value) => + { + ManyTypesUnsafeAccessors.NullableDoubleArray(instance) = value; + return instance; + }); + nullableDoubleArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, double? [] value) => + { + ManyTypesUnsafeAccessors.NullableDoubleArray(instance) = value; + return instance; + }); + nullableDoubleArray.SetAccessors( + double? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDoubleArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableDoubleArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + double? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableDoubleArray, 119), + double? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableDoubleArray)); + nullableDoubleArray.SetPropertyIndexes( + index: 119, + originalValueIndex: 119, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableDoubleArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonDoubleReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonDoubleReaderWriter.Instance), + elementMapping: JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + keyComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v))); + var nullableDoubleArrayElementType = nullableDoubleArray.SetElementType(typeof(double?), + nullable: true); + nullableDoubleArrayElementType.TypeMapping = nullableDoubleArray.TypeMapping.ElementTypeMapping; + nullableDoubleArrayElementType.SetComparer(new NullableValueComparer(nullableDoubleArrayElementType.TypeMapping.Comparer)); + + var nullableEnum16 = runtimeEntityType.AddProperty( + "NullableEnum16", + typeof(CompiledModelTestBase.Enum16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum16.SetGetter( + CompiledModelTestBase.Enum16? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum16(instance).HasValue)); + nullableEnum16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? value) => + { + ManyTypesUnsafeAccessors.NullableEnum16(instance) = (value == null ? value : ((CompiledModelTestBase.Enum16? )(((CompiledModelTestBase.Enum16)value)))); + return instance; + }); + nullableEnum16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? value) => + { + ManyTypesUnsafeAccessors.NullableEnum16(instance) = (value == null ? value : ((CompiledModelTestBase.Enum16? )(((CompiledModelTestBase.Enum16)value)))); + return instance; + }); + nullableEnum16.SetAccessors( + CompiledModelTestBase.Enum16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum16, 120), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum16)); + nullableEnum16.SetPropertyIndexes( + index: 120, + originalValueIndex: 120, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))); + nullableEnum16.SetComparer(new NullableValueComparer(nullableEnum16.TypeMapping.Comparer)); + nullableEnum16.SetKeyComparer(new NullableValueComparer(nullableEnum16.TypeMapping.KeyComparer)); + + var nullableEnum16Array = runtimeEntityType.AddProperty( + "NullableEnum16Array", + typeof(CompiledModelTestBase.Enum16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum16Array.SetGetter( + CompiledModelTestBase.Enum16? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16Array(instance) == null); + nullableEnum16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum16Array(instance) = value; + return instance; + }); + nullableEnum16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum16Array(instance) = value; + return instance; + }); + nullableEnum16Array.SetAccessors( + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum16Array, 121), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum16Array)); + nullableEnum16Array.SetPropertyIndexes( + index: 121, + originalValueIndex: 121, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var nullableEnum16ArrayElementType = nullableEnum16Array.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + nullableEnum16ArrayElementType.TypeMapping = nullableEnum16Array.TypeMapping.ElementTypeMapping; + nullableEnum16ArrayElementType.SetComparer(new NullableValueComparer(nullableEnum16ArrayElementType.TypeMapping.Comparer)); + + var nullableEnum16AsString = runtimeEntityType.AddProperty( + "NullableEnum16AsString", + typeof(CompiledModelTestBase.Enum16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum16AsString.SetGetter( + CompiledModelTestBase.Enum16? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum16AsString(instance).HasValue)); + nullableEnum16AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum16? )(((CompiledModelTestBase.Enum16)value)))); + return instance; + }); + nullableEnum16AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum16? )(((CompiledModelTestBase.Enum16)value)))); + return instance; + }); + nullableEnum16AsString.SetAccessors( + CompiledModelTestBase.Enum16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum16AsString, 122), + CompiledModelTestBase.Enum16? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum16AsString)); + nullableEnum16AsString.SetPropertyIndexes( + index: 122, + originalValueIndex: 122, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16AsString.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))); + nullableEnum16AsString.SetComparer(new NullableValueComparer(nullableEnum16AsString.TypeMapping.Comparer)); + nullableEnum16AsString.SetKeyComparer(new NullableValueComparer(nullableEnum16AsString.TypeMapping.KeyComparer)); + + var nullableEnum16AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum16AsStringArray", + typeof(CompiledModelTestBase.Enum16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum16AsStringArray.SetGetter( + CompiledModelTestBase.Enum16? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(instance) == null); + nullableEnum16AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(instance) = value; + return instance; + }); + nullableEnum16AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(instance) = value; + return instance; + }); + nullableEnum16AsStringArray.SetAccessors( + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum16AsStringArray, 123), + CompiledModelTestBase.Enum16? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum16AsStringArray)); + nullableEnum16AsStringArray.SetPropertyIndexes( + index: 123, + originalValueIndex: 123, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var nullableEnum16AsStringArrayElementType = nullableEnum16AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + nullableEnum16AsStringArrayElementType.TypeMapping = nullableEnum16AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnum16AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnum16AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnum16AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum16AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(instance) == null); + nullableEnum16AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(instance) = value; + return instance; + }); + nullableEnum16AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(instance) = value; + return instance; + }); + nullableEnum16AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum16AsStringCollection, 124), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum16AsStringCollection)); + nullableEnum16AsStringCollection.SetPropertyIndexes( + index: 124, + originalValueIndex: 124, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var nullableEnum16AsStringCollectionElementType = nullableEnum16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + nullableEnum16AsStringCollectionElementType.TypeMapping = nullableEnum16AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnum16AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnum16AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnum16Collection = runtimeEntityType.AddProperty( + "NullableEnum16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum16Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum16Collection(instance) == null); + nullableEnum16Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum16Collection(instance) = value; + return instance; + }); + nullableEnum16Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum16Collection(instance) = value; + return instance; + }); + nullableEnum16Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum16Collection, 125), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum16Collection)); + nullableEnum16Collection.SetPropertyIndexes( + index: 125, + originalValueIndex: 125, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum16Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum16>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum16 v1, CompiledModelTestBase.Enum16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum16 (CompiledModelTestBase.Enum16 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum16 value) => ((short)value), + CompiledModelTestBase.Enum16 (short value) => ((CompiledModelTestBase.Enum16)value))))); + var nullableEnum16CollectionElementType = nullableEnum16Collection.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + nullableEnum16CollectionElementType.TypeMapping = nullableEnum16Collection.TypeMapping.ElementTypeMapping; + nullableEnum16CollectionElementType.SetComparer(new NullableValueComparer(nullableEnum16CollectionElementType.TypeMapping.Comparer)); + + var nullableEnum32 = runtimeEntityType.AddProperty( + "NullableEnum32", + typeof(CompiledModelTestBase.Enum32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum32.SetGetter( + CompiledModelTestBase.Enum32? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum32(instance).HasValue)); + nullableEnum32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? value) => + { + ManyTypesUnsafeAccessors.NullableEnum32(instance) = (value == null ? value : ((CompiledModelTestBase.Enum32? )(((CompiledModelTestBase.Enum32)value)))); + return instance; + }); + nullableEnum32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? value) => + { + ManyTypesUnsafeAccessors.NullableEnum32(instance) = (value == null ? value : ((CompiledModelTestBase.Enum32? )(((CompiledModelTestBase.Enum32)value)))); + return instance; + }); + nullableEnum32.SetAccessors( + CompiledModelTestBase.Enum32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum32, 126), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum32)); + nullableEnum32.SetPropertyIndexes( + index: 126, + originalValueIndex: 126, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))); + nullableEnum32.SetComparer(new NullableValueComparer(nullableEnum32.TypeMapping.Comparer)); + nullableEnum32.SetKeyComparer(new NullableValueComparer(nullableEnum32.TypeMapping.KeyComparer)); + + var nullableEnum32Array = runtimeEntityType.AddProperty( + "NullableEnum32Array", + typeof(CompiledModelTestBase.Enum32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum32Array.SetGetter( + CompiledModelTestBase.Enum32? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32Array(instance) == null); + nullableEnum32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum32Array(instance) = value; + return instance; + }); + nullableEnum32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum32Array(instance) = value; + return instance; + }); + nullableEnum32Array.SetAccessors( + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum32Array, 127), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum32Array)); + nullableEnum32Array.SetPropertyIndexes( + index: 127, + originalValueIndex: 127, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var nullableEnum32ArrayElementType = nullableEnum32Array.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + nullableEnum32ArrayElementType.TypeMapping = nullableEnum32Array.TypeMapping.ElementTypeMapping; + nullableEnum32ArrayElementType.SetComparer(new NullableValueComparer(nullableEnum32ArrayElementType.TypeMapping.Comparer)); + + var nullableEnum32AsString = runtimeEntityType.AddProperty( + "NullableEnum32AsString", + typeof(CompiledModelTestBase.Enum32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum32AsString.SetGetter( + CompiledModelTestBase.Enum32? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum32AsString(instance).HasValue)); + nullableEnum32AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum32? )(((CompiledModelTestBase.Enum32)value)))); + return instance; + }); + nullableEnum32AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum32? )(((CompiledModelTestBase.Enum32)value)))); + return instance; + }); + nullableEnum32AsString.SetAccessors( + CompiledModelTestBase.Enum32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum32AsString, 128), + CompiledModelTestBase.Enum32? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum32AsString)); + nullableEnum32AsString.SetPropertyIndexes( + index: 128, + originalValueIndex: 128, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32AsString.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))); + nullableEnum32AsString.SetComparer(new NullableValueComparer(nullableEnum32AsString.TypeMapping.Comparer)); + nullableEnum32AsString.SetKeyComparer(new NullableValueComparer(nullableEnum32AsString.TypeMapping.KeyComparer)); + + var nullableEnum32AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum32AsStringArray", + typeof(CompiledModelTestBase.Enum32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum32AsStringArray.SetGetter( + CompiledModelTestBase.Enum32? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(instance) == null); + nullableEnum32AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(instance) = value; + return instance; + }); + nullableEnum32AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(instance) = value; + return instance; + }); + nullableEnum32AsStringArray.SetAccessors( + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum32AsStringArray, 129), + CompiledModelTestBase.Enum32? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum32AsStringArray)); + nullableEnum32AsStringArray.SetPropertyIndexes( + index: 129, + originalValueIndex: 129, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var nullableEnum32AsStringArrayElementType = nullableEnum32AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + nullableEnum32AsStringArrayElementType.TypeMapping = nullableEnum32AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnum32AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnum32AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnum32AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum32AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(instance) == null); + nullableEnum32AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(instance) = value; + return instance; + }); + nullableEnum32AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(instance) = value; + return instance; + }); + nullableEnum32AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum32AsStringCollection, 130), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum32AsStringCollection)); + nullableEnum32AsStringCollection.SetPropertyIndexes( + index: 130, + originalValueIndex: 130, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var nullableEnum32AsStringCollectionElementType = nullableEnum32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + nullableEnum32AsStringCollectionElementType.TypeMapping = nullableEnum32AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnum32AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnum32AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnum32Collection = runtimeEntityType.AddProperty( + "NullableEnum32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum32Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum32Collection(instance) == null); + nullableEnum32Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum32Collection(instance) = value; + return instance; + }); + nullableEnum32Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum32Collection(instance) = value; + return instance; + }); + nullableEnum32Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum32Collection, 131), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum32Collection)); + nullableEnum32Collection.SetPropertyIndexes( + index: 131, + originalValueIndex: 131, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum32Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum32>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum32 v1, CompiledModelTestBase.Enum32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum32 (CompiledModelTestBase.Enum32 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.Enum32 value) => ((int)value), + CompiledModelTestBase.Enum32 (int value) => ((CompiledModelTestBase.Enum32)value))))); + var nullableEnum32CollectionElementType = nullableEnum32Collection.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + nullableEnum32CollectionElementType.TypeMapping = nullableEnum32Collection.TypeMapping.ElementTypeMapping; + nullableEnum32CollectionElementType.SetComparer(new NullableValueComparer(nullableEnum32CollectionElementType.TypeMapping.Comparer)); + + var nullableEnum64 = runtimeEntityType.AddProperty( + "NullableEnum64", + typeof(CompiledModelTestBase.Enum64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum64.SetGetter( + CompiledModelTestBase.Enum64? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum64(instance).HasValue)); + nullableEnum64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? value) => + { + ManyTypesUnsafeAccessors.NullableEnum64(instance) = (value == null ? value : ((CompiledModelTestBase.Enum64? )(((CompiledModelTestBase.Enum64)value)))); + return instance; + }); + nullableEnum64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? value) => + { + ManyTypesUnsafeAccessors.NullableEnum64(instance) = (value == null ? value : ((CompiledModelTestBase.Enum64? )(((CompiledModelTestBase.Enum64)value)))); + return instance; + }); + nullableEnum64.SetAccessors( + CompiledModelTestBase.Enum64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum64, 132), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum64)); + nullableEnum64.SetPropertyIndexes( + index: 132, + originalValueIndex: 132, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))); + nullableEnum64.SetComparer(new NullableValueComparer(nullableEnum64.TypeMapping.Comparer)); + nullableEnum64.SetKeyComparer(new NullableValueComparer(nullableEnum64.TypeMapping.KeyComparer)); + + var nullableEnum64Array = runtimeEntityType.AddProperty( + "NullableEnum64Array", + typeof(CompiledModelTestBase.Enum64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum64Array.SetGetter( + CompiledModelTestBase.Enum64? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64Array(instance) == null); + nullableEnum64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum64Array(instance) = value; + return instance; + }); + nullableEnum64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum64Array(instance) = value; + return instance; + }); + nullableEnum64Array.SetAccessors( + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum64Array, 133), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum64Array)); + nullableEnum64Array.SetPropertyIndexes( + index: 133, + originalValueIndex: 133, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var nullableEnum64ArrayElementType = nullableEnum64Array.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + nullableEnum64ArrayElementType.TypeMapping = nullableEnum64Array.TypeMapping.ElementTypeMapping; + nullableEnum64ArrayElementType.SetComparer(new NullableValueComparer(nullableEnum64ArrayElementType.TypeMapping.Comparer)); + + var nullableEnum64AsString = runtimeEntityType.AddProperty( + "NullableEnum64AsString", + typeof(CompiledModelTestBase.Enum64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum64AsString.SetGetter( + CompiledModelTestBase.Enum64? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum64AsString(instance).HasValue)); + nullableEnum64AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum64? )(((CompiledModelTestBase.Enum64)value)))); + return instance; + }); + nullableEnum64AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum64? )(((CompiledModelTestBase.Enum64)value)))); + return instance; + }); + nullableEnum64AsString.SetAccessors( + CompiledModelTestBase.Enum64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum64AsString, 134), + CompiledModelTestBase.Enum64? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum64AsString)); + nullableEnum64AsString.SetPropertyIndexes( + index: 134, + originalValueIndex: 134, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64AsString.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))); + nullableEnum64AsString.SetComparer(new NullableValueComparer(nullableEnum64AsString.TypeMapping.Comparer)); + nullableEnum64AsString.SetKeyComparer(new NullableValueComparer(nullableEnum64AsString.TypeMapping.KeyComparer)); + + var nullableEnum64AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum64AsStringArray", + typeof(CompiledModelTestBase.Enum64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum64AsStringArray.SetGetter( + CompiledModelTestBase.Enum64? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(instance) == null); + nullableEnum64AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(instance) = value; + return instance; + }); + nullableEnum64AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(instance) = value; + return instance; + }); + nullableEnum64AsStringArray.SetAccessors( + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum64AsStringArray, 135), + CompiledModelTestBase.Enum64? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum64AsStringArray)); + nullableEnum64AsStringArray.SetPropertyIndexes( + index: 135, + originalValueIndex: 135, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var nullableEnum64AsStringArrayElementType = nullableEnum64AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + nullableEnum64AsStringArrayElementType.TypeMapping = nullableEnum64AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnum64AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnum64AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnum64AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum64AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(instance) == null); + nullableEnum64AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(instance) = value; + return instance; + }); + nullableEnum64AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(instance) = value; + return instance; + }); + nullableEnum64AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum64AsStringCollection, 136), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum64AsStringCollection)); + nullableEnum64AsStringCollection.SetPropertyIndexes( + index: 136, + originalValueIndex: 136, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var nullableEnum64AsStringCollectionElementType = nullableEnum64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + nullableEnum64AsStringCollectionElementType.TypeMapping = nullableEnum64AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnum64AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnum64AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnum64Collection = runtimeEntityType.AddProperty( + "NullableEnum64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum64Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum64Collection(instance) == null); + nullableEnum64Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum64Collection(instance) = value; + return instance; + }); + nullableEnum64Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum64Collection(instance) = value; + return instance; + }); + nullableEnum64Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum64Collection, 137), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum64Collection)); + nullableEnum64Collection.SetPropertyIndexes( + index: 137, + originalValueIndex: 137, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum64Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum64>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum64 v1, CompiledModelTestBase.Enum64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum64 (CompiledModelTestBase.Enum64 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.Enum64 value) => ((long)value), + CompiledModelTestBase.Enum64 (long value) => ((CompiledModelTestBase.Enum64)value))))); + var nullableEnum64CollectionElementType = nullableEnum64Collection.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + nullableEnum64CollectionElementType.TypeMapping = nullableEnum64Collection.TypeMapping.ElementTypeMapping; + nullableEnum64CollectionElementType.SetComparer(new NullableValueComparer(nullableEnum64CollectionElementType.TypeMapping.Comparer)); + + var nullableEnum8 = runtimeEntityType.AddProperty( + "NullableEnum8", + typeof(CompiledModelTestBase.Enum8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum8.SetGetter( + CompiledModelTestBase.Enum8? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum8(instance).HasValue)); + nullableEnum8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? value) => + { + ManyTypesUnsafeAccessors.NullableEnum8(instance) = (value == null ? value : ((CompiledModelTestBase.Enum8? )(((CompiledModelTestBase.Enum8)value)))); + return instance; + }); + nullableEnum8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? value) => + { + ManyTypesUnsafeAccessors.NullableEnum8(instance) = (value == null ? value : ((CompiledModelTestBase.Enum8? )(((CompiledModelTestBase.Enum8)value)))); + return instance; + }); + nullableEnum8.SetAccessors( + CompiledModelTestBase.Enum8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum8, 138), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum8)); + nullableEnum8.SetPropertyIndexes( + index: 138, + originalValueIndex: 138, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))); + nullableEnum8.SetComparer(new NullableValueComparer(nullableEnum8.TypeMapping.Comparer)); + nullableEnum8.SetKeyComparer(new NullableValueComparer(nullableEnum8.TypeMapping.KeyComparer)); + + var nullableEnum8Array = runtimeEntityType.AddProperty( + "NullableEnum8Array", + typeof(CompiledModelTestBase.Enum8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum8Array.SetGetter( + CompiledModelTestBase.Enum8? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8Array(instance) == null); + nullableEnum8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum8Array(instance) = value; + return instance; + }); + nullableEnum8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum8Array(instance) = value; + return instance; + }); + nullableEnum8Array.SetAccessors( + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum8Array, 139), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum8Array)); + nullableEnum8Array.SetPropertyIndexes( + index: 139, + originalValueIndex: 139, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var nullableEnum8ArrayElementType = nullableEnum8Array.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + nullableEnum8ArrayElementType.TypeMapping = nullableEnum8Array.TypeMapping.ElementTypeMapping; + nullableEnum8ArrayElementType.SetComparer(new NullableValueComparer(nullableEnum8ArrayElementType.TypeMapping.Comparer)); + + var nullableEnum8AsString = runtimeEntityType.AddProperty( + "NullableEnum8AsString", + typeof(CompiledModelTestBase.Enum8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnum8AsString.SetGetter( + CompiledModelTestBase.Enum8? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnum8AsString(instance).HasValue)); + nullableEnum8AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum8? )(((CompiledModelTestBase.Enum8)value)))); + return instance; + }); + nullableEnum8AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsString(instance) = (value == null ? value : ((CompiledModelTestBase.Enum8? )(((CompiledModelTestBase.Enum8)value)))); + return instance; + }); + nullableEnum8AsString.SetAccessors( + CompiledModelTestBase.Enum8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum8AsString, 140), + CompiledModelTestBase.Enum8? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum8AsString)); + nullableEnum8AsString.SetPropertyIndexes( + index: 140, + originalValueIndex: 140, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8AsString.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))); + nullableEnum8AsString.SetComparer(new NullableValueComparer(nullableEnum8AsString.TypeMapping.Comparer)); + nullableEnum8AsString.SetKeyComparer(new NullableValueComparer(nullableEnum8AsString.TypeMapping.KeyComparer)); + + var nullableEnum8AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum8AsStringArray", + typeof(CompiledModelTestBase.Enum8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum8AsStringArray.SetGetter( + CompiledModelTestBase.Enum8? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(instance) == null); + nullableEnum8AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(instance) = value; + return instance; + }); + nullableEnum8AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.Enum8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(instance) = value; + return instance; + }); + nullableEnum8AsStringArray.SetAccessors( + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnum8AsStringArray, 141), + CompiledModelTestBase.Enum8? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnum8AsStringArray)); + nullableEnum8AsStringArray.SetPropertyIndexes( + index: 141, + originalValueIndex: 141, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var nullableEnum8AsStringArrayElementType = nullableEnum8AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + nullableEnum8AsStringArrayElementType.TypeMapping = nullableEnum8AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnum8AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnum8AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnum8AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum8AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(instance) == null); + nullableEnum8AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(instance) = value; + return instance; + }); + nullableEnum8AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(instance) = value; + return instance; + }); + nullableEnum8AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum8AsStringCollection, 142), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum8AsStringCollection)); + nullableEnum8AsStringCollection.SetPropertyIndexes( + index: 142, + originalValueIndex: 142, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var nullableEnum8AsStringCollectionElementType = nullableEnum8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + nullableEnum8AsStringCollectionElementType.TypeMapping = nullableEnum8AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnum8AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnum8AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnum8Collection = runtimeEntityType.AddProperty( + "NullableEnum8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnum8Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnum8Collection(instance) == null); + nullableEnum8Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum8Collection(instance) = value; + return instance; + }); + nullableEnum8Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnum8Collection(instance) = value; + return instance; + }); + nullableEnum8Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnum8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnum8Collection, 143), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnum8Collection)); + nullableEnum8Collection.SetPropertyIndexes( + index: 143, + originalValueIndex: 143, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnum8Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.Enum8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.Enum8>( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.Enum8 v1, CompiledModelTestBase.Enum8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.Enum8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.Enum8 (CompiledModelTestBase.Enum8 v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (CompiledModelTestBase.Enum8 value) => ((short)value), + CompiledModelTestBase.Enum8 (short value) => ((CompiledModelTestBase.Enum8)value))))); + var nullableEnum8CollectionElementType = nullableEnum8Collection.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + nullableEnum8CollectionElementType.TypeMapping = nullableEnum8Collection.TypeMapping.ElementTypeMapping; + nullableEnum8CollectionElementType.SetComparer(new NullableValueComparer(nullableEnum8CollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU16 = runtimeEntityType.AddProperty( + "NullableEnumU16", + typeof(CompiledModelTestBase.EnumU16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU16.SetGetter( + CompiledModelTestBase.EnumU16? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU16(instance).HasValue)); + nullableEnumU16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU16? )(((CompiledModelTestBase.EnumU16)value)))); + return instance; + }); + nullableEnumU16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU16? )(((CompiledModelTestBase.EnumU16)value)))); + return instance; + }); + nullableEnumU16.SetAccessors( + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU16, 144), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU16)); + nullableEnumU16.SetPropertyIndexes( + index: 144, + originalValueIndex: 144, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))); + nullableEnumU16.SetComparer(new NullableValueComparer(nullableEnumU16.TypeMapping.Comparer)); + nullableEnumU16.SetKeyComparer(new NullableValueComparer(nullableEnumU16.TypeMapping.KeyComparer)); + + var nullableEnumU16Array = runtimeEntityType.AddProperty( + "NullableEnumU16Array", + typeof(CompiledModelTestBase.EnumU16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU16Array.SetGetter( + CompiledModelTestBase.EnumU16? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16Array(instance) == null); + nullableEnumU16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16Array(instance) = value; + return instance; + }); + nullableEnumU16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16Array(instance) = value; + return instance; + }); + nullableEnumU16Array.SetAccessors( + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU16Array, 145), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU16Array)); + nullableEnumU16Array.SetPropertyIndexes( + index: 145, + originalValueIndex: 145, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var nullableEnumU16ArrayElementType = nullableEnumU16Array.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + nullableEnumU16ArrayElementType.TypeMapping = nullableEnumU16Array.TypeMapping.ElementTypeMapping; + nullableEnumU16ArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU16ArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU16AsString = runtimeEntityType.AddProperty( + "NullableEnumU16AsString", + typeof(CompiledModelTestBase.EnumU16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU16AsString.SetGetter( + CompiledModelTestBase.EnumU16? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU16AsString(instance).HasValue)); + nullableEnumU16AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU16? )(((CompiledModelTestBase.EnumU16)value)))); + return instance; + }); + nullableEnumU16AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU16? )(((CompiledModelTestBase.EnumU16)value)))); + return instance; + }); + nullableEnumU16AsString.SetAccessors( + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU16AsString, 146), + CompiledModelTestBase.EnumU16? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU16AsString)); + nullableEnumU16AsString.SetPropertyIndexes( + index: 146, + originalValueIndex: 146, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16AsString.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))); + nullableEnumU16AsString.SetComparer(new NullableValueComparer(nullableEnumU16AsString.TypeMapping.Comparer)); + nullableEnumU16AsString.SetKeyComparer(new NullableValueComparer(nullableEnumU16AsString.TypeMapping.KeyComparer)); + + var nullableEnumU16AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU16AsStringArray", + typeof(CompiledModelTestBase.EnumU16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU16AsStringArray.SetGetter( + CompiledModelTestBase.EnumU16? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(instance) == null); + nullableEnumU16AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(instance) = value; + return instance; + }); + nullableEnumU16AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU16? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(instance) = value; + return instance; + }); + nullableEnumU16AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU16AsStringArray, 147), + CompiledModelTestBase.EnumU16? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU16AsStringArray)); + nullableEnumU16AsStringArray.SetPropertyIndexes( + index: 147, + originalValueIndex: 147, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var nullableEnumU16AsStringArrayElementType = nullableEnumU16AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + nullableEnumU16AsStringArrayElementType.TypeMapping = nullableEnumU16AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnumU16AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU16AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU16AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU16AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(instance) == null); + nullableEnumU16AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU16AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU16AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU16AsStringCollection, 148), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU16AsStringCollection)); + nullableEnumU16AsStringCollection.SetPropertyIndexes( + index: 148, + originalValueIndex: 148, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var nullableEnumU16AsStringCollectionElementType = nullableEnumU16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + nullableEnumU16AsStringCollectionElementType.TypeMapping = nullableEnumU16AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnumU16AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU16AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU16Collection = runtimeEntityType.AddProperty( + "NullableEnumU16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU16Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU16Collection(instance) == null); + nullableEnumU16Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16Collection(instance) = value; + return instance; + }); + nullableEnumU16Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU16Collection(instance) = value; + return instance; + }); + nullableEnumU16Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU16Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU16Collection, 149), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU16Collection)); + nullableEnumU16Collection.SetPropertyIndexes( + index: 149, + originalValueIndex: 149, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU16Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU16>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU16>( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU16 v1, CompiledModelTestBase.EnumU16 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU16 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU16 (CompiledModelTestBase.EnumU16 v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.EnumU16 value) => ((int)value), + CompiledModelTestBase.EnumU16 (int value) => ((CompiledModelTestBase.EnumU16)value))))); + var nullableEnumU16CollectionElementType = nullableEnumU16Collection.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + nullableEnumU16CollectionElementType.TypeMapping = nullableEnumU16Collection.TypeMapping.ElementTypeMapping; + nullableEnumU16CollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU16CollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU32 = runtimeEntityType.AddProperty( + "NullableEnumU32", + typeof(CompiledModelTestBase.EnumU32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU32.SetGetter( + CompiledModelTestBase.EnumU32? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU32(instance).HasValue)); + nullableEnumU32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU32? )(((CompiledModelTestBase.EnumU32)value)))); + return instance; + }); + nullableEnumU32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU32? )(((CompiledModelTestBase.EnumU32)value)))); + return instance; + }); + nullableEnumU32.SetAccessors( + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU32, 150), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU32)); + nullableEnumU32.SetPropertyIndexes( + index: 150, + originalValueIndex: 150, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))); + nullableEnumU32.SetComparer(new NullableValueComparer(nullableEnumU32.TypeMapping.Comparer)); + nullableEnumU32.SetKeyComparer(new NullableValueComparer(nullableEnumU32.TypeMapping.KeyComparer)); + + var nullableEnumU32Array = runtimeEntityType.AddProperty( + "NullableEnumU32Array", + typeof(CompiledModelTestBase.EnumU32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU32Array.SetGetter( + CompiledModelTestBase.EnumU32? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32Array(instance) == null); + nullableEnumU32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32Array(instance) = value; + return instance; + }); + nullableEnumU32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32Array(instance) = value; + return instance; + }); + nullableEnumU32Array.SetAccessors( + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU32Array, 151), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU32Array)); + nullableEnumU32Array.SetPropertyIndexes( + index: 151, + originalValueIndex: 151, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var nullableEnumU32ArrayElementType = nullableEnumU32Array.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + nullableEnumU32ArrayElementType.TypeMapping = nullableEnumU32Array.TypeMapping.ElementTypeMapping; + nullableEnumU32ArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU32ArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU32AsString = runtimeEntityType.AddProperty( + "NullableEnumU32AsString", + typeof(CompiledModelTestBase.EnumU32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU32AsString.SetGetter( + CompiledModelTestBase.EnumU32? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU32AsString(instance).HasValue)); + nullableEnumU32AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU32? )(((CompiledModelTestBase.EnumU32)value)))); + return instance; + }); + nullableEnumU32AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU32? )(((CompiledModelTestBase.EnumU32)value)))); + return instance; + }); + nullableEnumU32AsString.SetAccessors( + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU32AsString, 152), + CompiledModelTestBase.EnumU32? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU32AsString)); + nullableEnumU32AsString.SetPropertyIndexes( + index: 152, + originalValueIndex: 152, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32AsString.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))); + nullableEnumU32AsString.SetComparer(new NullableValueComparer(nullableEnumU32AsString.TypeMapping.Comparer)); + nullableEnumU32AsString.SetKeyComparer(new NullableValueComparer(nullableEnumU32AsString.TypeMapping.KeyComparer)); + + var nullableEnumU32AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU32AsStringArray", + typeof(CompiledModelTestBase.EnumU32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU32AsStringArray.SetGetter( + CompiledModelTestBase.EnumU32? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(instance) == null); + nullableEnumU32AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(instance) = value; + return instance; + }); + nullableEnumU32AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU32? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(instance) = value; + return instance; + }); + nullableEnumU32AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU32AsStringArray, 153), + CompiledModelTestBase.EnumU32? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU32AsStringArray)); + nullableEnumU32AsStringArray.SetPropertyIndexes( + index: 153, + originalValueIndex: 153, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var nullableEnumU32AsStringArrayElementType = nullableEnumU32AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + nullableEnumU32AsStringArrayElementType.TypeMapping = nullableEnumU32AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnumU32AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU32AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU32AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU32AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(instance) == null); + nullableEnumU32AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU32AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU32AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU32AsStringCollection, 154), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU32AsStringCollection)); + nullableEnumU32AsStringCollection.SetPropertyIndexes( + index: 154, + originalValueIndex: 154, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var nullableEnumU32AsStringCollectionElementType = nullableEnumU32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + nullableEnumU32AsStringCollectionElementType.TypeMapping = nullableEnumU32AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnumU32AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU32AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU32Collection = runtimeEntityType.AddProperty( + "NullableEnumU32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU32Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU32Collection(instance) == null); + nullableEnumU32Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32Collection(instance) = value; + return instance; + }); + nullableEnumU32Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU32Collection(instance) = value; + return instance; + }); + nullableEnumU32Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU32Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU32Collection, 155), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU32Collection)); + nullableEnumU32Collection.SetPropertyIndexes( + index: 155, + originalValueIndex: 155, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU32Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU32>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU32>( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU32 v1, CompiledModelTestBase.EnumU32 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU32 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU32 (CompiledModelTestBase.EnumU32 v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (CompiledModelTestBase.EnumU32 value) => ((long)value), + CompiledModelTestBase.EnumU32 (long value) => ((CompiledModelTestBase.EnumU32)value))))); + var nullableEnumU32CollectionElementType = nullableEnumU32Collection.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + nullableEnumU32CollectionElementType.TypeMapping = nullableEnumU32Collection.TypeMapping.ElementTypeMapping; + nullableEnumU32CollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU32CollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU64 = runtimeEntityType.AddProperty( + "NullableEnumU64", + typeof(CompiledModelTestBase.EnumU64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU64.SetGetter( + CompiledModelTestBase.EnumU64? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU64(instance).HasValue)); + nullableEnumU64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU64? )(((CompiledModelTestBase.EnumU64)value)))); + return instance; + }); + nullableEnumU64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU64? )(((CompiledModelTestBase.EnumU64)value)))); + return instance; + }); + nullableEnumU64.SetAccessors( + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU64, 156), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU64)); + nullableEnumU64.SetPropertyIndexes( + index: 156, + originalValueIndex: 156, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))); + nullableEnumU64.SetComparer(new NullableValueComparer(nullableEnumU64.TypeMapping.Comparer)); + nullableEnumU64.SetKeyComparer(new NullableValueComparer(nullableEnumU64.TypeMapping.KeyComparer)); + + var nullableEnumU64Array = runtimeEntityType.AddProperty( + "NullableEnumU64Array", + typeof(CompiledModelTestBase.EnumU64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU64Array.SetGetter( + CompiledModelTestBase.EnumU64? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64Array(instance) == null); + nullableEnumU64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64Array(instance) = value; + return instance; + }); + nullableEnumU64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64Array(instance) = value; + return instance; + }); + nullableEnumU64Array.SetAccessors( + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU64Array, 157), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU64Array)); + nullableEnumU64Array.SetPropertyIndexes( + index: 157, + originalValueIndex: 157, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var nullableEnumU64ArrayElementType = nullableEnumU64Array.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + nullableEnumU64ArrayElementType.TypeMapping = nullableEnumU64Array.TypeMapping.ElementTypeMapping; + nullableEnumU64ArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU64ArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU64AsString = runtimeEntityType.AddProperty( + "NullableEnumU64AsString", + typeof(CompiledModelTestBase.EnumU64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU64AsString.SetGetter( + CompiledModelTestBase.EnumU64? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU64AsString(instance).HasValue)); + nullableEnumU64AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU64? )(((CompiledModelTestBase.EnumU64)value)))); + return instance; + }); + nullableEnumU64AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU64? )(((CompiledModelTestBase.EnumU64)value)))); + return instance; + }); + nullableEnumU64AsString.SetAccessors( + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU64AsString, 158), + CompiledModelTestBase.EnumU64? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU64AsString)); + nullableEnumU64AsString.SetPropertyIndexes( + index: 158, + originalValueIndex: 158, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64AsString.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))); + nullableEnumU64AsString.SetComparer(new NullableValueComparer(nullableEnumU64AsString.TypeMapping.Comparer)); + nullableEnumU64AsString.SetKeyComparer(new NullableValueComparer(nullableEnumU64AsString.TypeMapping.KeyComparer)); + + var nullableEnumU64AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU64AsStringArray", + typeof(CompiledModelTestBase.EnumU64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU64AsStringArray.SetGetter( + CompiledModelTestBase.EnumU64? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(instance) == null); + nullableEnumU64AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(instance) = value; + return instance; + }); + nullableEnumU64AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU64? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(instance) = value; + return instance; + }); + nullableEnumU64AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU64AsStringArray, 159), + CompiledModelTestBase.EnumU64? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU64AsStringArray)); + nullableEnumU64AsStringArray.SetPropertyIndexes( + index: 159, + originalValueIndex: 159, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var nullableEnumU64AsStringArrayElementType = nullableEnumU64AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + nullableEnumU64AsStringArrayElementType.TypeMapping = nullableEnumU64AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnumU64AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU64AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU64AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU64AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(instance) == null); + nullableEnumU64AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU64AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU64AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU64AsStringCollection, 160), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU64AsStringCollection)); + nullableEnumU64AsStringCollection.SetPropertyIndexes( + index: 160, + originalValueIndex: 160, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var nullableEnumU64AsStringCollectionElementType = nullableEnumU64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + nullableEnumU64AsStringCollectionElementType.TypeMapping = nullableEnumU64AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnumU64AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU64AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU64Collection = runtimeEntityType.AddProperty( + "NullableEnumU64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU64Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU64Collection(instance) == null); + nullableEnumU64Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64Collection(instance) = value; + return instance; + }); + nullableEnumU64Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU64Collection(instance) = value; + return instance; + }); + nullableEnumU64Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU64Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU64Collection, 161), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU64Collection)); + nullableEnumU64Collection.SetPropertyIndexes( + index: 161, + originalValueIndex: 161, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU64Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU64>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU64>( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU64 v1, CompiledModelTestBase.EnumU64 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU64 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU64 (CompiledModelTestBase.EnumU64 v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value)))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (CompiledModelTestBase.EnumU64 value) => ((decimal)(((long)value))), + CompiledModelTestBase.EnumU64 (decimal value) => ((CompiledModelTestBase.EnumU64)(((long)value))))))); + var nullableEnumU64CollectionElementType = nullableEnumU64Collection.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + nullableEnumU64CollectionElementType.TypeMapping = nullableEnumU64Collection.TypeMapping.ElementTypeMapping; + nullableEnumU64CollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU64CollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU8 = runtimeEntityType.AddProperty( + "NullableEnumU8", + typeof(CompiledModelTestBase.EnumU8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU8.SetGetter( + CompiledModelTestBase.EnumU8? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU8(instance).HasValue)); + nullableEnumU8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU8? )(((CompiledModelTestBase.EnumU8)value)))); + return instance; + }); + nullableEnumU8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU8? )(((CompiledModelTestBase.EnumU8)value)))); + return instance; + }); + nullableEnumU8.SetAccessors( + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU8, 162), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU8)); + nullableEnumU8.SetPropertyIndexes( + index: 162, + originalValueIndex: 162, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))); + nullableEnumU8.SetComparer(new NullableValueComparer(nullableEnumU8.TypeMapping.Comparer)); + nullableEnumU8.SetKeyComparer(new NullableValueComparer(nullableEnumU8.TypeMapping.KeyComparer)); + + var nullableEnumU8Array = runtimeEntityType.AddProperty( + "NullableEnumU8Array", + typeof(CompiledModelTestBase.EnumU8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU8Array.SetGetter( + CompiledModelTestBase.EnumU8? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8Array(instance) == null); + nullableEnumU8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8Array(instance) = value; + return instance; + }); + nullableEnumU8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8Array(instance) = value; + return instance; + }); + nullableEnumU8Array.SetAccessors( + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU8Array, 163), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU8Array)); + nullableEnumU8Array.SetPropertyIndexes( + index: 163, + originalValueIndex: 163, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var nullableEnumU8ArrayElementType = nullableEnumU8Array.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + nullableEnumU8ArrayElementType.TypeMapping = nullableEnumU8Array.TypeMapping.ElementTypeMapping; + nullableEnumU8ArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU8ArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU8AsString = runtimeEntityType.AddProperty( + "NullableEnumU8AsString", + typeof(CompiledModelTestBase.EnumU8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableEnumU8AsString.SetGetter( + CompiledModelTestBase.EnumU8? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableEnumU8AsString(instance).HasValue)); + nullableEnumU8AsString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU8? )(((CompiledModelTestBase.EnumU8)value)))); + return instance; + }); + nullableEnumU8AsString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsString(instance) = (value == null ? value : ((CompiledModelTestBase.EnumU8? )(((CompiledModelTestBase.EnumU8)value)))); + return instance; + }); + nullableEnumU8AsString.SetAccessors( + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU8AsString, 164), + CompiledModelTestBase.EnumU8? (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU8AsString)); + nullableEnumU8AsString.SetPropertyIndexes( + index: 164, + originalValueIndex: 164, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8AsString.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))); + nullableEnumU8AsString.SetComparer(new NullableValueComparer(nullableEnumU8AsString.TypeMapping.Comparer)); + nullableEnumU8AsString.SetKeyComparer(new NullableValueComparer(nullableEnumU8AsString.TypeMapping.KeyComparer)); + + var nullableEnumU8AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU8AsStringArray", + typeof(CompiledModelTestBase.EnumU8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU8AsStringArray.SetGetter( + CompiledModelTestBase.EnumU8? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(instance) == null); + nullableEnumU8AsStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(instance) = value; + return instance; + }); + nullableEnumU8AsStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, CompiledModelTestBase.EnumU8? [] value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(instance) = value; + return instance; + }); + nullableEnumU8AsStringArray.SetAccessors( + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableEnumU8AsStringArray, 165), + CompiledModelTestBase.EnumU8? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableEnumU8AsStringArray)); + nullableEnumU8AsStringArray.SetPropertyIndexes( + index: 165, + originalValueIndex: 165, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8AsStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var nullableEnumU8AsStringArrayElementType = nullableEnumU8AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + nullableEnumU8AsStringArrayElementType.TypeMapping = nullableEnumU8AsStringArray.TypeMapping.ElementTypeMapping; + nullableEnumU8AsStringArrayElementType.SetComparer(new NullableValueComparer(nullableEnumU8AsStringArrayElementType.TypeMapping.Comparer)); + + var nullableEnumU8AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU8AsStringCollection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(instance) == null); + nullableEnumU8AsStringCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU8AsStringCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(instance) = value; + return instance; + }); + nullableEnumU8AsStringCollection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8AsStringCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU8AsStringCollection, 166), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU8AsStringCollection)); + nullableEnumU8AsStringCollection.SetPropertyIndexes( + index: 166, + originalValueIndex: 166, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8AsStringCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var nullableEnumU8AsStringCollectionElementType = nullableEnumU8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + nullableEnumU8AsStringCollectionElementType.TypeMapping = nullableEnumU8AsStringCollection.TypeMapping.ElementTypeMapping; + nullableEnumU8AsStringCollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU8AsStringCollectionElementType.TypeMapping.Comparer)); + + var nullableEnumU8Collection = runtimeEntityType.AddProperty( + "NullableEnumU8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableEnumU8Collection.SetGetter( + List (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8Collection(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableEnumU8Collection(instance) == null); + nullableEnumU8Collection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8Collection(instance) = value; + return instance; + }); + nullableEnumU8Collection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, List value) => + { + ManyTypesUnsafeAccessors.NullableEnumU8Collection(instance) = value; + return instance; + }); + nullableEnumU8Collection.SetAccessors( + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableEnumU8Collection(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(nullableEnumU8Collection, 167), + List (IInternalEntry entry) => entry.GetCurrentValue>(nullableEnumU8Collection)); + nullableEnumU8Collection.SetPropertyIndexes( + index: 167, + originalValueIndex: 167, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableEnumU8Collection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + keyComparer: new ListOfNullableValueTypesComparer, CompiledModelTestBase.EnumU8>(new NullableValueComparer(new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter, CompiledModelTestBase.EnumU8>( + new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)))), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.EnumU8 v1, CompiledModelTestBase.EnumU8 v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.EnumU8 v) => ((object)v).GetHashCode(), + CompiledModelTestBase.EnumU8 (CompiledModelTestBase.EnumU8 v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + converter: new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteReaderWriter.Instance, + new ValueConverter( + byte (CompiledModelTestBase.EnumU8 value) => ((byte)value), + CompiledModelTestBase.EnumU8 (byte value) => ((CompiledModelTestBase.EnumU8)value))))); + var nullableEnumU8CollectionElementType = nullableEnumU8Collection.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + nullableEnumU8CollectionElementType.TypeMapping = nullableEnumU8Collection.TypeMapping.ElementTypeMapping; + nullableEnumU8CollectionElementType.SetComparer(new NullableValueComparer(nullableEnumU8CollectionElementType.TypeMapping.Comparer)); + + var nullableFloat = runtimeEntityType.AddProperty( + "NullableFloat", + typeof(float?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableFloat", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableFloat.SetGetter( + float? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableFloat(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableFloat(instance).HasValue)); + nullableFloat.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float? value) => + { + ManyTypesUnsafeAccessors.NullableFloat(instance) = value; + return instance; + }); + nullableFloat.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float? value) => + { + ManyTypesUnsafeAccessors.NullableFloat(instance) = value; + return instance; + }); + nullableFloat.SetAccessors( + float? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableFloat(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableFloat(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float? (IInternalEntry entry) => entry.ReadOriginalValue(nullableFloat, 168), + float? (IInternalEntry entry) => entry.GetCurrentValue(nullableFloat)); + nullableFloat.SetPropertyIndexes( + index: 168, + originalValueIndex: 168, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableFloat.TypeMapping = JetFloatTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + keyComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + providerValueComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v)); + nullableFloat.SetComparer(new NullableValueComparer(nullableFloat.TypeMapping.Comparer)); + nullableFloat.SetKeyComparer(new NullableValueComparer(nullableFloat.TypeMapping.KeyComparer)); + + var nullableFloatArray = runtimeEntityType.AddProperty( + "NullableFloatArray", + typeof(float?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableFloatArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableFloatArray.SetGetter( + float? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableFloatArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableFloatArray(instance) == null); + nullableFloatArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float? [] value) => + { + ManyTypesUnsafeAccessors.NullableFloatArray(instance) = value; + return instance; + }); + nullableFloatArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, float? [] value) => + { + ManyTypesUnsafeAccessors.NullableFloatArray(instance) = value; + return instance; + }); + nullableFloatArray.SetAccessors( + float? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableFloatArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableFloatArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + float? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableFloatArray, 169), + float? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableFloatArray)); + nullableFloatArray.SetPropertyIndexes( + index: 169, + originalValueIndex: 169, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableFloatArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonFloatReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonFloatReaderWriter.Instance), + elementMapping: JetFloatTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + keyComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v), + providerValueComparer: new ValueComparer( + bool (float v1, float v2) => v1.Equals(v2), + int (float v) => ((object)v).GetHashCode(), + float (float v) => v))); + var nullableFloatArrayElementType = nullableFloatArray.SetElementType(typeof(float?), + nullable: true); + nullableFloatArrayElementType.TypeMapping = nullableFloatArray.TypeMapping.ElementTypeMapping; + nullableFloatArrayElementType.SetComparer(new NullableValueComparer(nullableFloatArrayElementType.TypeMapping.Comparer)); + + var nullableGuid = runtimeEntityType.AddProperty( + "NullableGuid", + typeof(Guid?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableGuid", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableGuid.SetGetter( + Guid? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableGuid(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableGuid(instance).HasValue)); + nullableGuid.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid? value) => + { + ManyTypesUnsafeAccessors.NullableGuid(instance) = value; + return instance; + }); + nullableGuid.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid? value) => + { + ManyTypesUnsafeAccessors.NullableGuid(instance) = value; + return instance; + }); + nullableGuid.SetAccessors( + Guid? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableGuid(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableGuid(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid? (IInternalEntry entry) => entry.ReadOriginalValue(nullableGuid, 170), + Guid? (IInternalEntry entry) => entry.GetCurrentValue(nullableGuid)); + nullableGuid.SetPropertyIndexes( + index: 170, + originalValueIndex: 170, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableGuid.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + nullableGuid.SetComparer(new NullableValueComparer(nullableGuid.TypeMapping.Comparer)); + nullableGuid.SetKeyComparer(new NullableValueComparer(nullableGuid.TypeMapping.KeyComparer)); + + var nullableGuidArray = runtimeEntityType.AddProperty( + "NullableGuidArray", + typeof(Guid?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableGuidArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableGuidArray.SetGetter( + Guid? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableGuidArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableGuidArray(instance) == null); + nullableGuidArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid? [] value) => + { + ManyTypesUnsafeAccessors.NullableGuidArray(instance) = value; + return instance; + }); + nullableGuidArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Guid? [] value) => + { + ManyTypesUnsafeAccessors.NullableGuidArray(instance) = value; + return instance; + }); + nullableGuidArray.SetAccessors( + Guid? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableGuidArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableGuidArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Guid? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableGuidArray, 171), + Guid? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableGuidArray)); + nullableGuidArray.SetPropertyIndexes( + index: 171, + originalValueIndex: 171, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableGuidArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonGuidReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonGuidReaderWriter.Instance), + elementMapping: JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v))); + var nullableGuidArrayElementType = nullableGuidArray.SetElementType(typeof(Guid?), + nullable: true); + nullableGuidArrayElementType.TypeMapping = nullableGuidArray.TypeMapping.ElementTypeMapping; + nullableGuidArrayElementType.SetComparer(new NullableValueComparer(nullableGuidArrayElementType.TypeMapping.Comparer)); + + var nullableIPAddress = runtimeEntityType.AddProperty( + "NullableIPAddress", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableIPAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableIPAddress.SetGetter( + IPAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableIPAddress(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableIPAddress(instance) == null); + nullableIPAddress.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.NullableIPAddress(instance) = value; + return instance; + }); + nullableIPAddress.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress value) => + { + ManyTypesUnsafeAccessors.NullableIPAddress(instance) = value; + return instance; + }); + nullableIPAddress.SetAccessors( + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableIPAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableIPAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress (IInternalEntry entry) => entry.ReadOriginalValue(nullableIPAddress, 172), + IPAddress (IInternalEntry entry) => entry.GetCurrentValue(nullableIPAddress)); + nullableIPAddress.SetPropertyIndexes( + index: 172, + originalValueIndex: 172, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableIPAddress.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))); + + var nullableIPAddressArray = runtimeEntityType.AddProperty( + "NullableIPAddressArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableIPAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableIPAddressArray.SetGetter( + IPAddress[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableIPAddressArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableIPAddressArray(instance) == null); + nullableIPAddressArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress[] value) => + { + ManyTypesUnsafeAccessors.NullableIPAddressArray(instance) = value; + return instance; + }); + nullableIPAddressArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IPAddress[] value) => + { + ManyTypesUnsafeAccessors.NullableIPAddressArray(instance) = value; + return instance; + }); + nullableIPAddressArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableIPAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableIPAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(nullableIPAddressArray, 173), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(nullableIPAddressArray)); + nullableIPAddressArray.SetPropertyIndexes( + index: 173, + originalValueIndex: 173, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableIPAddressArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var nullableIPAddressArrayElementType = nullableIPAddressArray.SetElementType(typeof(IPAddress), + nullable: true); + nullableIPAddressArrayElementType.TypeMapping = nullableIPAddressArray.TypeMapping.ElementTypeMapping; + + var nullableInt16 = runtimeEntityType.AddProperty( + "NullableInt16", + typeof(short?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableInt16.SetGetter( + short? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableInt16(instance).HasValue)); + nullableInt16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short? value) => + { + ManyTypesUnsafeAccessors.NullableInt16(instance) = value; + return instance; + }); + nullableInt16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short? value) => + { + ManyTypesUnsafeAccessors.NullableInt16(instance) = value; + return instance; + }); + nullableInt16.SetAccessors( + short? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short? (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt16, 174), + short? (IInternalEntry entry) => entry.GetCurrentValue(nullableInt16)); + nullableInt16.SetPropertyIndexes( + index: 174, + originalValueIndex: 174, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt16.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)); + nullableInt16.SetComparer(new NullableValueComparer(nullableInt16.TypeMapping.Comparer)); + nullableInt16.SetKeyComparer(new NullableValueComparer(nullableInt16.TypeMapping.KeyComparer)); + + var nullableInt16Array = runtimeEntityType.AddProperty( + "NullableInt16Array", + typeof(short?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableInt16Array.SetGetter( + short? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt16Array(instance) == null); + nullableInt16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt16Array(instance) = value; + return instance; + }); + nullableInt16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, short? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt16Array(instance) = value; + return instance; + }); + nullableInt16Array.SetAccessors( + short? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + short? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt16Array, 175), + short? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableInt16Array)); + nullableInt16Array.SetPropertyIndexes( + index: 175, + originalValueIndex: 175, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var nullableInt16ArrayElementType = nullableInt16Array.SetElementType(typeof(short?), + nullable: true); + nullableInt16ArrayElementType.TypeMapping = nullableInt16Array.TypeMapping.ElementTypeMapping; + nullableInt16ArrayElementType.SetComparer(new NullableValueComparer(nullableInt16ArrayElementType.TypeMapping.Comparer)); + + var nullableInt32 = runtimeEntityType.AddProperty( + "NullableInt32", + typeof(int?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableInt32.SetGetter( + int? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableInt32(instance).HasValue)); + nullableInt32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? value) => + { + ManyTypesUnsafeAccessors.NullableInt32(instance) = value; + return instance; + }); + nullableInt32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? value) => + { + ManyTypesUnsafeAccessors.NullableInt32(instance) = value; + return instance; + }); + nullableInt32.SetAccessors( + int? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt32, 176), + int? (IInternalEntry entry) => entry.GetCurrentValue(nullableInt32)); + nullableInt32.SetPropertyIndexes( + index: 176, + originalValueIndex: 176, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt32.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + nullableInt32.SetComparer(new NullableValueComparer(nullableInt32.TypeMapping.Comparer)); + nullableInt32.SetKeyComparer(new NullableValueComparer(nullableInt32.TypeMapping.KeyComparer)); + + var nullableInt32Array = runtimeEntityType.AddProperty( + "NullableInt32Array", + typeof(int?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableInt32Array.SetGetter( + int? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt32Array(instance) == null); + nullableInt32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt32Array(instance) = value; + return instance; + }); + nullableInt32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, int? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt32Array(instance) = value; + return instance; + }); + nullableInt32Array.SetAccessors( + int? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + int? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt32Array, 177), + int? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableInt32Array)); + nullableInt32Array.SetPropertyIndexes( + index: 177, + originalValueIndex: 177, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonInt32ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonInt32ReaderWriter.Instance), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v))); + var nullableInt32ArrayElementType = nullableInt32Array.SetElementType(typeof(int?), + nullable: true); + nullableInt32ArrayElementType.TypeMapping = nullableInt32Array.TypeMapping.ElementTypeMapping; + nullableInt32ArrayElementType.SetComparer(new NullableValueComparer(nullableInt32ArrayElementType.TypeMapping.Comparer)); + + var nullableInt64 = runtimeEntityType.AddProperty( + "NullableInt64", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableInt64.SetGetter( + long? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableInt64(instance).HasValue)); + nullableInt64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long? value) => + { + ManyTypesUnsafeAccessors.NullableInt64(instance) = value; + return instance; + }); + nullableInt64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long? value) => + { + ManyTypesUnsafeAccessors.NullableInt64(instance) = value; + return instance; + }); + nullableInt64.SetAccessors( + long? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long? (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt64, 178), + long? (IInternalEntry entry) => entry.GetCurrentValue(nullableInt64)); + nullableInt64.SetPropertyIndexes( + index: 178, + originalValueIndex: 178, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt64.TypeMapping = LibRedLongTypeMapping.Default; + nullableInt64.SetComparer(new NullableValueComparer(nullableInt64.TypeMapping.Comparer)); + nullableInt64.SetKeyComparer(new NullableValueComparer(nullableInt64.TypeMapping.KeyComparer)); + + var nullableInt64Array = runtimeEntityType.AddProperty( + "NullableInt64Array", + typeof(long?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableInt64Array.SetGetter( + long? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt64Array(instance) == null); + nullableInt64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt64Array(instance) = value; + return instance; + }); + nullableInt64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, long? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt64Array(instance) = value; + return instance; + }); + nullableInt64Array.SetAccessors( + long? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + long? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt64Array, 179), + long? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableInt64Array)); + nullableInt64Array.SetPropertyIndexes( + index: 179, + originalValueIndex: 179, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonInt64ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonInt64ReaderWriter.Instance), + elementMapping: LibRedLongTypeMapping.Default); + var nullableInt64ArrayElementType = nullableInt64Array.SetElementType(typeof(long?), + nullable: true); + nullableInt64ArrayElementType.TypeMapping = nullableInt64Array.TypeMapping.ElementTypeMapping; + nullableInt64ArrayElementType.SetComparer(new NullableValueComparer(nullableInt64ArrayElementType.TypeMapping.Comparer)); + + var nullableInt8 = runtimeEntityType.AddProperty( + "NullableInt8", + typeof(sbyte?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableInt8.SetGetter( + sbyte? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableInt8(instance).HasValue)); + nullableInt8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte? value) => + { + ManyTypesUnsafeAccessors.NullableInt8(instance) = value; + return instance; + }); + nullableInt8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte? value) => + { + ManyTypesUnsafeAccessors.NullableInt8(instance) = value; + return instance; + }); + nullableInt8.SetAccessors( + sbyte? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte? (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt8, 180), + sbyte? (IInternalEntry entry) => entry.GetCurrentValue(nullableInt8)); + nullableInt8.SetPropertyIndexes( + index: 180, + originalValueIndex: 180, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt8.TypeMapping = JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + keyComparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)))); + nullableInt8.SetComparer(new NullableValueComparer(nullableInt8.TypeMapping.Comparer)); + nullableInt8.SetKeyComparer(new NullableValueComparer(nullableInt8.TypeMapping.KeyComparer)); + + var nullableInt8Array = runtimeEntityType.AddProperty( + "NullableInt8Array", + typeof(sbyte?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableInt8Array.SetGetter( + sbyte? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableInt8Array(instance) == null); + nullableInt8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt8Array(instance) = value; + return instance; + }); + nullableInt8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, sbyte? [] value) => + { + ManyTypesUnsafeAccessors.NullableInt8Array(instance) = value; + return instance; + }); + nullableInt8Array.SetAccessors( + sbyte? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + sbyte? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableInt8Array, 181), + sbyte? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableInt8Array)); + nullableInt8Array.SetPropertyIndexes( + index: 181, + originalValueIndex: 181, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableInt8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)))), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + keyComparer: new ValueComparer( + bool (sbyte v1, sbyte v2) => v1 == v2, + int (sbyte v) => ((int)v), + sbyte (sbyte v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + converter: new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt16ReaderWriter.Instance, + new ValueConverter( + short (sbyte v) => ((short)v), + sbyte (short v) => ((sbyte)v))))); + var nullableInt8ArrayElementType = nullableInt8Array.SetElementType(typeof(sbyte?), + nullable: true); + nullableInt8ArrayElementType.TypeMapping = nullableInt8Array.TypeMapping.ElementTypeMapping; + nullableInt8ArrayElementType.SetComparer(new NullableValueComparer(nullableInt8ArrayElementType.TypeMapping.Comparer)); + + var nullablePhysicalAddress = runtimeEntityType.AddProperty( + "NullablePhysicalAddress", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullablePhysicalAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullablePhysicalAddress.SetGetter( + PhysicalAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullablePhysicalAddress(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullablePhysicalAddress(instance) == null); + nullablePhysicalAddress.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.NullablePhysicalAddress(instance) = value; + return instance; + }); + nullablePhysicalAddress.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.NullablePhysicalAddress(instance) = value; + return instance; + }); + nullablePhysicalAddress.SetAccessors( + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullablePhysicalAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullablePhysicalAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => entry.ReadOriginalValue(nullablePhysicalAddress, 182), + PhysicalAddress (IInternalEntry entry) => entry.GetCurrentValue(nullablePhysicalAddress)); + nullablePhysicalAddress.SetPropertyIndexes( + index: 182, + originalValueIndex: 182, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullablePhysicalAddress.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))); + + var nullablePhysicalAddressArray = runtimeEntityType.AddProperty( + "NullablePhysicalAddressArray", + typeof(PhysicalAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullablePhysicalAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullablePhysicalAddressArray.SetGetter( + PhysicalAddress[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(instance) == null); + nullablePhysicalAddressArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress[] value) => + { + ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(instance) = value; + return instance; + }); + nullablePhysicalAddressArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress[] value) => + { + ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(instance) = value; + return instance; + }); + nullablePhysicalAddressArray.SetAccessors( + PhysicalAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullablePhysicalAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(nullablePhysicalAddressArray, 183), + PhysicalAddress[] (IInternalEntry entry) => entry.GetCurrentValue(nullablePhysicalAddressArray)); + nullablePhysicalAddressArray.SetPropertyIndexes( + index: 183, + originalValueIndex: 183, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullablePhysicalAddressArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v))))); + var nullablePhysicalAddressArrayElementType = nullablePhysicalAddressArray.SetElementType(typeof(PhysicalAddress), + nullable: true); + nullablePhysicalAddressArrayElementType.TypeMapping = nullablePhysicalAddressArray.TypeMapping.ElementTypeMapping; + + var nullableString = runtimeEntityType.AddProperty( + "NullableString", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableString.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableString(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableString(instance) == null); + nullableString.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.NullableString(instance) = value; + return instance; + }); + nullableString.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.NullableString(instance) = value; + return instance; + }); + nullableString.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableString(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(nullableString, 184), + string (IInternalEntry entry) => entry.GetCurrentValue(nullableString)); + nullableString.SetPropertyIndexes( + index: 184, + originalValueIndex: 184, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableString.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var nullableStringArray = runtimeEntityType.AddProperty( + "NullableStringArray", + typeof(string[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableStringArray.SetGetter( + string[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableStringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableStringArray(instance) == null); + nullableStringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string[] value) => + { + ManyTypesUnsafeAccessors.NullableStringArray(instance) = value; + return instance; + }); + nullableStringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string[] value) => + { + ManyTypesUnsafeAccessors.NullableStringArray(instance) = value; + return instance; + }); + nullableStringArray.SetAccessors( + string[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableStringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string[] (IInternalEntry entry) => entry.ReadOriginalValue(nullableStringArray, 185), + string[] (IInternalEntry entry) => entry.GetCurrentValue(nullableStringArray)); + nullableStringArray.SetPropertyIndexes( + index: 185, + originalValueIndex: 185, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableStringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var nullableStringArrayElementType = nullableStringArray.SetElementType(typeof(string), + nullable: true); + nullableStringArrayElementType.TypeMapping = nullableStringArray.TypeMapping.ElementTypeMapping; + + var nullableTimeOnly = runtimeEntityType.AddProperty( + "NullableTimeOnly", + typeof(TimeOnly?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableTimeOnly.SetGetter( + TimeOnly? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeOnly(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableTimeOnly(instance).HasValue)); + nullableTimeOnly.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly? value) => + { + ManyTypesUnsafeAccessors.NullableTimeOnly(instance) = value; + return instance; + }); + nullableTimeOnly.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly? value) => + { + ManyTypesUnsafeAccessors.NullableTimeOnly(instance) = value; + return instance; + }); + nullableTimeOnly.SetAccessors( + TimeOnly? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly? (IInternalEntry entry) => entry.ReadOriginalValue(nullableTimeOnly, 186), + TimeOnly? (IInternalEntry entry) => entry.GetCurrentValue(nullableTimeOnly)); + nullableTimeOnly.SetPropertyIndexes( + index: 186, + originalValueIndex: 186, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableTimeOnly.TypeMapping = JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v)); + nullableTimeOnly.SetComparer(new NullableValueComparer(nullableTimeOnly.TypeMapping.Comparer)); + nullableTimeOnly.SetKeyComparer(new NullableValueComparer(nullableTimeOnly.TypeMapping.KeyComparer)); + + var nullableTimeOnlyArray = runtimeEntityType.AddProperty( + "NullableTimeOnlyArray", + typeof(TimeOnly?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableTimeOnlyArray.SetGetter( + TimeOnly? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeOnlyArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeOnlyArray(instance) == null); + nullableTimeOnlyArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly? [] value) => + { + ManyTypesUnsafeAccessors.NullableTimeOnlyArray(instance) = value; + return instance; + }); + nullableTimeOnlyArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly? [] value) => + { + ManyTypesUnsafeAccessors.NullableTimeOnlyArray(instance) = value; + return instance; + }); + nullableTimeOnlyArray.SetAccessors( + TimeOnly? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableTimeOnlyArray, 187), + TimeOnly? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableTimeOnlyArray)); + nullableTimeOnlyArray.SetPropertyIndexes( + index: 187, + originalValueIndex: 187, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableTimeOnlyArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonTimeOnlyReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonTimeOnlyReaderWriter.Instance), + elementMapping: JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v))); + var nullableTimeOnlyArrayElementType = nullableTimeOnlyArray.SetElementType(typeof(TimeOnly?), + nullable: true); + nullableTimeOnlyArrayElementType.TypeMapping = nullableTimeOnlyArray.TypeMapping.ElementTypeMapping; + nullableTimeOnlyArrayElementType.SetComparer(new NullableValueComparer(nullableTimeOnlyArrayElementType.TypeMapping.Comparer)); + + var nullableTimeSpan = runtimeEntityType.AddProperty( + "NullableTimeSpan", + typeof(TimeSpan?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeSpan", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableTimeSpan.SetGetter( + TimeSpan? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeSpan(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableTimeSpan(instance).HasValue)); + nullableTimeSpan.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan? value) => + { + ManyTypesUnsafeAccessors.NullableTimeSpan(instance) = value; + return instance; + }); + nullableTimeSpan.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan? value) => + { + ManyTypesUnsafeAccessors.NullableTimeSpan(instance) = value; + return instance; + }); + nullableTimeSpan.SetAccessors( + TimeSpan? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeSpan(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeSpan(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan? (IInternalEntry entry) => entry.ReadOriginalValue(nullableTimeSpan, 188), + TimeSpan? (IInternalEntry entry) => entry.GetCurrentValue(nullableTimeSpan)); + nullableTimeSpan.SetPropertyIndexes( + index: 188, + originalValueIndex: 188, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableTimeSpan.TypeMapping = JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v)); + nullableTimeSpan.SetComparer(new NullableValueComparer(nullableTimeSpan.TypeMapping.Comparer)); + nullableTimeSpan.SetKeyComparer(new NullableValueComparer(nullableTimeSpan.TypeMapping.KeyComparer)); + + var nullableTimeSpanArray = runtimeEntityType.AddProperty( + "NullableTimeSpanArray", + typeof(TimeSpan?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeSpanArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableTimeSpanArray.SetGetter( + TimeSpan? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeSpanArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableTimeSpanArray(instance) == null); + nullableTimeSpanArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan? [] value) => + { + ManyTypesUnsafeAccessors.NullableTimeSpanArray(instance) = value; + return instance; + }); + nullableTimeSpanArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan? [] value) => + { + ManyTypesUnsafeAccessors.NullableTimeSpanArray(instance) = value; + return instance; + }); + nullableTimeSpanArray.SetAccessors( + TimeSpan? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeSpanArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableTimeSpanArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableTimeSpanArray, 189), + TimeSpan? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableTimeSpanArray)); + nullableTimeSpanArray.SetPropertyIndexes( + index: 189, + originalValueIndex: 189, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableTimeSpanArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonTimeSpanReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonTimeSpanReaderWriter.Instance), + elementMapping: JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v))); + var nullableTimeSpanArrayElementType = nullableTimeSpanArray.SetElementType(typeof(TimeSpan?), + nullable: true); + nullableTimeSpanArrayElementType.TypeMapping = nullableTimeSpanArray.TypeMapping.ElementTypeMapping; + nullableTimeSpanArrayElementType.SetComparer(new NullableValueComparer(nullableTimeSpanArrayElementType.TypeMapping.Comparer)); + + var nullableUInt16 = runtimeEntityType.AddProperty( + "NullableUInt16", + typeof(ushort?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUInt16.SetGetter( + ushort? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableUInt16(instance).HasValue)); + nullableUInt16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort? value) => + { + ManyTypesUnsafeAccessors.NullableUInt16(instance) = value; + return instance; + }); + nullableUInt16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort? value) => + { + ManyTypesUnsafeAccessors.NullableUInt16(instance) = value; + return instance; + }); + nullableUInt16.SetAccessors( + ushort? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort? (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt16, 190), + ushort? (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt16)); + nullableUInt16.SetPropertyIndexes( + index: 190, + originalValueIndex: 190, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt16.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + keyComparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)))); + nullableUInt16.SetComparer(new NullableValueComparer(nullableUInt16.TypeMapping.Comparer)); + nullableUInt16.SetKeyComparer(new NullableValueComparer(nullableUInt16.TypeMapping.KeyComparer)); + + var nullableUInt16Array = runtimeEntityType.AddProperty( + "NullableUInt16Array", + typeof(ushort?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUInt16Array.SetGetter( + ushort? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt16Array(instance) == null); + nullableUInt16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt16Array(instance) = value; + return instance; + }); + nullableUInt16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt16Array(instance) = value; + return instance; + }); + nullableUInt16Array.SetAccessors( + ushort? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt16Array, 191), + ushort? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt16Array)); + nullableUInt16Array.SetPropertyIndexes( + index: 191, + originalValueIndex: 191, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + keyComparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v))))); + var nullableUInt16ArrayElementType = nullableUInt16Array.SetElementType(typeof(ushort?), + nullable: true); + nullableUInt16ArrayElementType.TypeMapping = nullableUInt16Array.TypeMapping.ElementTypeMapping; + nullableUInt16ArrayElementType.SetComparer(new NullableValueComparer(nullableUInt16ArrayElementType.TypeMapping.Comparer)); + + var nullableUInt32 = runtimeEntityType.AddProperty( + "NullableUInt32", + typeof(uint?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUInt32.SetGetter( + uint? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableUInt32(instance).HasValue)); + nullableUInt32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint? value) => + { + ManyTypesUnsafeAccessors.NullableUInt32(instance) = value; + return instance; + }); + nullableUInt32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint? value) => + { + ManyTypesUnsafeAccessors.NullableUInt32(instance) = value; + return instance; + }); + nullableUInt32.SetAccessors( + uint? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint? (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt32, 192), + uint? (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt32)); + nullableUInt32.SetPropertyIndexes( + index: 192, + originalValueIndex: 192, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt32.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + keyComparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)))); + nullableUInt32.SetComparer(new NullableValueComparer(nullableUInt32.TypeMapping.Comparer)); + nullableUInt32.SetKeyComparer(new NullableValueComparer(nullableUInt32.TypeMapping.KeyComparer)); + + var nullableUInt32Array = runtimeEntityType.AddProperty( + "NullableUInt32Array", + typeof(uint?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUInt32Array.SetGetter( + uint? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt32Array(instance) == null); + nullableUInt32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt32Array(instance) = value; + return instance; + }); + nullableUInt32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt32Array(instance) = value; + return instance; + }); + nullableUInt32Array.SetAccessors( + uint? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt32Array, 193), + uint? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt32Array)); + nullableUInt32Array.SetPropertyIndexes( + index: 193, + originalValueIndex: 193, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + keyComparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v))))); + var nullableUInt32ArrayElementType = nullableUInt32Array.SetElementType(typeof(uint?), + nullable: true); + nullableUInt32ArrayElementType.TypeMapping = nullableUInt32Array.TypeMapping.ElementTypeMapping; + nullableUInt32ArrayElementType.SetComparer(new NullableValueComparer(nullableUInt32ArrayElementType.TypeMapping.Comparer)); + + var nullableUInt64 = runtimeEntityType.AddProperty( + "NullableUInt64", + typeof(ulong?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUInt64.SetGetter( + ulong? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableUInt64(instance).HasValue)); + nullableUInt64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong? value) => + { + ManyTypesUnsafeAccessors.NullableUInt64(instance) = value; + return instance; + }); + nullableUInt64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong? value) => + { + ManyTypesUnsafeAccessors.NullableUInt64(instance) = value; + return instance; + }); + nullableUInt64.SetAccessors( + ulong? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong? (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt64, 194), + ulong? (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt64)); + nullableUInt64.SetPropertyIndexes( + index: 194, + originalValueIndex: 194, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt64.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + keyComparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)))); + nullableUInt64.SetComparer(new NullableValueComparer(nullableUInt64.TypeMapping.Comparer)); + nullableUInt64.SetKeyComparer(new NullableValueComparer(nullableUInt64.TypeMapping.KeyComparer)); + + var nullableUInt64Array = runtimeEntityType.AddProperty( + "NullableUInt64Array", + typeof(ulong?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUInt64Array.SetGetter( + ulong? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt64Array(instance) == null); + nullableUInt64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt64Array(instance) = value; + return instance; + }); + nullableUInt64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt64Array(instance) = value; + return instance; + }); + nullableUInt64Array.SetAccessors( + ulong? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt64Array, 195), + ulong? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt64Array)); + nullableUInt64Array.SetPropertyIndexes( + index: 195, + originalValueIndex: 195, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v))))), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + keyComparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v))))); + var nullableUInt64ArrayElementType = nullableUInt64Array.SetElementType(typeof(ulong?), + nullable: true); + nullableUInt64ArrayElementType.TypeMapping = nullableUInt64Array.TypeMapping.ElementTypeMapping; + nullableUInt64ArrayElementType.SetComparer(new NullableValueComparer(nullableUInt64ArrayElementType.TypeMapping.Comparer)); + + var nullableUInt8 = runtimeEntityType.AddProperty( + "NullableUInt8", + typeof(byte?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUInt8.SetGetter( + byte? (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => !(ManyTypesUnsafeAccessors.NullableUInt8(instance).HasValue)); + nullableUInt8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte? value) => + { + ManyTypesUnsafeAccessors.NullableUInt8(instance) = value; + return instance; + }); + nullableUInt8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte? value) => + { + ManyTypesUnsafeAccessors.NullableUInt8(instance) = value; + return instance; + }); + nullableUInt8.SetAccessors( + byte? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte? (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte? (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt8, 196), + byte? (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt8)); + nullableUInt8.SetPropertyIndexes( + index: 196, + originalValueIndex: 196, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt8.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)); + nullableUInt8.SetComparer(new NullableValueComparer(nullableUInt8.TypeMapping.Comparer)); + nullableUInt8.SetKeyComparer(new NullableValueComparer(nullableUInt8.TypeMapping.KeyComparer)); + + var nullableUInt8Array = runtimeEntityType.AddProperty( + "NullableUInt8Array", + typeof(byte?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUInt8Array.SetGetter( + byte? [] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUInt8Array(instance) == null); + nullableUInt8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt8Array(instance) = value; + return instance; + }); + nullableUInt8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte? [] value) => + { + ManyTypesUnsafeAccessors.NullableUInt8Array(instance) = value; + return instance; + }); + nullableUInt8Array.SetAccessors( + byte? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte? [] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte? [] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUInt8Array, 197), + byte? [] (IInternalEntry entry) => entry.GetCurrentValue(nullableUInt8Array)); + nullableUInt8Array.SetPropertyIndexes( + index: 197, + originalValueIndex: 197, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUInt8Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))), + keyComparer: new ListOfNullableValueTypesComparer(new NullableValueComparer(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfNullableStructsReaderWriter( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfNullableStructsReaderWriter( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var nullableUInt8ArrayElementType = nullableUInt8Array.SetElementType(typeof(byte?), + nullable: true); + nullableUInt8ArrayElementType.TypeMapping = nullableUInt8Array.TypeMapping.ElementTypeMapping; + nullableUInt8ArrayElementType.SetComparer(new NullableValueComparer(nullableUInt8ArrayElementType.TypeMapping.Comparer)); + + var nullableUri = runtimeEntityType.AddProperty( + "NullableUri", + typeof(Uri), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUri", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + nullableUri.SetGetter( + Uri (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUri(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUri(instance) == null); + nullableUri.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.NullableUri(instance) = value; + return instance; + }); + nullableUri.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.NullableUri(instance) = value; + return instance; + }); + nullableUri.SetAccessors( + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUri(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUri(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => entry.ReadOriginalValue(nullableUri, 198), + Uri (IInternalEntry entry) => entry.GetCurrentValue(nullableUri)); + nullableUri.SetPropertyIndexes( + index: 198, + originalValueIndex: 198, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUri.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))); + + var nullableUriArray = runtimeEntityType.AddProperty( + "NullableUriArray", + typeof(Uri[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUriArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + nullableUriArray.SetGetter( + Uri[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUriArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.NullableUriArray(instance) == null); + nullableUriArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri[] value) => + { + ManyTypesUnsafeAccessors.NullableUriArray(instance) = value; + return instance; + }); + nullableUriArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri[] value) => + { + ManyTypesUnsafeAccessors.NullableUriArray(instance) = value; + return instance; + }); + nullableUriArray.SetAccessors( + Uri[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUriArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.NullableUriArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri[] (IInternalEntry entry) => entry.ReadOriginalValue(nullableUriArray, 199), + Uri[] (IInternalEntry entry) => entry.GetCurrentValue(nullableUriArray)); + nullableUriArray.SetPropertyIndexes( + index: 199, + originalValueIndex: 199, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + nullableUriArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute))))); + var nullableUriArrayElementType = nullableUriArray.SetElementType(typeof(Uri), + nullable: true); + nullableUriArrayElementType.TypeMapping = nullableUriArray.TypeMapping.ElementTypeMapping; + + var physicalAddress = runtimeEntityType.AddProperty( + "PhysicalAddress", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + physicalAddress.SetGetter( + PhysicalAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddress(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddress(instance) == null); + physicalAddress.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddress(instance) = value; + return instance; + }); + physicalAddress.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddress(instance) = value; + return instance; + }); + physicalAddress.SetAccessors( + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddress(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => entry.ReadOriginalValue(physicalAddress, 200), + PhysicalAddress (IInternalEntry entry) => entry.GetCurrentValue(physicalAddress)); + physicalAddress.SetPropertyIndexes( + index: 200, + originalValueIndex: 200, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + physicalAddress.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))); + + var physicalAddressArray = runtimeEntityType.AddProperty( + "PhysicalAddressArray", + typeof(PhysicalAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + physicalAddressArray.SetGetter( + PhysicalAddress[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressArray(instance) == null); + physicalAddressArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress[] value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressArray(instance) = value; + return instance; + }); + physicalAddressArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress[] value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressArray(instance) = value; + return instance; + }); + physicalAddressArray.SetAccessors( + PhysicalAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(physicalAddressArray, 201), + PhysicalAddress[] (IInternalEntry entry) => entry.GetCurrentValue(physicalAddressArray)); + physicalAddressArray.SetPropertyIndexes( + index: 201, + originalValueIndex: 201, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + physicalAddressArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v))))); + var physicalAddressArrayElementType = physicalAddressArray.SetElementType(typeof(PhysicalAddress)); + physicalAddressArrayElementType.TypeMapping = physicalAddressArray.TypeMapping.ElementTypeMapping; + + var physicalAddressToBytesConverterProperty = runtimeEntityType.AddProperty( + "PhysicalAddressToBytesConverterProperty", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddressToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new PhysicalAddressToBytesConverter()); + physicalAddressToBytesConverterProperty.SetGetter( + PhysicalAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(instance) == null); + physicalAddressToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(instance) = value; + return instance; + }); + physicalAddressToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(instance) = value; + return instance; + }); + physicalAddressToBytesConverterProperty.SetAccessors( + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => entry.ReadOriginalValue(physicalAddressToBytesConverterProperty, 202), + PhysicalAddress (IInternalEntry entry) => entry.GetCurrentValue(physicalAddressToBytesConverterProperty)); + physicalAddressToBytesConverterProperty.SetPropertyIndexes( + index: 202, + originalValueIndex: 202, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + physicalAddressToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(8)", + size: 8), + converter: new ValueConverter( + byte[] (PhysicalAddress v) => v.GetAddressBytes(), + PhysicalAddress (byte[] v) => new PhysicalAddress(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (PhysicalAddress v) => v.GetAddressBytes(), + PhysicalAddress (byte[] v) => new PhysicalAddress(v)))); + + var physicalAddressToStringConverterProperty = runtimeEntityType.AddProperty( + "PhysicalAddressToStringConverterProperty", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddressToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new PhysicalAddressToStringConverter()); + physicalAddressToStringConverterProperty.SetGetter( + PhysicalAddress (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(instance) == null); + physicalAddressToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(instance) = value; + return instance; + }); + physicalAddressToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, PhysicalAddress value) => + { + ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(instance) = value; + return instance; + }); + physicalAddressToStringConverterProperty.SetAccessors( + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => ManyTypesUnsafeAccessors.PhysicalAddressToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + PhysicalAddress (IInternalEntry entry) => entry.ReadOriginalValue(physicalAddressToStringConverterProperty, 203), + PhysicalAddress (IInternalEntry entry) => entry.GetCurrentValue(physicalAddressToStringConverterProperty)); + physicalAddressToStringConverterProperty.SetPropertyIndexes( + index: 203, + originalValueIndex: 203, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + physicalAddressToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + keyComparer: new ValueComparer( + bool (PhysicalAddress v1, PhysicalAddress v2) => object.Equals(v1, v2), + int (PhysicalAddress v) => ((object)v).GetHashCode(), + PhysicalAddress (PhysicalAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(20)", + size: 20), + converter: new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (PhysicalAddress v) => ((object)v).ToString(), + PhysicalAddress (string v) => PhysicalAddress.Parse(v)))); + + var @string = runtimeEntityType.AddProperty( + "String", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("String", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + @string.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.String(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.String(instance) == null); + @string.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.String(instance) = value; + return instance; + }); + @string.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.String(instance) = value; + return instance; + }); + @string.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.String(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.String(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(@string, 204), + string (IInternalEntry entry) => entry.GetCurrentValue(@string)); + @string.SetPropertyIndexes( + index: 204, + originalValueIndex: 204, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + @string.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var stringArray = runtimeEntityType.AddProperty( + "StringArray", + typeof(string[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + stringArray.SetGetter( + string[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringArray(instance) == null); + stringArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string[] value) => + { + ManyTypesUnsafeAccessors.StringArray(instance) = value; + return instance; + }); + stringArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string[] value) => + { + ManyTypesUnsafeAccessors.StringArray(instance) = value; + return instance; + }); + stringArray.SetAccessors( + string[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string[] (IInternalEntry entry) => entry.ReadOriginalValue(stringArray, 205), + string[] (IInternalEntry entry) => entry.GetCurrentValue(stringArray)); + stringArray.SetPropertyIndexes( + index: 205, + originalValueIndex: 205, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var stringArrayElementType = stringArray.SetElementType(typeof(string)); + stringArrayElementType.TypeMapping = stringArray.TypeMapping.ElementTypeMapping; + + var stringReadOnlyCollection = runtimeEntityType.AddProperty( + "StringReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_stringReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + stringReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance) == null); + stringReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance) = ((List)value); + return instance; + }); + stringReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._stringReadOnlyCollection(instance) = ((List)value); + return instance; + }); + stringReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._stringReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._stringReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(stringReadOnlyCollection, 206), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(stringReadOnlyCollection)); + stringReadOnlyCollection.SetPropertyIndexes( + index: 206, + originalValueIndex: 206, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var stringReadOnlyCollectionElementType = stringReadOnlyCollection.SetElementType(typeof(string)); + stringReadOnlyCollectionElementType.TypeMapping = stringReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var stringToBoolConverterProperty = runtimeEntityType.AddProperty( + "StringToBoolConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToBoolConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToBoolConverter()); + stringToBoolConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToBoolConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToBoolConverterProperty(instance) == null); + stringToBoolConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToBoolConverterProperty(instance) = value; + return instance; + }); + stringToBoolConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToBoolConverterProperty(instance) = value; + return instance; + }); + stringToBoolConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToBoolConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToBoolConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToBoolConverterProperty, 207), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToBoolConverterProperty)); + stringToBoolConverterProperty.SetPropertyIndexes( + index: 207, + originalValueIndex: 207, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToBoolConverterProperty.TypeMapping = JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + converter: new ValueConverter( + bool (string v) => Convert.ToBoolean(v), + string (bool v) => Convert.ToString(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonBoolReaderWriter.Instance, + new ValueConverter( + bool (string v) => Convert.ToBoolean(v), + string (bool v) => Convert.ToString(v)))); + + var stringToBytesConverterProperty = runtimeEntityType.AddProperty( + "StringToBytesConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + stringToBytesConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToBytesConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToBytesConverterProperty(instance) == null); + stringToBytesConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToBytesConverterProperty(instance) = value; + return instance; + }); + stringToBytesConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToBytesConverterProperty(instance) = value; + return instance; + }); + stringToBytesConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToBytesConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToBytesConverterProperty, 208), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToBytesConverterProperty)); + stringToBytesConverterProperty.SetPropertyIndexes( + index: 208, + originalValueIndex: 208, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToBytesConverterProperty.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + converter: new ValueConverter( + byte[] (string v) => Encoding.GetEncoding(12000).GetBytes(v), + string (byte[] v) => Encoding.GetEncoding(12000).GetString(v)), + storeTypePostfix: StoreTypePostfix.None, + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonByteArrayReaderWriter.Instance, + new ValueConverter( + byte[] (string v) => Encoding.GetEncoding(12000).GetBytes(v), + string (byte[] v) => Encoding.GetEncoding(12000).GetString(v)))); + + var stringToCharConverterProperty = runtimeEntityType.AddProperty( + "StringToCharConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToCharConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToCharConverter()); + stringToCharConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToCharConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToCharConverterProperty(instance) == null); + stringToCharConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToCharConverterProperty(instance) = value; + return instance; + }); + stringToCharConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToCharConverterProperty(instance) = value; + return instance; + }); + stringToCharConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToCharConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToCharConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToCharConverterProperty, 209), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToCharConverterProperty)); + stringToCharConverterProperty.SetPropertyIndexes( + index: 209, + originalValueIndex: 209, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToCharConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (string v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)((v.Length < 1 ? '\0' : v[0])))), + string (string v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)((v.Length < 1 ? '\0' : v[0]))))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (string v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)((v.Length < 1 ? '\0' : v[0])))), + string (string v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)((v.Length < 1 ? '\0' : v[0]))))))); + + var stringToDateOnlyConverterProperty = runtimeEntityType.AddProperty( + "StringToDateOnlyConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDateOnlyConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToDateOnlyConverter()); + stringToDateOnlyConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(instance) == null); + stringToDateOnlyConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(instance) = value; + return instance; + }); + stringToDateOnlyConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(instance) = value; + return instance; + }); + stringToDateOnlyConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateOnlyConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDateOnlyConverterProperty, 210), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDateOnlyConverterProperty)); + stringToDateOnlyConverterProperty.SetPropertyIndexes( + index: 210, + originalValueIndex: 210, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDateOnlyConverterProperty.TypeMapping = JetDateOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (DateOnly v1, DateOnly v2) => v1.Equals(v2), + int (DateOnly v) => ((object)v).GetHashCode(), + DateOnly (DateOnly v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 10), + converter: new ValueConverter( + DateOnly (string v) => DateOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None), + string (DateOnly v) => v.ToString("yyyy\\-MM\\-dd")), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDateOnlyReaderWriter.Instance, + new ValueConverter( + DateOnly (string v) => DateOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None), + string (DateOnly v) => v.ToString("yyyy\\-MM\\-dd")))); + + var stringToDateTimeConverterProperty = runtimeEntityType.AddProperty( + "StringToDateTimeConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDateTimeConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToDateTimeConverter()); + stringToDateTimeConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(instance) == null); + stringToDateTimeConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(instance) = value; + return instance; + }); + stringToDateTimeConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(instance) = value; + return instance; + }); + stringToDateTimeConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateTimeConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDateTimeConverterProperty, 211), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDateTimeConverterProperty)); + stringToDateTimeConverterProperty.SetPropertyIndexes( + index: 211, + originalValueIndex: 211, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDateTimeConverterProperty.TypeMapping = JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 48), + converter: new ValueConverter( + DateTime (string v) => DateTime.Parse(v, CultureInfo.InvariantCulture), + string (DateTime v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFF")), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDateTimeReaderWriter.Instance, + new ValueConverter( + DateTime (string v) => DateTime.Parse(v, CultureInfo.InvariantCulture), + string (DateTime v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFF")))); + + var stringToDateTimeOffsetConverterProperty = runtimeEntityType.AddProperty( + "StringToDateTimeOffsetConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDateTimeOffsetConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToDateTimeOffsetConverter()); + stringToDateTimeOffsetConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(instance) == null); + stringToDateTimeOffsetConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(instance) = value; + return instance; + }); + stringToDateTimeOffsetConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(instance) = value; + return instance; + }); + stringToDateTimeOffsetConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDateTimeOffsetConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDateTimeOffsetConverterProperty, 212), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDateTimeOffsetConverterProperty)); + stringToDateTimeOffsetConverterProperty.SetPropertyIndexes( + index: 212, + originalValueIndex: 212, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDateTimeOffsetConverterProperty.TypeMapping = JetDateTimeOffsetTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (DateTimeOffset v1, DateTimeOffset v2) => v1.EqualsExact(v2), + int (DateTimeOffset v) => ((object)v).GetHashCode(), + DateTimeOffset (DateTimeOffset v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 48), + converter: new ValueConverter( + DateTimeOffset (string v) => DateTimeOffset.Parse(v, CultureInfo.InvariantCulture), + string (DateTimeOffset v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFFzzz")), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDateTimeOffsetReaderWriter.Instance, + new ValueConverter( + DateTimeOffset (string v) => DateTimeOffset.Parse(v, CultureInfo.InvariantCulture), + string (DateTimeOffset v) => v.ToString("yyyy\\-MM\\-dd HH\\:mm\\:ss.FFFFFFFzzz")))); + + var stringToDecimalNumberConverterProperty = runtimeEntityType.AddProperty( + "StringToDecimalNumberConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDecimalNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToNumberConverter()); + stringToDecimalNumberConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(instance) == null); + stringToDecimalNumberConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(instance) = value; + return instance; + }); + stringToDecimalNumberConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(instance) = value; + return instance; + }); + stringToDecimalNumberConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDecimalNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDecimalNumberConverterProperty, 213), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDecimalNumberConverterProperty)); + stringToDecimalNumberConverterProperty.SetPropertyIndexes( + index: 213, + originalValueIndex: 213, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDecimalNumberConverterProperty.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 64), + converter: new ValueConverter( + decimal (string v) => decimal.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (decimal v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (string v) => decimal.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (decimal v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v))))); + + var stringToDoubleNumberConverterProperty = runtimeEntityType.AddProperty( + "StringToDoubleNumberConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDoubleNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToNumberConverter()); + stringToDoubleNumberConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(instance) == null); + stringToDoubleNumberConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(instance) = value; + return instance; + }); + stringToDoubleNumberConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(instance) = value; + return instance; + }); + stringToDoubleNumberConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToDoubleNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToDoubleNumberConverterProperty, 214), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToDoubleNumberConverterProperty)); + stringToDoubleNumberConverterProperty.SetPropertyIndexes( + index: 214, + originalValueIndex: 214, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToDoubleNumberConverterProperty.TypeMapping = JetDoubleTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (double v1, double v2) => v1.Equals(v2), + int (double v) => ((object)v).GetHashCode(), + double (double v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 64), + converter: new ValueConverter( + double (string v) => double.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (double v) => string.Format(CultureInfo.InvariantCulture, "{0:R}", ((object)v))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDoubleReaderWriter.Instance, + new ValueConverter( + double (string v) => double.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (double v) => string.Format(CultureInfo.InvariantCulture, "{0:R}", ((object)v))))); + + var stringToEnumConverterProperty = runtimeEntityType.AddProperty( + "StringToEnumConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToEnumConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToEnumConverter()); + stringToEnumConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToEnumConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToEnumConverterProperty(instance) == null); + stringToEnumConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToEnumConverterProperty(instance) = value; + return instance; + }); + stringToEnumConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToEnumConverterProperty(instance) = value; + return instance; + }); + stringToEnumConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToEnumConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToEnumConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToEnumConverterProperty, 215), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToEnumConverterProperty)); + stringToEnumConverterProperty.SetPropertyIndexes( + index: 215, + originalValueIndex: 215, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToEnumConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (string v) => ((long)(StringEnumConverter.ConvertToEnum(v))), + string (long value) => ((object)((CompiledModelTestBase.EnumU32)value)).ToString()), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (string v) => ((long)(StringEnumConverter.ConvertToEnum(v))), + string (long value) => ((object)((CompiledModelTestBase.EnumU32)value)).ToString()))); + + var stringToGuidConverterProperty = runtimeEntityType.AddProperty( + "StringToGuidConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToGuidConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + stringToGuidConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToGuidConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToGuidConverterProperty(instance) == null); + stringToGuidConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToGuidConverterProperty(instance) = value; + return instance; + }); + stringToGuidConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToGuidConverterProperty(instance) = value; + return instance; + }); + stringToGuidConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToGuidConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToGuidConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToGuidConverterProperty, 216), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToGuidConverterProperty)); + stringToGuidConverterProperty.SetPropertyIndexes( + index: 216, + originalValueIndex: 216, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToGuidConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var stringToIntNumberConverterProperty = runtimeEntityType.AddProperty( + "StringToIntNumberConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToIntNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToNumberConverter()); + stringToIntNumberConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(instance) == null); + stringToIntNumberConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(instance) = value; + return instance; + }); + stringToIntNumberConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(instance) = value; + return instance; + }); + stringToIntNumberConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToIntNumberConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToIntNumberConverterProperty, 217), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToIntNumberConverterProperty)); + stringToIntNumberConverterProperty.SetPropertyIndexes( + index: 217, + originalValueIndex: 217, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToIntNumberConverterProperty.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 64), + converter: new ValueConverter( + int (string v) => int.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (int v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (string v) => int.Parse(v, NumberStyles.Any, CultureInfo.InvariantCulture), + string (int v) => string.Format(CultureInfo.InvariantCulture, "{0}", ((object)v))))); + + var stringToTimeOnlyConverterProperty = runtimeEntityType.AddProperty( + "StringToTimeOnlyConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToTimeOnlyConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToTimeOnlyConverter()); + stringToTimeOnlyConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(instance) == null); + stringToTimeOnlyConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(instance) = value; + return instance; + }); + stringToTimeOnlyConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(instance) = value; + return instance; + }); + stringToTimeOnlyConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToTimeOnlyConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToTimeOnlyConverterProperty, 218), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToTimeOnlyConverterProperty)); + stringToTimeOnlyConverterProperty.SetPropertyIndexes( + index: 218, + originalValueIndex: 218, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToTimeOnlyConverterProperty.TypeMapping = JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 48), + converter: new ValueConverter( + TimeOnly (string v) => TimeOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None), + string (TimeOnly v) => (v.Ticks % 10000000L == 0L ? string.Format(CultureInfo.InvariantCulture, "{0:HH\\:mm\\:ss}", ((object)v)) : v.ToString("o"))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonTimeOnlyReaderWriter.Instance, + new ValueConverter( + TimeOnly (string v) => TimeOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None), + string (TimeOnly v) => (v.Ticks % 10000000L == 0L ? string.Format(CultureInfo.InvariantCulture, "{0:HH\\:mm\\:ss}", ((object)v)) : v.ToString("o"))))); + + var stringToTimeSpanConverterProperty = runtimeEntityType.AddProperty( + "StringToTimeSpanConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToTimeSpanConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToTimeSpanConverter()); + stringToTimeSpanConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(instance) == null); + stringToTimeSpanConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(instance) = value; + return instance; + }); + stringToTimeSpanConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(instance) = value; + return instance; + }); + stringToTimeSpanConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToTimeSpanConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToTimeSpanConverterProperty, 219), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToTimeSpanConverterProperty)); + stringToTimeSpanConverterProperty.SetPropertyIndexes( + index: 219, + originalValueIndex: 219, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToTimeSpanConverterProperty.TypeMapping = JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + mappingInfo: new RelationalTypeMappingInfo( + size: 48), + converter: new ValueConverter( + TimeSpan (string v) => TimeSpan.Parse(v, CultureInfo.InvariantCulture), + string (TimeSpan v) => v.ToString("c")), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonTimeSpanReaderWriter.Instance, + new ValueConverter( + TimeSpan (string v) => TimeSpan.Parse(v, CultureInfo.InvariantCulture), + string (TimeSpan v) => v.ToString("c")))); + + var stringToUriConverterProperty = runtimeEntityType.AddProperty( + "StringToUriConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToUriConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToUriConverter()); + stringToUriConverterProperty.SetGetter( + string (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToUriConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.StringToUriConverterProperty(instance) == null); + stringToUriConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToUriConverterProperty(instance) = value; + return instance; + }); + stringToUriConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, string value) => + { + ManyTypesUnsafeAccessors.StringToUriConverterProperty(instance) = value; + return instance; + }); + stringToUriConverterProperty.SetAccessors( + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToUriConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => ManyTypesUnsafeAccessors.StringToUriConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(stringToUriConverterProperty, 220), + string (IInternalEntry entry) => entry.GetCurrentValue(stringToUriConverterProperty)); + stringToUriConverterProperty.SetPropertyIndexes( + index: 220, + originalValueIndex: 220, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + stringToUriConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (string v) => ((object)new Uri(v, UriKind.RelativeOrAbsolute)).ToString(), + string (string v) => ((object)new Uri(v, UriKind.RelativeOrAbsolute)).ToString()), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (string v) => ((object)new Uri(v, UriKind.RelativeOrAbsolute)).ToString(), + string (string v) => ((object)new Uri(v, UriKind.RelativeOrAbsolute)).ToString()))); + + var timeOnly = runtimeEntityType.AddProperty( + "TimeOnly", + typeof(TimeOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new TimeOnly(0, 0, 0)); + timeOnly.SetGetter( + TimeOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnly(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnly(instance) == default(TimeOnly)); + timeOnly.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnly(instance) = value; + return instance; + }); + timeOnly.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnly(instance) = value; + return instance; + }); + timeOnly.SetAccessors( + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnly(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => entry.ReadOriginalValue(timeOnly, 221), + TimeOnly (IInternalEntry entry) => entry.GetCurrentValue(timeOnly)); + timeOnly.SetPropertyIndexes( + index: 221, + originalValueIndex: 221, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeOnly.TypeMapping = JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v)); + + var timeOnlyArray = runtimeEntityType.AddProperty( + "TimeOnlyArray", + typeof(TimeOnly[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + timeOnlyArray.SetGetter( + TimeOnly[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyArray(instance) == null); + timeOnlyArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly[] value) => + { + ManyTypesUnsafeAccessors.TimeOnlyArray(instance) = value; + return instance; + }); + timeOnlyArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly[] value) => + { + ManyTypesUnsafeAccessors.TimeOnlyArray(instance) = value; + return instance; + }); + timeOnlyArray.SetAccessors( + TimeOnly[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly[] (IInternalEntry entry) => entry.ReadOriginalValue(timeOnlyArray, 222), + TimeOnly[] (IInternalEntry entry) => entry.GetCurrentValue(timeOnlyArray)); + timeOnlyArray.SetPropertyIndexes( + index: 222, + originalValueIndex: 222, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeOnlyArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonTimeOnlyReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonTimeOnlyReaderWriter.Instance), + elementMapping: JetTimeOnlyTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v))); + var timeOnlyArrayElementType = timeOnlyArray.SetElementType(typeof(TimeOnly)); + timeOnlyArrayElementType.TypeMapping = timeOnlyArray.TypeMapping.ElementTypeMapping; + + var timeOnlyToStringConverterProperty = runtimeEntityType.AddProperty( + "TimeOnlyToStringConverterProperty", + typeof(TimeOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnlyToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeOnlyToStringConverter()); + timeOnlyToStringConverterProperty.SetGetter( + TimeOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(instance) == default(TimeOnly)); + timeOnlyToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(instance) = value; + return instance; + }); + timeOnlyToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(instance) = value; + return instance; + }); + timeOnlyToStringConverterProperty.SetAccessors( + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => entry.ReadOriginalValue(timeOnlyToStringConverterProperty, 223), + TimeOnly (IInternalEntry entry) => entry.GetCurrentValue(timeOnlyToStringConverterProperty)); + timeOnlyToStringConverterProperty.SetPropertyIndexes( + index: 223, + originalValueIndex: 223, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeOnlyToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(48)", + size: 48), + converter: new ValueConverter( + string (TimeOnly v) => (v.Ticks % 10000000L == 0L ? string.Format(CultureInfo.InvariantCulture, "{0:HH\\:mm\\:ss}", ((object)v)) : v.ToString("o")), + TimeOnly (string v) => TimeOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (TimeOnly v) => (v.Ticks % 10000000L == 0L ? string.Format(CultureInfo.InvariantCulture, "{0:HH\\:mm\\:ss}", ((object)v)) : v.ToString("o")), + TimeOnly (string v) => TimeOnly.Parse(v, CultureInfo.InvariantCulture, DateTimeStyles.None)))); + timeOnlyToStringConverterProperty.SetSentinelFromProviderValue("00:00:00"); + + var timeOnlyToTicksConverterProperty = runtimeEntityType.AddProperty( + "TimeOnlyToTicksConverterProperty", + typeof(TimeOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnlyToTicksConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeOnlyToTicksConverter()); + timeOnlyToTicksConverterProperty.SetGetter( + TimeOnly (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(instance) == default(TimeOnly)); + timeOnlyToTicksConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(instance) = value; + return instance; + }); + timeOnlyToTicksConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeOnly value) => + { + ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(instance) = value; + return instance; + }); + timeOnlyToTicksConverterProperty.SetAccessors( + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeOnlyToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeOnly (IInternalEntry entry) => entry.ReadOriginalValue(timeOnlyToTicksConverterProperty, 224), + TimeOnly (IInternalEntry entry) => entry.GetCurrentValue(timeOnlyToTicksConverterProperty)); + timeOnlyToTicksConverterProperty.SetPropertyIndexes( + index: 224, + originalValueIndex: 224, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeOnlyToTicksConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + keyComparer: new ValueComparer( + bool (TimeOnly v1, TimeOnly v2) => v1.Equals(v2), + int (TimeOnly v) => ((object)v).GetHashCode(), + TimeOnly (TimeOnly v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (TimeOnly v) => v.Ticks, + TimeOnly (long v) => new TimeOnly(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (TimeOnly v) => v.Ticks, + TimeOnly (long v) => new TimeOnly(v)))); + timeOnlyToTicksConverterProperty.SetSentinelFromProviderValue(0L); + + var timeSpan = runtimeEntityType.AddProperty( + "TimeSpan", + typeof(TimeSpan), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpan", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new TimeSpan(0, 0, 0, 0, 0)); + timeSpan.SetGetter( + TimeSpan (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpan(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpan(instance) == default(TimeSpan)); + timeSpan.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpan(instance) = value; + return instance; + }); + timeSpan.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpan(instance) = value; + return instance; + }); + timeSpan.SetAccessors( + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpan(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpan(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => entry.ReadOriginalValue(timeSpan, 225), + TimeSpan (IInternalEntry entry) => entry.GetCurrentValue(timeSpan)); + timeSpan.SetPropertyIndexes( + index: 225, + originalValueIndex: 225, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeSpan.TypeMapping = JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v)); + + var timeSpanArray = runtimeEntityType.AddProperty( + "TimeSpanArray", + typeof(TimeSpan[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpanArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + timeSpanArray.SetGetter( + TimeSpan[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanArray(instance) == null); + timeSpanArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan[] value) => + { + ManyTypesUnsafeAccessors.TimeSpanArray(instance) = value; + return instance; + }); + timeSpanArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan[] value) => + { + ManyTypesUnsafeAccessors.TimeSpanArray(instance) = value; + return instance; + }); + timeSpanArray.SetAccessors( + TimeSpan[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan[] (IInternalEntry entry) => entry.ReadOriginalValue(timeSpanArray, 226), + TimeSpan[] (IInternalEntry entry) => entry.GetCurrentValue(timeSpanArray)); + timeSpanArray.SetPropertyIndexes( + index: 226, + originalValueIndex: 226, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeSpanArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonTimeSpanReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonTimeSpanReaderWriter.Instance), + elementMapping: JetTimeSpanTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v))); + var timeSpanArrayElementType = timeSpanArray.SetElementType(typeof(TimeSpan)); + timeSpanArrayElementType.TypeMapping = timeSpanArray.TypeMapping.ElementTypeMapping; + + var timeSpanToStringConverterProperty = runtimeEntityType.AddProperty( + "TimeSpanToStringConverterProperty", + typeof(TimeSpan), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpanToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeSpanToStringConverter()); + timeSpanToStringConverterProperty.SetGetter( + TimeSpan (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(instance) == default(TimeSpan)); + timeSpanToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(instance) = value; + return instance; + }); + timeSpanToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(instance) = value; + return instance; + }); + timeSpanToStringConverterProperty.SetAccessors( + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => entry.ReadOriginalValue(timeSpanToStringConverterProperty, 227), + TimeSpan (IInternalEntry entry) => entry.GetCurrentValue(timeSpanToStringConverterProperty)); + timeSpanToStringConverterProperty.SetPropertyIndexes( + index: 227, + originalValueIndex: 227, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeSpanToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(48)", + size: 48), + converter: new ValueConverter( + string (TimeSpan v) => v.ToString("c"), + TimeSpan (string v) => TimeSpan.Parse(v, CultureInfo.InvariantCulture)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (TimeSpan v) => v.ToString("c"), + TimeSpan (string v) => TimeSpan.Parse(v, CultureInfo.InvariantCulture)))); + timeSpanToStringConverterProperty.SetSentinelFromProviderValue("00:00:00"); + + var timeSpanToTicksConverterProperty = runtimeEntityType.AddProperty( + "TimeSpanToTicksConverterProperty", + typeof(TimeSpan), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpanToTicksConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeSpanToTicksConverter()); + timeSpanToTicksConverterProperty.SetGetter( + TimeSpan (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(instance) == default(TimeSpan)); + timeSpanToTicksConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(instance) = value; + return instance; + }); + timeSpanToTicksConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, TimeSpan value) => + { + ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(instance) = value; + return instance; + }); + timeSpanToTicksConverterProperty.SetAccessors( + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => ManyTypesUnsafeAccessors.TimeSpanToTicksConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + TimeSpan (IInternalEntry entry) => entry.ReadOriginalValue(timeSpanToTicksConverterProperty, 228), + TimeSpan (IInternalEntry entry) => entry.GetCurrentValue(timeSpanToTicksConverterProperty)); + timeSpanToTicksConverterProperty.SetPropertyIndexes( + index: 228, + originalValueIndex: 228, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + timeSpanToTicksConverterProperty.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + keyComparer: new ValueComparer( + bool (TimeSpan v1, TimeSpan v2) => v1.Equals(v2), + int (TimeSpan v) => ((object)v).GetHashCode(), + TimeSpan (TimeSpan v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (TimeSpan v) => v.Ticks, + TimeSpan (long v) => new TimeSpan(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (TimeSpan v) => v.Ticks, + TimeSpan (long v) => new TimeSpan(v)))); + timeSpanToTicksConverterProperty.SetSentinelFromProviderValue(0L); + + var uInt16 = runtimeEntityType.AddProperty( + "UInt16", + typeof(ushort), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt16.SetGetter( + ushort (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt16(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt16(instance) == 0); + uInt16.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort value) => + { + ManyTypesUnsafeAccessors.UInt16(instance) = value; + return instance; + }); + uInt16.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort value) => + { + ManyTypesUnsafeAccessors.UInt16(instance) = value; + return instance; + }); + uInt16.SetAccessors( + ushort (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt16(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort (IInternalEntry entry) => entry.ReadOriginalValue(uInt16, 229), + ushort (IInternalEntry entry) => entry.GetCurrentValue(uInt16)); + uInt16.SetPropertyIndexes( + index: 229, + originalValueIndex: 229, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt16.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + keyComparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)))); + uInt16.SetSentinelFromProviderValue(0); + + var uInt16Array = runtimeEntityType.AddProperty( + "UInt16Array", + typeof(ushort[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt16Array.SetGetter( + ushort[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt16Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt16Array(instance) == null); + uInt16Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort[] value) => + { + ManyTypesUnsafeAccessors.UInt16Array(instance) = value; + return instance; + }); + uInt16Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ushort[] value) => + { + ManyTypesUnsafeAccessors.UInt16Array(instance) = value; + return instance; + }); + uInt16Array.SetAccessors( + ushort[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt16Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ushort[] (IInternalEntry entry) => entry.ReadOriginalValue(uInt16Array, 230), + ushort[] (IInternalEntry entry) => entry.GetCurrentValue(uInt16Array)); + uInt16Array.SetPropertyIndexes( + index: 230, + originalValueIndex: 230, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt16Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)))), + elementMapping: JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + keyComparer: new ValueComparer( + bool (ushort v1, ushort v2) => v1 == v2, + int (ushort v) => ((int)v), + ushort (ushort v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (ushort v) => ((int)v), + ushort (int v) => ((ushort)v))))); + var uInt16ArrayElementType = uInt16Array.SetElementType(typeof(ushort)); + uInt16ArrayElementType.TypeMapping = uInt16Array.TypeMapping.ElementTypeMapping; + + var uInt32 = runtimeEntityType.AddProperty( + "UInt32", + typeof(uint), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt32.SetGetter( + uint (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt32(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt32(instance) == 0U); + uInt32.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint value) => + { + ManyTypesUnsafeAccessors.UInt32(instance) = value; + return instance; + }); + uInt32.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint value) => + { + ManyTypesUnsafeAccessors.UInt32(instance) = value; + return instance; + }); + uInt32.SetAccessors( + uint (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt32(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint (IInternalEntry entry) => entry.ReadOriginalValue(uInt32, 231), + uint (IInternalEntry entry) => entry.GetCurrentValue(uInt32)); + uInt32.SetPropertyIndexes( + index: 231, + originalValueIndex: 231, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt32.TypeMapping = LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + keyComparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)))); + uInt32.SetSentinelFromProviderValue(0L); + + var uInt32Array = runtimeEntityType.AddProperty( + "UInt32Array", + typeof(uint[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt32Array.SetGetter( + uint[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt32Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt32Array(instance) == null); + uInt32Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint[] value) => + { + ManyTypesUnsafeAccessors.UInt32Array(instance) = value; + return instance; + }); + uInt32Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, uint[] value) => + { + ManyTypesUnsafeAccessors.UInt32Array(instance) = value; + return instance; + }); + uInt32Array.SetAccessors( + uint[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt32Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + uint[] (IInternalEntry entry) => entry.ReadOriginalValue(uInt32Array, 232), + uint[] (IInternalEntry entry) => entry.GetCurrentValue(uInt32Array)); + uInt32Array.SetPropertyIndexes( + index: 232, + originalValueIndex: 232, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt32Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)))), + elementMapping: LibRedLongTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + keyComparer: new ValueComparer( + bool (uint v1, uint v2) => v1 == v2, + int (uint v) => ((int)v), + uint (uint v) => v), + providerValueComparer: new ValueComparer( + bool (long v1, long v2) => v1 == v2, + int (long v) => ((object)v).GetHashCode(), + long (long v) => v), + converter: new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt64ReaderWriter.Instance, + new ValueConverter( + long (uint v) => ((long)v), + uint (long v) => ((uint)v))))); + var uInt32ArrayElementType = uInt32Array.SetElementType(typeof(uint)); + uInt32ArrayElementType.TypeMapping = uInt32Array.TypeMapping.ElementTypeMapping; + + var uInt64 = runtimeEntityType.AddProperty( + "UInt64", + typeof(ulong), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt64.SetGetter( + ulong (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt64(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt64(instance) == 0UL); + uInt64.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong value) => + { + ManyTypesUnsafeAccessors.UInt64(instance) = value; + return instance; + }); + uInt64.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong value) => + { + ManyTypesUnsafeAccessors.UInt64(instance) = value; + return instance; + }); + uInt64.SetAccessors( + ulong (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt64(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong (IInternalEntry entry) => entry.ReadOriginalValue(uInt64, 233), + ulong (IInternalEntry entry) => entry.GetCurrentValue(uInt64)); + uInt64.SetPropertyIndexes( + index: 233, + originalValueIndex: 233, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt64.TypeMapping = JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + keyComparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)))); + uInt64.SetSentinelFromProviderValue(0m); + + var uInt64Array = runtimeEntityType.AddProperty( + "UInt64Array", + typeof(ulong[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt64Array.SetGetter( + ulong[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt64Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt64Array(instance) == null); + uInt64Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong[] value) => + { + ManyTypesUnsafeAccessors.UInt64Array(instance) = value; + return instance; + }); + uInt64Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, ulong[] value) => + { + ManyTypesUnsafeAccessors.UInt64Array(instance) = value; + return instance; + }); + uInt64Array.SetAccessors( + ulong[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt64Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + ulong[] (IInternalEntry entry) => entry.ReadOriginalValue(uInt64Array, 234), + ulong[] (IInternalEntry entry) => entry.GetCurrentValue(uInt64Array)); + uInt64Array.SetPropertyIndexes( + index: 234, + originalValueIndex: 234, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt64Array.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v))))), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)))), + elementMapping: JetDecimalTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + keyComparer: new ValueComparer( + bool (ulong v1, ulong v2) => v1 == v2, + int (ulong v) => ((object)v).GetHashCode(), + ulong (ulong v) => v), + providerValueComparer: new ValueComparer( + bool (decimal v1, decimal v2) => v1 == v2, + int (decimal v) => ((object)v).GetHashCode(), + decimal (decimal v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "decimal(20,0)", + precision: 20, + scale: 0), + converter: new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonDecimalReaderWriter.Instance, + new ValueConverter( + decimal (ulong v) => ((decimal)v), + ulong (decimal v) => ((ulong)v))))); + var uInt64ArrayElementType = uInt64Array.SetElementType(typeof(ulong)); + uInt64ArrayElementType.TypeMapping = uInt64Array.TypeMapping.ElementTypeMapping; + + var uInt8 = runtimeEntityType.AddProperty( + "UInt8", + typeof(byte), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: (byte)0); + uInt8.SetGetter( + byte (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt8(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt8(instance) == 0); + uInt8.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte value) => + { + ManyTypesUnsafeAccessors.UInt8(instance) = value; + return instance; + }); + uInt8.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte value) => + { + ManyTypesUnsafeAccessors.UInt8(instance) = value; + return instance; + }); + uInt8.SetAccessors( + byte (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt8(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte (IInternalEntry entry) => entry.ReadOriginalValue(uInt8, 235), + byte (IInternalEntry entry) => entry.GetCurrentValue(uInt8)); + uInt8.SetPropertyIndexes( + index: 235, + originalValueIndex: 235, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt8.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)); + + var uInt8Array = runtimeEntityType.AddProperty( + "UInt8Array", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt8Array.SetGetter( + byte[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt8Array(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UInt8Array(instance) == null); + uInt8Array.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.UInt8Array(instance) = value; + return instance; + }); + uInt8Array.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, byte[] value) => + { + ManyTypesUnsafeAccessors.UInt8Array(instance) = value; + return instance; + }); + uInt8Array.SetAccessors( + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UInt8Array(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(uInt8Array, 236), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(uInt8Array)); + uInt8Array.SetPropertyIndexes( + index: 236, + originalValueIndex: 236, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt8Array.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + var uInt8ReadOnlyCollection = runtimeEntityType.AddProperty( + "UInt8ReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt8ReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_uInt8ReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt8ReadOnlyCollection.SetGetter( + IReadOnlyCollection (CompiledModelTestBase.ManyTypes instance) => (ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance) == null ? null : ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance)))), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance) == null); + uInt8ReadOnlyCollection.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance) = ((List)value); + return instance; + }); + uInt8ReadOnlyCollection.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, IReadOnlyCollection value) => + { + ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(instance) = ((List)value); + return instance; + }); + uInt8ReadOnlyCollection.SetAccessors( + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => ((IReadOnlyCollection)(ManyTypesUnsafeAccessors._uInt8ReadOnlyCollection(((CompiledModelTestBase.ManyTypes)(entry.Entity))))), + IReadOnlyCollection (IInternalEntry entry) => entry.ReadOriginalValue>(uInt8ReadOnlyCollection, 237), + IReadOnlyCollection (IInternalEntry entry) => entry.GetCurrentValue>(uInt8ReadOnlyCollection)); + uInt8ReadOnlyCollection.SetPropertyIndexes( + index: 237, + originalValueIndex: 237, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uInt8ReadOnlyCollection.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var uInt8ReadOnlyCollectionElementType = uInt8ReadOnlyCollection.SetElementType(typeof(byte)); + uInt8ReadOnlyCollectionElementType.TypeMapping = uInt8ReadOnlyCollection.TypeMapping.ElementTypeMapping; + + var uri = runtimeEntityType.AddProperty( + "Uri", + typeof(Uri), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Uri", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uri.SetGetter( + Uri (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Uri(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.Uri(instance) == null); + uri.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.Uri(instance) = value; + return instance; + }); + uri.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.Uri(instance) = value; + return instance; + }); + uri.SetAccessors( + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.Uri(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.Uri(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => entry.ReadOriginalValue(uri, 238), + Uri (IInternalEntry entry) => entry.GetCurrentValue(uri)); + uri.SetPropertyIndexes( + index: 238, + originalValueIndex: 238, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uri.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))); + + var uriArray = runtimeEntityType.AddProperty( + "UriArray", + typeof(Uri[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UriArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uriArray.SetGetter( + Uri[] (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UriArray(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UriArray(instance) == null); + uriArray.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri[] value) => + { + ManyTypesUnsafeAccessors.UriArray(instance) = value; + return instance; + }); + uriArray.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri[] value) => + { + ManyTypesUnsafeAccessors.UriArray(instance) = value; + return instance; + }); + uriArray.SetAccessors( + Uri[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UriArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri[] (IInternalEntry entry) => ManyTypesUnsafeAccessors.UriArray(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri[] (IInternalEntry entry) => entry.ReadOriginalValue(uriArray, 239), + Uri[] (IInternalEntry entry) => entry.GetCurrentValue(uriArray)); + uriArray.SetPropertyIndexes( + index: 239, + originalValueIndex: 239, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uriArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute))))); + var uriArrayElementType = uriArray.SetElementType(typeof(Uri)); + uriArrayElementType.TypeMapping = uriArray.TypeMapping.ElementTypeMapping; + + var uriToStringConverterProperty = runtimeEntityType.AddProperty( + "UriToStringConverterProperty", + typeof(Uri), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UriToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new UriToStringConverter()); + uriToStringConverterProperty.SetGetter( + Uri (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UriToStringConverterProperty(instance), + bool (CompiledModelTestBase.ManyTypes instance) => ManyTypesUnsafeAccessors.UriToStringConverterProperty(instance) == null); + uriToStringConverterProperty.SetSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.UriToStringConverterProperty(instance) = value; + return instance; + }); + uriToStringConverterProperty.SetMaterializationSetter( + CompiledModelTestBase.ManyTypes (CompiledModelTestBase.ManyTypes instance, Uri value) => + { + ManyTypesUnsafeAccessors.UriToStringConverterProperty(instance) = value; + return instance; + }); + uriToStringConverterProperty.SetAccessors( + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.UriToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => ManyTypesUnsafeAccessors.UriToStringConverterProperty(((CompiledModelTestBase.ManyTypes)(entry.Entity))), + Uri (IInternalEntry entry) => entry.ReadOriginalValue(uriToStringConverterProperty, 240), + Uri (IInternalEntry entry) => entry.GetCurrentValue(uriToStringConverterProperty)); + uriToStringConverterProperty.SetPropertyIndexes( + index: 240, + originalValueIndex: 240, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + uriToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + keyComparer: new ValueComparer( + bool (Uri v1, Uri v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (Uri v) => ((object)v).GetHashCode(), + Uri (Uri v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (Uri v) => ((object)v).ToString(), + Uri (string v) => new Uri(v, UriKind.RelativeOrAbsolute)))); + + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var @bool = runtimeEntityType.FindProperty("Bool"); + var boolArray = runtimeEntityType.FindProperty("BoolArray"); + var boolReadOnlyCollection = runtimeEntityType.FindProperty("BoolReadOnlyCollection"); + var boolToStringConverterProperty = runtimeEntityType.FindProperty("BoolToStringConverterProperty"); + var boolToTwoValuesConverterProperty = runtimeEntityType.FindProperty("BoolToTwoValuesConverterProperty"); + var boolToZeroOneConverterProperty = runtimeEntityType.FindProperty("BoolToZeroOneConverterProperty"); + var bytes = runtimeEntityType.FindProperty("Bytes"); + var bytesArray = runtimeEntityType.FindProperty("BytesArray"); + var bytesToStringConverterProperty = runtimeEntityType.FindProperty("BytesToStringConverterProperty"); + var castingConverterProperty = runtimeEntityType.FindProperty("CastingConverterProperty"); + var @char = runtimeEntityType.FindProperty("Char"); + var charArray = runtimeEntityType.FindProperty("CharArray"); + var charToStringConverterProperty = runtimeEntityType.FindProperty("CharToStringConverterProperty"); + var dateOnly = runtimeEntityType.FindProperty("DateOnly"); + var dateOnlyArray = runtimeEntityType.FindProperty("DateOnlyArray"); + var dateOnlyToStringConverterProperty = runtimeEntityType.FindProperty("DateOnlyToStringConverterProperty"); + var dateTime = runtimeEntityType.FindProperty("DateTime"); + var dateTimeArray = runtimeEntityType.FindProperty("DateTimeArray"); + var dateTimeOffsetToBinaryConverterProperty = runtimeEntityType.FindProperty("DateTimeOffsetToBinaryConverterProperty"); + var dateTimeOffsetToBytesConverterProperty = runtimeEntityType.FindProperty("DateTimeOffsetToBytesConverterProperty"); + var dateTimeOffsetToStringConverterProperty = runtimeEntityType.FindProperty("DateTimeOffsetToStringConverterProperty"); + var dateTimeToBinaryConverterProperty = runtimeEntityType.FindProperty("DateTimeToBinaryConverterProperty"); + var dateTimeToStringConverterProperty = runtimeEntityType.FindProperty("DateTimeToStringConverterProperty"); + var dateTimeToTicksConverterProperty = runtimeEntityType.FindProperty("DateTimeToTicksConverterProperty"); + var @decimal = runtimeEntityType.FindProperty("Decimal"); + var decimalArray = runtimeEntityType.FindProperty("DecimalArray"); + var decimalNumberToBytesConverterProperty = runtimeEntityType.FindProperty("DecimalNumberToBytesConverterProperty"); + var decimalNumberToStringConverterProperty = runtimeEntityType.FindProperty("DecimalNumberToStringConverterProperty"); + var @double = runtimeEntityType.FindProperty("Double"); + var doubleArray = runtimeEntityType.FindProperty("DoubleArray"); + var doubleNumberToBytesConverterProperty = runtimeEntityType.FindProperty("DoubleNumberToBytesConverterProperty"); + var doubleNumberToStringConverterProperty = runtimeEntityType.FindProperty("DoubleNumberToStringConverterProperty"); + var enum16 = runtimeEntityType.FindProperty("Enum16"); + var enum16Array = runtimeEntityType.FindProperty("Enum16Array"); + var enum16AsString = runtimeEntityType.FindProperty("Enum16AsString"); + var enum16AsStringArray = runtimeEntityType.FindProperty("Enum16AsStringArray"); + var enum16AsStringCollection = runtimeEntityType.FindProperty("Enum16AsStringCollection"); + var enum16Collection = runtimeEntityType.FindProperty("Enum16Collection"); + var enum32 = runtimeEntityType.FindProperty("Enum32"); + var enum32Array = runtimeEntityType.FindProperty("Enum32Array"); + var enum32AsString = runtimeEntityType.FindProperty("Enum32AsString"); + var enum32AsStringArray = runtimeEntityType.FindProperty("Enum32AsStringArray"); + var enum32AsStringCollection = runtimeEntityType.FindProperty("Enum32AsStringCollection"); + var enum32Collection = runtimeEntityType.FindProperty("Enum32Collection"); + var enum64 = runtimeEntityType.FindProperty("Enum64"); + var enum64Array = runtimeEntityType.FindProperty("Enum64Array"); + var enum64AsString = runtimeEntityType.FindProperty("Enum64AsString"); + var enum64AsStringArray = runtimeEntityType.FindProperty("Enum64AsStringArray"); + var enum64AsStringCollection = runtimeEntityType.FindProperty("Enum64AsStringCollection"); + var enum64Collection = runtimeEntityType.FindProperty("Enum64Collection"); + var enum8 = runtimeEntityType.FindProperty("Enum8"); + var enum8Array = runtimeEntityType.FindProperty("Enum8Array"); + var enum8AsString = runtimeEntityType.FindProperty("Enum8AsString"); + var enum8AsStringArray = runtimeEntityType.FindProperty("Enum8AsStringArray"); + var enum8AsStringCollection = runtimeEntityType.FindProperty("Enum8AsStringCollection"); + var enum8Collection = runtimeEntityType.FindProperty("Enum8Collection"); + var enumToNumberConverterProperty = runtimeEntityType.FindProperty("EnumToNumberConverterProperty"); + var enumToStringConverterProperty = runtimeEntityType.FindProperty("EnumToStringConverterProperty"); + var enumU16 = runtimeEntityType.FindProperty("EnumU16"); + var enumU16Array = runtimeEntityType.FindProperty("EnumU16Array"); + var enumU16AsString = runtimeEntityType.FindProperty("EnumU16AsString"); + var enumU16AsStringArray = runtimeEntityType.FindProperty("EnumU16AsStringArray"); + var enumU16AsStringCollection = runtimeEntityType.FindProperty("EnumU16AsStringCollection"); + var enumU16Collection = runtimeEntityType.FindProperty("EnumU16Collection"); + var enumU32 = runtimeEntityType.FindProperty("EnumU32"); + var enumU32Array = runtimeEntityType.FindProperty("EnumU32Array"); + var enumU32AsString = runtimeEntityType.FindProperty("EnumU32AsString"); + var enumU32AsStringArray = runtimeEntityType.FindProperty("EnumU32AsStringArray"); + var enumU32AsStringCollection = runtimeEntityType.FindProperty("EnumU32AsStringCollection"); + var enumU32Collection = runtimeEntityType.FindProperty("EnumU32Collection"); + var enumU64 = runtimeEntityType.FindProperty("EnumU64"); + var enumU64Array = runtimeEntityType.FindProperty("EnumU64Array"); + var enumU64AsString = runtimeEntityType.FindProperty("EnumU64AsString"); + var enumU64AsStringArray = runtimeEntityType.FindProperty("EnumU64AsStringArray"); + var enumU64AsStringCollection = runtimeEntityType.FindProperty("EnumU64AsStringCollection"); + var enumU64Collection = runtimeEntityType.FindProperty("EnumU64Collection"); + var enumU8 = runtimeEntityType.FindProperty("EnumU8"); + var enumU8Array = runtimeEntityType.FindProperty("EnumU8Array"); + var enumU8AsString = runtimeEntityType.FindProperty("EnumU8AsString"); + var enumU8AsStringArray = runtimeEntityType.FindProperty("EnumU8AsStringArray"); + var enumU8AsStringCollection = runtimeEntityType.FindProperty("EnumU8AsStringCollection"); + var enumU8Collection = runtimeEntityType.FindProperty("EnumU8Collection"); + var @float = runtimeEntityType.FindProperty("Float"); + var floatArray = runtimeEntityType.FindProperty("FloatArray"); + var guid = runtimeEntityType.FindProperty("Guid"); + var guidArray = runtimeEntityType.FindProperty("GuidArray"); + var guidToBytesConverterProperty = runtimeEntityType.FindProperty("GuidToBytesConverterProperty"); + var guidToStringConverterProperty = runtimeEntityType.FindProperty("GuidToStringConverterProperty"); + var iPAddress = runtimeEntityType.FindProperty("IPAddress"); + var iPAddressArray = runtimeEntityType.FindProperty("IPAddressArray"); + var iPAddressReadOnlyCollection = runtimeEntityType.FindProperty("IPAddressReadOnlyCollection"); + var iPAddressToBytesConverterProperty = runtimeEntityType.FindProperty("IPAddressToBytesConverterProperty"); + var iPAddressToStringConverterProperty = runtimeEntityType.FindProperty("IPAddressToStringConverterProperty"); + var int16 = runtimeEntityType.FindProperty("Int16"); + var int16Array = runtimeEntityType.FindProperty("Int16Array"); + var int32 = runtimeEntityType.FindProperty("Int32"); + var int32Array = runtimeEntityType.FindProperty("Int32Array"); + var int32ReadOnlyCollection = runtimeEntityType.FindProperty("Int32ReadOnlyCollection"); + var int64 = runtimeEntityType.FindProperty("Int64"); + var int64Array = runtimeEntityType.FindProperty("Int64Array"); + var int8 = runtimeEntityType.FindProperty("Int8"); + var int8Array = runtimeEntityType.FindProperty("Int8Array"); + var intNumberToBytesConverterProperty = runtimeEntityType.FindProperty("IntNumberToBytesConverterProperty"); + var intNumberToStringConverterProperty = runtimeEntityType.FindProperty("IntNumberToStringConverterProperty"); + var nullIntToNullStringConverterProperty = runtimeEntityType.FindProperty("NullIntToNullStringConverterProperty"); + var nullableBool = runtimeEntityType.FindProperty("NullableBool"); + var nullableBoolArray = runtimeEntityType.FindProperty("NullableBoolArray"); + var nullableBytes = runtimeEntityType.FindProperty("NullableBytes"); + var nullableBytesArray = runtimeEntityType.FindProperty("NullableBytesArray"); + var nullableChar = runtimeEntityType.FindProperty("NullableChar"); + var nullableCharArray = runtimeEntityType.FindProperty("NullableCharArray"); + var nullableDateOnly = runtimeEntityType.FindProperty("NullableDateOnly"); + var nullableDateOnlyArray = runtimeEntityType.FindProperty("NullableDateOnlyArray"); + var nullableDateTime = runtimeEntityType.FindProperty("NullableDateTime"); + var nullableDateTimeArray = runtimeEntityType.FindProperty("NullableDateTimeArray"); + var nullableDecimal = runtimeEntityType.FindProperty("NullableDecimal"); + var nullableDecimalArray = runtimeEntityType.FindProperty("NullableDecimalArray"); + var nullableDouble = runtimeEntityType.FindProperty("NullableDouble"); + var nullableDoubleArray = runtimeEntityType.FindProperty("NullableDoubleArray"); + var nullableEnum16 = runtimeEntityType.FindProperty("NullableEnum16"); + var nullableEnum16Array = runtimeEntityType.FindProperty("NullableEnum16Array"); + var nullableEnum16AsString = runtimeEntityType.FindProperty("NullableEnum16AsString"); + var nullableEnum16AsStringArray = runtimeEntityType.FindProperty("NullableEnum16AsStringArray"); + var nullableEnum16AsStringCollection = runtimeEntityType.FindProperty("NullableEnum16AsStringCollection"); + var nullableEnum16Collection = runtimeEntityType.FindProperty("NullableEnum16Collection"); + var nullableEnum32 = runtimeEntityType.FindProperty("NullableEnum32"); + var nullableEnum32Array = runtimeEntityType.FindProperty("NullableEnum32Array"); + var nullableEnum32AsString = runtimeEntityType.FindProperty("NullableEnum32AsString"); + var nullableEnum32AsStringArray = runtimeEntityType.FindProperty("NullableEnum32AsStringArray"); + var nullableEnum32AsStringCollection = runtimeEntityType.FindProperty("NullableEnum32AsStringCollection"); + var nullableEnum32Collection = runtimeEntityType.FindProperty("NullableEnum32Collection"); + var nullableEnum64 = runtimeEntityType.FindProperty("NullableEnum64"); + var nullableEnum64Array = runtimeEntityType.FindProperty("NullableEnum64Array"); + var nullableEnum64AsString = runtimeEntityType.FindProperty("NullableEnum64AsString"); + var nullableEnum64AsStringArray = runtimeEntityType.FindProperty("NullableEnum64AsStringArray"); + var nullableEnum64AsStringCollection = runtimeEntityType.FindProperty("NullableEnum64AsStringCollection"); + var nullableEnum64Collection = runtimeEntityType.FindProperty("NullableEnum64Collection"); + var nullableEnum8 = runtimeEntityType.FindProperty("NullableEnum8"); + var nullableEnum8Array = runtimeEntityType.FindProperty("NullableEnum8Array"); + var nullableEnum8AsString = runtimeEntityType.FindProperty("NullableEnum8AsString"); + var nullableEnum8AsStringArray = runtimeEntityType.FindProperty("NullableEnum8AsStringArray"); + var nullableEnum8AsStringCollection = runtimeEntityType.FindProperty("NullableEnum8AsStringCollection"); + var nullableEnum8Collection = runtimeEntityType.FindProperty("NullableEnum8Collection"); + var nullableEnumU16 = runtimeEntityType.FindProperty("NullableEnumU16"); + var nullableEnumU16Array = runtimeEntityType.FindProperty("NullableEnumU16Array"); + var nullableEnumU16AsString = runtimeEntityType.FindProperty("NullableEnumU16AsString"); + var nullableEnumU16AsStringArray = runtimeEntityType.FindProperty("NullableEnumU16AsStringArray"); + var nullableEnumU16AsStringCollection = runtimeEntityType.FindProperty("NullableEnumU16AsStringCollection"); + var nullableEnumU16Collection = runtimeEntityType.FindProperty("NullableEnumU16Collection"); + var nullableEnumU32 = runtimeEntityType.FindProperty("NullableEnumU32"); + var nullableEnumU32Array = runtimeEntityType.FindProperty("NullableEnumU32Array"); + var nullableEnumU32AsString = runtimeEntityType.FindProperty("NullableEnumU32AsString"); + var nullableEnumU32AsStringArray = runtimeEntityType.FindProperty("NullableEnumU32AsStringArray"); + var nullableEnumU32AsStringCollection = runtimeEntityType.FindProperty("NullableEnumU32AsStringCollection"); + var nullableEnumU32Collection = runtimeEntityType.FindProperty("NullableEnumU32Collection"); + var nullableEnumU64 = runtimeEntityType.FindProperty("NullableEnumU64"); + var nullableEnumU64Array = runtimeEntityType.FindProperty("NullableEnumU64Array"); + var nullableEnumU64AsString = runtimeEntityType.FindProperty("NullableEnumU64AsString"); + var nullableEnumU64AsStringArray = runtimeEntityType.FindProperty("NullableEnumU64AsStringArray"); + var nullableEnumU64AsStringCollection = runtimeEntityType.FindProperty("NullableEnumU64AsStringCollection"); + var nullableEnumU64Collection = runtimeEntityType.FindProperty("NullableEnumU64Collection"); + var nullableEnumU8 = runtimeEntityType.FindProperty("NullableEnumU8"); + var nullableEnumU8Array = runtimeEntityType.FindProperty("NullableEnumU8Array"); + var nullableEnumU8AsString = runtimeEntityType.FindProperty("NullableEnumU8AsString"); + var nullableEnumU8AsStringArray = runtimeEntityType.FindProperty("NullableEnumU8AsStringArray"); + var nullableEnumU8AsStringCollection = runtimeEntityType.FindProperty("NullableEnumU8AsStringCollection"); + var nullableEnumU8Collection = runtimeEntityType.FindProperty("NullableEnumU8Collection"); + var nullableFloat = runtimeEntityType.FindProperty("NullableFloat"); + var nullableFloatArray = runtimeEntityType.FindProperty("NullableFloatArray"); + var nullableGuid = runtimeEntityType.FindProperty("NullableGuid"); + var nullableGuidArray = runtimeEntityType.FindProperty("NullableGuidArray"); + var nullableIPAddress = runtimeEntityType.FindProperty("NullableIPAddress"); + var nullableIPAddressArray = runtimeEntityType.FindProperty("NullableIPAddressArray"); + var nullableInt16 = runtimeEntityType.FindProperty("NullableInt16"); + var nullableInt16Array = runtimeEntityType.FindProperty("NullableInt16Array"); + var nullableInt32 = runtimeEntityType.FindProperty("NullableInt32"); + var nullableInt32Array = runtimeEntityType.FindProperty("NullableInt32Array"); + var nullableInt64 = runtimeEntityType.FindProperty("NullableInt64"); + var nullableInt64Array = runtimeEntityType.FindProperty("NullableInt64Array"); + var nullableInt8 = runtimeEntityType.FindProperty("NullableInt8"); + var nullableInt8Array = runtimeEntityType.FindProperty("NullableInt8Array"); + var nullablePhysicalAddress = runtimeEntityType.FindProperty("NullablePhysicalAddress"); + var nullablePhysicalAddressArray = runtimeEntityType.FindProperty("NullablePhysicalAddressArray"); + var nullableString = runtimeEntityType.FindProperty("NullableString"); + var nullableStringArray = runtimeEntityType.FindProperty("NullableStringArray"); + var nullableTimeOnly = runtimeEntityType.FindProperty("NullableTimeOnly"); + var nullableTimeOnlyArray = runtimeEntityType.FindProperty("NullableTimeOnlyArray"); + var nullableTimeSpan = runtimeEntityType.FindProperty("NullableTimeSpan"); + var nullableTimeSpanArray = runtimeEntityType.FindProperty("NullableTimeSpanArray"); + var nullableUInt16 = runtimeEntityType.FindProperty("NullableUInt16"); + var nullableUInt16Array = runtimeEntityType.FindProperty("NullableUInt16Array"); + var nullableUInt32 = runtimeEntityType.FindProperty("NullableUInt32"); + var nullableUInt32Array = runtimeEntityType.FindProperty("NullableUInt32Array"); + var nullableUInt64 = runtimeEntityType.FindProperty("NullableUInt64"); + var nullableUInt64Array = runtimeEntityType.FindProperty("NullableUInt64Array"); + var nullableUInt8 = runtimeEntityType.FindProperty("NullableUInt8"); + var nullableUInt8Array = runtimeEntityType.FindProperty("NullableUInt8Array"); + var nullableUri = runtimeEntityType.FindProperty("NullableUri"); + var nullableUriArray = runtimeEntityType.FindProperty("NullableUriArray"); + var physicalAddress = runtimeEntityType.FindProperty("PhysicalAddress"); + var physicalAddressArray = runtimeEntityType.FindProperty("PhysicalAddressArray"); + var physicalAddressToBytesConverterProperty = runtimeEntityType.FindProperty("PhysicalAddressToBytesConverterProperty"); + var physicalAddressToStringConverterProperty = runtimeEntityType.FindProperty("PhysicalAddressToStringConverterProperty"); + var @string = runtimeEntityType.FindProperty("String"); + var stringArray = runtimeEntityType.FindProperty("StringArray"); + var stringReadOnlyCollection = runtimeEntityType.FindProperty("StringReadOnlyCollection"); + var stringToBoolConverterProperty = runtimeEntityType.FindProperty("StringToBoolConverterProperty"); + var stringToBytesConverterProperty = runtimeEntityType.FindProperty("StringToBytesConverterProperty"); + var stringToCharConverterProperty = runtimeEntityType.FindProperty("StringToCharConverterProperty"); + var stringToDateOnlyConverterProperty = runtimeEntityType.FindProperty("StringToDateOnlyConverterProperty"); + var stringToDateTimeConverterProperty = runtimeEntityType.FindProperty("StringToDateTimeConverterProperty"); + var stringToDateTimeOffsetConverterProperty = runtimeEntityType.FindProperty("StringToDateTimeOffsetConverterProperty"); + var stringToDecimalNumberConverterProperty = runtimeEntityType.FindProperty("StringToDecimalNumberConverterProperty"); + var stringToDoubleNumberConverterProperty = runtimeEntityType.FindProperty("StringToDoubleNumberConverterProperty"); + var stringToEnumConverterProperty = runtimeEntityType.FindProperty("StringToEnumConverterProperty"); + var stringToGuidConverterProperty = runtimeEntityType.FindProperty("StringToGuidConverterProperty"); + var stringToIntNumberConverterProperty = runtimeEntityType.FindProperty("StringToIntNumberConverterProperty"); + var stringToTimeOnlyConverterProperty = runtimeEntityType.FindProperty("StringToTimeOnlyConverterProperty"); + var stringToTimeSpanConverterProperty = runtimeEntityType.FindProperty("StringToTimeSpanConverterProperty"); + var stringToUriConverterProperty = runtimeEntityType.FindProperty("StringToUriConverterProperty"); + var timeOnly = runtimeEntityType.FindProperty("TimeOnly"); + var timeOnlyArray = runtimeEntityType.FindProperty("TimeOnlyArray"); + var timeOnlyToStringConverterProperty = runtimeEntityType.FindProperty("TimeOnlyToStringConverterProperty"); + var timeOnlyToTicksConverterProperty = runtimeEntityType.FindProperty("TimeOnlyToTicksConverterProperty"); + var timeSpan = runtimeEntityType.FindProperty("TimeSpan"); + var timeSpanArray = runtimeEntityType.FindProperty("TimeSpanArray"); + var timeSpanToStringConverterProperty = runtimeEntityType.FindProperty("TimeSpanToStringConverterProperty"); + var timeSpanToTicksConverterProperty = runtimeEntityType.FindProperty("TimeSpanToTicksConverterProperty"); + var uInt16 = runtimeEntityType.FindProperty("UInt16"); + var uInt16Array = runtimeEntityType.FindProperty("UInt16Array"); + var uInt32 = runtimeEntityType.FindProperty("UInt32"); + var uInt32Array = runtimeEntityType.FindProperty("UInt32Array"); + var uInt64 = runtimeEntityType.FindProperty("UInt64"); + var uInt64Array = runtimeEntityType.FindProperty("UInt64Array"); + var uInt8 = runtimeEntityType.FindProperty("UInt8"); + var uInt8Array = runtimeEntityType.FindProperty("UInt8Array"); + var uInt8ReadOnlyCollection = runtimeEntityType.FindProperty("UInt8ReadOnlyCollection"); + var uri = runtimeEntityType.FindProperty("Uri"); + var uriArray = runtimeEntityType.FindProperty("UriArray"); + var uriToStringConverterProperty = runtimeEntityType.FindProperty("UriToStringConverterProperty"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNonNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg = ((ISnapshot)(new Snapshot, bool, bool, bool, byte[], byte[][], byte[], int, char, char[], char, DateOnly, DateOnly[], DateOnly, DateTime, DateTime[], DateTimeOffset, DateTimeOffset, DateTimeOffset, DateTime, DateTime, DateTime, decimal, decimal[], decimal, decimal, double>(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id)), ((ValueComparer)(((IProperty)@bool).GetValueComparer())).Snapshot(source.GetCurrentValue(@bool)), (((IEnumerable)(source.GetCurrentValue(boolArray))) == null ? null : ((bool[])(((ValueComparer>)(((IProperty)boolArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(boolArray))))))), (((IEnumerable)(source.GetCurrentValue>(boolReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer>)(((IProperty)boolReadOnlyCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(boolReadOnlyCollection))))))), ((ValueComparer)(((IProperty)boolToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(boolToStringConverterProperty)), ((ValueComparer)(((IProperty)boolToTwoValuesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(boolToTwoValuesConverterProperty)), ((ValueComparer)(((IProperty)boolToZeroOneConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(boolToZeroOneConverterProperty)), (source.GetCurrentValue(bytes) == null ? null : ((ValueComparer)(((IProperty)bytes).GetValueComparer())).Snapshot(source.GetCurrentValue(bytes))), (((object)(source.GetCurrentValue(bytesArray))) == null ? null : ((byte[][])(((ValueComparer)(((IProperty)bytesArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(bytesArray))))))), (source.GetCurrentValue(bytesToStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)bytesToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(bytesToStringConverterProperty))), ((ValueComparer)(((IProperty)castingConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(castingConverterProperty)), ((ValueComparer)(((IProperty)@char).GetValueComparer())).Snapshot(source.GetCurrentValue(@char)), (((IEnumerable)(source.GetCurrentValue(charArray))) == null ? null : ((char[])(((ValueComparer>)(((IProperty)charArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(charArray))))))), ((ValueComparer)(((IProperty)charToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(charToStringConverterProperty)), ((ValueComparer)(((IProperty)dateOnly).GetValueComparer())).Snapshot(source.GetCurrentValue(dateOnly)), (((IEnumerable)(source.GetCurrentValue(dateOnlyArray))) == null ? null : ((DateOnly[])(((ValueComparer>)(((IProperty)dateOnlyArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(dateOnlyArray))))))), ((ValueComparer)(((IProperty)dateOnlyToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateOnlyToStringConverterProperty)), ((ValueComparer)(((IProperty)dateTime).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTime)), (((IEnumerable)(source.GetCurrentValue(dateTimeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)dateTimeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(dateTimeArray))))))), ((ValueComparer)(((IProperty)dateTimeOffsetToBinaryConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeOffsetToBinaryConverterProperty)), ((ValueComparer)(((IProperty)dateTimeOffsetToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeOffsetToBytesConverterProperty)), ((ValueComparer)(((IProperty)dateTimeOffsetToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeOffsetToStringConverterProperty)), ((ValueComparer)(((IProperty)dateTimeToBinaryConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeToBinaryConverterProperty)), ((ValueComparer)(((IProperty)dateTimeToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeToStringConverterProperty)), ((ValueComparer)(((IProperty)dateTimeToTicksConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(dateTimeToTicksConverterProperty)), ((ValueComparer)(((IProperty)@decimal).GetValueComparer())).Snapshot(source.GetCurrentValue(@decimal)), (((IEnumerable)(source.GetCurrentValue(decimalArray))) == null ? null : ((decimal[])(((ValueComparer>)(((IProperty)decimalArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(decimalArray))))))), ((ValueComparer)(((IProperty)decimalNumberToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(decimalNumberToBytesConverterProperty)), ((ValueComparer)(((IProperty)decimalNumberToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(decimalNumberToStringConverterProperty)), ((ValueComparer)(((IProperty)@double).GetValueComparer())).Snapshot(source.GetCurrentValue(@double))))); + var structuralType0 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg0 = ((ISnapshot)(new Snapshot, List, CompiledModelTestBase.Enum32, CompiledModelTestBase.Enum32[], CompiledModelTestBase.Enum32, CompiledModelTestBase.Enum32[], List, List, CompiledModelTestBase.Enum64, CompiledModelTestBase.Enum64[], CompiledModelTestBase.Enum64, CompiledModelTestBase.Enum64[], List, List, CompiledModelTestBase.Enum8, CompiledModelTestBase.Enum8[], CompiledModelTestBase.Enum8, CompiledModelTestBase.Enum8[], List, List, CompiledModelTestBase.Enum32, CompiledModelTestBase.Enum32, CompiledModelTestBase.EnumU16>((((IEnumerable)(source.GetCurrentValue(doubleArray))) == null ? null : ((double[])(((ValueComparer>)(((IProperty)doubleArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(doubleArray))))))), ((ValueComparer)(((IProperty)doubleNumberToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(doubleNumberToBytesConverterProperty)), ((ValueComparer)(((IProperty)doubleNumberToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(doubleNumberToStringConverterProperty)), ((ValueComparer)(((IProperty)enum16).GetValueComparer())).Snapshot(source.GetCurrentValue(enum16)), (((IEnumerable)(source.GetCurrentValue(enum16Array))) == null ? null : ((CompiledModelTestBase.Enum16[])(((ValueComparer>)(((IProperty)enum16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum16Array))))))), ((ValueComparer)(((IProperty)enum16AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enum16AsString)), (((IEnumerable)(source.GetCurrentValue(enum16AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum16[])(((ValueComparer>)(((IProperty)enum16AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum16AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enum16AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum16AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum16AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enum16Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum16Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum16Collection))))))), ((ValueComparer)(((IProperty)enum32).GetValueComparer())).Snapshot(source.GetCurrentValue(enum32)), (((IEnumerable)(source.GetCurrentValue(enum32Array))) == null ? null : ((CompiledModelTestBase.Enum32[])(((ValueComparer>)(((IProperty)enum32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum32Array))))))), ((ValueComparer)(((IProperty)enum32AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enum32AsString)), (((IEnumerable)(source.GetCurrentValue(enum32AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum32[])(((ValueComparer>)(((IProperty)enum32AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum32AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enum32AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum32AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum32AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enum32Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum32Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum32Collection))))))), ((ValueComparer)(((IProperty)enum64).GetValueComparer())).Snapshot(source.GetCurrentValue(enum64)), (((IEnumerable)(source.GetCurrentValue(enum64Array))) == null ? null : ((CompiledModelTestBase.Enum64[])(((ValueComparer>)(((IProperty)enum64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum64Array))))))), ((ValueComparer)(((IProperty)enum64AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enum64AsString)), (((IEnumerable)(source.GetCurrentValue(enum64AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum64[])(((ValueComparer>)(((IProperty)enum64AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum64AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enum64AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum64AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum64AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enum64Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum64Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum64Collection))))))), ((ValueComparer)(((IProperty)enum8).GetValueComparer())).Snapshot(source.GetCurrentValue(enum8)), (((IEnumerable)(source.GetCurrentValue(enum8Array))) == null ? null : ((CompiledModelTestBase.Enum8[])(((ValueComparer>)(((IProperty)enum8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum8Array))))))), ((ValueComparer)(((IProperty)enum8AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enum8AsString)), (((IEnumerable)(source.GetCurrentValue(enum8AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum8[])(((ValueComparer>)(((IProperty)enum8AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enum8AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enum8AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum8AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum8AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enum8Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enum8Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enum8Collection))))))), ((ValueComparer)(((IProperty)enumToNumberConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(enumToNumberConverterProperty)), ((ValueComparer)(((IProperty)enumToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(enumToStringConverterProperty)), ((ValueComparer)(((IProperty)enumU16).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU16))))); + var structuralType1 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg1 = ((ISnapshot)(new Snapshot, List, CompiledModelTestBase.EnumU32, CompiledModelTestBase.EnumU32[], CompiledModelTestBase.EnumU32, CompiledModelTestBase.EnumU32[], List, List, CompiledModelTestBase.EnumU64, CompiledModelTestBase.EnumU64[], CompiledModelTestBase.EnumU64, CompiledModelTestBase.EnumU64[], List, List, CompiledModelTestBase.EnumU8, CompiledModelTestBase.EnumU8[], CompiledModelTestBase.EnumU8, CompiledModelTestBase.EnumU8[], List, List, float, float[], Guid, Guid[], Guid, Guid, IPAddress>((((IEnumerable)(source.GetCurrentValue(enumU16Array))) == null ? null : ((CompiledModelTestBase.EnumU16[])(((ValueComparer>)(((IProperty)enumU16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU16Array))))))), ((ValueComparer)(((IProperty)enumU16AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU16AsString)), (((IEnumerable)(source.GetCurrentValue(enumU16AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU16[])(((ValueComparer>)(((IProperty)enumU16AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU16AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enumU16AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU16AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU16AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enumU16Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU16Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU16Collection))))))), ((ValueComparer)(((IProperty)enumU32).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU32)), (((IEnumerable)(source.GetCurrentValue(enumU32Array))) == null ? null : ((CompiledModelTestBase.EnumU32[])(((ValueComparer>)(((IProperty)enumU32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU32Array))))))), ((ValueComparer)(((IProperty)enumU32AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU32AsString)), (((IEnumerable)(source.GetCurrentValue(enumU32AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU32[])(((ValueComparer>)(((IProperty)enumU32AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU32AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enumU32AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU32AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU32AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enumU32Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU32Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU32Collection))))))), ((ValueComparer)(((IProperty)enumU64).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU64)), (((IEnumerable)(source.GetCurrentValue(enumU64Array))) == null ? null : ((CompiledModelTestBase.EnumU64[])(((ValueComparer>)(((IProperty)enumU64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU64Array))))))), ((ValueComparer)(((IProperty)enumU64AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU64AsString)), (((IEnumerable)(source.GetCurrentValue(enumU64AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU64[])(((ValueComparer>)(((IProperty)enumU64AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU64AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enumU64AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU64AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU64AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enumU64Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU64Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU64Collection))))))), ((ValueComparer)(((IProperty)enumU8).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU8)), (((IEnumerable)(source.GetCurrentValue(enumU8Array))) == null ? null : ((CompiledModelTestBase.EnumU8[])(((ValueComparer>)(((IProperty)enumU8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU8Array))))))), ((ValueComparer)(((IProperty)enumU8AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(enumU8AsString)), (((IEnumerable)(source.GetCurrentValue(enumU8AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU8[])(((ValueComparer>)(((IProperty)enumU8AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(enumU8AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(enumU8AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU8AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU8AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(enumU8Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)enumU8Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(enumU8Collection))))))), ((ValueComparer)(((IProperty)@float).GetValueComparer())).Snapshot(source.GetCurrentValue(@float)), (((IEnumerable)(source.GetCurrentValue(floatArray))) == null ? null : ((float[])(((ValueComparer>)(((IProperty)floatArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(floatArray))))))), ((ValueComparer)(((IProperty)guid).GetValueComparer())).Snapshot(source.GetCurrentValue(guid)), (((IEnumerable)(source.GetCurrentValue(guidArray))) == null ? null : ((Guid[])(((ValueComparer>)(((IProperty)guidArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(guidArray))))))), ((ValueComparer)(((IProperty)guidToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(guidToBytesConverterProperty)), ((ValueComparer)(((IProperty)guidToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(guidToStringConverterProperty)), (source.GetCurrentValue(iPAddress) == null ? null : ((ValueComparer)(((IProperty)iPAddress).GetValueComparer())).Snapshot(source.GetCurrentValue(iPAddress)))))); + var structuralType2 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg2 = ((ISnapshot)(new Snapshot, IPAddress, IPAddress, short, short[], int, int[], IReadOnlyCollection, long, long[], sbyte, sbyte[], int, int, int?, bool?, bool? [], byte[], byte[][], char?, char? [], DateOnly?, DateOnly? [], DateTime?, DateTime? [], decimal?, decimal? [], double?, double? []>((((object)(source.GetCurrentValue(iPAddressArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)iPAddressArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(iPAddressArray))))))), (((object)(source.GetCurrentValue>(iPAddressReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer)(((IProperty)iPAddressReadOnlyCollection).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(iPAddressReadOnlyCollection))))))), (source.GetCurrentValue(iPAddressToBytesConverterProperty) == null ? null : ((ValueComparer)(((IProperty)iPAddressToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(iPAddressToBytesConverterProperty))), (source.GetCurrentValue(iPAddressToStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)iPAddressToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(iPAddressToStringConverterProperty))), ((ValueComparer)(((IProperty)int16).GetValueComparer())).Snapshot(source.GetCurrentValue(int16)), (((IEnumerable)(source.GetCurrentValue(int16Array))) == null ? null : ((short[])(((ValueComparer>)(((IProperty)int16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(int16Array))))))), ((ValueComparer)(((IProperty)int32).GetValueComparer())).Snapshot(source.GetCurrentValue(int32)), (((IEnumerable)(source.GetCurrentValue(int32Array))) == null ? null : ((int[])(((ValueComparer>)(((IProperty)int32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(int32Array))))))), (((IEnumerable)(source.GetCurrentValue>(int32ReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer>)(((IProperty)int32ReadOnlyCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(int32ReadOnlyCollection))))))), ((ValueComparer)(((IProperty)int64).GetValueComparer())).Snapshot(source.GetCurrentValue(int64)), (((IEnumerable)(source.GetCurrentValue(int64Array))) == null ? null : ((long[])(((ValueComparer>)(((IProperty)int64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(int64Array))))))), ((ValueComparer)(((IProperty)int8).GetValueComparer())).Snapshot(source.GetCurrentValue(int8)), (((IEnumerable)(source.GetCurrentValue(int8Array))) == null ? null : ((sbyte[])(((ValueComparer>)(((IProperty)int8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(int8Array))))))), ((ValueComparer)(((IProperty)intNumberToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(intNumberToBytesConverterProperty)), ((ValueComparer)(((IProperty)intNumberToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(intNumberToStringConverterProperty)), (source.GetCurrentValue(nullIntToNullStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)nullIntToNullStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(nullIntToNullStringConverterProperty))), (source.GetCurrentValue(nullableBool) == null ? null : ((ValueComparer)(((IProperty)nullableBool).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableBool))), (((IEnumerable)(source.GetCurrentValue(nullableBoolArray))) == null ? null : ((bool? [])(((ValueComparer>)(((IProperty)nullableBoolArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableBoolArray))))))), (source.GetCurrentValue(nullableBytes) == null ? null : ((ValueComparer)(((IProperty)nullableBytes).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableBytes))), (((object)(source.GetCurrentValue(nullableBytesArray))) == null ? null : ((byte[][])(((ValueComparer)(((IProperty)nullableBytesArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullableBytesArray))))))), (source.GetCurrentValue(nullableChar) == null ? null : ((ValueComparer)(((IProperty)nullableChar).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableChar))), (((IEnumerable)(source.GetCurrentValue(nullableCharArray))) == null ? null : ((char? [])(((ValueComparer>)(((IProperty)nullableCharArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableCharArray))))))), (source.GetCurrentValue(nullableDateOnly) == null ? null : ((ValueComparer)(((IProperty)nullableDateOnly).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableDateOnly))), (((IEnumerable)(source.GetCurrentValue(nullableDateOnlyArray))) == null ? null : ((DateOnly? [])(((ValueComparer>)(((IProperty)nullableDateOnlyArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableDateOnlyArray))))))), (source.GetCurrentValue(nullableDateTime) == null ? null : ((ValueComparer)(((IProperty)nullableDateTime).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableDateTime))), (((IEnumerable)(source.GetCurrentValue(nullableDateTimeArray))) == null ? null : ((DateTime? [])(((ValueComparer>)(((IProperty)nullableDateTimeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableDateTimeArray))))))), (source.GetCurrentValue(nullableDecimal) == null ? null : ((ValueComparer)(((IProperty)nullableDecimal).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableDecimal))), (((IEnumerable)(source.GetCurrentValue(nullableDecimalArray))) == null ? null : ((decimal? [])(((ValueComparer>)(((IProperty)nullableDecimalArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableDecimalArray))))))), (source.GetCurrentValue(nullableDouble) == null ? null : ((ValueComparer)(((IProperty)nullableDouble).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableDouble))), (((IEnumerable)(source.GetCurrentValue(nullableDoubleArray))) == null ? null : ((double? [])(((ValueComparer>)(((IProperty)nullableDoubleArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableDoubleArray)))))))))); + var structuralType3 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg3 = ((ISnapshot)(new Snapshot, List, CompiledModelTestBase.Enum32?, CompiledModelTestBase.Enum32? [], CompiledModelTestBase.Enum32?, CompiledModelTestBase.Enum32? [], List, List, CompiledModelTestBase.Enum64?, CompiledModelTestBase.Enum64? [], CompiledModelTestBase.Enum64?, CompiledModelTestBase.Enum64? [], List, List, CompiledModelTestBase.Enum8?, CompiledModelTestBase.Enum8? [], CompiledModelTestBase.Enum8?, CompiledModelTestBase.Enum8? [], List, List, CompiledModelTestBase.EnumU16?, CompiledModelTestBase.EnumU16? [], CompiledModelTestBase.EnumU16?, CompiledModelTestBase.EnumU16? [], List, List>((source.GetCurrentValue(nullableEnum16) == null ? null : ((ValueComparer)(((IProperty)nullableEnum16).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum16))), (((IEnumerable)(source.GetCurrentValue(nullableEnum16Array))) == null ? null : ((CompiledModelTestBase.Enum16? [])(((ValueComparer>)(((IProperty)nullableEnum16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum16Array))))))), (source.GetCurrentValue(nullableEnum16AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnum16AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum16AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnum16AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum16? [])(((ValueComparer>)(((IProperty)nullableEnum16AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum16AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum16AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum16AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum16AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum16Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum16Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum16Collection))))))), (source.GetCurrentValue(nullableEnum32) == null ? null : ((ValueComparer)(((IProperty)nullableEnum32).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum32))), (((IEnumerable)(source.GetCurrentValue(nullableEnum32Array))) == null ? null : ((CompiledModelTestBase.Enum32? [])(((ValueComparer>)(((IProperty)nullableEnum32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum32Array))))))), (source.GetCurrentValue(nullableEnum32AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnum32AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum32AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnum32AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum32? [])(((ValueComparer>)(((IProperty)nullableEnum32AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum32AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum32AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum32AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum32AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum32Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum32Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum32Collection))))))), (source.GetCurrentValue(nullableEnum64) == null ? null : ((ValueComparer)(((IProperty)nullableEnum64).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum64))), (((IEnumerable)(source.GetCurrentValue(nullableEnum64Array))) == null ? null : ((CompiledModelTestBase.Enum64? [])(((ValueComparer>)(((IProperty)nullableEnum64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum64Array))))))), (source.GetCurrentValue(nullableEnum64AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnum64AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum64AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnum64AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum64? [])(((ValueComparer>)(((IProperty)nullableEnum64AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum64AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum64AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum64AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum64AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum64Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum64Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum64Collection))))))), (source.GetCurrentValue(nullableEnum8) == null ? null : ((ValueComparer)(((IProperty)nullableEnum8).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum8))), (((IEnumerable)(source.GetCurrentValue(nullableEnum8Array))) == null ? null : ((CompiledModelTestBase.Enum8? [])(((ValueComparer>)(((IProperty)nullableEnum8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum8Array))))))), (source.GetCurrentValue(nullableEnum8AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnum8AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnum8AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnum8AsStringArray))) == null ? null : ((CompiledModelTestBase.Enum8? [])(((ValueComparer>)(((IProperty)nullableEnum8AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnum8AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum8AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum8AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum8AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnum8Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnum8Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnum8Collection))))))), (source.GetCurrentValue(nullableEnumU16) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU16).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU16))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU16Array))) == null ? null : ((CompiledModelTestBase.EnumU16? [])(((ValueComparer>)(((IProperty)nullableEnumU16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU16Array))))))), (source.GetCurrentValue(nullableEnumU16AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU16AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU16AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU16AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU16? [])(((ValueComparer>)(((IProperty)nullableEnumU16AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU16AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU16AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU16AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU16AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU16Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU16Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU16Collection)))))))))); + var structuralType4 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg4 = ((ISnapshot)(new Snapshot, List, CompiledModelTestBase.EnumU64?, CompiledModelTestBase.EnumU64? [], CompiledModelTestBase.EnumU64?, CompiledModelTestBase.EnumU64? [], List, List, CompiledModelTestBase.EnumU8?, CompiledModelTestBase.EnumU8? [], CompiledModelTestBase.EnumU8?, CompiledModelTestBase.EnumU8? [], List, List, float?, float? [], Guid?, Guid? [], IPAddress, IPAddress[], short?, short? [], int?, int? [], long?, long? []>((source.GetCurrentValue(nullableEnumU32) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU32).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU32))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU32Array))) == null ? null : ((CompiledModelTestBase.EnumU32? [])(((ValueComparer>)(((IProperty)nullableEnumU32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU32Array))))))), (source.GetCurrentValue(nullableEnumU32AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU32AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU32AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU32AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU32? [])(((ValueComparer>)(((IProperty)nullableEnumU32AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU32AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU32AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU32AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU32AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU32Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU32Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU32Collection))))))), (source.GetCurrentValue(nullableEnumU64) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU64).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU64))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU64Array))) == null ? null : ((CompiledModelTestBase.EnumU64? [])(((ValueComparer>)(((IProperty)nullableEnumU64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU64Array))))))), (source.GetCurrentValue(nullableEnumU64AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU64AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU64AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU64AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU64? [])(((ValueComparer>)(((IProperty)nullableEnumU64AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU64AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU64AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU64AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU64AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU64Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU64Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU64Collection))))))), (source.GetCurrentValue(nullableEnumU8) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU8).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU8))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU8Array))) == null ? null : ((CompiledModelTestBase.EnumU8? [])(((ValueComparer>)(((IProperty)nullableEnumU8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU8Array))))))), (source.GetCurrentValue(nullableEnumU8AsString) == null ? null : ((ValueComparer)(((IProperty)nullableEnumU8AsString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableEnumU8AsString))), (((IEnumerable)(source.GetCurrentValue(nullableEnumU8AsStringArray))) == null ? null : ((CompiledModelTestBase.EnumU8? [])(((ValueComparer>)(((IProperty)nullableEnumU8AsStringArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableEnumU8AsStringArray))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU8AsStringCollection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU8AsStringCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU8AsStringCollection))))))), (((IEnumerable)(source.GetCurrentValue>(nullableEnumU8Collection))) == null ? null : ((List)(((ValueComparer>)(((IProperty)nullableEnumU8Collection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(nullableEnumU8Collection))))))), (source.GetCurrentValue(nullableFloat) == null ? null : ((ValueComparer)(((IProperty)nullableFloat).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableFloat))), (((IEnumerable)(source.GetCurrentValue(nullableFloatArray))) == null ? null : ((float? [])(((ValueComparer>)(((IProperty)nullableFloatArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableFloatArray))))))), (source.GetCurrentValue(nullableGuid) == null ? null : ((ValueComparer)(((IProperty)nullableGuid).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableGuid))), (((IEnumerable)(source.GetCurrentValue(nullableGuidArray))) == null ? null : ((Guid? [])(((ValueComparer>)(((IProperty)nullableGuidArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableGuidArray))))))), (source.GetCurrentValue(nullableIPAddress) == null ? null : ((ValueComparer)(((IProperty)nullableIPAddress).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableIPAddress))), (((object)(source.GetCurrentValue(nullableIPAddressArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)nullableIPAddressArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullableIPAddressArray))))))), (source.GetCurrentValue(nullableInt16) == null ? null : ((ValueComparer)(((IProperty)nullableInt16).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableInt16))), (((IEnumerable)(source.GetCurrentValue(nullableInt16Array))) == null ? null : ((short? [])(((ValueComparer>)(((IProperty)nullableInt16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableInt16Array))))))), (source.GetCurrentValue(nullableInt32) == null ? null : ((ValueComparer)(((IProperty)nullableInt32).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableInt32))), (((IEnumerable)(source.GetCurrentValue(nullableInt32Array))) == null ? null : ((int? [])(((ValueComparer>)(((IProperty)nullableInt32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableInt32Array))))))), (source.GetCurrentValue(nullableInt64) == null ? null : ((ValueComparer)(((IProperty)nullableInt64).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableInt64))), (((IEnumerable)(source.GetCurrentValue(nullableInt64Array))) == null ? null : ((long? [])(((ValueComparer>)(((IProperty)nullableInt64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableInt64Array)))))))))); + var structuralType5 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg5 = ((ISnapshot)(new Snapshot, string, string, string>((source.GetCurrentValue(nullableInt8) == null ? null : ((ValueComparer)(((IProperty)nullableInt8).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableInt8))), (((IEnumerable)(source.GetCurrentValue(nullableInt8Array))) == null ? null : ((sbyte? [])(((ValueComparer>)(((IProperty)nullableInt8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableInt8Array))))))), (source.GetCurrentValue(nullablePhysicalAddress) == null ? null : ((ValueComparer)(((IProperty)nullablePhysicalAddress).GetValueComparer())).Snapshot(source.GetCurrentValue(nullablePhysicalAddress))), (((object)(source.GetCurrentValue(nullablePhysicalAddressArray))) == null ? null : ((PhysicalAddress[])(((ValueComparer)(((IProperty)nullablePhysicalAddressArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullablePhysicalAddressArray))))))), (source.GetCurrentValue(nullableString) == null ? null : ((ValueComparer)(((IProperty)nullableString).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableString))), (((object)(source.GetCurrentValue(nullableStringArray))) == null ? null : ((string[])(((ValueComparer)(((IProperty)nullableStringArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullableStringArray))))))), (source.GetCurrentValue(nullableTimeOnly) == null ? null : ((ValueComparer)(((IProperty)nullableTimeOnly).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableTimeOnly))), (((IEnumerable)(source.GetCurrentValue(nullableTimeOnlyArray))) == null ? null : ((TimeOnly? [])(((ValueComparer>)(((IProperty)nullableTimeOnlyArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableTimeOnlyArray))))))), (source.GetCurrentValue(nullableTimeSpan) == null ? null : ((ValueComparer)(((IProperty)nullableTimeSpan).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableTimeSpan))), (((IEnumerable)(source.GetCurrentValue(nullableTimeSpanArray))) == null ? null : ((TimeSpan? [])(((ValueComparer>)(((IProperty)nullableTimeSpanArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableTimeSpanArray))))))), (source.GetCurrentValue(nullableUInt16) == null ? null : ((ValueComparer)(((IProperty)nullableUInt16).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUInt16))), (((IEnumerable)(source.GetCurrentValue(nullableUInt16Array))) == null ? null : ((ushort? [])(((ValueComparer>)(((IProperty)nullableUInt16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableUInt16Array))))))), (source.GetCurrentValue(nullableUInt32) == null ? null : ((ValueComparer)(((IProperty)nullableUInt32).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUInt32))), (((IEnumerable)(source.GetCurrentValue(nullableUInt32Array))) == null ? null : ((uint? [])(((ValueComparer>)(((IProperty)nullableUInt32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableUInt32Array))))))), (source.GetCurrentValue(nullableUInt64) == null ? null : ((ValueComparer)(((IProperty)nullableUInt64).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUInt64))), (((IEnumerable)(source.GetCurrentValue(nullableUInt64Array))) == null ? null : ((ulong? [])(((ValueComparer>)(((IProperty)nullableUInt64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableUInt64Array))))))), (source.GetCurrentValue(nullableUInt8) == null ? null : ((ValueComparer)(((IProperty)nullableUInt8).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUInt8))), (((IEnumerable)(source.GetCurrentValue(nullableUInt8Array))) == null ? null : ((byte? [])(((ValueComparer>)(((IProperty)nullableUInt8Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(nullableUInt8Array))))))), (source.GetCurrentValue(nullableUri) == null ? null : ((ValueComparer)(((IProperty)nullableUri).GetValueComparer())).Snapshot(source.GetCurrentValue(nullableUri))), (((object)(source.GetCurrentValue(nullableUriArray))) == null ? null : ((Uri[])(((ValueComparer)(((IProperty)nullableUriArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(nullableUriArray))))))), (source.GetCurrentValue(physicalAddress) == null ? null : ((ValueComparer)(((IProperty)physicalAddress).GetValueComparer())).Snapshot(source.GetCurrentValue(physicalAddress))), (((object)(source.GetCurrentValue(physicalAddressArray))) == null ? null : ((PhysicalAddress[])(((ValueComparer)(((IProperty)physicalAddressArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(physicalAddressArray))))))), (source.GetCurrentValue(physicalAddressToBytesConverterProperty) == null ? null : ((ValueComparer)(((IProperty)physicalAddressToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(physicalAddressToBytesConverterProperty))), (source.GetCurrentValue(physicalAddressToStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)physicalAddressToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(physicalAddressToStringConverterProperty))), (source.GetCurrentValue(@string) == null ? null : ((ValueComparer)(((IProperty)@string).GetValueComparer())).Snapshot(source.GetCurrentValue(@string))), (((object)(source.GetCurrentValue(stringArray))) == null ? null : ((string[])(((ValueComparer)(((IProperty)stringArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(stringArray))))))), (((object)(source.GetCurrentValue>(stringReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer)(((IProperty)stringReadOnlyCollection).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(stringReadOnlyCollection))))))), (source.GetCurrentValue(stringToBoolConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToBoolConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToBoolConverterProperty))), (source.GetCurrentValue(stringToBytesConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToBytesConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToBytesConverterProperty))), (source.GetCurrentValue(stringToCharConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToCharConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToCharConverterProperty)))))); + var structuralType6 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + var liftedArg6 = ((ISnapshot)(new Snapshot, Uri, Uri[]>((source.GetCurrentValue(stringToDateOnlyConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDateOnlyConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDateOnlyConverterProperty))), (source.GetCurrentValue(stringToDateTimeConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDateTimeConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDateTimeConverterProperty))), (source.GetCurrentValue(stringToDateTimeOffsetConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDateTimeOffsetConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDateTimeOffsetConverterProperty))), (source.GetCurrentValue(stringToDecimalNumberConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDecimalNumberConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDecimalNumberConverterProperty))), (source.GetCurrentValue(stringToDoubleNumberConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToDoubleNumberConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToDoubleNumberConverterProperty))), (source.GetCurrentValue(stringToEnumConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToEnumConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToEnumConverterProperty))), (source.GetCurrentValue(stringToGuidConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToGuidConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToGuidConverterProperty))), (source.GetCurrentValue(stringToIntNumberConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToIntNumberConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToIntNumberConverterProperty))), (source.GetCurrentValue(stringToTimeOnlyConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToTimeOnlyConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToTimeOnlyConverterProperty))), (source.GetCurrentValue(stringToTimeSpanConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToTimeSpanConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToTimeSpanConverterProperty))), (source.GetCurrentValue(stringToUriConverterProperty) == null ? null : ((ValueComparer)(((IProperty)stringToUriConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(stringToUriConverterProperty))), ((ValueComparer)(((IProperty)timeOnly).GetValueComparer())).Snapshot(source.GetCurrentValue(timeOnly)), (((IEnumerable)(source.GetCurrentValue(timeOnlyArray))) == null ? null : ((TimeOnly[])(((ValueComparer>)(((IProperty)timeOnlyArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(timeOnlyArray))))))), ((ValueComparer)(((IProperty)timeOnlyToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(timeOnlyToStringConverterProperty)), ((ValueComparer)(((IProperty)timeOnlyToTicksConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(timeOnlyToTicksConverterProperty)), ((ValueComparer)(((IProperty)timeSpan).GetValueComparer())).Snapshot(source.GetCurrentValue(timeSpan)), (((IEnumerable)(source.GetCurrentValue(timeSpanArray))) == null ? null : ((TimeSpan[])(((ValueComparer>)(((IProperty)timeSpanArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(timeSpanArray))))))), ((ValueComparer)(((IProperty)timeSpanToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(timeSpanToStringConverterProperty)), ((ValueComparer)(((IProperty)timeSpanToTicksConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(timeSpanToTicksConverterProperty)), ((ValueComparer)(((IProperty)uInt16).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt16)), (((IEnumerable)(source.GetCurrentValue(uInt16Array))) == null ? null : ((ushort[])(((ValueComparer>)(((IProperty)uInt16Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(uInt16Array))))))), ((ValueComparer)(((IProperty)uInt32).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt32)), (((IEnumerable)(source.GetCurrentValue(uInt32Array))) == null ? null : ((uint[])(((ValueComparer>)(((IProperty)uInt32Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(uInt32Array))))))), ((ValueComparer)(((IProperty)uInt64).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt64)), (((IEnumerable)(source.GetCurrentValue(uInt64Array))) == null ? null : ((ulong[])(((ValueComparer>)(((IProperty)uInt64Array).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(uInt64Array))))))), ((ValueComparer)(((IProperty)uInt8).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt8)), (source.GetCurrentValue(uInt8Array) == null ? null : ((ValueComparer)(((IProperty)uInt8Array).GetValueComparer())).Snapshot(source.GetCurrentValue(uInt8Array))), (((IEnumerable)(source.GetCurrentValue>(uInt8ReadOnlyCollection))) == null ? null : ((IReadOnlyCollection)(((ValueComparer>)(((IProperty)uInt8ReadOnlyCollection).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(uInt8ReadOnlyCollection))))))), (source.GetCurrentValue(uri) == null ? null : ((ValueComparer)(((IProperty)uri).GetValueComparer())).Snapshot(source.GetCurrentValue(uri))), (((object)(source.GetCurrentValue(uriArray))) == null ? null : ((Uri[])(((ValueComparer)(((IProperty)uriArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(uriArray)))))))))); + var structuralType7 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + return ((ISnapshot)(new MultiSnapshot(new ISnapshot[] { liftedArg, liftedArg0, liftedArg1, liftedArg2, liftedArg3, liftedArg4, liftedArg5, liftedArg6, ((ISnapshot)(new Snapshot((source.GetCurrentValue(uriToStringConverterProperty) == null ? null : ((ValueComparer)(((IProperty)uriToStringConverterProperty).GetValueComparer())).Snapshot(source.GetCurrentValue(uriToStringConverterProperty)))))) }))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(CompiledModelTestBase.ManyTypesId)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(CompiledModelTestBase.ManyTypesId))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => Snapshot.Empty); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.ManyTypes)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 241, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 241, + shadowCount: 0, + relationshipCount: 1, + storeGeneratedCount: 1)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "ManyTypes"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesUnsafeAccessors.cs new file mode 100644 index 00000000..48de8dc1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/ManyTypesUnsafeAccessors.cs @@ -0,0 +1,739 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.NetworkInformation; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class ManyTypesUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.ManyTypesId Id(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool Bool(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool[] BoolArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_boolReadOnlyCollection")] + public static extern ref List _boolReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool BoolToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool BoolToTwoValuesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool BoolToZeroOneConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] Bytes(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[][] BytesArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] BytesToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int CastingConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char Char(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char[] CharArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char CharToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly DateOnly(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly[] DateOnlyArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly DateOnlyToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime DateTime(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime[] DateTimeArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTimeOffset DateTimeOffsetToBinaryConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTimeOffset DateTimeOffsetToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTimeOffset DateTimeOffsetToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime DateTimeToBinaryConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime DateTimeToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime DateTimeToTicksConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal Decimal(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal[] DecimalArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal DecimalNumberToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal DecimalNumberToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double Double(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double[] DoubleArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double DoubleNumberToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double DoubleNumberToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16 Enum16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16[] Enum16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16 Enum16AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16[] Enum16AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum16AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum16Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32 Enum32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32[] Enum32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32 Enum32AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32[] Enum32AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum32AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum32Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64 Enum64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64[] Enum64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64 Enum64AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64[] Enum64AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum64AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum64Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8 Enum8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8[] Enum8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8 Enum8AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8[] Enum8AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum8AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List Enum8Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32 EnumToNumberConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32 EnumToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16 EnumU16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16[] EnumU16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16 EnumU16AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16[] EnumU16AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU16AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU16Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32 EnumU32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32[] EnumU32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32 EnumU32AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32[] EnumU32AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU32AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU32Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64 EnumU64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64[] EnumU64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64 EnumU64AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64[] EnumU64AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU64AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU64Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8 EnumU8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8[] EnumU8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8 EnumU8AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8[] EnumU8AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU8AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List EnumU8Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref float Float(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref float[] FloatArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid Guid(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid[] GuidArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid GuidToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid GuidToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress IPAddress(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress[] IPAddressArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_ipAddressReadOnlyCollection")] + public static extern ref List _ipAddressReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress IPAddressToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress IPAddressToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref short Int16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref short[] Int16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int Int32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int[] Int32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_int32ReadOnlyCollection")] + public static extern ref List _int32ReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long Int64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long[] Int64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref sbyte Int8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref sbyte[] Int8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int IntNumberToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int IntNumberToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int? NullIntToNullStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool? NullableBool(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref bool?[] NullableBoolArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] NullableBytes(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[][] NullableBytesArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char? NullableChar(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref char?[] NullableCharArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly? NullableDateOnly(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateOnly?[] NullableDateOnlyArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime? NullableDateTime(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime?[] NullableDateTimeArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal? NullableDecimal(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref decimal?[] NullableDecimalArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double? NullableDouble(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref double?[] NullableDoubleArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16? NullableEnum16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16?[] NullableEnum16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16? NullableEnum16AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum16?[] NullableEnum16AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum16AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum16Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32? NullableEnum32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32?[] NullableEnum32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32? NullableEnum32AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum32?[] NullableEnum32AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum32AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum32Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64? NullableEnum64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64?[] NullableEnum64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64? NullableEnum64AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum64?[] NullableEnum64AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum64AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum64Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8? NullableEnum8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8?[] NullableEnum8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8? NullableEnum8AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.Enum8?[] NullableEnum8AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum8AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnum8Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16? NullableEnumU16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16?[] NullableEnumU16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16? NullableEnumU16AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU16?[] NullableEnumU16AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU16AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU16Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32? NullableEnumU32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32?[] NullableEnumU32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32? NullableEnumU32AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU32?[] NullableEnumU32AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU32AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU32Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64? NullableEnumU64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64?[] NullableEnumU64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64? NullableEnumU64AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU64?[] NullableEnumU64AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU64AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU64Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8? NullableEnumU8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8?[] NullableEnumU8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8? NullableEnumU8AsString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.EnumU8?[] NullableEnumU8AsStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU8AsStringCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List NullableEnumU8Collection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref float? NullableFloat(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref float?[] NullableFloatArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid? NullableGuid(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Guid?[] NullableGuidArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress NullableIPAddress(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress[] NullableIPAddressArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref short? NullableInt16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref short?[] NullableInt16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int? NullableInt32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int?[] NullableInt32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long? NullableInt64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long?[] NullableInt64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref sbyte? NullableInt8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref sbyte?[] NullableInt8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress NullablePhysicalAddress(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress[] NullablePhysicalAddressArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string NullableString(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string[] NullableStringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly? NullableTimeOnly(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly?[] NullableTimeOnlyArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan? NullableTimeSpan(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan?[] NullableTimeSpanArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ushort? NullableUInt16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ushort?[] NullableUInt16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref uint? NullableUInt32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref uint?[] NullableUInt32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ulong? NullableUInt64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ulong?[] NullableUInt64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte? NullableUInt8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte?[] NullableUInt8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri NullableUri(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri[] NullableUriArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress PhysicalAddress(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress[] PhysicalAddressArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress PhysicalAddressToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref PhysicalAddress PhysicalAddressToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string String(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string[] StringArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_stringReadOnlyCollection")] + public static extern ref List _stringReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToBoolConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToBytesConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToCharConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDateOnlyConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDateTimeConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDateTimeOffsetConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDecimalNumberConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToDoubleNumberConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToEnumConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToGuidConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToIntNumberConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToTimeOnlyConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToTimeSpanConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string StringToUriConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly TimeOnly(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly[] TimeOnlyArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly TimeOnlyToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeOnly TimeOnlyToTicksConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan TimeSpan(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan[] TimeSpanArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan TimeSpanToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TimeSpan TimeSpanToTicksConverterProperty(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ushort UInt16(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ushort[] UInt16Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref uint UInt32(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref uint[] UInt32Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ulong UInt64(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ulong[] UInt64Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte UInt8(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] UInt8Array(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_uInt8ReadOnlyCollection")] + public static extern ref List _uInt8ReadOnlyCollection(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri Uri(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri[] UriArray(CompiledModelTestBase.ManyTypes @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref Uri UriToStringConverterProperty(CompiledModelTestBase.ManyTypes @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedType0EntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedType0EntityType.cs new file mode 100644 index 00000000..31ed9c0a --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedType0EntityType.cs @@ -0,0 +1,933 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class OwnedType0EntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>.ManyOwned#OwnedType", + typeof(CompiledModelTestBase.OwnedType), + baseEntityType, + sharedClrType: true, + propertyCount: 13, + servicePropertyCount: 1, + foreignKeyCount: 1, + keyCount: 1); + + var principalDerivedId = runtimeEntityType.AddProperty( + "PrincipalDerivedId", + typeof(long), + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0L); + principalDerivedId.SetAccessors( + long (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && entry.ReadShadowValue(0) == 0L ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + long (IInternalEntry entry) => entry.ReadShadowValue(0), + long (IInternalEntry entry) => entry.ReadOriginalValue(principalDerivedId, 0), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalDerivedId, 0)); + principalDerivedId.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: 0, + relationshipIndex: 0, + storeGenerationIndex: 0); + principalDerivedId.TypeMapping = LibRedLongTypeMapping.Default; + principalDerivedId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalDerivedId)); + + var principalDerivedAlternateId = runtimeEntityType.AddProperty( + "PrincipalDerivedAlternateId", + typeof(Guid), + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + principalDerivedAlternateId.SetAccessors( + Guid (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(1) ? entry.ReadStoreGeneratedValue(1) : (entry.FlaggedAsTemporary(1) && entry.ReadShadowValue(1) == new Guid("00000000-0000-0000-0000-000000000000") ? entry.ReadTemporaryValue(1) : entry.ReadShadowValue(1))), + Guid (IInternalEntry entry) => entry.ReadShadowValue(1), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(principalDerivedAlternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalDerivedAlternateId, 1)); + principalDerivedAlternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: 1, + relationshipIndex: 1, + storeGenerationIndex: 1); + principalDerivedAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + principalDerivedAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalDerivedAlternateId)); + + var __synthesizedOrdinal = runtimeEntityType.AddProperty( + "__synthesizedOrdinal", + typeof(int), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0); + __synthesizedOrdinal.SetAccessors( + int (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(2) ? entry.ReadStoreGeneratedValue(2) : (entry.FlaggedAsTemporary(2) && entry.ReadShadowValue(2) == 0 ? entry.ReadTemporaryValue(2) : entry.ReadShadowValue(2))), + int (IInternalEntry entry) => entry.ReadShadowValue(2), + int (IInternalEntry entry) => entry.ReadOriginalValue(__synthesizedOrdinal, 2), + int (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(__synthesizedOrdinal, 2)); + __synthesizedOrdinal.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: 2, + relationshipIndex: 2, + storeGenerationIndex: 2); + __synthesizedOrdinal.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + __synthesizedOrdinal.SetCurrentValueComparer(new EntryCurrentValueComparer(__synthesizedOrdinal)); + + var details = runtimeEntityType.AddProperty( + "Details", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_details", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + details.SetGetter( + string (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._details(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._details(instance) == null); + details.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetAccessors( + string (IInternalEntry entry) => OwnedTypeUnsafeAccessors._details(((CompiledModelTestBase.OwnedType)(entry.Entity))), + string (IInternalEntry entry) => OwnedTypeUnsafeAccessors._details(((CompiledModelTestBase.OwnedType)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(details, 3), + string (IInternalEntry entry) => entry.GetCurrentValue(details)); + details.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + details.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var number = runtimeEntityType.AddProperty( + "Number", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Number", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0); + number.SetGetter( + int (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance) == 0); + number.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetAccessors( + int (IInternalEntry entry) => OwnedTypeUnsafeAccessors.Number(((CompiledModelTestBase.OwnedType)(entry.Entity))), + int (IInternalEntry entry) => OwnedTypeUnsafeAccessors.Number(((CompiledModelTestBase.OwnedType)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(number, 4), + int (IInternalEntry entry) => entry.GetCurrentValue(number)); + number.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + number.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance) == null); + refTypeArray.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 5), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 6), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeIList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance) == null); + refTypeIList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 7), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance) == null); + refTypeList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 8), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance) == null); + valueTypeArray.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + DateTime[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 9), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 10), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 11), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance) == null); + valueTypeList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 12), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 12, + originalValueIndex: 12, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + var context = runtimeEntityType.AddServiceProperty( + "Context", + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Context", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + serviceType: typeof(DbContext)); + context.SetPropertyIndexes( + index: -1, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + + var key = runtimeEntityType.AddKey( + new[] { principalDerivedId, principalDerivedAlternateId, __synthesizedOrdinal }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalDerivedId"), declaringEntityType.FindProperty("PrincipalDerivedAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + required: true, + ownership: true); + + var manyOwned = principalEntityType.AddNavigation("ManyOwned", + runtimeForeignKey, + onDependent: false, + typeof(IList), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("ManyOwned", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + eagerLoaded: true); + + manyOwned.SetGetter( + IList (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.ManyOwned(instance), + bool (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.ManyOwned(instance) == null); + manyOwned.SetSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, IList value) => + { + PrincipalDerivedUnsafeAccessors>.ManyOwned(instance) = value; + return instance; + }); + manyOwned.SetMaterializationSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, IList value) => + { + PrincipalDerivedUnsafeAccessors>.ManyOwned(instance) = value; + return instance; + }); + manyOwned.SetAccessors( + IList (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + null, + IList (IInternalEntry entry) => entry.GetCurrentValue>(manyOwned)); + manyOwned.SetPropertyIndexes( + index: 3, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 5, + storeGenerationIndex: -1); + manyOwned.SetCollectionAccessor>, IList, CompiledModelTestBase.OwnedType>( + IList (CompiledModelTestBase.PrincipalDerived> entity) => PrincipalDerivedUnsafeAccessors>.ManyOwned(entity), + (CompiledModelTestBase.PrincipalDerived> entity, IList collection) => PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) = ((IList)collection), + (CompiledModelTestBase.PrincipalDerived> entity, IList collection) => PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) = ((IList)collection), + IList (CompiledModelTestBase.PrincipalDerived> entity, Action>, IList> setter) => ClrCollectionAccessorFactory.CreateAndSet>, IList, List>(entity, setter), + IList () => new List()); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var principalDerivedId = runtimeEntityType.FindProperty("PrincipalDerivedId"); + var principalDerivedAlternateId = runtimeEntityType.FindProperty("PrincipalDerivedAlternateId"); + var __synthesizedOrdinal = runtimeEntityType.FindProperty("__synthesizedOrdinal"); + var details = runtimeEntityType.FindProperty("Details"); + var number = runtimeEntityType.FindProperty("Number"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var key = runtimeEntityType.FindKey(new[] { principalDerivedId, principalDerivedAlternateId, __synthesizedOrdinal }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.OwnedType)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>(((ValueComparer)(((IProperty)principalDerivedId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedId)), ((ValueComparer)(((IProperty)principalDerivedAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedAlternateId)), ((ValueComparer)(((IProperty)__synthesizedOrdinal).GetValueComparer())).Snapshot(source.GetCurrentValue(__synthesizedOrdinal)), (source.GetCurrentValue(details) == null ? null : ((ValueComparer)(((IProperty)details).GetValueComparer())).Snapshot(source.GetCurrentValue(details))), ((ValueComparer)(((IProperty)number).GetValueComparer())).Snapshot(source.GetCurrentValue(number)), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalDerivedId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalDerivedAlternateId).GetValueComparer())).Snapshot(default(Guid)), ((ValueComparer)(((IProperty)__synthesizedOrdinal).GetValueComparer())).Snapshot(default(int)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(int))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalDerivedId") ? ((long)(source["PrincipalDerivedId"])) : 0L), (source.ContainsKey("PrincipalDerivedAlternateId") ? ((Guid)(source["PrincipalDerivedAlternateId"])) : new Guid("00000000-0000-0000-0000-000000000000")), (source.ContainsKey("__synthesizedOrdinal") ? ((int)(source["__synthesizedOrdinal"])) : 0))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(int))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.OwnedType)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalDerivedId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedId)), ((ValueComparer)(((IProperty)principalDerivedAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedAlternateId)), ((ValueComparer)(((IProperty)__synthesizedOrdinal).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(__synthesizedOrdinal))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 13, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 13, + shadowCount: 3, + relationshipCount: 3, + storeGeneratedCount: 3)); + runtimeEntityType.AddAnnotation("Relational:ContainerColumnName", "ManyOwned"); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeEntityType.cs new file mode 100644 index 00000000..08c6b3ef --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeEntityType.cs @@ -0,0 +1,911 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class OwnedTypeEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType", + typeof(CompiledModelTestBase.OwnedType), + baseEntityType, + sharedClrType: true, + changeTrackingStrategy: ChangeTrackingStrategy.ChangingAndChangedNotificationsWithOriginalValues, + propertyCount: 12, + servicePropertyCount: 1, + foreignKeyCount: 1, + keyCount: 1); + + var principalBaseId = runtimeEntityType.AddProperty( + "PrincipalBaseId", + typeof(long), + propertyAccessMode: PropertyAccessMode.Field, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0L); + principalBaseId.SetAccessors( + long (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && entry.ReadShadowValue(0) == 0L ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + long (IInternalEntry entry) => entry.ReadShadowValue(0), + long (IInternalEntry entry) => entry.ReadOriginalValue(principalBaseId, 0), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalBaseId, 0)); + principalBaseId.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: 0, + relationshipIndex: 0, + storeGenerationIndex: 0); + principalBaseId.TypeMapping = LibRedLongTypeMapping.Default; + principalBaseId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalBaseId)); + + var principalBaseAlternateId = runtimeEntityType.AddProperty( + "PrincipalBaseAlternateId", + typeof(Guid), + propertyAccessMode: PropertyAccessMode.Field, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + principalBaseAlternateId.SetAccessors( + Guid (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(1) ? entry.ReadStoreGeneratedValue(1) : (entry.FlaggedAsTemporary(1) && entry.ReadShadowValue(1) == new Guid("00000000-0000-0000-0000-000000000000") ? entry.ReadTemporaryValue(1) : entry.ReadShadowValue(1))), + Guid (IInternalEntry entry) => entry.ReadShadowValue(1), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(principalBaseAlternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalBaseAlternateId, 1)); + principalBaseAlternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: 1, + relationshipIndex: 1, + storeGenerationIndex: 1); + principalBaseAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + principalBaseAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalBaseAlternateId)); + + var details = runtimeEntityType.AddProperty( + "Details", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_details", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + details.SetGetter( + string (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._details(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._details(instance) == null); + details.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetAccessors( + string (IInternalEntry entry) => OwnedTypeUnsafeAccessors._details(((CompiledModelTestBase.OwnedType)(entry.Entity))), + string (IInternalEntry entry) => OwnedTypeUnsafeAccessors._details(((CompiledModelTestBase.OwnedType)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(details, 2), + string (IInternalEntry entry) => entry.GetCurrentValue(details)); + details.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + details.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var number = runtimeEntityType.AddProperty( + "Number", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Number", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + sentinel: 0); + number.SetGetter( + int (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance) == 0); + number.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetAccessors( + int (IInternalEntry entry) => OwnedTypeUnsafeAccessors.Number(((CompiledModelTestBase.OwnedType)(entry.Entity))), + int (IInternalEntry entry) => OwnedTypeUnsafeAccessors.Number(((CompiledModelTestBase.OwnedType)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(number, 3), + int (IInternalEntry entry) => entry.GetCurrentValue(number)); + number.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + number.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance) == null); + refTypeArray.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 4), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 5), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeIList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance) == null); + refTypeIList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 6), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance) == null); + refTypeList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._refTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 7), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance) == null); + valueTypeArray.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + DateTime[] (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeArray(((CompiledModelTestBase.OwnedType)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 8), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 9), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => OwnedTypeUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 10), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance) == null); + valueTypeList.SetSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => OwnedTypeUnsafeAccessors._valueTypeList(((CompiledModelTestBase.OwnedType)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 11), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + var context = runtimeEntityType.AddServiceProperty( + "Context", + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Context", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + serviceType: typeof(DbContext)); + context.SetPropertyIndexes( + index: -1, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + + var key = runtimeEntityType.AddKey( + new[] { principalBaseId, principalBaseAlternateId }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalBaseId"), declaringEntityType.FindProperty("PrincipalBaseAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true, + requiredDependent: true, + ownership: true); + + var owned = principalEntityType.AddNavigation("Owned", + runtimeForeignKey, + onDependent: false, + typeof(CompiledModelTestBase.OwnedType), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Owned", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("_ownedField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + eagerLoaded: true); + + owned.SetGetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors._ownedField(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors._ownedField(instance) == null); + owned.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.OwnedType value) => + { + PrincipalBaseUnsafeAccessors._ownedField(instance) = value; + return instance; + }); + owned.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.OwnedType value) => + { + PrincipalBaseUnsafeAccessors._ownedField(instance) = value; + return instance; + }); + owned.SetAccessors( + CompiledModelTestBase.OwnedType (IInternalEntry entry) => PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.OwnedType (IInternalEntry entry) => PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + null, + CompiledModelTestBase.OwnedType (IInternalEntry entry) => entry.GetCurrentValue(owned)); + owned.SetPropertyIndexes( + index: 0, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 2, + storeGenerationIndex: -1); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var principalBaseId = runtimeEntityType.FindProperty("PrincipalBaseId"); + var principalBaseAlternateId = runtimeEntityType.FindProperty("PrincipalBaseAlternateId"); + var details = runtimeEntityType.FindProperty("Details"); + var number = runtimeEntityType.FindProperty("Number"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var key = runtimeEntityType.FindKey(new[] { principalBaseId, principalBaseAlternateId }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.OwnedType)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>(((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId)), ((ValueComparer)(((IProperty)principalBaseAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalBaseAlternateId)), (source.GetCurrentValue(details) == null ? null : ((ValueComparer)(((IProperty)details).GetValueComparer())).Snapshot(source.GetCurrentValue(details))), ((ValueComparer)(((IProperty)number).GetValueComparer())).Snapshot(source.GetCurrentValue(number)), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalBaseAlternateId).GetValueComparer())).Snapshot(default(Guid)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalBaseId") ? ((long)(source["PrincipalBaseId"])) : 0L), (source.ContainsKey("PrincipalBaseAlternateId") ? ((Guid)(source["PrincipalBaseAlternateId"])) : new Guid("00000000-0000-0000-0000-000000000000")))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long), default(Guid))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.OwnedType)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)principalBaseId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId)), ((ValueComparer)(((IProperty)principalBaseAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalBaseAlternateId))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 12, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 12, + shadowCount: 2, + relationshipCount: 2, + storeGeneratedCount: 2)); + runtimeEntityType.AddAnnotation("Relational:ContainerColumnName", "Owned"); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeUnsafeAccessors.cs new file mode 100644 index 00000000..ed8d21e3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/OwnedTypeUnsafeAccessors.cs @@ -0,0 +1,45 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class OwnedTypeUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_details")] + public static extern ref string _details(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int Number(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeArray")] + public static extern ref IPAddress[] _refTypeArray(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeEnumerable")] + public static extern ref IEnumerable _refTypeEnumerable(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeIList")] + public static extern ref IList _refTypeIList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeList")] + public static extern ref List _refTypeList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_valueTypeArray")] + public static extern ref DateTime[] _valueTypeArray(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_valueTypeEnumerable")] + public static extern ref IEnumerable _valueTypeEnumerable(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList ValueTypeIList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_valueTypeList")] + public static extern ref List _valueTypeList(CompiledModelTestBase.OwnedType @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseEntityType.cs new file mode 100644 index 00000000..7773f714 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseEntityType.cs @@ -0,0 +1,1110 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.ValueGeneration; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalBaseEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + typeof(CompiledModelTestBase.PrincipalBase), + baseEntityType, + discriminatorProperty: "Discriminator", + discriminatorValue: "PrincipalBase", + derivedTypesCount: 1, + propertyCount: 15, + navigationCount: 1, + skipNavigationCount: 1, + unnamedIndexCount: 1, + keyCount: 2); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + afterSaveBehavior: PropertySaveBehavior.Throw); + id.SetGetter( + long? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Id(instance).HasValue)); + id.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + long? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + long? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + long? (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + long? (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: -1); + id.TypeMapping = LibRedLongTypeMapping.Default; + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + id.SetComparer(new NullableValueComparer(id.TypeMapping.Comparer)); + id.SetKeyComparer(new NullableValueComparer(id.TypeMapping.KeyComparer)); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var alternateId = runtimeEntityType.AddProperty( + "AlternateId", + typeof(Guid), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("AlternateId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.FieldDuringConstruction, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000"), + jsonValueReaderWriter: new CompiledModelTestBase.MyJsonGuidReaderWriter()); + alternateId.SetGetter( + Guid (CompiledModelTestBase.PrincipalBase instance) => instance.AlternateId, + bool (CompiledModelTestBase.PrincipalBase instance) => instance.AlternateId == new Guid("00000000-0000-0000-0000-000000000000")); + alternateId.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, Guid value) => + { + instance.AlternateId = value; + return instance; + }); + alternateId.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, Guid value) => + { + instance.AlternateId = value; + return instance; + }); + alternateId.SetAccessors( + Guid (IInternalEntry entry) => ((CompiledModelTestBase.PrincipalBase)(entry.Entity)).AlternateId, + Guid (IInternalEntry entry) => ((CompiledModelTestBase.PrincipalBase)(entry.Entity)).AlternateId, + Guid (IInternalEntry entry) => entry.ReadOriginalValue(alternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(alternateId, 1)); + alternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: 1, + storeGenerationIndex: -1); + alternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + alternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(alternateId)); + + var discriminator = runtimeEntityType.AddProperty( + "Discriminator", + typeof(string), + afterSaveBehavior: PropertySaveBehavior.Throw, + maxLength: 55, + valueGeneratorFactory: new DiscriminatorValueGeneratorFactory().Create); + discriminator.SetAccessors( + string (IInternalEntry entry) => entry.ReadShadowValue(0), + string (IInternalEntry entry) => entry.ReadShadowValue(0), + string (IInternalEntry entry) => entry.ReadOriginalValue(discriminator, 2), + string (IInternalEntry entry) => entry.GetCurrentValue(discriminator)); + discriminator.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: 0, + relationshipIndex: -1, + storeGenerationIndex: -1); + discriminator.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(55)", + size: 55)); + + var enum1 = runtimeEntityType.AddProperty( + "Enum1", + typeof(CompiledModelTestBase.AnEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum1.SetGetter( + CompiledModelTestBase.AnEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.Enum1(instance))), ((object)((CompiledModelTestBase.AnEnum)0L)))); + enum1.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetAccessors( + CompiledModelTestBase.AnEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.ReadOriginalValue(enum1, 3), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.GetCurrentValue(enum1)); + enum1.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum1.SetSentinelFromProviderValue(0); + + var enum2 = runtimeEntityType.AddProperty( + "Enum2", + typeof(CompiledModelTestBase.AnEnum?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum2", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + enum2.SetGetter( + CompiledModelTestBase.AnEnum? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Enum2(instance).HasValue)); + enum2.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetAccessors( + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.ReadOriginalValue(enum2, 4), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.GetCurrentValue(enum2)); + enum2.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum2.SetComparer(new NullableValueComparer(enum2.TypeMapping.Comparer)); + enum2.SetKeyComparer(new NullableValueComparer(enum2.TypeMapping.KeyComparer)); + + var flagsEnum1 = runtimeEntityType.AddProperty( + "FlagsEnum1", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum1.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum1(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum1.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum1, 5), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum1)); + flagsEnum1.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum1.SetSentinelFromProviderValue(0); + + var flagsEnum2 = runtimeEntityType.AddProperty( + "FlagsEnum2", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum2", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Property); + flagsEnum2.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Get_FlagsEnum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.Get_FlagsEnum2(instance))), ((object)(CompiledModelTestBase.AFlagsEnum.B | CompiledModelTestBase.AFlagsEnum.C)))); + flagsEnum2.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.Set_FlagsEnum2(instance, value); + return instance; + }); + flagsEnum2.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.Set_FlagsEnum2(instance, value); + return instance; + }); + flagsEnum2.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Get_FlagsEnum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Get_FlagsEnum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum2, 6), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum2)); + flagsEnum2.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum2.SetSentinelFromProviderValue(6); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance) == null); + refTypeArray.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 7), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 8), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance) == null); + refTypeIList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 9), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance) == null); + refTypeList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 10), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) == null); + valueTypeArray.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + DateTime[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 11), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 12), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 12, + originalValueIndex: 12, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 13), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 13, + originalValueIndex: 13, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance) == null); + valueTypeList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 14), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 14, + originalValueIndex: 14, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + var key = runtimeEntityType.AddKey( + new[] { id }); + + var key0 = runtimeEntityType.AddKey( + new[] { id, alternateId }); + runtimeEntityType.SetPrimaryKey(key0); + key0.AddAnnotation("Relational:Name", "PK"); + + var index = runtimeEntityType.AddIndex( + new[] { alternateId, id }); + + return runtimeEntityType; + } + + public static RuntimeSkipNavigation CreateSkipNavigation1(RuntimeEntityType declaringEntityType, RuntimeEntityType targetEntityType, RuntimeEntityType joinEntityType) + { + var skipNavigation = declaringEntityType.AddSkipNavigation( + "Deriveds", + targetEntityType, + joinEntityType.FindForeignKey( + new[] { joinEntityType.FindProperty("PrincipalsId"), joinEntityType.FindProperty("PrincipalsAlternateId") }, + declaringEntityType.FindKey(new[] { declaringEntityType.FindProperty("Id"), declaringEntityType.FindProperty("AlternateId") }), + declaringEntityType), + true, + false, + typeof(ICollection), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Deriveds", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var inverse = targetEntityType.FindSkipNavigation("Principals"); + if (inverse != null) + { + skipNavigation.Inverse = inverse; + inverse.Inverse = skipNavigation; + } + + skipNavigation.SetGetter( + ICollection (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Deriveds(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Deriveds(instance) == null); + skipNavigation.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, ICollection value) => + { + PrincipalBaseUnsafeAccessors.Deriveds(instance) = value; + return instance; + }); + skipNavigation.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, ICollection value) => + { + PrincipalBaseUnsafeAccessors.Deriveds(instance) = value; + return instance; + }); + skipNavigation.SetAccessors( + ICollection (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Deriveds(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + ICollection (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Deriveds(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + null, + ICollection (IInternalEntry entry) => entry.GetCurrentValue>(skipNavigation)); + skipNavigation.SetPropertyIndexes( + index: 1, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 3, + storeGenerationIndex: -1); + skipNavigation.SetCollectionAccessor, CompiledModelTestBase.PrincipalBase>( + ICollection (CompiledModelTestBase.PrincipalBase entity) => PrincipalBaseUnsafeAccessors.Deriveds(entity), + (CompiledModelTestBase.PrincipalBase entity, ICollection collection) => PrincipalBaseUnsafeAccessors.Deriveds(entity) = ((ICollection)collection), + (CompiledModelTestBase.PrincipalBase entity, ICollection collection) => PrincipalBaseUnsafeAccessors.Deriveds(entity) = ((ICollection)collection), + ICollection (CompiledModelTestBase.PrincipalBase entity, Action> setter) => ClrCollectionAccessorFactory.CreateAndSetHashSet, CompiledModelTestBase.PrincipalBase>(entity, setter), + ICollection () => ((ICollection)(((ICollection)(new HashSet(ReferenceEqualityComparer.Instance)))))); + return skipNavigation; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var alternateId = runtimeEntityType.FindProperty("AlternateId"); + var discriminator = runtimeEntityType.FindProperty("Discriminator"); + var enum1 = runtimeEntityType.FindProperty("Enum1"); + var enum2 = runtimeEntityType.FindProperty("Enum2"); + var flagsEnum1 = runtimeEntityType.FindProperty("FlagsEnum1"); + var flagsEnum2 = runtimeEntityType.FindProperty("FlagsEnum2"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + var key0 = runtimeEntityType.FindKey(new[] { id, alternateId }); + key0.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key0)); + key0.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key0)); + var owned = runtimeEntityType.FindNavigation("Owned"); + var deriveds = runtimeEntityType.FindSkipNavigation("Deriveds"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.PrincipalBase)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)alternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), (source.GetCurrentValue(discriminator) == null ? null : ((ValueComparer)(((IProperty)discriminator).GetValueComparer())).Snapshot(source.GetCurrentValue(discriminator))), ((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(source.GetCurrentValue(enum1)), (source.GetCurrentValue(enum2) == null ? null : ((ValueComparer)(((IProperty)enum2).GetValueComparer())).Snapshot(source.GetCurrentValue(enum2))), ((ValueComparer)(((IProperty)flagsEnum1).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum1)), ((ValueComparer)(((IProperty)flagsEnum2).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum2)), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => Snapshot.Empty); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("Discriminator") ? ((string)(source["Discriminator"])) : null))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(string))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.PrincipalBase)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)alternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), source.GetCurrentValue(owned), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(deriveds))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 15, + navigationCount: 2, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 15, + shadowCount: 1, + relationshipCount: 4, + storeGeneratedCount: 0)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:MappingStrategy", "TPH"); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBasePrincipalDerivedDependentBasebyteEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBasePrincipalDerivedDependentBasebyteEntityType.cs new file mode 100644 index 00000000..55a21ede --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBasePrincipalDerivedDependentBasebyteEntityType.cs @@ -0,0 +1,431 @@ +// +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalBasePrincipalDerivedDependentBasebyteEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "PrincipalBasePrincipalDerived>", + typeof(Dictionary), + baseEntityType, + sharedClrType: true, + indexerPropertyInfo: RuntimeEntityType.FindIndexerProperty(typeof(Dictionary)), + propertyBag: true, + propertyCount: 5, + foreignKeyCount: 2, + unnamedIndexCount: 1, + keyCount: 1); + + var derivedsId = runtimeEntityType.AddProperty( + "DerivedsId", + typeof(long), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw); + derivedsId.SetGetter( + long (Dictionary instance) => ((((IDictionary)instance).ContainsKey("DerivedsId") ? instance["DerivedsId"] : null) == null ? 0L : ((long)((((IDictionary)instance).ContainsKey("DerivedsId") ? instance["DerivedsId"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("DerivedsId") ? instance["DerivedsId"] : null) == null); + derivedsId.SetSetter( + Dictionary (Dictionary instance, long value) => + { + instance["DerivedsId"] = ((object)value); + return instance; + }); + derivedsId.SetMaterializationSetter( + Dictionary (Dictionary instance, long value) => + { + instance["DerivedsId"] = ((object)value); + return instance; + }); + derivedsId.SetAccessors( + long (IInternalEntry entry) => + { + if (entry.FlaggedAsStoreGenerated(0)) + { + return entry.ReadStoreGeneratedValue(0); + } + else + { + { + if (entry.FlaggedAsTemporary(0) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsId") ? ((Dictionary)(entry.Entity))["DerivedsId"] : null) == null) + { + return entry.ReadTemporaryValue(0); + } + else + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsId") ? ((Dictionary)(entry.Entity))["DerivedsId"] : null); + return (nullableValue == null ? default(long) : ((long)nullableValue)); + } + } + } + }, + long (IInternalEntry entry) => + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsId") ? ((Dictionary)(entry.Entity))["DerivedsId"] : null); + return (nullableValue == null ? default(long) : ((long)nullableValue)); + }, + long (IInternalEntry entry) => entry.ReadOriginalValue(derivedsId, 0), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(derivedsId, 0)); + derivedsId.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: 0); + derivedsId.TypeMapping = LibRedLongTypeMapping.Default; + derivedsId.SetCurrentValueComparer(new EntryCurrentValueComparer(derivedsId)); + + var derivedsAlternateId = runtimeEntityType.AddProperty( + "DerivedsAlternateId", + typeof(Guid), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw); + derivedsAlternateId.SetGetter( + Guid (Dictionary instance) => ((((IDictionary)instance).ContainsKey("DerivedsAlternateId") ? instance["DerivedsAlternateId"] : null) == null ? new Guid("00000000-0000-0000-0000-000000000000") : ((Guid)((((IDictionary)instance).ContainsKey("DerivedsAlternateId") ? instance["DerivedsAlternateId"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("DerivedsAlternateId") ? instance["DerivedsAlternateId"] : null) == null); + derivedsAlternateId.SetSetter( + Dictionary (Dictionary instance, Guid value) => + { + instance["DerivedsAlternateId"] = ((object)value); + return instance; + }); + derivedsAlternateId.SetMaterializationSetter( + Dictionary (Dictionary instance, Guid value) => + { + instance["DerivedsAlternateId"] = ((object)value); + return instance; + }); + derivedsAlternateId.SetAccessors( + Guid (IInternalEntry entry) => + { + if (entry.FlaggedAsStoreGenerated(1)) + { + return entry.ReadStoreGeneratedValue(1); + } + else + { + { + if (entry.FlaggedAsTemporary(1) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsAlternateId") ? ((Dictionary)(entry.Entity))["DerivedsAlternateId"] : null) == null) + { + return entry.ReadTemporaryValue(1); + } + else + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsAlternateId") ? ((Dictionary)(entry.Entity))["DerivedsAlternateId"] : null); + return (nullableValue == null ? default(Guid) : ((Guid)nullableValue)); + } + } + } + }, + Guid (IInternalEntry entry) => + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("DerivedsAlternateId") ? ((Dictionary)(entry.Entity))["DerivedsAlternateId"] : null); + return (nullableValue == null ? default(Guid) : ((Guid)nullableValue)); + }, + Guid (IInternalEntry entry) => entry.ReadOriginalValue(derivedsAlternateId, 1), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(derivedsAlternateId, 1)); + derivedsAlternateId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: 1, + storeGenerationIndex: 1); + derivedsAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + derivedsAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(derivedsAlternateId)); + + var principalsId = runtimeEntityType.AddProperty( + "PrincipalsId", + typeof(long), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw); + principalsId.SetGetter( + long (Dictionary instance) => ((((IDictionary)instance).ContainsKey("PrincipalsId") ? instance["PrincipalsId"] : null) == null ? 0L : ((long)((((IDictionary)instance).ContainsKey("PrincipalsId") ? instance["PrincipalsId"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("PrincipalsId") ? instance["PrincipalsId"] : null) == null); + principalsId.SetSetter( + Dictionary (Dictionary instance, long value) => + { + instance["PrincipalsId"] = ((object)value); + return instance; + }); + principalsId.SetMaterializationSetter( + Dictionary (Dictionary instance, long value) => + { + instance["PrincipalsId"] = ((object)value); + return instance; + }); + principalsId.SetAccessors( + long (IInternalEntry entry) => + { + if (entry.FlaggedAsStoreGenerated(2)) + { + return entry.ReadStoreGeneratedValue(2); + } + else + { + { + if (entry.FlaggedAsTemporary(2) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsId") ? ((Dictionary)(entry.Entity))["PrincipalsId"] : null) == null) + { + return entry.ReadTemporaryValue(2); + } + else + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsId") ? ((Dictionary)(entry.Entity))["PrincipalsId"] : null); + return (nullableValue == null ? default(long) : ((long)nullableValue)); + } + } + } + }, + long (IInternalEntry entry) => + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsId") ? ((Dictionary)(entry.Entity))["PrincipalsId"] : null); + return (nullableValue == null ? default(long) : ((long)nullableValue)); + }, + long (IInternalEntry entry) => entry.ReadOriginalValue(principalsId, 2), + long (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalsId, 2)); + principalsId.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: 2, + storeGenerationIndex: 2); + principalsId.TypeMapping = LibRedLongTypeMapping.Default; + principalsId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalsId)); + + var principalsAlternateId = runtimeEntityType.AddProperty( + "PrincipalsAlternateId", + typeof(Guid), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw); + principalsAlternateId.SetGetter( + Guid (Dictionary instance) => ((((IDictionary)instance).ContainsKey("PrincipalsAlternateId") ? instance["PrincipalsAlternateId"] : null) == null ? new Guid("00000000-0000-0000-0000-000000000000") : ((Guid)((((IDictionary)instance).ContainsKey("PrincipalsAlternateId") ? instance["PrincipalsAlternateId"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("PrincipalsAlternateId") ? instance["PrincipalsAlternateId"] : null) == null); + principalsAlternateId.SetSetter( + Dictionary (Dictionary instance, Guid value) => + { + instance["PrincipalsAlternateId"] = ((object)value); + return instance; + }); + principalsAlternateId.SetMaterializationSetter( + Dictionary (Dictionary instance, Guid value) => + { + instance["PrincipalsAlternateId"] = ((object)value); + return instance; + }); + principalsAlternateId.SetAccessors( + Guid (IInternalEntry entry) => + { + if (entry.FlaggedAsStoreGenerated(3)) + { + return entry.ReadStoreGeneratedValue(3); + } + else + { + { + if (entry.FlaggedAsTemporary(3) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsAlternateId") ? ((Dictionary)(entry.Entity))["PrincipalsAlternateId"] : null) == null) + { + return entry.ReadTemporaryValue(3); + } + else + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsAlternateId") ? ((Dictionary)(entry.Entity))["PrincipalsAlternateId"] : null); + return (nullableValue == null ? default(Guid) : ((Guid)nullableValue)); + } + } + } + }, + Guid (IInternalEntry entry) => + { + var nullableValue = (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("PrincipalsAlternateId") ? ((Dictionary)(entry.Entity))["PrincipalsAlternateId"] : null); + return (nullableValue == null ? default(Guid) : ((Guid)nullableValue)); + }, + Guid (IInternalEntry entry) => entry.ReadOriginalValue(principalsAlternateId, 3), + Guid (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalsAlternateId, 3)); + principalsAlternateId.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: 3, + storeGenerationIndex: 3); + principalsAlternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + principalsAlternateId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalsAlternateId)); + + var rowid = runtimeEntityType.AddProperty( + "rowid", + typeof(byte[]), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + nullable: true, + concurrencyToken: true, + valueGenerated: ValueGenerated.OnAddOrUpdate, + beforeSaveBehavior: PropertySaveBehavior.Ignore, + afterSaveBehavior: PropertySaveBehavior.Ignore); + rowid.SetGetter( + byte[] (Dictionary instance) => ((((IDictionary)instance).ContainsKey("rowid") ? instance["rowid"] : null) == null ? null : ((byte[])((((IDictionary)instance).ContainsKey("rowid") ? instance["rowid"] : null)))), + bool (Dictionary instance) => (((IDictionary)instance).ContainsKey("rowid") ? instance["rowid"] : null) == null); + rowid.SetSetter( + Dictionary (Dictionary instance, byte[] value) => + { + instance["rowid"] = ((object)value); + return instance; + }); + rowid.SetMaterializationSetter( + Dictionary (Dictionary instance, byte[] value) => + { + instance["rowid"] = ((object)value); + return instance; + }); + rowid.SetAccessors( + byte[] (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(4) ? entry.ReadStoreGeneratedValue(4) : (entry.FlaggedAsTemporary(4) && (((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("rowid") ? ((Dictionary)(entry.Entity))["rowid"] : null) == null ? entry.ReadTemporaryValue(4) : ((byte[])((((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("rowid") ? ((Dictionary)(entry.Entity))["rowid"] : null))))), + byte[] (IInternalEntry entry) => ((byte[])((((IDictionary)((Dictionary)(entry.Entity))).ContainsKey("rowid") ? ((Dictionary)(entry.Entity))["rowid"] : null))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(rowid, 4), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(rowid)); + rowid.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: 4); + rowid.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(v1, v2), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(v), + byte[] (byte[] v) => v.ToArray()), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varbinary(8)", + size: 8)); + + var key = runtimeEntityType.AddKey( + new[] { derivedsId, derivedsAlternateId, principalsId, principalsAlternateId }); + runtimeEntityType.SetPrimaryKey(key); + + var index = runtimeEntityType.AddIndex( + new[] { principalsId, principalsAlternateId }); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("DerivedsId"), declaringEntityType.FindProperty("DerivedsAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + required: true); + + return runtimeForeignKey; + } + + public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalsId"), declaringEntityType.FindProperty("PrincipalsAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.ClientCascade, + required: true); + + runtimeForeignKey.AddAnnotation("Relational:Name", "FK_PrincipalBasePrincipalDerived>_Princip~1"); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var derivedsId = runtimeEntityType.FindProperty("DerivedsId"); + var derivedsAlternateId = runtimeEntityType.FindProperty("DerivedsAlternateId"); + var principalsId = runtimeEntityType.FindProperty("PrincipalsId"); + var principalsAlternateId = runtimeEntityType.FindProperty("PrincipalsAlternateId"); + var rowid = runtimeEntityType.FindProperty("rowid"); + var key = runtimeEntityType.FindKey(new[] { derivedsId, derivedsAlternateId, principalsId, principalsAlternateId }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateCompositeFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory>(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((Dictionary)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)derivedsId).GetValueComparer())).Snapshot(source.GetCurrentValue(derivedsId)), ((ValueComparer)(((IProperty)derivedsAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(derivedsAlternateId)), ((ValueComparer)(((IProperty)principalsId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalsId)), ((ValueComparer)(((IProperty)principalsAlternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalsAlternateId)), (source.GetCurrentValue(rowid) == null ? null : ((ValueComparer)(((IProperty)rowid).GetValueComparer())).Snapshot(source.GetCurrentValue(rowid)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)derivedsId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)derivedsAlternateId).GetValueComparer())).Snapshot(default(Guid)), ((ValueComparer)(((IProperty)principalsId).GetValueComparer())).Snapshot(default(long)), ((ValueComparer)(((IProperty)principalsAlternateId).GetValueComparer())).Snapshot(default(Guid)), (default(byte[]) == null ? null : ((ValueComparer)(((IProperty)rowid).GetValueComparer())).Snapshot(default(byte[]))))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long), default(Guid), default(long), default(Guid), default(byte[]))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => Snapshot.Empty); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((Dictionary)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)derivedsId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(derivedsId)), ((ValueComparer)(((IProperty)derivedsAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(derivedsAlternateId)), ((ValueComparer)(((IProperty)principalsId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalsId)), ((ValueComparer)(((IProperty)principalsAlternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalsAlternateId))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 5, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 5, + shadowCount: 0, + relationshipCount: 4, + storeGeneratedCount: 5)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBasePrincipalDerived>"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseUnsafeAccessors.cs new file mode 100644 index 00000000..4b43c6dd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalBaseUnsafeAccessors.cs @@ -0,0 +1,63 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class PrincipalBaseUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long? Id(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AnEnum Enum1(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AnEnum? Enum2(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AFlagsEnum FlagsEnum1(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Method, Name = "get_FlagsEnum2")] + public static extern CompiledModelTestBase.AFlagsEnum Get_FlagsEnum2(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Method, Name = "set_FlagsEnum2")] + public static extern void Set_FlagsEnum2(CompiledModelTestBase.PrincipalBase @this, CompiledModelTestBase.AFlagsEnum value); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress[] RefTypeArray(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IEnumerable RefTypeEnumerable(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList RefTypeIList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List RefTypeList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime[] ValueTypeArray(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IEnumerable ValueTypeEnumerable(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList ValueTypeIList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List ValueTypeList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_ownedField")] + public static extern ref CompiledModelTestBase.OwnedType _ownedField(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ICollection Deriveds(CompiledModelTestBase.PrincipalBase @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalDerivedEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalDerivedEntityType.cs new file mode 100644 index 00000000..66e60426 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalDerivedEntityType.cs @@ -0,0 +1,156 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalDerivedEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + typeof(CompiledModelTestBase.PrincipalDerived>), + baseEntityType, + discriminatorProperty: "Discriminator", + discriminatorValue: "PrincipalDerived>", + propertyCount: 0, + navigationCount: 2, + skipNavigationCount: 1); + + return runtimeEntityType; + } + + public static RuntimeSkipNavigation CreateSkipNavigation1(RuntimeEntityType declaringEntityType, RuntimeEntityType targetEntityType, RuntimeEntityType joinEntityType) + { + var skipNavigation = declaringEntityType.AddSkipNavigation( + "Principals", + targetEntityType, + joinEntityType.FindForeignKey( + new[] { joinEntityType.FindProperty("DerivedsId"), joinEntityType.FindProperty("DerivedsAlternateId") }, + declaringEntityType.FindKey(new[] { declaringEntityType.FindProperty("Id"), declaringEntityType.FindProperty("AlternateId") }), + declaringEntityType), + true, + false, + typeof(ICollection), + propertyInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetProperty("Principals", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var inverse = targetEntityType.FindSkipNavigation("Deriveds"); + if (inverse != null) + { + skipNavigation.Inverse = inverse; + inverse.Inverse = skipNavigation; + } + + skipNavigation.SetGetter( + ICollection (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Principals(instance), + bool (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Principals(instance) == null); + skipNavigation.SetSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, ICollection value) => + { + PrincipalDerivedUnsafeAccessors>.Principals(instance) = value; + return instance; + }); + skipNavigation.SetMaterializationSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, ICollection value) => + { + PrincipalDerivedUnsafeAccessors>.Principals(instance) = value; + return instance; + }); + skipNavigation.SetAccessors( + ICollection (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Principals(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + ICollection (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Principals(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + null, + ICollection (IInternalEntry entry) => entry.GetCurrentValue>(skipNavigation)); + skipNavigation.SetPropertyIndexes( + index: 4, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 6, + storeGenerationIndex: -1); + skipNavigation.SetCollectionAccessor>, ICollection, CompiledModelTestBase.PrincipalBase>( + ICollection (CompiledModelTestBase.PrincipalDerived> entity) => PrincipalDerivedUnsafeAccessors>.Principals(entity), + (CompiledModelTestBase.PrincipalDerived> entity, ICollection collection) => PrincipalDerivedUnsafeAccessors>.Principals(entity) = ((ICollection)collection), + (CompiledModelTestBase.PrincipalDerived> entity, ICollection collection) => PrincipalDerivedUnsafeAccessors>.Principals(entity) = ((ICollection)collection), + ICollection (CompiledModelTestBase.PrincipalDerived> entity, Action>, ICollection> setter) => ClrCollectionAccessorFactory.CreateAndSetHashSet>, ICollection, CompiledModelTestBase.PrincipalBase>(entity, setter), + ICollection () => ((ICollection)(((ICollection)(new HashSet(ReferenceEqualityComparer.Instance)))))); + return skipNavigation; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var alternateId = runtimeEntityType.FindProperty("AlternateId"); + var discriminator = runtimeEntityType.FindProperty("Discriminator"); + var enum1 = runtimeEntityType.FindProperty("Enum1"); + var enum2 = runtimeEntityType.FindProperty("Enum2"); + var flagsEnum1 = runtimeEntityType.FindProperty("FlagsEnum1"); + var flagsEnum2 = runtimeEntityType.FindProperty("FlagsEnum2"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var owned = runtimeEntityType.FindNavigation("Owned"); + var dependent = runtimeEntityType.FindNavigation("Dependent"); + var manyOwned = runtimeEntityType.FindNavigation("ManyOwned"); + var deriveds = runtimeEntityType.FindSkipNavigation("Deriveds"); + var principals = runtimeEntityType.FindSkipNavigation("Principals"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.PrincipalDerived>)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)alternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), (source.GetCurrentValue(discriminator) == null ? null : ((ValueComparer)(((IProperty)discriminator).GetValueComparer())).Snapshot(source.GetCurrentValue(discriminator))), ((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(source.GetCurrentValue(enum1)), (source.GetCurrentValue(enum2) == null ? null : ((ValueComparer)(((IProperty)enum2).GetValueComparer())).Snapshot(source.GetCurrentValue(enum2))), ((ValueComparer)(((IProperty)flagsEnum1).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum1)), ((ValueComparer)(((IProperty)flagsEnum2).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum2)), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => Snapshot.Empty); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("Discriminator") ? ((string)(source["Discriminator"])) : null))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(string))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType8 = ((CompiledModelTestBase.PrincipalDerived>)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)alternateId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), source.GetCurrentValue(owned), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(deriveds)), source.GetCurrentValue>(dependent), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(manyOwned)), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(principals))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 15, + navigationCount: 5, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 15, + shadowCount: 1, + relationshipCount: 7, + storeGeneratedCount: 0)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalDerivedUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalDerivedUnsafeAccessors.cs new file mode 100644 index 00000000..105dc525 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/BigModel_with_JSON_columns/PrincipalDerivedUnsafeAccessors.cs @@ -0,0 +1,23 @@ +// +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class PrincipalDerivedUnsafeAccessors + where TDependent : class + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TDependent Dependent(CompiledModelTestBase.PrincipalDerived @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "ManyOwned")] + public static extern ref IList ManyOwned(CompiledModelTestBase.PrincipalDerived @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ICollection Principals(CompiledModelTestBase.PrincipalDerived @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DataEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DataEntityType.cs new file mode 100644 index 00000000..d1482abb --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DataEntityType.cs @@ -0,0 +1,171 @@ +// +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DataEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", + typeof(CompiledModelTestBase.Data), + baseEntityType, + propertyCount: 2, + keyCount: 1); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(int), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0); + id.SetAccessors( + int (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && entry.ReadShadowValue(0) == 0 ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + int (IInternalEntry entry) => entry.ReadShadowValue(0), + int (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + int (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: 0, + relationshipIndex: 0, + storeGenerationIndex: 0); + id.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var blob = runtimeEntityType.AddProperty( + "Blob", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.Data).GetProperty("Blob", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.Data).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + blob.SetGetter( + byte[] (CompiledModelTestBase.Data instance) => DataUnsafeAccessors.Blob(instance), + bool (CompiledModelTestBase.Data instance) => DataUnsafeAccessors.Blob(instance) == null); + blob.SetSetter( + CompiledModelTestBase.Data (CompiledModelTestBase.Data instance, byte[] value) => + { + DataUnsafeAccessors.Blob(instance) = value; + return instance; + }); + blob.SetMaterializationSetter( + CompiledModelTestBase.Data (CompiledModelTestBase.Data instance, byte[] value) => + { + DataUnsafeAccessors.Blob(instance) = value; + return instance; + }); + blob.SetAccessors( + byte[] (IInternalEntry entry) => DataUnsafeAccessors.Blob(((CompiledModelTestBase.Data)(entry.Entity))), + byte[] (IInternalEntry entry) => DataUnsafeAccessors.Blob(((CompiledModelTestBase.Data)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(blob, 1), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(blob)); + blob.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + blob.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var blob = runtimeEntityType.FindProperty("Blob"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNonNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.Data)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id)), (source.GetCurrentValue(blob) == null ? null : ((ValueComparer)(((IProperty)blob).GetValueComparer())).Snapshot(source.GetCurrentValue(blob)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(int)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(int))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("Id") ? ((int)(source["Id"])) : 0))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(int))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.Data)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 2, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 2, + shadowCount: 1, + relationshipCount: 1, + storeGeneratedCount: 1)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "Data"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DataUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DataUnsafeAccessors.cs new file mode 100644 index 00000000..193c8970 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DataUnsafeAccessors.cs @@ -0,0 +1,16 @@ +// +using System; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DataUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] Blob(CompiledModelTestBase.Data @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DbContextModelBuilder.cs new file mode 100644 index 00000000..4642044e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/CheckConstraints/DbContextModelBuilder.cs @@ -0,0 +1,88 @@ +// +using System; +using System.Collections.Generic; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Update.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 1) + { + } + + partial void Initialize() + { + var data = DataEntityType.Create(this); + + DataEntityType.CreateAnnotations(data); + + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + + var data = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data")!; + + var defaultTableMappings = new List>(); + data.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", null, relationalModel); + var blobColumnBase = new ColumnBase("Blob", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.Columns.Add("Blob", blobColumnBase); + var idColumnBase = new ColumnBase("Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.Columns.Add("Id", idColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase = new TableMappingBase(data, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase, false); + defaultTableMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, data.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)blobColumnBase, data.FindProperty("Blob")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + + var tableMappings = new List(); + data.SetRuntimeAnnotation("Relational:TableMappings", tableMappings); + var dataTable = new Table("Data", null, relationalModel); + var idColumn = new Column("Id", "integer", dataTable); + dataTable.Columns.Add("Id", idColumn); + idColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn); + idColumn.AddAnnotation("Jet:Identity", "1, 1"); + var blobColumn = new Column("Blob", "longbinary", dataTable) + { + IsNullable = true + }; + dataTable.Columns.Add("Blob", blobColumn); + blobColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(blobColumn); + relationalModel.Tables.Add(("Data", null), dataTable); + var dataTableMapping = new TableMapping(data, dataTable, null); + dataTable.AddTypeMapping(dataTableMapping, false); + tableMappings.Add(dataTableMapping); + RelationalModel.CreateColumnMapping(idColumn, data.FindProperty("Id")!, dataTableMapping); + RelationalModel.CreateColumnMapping(blobColumn, data.FindProperty("Blob")!, dataTableMapping); + var pK_Data = new UniqueConstraint("PK_Data", dataTable, new[] { idColumn }); + dataTable.PrimaryKey = pK_Data; + pK_Data.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_Data)); + var pK_DataKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", + new[] { "Id" }); + pK_Data.MappedKeys.Add(pK_DataKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_DataKey).Add(pK_Data); + dataTable.UniqueConstraints.Add("PK_Data", pK_Data); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/DbContextModelBuilder.cs new file mode 100644 index 00000000..56d18fa6 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/DbContextModelBuilder.cs @@ -0,0 +1,1349 @@ +// +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text.Json; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Update.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 2) + { + } + + partial void Initialize() + { + var principalBase = PrincipalBaseEntityType.Create(this); + var principalDerived = PrincipalDerivedEntityType.Create(this, principalBase); + + PrincipalBaseEntityType.CreateForeignKey1(principalBase, principalBase); + + PrincipalBaseEntityType.CreateAnnotations(principalBase); + PrincipalDerivedEntityType.CreateAnnotations(principalDerived); + + var functions = new Dictionary(); + var principalBaseTvf = new RuntimeDbFunction( + "PrincipalBaseTvf", + this, + typeof(IQueryable), + "PrincipalBaseTvf"); + + functions["PrincipalBaseTvf"] = principalBaseTvf; + + AddAnnotation("Relational:DbFunctions", functions); + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + + var principalBase = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase")!; + + var defaultTableMappings = new List>(); + principalBase.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", null, relationalModel); + var discriminatorColumnBase = new ColumnBase("Discriminator", "varchar(55)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Discriminator", discriminatorColumnBase); + var enum1ColumnBase = new ColumnBase("Enum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Enum1", enum1ColumnBase); + var enum2ColumnBase = new ColumnBase("Enum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Enum2", enum2ColumnBase); + var flagsEnum1ColumnBase = new ColumnBase("FlagsEnum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("FlagsEnum1", flagsEnum1ColumnBase); + var flagsEnum2ColumnBase = new ColumnBase("FlagsEnum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("FlagsEnum2", flagsEnum2ColumnBase); + var idColumnBase = new ColumnBase("Id", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Id", idColumnBase); + var manyOwned_DetailsColumnBase = new ColumnBase("ManyOwned_Details", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Details", manyOwned_DetailsColumnBase); + var manyOwned_NumberColumnBase = new ColumnBase("ManyOwned_Number", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Number", manyOwned_NumberColumnBase); + var manyOwned_Principal_AlternateIdColumnBase = new ColumnBase("ManyOwned_Principal_AlternateId", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_AlternateId", manyOwned_Principal_AlternateIdColumnBase); + var manyOwned_Principal_Enum1ColumnBase = new ColumnBase("ManyOwned_Principal_Enum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_Enum1", manyOwned_Principal_Enum1ColumnBase); + var manyOwned_Principal_Enum2ColumnBase = new ColumnBase("ManyOwned_Principal_Enum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_Enum2", manyOwned_Principal_Enum2ColumnBase); + var manyOwned_Principal_FlagsEnum1ColumnBase = new ColumnBase("ManyOwned_Principal_FlagsEnum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_FlagsEnum1", manyOwned_Principal_FlagsEnum1ColumnBase); + var manyOwned_Principal_FlagsEnum2ColumnBase = new ColumnBase("ManyOwned_Principal_FlagsEnum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_FlagsEnum2", manyOwned_Principal_FlagsEnum2ColumnBase); + var manyOwned_Principal_IdColumnBase = new ColumnBase("ManyOwned_Principal_Id", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_Id", manyOwned_Principal_IdColumnBase); + var manyOwned_Principal_RefTypeArrayColumnBase = new ColumnBase("ManyOwned_Principal_RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_RefTypeArray", manyOwned_Principal_RefTypeArrayColumnBase); + var manyOwned_Principal_RefTypeEnumerableColumnBase = new ColumnBase("ManyOwned_Principal_RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_RefTypeEnumerable", manyOwned_Principal_RefTypeEnumerableColumnBase); + var manyOwned_Principal_RefTypeIListColumnBase = new ColumnBase("ManyOwned_Principal_RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_RefTypeIList", manyOwned_Principal_RefTypeIListColumnBase); + var manyOwned_Principal_RefTypeListColumnBase = new ColumnBase("ManyOwned_Principal_RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_RefTypeList", manyOwned_Principal_RefTypeListColumnBase); + var manyOwned_Principal_ValueTypeArrayColumnBase = new ColumnBase("ManyOwned_Principal_ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_ValueTypeArray", manyOwned_Principal_ValueTypeArrayColumnBase); + var manyOwned_Principal_ValueTypeEnumerableColumnBase = new ColumnBase("ManyOwned_Principal_ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_ValueTypeEnumerable", manyOwned_Principal_ValueTypeEnumerableColumnBase); + var manyOwned_Principal_ValueTypeIListColumnBase = new ColumnBase("ManyOwned_Principal_ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_ValueTypeIList", manyOwned_Principal_ValueTypeIListColumnBase); + var manyOwned_Principal_ValueTypeListColumnBase = new ColumnBase("ManyOwned_Principal_ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_Principal_ValueTypeList", manyOwned_Principal_ValueTypeListColumnBase); + var manyOwned_RefTypeArrayColumnBase = new ColumnBase("ManyOwned_RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_RefTypeArray", manyOwned_RefTypeArrayColumnBase); + var manyOwned_RefTypeEnumerableColumnBase = new ColumnBase("ManyOwned_RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_RefTypeEnumerable", manyOwned_RefTypeEnumerableColumnBase); + var manyOwned_RefTypeIListColumnBase = new ColumnBase("ManyOwned_RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_RefTypeIList", manyOwned_RefTypeIListColumnBase); + var manyOwned_RefTypeListColumnBase = new ColumnBase("ManyOwned_RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_RefTypeList", manyOwned_RefTypeListColumnBase); + var manyOwned_ValueTypeArrayColumnBase = new ColumnBase("ManyOwned_ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_ValueTypeArray", manyOwned_ValueTypeArrayColumnBase); + var manyOwned_ValueTypeEnumerableColumnBase = new ColumnBase("ManyOwned_ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_ValueTypeEnumerable", manyOwned_ValueTypeEnumerableColumnBase); + var manyOwned_ValueTypeIListColumnBase = new ColumnBase("ManyOwned_ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_ValueTypeIList", manyOwned_ValueTypeIListColumnBase); + var manyOwned_ValueTypeListColumnBase = new ColumnBase("ManyOwned_ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ManyOwned_ValueTypeList", manyOwned_ValueTypeListColumnBase); + var owned_DetailsColumnBase = new ColumnBase("Owned_Details", "varchar(64)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Details", owned_DetailsColumnBase); + var owned_NumberColumnBase = new ColumnBase("Owned_Number", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Number", owned_NumberColumnBase); + var owned_Principal_AlternateIdColumnBase = new ColumnBase("Owned_Principal_AlternateId", "uniqueidentifier", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_AlternateId", owned_Principal_AlternateIdColumnBase); + var owned_Principal_Enum1ColumnBase = new ColumnBase("Owned_Principal_Enum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_Enum1", owned_Principal_Enum1ColumnBase); + var owned_Principal_Enum2ColumnBase = new ColumnBase("Owned_Principal_Enum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_Enum2", owned_Principal_Enum2ColumnBase); + var owned_Principal_FlagsEnum1ColumnBase = new ColumnBase("Owned_Principal_FlagsEnum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_FlagsEnum1", owned_Principal_FlagsEnum1ColumnBase); + var owned_Principal_FlagsEnum2ColumnBase = new ColumnBase("Owned_Principal_FlagsEnum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_FlagsEnum2", owned_Principal_FlagsEnum2ColumnBase); + var owned_Principal_IdColumnBase = new ColumnBase("Owned_Principal_Id", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_Id", owned_Principal_IdColumnBase); + var owned_Principal_RefTypeArrayColumnBase = new ColumnBase("Owned_Principal_RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_RefTypeArray", owned_Principal_RefTypeArrayColumnBase); + var owned_Principal_RefTypeEnumerableColumnBase = new ColumnBase("Owned_Principal_RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_RefTypeEnumerable", owned_Principal_RefTypeEnumerableColumnBase); + var owned_Principal_RefTypeIListColumnBase = new ColumnBase("Owned_Principal_RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_RefTypeIList", owned_Principal_RefTypeIListColumnBase); + var owned_Principal_RefTypeListColumnBase = new ColumnBase("Owned_Principal_RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_RefTypeList", owned_Principal_RefTypeListColumnBase); + var owned_Principal_ValueTypeArrayColumnBase = new ColumnBase("Owned_Principal_ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_ValueTypeArray", owned_Principal_ValueTypeArrayColumnBase); + var owned_Principal_ValueTypeEnumerableColumnBase = new ColumnBase("Owned_Principal_ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_ValueTypeEnumerable", owned_Principal_ValueTypeEnumerableColumnBase); + var owned_Principal_ValueTypeIListColumnBase = new ColumnBase("Owned_Principal_ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_ValueTypeIList", owned_Principal_ValueTypeIListColumnBase); + var owned_Principal_ValueTypeListColumnBase = new ColumnBase("Owned_Principal_ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_Principal_ValueTypeList", owned_Principal_ValueTypeListColumnBase); + var owned_RefTypeArrayColumnBase = new ColumnBase("Owned_RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_RefTypeArray", owned_RefTypeArrayColumnBase); + var owned_RefTypeEnumerableColumnBase = new ColumnBase("Owned_RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_RefTypeEnumerable", owned_RefTypeEnumerableColumnBase); + var owned_RefTypeIListColumnBase = new ColumnBase("Owned_RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_RefTypeIList", owned_RefTypeIListColumnBase); + var owned_RefTypeListColumnBase = new ColumnBase("Owned_RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_RefTypeList", owned_RefTypeListColumnBase); + var owned_ValueTypeArrayColumnBase = new ColumnBase("Owned_ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_ValueTypeArray", owned_ValueTypeArrayColumnBase); + var owned_ValueTypeEnumerableColumnBase = new ColumnBase("Owned_ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_ValueTypeEnumerable", owned_ValueTypeEnumerableColumnBase); + var owned_ValueTypeIListColumnBase = new ColumnBase("Owned_ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_ValueTypeIList", owned_ValueTypeIListColumnBase); + var owned_ValueTypeListColumnBase = new ColumnBase("Owned_ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Owned_ValueTypeList", owned_ValueTypeListColumnBase); + var principalBaseIdColumnBase = new ColumnBase("PrincipalBaseId", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("PrincipalBaseId", principalBaseIdColumnBase); + var refTypeArrayColumnBase = new ColumnBase("RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeArray", refTypeArrayColumnBase); + var refTypeEnumerableColumnBase = new ColumnBase("RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumnBase); + var refTypeIListColumnBase = new ColumnBase("RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeIList", refTypeIListColumnBase); + var refTypeListColumnBase = new ColumnBase("RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeList", refTypeListColumnBase); + var valueTypeArrayColumnBase = new ColumnBase("ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeArray", valueTypeArrayColumnBase); + var valueTypeEnumerableColumnBase = new ColumnBase("ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumnBase); + var valueTypeIListColumnBase = new ColumnBase("ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeIList", valueTypeIListColumnBase); + var valueTypeListColumnBase = new ColumnBase("ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeList", valueTypeListColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase = new TableMappingBase(principalBase, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, true); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase, false); + defaultTableMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, principalBase.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)discriminatorColumnBase, principalBase.FindProperty("Discriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum1ColumnBase, principalBase.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum2ColumnBase, principalBase.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum1ColumnBase, principalBase.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum2ColumnBase, principalBase.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalBaseIdColumnBase, principalBase.FindProperty("PrincipalBaseId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase, principalBase.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase, principalBase.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase, principalBase.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase, principalBase.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase, principalBase.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase, principalBase.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase, principalBase.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase, principalBase.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + + var tableMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:TableMappings", tableMappings); + var principalBaseTable = new Table("PrincipalBase", null, relationalModel); + var idColumn = new Column("Id", "decimal(20,0)", principalBaseTable); + principalBaseTable.Columns.Add("Id", idColumn); + idColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn); + idColumn.AddAnnotation("Jet:Identity", "1, 1"); + var deetsColumn = new Column("Deets", "varchar(64)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Deets", deetsColumn); + deetsColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(deetsColumn); + var discriminatorColumn = new Column("Discriminator", "varchar(55)", principalBaseTable); + principalBaseTable.Columns.Add("Discriminator", discriminatorColumn); + discriminatorColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(discriminatorColumn); + var enum1Column = new Column("Enum1", "integer", principalBaseTable); + principalBaseTable.Columns.Add("Enum1", enum1Column); + enum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum1Column); + var enum2Column = new Column("Enum2", "integer", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Enum2", enum2Column); + enum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum2Column); + var flagsEnum1Column = new Column("FlagsEnum1", "integer", principalBaseTable); + principalBaseTable.Columns.Add("FlagsEnum1", flagsEnum1Column); + flagsEnum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum1Column); + var flagsEnum2Column = new Column("FlagsEnum2", "integer", principalBaseTable); + principalBaseTable.Columns.Add("FlagsEnum2", flagsEnum2Column); + flagsEnum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum2Column); + var manyOwnedColumn = new JsonColumn("ManyOwned", "longchar", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ManyOwned", manyOwnedColumn); + manyOwnedColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(manyOwnedColumn); + var owned_NumberColumn = new Column("Owned_Number", "integer", principalBaseTable); + principalBaseTable.Columns.Add("Owned_Number", owned_NumberColumn); + owned_NumberColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_NumberColumn); + var owned_Principal_AlternateIdColumn = new Column("Owned_Principal_AlternateId", "uniqueidentifier", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_AlternateId", owned_Principal_AlternateIdColumn); + owned_Principal_AlternateIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_AlternateIdColumn); + var owned_Principal_Enum1Column = new Column("Owned_Principal_Enum1", "integer", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_Enum1", owned_Principal_Enum1Column); + owned_Principal_Enum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_Enum1Column); + var owned_Principal_Enum2Column = new Column("Owned_Principal_Enum2", "integer", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_Enum2", owned_Principal_Enum2Column); + owned_Principal_Enum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_Enum2Column); + var owned_Principal_FlagsEnum1Column = new Column("Owned_Principal_FlagsEnum1", "integer", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_FlagsEnum1", owned_Principal_FlagsEnum1Column); + owned_Principal_FlagsEnum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_FlagsEnum1Column); + var owned_Principal_FlagsEnum2Column = new Column("Owned_Principal_FlagsEnum2", "integer", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_FlagsEnum2", owned_Principal_FlagsEnum2Column); + owned_Principal_FlagsEnum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_FlagsEnum2Column); + var owned_Principal_IdColumn = new Column("Owned_Principal_Id", "decimal(20,0)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_Id", owned_Principal_IdColumn); + owned_Principal_IdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_IdColumn); + var owned_Principal_RefTypeArrayColumn = new Column("Owned_Principal_RefTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_RefTypeArray", owned_Principal_RefTypeArrayColumn); + owned_Principal_RefTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_RefTypeArrayColumn); + var owned_Principal_RefTypeEnumerableColumn = new Column("Owned_Principal_RefTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_RefTypeEnumerable", owned_Principal_RefTypeEnumerableColumn); + owned_Principal_RefTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_RefTypeEnumerableColumn); + var owned_Principal_RefTypeIListColumn = new Column("Owned_Principal_RefTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_RefTypeIList", owned_Principal_RefTypeIListColumn); + owned_Principal_RefTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_RefTypeIListColumn); + var owned_Principal_RefTypeListColumn = new Column("Owned_Principal_RefTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_RefTypeList", owned_Principal_RefTypeListColumn); + owned_Principal_RefTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_RefTypeListColumn); + var owned_Principal_ValueTypeArrayColumn = new Column("Owned_Principal_ValueTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_ValueTypeArray", owned_Principal_ValueTypeArrayColumn); + owned_Principal_ValueTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_ValueTypeArrayColumn); + var owned_Principal_ValueTypeEnumerableColumn = new Column("Owned_Principal_ValueTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_ValueTypeEnumerable", owned_Principal_ValueTypeEnumerableColumn); + owned_Principal_ValueTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_ValueTypeEnumerableColumn); + var owned_Principal_ValueTypeIListColumn = new Column("Owned_Principal_ValueTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_ValueTypeIList", owned_Principal_ValueTypeIListColumn); + owned_Principal_ValueTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_ValueTypeIListColumn); + var owned_Principal_ValueTypeListColumn = new Column("Owned_Principal_ValueTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_Principal_ValueTypeList", owned_Principal_ValueTypeListColumn); + owned_Principal_ValueTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_Principal_ValueTypeListColumn); + var owned_RefTypeArrayColumn = new Column("Owned_RefTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_RefTypeArray", owned_RefTypeArrayColumn); + owned_RefTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_RefTypeArrayColumn); + var owned_RefTypeEnumerableColumn = new Column("Owned_RefTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_RefTypeEnumerable", owned_RefTypeEnumerableColumn); + owned_RefTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_RefTypeEnumerableColumn); + var owned_RefTypeIListColumn = new Column("Owned_RefTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_RefTypeIList", owned_RefTypeIListColumn); + owned_RefTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_RefTypeIListColumn); + var owned_RefTypeListColumn = new Column("Owned_RefTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_RefTypeList", owned_RefTypeListColumn); + owned_RefTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_RefTypeListColumn); + var owned_ValueTypeArrayColumn = new Column("Owned_ValueTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_ValueTypeArray", owned_ValueTypeArrayColumn); + owned_ValueTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_ValueTypeArrayColumn); + var owned_ValueTypeEnumerableColumn = new Column("Owned_ValueTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_ValueTypeEnumerable", owned_ValueTypeEnumerableColumn); + owned_ValueTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_ValueTypeEnumerableColumn); + var owned_ValueTypeIListColumn = new Column("Owned_ValueTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_ValueTypeIList", owned_ValueTypeIListColumn); + owned_ValueTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_ValueTypeIListColumn); + var owned_ValueTypeListColumn = new Column("Owned_ValueTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Owned_ValueTypeList", owned_ValueTypeListColumn); + owned_ValueTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(owned_ValueTypeListColumn); + var principalBaseIdColumn = new Column("PrincipalBaseId", "decimal(20,0)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("PrincipalBaseId", principalBaseIdColumn); + principalBaseIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalBaseIdColumn); + var refTypeArrayColumn = new Column("RefTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeArray", refTypeArrayColumn); + refTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeArrayColumn); + var refTypeEnumerableColumn = new Column("RefTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumn); + refTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeEnumerableColumn); + var refTypeIListColumn = new Column("RefTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeIList", refTypeIListColumn); + refTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeIListColumn); + var refTypeListColumn = new Column("RefTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeList", refTypeListColumn); + refTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeListColumn); + var valueTypeArrayColumn = new Column("ValueTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeArray", valueTypeArrayColumn); + valueTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeArrayColumn); + var valueTypeEnumerableColumn = new Column("ValueTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumn); + valueTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeEnumerableColumn); + var valueTypeIListColumn = new Column("ValueTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeIList", valueTypeIListColumn); + valueTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeIListColumn); + var valueTypeListColumn = new Column("ValueTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeList", valueTypeListColumn); + valueTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeListColumn); + relationalModel.Tables.Add(("PrincipalBase", null), principalBaseTable); + var principalBaseTableMapping = new TableMapping(principalBase, principalBaseTable, true) + { + IsSharedTablePrincipal = true, + }; + principalBaseTable.AddTypeMapping(principalBaseTableMapping, false); + tableMappings.Add(principalBaseTableMapping); + RelationalModel.CreateColumnMapping(idColumn, principalBase.FindProperty("Id")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(discriminatorColumn, principalBase.FindProperty("Discriminator")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(enum1Column, principalBase.FindProperty("Enum1")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(enum2Column, principalBase.FindProperty("Enum2")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum1Column, principalBase.FindProperty("FlagsEnum1")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum2Column, principalBase.FindProperty("FlagsEnum2")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(principalBaseIdColumn, principalBase.FindProperty("PrincipalBaseId")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeArrayColumn, principalBase.FindProperty("RefTypeArray")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeEnumerableColumn, principalBase.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeIListColumn, principalBase.FindProperty("RefTypeIList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeListColumn, principalBase.FindProperty("RefTypeList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeArrayColumn, principalBase.FindProperty("ValueTypeArray")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeEnumerableColumn, principalBase.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeIListColumn, principalBase.FindProperty("ValueTypeIList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeListColumn, principalBase.FindProperty("ValueTypeList")!, principalBaseTableMapping); + + var viewMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:ViewMappings", viewMappings); + var principalBaseViewView = new View("PrincipalBaseView", null, relationalModel); + var discriminatorViewColumn = new ViewColumn("Discriminator", "varchar(55)", principalBaseViewView); + principalBaseViewView.Columns.Add("Discriminator", discriminatorViewColumn); + var enum1ViewColumn = new ViewColumn("Enum1", "integer", principalBaseViewView); + principalBaseViewView.Columns.Add("Enum1", enum1ViewColumn); + var enum2ViewColumn = new ViewColumn("Enum2", "integer", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("Enum2", enum2ViewColumn); + var flagsEnum1ViewColumn = new ViewColumn("FlagsEnum1", "integer", principalBaseViewView); + principalBaseViewView.Columns.Add("FlagsEnum1", flagsEnum1ViewColumn); + var flagsEnum2ViewColumn = new ViewColumn("FlagsEnum2", "integer", principalBaseViewView); + principalBaseViewView.Columns.Add("FlagsEnum2", flagsEnum2ViewColumn); + var idViewColumn = new ViewColumn("Id", "decimal(20,0)", principalBaseViewView); + principalBaseViewView.Columns.Add("Id", idViewColumn); + var principalBaseIdViewColumn = new ViewColumn("PrincipalBaseId", "decimal(20,0)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("PrincipalBaseId", principalBaseIdViewColumn); + var refTypeArrayViewColumn = new ViewColumn("RefTypeArray", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("RefTypeArray", refTypeArrayViewColumn); + var refTypeEnumerableViewColumn = new ViewColumn("RefTypeEnumerable", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("RefTypeEnumerable", refTypeEnumerableViewColumn); + var refTypeIListViewColumn = new ViewColumn("RefTypeIList", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("RefTypeIList", refTypeIListViewColumn); + var refTypeListViewColumn = new ViewColumn("RefTypeList", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("RefTypeList", refTypeListViewColumn); + var valueTypeArrayViewColumn = new ViewColumn("ValueTypeArray", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("ValueTypeArray", valueTypeArrayViewColumn); + var valueTypeEnumerableViewColumn = new ViewColumn("ValueTypeEnumerable", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableViewColumn); + var valueTypeIListViewColumn = new ViewColumn("ValueTypeIList", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("ValueTypeIList", valueTypeIListViewColumn); + var valueTypeListViewColumn = new ViewColumn("ValueTypeList", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("ValueTypeList", valueTypeListViewColumn); + relationalModel.Views.Add(("PrincipalBaseView", null), principalBaseViewView); + var principalBaseViewViewMapping = new ViewMapping(principalBase, principalBaseViewView, true); + principalBaseViewView.AddTypeMapping(principalBaseViewViewMapping, false); + viewMappings.Add(principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(idViewColumn, principalBase.FindProperty("Id")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(discriminatorViewColumn, principalBase.FindProperty("Discriminator")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(enum1ViewColumn, principalBase.FindProperty("Enum1")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(enum2ViewColumn, principalBase.FindProperty("Enum2")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(flagsEnum1ViewColumn, principalBase.FindProperty("FlagsEnum1")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(flagsEnum2ViewColumn, principalBase.FindProperty("FlagsEnum2")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(principalBaseIdViewColumn, principalBase.FindProperty("PrincipalBaseId")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeArrayViewColumn, principalBase.FindProperty("RefTypeArray")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeEnumerableViewColumn, principalBase.FindProperty("RefTypeEnumerable")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeIListViewColumn, principalBase.FindProperty("RefTypeIList")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeListViewColumn, principalBase.FindProperty("RefTypeList")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeArrayViewColumn, principalBase.FindProperty("ValueTypeArray")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeEnumerableViewColumn, principalBase.FindProperty("ValueTypeEnumerable")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeIListViewColumn, principalBase.FindProperty("ValueTypeIList")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeListViewColumn, principalBase.FindProperty("ValueTypeList")!, principalBaseViewViewMapping); + + var sqlQueryMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:SqlQueryMappings", sqlQueryMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery = new SqlQuery("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.MappedSqlQuery", relationalModel, "select * from PrincipalBase"); + var discriminatorSqlQueryColumn = new SqlQueryColumn("Discriminator", "varchar(55)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("Discriminator", discriminatorSqlQueryColumn); + var enum1SqlQueryColumn = new SqlQueryColumn("Enum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("Enum1", enum1SqlQueryColumn); + var enum2SqlQueryColumn = new SqlQueryColumn("Enum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("Enum2", enum2SqlQueryColumn); + var flagsEnum1SqlQueryColumn = new SqlQueryColumn("FlagsEnum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("FlagsEnum1", flagsEnum1SqlQueryColumn); + var flagsEnum2SqlQueryColumn = new SqlQueryColumn("FlagsEnum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("FlagsEnum2", flagsEnum2SqlQueryColumn); + var idSqlQueryColumn = new SqlQueryColumn("Id", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("Id", idSqlQueryColumn); + var principalBaseIdSqlQueryColumn = new SqlQueryColumn("PrincipalBaseId", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("PrincipalBaseId", principalBaseIdSqlQueryColumn); + var refTypeArraySqlQueryColumn = new SqlQueryColumn("RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("RefTypeArray", refTypeArraySqlQueryColumn); + var refTypeEnumerableSqlQueryColumn = new SqlQueryColumn("RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("RefTypeEnumerable", refTypeEnumerableSqlQueryColumn); + var refTypeIListSqlQueryColumn = new SqlQueryColumn("RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("RefTypeIList", refTypeIListSqlQueryColumn); + var refTypeListSqlQueryColumn = new SqlQueryColumn("RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("RefTypeList", refTypeListSqlQueryColumn); + var valueTypeArraySqlQueryColumn = new SqlQueryColumn("ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("ValueTypeArray", valueTypeArraySqlQueryColumn); + var valueTypeEnumerableSqlQueryColumn = new SqlQueryColumn("ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableSqlQueryColumn); + var valueTypeIListSqlQueryColumn = new SqlQueryColumn("ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("ValueTypeIList", valueTypeIListSqlQueryColumn); + var valueTypeListSqlQueryColumn = new SqlQueryColumn("ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.Columns.Add("ValueTypeList", valueTypeListSqlQueryColumn); + relationalModel.Queries.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.MappedSqlQuery", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping = new SqlQueryMapping(principalBase, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery, true); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping, false); + sqlQueryMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping.IsDefaultSqlQueryMapping = true; + RelationalModel.CreateSqlQueryColumnMapping(idSqlQueryColumn, principalBase.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(discriminatorSqlQueryColumn, principalBase.FindProperty("Discriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(enum1SqlQueryColumn, principalBase.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(enum2SqlQueryColumn, principalBase.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(flagsEnum1SqlQueryColumn, principalBase.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(flagsEnum2SqlQueryColumn, principalBase.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(principalBaseIdSqlQueryColumn, principalBase.FindProperty("PrincipalBaseId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(refTypeArraySqlQueryColumn, principalBase.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(refTypeEnumerableSqlQueryColumn, principalBase.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(refTypeIListSqlQueryColumn, principalBase.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(refTypeListSqlQueryColumn, principalBase.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(valueTypeArraySqlQueryColumn, principalBase.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(valueTypeEnumerableSqlQueryColumn, principalBase.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(valueTypeIListSqlQueryColumn, principalBase.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + RelationalModel.CreateSqlQueryColumnMapping(valueTypeListSqlQueryColumn, principalBase.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping); + + var functionMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:FunctionMappings", functionMappings); + var principalBaseTvf = (IRuntimeDbFunction)this.FindDbFunction("PrincipalBaseTvf")!; + var principalBaseTvfFunction = new StoreFunction(principalBaseTvf, relationalModel); + var discriminatorFunctionColumn = new FunctionColumn("Discriminator", "varchar(55)", principalBaseTvfFunction); + principalBaseTvfFunction.Columns.Add("Discriminator", discriminatorFunctionColumn); + var enum1FunctionColumn = new FunctionColumn("Enum1", "integer", principalBaseTvfFunction); + principalBaseTvfFunction.Columns.Add("Enum1", enum1FunctionColumn); + var enum2FunctionColumn = new FunctionColumn("Enum2", "integer", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("Enum2", enum2FunctionColumn); + var flagsEnum1FunctionColumn = new FunctionColumn("FlagsEnum1", "integer", principalBaseTvfFunction); + principalBaseTvfFunction.Columns.Add("FlagsEnum1", flagsEnum1FunctionColumn); + var flagsEnum2FunctionColumn = new FunctionColumn("FlagsEnum2", "integer", principalBaseTvfFunction); + principalBaseTvfFunction.Columns.Add("FlagsEnum2", flagsEnum2FunctionColumn); + var idFunctionColumn = new FunctionColumn("Id", "decimal(20,0)", principalBaseTvfFunction); + principalBaseTvfFunction.Columns.Add("Id", idFunctionColumn); + var principalBaseIdFunctionColumn = new FunctionColumn("PrincipalBaseId", "decimal(20,0)", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("PrincipalBaseId", principalBaseIdFunctionColumn); + var refTypeArrayFunctionColumn = new FunctionColumn("RefTypeArray", "varchar(255)", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("RefTypeArray", refTypeArrayFunctionColumn); + var refTypeEnumerableFunctionColumn = new FunctionColumn("RefTypeEnumerable", "varchar(255)", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("RefTypeEnumerable", refTypeEnumerableFunctionColumn); + var refTypeIListFunctionColumn = new FunctionColumn("RefTypeIList", "varchar(255)", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("RefTypeIList", refTypeIListFunctionColumn); + var refTypeListFunctionColumn = new FunctionColumn("RefTypeList", "varchar(255)", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("RefTypeList", refTypeListFunctionColumn); + var valueTypeArrayFunctionColumn = new FunctionColumn("ValueTypeArray", "varchar(255)", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("ValueTypeArray", valueTypeArrayFunctionColumn); + var valueTypeEnumerableFunctionColumn = new FunctionColumn("ValueTypeEnumerable", "varchar(255)", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableFunctionColumn); + var valueTypeIListFunctionColumn = new FunctionColumn("ValueTypeIList", "varchar(255)", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("ValueTypeIList", valueTypeIListFunctionColumn); + var valueTypeListFunctionColumn = new FunctionColumn("ValueTypeList", "varchar(255)", principalBaseTvfFunction) + { + IsNullable = true + }; + principalBaseTvfFunction.Columns.Add("ValueTypeList", valueTypeListFunctionColumn); + relationalModel.Functions.Add( + ("PrincipalBaseTvf", null, new string[0]), + principalBaseTvfFunction); + var principalBaseTvfFunctionMapping = new FunctionMapping(principalBase, principalBaseTvfFunction, principalBaseTvf, true); + principalBaseTvfFunction.AddTypeMapping(principalBaseTvfFunctionMapping, false); + functionMappings.Add(principalBaseTvfFunctionMapping); + principalBaseTvfFunctionMapping.IsDefaultFunctionMapping = true; + RelationalModel.CreateFunctionColumnMapping(idFunctionColumn, principalBase.FindProperty("Id")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(discriminatorFunctionColumn, principalBase.FindProperty("Discriminator")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(enum1FunctionColumn, principalBase.FindProperty("Enum1")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(enum2FunctionColumn, principalBase.FindProperty("Enum2")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(flagsEnum1FunctionColumn, principalBase.FindProperty("FlagsEnum1")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(flagsEnum2FunctionColumn, principalBase.FindProperty("FlagsEnum2")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(principalBaseIdFunctionColumn, principalBase.FindProperty("PrincipalBaseId")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(refTypeArrayFunctionColumn, principalBase.FindProperty("RefTypeArray")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(refTypeEnumerableFunctionColumn, principalBase.FindProperty("RefTypeEnumerable")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(refTypeIListFunctionColumn, principalBase.FindProperty("RefTypeIList")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(refTypeListFunctionColumn, principalBase.FindProperty("RefTypeList")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(valueTypeArrayFunctionColumn, principalBase.FindProperty("ValueTypeArray")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(valueTypeEnumerableFunctionColumn, principalBase.FindProperty("ValueTypeEnumerable")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(valueTypeIListFunctionColumn, principalBase.FindProperty("ValueTypeIList")!, principalBaseTvfFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(valueTypeListFunctionColumn, principalBase.FindProperty("ValueTypeList")!, principalBaseTvfFunctionMapping); + + var deleteSprocMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:DeleteStoredProcedureMappings", deleteSprocMappings); + var principalBase_DeleteStoreSproc = new StoreStoredProcedure("PrincipalBase_Delete", null, relationalModel); + var rowsAffectedParameter = new StoreStoredProcedureParameter("RowsAffected", "integer", 0, principalBase_DeleteStoreSproc, System.Data.ParameterDirection.Output); + principalBase_DeleteStoreSproc.AddParameter(rowsAffectedParameter); + var id_OriginalParameter = new StoreStoredProcedureParameter("Id_Original", "decimal(20,0)", 1, principalBase_DeleteStoreSproc, System.Data.ParameterDirection.Input); + principalBase_DeleteStoreSproc.AddParameter(id_OriginalParameter); + principalBase_DeleteStoreSproc.AddStoredProcedure((IRuntimeStoredProcedure)principalBase.GetDeleteStoredProcedure()!); + relationalModel.StoredProcedures.Add(("PrincipalBase_Delete", null), principalBase_DeleteStoreSproc); + var principalBase_DeleteDSproc = (IRuntimeStoredProcedure)principalBase.GetDeleteStoredProcedure()!; + var principalBase_DeleteSprocMapping = new StoredProcedureMapping(principalBase, principalBase_DeleteStoreSproc, principalBase_DeleteDSproc, principalBaseTableMapping, true); + principalBase_DeleteStoreSproc.AddTypeMapping(principalBase_DeleteSprocMapping, false); + deleteSprocMappings.Add(principalBase_DeleteSprocMapping); + principalBaseTableMapping.DeleteStoredProcedureMapping = principalBase_DeleteSprocMapping; + RelationalModel.CreateStoredProcedureParameterMapping(id_OriginalParameter, principalBase_DeleteDSproc.FindParameter("Id_Original")!, principalBase.FindProperty("Id")!, principalBase_DeleteSprocMapping); + + var insertSprocMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:InsertStoredProcedureMappings", insertSprocMappings); + var principalBase_InsertStoreSproc = new StoreStoredProcedure("PrincipalBase_Insert", null, relationalModel); + var principalBaseIdParameter = new StoreStoredProcedureParameter("PrincipalBaseId", "decimal(20,0)", 0, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(principalBaseIdParameter); + var enum1Parameter = new StoreStoredProcedureParameter("Enum1", "integer", 1, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input); + principalBase_InsertStoreSproc.AddParameter(enum1Parameter); + var enum2Parameter = new StoreStoredProcedureParameter("Enum2", "integer", 2, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(enum2Parameter); + var flagsEnum1Parameter = new StoreStoredProcedureParameter("FlagsEnum1", "integer", 3, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input); + principalBase_InsertStoreSproc.AddParameter(flagsEnum1Parameter); + var flagsEnum2Parameter = new StoreStoredProcedureParameter("FlagsEnum2", "integer", 4, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input); + principalBase_InsertStoreSproc.AddParameter(flagsEnum2Parameter); + var valueTypeListParameter = new StoreStoredProcedureParameter("ValueTypeList", "varchar(255)", 5, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(valueTypeListParameter); + var valueTypeIListParameter = new StoreStoredProcedureParameter("ValueTypeIList", "varchar(255)", 6, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(valueTypeIListParameter); + var valueTypeArrayParameter = new StoreStoredProcedureParameter("ValueTypeArray", "varchar(255)", 7, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(valueTypeArrayParameter); + var valueTypeEnumerableParameter = new StoreStoredProcedureParameter("ValueTypeEnumerable", "varchar(255)", 8, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(valueTypeEnumerableParameter); + var refTypeListParameter = new StoreStoredProcedureParameter("RefTypeList", "varchar(255)", 9, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(refTypeListParameter); + var refTypeIListParameter = new StoreStoredProcedureParameter("RefTypeIList", "varchar(255)", 10, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(refTypeIListParameter); + var refTypeArrayParameter = new StoreStoredProcedureParameter("RefTypeArray", "varchar(255)", 11, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(refTypeArrayParameter); + var refTypeEnumerableParameter = new StoreStoredProcedureParameter("RefTypeEnumerable", "varchar(255)", 12, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(refTypeEnumerableParameter); + var discriminatorParameter = new StoreStoredProcedureParameter("Discriminator", "varchar(55)", 13, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input); + principalBase_InsertStoreSproc.AddParameter(discriminatorParameter); + var idParameter = new StoreStoredProcedureParameter("Id", "decimal(20,0)", 14, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Output); + principalBase_InsertStoreSproc.AddParameter(idParameter); + principalBase_InsertStoreSproc.AddStoredProcedure((IRuntimeStoredProcedure)principalBase.GetInsertStoredProcedure()!); + relationalModel.StoredProcedures.Add(("PrincipalBase_Insert", null), principalBase_InsertStoreSproc); + var principalBase_InsertISproc = (IRuntimeStoredProcedure)principalBase.GetInsertStoredProcedure()!; + var principalBase_InsertSprocMapping = new StoredProcedureMapping(principalBase, principalBase_InsertStoreSproc, principalBase_InsertISproc, principalBaseTableMapping, true); + principalBase_InsertStoreSproc.AddTypeMapping(principalBase_InsertSprocMapping, false); + insertSprocMappings.Add(principalBase_InsertSprocMapping); + principalBaseTableMapping.InsertStoredProcedureMapping = principalBase_InsertSprocMapping; + RelationalModel.CreateStoredProcedureParameterMapping(idParameter, principalBase_InsertISproc.FindParameter("Id")!, principalBase.FindProperty("Id")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(discriminatorParameter, principalBase_InsertISproc.FindParameter("Discriminator")!, principalBase.FindProperty("Discriminator")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum1Parameter, principalBase_InsertISproc.FindParameter("Enum1")!, principalBase.FindProperty("Enum1")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum2Parameter, principalBase_InsertISproc.FindParameter("Enum2")!, principalBase.FindProperty("Enum2")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum1Parameter, principalBase_InsertISproc.FindParameter("FlagsEnum1")!, principalBase.FindProperty("FlagsEnum1")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum2Parameter, principalBase_InsertISproc.FindParameter("FlagsEnum2")!, principalBase.FindProperty("FlagsEnum2")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalBaseIdParameter, principalBase_InsertISproc.FindParameter("PrincipalBaseId")!, principalBase.FindProperty("PrincipalBaseId")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeArrayParameter, principalBase_InsertISproc.FindParameter("RefTypeArray")!, principalBase.FindProperty("RefTypeArray")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeEnumerableParameter, principalBase_InsertISproc.FindParameter("RefTypeEnumerable")!, principalBase.FindProperty("RefTypeEnumerable")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeIListParameter, principalBase_InsertISproc.FindParameter("RefTypeIList")!, principalBase.FindProperty("RefTypeIList")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeListParameter, principalBase_InsertISproc.FindParameter("RefTypeList")!, principalBase.FindProperty("RefTypeList")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeArrayParameter, principalBase_InsertISproc.FindParameter("ValueTypeArray")!, principalBase.FindProperty("ValueTypeArray")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeEnumerableParameter, principalBase_InsertISproc.FindParameter("ValueTypeEnumerable")!, principalBase.FindProperty("ValueTypeEnumerable")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeIListParameter, principalBase_InsertISproc.FindParameter("ValueTypeIList")!, principalBase.FindProperty("ValueTypeIList")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeListParameter, principalBase_InsertISproc.FindParameter("ValueTypeList")!, principalBase.FindProperty("ValueTypeList")!, principalBase_InsertSprocMapping); + + var updateSprocMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:UpdateStoredProcedureMappings", updateSprocMappings); + var principalBase_UpdateStoreSproc = new StoreStoredProcedure("PrincipalBase_Update", null, relationalModel); + var principalBaseIdParameter0 = new StoreStoredProcedureParameter("PrincipalBaseId", "decimal(20,0)", 0, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(principalBaseIdParameter0); + var enum1Parameter0 = new StoreStoredProcedureParameter("Enum1", "integer", 1, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input); + principalBase_UpdateStoreSproc.AddParameter(enum1Parameter0); + var enum2Parameter0 = new StoreStoredProcedureParameter("Enum2", "integer", 2, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(enum2Parameter0); + var flagsEnum1Parameter0 = new StoreStoredProcedureParameter("FlagsEnum1", "integer", 3, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input); + principalBase_UpdateStoreSproc.AddParameter(flagsEnum1Parameter0); + var flagsEnum2Parameter0 = new StoreStoredProcedureParameter("FlagsEnum2", "integer", 4, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input); + principalBase_UpdateStoreSproc.AddParameter(flagsEnum2Parameter0); + var valueTypeListParameter0 = new StoreStoredProcedureParameter("ValueTypeList", "varchar(255)", 5, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(valueTypeListParameter0); + var valueTypeIListParameter0 = new StoreStoredProcedureParameter("ValueTypeIList", "varchar(255)", 6, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(valueTypeIListParameter0); + var valueTypeArrayParameter0 = new StoreStoredProcedureParameter("ValueTypeArray", "varchar(255)", 7, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(valueTypeArrayParameter0); + var valueTypeEnumerableParameter0 = new StoreStoredProcedureParameter("ValueTypeEnumerable", "varchar(255)", 8, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(valueTypeEnumerableParameter0); + var refTypeListParameter0 = new StoreStoredProcedureParameter("RefTypeList", "varchar(255)", 9, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(refTypeListParameter0); + var refTypeIListParameter0 = new StoreStoredProcedureParameter("RefTypeIList", "varchar(255)", 10, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(refTypeIListParameter0); + var refTypeArrayParameter0 = new StoreStoredProcedureParameter("RefTypeArray", "varchar(255)", 11, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(refTypeArrayParameter0); + var refTypeEnumerableParameter0 = new StoreStoredProcedureParameter("RefTypeEnumerable", "varchar(255)", 12, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(refTypeEnumerableParameter0); + var id_OriginalParameter0 = new StoreStoredProcedureParameter("Id_Original", "decimal(20,0)", 13, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input); + principalBase_UpdateStoreSproc.AddParameter(id_OriginalParameter0); + principalBase_UpdateStoreSproc.AddStoredProcedure((IRuntimeStoredProcedure)principalBase.GetUpdateStoredProcedure()!); + relationalModel.StoredProcedures.Add(("PrincipalBase_Update", null), principalBase_UpdateStoreSproc); + var principalBase_UpdateUSproc = (IRuntimeStoredProcedure)principalBase.GetUpdateStoredProcedure()!; + var principalBase_UpdateSprocMapping = new StoredProcedureMapping(principalBase, principalBase_UpdateStoreSproc, principalBase_UpdateUSproc, principalBaseTableMapping, true); + principalBase_UpdateStoreSproc.AddTypeMapping(principalBase_UpdateSprocMapping, false); + updateSprocMappings.Add(principalBase_UpdateSprocMapping); + principalBaseTableMapping.UpdateStoredProcedureMapping = principalBase_UpdateSprocMapping; + RelationalModel.CreateStoredProcedureParameterMapping(id_OriginalParameter0, principalBase_UpdateUSproc.FindParameter("Id_Original")!, principalBase.FindProperty("Id")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum1Parameter0, principalBase_UpdateUSproc.FindParameter("Enum1")!, principalBase.FindProperty("Enum1")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum2Parameter0, principalBase_UpdateUSproc.FindParameter("Enum2")!, principalBase.FindProperty("Enum2")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum1Parameter0, principalBase_UpdateUSproc.FindParameter("FlagsEnum1")!, principalBase.FindProperty("FlagsEnum1")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum2Parameter0, principalBase_UpdateUSproc.FindParameter("FlagsEnum2")!, principalBase.FindProperty("FlagsEnum2")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalBaseIdParameter0, principalBase_UpdateUSproc.FindParameter("PrincipalBaseId")!, principalBase.FindProperty("PrincipalBaseId")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeArrayParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeArray")!, principalBase.FindProperty("RefTypeArray")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeEnumerableParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeEnumerable")!, principalBase.FindProperty("RefTypeEnumerable")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeIListParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeIList")!, principalBase.FindProperty("RefTypeIList")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeListParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeList")!, principalBase.FindProperty("RefTypeList")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeArrayParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeArray")!, principalBase.FindProperty("ValueTypeArray")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeEnumerableParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeEnumerable")!, principalBase.FindProperty("ValueTypeEnumerable")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeIListParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeIList")!, principalBase.FindProperty("ValueTypeIList")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeListParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeList")!, principalBase.FindProperty("ValueTypeList")!, principalBase_UpdateSprocMapping); + + var ownedType = principalBase.FindComplexProperty("Owned")!.ComplexType; + + var defaultTableMappings0 = new List>(); + ownedType.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings0); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0 = new TableMappingBase(ownedType, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0, false); + defaultTableMappings0.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_DetailsColumnBase, ownedType.FindProperty("Details")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_NumberColumnBase, ownedType.FindProperty("Number")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_RefTypeArrayColumnBase, ownedType.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_RefTypeEnumerableColumnBase, ownedType.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_RefTypeIListColumnBase, ownedType.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_RefTypeListColumnBase, ownedType.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_ValueTypeArrayColumnBase, ownedType.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_ValueTypeEnumerableColumnBase, ownedType.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_ValueTypeIListColumnBase, ownedType.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + RelationalModel.CreateColumnMapping((ColumnBase)owned_ValueTypeListColumnBase, ownedType.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase0); + + var tableMappings0 = new List(); + ownedType.SetRuntimeAnnotation("Relational:TableMappings", tableMappings0); + var principalBaseTableMapping0 = new TableMapping(ownedType, principalBaseTable, true); + principalBaseTable.AddTypeMapping(principalBaseTableMapping0, false); + tableMappings0.Add(principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(deetsColumn, ownedType.FindProperty("Details")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_NumberColumn, ownedType.FindProperty("Number")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_RefTypeArrayColumn, ownedType.FindProperty("RefTypeArray")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_RefTypeEnumerableColumn, ownedType.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_RefTypeIListColumn, ownedType.FindProperty("RefTypeIList")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_RefTypeListColumn, ownedType.FindProperty("RefTypeList")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_ValueTypeArrayColumn, ownedType.FindProperty("ValueTypeArray")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_ValueTypeEnumerableColumn, ownedType.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_ValueTypeIListColumn, ownedType.FindProperty("ValueTypeIList")!, principalBaseTableMapping0); + RelationalModel.CreateColumnMapping(owned_ValueTypeListColumn, ownedType.FindProperty("ValueTypeList")!, principalBaseTableMapping0); + + var principalBase0 = ownedType.FindComplexProperty("Principal")!.ComplexType; + + var defaultTableMappings1 = new List>(); + principalBase0.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings1); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1 = new TableMappingBase(principalBase0, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1, false); + defaultTableMappings1.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_AlternateIdColumnBase, principalBase0.FindProperty("AlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_Enum1ColumnBase, principalBase0.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_Enum2ColumnBase, principalBase0.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_FlagsEnum1ColumnBase, principalBase0.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_FlagsEnum2ColumnBase, principalBase0.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_IdColumnBase, principalBase0.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_RefTypeArrayColumnBase, principalBase0.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_RefTypeEnumerableColumnBase, principalBase0.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_RefTypeIListColumnBase, principalBase0.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_RefTypeListColumnBase, principalBase0.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_ValueTypeArrayColumnBase, principalBase0.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_ValueTypeEnumerableColumnBase, principalBase0.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_ValueTypeIListColumnBase, principalBase0.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + RelationalModel.CreateColumnMapping((ColumnBase)owned_Principal_ValueTypeListColumnBase, principalBase0.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase1); + + var tableMappings1 = new List(); + principalBase0.SetRuntimeAnnotation("Relational:TableMappings", tableMappings1); + var principalBaseTableMapping1 = new TableMapping(principalBase0, principalBaseTable, true); + principalBaseTable.AddTypeMapping(principalBaseTableMapping1, true); + tableMappings1.Add(principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_AlternateIdColumn, principalBase0.FindProperty("AlternateId")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_Enum1Column, principalBase0.FindProperty("Enum1")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_Enum2Column, principalBase0.FindProperty("Enum2")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_FlagsEnum1Column, principalBase0.FindProperty("FlagsEnum1")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_FlagsEnum2Column, principalBase0.FindProperty("FlagsEnum2")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_IdColumn, principalBase0.FindProperty("Id")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_RefTypeArrayColumn, principalBase0.FindProperty("RefTypeArray")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_RefTypeEnumerableColumn, principalBase0.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_RefTypeIListColumn, principalBase0.FindProperty("RefTypeIList")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_RefTypeListColumn, principalBase0.FindProperty("RefTypeList")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_ValueTypeArrayColumn, principalBase0.FindProperty("ValueTypeArray")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_ValueTypeEnumerableColumn, principalBase0.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_ValueTypeIListColumn, principalBase0.FindProperty("ValueTypeIList")!, principalBaseTableMapping1); + RelationalModel.CreateColumnMapping(owned_Principal_ValueTypeListColumn, principalBase0.FindProperty("ValueTypeList")!, principalBaseTableMapping1); + + var principalDerived = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>")!; + + var defaultTableMappings2 = new List>(); + principalDerived.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings2); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2 = new TableMappingBase(principalDerived, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2, false); + defaultTableMappings2.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, principalDerived.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)discriminatorColumnBase, principalDerived.FindProperty("Discriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)enum1ColumnBase, principalDerived.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)enum2ColumnBase, principalDerived.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum1ColumnBase, principalDerived.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum2ColumnBase, principalDerived.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)principalBaseIdColumnBase, principalDerived.FindProperty("PrincipalBaseId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase, principalDerived.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase, principalDerived.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase, principalDerived.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase, principalDerived.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase, principalDerived.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase, principalDerived.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase, principalDerived.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase, principalDerived.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase2); + + var tableMappings2 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:TableMappings", tableMappings2); + var principalBaseTableMapping2 = new TableMapping(principalDerived, principalBaseTable, null) + { + IsSharedTablePrincipal = false, + }; + principalBaseTable.AddTypeMapping(principalBaseTableMapping2, false); + tableMappings2.Add(principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(idColumn, principalDerived.FindProperty("Id")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(discriminatorColumn, principalDerived.FindProperty("Discriminator")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(enum1Column, principalDerived.FindProperty("Enum1")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(enum2Column, principalDerived.FindProperty("Enum2")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(flagsEnum1Column, principalDerived.FindProperty("FlagsEnum1")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(flagsEnum2Column, principalDerived.FindProperty("FlagsEnum2")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(principalBaseIdColumn, principalDerived.FindProperty("PrincipalBaseId")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(refTypeArrayColumn, principalDerived.FindProperty("RefTypeArray")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(refTypeEnumerableColumn, principalDerived.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(refTypeIListColumn, principalDerived.FindProperty("RefTypeIList")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(refTypeListColumn, principalDerived.FindProperty("RefTypeList")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(valueTypeArrayColumn, principalDerived.FindProperty("ValueTypeArray")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(valueTypeEnumerableColumn, principalDerived.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(valueTypeIListColumn, principalDerived.FindProperty("ValueTypeIList")!, principalBaseTableMapping2); + RelationalModel.CreateColumnMapping(valueTypeListColumn, principalDerived.FindProperty("ValueTypeList")!, principalBaseTableMapping2); + var pK_PrincipalBase = new UniqueConstraint("PK_PrincipalBase", principalBaseTable, new[] { idColumn }); + principalBaseTable.PrimaryKey = pK_PrincipalBase; + pK_PrincipalBase.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_PrincipalBase)); + var pK_PrincipalBaseKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id" }); + pK_PrincipalBase.MappedKeys.Add(pK_PrincipalBaseKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_PrincipalBaseKey).Add(pK_PrincipalBase); + principalBaseTable.UniqueConstraints.Add("PK_PrincipalBase", pK_PrincipalBase); + var iX_PrincipalBase_PrincipalBaseId = new TableIndex( + "IX_PrincipalBase_PrincipalBaseId", principalBaseTable, new[] { principalBaseIdColumn }, false); + iX_PrincipalBase_PrincipalBaseId.SetRowIndexValueFactory(new SimpleRowIndexValueFactory(iX_PrincipalBase_PrincipalBaseId)); + var iX_PrincipalBase_PrincipalBaseIdIx = RelationalModel.GetIndex(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "PrincipalBaseId" }); + iX_PrincipalBase_PrincipalBaseId.MappedIndexes.Add(iX_PrincipalBase_PrincipalBaseIdIx); + RelationalModel.GetOrCreateTableIndexes(iX_PrincipalBase_PrincipalBaseIdIx).Add(iX_PrincipalBase_PrincipalBaseId); + principalBaseTable.Indexes.Add("IX_PrincipalBase_PrincipalBaseId", iX_PrincipalBase_PrincipalBaseId); + + var sqlQueryMappings0 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:SqlQueryMappings", sqlQueryMappings0); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0 = new SqlQueryMapping(principalDerived, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQuery.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0, false); + sqlQueryMappings0.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0.IsDefaultSqlQueryMapping = true; + RelationalModel.CreateSqlQueryColumnMapping(idSqlQueryColumn, principalDerived.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(discriminatorSqlQueryColumn, principalDerived.FindProperty("Discriminator")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(enum1SqlQueryColumn, principalDerived.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(enum2SqlQueryColumn, principalDerived.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(flagsEnum1SqlQueryColumn, principalDerived.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(flagsEnum2SqlQueryColumn, principalDerived.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(principalBaseIdSqlQueryColumn, principalDerived.FindProperty("PrincipalBaseId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(refTypeArraySqlQueryColumn, principalDerived.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(refTypeEnumerableSqlQueryColumn, principalDerived.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(refTypeIListSqlQueryColumn, principalDerived.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(refTypeListSqlQueryColumn, principalDerived.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(valueTypeArraySqlQueryColumn, principalDerived.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(valueTypeEnumerableSqlQueryColumn, principalDerived.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(valueTypeIListSqlQueryColumn, principalDerived.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + RelationalModel.CreateSqlQueryColumnMapping(valueTypeListSqlQueryColumn, principalDerived.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappedSqlQuerySqlQueryMapping0); + + var deleteSprocMappings0 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:DeleteStoredProcedureMappings", deleteSprocMappings0); + var principalBase_DeleteSprocMapping0 = new StoredProcedureMapping(principalDerived, principalBase_DeleteStoreSproc, principalBase_DeleteDSproc, principalBaseTableMapping2, null); + principalBase_DeleteStoreSproc.AddTypeMapping(principalBase_DeleteSprocMapping0, false); + deleteSprocMappings0.Add(principalBase_DeleteSprocMapping0); + principalBaseTableMapping2.DeleteStoredProcedureMapping = principalBase_DeleteSprocMapping0; + RelationalModel.CreateStoredProcedureParameterMapping(id_OriginalParameter, principalBase_DeleteDSproc.FindParameter("Id_Original")!, principalDerived.FindProperty("Id")!, principalBase_DeleteSprocMapping0); + + var insertSprocMappings0 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:InsertStoredProcedureMappings", insertSprocMappings0); + var principalBase_InsertSprocMapping0 = new StoredProcedureMapping(principalDerived, principalBase_InsertStoreSproc, principalBase_InsertISproc, principalBaseTableMapping2, null); + principalBase_InsertStoreSproc.AddTypeMapping(principalBase_InsertSprocMapping0, false); + insertSprocMappings0.Add(principalBase_InsertSprocMapping0); + principalBaseTableMapping2.InsertStoredProcedureMapping = principalBase_InsertSprocMapping0; + RelationalModel.CreateStoredProcedureParameterMapping(idParameter, principalBase_InsertISproc.FindParameter("Id")!, principalDerived.FindProperty("Id")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(discriminatorParameter, principalBase_InsertISproc.FindParameter("Discriminator")!, principalDerived.FindProperty("Discriminator")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(enum1Parameter, principalBase_InsertISproc.FindParameter("Enum1")!, principalDerived.FindProperty("Enum1")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(enum2Parameter, principalBase_InsertISproc.FindParameter("Enum2")!, principalDerived.FindProperty("Enum2")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum1Parameter, principalBase_InsertISproc.FindParameter("FlagsEnum1")!, principalDerived.FindProperty("FlagsEnum1")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum2Parameter, principalBase_InsertISproc.FindParameter("FlagsEnum2")!, principalDerived.FindProperty("FlagsEnum2")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(principalBaseIdParameter, principalBase_InsertISproc.FindParameter("PrincipalBaseId")!, principalDerived.FindProperty("PrincipalBaseId")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeArrayParameter, principalBase_InsertISproc.FindParameter("RefTypeArray")!, principalDerived.FindProperty("RefTypeArray")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeEnumerableParameter, principalBase_InsertISproc.FindParameter("RefTypeEnumerable")!, principalDerived.FindProperty("RefTypeEnumerable")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeIListParameter, principalBase_InsertISproc.FindParameter("RefTypeIList")!, principalDerived.FindProperty("RefTypeIList")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeListParameter, principalBase_InsertISproc.FindParameter("RefTypeList")!, principalDerived.FindProperty("RefTypeList")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeArrayParameter, principalBase_InsertISproc.FindParameter("ValueTypeArray")!, principalDerived.FindProperty("ValueTypeArray")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeEnumerableParameter, principalBase_InsertISproc.FindParameter("ValueTypeEnumerable")!, principalDerived.FindProperty("ValueTypeEnumerable")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeIListParameter, principalBase_InsertISproc.FindParameter("ValueTypeIList")!, principalDerived.FindProperty("ValueTypeIList")!, principalBase_InsertSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeListParameter, principalBase_InsertISproc.FindParameter("ValueTypeList")!, principalDerived.FindProperty("ValueTypeList")!, principalBase_InsertSprocMapping0); + + var updateSprocMappings0 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:UpdateStoredProcedureMappings", updateSprocMappings0); + var principalBase_UpdateSprocMapping0 = new StoredProcedureMapping(principalDerived, principalBase_UpdateStoreSproc, principalBase_UpdateUSproc, principalBaseTableMapping2, null); + principalBase_UpdateStoreSproc.AddTypeMapping(principalBase_UpdateSprocMapping0, false); + updateSprocMappings0.Add(principalBase_UpdateSprocMapping0); + principalBaseTableMapping2.UpdateStoredProcedureMapping = principalBase_UpdateSprocMapping0; + RelationalModel.CreateStoredProcedureParameterMapping(id_OriginalParameter0, principalBase_UpdateUSproc.FindParameter("Id_Original")!, principalDerived.FindProperty("Id")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(enum1Parameter0, principalBase_UpdateUSproc.FindParameter("Enum1")!, principalDerived.FindProperty("Enum1")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(enum2Parameter0, principalBase_UpdateUSproc.FindParameter("Enum2")!, principalDerived.FindProperty("Enum2")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum1Parameter0, principalBase_UpdateUSproc.FindParameter("FlagsEnum1")!, principalDerived.FindProperty("FlagsEnum1")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum2Parameter0, principalBase_UpdateUSproc.FindParameter("FlagsEnum2")!, principalDerived.FindProperty("FlagsEnum2")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(principalBaseIdParameter0, principalBase_UpdateUSproc.FindParameter("PrincipalBaseId")!, principalDerived.FindProperty("PrincipalBaseId")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeArrayParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeArray")!, principalDerived.FindProperty("RefTypeArray")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeEnumerableParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeEnumerable")!, principalDerived.FindProperty("RefTypeEnumerable")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeIListParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeIList")!, principalDerived.FindProperty("RefTypeIList")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeListParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeList")!, principalDerived.FindProperty("RefTypeList")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeArrayParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeArray")!, principalDerived.FindProperty("ValueTypeArray")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeEnumerableParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeEnumerable")!, principalDerived.FindProperty("ValueTypeEnumerable")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeIListParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeIList")!, principalDerived.FindProperty("ValueTypeIList")!, principalBase_UpdateSprocMapping0); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeListParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeList")!, principalDerived.FindProperty("ValueTypeList")!, principalBase_UpdateSprocMapping0); + + var ownedCollection = principalDerived.FindComplexProperty("ManyOwned")!.ComplexType; + + var defaultTableMappings3 = new List>(); + ownedCollection.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings3); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3 = new TableMappingBase(ownedCollection, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3, null); + defaultTableMappings3.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_DetailsColumnBase, ownedCollection.FindProperty("Details")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_NumberColumnBase, ownedCollection.FindProperty("Number")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_RefTypeArrayColumnBase, ownedCollection.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_RefTypeEnumerableColumnBase, ownedCollection.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_RefTypeIListColumnBase, ownedCollection.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_RefTypeListColumnBase, ownedCollection.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_ValueTypeArrayColumnBase, ownedCollection.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_ValueTypeEnumerableColumnBase, ownedCollection.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_ValueTypeIListColumnBase, ownedCollection.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_ValueTypeListColumnBase, ownedCollection.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase3); + + var tableMappings3 = new List(); + ownedCollection.SetRuntimeAnnotation("Relational:TableMappings", tableMappings3); + var principalBaseTableMapping3 = new TableMapping(ownedCollection, principalBaseTable, true); + principalBaseTable.AddTypeMapping(principalBaseTableMapping3, null); + tableMappings3.Add(principalBaseTableMapping3); + + var principalBase1 = ownedCollection.FindComplexProperty("Principal")!.ComplexType; + + var defaultTableMappings4 = new List>(); + principalBase1.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings4); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4 = new TableMappingBase(principalBase1, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4, null); + defaultTableMappings4.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_AlternateIdColumnBase, principalBase1.FindProperty("AlternateId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_Enum1ColumnBase, principalBase1.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_Enum2ColumnBase, principalBase1.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_FlagsEnum1ColumnBase, principalBase1.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_FlagsEnum2ColumnBase, principalBase1.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_IdColumnBase, principalBase1.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_RefTypeArrayColumnBase, principalBase1.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_RefTypeEnumerableColumnBase, principalBase1.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_RefTypeIListColumnBase, principalBase1.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_RefTypeListColumnBase, principalBase1.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_ValueTypeArrayColumnBase, principalBase1.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_ValueTypeEnumerableColumnBase, principalBase1.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_ValueTypeIListColumnBase, principalBase1.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + RelationalModel.CreateColumnMapping((ColumnBase)manyOwned_Principal_ValueTypeListColumnBase, principalBase1.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase4); + + var tableMappings4 = new List(); + principalBase1.SetRuntimeAnnotation("Relational:TableMappings", tableMappings4); + var principalBaseTableMapping4 = new TableMapping(principalBase1, principalBaseTable, true); + principalBaseTable.AddTypeMapping(principalBaseTableMapping4, null); + tableMappings4.Add(principalBaseTableMapping4); + var fK_PrincipalBase_PrincipalBase_PrincipalBaseId = new ForeignKeyConstraint( + "FK_PrincipalBase_PrincipalBase_PrincipalBaseId", principalBaseTable, principalBaseTable, + new[] { principalBaseIdColumn }, + principalBaseTable.FindUniqueConstraint("PK_PrincipalBase")!, ReferentialAction.NoAction); + fK_PrincipalBase_PrincipalBase_PrincipalBaseId.SetRowForeignKeyValueFactory(RowForeignKeyValueFactoryFactory.CreateSimpleNonNullableFactory(fK_PrincipalBase_PrincipalBase_PrincipalBaseId)); + var fK_PrincipalBase_PrincipalBase_PrincipalBaseIdFk = RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "PrincipalBaseId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id" }); + fK_PrincipalBase_PrincipalBase_PrincipalBaseId.MappedForeignKeys.Add(fK_PrincipalBase_PrincipalBase_PrincipalBaseIdFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_PrincipalBase_PrincipalBase_PrincipalBaseIdFk).Add(fK_PrincipalBase_PrincipalBase_PrincipalBaseId); + principalBaseTable.ForeignKeyConstraints.Add(fK_PrincipalBase_PrincipalBase_PrincipalBaseId); + principalBaseTable.ReferencingForeignKeyConstraints.Add(fK_PrincipalBase_PrincipalBase_PrincipalBaseId); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/OwnedTypeUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/OwnedTypeUnsafeAccessors.cs new file mode 100644 index 00000000..9bbed4ed --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/OwnedTypeUnsafeAccessors.cs @@ -0,0 +1,48 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class OwnedTypeUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_details")] + public static extern ref string _details(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref int Number(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeArray")] + public static extern ref IPAddress[] _refTypeArray(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeEnumerable")] + public static extern ref IEnumerable _refTypeEnumerable(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeIList")] + public static extern ref IList _refTypeIList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_refTypeList")] + public static extern ref List _refTypeList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_valueTypeArray")] + public static extern ref DateTime[] _valueTypeArray(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_valueTypeEnumerable")] + public static extern ref IEnumerable _valueTypeEnumerable(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList ValueTypeIList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_valueTypeList")] + public static extern ref List _valueTypeList(CompiledModelTestBase.OwnedType @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.PrincipalBase Principal(CompiledModelTestBase.OwnedType @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseEntityType.cs new file mode 100644 index 00000000..662a69b8 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseEntityType.cs @@ -0,0 +1,3226 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.ValueGeneration; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalBaseEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + typeof(CompiledModelTestBase.PrincipalBase), + baseEntityType, + discriminatorProperty: "Discriminator", + discriminatorValue: "PrincipalBase", + derivedTypesCount: 1, + propertyCount: 15, + complexPropertyCount: 1, + navigationCount: 1, + foreignKeyCount: 1, + unnamedIndexCount: 1, + keyCount: 1); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw); + id.SetGetter( + long? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Id(instance).HasValue)); + id.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + long? (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && !(PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))).HasValue) ? entry.ReadTemporaryValue(0) : PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + long? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + long? (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + long? (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: 0); + id.TypeMapping = LibRedLongTypeMapping.Default; + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + id.SetComparer(new NullableValueComparer(id.TypeMapping.Comparer)); + id.SetKeyComparer(new NullableValueComparer(id.TypeMapping.KeyComparer)); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var discriminator = runtimeEntityType.AddProperty( + "Discriminator", + typeof(string), + afterSaveBehavior: PropertySaveBehavior.Throw, + maxLength: 55, + valueGeneratorFactory: new DiscriminatorValueGeneratorFactory().Create); + discriminator.SetAccessors( + string (IInternalEntry entry) => entry.ReadShadowValue(0), + string (IInternalEntry entry) => entry.ReadShadowValue(0), + string (IInternalEntry entry) => entry.ReadOriginalValue(discriminator, 1), + string (IInternalEntry entry) => entry.GetCurrentValue(discriminator)); + discriminator.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: 0, + relationshipIndex: -1, + storeGenerationIndex: -1); + discriminator.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(55)", + size: 55)); + + var enum1 = runtimeEntityType.AddProperty( + "Enum1", + typeof(CompiledModelTestBase.AnEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum1.SetGetter( + CompiledModelTestBase.AnEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.Enum1(instance))), ((object)((CompiledModelTestBase.AnEnum)0L)))); + enum1.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetAccessors( + CompiledModelTestBase.AnEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.ReadOriginalValue(enum1, 2), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.GetCurrentValue(enum1)); + enum1.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum1.SetSentinelFromProviderValue(0); + + var enum2 = runtimeEntityType.AddProperty( + "Enum2", + typeof(CompiledModelTestBase.AnEnum?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum2", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + enum2.SetGetter( + CompiledModelTestBase.AnEnum? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Enum2(instance).HasValue)); + enum2.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetAccessors( + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.ReadOriginalValue(enum2, 3), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.GetCurrentValue(enum2)); + enum2.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum2.SetComparer(new NullableValueComparer(enum2.TypeMapping.Comparer)); + enum2.SetKeyComparer(new NullableValueComparer(enum2.TypeMapping.KeyComparer)); + + var flagsEnum1 = runtimeEntityType.AddProperty( + "FlagsEnum1", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum1.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum1(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum1.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum1, 4), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum1)); + flagsEnum1.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum1.SetSentinelFromProviderValue(0); + + var flagsEnum2 = runtimeEntityType.AddProperty( + "FlagsEnum2", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum2", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum2.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum2(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum2.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum2(instance) = value; + return instance; + }); + flagsEnum2.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum2(instance) = value; + return instance; + }); + flagsEnum2.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum2, 5), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum2)); + flagsEnum2.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum2.SetSentinelFromProviderValue(0); + + var principalBaseId = runtimeEntityType.AddProperty( + "PrincipalBaseId", + typeof(long?), + nullable: true); + principalBaseId.SetAccessors( + long? (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(6) ? entry.ReadStoreGeneratedValue(1) : (entry.FlaggedAsTemporary(6) && !(entry.ReadShadowValue(1).HasValue) ? entry.ReadTemporaryValue(1) : entry.ReadShadowValue(1))), + long? (IInternalEntry entry) => entry.ReadShadowValue(1), + long? (IInternalEntry entry) => entry.ReadOriginalValue(principalBaseId, 6), + long? (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalBaseId, 1)); + principalBaseId.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: 1, + relationshipIndex: 1, + storeGenerationIndex: 1); + principalBaseId.TypeMapping = LibRedLongTypeMapping.Default; + principalBaseId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalBaseId)); + principalBaseId.SetComparer(new NullableValueComparer(principalBaseId.TypeMapping.Comparer)); + principalBaseId.SetKeyComparer(new NullableValueComparer(principalBaseId.TypeMapping.KeyComparer)); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance) == null); + refTypeArray.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 7), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 8), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance) == null); + refTypeIList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 9), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance) == null); + refTypeList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 10), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) == null); + valueTypeArray.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + DateTime[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 11), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 12), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 12, + originalValueIndex: 12, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 13), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 13, + originalValueIndex: 13, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance) == null); + valueTypeList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 14), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 14, + originalValueIndex: 14, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + OwnedComplexProperty.Create(runtimeEntityType); + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + var index = runtimeEntityType.AddIndex( + new[] { principalBaseId }); + + return runtimeEntityType; + } + + public static class OwnedComplexProperty + { + public static RuntimeComplexProperty Create(RuntimeEntityType declaringType) + { + var complexProperty = declaringType.AddComplexProperty("Owned", + typeof(CompiledModelTestBase.OwnedType), + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType", + typeof(CompiledModelTestBase.OwnedType), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Owned", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("_ownedField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + changeTrackingStrategy: ChangeTrackingStrategy.ChangingAndChangedNotificationsWithOriginalValues, + propertyCount: 10, + complexPropertyCount: 1); + + var complexType = complexProperty.ComplexType; + complexProperty.SetGetter( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors._ownedField(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors._ownedField(instance) == null); + complexProperty.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.OwnedType value) => + { + PrincipalBaseUnsafeAccessors._ownedField(instance) = value; + return instance; + }); + complexProperty.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.OwnedType value) => + { + PrincipalBaseUnsafeAccessors._ownedField(instance) = value; + return instance; + }); + complexProperty.SetAccessors( + CompiledModelTestBase.OwnedType (IInternalEntry entry) => PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.OwnedType (IInternalEntry entry) => PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + null, + CompiledModelTestBase.OwnedType (IInternalEntry entry) => entry.GetCurrentValue(complexProperty)); + complexProperty.SetPropertyIndexes( + index: 0, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + var details = complexType.AddProperty( + "Details", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_details", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.FieldDuringConstruction, + nullable: true, + concurrencyToken: true, + valueGenerated: ValueGenerated.OnAddOrUpdate, + beforeSaveBehavior: PropertySaveBehavior.Ignore, + afterSaveBehavior: PropertySaveBehavior.Ignore, + maxLength: 64, + unicode: false, + precision: 3, + scale: 2, + sentinel: ""); + details.SetGetter( + string (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(string) : PrincipalBaseUnsafeAccessors._ownedField(entity).Details), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => !((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(string) : PrincipalBaseUnsafeAccessors._ownedField(entity).Details) == null) && (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(string) : PrincipalBaseUnsafeAccessors._ownedField(entity).Details) == "", + string (CompiledModelTestBase.OwnedType instance) => instance.Details, + bool (CompiledModelTestBase.OwnedType instance) => !(instance.Details == null) && instance.Details == ""); + details.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, string value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + level1.Details = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + instance.Details = value; + return instance; + }); + details.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, string value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + level1.Details = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetAccessors( + string (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(15) ? entry.ReadStoreGeneratedValue(2) : (entry.FlaggedAsTemporary(15) && !((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(string) : PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))).Details) == null) && (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(string) : PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))).Details) == "" ? entry.ReadTemporaryValue(2) : (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(string) : PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))).Details))), + string (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(string) : PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))).Details), + string (IInternalEntry entry) => entry.ReadOriginalValue(details, 15), + string (IInternalEntry entry) => entry.GetCurrentValue(details)); + details.SetPropertyIndexes( + index: 15, + originalValueIndex: 15, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: 2); + details.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(64)", + size: 64, + unicode: false, + precision: 3, + scale: 2)); + details.AddAnnotation("foo", "bar"); + details.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + details.AddAnnotation("Relational:ColumnName", "Deets"); + details.AddAnnotation("Relational:ColumnType", "varchar"); + + var number = complexType.AddProperty( + "Number", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Number", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0); + number.SetGetter( + int (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(int) : OwnedTypeUnsafeAccessors.Number(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(int) : OwnedTypeUnsafeAccessors.Number(PrincipalBaseUnsafeAccessors._ownedField(entity))) == 0, + int (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance) == 0); + number.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, int value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors.Number(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, int value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors.Number(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetAccessors( + int (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(int) : OwnedTypeUnsafeAccessors.Number(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + int (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(int) : OwnedTypeUnsafeAccessors.Number(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + int (IInternalEntry entry) => entry.ReadOriginalValue(number, 16), + int (IInternalEntry entry) => entry.GetCurrentValue(number)); + number.SetPropertyIndexes( + index: 16, + originalValueIndex: 16, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + number.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + number.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var refTypeArray = complexType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IPAddress[]) : OwnedTypeUnsafeAccessors._refTypeArray(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IPAddress[]) : OwnedTypeUnsafeAccessors._refTypeArray(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null, + IPAddress[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance) == null); + refTypeArray.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IPAddress[] value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._refTypeArray(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IPAddress[] value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._refTypeArray(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IPAddress[]) : OwnedTypeUnsafeAccessors._refTypeArray(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IPAddress[] (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IPAddress[]) : OwnedTypeUnsafeAccessors._refTypeArray(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 17), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 17, + originalValueIndex: 17, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + refTypeArray.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var refTypeEnumerable = complexType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._refTypeEnumerable(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._refTypeEnumerable(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null, + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._refTypeEnumerable(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._refTypeEnumerable(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._refTypeEnumerable(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IEnumerable (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._refTypeEnumerable(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 18), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 18, + originalValueIndex: 18, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + refTypeEnumerable.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var refTypeIList = complexType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeIList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IList) : OwnedTypeUnsafeAccessors._refTypeIList(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IList) : OwnedTypeUnsafeAccessors._refTypeIList(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null, + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance) == null); + refTypeIList.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IList value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._refTypeIList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IList value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._refTypeIList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IList) : OwnedTypeUnsafeAccessors._refTypeIList(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IList (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IList) : OwnedTypeUnsafeAccessors._refTypeIList(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 19), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 19, + originalValueIndex: 19, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + refTypeIList.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var refTypeList = complexType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(List) : OwnedTypeUnsafeAccessors._refTypeList(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(List) : OwnedTypeUnsafeAccessors._refTypeList(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null, + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance) == null); + refTypeList.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, List value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._refTypeList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, List value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._refTypeList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(List) : OwnedTypeUnsafeAccessors._refTypeList(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + List (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(List) : OwnedTypeUnsafeAccessors._refTypeList(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 20), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 20, + originalValueIndex: 20, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + refTypeList.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var valueTypeArray = complexType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(DateTime[]) : OwnedTypeUnsafeAccessors._valueTypeArray(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(DateTime[]) : OwnedTypeUnsafeAccessors._valueTypeArray(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null, + DateTime[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance) == null); + valueTypeArray.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, DateTime[] value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._valueTypeArray(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, DateTime[] value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._valueTypeArray(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(DateTime[]) : OwnedTypeUnsafeAccessors._valueTypeArray(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + DateTime[] (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(DateTime[]) : OwnedTypeUnsafeAccessors._valueTypeArray(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 21), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 21, + originalValueIndex: 21, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + valueTypeArray.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var valueTypeEnumerable = complexType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._valueTypeEnumerable(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._valueTypeEnumerable(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null, + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._valueTypeEnumerable(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._valueTypeEnumerable(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._valueTypeEnumerable(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IEnumerable (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._valueTypeEnumerable(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 22), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 22, + originalValueIndex: 22, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + valueTypeEnumerable.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var valueTypeIList = complexType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IList) : OwnedTypeUnsafeAccessors.ValueTypeIList(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(IList) : OwnedTypeUnsafeAccessors.ValueTypeIList(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null, + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IList value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors.ValueTypeIList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IList value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors.ValueTypeIList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IList) : OwnedTypeUnsafeAccessors.ValueTypeIList(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IList (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(IList) : OwnedTypeUnsafeAccessors.ValueTypeIList(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 23), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 23, + originalValueIndex: 23, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + valueTypeIList.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var valueTypeList = complexType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(List) : OwnedTypeUnsafeAccessors._valueTypeList(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(List) : OwnedTypeUnsafeAccessors._valueTypeList(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null, + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance) == null); + valueTypeList.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, List value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._valueTypeList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, List value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors._valueTypeList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(List) : OwnedTypeUnsafeAccessors._valueTypeList(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + List (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(List) : OwnedTypeUnsafeAccessors._valueTypeList(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 24), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 24, + originalValueIndex: 24, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + valueTypeList.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + PrincipalComplexProperty.Create(complexType); + complexType.AddAnnotation("go", "brr"); + complexType.AddAnnotation("Relational:FunctionName", "PrincipalBaseTvf"); + complexType.AddAnnotation("Relational:Schema", null); + complexType.AddAnnotation("Relational:SqlQuery", "select * from PrincipalBase"); + complexType.AddAnnotation("Relational:TableName", "PrincipalBase"); + complexType.AddAnnotation("Relational:ViewName", "PrincipalBaseView"); + complexType.AddAnnotation("Relational:ViewSchema", null); + complexProperty.AddAnnotation("goo", "ber"); + return complexProperty; + } + + public static class PrincipalComplexProperty + { + public static RuntimeComplexProperty Create(RuntimeComplexType declaringType) + { + var complexProperty = declaringType.AddComplexProperty("Principal", + typeof(CompiledModelTestBase.PrincipalBase), + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType.Principal#PrincipalBase", + typeof(CompiledModelTestBase.PrincipalBase), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Principal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true, + propertyCount: 14); + + var complexType = complexProperty.ComplexType; + complexProperty.SetGetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Principal(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Principal(instance) == null); + complexProperty.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.PrincipalBase value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors.Principal(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, CompiledModelTestBase.PrincipalBase value) => + { + OwnedTypeUnsafeAccessors.Principal(instance) = value; + return instance; + }); + complexProperty.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.PrincipalBase value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + OwnedTypeUnsafeAccessors.Principal(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, CompiledModelTestBase.PrincipalBase value) => + { + OwnedTypeUnsafeAccessors.Principal(instance) = value; + return instance; + }); + complexProperty.SetAccessors( + CompiledModelTestBase.PrincipalBase (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + CompiledModelTestBase.PrincipalBase (IInternalEntry entry) => (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + null, + CompiledModelTestBase.PrincipalBase (IInternalEntry entry) => entry.GetCurrentValue(complexProperty)); + complexProperty.SetPropertyIndexes( + index: 1, + originalValueIndex: 25, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + var alternateId = complexType.AddProperty( + "AlternateId", + typeof(Guid), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("AlternateId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + alternateId.SetGetter( + Guid (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(Guid) : (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))).AlternateId), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(Guid) : (PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))).AlternateId) == new Guid("00000000-0000-0000-0000-000000000000"), + Guid (CompiledModelTestBase.PrincipalBase instance) => instance.AlternateId, + bool (CompiledModelTestBase.PrincipalBase instance) => instance.AlternateId == new Guid("00000000-0000-0000-0000-000000000000")); + alternateId.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, Guid value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + level2.AlternateId = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, Guid value) => + { + instance.AlternateId = value; + return instance; + }); + alternateId.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, Guid value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + level2.AlternateId = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, Guid value) => + { + instance.AlternateId = value; + return instance; + }); + alternateId.SetAccessors( + Guid (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(Guid) : (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))).AlternateId), + Guid (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(Guid) : (PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))).AlternateId), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(alternateId, 26), + Guid (IInternalEntry entry) => entry.GetCurrentValue(alternateId)); + alternateId.SetPropertyIndexes( + index: 25, + originalValueIndex: 26, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + alternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + alternateId.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var enum1 = complexType.AddProperty( + "Enum1", + typeof(CompiledModelTestBase.AnEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum1.SetGetter( + CompiledModelTestBase.AnEnum (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(CompiledModelTestBase.AnEnum) : PrincipalBaseUnsafeAccessors.Enum1((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => object.Equals(((object)(((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(CompiledModelTestBase.AnEnum) : PrincipalBaseUnsafeAccessors.Enum1((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))))), ((object)((CompiledModelTestBase.AnEnum)0L))), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.Enum1(instance))), ((object)((CompiledModelTestBase.AnEnum)0L)))); + enum1.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.AnEnum value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Enum1(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.AnEnum value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Enum1(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetAccessors( + CompiledModelTestBase.AnEnum (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(CompiledModelTestBase.AnEnum) : PrincipalBaseUnsafeAccessors.Enum1((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(CompiledModelTestBase.AnEnum) : PrincipalBaseUnsafeAccessors.Enum1((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.ReadOriginalValue(enum1, 27), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.GetCurrentValue(enum1)); + enum1.SetPropertyIndexes( + index: 26, + originalValueIndex: 27, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum1.SetSentinelFromProviderValue(0); + enum1.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var enum2 = complexType.AddProperty( + "Enum2", + typeof(CompiledModelTestBase.AnEnum?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum2", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + enum2.SetGetter( + CompiledModelTestBase.AnEnum? (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(CompiledModelTestBase.AnEnum? ) : PrincipalBaseUnsafeAccessors.Enum2((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => !(((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(CompiledModelTestBase.AnEnum? ) : PrincipalBaseUnsafeAccessors.Enum2((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))).HasValue), + CompiledModelTestBase.AnEnum? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Enum2(instance).HasValue)); + enum2.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.AnEnum? value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Enum2(level2) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.AnEnum? value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Enum2(level2) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetAccessors( + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(CompiledModelTestBase.AnEnum? ) : PrincipalBaseUnsafeAccessors.Enum2((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(CompiledModelTestBase.AnEnum? ) : PrincipalBaseUnsafeAccessors.Enum2((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.ReadOriginalValue(enum2, 28), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.GetCurrentValue(enum2)); + enum2.SetPropertyIndexes( + index: 27, + originalValueIndex: 28, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum2.SetComparer(new NullableValueComparer(enum2.TypeMapping.Comparer)); + enum2.SetKeyComparer(new NullableValueComparer(enum2.TypeMapping.KeyComparer)); + enum2.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var flagsEnum1 = complexType.AddProperty( + "FlagsEnum1", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum1.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum1((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => object.Equals(((object)(((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum1((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))))), ((object)((CompiledModelTestBase.AFlagsEnum)0L))), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum1(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum1.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.AFlagsEnum value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.FlagsEnum1(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.AFlagsEnum value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.FlagsEnum1(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum1((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum1((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum1, 29), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum1)); + flagsEnum1.SetPropertyIndexes( + index: 28, + originalValueIndex: 29, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum1.SetSentinelFromProviderValue(0); + flagsEnum1.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var flagsEnum2 = complexType.AddProperty( + "FlagsEnum2", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum2", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum2.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum2((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => object.Equals(((object)(((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum2((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))))), ((object)((CompiledModelTestBase.AFlagsEnum)0L))), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum2(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum2.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.AFlagsEnum value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.FlagsEnum2(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum2(instance) = value; + return instance; + }); + flagsEnum2.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, CompiledModelTestBase.AFlagsEnum value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.FlagsEnum2(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum2(instance) = value; + return instance; + }); + flagsEnum2.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum2((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum2((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum2, 30), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum2)); + flagsEnum2.SetPropertyIndexes( + index: 29, + originalValueIndex: 30, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum2.SetSentinelFromProviderValue(0); + flagsEnum2.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var id = complexType.AddProperty( + "Id", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + id.SetGetter( + long? (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(long? ) : PrincipalBaseUnsafeAccessors.Id((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => !(((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(long? ) : PrincipalBaseUnsafeAccessors.Id((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))).HasValue), + long? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Id(instance).HasValue)); + id.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, long? value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Id(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, long? value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Id(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + long? (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(long? ) : PrincipalBaseUnsafeAccessors.Id((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + long? (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(long? ) : PrincipalBaseUnsafeAccessors.Id((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + long? (IInternalEntry entry) => entry.ReadOriginalValue(id, 31), + long? (IInternalEntry entry) => entry.GetCurrentValue(id)); + id.SetPropertyIndexes( + index: 30, + originalValueIndex: 31, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + id.TypeMapping = LibRedLongTypeMapping.Default; + id.SetComparer(new NullableValueComparer(id.TypeMapping.Comparer)); + id.SetKeyComparer(new NullableValueComparer(id.TypeMapping.KeyComparer)); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var refTypeArray = complexType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IPAddress[]) : PrincipalBaseUnsafeAccessors.RefTypeArray((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IPAddress[]) : PrincipalBaseUnsafeAccessors.RefTypeArray((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))) == null, + IPAddress[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance) == null); + refTypeArray.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IPAddress[] value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeArray(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IPAddress[] value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeArray(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IPAddress[]) : PrincipalBaseUnsafeAccessors.RefTypeArray((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IPAddress[] (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IPAddress[]) : PrincipalBaseUnsafeAccessors.RefTypeArray((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 32), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 31, + originalValueIndex: 32, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + refTypeArray.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var refTypeEnumerable = complexType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.RefTypeEnumerable((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.RefTypeEnumerable((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))) == null, + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.RefTypeEnumerable((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IEnumerable (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.RefTypeEnumerable((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 33), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 32, + originalValueIndex: 33, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + refTypeEnumerable.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var refTypeIList = complexType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IList) : PrincipalBaseUnsafeAccessors.RefTypeIList((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IList) : PrincipalBaseUnsafeAccessors.RefTypeIList((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))) == null, + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance) == null); + refTypeIList.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IList value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeIList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IList value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeIList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IList) : PrincipalBaseUnsafeAccessors.RefTypeIList((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IList (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IList) : PrincipalBaseUnsafeAccessors.RefTypeIList((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 34), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 33, + originalValueIndex: 34, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + refTypeIList.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var refTypeList = complexType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(List) : PrincipalBaseUnsafeAccessors.RefTypeList((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(List) : PrincipalBaseUnsafeAccessors.RefTypeList((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))) == null, + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance) == null); + refTypeList.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, List value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, List value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(List) : PrincipalBaseUnsafeAccessors.RefTypeList((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + List (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(List) : PrincipalBaseUnsafeAccessors.RefTypeList((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 35), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 34, + originalValueIndex: 35, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + refTypeList.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var valueTypeArray = complexType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(DateTime[]) : PrincipalBaseUnsafeAccessors.ValueTypeArray((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(DateTime[]) : PrincipalBaseUnsafeAccessors.ValueTypeArray((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))) == null, + DateTime[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) == null); + valueTypeArray.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, DateTime[] value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeArray(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, DateTime[] value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeArray(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(DateTime[]) : PrincipalBaseUnsafeAccessors.ValueTypeArray((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + DateTime[] (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(DateTime[]) : PrincipalBaseUnsafeAccessors.ValueTypeArray((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 36), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 35, + originalValueIndex: 36, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + valueTypeArray.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var valueTypeEnumerable = complexType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.ValueTypeEnumerable((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.ValueTypeEnumerable((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))) == null, + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.ValueTypeEnumerable((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IEnumerable (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.ValueTypeEnumerable((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 37), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 36, + originalValueIndex: 37, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + valueTypeEnumerable.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var valueTypeIList = complexType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IList) : PrincipalBaseUnsafeAccessors.ValueTypeIList((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(IList) : PrincipalBaseUnsafeAccessors.ValueTypeIList((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))) == null, + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IList value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeIList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, IList value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeIList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IList) : PrincipalBaseUnsafeAccessors.ValueTypeIList((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IList (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(IList) : PrincipalBaseUnsafeAccessors.ValueTypeIList((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 38), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 37, + originalValueIndex: 38, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + valueTypeIList.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + var valueTypeList = complexType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(List) : PrincipalBaseUnsafeAccessors.ValueTypeList((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))), + bool (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices) => ((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))) == null ? default(List) : PrincipalBaseUnsafeAccessors.ValueTypeList((PrincipalBaseUnsafeAccessors._ownedField(entity) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(entity))))) == null, + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance) == null); + valueTypeList.SetSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, List value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalBase entity, IReadOnlyList indices, List value) => + { + var level1 = PrincipalBaseUnsafeAccessors._ownedField(entity); + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(List) : PrincipalBaseUnsafeAccessors.ValueTypeList((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + List (IInternalEntry entry) => ((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))) == null ? default(List) : PrincipalBaseUnsafeAccessors.ValueTypeList((PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))) == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal(PrincipalBaseUnsafeAccessors._ownedField(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 39), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 38, + originalValueIndex: 39, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + valueTypeList.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.None); + + complexType.AddAnnotation("Relational:FunctionName", "PrincipalBaseTvf"); + complexType.AddAnnotation("Relational:Schema", null); + complexType.AddAnnotation("Relational:SqlQuery", "select * from PrincipalBase"); + complexType.AddAnnotation("Relational:TableName", "PrincipalBase"); + complexType.AddAnnotation("Relational:ViewName", "PrincipalBaseView"); + complexType.AddAnnotation("Relational:ViewSchema", null); + return complexProperty; + } + } + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalBaseId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }), + principalEntityType); + + var deriveds = principalEntityType.AddNavigation("Deriveds", + runtimeForeignKey, + onDependent: false, + typeof(ICollection), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Deriveds", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + deriveds.SetGetter( + ICollection (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Deriveds(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Deriveds(instance) == null); + deriveds.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, ICollection value) => + { + PrincipalBaseUnsafeAccessors.Deriveds(instance) = value; + return instance; + }); + deriveds.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, ICollection value) => + { + PrincipalBaseUnsafeAccessors.Deriveds(instance) = value; + return instance; + }); + deriveds.SetAccessors( + ICollection (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Deriveds(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + ICollection (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Deriveds(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + null, + ICollection (IInternalEntry entry) => entry.GetCurrentValue>(deriveds)); + deriveds.SetPropertyIndexes( + index: 0, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 2, + storeGenerationIndex: -1); + deriveds.SetCollectionAccessor, CompiledModelTestBase.PrincipalBase>( + ICollection (CompiledModelTestBase.PrincipalBase entity) => PrincipalBaseUnsafeAccessors.Deriveds(entity), + (CompiledModelTestBase.PrincipalBase entity, ICollection collection) => PrincipalBaseUnsafeAccessors.Deriveds(entity) = ((ICollection)collection), + (CompiledModelTestBase.PrincipalBase entity, ICollection collection) => PrincipalBaseUnsafeAccessors.Deriveds(entity) = ((ICollection)collection), + ICollection (CompiledModelTestBase.PrincipalBase entity, Action> setter) => ClrCollectionAccessorFactory.CreateAndSetHashSet, CompiledModelTestBase.PrincipalBase>(entity, setter), + ICollection () => ((ICollection)(((ICollection)(new HashSet(ReferenceEqualityComparer.Instance)))))); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var discriminator = runtimeEntityType.FindProperty("Discriminator"); + var enum1 = runtimeEntityType.FindProperty("Enum1"); + var enum2 = runtimeEntityType.FindProperty("Enum2"); + var flagsEnum1 = runtimeEntityType.FindProperty("FlagsEnum1"); + var flagsEnum2 = runtimeEntityType.FindProperty("FlagsEnum2"); + var principalBaseId = runtimeEntityType.FindProperty("PrincipalBaseId"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var owned = runtimeEntityType.FindComplexProperty("Owned"); + var ownedType = owned.ComplexType; + var details = ownedType.FindProperty("Details"); + var number = ownedType.FindProperty("Number"); + var refTypeArray0 = ownedType.FindProperty("RefTypeArray"); + var refTypeEnumerable0 = ownedType.FindProperty("RefTypeEnumerable"); + var refTypeIList0 = ownedType.FindProperty("RefTypeIList"); + var refTypeList0 = ownedType.FindProperty("RefTypeList"); + var valueTypeArray0 = ownedType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable0 = ownedType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList0 = ownedType.FindProperty("ValueTypeIList"); + var valueTypeList0 = ownedType.FindProperty("ValueTypeList"); + var principal = ownedType.FindComplexProperty("Principal"); + var principalBase = principal.ComplexType; + var alternateId = principalBase.FindProperty("AlternateId"); + var enum10 = principalBase.FindProperty("Enum1"); + var enum20 = principalBase.FindProperty("Enum2"); + var flagsEnum10 = principalBase.FindProperty("FlagsEnum1"); + var flagsEnum20 = principalBase.FindProperty("FlagsEnum2"); + var id0 = principalBase.FindProperty("Id"); + var refTypeArray1 = principalBase.FindProperty("RefTypeArray"); + var refTypeEnumerable1 = principalBase.FindProperty("RefTypeEnumerable"); + var refTypeIList1 = principalBase.FindProperty("RefTypeIList"); + var refTypeList1 = principalBase.FindProperty("RefTypeList"); + var valueTypeArray1 = principalBase.FindProperty("ValueTypeArray"); + var valueTypeEnumerable1 = principalBase.FindProperty("ValueTypeEnumerable"); + var valueTypeIList1 = principalBase.FindProperty("ValueTypeIList"); + var valueTypeList1 = principalBase.FindProperty("ValueTypeList"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + var deriveds = runtimeEntityType.FindNavigation("Deriveds"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.PrincipalBase)(source.Entity)); + var liftedArg = ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List, string, int, IPAddress[], IEnumerable, IList, List, DateTime[], IEnumerable, IList, List, object, Guid, CompiledModelTestBase.AnEnum, CompiledModelTestBase.AnEnum?, CompiledModelTestBase.AFlagsEnum>((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(discriminator) == null ? null : ((ValueComparer)(((IProperty)discriminator).GetValueComparer())).Snapshot(source.GetCurrentValue(discriminator))), ((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(source.GetCurrentValue(enum1)), (source.GetCurrentValue(enum2) == null ? null : ((ValueComparer)(((IProperty)enum2).GetValueComparer())).Snapshot(source.GetCurrentValue(enum2))), ((ValueComparer)(((IProperty)flagsEnum1).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum1)), ((ValueComparer)(((IProperty)flagsEnum2).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum2)), (source.GetCurrentValue(principalBaseId) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId))), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList))))))), (source.GetCurrentValue(details) == null ? null : ((ValueComparer)(((IProperty)details).GetValueComparer())).Snapshot(source.GetCurrentValue(details))), ((ValueComparer)(((IProperty)number).GetValueComparer())).Snapshot(source.GetCurrentValue(number)), (((object)(source.GetCurrentValue(refTypeArray0))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray0).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray0))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable0))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable0).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable0))))))), (((object)(source.GetCurrentValue>(refTypeIList0))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList0).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList0))))))), (((object)(source.GetCurrentValue>(refTypeList0))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList0).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList0))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray0))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray0).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray0))))))), (source.GetCurrentValue>(valueTypeEnumerable0) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable0).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable0))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList0))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList0).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList0))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList0))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList0).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList0))))))), ((object)(source.GetCurrentValue(principal))), ((ValueComparer)(((IProperty)alternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), ((ValueComparer)(((IProperty)enum10).GetValueComparer())).Snapshot(source.GetCurrentValue(enum10)), (source.GetCurrentValue(enum20) == null ? null : ((ValueComparer)(((IProperty)enum20).GetValueComparer())).Snapshot(source.GetCurrentValue(enum20))), ((ValueComparer)(((IProperty)flagsEnum10).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum10))))); + var structuralType0 = ((CompiledModelTestBase.PrincipalBase)(source.Entity)); + return ((ISnapshot)(new MultiSnapshot(new ISnapshot[] { liftedArg, ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>(((ValueComparer)(((IProperty)flagsEnum20).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum20)), (source.GetCurrentValue(id0) == null ? null : ((ValueComparer)(((IProperty)id0).GetValueComparer())).Snapshot(source.GetCurrentValue(id0))), (((object)(source.GetCurrentValue(refTypeArray1))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray1).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray1))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable1))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable1).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable1))))))), (((object)(source.GetCurrentValue>(refTypeIList1))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList1).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList1))))))), (((object)(source.GetCurrentValue>(refTypeList1))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList1).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList1))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray1))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray1).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray1))))))), (source.GetCurrentValue>(valueTypeEnumerable1) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable1).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable1))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList1))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList1).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList1))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList1))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList1).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList1)))))))))) }))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot((default(long? ) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(long? ))), (default(long? ) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(default(long? ))), (default(string) == null ? null : ((ValueComparer)(((IProperty)details).GetValueComparer())).Snapshot(default(string))))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long? ), default(long? ), default(string))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("Discriminator") ? ((string)(source["Discriminator"])) : null), (source.ContainsKey("PrincipalBaseId") ? ((long? )(source["PrincipalBaseId"])) : null))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(string), default(long? ))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType1 = ((CompiledModelTestBase.PrincipalBase)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(principalBaseId) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId))), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(deriveds))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 39, + navigationCount: 1, + complexPropertyCount: 2, + complexCollectionCount: 0, + originalValueCount: 40, + shadowCount: 2, + relationshipCount: 3, + storeGeneratedCount: 3)); + var insertSproc = new RuntimeStoredProcedure( + runtimeEntityType, + "PrincipalBase_Insert", + null, + false); + + var principalBaseId0 = insertSproc.AddParameter( + "PrincipalBaseId", System.Data.ParameterDirection.Input, false, "PrincipalBaseId", false); + var enum11 = insertSproc.AddParameter( + "Enum1", System.Data.ParameterDirection.Input, false, "Enum1", false); + var enum21 = insertSproc.AddParameter( + "Enum2", System.Data.ParameterDirection.Input, false, "Enum2", false); + var flagsEnum11 = insertSproc.AddParameter( + "FlagsEnum1", System.Data.ParameterDirection.Input, false, "FlagsEnum1", false); + var flagsEnum21 = insertSproc.AddParameter( + "FlagsEnum2", System.Data.ParameterDirection.Input, false, "FlagsEnum2", false); + var valueTypeList2 = insertSproc.AddParameter( + "ValueTypeList", System.Data.ParameterDirection.Input, false, "ValueTypeList", false); + var valueTypeIList2 = insertSproc.AddParameter( + "ValueTypeIList", System.Data.ParameterDirection.Input, false, "ValueTypeIList", false); + var valueTypeArray2 = insertSproc.AddParameter( + "ValueTypeArray", System.Data.ParameterDirection.Input, false, "ValueTypeArray", false); + var valueTypeEnumerable2 = insertSproc.AddParameter( + "ValueTypeEnumerable", System.Data.ParameterDirection.Input, false, "ValueTypeEnumerable", false); + var refTypeList2 = insertSproc.AddParameter( + "RefTypeList", System.Data.ParameterDirection.Input, false, "RefTypeList", false); + var refTypeIList2 = insertSproc.AddParameter( + "RefTypeIList", System.Data.ParameterDirection.Input, false, "RefTypeIList", false); + var refTypeArray2 = insertSproc.AddParameter( + "RefTypeArray", System.Data.ParameterDirection.Input, false, "RefTypeArray", false); + var refTypeEnumerable2 = insertSproc.AddParameter( + "RefTypeEnumerable", System.Data.ParameterDirection.Input, false, "RefTypeEnumerable", false); + var discriminator0 = insertSproc.AddParameter( + "Discriminator", System.Data.ParameterDirection.Input, false, "Discriminator", false); + var id1 = insertSproc.AddParameter( + "Id", System.Data.ParameterDirection.Output, false, "Id", false); + runtimeEntityType.AddAnnotation("Relational:InsertStoredProcedure", insertSproc); + + var deleteSproc = new RuntimeStoredProcedure( + runtimeEntityType, + "PrincipalBase_Delete", + null, + false); + + var rowsAffected = deleteSproc.AddParameter( + "RowsAffected", System.Data.ParameterDirection.Output, true, null, null); + var id2 = deleteSproc.AddParameter( + "Id_Original", System.Data.ParameterDirection.Input, false, "Id", true); + runtimeEntityType.AddAnnotation("Relational:DeleteStoredProcedure", deleteSproc); + + var updateSproc = new RuntimeStoredProcedure( + runtimeEntityType, + "PrincipalBase_Update", + null, + false); + + var principalBaseId1 = updateSproc.AddParameter( + "PrincipalBaseId", System.Data.ParameterDirection.Input, false, "PrincipalBaseId", false); + var enum12 = updateSproc.AddParameter( + "Enum1", System.Data.ParameterDirection.Input, false, "Enum1", false); + var enum22 = updateSproc.AddParameter( + "Enum2", System.Data.ParameterDirection.Input, false, "Enum2", false); + var flagsEnum12 = updateSproc.AddParameter( + "FlagsEnum1", System.Data.ParameterDirection.Input, false, "FlagsEnum1", false); + var flagsEnum22 = updateSproc.AddParameter( + "FlagsEnum2", System.Data.ParameterDirection.Input, false, "FlagsEnum2", false); + var valueTypeList3 = updateSproc.AddParameter( + "ValueTypeList", System.Data.ParameterDirection.Input, false, "ValueTypeList", false); + var valueTypeIList3 = updateSproc.AddParameter( + "ValueTypeIList", System.Data.ParameterDirection.Input, false, "ValueTypeIList", false); + var valueTypeArray3 = updateSproc.AddParameter( + "ValueTypeArray", System.Data.ParameterDirection.Input, false, "ValueTypeArray", false); + var valueTypeEnumerable3 = updateSproc.AddParameter( + "ValueTypeEnumerable", System.Data.ParameterDirection.Input, false, "ValueTypeEnumerable", false); + var refTypeList3 = updateSproc.AddParameter( + "RefTypeList", System.Data.ParameterDirection.Input, false, "RefTypeList", false); + var refTypeIList3 = updateSproc.AddParameter( + "RefTypeIList", System.Data.ParameterDirection.Input, false, "RefTypeIList", false); + var refTypeArray3 = updateSproc.AddParameter( + "RefTypeArray", System.Data.ParameterDirection.Input, false, "RefTypeArray", false); + var refTypeEnumerable3 = updateSproc.AddParameter( + "RefTypeEnumerable", System.Data.ParameterDirection.Input, false, "RefTypeEnumerable", false); + var id3 = updateSproc.AddParameter( + "Id_Original", System.Data.ParameterDirection.Input, false, "Id", true); + runtimeEntityType.AddAnnotation("Relational:UpdateStoredProcedure", updateSproc); + + runtimeEntityType.AddAnnotation("Relational:FunctionName", "PrincipalBaseTvf"); + runtimeEntityType.AddAnnotation("Relational:MappingStrategy", "TPH"); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", "select * from PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewDefinitionSql", null); + runtimeEntityType.AddAnnotation("Relational:ViewName", "PrincipalBaseView"); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseUnsafeAccessors.cs new file mode 100644 index 00000000..e85cd7e3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalBaseUnsafeAccessors.cs @@ -0,0 +1,60 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class PrincipalBaseUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long? Id(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AnEnum Enum1(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AnEnum? Enum2(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AFlagsEnum FlagsEnum1(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AFlagsEnum FlagsEnum2(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress[] RefTypeArray(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IEnumerable RefTypeEnumerable(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList RefTypeIList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List RefTypeList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime[] ValueTypeArray(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IEnumerable ValueTypeEnumerable(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList ValueTypeIList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List ValueTypeList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_ownedField")] + public static extern ref CompiledModelTestBase.OwnedType _ownedField(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ICollection Deriveds(CompiledModelTestBase.PrincipalBase @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedEntityType.cs new file mode 100644 index 00000000..6ec56f03 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedEntityType.cs @@ -0,0 +1,2425 @@ +// +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalDerivedEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + typeof(CompiledModelTestBase.PrincipalDerived>), + baseEntityType, + discriminatorProperty: "Discriminator", + discriminatorValue: "PrincipalDerived>", + propertyCount: 0, + complexPropertyCount: 1); + + ManyOwnedComplexProperty.Create(runtimeEntityType); + return runtimeEntityType; + } + + public static class ManyOwnedComplexProperty + { + public static RuntimeComplexProperty Create(RuntimeEntityType declaringType) + { + var complexProperty = declaringType.AddComplexProperty("ManyOwned", + typeof(IList), + "OwnedCollection", + typeof(CompiledModelTestBase.OwnedType), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("ManyOwned", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + collection: true, + changeTrackingStrategy: ChangeTrackingStrategy.ChangingAndChangedNotificationsWithOriginalValues, + propertyCount: 10, + complexPropertyCount: 1); + + var complexType = complexProperty.ComplexType; + complexProperty.SetGetter( + IList (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.ManyOwned(instance), + bool (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.ManyOwned(instance) == null); + complexProperty.SetSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, IList value) => + { + PrincipalDerivedUnsafeAccessors>.ManyOwned(instance) = value; + return instance; + }); + complexProperty.SetMaterializationSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, IList value) => + { + PrincipalDerivedUnsafeAccessors>.ManyOwned(instance) = value; + return instance; + }); + complexProperty.SetIndexedCollectionAccessor( + CompiledModelTestBase.OwnedType (CompiledModelTestBase.PrincipalDerived> structuralObject, int index) => PrincipalDerivedUnsafeAccessors>.ManyOwned(structuralObject)[index], + (CompiledModelTestBase.PrincipalDerived> structuralObject, int index, CompiledModelTestBase.OwnedType value) => PrincipalDerivedUnsafeAccessors>.ManyOwned(structuralObject)[index] = value, + (CompiledModelTestBase.PrincipalDerived> structuralObject, int index, CompiledModelTestBase.OwnedType value) => PrincipalDerivedUnsafeAccessors>.ManyOwned(structuralObject)[index] = value, + IList (int capacity) => new List(capacity)); + complexProperty.SetAccessors( + IList (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + null, + IList (IInternalEntry entry) => entry.GetCurrentValue>(complexProperty)); + complexProperty.SetPropertyIndexes( + index: 0, + originalValueIndex: 40, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + var details = complexType.AddProperty( + "Details", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_details", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.FieldDuringConstruction, + nullable: true, + unicode: false, + sentinel: ""); + details.SetGetter( + string (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(string) : (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]].Details), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => !(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(string) : (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]].Details) == null) && ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(string) : (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]].Details) == "", + string (CompiledModelTestBase.OwnedType instance) => instance.Details, + bool (CompiledModelTestBase.OwnedType instance) => !(instance.Details == null) && instance.Details == ""); + details.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, string value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "Details", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + level1.Details = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + instance.Details = value; + return instance; + }); + details.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, string value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "Details", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + level1.Details = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, string value) => + { + OwnedTypeUnsafeAccessors._details(instance) = value; + return instance; + }); + details.SetAccessors( + string (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(string) : (PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]].Details), + string (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(string) : (PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]].Details), + string (IInternalEntry entry) => entry.ReadOriginalValue(details, 0), + string (IInternalEntry entry) => entry.GetCurrentValue(details)); + details.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + details.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255, + unicode: false)); + details.AddAnnotation("foo", "bar"); + + var number = complexType.AddProperty( + "Number", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Number", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0); + number.SetGetter( + int (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(int) : OwnedTypeUnsafeAccessors.Number((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(int) : OwnedTypeUnsafeAccessors.Number((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == 0, + int (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Number(instance) == 0); + number.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, int value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "Number", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors.Number(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, int value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "Number", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors.Number(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, int value) => + { + OwnedTypeUnsafeAccessors.Number(instance) = value; + return instance; + }); + number.SetAccessors( + int (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(int) : OwnedTypeUnsafeAccessors.Number((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + int (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(int) : OwnedTypeUnsafeAccessors.Number((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + int (IInternalEntry entry) => entry.ReadOriginalValue(number, 1), + int (IInternalEntry entry) => entry.GetCurrentValue(number)); + number.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + number.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + + var refTypeArray = complexType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IPAddress[]) : OwnedTypeUnsafeAccessors._refTypeArray((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IPAddress[]) : OwnedTypeUnsafeAccessors._refTypeArray((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null, + IPAddress[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeArray(instance) == null); + refTypeArray.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IPAddress[] value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "RefTypeArray", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._refTypeArray(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IPAddress[] value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "RefTypeArray", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._refTypeArray(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IPAddress[] value) => + { + OwnedTypeUnsafeAccessors._refTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IPAddress[]) : OwnedTypeUnsafeAccessors._refTypeArray((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IPAddress[] (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IPAddress[]) : OwnedTypeUnsafeAccessors._refTypeArray((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 2), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = complexType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._refTypeEnumerable((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._refTypeEnumerable((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null, + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "RefTypeEnumerable", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._refTypeEnumerable(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "RefTypeEnumerable", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._refTypeEnumerable(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._refTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._refTypeEnumerable((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IEnumerable (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._refTypeEnumerable((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 3), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = complexType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeIList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IList) : OwnedTypeUnsafeAccessors._refTypeIList((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IList) : OwnedTypeUnsafeAccessors._refTypeIList((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null, + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeIList(instance) == null); + refTypeIList.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IList value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "RefTypeIList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._refTypeIList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IList value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "RefTypeIList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._refTypeIList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors._refTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IList) : OwnedTypeUnsafeAccessors._refTypeIList((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IList (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IList) : OwnedTypeUnsafeAccessors._refTypeIList((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 4), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = complexType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(List) : OwnedTypeUnsafeAccessors._refTypeList((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(List) : OwnedTypeUnsafeAccessors._refTypeList((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null, + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._refTypeList(instance) == null); + refTypeList.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, List value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "RefTypeList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._refTypeList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, List value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "RefTypeList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._refTypeList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._refTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(List) : OwnedTypeUnsafeAccessors._refTypeList((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + List (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(List) : OwnedTypeUnsafeAccessors._refTypeList((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 5), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = complexType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(DateTime[]) : OwnedTypeUnsafeAccessors._valueTypeArray((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(DateTime[]) : OwnedTypeUnsafeAccessors._valueTypeArray((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null, + DateTime[] (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeArray(instance) == null); + valueTypeArray.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, DateTime[] value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "ValueTypeArray", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._valueTypeArray(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, DateTime[] value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "ValueTypeArray", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._valueTypeArray(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, DateTime[] value) => + { + OwnedTypeUnsafeAccessors._valueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(DateTime[]) : OwnedTypeUnsafeAccessors._valueTypeArray((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + DateTime[] (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(DateTime[]) : OwnedTypeUnsafeAccessors._valueTypeArray((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 6), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = complexType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._valueTypeEnumerable((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._valueTypeEnumerable((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null, + IEnumerable (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "ValueTypeEnumerable", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._valueTypeEnumerable(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "ValueTypeEnumerable", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._valueTypeEnumerable(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IEnumerable value) => + { + OwnedTypeUnsafeAccessors._valueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._valueTypeEnumerable((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IEnumerable (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IEnumerable) : OwnedTypeUnsafeAccessors._valueTypeEnumerable((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 7), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = complexType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IList) : OwnedTypeUnsafeAccessors.ValueTypeIList((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(IList) : OwnedTypeUnsafeAccessors.ValueTypeIList((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null, + IList (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IList value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "ValueTypeIList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors.ValueTypeIList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IList value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "ValueTypeIList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors.ValueTypeIList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, IList value) => + { + OwnedTypeUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IList) : OwnedTypeUnsafeAccessors.ValueTypeIList((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IList (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(IList) : OwnedTypeUnsafeAccessors.ValueTypeIList((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 8), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = complexType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(List) : OwnedTypeUnsafeAccessors._valueTypeList((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(List) : OwnedTypeUnsafeAccessors._valueTypeList((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null, + List (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors._valueTypeList(instance) == null); + valueTypeList.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, List value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "ValueTypeList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._valueTypeList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, List value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "ValueTypeList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors._valueTypeList(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, List value) => + { + OwnedTypeUnsafeAccessors._valueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(List) : OwnedTypeUnsafeAccessors._valueTypeList((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + List (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(List) : OwnedTypeUnsafeAccessors._valueTypeList((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 9), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + PrincipalComplexProperty.Create(complexType); + complexType.AddAnnotation("go", "brr"); + complexType.AddAnnotation("Relational:ContainerColumnName", "ManyOwned"); + complexType.AddAnnotation("Relational:FunctionName", null); + complexType.AddAnnotation("Relational:Schema", null); + complexType.AddAnnotation("Relational:SqlQuery", "select * from PrincipalBase"); + complexType.AddAnnotation("Relational:TableName", "PrincipalBase"); + complexType.AddAnnotation("Relational:ViewName", null); + complexType.AddAnnotation("Relational:ViewSchema", null); + complexProperty.AddAnnotation("goo", "ber"); + return complexProperty; + } + + public static class PrincipalComplexProperty + { + public static RuntimeComplexProperty Create(RuntimeComplexType declaringType) + { + var complexProperty = declaringType.AddComplexProperty("Principal", + typeof(CompiledModelTestBase.PrincipalBase), + "OwnedCollection.Principal#PrincipalBase", + typeof(CompiledModelTestBase.PrincipalBase), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Principal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true, + propertyCount: 14); + + var complexType = complexProperty.ComplexType; + complexProperty.SetGetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Principal(instance), + bool (CompiledModelTestBase.OwnedType instance) => OwnedTypeUnsafeAccessors.Principal(instance) == null); + complexProperty.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.PrincipalBase value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "Principal", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors.Principal(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, CompiledModelTestBase.PrincipalBase value) => + { + OwnedTypeUnsafeAccessors.Principal(instance) = value; + return instance; + }); + complexProperty.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.PrincipalBase value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection (OwnedType)", "Principal", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + OwnedTypeUnsafeAccessors.Principal(level1) = value; + }, + CompiledModelTestBase.OwnedType (CompiledModelTestBase.OwnedType instance, CompiledModelTestBase.PrincipalBase value) => + { + OwnedTypeUnsafeAccessors.Principal(instance) = value; + return instance; + }); + complexProperty.SetAccessors( + CompiledModelTestBase.PrincipalBase (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + CompiledModelTestBase.PrincipalBase (IInternalEntry entry) => ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])), + null, + CompiledModelTestBase.PrincipalBase (IInternalEntry entry) => entry.GetCurrentValue(complexProperty)); + complexProperty.SetPropertyIndexes( + index: 0, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + var alternateId = complexType.AddProperty( + "AlternateId", + typeof(Guid), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("AlternateId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + alternateId.SetGetter( + Guid (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(Guid) : ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])).AlternateId), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(Guid) : ((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])).AlternateId) == new Guid("00000000-0000-0000-0000-000000000000"), + Guid (CompiledModelTestBase.PrincipalBase instance) => instance.AlternateId, + bool (CompiledModelTestBase.PrincipalBase instance) => instance.AlternateId == new Guid("00000000-0000-0000-0000-000000000000")); + alternateId.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, Guid value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "AlternateId", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + level2.AlternateId = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, Guid value) => + { + instance.AlternateId = value; + return instance; + }); + alternateId.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, Guid value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "AlternateId", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + level2.AlternateId = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, Guid value) => + { + instance.AlternateId = value; + return instance; + }); + alternateId.SetAccessors( + Guid (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(Guid) : ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])).AlternateId), + Guid (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(Guid) : ((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])).AlternateId), + Guid (IInternalEntry entry) => entry.ReadOriginalValue(alternateId, 11), + Guid (IInternalEntry entry) => entry.GetCurrentValue(alternateId)); + alternateId.SetPropertyIndexes( + index: 10, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + alternateId.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + + var enum1 = complexType.AddProperty( + "Enum1", + typeof(CompiledModelTestBase.AnEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum1.SetGetter( + CompiledModelTestBase.AnEnum (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(CompiledModelTestBase.AnEnum) : PrincipalBaseUnsafeAccessors.Enum1(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => object.Equals(((object)((((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(CompiledModelTestBase.AnEnum) : PrincipalBaseUnsafeAccessors.Enum1(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))))), ((object)((CompiledModelTestBase.AnEnum)0L))), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.Enum1(instance))), ((object)((CompiledModelTestBase.AnEnum)0L)))); + enum1.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.AnEnum value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "Enum1", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Enum1(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.AnEnum value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "Enum1", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Enum1(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetAccessors( + CompiledModelTestBase.AnEnum (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(CompiledModelTestBase.AnEnum) : PrincipalBaseUnsafeAccessors.Enum1(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(CompiledModelTestBase.AnEnum) : PrincipalBaseUnsafeAccessors.Enum1(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.ReadOriginalValue(enum1, 12), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.GetCurrentValue(enum1)); + enum1.SetPropertyIndexes( + index: 11, + originalValueIndex: 12, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum1.SetSentinelFromProviderValue(0); + + var enum2 = complexType.AddProperty( + "Enum2", + typeof(CompiledModelTestBase.AnEnum?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum2", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + enum2.SetGetter( + CompiledModelTestBase.AnEnum? (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(CompiledModelTestBase.AnEnum? ) : PrincipalBaseUnsafeAccessors.Enum2(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => !((((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(CompiledModelTestBase.AnEnum? ) : PrincipalBaseUnsafeAccessors.Enum2(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))).HasValue), + CompiledModelTestBase.AnEnum? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Enum2(instance).HasValue)); + enum2.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.AnEnum? value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "Enum2", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Enum2(level2) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.AnEnum? value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "Enum2", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Enum2(level2) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetAccessors( + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(CompiledModelTestBase.AnEnum? ) : PrincipalBaseUnsafeAccessors.Enum2(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(CompiledModelTestBase.AnEnum? ) : PrincipalBaseUnsafeAccessors.Enum2(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.ReadOriginalValue(enum2, 13), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.GetCurrentValue(enum2)); + enum2.SetPropertyIndexes( + index: 12, + originalValueIndex: 13, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum2.SetComparer(new NullableValueComparer(enum2.TypeMapping.Comparer)); + enum2.SetKeyComparer(new NullableValueComparer(enum2.TypeMapping.KeyComparer)); + + var flagsEnum1 = complexType.AddProperty( + "FlagsEnum1", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum1.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum1(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => object.Equals(((object)((((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum1(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))))), ((object)((CompiledModelTestBase.AFlagsEnum)0L))), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum1(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum1.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.AFlagsEnum value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "FlagsEnum1", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.FlagsEnum1(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.AFlagsEnum value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "FlagsEnum1", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.FlagsEnum1(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum1(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum1(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum1, 14), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum1)); + flagsEnum1.SetPropertyIndexes( + index: 13, + originalValueIndex: 14, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum1.SetSentinelFromProviderValue(0); + + var flagsEnum2 = complexType.AddProperty( + "FlagsEnum2", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum2", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum2.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum2(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => object.Equals(((object)((((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum2(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))))), ((object)((CompiledModelTestBase.AFlagsEnum)0L))), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum2(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum2.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.AFlagsEnum value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "FlagsEnum2", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.FlagsEnum2(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum2(instance) = value; + return instance; + }); + flagsEnum2.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, CompiledModelTestBase.AFlagsEnum value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "FlagsEnum2", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.FlagsEnum2(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum2(instance) = value; + return instance; + }); + flagsEnum2.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum2(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(CompiledModelTestBase.AFlagsEnum) : PrincipalBaseUnsafeAccessors.FlagsEnum2(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum2, 15), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum2)); + flagsEnum2.SetPropertyIndexes( + index: 14, + originalValueIndex: 15, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum2.SetSentinelFromProviderValue(0); + + var id = complexType.AddProperty( + "Id", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + id.SetGetter( + long? (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(long? ) : PrincipalBaseUnsafeAccessors.Id(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => !((((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(long? ) : PrincipalBaseUnsafeAccessors.Id(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))).HasValue), + long? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Id(instance).HasValue)); + id.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, long? value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "Id", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Id(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, long? value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "Id", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.Id(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + long? (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(long? ) : PrincipalBaseUnsafeAccessors.Id(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + long? (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(long? ) : PrincipalBaseUnsafeAccessors.Id(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + long? (IInternalEntry entry) => entry.ReadOriginalValue(id, 16), + long? (IInternalEntry entry) => entry.GetCurrentValue(id)); + id.SetPropertyIndexes( + index: 15, + originalValueIndex: 16, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + id.TypeMapping = LibRedLongTypeMapping.Default; + id.SetComparer(new NullableValueComparer(id.TypeMapping.Comparer)); + id.SetKeyComparer(new NullableValueComparer(id.TypeMapping.KeyComparer)); + + var refTypeArray = complexType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IPAddress[]) : PrincipalBaseUnsafeAccessors.RefTypeArray(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IPAddress[]) : PrincipalBaseUnsafeAccessors.RefTypeArray(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))) == null, + IPAddress[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance) == null); + refTypeArray.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IPAddress[] value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "RefTypeArray", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeArray(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IPAddress[] value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "RefTypeArray", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeArray(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IPAddress[]) : PrincipalBaseUnsafeAccessors.RefTypeArray(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IPAddress[] (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IPAddress[]) : PrincipalBaseUnsafeAccessors.RefTypeArray(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 17), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 16, + originalValueIndex: 17, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = complexType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))) == null, + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "RefTypeEnumerable", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "RefTypeEnumerable", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IEnumerable (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 18), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 17, + originalValueIndex: 18, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = complexType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IList) : PrincipalBaseUnsafeAccessors.RefTypeIList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IList) : PrincipalBaseUnsafeAccessors.RefTypeIList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))) == null, + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance) == null); + refTypeIList.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IList value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "RefTypeIList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeIList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IList value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "RefTypeIList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeIList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IList) : PrincipalBaseUnsafeAccessors.RefTypeIList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IList (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IList) : PrincipalBaseUnsafeAccessors.RefTypeIList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 19), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 18, + originalValueIndex: 19, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = complexType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(List) : PrincipalBaseUnsafeAccessors.RefTypeList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(List) : PrincipalBaseUnsafeAccessors.RefTypeList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))) == null, + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance) == null); + refTypeList.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, List value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "RefTypeList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, List value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "RefTypeList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.RefTypeList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(List) : PrincipalBaseUnsafeAccessors.RefTypeList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + List (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(List) : PrincipalBaseUnsafeAccessors.RefTypeList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 20), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 19, + originalValueIndex: 20, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = complexType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(DateTime[]) : PrincipalBaseUnsafeAccessors.ValueTypeArray(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(DateTime[]) : PrincipalBaseUnsafeAccessors.ValueTypeArray(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))) == null, + DateTime[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) == null); + valueTypeArray.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, DateTime[] value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "ValueTypeArray", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeArray(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, DateTime[] value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "ValueTypeArray", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeArray(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(DateTime[]) : PrincipalBaseUnsafeAccessors.ValueTypeArray(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + DateTime[] (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(DateTime[]) : PrincipalBaseUnsafeAccessors.ValueTypeArray(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 21), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 20, + originalValueIndex: 21, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = complexType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))) == null, + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "ValueTypeEnumerable", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IEnumerable value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "ValueTypeEnumerable", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IEnumerable (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IEnumerable) : PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 22), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 21, + originalValueIndex: 22, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = complexType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IList) : PrincipalBaseUnsafeAccessors.ValueTypeIList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(IList) : PrincipalBaseUnsafeAccessors.ValueTypeIList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))) == null, + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IList value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "ValueTypeIList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeIList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, IList value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "ValueTypeIList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeIList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IList) : PrincipalBaseUnsafeAccessors.ValueTypeIList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IList (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(IList) : PrincipalBaseUnsafeAccessors.ValueTypeIList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 23), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 22, + originalValueIndex: 23, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = complexType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(List) : PrincipalBaseUnsafeAccessors.ValueTypeList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))), + bool (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])) == null ? default(List) : PrincipalBaseUnsafeAccessors.ValueTypeList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]])))) == null, + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance) == null); + valueTypeList.SetSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, List value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "ValueTypeList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + (CompiledModelTestBase.PrincipalDerived> entity, IReadOnlyList indices, List value) => + { + var level1 = (PrincipalDerivedUnsafeAccessors>.ManyOwned(entity) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(entity))[indices[0]]; + if (level1 == null) + { + throw new InvalidOperationException(CoreStrings.ComplexCollectionNullElementSetter("OwnedCollection.Principal#PrincipalBase (PrincipalBase)", "ValueTypeList", "PrincipalDerived>", "ManyOwned", ((object)(indices[0])))); + } + + var level2 = OwnedTypeUnsafeAccessors.Principal(level1); + PrincipalBaseUnsafeAccessors.ValueTypeList(level2) = value; + }, + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(List) : PrincipalBaseUnsafeAccessors.ValueTypeList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + List (IInternalEntry entry) => (((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])) == null ? default(List) : PrincipalBaseUnsafeAccessors.ValueTypeList(((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]] == null ? default(CompiledModelTestBase.PrincipalBase) : OwnedTypeUnsafeAccessors.Principal((PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))) == null ? throw new InvalidOperationException(CoreStrings.ComplexCollectionNotInitialized("PrincipalDerived", "ManyOwned")) : PrincipalDerivedUnsafeAccessors>.ManyOwned(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))))[entry.GetOrdinals()[0]])))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 24), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 23, + originalValueIndex: 24, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + complexType.AddAnnotation("Relational:FunctionName", null); + complexType.AddAnnotation("Relational:Schema", null); + complexType.AddAnnotation("Relational:SqlQuery", "select * from PrincipalBase"); + complexType.AddAnnotation("Relational:TableName", "PrincipalBase"); + complexType.AddAnnotation("Relational:ViewName", null); + complexType.AddAnnotation("Relational:ViewSchema", null); + return complexProperty; + } + } + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var discriminator = runtimeEntityType.FindProperty("Discriminator"); + var enum1 = runtimeEntityType.FindProperty("Enum1"); + var enum2 = runtimeEntityType.FindProperty("Enum2"); + var flagsEnum1 = runtimeEntityType.FindProperty("FlagsEnum1"); + var flagsEnum2 = runtimeEntityType.FindProperty("FlagsEnum2"); + var principalBaseId = runtimeEntityType.FindProperty("PrincipalBaseId"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var owned = runtimeEntityType.FindComplexProperty("Owned"); + var ownedType = owned.ComplexType; + var details = ownedType.FindProperty("Details"); + var number = ownedType.FindProperty("Number"); + var refTypeArray0 = ownedType.FindProperty("RefTypeArray"); + var refTypeEnumerable0 = ownedType.FindProperty("RefTypeEnumerable"); + var refTypeIList0 = ownedType.FindProperty("RefTypeIList"); + var refTypeList0 = ownedType.FindProperty("RefTypeList"); + var valueTypeArray0 = ownedType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable0 = ownedType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList0 = ownedType.FindProperty("ValueTypeIList"); + var valueTypeList0 = ownedType.FindProperty("ValueTypeList"); + var principal = ownedType.FindComplexProperty("Principal"); + var principalBase = principal.ComplexType; + var alternateId = principalBase.FindProperty("AlternateId"); + var enum10 = principalBase.FindProperty("Enum1"); + var enum20 = principalBase.FindProperty("Enum2"); + var flagsEnum10 = principalBase.FindProperty("FlagsEnum1"); + var flagsEnum20 = principalBase.FindProperty("FlagsEnum2"); + var id0 = principalBase.FindProperty("Id"); + var refTypeArray1 = principalBase.FindProperty("RefTypeArray"); + var refTypeEnumerable1 = principalBase.FindProperty("RefTypeEnumerable"); + var refTypeIList1 = principalBase.FindProperty("RefTypeIList"); + var refTypeList1 = principalBase.FindProperty("RefTypeList"); + var valueTypeArray1 = principalBase.FindProperty("ValueTypeArray"); + var valueTypeEnumerable1 = principalBase.FindProperty("ValueTypeEnumerable"); + var valueTypeIList1 = principalBase.FindProperty("ValueTypeIList"); + var valueTypeList1 = principalBase.FindProperty("ValueTypeList"); + var manyOwned = runtimeEntityType.FindComplexProperty("ManyOwned"); + var ownedCollection = manyOwned.ComplexType; + var details0 = ownedCollection.FindProperty("Details"); + var number0 = ownedCollection.FindProperty("Number"); + var refTypeArray2 = ownedCollection.FindProperty("RefTypeArray"); + var refTypeEnumerable2 = ownedCollection.FindProperty("RefTypeEnumerable"); + var refTypeIList2 = ownedCollection.FindProperty("RefTypeIList"); + var refTypeList2 = ownedCollection.FindProperty("RefTypeList"); + var valueTypeArray2 = ownedCollection.FindProperty("ValueTypeArray"); + var valueTypeEnumerable2 = ownedCollection.FindProperty("ValueTypeEnumerable"); + var valueTypeIList2 = ownedCollection.FindProperty("ValueTypeIList"); + var valueTypeList2 = ownedCollection.FindProperty("ValueTypeList"); + var principal0 = ownedCollection.FindComplexProperty("Principal"); + var principalBase0 = principal0.ComplexType; + var alternateId0 = principalBase0.FindProperty("AlternateId"); + var enum11 = principalBase0.FindProperty("Enum1"); + var enum21 = principalBase0.FindProperty("Enum2"); + var flagsEnum11 = principalBase0.FindProperty("FlagsEnum1"); + var flagsEnum21 = principalBase0.FindProperty("FlagsEnum2"); + var id1 = principalBase0.FindProperty("Id"); + var refTypeArray3 = principalBase0.FindProperty("RefTypeArray"); + var refTypeEnumerable3 = principalBase0.FindProperty("RefTypeEnumerable"); + var refTypeIList3 = principalBase0.FindProperty("RefTypeIList"); + var refTypeList3 = principalBase0.FindProperty("RefTypeList"); + var valueTypeArray3 = principalBase0.FindProperty("ValueTypeArray"); + var valueTypeEnumerable3 = principalBase0.FindProperty("ValueTypeEnumerable"); + var valueTypeIList3 = principalBase0.FindProperty("ValueTypeIList"); + var valueTypeList3 = principalBase0.FindProperty("ValueTypeList"); + var deriveds = runtimeEntityType.FindNavigation("Deriveds"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType1 = ((CompiledModelTestBase.PrincipalDerived>)(source.Entity)); + var liftedArg0 = ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List, string, int, IPAddress[], IEnumerable, IList, List, DateTime[], IEnumerable, IList, List, object, Guid, CompiledModelTestBase.AnEnum, CompiledModelTestBase.AnEnum?, CompiledModelTestBase.AFlagsEnum>((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(discriminator) == null ? null : ((ValueComparer)(((IProperty)discriminator).GetValueComparer())).Snapshot(source.GetCurrentValue(discriminator))), ((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(source.GetCurrentValue(enum1)), (source.GetCurrentValue(enum2) == null ? null : ((ValueComparer)(((IProperty)enum2).GetValueComparer())).Snapshot(source.GetCurrentValue(enum2))), ((ValueComparer)(((IProperty)flagsEnum1).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum1)), ((ValueComparer)(((IProperty)flagsEnum2).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum2)), (source.GetCurrentValue(principalBaseId) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId))), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList))))))), (source.GetCurrentValue(details) == null ? null : ((ValueComparer)(((IProperty)details).GetValueComparer())).Snapshot(source.GetCurrentValue(details))), ((ValueComparer)(((IProperty)number).GetValueComparer())).Snapshot(source.GetCurrentValue(number)), (((object)(source.GetCurrentValue(refTypeArray0))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray0).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray0))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable0))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable0).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable0))))))), (((object)(source.GetCurrentValue>(refTypeIList0))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList0).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList0))))))), (((object)(source.GetCurrentValue>(refTypeList0))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList0).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList0))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray0))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray0).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray0))))))), (source.GetCurrentValue>(valueTypeEnumerable0) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable0).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable0))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList0))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList0).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList0))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList0))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList0).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList0))))))), ((object)(source.GetCurrentValue(principal))), ((ValueComparer)(((IProperty)alternateId).GetValueComparer())).Snapshot(source.GetCurrentValue(alternateId)), ((ValueComparer)(((IProperty)enum10).GetValueComparer())).Snapshot(source.GetCurrentValue(enum10)), (source.GetCurrentValue(enum20) == null ? null : ((ValueComparer)(((IProperty)enum20).GetValueComparer())).Snapshot(source.GetCurrentValue(enum20))), ((ValueComparer)(((IProperty)flagsEnum10).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum10))))); + var structuralType2 = ((CompiledModelTestBase.PrincipalDerived>)(source.Entity)); + return ((ISnapshot)(new MultiSnapshot(new ISnapshot[] { liftedArg0, ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List, object>(((ValueComparer)(((IProperty)flagsEnum20).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum20)), (source.GetCurrentValue(id0) == null ? null : ((ValueComparer)(((IProperty)id0).GetValueComparer())).Snapshot(source.GetCurrentValue(id0))), (((object)(source.GetCurrentValue(refTypeArray1))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray1).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray1))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable1))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable1).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable1))))))), (((object)(source.GetCurrentValue>(refTypeIList1))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList1).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList1))))))), (((object)(source.GetCurrentValue>(refTypeList1))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList1).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList1))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray1))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray1).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray1))))))), (source.GetCurrentValue>(valueTypeEnumerable1) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable1).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable1))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList1))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList1).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList1))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList1))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList1).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList1))))))), SnapshotFactoryFactory.SnapshotComplexCollection(((IList)(source.GetCurrentValue>(manyOwned))), manyOwned)))) }))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot((default(long? ) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(long? ))), (default(long? ) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(default(long? ))), (default(string) == null ? null : ((ValueComparer)(((IProperty)details).GetValueComparer())).Snapshot(default(string))))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long? ), default(long? ), default(string))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("Discriminator") ? ((string)(source["Discriminator"])) : null), (source.ContainsKey("PrincipalBaseId") ? ((long? )(source["PrincipalBaseId"])) : null))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(string), default(long? ))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType3 = ((CompiledModelTestBase.PrincipalDerived>)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(principalBaseId) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId))), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(deriveds))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 39, + navigationCount: 1, + complexPropertyCount: 2, + complexCollectionCount: 1, + originalValueCount: 41, + shadowCount: 2, + relationshipCount: 3, + storeGeneratedCount: 3)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", "select * from PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedUnsafeAccessors.cs new file mode 100644 index 00000000..8d3af16d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/ComplexTypes/PrincipalDerivedUnsafeAccessors.cs @@ -0,0 +1,17 @@ +// +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class PrincipalDerivedUnsafeAccessors + where TDependent : class + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "ManyOwned")] + public static extern ref IList ManyOwned(CompiledModelTestBase.PrincipalDerived @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_parameter_type_mapping/FunctionParameterTypeMappingContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_parameter_type_mapping/FunctionParameterTypeMappingContextAssemblyAttributes.cs new file mode 100644 index 00000000..188db793 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_parameter_type_mapping/FunctionParameterTypeMappingContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Scaffolding; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(CompiledModelRelationalTestBase.FunctionParameterTypeMappingContext), typeof(FunctionParameterTypeMappingContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_parameter_type_mapping/FunctionParameterTypeMappingContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_parameter_type_mapping/FunctionParameterTypeMappingContextModel.cs new file mode 100644 index 00000000..3cd9c09d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_parameter_type_mapping/FunctionParameterTypeMappingContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(CompiledModelRelationalTestBase.FunctionParameterTypeMappingContext))] + public partial class FunctionParameterTypeMappingContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static FunctionParameterTypeMappingContextModel() + { + var model = new FunctionParameterTypeMappingContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (FunctionParameterTypeMappingContextModel)model.FinalizeModel(); + } + + private static FunctionParameterTypeMappingContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_parameter_type_mapping/FunctionParameterTypeMappingContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_parameter_type_mapping/FunctionParameterTypeMappingContextModelBuilder.cs new file mode 100644 index 00000000..a975dad2 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_parameter_type_mapping/FunctionParameterTypeMappingContextModelBuilder.cs @@ -0,0 +1,103 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class FunctionParameterTypeMappingContextModel + { + private FunctionParameterTypeMappingContextModel() + : base(skipDetectChanges: true, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 0) + { + } + + partial void Initialize() + { + var functions = new Dictionary(); + var getSqlFragmentStatic = new RuntimeDbFunction( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+FunctionParameterTypeMappingContext.GetSqlFragmentStatic(string)", + this, + typeof(string), + "GetSqlFragmentStatic", + storeType: "varchar(255)", + methodInfo: typeof(CompiledModelRelationalTestBase.FunctionParameterTypeMappingContext).GetMethod( + "GetSqlFragmentStatic", + BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, + null, + new Type[] { typeof(string) }, + null), + scalar: true, + nullable: true); + + var param = getSqlFragmentStatic.AddParameter( + "param", + typeof(string), + false, + "varchar"); + param.TypeMapping = StringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar", + dbType: System.Data.DbType.AnsiString)); + + getSqlFragmentStatic.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + functions["Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+FunctionParameterTypeMappingContext.GetSqlFragmentStatic(string)"] = getSqlFragmentStatic; + + AddAnnotation("Relational:DbFunctions", functions); + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + var getSqlFragmentStatic = (IRuntimeDbFunction)this.FindDbFunction("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+FunctionParameterTypeMappingContext.GetSqlFragmentStatic(string)")!; + var getSqlFragmentStaticFunction = new StoreFunction(getSqlFragmentStatic, relationalModel); + var paramFunctionParameter = getSqlFragmentStaticFunction.FindParameter("param")!; + relationalModel.Functions.Add( + ("GetSqlFragmentStatic", null, new[] { "varchar" }), + getSqlFragmentStaticFunction); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_type_mapping/FunctionTypeMappingContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_type_mapping/FunctionTypeMappingContextAssemblyAttributes.cs new file mode 100644 index 00000000..7ab16249 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_type_mapping/FunctionTypeMappingContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Scaffolding; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(CompiledModelRelationalTestBase.FunctionTypeMappingContext), typeof(FunctionTypeMappingContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_type_mapping/FunctionTypeMappingContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_type_mapping/FunctionTypeMappingContextModel.cs new file mode 100644 index 00000000..ead6c2fb --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_type_mapping/FunctionTypeMappingContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(CompiledModelRelationalTestBase.FunctionTypeMappingContext))] + public partial class FunctionTypeMappingContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static FunctionTypeMappingContextModel() + { + var model = new FunctionTypeMappingContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (FunctionTypeMappingContextModel)model.FinalizeModel(); + } + + private static FunctionTypeMappingContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_type_mapping/FunctionTypeMappingContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_type_mapping/FunctionTypeMappingContextModelBuilder.cs new file mode 100644 index 00000000..0826f5d3 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Custom_function_type_mapping/FunctionTypeMappingContextModelBuilder.cs @@ -0,0 +1,103 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class FunctionTypeMappingContextModel + { + private FunctionTypeMappingContextModel() + : base(skipDetectChanges: true, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 0) + { + } + + partial void Initialize() + { + var functions = new Dictionary(); + var getSqlFragmentStatic = new RuntimeDbFunction( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+FunctionTypeMappingContext.GetSqlFragmentStatic(string)", + this, + typeof(string), + "GetSqlFragmentStatic", + storeType: "varchar", + methodInfo: typeof(CompiledModelRelationalTestBase.FunctionTypeMappingContext).GetMethod( + "GetSqlFragmentStatic", + BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, + null, + new Type[] { typeof(string) }, + null), + scalar: true, + nullable: true); + + var param = getSqlFragmentStatic.AddParameter( + "param", + typeof(string), + false, + "varchar(255)"); + param.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + getSqlFragmentStatic.TypeMapping = StringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar", + dbType: System.Data.DbType.AnsiString)); + functions["Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+FunctionTypeMappingContext.GetSqlFragmentStatic(string)"] = getSqlFragmentStatic; + + AddAnnotation("Relational:DbFunctions", functions); + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + var getSqlFragmentStatic = (IRuntimeDbFunction)this.FindDbFunction("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+FunctionTypeMappingContext.GetSqlFragmentStatic(string)")!; + var getSqlFragmentStaticFunction = new StoreFunction(getSqlFragmentStatic, relationalModel); + var paramFunctionParameter = getSqlFragmentStaticFunction.FindParameter("param")!; + relationalModel.Functions.Add( + ("GetSqlFragmentStatic", null, new[] { "varchar(255)" }), + getSqlFragmentStaticFunction); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DataEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DataEntityType.cs new file mode 100644 index 00000000..ff65213b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DataEntityType.cs @@ -0,0 +1,124 @@ +// +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DataEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", + typeof(CompiledModelTestBase.Data), + baseEntityType, + propertyCount: 1); + + var blob = runtimeEntityType.AddProperty( + "Blob", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.Data).GetProperty("Blob", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.Data).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + blob.SetGetter( + byte[] (CompiledModelTestBase.Data instance) => DataUnsafeAccessors.Blob(instance), + bool (CompiledModelTestBase.Data instance) => DataUnsafeAccessors.Blob(instance) == null); + blob.SetSetter( + CompiledModelTestBase.Data (CompiledModelTestBase.Data instance, byte[] value) => + { + DataUnsafeAccessors.Blob(instance) = value; + return instance; + }); + blob.SetMaterializationSetter( + CompiledModelTestBase.Data (CompiledModelTestBase.Data instance, byte[] value) => + { + DataUnsafeAccessors.Blob(instance) = value; + return instance; + }); + blob.SetAccessors( + byte[] (IInternalEntry entry) => DataUnsafeAccessors.Blob(((CompiledModelTestBase.Data)(entry.Entity))), + byte[] (IInternalEntry entry) => DataUnsafeAccessors.Blob(((CompiledModelTestBase.Data)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(blob, 0), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(blob)); + blob.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + blob.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var blob = runtimeEntityType.FindProperty("Blob"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.Data)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(blob) == null ? null : ((ValueComparer)(((IProperty)blob).GetValueComparer())).Snapshot(source.GetCurrentValue(blob)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => Snapshot.Empty); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => Snapshot.Empty); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => Snapshot.Empty); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 1, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 1, + shadowCount: 0, + relationshipCount: 0, + storeGeneratedCount: 0)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetData()"); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", null); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DataUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DataUnsafeAccessors.cs new file mode 100644 index 00000000..193c8970 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DataUnsafeAccessors.cs @@ -0,0 +1,16 @@ +// +using System; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DataUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] Blob(CompiledModelTestBase.Data @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DbFunctionContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DbFunctionContextAssemblyAttributes.cs new file mode 100644 index 00000000..a248efef --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DbFunctionContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Scaffolding; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(CompiledModelRelationalTestBase.DbFunctionContext), typeof(DbFunctionContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DbFunctionContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DbFunctionContextModel.cs new file mode 100644 index 00000000..8d6f346c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DbFunctionContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(CompiledModelRelationalTestBase.DbFunctionContext))] + public partial class DbFunctionContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbFunctionContextModel() + { + var model = new DbFunctionContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbFunctionContextModel)model.FinalizeModel(); + } + + private static DbFunctionContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DbFunctionContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DbFunctionContextModelBuilder.cs new file mode 100644 index 00000000..3c61e23b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/DbFunctionContextModelBuilder.cs @@ -0,0 +1,321 @@ +// +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbFunctionContextModel + { + private DbFunctionContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 2, typeConfigurationCount: 1) + { + } + + partial void Initialize() + { + var data = DataEntityType.Create(this); + var @object = ObjectEntityType.Create(this); + + DataEntityType.CreateAnnotations(data); + ObjectEntityType.CreateAnnotations(@object); + + var type = this.AddTypeMappingConfiguration( + typeof(string), + maxLength: 256); + type.AddAnnotation("Relational:IsFixedLength", true); + + var functions = new Dictionary(); + var getBlobs = new RuntimeDbFunction( + "GetBlobs()", + this, + typeof(IQueryable), + "GetBlobs"); + + functions["GetBlobs()"] = getBlobs; + + var getCount = new RuntimeDbFunction( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetCount(System.Guid?,string)", + this, + typeof(int), + "CustomerOrderCount", + schema: "dbf", + storeType: "integer", + methodInfo: typeof(CompiledModelRelationalTestBase.DbFunctionContext).GetMethod( + "GetCount", + BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly, + null, + new Type[] { typeof(Guid?), typeof(string) }, + null), + scalar: true); + + var id = getCount.AddParameter( + "id", + typeof(Guid?), + true, + "uniqueidentifier"); + id.TypeMapping = JetGuidTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + keyComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v), + providerValueComparer: new ValueComparer( + bool (Guid v1, Guid v2) => v1 == v2, + int (Guid v) => ((object)v).GetHashCode(), + Guid (Guid v) => v)); + id.AddAnnotation("MyAnnotation", new[] { 1L }); + + var condition = getCount.AddParameter( + "condition", + typeof(string), + false, + "char(256)"); + condition.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "char(256)", + size: 256, + fixedLength: true)); + + getCount.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + functions["Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetCount(System.Guid?,string)"] = getCount; + + var getData = new RuntimeDbFunction( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetData()", + this, + typeof(IQueryable), + "GetAllData", + methodInfo: typeof(CompiledModelRelationalTestBase.DbFunctionContext).GetMethod( + "GetData", + BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, + null, + new Type[] { }, + null)); + + functions["Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetData()"] = getData; + + var getData0 = new RuntimeDbFunction( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetData(int)", + this, + typeof(IQueryable), + "GetData", + methodInfo: typeof(CompiledModelRelationalTestBase.DbFunctionContext).GetMethod( + "GetData", + BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, + null, + new Type[] { typeof(int) }, + null)); + + var id0 = getData0.AddParameter( + "id", + typeof(int), + false, + "integer"); + id0.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + + functions["Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetData(int)"] = getData0; + + var isDateStatic = new RuntimeDbFunction( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.IsDateStatic(string)", + this, + typeof(bool), + "IsDate", + storeType: "smallint", + methodInfo: typeof(CompiledModelRelationalTestBase.DbFunctionContext).GetMethod( + "IsDateStatic", + BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly, + null, + new Type[] { typeof(string) }, + null), + scalar: true, + nullable: true, + builtIn: true); + + var date = isDateStatic.AddParameter( + "date", + typeof(string), + false, + "char(256)"); + date.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "char(256)", + size: 256, + fixedLength: true)); + + isDateStatic.TypeMapping = JetBoolTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v)); + isDateStatic.AddAnnotation("MyGuid", new Guid("00000000-0000-0000-0000-000000000000")); + functions["Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.IsDateStatic(string)"] = isDateStatic; + + AddAnnotation("Relational:DbFunctions", functions); + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + + var data = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data")!; + + var defaultTableMappings = new List>(); + data.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", null, relationalModel); + var blobColumnBase = new ColumnBase("Blob", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.Columns.Add("Blob", blobColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase = new TableMappingBase(data, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase, false); + defaultTableMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)blobColumnBase, data.FindProperty("Blob")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + + var functionMappings = new List(); + data.SetRuntimeAnnotation("Relational:FunctionMappings", functionMappings); + var getAllData = (IRuntimeDbFunction)this.FindDbFunction("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetData()")!; + var getAllDataFunction = new StoreFunction(getAllData, relationalModel); + var blobFunctionColumn = new FunctionColumn("Blob", "longbinary", getAllDataFunction) + { + IsNullable = true + }; + getAllDataFunction.Columns.Add("Blob", blobFunctionColumn); + relationalModel.Functions.Add( + ("GetAllData", null, new string[0]), + getAllDataFunction); + var getAllDataFunctionMapping = new FunctionMapping(data, getAllDataFunction, getAllData, null); + getAllDataFunction.AddTypeMapping(getAllDataFunctionMapping, false); + functionMappings.Add(getAllDataFunctionMapping); + getAllDataFunctionMapping.IsDefaultFunctionMapping = true; + RelationalModel.CreateFunctionColumnMapping(blobFunctionColumn, data.FindProperty("Blob")!, getAllDataFunctionMapping); + var getData = (IRuntimeDbFunction)this.FindDbFunction("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetData(int)")!; + var getDataFunction = new StoreFunction(getData, relationalModel); + var idFunctionParameter = getDataFunction.FindParameter("id")!; + var blobFunctionColumn0 = new FunctionColumn("Blob", "longbinary", getDataFunction) + { + IsNullable = true + }; + getDataFunction.Columns.Add("Blob", blobFunctionColumn0); + relationalModel.Functions.Add( + ("GetData", null, new[] { "integer" }), + getDataFunction); + var getDataFunctionMapping = new FunctionMapping(data, getDataFunction, getData, null); + getDataFunction.AddTypeMapping(getDataFunctionMapping, false); + functionMappings.Add(getDataFunctionMapping); + RelationalModel.CreateFunctionColumnMapping(blobFunctionColumn0, data.FindProperty("Blob")!, getDataFunctionMapping); + + var @object = FindEntityType("object")!; + + var defaultTableMappings0 = new List>(); + @object.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings0); + var objectTableBase = new TableBase("object", null, relationalModel); + relationalModel.DefaultTables.Add("object", objectTableBase); + var objectMappingBase = new TableMappingBase(@object, objectTableBase, null); + objectTableBase.AddTypeMapping(objectMappingBase, false); + defaultTableMappings0.Add(objectMappingBase); + + var functionMappings0 = new List(); + @object.SetRuntimeAnnotation("Relational:FunctionMappings", functionMappings0); + var getBlobs = (IRuntimeDbFunction)this.FindDbFunction("GetBlobs()")!; + var getBlobsFunction = new StoreFunction(getBlobs, relationalModel); + relationalModel.Functions.Add( + ("GetBlobs", null, new string[0]), + getBlobsFunction); + var getBlobsFunctionMapping = new FunctionMapping(@object, getBlobsFunction, getBlobs, null); + getBlobsFunction.AddTypeMapping(getBlobsFunctionMapping, false); + functionMappings0.Add(getBlobsFunctionMapping); + getBlobsFunctionMapping.IsDefaultFunctionMapping = true; + var customerOrderCount = (IRuntimeDbFunction)this.FindDbFunction("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.GetCount(System.Guid?,string)")!; + var customerOrderCountFunction = new StoreFunction(customerOrderCount, relationalModel); + var idFunctionParameter0 = customerOrderCountFunction.FindParameter("id")!; + var conditionFunctionParameter = customerOrderCountFunction.FindParameter("condition")!; + relationalModel.Functions.Add( + ("CustomerOrderCount", "dbf", new[] { "uniqueidentifier", "char(256)" }), + customerOrderCountFunction); + var isDate = (IRuntimeDbFunction)this.FindDbFunction("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase+DbFunctionContext.IsDateStatic(string)")!; + var isDateFunction = new StoreFunction(isDate, relationalModel); + var dateFunctionParameter = isDateFunction.FindParameter("date")!; + relationalModel.Functions.Add( + ("IsDate", null, new[] { "char(256)" }), + isDateFunction); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/ObjectEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/ObjectEntityType.cs new file mode 100644 index 00000000..9b854116 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/DbFunctions/ObjectEntityType.cs @@ -0,0 +1,64 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class ObjectEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "object", + typeof(object), + baseEntityType, + propertyCount: 0); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => Snapshot.Empty); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => Snapshot.Empty); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => Snapshot.Empty); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => Snapshot.Empty); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 0, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 0, + shadowCount: 0, + relationshipCount: 0, + storeGeneratedCount: 0)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", "GetBlobs()"); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", null); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DataEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DataEntityType.cs new file mode 100644 index 00000000..d1482abb --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DataEntityType.cs @@ -0,0 +1,171 @@ +// +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DataEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", + typeof(CompiledModelTestBase.Data), + baseEntityType, + propertyCount: 2, + keyCount: 1); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(int), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0); + id.SetAccessors( + int (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && entry.ReadShadowValue(0) == 0 ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + int (IInternalEntry entry) => entry.ReadShadowValue(0), + int (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + int (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: 0, + relationshipIndex: 0, + storeGenerationIndex: 0); + id.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var blob = runtimeEntityType.AddProperty( + "Blob", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.Data).GetProperty("Blob", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.Data).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + blob.SetGetter( + byte[] (CompiledModelTestBase.Data instance) => DataUnsafeAccessors.Blob(instance), + bool (CompiledModelTestBase.Data instance) => DataUnsafeAccessors.Blob(instance) == null); + blob.SetSetter( + CompiledModelTestBase.Data (CompiledModelTestBase.Data instance, byte[] value) => + { + DataUnsafeAccessors.Blob(instance) = value; + return instance; + }); + blob.SetMaterializationSetter( + CompiledModelTestBase.Data (CompiledModelTestBase.Data instance, byte[] value) => + { + DataUnsafeAccessors.Blob(instance) = value; + return instance; + }); + blob.SetAccessors( + byte[] (IInternalEntry entry) => DataUnsafeAccessors.Blob(((CompiledModelTestBase.Data)(entry.Entity))), + byte[] (IInternalEntry entry) => DataUnsafeAccessors.Blob(((CompiledModelTestBase.Data)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(blob, 1), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(blob)); + blob.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + blob.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var blob = runtimeEntityType.FindProperty("Blob"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNonNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.Data)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id)), (source.GetCurrentValue(blob) == null ? null : ((ValueComparer)(((IProperty)blob).GetValueComparer())).Snapshot(source.GetCurrentValue(blob)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(int)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(int))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("Id") ? ((int)(source["Id"])) : 0))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(int))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.Data)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 2, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 2, + shadowCount: 1, + relationshipCount: 1, + storeGeneratedCount: 1)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "Data"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DataUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DataUnsafeAccessors.cs new file mode 100644 index 00000000..193c8970 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DataUnsafeAccessors.cs @@ -0,0 +1,16 @@ +// +using System; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DataUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] Blob(CompiledModelTestBase.Data @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DbContextModelBuilder.cs new file mode 100644 index 00000000..4642044e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Dynamic_schema/DbContextModelBuilder.cs @@ -0,0 +1,88 @@ +// +using System; +using System.Collections.Generic; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Update.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 1) + { + } + + partial void Initialize() + { + var data = DataEntityType.Create(this); + + DataEntityType.CreateAnnotations(data); + + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + + var data = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data")!; + + var defaultTableMappings = new List>(); + data.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", null, relationalModel); + var blobColumnBase = new ColumnBase("Blob", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.Columns.Add("Blob", blobColumnBase); + var idColumnBase = new ColumnBase("Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.Columns.Add("Id", idColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase = new TableMappingBase(data, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase, false); + defaultTableMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, data.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)blobColumnBase, data.FindProperty("Blob")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + + var tableMappings = new List(); + data.SetRuntimeAnnotation("Relational:TableMappings", tableMappings); + var dataTable = new Table("Data", null, relationalModel); + var idColumn = new Column("Id", "integer", dataTable); + dataTable.Columns.Add("Id", idColumn); + idColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn); + idColumn.AddAnnotation("Jet:Identity", "1, 1"); + var blobColumn = new Column("Blob", "longbinary", dataTable) + { + IsNullable = true + }; + dataTable.Columns.Add("Blob", blobColumn); + blobColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(blobColumn); + relationalModel.Tables.Add(("Data", null), dataTable); + var dataTableMapping = new TableMapping(data, dataTable, null); + dataTable.AddTypeMapping(dataTableMapping, false); + tableMappings.Add(dataTableMapping); + RelationalModel.CreateColumnMapping(idColumn, data.FindProperty("Id")!, dataTableMapping); + RelationalModel.CreateColumnMapping(blobColumn, data.FindProperty("Blob")!, dataTableMapping); + var pK_Data = new UniqueConstraint("PK_Data", dataTable, new[] { idColumn }); + dataTable.PrimaryKey = pK_Data; + pK_Data.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_Data)); + var pK_DataKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", + new[] { "Id" }); + pK_Data.MappedKeys.Add(pK_DataKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_DataKey).Add(pK_Data); + dataTable.UniqueConstraints.Add("PK_Data", pK_Data); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DbContextModelBuilder.cs new file mode 100644 index 00000000..faca8146 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DbContextModelBuilder.cs @@ -0,0 +1,57 @@ +// +using System; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 8) + { + } + + partial void Initialize() + { + var dependentBase = DependentBaseEntityType.Create(this); + var manyTypes = ManyTypesEntityType.Create(this); + var principalBase = PrincipalBaseEntityType.Create(this); + var ownedType = OwnedTypeEntityType.Create(this); + var ownedType0 = OwnedType0EntityType.Create(this); + var principalBasePrincipalDerivedDependentBasebyte = PrincipalBasePrincipalDerivedDependentBasebyteEntityType.Create(this); + var dependentDerived = DependentDerivedEntityType.Create(this, dependentBase); + var principalDerived = PrincipalDerivedEntityType.Create(this, principalBase); + + DependentBaseEntityType.CreateForeignKey1(dependentBase, principalBase); + DependentBaseEntityType.CreateForeignKey2(dependentBase, principalDerived); + OwnedTypeEntityType.CreateForeignKey1(ownedType, principalBase); + OwnedTypeEntityType.CreateForeignKey2(ownedType, ownedType); + OwnedType0EntityType.CreateForeignKey1(ownedType0, principalDerived); + PrincipalBasePrincipalDerivedDependentBasebyteEntityType.CreateForeignKey1(principalBasePrincipalDerivedDependentBasebyte, principalDerived); + PrincipalBasePrincipalDerivedDependentBasebyteEntityType.CreateForeignKey2(principalBasePrincipalDerivedDependentBasebyte, principalBase); + PrincipalDerivedEntityType.CreateForeignKey1(principalDerived, principalBase); + + PrincipalBaseEntityType.CreateSkipNavigation1(principalBase, principalDerived, principalBasePrincipalDerivedDependentBasebyte); + PrincipalDerivedEntityType.CreateSkipNavigation1(principalDerived, principalBase, principalBasePrincipalDerivedDependentBasebyte); + + DependentBaseEntityType.CreateAnnotations(dependentBase); + ManyTypesEntityType.CreateAnnotations(manyTypes); + PrincipalBaseEntityType.CreateAnnotations(principalBase); + OwnedTypeEntityType.CreateAnnotations(ownedType); + OwnedType0EntityType.CreateAnnotations(ownedType0); + PrincipalBasePrincipalDerivedDependentBasebyteEntityType.CreateAnnotations(principalBasePrincipalDerivedDependentBasebyte); + DependentDerivedEntityType.CreateAnnotations(dependentDerived); + PrincipalDerivedEntityType.CreateAnnotations(principalDerived); + + AddAnnotation("Jet:IdentityIncrement", 2); + AddAnnotation("Jet:IdentitySeed", 3); + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DependentBaseEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DependentBaseEntityType.cs new file mode 100644 index 00000000..c6a49c61 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DependentBaseEntityType.cs @@ -0,0 +1,127 @@ +// +using System; +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.ValueGeneration; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DependentBaseEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + typeof(CompiledModelTestBase.DependentBase), + baseEntityType, + discriminatorProperty: "EnumDiscriminator", + discriminatorValue: CompiledModelTestBase.Enum1.One, + derivedTypesCount: 1, + propertyCount: 4, + navigationCount: 1, + foreignKeyCount: 2, + unnamedIndexCount: 1, + keyCount: 1); + + var principalId = runtimeEntityType.AddProperty( + "PrincipalId", + typeof(long), + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + principalId.SetSentinelFromProviderValue(0); + + var principalAlternateId = runtimeEntityType.AddProperty( + "PrincipalAlternateId", + typeof(Guid), + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + + var enumDiscriminator = runtimeEntityType.AddProperty( + "EnumDiscriminator", + typeof(CompiledModelTestBase.Enum1), + afterSaveBehavior: PropertySaveBehavior.Throw, + valueGeneratorFactory: new DiscriminatorValueGeneratorFactory().Create); + enumDiscriminator.SetSentinelFromProviderValue(0); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(byte?), + propertyInfo: typeof(CompiledModelTestBase.DependentBase).GetProperty("Id", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var key = runtimeEntityType.AddKey( + new[] { principalId, principalAlternateId }); + runtimeEntityType.SetPrimaryKey(key); + + var index = runtimeEntityType.AddIndex( + new[] { principalId }, + unique: true); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true); + + return runtimeForeignKey; + } + + public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalId"), declaringEntityType.FindProperty("PrincipalAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.ClientNoAction, + unique: true, + required: true); + + var principal = declaringEntityType.AddNavigation("Principal", + runtimeForeignKey, + onDependent: true, + typeof(CompiledModelTestBase.PrincipalDerived>), + propertyInfo: typeof(CompiledModelTestBase.DependentBase).GetProperty("Principal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var dependent = principalEntityType.AddNavigation("Dependent", + runtimeForeignKey, + onDependent: false, + typeof(CompiledModelTestBase.DependentBase), + propertyInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetProperty("Dependent", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + eagerLoaded: true, + lazyLoadingEnabled: false); + + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + runtimeEntityType.AddAnnotation("DiscriminatorMappingComplete", false); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:MappingStrategy", "TPH"); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "DependentBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DependentDerivedEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DependentDerivedEntityType.cs new file mode 100644 index 00000000..ee41508b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/DependentDerivedEntityType.cs @@ -0,0 +1,60 @@ +// +using System; +using System.Reflection; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DependentDerivedEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived", + typeof(CompiledModelTestBase.DependentDerived), + baseEntityType, + discriminatorProperty: "EnumDiscriminator", + discriminatorValue: CompiledModelTestBase.Enum1.Two, + propertyCount: 2); + + var data = runtimeEntityType.AddProperty( + "Data", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.DependentDerived).GetProperty("Data", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentDerived).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true, + maxLength: 20, + unicode: false); + data.AddAnnotation("Relational:IsFixedLength", true); + + var money = runtimeEntityType.AddProperty( + "Money", + typeof(decimal), + precision: 9, + scale: 3, + sentinel: 0m); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "DependentBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/ManyTypesEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/ManyTypesEntityType.cs new file mode 100644 index 00000000..0616d04f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/ManyTypesEntityType.cs @@ -0,0 +1,1876 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.NetworkInformation; +using System.Reflection; +using System.Text; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class ManyTypesEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+ManyTypes", + typeof(CompiledModelTestBase.ManyTypes), + baseEntityType, + propertyCount: 241, + keyCount: 1); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(CompiledModelTestBase.ManyTypesId), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + valueConverter: new CompiledModelTestBase.ManyTypesIdConverter()); + id.SetSentinelFromProviderValue(0); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var @bool = runtimeEntityType.AddProperty( + "Bool", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Bool", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: false); + + var boolArray = runtimeEntityType.AddProperty( + "BoolArray", + typeof(bool[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var boolArrayElementType = boolArray.SetElementType(typeof(bool)); + + var boolReadOnlyCollection = runtimeEntityType.AddProperty( + "BoolReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_boolReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var boolReadOnlyCollectionElementType = boolReadOnlyCollection.SetElementType(typeof(bool)); + + var boolToStringConverterProperty = runtimeEntityType.AddProperty( + "BoolToStringConverterProperty", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolToStringConverterProperty.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + keyComparer: new ValueComparer( + bool (bool v1, bool v2) => v1 == v2, + int (bool v) => ((object)v).GetHashCode(), + bool (bool v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(1)", + size: 1), + converter: new ValueConverter( + string (bool v) => ((string)((v ? "B" : "A"))), + bool (string v) => !(string.IsNullOrEmpty(v)) && ((int)(v.ToUpperInvariant()[0])) == ((int)("B".ToUpperInvariant()[0]))), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (bool v) => ((string)((v ? "B" : "A"))), + bool (string v) => !(string.IsNullOrEmpty(v)) && ((int)(v.ToUpperInvariant()[0])) == ((int)("B".ToUpperInvariant()[0]))))); + boolToStringConverterProperty.SetSentinelFromProviderValue("A"); + + var boolToTwoValuesConverterProperty = runtimeEntityType.AddProperty( + "BoolToTwoValuesConverterProperty", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolToTwoValuesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + boolToTwoValuesConverterProperty.SetValueConverter(new ValueConverter( + byte (bool v) => ((byte)((v ? 1 : 0))), + bool (byte v) => v == 1)); + boolToTwoValuesConverterProperty.SetSentinelFromProviderValue((byte)0); + + var boolToZeroOneConverterProperty = runtimeEntityType.AddProperty( + "BoolToZeroOneConverterProperty", + typeof(bool), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BoolToZeroOneConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new BoolToZeroOneConverter()); + boolToZeroOneConverterProperty.SetSentinelFromProviderValue((short)0); + + var bytes = runtimeEntityType.AddProperty( + "Bytes", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Bytes", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var bytesArray = runtimeEntityType.AddProperty( + "BytesArray", + typeof(byte[][]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BytesArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var bytesArrayElementType = bytesArray.SetElementType(typeof(byte[])); + + var bytesToStringConverterProperty = runtimeEntityType.AddProperty( + "BytesToStringConverterProperty", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("BytesToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new BytesToStringConverter(), + valueComparer: new ArrayStructuralComparer()); + + var castingConverterProperty = runtimeEntityType.AddProperty( + "CastingConverterProperty", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("CastingConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new CastingConverter()); + castingConverterProperty.SetSentinelFromProviderValue(0m); + + var @char = runtimeEntityType.AddProperty( + "Char", + typeof(char), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Char", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + @char.SetSentinelFromProviderValue("\0"); + + var charArray = runtimeEntityType.AddProperty( + "CharArray", + typeof(char[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("CharArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var charArrayElementType = charArray.SetElementType(typeof(char)); + + var charToStringConverterProperty = runtimeEntityType.AddProperty( + "CharToStringConverterProperty", + typeof(char), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("CharToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new CharToStringConverter()); + charToStringConverterProperty.SetSentinelFromProviderValue("\0"); + charToStringConverterProperty.AddAnnotation("Relational:IsFixedLength", true); + + var dateOnly = runtimeEntityType.AddProperty( + "DateOnly", + typeof(DateOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new DateOnly(1, 1, 1)); + + var dateOnlyArray = runtimeEntityType.AddProperty( + "DateOnlyArray", + typeof(DateOnly[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var dateOnlyArrayElementType = dateOnlyArray.SetElementType(typeof(DateOnly)); + + var dateOnlyToStringConverterProperty = runtimeEntityType.AddProperty( + "DateOnlyToStringConverterProperty", + typeof(DateOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateOnlyToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateOnlyToStringConverter()); + dateOnlyToStringConverterProperty.SetSentinelFromProviderValue("0001-01-01"); + + var dateTime = runtimeEntityType.AddProperty( + "DateTime", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + + var dateTimeArray = runtimeEntityType.AddProperty( + "DateTimeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var dateTimeArrayElementType = dateTimeArray.SetElementType(typeof(DateTime)); + + var dateTimeOffsetToBinaryConverterProperty = runtimeEntityType.AddProperty( + "DateTimeOffsetToBinaryConverterProperty", + typeof(DateTimeOffset), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeOffsetToBinaryConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeOffsetToBinaryConverter()); + dateTimeOffsetToBinaryConverterProperty.SetSentinelFromProviderValue(0L); + + var dateTimeOffsetToBytesConverterProperty = runtimeEntityType.AddProperty( + "DateTimeOffsetToBytesConverterProperty", + typeof(DateTimeOffset), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeOffsetToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeOffsetToBytesConverter()); + dateTimeOffsetToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + + var dateTimeOffsetToStringConverterProperty = runtimeEntityType.AddProperty( + "DateTimeOffsetToStringConverterProperty", + typeof(DateTimeOffset), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeOffsetToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeOffsetToStringConverter()); + dateTimeOffsetToStringConverterProperty.SetSentinelFromProviderValue("0001-01-01 00:00:00+00:00"); + + var dateTimeToBinaryConverterProperty = runtimeEntityType.AddProperty( + "DateTimeToBinaryConverterProperty", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeToBinaryConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeToBinaryConverter()); + dateTimeToBinaryConverterProperty.SetSentinelFromProviderValue(0L); + + var dateTimeToStringConverterProperty = runtimeEntityType.AddProperty( + "DateTimeToStringConverterProperty", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new DateTimeToStringConverter()); + dateTimeToStringConverterProperty.SetSentinelFromProviderValue("0001-01-01 00:00:00"); + + var dateTimeToTicksConverterProperty = runtimeEntityType.AddProperty( + "DateTimeToTicksConverterProperty", + typeof(DateTime), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DateTimeToTicksConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + + var @decimal = runtimeEntityType.AddProperty( + "Decimal", + typeof(decimal), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Decimal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0m); + + var decimalArray = runtimeEntityType.AddProperty( + "DecimalArray", + typeof(decimal[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DecimalArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var decimalArrayElementType = decimalArray.SetElementType(typeof(decimal)); + + var decimalNumberToBytesConverterProperty = runtimeEntityType.AddProperty( + "DecimalNumberToBytesConverterProperty", + typeof(decimal), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DecimalNumberToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToBytesConverter()); + decimalNumberToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + + var decimalNumberToStringConverterProperty = runtimeEntityType.AddProperty( + "DecimalNumberToStringConverterProperty", + typeof(decimal), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DecimalNumberToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToStringConverter()); + decimalNumberToStringConverterProperty.SetSentinelFromProviderValue("0"); + + var @double = runtimeEntityType.AddProperty( + "Double", + typeof(double), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Double", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0.0); + + var doubleArray = runtimeEntityType.AddProperty( + "DoubleArray", + typeof(double[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DoubleArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var doubleArrayElementType = doubleArray.SetElementType(typeof(double)); + + var doubleNumberToBytesConverterProperty = runtimeEntityType.AddProperty( + "DoubleNumberToBytesConverterProperty", + typeof(double), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DoubleNumberToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToBytesConverter()); + doubleNumberToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }); + + var doubleNumberToStringConverterProperty = runtimeEntityType.AddProperty( + "DoubleNumberToStringConverterProperty", + typeof(double), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("DoubleNumberToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToStringConverter()); + doubleNumberToStringConverterProperty.SetSentinelFromProviderValue("0"); + + var enum16 = runtimeEntityType.AddProperty( + "Enum16", + typeof(CompiledModelTestBase.Enum16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum16.SetSentinelFromProviderValue((short)0); + + var enum16Array = runtimeEntityType.AddProperty( + "Enum16Array", + typeof(CompiledModelTestBase.Enum16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum16ArrayElementType = enum16Array.SetElementType(typeof(CompiledModelTestBase.Enum16)); + + var enum16AsString = runtimeEntityType.AddProperty( + "Enum16AsString", + typeof(CompiledModelTestBase.Enum16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum16AsString.SetSentinelFromProviderValue("Default"); + + var enum16AsStringArray = runtimeEntityType.AddProperty( + "Enum16AsStringArray", + typeof(CompiledModelTestBase.Enum16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum16AsStringArrayElementType = enum16AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum16), + providerClrType: typeof(string)); + + var enum16AsStringCollection = runtimeEntityType.AddProperty( + "Enum16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum16AsStringCollectionElementType = enum16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum16), + providerClrType: typeof(string)); + + var enum16Collection = runtimeEntityType.AddProperty( + "Enum16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum16CollectionElementType = enum16Collection.SetElementType(typeof(CompiledModelTestBase.Enum16)); + + var enum32 = runtimeEntityType.AddProperty( + "Enum32", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum32.SetSentinelFromProviderValue(0); + + var enum32Array = runtimeEntityType.AddProperty( + "Enum32Array", + typeof(CompiledModelTestBase.Enum32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum32ArrayElementType = enum32Array.SetElementType(typeof(CompiledModelTestBase.Enum32)); + + var enum32AsString = runtimeEntityType.AddProperty( + "Enum32AsString", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum32AsString.SetSentinelFromProviderValue("Default"); + + var enum32AsStringArray = runtimeEntityType.AddProperty( + "Enum32AsStringArray", + typeof(CompiledModelTestBase.Enum32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum32AsStringArrayElementType = enum32AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum32), + providerClrType: typeof(string)); + + var enum32AsStringCollection = runtimeEntityType.AddProperty( + "Enum32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum32AsStringCollectionElementType = enum32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum32), + providerClrType: typeof(string)); + + var enum32Collection = runtimeEntityType.AddProperty( + "Enum32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum32CollectionElementType = enum32Collection.SetElementType(typeof(CompiledModelTestBase.Enum32)); + + var enum64 = runtimeEntityType.AddProperty( + "Enum64", + typeof(CompiledModelTestBase.Enum64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum64.SetSentinelFromProviderValue(0L); + + var enum64Array = runtimeEntityType.AddProperty( + "Enum64Array", + typeof(CompiledModelTestBase.Enum64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum64ArrayElementType = enum64Array.SetElementType(typeof(CompiledModelTestBase.Enum64)); + + var enum64AsString = runtimeEntityType.AddProperty( + "Enum64AsString", + typeof(CompiledModelTestBase.Enum64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum64AsString.SetSentinelFromProviderValue("Default"); + + var enum64AsStringArray = runtimeEntityType.AddProperty( + "Enum64AsStringArray", + typeof(CompiledModelTestBase.Enum64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum64AsStringArrayElementType = enum64AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum64), + providerClrType: typeof(string)); + + var enum64AsStringCollection = runtimeEntityType.AddProperty( + "Enum64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum64AsStringCollectionElementType = enum64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum64), + providerClrType: typeof(string)); + + var enum64Collection = runtimeEntityType.AddProperty( + "Enum64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum64CollectionElementType = enum64Collection.SetElementType(typeof(CompiledModelTestBase.Enum64)); + + var enum8 = runtimeEntityType.AddProperty( + "Enum8", + typeof(CompiledModelTestBase.Enum8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum8.SetSentinelFromProviderValue((short)0); + + var enum8Array = runtimeEntityType.AddProperty( + "Enum8Array", + typeof(CompiledModelTestBase.Enum8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum8ArrayElementType = enum8Array.SetElementType(typeof(CompiledModelTestBase.Enum8)); + + var enum8AsString = runtimeEntityType.AddProperty( + "Enum8AsString", + typeof(CompiledModelTestBase.Enum8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enum8AsString.SetSentinelFromProviderValue("Default"); + + var enum8AsStringArray = runtimeEntityType.AddProperty( + "Enum8AsStringArray", + typeof(CompiledModelTestBase.Enum8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum8AsStringArrayElementType = enum8AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum8), + providerClrType: typeof(string)); + + var enum8AsStringCollection = runtimeEntityType.AddProperty( + "Enum8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum8AsStringCollectionElementType = enum8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum8), + providerClrType: typeof(string)); + + var enum8Collection = runtimeEntityType.AddProperty( + "Enum8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Enum8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enum8CollectionElementType = enum8Collection.SetElementType(typeof(CompiledModelTestBase.Enum8)); + + var enumToNumberConverterProperty = runtimeEntityType.AddProperty( + "EnumToNumberConverterProperty", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumToNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new EnumToNumberConverter()); + enumToNumberConverterProperty.SetSentinelFromProviderValue(0); + + var enumToStringConverterProperty = runtimeEntityType.AddProperty( + "EnumToStringConverterProperty", + typeof(CompiledModelTestBase.Enum32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new EnumToStringConverter()); + enumToStringConverterProperty.SetSentinelFromProviderValue("Default"); + + var enumU16 = runtimeEntityType.AddProperty( + "EnumU16", + typeof(CompiledModelTestBase.EnumU16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU16.SetSentinelFromProviderValue(0); + + var enumU16Array = runtimeEntityType.AddProperty( + "EnumU16Array", + typeof(CompiledModelTestBase.EnumU16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU16ArrayElementType = enumU16Array.SetElementType(typeof(CompiledModelTestBase.EnumU16)); + + var enumU16AsString = runtimeEntityType.AddProperty( + "EnumU16AsString", + typeof(CompiledModelTestBase.EnumU16), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU16AsString.SetSentinelFromProviderValue("Min"); + + var enumU16AsStringArray = runtimeEntityType.AddProperty( + "EnumU16AsStringArray", + typeof(CompiledModelTestBase.EnumU16[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU16AsStringArrayElementType = enumU16AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU16), + providerClrType: typeof(string)); + + var enumU16AsStringCollection = runtimeEntityType.AddProperty( + "EnumU16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU16AsStringCollectionElementType = enumU16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU16), + providerClrType: typeof(string)); + + var enumU16Collection = runtimeEntityType.AddProperty( + "EnumU16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU16CollectionElementType = enumU16Collection.SetElementType(typeof(CompiledModelTestBase.EnumU16)); + + var enumU32 = runtimeEntityType.AddProperty( + "EnumU32", + typeof(CompiledModelTestBase.EnumU32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU32.SetSentinelFromProviderValue(0L); + + var enumU32Array = runtimeEntityType.AddProperty( + "EnumU32Array", + typeof(CompiledModelTestBase.EnumU32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU32ArrayElementType = enumU32Array.SetElementType(typeof(CompiledModelTestBase.EnumU32)); + + var enumU32AsString = runtimeEntityType.AddProperty( + "EnumU32AsString", + typeof(CompiledModelTestBase.EnumU32), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU32AsString.SetSentinelFromProviderValue("Min"); + + var enumU32AsStringArray = runtimeEntityType.AddProperty( + "EnumU32AsStringArray", + typeof(CompiledModelTestBase.EnumU32[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU32AsStringArrayElementType = enumU32AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU32), + providerClrType: typeof(string)); + + var enumU32AsStringCollection = runtimeEntityType.AddProperty( + "EnumU32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU32AsStringCollectionElementType = enumU32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU32), + providerClrType: typeof(string)); + + var enumU32Collection = runtimeEntityType.AddProperty( + "EnumU32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU32CollectionElementType = enumU32Collection.SetElementType(typeof(CompiledModelTestBase.EnumU32)); + + var enumU64 = runtimeEntityType.AddProperty( + "EnumU64", + typeof(CompiledModelTestBase.EnumU64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU64.SetSentinelFromProviderValue(0m); + + var enumU64Array = runtimeEntityType.AddProperty( + "EnumU64Array", + typeof(CompiledModelTestBase.EnumU64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU64ArrayElementType = enumU64Array.SetElementType(typeof(CompiledModelTestBase.EnumU64)); + + var enumU64AsString = runtimeEntityType.AddProperty( + "EnumU64AsString", + typeof(CompiledModelTestBase.EnumU64), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU64AsString.SetSentinelFromProviderValue("Min"); + + var enumU64AsStringArray = runtimeEntityType.AddProperty( + "EnumU64AsStringArray", + typeof(CompiledModelTestBase.EnumU64[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU64AsStringArrayElementType = enumU64AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU64), + providerClrType: typeof(string)); + + var enumU64AsStringCollection = runtimeEntityType.AddProperty( + "EnumU64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU64AsStringCollectionElementType = enumU64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU64), + providerClrType: typeof(string)); + + var enumU64Collection = runtimeEntityType.AddProperty( + "EnumU64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU64CollectionElementType = enumU64Collection.SetElementType(typeof(CompiledModelTestBase.EnumU64)); + + var enumU8 = runtimeEntityType.AddProperty( + "EnumU8", + typeof(CompiledModelTestBase.EnumU8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enumU8.SetSentinelFromProviderValue((byte)0); + + var enumU8Array = runtimeEntityType.AddProperty( + "EnumU8Array", + typeof(CompiledModelTestBase.EnumU8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU8ArrayElementType = enumU8Array.SetElementType(typeof(CompiledModelTestBase.EnumU8)); + + var enumU8AsString = runtimeEntityType.AddProperty( + "EnumU8AsString", + typeof(CompiledModelTestBase.EnumU8), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + providerPropertyType: typeof(string)); + enumU8AsString.SetSentinelFromProviderValue("Min"); + + var enumU8AsStringArray = runtimeEntityType.AddProperty( + "EnumU8AsStringArray", + typeof(CompiledModelTestBase.EnumU8[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU8AsStringArrayElementType = enumU8AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU8), + providerClrType: typeof(string)); + + var enumU8AsStringCollection = runtimeEntityType.AddProperty( + "EnumU8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU8AsStringCollectionElementType = enumU8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU8), + providerClrType: typeof(string)); + + var enumU8Collection = runtimeEntityType.AddProperty( + "EnumU8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("EnumU8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var enumU8CollectionElementType = enumU8Collection.SetElementType(typeof(CompiledModelTestBase.EnumU8)); + + var @float = runtimeEntityType.AddProperty( + "Float", + typeof(float), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Float", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0f); + + var floatArray = runtimeEntityType.AddProperty( + "FloatArray", + typeof(float[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("FloatArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var floatArrayElementType = floatArray.SetElementType(typeof(float)); + + var guid = runtimeEntityType.AddProperty( + "Guid", + typeof(Guid), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Guid", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + + var guidArray = runtimeEntityType.AddProperty( + "GuidArray", + typeof(Guid[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("GuidArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var guidArrayElementType = guidArray.SetElementType(typeof(Guid)); + + var guidToBytesConverterProperty = runtimeEntityType.AddProperty( + "GuidToBytesConverterProperty", + typeof(Guid), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("GuidToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new GuidToBytesConverter()); + guidToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + + var guidToStringConverterProperty = runtimeEntityType.AddProperty( + "GuidToStringConverterProperty", + typeof(Guid), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("GuidToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new GuidToStringConverter()); + guidToStringConverterProperty.SetSentinelFromProviderValue("00000000-0000-0000-0000-000000000000"); + + var iPAddress = runtimeEntityType.AddProperty( + "IPAddress", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var iPAddressArray = runtimeEntityType.AddProperty( + "IPAddressArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var iPAddressArrayElementType = iPAddressArray.SetElementType(typeof(IPAddress)); + + var iPAddressReadOnlyCollection = runtimeEntityType.AddProperty( + "IPAddressReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_ipAddressReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var iPAddressReadOnlyCollectionElementType = iPAddressReadOnlyCollection.SetElementType(typeof(IPAddress), + providerClrType: typeof(string)); + + var iPAddressToBytesConverterProperty = runtimeEntityType.AddProperty( + "IPAddressToBytesConverterProperty", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new IPAddressToBytesConverter()); + + var iPAddressToStringConverterProperty = runtimeEntityType.AddProperty( + "IPAddressToStringConverterProperty", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IPAddressToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new IPAddressToStringConverter()); + + var int16 = runtimeEntityType.AddProperty( + "Int16", + typeof(short), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: (short)0); + + var int16Array = runtimeEntityType.AddProperty( + "Int16Array", + typeof(short[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var int16ArrayElementType = int16Array.SetElementType(typeof(short)); + + var int32 = runtimeEntityType.AddProperty( + "Int32", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0); + + var int32Array = runtimeEntityType.AddProperty( + "Int32Array", + typeof(int[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var int32ArrayElementType = int32Array.SetElementType(typeof(int)); + + var int32ReadOnlyCollection = runtimeEntityType.AddProperty( + "Int32ReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int32ReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_int32ReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var int32ReadOnlyCollectionElementType = int32ReadOnlyCollection.SetElementType(typeof(int)); + + var int64 = runtimeEntityType.AddProperty( + "Int64", + typeof(long), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0L); + + var int64Array = runtimeEntityType.AddProperty( + "Int64Array", + typeof(long[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var int64ArrayElementType = int64Array.SetElementType(typeof(long)); + + var int8 = runtimeEntityType.AddProperty( + "Int8", + typeof(sbyte), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + int8.SetSentinelFromProviderValue((short)0); + + var int8Array = runtimeEntityType.AddProperty( + "Int8Array", + typeof(sbyte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Int8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var int8ArrayElementType = int8Array.SetElementType(typeof(sbyte)); + + var intNumberToBytesConverterProperty = runtimeEntityType.AddProperty( + "IntNumberToBytesConverterProperty", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IntNumberToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToBytesConverter()); + intNumberToBytesConverterProperty.SetSentinelFromProviderValue(new byte[] { 0, 0, 0, 0 }); + + var intNumberToStringConverterProperty = runtimeEntityType.AddProperty( + "IntNumberToStringConverterProperty", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("IntNumberToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new NumberToStringConverter()); + intNumberToStringConverterProperty.SetSentinelFromProviderValue("0"); + + var nullIntToNullStringConverterProperty = runtimeEntityType.AddProperty( + "NullIntToNullStringConverterProperty", + typeof(int?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullIntToNullStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true, + valueConverter: new CompiledModelTestBase.NullIntToNullStringConverter()); + + var nullableBool = runtimeEntityType.AddProperty( + "NullableBool", + typeof(bool?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBool", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableBoolArray = runtimeEntityType.AddProperty( + "NullableBoolArray", + typeof(bool?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBoolArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableBoolArrayElementType = nullableBoolArray.SetElementType(typeof(bool?), + nullable: true); + + var nullableBytes = runtimeEntityType.AddProperty( + "NullableBytes", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBytes", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableBytesArray = runtimeEntityType.AddProperty( + "NullableBytesArray", + typeof(byte[][]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableBytesArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableBytesArrayElementType = nullableBytesArray.SetElementType(typeof(byte[]), + nullable: true); + + var nullableChar = runtimeEntityType.AddProperty( + "NullableChar", + typeof(char?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableChar", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableCharArray = runtimeEntityType.AddProperty( + "NullableCharArray", + typeof(char?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableCharArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableCharArrayElementType = nullableCharArray.SetElementType(typeof(char?), + nullable: true); + + var nullableDateOnly = runtimeEntityType.AddProperty( + "NullableDateOnly", + typeof(DateOnly?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableDateOnlyArray = runtimeEntityType.AddProperty( + "NullableDateOnlyArray", + typeof(DateOnly?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableDateOnlyArrayElementType = nullableDateOnlyArray.SetElementType(typeof(DateOnly?), + nullable: true); + + var nullableDateTime = runtimeEntityType.AddProperty( + "NullableDateTime", + typeof(DateTime?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateTime", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableDateTimeArray = runtimeEntityType.AddProperty( + "NullableDateTimeArray", + typeof(DateTime?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDateTimeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableDateTimeArrayElementType = nullableDateTimeArray.SetElementType(typeof(DateTime?), + nullable: true); + + var nullableDecimal = runtimeEntityType.AddProperty( + "NullableDecimal", + typeof(decimal?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDecimal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableDecimalArray = runtimeEntityType.AddProperty( + "NullableDecimalArray", + typeof(decimal?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDecimalArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableDecimalArrayElementType = nullableDecimalArray.SetElementType(typeof(decimal?), + nullable: true); + + var nullableDouble = runtimeEntityType.AddProperty( + "NullableDouble", + typeof(double?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDouble", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableDoubleArray = runtimeEntityType.AddProperty( + "NullableDoubleArray", + typeof(double?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableDoubleArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableDoubleArrayElementType = nullableDoubleArray.SetElementType(typeof(double?), + nullable: true); + + var nullableEnum16 = runtimeEntityType.AddProperty( + "NullableEnum16", + typeof(CompiledModelTestBase.Enum16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnum16Array = runtimeEntityType.AddProperty( + "NullableEnum16Array", + typeof(CompiledModelTestBase.Enum16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum16ArrayElementType = nullableEnum16Array.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + + var nullableEnum16AsString = runtimeEntityType.AddProperty( + "NullableEnum16AsString", + typeof(CompiledModelTestBase.Enum16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnum16AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum16AsStringArray", + typeof(CompiledModelTestBase.Enum16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum16AsStringArrayElementType = nullableEnum16AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + + var nullableEnum16AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum16AsStringCollectionElementType = nullableEnum16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + + var nullableEnum16Collection = runtimeEntityType.AddProperty( + "NullableEnum16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum16CollectionElementType = nullableEnum16Collection.SetElementType(typeof(CompiledModelTestBase.Enum16?), + nullable: true); + + var nullableEnum32 = runtimeEntityType.AddProperty( + "NullableEnum32", + typeof(CompiledModelTestBase.Enum32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnum32Array = runtimeEntityType.AddProperty( + "NullableEnum32Array", + typeof(CompiledModelTestBase.Enum32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum32ArrayElementType = nullableEnum32Array.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + + var nullableEnum32AsString = runtimeEntityType.AddProperty( + "NullableEnum32AsString", + typeof(CompiledModelTestBase.Enum32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnum32AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum32AsStringArray", + typeof(CompiledModelTestBase.Enum32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum32AsStringArrayElementType = nullableEnum32AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + + var nullableEnum32AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum32AsStringCollectionElementType = nullableEnum32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + + var nullableEnum32Collection = runtimeEntityType.AddProperty( + "NullableEnum32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum32CollectionElementType = nullableEnum32Collection.SetElementType(typeof(CompiledModelTestBase.Enum32?), + nullable: true); + + var nullableEnum64 = runtimeEntityType.AddProperty( + "NullableEnum64", + typeof(CompiledModelTestBase.Enum64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnum64Array = runtimeEntityType.AddProperty( + "NullableEnum64Array", + typeof(CompiledModelTestBase.Enum64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum64ArrayElementType = nullableEnum64Array.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + + var nullableEnum64AsString = runtimeEntityType.AddProperty( + "NullableEnum64AsString", + typeof(CompiledModelTestBase.Enum64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnum64AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum64AsStringArray", + typeof(CompiledModelTestBase.Enum64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum64AsStringArrayElementType = nullableEnum64AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + + var nullableEnum64AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum64AsStringCollectionElementType = nullableEnum64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + + var nullableEnum64Collection = runtimeEntityType.AddProperty( + "NullableEnum64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum64CollectionElementType = nullableEnum64Collection.SetElementType(typeof(CompiledModelTestBase.Enum64?), + nullable: true); + + var nullableEnum8 = runtimeEntityType.AddProperty( + "NullableEnum8", + typeof(CompiledModelTestBase.Enum8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnum8Array = runtimeEntityType.AddProperty( + "NullableEnum8Array", + typeof(CompiledModelTestBase.Enum8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum8ArrayElementType = nullableEnum8Array.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + + var nullableEnum8AsString = runtimeEntityType.AddProperty( + "NullableEnum8AsString", + typeof(CompiledModelTestBase.Enum8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnum8AsStringArray = runtimeEntityType.AddProperty( + "NullableEnum8AsStringArray", + typeof(CompiledModelTestBase.Enum8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum8AsStringArrayElementType = nullableEnum8AsStringArray.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + + var nullableEnum8AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnum8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum8AsStringCollectionElementType = nullableEnum8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + + var nullableEnum8Collection = runtimeEntityType.AddProperty( + "NullableEnum8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnum8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnum8CollectionElementType = nullableEnum8Collection.SetElementType(typeof(CompiledModelTestBase.Enum8?), + nullable: true); + + var nullableEnumU16 = runtimeEntityType.AddProperty( + "NullableEnumU16", + typeof(CompiledModelTestBase.EnumU16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnumU16Array = runtimeEntityType.AddProperty( + "NullableEnumU16Array", + typeof(CompiledModelTestBase.EnumU16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU16ArrayElementType = nullableEnumU16Array.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + + var nullableEnumU16AsString = runtimeEntityType.AddProperty( + "NullableEnumU16AsString", + typeof(CompiledModelTestBase.EnumU16?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnumU16AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU16AsStringArray", + typeof(CompiledModelTestBase.EnumU16?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU16AsStringArrayElementType = nullableEnumU16AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + + var nullableEnumU16AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU16AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU16AsStringCollectionElementType = nullableEnumU16AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + + var nullableEnumU16Collection = runtimeEntityType.AddProperty( + "NullableEnumU16Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU16Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU16CollectionElementType = nullableEnumU16Collection.SetElementType(typeof(CompiledModelTestBase.EnumU16?), + nullable: true); + + var nullableEnumU32 = runtimeEntityType.AddProperty( + "NullableEnumU32", + typeof(CompiledModelTestBase.EnumU32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnumU32Array = runtimeEntityType.AddProperty( + "NullableEnumU32Array", + typeof(CompiledModelTestBase.EnumU32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU32ArrayElementType = nullableEnumU32Array.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + + var nullableEnumU32AsString = runtimeEntityType.AddProperty( + "NullableEnumU32AsString", + typeof(CompiledModelTestBase.EnumU32?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnumU32AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU32AsStringArray", + typeof(CompiledModelTestBase.EnumU32?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU32AsStringArrayElementType = nullableEnumU32AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + + var nullableEnumU32AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU32AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU32AsStringCollectionElementType = nullableEnumU32AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + + var nullableEnumU32Collection = runtimeEntityType.AddProperty( + "NullableEnumU32Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU32Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU32CollectionElementType = nullableEnumU32Collection.SetElementType(typeof(CompiledModelTestBase.EnumU32?), + nullable: true); + + var nullableEnumU64 = runtimeEntityType.AddProperty( + "NullableEnumU64", + typeof(CompiledModelTestBase.EnumU64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnumU64Array = runtimeEntityType.AddProperty( + "NullableEnumU64Array", + typeof(CompiledModelTestBase.EnumU64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU64ArrayElementType = nullableEnumU64Array.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + + var nullableEnumU64AsString = runtimeEntityType.AddProperty( + "NullableEnumU64AsString", + typeof(CompiledModelTestBase.EnumU64?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnumU64AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU64AsStringArray", + typeof(CompiledModelTestBase.EnumU64?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU64AsStringArrayElementType = nullableEnumU64AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + + var nullableEnumU64AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU64AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU64AsStringCollectionElementType = nullableEnumU64AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + + var nullableEnumU64Collection = runtimeEntityType.AddProperty( + "NullableEnumU64Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU64Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU64CollectionElementType = nullableEnumU64Collection.SetElementType(typeof(CompiledModelTestBase.EnumU64?), + nullable: true); + + var nullableEnumU8 = runtimeEntityType.AddProperty( + "NullableEnumU8", + typeof(CompiledModelTestBase.EnumU8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnumU8Array = runtimeEntityType.AddProperty( + "NullableEnumU8Array", + typeof(CompiledModelTestBase.EnumU8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU8ArrayElementType = nullableEnumU8Array.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + + var nullableEnumU8AsString = runtimeEntityType.AddProperty( + "NullableEnumU8AsString", + typeof(CompiledModelTestBase.EnumU8?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8AsString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableEnumU8AsStringArray = runtimeEntityType.AddProperty( + "NullableEnumU8AsStringArray", + typeof(CompiledModelTestBase.EnumU8?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8AsStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU8AsStringArrayElementType = nullableEnumU8AsStringArray.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + + var nullableEnumU8AsStringCollection = runtimeEntityType.AddProperty( + "NullableEnumU8AsStringCollection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8AsStringCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU8AsStringCollectionElementType = nullableEnumU8AsStringCollection.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + + var nullableEnumU8Collection = runtimeEntityType.AddProperty( + "NullableEnumU8Collection", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableEnumU8Collection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableEnumU8CollectionElementType = nullableEnumU8Collection.SetElementType(typeof(CompiledModelTestBase.EnumU8?), + nullable: true); + + var nullableFloat = runtimeEntityType.AddProperty( + "NullableFloat", + typeof(float?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableFloat", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableFloatArray = runtimeEntityType.AddProperty( + "NullableFloatArray", + typeof(float?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableFloatArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableFloatArrayElementType = nullableFloatArray.SetElementType(typeof(float?), + nullable: true); + + var nullableGuid = runtimeEntityType.AddProperty( + "NullableGuid", + typeof(Guid?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableGuid", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableGuidArray = runtimeEntityType.AddProperty( + "NullableGuidArray", + typeof(Guid?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableGuidArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableGuidArrayElementType = nullableGuidArray.SetElementType(typeof(Guid?), + nullable: true); + + var nullableIPAddress = runtimeEntityType.AddProperty( + "NullableIPAddress", + typeof(IPAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableIPAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableIPAddressArray = runtimeEntityType.AddProperty( + "NullableIPAddressArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableIPAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableIPAddressArrayElementType = nullableIPAddressArray.SetElementType(typeof(IPAddress), + nullable: true); + + var nullableInt16 = runtimeEntityType.AddProperty( + "NullableInt16", + typeof(short?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableInt16Array = runtimeEntityType.AddProperty( + "NullableInt16Array", + typeof(short?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableInt16ArrayElementType = nullableInt16Array.SetElementType(typeof(short?), + nullable: true); + + var nullableInt32 = runtimeEntityType.AddProperty( + "NullableInt32", + typeof(int?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableInt32Array = runtimeEntityType.AddProperty( + "NullableInt32Array", + typeof(int?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableInt32ArrayElementType = nullableInt32Array.SetElementType(typeof(int?), + nullable: true); + + var nullableInt64 = runtimeEntityType.AddProperty( + "NullableInt64", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableInt64Array = runtimeEntityType.AddProperty( + "NullableInt64Array", + typeof(long?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableInt64ArrayElementType = nullableInt64Array.SetElementType(typeof(long?), + nullable: true); + + var nullableInt8 = runtimeEntityType.AddProperty( + "NullableInt8", + typeof(sbyte?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableInt8Array = runtimeEntityType.AddProperty( + "NullableInt8Array", + typeof(sbyte?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableInt8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableInt8ArrayElementType = nullableInt8Array.SetElementType(typeof(sbyte?), + nullable: true); + + var nullablePhysicalAddress = runtimeEntityType.AddProperty( + "NullablePhysicalAddress", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullablePhysicalAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullablePhysicalAddressArray = runtimeEntityType.AddProperty( + "NullablePhysicalAddressArray", + typeof(PhysicalAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullablePhysicalAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullablePhysicalAddressArrayElementType = nullablePhysicalAddressArray.SetElementType(typeof(PhysicalAddress), + nullable: true); + + var nullableString = runtimeEntityType.AddProperty( + "NullableString", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableString", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableStringArray = runtimeEntityType.AddProperty( + "NullableStringArray", + typeof(string[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableStringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableStringArrayElementType = nullableStringArray.SetElementType(typeof(string), + nullable: true); + + var nullableTimeOnly = runtimeEntityType.AddProperty( + "NullableTimeOnly", + typeof(TimeOnly?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableTimeOnlyArray = runtimeEntityType.AddProperty( + "NullableTimeOnlyArray", + typeof(TimeOnly?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableTimeOnlyArrayElementType = nullableTimeOnlyArray.SetElementType(typeof(TimeOnly?), + nullable: true); + + var nullableTimeSpan = runtimeEntityType.AddProperty( + "NullableTimeSpan", + typeof(TimeSpan?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeSpan", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableTimeSpanArray = runtimeEntityType.AddProperty( + "NullableTimeSpanArray", + typeof(TimeSpan?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableTimeSpanArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableTimeSpanArrayElementType = nullableTimeSpanArray.SetElementType(typeof(TimeSpan?), + nullable: true); + + var nullableUInt16 = runtimeEntityType.AddProperty( + "NullableUInt16", + typeof(ushort?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableUInt16Array = runtimeEntityType.AddProperty( + "NullableUInt16Array", + typeof(ushort?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableUInt16ArrayElementType = nullableUInt16Array.SetElementType(typeof(ushort?), + nullable: true); + + var nullableUInt32 = runtimeEntityType.AddProperty( + "NullableUInt32", + typeof(uint?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableUInt32Array = runtimeEntityType.AddProperty( + "NullableUInt32Array", + typeof(uint?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableUInt32ArrayElementType = nullableUInt32Array.SetElementType(typeof(uint?), + nullable: true); + + var nullableUInt64 = runtimeEntityType.AddProperty( + "NullableUInt64", + typeof(ulong?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableUInt64Array = runtimeEntityType.AddProperty( + "NullableUInt64Array", + typeof(ulong?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableUInt64ArrayElementType = nullableUInt64Array.SetElementType(typeof(ulong?), + nullable: true); + + var nullableUInt8 = runtimeEntityType.AddProperty( + "NullableUInt8", + typeof(byte?), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableUInt8Array = runtimeEntityType.AddProperty( + "NullableUInt8Array", + typeof(byte?[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUInt8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableUInt8ArrayElementType = nullableUInt8Array.SetElementType(typeof(byte?), + nullable: true); + + var nullableUri = runtimeEntityType.AddProperty( + "NullableUri", + typeof(Uri), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUri", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var nullableUriArray = runtimeEntityType.AddProperty( + "NullableUriArray", + typeof(Uri[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("NullableUriArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var nullableUriArrayElementType = nullableUriArray.SetElementType(typeof(Uri), + nullable: true); + + var physicalAddress = runtimeEntityType.AddProperty( + "PhysicalAddress", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddress", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var physicalAddressArray = runtimeEntityType.AddProperty( + "PhysicalAddressArray", + typeof(PhysicalAddress[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddressArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var physicalAddressArrayElementType = physicalAddressArray.SetElementType(typeof(PhysicalAddress)); + + var physicalAddressToBytesConverterProperty = runtimeEntityType.AddProperty( + "PhysicalAddressToBytesConverterProperty", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddressToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new PhysicalAddressToBytesConverter()); + + var physicalAddressToStringConverterProperty = runtimeEntityType.AddProperty( + "PhysicalAddressToStringConverterProperty", + typeof(PhysicalAddress), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("PhysicalAddressToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new PhysicalAddressToStringConverter()); + + var @string = runtimeEntityType.AddProperty( + "String", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("String", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var stringArray = runtimeEntityType.AddProperty( + "StringArray", + typeof(string[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var stringArrayElementType = stringArray.SetElementType(typeof(string)); + + var stringReadOnlyCollection = runtimeEntityType.AddProperty( + "StringReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_stringReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var stringReadOnlyCollectionElementType = stringReadOnlyCollection.SetElementType(typeof(string)); + + var stringToBoolConverterProperty = runtimeEntityType.AddProperty( + "StringToBoolConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToBoolConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToBoolConverter()); + + var stringToBytesConverterProperty = runtimeEntityType.AddProperty( + "StringToBytesConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToBytesConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + stringToBytesConverterProperty.SetValueConverter(new ValueConverter( + byte[] (string v) => Encoding.GetEncoding(12000).GetBytes(v), + string (byte[] v) => Encoding.GetEncoding(12000).GetString(v))); + + var stringToCharConverterProperty = runtimeEntityType.AddProperty( + "StringToCharConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToCharConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToCharConverter()); + + var stringToDateOnlyConverterProperty = runtimeEntityType.AddProperty( + "StringToDateOnlyConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDateOnlyConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToDateOnlyConverter()); + + var stringToDateTimeConverterProperty = runtimeEntityType.AddProperty( + "StringToDateTimeConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDateTimeConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToDateTimeConverter()); + + var stringToDateTimeOffsetConverterProperty = runtimeEntityType.AddProperty( + "StringToDateTimeOffsetConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDateTimeOffsetConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToDateTimeOffsetConverter()); + + var stringToDecimalNumberConverterProperty = runtimeEntityType.AddProperty( + "StringToDecimalNumberConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDecimalNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToNumberConverter()); + + var stringToDoubleNumberConverterProperty = runtimeEntityType.AddProperty( + "StringToDoubleNumberConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToDoubleNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToNumberConverter()); + + var stringToEnumConverterProperty = runtimeEntityType.AddProperty( + "StringToEnumConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToEnumConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToEnumConverter()); + + var stringToGuidConverterProperty = runtimeEntityType.AddProperty( + "StringToGuidConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToGuidConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var stringToIntNumberConverterProperty = runtimeEntityType.AddProperty( + "StringToIntNumberConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToIntNumberConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToNumberConverter()); + + var stringToTimeOnlyConverterProperty = runtimeEntityType.AddProperty( + "StringToTimeOnlyConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToTimeOnlyConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToTimeOnlyConverter()); + + var stringToTimeSpanConverterProperty = runtimeEntityType.AddProperty( + "StringToTimeSpanConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToTimeSpanConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToTimeSpanConverter()); + + var stringToUriConverterProperty = runtimeEntityType.AddProperty( + "StringToUriConverterProperty", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("StringToUriConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new StringToUriConverter()); + + var timeOnly = runtimeEntityType.AddProperty( + "TimeOnly", + typeof(TimeOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnly", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new TimeOnly(0, 0, 0)); + + var timeOnlyArray = runtimeEntityType.AddProperty( + "TimeOnlyArray", + typeof(TimeOnly[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnlyArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var timeOnlyArrayElementType = timeOnlyArray.SetElementType(typeof(TimeOnly)); + + var timeOnlyToStringConverterProperty = runtimeEntityType.AddProperty( + "TimeOnlyToStringConverterProperty", + typeof(TimeOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnlyToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeOnlyToStringConverter()); + timeOnlyToStringConverterProperty.SetSentinelFromProviderValue("00:00:00"); + + var timeOnlyToTicksConverterProperty = runtimeEntityType.AddProperty( + "TimeOnlyToTicksConverterProperty", + typeof(TimeOnly), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeOnlyToTicksConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeOnlyToTicksConverter()); + timeOnlyToTicksConverterProperty.SetSentinelFromProviderValue(0L); + + var timeSpan = runtimeEntityType.AddProperty( + "TimeSpan", + typeof(TimeSpan), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpan", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: new TimeSpan(0, 0, 0, 0, 0)); + + var timeSpanArray = runtimeEntityType.AddProperty( + "TimeSpanArray", + typeof(TimeSpan[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpanArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var timeSpanArrayElementType = timeSpanArray.SetElementType(typeof(TimeSpan)); + + var timeSpanToStringConverterProperty = runtimeEntityType.AddProperty( + "TimeSpanToStringConverterProperty", + typeof(TimeSpan), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpanToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeSpanToStringConverter()); + timeSpanToStringConverterProperty.SetSentinelFromProviderValue("00:00:00"); + + var timeSpanToTicksConverterProperty = runtimeEntityType.AddProperty( + "TimeSpanToTicksConverterProperty", + typeof(TimeSpan), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("TimeSpanToTicksConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new TimeSpanToTicksConverter()); + timeSpanToTicksConverterProperty.SetSentinelFromProviderValue(0L); + + var uInt16 = runtimeEntityType.AddProperty( + "UInt16", + typeof(ushort), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt16", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt16.SetSentinelFromProviderValue(0); + + var uInt16Array = runtimeEntityType.AddProperty( + "UInt16Array", + typeof(ushort[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt16Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var uInt16ArrayElementType = uInt16Array.SetElementType(typeof(ushort)); + + var uInt32 = runtimeEntityType.AddProperty( + "UInt32", + typeof(uint), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt32", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt32.SetSentinelFromProviderValue(0L); + + var uInt32Array = runtimeEntityType.AddProperty( + "UInt32Array", + typeof(uint[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt32Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var uInt32ArrayElementType = uInt32Array.SetElementType(typeof(uint)); + + var uInt64 = runtimeEntityType.AddProperty( + "UInt64", + typeof(ulong), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt64", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + uInt64.SetSentinelFromProviderValue(0m); + + var uInt64Array = runtimeEntityType.AddProperty( + "UInt64Array", + typeof(ulong[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt64Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var uInt64ArrayElementType = uInt64Array.SetElementType(typeof(ulong)); + + var uInt8 = runtimeEntityType.AddProperty( + "UInt8", + typeof(byte), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt8", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: (byte)0); + + var uInt8Array = runtimeEntityType.AddProperty( + "UInt8Array", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt8Array", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var uInt8ReadOnlyCollection = runtimeEntityType.AddProperty( + "UInt8ReadOnlyCollection", + typeof(IReadOnlyCollection), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UInt8ReadOnlyCollection", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("_uInt8ReadOnlyCollection", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var uInt8ReadOnlyCollectionElementType = uInt8ReadOnlyCollection.SetElementType(typeof(byte)); + + var uri = runtimeEntityType.AddProperty( + "Uri", + typeof(Uri), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("Uri", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var uriArray = runtimeEntityType.AddProperty( + "UriArray", + typeof(Uri[]), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UriArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + var uriArrayElementType = uriArray.SetElementType(typeof(Uri)); + + var uriToStringConverterProperty = runtimeEntityType.AddProperty( + "UriToStringConverterProperty", + typeof(Uri), + propertyInfo: typeof(CompiledModelTestBase.ManyTypes).GetProperty("UriToStringConverterProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.ManyTypes).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueConverter: new UriToStringConverter()); + + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "ManyTypes"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/OwnedType0EntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/OwnedType0EntityType.cs new file mode 100644 index 00000000..32cbfcb9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/OwnedType0EntityType.cs @@ -0,0 +1,176 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class OwnedType0EntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>.ManyOwned#OwnedType", + typeof(CompiledModelTestBase.OwnedType), + baseEntityType, + sharedClrType: true, + propertyCount: 13, + servicePropertyCount: 1, + foreignKeyCount: 1, + keyCount: 1); + + var principalDerivedId = runtimeEntityType.AddProperty( + "PrincipalDerivedId", + typeof(long), + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + principalDerivedId.SetSentinelFromProviderValue(0); + + var principalDerivedAlternateId = runtimeEntityType.AddProperty( + "PrincipalDerivedAlternateId", + typeof(Guid), + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(int), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var details = runtimeEntityType.AddProperty( + "Details", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_details", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var number = runtimeEntityType.AddProperty( + "Number", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Number", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + sentinel: 0); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeIList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + + var context = runtimeEntityType.AddServiceProperty( + "Context", + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Context", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + serviceType: typeof(DbContext)); + + var key = runtimeEntityType.AddKey( + new[] { principalDerivedId, principalDerivedAlternateId, id }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalDerivedId"), declaringEntityType.FindProperty("PrincipalDerivedAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + required: true, + ownership: true); + + var manyOwned = principalEntityType.AddNavigation("ManyOwned", + runtimeForeignKey, + onDependent: false, + typeof(IList), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("ManyOwned", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + eagerLoaded: true); + + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "ManyOwned"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/OwnedTypeEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/OwnedTypeEntityType.cs new file mode 100644 index 00000000..b34444d8 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/OwnedTypeEntityType.cs @@ -0,0 +1,230 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class OwnedTypeEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase.Owned#OwnedType", + typeof(CompiledModelTestBase.OwnedType), + baseEntityType, + sharedClrType: true, + changeTrackingStrategy: ChangeTrackingStrategy.ChangingAndChangedNotificationsWithOriginalValues, + propertyCount: 12, + servicePropertyCount: 1, + foreignKeyCount: 2, + keyCount: 1); + + var principalBaseId = runtimeEntityType.AddProperty( + "PrincipalBaseId", + typeof(long), + propertyAccessMode: PropertyAccessMode.Field, + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + principalBaseId.SetSentinelFromProviderValue(0); + + var overrides = new StoreObjectDictionary(); + var principalBaseIdPrincipalBase = new RuntimeRelationalPropertyOverrides( + principalBaseId, + StoreObjectIdentifier.Table("PrincipalBase", "mySchema"), + false, + null); + principalBaseIdPrincipalBase.AddAnnotation("Jet:IdentityIncrement", 3); + principalBaseIdPrincipalBase.AddAnnotation("Jet:IdentitySeed", 2); + principalBaseIdPrincipalBase.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + overrides.Add(StoreObjectIdentifier.Table("PrincipalBase", "mySchema"), principalBaseIdPrincipalBase); + principalBaseId.AddAnnotation("Relational:RelationalOverrides", overrides); + + principalBaseId.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var principalBaseAlternateId = runtimeEntityType.AddProperty( + "PrincipalBaseAlternateId", + typeof(Guid), + propertyAccessMode: PropertyAccessMode.Field, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000")); + + var details = runtimeEntityType.AddProperty( + "Details", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Details", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_details", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + + var overrides0 = new StoreObjectDictionary(); + var detailsDetails = new RuntimeRelationalPropertyOverrides( + details, + StoreObjectIdentifier.Table("Details", null), + false, + null); + overrides0.Add(StoreObjectIdentifier.Table("Details", null), detailsDetails); + details.AddAnnotation("Relational:RelationalOverrides", overrides0); + + + var number = runtimeEntityType.AddProperty( + "Number", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Number", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + sentinel: 0); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeIList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_refTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeArray", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeEnumerable", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.OwnedType).GetField("_valueTypeList", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + nullable: true); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + + var context = runtimeEntityType.AddServiceProperty( + "Context", + propertyInfo: typeof(CompiledModelTestBase.OwnedType).GetProperty("Context", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + serviceType: typeof(DbContext)); + + var key = runtimeEntityType.AddKey( + new[] { principalBaseId, principalBaseAlternateId }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalBaseId"), declaringEntityType.FindProperty("PrincipalBaseAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true, + requiredDependent: true, + ownership: true); + + var owned = principalEntityType.AddNavigation("Owned", + runtimeForeignKey, + onDependent: false, + typeof(CompiledModelTestBase.OwnedType), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Owned", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("_ownedField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Field, + eagerLoaded: true); + + return runtimeForeignKey; + } + + public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalBaseId"), declaringEntityType.FindProperty("PrincipalBaseAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("PrincipalBaseId"), principalEntityType.FindProperty("PrincipalBaseAlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true, + requiredDependent: true); + + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var fragments = new StoreObjectDictionary(); + var detailsFragment = new RuntimeEntityTypeMappingFragment( + runtimeEntityType, + StoreObjectIdentifier.Table("Details", null), + null); + fragments.Add(StoreObjectIdentifier.Table("Details", null), detailsFragment); + runtimeEntityType.AddAnnotation("Relational:MappingFragments", fragments); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", "mySchema"); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/PrincipalBaseEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/PrincipalBaseEntityType.cs new file mode 100644 index 00000000..1c28cafd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/PrincipalBaseEntityType.cs @@ -0,0 +1,213 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage.Json; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalBaseEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + typeof(CompiledModelTestBase.PrincipalBase), + baseEntityType, + discriminatorValue: "PrincipalBase", + derivedTypesCount: 1, + propertyCount: 14, + navigationCount: 1, + skipNavigationCount: 1, + unnamedIndexCount: 1, + keyCount: 2); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + + var overrides = new StoreObjectDictionary(); + var idPrincipalDerived = new RuntimeRelationalPropertyOverrides( + id, + StoreObjectIdentifier.Table("PrincipalDerived", null), + true, + "DerivedId"); + overrides.Add(StoreObjectIdentifier.Table("PrincipalDerived", null), idPrincipalDerived); + id.AddAnnotation("Relational:RelationalOverrides", overrides); + + id.AddAnnotation("Jet:IdentityIncrement", 3); + id.AddAnnotation("Jet:IdentitySeed", 2); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var alternateId = runtimeEntityType.AddProperty( + "AlternateId", + typeof(Guid), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("AlternateId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.FieldDuringConstruction, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: new Guid("00000000-0000-0000-0000-000000000000"), + jsonValueReaderWriter: JsonGuidReaderWriter.Instance); + + var enum1 = runtimeEntityType.AddProperty( + "Enum1", + typeof(CompiledModelTestBase.AnEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + enum1.SetSentinelFromProviderValue(0); + + var enum2 = runtimeEntityType.AddProperty( + "Enum2", + typeof(CompiledModelTestBase.AnEnum?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum2", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + + var flagsEnum1 = runtimeEntityType.AddProperty( + "FlagsEnum1", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum1.SetSentinelFromProviderValue(0); + + var flagsEnum2 = runtimeEntityType.AddProperty( + "FlagsEnum2", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum2", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + propertyAccessMode: PropertyAccessMode.Property); + flagsEnum2.SetSentinelFromProviderValue(6); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + + var key = runtimeEntityType.AddKey( + new[] { id }); + + var key0 = runtimeEntityType.AddKey( + new[] { id, alternateId }); + runtimeEntityType.SetPrimaryKey(key0); + key0.AddAnnotation("Relational:Name", "PK"); + + var index = runtimeEntityType.AddIndex( + new[] { alternateId, id }); + + return runtimeEntityType; + } + + public static RuntimeSkipNavigation CreateSkipNavigation1(RuntimeEntityType declaringEntityType, RuntimeEntityType targetEntityType, RuntimeEntityType joinEntityType) + { + var skipNavigation = declaringEntityType.AddSkipNavigation( + "Deriveds", + targetEntityType, + joinEntityType.FindForeignKey( + new[] { joinEntityType.FindProperty("PrincipalsId"), joinEntityType.FindProperty("PrincipalsAlternateId") }, + declaringEntityType.FindKey(new[] { declaringEntityType.FindProperty("Id"), declaringEntityType.FindProperty("AlternateId") }), + declaringEntityType), + true, + false, + typeof(ICollection), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Deriveds", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var inverse = targetEntityType.FindSkipNavigation("Principals"); + if (inverse != null) + { + skipNavigation.Inverse = inverse; + inverse.Inverse = skipNavigation; + } + + return skipNavigation; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:MappingStrategy", "TPT"); + runtimeEntityType.AddAnnotation("Relational:Schema", "mySchema"); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/PrincipalBasePrincipalDerivedDependentBasebyteEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/PrincipalBasePrincipalDerivedDependentBasebyteEntityType.cs new file mode 100644 index 00000000..011b8800 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/PrincipalBasePrincipalDerivedDependentBasebyteEntityType.cs @@ -0,0 +1,114 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalBasePrincipalDerivedDependentBasebyteEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "PrincipalBasePrincipalDerived>", + typeof(Dictionary), + baseEntityType, + sharedClrType: true, + indexerPropertyInfo: RuntimeEntityType.FindIndexerProperty(typeof(Dictionary)), + propertyBag: true, + propertyCount: 5, + foreignKeyCount: 2, + unnamedIndexCount: 1, + keyCount: 1); + + var derivedsId = runtimeEntityType.AddProperty( + "DerivedsId", + typeof(long), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + + var derivedsAlternateId = runtimeEntityType.AddProperty( + "DerivedsAlternateId", + typeof(Guid), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw); + + var principalsId = runtimeEntityType.AddProperty( + "PrincipalsId", + typeof(long), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw, + providerPropertyType: typeof(int)); + + var principalsAlternateId = runtimeEntityType.AddProperty( + "PrincipalsAlternateId", + typeof(Guid), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + afterSaveBehavior: PropertySaveBehavior.Throw); + + var rowid = runtimeEntityType.AddProperty( + "rowid", + typeof(byte[]), + propertyInfo: runtimeEntityType.FindIndexerPropertyInfo(), + nullable: true, + concurrencyToken: true, + valueGenerated: ValueGenerated.OnAddOrUpdate, + beforeSaveBehavior: PropertySaveBehavior.Ignore, + afterSaveBehavior: PropertySaveBehavior.Ignore); + + var key = runtimeEntityType.AddKey( + new[] { derivedsId, derivedsAlternateId, principalsId, principalsAlternateId }); + runtimeEntityType.SetPrimaryKey(key); + + var index = runtimeEntityType.AddIndex( + new[] { principalsId, principalsAlternateId }); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("DerivedsId"), declaringEntityType.FindProperty("DerivedsAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + required: true); + + return runtimeForeignKey; + } + + public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalsId"), declaringEntityType.FindProperty("PrincipalsAlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.ClientCascade, + required: true); + + runtimeForeignKey.AddAnnotation("Relational:Name", "FK_PrincipalBasePrincipalDerived>_Princip~1"); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBasePrincipalDerived>"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/PrincipalDerivedEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/PrincipalDerivedEntityType.cs new file mode 100644 index 00000000..757c5ab1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/No_NativeAOT/PrincipalDerivedEntityType.cs @@ -0,0 +1,84 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalDerivedEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + typeof(CompiledModelTestBase.PrincipalDerived>), + baseEntityType, + discriminatorValue: "PrincipalDerived>", + propertyCount: 0, + navigationCount: 2, + skipNavigationCount: 1, + foreignKeyCount: 1); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("Id"), declaringEntityType.FindProperty("AlternateId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id"), principalEntityType.FindProperty("AlternateId") }), + principalEntityType, + deleteBehavior: DeleteBehavior.Cascade, + unique: true, + required: true); + + return runtimeForeignKey; + } + + public static RuntimeSkipNavigation CreateSkipNavigation1(RuntimeEntityType declaringEntityType, RuntimeEntityType targetEntityType, RuntimeEntityType joinEntityType) + { + var skipNavigation = declaringEntityType.AddSkipNavigation( + "Principals", + targetEntityType, + joinEntityType.FindForeignKey( + new[] { joinEntityType.FindProperty("DerivedsId"), joinEntityType.FindProperty("DerivedsAlternateId") }, + declaringEntityType.FindKey(new[] { declaringEntityType.FindProperty("Id"), declaringEntityType.FindProperty("AlternateId") }), + declaringEntityType), + true, + false, + typeof(ICollection), + propertyInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetProperty("Principals", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + var inverse = targetEntityType.FindSkipNavigation("Deriveds"); + if (inverse != null) + { + skipNavigation.Inverse = inverse; + inverse.Inverse = skipNavigation; + } + + return skipNavigation; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalDerived"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Sequences/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Sequences/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Sequences/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Sequences/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Sequences/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Sequences/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Sequences/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Sequences/DbContextModelBuilder.cs new file mode 100644 index 00000000..a0e11d88 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Sequences/DbContextModelBuilder.cs @@ -0,0 +1,49 @@ +// +using System; +using System.Collections.Generic; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: true, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 0) + { + } + + partial void Initialize() + { + var sequences = new Dictionary<(string, string), ISequence>(); + var @long = new RuntimeSequence( + "Long", + this, + typeof(long), + startValue: -4L, + incrementBy: 2, + cyclic: true, + minValue: -2L, + maxValue: 2L); + + sequences[("Long", null)] = @long; + + AddAnnotation("Relational:Sequences", sequences); + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DbContextModelBuilder.cs new file mode 100644 index 00000000..c00ccf15 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DbContextModelBuilder.cs @@ -0,0 +1,87 @@ +// +using System; +using System.Collections.Generic; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Update.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 1) + { + } + + partial void Initialize() + { + var dependentDerived = DependentDerivedEntityType.Create(this); + + DependentDerivedEntityType.CreateAnnotations(dependentDerived); + + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + + var dependentDerived = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived")!; + + var defaultTableMappings = new List>(); + dependentDerived.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived", null, relationalModel); + var dataColumnBase = new ColumnBase("Data", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintTableBase.Columns.Add("Data", dataColumnBase); + var idColumnBase = new ColumnBase("Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintTableBase.Columns.Add("Id", idColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintMappingBase = new TableMappingBase(dependentDerived, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintMappingBase, false); + defaultTableMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, dependentDerived.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)dataColumnBase, dependentDerived.FindProperty("Data")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentDerivedintMappingBase); + + var tableMappings = new List(); + dependentDerived.SetRuntimeAnnotation("Relational:TableMappings", tableMappings); + var dependentDerivedintTable = new Table("DependentDerived", null, relationalModel); + var idColumn = new Column("Id", "integer", dependentDerivedintTable); + dependentDerivedintTable.Columns.Add("Id", idColumn); + idColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn); + var dataColumn = new Column("Data", "varchar(255)", dependentDerivedintTable) + { + IsNullable = true + }; + dependentDerivedintTable.Columns.Add("Data", dataColumn); + dataColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(dataColumn); + relationalModel.Tables.Add(("DependentDerived", null), dependentDerivedintTable); + var dependentDerivedintTableMapping = new TableMapping(dependentDerived, dependentDerivedintTable, null); + dependentDerivedintTable.AddTypeMapping(dependentDerivedintTableMapping, false); + tableMappings.Add(dependentDerivedintTableMapping); + RelationalModel.CreateColumnMapping(idColumn, dependentDerived.FindProperty("Id")!, dependentDerivedintTableMapping); + RelationalModel.CreateColumnMapping(dataColumn, dependentDerived.FindProperty("Data")!, dependentDerivedintTableMapping); + var pK_DependentDerivedint = new UniqueConstraint("PK_DependentDerived", dependentDerivedintTable, new[] { idColumn }); + dependentDerivedintTable.PrimaryKey = pK_DependentDerivedint; + pK_DependentDerivedint.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_DependentDerivedint)); + var pK_DependentDerivedintKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived", + new[] { "Id" }); + pK_DependentDerivedint.MappedKeys.Add(pK_DependentDerivedintKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_DependentDerivedintKey).Add(pK_DependentDerivedint); + dependentDerivedintTable.UniqueConstraints.Add("PK_DependentDerived", pK_DependentDerivedint); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DependentBaseUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DependentBaseUnsafeAccessors.cs new file mode 100644 index 00000000..ae6e1779 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DependentBaseUnsafeAccessors.cs @@ -0,0 +1,15 @@ +// +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DependentBaseUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TKey Id(CompiledModelTestBase.DependentBase @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DependentDerivedEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DependentDerivedEntityType.cs new file mode 100644 index 00000000..b743cb00 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DependentDerivedEntityType.cs @@ -0,0 +1,183 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DependentDerivedEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentDerived", + typeof(CompiledModelTestBase.DependentDerived), + baseEntityType, + propertyCount: 2, + keyCount: 1); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(int), + propertyInfo: typeof(CompiledModelTestBase.AbstractBase).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0); + id.SetGetter( + int (CompiledModelTestBase.DependentDerived instance) => DependentBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.DependentDerived instance) => DependentBaseUnsafeAccessors.Id(instance) == 0); + id.SetSetter( + CompiledModelTestBase.DependentDerived (CompiledModelTestBase.DependentDerived instance, int value) => + { + DependentBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.DependentDerived (CompiledModelTestBase.DependentDerived instance, int value) => + { + DependentBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + int (IInternalEntry entry) => DependentBaseUnsafeAccessors.Id(((CompiledModelTestBase.DependentDerived)(entry.Entity))), + int (IInternalEntry entry) => DependentBaseUnsafeAccessors.Id(((CompiledModelTestBase.DependentDerived)(entry.Entity))), + int (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + int (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: -1); + id.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + + var data = runtimeEntityType.AddProperty( + "Data", + typeof(string), + propertyInfo: typeof(CompiledModelTestBase.DependentDerived).GetProperty("Data", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentDerived).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + data.SetGetter( + string (CompiledModelTestBase.DependentDerived instance) => DependentDerivedUnsafeAccessors.Data(instance), + bool (CompiledModelTestBase.DependentDerived instance) => DependentDerivedUnsafeAccessors.Data(instance) == null); + data.SetSetter( + CompiledModelTestBase.DependentDerived (CompiledModelTestBase.DependentDerived instance, string value) => + { + DependentDerivedUnsafeAccessors.Data(instance) = value; + return instance; + }); + data.SetMaterializationSetter( + CompiledModelTestBase.DependentDerived (CompiledModelTestBase.DependentDerived instance, string value) => + { + DependentDerivedUnsafeAccessors.Data(instance) = value; + return instance; + }); + data.SetAccessors( + string (IInternalEntry entry) => DependentDerivedUnsafeAccessors.Data(((CompiledModelTestBase.DependentDerived)(entry.Entity))), + string (IInternalEntry entry) => DependentDerivedUnsafeAccessors.Data(((CompiledModelTestBase.DependentDerived)(entry.Entity))), + string (IInternalEntry entry) => entry.ReadOriginalValue(data, 1), + string (IInternalEntry entry) => entry.GetCurrentValue(data)); + data.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + data.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255)); + + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var data = runtimeEntityType.FindProperty("Data"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNonNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.DependentDerived)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id)), (source.GetCurrentValue(data) == null ? null : ((ValueComparer)(((IProperty)data).GetValueComparer())).Snapshot(source.GetCurrentValue(data)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => Snapshot.Empty); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => Snapshot.Empty); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => Snapshot.Empty); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.DependentDerived)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 2, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 2, + shadowCount: 0, + relationshipCount: 1, + storeGeneratedCount: 0)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "DependentDerived"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DependentDerivedUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DependentDerivedUnsafeAccessors.cs new file mode 100644 index 00000000..8847446b --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/SimpleModel/DependentDerivedUnsafeAccessors.cs @@ -0,0 +1,16 @@ +// +using System; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DependentDerivedUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref string Data(CompiledModelTestBase.DependentDerived @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DbContextModelBuilder.cs new file mode 100644 index 00000000..26e83a66 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DbContextModelBuilder.cs @@ -0,0 +1,1124 @@ +// +using System; +using System.Collections.Generic; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Update.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 3) + { + } + + partial void Initialize() + { + var dependentBase = DependentBaseEntityType.Create(this); + var principalBase = PrincipalBaseEntityType.Create(this); + var principalDerived = PrincipalDerivedEntityType.Create(this, principalBase); + + DependentBaseEntityType.CreateForeignKey1(dependentBase, principalDerived); + PrincipalBaseEntityType.CreateForeignKey1(principalBase, principalBase); + PrincipalBaseEntityType.CreateForeignKey2(principalBase, principalDerived); + + DependentBaseEntityType.CreateAnnotations(dependentBase); + PrincipalBaseEntityType.CreateAnnotations(principalBase); + PrincipalDerivedEntityType.CreateAnnotations(principalDerived); + + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:DefaultSchema", "TPC"); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + + var dependentBase = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase")!; + + var defaultTableMappings = new List>(); + dependentBase.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", null, relationalModel); + var idColumnBase = new ColumnBase("Id", "byte", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Id", idColumnBase); + var principalIdColumnBase = new ColumnBase("PrincipalId", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("PrincipalId", principalIdColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase = new TableMappingBase(dependentBase, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase, false); + defaultTableMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, dependentBase.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalIdColumnBase, dependentBase.FindProperty("PrincipalId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + + var tableMappings = new List(); + dependentBase.SetRuntimeAnnotation("Relational:TableMappings", tableMappings); + var dependentBasebyteTable = new Table("DependentBase", "TPC", relationalModel); + var idColumn = new Column("Id", "byte", dependentBasebyteTable); + dependentBasebyteTable.Columns.Add("Id", idColumn); + idColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn); + var principalIdColumn = new Column("PrincipalId", "decimal(20,0)", dependentBasebyteTable) + { + IsNullable = true + }; + dependentBasebyteTable.Columns.Add("PrincipalId", principalIdColumn); + principalIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalIdColumn); + relationalModel.Tables.Add(("DependentBase", "TPC"), dependentBasebyteTable); + var dependentBasebyteTableMapping = new TableMapping(dependentBase, dependentBasebyteTable, null); + dependentBasebyteTable.AddTypeMapping(dependentBasebyteTableMapping, false); + tableMappings.Add(dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(idColumn, dependentBase.FindProperty("Id")!, dependentBasebyteTableMapping); + RelationalModel.CreateColumnMapping(principalIdColumn, dependentBase.FindProperty("PrincipalId")!, dependentBasebyteTableMapping); + var pK_DependentBasebyte = new UniqueConstraint("PK_DependentBase", dependentBasebyteTable, new[] { idColumn }); + dependentBasebyteTable.PrimaryKey = pK_DependentBasebyte; + pK_DependentBasebyte.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_DependentBasebyte)); + var pK_DependentBasebyteKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "Id" }); + pK_DependentBasebyte.MappedKeys.Add(pK_DependentBasebyteKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_DependentBasebyteKey).Add(pK_DependentBasebyte); + dependentBasebyteTable.UniqueConstraints.Add("PK_DependentBase", pK_DependentBasebyte); + var iX_DependentBasebyte_PrincipalId = new TableIndex( + "IX_DependentBase_PrincipalId", dependentBasebyteTable, new[] { principalIdColumn }, true); + iX_DependentBasebyte_PrincipalId.SetRowIndexValueFactory(new SimpleRowIndexValueFactory(iX_DependentBasebyte_PrincipalId)); + var iX_DependentBasebyte_PrincipalIdIx = RelationalModel.GetIndex(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId" }); + iX_DependentBasebyte_PrincipalId.MappedIndexes.Add(iX_DependentBasebyte_PrincipalIdIx); + RelationalModel.GetOrCreateTableIndexes(iX_DependentBasebyte_PrincipalIdIx).Add(iX_DependentBasebyte_PrincipalId); + dependentBasebyteTable.Indexes.Add("IX_DependentBase_PrincipalId", iX_DependentBasebyte_PrincipalId); + + var principalBase = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase")!; + + var defaultTableMappings0 = new List>(); + principalBase.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings0); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", null, relationalModel); + var enum1ColumnBase = new ColumnBase("Enum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Enum1", enum1ColumnBase); + var enum2ColumnBase = new ColumnBase("Enum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Enum2", enum2ColumnBase); + var flagsEnum1ColumnBase = new ColumnBase("FlagsEnum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("FlagsEnum1", flagsEnum1ColumnBase); + var flagsEnum2ColumnBase = new ColumnBase("FlagsEnum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("FlagsEnum2", flagsEnum2ColumnBase); + var idColumnBase0 = new ColumnBase("Id", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("Id", idColumnBase0); + var principalBaseIdColumnBase = new ColumnBase("PrincipalBaseId", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("PrincipalBaseId", principalBaseIdColumnBase); + var principalDerivedDependentBasebyteIdColumnBase = new ColumnBase("PrincipalDerived>Id", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("PrincipalDerived>Id", principalDerivedDependentBasebyteIdColumnBase); + var refTypeArrayColumnBase = new ColumnBase("RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeArray", refTypeArrayColumnBase); + var refTypeEnumerableColumnBase = new ColumnBase("RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumnBase); + var refTypeIListColumnBase = new ColumnBase("RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeIList", refTypeIListColumnBase); + var refTypeListColumnBase = new ColumnBase("RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("RefTypeList", refTypeListColumnBase); + var valueTypeArrayColumnBase = new ColumnBase("ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeArray", valueTypeArrayColumnBase); + var valueTypeEnumerableColumnBase = new ColumnBase("ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumnBase); + var valueTypeIListColumnBase = new ColumnBase("ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeIList", valueTypeIListColumnBase); + var valueTypeListColumnBase = new ColumnBase("ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.Columns.Add("ValueTypeList", valueTypeListColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase = new TableMappingBase(principalBase, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase, false); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase, false); + defaultTableMappings0.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase0, principalBase.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum1ColumnBase, principalBase.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum2ColumnBase, principalBase.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum1ColumnBase, principalBase.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum2ColumnBase, principalBase.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalBaseIdColumnBase, principalBase.FindProperty("PrincipalBaseId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalDerivedDependentBasebyteIdColumnBase, principalBase.FindProperty("PrincipalDerivedId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase, principalBase.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase, principalBase.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase, principalBase.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase, principalBase.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase, principalBase.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase, principalBase.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase, principalBase.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase, principalBase.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalBaseMappingBase); + + var tableMappings0 = new List(); + principalBase.SetRuntimeAnnotation("Relational:TableMappings", tableMappings0); + var principalBaseTable = new Table("PrincipalBase", "TPC", relationalModel); + var idColumn0 = new Column("Id", "decimal(20,0)", principalBaseTable); + principalBaseTable.Columns.Add("Id", idColumn0); + idColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn0); + var enum1Column = new Column("Enum1", "integer", principalBaseTable); + principalBaseTable.Columns.Add("Enum1", enum1Column); + enum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum1Column); + var enum2Column = new Column("Enum2", "integer", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("Enum2", enum2Column); + enum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(enum2Column); + var flagsEnum1Column = new Column("FlagsEnum1", "integer", principalBaseTable); + principalBaseTable.Columns.Add("FlagsEnum1", flagsEnum1Column); + flagsEnum1Column.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum1Column); + var flagsEnum2Column = new Column("FlagsEnum2", "integer", principalBaseTable); + principalBaseTable.Columns.Add("FlagsEnum2", flagsEnum2Column); + flagsEnum2Column.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum2Column); + var principalBaseIdColumn = new Column("PrincipalBaseId", "decimal(20,0)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("PrincipalBaseId", principalBaseIdColumn); + principalBaseIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalBaseIdColumn); + var principalDerivedDependentBasebyteIdColumn = new Column("PrincipalDerived>Id", "decimal(20,0)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("PrincipalDerived>Id", principalDerivedDependentBasebyteIdColumn); + principalDerivedDependentBasebyteIdColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(principalDerivedDependentBasebyteIdColumn); + var refTypeArrayColumn = new Column("RefTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeArray", refTypeArrayColumn); + refTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeArrayColumn); + var refTypeEnumerableColumn = new Column("RefTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumn); + refTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeEnumerableColumn); + var refTypeIListColumn = new Column("RefTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeIList", refTypeIListColumn); + refTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeIListColumn); + var refTypeListColumn = new Column("RefTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("RefTypeList", refTypeListColumn); + refTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeListColumn); + var valueTypeArrayColumn = new Column("ValueTypeArray", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeArray", valueTypeArrayColumn); + valueTypeArrayColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeArrayColumn); + var valueTypeEnumerableColumn = new Column("ValueTypeEnumerable", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumn); + valueTypeEnumerableColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeEnumerableColumn); + var valueTypeIListColumn = new Column("ValueTypeIList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeIList", valueTypeIListColumn); + valueTypeIListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeIListColumn); + var valueTypeListColumn = new Column("ValueTypeList", "varchar(255)", principalBaseTable) + { + IsNullable = true + }; + principalBaseTable.Columns.Add("ValueTypeList", valueTypeListColumn); + valueTypeListColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeListColumn); + relationalModel.Tables.Add(("PrincipalBase", "TPC"), principalBaseTable); + var principalBaseTableMapping = new TableMapping(principalBase, principalBaseTable, false); + principalBaseTable.AddTypeMapping(principalBaseTableMapping, false); + tableMappings0.Add(principalBaseTableMapping); + RelationalModel.CreateColumnMapping(idColumn0, principalBase.FindProperty("Id")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(enum1Column, principalBase.FindProperty("Enum1")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(enum2Column, principalBase.FindProperty("Enum2")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum1Column, principalBase.FindProperty("FlagsEnum1")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum2Column, principalBase.FindProperty("FlagsEnum2")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(principalBaseIdColumn, principalBase.FindProperty("PrincipalBaseId")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(principalDerivedDependentBasebyteIdColumn, principalBase.FindProperty("PrincipalDerivedId")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeArrayColumn, principalBase.FindProperty("RefTypeArray")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeEnumerableColumn, principalBase.FindProperty("RefTypeEnumerable")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeIListColumn, principalBase.FindProperty("RefTypeIList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(refTypeListColumn, principalBase.FindProperty("RefTypeList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeArrayColumn, principalBase.FindProperty("ValueTypeArray")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeEnumerableColumn, principalBase.FindProperty("ValueTypeEnumerable")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeIListColumn, principalBase.FindProperty("ValueTypeIList")!, principalBaseTableMapping); + RelationalModel.CreateColumnMapping(valueTypeListColumn, principalBase.FindProperty("ValueTypeList")!, principalBaseTableMapping); + var pK_PrincipalBase = new UniqueConstraint("PK_PrincipalBase", principalBaseTable, new[] { idColumn0 }); + principalBaseTable.PrimaryKey = pK_PrincipalBase; + pK_PrincipalBase.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_PrincipalBase)); + var pK_PrincipalBaseKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "Id" }); + pK_PrincipalBase.MappedKeys.Add(pK_PrincipalBaseKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_PrincipalBaseKey).Add(pK_PrincipalBase); + principalBaseTable.UniqueConstraints.Add("PK_PrincipalBase", pK_PrincipalBase); + var iX_PrincipalBase_PrincipalDerivedDependentBasebyteId = new TableIndex( + "IX_PrincipalBase_PrincipalDerived>Id", principalBaseTable, new[] { principalDerivedDependentBasebyteIdColumn }, false); + iX_PrincipalBase_PrincipalDerivedDependentBasebyteId.SetRowIndexValueFactory(new SimpleRowIndexValueFactory(iX_PrincipalBase_PrincipalDerivedDependentBasebyteId)); + var iX_PrincipalBase_PrincipalDerivedDependentBasebyteIdIx = RelationalModel.GetIndex(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "PrincipalDerivedId" }); + iX_PrincipalBase_PrincipalDerivedDependentBasebyteId.MappedIndexes.Add(iX_PrincipalBase_PrincipalDerivedDependentBasebyteIdIx); + RelationalModel.GetOrCreateTableIndexes(iX_PrincipalBase_PrincipalDerivedDependentBasebyteIdIx).Add(iX_PrincipalBase_PrincipalDerivedDependentBasebyteId); + principalBaseTable.Indexes.Add("IX_PrincipalBase_PrincipalDerived>Id", iX_PrincipalBase_PrincipalDerivedDependentBasebyteId); + var pIX = new TableIndex( + "PIX", principalBaseTable, new[] { principalBaseIdColumn }, true); + pIX.SetRowIndexValueFactory(new SimpleRowIndexValueFactory(pIX)); + var pIXIx = RelationalModel.GetIndex(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + "PrincipalIndex"); + pIX.MappedIndexes.Add(pIXIx); + RelationalModel.GetOrCreateTableIndexes(pIXIx).Add(pIX); + principalBaseTable.Indexes.Add("PIX", pIX); + + var viewMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:ViewMappings", viewMappings); + var principalBaseViewView = new View("PrincipalBaseView", "TPC", relationalModel); + var enum1ViewColumn = new ViewColumn("Enum1", "integer", principalBaseViewView); + principalBaseViewView.Columns.Add("Enum1", enum1ViewColumn); + var enum2ViewColumn = new ViewColumn("Enum2", "integer", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("Enum2", enum2ViewColumn); + var flagsEnum1ViewColumn = new ViewColumn("FlagsEnum1", "integer", principalBaseViewView); + principalBaseViewView.Columns.Add("FlagsEnum1", flagsEnum1ViewColumn); + var flagsEnum2ViewColumn = new ViewColumn("FlagsEnum2", "integer", principalBaseViewView); + principalBaseViewView.Columns.Add("FlagsEnum2", flagsEnum2ViewColumn); + var idViewColumn = new ViewColumn("Id", "decimal(20,0)", principalBaseViewView); + principalBaseViewView.Columns.Add("Id", idViewColumn); + var principalBaseIdViewColumn = new ViewColumn("PrincipalBaseId", "decimal(20,0)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("PrincipalBaseId", principalBaseIdViewColumn); + var principalDerivedIdViewColumn = new ViewColumn("PrincipalDerivedId", "decimal(20,0)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("PrincipalDerivedId", principalDerivedIdViewColumn); + var refTypeArrayViewColumn = new ViewColumn("RefTypeArray", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("RefTypeArray", refTypeArrayViewColumn); + var refTypeEnumerableViewColumn = new ViewColumn("RefTypeEnumerable", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("RefTypeEnumerable", refTypeEnumerableViewColumn); + var refTypeIListViewColumn = new ViewColumn("RefTypeIList", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("RefTypeIList", refTypeIListViewColumn); + var refTypeListViewColumn = new ViewColumn("RefTypeList", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("RefTypeList", refTypeListViewColumn); + var valueTypeArrayViewColumn = new ViewColumn("ValueTypeArray", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("ValueTypeArray", valueTypeArrayViewColumn); + var valueTypeEnumerableViewColumn = new ViewColumn("ValueTypeEnumerable", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableViewColumn); + var valueTypeIListViewColumn = new ViewColumn("ValueTypeIList", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("ValueTypeIList", valueTypeIListViewColumn); + var valueTypeListViewColumn = new ViewColumn("ValueTypeList", "varchar(255)", principalBaseViewView) + { + IsNullable = true + }; + principalBaseViewView.Columns.Add("ValueTypeList", valueTypeListViewColumn); + relationalModel.Views.Add(("PrincipalBaseView", "TPC"), principalBaseViewView); + var principalBaseViewViewMapping = new ViewMapping(principalBase, principalBaseViewView, false); + principalBaseViewView.AddTypeMapping(principalBaseViewViewMapping, false); + viewMappings.Add(principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(idViewColumn, principalBase.FindProperty("Id")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(enum1ViewColumn, principalBase.FindProperty("Enum1")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(enum2ViewColumn, principalBase.FindProperty("Enum2")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(flagsEnum1ViewColumn, principalBase.FindProperty("FlagsEnum1")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(flagsEnum2ViewColumn, principalBase.FindProperty("FlagsEnum2")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(principalBaseIdViewColumn, principalBase.FindProperty("PrincipalBaseId")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(principalDerivedIdViewColumn, principalBase.FindProperty("PrincipalDerivedId")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeArrayViewColumn, principalBase.FindProperty("RefTypeArray")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeEnumerableViewColumn, principalBase.FindProperty("RefTypeEnumerable")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeIListViewColumn, principalBase.FindProperty("RefTypeIList")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeListViewColumn, principalBase.FindProperty("RefTypeList")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeArrayViewColumn, principalBase.FindProperty("ValueTypeArray")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeEnumerableViewColumn, principalBase.FindProperty("ValueTypeEnumerable")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeIListViewColumn, principalBase.FindProperty("ValueTypeIList")!, principalBaseViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeListViewColumn, principalBase.FindProperty("ValueTypeList")!, principalBaseViewViewMapping); + + var deleteSprocMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:DeleteStoredProcedureMappings", deleteSprocMappings); + var principalBase_DeleteStoreSproc = new StoreStoredProcedure("PrincipalBase_Delete", "TPC", relationalModel); + var id_OriginalParameter = new StoreStoredProcedureParameter("Id_Original", "decimal(20,0)", 0, principalBase_DeleteStoreSproc, System.Data.ParameterDirection.Input); + principalBase_DeleteStoreSproc.AddParameter(id_OriginalParameter); + var rowsAffectedParameter = new StoreStoredProcedureParameter("RowsAffected", "integer", 1, principalBase_DeleteStoreSproc, System.Data.ParameterDirection.Output); + principalBase_DeleteStoreSproc.AddParameter(rowsAffectedParameter); + principalBase_DeleteStoreSproc.AddStoredProcedure((IRuntimeStoredProcedure)principalBase.GetDeleteStoredProcedure()!); + relationalModel.StoredProcedures.Add(("PrincipalBase_Delete", "TPC"), principalBase_DeleteStoreSproc); + var principalBase_DeleteDSproc = (IRuntimeStoredProcedure)principalBase.GetDeleteStoredProcedure()!; + var principalBase_DeleteSprocMapping = new StoredProcedureMapping(principalBase, principalBase_DeleteStoreSproc, principalBase_DeleteDSproc, principalBaseTableMapping, false); + principalBase_DeleteStoreSproc.AddTypeMapping(principalBase_DeleteSprocMapping, false); + deleteSprocMappings.Add(principalBase_DeleteSprocMapping); + principalBaseTableMapping.DeleteStoredProcedureMapping = principalBase_DeleteSprocMapping; + RelationalModel.CreateStoredProcedureParameterMapping(id_OriginalParameter, principalBase_DeleteDSproc.FindParameter("Id_Original")!, principalBase.FindProperty("Id")!, principalBase_DeleteSprocMapping); + + var insertSprocMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:InsertStoredProcedureMappings", insertSprocMappings); + var principalBase_InsertStoreSproc = new StoreStoredProcedure("PrincipalBase_Insert", "TPC", relationalModel); + var idParameter = new StoreStoredProcedureParameter("Id", "decimal(20,0)", 0, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input); + principalBase_InsertStoreSproc.AddParameter(idParameter); + var principalBaseIdParameter = new StoreStoredProcedureParameter("PrincipalBaseId", "decimal(20,0)", 1, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(principalBaseIdParameter); + var principalDerivedIdParameter = new StoreStoredProcedureParameter("PrincipalDerivedId", "decimal(20,0)", 2, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(principalDerivedIdParameter); + var enum2Parameter = new StoreStoredProcedureParameter("Enum2", "integer", 3, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(enum2Parameter); + var flagsEnum1Parameter = new StoreStoredProcedureParameter("FlagsEnum1", "integer", 4, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input); + principalBase_InsertStoreSproc.AddParameter(flagsEnum1Parameter); + var flagsEnum2Parameter = new StoreStoredProcedureParameter("FlagsEnum2", "integer", 5, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input); + principalBase_InsertStoreSproc.AddParameter(flagsEnum2Parameter); + var valueTypeListParameter = new StoreStoredProcedureParameter("ValueTypeList", "varchar(255)", 6, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(valueTypeListParameter); + var valueTypeIListParameter = new StoreStoredProcedureParameter("ValueTypeIList", "varchar(255)", 7, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(valueTypeIListParameter); + var valueTypeArrayParameter = new StoreStoredProcedureParameter("ValueTypeArray", "varchar(255)", 8, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(valueTypeArrayParameter); + var valueTypeEnumerableParameter = new StoreStoredProcedureParameter("ValueTypeEnumerable", "varchar(255)", 9, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(valueTypeEnumerableParameter); + var refTypeListParameter = new StoreStoredProcedureParameter("RefTypeList", "varchar(255)", 10, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(refTypeListParameter); + var refTypeIListParameter = new StoreStoredProcedureParameter("RefTypeIList", "varchar(255)", 11, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(refTypeIListParameter); + var refTypeArrayParameter = new StoreStoredProcedureParameter("RefTypeArray", "varchar(255)", 12, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(refTypeArrayParameter); + var refTypeEnumerableParameter = new StoreStoredProcedureParameter("RefTypeEnumerable", "varchar(255)", 13, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_InsertStoreSproc.AddParameter(refTypeEnumerableParameter); + var baseEnumParameter = new StoreStoredProcedureParameter("BaseEnum", "integer", 14, principalBase_InsertStoreSproc, System.Data.ParameterDirection.Output); + principalBase_InsertStoreSproc.AddParameter(baseEnumParameter); + principalBase_InsertStoreSproc.AddStoredProcedure((IRuntimeStoredProcedure)principalBase.GetInsertStoredProcedure()!); + relationalModel.StoredProcedures.Add(("PrincipalBase_Insert", "TPC"), principalBase_InsertStoreSproc); + var principalBase_InsertISproc = (IRuntimeStoredProcedure)principalBase.GetInsertStoredProcedure()!; + var principalBase_InsertSprocMapping = new StoredProcedureMapping(principalBase, principalBase_InsertStoreSproc, principalBase_InsertISproc, principalBaseTableMapping, false); + principalBase_InsertStoreSproc.AddTypeMapping(principalBase_InsertSprocMapping, false); + insertSprocMappings.Add(principalBase_InsertSprocMapping); + principalBaseTableMapping.InsertStoredProcedureMapping = principalBase_InsertSprocMapping; + RelationalModel.CreateStoredProcedureParameterMapping(idParameter, principalBase_InsertISproc.FindParameter("Id")!, principalBase.FindProperty("Id")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(baseEnumParameter, principalBase_InsertISproc.FindParameter("BaseEnum")!, principalBase.FindProperty("Enum1")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum2Parameter, principalBase_InsertISproc.FindParameter("Enum2")!, principalBase.FindProperty("Enum2")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum1Parameter, principalBase_InsertISproc.FindParameter("FlagsEnum1")!, principalBase.FindProperty("FlagsEnum1")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum2Parameter, principalBase_InsertISproc.FindParameter("FlagsEnum2")!, principalBase.FindProperty("FlagsEnum2")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalBaseIdParameter, principalBase_InsertISproc.FindParameter("PrincipalBaseId")!, principalBase.FindProperty("PrincipalBaseId")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalDerivedIdParameter, principalBase_InsertISproc.FindParameter("PrincipalDerivedId")!, principalBase.FindProperty("PrincipalDerivedId")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeArrayParameter, principalBase_InsertISproc.FindParameter("RefTypeArray")!, principalBase.FindProperty("RefTypeArray")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeEnumerableParameter, principalBase_InsertISproc.FindParameter("RefTypeEnumerable")!, principalBase.FindProperty("RefTypeEnumerable")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeIListParameter, principalBase_InsertISproc.FindParameter("RefTypeIList")!, principalBase.FindProperty("RefTypeIList")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeListParameter, principalBase_InsertISproc.FindParameter("RefTypeList")!, principalBase.FindProperty("RefTypeList")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeArrayParameter, principalBase_InsertISproc.FindParameter("ValueTypeArray")!, principalBase.FindProperty("ValueTypeArray")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeEnumerableParameter, principalBase_InsertISproc.FindParameter("ValueTypeEnumerable")!, principalBase.FindProperty("ValueTypeEnumerable")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeIListParameter, principalBase_InsertISproc.FindParameter("ValueTypeIList")!, principalBase.FindProperty("ValueTypeIList")!, principalBase_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeListParameter, principalBase_InsertISproc.FindParameter("ValueTypeList")!, principalBase.FindProperty("ValueTypeList")!, principalBase_InsertSprocMapping); + + var updateSprocMappings = new List(); + principalBase.SetRuntimeAnnotation("Relational:UpdateStoredProcedureMappings", updateSprocMappings); + var principalBase_UpdateStoreSproc = new StoreStoredProcedure("PrincipalBase_Update", "TPC", relationalModel); + var principalBaseIdParameter0 = new StoreStoredProcedureParameter("PrincipalBaseId", "decimal(20,0)", 0, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(principalBaseIdParameter0); + var principalDerivedIdParameter0 = new StoreStoredProcedureParameter("PrincipalDerivedId", "decimal(20,0)", 1, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(principalDerivedIdParameter0); + var enum1Parameter = new StoreStoredProcedureParameter("Enum1", "integer", 2, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input); + principalBase_UpdateStoreSproc.AddParameter(enum1Parameter); + var enum2Parameter0 = new StoreStoredProcedureParameter("Enum2", "integer", 3, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(enum2Parameter0); + var flagsEnum1Parameter0 = new StoreStoredProcedureParameter("FlagsEnum1", "integer", 4, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input); + principalBase_UpdateStoreSproc.AddParameter(flagsEnum1Parameter0); + var flagsEnum2Parameter0 = new StoreStoredProcedureParameter("FlagsEnum2", "integer", 5, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input); + principalBase_UpdateStoreSproc.AddParameter(flagsEnum2Parameter0); + var valueTypeListParameter0 = new StoreStoredProcedureParameter("ValueTypeList", "varchar(255)", 6, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(valueTypeListParameter0); + var valueTypeIListParameter0 = new StoreStoredProcedureParameter("ValueTypeIList", "varchar(255)", 7, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(valueTypeIListParameter0); + var valueTypeArrayParameter0 = new StoreStoredProcedureParameter("ValueTypeArray", "varchar(255)", 8, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(valueTypeArrayParameter0); + var valueTypeEnumerableParameter0 = new StoreStoredProcedureParameter("ValueTypeEnumerable", "varchar(255)", 9, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(valueTypeEnumerableParameter0); + var refTypeListParameter0 = new StoreStoredProcedureParameter("RefTypeList", "varchar(255)", 10, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(refTypeListParameter0); + var refTypeIListParameter0 = new StoreStoredProcedureParameter("RefTypeIList", "varchar(255)", 11, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(refTypeIListParameter0); + var refTypeArrayParameter0 = new StoreStoredProcedureParameter("RefTypeArray", "varchar(255)", 12, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(refTypeArrayParameter0); + var refTypeEnumerableParameter0 = new StoreStoredProcedureParameter("RefTypeEnumerable", "varchar(255)", 13, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + principalBase_UpdateStoreSproc.AddParameter(refTypeEnumerableParameter0); + var id_OriginalParameter0 = new StoreStoredProcedureParameter("Id_Original", "decimal(20,0)", 14, principalBase_UpdateStoreSproc, System.Data.ParameterDirection.Input); + principalBase_UpdateStoreSproc.AddParameter(id_OriginalParameter0); + principalBase_UpdateStoreSproc.AddStoredProcedure((IRuntimeStoredProcedure)principalBase.GetUpdateStoredProcedure()!); + relationalModel.StoredProcedures.Add(("PrincipalBase_Update", "TPC"), principalBase_UpdateStoreSproc); + var principalBase_UpdateUSproc = (IRuntimeStoredProcedure)principalBase.GetUpdateStoredProcedure()!; + var principalBase_UpdateSprocMapping = new StoredProcedureMapping(principalBase, principalBase_UpdateStoreSproc, principalBase_UpdateUSproc, principalBaseTableMapping, false); + principalBase_UpdateStoreSproc.AddTypeMapping(principalBase_UpdateSprocMapping, false); + updateSprocMappings.Add(principalBase_UpdateSprocMapping); + principalBaseTableMapping.UpdateStoredProcedureMapping = principalBase_UpdateSprocMapping; + RelationalModel.CreateStoredProcedureParameterMapping(id_OriginalParameter0, principalBase_UpdateUSproc.FindParameter("Id_Original")!, principalBase.FindProperty("Id")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum1Parameter, principalBase_UpdateUSproc.FindParameter("Enum1")!, principalBase.FindProperty("Enum1")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum2Parameter0, principalBase_UpdateUSproc.FindParameter("Enum2")!, principalBase.FindProperty("Enum2")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum1Parameter0, principalBase_UpdateUSproc.FindParameter("FlagsEnum1")!, principalBase.FindProperty("FlagsEnum1")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum2Parameter0, principalBase_UpdateUSproc.FindParameter("FlagsEnum2")!, principalBase.FindProperty("FlagsEnum2")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalBaseIdParameter0, principalBase_UpdateUSproc.FindParameter("PrincipalBaseId")!, principalBase.FindProperty("PrincipalBaseId")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalDerivedIdParameter0, principalBase_UpdateUSproc.FindParameter("PrincipalDerivedId")!, principalBase.FindProperty("PrincipalDerivedId")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeArrayParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeArray")!, principalBase.FindProperty("RefTypeArray")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeEnumerableParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeEnumerable")!, principalBase.FindProperty("RefTypeEnumerable")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeIListParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeIList")!, principalBase.FindProperty("RefTypeIList")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeListParameter0, principalBase_UpdateUSproc.FindParameter("RefTypeList")!, principalBase.FindProperty("RefTypeList")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeArrayParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeArray")!, principalBase.FindProperty("ValueTypeArray")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeEnumerableParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeEnumerable")!, principalBase.FindProperty("ValueTypeEnumerable")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeIListParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeIList")!, principalBase.FindProperty("ValueTypeIList")!, principalBase_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeListParameter0, principalBase_UpdateUSproc.FindParameter("ValueTypeList")!, principalBase.FindProperty("ValueTypeList")!, principalBase_UpdateSprocMapping); + + var principalDerived = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>")!; + + var defaultTableMappings1 = new List>(); + principalDerived.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings1); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", null, relationalModel); + var enum1ColumnBase0 = new ColumnBase("Enum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Enum1", enum1ColumnBase0); + var enum2ColumnBase0 = new ColumnBase("Enum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Enum2", enum2ColumnBase0); + var flagsEnum1ColumnBase0 = new ColumnBase("FlagsEnum1", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("FlagsEnum1", flagsEnum1ColumnBase0); + var flagsEnum2ColumnBase0 = new ColumnBase("FlagsEnum2", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("FlagsEnum2", flagsEnum2ColumnBase0); + var idColumnBase1 = new ColumnBase("Id", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("Id", idColumnBase1); + var principalBaseIdColumnBase0 = new ColumnBase("PrincipalBaseId", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("PrincipalBaseId", principalBaseIdColumnBase0); + var principalDerivedDependentBasebyteIdColumnBase0 = new ColumnBase("PrincipalDerived>Id", "decimal(20,0)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("PrincipalDerived>Id", principalDerivedDependentBasebyteIdColumnBase0); + var refTypeArrayColumnBase0 = new ColumnBase("RefTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("RefTypeArray", refTypeArrayColumnBase0); + var refTypeEnumerableColumnBase0 = new ColumnBase("RefTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumnBase0); + var refTypeIListColumnBase0 = new ColumnBase("RefTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("RefTypeIList", refTypeIListColumnBase0); + var refTypeListColumnBase0 = new ColumnBase("RefTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("RefTypeList", refTypeListColumnBase0); + var valueTypeArrayColumnBase0 = new ColumnBase("ValueTypeArray", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("ValueTypeArray", valueTypeArrayColumnBase0); + var valueTypeEnumerableColumnBase0 = new ColumnBase("ValueTypeEnumerable", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumnBase0); + var valueTypeIListColumnBase0 = new ColumnBase("ValueTypeIList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("ValueTypeIList", valueTypeIListColumnBase0); + var valueTypeListColumnBase0 = new ColumnBase("ValueTypeList", "varchar(255)", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.Columns.Add("ValueTypeList", valueTypeListColumnBase0); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase = new TableMappingBase(principalDerived, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase, false); + defaultTableMappings1.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase1, principalDerived.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum1ColumnBase0, principalDerived.FindProperty("Enum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)enum2ColumnBase0, principalDerived.FindProperty("Enum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum1ColumnBase0, principalDerived.FindProperty("FlagsEnum1")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)flagsEnum2ColumnBase0, principalDerived.FindProperty("FlagsEnum2")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalBaseIdColumnBase0, principalDerived.FindProperty("PrincipalBaseId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)principalDerivedDependentBasebyteIdColumnBase0, principalDerived.FindProperty("PrincipalDerivedId")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeArrayColumnBase0, principalDerived.FindProperty("RefTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeEnumerableColumnBase0, principalDerived.FindProperty("RefTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeIListColumnBase0, principalDerived.FindProperty("RefTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)refTypeListColumnBase0, principalDerived.FindProperty("RefTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeArrayColumnBase0, principalDerived.FindProperty("ValueTypeArray")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeEnumerableColumnBase0, principalDerived.FindProperty("ValueTypeEnumerable")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeIListColumnBase0, principalDerived.FindProperty("ValueTypeIList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)valueTypeListColumnBase0, principalDerived.FindProperty("ValueTypeList")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBasePrincipalDerivedMicrosoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDependentBasebyteMappingBase); + + var tableMappings1 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:TableMappings", tableMappings1); + var principalDerivedTable = new Table("PrincipalDerived", "TPC", relationalModel); + var idColumn1 = new Column("Id", "decimal(20,0)", principalDerivedTable); + principalDerivedTable.Columns.Add("Id", idColumn1); + idColumn1.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn1); + var enum1Column0 = new Column("Enum1", "integer", principalDerivedTable); + principalDerivedTable.Columns.Add("Enum1", enum1Column0); + enum1Column0.Accessors = ColumnAccessorsFactory.CreateGeneric(enum1Column0); + var enum2Column0 = new Column("Enum2", "integer", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("Enum2", enum2Column0); + enum2Column0.Accessors = ColumnAccessorsFactory.CreateGeneric(enum2Column0); + var flagsEnum1Column0 = new Column("FlagsEnum1", "integer", principalDerivedTable); + principalDerivedTable.Columns.Add("FlagsEnum1", flagsEnum1Column0); + flagsEnum1Column0.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum1Column0); + var flagsEnum2Column0 = new Column("FlagsEnum2", "integer", principalDerivedTable); + principalDerivedTable.Columns.Add("FlagsEnum2", flagsEnum2Column0); + flagsEnum2Column0.Accessors = ColumnAccessorsFactory.CreateGeneric(flagsEnum2Column0); + var principalBaseIdColumn0 = new Column("PrincipalBaseId", "decimal(20,0)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("PrincipalBaseId", principalBaseIdColumn0); + principalBaseIdColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(principalBaseIdColumn0); + var principalDerivedDependentBasebyteIdColumn0 = new Column("PrincipalDerived>Id", "decimal(20,0)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("PrincipalDerived>Id", principalDerivedDependentBasebyteIdColumn0); + principalDerivedDependentBasebyteIdColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(principalDerivedDependentBasebyteIdColumn0); + var refTypeArrayColumn0 = new Column("RefTypeArray", "varchar(255)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("RefTypeArray", refTypeArrayColumn0); + refTypeArrayColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeArrayColumn0); + var refTypeEnumerableColumn0 = new Column("RefTypeEnumerable", "varchar(255)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("RefTypeEnumerable", refTypeEnumerableColumn0); + refTypeEnumerableColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeEnumerableColumn0); + var refTypeIListColumn0 = new Column("RefTypeIList", "varchar(255)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("RefTypeIList", refTypeIListColumn0); + refTypeIListColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeIListColumn0); + var refTypeListColumn0 = new Column("RefTypeList", "varchar(255)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("RefTypeList", refTypeListColumn0); + refTypeListColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(refTypeListColumn0); + var valueTypeArrayColumn0 = new Column("ValueTypeArray", "varchar(255)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("ValueTypeArray", valueTypeArrayColumn0); + valueTypeArrayColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeArrayColumn0); + var valueTypeEnumerableColumn0 = new Column("ValueTypeEnumerable", "varchar(255)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableColumn0); + valueTypeEnumerableColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeEnumerableColumn0); + var valueTypeIListColumn0 = new Column("ValueTypeIList", "varchar(255)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("ValueTypeIList", valueTypeIListColumn0); + valueTypeIListColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeIListColumn0); + var valueTypeListColumn0 = new Column("ValueTypeList", "varchar(255)", principalDerivedTable) + { + IsNullable = true + }; + principalDerivedTable.Columns.Add("ValueTypeList", valueTypeListColumn0); + valueTypeListColumn0.Accessors = ColumnAccessorsFactory.CreateGeneric(valueTypeListColumn0); + relationalModel.Tables.Add(("PrincipalDerived", "TPC"), principalDerivedTable); + var principalDerivedTableMapping = new TableMapping(principalDerived, principalDerivedTable, null); + principalDerivedTable.AddTypeMapping(principalDerivedTableMapping, false); + tableMappings1.Add(principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(idColumn1, principalDerived.FindProperty("Id")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(enum1Column0, principalDerived.FindProperty("Enum1")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(enum2Column0, principalDerived.FindProperty("Enum2")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum1Column0, principalDerived.FindProperty("FlagsEnum1")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(flagsEnum2Column0, principalDerived.FindProperty("FlagsEnum2")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(principalBaseIdColumn0, principalDerived.FindProperty("PrincipalBaseId")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(principalDerivedDependentBasebyteIdColumn0, principalDerived.FindProperty("PrincipalDerivedId")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(refTypeArrayColumn0, principalDerived.FindProperty("RefTypeArray")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(refTypeEnumerableColumn0, principalDerived.FindProperty("RefTypeEnumerable")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(refTypeIListColumn0, principalDerived.FindProperty("RefTypeIList")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(refTypeListColumn0, principalDerived.FindProperty("RefTypeList")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(valueTypeArrayColumn0, principalDerived.FindProperty("ValueTypeArray")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(valueTypeEnumerableColumn0, principalDerived.FindProperty("ValueTypeEnumerable")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(valueTypeIListColumn0, principalDerived.FindProperty("ValueTypeIList")!, principalDerivedTableMapping); + RelationalModel.CreateColumnMapping(valueTypeListColumn0, principalDerived.FindProperty("ValueTypeList")!, principalDerivedTableMapping); + var pK_PrincipalDerived = new UniqueConstraint("PK_PrincipalDerived", principalDerivedTable, new[] { idColumn1 }); + principalDerivedTable.PrimaryKey = pK_PrincipalDerived; + pK_PrincipalDerived.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_PrincipalDerived)); + pK_PrincipalDerived.MappedKeys.Add(pK_PrincipalBaseKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_PrincipalBaseKey).Add(pK_PrincipalDerived); + principalDerivedTable.UniqueConstraints.Add("PK_PrincipalDerived", pK_PrincipalDerived); + var iX_PrincipalDerived_PrincipalDerivedDependentBasebyteId = new TableIndex( + "IX_PrincipalDerived_PrincipalDerived>Id", principalDerivedTable, new[] { principalDerivedDependentBasebyteIdColumn0 }, false); + iX_PrincipalDerived_PrincipalDerivedDependentBasebyteId.SetRowIndexValueFactory(new SimpleRowIndexValueFactory(iX_PrincipalDerived_PrincipalDerivedDependentBasebyteId)); + iX_PrincipalDerived_PrincipalDerivedDependentBasebyteId.MappedIndexes.Add(iX_PrincipalBase_PrincipalDerivedDependentBasebyteIdIx); + RelationalModel.GetOrCreateTableIndexes(iX_PrincipalBase_PrincipalDerivedDependentBasebyteIdIx).Add(iX_PrincipalDerived_PrincipalDerivedDependentBasebyteId); + principalDerivedTable.Indexes.Add("IX_PrincipalDerived_PrincipalDerived>Id", iX_PrincipalDerived_PrincipalDerivedDependentBasebyteId); + var pIX0 = new TableIndex( + "PIX", principalDerivedTable, new[] { principalBaseIdColumn0 }, true); + pIX0.SetRowIndexValueFactory(new SimpleRowIndexValueFactory(pIX0)); + pIX0.MappedIndexes.Add(pIXIx); + RelationalModel.GetOrCreateTableIndexes(pIXIx).Add(pIX0); + principalDerivedTable.Indexes.Add("PIX", pIX0); + + var viewMappings0 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:ViewMappings", viewMappings0); + var principalDerivedViewView = new View("PrincipalDerivedView", "TPC", relationalModel); + var enum1ViewColumn0 = new ViewColumn("Enum1", "integer", principalDerivedViewView); + principalDerivedViewView.Columns.Add("Enum1", enum1ViewColumn0); + var enum2ViewColumn0 = new ViewColumn("Enum2", "integer", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("Enum2", enum2ViewColumn0); + var flagsEnum1ViewColumn0 = new ViewColumn("FlagsEnum1", "integer", principalDerivedViewView); + principalDerivedViewView.Columns.Add("FlagsEnum1", flagsEnum1ViewColumn0); + var flagsEnum2ViewColumn0 = new ViewColumn("FlagsEnum2", "integer", principalDerivedViewView); + principalDerivedViewView.Columns.Add("FlagsEnum2", flagsEnum2ViewColumn0); + var idViewColumn0 = new ViewColumn("Id", "decimal(20,0)", principalDerivedViewView); + principalDerivedViewView.Columns.Add("Id", idViewColumn0); + var principalBaseIdViewColumn0 = new ViewColumn("PrincipalBaseId", "decimal(20,0)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("PrincipalBaseId", principalBaseIdViewColumn0); + var principalDerivedIdViewColumn0 = new ViewColumn("PrincipalDerivedId", "decimal(20,0)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("PrincipalDerivedId", principalDerivedIdViewColumn0); + var refTypeArrayViewColumn0 = new ViewColumn("RefTypeArray", "varchar(255)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("RefTypeArray", refTypeArrayViewColumn0); + var refTypeEnumerableViewColumn0 = new ViewColumn("RefTypeEnumerable", "varchar(255)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("RefTypeEnumerable", refTypeEnumerableViewColumn0); + var refTypeIListViewColumn0 = new ViewColumn("RefTypeIList", "varchar(255)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("RefTypeIList", refTypeIListViewColumn0); + var refTypeListViewColumn0 = new ViewColumn("RefTypeList", "varchar(255)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("RefTypeList", refTypeListViewColumn0); + var valueTypeArrayViewColumn0 = new ViewColumn("ValueTypeArray", "varchar(255)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("ValueTypeArray", valueTypeArrayViewColumn0); + var valueTypeEnumerableViewColumn0 = new ViewColumn("ValueTypeEnumerable", "varchar(255)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("ValueTypeEnumerable", valueTypeEnumerableViewColumn0); + var valueTypeIListViewColumn0 = new ViewColumn("ValueTypeIList", "varchar(255)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("ValueTypeIList", valueTypeIListViewColumn0); + var valueTypeListViewColumn0 = new ViewColumn("ValueTypeList", "varchar(255)", principalDerivedViewView) + { + IsNullable = true + }; + principalDerivedViewView.Columns.Add("ValueTypeList", valueTypeListViewColumn0); + relationalModel.Views.Add(("PrincipalDerivedView", "TPC"), principalDerivedViewView); + var principalDerivedViewViewMapping = new ViewMapping(principalDerived, principalDerivedViewView, null); + principalDerivedViewView.AddTypeMapping(principalDerivedViewViewMapping, false); + viewMappings0.Add(principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(idViewColumn0, principalDerived.FindProperty("Id")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(enum1ViewColumn0, principalDerived.FindProperty("Enum1")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(enum2ViewColumn0, principalDerived.FindProperty("Enum2")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(flagsEnum1ViewColumn0, principalDerived.FindProperty("FlagsEnum1")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(flagsEnum2ViewColumn0, principalDerived.FindProperty("FlagsEnum2")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(principalBaseIdViewColumn0, principalDerived.FindProperty("PrincipalBaseId")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(principalDerivedIdViewColumn0, principalDerived.FindProperty("PrincipalDerivedId")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeArrayViewColumn0, principalDerived.FindProperty("RefTypeArray")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeEnumerableViewColumn0, principalDerived.FindProperty("RefTypeEnumerable")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeIListViewColumn0, principalDerived.FindProperty("RefTypeIList")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(refTypeListViewColumn0, principalDerived.FindProperty("RefTypeList")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeArrayViewColumn0, principalDerived.FindProperty("ValueTypeArray")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeEnumerableViewColumn0, principalDerived.FindProperty("ValueTypeEnumerable")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeIListViewColumn0, principalDerived.FindProperty("ValueTypeIList")!, principalDerivedViewViewMapping); + RelationalModel.CreateViewColumnMapping(valueTypeListViewColumn0, principalDerived.FindProperty("ValueTypeList")!, principalDerivedViewViewMapping); + + var deleteSprocMappings0 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:DeleteStoredProcedureMappings", deleteSprocMappings0); + var derived_DeleteStoreSproc = new StoreStoredProcedure("Derived_Delete", "TPC", relationalModel); + var id_OriginalParameter1 = new StoreStoredProcedureParameter("Id_Original", "decimal(20,0)", 0, derived_DeleteStoreSproc, System.Data.ParameterDirection.Input); + derived_DeleteStoreSproc.AddParameter(id_OriginalParameter1); + derived_DeleteStoreSproc.AddStoredProcedure((IRuntimeStoredProcedure)principalDerived.GetDeleteStoredProcedure()!); + relationalModel.StoredProcedures.Add(("Derived_Delete", "TPC"), derived_DeleteStoreSproc); + var derived_DeleteDSproc = (IRuntimeStoredProcedure)principalDerived.GetDeleteStoredProcedure()!; + var derived_DeleteSprocMapping = new StoredProcedureMapping(principalDerived, derived_DeleteStoreSproc, derived_DeleteDSproc, principalDerivedTableMapping, null); + derived_DeleteStoreSproc.AddTypeMapping(derived_DeleteSprocMapping, false); + deleteSprocMappings0.Add(derived_DeleteSprocMapping); + principalDerivedTableMapping.DeleteStoredProcedureMapping = derived_DeleteSprocMapping; + RelationalModel.CreateStoredProcedureParameterMapping(id_OriginalParameter1, derived_DeleteDSproc.FindParameter("Id_Original")!, principalDerived.FindProperty("Id")!, derived_DeleteSprocMapping); + + var insertSprocMappings0 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:InsertStoredProcedureMappings", insertSprocMappings0); + var derived_InsertStoreSproc = new StoreStoredProcedure("Derived_Insert", "TPC", relationalModel); + var idParameter0 = new StoreStoredProcedureParameter("Id", "decimal(20,0)", 0, derived_InsertStoreSproc, System.Data.ParameterDirection.Input); + derived_InsertStoreSproc.AddParameter(idParameter0); + var principalBaseIdParameter1 = new StoreStoredProcedureParameter("PrincipalBaseId", "decimal(20,0)", 1, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(principalBaseIdParameter1); + var principalDerivedIdParameter1 = new StoreStoredProcedureParameter("PrincipalDerivedId", "decimal(20,0)", 2, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(principalDerivedIdParameter1); + var enum2Parameter1 = new StoreStoredProcedureParameter("Enum2", "integer", 3, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(enum2Parameter1); + var flagsEnum1Parameter1 = new StoreStoredProcedureParameter("FlagsEnum1", "integer", 4, derived_InsertStoreSproc, System.Data.ParameterDirection.Input); + derived_InsertStoreSproc.AddParameter(flagsEnum1Parameter1); + var flagsEnum2Parameter1 = new StoreStoredProcedureParameter("FlagsEnum2", "integer", 5, derived_InsertStoreSproc, System.Data.ParameterDirection.Input); + derived_InsertStoreSproc.AddParameter(flagsEnum2Parameter1); + var valueTypeListParameter1 = new StoreStoredProcedureParameter("ValueTypeList", "varchar(255)", 6, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(valueTypeListParameter1); + var valueTypeIListParameter1 = new StoreStoredProcedureParameter("ValueTypeIList", "varchar(255)", 7, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(valueTypeIListParameter1); + var valueTypeArrayParameter1 = new StoreStoredProcedureParameter("ValueTypeArray", "varchar(255)", 8, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(valueTypeArrayParameter1); + var valueTypeEnumerableParameter1 = new StoreStoredProcedureParameter("ValueTypeEnumerable", "varchar(255)", 9, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(valueTypeEnumerableParameter1); + var refTypeListParameter1 = new StoreStoredProcedureParameter("RefTypeList", "varchar(255)", 10, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(refTypeListParameter1); + var refTypeIListParameter1 = new StoreStoredProcedureParameter("RefTypeIList", "varchar(255)", 11, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(refTypeIListParameter1); + var refTypeArrayParameter1 = new StoreStoredProcedureParameter("RefTypeArray", "varchar(255)", 12, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(refTypeArrayParameter1); + var refTypeEnumerableParameter1 = new StoreStoredProcedureParameter("RefTypeEnumerable", "varchar(255)", 13, derived_InsertStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_InsertStoreSproc.AddParameter(refTypeEnumerableParameter1); + var derivedEnumFunctionColumn = new StoreStoredProcedureResultColumn("DerivedEnum", "integer", 0, derived_InsertStoreSproc); + derived_InsertStoreSproc.AddResultColumn(derivedEnumFunctionColumn); + derived_InsertStoreSproc.AddStoredProcedure((IRuntimeStoredProcedure)principalDerived.GetInsertStoredProcedure()!); + relationalModel.StoredProcedures.Add(("Derived_Insert", "TPC"), derived_InsertStoreSproc); + var derived_InsertISproc = (IRuntimeStoredProcedure)principalDerived.GetInsertStoredProcedure()!; + var derived_InsertSprocMapping = new StoredProcedureMapping(principalDerived, derived_InsertStoreSproc, derived_InsertISproc, principalDerivedTableMapping, null); + derived_InsertStoreSproc.AddTypeMapping(derived_InsertSprocMapping, false); + insertSprocMappings0.Add(derived_InsertSprocMapping); + principalDerivedTableMapping.InsertStoredProcedureMapping = derived_InsertSprocMapping; + RelationalModel.CreateStoredProcedureParameterMapping(idParameter0, derived_InsertISproc.FindParameter("Id")!, principalDerived.FindProperty("Id")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum2Parameter1, derived_InsertISproc.FindParameter("Enum2")!, principalDerived.FindProperty("Enum2")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum1Parameter1, derived_InsertISproc.FindParameter("FlagsEnum1")!, principalDerived.FindProperty("FlagsEnum1")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum2Parameter1, derived_InsertISproc.FindParameter("FlagsEnum2")!, principalDerived.FindProperty("FlagsEnum2")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalBaseIdParameter1, derived_InsertISproc.FindParameter("PrincipalBaseId")!, principalDerived.FindProperty("PrincipalBaseId")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalDerivedIdParameter1, derived_InsertISproc.FindParameter("PrincipalDerivedId")!, principalDerived.FindProperty("PrincipalDerivedId")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeArrayParameter1, derived_InsertISproc.FindParameter("RefTypeArray")!, principalDerived.FindProperty("RefTypeArray")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeEnumerableParameter1, derived_InsertISproc.FindParameter("RefTypeEnumerable")!, principalDerived.FindProperty("RefTypeEnumerable")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeIListParameter1, derived_InsertISproc.FindParameter("RefTypeIList")!, principalDerived.FindProperty("RefTypeIList")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeListParameter1, derived_InsertISproc.FindParameter("RefTypeList")!, principalDerived.FindProperty("RefTypeList")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeArrayParameter1, derived_InsertISproc.FindParameter("ValueTypeArray")!, principalDerived.FindProperty("ValueTypeArray")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeEnumerableParameter1, derived_InsertISproc.FindParameter("ValueTypeEnumerable")!, principalDerived.FindProperty("ValueTypeEnumerable")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeIListParameter1, derived_InsertISproc.FindParameter("ValueTypeIList")!, principalDerived.FindProperty("ValueTypeIList")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeListParameter1, derived_InsertISproc.FindParameter("ValueTypeList")!, principalDerived.FindProperty("ValueTypeList")!, derived_InsertSprocMapping); + RelationalModel.CreateStoredProcedureResultColumnMapping(derivedEnumFunctionColumn, derived_InsertISproc.FindResultColumn("DerivedEnum")!, principalDerived.FindProperty("Enum1")!, derived_InsertSprocMapping); + + var updateSprocMappings0 = new List(); + principalDerived.SetRuntimeAnnotation("Relational:UpdateStoredProcedureMappings", updateSprocMappings0); + var derived_UpdateStoreSproc = new StoreStoredProcedure("Derived_Update", "Derived", relationalModel); + var principalBaseIdParameter2 = new StoreStoredProcedureParameter("PrincipalBaseId", "decimal(20,0)", 0, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(principalBaseIdParameter2); + var principalDerivedIdParameter2 = new StoreStoredProcedureParameter("PrincipalDerivedId", "decimal(20,0)", 1, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(principalDerivedIdParameter2); + var enum1Parameter0 = new StoreStoredProcedureParameter("Enum1", "integer", 2, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input); + derived_UpdateStoreSproc.AddParameter(enum1Parameter0); + var enum2Parameter2 = new StoreStoredProcedureParameter("Enum2", "integer", 3, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(enum2Parameter2); + var flagsEnum1Parameter2 = new StoreStoredProcedureParameter("FlagsEnum1", "integer", 4, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input); + derived_UpdateStoreSproc.AddParameter(flagsEnum1Parameter2); + var flagsEnum2Parameter2 = new StoreStoredProcedureParameter("FlagsEnum2", "integer", 5, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input); + derived_UpdateStoreSproc.AddParameter(flagsEnum2Parameter2); + var valueTypeListParameter2 = new StoreStoredProcedureParameter("ValueTypeList", "varchar(255)", 6, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(valueTypeListParameter2); + var valueTypeIListParameter2 = new StoreStoredProcedureParameter("ValueTypeIList", "varchar(255)", 7, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(valueTypeIListParameter2); + var valueTypeArrayParameter2 = new StoreStoredProcedureParameter("ValueTypeArray", "varchar(255)", 8, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(valueTypeArrayParameter2); + var valueTypeEnumerableParameter2 = new StoreStoredProcedureParameter("ValueTypeEnumerable", "varchar(255)", 9, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(valueTypeEnumerableParameter2); + var refTypeListParameter2 = new StoreStoredProcedureParameter("RefTypeList", "varchar(255)", 10, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(refTypeListParameter2); + var refTypeIListParameter2 = new StoreStoredProcedureParameter("RefTypeIList", "varchar(255)", 11, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(refTypeIListParameter2); + var refTypeArrayParameter2 = new StoreStoredProcedureParameter("RefTypeArray", "varchar(255)", 12, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(refTypeArrayParameter2); + var refTypeEnumerableParameter2 = new StoreStoredProcedureParameter("RefTypeEnumerable", "varchar(255)", 13, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input) + { + IsNullable = true + }; + derived_UpdateStoreSproc.AddParameter(refTypeEnumerableParameter2); + var id_OriginalParameter2 = new StoreStoredProcedureParameter("Id_Original", "decimal(20,0)", 14, derived_UpdateStoreSproc, System.Data.ParameterDirection.Input); + derived_UpdateStoreSproc.AddParameter(id_OriginalParameter2); + derived_UpdateStoreSproc.AddStoredProcedure((IRuntimeStoredProcedure)principalDerived.GetUpdateStoredProcedure()!); + relationalModel.StoredProcedures.Add(("Derived_Update", "Derived"), derived_UpdateStoreSproc); + var derived_UpdateUSproc = (IRuntimeStoredProcedure)principalDerived.GetUpdateStoredProcedure()!; + var derived_UpdateSprocMapping = new StoredProcedureMapping(principalDerived, derived_UpdateStoreSproc, derived_UpdateUSproc, principalDerivedTableMapping, null); + derived_UpdateStoreSproc.AddTypeMapping(derived_UpdateSprocMapping, false); + updateSprocMappings0.Add(derived_UpdateSprocMapping); + principalDerivedTableMapping.UpdateStoredProcedureMapping = derived_UpdateSprocMapping; + RelationalModel.CreateStoredProcedureParameterMapping(id_OriginalParameter2, derived_UpdateUSproc.FindParameter("Id_Original")!, principalDerived.FindProperty("Id")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum1Parameter0, derived_UpdateUSproc.FindParameter("Enum1")!, principalDerived.FindProperty("Enum1")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(enum2Parameter2, derived_UpdateUSproc.FindParameter("Enum2")!, principalDerived.FindProperty("Enum2")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum1Parameter2, derived_UpdateUSproc.FindParameter("FlagsEnum1")!, principalDerived.FindProperty("FlagsEnum1")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(flagsEnum2Parameter2, derived_UpdateUSproc.FindParameter("FlagsEnum2")!, principalDerived.FindProperty("FlagsEnum2")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalBaseIdParameter2, derived_UpdateUSproc.FindParameter("PrincipalBaseId")!, principalDerived.FindProperty("PrincipalBaseId")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(principalDerivedIdParameter2, derived_UpdateUSproc.FindParameter("PrincipalDerivedId")!, principalDerived.FindProperty("PrincipalDerivedId")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeArrayParameter2, derived_UpdateUSproc.FindParameter("RefTypeArray")!, principalDerived.FindProperty("RefTypeArray")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeEnumerableParameter2, derived_UpdateUSproc.FindParameter("RefTypeEnumerable")!, principalDerived.FindProperty("RefTypeEnumerable")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeIListParameter2, derived_UpdateUSproc.FindParameter("RefTypeIList")!, principalDerived.FindProperty("RefTypeIList")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(refTypeListParameter2, derived_UpdateUSproc.FindParameter("RefTypeList")!, principalDerived.FindProperty("RefTypeList")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeArrayParameter2, derived_UpdateUSproc.FindParameter("ValueTypeArray")!, principalDerived.FindProperty("ValueTypeArray")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeEnumerableParameter2, derived_UpdateUSproc.FindParameter("ValueTypeEnumerable")!, principalDerived.FindProperty("ValueTypeEnumerable")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeIListParameter2, derived_UpdateUSproc.FindParameter("ValueTypeIList")!, principalDerived.FindProperty("ValueTypeIList")!, derived_UpdateSprocMapping); + RelationalModel.CreateStoredProcedureParameterMapping(valueTypeListParameter2, derived_UpdateUSproc.FindParameter("ValueTypeList")!, principalDerived.FindProperty("ValueTypeList")!, derived_UpdateSprocMapping); + var fK_DependentBasebyte_PrincipalDerived_PrincipalId = new ForeignKeyConstraint( + "FK_DependentBase_PrincipalDerived_PrincipalId", dependentBasebyteTable, principalDerivedTable, + new[] { principalIdColumn }, + principalDerivedTable.FindUniqueConstraint("PK_PrincipalDerived")!, ReferentialAction.NoAction); + fK_DependentBasebyte_PrincipalDerived_PrincipalId.SetRowForeignKeyValueFactory(RowForeignKeyValueFactoryFactory.CreateSimpleNonNullableFactory(fK_DependentBasebyte_PrincipalDerived_PrincipalId)); + var fK_DependentBasebyte_PrincipalDerived_PrincipalIdFk = RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + new[] { "PrincipalId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + new[] { "Id" }); + fK_DependentBasebyte_PrincipalDerived_PrincipalId.MappedForeignKeys.Add(fK_DependentBasebyte_PrincipalDerived_PrincipalIdFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_DependentBasebyte_PrincipalDerived_PrincipalIdFk).Add(fK_DependentBasebyte_PrincipalDerived_PrincipalId); + dependentBasebyteTable.ForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalDerived_PrincipalId); + principalDerivedTable.ReferencingForeignKeyConstraints.Add(fK_DependentBasebyte_PrincipalDerived_PrincipalId); + var fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBas = new ForeignKeyConstraint( + "FK_PrincipalBase_PrincipalDerived_PrincipalDerived(fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBas)); + var fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBasFk = RelationalModel.GetForeignKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + new[] { "PrincipalDerivedId" }, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + new[] { "Id" }); + fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBas.MappedForeignKeys.Add(fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBasFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBasFk).Add(fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBas); + principalBaseTable.ForeignKeyConstraints.Add(fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBas); + principalDerivedTable.ReferencingForeignKeyConstraints.Add(fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBas); + var fK_PrincipalDerived_PrincipalDerived_PrincipalDerivedDependent = new ForeignKeyConstraint( + "FK_PrincipalDerived_PrincipalDerived_PrincipalDerived(fK_PrincipalDerived_PrincipalDerived_PrincipalDerivedDependent)); + fK_PrincipalDerived_PrincipalDerived_PrincipalDerivedDependent.MappedForeignKeys.Add(fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBasFk); + RelationalModel.GetOrCreateForeignKeyConstraints(fK_PrincipalBase_PrincipalDerived_PrincipalDerivedDependentBasFk).Add(fK_PrincipalDerived_PrincipalDerived_PrincipalDerivedDependent); + principalDerivedTable.ForeignKeyConstraints.Add(fK_PrincipalDerived_PrincipalDerived_PrincipalDerivedDependent); + principalDerivedTable.ReferencingForeignKeyConstraints.Add(fK_PrincipalDerived_PrincipalDerived_PrincipalDerivedDependent); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DependentBaseEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DependentBaseEntityType.cs new file mode 100644 index 00000000..52d02ae5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DependentBaseEntityType.cs @@ -0,0 +1,243 @@ +// +using System; +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DependentBaseEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+DependentBase", + typeof(CompiledModelTestBase.DependentBase), + baseEntityType, + propertyCount: 2, + navigationCount: 1, + foreignKeyCount: 1, + unnamedIndexCount: 1, + keyCount: 1); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(byte?), + propertyInfo: typeof(CompiledModelTestBase.DependentBase).GetProperty("Id", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + afterSaveBehavior: PropertySaveBehavior.Throw); + id.SetGetter( + byte? (CompiledModelTestBase.DependentBase instance) => DependentBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.DependentBase instance) => !(DependentBaseUnsafeAccessors.Id(instance).HasValue)); + id.SetSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, byte? value) => + { + DependentBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, byte? value) => + { + DependentBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + byte? (IInternalEntry entry) => DependentBaseUnsafeAccessors.Id(((CompiledModelTestBase.DependentBase)(entry.Entity))), + byte? (IInternalEntry entry) => DependentBaseUnsafeAccessors.Id(((CompiledModelTestBase.DependentBase)(entry.Entity))), + byte? (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + byte? (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: -1); + id.TypeMapping = JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)); + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + id.SetComparer(new NullableValueComparer(id.TypeMapping.Comparer)); + id.SetKeyComparer(new NullableValueComparer(id.TypeMapping.KeyComparer)); + + var principalId = runtimeEntityType.AddProperty( + "PrincipalId", + typeof(long?), + nullable: true); + principalId.SetAccessors( + long? (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(1) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(1) && !(entry.ReadShadowValue(0).HasValue) ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + long? (IInternalEntry entry) => entry.ReadShadowValue(0), + long? (IInternalEntry entry) => entry.ReadOriginalValue(principalId, 1), + long? (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalId, 1)); + principalId.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: 0, + relationshipIndex: 1, + storeGenerationIndex: 0); + principalId.TypeMapping = LibRedLongTypeMapping.Default; + principalId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalId)); + principalId.SetComparer(new NullableValueComparer(principalId.TypeMapping.Comparer)); + principalId.SetKeyComparer(new NullableValueComparer(principalId.TypeMapping.KeyComparer)); + + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + var index = runtimeEntityType.AddIndex( + new[] { principalId }, + unique: true); + index.AddAnnotation("Relational:Filter", "IGNORE NULL"); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }), + principalEntityType, + deleteBehavior: DeleteBehavior.ClientCascade, + unique: true, + requiredDependent: true); + + var principal = declaringEntityType.AddNavigation("Principal", + runtimeForeignKey, + onDependent: true, + typeof(CompiledModelTestBase.PrincipalDerived>), + propertyInfo: typeof(CompiledModelTestBase.DependentBase).GetProperty("Principal", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.DependentBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + principal.SetGetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.DependentBase instance) => DependentBaseUnsafeAccessors.Principal(instance), + bool (CompiledModelTestBase.DependentBase instance) => DependentBaseUnsafeAccessors.Principal(instance) == null); + principal.SetSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, CompiledModelTestBase.PrincipalDerived> value) => + { + DependentBaseUnsafeAccessors.Principal(instance) = value; + return instance; + }); + principal.SetMaterializationSetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.DependentBase instance, CompiledModelTestBase.PrincipalDerived> value) => + { + DependentBaseUnsafeAccessors.Principal(instance) = value; + return instance; + }); + principal.SetAccessors( + CompiledModelTestBase.PrincipalDerived> (IInternalEntry entry) => DependentBaseUnsafeAccessors.Principal(((CompiledModelTestBase.DependentBase)(entry.Entity))), + CompiledModelTestBase.PrincipalDerived> (IInternalEntry entry) => DependentBaseUnsafeAccessors.Principal(((CompiledModelTestBase.DependentBase)(entry.Entity))), + null, + CompiledModelTestBase.PrincipalDerived> (IInternalEntry entry) => entry.GetCurrentValue>>(principal)); + principal.SetPropertyIndexes( + index: 0, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 2, + storeGenerationIndex: -1); + var dependent = principalEntityType.AddNavigation("Dependent", + runtimeForeignKey, + onDependent: false, + typeof(CompiledModelTestBase.DependentBase), + propertyInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetProperty("Dependent", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + dependent.SetGetter( + CompiledModelTestBase.DependentBase (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Dependent(instance), + bool (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Dependent(instance) == null); + dependent.SetSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, CompiledModelTestBase.DependentBase value) => + { + PrincipalDerivedUnsafeAccessors>.Dependent(instance) = value; + return instance; + }); + dependent.SetMaterializationSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, CompiledModelTestBase.DependentBase value) => + { + PrincipalDerivedUnsafeAccessors>.Dependent(instance) = value; + return instance; + }); + dependent.SetAccessors( + CompiledModelTestBase.DependentBase (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Dependent(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + CompiledModelTestBase.DependentBase (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Dependent(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + null, + CompiledModelTestBase.DependentBase (IInternalEntry entry) => entry.GetCurrentValue>(dependent)); + dependent.SetPropertyIndexes( + index: 1, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 4, + storeGenerationIndex: -1); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var principalId = runtimeEntityType.FindProperty("PrincipalId"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + var principal = runtimeEntityType.FindNavigation("Principal"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.DependentBase)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(principalId) == null ? null : ((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalId)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot((default(long? ) == null ? null : ((ValueComparer)(((IProperty)principalId).GetValueComparer())).Snapshot(default(long? ))))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(long? ))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalId") ? ((long? )(source["PrincipalId"])) : null))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long? ))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.DependentBase)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(principalId) == null ? null : ((ValueComparer)(((IProperty)principalId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalId))), source.GetCurrentValue>>(principal)))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 2, + navigationCount: 1, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 2, + shadowCount: 1, + relationshipCount: 3, + storeGeneratedCount: 1)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", "TPC"); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "DependentBase"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DependentBaseUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DependentBaseUnsafeAccessors.cs new file mode 100644 index 00000000..d7a27e94 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/DependentBaseUnsafeAccessors.cs @@ -0,0 +1,18 @@ +// +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DependentBaseUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TKey Id(CompiledModelTestBase.DependentBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.PrincipalDerived> Principal(CompiledModelTestBase.DependentBase @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseEntityType.cs new file mode 100644 index 00000000..7d8ef5f5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseEntityType.cs @@ -0,0 +1,1214 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalBaseEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalBase", + typeof(CompiledModelTestBase.PrincipalBase), + baseEntityType, + discriminatorValue: "PrincipalBase", + derivedTypesCount: 1, + propertyCount: 15, + navigationCount: 1, + foreignKeyCount: 2, + unnamedIndexCount: 1, + namedIndexCount: 1, + keyCount: 1); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(long?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + afterSaveBehavior: PropertySaveBehavior.Throw); + id.SetGetter( + long? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Id(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Id(instance).HasValue)); + id.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, long? value) => + { + PrincipalBaseUnsafeAccessors.Id(instance) = value; + return instance; + }); + id.SetAccessors( + long? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + long? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Id(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + long? (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + long? (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: -1, + relationshipIndex: 0, + storeGenerationIndex: -1); + id.TypeMapping = LibRedLongTypeMapping.Default; + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + id.SetComparer(new NullableValueComparer(id.TypeMapping.Comparer)); + id.SetKeyComparer(new NullableValueComparer(id.TypeMapping.KeyComparer)); + + var overrides = new StoreObjectDictionary(); + var idPrincipalBaseView = new RuntimeRelationalPropertyOverrides( + id, + StoreObjectIdentifier.View("PrincipalBaseView", "TPC"), + false, + null); + idPrincipalBaseView.AddAnnotation("foo", "bar2"); + overrides.Add(StoreObjectIdentifier.View("PrincipalBaseView", "TPC"), idPrincipalBaseView); + id.AddAnnotation("Relational:RelationalOverrides", overrides); + + + var enum1 = runtimeEntityType.AddProperty( + "Enum1", + typeof(CompiledModelTestBase.AnEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + valueGenerated: ValueGenerated.OnAdd); + enum1.SetGetter( + CompiledModelTestBase.AnEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.Enum1(instance))), ((object)(CompiledModelTestBase.AnEnum.A)))); + enum1.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum value) => + { + PrincipalBaseUnsafeAccessors.Enum1(instance) = value; + return instance; + }); + enum1.SetAccessors( + CompiledModelTestBase.AnEnum (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(1) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(1) && object.Equals(((object)(PrincipalBaseUnsafeAccessors.Enum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), ((object)(CompiledModelTestBase.AnEnum.A))) ? entry.ReadTemporaryValue(0) : PrincipalBaseUnsafeAccessors.Enum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.ReadOriginalValue(enum1, 1), + CompiledModelTestBase.AnEnum (IInternalEntry entry) => entry.GetCurrentValue(enum1)); + enum1.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: 0); + enum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum1.SetSentinelFromProviderValue(1); + + var overrides0 = new StoreObjectDictionary(); + var enum1Derived_Insert = new RuntimeRelationalPropertyOverrides( + enum1, + StoreObjectIdentifier.InsertStoredProcedure("Derived_Insert", "TPC"), + true, + "DerivedEnum"); + overrides0.Add(StoreObjectIdentifier.InsertStoredProcedure("Derived_Insert", "TPC"), enum1Derived_Insert); + enum1.AddAnnotation("Relational:RelationalOverrides", overrides0); + + enum1.AddAnnotation("Relational:DefaultValue", CompiledModelTestBase.AnEnum.A); + + var enum2 = runtimeEntityType.AddProperty( + "Enum2", + typeof(CompiledModelTestBase.AnEnum?), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Enum2", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + enum2.SetGetter( + CompiledModelTestBase.AnEnum? (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Enum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => !(PrincipalBaseUnsafeAccessors.Enum2(instance).HasValue)); + enum2.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AnEnum? value) => + { + PrincipalBaseUnsafeAccessors.Enum2(instance) = (value == null ? value : ((CompiledModelTestBase.AnEnum? )(((CompiledModelTestBase.AnEnum)value)))); + return instance; + }); + enum2.SetAccessors( + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Enum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.ReadOriginalValue(enum2, 2), + CompiledModelTestBase.AnEnum? (IInternalEntry entry) => entry.GetCurrentValue(enum2)); + enum2.SetPropertyIndexes( + index: 2, + originalValueIndex: 2, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + enum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AnEnum v1, CompiledModelTestBase.AnEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AnEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AnEnum (CompiledModelTestBase.AnEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AnEnum value) => ((int)value), + CompiledModelTestBase.AnEnum (int value) => ((CompiledModelTestBase.AnEnum)value)))); + enum2.SetComparer(new NullableValueComparer(enum2.TypeMapping.Comparer)); + enum2.SetKeyComparer(new NullableValueComparer(enum2.TypeMapping.KeyComparer)); + + var flagsEnum1 = runtimeEntityType.AddProperty( + "FlagsEnum1", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum1", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum1.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum1(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum1(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum1.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum1(instance) = value; + return instance; + }); + flagsEnum1.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum1(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum1, 3), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum1)); + flagsEnum1.SetPropertyIndexes( + index: 3, + originalValueIndex: 3, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum1.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum1.SetSentinelFromProviderValue(0); + + var flagsEnum2 = runtimeEntityType.AddProperty( + "FlagsEnum2", + typeof(CompiledModelTestBase.AFlagsEnum), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("FlagsEnum2", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + flagsEnum2.SetGetter( + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.FlagsEnum2(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => object.Equals(((object)(PrincipalBaseUnsafeAccessors.FlagsEnum2(instance))), ((object)((CompiledModelTestBase.AFlagsEnum)0L)))); + flagsEnum2.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum2(instance) = value; + return instance; + }); + flagsEnum2.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, CompiledModelTestBase.AFlagsEnum value) => + { + PrincipalBaseUnsafeAccessors.FlagsEnum2(instance) = value; + return instance; + }); + flagsEnum2.SetAccessors( + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.FlagsEnum2(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.ReadOriginalValue(flagsEnum2, 4), + CompiledModelTestBase.AFlagsEnum (IInternalEntry entry) => entry.GetCurrentValue(flagsEnum2)); + flagsEnum2.SetPropertyIndexes( + index: 4, + originalValueIndex: 4, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + flagsEnum2.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + keyComparer: new ValueComparer( + bool (CompiledModelTestBase.AFlagsEnum v1, CompiledModelTestBase.AFlagsEnum v2) => object.Equals(((object)v1), ((object)v2)), + int (CompiledModelTestBase.AFlagsEnum v) => ((object)v).GetHashCode(), + CompiledModelTestBase.AFlagsEnum (CompiledModelTestBase.AFlagsEnum v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + converter: new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonInt32ReaderWriter.Instance, + new ValueConverter( + int (CompiledModelTestBase.AFlagsEnum value) => ((int)value), + CompiledModelTestBase.AFlagsEnum (int value) => ((CompiledModelTestBase.AFlagsEnum)value)))); + flagsEnum2.SetSentinelFromProviderValue(0); + + var principalBaseId = runtimeEntityType.AddProperty( + "PrincipalBaseId", + typeof(long?), + nullable: true); + principalBaseId.SetAccessors( + long? (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(5) ? entry.ReadStoreGeneratedValue(1) : (entry.FlaggedAsTemporary(5) && !(entry.ReadShadowValue(0).HasValue) ? entry.ReadTemporaryValue(1) : entry.ReadShadowValue(0))), + long? (IInternalEntry entry) => entry.ReadShadowValue(0), + long? (IInternalEntry entry) => entry.ReadOriginalValue(principalBaseId, 5), + long? (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalBaseId, 1)); + principalBaseId.SetPropertyIndexes( + index: 5, + originalValueIndex: 5, + shadowIndex: 0, + relationshipIndex: 1, + storeGenerationIndex: 1); + principalBaseId.TypeMapping = LibRedLongTypeMapping.Default; + principalBaseId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalBaseId)); + principalBaseId.SetComparer(new NullableValueComparer(principalBaseId.TypeMapping.Comparer)); + principalBaseId.SetKeyComparer(new NullableValueComparer(principalBaseId.TypeMapping.KeyComparer)); + + var principalDerivedId = runtimeEntityType.AddProperty( + "PrincipalDerivedId", + typeof(long?), + nullable: true); + principalDerivedId.SetAccessors( + long? (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(6) ? entry.ReadStoreGeneratedValue(2) : (entry.FlaggedAsTemporary(6) && !(entry.ReadShadowValue(1).HasValue) ? entry.ReadTemporaryValue(2) : entry.ReadShadowValue(1))), + long? (IInternalEntry entry) => entry.ReadShadowValue(1), + long? (IInternalEntry entry) => entry.ReadOriginalValue(principalDerivedId, 6), + long? (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(principalDerivedId, 2)); + principalDerivedId.SetPropertyIndexes( + index: 6, + originalValueIndex: 6, + shadowIndex: 1, + relationshipIndex: 2, + storeGenerationIndex: 2); + principalDerivedId.TypeMapping = LibRedLongTypeMapping.Default; + principalDerivedId.SetCurrentValueComparer(new EntryCurrentValueComparer(principalDerivedId)); + principalDerivedId.SetComparer(new NullableValueComparer(principalDerivedId.TypeMapping.Comparer)); + principalDerivedId.SetKeyComparer(new NullableValueComparer(principalDerivedId.TypeMapping.KeyComparer)); + + var refTypeArray = runtimeEntityType.AddProperty( + "RefTypeArray", + typeof(IPAddress[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeArray.SetGetter( + IPAddress[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeArray(instance) == null); + refTypeArray.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IPAddress[] value) => + { + PrincipalBaseUnsafeAccessors.RefTypeArray(instance) = value; + return instance; + }); + refTypeArray.SetAccessors( + IPAddress[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IPAddress[] (IInternalEntry entry) => entry.ReadOriginalValue(refTypeArray, 7), + IPAddress[] (IInternalEntry entry) => entry.GetCurrentValue(refTypeArray)); + refTypeArray.SetPropertyIndexes( + index: 7, + originalValueIndex: 7, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeArrayElementType = refTypeArray.SetElementType(typeof(IPAddress)); + refTypeArrayElementType.TypeMapping = refTypeArray.TypeMapping.ElementTypeMapping; + + var refTypeEnumerable = runtimeEntityType.AddProperty( + "RefTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) == null); + refTypeEnumerable.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.RefTypeEnumerable(instance) = value; + return instance; + }); + refTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeEnumerable, 8), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(refTypeEnumerable)); + refTypeEnumerable.SetPropertyIndexes( + index: 8, + originalValueIndex: 8, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeEnumerableElementType = refTypeEnumerable.SetElementType(typeof(string)); + refTypeEnumerableElementType.TypeMapping = refTypeEnumerable.TypeMapping.ElementTypeMapping; + + var refTypeIList = runtimeEntityType.AddProperty( + "RefTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeIList(instance) == null); + refTypeIList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.RefTypeIList(instance) = value; + return instance; + }); + refTypeIList.SetAccessors( + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeIList, 9), + IList (IInternalEntry entry) => entry.GetCurrentValue>(refTypeIList)); + refTypeIList.SetPropertyIndexes( + index: 9, + originalValueIndex: 9, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + keyComparer: new ListOfReferenceTypesComparer, string>(new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, string>( + JsonStringReaderWriter.Instance), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + keyComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255))); + var refTypeIListElementType = refTypeIList.SetElementType(typeof(string)); + refTypeIListElementType.TypeMapping = refTypeIList.TypeMapping.ElementTypeMapping; + + var refTypeList = runtimeEntityType.AddProperty( + "RefTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("RefTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + refTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.RefTypeList(instance) == null); + refTypeList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.RefTypeList(instance) = value; + return instance; + }); + refTypeList.SetAccessors( + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.RefTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(refTypeList, 10), + List (IInternalEntry entry) => entry.GetCurrentValue>(refTypeList)); + refTypeList.SetPropertyIndexes( + index: 10, + originalValueIndex: 10, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + refTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + keyComparer: new ListOfReferenceTypesComparer, IPAddress>(new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))), + jsonValueReaderWriter: new JsonCollectionOfReferencesReaderWriter, IPAddress>( + new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)))), + elementMapping: JetStringTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + keyComparer: new ValueComparer( + bool (IPAddress v1, IPAddress v2) => v1 == null && v2 == null || v1 != null && v2 != null && v1.Equals(v2), + int (IPAddress v) => ((object)v).GetHashCode(), + IPAddress (IPAddress v) => v), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(45)", + size: 45), + converter: new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v)), + jsonValueReaderWriter: new JsonConvertedValueReaderWriter( + JsonStringReaderWriter.Instance, + new ValueConverter( + string (IPAddress v) => ((object)v).ToString(), + IPAddress (string v) => IPAddress.Parse(v))))); + var refTypeListElementType = refTypeList.SetElementType(typeof(IPAddress)); + refTypeListElementType.TypeMapping = refTypeList.TypeMapping.ElementTypeMapping; + + var valueTypeArray = runtimeEntityType.AddProperty( + "ValueTypeArray", + typeof(DateTime[]), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeArray", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeArray.SetGetter( + DateTime[] (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) == null); + valueTypeArray.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, DateTime[] value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeArray(instance) = value; + return instance; + }); + valueTypeArray.SetAccessors( + DateTime[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + DateTime[] (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeArray(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + DateTime[] (IInternalEntry entry) => entry.ReadOriginalValue(valueTypeArray, 11), + DateTime[] (IInternalEntry entry) => entry.GetCurrentValue(valueTypeArray)); + valueTypeArray.SetPropertyIndexes( + index: 11, + originalValueIndex: 11, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeArray.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + keyComparer: new ListOfValueTypesComparer(new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter( + JsonDateTimeReaderWriter.Instance), + elementMapping: JetDateTimeTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + keyComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v), + providerValueComparer: new ValueComparer( + bool (DateTime v1, DateTime v2) => v1.Equals(v2), + int (DateTime v) => ((object)v).GetHashCode(), + DateTime (DateTime v) => v))); + var valueTypeArrayElementType = valueTypeArray.SetElementType(typeof(DateTime)); + valueTypeArrayElementType.TypeMapping = valueTypeArray.TypeMapping.ElementTypeMapping; + + var valueTypeEnumerable = runtimeEntityType.AddProperty( + "ValueTypeEnumerable", + typeof(IEnumerable), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeEnumerable", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeEnumerable.SetGetter( + IEnumerable (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) == null); + valueTypeEnumerable.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IEnumerable value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(instance) = value; + return instance; + }); + valueTypeEnumerable.SetAccessors( + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeEnumerable(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IEnumerable (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeEnumerable, 12), + IEnumerable (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeEnumerable)); + valueTypeEnumerable.SetPropertyIndexes( + index: 12, + originalValueIndex: 12, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeEnumerable.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeEnumerableElementType = valueTypeEnumerable.SetElementType(typeof(byte)); + valueTypeEnumerableElementType.TypeMapping = valueTypeEnumerable.TypeMapping.ElementTypeMapping; + + var valueTypeIList = runtimeEntityType.AddProperty( + "ValueTypeIList", + typeof(IList), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeIList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeIList.SetGetter( + IList (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) == null); + valueTypeIList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, IList value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeIList(instance) = value; + return instance; + }); + valueTypeIList.SetAccessors( + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeIList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + IList (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeIList, 13), + IList (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeIList)); + valueTypeIList.SetPropertyIndexes( + index: 13, + originalValueIndex: 13, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeIList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + keyComparer: new ListOfValueTypesComparer, byte>(new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, byte>( + JsonByteReaderWriter.Instance), + elementMapping: JetByteTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + keyComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v), + providerValueComparer: new ValueComparer( + bool (byte v1, byte v2) => v1 == v2, + int (byte v) => ((int)v), + byte (byte v) => v))); + var valueTypeIListElementType = valueTypeIList.SetElementType(typeof(byte)); + valueTypeIListElementType.TypeMapping = valueTypeIList.TypeMapping.ElementTypeMapping; + + var valueTypeList = runtimeEntityType.AddProperty( + "ValueTypeList", + typeof(List), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("ValueTypeList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + valueTypeList.SetGetter( + List (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.ValueTypeList(instance) == null); + valueTypeList.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, List value) => + { + PrincipalBaseUnsafeAccessors.ValueTypeList(instance) = value; + return instance; + }); + valueTypeList.SetAccessors( + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.ValueTypeList(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + List (IInternalEntry entry) => entry.ReadOriginalValue>(valueTypeList, 14), + List (IInternalEntry entry) => entry.GetCurrentValue>(valueTypeList)); + valueTypeList.SetPropertyIndexes( + index: 14, + originalValueIndex: 14, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + valueTypeList.TypeMapping = JetStringTypeMapping.Default.Clone( + comparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + keyComparer: new ListOfValueTypesComparer, short>(new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v)), + providerValueComparer: new ValueComparer( + bool (string v1, string v2) => v1 == v2, + int (string v) => ((object)v).GetHashCode(), + string (string v) => v), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "varchar(255)", + size: 255), + converter: new CollectionToJsonStringConverter(new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance)), + jsonValueReaderWriter: new JsonCollectionOfStructsReaderWriter, short>( + JsonInt16ReaderWriter.Instance), + elementMapping: JetShortTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + keyComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v), + providerValueComparer: new ValueComparer( + bool (short v1, short v2) => v1 == v2, + int (short v) => ((int)v), + short (short v) => v))); + var valueTypeListElementType = valueTypeList.SetElementType(typeof(short)); + valueTypeListElementType.TypeMapping = valueTypeList.TypeMapping.ElementTypeMapping; + + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + var index = runtimeEntityType.AddIndex( + new[] { principalDerivedId }); + + var principalIndex = runtimeEntityType.AddIndex( + new[] { principalBaseId }, + name: "PrincipalIndex", + unique: true); + principalIndex.AddAnnotation("Relational:Filter", "AlternateId <> NULL"); + principalIndex.AddAnnotation("Relational:Name", "PIX"); + + return runtimeEntityType; + } + + public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalBaseId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }), + principalEntityType); + + var deriveds = principalEntityType.AddNavigation("Deriveds", + runtimeForeignKey, + onDependent: false, + typeof(ICollection), + propertyInfo: typeof(CompiledModelTestBase.PrincipalBase).GetProperty("Deriveds", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalBase).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + deriveds.SetGetter( + ICollection (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Deriveds(instance), + bool (CompiledModelTestBase.PrincipalBase instance) => PrincipalBaseUnsafeAccessors.Deriveds(instance) == null); + deriveds.SetSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, ICollection value) => + { + PrincipalBaseUnsafeAccessors.Deriveds(instance) = value; + return instance; + }); + deriveds.SetMaterializationSetter( + CompiledModelTestBase.PrincipalBase (CompiledModelTestBase.PrincipalBase instance, ICollection value) => + { + PrincipalBaseUnsafeAccessors.Deriveds(instance) = value; + return instance; + }); + deriveds.SetAccessors( + ICollection (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Deriveds(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + ICollection (IInternalEntry entry) => PrincipalBaseUnsafeAccessors.Deriveds(((CompiledModelTestBase.PrincipalBase)(entry.Entity))), + null, + ICollection (IInternalEntry entry) => entry.GetCurrentValue>(deriveds)); + deriveds.SetPropertyIndexes( + index: 0, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 3, + storeGenerationIndex: -1); + deriveds.SetCollectionAccessor, CompiledModelTestBase.PrincipalBase>( + ICollection (CompiledModelTestBase.PrincipalBase entity) => PrincipalBaseUnsafeAccessors.Deriveds(entity), + (CompiledModelTestBase.PrincipalBase entity, ICollection collection) => PrincipalBaseUnsafeAccessors.Deriveds(entity) = ((ICollection)collection), + (CompiledModelTestBase.PrincipalBase entity, ICollection collection) => PrincipalBaseUnsafeAccessors.Deriveds(entity) = ((ICollection)collection), + ICollection (CompiledModelTestBase.PrincipalBase entity, Action> setter) => ClrCollectionAccessorFactory.CreateAndSetHashSet, CompiledModelTestBase.PrincipalBase>(entity, setter), + ICollection () => ((ICollection)(((ICollection)(new HashSet(ReferenceEqualityComparer.Instance)))))); + return runtimeForeignKey; + } + + public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType) + { + var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PrincipalDerivedId") }, + principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }), + principalEntityType); + + var principals = principalEntityType.AddNavigation("Principals", + runtimeForeignKey, + onDependent: false, + typeof(ICollection), + propertyInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetProperty("Principals", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.PrincipalDerived>).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)); + + principals.SetGetter( + ICollection (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Principals(instance), + bool (CompiledModelTestBase.PrincipalDerived> instance) => PrincipalDerivedUnsafeAccessors>.Principals(instance) == null); + principals.SetSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, ICollection value) => + { + PrincipalDerivedUnsafeAccessors>.Principals(instance) = value; + return instance; + }); + principals.SetMaterializationSetter( + CompiledModelTestBase.PrincipalDerived> (CompiledModelTestBase.PrincipalDerived> instance, ICollection value) => + { + PrincipalDerivedUnsafeAccessors>.Principals(instance) = value; + return instance; + }); + principals.SetAccessors( + ICollection (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Principals(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + ICollection (IInternalEntry entry) => PrincipalDerivedUnsafeAccessors>.Principals(((CompiledModelTestBase.PrincipalDerived>)(entry.Entity))), + null, + ICollection (IInternalEntry entry) => entry.GetCurrentValue>(principals)); + principals.SetPropertyIndexes( + index: 2, + originalValueIndex: -1, + shadowIndex: -1, + relationshipIndex: 5, + storeGenerationIndex: -1); + principals.SetCollectionAccessor>, ICollection, CompiledModelTestBase.PrincipalBase>( + ICollection (CompiledModelTestBase.PrincipalDerived> entity) => PrincipalDerivedUnsafeAccessors>.Principals(entity), + (CompiledModelTestBase.PrincipalDerived> entity, ICollection collection) => PrincipalDerivedUnsafeAccessors>.Principals(entity) = ((ICollection)collection), + (CompiledModelTestBase.PrincipalDerived> entity, ICollection collection) => PrincipalDerivedUnsafeAccessors>.Principals(entity) = ((ICollection)collection), + ICollection (CompiledModelTestBase.PrincipalDerived> entity, Action>, ICollection> setter) => ClrCollectionAccessorFactory.CreateAndSetHashSet>, ICollection, CompiledModelTestBase.PrincipalBase>(entity, setter), + ICollection () => ((ICollection)(((ICollection)(new HashSet(ReferenceEqualityComparer.Instance)))))); + return runtimeForeignKey; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var enum1 = runtimeEntityType.FindProperty("Enum1"); + var enum2 = runtimeEntityType.FindProperty("Enum2"); + var flagsEnum1 = runtimeEntityType.FindProperty("FlagsEnum1"); + var flagsEnum2 = runtimeEntityType.FindProperty("FlagsEnum2"); + var principalBaseId = runtimeEntityType.FindProperty("PrincipalBaseId"); + var principalDerivedId = runtimeEntityType.FindProperty("PrincipalDerivedId"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + var deriveds = runtimeEntityType.FindNavigation("Deriveds"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.PrincipalBase)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(source.GetCurrentValue(enum1)), (source.GetCurrentValue(enum2) == null ? null : ((ValueComparer)(((IProperty)enum2).GetValueComparer())).Snapshot(source.GetCurrentValue(enum2))), ((ValueComparer)(((IProperty)flagsEnum1).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum1)), ((ValueComparer)(((IProperty)flagsEnum2).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum2)), (source.GetCurrentValue(principalBaseId) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId))), (source.GetCurrentValue(principalDerivedId) == null ? null : ((ValueComparer)(((IProperty)principalDerivedId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedId))), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(default(CompiledModelTestBase.AnEnum)), (default(long? ) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(default(long? ))), (default(long? ) == null ? null : ((ValueComparer)(((IProperty)principalDerivedId).GetValueComparer())).Snapshot(default(long? ))))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(CompiledModelTestBase.AnEnum), default(long? ), default(long? ))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalBaseId") ? ((long? )(source["PrincipalBaseId"])) : null), (source.ContainsKey("PrincipalDerivedId") ? ((long? )(source["PrincipalDerivedId"])) : null))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long? ), default(long? ))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.PrincipalBase)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(principalBaseId) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId))), (source.GetCurrentValue(principalDerivedId) == null ? null : ((ValueComparer)(((IProperty)principalDerivedId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedId))), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(deriveds))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 15, + navigationCount: 1, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 15, + shadowCount: 2, + relationshipCount: 4, + storeGeneratedCount: 3)); + var insertSproc = new RuntimeStoredProcedure( + runtimeEntityType, + "PrincipalBase_Insert", + "TPC", + false); + + var id0 = insertSproc.AddParameter( + "Id", System.Data.ParameterDirection.Input, false, "Id", false); + var principalBaseId0 = insertSproc.AddParameter( + "PrincipalBaseId", System.Data.ParameterDirection.Input, false, "PrincipalBaseId", false); + var principalDerivedId0 = insertSproc.AddParameter( + "PrincipalDerivedId", System.Data.ParameterDirection.Input, false, "PrincipalDerivedId", false); + var enum20 = insertSproc.AddParameter( + "Enum2", System.Data.ParameterDirection.Input, false, "Enum2", false); + var flagsEnum10 = insertSproc.AddParameter( + "FlagsEnum1", System.Data.ParameterDirection.Input, false, "FlagsEnum1", false); + var flagsEnum20 = insertSproc.AddParameter( + "FlagsEnum2", System.Data.ParameterDirection.Input, false, "FlagsEnum2", false); + var valueTypeList0 = insertSproc.AddParameter( + "ValueTypeList", System.Data.ParameterDirection.Input, false, "ValueTypeList", false); + var valueTypeIList0 = insertSproc.AddParameter( + "ValueTypeIList", System.Data.ParameterDirection.Input, false, "ValueTypeIList", false); + var valueTypeArray0 = insertSproc.AddParameter( + "ValueTypeArray", System.Data.ParameterDirection.Input, false, "ValueTypeArray", false); + var valueTypeEnumerable0 = insertSproc.AddParameter( + "ValueTypeEnumerable", System.Data.ParameterDirection.Input, false, "ValueTypeEnumerable", false); + var refTypeList0 = insertSproc.AddParameter( + "RefTypeList", System.Data.ParameterDirection.Input, false, "RefTypeList", false); + var refTypeIList0 = insertSproc.AddParameter( + "RefTypeIList", System.Data.ParameterDirection.Input, false, "RefTypeIList", false); + var refTypeArray0 = insertSproc.AddParameter( + "RefTypeArray", System.Data.ParameterDirection.Input, false, "RefTypeArray", false); + var refTypeEnumerable0 = insertSproc.AddParameter( + "RefTypeEnumerable", System.Data.ParameterDirection.Input, false, "RefTypeEnumerable", false); + var enum10 = insertSproc.AddParameter( + "BaseEnum", System.Data.ParameterDirection.Output, false, "Enum1", false); + enum10.AddAnnotation("foo", "bar"); + insertSproc.AddAnnotation("foo", "bar1"); + runtimeEntityType.AddAnnotation("Relational:InsertStoredProcedure", insertSproc); + + var deleteSproc = new RuntimeStoredProcedure( + runtimeEntityType, + "PrincipalBase_Delete", + "TPC", + false); + + var id1 = deleteSproc.AddParameter( + "Id_Original", System.Data.ParameterDirection.Input, false, "Id", true); + var rowsAffected = deleteSproc.AddParameter( + "RowsAffected", System.Data.ParameterDirection.Output, true, null, null); + runtimeEntityType.AddAnnotation("Relational:DeleteStoredProcedure", deleteSproc); + + var updateSproc = new RuntimeStoredProcedure( + runtimeEntityType, + "PrincipalBase_Update", + "TPC", + false); + + var principalBaseId1 = updateSproc.AddParameter( + "PrincipalBaseId", System.Data.ParameterDirection.Input, false, "PrincipalBaseId", false); + var principalDerivedId1 = updateSproc.AddParameter( + "PrincipalDerivedId", System.Data.ParameterDirection.Input, false, "PrincipalDerivedId", false); + var enum11 = updateSproc.AddParameter( + "Enum1", System.Data.ParameterDirection.Input, false, "Enum1", false); + var enum21 = updateSproc.AddParameter( + "Enum2", System.Data.ParameterDirection.Input, false, "Enum2", false); + var flagsEnum11 = updateSproc.AddParameter( + "FlagsEnum1", System.Data.ParameterDirection.Input, false, "FlagsEnum1", false); + var flagsEnum21 = updateSproc.AddParameter( + "FlagsEnum2", System.Data.ParameterDirection.Input, false, "FlagsEnum2", false); + var valueTypeList1 = updateSproc.AddParameter( + "ValueTypeList", System.Data.ParameterDirection.Input, false, "ValueTypeList", false); + var valueTypeIList1 = updateSproc.AddParameter( + "ValueTypeIList", System.Data.ParameterDirection.Input, false, "ValueTypeIList", false); + var valueTypeArray1 = updateSproc.AddParameter( + "ValueTypeArray", System.Data.ParameterDirection.Input, false, "ValueTypeArray", false); + var valueTypeEnumerable1 = updateSproc.AddParameter( + "ValueTypeEnumerable", System.Data.ParameterDirection.Input, false, "ValueTypeEnumerable", false); + var refTypeList1 = updateSproc.AddParameter( + "RefTypeList", System.Data.ParameterDirection.Input, false, "RefTypeList", false); + var refTypeIList1 = updateSproc.AddParameter( + "RefTypeIList", System.Data.ParameterDirection.Input, false, "RefTypeIList", false); + var refTypeArray1 = updateSproc.AddParameter( + "RefTypeArray", System.Data.ParameterDirection.Input, false, "RefTypeArray", false); + var refTypeEnumerable1 = updateSproc.AddParameter( + "RefTypeEnumerable", System.Data.ParameterDirection.Input, false, "RefTypeEnumerable", false); + var id2 = updateSproc.AddParameter( + "Id_Original", System.Data.ParameterDirection.Input, false, "Id", true); + runtimeEntityType.AddAnnotation("Relational:UpdateStoredProcedure", updateSproc); + + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:MappingStrategy", "TPC"); + runtimeEntityType.AddAnnotation("Relational:Schema", "TPC"); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalBase"); + runtimeEntityType.AddAnnotation("Relational:ViewDefinitionSql", null); + runtimeEntityType.AddAnnotation("Relational:ViewName", "PrincipalBaseView"); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", "TPC"); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseUnsafeAccessors.cs new file mode 100644 index 00000000..5495088c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalBaseUnsafeAccessors.cs @@ -0,0 +1,57 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class PrincipalBaseUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref long? Id(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AnEnum Enum1(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AnEnum? Enum2(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AFlagsEnum FlagsEnum1(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref CompiledModelTestBase.AFlagsEnum FlagsEnum2(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IPAddress[] RefTypeArray(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IEnumerable RefTypeEnumerable(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList RefTypeIList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List RefTypeList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref DateTime[] ValueTypeArray(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IEnumerable ValueTypeEnumerable(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref IList ValueTypeIList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref List ValueTypeList(CompiledModelTestBase.PrincipalBase @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ICollection Deriveds(CompiledModelTestBase.PrincipalBase @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalDerivedEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalDerivedEntityType.cs new file mode 100644 index 00000000..260d0089 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalDerivedEntityType.cs @@ -0,0 +1,183 @@ +// +using System; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class PrincipalDerivedEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+PrincipalDerived>", + typeof(CompiledModelTestBase.PrincipalDerived>), + baseEntityType, + discriminatorValue: "PrincipalDerived>", + propertyCount: 0, + navigationCount: 2); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var enum1 = runtimeEntityType.FindProperty("Enum1"); + var enum2 = runtimeEntityType.FindProperty("Enum2"); + var flagsEnum1 = runtimeEntityType.FindProperty("FlagsEnum1"); + var flagsEnum2 = runtimeEntityType.FindProperty("FlagsEnum2"); + var principalBaseId = runtimeEntityType.FindProperty("PrincipalBaseId"); + var principalDerivedId = runtimeEntityType.FindProperty("PrincipalDerivedId"); + var refTypeArray = runtimeEntityType.FindProperty("RefTypeArray"); + var refTypeEnumerable = runtimeEntityType.FindProperty("RefTypeEnumerable"); + var refTypeIList = runtimeEntityType.FindProperty("RefTypeIList"); + var refTypeList = runtimeEntityType.FindProperty("RefTypeList"); + var valueTypeArray = runtimeEntityType.FindProperty("ValueTypeArray"); + var valueTypeEnumerable = runtimeEntityType.FindProperty("ValueTypeEnumerable"); + var valueTypeIList = runtimeEntityType.FindProperty("ValueTypeIList"); + var valueTypeList = runtimeEntityType.FindProperty("ValueTypeList"); + var deriveds = runtimeEntityType.FindNavigation("Deriveds"); + var dependent = runtimeEntityType.FindNavigation("Dependent"); + var principals = runtimeEntityType.FindNavigation("Principals"); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.PrincipalDerived>)(source.Entity)); + return ((ISnapshot)(new Snapshot, IList, List, DateTime[], IEnumerable, IList, List>((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id))), ((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(source.GetCurrentValue(enum1)), (source.GetCurrentValue(enum2) == null ? null : ((ValueComparer)(((IProperty)enum2).GetValueComparer())).Snapshot(source.GetCurrentValue(enum2))), ((ValueComparer)(((IProperty)flagsEnum1).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum1)), ((ValueComparer)(((IProperty)flagsEnum2).GetValueComparer())).Snapshot(source.GetCurrentValue(flagsEnum2)), (source.GetCurrentValue(principalBaseId) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId))), (source.GetCurrentValue(principalDerivedId) == null ? null : ((ValueComparer)(((IProperty)principalDerivedId).GetValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedId))), (((object)(source.GetCurrentValue(refTypeArray))) == null ? null : ((IPAddress[])(((ValueComparer)(((IProperty)refTypeArray).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue(refTypeArray))))))), (((object)(source.GetCurrentValue>(refTypeEnumerable))) == null ? null : ((IEnumerable)(((ValueComparer)(((IProperty)refTypeEnumerable).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeEnumerable))))))), (((object)(source.GetCurrentValue>(refTypeIList))) == null ? null : ((IList)(((ValueComparer)(((IProperty)refTypeIList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeIList))))))), (((object)(source.GetCurrentValue>(refTypeList))) == null ? null : ((List)(((ValueComparer)(((IProperty)refTypeList).GetValueComparer())).Snapshot(((object)(source.GetCurrentValue>(refTypeList))))))), (((IEnumerable)(source.GetCurrentValue(valueTypeArray))) == null ? null : ((DateTime[])(((ValueComparer>)(((IProperty)valueTypeArray).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue(valueTypeArray))))))), (source.GetCurrentValue>(valueTypeEnumerable) == null ? null : ((ValueComparer>)(((IProperty)valueTypeEnumerable).GetValueComparer())).Snapshot(source.GetCurrentValue>(valueTypeEnumerable))), (((IEnumerable)(source.GetCurrentValue>(valueTypeIList))) == null ? null : ((IList)(((ValueComparer>)(((IProperty)valueTypeIList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeIList))))))), (((IEnumerable)(source.GetCurrentValue>(valueTypeList))) == null ? null : ((List)(((ValueComparer>)(((IProperty)valueTypeList).GetValueComparer())).Snapshot(((IEnumerable)(source.GetCurrentValue>(valueTypeList)))))))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)enum1).GetValueComparer())).Snapshot(default(CompiledModelTestBase.AnEnum)), (default(long? ) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetValueComparer())).Snapshot(default(long? ))), (default(long? ) == null ? null : ((ValueComparer)(((IProperty)principalDerivedId).GetValueComparer())).Snapshot(default(long? ))))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(CompiledModelTestBase.AnEnum), default(long? ), default(long? ))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("PrincipalBaseId") ? ((long? )(source["PrincipalBaseId"])) : null), (source.ContainsKey("PrincipalDerivedId") ? ((long? )(source["PrincipalDerivedId"])) : null))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(long? ), default(long? ))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.PrincipalDerived>)(source.Entity)); + return ((ISnapshot)(new Snapshot((source.GetCurrentValue(id) == null ? null : ((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))), (source.GetCurrentValue(principalBaseId) == null ? null : ((ValueComparer)(((IProperty)principalBaseId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalBaseId))), (source.GetCurrentValue(principalDerivedId) == null ? null : ((ValueComparer)(((IProperty)principalDerivedId).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(principalDerivedId))), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(deriveds)), source.GetCurrentValue>(dependent), SnapshotFactoryFactory.SnapshotCollection(source.GetCurrentValue>(principals))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 15, + navigationCount: 3, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 15, + shadowCount: 2, + relationshipCount: 6, + storeGeneratedCount: 3)); + var insertSproc = new RuntimeStoredProcedure( + runtimeEntityType, + "Derived_Insert", + "TPC", + false); + + var id0 = insertSproc.AddParameter( + "Id", System.Data.ParameterDirection.Input, false, "Id", false); + var principalBaseId0 = insertSproc.AddParameter( + "PrincipalBaseId", System.Data.ParameterDirection.Input, false, "PrincipalBaseId", false); + var principalDerivedId0 = insertSproc.AddParameter( + "PrincipalDerivedId", System.Data.ParameterDirection.Input, false, "PrincipalDerivedId", false); + var enum20 = insertSproc.AddParameter( + "Enum2", System.Data.ParameterDirection.Input, false, "Enum2", false); + var flagsEnum10 = insertSproc.AddParameter( + "FlagsEnum1", System.Data.ParameterDirection.Input, false, "FlagsEnum1", false); + var flagsEnum20 = insertSproc.AddParameter( + "FlagsEnum2", System.Data.ParameterDirection.Input, false, "FlagsEnum2", false); + var valueTypeList0 = insertSproc.AddParameter( + "ValueTypeList", System.Data.ParameterDirection.Input, false, "ValueTypeList", false); + var valueTypeIList0 = insertSproc.AddParameter( + "ValueTypeIList", System.Data.ParameterDirection.Input, false, "ValueTypeIList", false); + var valueTypeArray0 = insertSproc.AddParameter( + "ValueTypeArray", System.Data.ParameterDirection.Input, false, "ValueTypeArray", false); + var valueTypeEnumerable0 = insertSproc.AddParameter( + "ValueTypeEnumerable", System.Data.ParameterDirection.Input, false, "ValueTypeEnumerable", false); + var refTypeList0 = insertSproc.AddParameter( + "RefTypeList", System.Data.ParameterDirection.Input, false, "RefTypeList", false); + var refTypeIList0 = insertSproc.AddParameter( + "RefTypeIList", System.Data.ParameterDirection.Input, false, "RefTypeIList", false); + var refTypeArray0 = insertSproc.AddParameter( + "RefTypeArray", System.Data.ParameterDirection.Input, false, "RefTypeArray", false); + var refTypeEnumerable0 = insertSproc.AddParameter( + "RefTypeEnumerable", System.Data.ParameterDirection.Input, false, "RefTypeEnumerable", false); + var derivedEnum = insertSproc.AddResultColumn( + "DerivedEnum", false, "Enum1"); + derivedEnum.AddAnnotation("foo", "bar3"); + runtimeEntityType.AddAnnotation("Relational:InsertStoredProcedure", insertSproc); + + var deleteSproc = new RuntimeStoredProcedure( + runtimeEntityType, + "Derived_Delete", + "TPC", + false); + + var id1 = deleteSproc.AddParameter( + "Id_Original", System.Data.ParameterDirection.Input, false, "Id", true); + runtimeEntityType.AddAnnotation("Relational:DeleteStoredProcedure", deleteSproc); + + var updateSproc = new RuntimeStoredProcedure( + runtimeEntityType, + "Derived_Update", + "Derived", + false); + + var principalBaseId1 = updateSproc.AddParameter( + "PrincipalBaseId", System.Data.ParameterDirection.Input, false, "PrincipalBaseId", false); + var principalDerivedId1 = updateSproc.AddParameter( + "PrincipalDerivedId", System.Data.ParameterDirection.Input, false, "PrincipalDerivedId", false); + var enum10 = updateSproc.AddParameter( + "Enum1", System.Data.ParameterDirection.Input, false, "Enum1", false); + var enum21 = updateSproc.AddParameter( + "Enum2", System.Data.ParameterDirection.Input, false, "Enum2", false); + var flagsEnum11 = updateSproc.AddParameter( + "FlagsEnum1", System.Data.ParameterDirection.Input, false, "FlagsEnum1", false); + var flagsEnum21 = updateSproc.AddParameter( + "FlagsEnum2", System.Data.ParameterDirection.Input, false, "FlagsEnum2", false); + var valueTypeList1 = updateSproc.AddParameter( + "ValueTypeList", System.Data.ParameterDirection.Input, false, "ValueTypeList", false); + var valueTypeIList1 = updateSproc.AddParameter( + "ValueTypeIList", System.Data.ParameterDirection.Input, false, "ValueTypeIList", false); + var valueTypeArray1 = updateSproc.AddParameter( + "ValueTypeArray", System.Data.ParameterDirection.Input, false, "ValueTypeArray", false); + var valueTypeEnumerable1 = updateSproc.AddParameter( + "ValueTypeEnumerable", System.Data.ParameterDirection.Input, false, "ValueTypeEnumerable", false); + var refTypeList1 = updateSproc.AddParameter( + "RefTypeList", System.Data.ParameterDirection.Input, false, "RefTypeList", false); + var refTypeIList1 = updateSproc.AddParameter( + "RefTypeIList", System.Data.ParameterDirection.Input, false, "RefTypeIList", false); + var refTypeArray1 = updateSproc.AddParameter( + "RefTypeArray", System.Data.ParameterDirection.Input, false, "RefTypeArray", false); + var refTypeEnumerable1 = updateSproc.AddParameter( + "RefTypeEnumerable", System.Data.ParameterDirection.Input, false, "RefTypeEnumerable", false); + var id2 = updateSproc.AddParameter( + "Id_Original", System.Data.ParameterDirection.Input, false, "Id", true); + runtimeEntityType.AddAnnotation("Relational:UpdateStoredProcedure", updateSproc); + + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", "TPC"); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "PrincipalDerived"); + runtimeEntityType.AddAnnotation("Relational:ViewDefinitionSql", null); + runtimeEntityType.AddAnnotation("Relational:ViewName", "PrincipalDerivedView"); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", "TPC"); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalDerivedUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalDerivedUnsafeAccessors.cs new file mode 100644 index 00000000..33c6bf49 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Tpc_Sprocs/PrincipalDerivedUnsafeAccessors.cs @@ -0,0 +1,20 @@ +// +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class PrincipalDerivedUnsafeAccessors + where TDependent : class + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref TDependent Dependent(CompiledModelTestBase.PrincipalDerived @this); + + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref ICollection Principals(CompiledModelTestBase.PrincipalDerived @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DataEntityType.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DataEntityType.cs new file mode 100644 index 00000000..6cd00280 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DataEntityType.cs @@ -0,0 +1,178 @@ +// +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [EntityFrameworkInternal] + public partial class DataEntityType + { + public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null) + { + var runtimeEntityType = model.AddEntityType( + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", + typeof(CompiledModelTestBase.Data), + baseEntityType, + propertyCount: 2, + keyCount: 1, + triggerCount: 2); + + var id = runtimeEntityType.AddProperty( + "Id", + typeof(int), + valueGenerated: ValueGenerated.OnAdd, + afterSaveBehavior: PropertySaveBehavior.Throw, + sentinel: 0); + id.SetAccessors( + int (IInternalEntry entry) => (entry.FlaggedAsStoreGenerated(0) ? entry.ReadStoreGeneratedValue(0) : (entry.FlaggedAsTemporary(0) && entry.ReadShadowValue(0) == 0 ? entry.ReadTemporaryValue(0) : entry.ReadShadowValue(0))), + int (IInternalEntry entry) => entry.ReadShadowValue(0), + int (IInternalEntry entry) => entry.ReadOriginalValue(id, 0), + int (IInternalEntry entry) => ((InternalEntityEntry)entry).ReadRelationshipSnapshotValue(id, 0)); + id.SetPropertyIndexes( + index: 0, + originalValueIndex: 0, + shadowIndex: 0, + relationshipIndex: 0, + storeGenerationIndex: 0); + id.TypeMapping = JetIntTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + keyComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v), + providerValueComparer: new ValueComparer( + bool (int v1, int v2) => v1 == v2, + int (int v) => v, + int (int v) => v)); + id.SetCurrentValueComparer(new EntryCurrentValueComparer(id)); + id.AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + + var blob = runtimeEntityType.AddProperty( + "Blob", + typeof(byte[]), + propertyInfo: typeof(CompiledModelTestBase.Data).GetProperty("Blob", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly), + fieldInfo: typeof(CompiledModelTestBase.Data).GetField("k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly), + nullable: true); + blob.SetGetter( + byte[] (CompiledModelTestBase.Data instance) => DataUnsafeAccessors.Blob(instance), + bool (CompiledModelTestBase.Data instance) => DataUnsafeAccessors.Blob(instance) == null); + blob.SetSetter( + CompiledModelTestBase.Data (CompiledModelTestBase.Data instance, byte[] value) => + { + DataUnsafeAccessors.Blob(instance) = value; + return instance; + }); + blob.SetMaterializationSetter( + CompiledModelTestBase.Data (CompiledModelTestBase.Data instance, byte[] value) => + { + DataUnsafeAccessors.Blob(instance) = value; + return instance; + }); + blob.SetAccessors( + byte[] (IInternalEntry entry) => DataUnsafeAccessors.Blob(((CompiledModelTestBase.Data)(entry.Entity))), + byte[] (IInternalEntry entry) => DataUnsafeAccessors.Blob(((CompiledModelTestBase.Data)(entry.Entity))), + byte[] (IInternalEntry entry) => entry.ReadOriginalValue(blob, 1), + byte[] (IInternalEntry entry) => entry.GetCurrentValue(blob)); + blob.SetPropertyIndexes( + index: 1, + originalValueIndex: 1, + shadowIndex: -1, + relationshipIndex: -1, + storeGenerationIndex: -1); + blob.TypeMapping = JetByteArrayTypeMapping.Default.Clone( + comparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => ((object)v).GetHashCode(), + byte[] (byte[] v) => v), + keyComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + providerValueComparer: new ValueComparer( + bool (byte[] v1, byte[] v2) => StructuralComparisons.StructuralEqualityComparer.Equals(((object)v1), ((object)v2)), + int (byte[] v) => StructuralComparisons.StructuralEqualityComparer.GetHashCode(((object)v)), + byte[] (byte[] source) => source.ToArray()), + mappingInfo: new RelationalTypeMappingInfo( + storeTypeName: "longbinary"), + storeTypePostfix: StoreTypePostfix.None); + + var key = runtimeEntityType.AddKey( + new[] { id }); + runtimeEntityType.SetPrimaryKey(key); + + var trigger1 = runtimeEntityType.AddTrigger( + "Trigger1"); + + var trigger2 = runtimeEntityType.AddTrigger( + "Trigger2"); + + return runtimeEntityType; + } + + public static void CreateAnnotations(RuntimeEntityType runtimeEntityType) + { + var id = runtimeEntityType.FindProperty("Id"); + var blob = runtimeEntityType.FindProperty("Blob"); + var key = runtimeEntityType.FindKey(new[] { id }); + key.SetPrincipalKeyValueFactory(KeyValueFactoryFactory.CreateSimpleNonNullableFactory(key)); + key.SetIdentityMapFactory(IdentityMapFactoryFactory.CreateFactory(key)); + runtimeEntityType.SetOriginalValuesFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.Data)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(source.GetCurrentValue(id)), (source.GetCurrentValue(blob) == null ? null : ((ValueComparer)(((IProperty)blob).GetValueComparer())).Snapshot(source.GetCurrentValue(blob)))))); + }); + runtimeEntityType.SetStoreGeneratedValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetValueComparer())).Snapshot(default(int)))))); + runtimeEntityType.SetTemporaryValuesFactory( + ISnapshot (IInternalEntry source) => ((ISnapshot)(new Snapshot(default(int))))); + runtimeEntityType.SetShadowValuesFactory( + ISnapshot (IDictionary source) => ((ISnapshot)(new Snapshot((source.ContainsKey("Id") ? ((int)(source["Id"])) : 0))))); + runtimeEntityType.SetEmptyShadowValuesFactory( + ISnapshot () => ((ISnapshot)(new Snapshot(default(int))))); + runtimeEntityType.SetRelationshipSnapshotFactory( + ISnapshot (IInternalEntry source) => + { + var structuralType = ((CompiledModelTestBase.Data)(source.Entity)); + return ((ISnapshot)(new Snapshot(((ValueComparer)(((IProperty)id).GetKeyValueComparer())).Snapshot(source.GetCurrentValue(id))))); + }); + runtimeEntityType.SetCounts(new PropertyCounts( + propertyCount: 2, + navigationCount: 0, + complexPropertyCount: 0, + complexCollectionCount: 0, + originalValueCount: 2, + shadowCount: 1, + relationshipCount: 1, + storeGeneratedCount: 1)); + runtimeEntityType.AddAnnotation("Relational:FunctionName", null); + runtimeEntityType.AddAnnotation("Relational:Schema", null); + runtimeEntityType.AddAnnotation("Relational:SqlQuery", null); + runtimeEntityType.AddAnnotation("Relational:TableName", "Data"); + runtimeEntityType.AddAnnotation("Relational:ViewName", null); + runtimeEntityType.AddAnnotation("Relational:ViewSchema", null); + + Customize(runtimeEntityType); + } + + static partial void Customize(RuntimeEntityType runtimeEntityType); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DataUnsafeAccessors.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DataUnsafeAccessors.cs new file mode 100644 index 00000000..193c8970 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DataUnsafeAccessors.cs @@ -0,0 +1,16 @@ +// +using System; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Scaffolding; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public static class DataUnsafeAccessors + { + [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "k__BackingField")] + public static extern ref byte[] Blob(CompiledModelTestBase.Data @this); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DbContextAssemblyAttributes.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DbContextAssemblyAttributes.cs new file mode 100644 index 00000000..c224873f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DbContextAssemblyAttributes.cs @@ -0,0 +1,9 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using TestNamespace; + +#pragma warning disable 219, 612, 618 +#nullable disable + +[assembly: DbContextModel(typeof(DbContext), typeof(DbContextModel))] diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DbContextModel.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DbContextModel.cs new file mode 100644 index 00000000..583ee4d9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DbContextModel.cs @@ -0,0 +1,48 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + [DbContext(typeof(DbContext))] + public partial class DbContextModel : RuntimeModel + { + private static readonly bool _useOldBehavior31751 = + System.AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue31751", out var enabled31751) && enabled31751; + + static DbContextModel() + { + var model = new DbContextModel(); + + if (_useOldBehavior31751) + { + model.Initialize(); + } + else + { + var thread = new System.Threading.Thread(RunInitialization, 10 * 1024 * 1024); + thread.Start(); + thread.Join(); + + void RunInitialization() + { + model.Initialize(); + } + } + + model.Customize(); + _instance = (DbContextModel)model.FinalizeModel(); + } + + private static DbContextModel _instance; + public static IModel Instance => _instance; + + partial void Initialize(); + + partial void Customize(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DbContextModelBuilder.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DbContextModelBuilder.cs new file mode 100644 index 00000000..a2601451 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/Baselines/Triggers/DbContextModelBuilder.cs @@ -0,0 +1,90 @@ +// +using System; +using System.Collections.Generic; +using EntityFrameworkCore.Jet.Metadata; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Update.Internal; + +#pragma warning disable 219, 612, 618 +#nullable disable + +namespace TestNamespace +{ + public partial class DbContextModel + { + private DbContextModel() + : base(skipDetectChanges: false, modelId: new Guid("00000000-0000-0000-0000-000000000000"), entityTypeCount: 1) + { + } + + partial void Initialize() + { + var data = DataEntityType.Create(this); + + DataEntityType.CreateAnnotations(data); + + AddAnnotation("Jet:ValueGenerationStrategy", JetValueGenerationStrategy.IdentityColumn); + AddAnnotation("Relational:MaxIdentifierLength", 64); + AddRuntimeAnnotation("Relational:RelationalModelFactory", () => CreateRelationalModel()); + } + + private IRelationalModel CreateRelationalModel() + { + var relationalModel = new RelationalModel(this); + + var data = FindEntityType("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data")!; + + var defaultTableMappings = new List>(); + data.SetRuntimeAnnotation("Relational:DefaultMappings", defaultTableMappings); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase = new TableBase("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", null, relationalModel); + var blobColumnBase = new ColumnBase("Blob", "longbinary", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase) + { + IsNullable = true + }; + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.Columns.Add("Blob", blobColumnBase); + var idColumnBase = new ColumnBase("Id", "integer", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.Columns.Add("Id", idColumnBase); + relationalModel.DefaultTables.Add("Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase); + var microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase = new TableMappingBase(data, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase, null); + microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataTableBase.AddTypeMapping(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase, false); + defaultTableMappings.Add(microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)idColumnBase, data.FindProperty("Id")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + RelationalModel.CreateColumnMapping((ColumnBase)blobColumnBase, data.FindProperty("Blob")!, microsoftEntityFrameworkCoreScaffoldingCompiledModelTestBaseDataMappingBase); + + var tableMappings = new List(); + data.SetRuntimeAnnotation("Relational:TableMappings", tableMappings); + var dataTable = new Table("Data", null, relationalModel); + var idColumn = new Column("Id", "integer", dataTable); + dataTable.Columns.Add("Id", idColumn); + idColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(idColumn); + idColumn.AddAnnotation("Jet:Identity", "1, 1"); + var blobColumn = new Column("Blob", "longbinary", dataTable) + { + IsNullable = true + }; + dataTable.Columns.Add("Blob", blobColumn); + blobColumn.Accessors = ColumnAccessorsFactory.CreateGeneric(blobColumn); + relationalModel.Tables.Add(("Data", null), dataTable); + var dataTableMapping = new TableMapping(data, dataTable, null); + dataTable.AddTypeMapping(dataTableMapping, false); + tableMappings.Add(dataTableMapping); + RelationalModel.CreateColumnMapping(idColumn, data.FindProperty("Id")!, dataTableMapping); + RelationalModel.CreateColumnMapping(blobColumn, data.FindProperty("Blob")!, dataTableMapping); + var pK_Data = new UniqueConstraint("PK_Data", dataTable, new[] { idColumn }); + dataTable.PrimaryKey = pK_Data; + pK_Data.SetRowKeyValueFactory(new SimpleRowKeyValueFactory(pK_Data)); + var pK_DataKey = RelationalModel.GetKey(this, + "Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelTestBase+Data", + new[] { "Id" }); + pK_Data.MappedKeys.Add(pK_DataKey); + RelationalModel.GetOrCreateUniqueConstraints(pK_DataKey).Add(pK_Data); + dataTable.UniqueConstraints.Add("PK_Data", pK_Data); + dataTable.Triggers.Add("Trigger1", data.FindDeclaredTrigger("Trigger1")); + dataTable.Triggers.Add("Trigger2", data.FindDeclaredTrigger("Trigger2")); + return relationalModel.MakeReadOnly(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/CompiledModelLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/CompiledModelLibRedTest.cs new file mode 100644 index 00000000..8ba80cd7 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/CompiledModelLibRedTest.cs @@ -0,0 +1,254 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.Jet.Infrastructure; +using EntityFrameworkCore.Jet.Metadata; +using EntityFrameworkCore.Jet.Metadata.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Metadata; +using System.Runtime.CompilerServices; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using NetTopologySuite; +using NetTopologySuite.Geometries; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Scaffolding; + +public class CompiledModelLibRedTest(NonSharedFixture fixture) : CompiledModelRelationalTestBase(fixture) +{ + protected override void BuildBigModel(ModelBuilder modelBuilder, bool jsonColumns) + { + base.BuildBigModel(modelBuilder, jsonColumns); + + modelBuilder + .UseJetIdentityColumns(3, 2); + + modelBuilder.Entity(eb => + { + if (!jsonColumns) + { + eb.Property(e => e.Id).HasConversion().UseJetIdentityColumn(2, 3).ValueGeneratedOnAdd(); + } + else + { + // long? maps to decimal(20,0) in Jet — no identity support; mark explicitly so the + // compiled model carries the annotation (convention can't infer it without converter). + eb.Property(e => e.Id).HasAnnotation(JetAnnotationNames.ValueGenerationStrategy, JetValueGenerationStrategy.None); + } + + eb.HasKey(e => new { e.Id, e.AlternateId }); + + eb.OwnsOne( + e => e.Owned, ob => + { + ob.Property(e => e.Details); + + if (!jsonColumns) + { + ob.ToTable( + "PrincipalBase", "mySchema", + t => t.Property("PrincipalBaseId").UseJetIdentityColumn(2, 3)); + } + }); + }); + + modelBuilder.Entity>>(eb => + { + eb.HasMany(e => e.Principals).WithMany(e => (ICollection>>)e.Deriveds) + .UsingEntity(jb => + { + }); + }); + + modelBuilder.Entity(eb => + { + eb.Property(m => m.CharToStringConverterProperty) + .IsFixedLength(); + }); + } + + protected override void AssertBigModel(IModel model, bool jsonColumns) + { + base.AssertBigModel(model, jsonColumns); + /*Assert.Equal( + [RelationalAnnotationNames.MaxIdentifierLength, JetAnnotationNames.ValueGenerationStrategy], + model.GetAnnotations().Select(a => a.Name));*/ + Assert.Equal(JetValueGenerationStrategy.IdentityColumn, model.GetValueGenerationStrategy()); + Assert.Equal( + CoreStrings.RuntimeModelMissingData, + Assert.Throws(() => model.GetPropertyAccessMode()).Message); + Assert.Equal(model[JetAnnotationNames.IdentitySeed], 3); + Assert.Equal(model[JetAnnotationNames.IdentityIncrement], 2); + + var principalBase = model.FindEntityType(typeof(PrincipalBase))!; + var principalId = principalBase.FindProperty(nameof(PrincipalBase.Id))!; + // Without HasConversion() (JSON columns path), Id is a long which maps to decimal(20,0) in Jet + Assert.Equal(jsonColumns ? "decimal(20,0)" : "integer", principalId.GetColumnType()); + if (jsonColumns) + { + Assert.Equal( + [JetAnnotationNames.ValueGenerationStrategy], + principalId.GetAnnotations().Select(a => a.Name)); + Assert.Equal(JetValueGenerationStrategy.None, principalId.GetValueGenerationStrategy()); + } + else + { + /*Assert.Equal( + [RelationalAnnotationNames.RelationalOverrides, JetAnnotationNames.ValueGenerationStrategy], + principalId.GetAnnotations().Select(a => a.Name));*/ + Assert.Equal(JetValueGenerationStrategy.IdentityColumn, principalId.GetValueGenerationStrategy()); + } + + Assert.Equal(model[JetAnnotationNames.IdentitySeed], 3); + Assert.Equal(model[JetAnnotationNames.IdentityIncrement], 2); + + var principalKey = principalBase.GetKeys().Last(); + + var referenceOwnedNavigation = principalBase.GetNavigations().Single(); + var referenceOwnedType = referenceOwnedNavigation.TargetEntityType; + + var principalTable = StoreObjectIdentifier.Create(referenceOwnedType, StoreObjectType.Table)!.Value; + if (jsonColumns) + { + Assert.Equal( + JetValueGenerationStrategy.None, + principalId.GetValueGenerationStrategy(principalTable)); + } + else + { + Assert.Equal( + JetValueGenerationStrategy.IdentityColumn, + principalId.GetValueGenerationStrategy(principalTable)); + } + + var detailsProperty = referenceOwnedType.FindProperty(nameof(OwnedType.Details))!; + + var principalDerived = model.FindEntityType(typeof(PrincipalDerived>))!; + var ownedCollectionNavigation = principalDerived.GetDeclaredNavigations().Last(); + var collectionOwnedType = ownedCollectionNavigation.TargetEntityType; + + var derivedSkipNavigation = principalDerived.GetDeclaredSkipNavigations().Single(); + var joinType = derivedSkipNavigation.JoinEntityType; + + var rowid = joinType.GetProperties().Single(p => !p.IsForeignKey()); + Assert.Equal("varbinary(8)", rowid.GetColumnType()); + Assert.Equal(JetValueGenerationStrategy.None, rowid.GetValueGenerationStrategy()); + + var manyTypesType = model.FindEntityType(typeof(ManyTypes))!; + var stringProperty = manyTypesType.FindProperty(nameof(ManyTypes.String))!; + Assert.True(stringProperty.FindRelationalTypeMapping()!.IsUnicode); + Assert.False(stringProperty.FindRelationalTypeMapping()!.IsFixedLength); + var charToStringConverterProperty = manyTypesType.FindProperty(nameof(ManyTypes.CharToStringConverterProperty))!; + Assert.True(charToStringConverterProperty.FindRelationalTypeMapping()!.IsUnicode); + Assert.True(charToStringConverterProperty.FindRelationalTypeMapping()!.IsFixedLength); + + var dependentNavigation = principalDerived.GetDeclaredNavigations().First(); + var dependentBase = dependentNavigation.TargetEntityType; + var dependentDerived = dependentBase.GetDerivedTypes().Single(); + + var dependentData = dependentDerived.GetDeclaredProperties().First(); + Assert.Equal("char(20)", dependentData.GetColumnType()); + + var dependentMoney = dependentDerived.GetDeclaredProperties().Last(); + Assert.Equal("decimal(9,3)", dependentMoney.GetColumnType()); + Assert.Equal( + [ + dependentBase, + dependentDerived, + manyTypesType, + principalBase, + referenceOwnedType, + principalDerived, + collectionOwnedType, + joinType + ], + model.GetEntityTypes()); + } + + protected override void BuildComplexTypesModel(ModelBuilder modelBuilder) + { + base.BuildComplexTypesModel(modelBuilder); + + modelBuilder.Entity(eb => + { + eb.ComplexProperty( + e => e.Owned, eb => + { + eb.Ignore(c => c.Context); + + eb.Property(c => c.Details); + }); + }); + } + + protected override void AssertComplexTypes(IModel model) + { + base.AssertComplexTypes(model); + + var principalBase = model.FindEntityType(typeof(PrincipalBase))!; + var complexProperty = principalBase.GetComplexProperties().Single(); + var complexType = complexProperty.ComplexType; + var detailsProperty = complexType.FindProperty(nameof(OwnedType.Details))!; + // "Jet:..." (J=74) sorts before "MaxLength" (M=77) in the compiled model's ordinal annotation order. + Assert.Equal( + [ + JetAnnotationNames.ValueGenerationStrategy, + CoreAnnotationNames.MaxLength, + CoreAnnotationNames.Precision, + RelationalAnnotationNames.ColumnName, + RelationalAnnotationNames.ColumnType, + CoreAnnotationNames.Scale, + CoreAnnotationNames.Unicode, + "foo" + ], + detailsProperty.GetAnnotations().Select(a => a.Name)); + + var dbFunction = model.FindDbFunction("PrincipalBaseTvf")!; + //Assert.Equal("dbo", dbFunction.Schema); + + Assert.Equal(JetValueGenerationStrategy.None, detailsProperty.GetValueGenerationStrategy()); + Assert.Equal( + CoreStrings.RuntimeModelMissingData, + Assert.Throws(() => detailsProperty.GetJetIdentitySeed()).Message); + Assert.Equal( + CoreStrings.RuntimeModelMissingData, + Assert.Throws(() => detailsProperty.GetJetIdentityIncrement()).Message); + } + + protected override TestHelpers TestHelpers + => LibRedTestHelpers.Instance; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + protected override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + builder = base.AddOptions(builder) + .ConfigureWarnings(w => w.Ignore(JetEventId.DecimalTypeDefaultWarning)); + new JetDbContextOptionsBuilder(builder); + return builder; + } + + protected override BuildSource AddReferences(BuildSource build, [CallerFilePath] string filePath = "") + { + base.AddReferences(build); + build.References.Add(BuildReference.ByName("EntityFrameworkCore.Jet")); + // The generated model names LibRed's own type mappings (LibRedLongTypeMapping and friends), which + // live in this assembly — without it the generated source doesn't compile. Copied from the Jet test, + // where only the Jet reference was needed. + build.References.Add(BuildReference.ByName("EntityFrameworkCore.LibRed")); + return build; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Scaffolding/LibRedDatabaseModelFactoryTest.cs b/test/EFCore.LibRed.FunctionalTests/Scaffolding/LibRedDatabaseModelFactoryTest.cs new file mode 100644 index 00000000..a406e815 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Scaffolding/LibRedDatabaseModelFactoryTest.cs @@ -0,0 +1,2206 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Diagnostics.Internal; +using EntityFrameworkCore.Jet.Internal; +using EntityFrameworkCore.Jet.Metadata.Internal; +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Scaffolding.Metadata; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Scaffolding.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Xunit; +using System.Threading.Tasks; + +#nullable enable +// ReSharper disable InconsistentNaming + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Scaffolding +{ + public class LibRedDatabaseModelFactoryTest : IClassFixture + { + protected LibRedDatabaseModelFixture Fixture { get; } + + public LibRedDatabaseModelFactoryTest(LibRedDatabaseModelFixture fixture) + { + Fixture = fixture; + Fixture.OperationReporter.Clear(); + } + + #region Model + + [ConditionalFact] + public void Create_tables() + => Test( + """ + + CREATE TABLE `Everest` ( id int ); + + CREATE TABLE `Denali` ( id int ); + """, + [], + [], + dbModel => + { + Assert.Collection( + dbModel.Tables.OrderBy(t => t.Name), + d => + { + Assert.Null(d.Schema); + Assert.Equal("Denali", d.Name); + }, + e => + { + Assert.Null(e.Schema); + Assert.Equal("Everest", e.Name); + }); + }, + """ + + DROP TABLE `Everest`; + + DROP TABLE `Denali`; + """); + + [ConditionalFact] + public void Default_database_collation_is_not_scaffolded() + => Test( + @"", + [], + [], + dbModel => Assert.Null(dbModel.Collation), + @""); + + #endregion + + #region FilteringSchemaTable + + [ConditionalFact] + public void Filter_tables() + => Test( + """ + + CREATE TABLE `K2` ( Id int, A varchar, UNIQUE (A ) ); + + CREATE TABLE `Kilimanjaro` ( Id int, B varchar, UNIQUE (B), FOREIGN KEY (B) REFERENCES K2 (A) ); + """, + ["K2"], + [], + dbModel => + { + var table = Assert.Single(dbModel.Tables); + // ReSharper disable once PossibleNullReferenceException + Assert.Equal("K2", table.Name); + Assert.Equal(2, table.Columns.Count); + Assert.Equal(1, table.UniqueConstraints.Count); + Assert.Empty(table.ForeignKeys); + }, + """ + + DROP TABLE `Kilimanjaro`; + + DROP TABLE `K2`; + """); + + [ConditionalFact] + public void Filter_tables_with_quote_in_name() + => Test( + """ + + CREATE TABLE `K2'` ( Id int, A varchar, UNIQUE (A ) ); + + CREATE TABLE `Kilimanjaro` ( Id int, B varchar, UNIQUE (B), FOREIGN KEY (B) REFERENCES `K2'` (A) ); + """, + ["K2'"], + [], + dbModel => + { + var table = Assert.Single(dbModel.Tables); + // ReSharper disable once PossibleNullReferenceException + Assert.Equal("K2'", table.Name); + Assert.Equal(2, table.Columns.Count); + Assert.Equal(1, table.UniqueConstraints.Count); + Assert.Empty(table.ForeignKeys); + }, + """ + + DROP TABLE `Kilimanjaro`; + + DROP TABLE `K2'`; + """); + + [ConditionalFact] + public void Filter_tables_with_qualified_name() + => Test( + """ + + CREATE TABLE `K2` ( `Id` int, `A` varchar, UNIQUE (A ) ); + + CREATE TABLE `Kilimanjaro` ( `Id` int, `B` varchar, UNIQUE (B) ); + """, + ["`K2`"], + [], + dbModel => + { + var table = Assert.Single(dbModel.Tables); + // ReSharper disable once PossibleNullReferenceException + Assert.Equal("K2", table.Name); + Assert.Equal(2, table.Columns.Count); + Assert.Equal(1, table.UniqueConstraints.Count); + Assert.Empty(table.ForeignKeys); + }, + """ + + DROP TABLE `Kilimanjaro`; + + DROP TABLE `K2`; + """); + + #endregion + + #region Table + + [ConditionalFact] + public void Create_columns() + => Test( + """ + + CREATE TABLE `Blogs` ( + Id int, + Name varchar(100) NOT NULL + ); + """, + [], + [], + dbModel => + { + var table = dbModel.Tables.Single(); + + Assert.Equal(2, table.Columns.Count); + Assert.All( + table.Columns, c => + { + Assert.Null(c.Table.Schema); + Assert.Equal("Blogs", c.Table.Name); + }); + + Assert.Single(table.Columns.Where(c => c.Name == "Id")); + Assert.Single(table.Columns.Where(c => c.Name == "Name")); + }, + "DROP TABLE `Blogs`"); + + [ConditionalFact] + public void Create_view_columns() + => Test( + """ + + CREATE VIEW `BlogsView` + AS + SELECT + CLng(100) AS Id, + '' AS Name; + """, + [], + [], + dbModel => + { + var table = Assert.IsType(dbModel.Tables.Single()); + + Assert.Equal(2, table.Columns.Count); + Assert.Null(table.PrimaryKey); + Assert.All( + table.Columns, c => + { + Assert.Null(c.Table.Schema); + Assert.Equal("BlogsView", c.Table.Name); + }); + + Assert.Single(table.Columns.Where(c => c.Name == "Id")); + Assert.Single(table.Columns.Where(c => c.Name == "Name")); + }, + "DROP VIEW `BlogsView`;"); + + [ConditionalFact] + public void Create_primary_key() + => Test( + """ + + CREATE TABLE PrimaryKeyTable ( + Id int CONSTRAINT PK__PrimaryKeyTable PRIMARY KEY + ); + """, + [], + [], + dbModel => + { + var pk = dbModel.Tables.Single().PrimaryKey; + + Assert.Null(pk!.Table!.Schema); + Assert.Equal("PrimaryKeyTable", pk.Table.Name); + Assert.StartsWith("PK__PrimaryK", pk.Name); + Assert.Equal( + ["Id"], pk.Columns.Select(ic => ic.Name).ToList()); + }, + "DROP TABLE PrimaryKeyTable;"); + + [ConditionalFact] + public void Create_unique_constraints() + => Test( + """ + + CREATE TABLE UniqueConstraint ( + Id int, + Name int CONSTRAINT UQ__UniqueConstraint UNIQUE, + IndexProperty int + ); + + CREATE INDEX IX_INDEX on UniqueConstraint ( IndexProperty ); + """, + [], + [], + dbModel => + { + var uniqueConstraint = Assert.Single(dbModel.Tables.Single().UniqueConstraints); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(uniqueConstraint.Table.Schema); + Assert.Equal("UniqueConstraint", uniqueConstraint.Table.Name); + Assert.StartsWith("UQ__UniqueCo", uniqueConstraint.Name); + Assert.Equal( + ["Name"], uniqueConstraint.Columns.Select(ic => ic.Name).ToList()); + }, + "DROP TABLE UniqueConstraint;"); + + [ConditionalFact] + public void Create_indexes() + => Test( + """ + + CREATE TABLE IndexTable ( + Id int, + Name int, + IndexProperty int + ); + + CREATE INDEX IX_NAME on IndexTable ( Name ); + CREATE INDEX IX_INDEX on IndexTable ( IndexProperty ); + """, + [], + [], + dbModel => + { + var table = dbModel.Tables.Single(); + + Assert.Equal(2, table.Indexes.Count); + Assert.All( + table.Indexes, c => + { + Assert.Null(c.Table!.Schema); + Assert.Equal("IndexTable", c.Table.Name); + }); + + Assert.Single(table.Indexes.Where(c => c.Name == "IX_NAME")); + Assert.Single(table.Indexes.Where(c => c.Name == "IX_INDEX")); + }, + "DROP TABLE IndexTable;"); + + [ConditionalFact] + public void Create_multiple_indexes_on_same_column() + => Test( + """ + + CREATE TABLE IndexTable ( + Id int, + IndexProperty int + ); + + CREATE INDEX IX_One on IndexTable ( IndexProperty ); + CREATE INDEX IX_Two on IndexTable ( IndexProperty ); + """, + [], + [], + dbModel => + { + var table = dbModel.Tables.Single(); + + Assert.Equal(2, table.Indexes.Count); + Assert.All( + table.Indexes, c => + { + Assert.Null(c.Table!.Schema); + Assert.Equal("IndexTable", c.Table.Name); + }); + + Assert.Collection( + table.Indexes.OrderBy(i => i.Name), + index => { Assert.Equal("IX_One", index.Name); }, + index => { Assert.Equal("IX_Two", index.Name); }); + }, + "DROP TABLE IndexTable;"); + + [ConditionalFact] + public void Create_foreign_keys() + => Test( + """ + + CREATE TABLE PrincipalTable ( + Id int CONSTRAINT PK__PrincipalTable PRIMARY KEY + ); + + CREATE TABLE FirstDependent ( + Id int PRIMARY KEY, + ForeignKeyId int, + FOREIGN KEY (ForeignKeyId) REFERENCES PrincipalTable(Id) ON DELETE CASCADE + ); + + CREATE TABLE SecondDependent ( + Id int PRIMARY KEY, + FOREIGN KEY (Id) REFERENCES PrincipalTable(Id) ON DELETE NO ACTION + ); + """, + [], + [], + dbModel => + { + var firstFk = Assert.Single(dbModel.Tables.Single(t => t.Name == "FirstDependent").ForeignKeys); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(firstFk.Table.Schema); + Assert.Equal("FirstDependent", firstFk.Table.Name); + Assert.Null(firstFk.PrincipalTable.Schema); + Assert.Equal("PrincipalTable", firstFk.PrincipalTable.Name); + Assert.Equal( + ["ForeignKeyId"], firstFk.Columns.Select(ic => ic.Name).ToList()); + Assert.Equal( + ["Id"], firstFk.PrincipalColumns.Select(ic => ic.Name).ToList()); + Assert.Equal(ReferentialAction.Cascade, firstFk.OnDelete); + + var secondFk = Assert.Single(dbModel.Tables.Single(t => t.Name == "SecondDependent").ForeignKeys); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(secondFk.Table.Schema); + Assert.Equal("SecondDependent", secondFk.Table.Name); + Assert.Null(secondFk.PrincipalTable.Schema); + Assert.Equal("PrincipalTable", secondFk.PrincipalTable.Name); + Assert.Equal( + ["Id"], secondFk.Columns.Select(ic => ic.Name).ToList()); + Assert.Equal( + ["Id"], secondFk.PrincipalColumns.Select(ic => ic.Name).ToList()); + Assert.Equal(ReferentialAction.NoAction, secondFk.OnDelete); + }, + """ + + DROP TABLE SecondDependent; + DROP TABLE FirstDependent; + DROP TABLE PrincipalTable; + """); + + #endregion + + #region ColumnFacets + + [ConditionalFact] + public void Column_with_sysname_assigns_underlying_store_type_and_nullability() + => Test( + """ + + CREATE TABLE TypeAlias ( + Id int, + typeAliasColumn sysname + ); + """, + [], + [], + dbModel => + { + var column = Assert.Single(dbModel.Tables.Single().Columns.Where(c => c.Name == "typeAliasColumn")); + + // ReSharper disable once PossibleNullReferenceException + Assert.Equal("varchar(255)", column.StoreType); + Assert.True(column.IsNullable); + }, + """ + + DROP TABLE TypeAlias; + """); + + [ConditionalFact] + public void Decimal_numeric_types_have_precision_scale() + => Test( + """ + + CREATE TABLE NumericColumns ( + Id int, + decimalColumn decimal NOT NULL, + decimal105Column decimal(10, 5) NOT NULL, + decimalDefaultColumn decimal(18, 2) NOT NULL, + numericColumn numeric NOT NULL, + numeric152Column numeric(15, 2) NOT NULL, + numericDefaultColumn numeric(18, 2) NOT NULL, + numericDefaultPrecisionColumn numeric(28, 5) NOT NULL + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("decimal(18,0)", columns.Single(c => c.Name == "decimalColumn").StoreType); + Assert.Equal("decimal(10,5)", columns.Single(c => c.Name == "decimal105Column").StoreType); + Assert.Equal("decimal(18,2)", columns.Single(c => c.Name == "decimalDefaultColumn").StoreType); + Assert.Equal("decimal(18,0)", columns.Single(c => c.Name == "numericColumn").StoreType); + Assert.Equal("decimal(15,2)", columns.Single(c => c.Name == "numeric152Column").StoreType); + Assert.Equal("decimal(18,2)", columns.Single(c => c.Name == "numericDefaultColumn").StoreType); + Assert.Equal("decimal(28,5)", + columns.Single(c => c.Name == "numericDefaultPrecisionColumn").StoreType); + }, + "DROP TABLE NumericColumns;"); + + [ConditionalFact(Skip = "Unsupported by Access/ACE: the SQL Server `(max)` size keyword is not valid ACE " + + "DDL. Access has no nchar/nvarchar distinction either, and unbounded columns are LONGTEXT/LONGBINARY, " + + "not `(max)`. EF Core never emits `varchar(max)` to Access, so this is SQL-Server-only.")] + public void Max_length_of_negative_one_translate_to_max_in_store_type() + => Test( + """ + + CREATE TABLE MaxColumns ( + Id int, + varcharMaxColumn varchar(255) NULL, + nvarcharMaxColumn nvarchar(255) NULL, + varbinaryMaxColumn varbinary(max) NULL, + binaryVaryingMaxColumn binary varying(max) NULL, + charVaryingMaxColumn char varying(max) NULL, + characterVaryingMaxColumn character varying(max) NULL, + nationalCharVaryingMaxColumn national char varying(max) NULL, + nationalCharacterVaryingMaxColumn national char varying(max) NULL + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "varcharMaxColumn").StoreType); + Assert.Equal("nvarchar(255)", columns.Single(c => c.Name == "nvarcharMaxColumn").StoreType); + Assert.Equal("varbinary(max)", columns.Single(c => c.Name == "varbinaryMaxColumn").StoreType); + Assert.Equal("varbinary(max)", columns.Single(c => c.Name == "binaryVaryingMaxColumn").StoreType); + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "charVaryingMaxColumn").StoreType); + Assert.Equal("nvarchar(255)", + columns.Single(c => c.Name == "nationalCharVaryingMaxColumn").StoreType); + Assert.Equal("nvarchar(255)", + columns.Single(c => c.Name == "nationalCharacterVaryingMaxColumn").StoreType); + }, + "DROP TABLE MaxColumns;"); + + [ConditionalFact] + public void Specific_max_length_are_add_to_store_type() + => Test( + """ + + CREATE TABLE LengthColumns ( + Id int, + char10Column char(10) NULL, + varchar66Column varchar(66) NULL, + nchar99Column nchar(99) NULL, + varchar100Column varchar(100) NULL, + binary111Column binary(111) NULL, + varbinary123Column varbinary(123) NULL, + binaryVarying133Column binary varying(133) NULL, + charVarying144Column char varying(144) NULL, + character155Column character(155) NULL, + characterVarying166Column character varying(166) NULL, + nationalCharacter171Column national character(171) NULL, + nationalCharVarying177Column national char varying(177) NULL, + nationalCharacterVarying188Column national char varying(188) NULL + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("char(10)", columns.Single(c => c.Name == "char10Column").StoreType); + Assert.Equal("varchar(66)", columns.Single(c => c.Name == "varchar66Column").StoreType); + Assert.Equal("char(99)", columns.Single(c => c.Name == "nchar99Column").StoreType); + Assert.Equal("varchar(100)", columns.Single(c => c.Name == "varchar100Column").StoreType); + Assert.Equal("varbinary(111)", columns.Single(c => c.Name == "binary111Column").StoreType); + Assert.Equal("varbinary(123)", columns.Single(c => c.Name == "varbinary123Column").StoreType); + Assert.Equal("varbinary(133)", columns.Single(c => c.Name == "binaryVarying133Column").StoreType); + Assert.Equal("varchar(144)", columns.Single(c => c.Name == "charVarying144Column").StoreType); + Assert.Equal("char(155)", columns.Single(c => c.Name == "character155Column").StoreType); + Assert.Equal("varchar(166)", columns.Single(c => c.Name == "characterVarying166Column").StoreType); + Assert.Equal("char(171)", columns.Single(c => c.Name == "nationalCharacter171Column").StoreType); + Assert.Equal("varchar(177)", + columns.Single(c => c.Name == "nationalCharVarying177Column").StoreType); + Assert.Equal("varchar(188)", + columns.Single(c => c.Name == "nationalCharacterVarying188Column").StoreType); + }, + "DROP TABLE LengthColumns;"); + + [ConditionalFact(Skip = "Unsupported by Access/ACE: an 8000-byte binary column exceeds Access's 510-byte " + + "binary limit (verified: binary(510) is accepted, binary(511) is rejected \"Size of field is too " + + "long\") — the OLE DB provider throws \"provider is not capable\" reading the file, so this " + + "SQL-Server-sized case can't be represented in a Jet/ACE database.")] + public void Default_max_length_are_added_to_binary_varbinary() + => Test( + """ + + CREATE TABLE DefaultRequiredLengthBinaryColumns ( + Id int, + binaryColumn binary(8000), + binaryVaryingColumn binary varying(8000), + varbinaryColumn varbinary(8000) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("binary(8000)", columns.Single(c => c.Name == "binaryColumn").StoreType); + Assert.Equal("varbinary(8000)", columns.Single(c => c.Name == "binaryVaryingColumn").StoreType); + Assert.Equal("varbinary(8000)", columns.Single(c => c.Name == "varbinaryColumn").StoreType); + }, + "DROP TABLE DefaultRequiredLengthBinaryColumns;"); + + [ConditionalFact] + public void Default_max_length_are_added_to_char_1() + => Test( + """ + + CREATE TABLE DefaultRequiredLengthCharColumns ( + Id int, + charColumn char(255) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("char(255)", columns.Single(c => c.Name == "charColumn").StoreType); + }, + "DROP TABLE DefaultRequiredLengthCharColumns;"); + + [ConditionalFact] + public void Default_max_length_are_added_to_char_2() + => Test( + """ + + CREATE TABLE DefaultRequiredLengthCharColumns ( + Id int, + characterColumn character(255) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("char(255)", columns.Single(c => c.Name == "characterColumn").StoreType); + }, + "DROP TABLE DefaultRequiredLengthCharColumns;"); + + [ConditionalFact] + public void Default_max_length_are_added_to_varchar() + => Test( + """ + + CREATE TABLE DefaultRequiredLengthVarcharColumns ( + Id int, + charVaryingColumn char varying(255), + characterVaryingColumn character varying(255), + varcharColumn varchar(255) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "charVaryingColumn").StoreType); + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "characterVaryingColumn").StoreType); + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "varcharColumn").StoreType); + }, + "DROP TABLE DefaultRequiredLengthVarcharColumns;"); + + [ConditionalFact] + public void Default_max_length_are_added_to_nchar_1() + => Test( + """ + + CREATE TABLE DefaultRequiredLengthNcharColumns ( + Id int, + nationalCharColumn national char(255) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("char(255)", columns.Single(c => c.Name == "nationalCharColumn").StoreType); + }, + "DROP TABLE DefaultRequiredLengthNcharColumns;"); + + [ConditionalFact] + public void Default_max_length_are_added_to_nchar_2() + => Test( + """ + + CREATE TABLE DefaultRequiredLengthNcharColumns ( + Id int, + nationalCharacterColumn national character(255) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("char(255)", columns.Single(c => c.Name == "nationalCharacterColumn").StoreType); + }, + "DROP TABLE DefaultRequiredLengthNcharColumns;"); + + [ConditionalFact] + public void Default_max_length_are_added_to_nchar_3() + => Test( + """ + + CREATE TABLE DefaultRequiredLengthNcharColumns ( + Id int, + ncharColumn nchar(255) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("char(255)", columns.Single(c => c.Name == "ncharColumn").StoreType); + }, + "DROP TABLE DefaultRequiredLengthNcharColumns;"); + + [ConditionalFact] + public void Default_max_length_are_added_to_nvarchar() + => Test( + """ + + CREATE TABLE DefaultRequiredLengthNvarcharColumns ( + Id int, + nationalCharVaryingColumn national char varying(255), + nationalCharacterVaryingColumn national character varying(255), + varcharColumn varchar(255) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "nationalCharVaryingColumn").StoreType); + Assert.Equal("varchar(255)", + columns.Single(c => c.Name == "nationalCharacterVaryingColumn").StoreType); + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "varcharColumn").StoreType); + }, + "DROP TABLE DefaultRequiredLengthNvarcharColumns;"); + + + [ConditionalFact] + public void Types_without_a_length_use_the_max_length() + => Test( + """ + + CREATE TABLE OneLengthColumns ( + Id int, + binaryColumn binary NULL, + binaryVaryingColumn binary varying NULL, + characterColumn character NULL, + characterVaryingColumn character varying NULL, + charColumn char NULL, + charVaryingColumn char varying NULL, + nationalCharColumn national char NULL, + nationalCharacterColumn national character NULL, + nationalCharacterVaryingColumn national char varying NULL, + nationalCharVaryingColumn national char varying NULL, + ncharColumn nchar NULL, + nvarcharColumn nvarchar NULL, + varcharColumn varchar NULL, + varbinaryColumn varbinary NULL + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + // Two corrections from the SQL-Server test this was adapted from. (1) Access/ACE has no + // separate nchar/nvarchar (all text is UTF-16) and reports every binary column as varbinary, + // so the N-prefixed and fixed-binary forms collapse to char/varchar/varbinary. (2) A size-less + // char/varchar/binary takes the MAXIMUM in ACE — 255 characters / 510 bytes — not 1 (verified + // against ACE's own schema: a bare `varchar` reports CHARACTER_MAXIMUM_LENGTH = 255, a bare + // `binary` = 510). SQL Server's "length of one" default simply does not apply here. + Assert.Equal("varbinary(510)", columns.Single(c => c.Name == "binaryColumn").StoreType); + Assert.Equal("varbinary(510)", columns.Single(c => c.Name == "binaryVaryingColumn").StoreType); + Assert.Equal("char(255)", columns.Single(c => c.Name == "characterColumn").StoreType); + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "characterVaryingColumn").StoreType); + Assert.Equal("char(255)", columns.Single(c => c.Name == "charColumn").StoreType); + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "charVaryingColumn").StoreType); + Assert.Equal("char(255)", columns.Single(c => c.Name == "nationalCharColumn").StoreType); + Assert.Equal("char(255)", columns.Single(c => c.Name == "nationalCharacterColumn").StoreType); + Assert.Equal("varchar(255)", + columns.Single(c => c.Name == "nationalCharacterVaryingColumn").StoreType); + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "nationalCharVaryingColumn").StoreType); + Assert.Equal("char(255)", columns.Single(c => c.Name == "ncharColumn").StoreType); + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "nvarcharColumn").StoreType); + Assert.Equal("varbinary(510)", columns.Single(c => c.Name == "varbinaryColumn").StoreType); + Assert.Equal("varchar(255)", columns.Single(c => c.Name == "varcharColumn").StoreType); + }, + "DROP TABLE OneLengthColumns;"); + + [ConditionalFact] + public void Store_types_without_any_facets() + => Test( + """ + + CREATE TABLE NoFacetTypes ( + Id int, + bigintColumn bigint NOT NULL, + bitColumn bit NOT NULL, + dateColumn date NOT NULL, + datetime2Column datetime2 NULL, + datetimeColumn datetime NULL, + datetimeoffsetColumn datetimeoffset NULL, + floatColumn float NOT NULL, + geographyColumn geography NULL, + geometryColumn geometry NULL, + hierarchyidColumn hierarchyid NULL, + imageColumn image NULL, + intColumn int NOT NULL, + moneyColumn money NOT NULL, + ntextColumn ntext NULL, + realColumn real NULL, + smalldatetimeColumn smalldatetime NULL, + smallintColumn smallint NOT NULL, + smallmoneyColumn smallmoney NOT NULL, + textColumn text NULL, + timeColumn time NULL, + timestampColumn timestamp NULL, + tinyintColumn tinyint NOT NULL, + uniqueidentifierColumn uniqueidentifier NULL, + xmlColumn xml NULL + ); + + CREATE TABLE RowversionType ( + Id int, + rowversionColumn varbinary(8) NULL + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single(t => t.Name == "NoFacetTypes").Columns; + + Assert.Equal("bigint", columns.Single(c => c.Name == "bigintColumn").StoreType); + Assert.Equal("bit", columns.Single(c => c.Name == "bitColumn").StoreType); + Assert.Equal("date", columns.Single(c => c.Name == "dateColumn").StoreType); + Assert.Equal("datetime2", columns.Single(c => c.Name == "datetime2Column").StoreType); + Assert.Equal("datetime", columns.Single(c => c.Name == "datetimeColumn").StoreType); + Assert.Equal("datetimeoffset", columns.Single(c => c.Name == "datetimeoffsetColumn").StoreType); + Assert.Equal("float", columns.Single(c => c.Name == "floatColumn").StoreType); + Assert.Equal("geography", columns.Single(c => c.Name == "geographyColumn").StoreType); + Assert.Equal("geometry", columns.Single(c => c.Name == "geometryColumn").StoreType); + Assert.Equal("hierarchyid", columns.Single(c => c.Name == "hierarchyidColumn").StoreType); + Assert.Equal("image", columns.Single(c => c.Name == "imageColumn").StoreType); + Assert.Equal("int", columns.Single(c => c.Name == "intColumn").StoreType); + Assert.Equal("money", columns.Single(c => c.Name == "moneyColumn").StoreType); + Assert.Equal("ntext", columns.Single(c => c.Name == "ntextColumn").StoreType); + Assert.Equal("real", columns.Single(c => c.Name == "realColumn").StoreType); + Assert.Equal("smalldatetime", columns.Single(c => c.Name == "smalldatetimeColumn").StoreType); + Assert.Equal("smallint", columns.Single(c => c.Name == "smallintColumn").StoreType); + Assert.Equal("smallmoney", columns.Single(c => c.Name == "smallmoneyColumn").StoreType); + Assert.Equal("text", columns.Single(c => c.Name == "textColumn").StoreType); + Assert.Equal("time", columns.Single(c => c.Name == "timeColumn").StoreType); + Assert.Equal("tinyint", columns.Single(c => c.Name == "tinyintColumn").StoreType); + Assert.Equal("uniqueidentifier", columns.Single(c => c.Name == "uniqueidentifierColumn").StoreType); + Assert.Equal("xml", columns.Single(c => c.Name == "xmlColumn").StoreType); + + Assert.Equal( + "rowversion", + dbModel.Tables.Single(t => t.Name == "RowversionType").Columns + .Single(c => c.Name == "rowversionColumn").StoreType); + }, + """ + + DROP TABLE NoFacetTypes; + DROP TABLE RowversionType; + """); + + [ConditionalFact] + public void Default_and_computed_values_are_stored() + => Test( + """ + + CREATE TABLE DefaultComputedValues ( + Id int, + FixedDefaultValue datetime2 NOT NULL DEFAULT ('October 20, 2015 11am'), + ComputedValue AS GETDATE(), + A int NOT NULL, + B int NOT NULL, + SumOfAAndB AS A + B, + SumOfAAndBPersisted AS A + B PERSISTED + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var fixedDefaultValue = columns.Single(c => c.Name == "FixedDefaultValue"); + Assert.Equal("('October 20, 2015 11am')", fixedDefaultValue.DefaultValueSql); + Assert.Null(fixedDefaultValue.ComputedColumnSql); + + var computedValue = columns.Single(c => c.Name == "ComputedValue"); + Assert.Null(computedValue.DefaultValueSql); + Assert.Equal("(getdate())", computedValue.ComputedColumnSql); + + var sumOfAAndB = columns.Single(c => c.Name == "SumOfAAndB"); + Assert.Null(sumOfAAndB.DefaultValueSql); + Assert.Equal("([A]+[B])", sumOfAAndB.ComputedColumnSql); + Assert.False(sumOfAAndB.IsStored); + + var sumOfAAndBPersisted = columns.Single(c => c.Name == "SumOfAAndBPersisted"); + Assert.Null(sumOfAAndBPersisted.DefaultValueSql); + Assert.Equal("([A]+[B])", sumOfAAndBPersisted.ComputedColumnSql); + Assert.True(sumOfAAndBPersisted.IsStored); + }, + "DROP TABLE DefaultComputedValues;"); + + [ConditionalFact(Skip = "LibRed can only understand literal defaults")] + public void Non_literal_bool_default_values_are_passed_through() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A bit DEFAULT (CHOOSE(1, 0, 1, 2)), + B bit DEFAULT ((CONVERT([bit],(CHOOSE(1, 0, 1, 2))))), + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("(choose((1),(0),(1),(2)))", column.DefaultValueSql); + Assert.Null(column.FindAnnotation(RelationalAnnotationNames.DefaultValue)); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("(CONVERT([bit],choose((1),(0),(1),(2))))", column.DefaultValueSql); + Assert.Null(column.FindAnnotation(RelationalAnnotationNames.DefaultValue)); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_int_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A int DEFAULT -1, + B int DEFAULT 0, + C int DEFAULT 0, + D int DEFAULT -2, + E int DEFAULT 2, + F int DEFAULT 3 , + G int DEFAULT 4 + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("-1", column.DefaultValueSql); + Assert.Equal(-1, column.DefaultValue); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("0", column.DefaultValueSql); + Assert.Equal(0, column.DefaultValue); + + column = columns.Single(c => c.Name == "C"); + Assert.Equal("0", column.DefaultValueSql); + Assert.Equal(0, column.DefaultValue); + + column = columns.Single(c => c.Name == "D"); + Assert.Equal("-2", column.DefaultValueSql); + Assert.Equal(-2, column.DefaultValue); + + column = columns.Single(c => c.Name == "E"); + Assert.Equal("2", column.DefaultValueSql); + Assert.Equal(2, column.DefaultValue); + + column = columns.Single(c => c.Name == "F"); + Assert.Equal("3", column.DefaultValueSql); + Assert.Equal(3, column.DefaultValue); + + column = columns.Single(c => c.Name == "G"); + Assert.Equal("4", column.DefaultValueSql); + Assert.Equal(4, column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_short_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A smallint DEFAULT -1, + B smallint DEFAULT 0 + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("-1", column.DefaultValueSql); + Assert.Equal((short)-1, column.DefaultValue); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("0", column.DefaultValueSql); + Assert.Equal((short)0, column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + //Uses decimal as no bigint in LibRed.Use bigint if in Access 365. TODO + [ConditionalFact] + public void Simple_long_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A decimal(20,0) DEFAULT -1, + B decimal(20,0) DEFAULT 0 + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("-1", column.DefaultValueSql); + Assert.Equal((decimal)-1, column.DefaultValue); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("0", column.DefaultValueSql); + Assert.Equal((decimal)0, column.DefaultValue); + + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_byte_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A tinyint DEFAULT 1, + B tinyint DEFAULT 0 + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("1", column.DefaultValueSql); + Assert.Equal((byte)1, column.DefaultValue); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("0", column.DefaultValueSql); + Assert.Equal((byte)0, column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact(Skip = "LibRed can only understand literal defaults")] + public void Non_literal_int_default_values_are_passed_through() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A int DEFAULT (CHOOSE(1, 0, 1, 2)), + B int DEFAULT ((CONVERT([int],(CHOOSE(1, 0, 1, 2))))), + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("(choose((1),(0),(1),(2)))", column.DefaultValueSql); + Assert.Null(column.FindAnnotation(RelationalAnnotationNames.DefaultValue)); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("(CONVERT([int],choose((1),(0),(1),(2))))", column.DefaultValueSql); + Assert.Null(column.FindAnnotation(RelationalAnnotationNames.DefaultValue)); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_double_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A float DEFAULT -1.1111, + B float DEFAULT 0.0, + C float DEFAULT 1.1000000000000001e+000 + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("-1.1111", column.DefaultValueSql); + Assert.Equal(-1.1111, column.DefaultValue); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("0.0", column.DefaultValueSql); + Assert.Equal((double)0, column.DefaultValue); + + column = columns.Single(c => c.Name == "C"); + Assert.Equal("1.1000000000000001e+000", column.DefaultValueSql); + Assert.Equal(1.1000000000000001e+000, column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_float_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A real DEFAULT -1.1111, + B real DEFAULT 0.0, + C real DEFAULT 1.1000000000000001e+000 + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("-1.1111", column.DefaultValueSql); + Assert.Equal((float)-1.1111, column.DefaultValue); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("0.0", column.DefaultValueSql); + Assert.Equal((float)0, column.DefaultValue); + + column = columns.Single(c => c.Name == "C"); + Assert.Equal("1.1000000000000001e+000", column.DefaultValueSql); + Assert.Equal((float)1.1000000000000001e+000, column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_decimal_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A decimal DEFAULT -1.1111, + B decimal DEFAULT 0.0, + C decimal DEFAULT 0 + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("-1.1111", column.DefaultValueSql); + Assert.Equal((decimal)-1.1111, column.DefaultValue); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("0.0", column.DefaultValueSql); + Assert.Equal((decimal)0, column.DefaultValue); + + column = columns.Single(c => c.Name == "C"); + Assert.Equal("0", column.DefaultValueSql); + Assert.Equal((decimal)0, column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_bool_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A bit DEFAULT 0, + B bit DEFAULT 1, + C bit DEFAULT FALSE, + D bit DEFAULT TRUE + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("0", column.DefaultValueSql); + Assert.Equal(false, column.DefaultValue); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("1", column.DefaultValueSql); + Assert.Equal(true, column.DefaultValue); + + column = columns.Single(c => c.Name == "C"); + Assert.Equal("FALSE", column.DefaultValueSql); + Assert.Equal(false, column.DefaultValue); + + column = columns.Single(c => c.Name == "D"); + Assert.Equal("TRUE", column.DefaultValueSql); + Assert.Equal(true, column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_DateTime_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A datetime DEFAULT '1973-09-03 12:00:01' + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("'1973-09-03 12:00:01'", column.DefaultValueSql); + Assert.Equal(new DateTime(1973, 9, 3, 12, 0, 1, 0, DateTimeKind.Unspecified), column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact(Skip = "LibRed can only understand literal defaults")] + public void Non_literal_or_non_parsable_DateTime_default_values_are_passed_through() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A datetime2 DEFAULT (CONVERT([datetime2],(getdate()))), + B datetime DEFAULT getdate(), + C datetime2 DEFAULT ((CONVERT([datetime2],('12-01-16 12:32')))) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("(CONVERT([datetime2],getdate()))", column.DefaultValueSql); + Assert.Null(column.FindAnnotation(RelationalAnnotationNames.DefaultValue)); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("(getdate())", column.DefaultValueSql); + Assert.Null(column.FindAnnotation(RelationalAnnotationNames.DefaultValue)); + + column = columns.Single(c => c.Name == "C"); + Assert.Equal("(CONVERT([datetime2],'12-01-16 12:32'))", column.DefaultValueSql); + Assert.Null(column.FindAnnotation(RelationalAnnotationNames.DefaultValue)); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_DateOnly_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A date DEFAULT '1968-10-23' + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("'1968-10-23'", column.DefaultValueSql); + Assert.Equal(new DateOnly(1968, 10, 23), column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_TimeOnly_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A time DEFAULT '12:00:01' + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("'12:00:01'", column.DefaultValueSql); + Assert.Equal(new TimeOnly(12, 0, 1, 0), column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_DateTimeOffset_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A varchar(50) DEFAULT '1973-09-03T12:00:01.0000000+10:00' + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("'1973-09-03T12:00:01.0000000+10:00'", column.DefaultValueSql); + Assert.Equal( + new DateTimeOffset(new DateTime(1973, 9, 3, 12, 0, 1, 0, DateTimeKind.Unspecified), + new TimeSpan(0, 10, 0, 0, 0)), + column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_Guid_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A uniqueidentifier DEFAULT '0E984725-C51C-4BF4-9960-E1C80E27ABA0' + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("'0E984725-C51C-4BF4-9960-E1C80E27ABA0'", column.DefaultValueSql); + Assert.Equal(new Guid("0E984725-C51C-4BF4-9960-E1C80E27ABA0"), column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact(Skip = "LibRed can only understand literal defaults")] + public void Non_literal_Guid_default_values_are_passed_through() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A uniqueidentifier DEFAULT (CONVERT([uniqueidentifier],(newid()))), + B uniqueidentifier DEFAULT NEWSEQUENTIALID(), + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("(CONVERT([uniqueidentifier],newid()))", column.DefaultValueSql); + Assert.Null(column.FindAnnotation(RelationalAnnotationNames.DefaultValue)); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("(newsequentialid())", column.DefaultValueSql); + Assert.Null(column.FindAnnotation(RelationalAnnotationNames.DefaultValue)); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void Simple_string_literals_are_parsed_for_HasDefaultValue() + => Test( + """ + + CREATE TABLE MyTable ( + Id int, + A nvarchar(255) DEFAULT 'Hot', + B varchar(255) DEFAULT 'Buttered', + C character(100) DEFAULT '', + D text DEFAULT '', + E nvarchar(100) DEFAULT ' Toast! ' + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + var column = columns.Single(c => c.Name == "A"); + Assert.Equal("'Hot'", column.DefaultValueSql); + Assert.Equal("Hot", column.DefaultValue); + + column = columns.Single(c => c.Name == "B"); + Assert.Equal("'Buttered'", column.DefaultValueSql); + Assert.Equal("Buttered", column.DefaultValue); + + column = columns.Single(c => c.Name == "C"); + Assert.Equal("''", column.DefaultValueSql); + Assert.Equal("", column.DefaultValue); + + column = columns.Single(c => c.Name == "D"); + Assert.Equal("''", column.DefaultValueSql); + Assert.Equal("", column.DefaultValue); + + column = columns.Single(c => c.Name == "E"); + Assert.Equal("' Toast! '", column.DefaultValueSql); + Assert.Equal(" Toast! ", column.DefaultValue); + }, + "DROP TABLE MyTable;"); + + [ConditionalFact] + public void ValueGenerated_is_set_for_identity_and_computed_column() + => Test( + """ + + CREATE TABLE ValueGeneratedProperties ( + Id int IDENTITY(1, 1), + NoValueGenerationColumn nvarchar(255), + FixedDefaultValue datetime2 NOT NULL DEFAULT ('October 20, 2015 11am'), + ComputedValue AS GETDATE(), + rowversionColumn varbinary(8) NULL + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.Equal(ValueGenerated.OnAdd, columns.Single(c => c.Name == "Id").ValueGenerated); + Assert.Null(columns.Single(c => c.Name == "NoValueGenerationColumn").ValueGenerated); + Assert.Null(columns.Single(c => c.Name == "FixedDefaultValue").ValueGenerated); + Assert.Null(columns.Single(c => c.Name == "ComputedValue").ValueGenerated); + Assert.Equal(ValueGenerated.OnAddOrUpdate, + columns.Single(c => c.Name == "rowversionColumn").ValueGenerated); + }, + "DROP TABLE ValueGeneratedProperties;"); + + [ConditionalFact] + public void Identity_columns_are_not_nullable() + => Test( + """ + + CREATE TABLE IdentityTable ( + Id counter CONSTRAINT PK_IdentityTable PRIMARY KEY, + Name varchar(255) NULL + ); + """, + [], + [], + dbModel => + { + var table = dbModel.Tables.Single(t => t.Name == "IdentityTable"); + var idColumn = table.Columns.Single(c => c.Name == "Id"); + + // Identity (AutoNumber/counter) must be non-nullable + Assert.False(idColumn.IsNullable); + + // And still marked as value-generated + Assert.Equal(ValueGenerated.OnAdd, idColumn.ValueGenerated); + }, + "DROP TABLE IdentityTable;"); + + [ConditionalFact] + public void ConcurrencyToken_is_set_for_rowVersion() + => Test( + """ + + CREATE TABLE RowVersionTable ( + Id int, + rowversionColumn varbinary(8) + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + //TODO: Check + /*Assert.True( + (bool)columns.Single(c => c.Name == "rowversionColumn")[ + ScaffoldingAnnotationNames.ConcurrencyToken]!);*/ + }, + "DROP TABLE RowVersionTable;"); + + [ConditionalFact] + public void Column_nullability_is_set() + => Test( + """ + + CREATE TABLE NullableColumns ( + Id int, + NullableInt int NULL, + NonNullString varchar(255) NOT NULL + ); + """, + [], + [], + dbModel => + { + var columns = dbModel.Tables.Single().Columns; + + Assert.True(columns.Single(c => c.Name == "NullableInt").IsNullable); + Assert.False(columns.Single(c => c.Name == "NonNullString").IsNullable); + }, + "DROP TABLE NullableColumns;"); + + #endregion + + #region PrimaryKeyFacets + + [ConditionalFact] + public void Create_composite_primary_key() + => Test( + """ + + CREATE TABLE CompositePrimaryKeyTable ( + Id1 int, + Id2 int, + CONSTRAINT PK__CompositPrimaryKeyTable PRIMARY KEY (Id2, Id1) + ); + """, + [], + [], + dbModel => + { + var pk = dbModel.Tables.Single().PrimaryKey; + + Assert.Null(pk!.Table!.Schema); + Assert.Equal("CompositePrimaryKeyTable", pk.Table.Name); + Assert.StartsWith("PK__Composit", pk.Name); + Assert.Equal( + ["Id2", "Id1"], pk.Columns.Select(ic => ic.Name).ToList()); + }, + "DROP TABLE CompositePrimaryKeyTable;"); + + [ConditionalFact] + public void Set_primary_key_name_from_index() + => Test( + """ + + CREATE TABLE PrimaryKeyName ( + Id1 int, + Id2 int, + CONSTRAINT MyPK PRIMARY KEY ( Id2 ) + ); + """, + [], + [], + dbModel => + { + var pk = dbModel.Tables.Single().PrimaryKey; + + Assert.Null(pk!.Table!.Schema); + Assert.Equal("PrimaryKeyName", pk.Table.Name); + Assert.StartsWith("MyPK", pk.Name); + Assert.Equal( + ["Id2"], pk.Columns.Select(ic => ic.Name).ToList()); + }, + "DROP TABLE PrimaryKeyName;"); + + #endregion + + #region UniqueConstraintFacets + + [ConditionalFact] + public void Create_composite_unique_constraint() + => Test( + """ + + CREATE TABLE CompositeUniqueConstraintTable ( + Id1 int, + Id2 int, + CONSTRAINT UX UNIQUE (Id2, Id1) + ); + """, + [], + [], + dbModel => + { + var uniqueConstraint = Assert.Single(dbModel.Tables.Single().UniqueConstraints); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(uniqueConstraint.Table.Schema); + Assert.Equal("CompositeUniqueConstraintTable", uniqueConstraint.Table.Name); + Assert.Equal("UX", uniqueConstraint.Name); + Assert.Equal( + ["Id2", "Id1"], uniqueConstraint.Columns.Select(ic => ic.Name).ToList()); + }, + "DROP TABLE CompositeUniqueConstraintTable;"); + + [ConditionalFact] + public void Set_unique_constraint_name_from_index() + => Test( + """ + + CREATE TABLE UniqueConstraintName ( + Id1 int, + Id2 int, + CONSTRAINT MyUC UNIQUE ( Id2 ) + ); + """, + [], + [], + dbModel => + { + var uniqueConstraint = Assert.Single(dbModel.Tables.Single().UniqueConstraints); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(uniqueConstraint.Table.Schema); + Assert.Equal("UniqueConstraintName", uniqueConstraint.Table.Name); + Assert.Equal("MyUC", uniqueConstraint.Name); + Assert.Equal( + ["Id2"], uniqueConstraint.Columns.Select(ic => ic.Name).ToList()); + }, + "DROP TABLE UniqueConstraintName;"); + + #endregion + + #region IndexFacets + + [ConditionalFact] + public void Create_composite_index() + => Test( + """ + + CREATE TABLE CompositeIndexTable ( + Id1 int, + Id2 int + ); + + CREATE INDEX IX_COMPOSITE ON CompositeIndexTable ( Id2, Id1 ); + """, + [], + [], + dbModel => + { + var index = Assert.Single(dbModel.Tables.Single().Indexes); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(index!.Table!.Schema); + Assert.Equal("CompositeIndexTable", index.Table.Name); + Assert.Equal("IX_COMPOSITE", index.Name); + Assert.Equal( + ["Id2", "Id1"], index.Columns.Select(ic => ic.Name).ToList()); + }, + "DROP TABLE CompositeIndexTable;"); + + [ConditionalFact] + public void Set_unique_true_for_unique_index() + => Test( + """ + + CREATE TABLE UniqueIndexTable ( + Id1 int, + Id2 int + ); + + CREATE UNIQUE INDEX IX_UNIQUE ON UniqueIndexTable ( Id2 ); + """, + [], + [], + dbModel => + { + var index = Assert.Single(dbModel.Tables.Single().Indexes); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(index!.Table!.Schema); + Assert.Equal("UniqueIndexTable", index.Table.Name); + Assert.Equal("IX_UNIQUE", index.Name); + Assert.True(index.IsUnique); + Assert.Null(index.Filter); + Assert.Equal( + ["Id2"], index.Columns.Select(ic => ic.Name).ToList()); + }, + "DROP TABLE UniqueIndexTable;"); + + [ConditionalFact(Skip = "LibRed does not support filtered index")] + public void Set_filter_for_filtered_index() + => Test( + """ + + CREATE TABLE `FilteredIndexTable` ( + Id1 int, + Id2 int NULL + ); + + CREATE UNIQUE INDEX IX_UNIQUE ON `FilteredIndexTable` ( Id2 ) WHERE Id2 > 10; + """, + [], + [], + dbModel => + { + var index = Assert.Single(dbModel.Tables.Single().Indexes); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(index!.Table!.Schema); + Assert.Equal("FilteredIndexTable", index.Table.Name); + Assert.Equal("IX_UNIQUE", index.Name); + Assert.Equal("(`Id2`>(10))", index.Filter); + Assert.Equal( + ["Id2"], index.Columns.Select(ic => ic.Name).ToList()); + }, + "DROP TABLE `FilteredIndexTable`;"); + + [ConditionalFact(Skip = "LibRed does not support include for index")] + public void Set_include_for_index() + => Test( + """ + + CREATE TABLE IncludeIndexTable ( + Id int, + IndexProperty int, + IncludeProperty int + ); + + CREATE INDEX IX_INCLUDE ON IncludeIndexTable(IndexProperty) INCLUDE (IncludeProperty); + """, + [], + [], + dbModel => + { + var index = Assert.Single(dbModel.Tables.Single().Indexes); + Assert.Equal(new[] { "IndexProperty" }, index.Columns.Select(ic => ic.Name).ToList()); + Assert.Null(index[JetAnnotationNames.Include]); + }, + "DROP TABLE IncludeIndexTable;"); + + #endregion + + #region ForeignKeyFacets + + [ConditionalFact] + public void Create_composite_foreign_key() + => Test( + """ + + CREATE TABLE PrincipalTable ( + Id1 int, + Id2 int, + PRIMARY KEY (Id1, Id2) + ); + + CREATE TABLE DependentTable ( + Id int PRIMARY KEY, + ForeignKeyId1 int, + ForeignKeyId2 int, + FOREIGN KEY (ForeignKeyId1, ForeignKeyId2) REFERENCES PrincipalTable(Id1, Id2) ON DELETE CASCADE + ); + """, + [], + [], + dbModel => + { + var fk = Assert.Single(dbModel.Tables.Single(t => t.Name == "DependentTable").ForeignKeys); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(fk.Table.Schema); + Assert.Equal("DependentTable", fk.Table.Name); + Assert.Null(fk.PrincipalTable.Schema); + Assert.Equal("PrincipalTable", fk.PrincipalTable.Name); + Assert.Equal( + ["ForeignKeyId1", "ForeignKeyId2"], + fk.Columns.Select(ic => ic.Name).ToList()); + Assert.Equal( + ["Id1", "Id2"], fk.PrincipalColumns.Select(ic => ic.Name).ToList()); + Assert.Equal(ReferentialAction.Cascade, fk.OnDelete); + }, + """ + + DROP TABLE DependentTable; + DROP TABLE PrincipalTable; + """); + + [ConditionalFact] + public void Create_multiple_foreign_key_in_same_table() + => Test( + """ + + CREATE TABLE PrincipalTable ( + Id int PRIMARY KEY + ); + + CREATE TABLE AnotherPrincipalTable ( + Id int PRIMARY KEY + ); + + CREATE TABLE DependentTable ( + Id int PRIMARY KEY, + ForeignKeyId1 int, + ForeignKeyId2 int, + FOREIGN KEY (ForeignKeyId1) REFERENCES PrincipalTable(Id) ON DELETE CASCADE, + FOREIGN KEY (ForeignKeyId2) REFERENCES AnotherPrincipalTable(Id) ON DELETE CASCADE + ); + """, + [], + [], + dbModel => + { + var foreignKeys = dbModel.Tables.Single(t => t.Name == "DependentTable").ForeignKeys; + + Assert.Equal(2, foreignKeys.Count); + + var principalFk = Assert.Single(foreignKeys.Where(f => f.PrincipalTable.Name == "PrincipalTable")); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(principalFk.Table.Schema); + Assert.Equal("DependentTable", principalFk.Table.Name); + Assert.Null(principalFk.PrincipalTable.Schema); + Assert.Equal("PrincipalTable", principalFk.PrincipalTable.Name); + Assert.Equal( + ["ForeignKeyId1"], principalFk.Columns.Select(ic => ic.Name).ToList()); + Assert.Equal( + ["Id"], principalFk.PrincipalColumns.Select(ic => ic.Name).ToList()); + Assert.Equal(ReferentialAction.Cascade, principalFk.OnDelete); + + var anotherPrincipalFk = + Assert.Single(foreignKeys.Where(f => f.PrincipalTable.Name == "AnotherPrincipalTable")); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(anotherPrincipalFk.Table.Schema); + Assert.Equal("DependentTable", anotherPrincipalFk.Table.Name); + Assert.Null(anotherPrincipalFk.PrincipalTable.Schema); + Assert.Equal("AnotherPrincipalTable", anotherPrincipalFk.PrincipalTable.Name); + Assert.Equal( + ["ForeignKeyId2"], + anotherPrincipalFk.Columns.Select(ic => ic.Name).ToList()); + Assert.Equal( + ["Id"], anotherPrincipalFk.PrincipalColumns.Select(ic => ic.Name).ToList()); + Assert.Equal(ReferentialAction.Cascade, anotherPrincipalFk.OnDelete); + }, + """ + + DROP TABLE DependentTable; + DROP TABLE AnotherPrincipalTable; + DROP TABLE PrincipalTable; + """); + + [ConditionalFact] + public void Create_foreign_key_referencing_unique_constraint() + => Test( + """ + + CREATE TABLE PrincipalTable ( + Id1 int, + Id2 int UNIQUE + ); + + CREATE TABLE DependentTable ( + Id int PRIMARY KEY, + ForeignKeyId int, + FOREIGN KEY (ForeignKeyId) REFERENCES PrincipalTable(Id2) ON DELETE CASCADE + ); + """, + [], + [], + dbModel => + { + var fk = Assert.Single(dbModel.Tables.Single(t => t.Name == "DependentTable").ForeignKeys); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(fk.Table.Schema); + Assert.Equal("DependentTable", fk.Table.Name); + Assert.Null(fk.PrincipalTable.Schema); + Assert.Equal("PrincipalTable", fk.PrincipalTable.Name); + Assert.Equal( + ["ForeignKeyId"], fk.Columns.Select(ic => ic.Name).ToList()); + Assert.Equal( + ["Id2"], fk.PrincipalColumns.Select(ic => ic.Name).ToList()); + Assert.Equal(ReferentialAction.Cascade, fk.OnDelete); + }, + """ + + DROP TABLE DependentTable; + DROP TABLE PrincipalTable; + """); + + [ConditionalFact] + public void Set_name_for_foreign_key() + => Test( + """ + + CREATE TABLE PrincipalTable ( + Id int CONSTRAINT PK__PrincipalTable PRIMARY KEY + ); + + CREATE TABLE DependentTable ( + Id int CONSTRAINT PK__DependentTable PRIMARY KEY, + ForeignKeyId int, + CONSTRAINT MYFK FOREIGN KEY (ForeignKeyId) REFERENCES PrincipalTable(Id) ON DELETE CASCADE + ); + """, + [], + [], + dbModel => + { + var fk = Assert.Single(dbModel.Tables.Single(t => t.Name == "DependentTable").ForeignKeys); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(fk.Table.Schema); + Assert.Equal("DependentTable", fk.Table.Name); + Assert.Null(fk.PrincipalTable.Schema); + Assert.Equal("PrincipalTable", fk.PrincipalTable.Name); + Assert.Equal( + ["ForeignKeyId"], fk.Columns.Select(ic => ic.Name).ToList()); + Assert.Equal( + ["Id"], fk.PrincipalColumns.Select(ic => ic.Name).ToList()); + Assert.Equal(ReferentialAction.Cascade, fk.OnDelete); + Assert.Equal("MYFK", fk.Name); + }, + """ + + DROP TABLE DependentTable; + DROP TABLE PrincipalTable; + """); + + [ConditionalFact] + public void Set_referential_action_for_foreign_key() + => Test( + """ + + CREATE TABLE PrincipalTable ( + Id int PRIMARY KEY + ); + + CREATE TABLE DependentTable ( + Id int PRIMARY KEY, + ForeignKeyId int, + FOREIGN KEY (ForeignKeyId) REFERENCES PrincipalTable(Id) ON DELETE SET NULL + ); + """, + [], + [], + dbModel => + { + var fk = Assert.Single(dbModel.Tables.Single(t => t.Name == "DependentTable").ForeignKeys); + + // ReSharper disable once PossibleNullReferenceException + Assert.Null(fk.Table.Schema); + Assert.Equal("DependentTable", fk.Table.Name); + Assert.Null(fk.PrincipalTable.Schema); + Assert.Equal("PrincipalTable", fk.PrincipalTable.Name); + Assert.Equal( + ["ForeignKeyId"], fk.Columns.Select(ic => ic.Name).ToList()); + Assert.Equal( + ["Id"], fk.PrincipalColumns.Select(ic => ic.Name).ToList()); + Assert.Equal(ReferentialAction.SetNull, fk.OnDelete); + }, + """ + + DROP TABLE DependentTable; + DROP TABLE PrincipalTable; + """); + + #endregion + + #region Warnings + + [ConditionalFact] + public void Warn_missing_schema() + => Test( + """ + + CREATE TABLE `Blank` ( + `Id` int + ); + """, + [], + ["MySchema"], + dbModel => + { + //Assert.Empty(dbModel.Tables); + + var message = Fixture.OperationReporter.Messages.Single(m => m.Level == LogLevel.Warning).Message; + + Assert.Equal( + JetResources.LogMissingSchema(new TestLogger()) + .GenerateMessage("MySchema"), + message); + }, + "DROP TABLE `Blank`;"); + + [ConditionalFact] + public void Warn_missing_table() + => Test( + """ + + CREATE TABLE `Blank` ( + `Id` int + ); + """, + ["MyTable"], + [], + dbModel => + { + Assert.Empty(dbModel.Tables); + + var message = Fixture.OperationReporter.Messages.Single(m => m.Level == LogLevel.Warning).Message; + + Assert.Equal( + JetResources.LogMissingTable(new TestLogger()) + .GenerateMessage("MyTable"), + message); + }, + "DROP TABLE `Blank`;"); + + [ConditionalFact] + public void Warn_missing_principal_table_for_foreign_key() + => Test( + """ + + CREATE TABLE PrincipalTable ( + Id int PRIMARY KEY + ); + + CREATE TABLE DependentTable ( + Id int PRIMARY KEY, + ForeignKeyId int, + CONSTRAINT MYFK FOREIGN KEY (ForeignKeyId) REFERENCES PrincipalTable(Id) ON DELETE CASCADE + ); + """, + ["DependentTable"], + [], + dbModel => + { + var message = Fixture.OperationReporter.Messages.Single(m => m.Level == LogLevel.Warning).Message; + + Assert.Equal( + JetResources.LogPrincipalTableNotInSelectionSet(new TestLogger()) + .GenerateMessage( + "MYFK", "DependentTable", "PrincipalTable"), message); + }, + """ + + DROP TABLE DependentTable; + DROP TABLE PrincipalTable; + """); + + /*[ConditionalFact] + public void Skip_duplicate_foreign_key() + => Test( + @"CREATE TABLE PrincipalTable ( + Id int PRIMARY KEY, + Value1 uniqueidentifier, + Value2 uniqueidentifier, + CONSTRAINT [UNIQUE_Value1] UNIQUE ([Value1] ASC), + CONSTRAINT [UNIQUE_Value2] UNIQUE ([Value2] ASC), + ); + + CREATE TABLE OtherPrincipalTable ( + Id int PRIMARY KEY, + ); + + CREATE TABLE DependentTable ( + Id int PRIMARY KEY, + ForeignKeyId int, + ValueKey uniqueidentifier, + CONSTRAINT MYFK1 FOREIGN KEY (ForeignKeyId) REFERENCES PrincipalTable(Id), + CONSTRAINT MYFK2 FOREIGN KEY (ForeignKeyId) REFERENCES PrincipalTable(Id), + CONSTRAINT MYFK3 FOREIGN KEY (ForeignKeyId) REFERENCES OtherPrincipalTable(Id), + CONSTRAINT MYFK4 FOREIGN KEY (ValueKey) REFERENCES PrincipalTable(Value1), + CONSTRAINT MYFK5 FOREIGN KEY (ValueKey) REFERENCES PrincipalTable(Value2), + );", + Enumerable.Empty(), + Enumerable.Empty(), + dbModel => + { + var level = Fixture.OperationReporter.Messages + .Single( + m => m.Message + == LibRedResources.LogDuplicateForeignKeyConstraintIgnored(new TestLogger()) + .GenerateMessage("MYFK2", "dbo.DependentTable", "MYFK1")).Level; + + Assert.Equal(LogLevel.Warning, level); + + var table = dbModel.Tables.Single(t => t.Name == "DependentTable"); + Assert.Equal(4, table.ForeignKeys.Count); + }, + @" + DROP TABLE DependentTable; + DROP TABLE PrincipalTable; + DROP TABLE OtherPrincipalTable;");*/ + + /*[ConditionalFact] + public void No_warning_missing_view_definition() + => Test( + @"CREATE TABLE TestViewDefinition ( + Id int PRIMARY KEY, + );", + Enumerable.Empty(), + Enumerable.Empty(), + dbModel => + { + var message = Fixture.OperationReporter.Messages + .SingleOrDefault( + m => m.Message + == LibRedResources.LogMissingViewDefinitionRights(new TestLogger()) + .GenerateMessage()).Message; + + Assert.Null(message); + }, + @" + DROP TABLE TestViewDefinition;");*/ + + #endregion + + private void Test( + string? createSql, + IEnumerable tables, + IEnumerable schemas, + Action asserter, + string? cleanupSql) + => Test( + string.IsNullOrEmpty(createSql) ? [] : [createSql], + tables, + schemas, + asserter, + cleanupSql); + + private void Test( + string[] createSqls, + IEnumerable tables, + IEnumerable schemas, + Action asserter, + string? cleanupSql) + { + foreach (var createSql in createSqls) + { + Fixture.TestStore.ExecuteNonQuery(createSql); + } + + try + { + // Scaffold through LibRed's own native, cross-platform catalog reader rather than the + // Jet ADOX factory that provider-assembly discovery would otherwise resolve (LibRed's + // IDatabaseProvider comes from EFCore.Jet). addDesignTimeServices runs after that + // discovery, so this registration wins — and the test needs no Access engine installed. + var databaseModelFactory = LibRedTestHelpers.Instance.CreateDesignServiceProvider( + addDesignTimeServices: services => + services.AddScoped(), + reporter: Fixture.OperationReporter) + .CreateScope().ServiceProvider.GetRequiredService(); + + var databaseModel = databaseModelFactory.Create( + Fixture.TestStore.ConnectionString, + new DatabaseModelFactoryOptions(tables, schemas)); + Assert.NotNull(databaseModel); + asserter(databaseModel); + } + finally + { + if (!string.IsNullOrEmpty(cleanupSql)) + { + Fixture.TestStore.ExecuteNonQuery(cleanupSql); + } + } + } + + public class LibRedDatabaseModelFixture : SharedStoreFixtureBase + { + protected override string StoreName + => nameof(LibRedDatabaseModelFactoryTest); + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public new LibRedTestStore TestStore + => (LibRedTestStore)base.TestStore; + + public TestOperationReporter OperationReporter { get; } = new(); + + public override async Task InitializeAsync() + { + await base.InitializeAsync(); + } + + protected override bool ShouldLogCategory(string logCategory) + => logCategory == DbLoggerCategory.Scaffolding.Name; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/SeedingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/SeedingLibRedTest.cs new file mode 100644 index 00000000..ea1f689c --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/SeedingLibRedTest.cs @@ -0,0 +1,28 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class SeedingLibRedTest : SeedingTestBase + { + protected override SeedingContext CreateContextWithEmptyDatabase(string testId) + { + var context = new SeedingLibRedContext(testId); + + context.Database.EnsureClean(); + + return context; + } + + protected override TestStore TestStore => LibRedTestStore.Create("SeedingTest"); + + protected class SeedingLibRedContext(string testId) : SeedingContext(testId) + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseLibRed(LibRedTestStore.CreateConnectionString($"Seeds{TestId}"), TestEnvironment.DataAccessProviderFactory); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/SequentialGuidEndToEndTest.cs b/test/EFCore.LibRed.FunctionalTests/SequentialGuidEndToEndTest.cs new file mode 100644 index 00000000..d160c9f6 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/SequentialGuidEndToEndTest.cs @@ -0,0 +1,169 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using System.Runtime.InteropServices; +#nullable disable +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class SequentialGuidEndToEndTest : IAsyncLifetime + { + [ConditionalFact] + public async Task Can_use_sequential_GUID_end_to_end_async() + { + var serviceProvider = new ServiceCollection() + .AddEntityFrameworkLibRed() + .BuildServiceProvider(); + + using (var context = new BronieContext(serviceProvider, TestStore.Name)) + { + context.Database.EnsureCreatedResiliently(); + + for (var i = 0; i < 50; i++) + { + await context.AddAsync( + new Pegasus { Name = "Rainbow Dash " + i }); + } + + await context.SaveChangesAsync(); + } + + using (var context = new BronieContext(serviceProvider, TestStore.Name)) + { + var pegasuses = await context.Pegasuses.OrderBy(e => e.Id).ToListAsync(); + + for (var i = 0; i < 50; i++) + { + Assert.Equal("Rainbow Dash " + i, pegasuses[i].Name); + } + } + } + + [ConditionalFact] + public async Task Can_use_explicit_values() + { + var serviceProvider = new ServiceCollection() + .AddEntityFrameworkLibRed() + .BuildServiceProvider(); + + var guids = new List(); + + using (var context = new BronieContext(serviceProvider, TestStore.Name)) + { + context.Database.EnsureCreatedResiliently(); + + for (var i = 0; i < 50; i++) + { + guids.Add( + context.Add( + new Pegasus + { + Name = "Rainbow Dash " + i, + Index = i, + Id = Guid.NewGuid() + }).Entity.Id); + } + + await context.SaveChangesAsync(); + } + + using (var context = new BronieContext(serviceProvider, TestStore.Name)) + { + var pegasuses = await context.Pegasuses.OrderBy(e => e.Index).ToListAsync(); + + for (var i = 0; i < 50; i++) + { + Assert.Equal("Rainbow Dash " + i, pegasuses[i].Name); + Assert.Equal(guids[i], pegasuses[i].Id); + } + } + } + + private class BronieContext(IServiceProvider serviceProvider, string databaseName) : DbContext + { + public DbSet Pegasuses { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .UseLibRed(LibRedTestStore.CreateConnectionString(databaseName), + TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(serviceProvider); + } + + private class Pegasus + { + public Guid Id { get; set; } + public string Name { get; set; } + public int Index { get; set; } + } + + protected LibRedTestStore TestStore { get; private set; } + + public async Task InitializeAsync() + => TestStore = await LibRedTestStore.CreateInitializedAsync("SequentialGuidEndToEndTest"); + + public async Task DisposeAsync() + => await TestStore.DisposeAsync(); + + [ConditionalFact] + public void CustomUuid7Test() + { + DateTimeOffset dtoNow = DateTimeOffset.UtcNow; + Guid net9internal = Guid.CreateVersion7(dtoNow); + Guid custom = Next(dtoNow); + var bytenet9 = net9internal.ToByteArray().AsSpan(0, 6); + var bytecustom = custom.ToByteArray().AsSpan(0,6); + Assert.Equal(bytenet9,bytecustom); + Assert.Equal(net9internal.Version,custom.Version); + var t1 = net9internal.Variant & Variant10xxMask; + var t2 = BitConverter.GetBytes(custom.Variant); + Assert.InRange(net9internal.Variant,8,0xB); + Assert.InRange(custom.Variant, 8, 0xB); + } + + private const byte Variant10xxValue = 0x80; + private const ushort Version7Value = 0x7000; + private const ushort VersionMask = 0xF000; + private const byte Variant10xxMask = 0xC0; + + private Guid Next(DateTimeOffset timeStamp) + { + Span guidBytes = stackalloc byte[16]; + var succeeded = Guid.NewGuid().TryWriteBytes(guidBytes); + var unixms = timeStamp.ToUnixTimeMilliseconds(); + Span counterBytes = stackalloc byte[sizeof(long)]; + MemoryMarshal.Write(counterBytes, in unixms); + + if (!BitConverter.IsLittleEndian) + { + counterBytes.Reverse(); + } + + //unix ts ms - 48 bits (6 bytes) + guidBytes[00] = counterBytes[2]; + guidBytes[01] = counterBytes[3]; + guidBytes[02] = counterBytes[4]; + guidBytes[03] = counterBytes[5]; + guidBytes[04] = counterBytes[0]; + guidBytes[05] = counterBytes[1]; + + //UIDv7 version - first 4 bits (1/2 byte) of the next 16 bits (2 bytes) + var _c = BitConverter.ToInt16(guidBytes.Slice(6, 2)); + _c = (short)((_c & ~VersionMask) | Version7Value); + BitConverter.TryWriteBytes(guidBytes.Slice(6, 2), _c); + + //2 bit variant + //first 2 bits of the next 64 bits (8 bytes) + guidBytes[8] = (byte)((guidBytes[8] & ~Variant10xxMask) | Variant10xxValue); + return new Guid(guidBytes); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/SerializationLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/SerializationLibRedTest.cs new file mode 100644 index 00000000..cc7b6db9 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/SerializationLibRedTest.cs @@ -0,0 +1,8 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class SerializationLibRedTest(F1LibRedFixture fixture) : SerializationTestBase(fixture); diff --git a/test/EFCore.LibRed.FunctionalTests/StoreGeneratedFixupLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/StoreGeneratedFixupLibRedTest.cs new file mode 100644 index 00000000..f181d94d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/StoreGeneratedFixupLibRedTest.cs @@ -0,0 +1,195 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class StoreGeneratedFixupLibRedTest(StoreGeneratedFixupLibRedTest.StoreGeneratedFixupLibRedFixture fixture) + : StoreGeneratedFixupRelationalTestBase< + StoreGeneratedFixupLibRedTest.StoreGeneratedFixupLibRedFixture>(fixture) + { + [ConditionalFact] + public Task Temp_values_are_replaced_on_save() + => ExecuteWithStrategyInTransactionAsync( + async context => + { + var entry = context.Add(new TestTemp()); + + Assert.True(entry.Property(e => e.Id).IsTemporary); + Assert.False(entry.Property(e => e.NotId).IsTemporary); + + var tempValue = entry.Property(e => e.Id).CurrentValue; + + await context.SaveChangesAsync(); + + Assert.False(entry.Property(e => e.Id).IsTemporary); + Assert.NotEqual(tempValue, entry.Property(e => e.Id).CurrentValue); + }); + + protected override void MarkIdsTemporary(DbContext context, object dependent, object principal) + { + var entry = context.Entry(dependent); + entry.Property("Id1").IsTemporary = true; + entry.Property("Id2").IsTemporary = true; + + foreach (var property in entry.Properties) + { + if (property.Metadata.IsForeignKey()) + { + property.IsTemporary = true; + } + } + + entry = context.Entry(principal); + entry.Property("Id1").IsTemporary = true; + entry.Property("Id2").IsTemporary = true; + } + + protected override void MarkIdsTemporary(DbContext context, object game, object level, object item) + { + var entry = context.Entry(game); + entry.Property("Id").IsTemporary = true; + + entry = context.Entry(item); + entry.Property("Id").IsTemporary = true; + } + + protected override bool EnforcesFKs => true; + + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public class StoreGeneratedFixupLibRedFixture : StoreGeneratedFixupRelationalFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id1).ValueGeneratedOnAdd(); + b.Property(e => e.Id2).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()"); + }); + + modelBuilder.Entity(b => b.Property(e => e.Id).ValueGeneratedOnAdd()); + + modelBuilder.Entity(b => b.Property(e => e.Id).ValueGeneratedOnAdd().HasDefaultValueSql("GenGUID()")); + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/StoreGeneratedLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/StoreGeneratedLibRedTest.cs new file mode 100644 index 00000000..e02fb947 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/StoreGeneratedLibRedTest.cs @@ -0,0 +1,26 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class StoreGeneratedLibRedTest(StoreGeneratedLibRedTest.StoreGeneratedLibRedFixture fixture) + : StoreGeneratedLibRedTestBase(fixture) + { + public class StoreGeneratedLibRedFixture : StoreGeneratedLibRedFixtureBase + { + protected override string StoreName + => "StoreGeneratedTest"; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/StoreGeneratedSqlServerTestBase.cs b/test/EFCore.LibRed.FunctionalTests/StoreGeneratedSqlServerTestBase.cs new file mode 100644 index 00000000..b3dfe3ed --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/StoreGeneratedSqlServerTestBase.cs @@ -0,0 +1,605 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.ValueGeneration; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public abstract class StoreGeneratedLibRedTestBase(TFixture fixture) : StoreGeneratedTestBase(fixture) + where TFixture : StoreGeneratedLibRedTestBase.StoreGeneratedLibRedFixtureBase, new() +{ + public class WrappedIntHiLoClass + { + public int Value { get; set; } + } + + protected class WrappedIntHiLoClassConverter() : ValueConverter(v => v.Value, + v => new WrappedIntHiLoClass { Value = v }); + + protected class WrappedIntHiLoClassComparer() : ValueComparer( + (v1, v2) => (v1 == null && v2 == null) || (v1 != null && v2 != null && v1.Value.Equals(v2.Value)), + v => v != null ? v.Value : 0, + v => v == null ? null : new WrappedIntHiLoClass { Value = v.Value }); + + protected class WrappedIntHiLoClassValueGenerator : ValueGenerator + { + public override WrappedIntHiLoClass Next(EntityEntry entry) + => new() { Value = 66 }; + + public override bool GeneratesTemporaryValues + => false; + } + + public struct WrappedIntHiLoStruct + { + public int Value { get; set; } + } + + protected class WrappedIntHiLoStructConverter() : ValueConverter(v => v.Value, + v => new WrappedIntHiLoStruct { Value = v }); + + protected class WrappedIntHiLoStructValueGenerator : ValueGenerator + { + public override WrappedIntHiLoStruct Next(EntityEntry entry) + => new() { Value = 66 }; + + public override bool GeneratesTemporaryValues + => false; + } + + public record WrappedIntHiLoRecord + { + public int Value { get; set; } + } + + protected class WrappedIntHiLoRecordConverter() : ValueConverter(v => v.Value, + v => new WrappedIntHiLoRecord { Value = v }); + + protected class WrappedIntHiLoRecordValueGenerator : ValueGenerator + { + public override WrappedIntHiLoRecord Next(EntityEntry entry) + => new() { Value = 66 }; + + public override bool GeneratesTemporaryValues + => false; + } + + public class WrappedIntHiLoKeyClass + { + public int Value { get; set; } + } + + protected class WrappedIntHiLoKeyClassConverter() : ValueConverter(v => v.Value, + v => new WrappedIntHiLoKeyClass { Value = v }); + + protected class WrappedIntHiLoKeyClassComparer() : ValueComparer( + (v1, v2) => (v1 == null && v2 == null) || (v1 != null && v2 != null && v1.Value.Equals(v2.Value)), + v => v != null ? v.Value : 0, + v => v == null ? null : new WrappedIntHiLoKeyClass { Value = v.Value }); + + public struct WrappedIntHiLoKeyStruct + { + public int Value { get; set; } + + public override bool Equals(object? obj) + => obj is WrappedIntHiLoKeyStruct other && Value == other.Value; + + public override int GetHashCode() + => Value; + + public static bool operator ==(WrappedIntHiLoKeyStruct left, WrappedIntHiLoKeyStruct right) + => left.Equals(right); + + public static bool operator !=(WrappedIntHiLoKeyStruct left, WrappedIntHiLoKeyStruct right) + => !left.Equals(right); + } + + protected class WrappedIntHiLoKeyStructConverter() : ValueConverter(v => v.Value, + v => new WrappedIntHiLoKeyStruct { Value = v }); + + public record WrappedIntHiLoKeyRecord + { + public int Value { get; set; } + } + + protected class WrappedIntHiLoKeyRecordConverter() : ValueConverter(v => v.Value, + v => new WrappedIntHiLoKeyRecord { Value = v }); + + protected class WrappedIntHiLoClassPrincipal + { + public WrappedIntHiLoKeyClass Id { get; set; } = null!; + public ICollection Dependents { get; } = []; + + public ICollection RequiredDependents { get; } = + []; + + public ICollection OptionalDependents { get; } = + []; + } + + protected class WrappedIntHiLoClassDependentShadow + { + public WrappedIntHiLoClass Id { get; set; } = null!; + public WrappedIntHiLoClassPrincipal? Principal { get; set; } + } + + protected class WrappedIntHiLoClassDependentRequired + { + public WrappedIntHiLoClass Id { get; set; } = null!; + public WrappedIntHiLoKeyClass PrincipalId { get; set; } = null!; + public WrappedIntHiLoClassPrincipal Principal { get; set; } = null!; + } + + protected class WrappedIntHiLoClassDependentOptional + { + public WrappedIntHiLoClass Id { get; set; } = null!; + public WrappedIntHiLoKeyClass? PrincipalId { get; set; } + public WrappedIntHiLoClassPrincipal? Principal { get; set; } + } + + protected class WrappedIntHiLoStructPrincipal + { + public WrappedIntHiLoKeyStruct Id { get; set; } + public ICollection Dependents { get; } = []; + + public ICollection OptionalDependents { get; } = + []; + + public ICollection RequiredDependents { get; } = + []; + } + + protected class WrappedIntHiLoStructDependentShadow + { + public WrappedIntHiLoStruct Id { get; set; } + public WrappedIntHiLoStructPrincipal? Principal { get; set; } + } + + protected class WrappedIntHiLoStructDependentOptional + { + public WrappedIntHiLoStruct Id { get; set; } + public WrappedIntHiLoKeyStruct? PrincipalId { get; set; } + public WrappedIntHiLoStructPrincipal? Principal { get; set; } + } + + protected class WrappedIntHiLoStructDependentRequired + { + public WrappedIntHiLoStruct Id { get; set; } + public WrappedIntHiLoKeyStruct PrincipalId { get; set; } + public WrappedIntHiLoStructPrincipal Principal { get; set; } = null!; + } + + protected class WrappedIntHiLoRecordPrincipal + { + public WrappedIntHiLoKeyRecord Id { get; set; } = null!; + public ICollection Dependents { get; } = []; + + public ICollection OptionalDependents { get; } = + []; + + public ICollection RequiredDependents { get; } = + []; + } + + protected class WrappedIntHiLoRecordDependentShadow + { + public WrappedIntHiLoRecord Id { get; set; } = null!; + public WrappedIntHiLoRecordPrincipal? Principal { get; set; } + } + + protected class WrappedIntHiLoRecordDependentOptional + { + public WrappedIntHiLoRecord Id { get; set; } = null!; + public WrappedIntHiLoKeyRecord? PrincipalId { get; set; } + public WrappedIntHiLoRecordPrincipal? Principal { get; set; } + } + + protected class WrappedIntHiLoRecordDependentRequired + { + public WrappedIntHiLoRecord Id { get; set; } = null!; + public WrappedIntHiLoKeyRecord PrincipalId { get; set; } = null!; + public WrappedIntHiLoRecordPrincipal Principal { get; set; } = null!; + } + + protected class LongToDecimalPrincipal + { + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public long Id { get; set; } + + public ICollection Dependents { get; } = []; + public ICollection RequiredDependents { get; } = []; + public ICollection OptionalDependents { get; } = []; + } + + protected class LongToDecimalDependentShadow + { + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public long Id { get; set; } + + public LongToDecimalPrincipal? Principal { get; set; } + } + + protected class LongToDecimalDependentRequired + { + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public long Id { get; set; } + + public long PrincipalId { get; set; } + public LongToDecimalPrincipal Principal { get; set; } = null!; + } + + protected class LongToDecimalDependentOptional + { + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public long Id { get; set; } + + public long? PrincipalId { get; set; } + public LongToDecimalPrincipal? Principal { get; set; } + } + + [ConditionalFact] + public virtual Task Insert_update_and_delete_with_long_to_decimal_conversion() + { + var id1 = 0L; + return ExecuteWithStrategyInTransactionAsync( + async context => + { + var principal1 = context.Add( + new LongToDecimalPrincipal + { + Id = Fixture.LongToDecimalPrincipalSentinel, + Dependents = { new LongToDecimalDependentShadow(), new LongToDecimalDependentShadow() }, + OptionalDependents = { new LongToDecimalDependentOptional(), new LongToDecimalDependentOptional() }, + RequiredDependents = { new LongToDecimalDependentRequired(), new LongToDecimalDependentRequired() } + }).Entity; + + await context.SaveChangesAsync(); + + id1 = principal1.Id; + Assert.NotEqual(0L, id1); + foreach (var dependent in principal1.Dependents) + { + Assert.NotEqual(0L, dependent.Id); + Assert.Same(principal1, dependent.Principal); + Assert.Equal(id1, context.Entry(dependent).Property("PrincipalId").CurrentValue!.Value); + } + + foreach (var dependent in principal1.OptionalDependents) + { + Assert.NotEqual(0L, dependent.Id); + Assert.Same(principal1, dependent.Principal); + Assert.Equal(id1, dependent.PrincipalId); + } + + foreach (var dependent in principal1.RequiredDependents) + { + Assert.NotEqual(0L, dependent.Id); + Assert.Same(principal1, dependent.Principal); + Assert.Equal(id1, dependent.PrincipalId); + } + }, async context => + { + var principal1 = await context.Set() + .Include(e => e.Dependents) + .Include(e => e.OptionalDependents) + .Include(e => e.RequiredDependents) + .SingleAsync(); + + Assert.Equal(principal1.Id, id1); + foreach (var dependent in principal1.Dependents) + { + Assert.Same(principal1, dependent.Principal); + Assert.Equal(id1, context.Entry(dependent).Property("PrincipalId").CurrentValue!.Value); + } + + foreach (var dependent in principal1.OptionalDependents) + { + Assert.Same(principal1, dependent.Principal); + Assert.Equal(id1, dependent.PrincipalId!.Value); + } + + foreach (var dependent in principal1.RequiredDependents) + { + Assert.Same(principal1, dependent.Principal); + Assert.Equal(id1, dependent.PrincipalId); + } + + principal1.Dependents.Remove(principal1.Dependents.First()); + principal1.OptionalDependents.Remove(principal1.OptionalDependents.First()); + principal1.RequiredDependents.Remove(principal1.RequiredDependents.First()); + + await context.SaveChangesAsync(); + }, async context => + { + var dependents1 = await context.Set().Include(e => e.Principal).ToListAsync(); + Assert.Equal(2, dependents1.Count); + Assert.Null( + context.Entry(dependents1.Single(e => e.Principal == null)) + .Property("PrincipalId").CurrentValue); + + var optionalDependents1 = await context.Set().Include(e => e.Principal).ToListAsync(); + Assert.Equal(2, optionalDependents1.Count); + Assert.Null(optionalDependents1.Single(e => e.Principal == null).PrincipalId); + + var requiredDependents1 = await context.Set().Include(e => e.Principal).ToListAsync(); + Assert.Single(requiredDependents1); + + context.Remove(dependents1.Single(e => e.Principal != null)); + context.Remove(optionalDependents1.Single(e => e.Principal != null)); + context.Remove(requiredDependents1.Single()); + context.Remove(requiredDependents1.Single().Principal); + + await context.SaveChangesAsync(); + }, async context => + { + Assert.Equal(1, await context.Set().CountAsync()); + Assert.Equal(1, await context.Set().CountAsync()); + Assert.Equal(0, await context.Set().CountAsync()); + }); + } + + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + [ConditionalFact] + public virtual async Task Exception_in_SaveChanges_causes_store_values_to_be_reverted() + { + var entities = new List(); + for (var i = 0; i < 100; i++) + { + entities.Add( + new Darwin + { + _id = Fixture.NullableIntSentinel, + Species = new Species { Id = Fixture.IntSentinel, Name = "Goldfish (with legs)" }, + MixedMetaphors = + [ + new Species { Id = Fixture.IntSentinel, Name = "Large ground finch" }, + new Species { Id = Fixture.IntSentinel, Name = "Medium ground finch" }, + new Species { Id = Fixture.IntSentinel, Name = "Small tree finch" }, + new Species { Id = Fixture.IntSentinel, Name = "Green warbler-finch" } + ] + }); + } + + entities.Add( + new Darwin + { + Id = 1777, + Species = new Species { Id = Fixture.IntSentinel, Name = "Goldfish (with legs)" }, + MixedMetaphors = + [ + new Species { Id = Fixture.IntSentinel, Name = "Large ground finch" }, + new Species { Id = Fixture.IntSentinel, Name = "Medium ground finch" }, + new Species { Id = Fixture.IntSentinel, Name = "Small tree finch" }, + new Species { Id = Fixture.IntSentinel, Name = "Green warbler-finch" } + ] + }); + + for (var i = 0; i < 2; i++) + { + await ExecuteWithStrategyInTransactionAsync( + async context => + { + context.AddRange(entities); + + foreach (var entity in entities.Take(100)) + { + Assert.Equal(Fixture.NullableIntSentinel ?? 0, entity.Id); + Assert.Equal(Fixture.NullableIntSentinel, entity._id); + } + + Assert.Equal(1777, entities[100].Id); + + var tempValueIdentityMap = entities.ToDictionary( + e => context.Entry(e).Property(p => p.Id).CurrentValue, + e => e); + + var stateManager = context.GetService(); + var key = context.Model.FindEntityType(typeof(Darwin))!.FindPrimaryKey()!; + + foreach (var entity in entities) + { + Assert.Same( + entity, + stateManager.TryGetEntryTyped( + key, + context.Entry(entity).Property(p => p.Id).CurrentValue)!.Entity); + } + + // DbUpdateException : An error occurred while updating the entries. See the + // inner exception for details. + // SqlException : Cannot insert explicit value for identity column in table + // 'Blog' when IDENTITY_INSERT is set to OFF. + var updateException = await Assert.ThrowsAsync(() => context.SaveChangesAsync()); + Assert.Single(updateException.Entries); + + foreach (var entity in entities.Take(100)) + { + Assert.Equal(Fixture.NullableIntSentinel ?? 0, entity.Id); + Assert.Equal(Fixture.NullableIntSentinel, entity._id); + Assert.Null(entity.Species!.DarwinId); + foreach (var species in entity.MixedMetaphors) + { + Assert.Null(species.MetaphoricId); + } + } + + Assert.Equal(1777, entities[100].Id); + Assert.Equal(1777, entities[100].Species!.DarwinId); + foreach (var species in entities[100].MixedMetaphors) + { + Assert.Equal(1777, species.MetaphoricId); + } + + foreach (var entity in entities) + { + Assert.Same( + entity, + tempValueIdentityMap[context.Entry(entity).Property(p => p.Id).CurrentValue]); + } + + foreach (var entity in entities) + { + Assert.Same( + entity, + stateManager.TryGetEntryTyped( + key, + context.Entry(entity).Property(p => p.Id).CurrentValue)!.Entity); + } + }); + } + } + + public abstract class StoreGeneratedLibRedFixtureBase : StoreGeneratedFixtureBase + { + public virtual long LongToDecimalPrincipalSentinel + => default; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => builder + .EnableSensitiveDataLogging() + .ConfigureWarnings( + b => b.Default(WarningBehavior.Throw) + .Ignore(CoreEventId.SensitiveDataLoggingEnabledWarning) + .Ignore(RelationalEventId.BoolWithDefaultWarning)); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).UseJetIdentityColumn(); + b.Property(e => e.Identity).HasDefaultValue("Banana Joe"); + b.Property(e => e.IdentityReadOnlyBeforeSave).HasDefaultValue("Doughnut Sheriff"); + b.Property(e => e.IdentityReadOnlyAfterSave).HasDefaultValue("Anton"); + b.Property(e => e.AlwaysIdentity).HasDefaultValue("Banana Joe"); + b.Property(e => e.AlwaysIdentityReadOnlyBeforeSave).HasDefaultValue("Doughnut Sheriff"); + b.Property(e => e.AlwaysIdentityReadOnlyAfterSave).HasDefaultValue("Anton"); + b.Property(e => e.Computed).HasDefaultValue("Alan"); + b.Property(e => e.ComputedReadOnlyBeforeSave).HasDefaultValue("Carmen"); + b.Property(e => e.ComputedReadOnlyAfterSave).HasDefaultValue("Tina Rex"); + b.Property(e => e.AlwaysComputed).HasDefaultValue("Alan"); + b.Property(e => e.AlwaysComputedReadOnlyBeforeSave).HasDefaultValue("Carmen"); + b.Property(e => e.AlwaysComputedReadOnlyAfterSave).HasDefaultValue("Tina Rex"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.OnAdd).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddUseBeforeUseAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddIgnoreBeforeUseAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddThrowBeforeUseAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddUseBeforeIgnoreAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddIgnoreBeforeIgnoreAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddThrowBeforeIgnoreAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddUseBeforeThrowAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddIgnoreBeforeThrowAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddThrowBeforeThrowAfter).HasDefaultValue("Rabbit"); + + b.Property(e => e.OnAddOrUpdate).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddOrUpdateUseBeforeUseAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddOrUpdateIgnoreBeforeUseAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddOrUpdateThrowBeforeUseAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddOrUpdateUseBeforeIgnoreAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddOrUpdateIgnoreBeforeIgnoreAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddOrUpdateThrowBeforeIgnoreAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddOrUpdateUseBeforeThrowAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddOrUpdateIgnoreBeforeThrowAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnAddOrUpdateThrowBeforeThrowAfter).HasDefaultValue("Rabbit"); + + b.Property(e => e.OnUpdate).HasDefaultValue("Rabbit"); + b.Property(e => e.OnUpdateUseBeforeUseAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnUpdateIgnoreBeforeUseAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnUpdateThrowBeforeUseAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnUpdateUseBeforeIgnoreAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnUpdateIgnoreBeforeIgnoreAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnUpdateThrowBeforeIgnoreAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnUpdateUseBeforeThrowAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnUpdateIgnoreBeforeThrowAfter).HasDefaultValue("Rabbit"); + b.Property(e => e.OnUpdateThrowBeforeThrowAfter).HasDefaultValue("Rabbit"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.NullableAsNonNullable).HasComputedColumnSql("1"); + b.Property(e => e.NonNullableAsNullable).HasComputedColumnSql("1"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.TrueDefault).HasDefaultValue(true); + b.Property(e => e.NonZeroDefault).HasDefaultValue(-1); + b.Property(e => e.FalseDefault).HasDefaultValue(false); + b.Property(e => e.ZeroDefault).HasDefaultValue(0); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.NullableBackedBoolTrueDefault).HasDefaultValue(true); + b.Property(e => e.NullableBackedIntNonZeroDefault).HasDefaultValue(-1); + b.Property(e => e.NullableBackedBoolFalseDefault).HasDefaultValue(false); + b.Property(e => e.NullableBackedIntZeroDefault).HasDefaultValue(0); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.NullableBackedBoolTrueDefault).HasDefaultValue(true); + b.Property(e => e.NullableBackedIntNonZeroDefault).HasDefaultValue(-1); + b.Property(e => e.NullableBackedBoolFalseDefault).HasDefaultValue(false); + b.Property(e => e.NullableBackedIntZeroDefault).HasDefaultValue(0); + }); + + modelBuilder.Entity().Property(e => e.HasTemp).HasDefaultValue(777); + + modelBuilder.Entity().Property(e => e.Id).UseJetIdentityColumn(); + + modelBuilder.Entity( + entity => + { + var keyConverter = new ValueConverter( + v => new decimal(v), + v => decimal.ToInt64(v)); + + entity.Property(e => e.Id) + .HasPrecision(18, 0) + .HasConversion(keyConverter); + }); + + base.OnModelCreating(modelBuilder, context); + } + + protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) + { + base.ConfigureConventions(configurationBuilder); + + configurationBuilder.Properties() + .HaveConversion(); + configurationBuilder.Properties() + .HaveConversion(); + configurationBuilder.Properties().HaveConversion(); + configurationBuilder.Properties().HaveConversion(); + configurationBuilder.Properties().HaveConversion(); + configurationBuilder.Properties().HaveConversion(); + } + } +} \ No newline at end of file diff --git a/test/EFCore.LibRed.FunctionalTests/TPTTableSplittingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/TPTTableSplittingLibRedTest.cs new file mode 100644 index 00000000..49c994dd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TPTTableSplittingLibRedTest.cs @@ -0,0 +1,214 @@ +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class TPTTableSplittingLibRedTest(NonSharedFixture fixture, ITestOutputHelper testOutputHelper) : TPTTableSplittingTestBase(fixture, testOutputHelper) +{ + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public override async Task Can_use_with_redundant_relationships() + { + await base.Can_use_with_redundant_relationships(); + + AssertSql( + """ +SELECT `v`.`Name`, `v`.`SeatingCapacity`, `c`.`AttachedVehicleName`, IIF(`c`.`Name` IS NOT NULL, 'CompositeVehicle', IIF(`p`.`Name` IS NOT NULL, 'PoweredVehicle', NULL)) AS `Discriminator`, `s`.`Name`, `s`.`Operator_Name`, `s`.`LicenseType`, `s`.`Discriminator`, `v2`.`Name`, `v2`.`Active`, `v2`.`Type`, `s1`.`Name`, `s1`.`Computed`, `s1`.`Description`, `s1`.`Discriminator`, `s3`.`VehicleName`, `s3`.`Capacity`, `s3`.`FuelType`, `s3`.`GrainGeometry`, `s3`.`Discriminator` +FROM (((((`Vehicles` AS `v` +LEFT JOIN `PoweredVehicles` AS `p` ON `v`.`Name` = `p`.`Name`) +LEFT JOIN `CompositeVehicles` AS `c` ON `v`.`Name` = `c`.`Name`) +LEFT JOIN ( + SELECT `v0`.`Name`, `v0`.`Operator_Name`, `l`.`LicenseType`, IIF(`l`.`VehicleName` IS NOT NULL, 'LicensedOperator', NULL) AS `Discriminator` + FROM `Vehicles` AS `v0` + LEFT JOIN `LicensedOperators` AS `l` ON `v0`.`Name` = `l`.`VehicleName` +) AS `s` ON `v`.`Name` = `s`.`Name`) +LEFT JOIN ( + SELECT `v1`.`Name`, `v1`.`Active`, `v1`.`Type` + FROM `Vehicles` AS `v1` + WHERE `v1`.`Active` IS NOT NULL +) AS `v2` ON `s`.`Name` = IIF(`v2`.`Active` IS NOT NULL, `v2`.`Name`, NULL)) +LEFT JOIN ( + SELECT `p0`.`Name`, `p0`.`Computed`, `p0`.`Description`, IIF(`s0`.`VehicleName` IS NOT NULL, 'SolidRocket', IIF(`i`.`VehicleName` IS NOT NULL, 'IntermittentCombustionEngine', IIF(`c0`.`VehicleName` IS NOT NULL, 'ContinuousCombustionEngine', NULL))) AS `Discriminator` + FROM ((`PoweredVehicles` AS `p0` + LEFT JOIN `ContinuousCombustionEngines` AS `c0` ON `p0`.`Name` = `c0`.`VehicleName`) + LEFT JOIN `IntermittentCombustionEngines` AS `i` ON `p0`.`Name` = `i`.`VehicleName`) + LEFT JOIN `SolidRockets` AS `s0` ON `p0`.`Name` = `s0`.`VehicleName` + WHERE `p0`.`Computed` IS NOT NULL +) AS `s1` ON `v`.`Name` = IIF(`s1`.`Computed` IS NOT NULL, `s1`.`Name`, NULL)) +LEFT JOIN ( + SELECT `c1`.`VehicleName`, `c1`.`Capacity`, `c1`.`FuelType`, `s2`.`GrainGeometry`, IIF(`s2`.`VehicleName` IS NOT NULL, 'SolidFuelTank', NULL) AS `Discriminator` + FROM `CombustionEngines` AS `c1` + LEFT JOIN `SolidFuelTanks` AS `s2` ON `c1`.`VehicleName` = `s2`.`VehicleName` + WHERE `c1`.`Capacity` IS NOT NULL +) AS `s3` ON `s1`.`Name` = IIF(`s3`.`Capacity` IS NOT NULL, `s3`.`VehicleName`, NULL) +ORDER BY `v`.`Name` +"""); + } + + public override async Task Can_query_shared() + { + await base.Can_query_shared(); + + AssertSql( + """ +SELECT `v`.`Name`, `v`.`Operator_Name`, `l`.`LicenseType`, IIF(`l`.`VehicleName` IS NOT NULL, 'LicensedOperator', NULL) AS `Discriminator` +FROM `Vehicles` AS `v` +LEFT JOIN `LicensedOperators` AS `l` ON `v`.`Name` = `l`.`VehicleName` +"""); + } + + public override async Task Can_query_shared_nonhierarchy() + { + await base.Can_query_shared_nonhierarchy(); + + AssertSql( + """ +SELECT `v`.`Name`, `v`.`Operator_Name` +FROM `Vehicles` AS `v` +"""); + } + + public override async Task Can_query_shared_nonhierarchy_with_nonshared_dependent() + { + await base.Can_query_shared_nonhierarchy_with_nonshared_dependent(); + + AssertSql( + """ +SELECT `v`.`Name`, `v`.`Operator_Name` +FROM `Vehicles` AS `v` +"""); + } + + public override async Task Can_query_shared_derived_hierarchy() + { + await base.Can_query_shared_derived_hierarchy(); + + AssertSql( + """ +SELECT `c`.`VehicleName`, `c`.`Capacity`, `c`.`FuelType`, `s`.`GrainGeometry`, IIF(`s`.`VehicleName` IS NOT NULL, 'SolidFuelTank', NULL) AS `Discriminator` +FROM `CombustionEngines` AS `c` +LEFT JOIN `SolidFuelTanks` AS `s` ON `c`.`VehicleName` = `s`.`VehicleName` +WHERE `c`.`Capacity` IS NOT NULL +"""); + } + + public override async Task Can_query_shared_derived_nonhierarchy() + { + await base.Can_query_shared_derived_nonhierarchy(); + + AssertSql( + """ +SELECT `c`.`VehicleName`, `c`.`Capacity`, `c`.`FuelType` +FROM `CombustionEngines` AS `c` +WHERE `c`.`Capacity` IS NOT NULL +"""); + } + + public override async Task Can_query_shared_derived_nonhierarchy_all_required() + { + await base.Can_query_shared_derived_nonhierarchy_all_required(); + + AssertSql( + """ +SELECT `c`.`VehicleName`, `c`.`Capacity`, `c`.`FuelType` +FROM `CombustionEngines` AS `c` +WHERE `c`.`Capacity` IS NOT NULL AND `c`.`FuelType` IS NOT NULL +"""); + } + + public override async Task Can_change_dependent_instance_non_derived() + { + await base.Can_change_dependent_instance_non_derived(); + AssertSql( + """ +@p0='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 255) +@p1='Repair' (Size = 255) + +INSERT INTO `LicensedOperators` (`VehicleName`, `LicenseType`) +VALUES (@p0, @p1); +""", + // + """ +@p1='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 255) +@p0='repairman' (Size = 255) + +UPDATE `Vehicles` SET `Operator_Name` = @p0 +WHERE `Name` = @p1; +SELECT @@ROWCOUNT; +""", + // + """ +SELECT TOP 2 `v`.`Name`, `v`.`SeatingCapacity`, `c`.`AttachedVehicleName`, IIF(`c`.`Name` IS NOT NULL, 'CompositeVehicle', IIF(`p`.`Name` IS NOT NULL, 'PoweredVehicle', NULL)) AS `Discriminator`, `s`.`Name`, `s`.`Operator_Name`, `s`.`LicenseType`, `s`.`Discriminator` +FROM ((`Vehicles` AS `v` +LEFT JOIN `PoweredVehicles` AS `p` ON `v`.`Name` = `p`.`Name`) +LEFT JOIN `CompositeVehicles` AS `c` ON `v`.`Name` = `c`.`Name`) +LEFT JOIN ( + SELECT `v0`.`Name`, `v0`.`Operator_Name`, `l`.`LicenseType`, IIF(`l`.`VehicleName` IS NOT NULL, 'LicensedOperator', NULL) AS `Discriminator` + FROM `Vehicles` AS `v0` + LEFT JOIN `LicensedOperators` AS `l` ON `v0`.`Name` = `l`.`VehicleName` +) AS `s` ON `v`.`Name` = `s`.`Name` +WHERE `v`.`Name` = 'Trek Pro Fit Madone 6 Series' +"""); + } + + public override async Task Can_change_principal_instance_non_derived() + { + await base.Can_change_principal_instance_non_derived(); + + AssertSql( + """ +@p1='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 255) +@p0='2' + +UPDATE `Vehicles` SET `SeatingCapacity` = @p0 +WHERE `Name` = @p1; +SELECT @@ROWCOUNT; +""", + // + """ +SELECT TOP 2 `v`.`Name`, `v`.`SeatingCapacity`, `c`.`AttachedVehicleName`, IIF(`c`.`Name` IS NOT NULL, 'CompositeVehicle', IIF(`p`.`Name` IS NOT NULL, 'PoweredVehicle', NULL)) AS `Discriminator`, `s`.`Name`, `s`.`Operator_Name`, `s`.`LicenseType`, `s`.`Discriminator` +FROM ((`Vehicles` AS `v` +LEFT JOIN `PoweredVehicles` AS `p` ON `v`.`Name` = `p`.`Name`) +LEFT JOIN `CompositeVehicles` AS `c` ON `v`.`Name` = `c`.`Name`) +LEFT JOIN ( + SELECT `v0`.`Name`, `v0`.`Operator_Name`, `l`.`LicenseType`, IIF(`l`.`VehicleName` IS NOT NULL, 'LicensedOperator', NULL) AS `Discriminator` + FROM `Vehicles` AS `v0` + LEFT JOIN `LicensedOperators` AS `l` ON `v0`.`Name` = `l`.`VehicleName` +) AS `s` ON `v`.`Name` = `s`.`Name` +WHERE `v`.`Name` = 'Trek Pro Fit Madone 6 Series' +"""); + } + + public override async Task Optional_dependent_materialized_when_no_properties() + { + await base.Optional_dependent_materialized_when_no_properties(); + + AssertSql( + """ +SELECT TOP 1 `v`.`Name`, `v`.`SeatingCapacity`, `c`.`AttachedVehicleName`, IIF(`c`.`Name` IS NOT NULL, 'CompositeVehicle', IIF(`p`.`Name` IS NOT NULL, 'PoweredVehicle', NULL)) AS `Discriminator`, `s`.`Name`, `s`.`Operator_Name`, `s`.`LicenseType`, `s`.`Discriminator`, `v2`.`Name`, `v2`.`Active`, `v2`.`Type` +FROM (((`Vehicles` AS `v` +LEFT JOIN `PoweredVehicles` AS `p` ON `v`.`Name` = `p`.`Name`) +LEFT JOIN `CompositeVehicles` AS `c` ON `v`.`Name` = `c`.`Name`) +LEFT JOIN ( + SELECT `v0`.`Name`, `v0`.`Operator_Name`, `l`.`LicenseType`, IIF(`l`.`VehicleName` IS NOT NULL, 'LicensedOperator', NULL) AS `Discriminator` + FROM `Vehicles` AS `v0` + LEFT JOIN `LicensedOperators` AS `l` ON `v0`.`Name` = `l`.`VehicleName` +) AS `s` ON `v`.`Name` = `s`.`Name`) +LEFT JOIN ( + SELECT `v1`.`Name`, `v1`.`Active`, `v1`.`Type` + FROM `Vehicles` AS `v1` + WHERE `v1`.`Active` IS NOT NULL +) AS `v2` ON `s`.`Name` = IIF(`v2`.`Active` IS NOT NULL, `v2`.`Name`, NULL) +WHERE `v`.`Name` = 'AIM-9M Sidewinder' +ORDER BY `v`.`Name` +"""); + } + + public override Task Can_insert_dependent_with_just_one_parent() + // This scenario is not valid for TPT + => Task.CompletedTask; +} diff --git a/test/EFCore.LibRed.FunctionalTests/TableSplittingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/TableSplittingLibRedTest.cs new file mode 100644 index 00000000..cb358f73 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TableSplittingLibRedTest.cs @@ -0,0 +1,208 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit.Abstractions; +using Microsoft.EntityFrameworkCore.TestModels.TransportationModel; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class TableSplittingLibRedTest(NonSharedFixture fixture,ITestOutputHelper testOutputHelper) : TableSplittingTestBase(fixture, testOutputHelper) + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + public override async Task Can_use_with_redundant_relationships() + { + await base.Can_use_with_redundant_relationships(); + + // TODO: `Name` shouldn't be selected multiple times and no joins are needed + AssertSql( + """ +SELECT `v`.`Name`, `v`.`Discriminator`, `v`.`SeatingCapacity`, `v`.`AttachedVehicleName`, `v0`.`Name`, `v0`.`Operator_Discriminator`, `v0`.`Operator_Name`, `v0`.`LicenseType`, `v2`.`Name`, `v2`.`Active`, `v2`.`Type`, `v4`.`Name`, `v4`.`Computed`, `v4`.`Description`, `v4`.`Engine_Discriminator`, `v6`.`Name`, `v6`.`Capacity`, `v6`.`FuelTank_Discriminator`, `v6`.`FuelType`, `v6`.`GrainGeometry` +FROM (((`Vehicles` AS `v` +LEFT JOIN `Vehicles` AS `v0` ON `v`.`Name` = `v0`.`Name`) +LEFT JOIN ( + SELECT `v1`.`Name`, `v1`.`Active`, `v1`.`Type` + FROM `Vehicles` AS `v1` + WHERE `v1`.`Active` IS NOT NULL +) AS `v2` ON `v0`.`Name` = IIF(`v2`.`Active` IS NOT NULL, `v2`.`Name`, NULL)) +LEFT JOIN ( + SELECT `v3`.`Name`, `v3`.`Computed`, `v3`.`Description`, `v3`.`Engine_Discriminator` + FROM `Vehicles` AS `v3` + WHERE `v3`.`Computed` IS NOT NULL AND `v3`.`Engine_Discriminator` IS NOT NULL +) AS `v4` ON `v`.`Name` = `v4`.`Name`) +LEFT JOIN ( + SELECT `v5`.`Name`, `v5`.`Capacity`, `v5`.`FuelTank_Discriminator`, `v5`.`FuelType`, `v5`.`GrainGeometry` + FROM `Vehicles` AS `v5` + WHERE `v5`.`Capacity` IS NOT NULL AND `v5`.`FuelTank_Discriminator` IS NOT NULL +) AS `v6` ON `v4`.`Name` = `v6`.`Name` +ORDER BY `v`.`Name` +"""); + } + + public override async Task Can_query_shared() + { + await base.Can_query_shared(); + + AssertSql( +""" +SELECT `v`.`Name`, `v`.`Operator_Discriminator`, `v`.`Operator_Name`, `v`.`LicenseType` +FROM `Vehicles` AS `v` +"""); + } + + public override async Task Can_query_shared_nonhierarchy() + { + await base.Can_query_shared_nonhierarchy(); + + AssertSql( +""" +SELECT `v`.`Name`, `v`.`Operator_Name` +FROM `Vehicles` AS `v` +"""); + } + + public override async Task Can_query_shared_nonhierarchy_with_nonshared_dependent() + { + await base.Can_query_shared_nonhierarchy_with_nonshared_dependent(); + + AssertSql( +""" +SELECT `v`.`Name`, `v`.`Operator_Name` +FROM `Vehicles` AS `v` +"""); + } + + public override async Task Can_query_shared_derived_hierarchy() + { + await base.Can_query_shared_derived_hierarchy(); + + AssertSql( +""" +SELECT `v`.`Name`, `v`.`Capacity`, `v`.`FuelTank_Discriminator`, `v`.`FuelType`, `v`.`GrainGeometry` +FROM `Vehicles` AS `v` +WHERE `v`.`Capacity` IS NOT NULL AND `v`.`FuelTank_Discriminator` IS NOT NULL +"""); + } + + public override async Task Can_query_shared_derived_nonhierarchy() + { + await base.Can_query_shared_derived_nonhierarchy(); + + AssertSql( +""" +SELECT `v`.`Name`, `v`.`Capacity`, `v`.`FuelType` +FROM `Vehicles` AS `v` +WHERE `v`.`Capacity` IS NOT NULL +"""); + } + + public override async Task Can_query_shared_derived_nonhierarchy_all_required() + { + await base.Can_query_shared_derived_nonhierarchy_all_required(); + + AssertSql( +""" +SELECT `v`.`Name`, `v`.`Capacity`, `v`.`FuelType` +FROM `Vehicles` AS `v` +WHERE `v`.`Capacity` IS NOT NULL AND `v`.`FuelType` IS NOT NULL +"""); + } + + public override async Task Can_change_dependent_instance_non_derived() + { + await base.Can_change_dependent_instance_non_derived(); + + AssertSql( + """ +@p3='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 255) +@p0='LicensedOperator' (Nullable = false) (Size = 21) +@p1='Repair' (Size = 255) +@p2='repairman' (Size = 255) + +UPDATE `Vehicles` SET `Operator_Discriminator` = @p0, `LicenseType` = @p1, `Operator_Name` = @p2 +WHERE `Name` = @p3; +SELECT @@ROWCOUNT; +""", + // + """ +SELECT TOP 2 `v`.`Name`, `v`.`Discriminator`, `v`.`SeatingCapacity`, `v`.`AttachedVehicleName`, `v0`.`Name`, `v0`.`Operator_Discriminator`, `v0`.`Operator_Name`, `v0`.`LicenseType` +FROM `Vehicles` AS `v` +LEFT JOIN `Vehicles` AS `v0` ON `v`.`Name` = `v0`.`Name` +WHERE `v`.`Name` = 'Trek Pro Fit Madone 6 Series' +"""); + } + + public override async Task Can_change_principal_instance_non_derived() + { + await base.Can_change_principal_instance_non_derived(); + + AssertSql( + """ +@p1='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 255) +@p0='2' + +UPDATE `Vehicles` SET `SeatingCapacity` = @p0 +WHERE `Name` = @p1; +SELECT @@ROWCOUNT; +""", + // + """ +SELECT TOP 2 `v`.`Name`, `v`.`Discriminator`, `v`.`SeatingCapacity`, `v`.`AttachedVehicleName`, `v0`.`Name`, `v0`.`Operator_Discriminator`, `v0`.`Operator_Name`, `v0`.`LicenseType` +FROM `Vehicles` AS `v` +LEFT JOIN `Vehicles` AS `v0` ON `v`.`Name` = `v0`.`Name` +WHERE `v`.`Name` = 'Trek Pro Fit Madone 6 Series' +"""); + } + + public override async Task Optional_dependent_materialized_when_no_properties() + { + await base.Optional_dependent_materialized_when_no_properties(); + + AssertSql( + """ +SELECT TOP 1 `v`.`Name`, `v`.`Discriminator`, `v`.`SeatingCapacity`, `v`.`AttachedVehicleName`, `v0`.`Name`, `v0`.`Operator_Discriminator`, `v0`.`Operator_Name`, `v0`.`LicenseType`, `v2`.`Name`, `v2`.`Active`, `v2`.`Type` +FROM (`Vehicles` AS `v` +LEFT JOIN `Vehicles` AS `v0` ON `v`.`Name` = `v0`.`Name`) +LEFT JOIN ( + SELECT `v1`.`Name`, `v1`.`Active`, `v1`.`Type` + FROM `Vehicles` AS `v1` + WHERE `v1`.`Active` IS NOT NULL +) AS `v2` ON `v0`.`Name` = IIF(`v2`.`Active` IS NOT NULL, `v2`.`Name`, NULL) +WHERE `v`.`Name` = 'AIM-9M Sidewinder' +ORDER BY `v`.`Name` +"""); + } + + public override async Task ExecuteUpdate_works_for_table_sharing(bool async) + { + await base.ExecuteUpdate_works_for_table_sharing(async); + + AssertSql( + """ +@p='1' + +UPDATE `Vehicles` AS `v` +SET `v`.`SeatingCapacity` = @p +""", + // + """ +SELECT NOT EXISTS ( + SELECT 1 + FROM `Vehicles` AS `v` + WHERE `v`.`SeatingCapacity` <> 1) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().ToTable("Vehicles") + .Property(e => e.Computed).HasComputedColumnSql("1", stored: true); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestModels/Northwind/NorthwindLibRedContext.cs b/test/EFCore.LibRed.FunctionalTests/TestModels/Northwind/NorthwindLibRedContext.cs new file mode 100644 index 00000000..3b05a705 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestModels/Northwind/NorthwindLibRedContext.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestModels.Northwind +{ + public class NorthwindLibRedContext(DbContextOptions options) : NorthwindRelationalContext(options) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.EmployeeID).HasColumnType("int"); + b.Property(e => e.ReportsTo).HasColumnType("int"); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.CustomerID).IsFixedLength(); + }); + + modelBuilder.Entity( + b => + { + b.Property(e => e.CustomerID).IsFixedLength(); + b.Property(e => e.EmployeeID).HasColumnType("int"); + b.Property(o => o.OrderDate).HasColumnType("datetime"); + }); + + modelBuilder.Entity( + b => + { + b.Property(p => p.UnitPrice).HasColumnType("money"); + b.Property(p => p.UnitsInStock).HasColumnType("smallint"); + }); + + modelBuilder.Entity( + b => + { + b.Property(p => p.UnitPrice).HasColumnType("money"); + b.Property(p => p.Quantity).HasColumnType("smallint"); + b.Property(p => p.Discount).HasColumnType("real"); + }); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/AssertSqlHelper.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/AssertSqlHelper.cs new file mode 100644 index 00000000..28e0d96f --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/AssertSqlHelper.cs @@ -0,0 +1,16 @@ + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public static class AssertSqlHelper + { + static AssertSqlHelper() + { + } + + public static string Parameter(string name) + => name; + + public static string Declaration(string fullDeclaration) + => fullDeclaration; + } +} \ No newline at end of file diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/CollectionExtensions.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/CollectionExtensions.cs new file mode 100644 index 00000000..5a40c08e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/CollectionExtensions.cs @@ -0,0 +1,19 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public static class CollectionExtensions + { + public static Queue Enqueue(this Queue queue, IEnumerable items) + { + foreach (var item in items) + { + queue.Enqueue(item); + } + + return queue; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedAdventureWorksTestStoreFactory.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedAdventureWorksTestStoreFactory.cs new file mode 100644 index 00000000..0e8ab561 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedAdventureWorksTestStoreFactory.cs @@ -0,0 +1,21 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.IO; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class LibRedAdventureWorksTestStoreFactory : LibRedTestStoreFactory + { + public new static LibRedAdventureWorksTestStoreFactory Instance { get; } = new(); + + protected LibRedAdventureWorksTestStoreFactory() + { + } + + public override TestStore GetOrCreate(string storeName) + => LibRedTestStore.GetOrCreateWithScriptPath( + "adventureworks", + Path.Combine("SqlAzure", "adventureworks.sql")); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedCondition.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedCondition.cs new file mode 100644 index 00000000..f1f17a13 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedCondition.cs @@ -0,0 +1,12 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + [Flags] + public enum LibRedCondition + { + IsNotCI = 1 << 7, + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedConditionAttribute.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedConditionAttribute.cs new file mode 100644 index 00000000..3cffa688 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedConditionAttribute.cs @@ -0,0 +1,37 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.TestUtilities.Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] + public sealed class LibRedConditionAttribute(LibRedCondition conditions) : Attribute, ITestCondition + { + public LibRedCondition Conditions { get; set; } = conditions; + + public ValueTask IsMetAsync() + { + var isMet = true; + + if (Conditions.HasFlag(LibRedCondition.IsNotCI)) + { + isMet &= !TestEnvironment.IsCI; + } + + return ValueTask.FromResult(isMet); + } + + public string SkipReason => + // ReSharper disable once UseStringInterpolation + string.Format( + "The test LibRed does not meet these conditions: '{0}'", + string.Join( + ", ", Enum.GetValues(typeof(LibRedCondition)) + .Cast() + .Where(f => Conditions.HasFlag(f)) + .Select(f => Enum.GetName(typeof(LibRedCondition), f)))); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedConfiguredConditionAttribute.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedConfiguredConditionAttribute.cs new file mode 100644 index 00000000..6f7c46aa --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedConfiguredConditionAttribute.cs @@ -0,0 +1,21 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.TestUtilities.Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)] + public sealed class LibRedConfiguredConditionAttribute : Attribute, ITestCondition + { + public ValueTask IsMetAsync() + => new( + TestEnvironment.IsConfigured /*&& (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || !TestEnvironment.IsLocalDb)*/); + + public string SkipReason => /*TestEnvironment.IsLocalDb + ? "LocalDb is not accessible on this platform. An external SQL Server must be configured." + : */"No test database has been configured."; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedDatabaseCleaner.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedDatabaseCleaner.cs new file mode 100644 index 00000000..8bd1e526 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedDatabaseCleaner.cs @@ -0,0 +1,25 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.Design.Internal; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class LibRedDatabaseCleaner : RelationalDatabaseCleaner + { + protected override IDatabaseModelFactory CreateDatabaseModelFactory(ILoggerFactory loggerFactory) + { + var services = new ServiceCollection(); + services.AddEntityFrameworkLibRed(); + + new LibRedDesignTimeServices().ConfigureDesignTimeServices(services); + + return services + .BuildServiceProvider() // No scope validation; cleaner violates scopes, but only resolve services once. + .GetRequiredService(); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedDatabaseFacadeExtensions.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedDatabaseFacadeExtensions.cs new file mode 100644 index 00000000..968cef79 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedDatabaseFacadeExtensions.cs @@ -0,0 +1,14 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public static class LibRedDatabaseFacadeExtensions + { + public static void EnsureClean(this DatabaseFacade databaseFacade) + => databaseFacade.CreateExecutionStrategy() + .Execute(databaseFacade, database => new LibRedDatabaseCleaner().Clean(database)); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedDbContextOptionsBuilderExtensions.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedDbContextOptionsBuilderExtensions.cs new file mode 100644 index 00000000..e3c03bbf --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedDbContextOptionsBuilderExtensions.cs @@ -0,0 +1,28 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public static class LibRedDbContextOptionsBuilderExtensions + { + public static LibRedDbContextOptionsBuilder ApplyConfiguration(this LibRedDbContextOptionsBuilder optionsBuilder) + { + var maxBatch = TestEnvironment.GetInt(nameof(LibRedDbContextOptionsBuilder.MaxBatchSize)); + if (maxBatch.HasValue) + { + optionsBuilder.MaxBatchSize(maxBatch.Value); + } + + optionsBuilder.UseQuerySplittingBehavior(QuerySplittingBehavior.SingleQuery); + + optionsBuilder.ExecutionStrategy(d => new TestLibRedRetryingExecutionStrategy(d)); + + optionsBuilder.CommandTimeout(LibRedTestStore.CommandTimeout); + + return optionsBuilder; + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedNorthwindTestStoreFactory.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedNorthwindTestStoreFactory.cs new file mode 100644 index 00000000..4ba836fd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedNorthwindTestStoreFactory.cs @@ -0,0 +1,20 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class LibRedNorthwindTestStoreFactory : LibRedTestStoreFactory + { + public const string Name = "Northwind"; + public static readonly string NorthwindConnectionString = LibRedTestStore.CreateConnectionString(Name); + public new static LibRedNorthwindTestStoreFactory Instance { get; } = new(); + + protected LibRedNorthwindTestStoreFactory() + { + } + + public override TestStore GetOrCreate(string storeName) + => LibRedTestStore.GetOrCreateWithScriptPath(Name, scriptPath: "Northwind.sql"/*, templatePath: "Northwind.accdb"*/); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedPrecompiledQueryTestHelpers.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedPrecompiledQueryTestHelpers.cs new file mode 100644 index 00000000..5ad7f534 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedPrecompiledQueryTestHelpers.cs @@ -0,0 +1,26 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Infrastructure.Internal; +using EntityFrameworkCore.LibRed.Infrastructure.Internal; +using Microsoft.CodeAnalysis; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; + +public class LibRedPrecompiledQueryTestHelpers : PrecompiledQueryTestHelpers +{ + public static LibRedPrecompiledQueryTestHelpers Instance = new(); + + protected override IEnumerable BuildProviderMetadataReferences() + { + yield return MetadataReference.CreateFromFile(typeof(LibRedOptionsExtension).Assembly.Location); + // EFCore.Jet as well, not instead: LibRed builds on Jet's query pipeline, so the generated + // interceptor code still names Jet types (JetSqlTranslatingExpressionVisitor.ConstructLikePatternParameter + // for StartsWith/EndsWith/Contains, for one). The Jet copy of this helper needs only its own assembly. + yield return MetadataReference.CreateFromFile(typeof(JetOptionsExtension).Assembly.Location); + yield return MetadataReference.CreateFromFile(Assembly.GetExecutingAssembly().Location); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedTestHelpers.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedTestHelpers.cs new file mode 100644 index 00000000..7460d509 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedTestHelpers.cs @@ -0,0 +1,34 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class LibRedTestHelpers : RelationalTestHelpers + { + protected LibRedTestHelpers() + { + } + + public static LibRedTestHelpers Instance { get; } = new(); + + public override IServiceCollection AddProviderServices(IServiceCollection services) + => services.AddEntityFrameworkLibRed(); + + public override DbContextOptionsBuilder UseProviderOptions(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseLibRed(new LibRedConnection("Database=DummyDatabase")); + + public override LoggingDefinitions LoggingDefinitions { get; } = new JetLoggingDefinitions(); + + public static DateTimeOffset GetExpectedValue(DateTimeOffset value) + { + var val = value.UtcDateTime; + return new DateTimeOffset(new DateTime(val.Year, val.Month, val.Day, val.Hour, val.Minute, val.Second), TimeSpan.Zero); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedTestStore.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedTestStore.cs new file mode 100644 index 00000000..10abb440 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedTestStore.cs @@ -0,0 +1,435 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Data; +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; + +#pragma warning disable IDE0022 // Use block body for methods +// ReSharper disable SuggestBaseTypeForParameter +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class LibRedTestStore : RelationalTestStore + { + public const int CommandTimeout = 300; + + private static string CurrentDirectory + => Environment.CurrentDirectory; + + public static async Task GetNorthwindStoreAsync() + => (LibRedTestStore)await LibRedNorthwindTestStoreFactory.Instance + .GetOrCreate(LibRedNorthwindTestStoreFactory.Name).InitializeAsync(null, (Func?)null); + + public static LibRedTestStore GetOrCreate(string name) + => new(name); + + public static async Task GetOrCreateInitializedAsync(string name) + => await new LibRedTestStore(name).InitializeLibRedAsync(null, (Func?)null, null); + + public static LibRedTestStore GetOrCreateWithInitScript(string name, string initScript) + => new(name, initScript: initScript); + + public static LibRedTestStore GetOrCreateWithScriptPath( + string name, + string scriptPath, + bool shared = true) + => new(name, scriptPath: scriptPath, shared: shared); + + public static LibRedTestStore Create(string name) + => new(name, shared: false); + + public static async Task CreateInitializedAsync( + string name, + bool? multipleActiveResultSets = null) + => await new LibRedTestStore(name, shared: false) + .InitializeLibRedAsync(null, (Func?)null, null); + + private readonly string? _initScript; + private readonly string? _scriptPath; + + private LibRedTestStore( + string name, + string? initScript = null, + string? scriptPath = null, + bool shared = true) + : base(name + ".accdb", shared, CreateConnection(name)) + { + if (initScript != null) + { + _initScript = initScript; + } + + if (scriptPath != null) + { + _scriptPath = Path.Combine(Path.GetDirectoryName(typeof(LibRedTestStore).Assembly.Location)!, scriptPath); + } + } + + public async Task InitializeLibRedAsync( + IServiceProvider? serviceProvider, + Func? createContext, + Func? seed) + => (LibRedTestStore)await InitializeAsync(serviceProvider, createContext, seed); + + public async Task InitializeLibRedAsync( + IServiceProvider serviceProvider, + Func createContext, + Func seed) + => await InitializeLibRedAsync(serviceProvider, () => createContext(this), seed); + + protected override async Task InitializeAsync(Func createContext, Func? seed, Func? clean) + { + if (CreateDatabase(clean)) + { + if (_scriptPath != null) + { + ExecuteScript(await File.ReadAllTextAsync(_scriptPath)); + } + else + { + using var context = createContext(); + await context.Database.EnsureCreatedResilientlyAsync(); + + if (_initScript != null) + { + ExecuteScript(_initScript); + } + + if (seed != null) + { + await seed(context); + } + } + } + } + + public override DbContextOptionsBuilder AddProviderOptions(DbContextOptionsBuilder builder) + // Match EF Core's own SqlServer/Sqlite test stores, which do NOT enable sensitive-data logging at the + // store level (individual fixtures opt in where they need it). The blanket setting made the captured + // command logs balloon into large sensitive strings that pile up in the 32-bit test host. + => builder.UseLibRed(Connection, b => b.ApplyConfiguration().UseShortTextForSystemString()); + + private bool CreateDatabase(Func? clean) + { + var connectionString = CreateConnectionString(Name); + + if (LibRedConnection.DatabaseExists(connectionString)) + { + // Only reseed scripted databases during CI runs + if (_scriptPath != null && !TestEnvironment.IsCI) + { + //return false; + } + + //Call DeleteDatabase(). If you get IOException, wait 1 sec then retry, up to a max of 3 times + int retryCount = 0; + while (true) + { + try + { + DeleteDatabase(); + break; + } + catch (IOException) + { + if (++retryCount >= 3) + { + throw; + } + Thread.Sleep(1000); + } + } + + } + + LibRedConnection.CreateDatabase(connectionString); + //WaitForExists((LibRedConnection)Connection); + return true; + } + + public override Task CleanAsync(DbContext context) + { + context.Database.EnsureClean(); + return Task.CompletedTask; + } + + public void ExecuteScript(string script) + => Execute( + Connection, command => + { + foreach (var batch in + new Regex(@"\s*;\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline, TimeSpan.FromMilliseconds(1000.0)) + .Split(script).Where(b => !string.IsNullOrEmpty(b))) + { + command.CommandText = batch; + command.ExecuteNonQuery(); + } + + return 0; + }, ""); + + private static void WaitForExists(LibRedConnection connection) + => new TestLibRedRetryingExecutionStrategy().Execute(connection, WaitForExistsImplementation); + + private static void WaitForExistsImplementation(LibRedConnection connection) + { + var retryCount = 0; + while (true) + { + try + { + if (connection.State != ConnectionState.Closed) + { + connection.Close(); + } + + LibRedConnection.ClearPool(connection); + + connection.Open(); + connection.Close(); + return; + } + catch (Exception /*e*/) + { + if (++retryCount >= 30 + /*|| e.Number != 233 && e.Number != -2 && e.Number != 4060 && e.Number != 1832 && e.Number != 5120*/) + { + throw; + } + + Thread.Sleep(100); + } + } + } + + public void DeleteDatabase() + { + if (ConnectionState != ConnectionState.Closed) + { + CloseConnection(); + } + LibRedConnection.DropDatabase(CreateConnectionString(Name)); + } + + public override void OpenConnection() + => new TestLibRedRetryingExecutionStrategy().Execute(Connection, connection => connection.Open()); + + public override Task OpenConnectionAsync() + => new TestLibRedRetryingExecutionStrategy().ExecuteAsync(Connection, connection => connection.OpenAsync()); + + public T ExecuteScalar(string sql, params object[] parameters) + => ExecuteScalar(Connection, sql, parameters); + + private static T ExecuteScalar(DbConnection connection, string sql, params object[] parameters) + => Execute(connection, command => (T)command.ExecuteScalar()!, sql, false, parameters); + + public Task ExecuteScalarAsync(string sql, params object[] parameters) + => ExecuteScalarAsync(Connection, sql, parameters); + + private static Task ExecuteScalarAsync(DbConnection connection, string sql, IReadOnlyList? parameters = null) + => ExecuteAsync(connection, async command => (T)(await command.ExecuteScalarAsync())!, sql, false, parameters); + + public int ExecuteNonQuery(string sql, params object[] parameters) + => ExecuteNonQuery(Connection, sql, parameters); + + private static int ExecuteNonQuery(DbConnection connection, string sql, object[]? parameters = null) + => Execute(connection, command => command.ExecuteNonQuery(), sql, false, parameters); + + public Task ExecuteNonQueryAsync(string sql, params object[] parameters) + => ExecuteNonQueryAsync(Connection, sql, parameters); + + private static Task ExecuteNonQueryAsync(DbConnection connection, string sql, IReadOnlyList? parameters = null) + => ExecuteAsync(connection, command => command.ExecuteNonQueryAsync(), sql, false, parameters); + + public IEnumerable Query(string sql, params object[] parameters) + => Query(Connection, sql, parameters); + + private static IEnumerable Query(DbConnection connection, string sql, object[]? parameters = null) + => Execute( + connection, command => + { + using var dataReader = command.ExecuteReader(); + var results = Enumerable.Empty(); + while (dataReader.Read()) + { + results = results.Concat([dataReader.GetFieldValue(0)]); + } + + return results; + }, sql, false, parameters); + + public Task> QueryAsync(string sql, params object[] parameters) + => QueryAsync(Connection, sql, parameters); + + private static Task> QueryAsync(DbConnection connection, string sql, object[]? parameters = null) + => ExecuteAsync( + connection, async command => + { + using var dataReader = await command.ExecuteReaderAsync(); + var results = Enumerable.Empty(); + while (await dataReader.ReadAsync()) + { + results = results.Concat([await dataReader.GetFieldValueAsync(0)]); + } + + return results; + }, sql, false, parameters); + + private static T Execute( + DbConnection connection, Func execute, string sql, + bool useTransaction = false, object[]? parameters = null) + => new TestLibRedRetryingExecutionStrategy().Execute( + new + { + connection, + execute, + sql, + useTransaction, + parameters + }, + state => ExecuteCommand(state.connection, state.execute, state.sql, state.useTransaction, state.parameters)); + + private static T ExecuteCommand( + DbConnection connection, Func execute, string sql, bool useTransaction, object[]? parameters) + { + if (connection.State != ConnectionState.Closed) + { + connection.Close(); + } + + connection.Open(); + try + { + using var transaction = useTransaction ? connection.BeginTransaction() : null; + T result; + using (var command = CreateCommand(connection, sql, parameters)) + { + command.Transaction = transaction; + result = execute(command); + } + + transaction?.Commit(); + + return result; + } + finally + { + if (connection.State != ConnectionState.Closed) + { + connection.Close(); + } + } + } + + private static Task ExecuteAsync( + DbConnection connection, Func> executeAsync, string sql, + bool useTransaction = false, IReadOnlyList? parameters = null) + => new TestLibRedRetryingExecutionStrategy().ExecuteAsync( + new + { + connection, + executeAsync, + sql, + useTransaction, + parameters + }, + state => ExecuteCommandAsync(state.connection, state.executeAsync, state.sql, state.useTransaction, state.parameters)); + + private static async Task ExecuteCommandAsync( + DbConnection connection, Func> executeAsync, string sql, bool useTransaction, + IReadOnlyList? parameters) + { + if (connection.State != ConnectionState.Closed) + { + await connection.CloseAsync(); + } + + await connection.OpenAsync(); + try + { + using var transaction = useTransaction ? await connection.BeginTransactionAsync() : null; + T result; + using (var command = CreateCommand(connection, sql, parameters)) + { + result = await executeAsync(command); + } + + if (transaction != null) + { + await transaction.CommitAsync(); + } + + return result; + } + finally + { + if (connection.State != ConnectionState.Closed) + { + await connection.CloseAsync(); + } + } + } + + private static DbCommand CreateCommand( + DbConnection connection, string commandText, IReadOnlyList? parameters = null) + { + var command = (LibRedCommand)connection.CreateCommand(); + + command.CommandText = commandText; + command.CommandTimeout = CommandTimeout; + + if (parameters != null) + { + for (var i = 0; i < parameters.Count; i++) + { + var parameter = command.CreateParameter(); + parameter.ParameterName = "p" + i; + parameter.Value = parameters[i]; + + command.Parameters.Add(parameter); + } + } + + return command; + } + + public override async ValueTask DisposeAsync() + { + await base.DisposeAsync(); + + // Clean up the database using a local file, as it might get deleted later + + // Keep local file for debugging purposes. + // DeleteDatabase(); + } + + private static LibRedConnection CreateConnection(string name) + { + var connectionString = CreateConnectionString(name); + return new LibRedConnection(connectionString); + } + + public static string CreateConnectionString(string name) + { + var defaultConnectionString = TestEnvironment.DefaultConnection; + var dataAccessProviderFactory = LibRedFactory.GetDataAccessProviderFactory(); + var connectionStringBuilder = (LibRedConnectionStringBuilder)dataAccessProviderFactory.CreateConnectionStringBuilder()!; + + connectionStringBuilder.ConnectionString = defaultConnectionString; + connectionStringBuilder.DataSource = name; + + return connectionStringBuilder.ToString(); + } + + public override string NormalizeDelimitersInRawString(string sql) + => sql.Replace("[", "`").Replace("]", "`"); + } +} \ No newline at end of file diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedTestStoreFactory.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedTestStoreFactory.cs new file mode 100644 index 00000000..093a72fd --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/LibRedTestStoreFactory.cs @@ -0,0 +1,25 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class LibRedTestStoreFactory : RelationalTestStoreFactory + { + public static LibRedTestStoreFactory Instance { get; } = new(); + + protected LibRedTestStoreFactory() + { + } + + public override TestStore Create(string storeName) + => LibRedTestStore.Create(storeName); + + public override TestStore GetOrCreate(string storeName) + => LibRedTestStore.GetOrCreate(storeName); + + public override IServiceCollection AddProviderServices(IServiceCollection serviceCollection) + => serviceCollection.AddEntityFrameworkLibRed(); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/SqlExceptionFactory.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/SqlExceptionFactory.cs new file mode 100644 index 00000000..72c90f00 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/SqlExceptionFactory.cs @@ -0,0 +1,19 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Data.Common; +using LibRed.Data; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + /// + /// Builds the LibRed-native the tests use to simulate a transient + /// failure. LibRed doesn't raise OleDbException/OdbcException, so — unlike EFCore.Jet's + /// test factory — this stays entirely on LibRed's own exception type. + /// + public static class LibRedExceptionFactory + { + public static DbException CreateException(int number, Guid? connectionId = null) + => new LibRedException("Bang!", number); + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestEnvironment.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestEnvironment.cs new file mode 100644 index 00000000..a3a57a6e --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestEnvironment.cs @@ -0,0 +1,48 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Data; +using System; +using System.Data.Common; +using System.IO; +using Microsoft.Extensions.Configuration; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public static class TestEnvironment + { + public static IConfiguration Config { get; } = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("config.json", optional: true) + .AddJsonFile("config.test.json", optional: true) + .AddEnvironmentVariables() + .Build() + .GetSection("Test:LibRed"); + + public static string DefaultConnection { get; } = Environment.GetEnvironmentVariable("EFCoreLibRed_DefaultConnection") ?? + Config["DefaultConnection"] ?? + LibRedConnection.GetConnectionString("LibRed.accdb"); + + public static bool IsConfigured + { + get + { + var dataAccessProviderFactory = LibRedFactory.GetDataAccessProviderFactory(); + var connectionStringBuilder = (LibRedConnectionStringBuilder)dataAccessProviderFactory.CreateConnectionStringBuilder()!; + connectionStringBuilder.ConnectionString = DefaultConnection; + + return !string.IsNullOrEmpty(connectionStringBuilder.DataSource); + } + } + + public static DbProviderFactory DataAccessProviderFactory { get; } = LibRedFactory.GetDataAccessProviderFactory(); + + public static bool IsCI { get; } = Environment.GetEnvironmentVariable("PIPELINE_WORKSPACE") != null + || Environment.GetEnvironmentVariable("TEAMCITY_VERSION") != null; + + public static bool? GetFlag(string key) + => bool.TryParse(Config[key], out var flag) ? flag : null; + + public static int? GetInt(string key) + => int.TryParse(Config[key], out var value) ? value : null; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestLibRedConnection.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestLibRedConnection.cs new file mode 100644 index 00000000..2af7f64d --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestLibRedConnection.cs @@ -0,0 +1,63 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.Jet.Data; +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Threading; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class TestLibRedConnection(RelationalConnectionDependencies dependencies) : LibRedRelationalConnection(dependencies) + { + // The simulated failure is LibRed's native LibRedException carrying the transient error number, + // which LibRedRetryingExecutionStrategy recognises via its error-number set (no OleDb/Odbc dependency). + private readonly Func _createExceptionFunc = number => LibRedExceptionFactory.CreateException(number); + + public int ErrorNumber { get; set; } = -2; + public Queue OpenFailures { get; } = new(); + public int OpenCount { get; set; } + public Queue CommitFailures { get; } = new(); + public Queue ExecutionFailures { get; } = new(); + public int ExecutionCount { get; set; } + + public override bool Open(bool errorsExpected = false) + { + PreOpen(); + + return base.Open(errorsExpected); + } + + public override Task OpenAsync(CancellationToken cancellationToken, bool errorsExpected = false) + { + PreOpen(); + + return base.OpenAsync(cancellationToken, errorsExpected); + } + + private void PreOpen() + { + if (DbConnection.State == ConnectionState.Open) + { + return; + } + + OpenCount++; + if (OpenFailures.Count <= 0) + { + return; + } + + var fail = OpenFailures.Dequeue(); + + if (fail.HasValue) + { + throw _createExceptionFunc(ErrorNumber); + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestLibRedRetryingExecutionStrategy.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestLibRedRetryingExecutionStrategy.cs new file mode 100644 index 00000000..db089ba5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestLibRedRetryingExecutionStrategy.cs @@ -0,0 +1,75 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using LibRed.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class TestLibRedRetryingExecutionStrategy : LibRedRetryingExecutionStrategy + { + private const bool ErrorNumberDebugMode = false; + + // LibRed error numbers treated as transient by the tests (carried on LibRedException.Number). + private static readonly int[] _additionalErrorNumbers = + [ + -1, // Physical connection is not usable + -2, // Timeout + 1807, // Could not obtain exclusive lock on database 'model' + 42008, // Mirroring (Only when a database is deleted and another one is created in fast succession) + 42019 // CREATE DATABASE operation failed + ]; + + public TestLibRedRetryingExecutionStrategy() + : base( + new DbContext( + new DbContextOptionsBuilder() + .EnableServiceProviderCaching(false) + .UseLibRed(TestEnvironment.DefaultConnection, TestEnvironment.DataAccessProviderFactory).Options), + DefaultMaxRetryCount, DefaultMaxDelay, _additionalErrorNumbers) + { + } + + public TestLibRedRetryingExecutionStrategy(DbContext context) + : base(context, DefaultMaxRetryCount, DefaultMaxDelay, _additionalErrorNumbers) + { + } + + public TestLibRedRetryingExecutionStrategy(DbContext context, TimeSpan maxDelay) + : base(context, DefaultMaxRetryCount, maxDelay, _additionalErrorNumbers) + { + } + + public TestLibRedRetryingExecutionStrategy(ExecutionStrategyDependencies dependencies) + : base(dependencies, DefaultMaxRetryCount, DefaultMaxDelay, _additionalErrorNumbers) + { + } + + protected override bool ShouldRetryOn(Exception exception) + { + if (base.ShouldRetryOn(exception)) + { + return true; + } + +#pragma warning disable 162 + if (ErrorNumberDebugMode + && exception is LibRedException libRedException) + { + throw new InvalidOperationException( + $"Didn't retry on {libRedException.Number}{Environment.NewLine}{exception}", exception); + } +#pragma warning restore 162 + + return exception is InvalidOperationException invalidOperationException + && invalidOperationException.Message == "Internal .Net Framework Data Provider error 6."; + } + + public new virtual TimeSpan? GetNextDelay(Exception lastException) + { + ExceptionsEncountered.Add(lastException); + return base.GetNextDelay(lastException); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs new file mode 100644 index 00000000..2d8b4a98 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs @@ -0,0 +1,244 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class TestRelationalCommandBuilderFactory(RelationalCommandBuilderDependencies dependencies) + : IRelationalCommandBuilderFactory + { + public RelationalCommandBuilderDependencies Dependencies { get; } = dependencies; + + public virtual IRelationalCommandBuilder Create() + => new TestRelationalCommandBuilder(Dependencies); + + private class TestRelationalCommandBuilder(RelationalCommandBuilderDependencies dependencies) + : IRelationalCommandBuilder + { + private readonly List _parameters = []; + + public IndentedStringBuilder Instance { get; } = new(); + + public RelationalCommandBuilderDependencies Dependencies { get; } = dependencies; + + public IReadOnlyList Parameters => _parameters; + + public IRelationalCommandBuilder AddParameter(IRelationalParameter parameter) + { + _parameters.Add(parameter); + + return this; + } + + public IRelationalCommandBuilder RemoveParameterAt(int index) + { + _parameters.RemoveAt(index); + + return this; + } + + [Obsolete("Code trying to add parameter should add type mapped parameter using TypeMappingSource directly.")] + public IRelationalTypeMappingSource TypeMappingSource + => Dependencies.TypeMappingSource; + + public IRelationalCommand Build() + => new TestRelationalCommand( + Dependencies, + Instance.ToString(), + Instance.ToString(), + Parameters); + + public IRelationalCommandBuilder Append(string value, bool redact = false) + { + Instance.Append(value); + + return this; + } + + public IRelationalCommandBuilder Append(FormattableString value, bool redact = false) + { + Instance.Append(value); + + return this; + } + + public IRelationalCommandBuilder AppendLine() + { + Instance.AppendLine(); + + return this; + } + + public IRelationalCommandBuilder IncrementIndent() + { + Instance.IncrementIndent(); + + return this; + } + + public IRelationalCommandBuilder DecrementIndent() + { + Instance.DecrementIndent(); + + return this; + } + + public int CommandTextLength => Instance.Length; + } + + private class TestRelationalCommand( + RelationalCommandBuilderDependencies dependencies, + string commandText, + string logCommandText, + IReadOnlyList parameters) : IRelationalCommand + { + private readonly RelationalCommand _realRelationalCommand = new(dependencies, commandText,logCommandText, parameters); + // See TestLibRedConnection: the simulated execution failure is LibRed's native LibRedException. + private readonly Func _createExceptionFunc = number => LibRedExceptionFactory.CreateException(number); + + public string CommandText => _realRelationalCommand.CommandText; + public string LogCommandText + => _realRelationalCommand.LogCommandText; + + public IReadOnlyList Parameters => _realRelationalCommand.Parameters; + + public int ExecuteNonQuery(RelationalCommandParameterObject parameterObject) + { + var connection = parameterObject.Connection; + var errorNumber = PreExecution(connection); + + var result = _realRelationalCommand.ExecuteNonQuery(parameterObject); + if (errorNumber.HasValue) + { + connection.DbConnection.Close(); + throw _createExceptionFunc(errorNumber.Value); + } + + return result; + } + + public Task ExecuteNonQueryAsync( + RelationalCommandParameterObject parameterObject, + CancellationToken cancellationToken = new()) + { + var connection = parameterObject.Connection; + var errorNumber = PreExecution(connection); + + var result = _realRelationalCommand.ExecuteNonQueryAsync(parameterObject, cancellationToken); + if (errorNumber.HasValue) + { + connection.DbConnection.Close(); + throw _createExceptionFunc(errorNumber.Value); + } + + return result; + } + + public object? ExecuteScalar(RelationalCommandParameterObject parameterObject) + { + var connection = parameterObject.Connection; + var errorNumber = PreExecution(connection); + + var result = _realRelationalCommand.ExecuteScalar(parameterObject); + if (errorNumber.HasValue) + { + connection.DbConnection.Close(); + throw _createExceptionFunc(errorNumber.Value); + } + + return result; + } + + public async Task ExecuteScalarAsync( + RelationalCommandParameterObject parameterObject, + CancellationToken cancellationToken = new()) + { + var connection = parameterObject.Connection; + var errorNumber = PreExecution(connection); + + var result = await _realRelationalCommand.ExecuteScalarAsync(parameterObject, cancellationToken); + if (errorNumber.HasValue) + { + connection.DbConnection.Close(); + throw _createExceptionFunc(errorNumber.Value); + } + + return result; + } + + public RelationalDataReader ExecuteReader(RelationalCommandParameterObject parameterObject) + { + var connection = parameterObject.Connection; + var errorNumber = PreExecution(connection); + + var result = _realRelationalCommand.ExecuteReader(parameterObject); + if (errorNumber.HasValue) + { + connection.DbConnection.Close(); + result.Dispose(); // Normally, in non-test case, reader is disposed by using in caller code + throw _createExceptionFunc(errorNumber.Value); + } + + return result; + } + + public async Task ExecuteReaderAsync( + RelationalCommandParameterObject parameterObject, + CancellationToken cancellationToken = new()) + { + var connection = parameterObject.Connection; + var errorNumber = PreExecution(connection); + + var result = await _realRelationalCommand.ExecuteReaderAsync(parameterObject, cancellationToken); + if (errorNumber.HasValue) + { + connection.DbConnection.Close(); + result.Dispose(); // Normally, in non-test case, reader is disposed by using in caller code + throw _createExceptionFunc(errorNumber.Value); + } + + return result; + } + + public DbCommand CreateDbCommand( + RelationalCommandParameterObject parameterObject, + Guid commandId, + DbCommandMethod commandMethod) + => _realRelationalCommand.CreateDbCommand(parameterObject, commandId, commandMethod); + + public void PopulateFrom(IRelationalCommandTemplate commandTemplate) + => _realRelationalCommand.PopulateFrom(commandTemplate); + + private int? PreExecution(IRelationalConnection connection) + { + int? errorNumber = null; + var testConnection = (TestLibRedConnection)connection; + + testConnection.ExecutionCount++; + if (testConnection.ExecutionFailures.Count > 0) + { + var fail = testConnection.ExecutionFailures.Dequeue(); + if (fail.HasValue) + { + if (fail.Value) + { + testConnection.DbConnection.Close(); + throw _createExceptionFunc(testConnection.ErrorNumber); + } + + errorNumber = testConnection.ErrorNumber; + } + } + + return errorNumber; + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestRelationalTransaction.cs b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestRelationalTransaction.cs new file mode 100644 index 00000000..69c5b4d5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TestUtilities/TestRelationalTransaction.cs @@ -0,0 +1,87 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Data.Common; +using System.Threading.Tasks; +using System.Threading; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities +{ + public class TestRelationalTransactionFactory(RelationalTransactionFactoryDependencies dependencies) + : IRelationalTransactionFactory + { + protected virtual RelationalTransactionFactoryDependencies Dependencies { get; } = dependencies; + + public RelationalTransaction Create( + IRelationalConnection connection, + DbTransaction transaction, + Guid transactionId, + IDiagnosticsLogger logger, + bool transactionOwned) + => new TestRelationalTransaction(connection, transaction, logger, transactionOwned, Dependencies.SqlGenerationHelper); + } + + public class TestRelationalTransaction( + IRelationalConnection connection, + DbTransaction transaction, + IDiagnosticsLogger logger, + bool transactionOwned, + ISqlGenerationHelper sqlGenerationHelper) + : RelationalTransaction(connection, transaction, new Guid(), logger, transactionOwned, sqlGenerationHelper) + { + private readonly TestLibRedConnection _testConnection = (TestLibRedConnection)connection; + // See TestLibRedConnection: the simulated commit failure is LibRed's native LibRedException. + private readonly Func _createExceptionFunc = LibRedExceptionFactory.CreateException; + + public override void Commit() + { + if (_testConnection.CommitFailures.Count > 0) + { + var fail = _testConnection.CommitFailures.Dequeue(); + if (fail.HasValue) + { + if (fail.Value) + { + this.GetDbTransaction().Rollback(); + } + else + { + this.GetDbTransaction().Commit(); + } + + _testConnection.DbConnection.Close(); + throw _createExceptionFunc(_testConnection.ErrorNumber, _testConnection.ConnectionId); + } + } + + base.Commit(); + } + + public override async Task CommitAsync(CancellationToken cancellationToken = default) + { + if (_testConnection.CommitFailures.Count > 0) + { + var fail = _testConnection.CommitFailures.Dequeue(); + if (fail.HasValue) + { + if (fail.Value) + { + await this.GetDbTransaction().RollbackAsync(cancellationToken); + } + else + { + await this.GetDbTransaction().CommitAsync(cancellationToken); + } + + await _testConnection.DbConnection.CloseAsync(); + throw _createExceptionFunc(_testConnection.ErrorNumber, _testConnection.ConnectionId); + } + } + + await base.CommitAsync(cancellationToken); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TpcManyToManyTrackingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/TpcManyToManyTrackingLibRedTest.cs new file mode 100644 index 00000000..c70dfff5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TpcManyToManyTrackingLibRedTest.cs @@ -0,0 +1,39 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestModels.ManyToManyModel; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class TpcManyToManyTrackingLibRedTest(TpcManyToManyTrackingLibRedTest.TpcManyToManyTrackingLibRedFixture fixture) + : ManyToManyTrackingLibRedTestBase(fixture) +{ + public class TpcManyToManyTrackingLibRedFixture : ManyToManyTrackingLibRedFixtureBase + { + protected override string StoreName + => "TpcManyToManyTrackingLibRedTest"; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + => base.AddOptions(builder).ConfigureWarnings( + w => w.Log(RelationalEventId.ForeignKeyTpcPrincipalWarning)); + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().UseTpcMappingStrategy(); + modelBuilder.Entity().ToTable("Roots"); + modelBuilder.Entity().ToTable("Branches"); + modelBuilder.Entity().ToTable("Leaves"); + modelBuilder.Entity().ToTable("Branch2s"); + modelBuilder.Entity().ToTable("Leaf2s"); + + modelBuilder.Entity().UseTpcMappingStrategy(); + modelBuilder.Entity().ToTable("UnidirectionalRoots"); + modelBuilder.Entity().ToTable("UnidirectionalBranches"); + modelBuilder.Entity().ToTable("UnidirectionalLeaves"); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TptManyToManyTrackingLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/TptManyToManyTrackingLibRedTest.cs new file mode 100644 index 00000000..20018be0 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TptManyToManyTrackingLibRedTest.cs @@ -0,0 +1,32 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestModels.ManyToManyModel; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class TptManyToManyTrackingLibRedTest(TptManyToManyTrackingLibRedTest.TptManyToManyTrackingLibRedFixture fixture) + : ManyToManyTrackingLibRedTestBase(fixture) +{ + public class TptManyToManyTrackingLibRedFixture : ManyToManyTrackingLibRedFixtureBase + { + protected override string StoreName + => "TptManyToManyTrackingLibRedTest"; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().ToTable("Roots"); + modelBuilder.Entity().ToTable("Branches"); + modelBuilder.Entity().ToTable("Leaves"); + modelBuilder.Entity().ToTable("Branch2s"); + modelBuilder.Entity().ToTable("Leaf2s"); + + modelBuilder.Entity().ToTable("UnidirectionalRoots"); + modelBuilder.Entity().ToTable("UnidirectionalBranches"); + modelBuilder.Entity().ToTable("UnidirectionalLeaves"); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TransactionInterceptionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/TransactionInterceptionLibRedTest.cs new file mode 100644 index 00000000..3c26ab51 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TransactionInterceptionLibRedTest.cs @@ -0,0 +1,72 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public abstract class TransactionInterceptionLibRedTestBase( + TransactionInterceptionLibRedTestBase.InterceptionLibRedFixtureBase fixture) + : TransactionInterceptionTestBase(fixture) + { + [ConditionalTheory(Skip = "LibRed does not support savepoints")] + [InlineData(true)] + [InlineData(false)] + public override Task Intercept_CreateSavepoint(bool async) + { + return base.Intercept_CreateSavepoint(async); + } + [ConditionalTheory(Skip = "LibRed does not support savepoints")] + [InlineData(true)] + [InlineData(false)] + public override Task Intercept_ReleaseSavepoint(bool async) + { + return base.Intercept_ReleaseSavepoint(async); + } + [ConditionalTheory(Skip = "LibRed does not support savepoints")] + [InlineData(true)] + [InlineData(false)] + public override Task Intercept_RollbackToSavepoint(bool async) + { + return base.Intercept_RollbackToSavepoint(async); + } + + public abstract class InterceptionLibRedFixtureBase : InterceptionFixtureBase + { + protected override string StoreName => "TransactionInterception"; + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + protected override IServiceCollection InjectInterceptors( + IServiceCollection serviceCollection, + IEnumerable injectedInterceptors) + => base.InjectInterceptors(serviceCollection.AddEntityFrameworkLibRed(), injectedInterceptors); + } + + public class TransactionInterceptionLibRedTest(TransactionInterceptionLibRedTest.InterceptionLibRedFixture fixture) + : TransactionInterceptionLibRedTestBase(fixture), + IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override bool ShouldSubscribeToDiagnosticListener => false; + } + } + + public class TransactionInterceptionWithDiagnosticsLibRedTest( + TransactionInterceptionWithDiagnosticsLibRedTest.InterceptionLibRedFixture fixture) + : TransactionInterceptionLibRedTestBase(fixture), + IClassFixture + { + public class InterceptionLibRedFixture : InterceptionLibRedFixtureBase + { + protected override bool ShouldSubscribeToDiagnosticListener => true; + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TransactionLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/TransactionLibRedTest.cs new file mode 100644 index 00000000..bea5a424 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TransactionLibRedTest.cs @@ -0,0 +1,52 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using EntityFrameworkCore.LibRed.Infrastructure; +using EntityFrameworkCore.LibRed.Storage.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class TransactionLibRedTest(TransactionLibRedTest.TransactionLibRedFixture fixture) + : TransactionTestBase(fixture) + { + protected override bool SnapshotSupported => false; + protected override bool AmbientTransactionsSupported => false; + protected override bool DirtyReadsOccur => false; + + protected override DbContext CreateContextWithConnectionString() + { + var options = Fixture.AddOptions( + new DbContextOptionsBuilder() + .UseLibRed( + TestStore.ConnectionString, + TestEnvironment.DataAccessProviderFactory, + b => b.ApplyConfiguration().UseShortTextForSystemString().ExecutionStrategy(c => new LibRedExecutionStrategy(c)))) + .UseInternalServiceProvider(Fixture.ServiceProvider); + + return new DbContext(options.Options); + } + + public class TransactionLibRedFixture : TransactionFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + new LibRedDbContextOptionsBuilder( + base.AddOptions(builder)) + .ExecutionStrategy(c => new LibRedExecutionStrategy(c)); + // LibRed doesn't support ambient transactions (nor does SQLite). The provider leaves EF's + // default (Throw) so real users still get it; the enlisted-transaction conformance test needs + // the warning logged instead so it can read it from the log, so downgrade it here — test-side — + // exactly as EFCore.Sqlite's TransactionSqliteTest fixture does. + builder.ConfigureWarnings(w => w.Log(RelationalEventId.AmbientTransactionWarning)); + return builder; + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/TwoDatabasesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/TwoDatabasesLibRedTest.cs new file mode 100644 index 00000000..62cc0db1 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/TwoDatabasesLibRedTest.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; +#nullable disable +public class TwoDatabasesLibRedTest(LibRedFixture fixture) : TwoDatabasesTestBase(fixture), IClassFixture +{ + protected new LibRedFixture Fixture + => (LibRedFixture)base.Fixture; + + protected override DbContextOptionsBuilder CreateTestOptions( + DbContextOptionsBuilder optionsBuilder, + bool withConnectionString = false, + bool withNullConnectionString = false) + => withConnectionString + ? withNullConnectionString + ? optionsBuilder.UseLibRed((string)null) + : optionsBuilder.UseLibRed(DummyConnectionString) + : optionsBuilder.UseLibRed(LibRedTestStore.CreateConnectionString("TwoDatabasesLibRedTest"), TestEnvironment.DataAccessProviderFactory); + + protected override TwoDatabasesWithDataContext CreateBackingContext(string databaseName) + => new(Fixture.CreateOptions(LibRedTestStore.Create(databaseName))); + + protected override string DummyConnectionString + => "Database=DoesNotExist"; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Update/ComplexCollectionJsonUpdateLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Update/ComplexCollectionJsonUpdateLibRedTest.cs new file mode 100644 index 00000000..442bb663 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Update/ComplexCollectionJsonUpdateLibRedTest.cs @@ -0,0 +1,300 @@ +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.Update; +using System.Threading.Tasks; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Update; + +public class ComplexCollectionJsonUpdateLibRedTest : ComplexCollectionJsonUpdateTestBase< + ComplexCollectionJsonUpdateLibRedTest.ComplexCollectionJsonUpdateLibRedFixture> +{ + public ComplexCollectionJsonUpdateLibRedTest(ComplexCollectionJsonUpdateLibRedFixture fixture) + : base(fixture) + => ClearLog(); + + public override async Task Add_element_to_complex_collection_mapped_to_json() + { + await base.Add_element_to_complex_collection_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"First Contact","PhoneNumbers":["555-1234","555-5678"]},{"Name":"Second Contact","PhoneNumbers":["555-9876","555-5432"]},{"Name":"New Contact","PhoneNumbers":["555-0000"]}]' (Nullable = false) (Size = 181) +@p1='1' + +UPDATE `Companies` SET `Contacts` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Remove_element_from_complex_collection_mapped_to_json() + { + await base.Remove_element_from_complex_collection_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"Second Contact","PhoneNumbers":["555-9876","555-5432"]}]' (Nullable = false) (Size = 66) +@p1='1' + +UPDATE `Companies` SET `Contacts` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Modify_element_in_complex_collection_mapped_to_json() + { + await base.Modify_element_in_complex_collection_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"First Contact - Modified","PhoneNumbers":["555-1234","555-5678"]},{"Name":"Second Contact","PhoneNumbers":["555-9876","555-5432"]}]' (Nullable = false) (Size = 141) +@p1='1' + +UPDATE `Companies` SET `Contacts` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Move_elements_in_complex_collection_mapped_to_json() + { + await base.Move_elements_in_complex_collection_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"Second Contact","PhoneNumbers":["555-9876","555-5432"]},{"Name":"First Contact","PhoneNumbers":["555-1234","555-5678"]}]' (Nullable = false) (Size = 130) +@p1='1' + +UPDATE `Companies` SET `Contacts` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Change_complex_collection_mapped_to_json_to_null_and_to_empty() + { + await base.Change_complex_collection_mapped_to_json_to_null_and_to_empty(); + + AssertSql( + """ +@p0='[]' (Nullable = false) (Size = 2) +@p1='1' + +UPDATE `Companies` SET `Contacts` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +""", + // + """ +@p0=NULL (Nullable = false) +@p1='1' + +UPDATE `Companies` SET `Contacts` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Complex_collection_with_nested_complex_type_mapped_to_json() + { + await base.Complex_collection_with_nested_complex_type_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"John Doe","PhoneNumbers":["555-1234","555-5678"],"Address":{"City":"Seattle","Country":"USA","PostalCode":"98101","Street":"123 Main St"}},{"Name":"Jane Smith","PhoneNumbers":["555-9876"],"Address":{"City":"Portland","Country":"USA","PostalCode":"97201","Street":"456 Oak Ave"}}]' (Nullable = false) (Size = 289) +@p1='1' + +UPDATE `Companies` SET `Employees` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Modify_multiple_complex_properties_mapped_to_json() + { + await base.Modify_multiple_complex_properties_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"Contact 1","PhoneNumbers":["555-1111"]}]' (Nullable = false) (Size = 50) +@p1='{"Budget":50000.00,"Name":"Department A"}' (Nullable = false) (Size = 41) +@p2='1' + +UPDATE `Companies` SET `Contacts` = @p0, `Department` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Clear_complex_collection_mapped_to_json() + { + await base.Clear_complex_collection_mapped_to_json(); + + AssertSql( + """ +@p0='[]' (Nullable = false) (Size = 2) +@p1='1' + +UPDATE `Companies` SET `Contacts` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Replace_entire_complex_collection_mapped_to_json() + { + await base.Replace_entire_complex_collection_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"Replacement Contact 1","PhoneNumbers":["999-1111"]},{"Name":"Replacement Contact 2","PhoneNumbers":["999-2222","999-3333"]}]' (Nullable = false) (Size = 134) +@p1='1' + +UPDATE `Companies` SET `Contacts` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Add_element_to_nested_complex_collection_mapped_to_json() + { + await base.Add_element_to_nested_complex_collection_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"Initial Employee","PhoneNumbers":["555-0001","555-9999"],"Address":{"City":"Initial City","Country":"USA","PostalCode":"00001","Street":"100 First St"}}]' (Nullable = false) (Size = 163) +@p1='1' + +UPDATE `Companies` SET `Employees` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Modify_nested_complex_property_in_complex_collection_mapped_to_json() + { + await base.Modify_nested_complex_property_in_complex_collection_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"Initial Employee","PhoneNumbers":["555-0001"],"Address":{"City":"Modified City","Country":"USA","PostalCode":"99999","Street":"100 First St"}}]' (Nullable = false) (Size = 153) +@p1='1' + +UPDATE `Companies` SET `Employees` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Set_complex_collection_to_null_mapped_to_json() + { + await base.Set_complex_collection_to_null_mapped_to_json(); + + AssertSql( + """ +@p0=NULL (Nullable = false) +@p1='1' + +UPDATE `Companies` SET `Employees` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Set_null_complex_collection_to_non_empty_mapped_to_json() + { + await base.Set_null_complex_collection_to_non_empty_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"New Employee","PhoneNumbers":["555-1111"],"Address":{"City":"New City","Country":"USA","PostalCode":"12345","Street":"123 New St"}}]' (Nullable = false) (Size = 142) +@p1='1' + +UPDATE `Companies` SET `Employees` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Replace_complex_collection_element_mapped_to_json() + { + await base.Replace_complex_collection_element_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"Replacement Employee","PhoneNumbers":["555-7777","555-8888"],"Address":{"City":"Replace City","Country":"Canada","PostalCode":"54321","Street":"789 Replace St"}}]' (Nullable = false) (Size = 172) +@p1='1' + +UPDATE `Companies` SET `Employees` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Complex_collection_with_empty_nested_collections_mapped_to_json() + { + await base.Complex_collection_with_empty_nested_collections_mapped_to_json(); + + AssertSql( + """ +@p0='[{"Name":"Initial Employee","PhoneNumbers":["555-0001"],"Address":{"City":"Initial City","Country":"USA","PostalCode":"00001","Street":"100 First St"}},{"Name":"Employee No Phone","PhoneNumbers":[],"Address":{"City":"Quiet City","Country":"USA","PostalCode":"00000","Street":"456 No Phone St"}}]' (Nullable = false) (Size = 295) +@p1='1' + +UPDATE `Companies` SET `Employees` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Set_complex_property_mapped_to_json_to_null() + { + await base.Set_complex_property_mapped_to_json_to_null(); + + AssertSql( + """ +@p0=NULL (Nullable = false) +@p1='1' + +UPDATE `Companies` SET `Department` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Set_null_complex_property_to_non_null_mapped_to_json() + { + await base.Set_null_complex_property_to_non_null_mapped_to_json(); + + AssertSql( + """ +@p0='{"Budget":25000.00,"Name":"New Department"}' (Nullable = false) (Size = 43) +@p1='1' + +UPDATE `Companies` SET `Department` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Replace_complex_property_mapped_to_json() + { + await base.Replace_complex_property_mapped_to_json(); + + AssertSql( + """ +@p0='{"Budget":99999.99,"Name":"Replacement Department"}' (Nullable = false) (Size = 51) +@p1='1' + +UPDATE `Companies` SET `Department` = @p0 +WHERE `Id` = @p1; +SELECT @@ROWCOUNT; +"""); + } + + public class ComplexCollectionJsonUpdateLibRedFixture : ComplexCollectionJsonUpdateFixtureBase + { + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Update/Issue29502.sql b/test/EFCore.LibRed.FunctionalTests/Update/Issue29502.sql new file mode 100644 index 00000000..beb620f4 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Update/Issue29502.sql @@ -0,0 +1,370 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[Users]( + [Id] [nvarchar](450) NOT NULL, + [AccessFailedCount] [int] NOT NULL, + [ConcurrencyStamp] [nvarchar](max) NULL, + [Email] [nvarchar](256) NULL, + [EmailConfirmed] [bit] NOT NULL, + [LockoutEnabled] [bit] NOT NULL, + [LockoutEnd] [datetimeoffset](7) NULL, + [NormalizedEmail] [nvarchar](256) NULL, + [NormalizedUserName] [nvarchar](256) NULL, + [PasswordHash] [nvarchar](max) NULL, + [PhoneNumber] [nvarchar](max) NULL, + [PhoneNumberConfirmed] [bit] NOT NULL, + [SecurityStamp] [nvarchar](max) NULL, + [TwoFactorEnabled] [bit] NOT NULL, + [UserName] [nvarchar](256) NULL, + [TimeCreatedUtc] [datetime2](7) NOT NULL, + CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([Id] ASC) + WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'00b18a32-b58e-417a-9cda-41f14c6a9a47', 0, N'1a8ba451-6b2b-4f68-afc3-386699afe5f6', N'feedback+201021-angelfish-aardvark-997@app.local', 0, 1, NULL, N'FEEDBACK+201021-ANGELFISH-AARDVARK-997@app.local', N'FEEDBACK+201021-ANGELFISH-AARDVARK-997@app.local', N'AQAAAAEAACcQAAAAEOTMNQ0ZoqnG89mo0EM/3CZuRNtEK8cRw6qaR59QXwwHQ1Q0DJp2b22yzvo5IXYw6A==', NULL, 0, N'Q3MSGJJGYVH7X6XD7CPJDI6KXOGHD2DR', 0, N'feedback+201021-angelfish-aardvark-997@app.local', CAST(N'2020-10-21T15:16:12.4894619' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'00d3867d-eff2-47c7-bd65-41e8eceb075d', 0, N'80b0a8cb-4959-4896-9398-ed4658c67a21', N'feedback+211103-bobcat-anaconda-113@app.local', 0, 1, NULL, N'FEEDBACK+211103-BOBCAT-ANACONDA-113@app.local', N'FEEDBACK+211103-BOBCAT-ANACONDA-113@app.local', N'AQAAAAEAACcQAAAAEEB2A94GxOfxO9VyDLNPi5oWnhKj/WqzbHK3yd46ccpyrtsKMGnXIvSb+y5Yvxe4rA==', NULL, 0, N'KL4WZMVUXGJYO4XNUVXYXXUYTWM2WZAQ', 0, N'feedback+211103-bobcat-anaconda-113@app.local', CAST(N'2021-11-03T16:29:53.7933263' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'032b618a-56af-44bb-9464-ce80ca534c02', 0, N'92c2fa0c-bb68-4a03-8340-834034c464fa', N'feedback+211103-antelope-barnacle-725@app.local', 0, 1, NULL, N'FEEDBACK+211103-ANTELOPE-BARNACLE-725@app.local', N'FEEDBACK+211103-ANTELOPE-BARNACLE-725@app.local', N'AQAAAAEAACcQAAAAEB3QKIJYOGktvXCXDjklbu8hmII9C0HF0TPBjKmR5sezuc4KScjLZEf4q9stO0whEw==', NULL, 0, N'QRWVHTBPMJJVBA2R3TVCT63HPX7YUJKE', 0, N'feedback+211103-antelope-barnacle-725@app.local', CAST(N'2021-11-03T16:29:51.6487702' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'0339ff86-b7d4-4484-943b-9250390bfe63', 0, N'ba380044-bc90-45b1-85b1-0ec8144288ca', N'feedback+201019-baboon-anemone-318@app.local', 0, 1, NULL, N'FEEDBACK+201019-BABOON-ANEMONE-318@app.local', N'FEEDBACK+201019-BABOON-ANEMONE-318@app.local', N'AQAAAAEAACcQAAAAEHQzPLlUYRhCVfWfFAMjeoevn67FU1d51GvAaZEUBvwQfHISIWZBbfOp/SkZ9IPabQ==', NULL, 0, N'ZSB2LWKW3YLZZ3JMI77S57H7TJK4MB23', 0, N'feedback+201019-baboon-anemone-318@app.local', CAST(N'2020-10-19T13:09:13.7854489' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'03a860a0-cf9f-4cf5-9a23-afaacbaca048', 0, N'd1b1f851-e9c5-45b6-9442-e5c037a9fa90', N'feedback+211103-antelope-bandicoot-167@app.local', 0, 1, NULL, N'FEEDBACK+211103-ANTELOPE-BANDICOOT-167@app.local', N'FEEDBACK+211103-ANTELOPE-BANDICOOT-167@app.local', N'AQAAAAEAACcQAAAAEGZDBIpeKpculxIaboUeIwqAoy2ZY75oQoGl4taSfRmWAW3B2Ndv6JLvpklB/6iuAw==', NULL, 0, N'4WMVKUYHFCPR3G4CO2BLXKRML2GK3DOW', 0, N'feedback+211103-antelope-bandicoot-167@app.local', CAST(N'2021-11-03T16:29:52.2192392' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'085e10b6-54f1-4ae1-aec6-ce2350aad9fc', 0, N'a83aea9c-d899-42b1-8fd0-c7f9e7b02f65', N'feedback+211104-anaconda-alpaca-517@app.local', 0, 1, NULL, N'FEEDBACK+211104-ANACONDA-ALPACA-517@app.local', N'FEEDBACK+211104-ANACONDA-ALPACA-517@app.local', N'AQAAAAEAACcQAAAAEJvgqKMM2wLBoZi0JKjeAzQlkhY/R+k9XWp9eJQhP+iDrxaNHfrBZIvFtKhkHrQzOQ==', NULL, 0, N'SV74QXTT62VVTSMNDJCTGRXMTFDUS3ZE', 0, N'feedback+211104-anaconda-alpaca-517@app.local', CAST(N'2021-11-04T15:56:10.7344621' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'0927304a-371e-4e6f-a963-04c1a0d165f5', 0, N'38c504ab-794f-4c12-98b2-24142a26b003', N'feedback+201021-aardwolf-aardwolf-511@app.local', 0, 1, NULL, N'FEEDBACK+201021-AARDWOLF-AARDWOLF-511@app.local', N'FEEDBACK+201021-AARDWOLF-AARDWOLF-511@app.local', N'AQAAAAEAACcQAAAAENnlGH2gE5ZdrqCnp5tOvL8eyBRko3PsLir9cPVnQ9/h03qFyU/ybF1UwbjA9FEqAw==', NULL, 0, N'BBBRXDFUFYOCT6IZLWDMUKM3AMNR4MJK', 0, N'feedback+201021-aardwolf-aardwolf-511@app.local', CAST(N'2020-10-21T15:16:13.2721250' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'0a7576aa-6daa-45e7-a514-8ae807df97bb', 0, N'8e9e58fc-58f2-4dce-b99d-bd711e4f21ed', N'feedback+210714-anaconda-aardwolf-713@app.local', 0, 1, NULL, N'FEEDBACK+210714-ANACONDA-AARDWOLF-713@app.local', N'FEEDBACK+210714-ANACONDA-AARDWOLF-713@app.local', N'AQAAAAEAACcQAAAAEDHNnfxFtZiqhQdrvNV7V022Am/xkeP5Tu0uEq2u1v2oRzlUxRc2SmdE0rP4QRtVug==', NULL, 0, N'3AH5KJFYEIZQ2P4CR3TVOV4RP3YP3YOJ', 0, N'feedback+210714-anaconda-aardwolf-713@app.local', CAST(N'2021-07-14T18:21:57.3447937' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'0a94d663-578d-46c1-8d3b-db322232afd1', 0, N'6b97797a-f7bd-4979-a274-17b534c33098', N'feedback+211104-butterfly-buffalo-256@app.local', 0, 1, NULL, N'FEEDBACK+211104-BUTTERFLY-BUFFALO-256@app.local', N'FEEDBACK+211104-BUTTERFLY-BUFFALO-256@app.local', N'AQAAAAEAACcQAAAAEJLz09qtUTo1U0w8cMScyOCOtkH2H5EngrGv1B8S3LCdNh1HYAOOg8rlaN9UKhT+rQ==', NULL, 0, N'HVZNK47OO252J6FQKIPLCISZWFEAYPEV', 0, N'feedback+211104-butterfly-buffalo-256@app.local', CAST(N'2021-11-04T15:56:10.7779181' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'0aa082d5-9287-4254-97c2-4f246809ca97', 0, N'c8dca94f-4b3d-4285-b2fd-cdc82fe2134e', N'feedback+210901-bird-buffalo-201@app.local', 0, 1, NULL, N'FEEDBACK+210901-BIRD-BUFFALO-201@app.local', N'FEEDBACK+210901-BIRD-BUFFALO-201@app.local', N'AQAAAAEAACcQAAAAEHvlGtxctEw7Y+9iZIcWF1TLCrsud1uZQQyxE8RlkVS62ALtpkUFpLEPgiiauIC99Q==', NULL, 0, N'6KPJB3G3NAZPCT7IDECOYC4TSVSLZBZC', 0, N'feedback+210901-bird-buffalo-201@app.local', CAST(N'2021-09-01T14:48:48.4288826' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'0b63234d-3705-42b2-a0be-df542784ba45', 0, N'69b7c171-3dab-4983-a092-12ec334ceaf9', N'feedback+201020-anaconda-bee-523@app.local', 0, 1, NULL, N'FEEDBACK+201020-ANACONDA-BEE-523@app.local', N'FEEDBACK+201020-ANACONDA-BEE-523@app.local', N'AQAAAAEAACcQAAAAEFkEcXF/7rHKa7Oa2Y1c5pp/VVwNulr9mrT66ej7E9ZKx6TtDJYVSz2NK8rkE1bPfg==', NULL, 0, N'N6UOB3MQYWY3XKZTZXI77ZEBE4ZIYVG2', 0, N'feedback+201020-anaconda-bee-523@app.local', CAST(N'2020-10-20T19:17:01.3345473' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'0e5513ad-2a32-4874-b8b8-d2a5c29a80f8', 0, N'b37fc2ee-c2a7-4ead-bbba-552791dfbd2f', N'feedback+211029-anglerfish-ape-212@app.local', 0, 1, NULL, N'FEEDBACK+211029-ANGLERFISH-APE-212@app.local', N'FEEDBACK+211029-ANGLERFISH-APE-212@app.local', N'AQAAAAEAACcQAAAAEMjOKgEPBKUq/hwkPU5pthcCOucbJbKIq89LmyC522p16soPkrzNO1X3wYTVfiBwHg==', NULL, 0, N'3KQDIREKAM7QOX3YRL3QTYK6INTPNAIF', 0, N'feedback+211029-anglerfish-ape-212@app.local', CAST(N'2021-10-29T15:31:20.9570093' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'0ff26c4f-8671-4786-97ee-5ac15a6e27ca', 0, N'81ff9f0d-b18b-40f1-848d-c37922e18002', N'feedback+211029-alligator-albatross-230@app.local', 0, 1, NULL, N'FEEDBACK+211029-ALLIGATOR-ALBATROSS-230@app.local', N'FEEDBACK+211029-ALLIGATOR-ALBATROSS-230@app.local', N'AQAAAAEAACcQAAAAEPT2irnLP/iHQd2NoHL/e5Azudh/R1N4/h+l9uI42xVNMqgGC5Dpb/5z0ouuouspxw==', NULL, 0, N'BEALW6LLUDGLCYYWIQYFJFN6QABPRF46', 0, N'feedback+211029-alligator-albatross-230@app.local', CAST(N'2021-10-29T15:31:20.9163544' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1057fe5d-5ed9-4e97-a6c3-a6ca73a32d7f', 0, N'5800ea7a-b546-46d3-ac36-493e9fb9dcbb', N'feedback+201021-alligator-ape-759@app.local', 0, 1, NULL, N'FEEDBACK+201021-ALLIGATOR-APE-759@app.local', N'FEEDBACK+201021-ALLIGATOR-APE-759@app.local', N'AQAAAAEAACcQAAAAEByadj2fEoGyRv4j5cq2VlCvI1ekDnFUEPouI/2YyofhRlKUszlHQzGFDxxYQF8P9w==', NULL, 0, N'ZT7GS345EHPEAIILFHXXTKA4RL2U26MZ', 0, N'feedback+201021-alligator-ape-759@app.local', CAST(N'2020-10-21T15:16:12.5358719' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'11ee72ea-81d4-4a53-87b3-f43827cb7d9c', 0, N'938b7cb3-28a6-4f7e-8905-ec6fee29732c', N'feedback+210901-barracuda-bee-965@app.local', 0, 1, NULL, N'FEEDBACK+210901-BARRACUDA-BEE-965@app.local', N'FEEDBACK+210901-BARRACUDA-BEE-965@app.local', N'AQAAAAEAACcQAAAAELczN3MVx5OyXyJu0udTJLhjyhvE94ybyFJE3o+jOUDZCNovQdKR0hCy/OCXOH14vA==', NULL, 0, N'44CIXD3ANQWX7HPHAMWWRDG2S5BIR4A6', 0, N'feedback+210901-barracuda-bee-965@app.local', CAST(N'2021-09-01T14:48:47.8476456' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'130e71fc-a1af-4ec4-889a-b9075e2c4451', 0, N'5d54bc1a-575b-40d6-bdd0-d3cf70a31c90', N'feedback+201021-anteater-barnacle-43@app.local', 0, 1, NULL, N'FEEDBACK+201021-ANTEATER-BARNACLE-43@app.local', N'FEEDBACK+201021-ANTEATER-BARNACLE-43@app.local', N'AQAAAAEAACcQAAAAEIAQGNrNMJBadc5Zy22fSWKdM1vfmWZ/CakquuF2LjAMq/TFbzFm7xPErPDRH6VKyQ==', NULL, 0, N'M7CQDYATM6S7B7RBEEPCMICCGZRFDP4U', 0, N'feedback+201021-anteater-barnacle-43@app.local', CAST(N'2020-10-21T15:16:11.7884646' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'13e21b0c-83c4-4867-b311-192a7ac1f436', 0, N'9aed3883-3b25-4e86-ab65-e7a8473d76eb', N'feedback+201023-bobcat-aardwolf-22@app.local', 0, 1, NULL, N'FEEDBACK+201023-BOBCAT-AARDWOLF-22@app.local', N'FEEDBACK+201023-BOBCAT-AARDWOLF-22@app.local', N'AQAAAAEAACcQAAAAEMXmTjZfx2BXETWW92oVCcxzSRSfxRlUJG+xkCYzHpjlnGU8lvCd3guQp7/1BumDMg==', NULL, 0, N'L5VZUMJ2GPBE6FYH4KEBRWGWW2LOWBMG', 0, N'feedback+201023-bobcat-aardwolf-22@app.local', CAST(N'2020-10-23T15:54:25.8757971' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'14f7ebbd-ee13-4c8e-9e04-3588eb40631c', 0, N'c6a22cc5-1ec1-4f8c-8317-7e3ac6173e0a', N'feedback+211029-beetle-butterfly-525@app.local', 0, 1, NULL, N'FEEDBACK+211029-BEETLE-BUTTERFLY-525@app.local', N'FEEDBACK+211029-BEETLE-BUTTERFLY-525@app.local', N'AQAAAAEAACcQAAAAEGGYDwag9cvime7GhgTEcQ9SbJpChZpaVGRH+H97nT3wFR9zGLttGCG3nZfI2VvmfA==', NULL, 0, N'37V67MFZ4UIJ55MJFOOXMUUPQHV3FJHC', 0, N'feedback+211029-beetle-butterfly-525@app.local', CAST(N'2021-10-29T15:31:19.8732969' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1596b377-d9b0-40f9-b660-b6ad2068d9d7', 0, N'e5701117-cb03-4fdc-b01a-b4ff90ca1b12', N'feedback+211029-anemone-bear-723@app.local', 0, 1, NULL, N'FEEDBACK+211029-ANEMONE-BEAR-723@app.local', N'FEEDBACK+211029-ANEMONE-BEAR-723@app.local', N'AQAAAAEAACcQAAAAEPwHVzTO5cn/SuI1P6kaoJhhHAbkJKcb9hkeP+lStl5Duc8jHUo39POSahwfCagu0g==', NULL, 0, N'CVSG64TLLSW6LJKQVAGKNOINS2EUXKVL', 0, N'feedback+211029-anemone-bear-723@app.local', CAST(N'2021-10-29T15:31:21.7297553' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'15c32519-f854-44cc-a984-7906898a1e72', 0, N'ec08d720-533f-4dac-858d-70bf563623ca', N'feedback+210901-beetle-buffalo-519@app.local', 0, 1, NULL, N'FEEDBACK+210901-BEETLE-BUFFALO-519@app.local', N'FEEDBACK+210901-BEETLE-BUFFALO-519@app.local', N'AQAAAAEAACcQAAAAEE4ouvUjdNYxmnN4LXt3ULPPGNGW/hxAwACxOthjgGAnquDXJge0cwa85aC6J1tpOw==', NULL, 0, N'KVWH2A4AYZ2EKP6QB4IQIBMBI3JLYCT5', 0, N'feedback+210901-beetle-buffalo-519@app.local', CAST(N'2021-09-01T14:48:48.4648612' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'15f6c5fd-f753-4405-8f4b-edd246ff90b7', 0, N'c9580525-1f9e-4a9e-a913-15bc448345bd', N'feedback+210714-ape-anemone-479@app.local', 0, 1, NULL, N'FEEDBACK+210714-APE-ANEMONE-479@app.local', N'FEEDBACK+210714-APE-ANEMONE-479@app.local', N'AQAAAAEAACcQAAAAEJxkIHqlo43YmgHPNbtOplBoHQgm+/DbLy4NrT4/isups53oNKAXARJUCMW4sQOeeQ==', NULL, 0, N'DLJ2SJZBJFR2DVOZJTGZCOL6BFCHA4KC', 0, N'feedback+210714-ape-anemone-479@app.local', CAST(N'2021-07-14T18:21:57.6695771' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1679673e-95f6-4f78-95e5-87abb3a2a74c', 0, N'a27cd3e7-4b79-4a5d-8358-98888a717ff9', N'feedback+211029-beetle-beaver-189@app.local', 0, 1, NULL, N'FEEDBACK+211029-BEETLE-BEAVER-189@app.local', N'FEEDBACK+211029-BEETLE-BEAVER-189@app.local', N'AQAAAAEAACcQAAAAEGiMgQDAHkxpgzWkXGBorfvUMWf1m3xOCQhhsZGxZGQLIKy5H1P4ZcxTnwAjCTCpBQ==', NULL, 0, N'BBF3HE3LH2ZRWFHD6HN6XKDNE7HPEPO4', 0, N'feedback+211029-beetle-beaver-189@app.local', CAST(N'2021-10-29T15:31:21.2731198' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'17aef484-e0e9-43a6-aa98-bd9e65b27e0f', 0, N'6570dc88-28f6-49ca-a6ef-3fc64958b425', N'feedback+211103-beaver-baboon-415@app.local', 0, 1, NULL, N'FEEDBACK+211103-BEAVER-BABOON-415@app.local', N'FEEDBACK+211103-BEAVER-BABOON-415@app.local', N'AQAAAAEAACcQAAAAEO3V8V2Syeds7sjZtX119wGX2B5nIFgylZniPr3li9pl/uvUDPqSvEwkn5RQCkWCOQ==', NULL, 0, N'TCDB2PAPML22ILMF3MACXDBNRTKFUBS5', 0, N'feedback+211103-beaver-baboon-415@app.local', CAST(N'2021-11-03T16:29:52.7873288' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1b305460-ff4f-4ba5-82a7-26035fa9a923', 0, N'3cbd2395-4847-4002-8ced-fdc76b93fd52', N'feedback+210901-angelfish-alligator-680@app.local', 0, 1, NULL, N'FEEDBACK+210901-ANGELFISH-ALLIGATOR-680@app.local', N'FEEDBACK+210901-ANGELFISH-ALLIGATOR-680@app.local', N'AQAAAAEAACcQAAAAEIWL8e6/BaczmJFa8gr8AzmCF9u4ivHZZuYpjn6NI3zYJ4k6FOl4RXQdsLc0iFvhaA==', NULL, 0, N'VFU77RZGN234K3RSJ25C4RAQIJS5SRBA', 0, N'feedback+210901-angelfish-alligator-680@app.local', CAST(N'2021-09-01T14:48:48.3629601' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1b80ad8c-b2fe-478d-ad49-ce47d233c504', 0, N'cf0229f5-f277-4e54-9436-dd9fd95a41b9', N'feedback+211029-armadillo-bobcat-170@app.local', 0, 1, NULL, N'FEEDBACK+211029-ARMADILLO-BOBCAT-170@app.local', N'FEEDBACK+211029-ARMADILLO-BOBCAT-170@app.local', N'AQAAAAEAACcQAAAAED4JtmIia+MDPQgyOyy7OTNx5ErshUDYG1HRuUEL/p6y+tFjgSc/HMkUAe2q4cHjhA==', NULL, 0, N'2HNAGHIE6452NT45JBZCPLTXTS6IQPD7', 0, N'feedback+211029-armadillo-bobcat-170@app.local', CAST(N'2021-10-29T15:31:21.6278285' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1bba624a-cc29-42ff-bcdc-9d2f1cb7cf07', 0, N'128ae1b4-4923-4523-be92-01dee4857ca5', N'feedback+201021-armadillo-armadillo-855@app.local', 0, 1, NULL, N'FEEDBACK+201021-ARMADILLO-ARMADILLO-855@app.local', N'FEEDBACK+201021-ARMADILLO-ARMADILLO-855@app.local', N'AQAAAAEAACcQAAAAEIzHdAoZwdLPzPv5ntevha/5axvavk9w7ingDXqJtjVBhJ0lsQMJocPv6DWRPJLfyg==', NULL, 0, N'Q66S7YW3R3L7BKJNDSTMOW26QJBGTGYA', 0, N'feedback+201021-armadillo-armadillo-855@app.local', CAST(N'2020-10-21T15:16:13.1196415' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1c56438d-f00d-4099-bce9-e6a0e69c92e9', 0, N'350afd52-1af9-4a33-a258-1a40930abe02', N'feedback+200917-anaconda-bee172@app.local', 0, 1, NULL, N'FEEDBACK+200917-ANACONDA-BEE172@app.local', N'FEEDBACK+200917-ANACONDA-BEE172@app.local', N'AQAAAAEAACcQAAAAEJkSfxAhtGTdMGr+tdyNFFSyEi/F1YpR5ailjkjwR/4iSdJqqRt/VLzl3KhpPNpSEg==', NULL, 0, N'WQSLSQQZHTFCOB3EVAGIHUXAHCPGL4MY', 0, N'feedback+200917-anaconda-bee172@app.local', CAST(N'2020-09-17T08:43:44.5467414' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1ec74203-d136-46f9-bf4b-16dde765454a', 0, N'26817690-70cd-40a5-9308-c6fcd5dfb308', N'feedback+211103-aardwolf-beetle-47@app.local', 0, 1, NULL, N'FEEDBACK+211103-AARDWOLF-BEETLE-47@app.local', N'FEEDBACK+211103-AARDWOLF-BEETLE-47@app.local', N'AQAAAAEAACcQAAAAELvMkAI0trmWOdWjr1H4MT4lkujrJgKvr+bGN59UOTo/31eXZOocfiTjzyX86cHk/A==', NULL, 0, N'3JQGLM25DKLKNKTAEQ4WNJNYZQCYHDAZ', 0, N'feedback+211103-aardwolf-beetle-47@app.local', CAST(N'2021-11-03T16:29:53.0849223' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1f2fe72a-a268-46a1-8ac2-918bfabbcd1b', 0, N'5cbb6c13-692e-4795-a606-ac644da38739', N'feedback+211029-alligator-butterfly-744@app.local', 0, 1, NULL, N'FEEDBACK+211029-ALLIGATOR-BUTTERFLY-744@app.local', N'FEEDBACK+211029-ALLIGATOR-BUTTERFLY-744@app.local', N'AQAAAAEAACcQAAAAEM9nRtSggGc29FzaTgWFNu7BHnQ5LxpmCrIyEYHoDTIarHaYgcA8luVV1Pr0dbhqgA==', NULL, 0, N'H57DSLFZPVGYUVRXJUB2RP6BJNTEHQMQ', 0, N'feedback+211029-alligator-butterfly-744@app.local', CAST(N'2021-10-29T15:31:21.7743177' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'1f72e993-2beb-4d8e-8386-f82b61c1a84e', 0, N'55f6f943-a26f-4085-a32f-bfd637b513d6', N'feedback+201021-beetle-bass-140@app.local', 0, 1, NULL, N'FEEDBACK+201021-BEETLE-BASS-140@app.local', N'FEEDBACK+201021-BEETLE-BASS-140@app.local', N'AQAAAAEAACcQAAAAEGGjk+VHIB8EXYX3CddNOrGB83T4m4VrjpSG7r2N1Yz88p98YLwmluC/N2LQ+THI+Q==', NULL, 0, N'RZUIC4O6I2QEYJQDF3VLLICTQ5WVWEK7', 0, N'feedback+201021-beetle-bass-140@app.local', CAST(N'2020-10-21T15:16:12.6310847' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2122701c-7944-48cd-858c-febd825a5c14', 0, N'7cb91d1d-6a5a-4674-ba33-b790a39e3601', N'feedback+201016-aardwolf-alligator-607@app.local', 0, 1, NULL, N'FEEDBACK+201016-AARDWOLF-ALLIGATOR-607@app.local', N'FEEDBACK+201016-AARDWOLF-ALLIGATOR-607@app.local', N'AQAAAAEAACcQAAAAEDyM0uDSayfQX8rjP3unMSFOVFK15V8iV0rOcjwvPhCdnUGVy7EJr0KXFcLhYXjY9w==', NULL, 0, N'CNKTRRR4XHER3NURL7DKX3NTWJO3IYAS', 0, N'feedback+201016-aardwolf-alligator-607@app.local', CAST(N'2020-10-16T15:11:33.3283081' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'233f137a-be7e-4065-b476-432239dfa036', 0, N'09e22e4d-5aba-4092-a6bf-01543f1f7803', N'feedback+211103-aardwolf-bee-607@app.local', 0, 1, NULL, N'FEEDBACK+211103-AARDWOLF-BEE-607@app.local', N'FEEDBACK+211103-AARDWOLF-BEE-607@app.local', N'AQAAAAEAACcQAAAAEDR0V+MYNF8m/RvHrDdaGVGq7BWAYzIWlMbKi5hKNqM8tjlwtj8r+NMv/OptO8Vj5A==', NULL, 0, N'WAQAWYXQHKCJM5L3NTLP5GSG6AXNQDTN', 0, N'feedback+211103-aardwolf-bee-607@app.local', CAST(N'2021-11-03T16:29:52.5029908' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'23839c67-65f3-425f-ad92-938f789ce4e9', 0, N'0ac507e3-3a11-4b3b-9c2a-56c60f57b87d', N'feedback+211029-barnacle-bird-326@app.local', 0, 1, NULL, N'FEEDBACK+211029-BARNACLE-BIRD-326@app.local', N'FEEDBACK+211029-BARNACLE-BIRD-326@app.local', N'AQAAAAEAACcQAAAAEDsA/MU9z/gaDYgNL4iSZzDXkk7Ipwg8UgCkQXut+taQ9ZTOyMF4VlQFw6J7E8L1yw==', NULL, 0, N'KR3FC3UPMXM4OOYL466X4BMIWIQOBTMW', 0, N'feedback+211029-barnacle-bird-326@app.local', CAST(N'2021-10-29T15:31:20.7105371' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'244a6c37-e0d9-4d57-8028-5bd314dd36be', 0, N'da6a6775-a292-4bff-b382-213812eadf40', N'feedback+211029-angelfish-beetle-349@app.local', 0, 1, NULL, N'FEEDBACK+211029-ANGELFISH-BEETLE-349@app.local', N'FEEDBACK+211029-ANGELFISH-BEETLE-349@app.local', N'AQAAAAEAACcQAAAAEF0ohQt7uZ1EW8B7Sm//fran9nncbmcgELf5nMTnCvwzT74XR++S0x7rcIB49RAq9w==', NULL, 0, N'RBOSYS53K6IPKWE7NRD3ALKNXFJ6C4E2', 0, N'feedback+211029-angelfish-beetle-349@app.local', CAST(N'2021-10-29T15:31:20.8745912' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'24d3994a-2f39-40bc-b5f7-6a03c99a140f', 0, N'42a754a4-e2fb-457a-a322-ea4bee39557f', N'feedback+211029-anemone-bobcat-163@app.local', 0, 1, NULL, N'FEEDBACK+211029-ANEMONE-BOBCAT-163@app.local', N'FEEDBACK+211029-ANEMONE-BOBCAT-163@app.local', N'AQAAAAEAACcQAAAAEDf8d2C54KbQU3Kv2T2OaLP6Smpi7HlZOlFFkhjj5d4vQfPN291EQcZZ2BPuHsVpGA==', NULL, 0, N'DY6NHJ4JY7WRTAP4NSMUN32IQY5PIC7U', 0, N'feedback+211029-anemone-bobcat-163@app.local', CAST(N'2021-10-29T15:31:21.0827071' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2536e704-3c14-425b-8bf3-0ff5032c4cfd', 0, N'14972426-0244-42f8-b3df-fabb5543a9c5', N'feedback+211029-beetle-angelfish-507@app.local', 0, 1, NULL, N'FEEDBACK+211029-BEETLE-ANGELFISH-507@app.local', N'FEEDBACK+211029-BEETLE-ANGELFISH-507@app.local', N'AQAAAAEAACcQAAAAEAtHQbUf/THthu8IvlOXYcqI0z1dY3G9S8YJI0gsRYBafgEuPXhRnzRwRZXp9aqFuQ==', NULL, 0, N'YXZ7KQNMF7KSZCQBP2IDONTYRNL4GMOF', 0, N'feedback+211029-beetle-angelfish-507@app.local', CAST(N'2021-10-29T15:31:21.1283319' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'26fa9ee7-7035-4922-8ef4-f46841b2f830', 0, N'94763c60-d86e-41dd-87e8-9d8a4ad6f26f', N'feedback+201019-barnacle-bear-679@app.local', 0, 1, NULL, N'FEEDBACK+201019-BARNACLE-BEAR-679@app.local', N'FEEDBACK+201019-BARNACLE-BEAR-679@app.local', N'AQAAAAEAACcQAAAAENTdF57tVHFi4GBJGYny3fYE+PT6c4FnQBA7BBjyxDV+42+PgYPTx4yPO6gBit4PLQ==', NULL, 0, N'ZVWEV7MYCL7OPNKD4PM6O7YBGX6AAIS7', 0, N'feedback+201019-barnacle-bear-679@app.local', CAST(N'2020-10-19T13:09:13.7407134' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'276b4807-ef42-4424-b593-feb10d29237a', 0, N'53316da2-18e9-4d4f-81f8-dee6706a0050', N'feedback+211103-barnacle-alpaca-838@app.local', 0, 1, NULL, N'FEEDBACK+211103-BARNACLE-ALPACA-838@app.local', N'FEEDBACK+211103-BARNACLE-ALPACA-838@app.local', N'AQAAAAEAACcQAAAAEH8lUb3+ZupEkZJXitNdfQmETQaN1UCesEoAY052+9caHvi4bkavsoCnjJfl2pEgnw==', NULL, 0, N'LQMVL2YIK5UO7MNQUL6HX5GB2VT5SDCP', 0, N'feedback+211103-barnacle-alpaca-838@app.local', CAST(N'2021-11-03T16:29:54.2837575' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2814fdf6-6ff7-4e31-b88d-e7f5be36d6df', 0, N'299ac76e-8e99-4cfc-9f99-e6c5e08689fd', N'feedback+211029-bobcat-antelope-664@app.local', 0, 1, NULL, N'FEEDBACK+211029-BOBCAT-ANTELOPE-664@app.local', N'FEEDBACK+211029-BOBCAT-ANTELOPE-664@app.local', N'AQAAAAEAACcQAAAAEHEhj5KjIuLZeVEY7GTCEAKscxhfsqOwtBoAs4blHr8lcVcLn9WNevp2eNpZbKfqnA==', NULL, 0, N'USTHCQSAWPJHUY6AOCK6E3CYAQP6QKSL', 0, N'feedback+211029-bobcat-antelope-664@app.local', CAST(N'2021-10-29T15:31:19.7947738' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'291b1945-1079-40c4-abb9-c081cab53ea2', 0, N'74abd444-8aee-4960-a919-e85112d47c34', N'feedback+211029-albatross-ant-763@app.local', 0, 1, NULL, N'FEEDBACK+211029-ALBATROSS-ANT-763@app.local', N'FEEDBACK+211029-ALBATROSS-ANT-763@app.local', N'AQAAAAEAACcQAAAAEIlnrPKuMou5RRpS9LEqX+udi7NsCZU42xZVE6blVYT4MrUEH6oQsLe9bh5CLFj3RA==', NULL, 0, N'TBLDNAB2TMSZ3CPZF2IJBOPOR5H5VPX5', 0, N'feedback+211029-albatross-ant-763@app.local', CAST(N'2021-10-29T15:31:20.7510813' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'29f5e13d-e4b0-43c5-8900-9cfb653cb9b2', 0, N'163f0e2d-2956-404c-84bc-f8d6bd5c35e4', N'feedback+211103-beetle-anteater-318@app.local', 0, 1, NULL, N'FEEDBACK+211103-BEETLE-ANTEATER-318@app.local', N'FEEDBACK+211103-BEETLE-ANTEATER-318@app.local', N'AQAAAAEAACcQAAAAEJOm4xqrtIlkkIgPlZHrZM3q0hineAFSVPkrh8PBO4mwR1iLg8F+EtEn05XY6bWYQw==', NULL, 0, N'UZTSFHVCRFXY77RZR4SR2M2OV3KDY4I6', 0, N'feedback+211103-beetle-anteater-318@app.local', CAST(N'2021-11-03T16:29:54.0033770' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2a4631d4-d975-4c79-9c05-c6ca9a8a9012', 0, N'8c1d221a-721d-4cf7-8568-9a0220180057', N'feedback+210714-bear-aardvark-785@app.local', 0, 1, NULL, N'FEEDBACK+210714-BEAR-AARDVARK-785@app.local', N'FEEDBACK+210714-BEAR-AARDVARK-785@app.local', N'AQAAAAEAACcQAAAAEGoXsciVY5jDzNouzTngXG6dFEKtKWoe1WmqAf7GARd2j4vlMeBjgZFupZQ/BCOaIw==', NULL, 0, N'2YJSFVJ3MHCR6CDPHRXKJG52NHAR2DZO', 0, N'feedback+210714-bear-aardvark-785@app.local', CAST(N'2021-07-14T18:21:57.4775948' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2b3ec870-2047-452a-bf2a-80ad76720c36', 0, N'eaf561b5-92c5-4b6a-8406-6409184d29f0', N'feedback+211029-bat-butterfly-678@app.local', 0, 1, NULL, N'FEEDBACK+211029-BAT-BUTTERFLY-678@app.local', N'FEEDBACK+211029-BAT-BUTTERFLY-678@app.local', N'AQAAAAEAACcQAAAAEAnFcZpl7n+pXXndI0jxN3nwI4aBCtnvQb+1g1qKnKkJOToK+lVLUfHMZFzWnagRQA==', NULL, 0, N'RMJAJQTNH3XMDW72GFD3C2S43C2RLEMD', 0, N'feedback+211029-bat-butterfly-678@app.local', CAST(N'2021-10-29T15:31:20.4031248' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2b6e0e3a-cb46-4d36-bd87-b283d710805c', 0, N'73a9881d-203e-47ba-8364-18012eee5e75', N'feedback+201021-buffalo-armadillo-346@app.local', 0, 1, NULL, N'FEEDBACK+201021-BUFFALO-ARMADILLO-346@app.local', N'FEEDBACK+201021-BUFFALO-ARMADILLO-346@app.local', N'AQAAAAEAACcQAAAAEEYfJOcRsmju12OFsLUncqWbRwDGdcv2PmiHskHQiPmDndJcDPxzQzt2wv4yj3//VA==', NULL, 0, N'GVUPPJBNWZTFWRJMO6OEN3SHEV7LQLRG', 0, N'feedback+201021-buffalo-armadillo-346@app.local', CAST(N'2020-10-21T15:16:13.6520664' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2d427c56-0d2d-44c8-a1e9-eeced1a4a757', 0, N'a4a00c85-6374-451f-a0da-e9527e85dd8a', N'feedback+201021-alligator-bear-449@app.local', 0, 1, NULL, N'FEEDBACK+201021-ALLIGATOR-BEAR-449@app.local', N'FEEDBACK+201021-ALLIGATOR-BEAR-449@app.local', N'AQAAAAEAACcQAAAAEBUV8cJXCv2EViRzOBW6TYtJ/tcRnImbHko5ML++uCtDq5J7p9O2VhQhK8OoQhwiYg==', NULL, 0, N'QNW5XUXYNNY6TFMFPOIKFCLI3WA2UPN2', 0, N'feedback+201021-alligator-bear-449@app.local', CAST(N'2020-10-21T15:16:13.4325976' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2d55e07d-4f25-4b4d-898f-1dc03d5da52d', 0, N'16390791-c522-4a07-80c4-f2389be5a3ec', N'feedback+210901-baboon-bear-117@app.local', 0, 1, NULL, N'FEEDBACK+210901-BABOON-BEAR-117@app.local', N'FEEDBACK+210901-BABOON-BEAR-117@app.local', N'AQAAAAEAACcQAAAAEAVLXqrpxFcYLsEgOCZu5JP00KPa7Q5r6vc9v063DzoHbN5w3THjX1NEBgUv6GSPvg==', NULL, 0, N'6PKQLPBJSSIJTECEDWCGPNOXKDDHGVFK', 0, N'feedback+210901-baboon-bear-117@app.local', CAST(N'2021-09-01T14:48:48.0496881' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2dd7ea1f-290b-4ece-ac57-58ea665d1342', 0, N'b0724160-003c-41b4-85f2-ca4c836ea960', N'feedback+211103-armadillo-aardwolf-277@app.local', 0, 1, NULL, N'FEEDBACK+211103-ARMADILLO-AARDWOLF-277@app.local', N'FEEDBACK+211103-ARMADILLO-AARDWOLF-277@app.local', N'AQAAAAEAACcQAAAAEHWZ1YPb79kG262JrjI0uI2mLJ4mwoNaCLfQpFnzoJdP/MSQ45iwSnwPEEMk65tnPg==', NULL, 0, N'5U6CXMVRRXQHAKKA2BMHQXDDTQKCPXJF', 0, N'feedback+211103-armadillo-aardwolf-277@app.local', CAST(N'2021-11-03T16:29:52.1286167' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'2fab66b2-733e-4c74-9296-a39dfdc68845', 0, N'dc5c78d1-fde5-4e39-9f4f-8ba82a7dceda', N'feedback+211029-bandicoot-beetle-70@app.local', 0, 1, NULL, N'FEEDBACK+211029-BANDICOOT-BEETLE-70@app.local', N'FEEDBACK+211029-BANDICOOT-BEETLE-70@app.local', N'AQAAAAEAACcQAAAAELmwKKAPRp4H8xPBLYdoG8+S/hzooy+jDGc+L+RMbpBtmA4NcsBXYdcHzkFQOd/HFw==', NULL, 0, N'QJ5Q2UDTRRWD5YBYCTQAKEOGG5WRT5AK', 0, N'feedback+211029-bandicoot-beetle-70@app.local', CAST(N'2021-10-29T15:31:21.4055943' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'30171dc3-ebd3-4ae1-8118-9c4b76d00a6a', 0, N'd3ca855b-842c-4cc3-ba2b-6558f80099b1', N'feedback+201016-antelope-barnacle894@app.local', 0, 1, NULL, N'FEEDBACK+201016-ANTELOPE-BARNACLE894@app.local', N'FEEDBACK+201016-ANTELOPE-BARNACLE894@app.local', N'AQAAAAEAACcQAAAAEOtvTRcX41l0/FSyt54f8T/w9jxNkJ77UNA7x2ckbk+IT7Sv5BztJmXUdM/2HZ2UGw==', NULL, 0, N'TXSTD2AQWZJVS2JJZLVQVKEH3FOGMIEC', 0, N'feedback+201016-antelope-barnacle894@app.local', CAST(N'2020-10-16T12:35:28.2243312' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'315daed1-4855-4166-9ea3-5964907e8f16', 0, N'312d3f94-b7c1-434c-931e-8f6c7d94c57d', N'feedback+201021-bat-ape-817@app.local', 0, 1, NULL, N'FEEDBACK+201021-BAT-APE-817@app.local', N'FEEDBACK+201021-BAT-APE-817@app.local', N'AQAAAAEAACcQAAAAEMpRUh2awfxM4jxGtxYEfIgVUkAiTgtVWzEOLWLLvVnXCZAsacE0MSEzDfesDf0yTg==', NULL, 0, N'MU6UU5X46IJENQWORBC5ZPBVVG3BNBHL', 0, N'feedback+201021-bat-ape-817@app.local', CAST(N'2020-10-21T15:16:12.4137690' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'320b90af-219e-4260-954c-25bf9564586c', 0, N'2451a125-e6c4-43b8-9eab-898ad6a9909d', N'feedback+211029-bird-alligator-249@app.local', 0, 1, NULL, N'FEEDBACK+211029-BIRD-ALLIGATOR-249@app.local', N'FEEDBACK+211029-BIRD-ALLIGATOR-249@app.local', N'AQAAAAEAACcQAAAAEIjkgM9Iq0I36NpLfDwZIaHe/X0VZWZA7qdHIabvGu5ixuo0ywlH9dLIA8Wzat0Yaw==', NULL, 0, N'2YNUOFP4BZA7PNNPSR4LTWJPNA4GXD67', 0, N'feedback+211029-bird-alligator-249@app.local', CAST(N'2021-10-29T15:31:19.9476651' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'32364957-eeae-4fbe-ba73-9c78659a22b5', 0, N'b29e1db8-943c-4cf5-8a8d-e47d4a56aa2d', N'feedback+211103-anglerfish-beetle-68@app.local', 0, 1, NULL, N'FEEDBACK+211103-ANGLERFISH-BEETLE-68@app.local', N'FEEDBACK+211103-ANGLERFISH-BEETLE-68@app.local', N'AQAAAAEAACcQAAAAEFM+2Z5guQgJkfGCBasNofNqukdYxInpE/ouaQbprMtXnjezMbkvr+BwhCC/SK4X2Q==', NULL, 0, N'3JQWBJVARVHTJHGPEE3R6OCDMZGK2QS6', 0, N'feedback+211103-anglerfish-beetle-68@app.local', CAST(N'2021-11-03T16:29:52.8944516' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'3300efe5-139a-4164-94a7-72a432dada33', 0, N'bdc8aa2c-5668-456e-8a22-cbd019cf4ef8', N'feedback+201021-buffalo-alpaca-443@app.local', 0, 1, NULL, N'FEEDBACK+201021-BUFFALO-ALPACA-443@app.local', N'FEEDBACK+201021-BUFFALO-ALPACA-443@app.local', N'AQAAAAEAACcQAAAAEBP1EC4kLHhsf7FNC5VtethK8svnX0dadoo/x7bLDxWjKXaXJj2W0ZZED3CVn12kcg==', NULL, 0, N'FDNGONFUIKTW2V6WL2CNKTRFASHLVDFM', 0, N'feedback+201021-buffalo-alpaca-443@app.local', CAST(N'2020-10-21T15:16:12.1577753' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'338961af-9829-42c3-bbff-22abe4618321', 0, N'216c8bdf-9013-4eb2-90dc-0f5ed808128b', N'feedback+211029-aardwolf-beaver-170@app.local', 0, 1, NULL, N'FEEDBACK+211029-AARDWOLF-BEAVER-170@app.local', N'FEEDBACK+211029-AARDWOLF-BEAVER-170@app.local', N'AQAAAAEAACcQAAAAEEuXePgidhkl3o/myYoc5WY/08Z4wz4ytjcGyp4T9SREmbvq4RxALXJ3prOhxsBUyA==', NULL, 0, N'GET7UIKJFWI3BPQVHW6L5H2EECT3AJOR', 0, N'feedback+211029-aardwolf-beaver-170@app.local', CAST(N'2021-10-29T15:31:19.9109692' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'3393ab56-3e34-41b8-b196-1efbc08cddbc', 0, N'61fb2da6-c13c-4ee1-8759-e5b9bf23cd48', N'feedback+211104-barracuda-bass-461@app.local', 0, 1, NULL, N'FEEDBACK+211104-BARRACUDA-BASS-461@app.local', N'FEEDBACK+211104-BARRACUDA-BASS-461@app.local', N'AQAAAAEAACcQAAAAEF5ltxW6KabUuLG3wvx2+AJeI3vHsNSyryD9PEkIflUEkGK36NnsNI5PrAUSW9fjMQ==', NULL, 0, N'RIBYV5RHA5YQC34SI32PSYCBPLMDMPTL', 0, N'feedback+211104-barracuda-bass-461@app.local', CAST(N'2021-11-04T15:56:10.8224500' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'35a9d39a-761e-4019-a356-94a6a14937b7', 0, N'85889f43-4a91-44cc-8dd4-62cdf3130982', N'feedback+201021-ape-barnacle-237@app.local', 0, 1, NULL, N'FEEDBACK+201021-APE-BARNACLE-237@app.local', N'FEEDBACK+201021-APE-BARNACLE-237@app.local', N'AQAAAAEAACcQAAAAEAC6zIZntwJF7gIwcPBs0a5cThq/k/u4LWzLLZWoKLAq97sdCGMhNQomHbl9ZExJ0Q==', NULL, 0, N'OG4HZD7CQCICMDGSJFS5DIIKI76ANQWB', 0, N'feedback+201021-ape-barnacle-237@app.local', CAST(N'2020-10-21T15:16:11.4455589' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'3627f481-edd9-4849-bc87-789e68b7c984', 0, N'a11239cf-6c1f-4d89-b99a-68e122b5e7b9', N'feedback+201023-barracuda-alligator-15@app.local', 0, 1, NULL, N'FEEDBACK+201023-BARRACUDA-ALLIGATOR-15@app.local', N'FEEDBACK+201023-BARRACUDA-ALLIGATOR-15@app.local', N'AQAAAAEAACcQAAAAEN+HY0jYat+/sJLAwPHPmdZ+tdQOY3PzdwkMT+xtdX/X7VWTcErMArSDg5CFWFOMzA==', NULL, 0, N'OPD5VVCFHRT74Q43NTQGVPLKXQ4D2GB3', 0, N'feedback+201023-barracuda-alligator-15@app.local', CAST(N'2020-10-23T15:54:26.0197416' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'39e705a2-ccff-4b52-81f0-98454d2d249e', 0, N'99ad10b1-9bd0-4bc9-8606-f912262556eb', N'feedback+201023-beetle-baboon-191@app.local', 0, 1, NULL, N'FEEDBACK+201023-BEETLE-BABOON-191@app.local', N'FEEDBACK+201023-BEETLE-BABOON-191@app.local', N'AQAAAAEAACcQAAAAEGXT7vEEoc9MNywrpu7HdqJIu1KR/MqOOuD1OrL1YSdiOpE7W1zLdbvCEWqLrgDRYw==', NULL, 0, N'BRLQ7FSFPNAP4TQLKCRQPS3AA4PQTXKG', 0, N'feedback+201023-beetle-baboon-191@app.local', CAST(N'2020-10-23T15:54:25.9803098' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'3ec36999-9678-4685-8b1f-ad7efbd8da0d', 0, N'dfa15f3a-6256-46c7-8572-75109674f675', N'feedback+211103-armadillo-ape-783@app.local', 0, 1, NULL, N'FEEDBACK+211103-ARMADILLO-APE-783@app.local', N'FEEDBACK+211103-ARMADILLO-APE-783@app.local', N'AQAAAAEAACcQAAAAEK4hRjN0D0puTILBzQ2w3udhTPZeOGUO/qWaH5Nbr5qDJ9BZ3NziaKNF0fHLOdccBQ==', NULL, 0, N'IIVCN4XKPPGXBWU24JBBKYW6Z3UQLZVE', 0, N'feedback+211103-armadillo-ape-783@app.local', CAST(N'2021-11-03T16:29:51.9407351' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'3f91ea8c-06bc-485e-8060-6570d2b73bb2', 0, N'b8937c3b-aa47-4d01-92bc-f3b1fd34cebc', N'feedback+211029-beetle-aardwolf-563@app.local', 0, 1, NULL, N'FEEDBACK+211029-BEETLE-AARDWOLF-563@app.local', N'FEEDBACK+211029-BEETLE-AARDWOLF-563@app.local', N'AQAAAAEAACcQAAAAECRfrSR7vAtearmZUUN5YI2PDGp6lqD7l3poDyCO3PHgEod6DMScAVQyvx/F2lyDfw==', NULL, 0, N'M6II54TC4COFRLXGW3Q4IYHZCOJLNEVR', 0, N'feedback+211029-beetle-aardwolf-563@app.local', CAST(N'2021-10-29T15:31:20.3250107' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'416f8ec8-45fa-4332-b31a-76e32669aaea', 0, N'806091c5-95ff-4e6f-ab8b-af7bc526d0b8', N'feedback+211029-anemone-anglerfish-385@app.local', 0, 1, NULL, N'FEEDBACK+211029-ANEMONE-ANGLERFISH-385@app.local', N'FEEDBACK+211029-ANEMONE-ANGLERFISH-385@app.local', N'AQAAAAEAACcQAAAAEFvOTiXjnzVQa3AqgY2Yc2dE5voTElZzhJ8uQpRGQGqLXalN8sqf0hKUJfp7E2dqaQ==', NULL, 0, N'V6DOCK7ZBZUJS3UU6JFGROPLE5FZCDDW', 0, N'feedback+211029-anemone-anglerfish-385@app.local', CAST(N'2021-10-29T15:31:21.3168789' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'46b581e8-5086-4892-8a2c-e12ade943c6d', 0, N'e6c87864-f4e3-4c0c-92ec-c112ee356625', N'feedback+211103-bear-anglerfish-286@app.local', 0, 1, NULL, N'FEEDBACK+211103-BEAR-ANGLERFISH-286@app.local', N'FEEDBACK+211103-BEAR-ANGLERFISH-286@app.local', N'AQAAAAEAACcQAAAAELnRKUgUs7jk4KEMUdVQz8AH5YY8OxhN/wCyD5wc6U1m64W1Me+Xg2drjALlDRzAmQ==', NULL, 0, N'BQDZTIHLLXD4NF4R7UGUP2RVPPCE6XXI', 0, N'feedback+211103-bear-anglerfish-286@app.local', CAST(N'2021-11-03T16:29:53.2829449' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'4965689f-b6ba-4ef7-a48c-0232bdfa3c25', 0, N'3a5feabc-c273-43ab-9bae-2cdd05f926b7', N'feedback+201016-anemone-butterfly-236@app.local', 0, 1, NULL, N'FEEDBACK+201016-ANEMONE-BUTTERFLY-236@app.local', N'FEEDBACK+201016-ANEMONE-BUTTERFLY-236@app.local', N'AQAAAAEAACcQAAAAEKV+lU+64iGk3y2yCOtPjTbXjNOgaJ1GA7wHLB8YIOZP5VHuXU/H+xJJBmx9MxPoZA==', NULL, 0, N'RODMRWGIAMGBJ3FDHUKS53ENIAD5R32N', 0, N'feedback+201016-anemone-butterfly-236@app.local', CAST(N'2020-10-16T15:11:33.1417949' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'4f38b15c-a39e-49cd-a913-f63a57dcc6c8', 0, N'81063bbd-7531-4a89-b04a-b837e4266fe6', N'feedback+211103-anglerfish-barracuda-179@app.local', 0, 1, NULL, N'FEEDBACK+211103-ANGLERFISH-BARRACUDA-179@app.local', N'FEEDBACK+211103-ANGLERFISH-BARRACUDA-179@app.local', N'AQAAAAEAACcQAAAAEC7hRrBrV7o6rQm0DPDuxOJN/2xyl3Dd7wfLLH6jxYySepJZBstUeNClqMNIBzFGpQ==', NULL, 0, N'4HSRMUXCFIYXNLUNS363XNRQ7X6GI7BJ', 0, N'feedback+211103-anglerfish-barracuda-179@app.local', CAST(N'2021-11-03T16:29:53.4330194' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'50180c3f-b29a-4b2e-ae8e-a4ffe5498462', 0, N'3e995a22-547e-426b-9ad5-ea813a268651', N'feedback+201023-beaver-anemone-959@app.local', 0, 1, NULL, N'FEEDBACK+201023-BEAVER-ANEMONE-959@app.local', N'FEEDBACK+201023-BEAVER-ANEMONE-959@app.local', N'AQAAAAEAACcQAAAAEK8ZyM78HP3ovArAclFD5Snd8kVovflo+MtjOhkTms8EeWCNXG+Csucw4Slod9CF3g==', NULL, 0, N'4VOP5YA7ELOODAEV67UMEWITSBOJFNOL', 0, N'feedback+201023-beaver-anemone-959@app.local', CAST(N'2020-10-23T15:54:25.7999712' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'523517ed-6dae-4686-9f99-37ac838179a5', 0, N'35614abf-f80f-472f-aa2e-738aec468016', N'feedback+210901-bobcat-anemone-216@app.local', 0, 1, NULL, N'FEEDBACK+210901-BOBCAT-ANEMONE-216@app.local', N'FEEDBACK+210901-BOBCAT-ANEMONE-216@app.local', N'AQAAAAEAACcQAAAAEBI46SC9cl3aN39Lg0CU/iyK7JoTOBzSVCOKPuaonuYHAYtmt3LcFew3pLF63+l5zQ==', NULL, 0, N'O4SRG6ER3H556B2CCB74JQQI3PQVV724', 0, N'feedback+210901-bobcat-anemone-216@app.local', CAST(N'2021-09-01T14:48:48.2976071' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'53822ca6-ecc7-4700-a218-20e7cc071035', 0, N'b3e5a778-b866-4ddf-a0c4-d2fcadec7996', N'feedback+211029-beetle-antelope-12@app.local', 0, 1, NULL, N'FEEDBACK+211029-BEETLE-ANTELOPE-12@app.local', N'FEEDBACK+211029-BEETLE-ANTELOPE-12@app.local', N'AQAAAAEAACcQAAAAEAOCwe6BbT7aVFvaLcpsy+ib0TMqLhHvyQckDEHXqzUTTIyn6dZ/+lZNTBrmLjp27Q==', NULL, 0, N'776BLMLY4RH6HN4L323NPUHZOZLSIM4T', 0, N'feedback+211029-beetle-antelope-12@app.local', CAST(N'2021-10-29T15:31:20.0900509' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'546d57bc-19cb-4775-87f4-424c78e8b6e0', 0, N'c5179c02-b529-4ff1-aabd-1159b14fd39b', N'feedback+210901-beetle-bison-953@app.local', 0, 1, NULL, N'FEEDBACK+210901-BEETLE-BISON-953@app.local', N'FEEDBACK+210901-BEETLE-BISON-953@app.local', N'AQAAAAEAACcQAAAAEDr4nsw0qa7ktDJHnFrFouemhaQeOq9s4M3ulVutLUGzTPM5nO/6Mn8UeJwDt9kkqw==', NULL, 0, N'QLSM7FQ666B2UYP7UI2DYXGW645KH6ZA', 0, N'feedback+210901-beetle-bison-953@app.local', CAST(N'2021-09-01T14:48:48.1104367' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'55e24dd4-f02d-4836-a95f-e817b27dd436', 0, N'2b3efe6f-73de-4b69-a95e-7aed3bfddd3d', N'feedback+211029-baboon-bee-676@app.local', 0, 1, NULL, N'FEEDBACK+211029-BABOON-BEE-676@app.local', N'FEEDBACK+211029-BABOON-BEE-676@app.local', N'AQAAAAEAACcQAAAAEA28C4fOW0MLGXQdc9PkH3Du7nPtjwbjuLaMU2jVJUccqnb8SSBmu+qXOPYKSpyPgQ==', NULL, 0, N'XA4ZFANHGRNY6NEGHGNLV6DSPBN5RWFU', 0, N'feedback+211029-baboon-bee-676@app.local', CAST(N'2021-10-29T15:31:20.5209098' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'57b7800e-f70c-456e-81c1-450a255f50b2', 0, N'c5a57ebf-8123-4007-9645-907108e5f0d5', N'feedback+201021-aardvark-anaconda-510@app.local', 0, 1, NULL, N'FEEDBACK+201021-AARDVARK-ANACONDA-510@app.local', N'FEEDBACK+201021-AARDVARK-ANACONDA-510@app.local', N'AQAAAAEAACcQAAAAEF6JO4Vc4nxIxO5bgqhQi0J5POvnxkuQPozQrnenvym1CTiG4gui2degj/Ob2nyl/g==', NULL, 0, N'4L56CI4E4UIUQEFDEJSZWTZJ6XAZZVHQ', 0, N'feedback+201021-aardvark-anaconda-510@app.local', CAST(N'2020-10-21T15:16:11.8263758' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'57fbf1d3-b8d6-4ac2-b08f-876eac6a0dcb', 0, N'9c416708-b2a0-4f5a-a0c8-8741eaf8a722', N'feedback+201021-bear-bee-259@app.local', 0, 1, NULL, N'FEEDBACK+201021-BEAR-BEE-259@app.local', N'FEEDBACK+201021-BEAR-BEE-259@app.local', N'AQAAAAEAACcQAAAAEKIe9hchPfYratfb4OQ15eDoBi+wIFSSVgxdU8I7a8pbXKAFrUbMnbqGouwQsWYSlw==', NULL, 0, N'6CUVV7A5SOXJVFDLBVT7BK7XISRA4ZUG', 0, N'feedback+201021-bear-bee-259@app.local', CAST(N'2020-10-21T15:16:12.7733739' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'5a8525b6-85be-43fa-8e17-5d891bfa60ea', 0, N'88e8009e-2f5c-4595-ba89-ba30efaff53d', N'feedback+211103-albatross-anglerfish-715@app.local', 0, 1, NULL, N'FEEDBACK+211103-ALBATROSS-ANGLERFISH-715@app.local', N'FEEDBACK+211103-ALBATROSS-ANGLERFISH-715@app.local', N'AQAAAAEAACcQAAAAEMaDop5Qzz7jHfJR3bqww7r+KAH72Ghn+MTsb9B0E+aSqYvT0y9YEg/XZoOGg1stAA==', NULL, 0, N'O2ORB63WLBFPLTBQST27Y4AY2FTE52P2', 0, N'feedback+211103-albatross-anglerfish-715@app.local', CAST(N'2021-11-03T16:29:53.4824489' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'5b84cc3e-e95a-4c1c-968b-e8bb2b4e307d', 0, N'7d734c59-8a80-45e3-8279-eedc2da230d1', N'feedback+211029-beetle-bee-561@app.local', 0, 1, NULL, N'FEEDBACK+211029-BEETLE-BEE-561@app.local', N'FEEDBACK+211029-BEETLE-BEE-561@app.local', N'AQAAAAEAACcQAAAAENiIe0xio2dZ6uop1NSrbtOHFPR+oM3DWZz4DIr9AtjoWR1QCX17Aqa6kCh8HH2xLQ==', NULL, 0, N'65PLTOIOP3S5DE2BFWG47KO7B6VHNAWV', 0, N'feedback+211029-beetle-bee-561@app.local', CAST(N'2021-10-29T15:31:20.1282540' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'5ca3e474-f9c7-4b55-9f9d-7105cecf5ed1', 0, N'3071e0de-6383-41ed-abfe-abb9787df991', N'feedback+211103-barnacle-butterfly-993@app.local', 0, 1, NULL, N'FEEDBACK+211103-BARNACLE-BUTTERFLY-993@app.local', N'FEEDBACK+211103-BARNACLE-BUTTERFLY-993@app.local', N'AQAAAAEAACcQAAAAEFKDyNcZD7/C7Ag3AAAU9mwYW2GU61/ODitpfUEQPY0j3gOLuPMjvDn3B8RDd/vyyg==', NULL, 0, N'YLC7CPNNKQN5N4YE6QBBMNZA4O6DNAII', 0, N'feedback+211103-barnacle-butterfly-993@app.local', CAST(N'2021-11-03T16:29:53.2338787' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'5d509603-60a0-4d0c-9f1a-3fb387acf8c3', 0, N'6db7ab42-e216-41ed-ba45-79f4d11cdf61', N'feedback+210714-armadillo-anteater-164@app.local', 0, 1, NULL, N'FEEDBACK+210714-ARMADILLO-ANTEATER-164@app.local', N'FEEDBACK+210714-ARMADILLO-ANTEATER-164@app.local', N'AQAAAAEAACcQAAAAEOQ1wOEXY8oQNutyAw/d9Sn2jL+o0nkXXHrmqQCqH0eMT9cicphZZm5FEoqpv4bVsQ==', NULL, 0, N'GSCREJPMGJI5Q4YLVZZXGPY43FUZ7WGH', 0, N'feedback+210714-armadillo-anteater-164@app.local', CAST(N'2021-07-14T18:21:57.7979320' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'5d956b94-6474-4208-9fef-81ec40d7444f', 0, N'269d7079-8d73-4b2b-a649-468df640cdb7', N'feedback+211103-bear-bird-956@app.local', 0, 1, NULL, N'FEEDBACK+211103-BEAR-BIRD-956@app.local', N'FEEDBACK+211103-BEAR-BIRD-956@app.local', N'AQAAAAEAACcQAAAAEPfsNhvUADogwblEFFdlcWiUoQhXYcfyXFndzd4ajnMV06rcZHvPKYdX/1VAbZ3ZYg==', NULL, 0, N'QIC7XICPD32HZSTIJXITEW4B2JPAUWXK', 0, N'feedback+211103-bear-bird-956@app.local', CAST(N'2021-11-03T16:29:53.5841354' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'5dd184e7-78ef-45b9-8959-f28556e4b62d', 0, N'ec4ad208-858c-4e4b-99e3-4e7c10ec6904', N'feedback+210714-aardvark-alligator-651@app.local', 0, 1, NULL, N'FEEDBACK+210714-AARDVARK-ALLIGATOR-651@app.local', N'FEEDBACK+210714-AARDVARK-ALLIGATOR-651@app.local', N'AQAAAAEAACcQAAAAEM+PzsmihxOGnlfIvH/aou6zMBCErrG3j3rtYlufssw7R2MeW54KgtHI3MksX2NlTw==', NULL, 0, N'HCSOG5IOOVFQYHLJTUVOXR3AOZJZ5TWV', 0, N'feedback+210714-aardvark-alligator-651@app.local', CAST(N'2021-07-14T18:21:57.7533124' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'5de50989-9c03-4519-a4d3-0a034e727913', 0, N'd5401ee9-93ae-4b43-a4aa-d3cc592357cf', N'feedback+211029-angelfish-barnacle-743@app.local', 0, 1, NULL, N'FEEDBACK+211029-ANGELFISH-BARNACLE-743@app.local', N'FEEDBACK+211029-ANGELFISH-BARNACLE-743@app.local', N'AQAAAAEAACcQAAAAEKusK5yWmauyW0O5d6ucAftm60R8aK3FQ9HQ0OAkS6a56HYVjga1nF7Fdg9pTja/Kg==', NULL, 0, N'DGRBIDV5Q47RNV3RJZP7AI47DNMJGLNO', 0, N'feedback+211029-angelfish-barnacle-743@app.local', CAST(N'2021-10-29T15:31:20.5782677' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'5deca418-4dd3-4662-b29b-ad049c79fd9b', 0, N'631f0bc8-dc16-4bd5-9b31-473adb568fd5', N'feedback+211029-bison-barnacle-822@app.local', 0, 1, NULL, N'FEEDBACK+211029-BISON-BARNACLE-822@app.local', N'FEEDBACK+211029-BISON-BARNACLE-822@app.local', N'AQAAAAEAACcQAAAAEG0iQiAydJOEWt1no9Ui207wVJ/WtWKHAo5hsnInYgleFu8x7+krn3aRPWU4nhHQwg==', NULL, 0, N'JWUNRNQFWACDGXAOTC32LZIIWXPPOV2O', 0, N'feedback+211029-bison-barnacle-822@app.local', CAST(N'2021-10-29T15:31:20.2031387' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'5f0b6cf8-0fe3-4236-af16-cdce6ba64228', 0, N'6bafbfcf-c85f-4500-81fe-cd07796a06a3', N'feedback+201021-antelope-barnacle-21@app.local', 0, 1, NULL, N'FEEDBACK+201021-ANTELOPE-BARNACLE-21@app.local', N'FEEDBACK+201021-ANTELOPE-BARNACLE-21@app.local', N'AQAAAAEAACcQAAAAEGWsqNAAkjf+hq1nY0PsgYlfYgr/DledlJ3L91d5XYKMCIGp5eY99ZQrfra66FhD3Q==', NULL, 0, N'NTFUXM3B6IC2VUAAXR72CJA2IIXDE2JL', 0, N'feedback+201021-antelope-barnacle-21@app.local', CAST(N'2020-10-21T15:16:12.2011990' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'6020039f-7349-405a-8968-add60fa8dd0f', 0, N'8ed68f4e-1b3b-4136-a0b7-94038c26b27d', N'feedback+201021-bandicoot-ape-775@app.local', 0, 1, NULL, N'FEEDBACK+201021-BANDICOOT-APE-775@app.local', N'FEEDBACK+201021-BANDICOOT-APE-775@app.local', N'AQAAAAEAACcQAAAAEDVU4aDgU521DITYUYI1ECtxeE1e9Ep3xmxtEoYUQo6PIyry4OQ1xD2deOBNFBeWyg==', NULL, 0, N'DRWKSPODS7X4GOCJHPURP2LJDOPKKZLQ', 0, N'feedback+201021-bandicoot-ape-775@app.local', CAST(N'2020-10-21T15:16:12.7258519' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'61f499a0-4edc-4c3a-a0e6-38ede6f6030b', 0, N'de4b7ba0-628e-4673-a836-af9b784391d2', N'feedback+210714-badger-alpaca-895@app.local', 0, 1, NULL, N'FEEDBACK+210714-BADGER-ALPACA-895@app.local', N'FEEDBACK+210714-BADGER-ALPACA-895@app.local', N'AQAAAAEAACcQAAAAEBeu9+mgIySxrsS17eU4WwJjQ14vTeTpjysnKW+++8Rob4msaktPrUWcP86nDtJmRw==', NULL, 0, N'FA7NYQ6MAR6BYRQ4ELUANECUY2Q3USOD', 0, N'feedback+210714-badger-alpaca-895@app.local', CAST(N'2021-07-14T18:21:57.5932862' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'628a5003-4e1f-4f45-8331-f0896432c83a', 0, N'a2947f09-e898-4d79-ba74-eef6ef867982', N'feedback+201021-ape-bandicoot-259@app.local', 0, 1, NULL, N'FEEDBACK+201021-APE-BANDICOOT-259@app.local', N'FEEDBACK+201021-APE-BANDICOOT-259@app.local', N'AQAAAAEAACcQAAAAEJMVDxNolkJqP3yV8gzO8jWJkPrKrkLXgi8LdTqx8yMP4qIxq3HopzpR/KWjZ9jmLA==', NULL, 0, N'P6WMD2OGODXAYV3YEPN6OPE5BYXO722Y', 0, N'feedback+201021-ape-bandicoot-259@app.local', CAST(N'2020-10-21T15:16:13.3806351' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'661dcbda-9731-4564-a2f0-5c4f6e5bdb35', 0, N'31202362-7dd8-4df2-9930-af7df0156e09', N'feedback+211029-bobcat-boar-78@app.local', 0, 1, NULL, N'FEEDBACK+211029-BOBCAT-BOAR-78@app.local', N'FEEDBACK+211029-BOBCAT-BOAR-78@app.local', N'AQAAAAEAACcQAAAAEAH2C3YAJ0UnRhver8Qd8ZE/Kt0sZsAk3ZFZQo13AFa+iOXMqPWHzAisqHxBWme8kw==', NULL, 0, N'5XYKRX2ACMETSKJ52FPSCM763WTALWEN', 0, N'feedback+211029-bobcat-boar-78@app.local', CAST(N'2021-10-29T15:31:21.5384343' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'6759513d-7818-48b3-9720-7fe6ed5b3a3c', 0, N'e6d9386a-40be-4b81-9a07-4bac899ebf0d', N'feedback+211103-bear-alligator-63@app.local', 0, 1, NULL, N'FEEDBACK+211103-BEAR-ALLIGATOR-63@app.local', N'FEEDBACK+211103-BEAR-ALLIGATOR-63@app.local', N'AQAAAAEAACcQAAAAEOlxNVwPRtygI5vflMB3e2T6ZHK7Ba5mgObJfmqrIlwhNBdai8fu5iAHhRC6BdhJIw==', NULL, 0, N'CYGKYSWZD4IY7LNZAHM2FXFUKBT6BPRF', 0, N'feedback+211103-bear-alligator-63@app.local', CAST(N'2021-11-03T16:29:53.7385915' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'678f8d41-1aba-4fc7-9bc5-aefda71a43e2', 0, N'28c5feec-f4e5-45af-a200-a7bdc8380a56', N'feedback+201019-anemone-albatross-620@app.local', 0, 1, NULL, N'FEEDBACK+201019-ANEMONE-ALBATROSS-620@app.local', N'FEEDBACK+201019-ANEMONE-ALBATROSS-620@app.local', N'AQAAAAEAACcQAAAAENvZ1b8RqdAFzIdoXCMo5B9JlN+5RBfH/mhGHFcw5a7p5XzS7iPQqjKWW9bB4N3LTg==', NULL, 0, N'IV6QCHEPOKQ4KO3FMX7WT3O6GJMECRSV', 0, N'feedback+201019-anemone-albatross-620@app.local', CAST(N'2020-10-19T13:09:13.5419790' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'67d5d2eb-c19e-4abc-b940-3b08a2790954', 0, N'e1630ff8-c270-4f0c-a80f-812571a7c9ae', N'feedback+211103-aardwolf-bobcat-131@app.local', 0, 1, NULL, N'FEEDBACK+211103-AARDWOLF-BOBCAT-131@app.local', N'FEEDBACK+211103-AARDWOLF-BOBCAT-131@app.local', N'AQAAAAEAACcQAAAAEP+Hb08BUJxH9moHR8hukFWVH1+8SjCtQ4NG02FpXZKsG0vdxJT1saoynINm4gq73g==', NULL, 0, N'2YJD6LWTGCJTZNWGQXJXV4EUQDWCYT3X', 0, N'feedback+211103-aardwolf-bobcat-131@app.local', CAST(N'2021-11-03T16:29:52.3785273' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'699f86a5-df80-4c08-bc30-51ed40afb61a', 0, N'6dc2aff4-4746-4ec5-9d23-3fc4fddb2c28', N'feedback+210901-alpaca-bat-996@app.local', 0, 1, NULL, N'FEEDBACK+210901-ALPACA-BAT-996@app.local', N'FEEDBACK+210901-ALPACA-BAT-996@app.local', N'AQAAAAEAACcQAAAAEJRRW6EY2LCOsNY+0jyJmeHQmBaZE+EmeYun3Ou4VmXXaeyTCCS0dhCsWdSXDxeLBQ==', NULL, 0, N'E2SU6A4GDTT4AWCXGYYOR7XKK3K3Z3FK', 0, N'feedback+210901-alpaca-bat-996@app.local', CAST(N'2021-09-01T14:48:48.3298289' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'69ee02b3-8892-4938-bebf-b75b8618578a', 0, N'9139db36-0f32-4a67-a8df-c052e61e8cd5', N'feedback+200917-ant-badger983@app.local', 0, 1, NULL, N'FEEDBACK+200917-ANT-BADGER983@app.local', N'FEEDBACK+200917-ANT-BADGER983@app.local', N'AQAAAAEAACcQAAAAEETEfPMf2B8DOegGLb9ivgoMjT2XcXTf0NFe2XFBH+D2oHHg45bW9cV2jJyRxUJX9g==', NULL, 0, N'7SFFH7GKZ7B5CS3AB3VZGOFEG5J5RFOR', 0, N'feedback+200917-ant-badger983@app.local', CAST(N'2020-09-17T08:43:44.5028203' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'69efb2a2-ab3c-45f9-8fb1-0ba06d74d248', 0, N'3cb72890-8da0-4a84-9522-ec2e919e5380', N'feedback+201016-boar-antelope384@app.local', 0, 1, NULL, N'FEEDBACK+201016-BOAR-ANTELOPE384@app.local', N'FEEDBACK+201016-BOAR-ANTELOPE384@app.local', N'AQAAAAEAACcQAAAAEJq3KgDQT5t+HyG5VhOx6OY4XQkY7bXdK4uEW4fuvDS9soZwbBmxabqGa3cadP3Q/w==', NULL, 0, N'LRTXDLOQMAIGJRZMNEATU7ESNDEP2252', 0, N'feedback+201016-boar-antelope384@app.local', CAST(N'2020-10-16T12:35:28.3451458' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'6d4ae891-3ac6-498c-83f3-888985a481c4', 0, N'e6d5eaa6-73de-49cf-bc72-d9c71f00acac', N'feedback+211103-bandicoot-alpaca-656@app.local', 0, 1, NULL, N'FEEDBACK+211103-BANDICOOT-ALPACA-656@app.local', N'FEEDBACK+211103-BANDICOOT-ALPACA-656@app.local', N'AQAAAAEAACcQAAAAENrtMwkbL56YkHl33V6qlkx4TaK66Vp3o+xOITtOH55jd+fXdOboRUOXgAIbgP33lQ==', NULL, 0, N'S54K47Y3JPZMDAX3R326V4P3WJ7TRM7M', 0, N'feedback+211103-bandicoot-alpaca-656@app.local', CAST(N'2021-11-03T16:29:52.5500947' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'6e4256c1-1d47-46d4-ac11-5749e4b68b79', 0, N'ea39e6a9-7e9c-46ba-a61a-122efb029c11', N'feedback+210901-bison-badger-729@app.local', 0, 1, NULL, N'FEEDBACK+210901-BISON-BADGER-729@app.local', N'FEEDBACK+210901-BISON-BADGER-729@app.local', N'AQAAAAEAACcQAAAAEJX5U/DsAtJiAaT55tcqCcA0QmddWNDM7SUbehSSx5uUtWbH6sDQDxlGkCF/+i/+eQ==', NULL, 0, N'LEK6VMSL4SEWDYKLPXKXT6EPRFHWBC7R', 0, N'feedback+210901-bison-badger-729@app.local', CAST(N'2021-09-01T14:48:48.0175486' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'6ea2c7d1-225e-47dc-abe5-28afb13e5246', 0, N'2ed9c31b-3305-42be-a028-42121f7972ab', N'feedback+211103-aardvark-anglerfish-285@app.local', 0, 1, NULL, N'FEEDBACK+211103-AARDVARK-ANGLERFISH-285@app.local', N'FEEDBACK+211103-AARDVARK-ANGLERFISH-285@app.local', N'AQAAAAEAACcQAAAAEAc7/nkzhxhjZXugZNBjeNHJ5RSHznbaHbhSSNBhJKO5UThhQM5DB+TWkvGuUx9N6A==', NULL, 0, N'KM4KXZOO2OCN3XE7J4MECFFIRP3FFFDH', 0, N'feedback+211103-aardvark-anglerfish-285@app.local', CAST(N'2021-11-03T16:29:53.9499819' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'6f5c683c-cce3-4075-96b9-71a5146c4b4b', 0, N'17f06cf6-4251-49ab-8328-4fb1b8fb3a08', N'feedback+211103-badger-antelope-249@app.local', 0, 1, NULL, N'FEEDBACK+211103-BADGER-ANTELOPE-249@app.local', N'FEEDBACK+211103-BADGER-ANTELOPE-249@app.local', N'AQAAAAEAACcQAAAAEFnRm+lwnibo2FhbON0ZlN7n2RVefXtXB0a1KuZ4Ex4SdSykeSRxgIJir0pL8UftlA==', NULL, 0, N'EEJ55HEKN4SFMBUM5AOJT33JL6JA3ZQJ', 0, N'feedback+211103-badger-antelope-249@app.local', CAST(N'2021-11-03T16:29:53.8972862' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'7180a512-7111-46a9-bcbb-f65d806c9bdf', 0, N'2c41d610-9ade-4b47-9f1c-c62d45c81595', N'feedback+210901-ape-ant-872@app.local', 0, 1, NULL, N'FEEDBACK+210901-APE-ANT-872@app.local', N'FEEDBACK+210901-APE-ANT-872@app.local', N'AQAAAAEAACcQAAAAEA1XB2FNvu4LVSWrZzmAAHbeV5oMYWDiljS4HNmwiH5cMSdvmHDw8a1ZBWZk9+qyxQ==', NULL, 0, N'7PKFSMPWYE3TMV6DPYQJ5CHF25EWGPFH', 0, N'feedback+210901-ape-ant-872@app.local', CAST(N'2021-09-01T14:48:48.1420557' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'74570ede-c128-4a7d-ab93-287443480105', 0, N'1cf17287-9c4b-4c1b-9689-f95a47336cc4', N'feedback+201021-anaconda-aardwolf-989@app.local', 0, 1, NULL, N'FEEDBACK+201021-ANACONDA-AARDWOLF-989@app.local', N'FEEDBACK+201021-ANACONDA-AARDWOLF-989@app.local', N'AQAAAAEAACcQAAAAEEMSYcmbH0WXAPKp4WUkYBzPNj1fBfciOqX2Uv/JSdOdd8uwN9STCLRYnjzCj6eqWA==', NULL, 0, N'Y7ZDJG3ZGDK56X6U7RGR54ZAGMGEJ7GJ', 0, N'feedback+201021-anaconda-aardwolf-989@app.local', CAST(N'2020-10-21T15:16:12.8706106' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'74e8dba4-0079-49dc-979f-2654f10f9dfb', 0, N'7fb08189-e034-4262-bdf5-f14c03d1076b', N'feedback+211103-bobcat-boar-975@app.local', 0, 1, NULL, N'FEEDBACK+211103-BOBCAT-BOAR-975@app.local', N'FEEDBACK+211103-BOBCAT-BOAR-975@app.local', N'AQAAAAEAACcQAAAAEPibtx4Bb8l5/0ZsSZ5C91Puz/2YTwZtJiZgecWoNooFyQDHiGifL+w+fQpC/U3TEQ==', NULL, 0, N'KHON2TR2XSSLW2MVLJIZXR3TT3VYRR4E', 0, N'feedback+211103-bobcat-boar-975@app.local', CAST(N'2021-11-03T16:29:52.0839059' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'76961217-9c9e-4f80-9412-7fced52aeb3d', 0, N'ee05ceeb-88f7-41b6-8d6f-16742e7c4c46', N'feedback+211103-alligator-anglerfish-997@app.local', 0, 1, NULL, N'FEEDBACK+211103-ALLIGATOR-ANGLERFISH-997@app.local', N'FEEDBACK+211103-ALLIGATOR-ANGLERFISH-997@app.local', N'AQAAAAEAACcQAAAAEHDWLS2u63WNqqpuwXezET3C3ayLMKqzJ6K2Mwup4y/Hrw7fIoid2Poxc+Mgb/77Hw==', NULL, 0, N'FSJRFC5PRIW77U2UG64GH3P4EHCUAABH', 0, N'feedback+211103-alligator-anglerfish-997@app.local', CAST(N'2021-11-03T16:29:53.8461564' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'76b35648-2a76-42de-8aae-e780add568a0', 0, N'99e0c93c-00b6-4993-9289-544fce09e0e0', N'feedback+201021-bandicoot-aardvark-124@app.local', 0, 1, NULL, N'FEEDBACK+201021-BANDICOOT-AARDVARK-124@app.local', N'FEEDBACK+201021-BANDICOOT-AARDVARK-124@app.local', N'AQAAAAEAACcQAAAAEO5MnHSM+dVkqvrBqrQCuBkEF8zs9NTABeQi1U+xpLsqeH/LpSm6IIBWE0R1G5q/aQ==', NULL, 0, N'L3XCTEUTZAZDRBSKPQGWXTL6DVHT5AVR', 0, N'feedback+201021-bandicoot-aardvark-124@app.local', CAST(N'2020-10-21T15:16:12.2900777' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'78d197e0-32eb-4eaf-af84-fd28824dbdc2', 0, N'c8c67f1a-8849-4fab-a994-c2d07f6e485d', N'feedback+211104-alpaca-buffalo-530@app.local', 0, 1, NULL, N'FEEDBACK+211104-ALPACA-BUFFALO-530@app.local', N'FEEDBACK+211104-ALPACA-BUFFALO-530@app.local', N'AQAAAAEAACcQAAAAECVEkFOtUqM+Ub7E+N4+DznN+0QWGejd6FBDQKxLrUW5tOe5OptE30BGnJ57Nmq6nQ==', NULL, 0, N'LWRS3JFOK4GKMHZZEXLPMY7HONFTO6VL', 0, N'feedback+211104-alpaca-buffalo-530@app.local', CAST(N'2021-11-04T15:56:10.8667934' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'79550370-2ec8-451a-b698-c2b6081b88ee', 0, N'd048509d-539b-4147-afd3-73e58082997f', N'feedback+210714-bison-buffalo-878@app.local', 0, 1, NULL, N'FEEDBACK+210714-BISON-BUFFALO-878@app.local', N'FEEDBACK+210714-BISON-BUFFALO-878@app.local', N'AQAAAAEAACcQAAAAEP9CW4eh5vKFDrB8Ji1XRLojibf9zUt52M1ehfktcSVXK/AjpEcpRpRNHhjGEHCw/g==', NULL, 0, N'TZDMFLXALESDO4LGNYTIEXAUE2NPK2JL', 0, N'feedback+210714-bison-buffalo-878@app.local', CAST(N'2021-07-14T18:21:57.5561023' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'7a286685-3e64-485a-911c-90636e19fa85', 0, N'fa11ccb3-6235-45c1-987e-349664a6d2b4', N'feedback+201021-aardwolf-bison-628@app.local', 0, 1, NULL, N'FEEDBACK+201021-AARDWOLF-BISON-628@app.local', N'FEEDBACK+201021-AARDWOLF-BISON-628@app.local', N'AQAAAAEAACcQAAAAEMvM10FFiwJL0p5JzxDDbzyrfwJI/mXwqU6YwqnM6sRx3X9XobuUo/t9gFdqevJiMA==', NULL, 0, N'4ZZBFAB5AZXVSFQDDCZMQJAV63WY47ZV', 0, N'feedback+201021-aardwolf-bison-628@app.local', CAST(N'2020-10-21T15:16:12.1130414' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'7af8e820-770b-45f1-932a-580129a88a04', 0, N'13cdd7cb-1151-476a-b377-2913f151174b', N'feedback+210901-anemone-anaconda-67@app.local', 0, 1, NULL, N'FEEDBACK+210901-ANEMONE-ANACONDA-67@app.local', N'FEEDBACK+210901-ANEMONE-ANACONDA-67@app.local', N'AQAAAAEAACcQAAAAEPrmirUHLVgKzJ/PJbFi7w/5TaXZeYxr7tMUjc9hYrfB8g1aW3Msw4hWmb/kkX8URA==', NULL, 0, N'T6WWBPPZSYUS4SB6QHBU4EI7VSX5VWGU', 0, N'feedback+210901-anemone-anaconda-67@app.local', CAST(N'2021-09-01T14:48:48.1741077' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'7be85f63-8392-4d25-85af-817400ac4a0d', 0, N'6e1a876b-6259-49ac-b145-07b497dedd0c', N'feedback+201016-bird-antelope793@app.local', 0, 1, NULL, N'FEEDBACK+201016-BIRD-ANTELOPE793@app.local', N'FEEDBACK+201016-BIRD-ANTELOPE793@app.local', N'AQAAAAEAACcQAAAAECiw2lJ+SQWla3YukxVOrRlWvvmAJHHI1bGZ/i411Pg7YO5GyJL907n115qRn0DOHg==', NULL, 0, N'PAGI4GLMNA6YCQYRIEV767FB4VA4YNXZ', 0, N'feedback+201016-bird-antelope793@app.local', CAST(N'2020-10-16T12:35:28.2658063' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'7c924b6c-651e-4531-8843-6dcbf6ae7875', 0, N'f0ef4f1b-3771-4c43-9000-a129779ee5ae', N'feedback+201023-bat-buffalo-919@app.local', 0, 1, NULL, N'FEEDBACK+201023-BAT-BUFFALO-919@app.local', N'FEEDBACK+201023-BAT-BUFFALO-919@app.local', N'AQAAAAEAACcQAAAAELrf5Jfm6RzWiQDQh+/rgCPFitKwxiR07QoNMGwqftzHAyPR9zmkF9Bx/T+jJDM1ew==', NULL, 0, N'QJQKYM73FYS5QQXIHUSTPMDYKBQK5KML', 0, N'feedback+201023-bat-buffalo-919@app.local', CAST(N'2020-10-23T13:33:43.0864470' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'7f18cf71-dc2f-4d54-83b1-e251f0193619', 0, N'6d3fb27d-548e-491c-a4a3-cd16a46c2a2c', N'feedback+201021-buffalo-armadillo-157@app.local', 0, 1, NULL, N'FEEDBACK+201021-BUFFALO-ARMADILLO-157@app.local', N'FEEDBACK+201021-BUFFALO-ARMADILLO-157@app.local', N'AQAAAAEAACcQAAAAEDC5HZhfuH8nEy7fZ0SGEgcB7WRq5CRAR/9vkZmkjjHUsO8IEoyVhQY0CiC7DN2rCg==', NULL, 0, N'G5GTZ6NNELEBKTLGXJVLVCLB35UTHKTS', 0, N'feedback+201021-buffalo-armadillo-157@app.local', CAST(N'2020-10-21T15:16:11.5576939' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'7f92414a-267a-46bf-9e31-4738969454ef', 0, N'3495b17d-babc-44bb-a265-cf1171baf4c1', N'feedback+211103-beetle-aardwolf-805@app.local', 0, 1, NULL, N'FEEDBACK+211103-BEETLE-AARDWOLF-805@app.local', N'FEEDBACK+211103-BEETLE-AARDWOLF-805@app.local', N'AQAAAAEAACcQAAAAEB/PPjXTqpvNlq5Uq0o5RwV/hhaf59Bj7D3VOiB5oopxY445wnD0gQSDQHM036Peew==', NULL, 0, N'ILYXVRLBTIPKGG65MVP4JMKRVNGB6DEF', 0, N'feedback+211103-beetle-aardwolf-805@app.local', CAST(N'2021-11-03T16:29:53.6868837' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'7fbd5874-7132-44bc-9b5f-830971bc415f', 0, N'e9ee1029-78df-4db0-a9b2-6362386659fc', N'feedback+201023-bison-alligator-937@app.local', 0, 1, NULL, N'FEEDBACK+201023-BISON-ALLIGATOR-937@app.local', N'FEEDBACK+201023-BISON-ALLIGATOR-937@app.local', N'AQAAAAEAACcQAAAAENfgPpfajO6ILqrczkGv2Os56JIKnD89HOj5P5zSYFa4+DFKWsJiQLhkeGTm44vFcg==', NULL, 0, N'3D62JLNUGNSQRGS3UYXQOXE2LWHEPHYA', 0, N'feedback+201023-bison-alligator-937@app.local', CAST(N'2020-10-23T13:33:42.8444644' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'81888271-5cd4-4bb1-84ab-21e5b0b379aa', 0, N'dcc99922-ab1b-4070-8b81-cdc871784401', N'feedback+211103-boar-angelfish-903@app.local', 0, 1, NULL, N'FEEDBACK+211103-BOAR-ANGELFISH-903@app.local', N'FEEDBACK+211103-BOAR-ANGELFISH-903@app.local', N'AQAAAAEAACcQAAAAELb3lzoOcJ+F+Hkp78kO6V+G5rk+XSN/YHpY2FrscNUHatxL8he0ieIZyg0+Tj7FVQ==', NULL, 0, N'YD5VDFG7FFSWN3SJ462MWBZCUHUISF3K', 0, N'feedback+211103-boar-angelfish-903@app.local', CAST(N'2021-11-03T16:29:52.0402571' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'81c57208-37c5-4407-90ba-5746f5116c32', 0, N'c197d385-d4d1-4dd3-9e4b-7f155f165920', N'feedback+210901-butterfly-bat-589@app.local', 0, 1, NULL, N'FEEDBACK+210901-BUTTERFLY-BAT-589@app.local', N'FEEDBACK+210901-BUTTERFLY-BAT-589@app.local', N'AQAAAAEAACcQAAAAEBjOAb/HrWNYTP/VObXxj8vU1Hw3tNvJNYGKffcgVAsRw+6n124QCBtTstqIOMr66w==', NULL, 0, N'NJY2ACQJHEVX4SOILKRMMAKFZYHYRYU7', 0, N'feedback+210901-butterfly-bat-589@app.local', CAST(N'2021-09-01T14:48:48.7951034' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'83ce56e7-a34c-4b6c-b82a-2e321f06b972', 0, N'f33cc6d6-6574-44fb-a07d-e80bbf1b9668', N'feedback+210901-antelope-antelope-444@app.local', 0, 1, NULL, N'FEEDBACK+210901-ANTELOPE-ANTELOPE-444@app.local', N'FEEDBACK+210901-ANTELOPE-ANTELOPE-444@app.local', N'AQAAAAEAACcQAAAAEDCK4jjDQuIi9Y8J0QC5gTEZ5b8EoEmLhjfT+0uI1kWRq2cVrXE0wqtSfCtN+ReSQQ==', NULL, 0, N'7AM5E735KKA4OM2X2YPP2C3YW4REMLOX', 0, N'feedback+210901-antelope-antelope-444@app.local', CAST(N'2021-09-01T14:48:48.5050674' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'880cda31-aa92-4dc1-b7dd-0d7ed2186de7', 0, N'9c208bda-863c-4738-ab29-6d39c664f6f8', N'feedback+210901-aardvark-alpaca-111@app.local', 0, 1, NULL, N'FEEDBACK+210901-AARDVARK-ALPACA-111@app.local', N'FEEDBACK+210901-AARDVARK-ALPACA-111@app.local', N'AQAAAAEAACcQAAAAEDVypAxjJY+W1DSK+7nmVpbW1hgONkae9mxCWw2sZATCyiOYPYbSA0jgqq712OWUSw==', NULL, 0, N'SXI2ZTS4IYKLZFKYANVDX3VUQ24ELJSW', 0, N'feedback+210901-aardvark-alpaca-111@app.local', CAST(N'2021-09-01T14:48:48.3960992' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'8883df37-8c65-4a3f-b5f3-d488a2363ea4', 0, N'a5a2281d-778e-4c78-926c-e88cd983990a', N'feedback+201021-ant-bison-354@app.local', 0, 1, NULL, N'FEEDBACK+201021-ANT-BISON-354@app.local', N'FEEDBACK+201021-ANT-BISON-354@app.local', N'AQAAAAEAACcQAAAAENXg1dkAlpcqlwFASfMAgkz+Iaiyjnv1MFfioZEHQKYShfo+c7M/L6tiPe4JN+M5Yw==', NULL, 0, N'AG5YUQHQIRTRGQYDMT5WUFPL53KK2JAA', 0, N'feedback+201021-ant-bison-354@app.local', CAST(N'2020-10-21T15:16:12.3390279' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'899cf091-7cf3-4b5f-bdd7-d4a193c3dddb', 0, N'61fa697b-3bfb-43b3-85c9-36179cb42129', N'feedback+211104-bat-bandicoot-731@app.local', 0, 1, NULL, N'FEEDBACK+211104-BAT-BANDICOOT-731@app.local', N'FEEDBACK+211104-BAT-BANDICOOT-731@app.local', N'AQAAAAEAACcQAAAAEIQmUk4EEj8YHk5B2cOEIzMPjDYGsLGG6lMNdtQS3MLIRvkQdV0MtguYKh8pji/Dnw==', NULL, 0, N'LOX6ZUWAXL7BCDDXWV67IJ24IUFMKZFI', 0, N'feedback+211104-bat-bandicoot-731@app.local', CAST(N'2021-11-04T15:56:10.5592341' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'89d138f2-da36-4ca7-9ccd-157a021193e0', 0, N'234c62b2-c998-4ecc-b051-f39531b3237d', N'feedback+201021-bison-butterfly-444@app.local', 0, 1, NULL, N'FEEDBACK+201021-BISON-BUTTERFLY-444@app.local', N'FEEDBACK+201021-BISON-BUTTERFLY-444@app.local', N'AQAAAAEAACcQAAAAEPltR229hhqRiYPMOPtCMk+/10Wf8BZqBXGM40YPL9tJd9dKqYm1YKBVUqMAizW58A==', NULL, 0, N'XYQF3AP4J35Y5VIHNGPCUAJ4Q5RJBKSH', 0, N'feedback+201021-bison-butterfly-444@app.local', CAST(N'2020-10-21T15:16:11.9055811' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'8c029494-db84-46a1-8bf7-316d1d0f4791', 0, N'270db796-62fe-497f-81c9-f1570d7b1444', N'feedback+200917-aardvark-bass497@app.local', 0, 1, NULL, N'FEEDBACK+200917-AARDVARK-BASS497@app.local', N'FEEDBACK+200917-AARDVARK-BASS497@app.local', N'AQAAAAEAACcQAAAAEBLrKijSnqCKEkAhRqfIHjEtytWcBD05pXquRkvUpmP+yoqQBgQ2HtggFztIwRlJgA==', NULL, 0, N'UCAC7AMJP5ZHF6IKERBLZXX2XYURZYYO', 0, N'feedback+200917-aardvark-bass497@app.local', CAST(N'2020-09-17T08:43:44.4607512' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'8ebcaf53-f660-491a-ae3c-364c717f1359', 0, N'a5b81dc7-78a1-452d-b9c4-dbbbd17f4333', N'feedback+201021-anemone-ant-204@app.local', 0, 1, NULL, N'FEEDBACK+201021-ANEMONE-ANT-204@app.local', N'FEEDBACK+201021-ANEMONE-ANT-204@app.local', N'AQAAAAEAACcQAAAAEH9HmshMLVZQdFFrqd5RfVw+XoEzSOAUJM9h3/57GOK/x9yH9WOlEfU5Rewm0JJOFQ==', NULL, 0, N'7SMAHV3I2Q2X3QGUQOZPMIC5XUIE7BFJ', 0, N'feedback+201021-anemone-ant-204@app.local', CAST(N'2020-10-21T15:16:13.1705708' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'8fe79d13-8d91-4719-b5c0-d1f47c77961e', 0, N'5a33afaf-a85e-4d8f-b1f3-8719fc852dd4', N'feedback+210901-bear-anteater-848@app.local', 0, 1, NULL, N'FEEDBACK+210901-BEAR-ANTEATER-848@app.local', N'FEEDBACK+210901-BEAR-ANTEATER-848@app.local', N'AQAAAAEAACcQAAAAEN1OvCkEOSbHAEjZpH/IAsar4rtNeFazm+eiVOXfL+ICxqhsSxu4YxJT6ctRhSr5tQ==', NULL, 0, N'YBLNANJXVOEXC5UYLB3TBU2SS67YGOP6', 0, N'feedback+210901-bear-anteater-848@app.local', CAST(N'2021-09-01T14:48:48.5785499' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'8ff71738-4de1-442a-b6c3-c7d64a6792da', 0, N'7694f07f-2bf5-4d48-95e7-dd4b240ded9a', N'feedback+201021-armadillo-anemone-271@app.local', 0, 1, NULL, N'FEEDBACK+201021-ARMADILLO-ANEMONE-271@app.local', N'FEEDBACK+201021-ARMADILLO-ANEMONE-271@app.local', N'AQAAAAEAACcQAAAAELXE7ViNDVxcHPiTM2RGPS/05BmjDTnctWTV+zhuBedzC9YnywsZYfVhnbhhLR4NqQ==', NULL, 0, N'5YQ2MFOI7PZHKIWMHRWUTPPL4NG33JO6', 0, N'feedback+201021-armadillo-anemone-271@app.local', CAST(N'2020-10-21T15:16:12.2460070' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'90b7bb91-9a24-42cd-8637-8839968a5f08', 0, N'744d80f4-3a45-40c9-9996-5cf687d53aa7', N'feedback+201021-ant-buffalo-447@app.local', 0, 1, NULL, N'FEEDBACK+201021-ANT-BUFFALO-447@app.local', N'FEEDBACK+201021-ANT-BUFFALO-447@app.local', N'AQAAAAEAACcQAAAAEHxjP7W9H8ARkjVtBfuDiLB1m/iYoTEQJaHitAy68oAvQ3qU2Sn043RbvtIZ1Gj1xw==', NULL, 0, N'XP6MNURE2AKMSMTOSQYJUCBQVKDBY77W', 0, N'feedback+201021-ant-buffalo-447@app.local', CAST(N'2020-10-21T15:16:11.7501574' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'90df9b18-3234-4d5f-9100-d6ec8ccd9c55', 0, N'913de2b6-8834-4e56-8bf9-9a9a93970986', N'feedback+211103-barracuda-bass-746@app.local', 0, 1, NULL, N'FEEDBACK+211103-BARRACUDA-BASS-746@app.local', N'FEEDBACK+211103-BARRACUDA-BASS-746@app.local', N'AQAAAAEAACcQAAAAEF3QXl1OsZGmzvYwGq+s2Hvgst27yN6rGyaxdXnsov5Rsh0BxIPdPARslGNs58ji1A==', NULL, 0, N'XUDCGAODLD4RCFQN3T3EUODHWHPNAZGW', 0, N'feedback+211103-barracuda-bass-746@app.local', CAST(N'2021-11-03T16:29:51.9863888' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'918fb8af-7f1c-4605-84c0-461a0320fa25', 0, N'6d25a7ec-0ae5-414e-ad7d-9db4bbfbeaf4', N'feedback+211103-bee-boar-814@app.local', 0, 1, NULL, N'FEEDBACK+211103-BEE-BOAR-814@app.local', N'FEEDBACK+211103-BEE-BOAR-814@app.local', N'AQAAAAEAACcQAAAAEHa5G5w5/DIH0WKptTQ1A2EdsANaZ5bQ4zvcAwBG3PRYd4/NOfK0h8DDPlpKx4XGiA==', NULL, 0, N'N6SSXRHU6I7T6FTHHE5EHP3DLE34DTXI', 0, N'feedback+211103-bee-boar-814@app.local', CAST(N'2021-11-03T16:29:52.9884948' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'91b9eeea-1632-47f2-8baa-5dcd9685ac9b', 0, N'140b93e2-970f-4f29-aa7d-a13d3a648ad7', N'feedback+200917-alligator-butterfly958@app.local', 0, 1, NULL, N'FEEDBACK+200917-ALLIGATOR-BUTTERFLY958@app.local', N'FEEDBACK+200917-ALLIGATOR-BUTTERFLY958@app.local', N'AQAAAAEAACcQAAAAEPfkC2fwD3FFUn8YynGNl/LWycm8AvL9Df2WPWFWT+by+oApXlY9Ldc5PQU2SrdhvA==', NULL, 0, N'DI2N7OBK5QFWPUUIH7TSIG7RNGJBCONL', 0, N'feedback+200917-alligator-butterfly958@app.local', CAST(N'2020-09-17T08:43:44.4154854' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'924c4fb5-0268-4bf6-b309-596cf6e84dba', 0, N'27c3911a-4708-41c7-a8ae-3f968f546ccc', N'feedback+211029-beaver-ape-985@app.local', 0, 1, NULL, N'FEEDBACK+211029-BEAVER-APE-985@app.local', N'FEEDBACK+211029-BEAVER-APE-985@app.local', N'AQAAAAEAACcQAAAAEIBJIKnSVqSY85VVpvG3pegGaIsrJv02BdsI9XI0SUxN3ALk1kDUmJVtDbkukZ4BYA==', NULL, 0, N'H7XFJPJIU6UZLQBAWK52IOWN6AYJJMOA', 0, N'feedback+211029-beaver-ape-985@app.local', CAST(N'2021-10-29T15:31:21.4518270' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'95723fcf-dea7-4d4e-9347-092f158e1d5e', 0, N'55f3f296-d3b5-438c-a435-e17a7b733db4', N'feedback+211103-armadillo-bird-757@app.local', 0, 1, NULL, N'FEEDBACK+211103-ARMADILLO-BIRD-757@app.local', N'FEEDBACK+211103-ARMADILLO-BIRD-757@app.local', N'AQAAAAEAACcQAAAAEPrvXorOKsNSP4Z0HthC2/HMWQ0hIPfwjB5Oh8PjjjrohqgD624pUtv4jXIlctp/Sw==', NULL, 0, N'6GAZQMA3BGCYZONOHHWOXDMH4MQX7VZ5', 0, N'feedback+211103-armadillo-bird-757@app.local', CAST(N'2021-11-03T16:29:54.2287035' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'96489e48-195b-4c8e-99a2-1abb65fac249', 0, N'5010ab00-528a-4442-a090-b81394101e9f', N'feedback+210901-bear-albatross-443@app.local', 0, 1, NULL, N'FEEDBACK+210901-BEAR-ALBATROSS-443@app.local', N'FEEDBACK+210901-BEAR-ALBATROSS-443@app.local', N'AQAAAAEAACcQAAAAEHfx9e9qj3nv8U4Pnxw43W3nVaY6y8CiJXNdFk1CsjSIxfMQIv8YpQ60nceRSRttEg==', NULL, 0, N'IUAFQIYD6VP66CF7AZILTF3KJ5JS5QNF', 0, N'feedback+210901-bear-albatross-443@app.local', CAST(N'2021-09-01T14:48:48.6519560' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'9687efbc-2cb3-44d9-9819-720aac6361ef', 0, N'1e120c31-d74b-41d3-b1d6-56087994b846', N'feedback+201021-bear-boar-891@app.local', 0, 1, NULL, N'FEEDBACK+201021-BEAR-BOAR-891@app.local', N'FEEDBACK+201021-BEAR-BOAR-891@app.local', N'AQAAAAEAACcQAAAAED2P0GqhcQxgX9Rfos5Pr0o2rAewv8MXPDeaMkoaHrIjE7yyM7nmxKS7tQXmLntxWQ==', NULL, 0, N'62OOKXSQVN4XRHSX7LKREFWDRUFKTB54', 0, N'feedback+201021-bear-boar-891@app.local', CAST(N'2020-10-21T15:16:12.6781599' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'969f492e-b8c4-4714-9f7c-f175cbd2b38a', 0, N'1a84cce6-a2ba-471f-af2f-95a55b3a380e', N'feedback+201021-ape-bee-247@app.local', 0, 1, NULL, N'FEEDBACK+201021-APE-BEE-247@app.local', N'FEEDBACK+201021-APE-BEE-247@app.local', N'AQAAAAEAACcQAAAAEMDdCSHYZ0WZkp+QG3I0WRzOp4yT5g/6diaOrQPBRr52G1np2e0jzRvTn8hVBoFwrA==', NULL, 0, N'SLAW3AOI5673XMRTTV4P6PUIGUO25LUN', 0, N'feedback+201021-ape-bee-247@app.local', CAST(N'2020-10-21T15:16:13.0193597' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'96f91ab9-d5a8-440b-940e-8fffcde85ef3', 0, N'75776a54-12c8-4269-9058-afdae3dba840', N'feedback+211029-anaconda-beetle-220@app.local', 0, 1, NULL, N'FEEDBACK+211029-ANACONDA-BEETLE-220@app.local', N'FEEDBACK+211029-ANACONDA-BEETLE-220@app.local', N'AQAAAAEAACcQAAAAEIphEsaAFLxuxzs1+G2x2DL25qylkUFW9TThUgpvrwmi6zK3MsDcHhveNx1YpqWjQQ==', NULL, 0, N'KLPLGHFMHDL3P6DY7T7EBR4FHQNHVP2H', 0, N'feedback+211029-anaconda-beetle-220@app.local', CAST(N'2021-10-29T15:31:19.9843109' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'978c1e68-c665-4280-8ffe-61c526f9ddb0', 0, N'2d41e78e-ccdb-4618-9515-b429debb5b43', N'feedback+211104-barnacle-boar-145@app.local', 0, 1, NULL, N'FEEDBACK+211104-BARNACLE-BOAR-145@app.local', N'FEEDBACK+211104-BARNACLE-BOAR-145@app.local', N'AQAAAAEAACcQAAAAEODywUPK8xE8sDwxs6Pv5ZSLjDzGRXNIbXlKmT8O0SAqHm+yLfN7C7HzkurpOnYrGQ==', NULL, 0, N'6K6FIS65EANUP766S4H6JPOSGFYYGK7W', 0, N'feedback+211104-barnacle-boar-145@app.local', CAST(N'2021-11-04T15:56:10.5157820' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'990e38aa-4eee-406a-a233-63feae62937e', 0, N'9cb2f7c8-6fe0-4cae-832f-1de7b8c9e6cb', N'feedback+211103-barracuda-ant-363@app.local', 0, 1, NULL, N'FEEDBACK+211103-BARRACUDA-ANT-363@app.local', N'FEEDBACK+211103-BARRACUDA-ANT-363@app.local', N'AQAAAAEAACcQAAAAED5Jb9wFAIq88DtPZJyN7KVkLQyBhF6/LNz+3EBuNoJpawn6Mz6fZGNKJ/qKhDaB5w==', NULL, 0, N'74UX5GCLTJZSO2RDNH7FCCZ2CNTNDQ42', 0, N'feedback+211103-barracuda-ant-363@app.local', CAST(N'2021-11-03T16:29:54.3385131' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'9abba3e1-e673-4818-88bc-fd1cd97b957a', 0, N'33382fca-3968-4e9b-b489-fc4d67140e21', N'feedback+211103-aardwolf-ape-584@app.local', 0, 1, NULL, N'FEEDBACK+211103-AARDWOLF-APE-584@app.local', N'FEEDBACK+211103-AARDWOLF-APE-584@app.local', N'AQAAAAEAACcQAAAAEBDFPetsbaI1D6ClfySnPwSqGLsicynRhEww1nFjr4uct52+ESF9ArLVp0e2uelPpg==', NULL, 0, N'VOQRT3N3DG4O5WQ2SDWIYMXOXM63DX5W', 0, N'feedback+211103-aardwolf-ape-584@app.local', CAST(N'2021-11-03T16:29:52.3094763' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'9afe0d68-e35f-4dde-8f51-9b4330b7e961', 0, N'd6341333-0a13-4ded-8bb6-30157f87172a', N'feedback+211103-ant-butterfly-19@app.local', 0, 1, NULL, N'FEEDBACK+211103-ANT-BUTTERFLY-19@app.local', N'FEEDBACK+211103-ANT-BUTTERFLY-19@app.local', N'AQAAAAEAACcQAAAAEJCJ13v3UAbM6gg2gO8BArmDYW8iY6TOzJQMcBZkivYkY0G6TQl0WH/+IoI6jCW1bA==', NULL, 0, N'3R73AZB554C3GC53S6MWTCNH2KAHOXLP', 0, N'feedback+211103-ant-butterfly-19@app.local', CAST(N'2021-11-03T16:29:52.8464731' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'9b1a323f-4c1c-408d-97a0-6c1e6da9297e', 0, N'3f3ebbc2-7ce3-4b48-8378-acddbf007eb8', N'feedback+211103-barracuda-ant-11@app.local', 0, 1, NULL, N'FEEDBACK+211103-BARRACUDA-ANT-11@app.local', N'FEEDBACK+211103-BARRACUDA-ANT-11@app.local', N'AQAAAAEAACcQAAAAEPSokZoJS07ZDq+g1AZrhQhNC4PTNTnE/L8uGJHLjqZsyacQLLbBvgUJH8/mUPNZQQ==', NULL, 0, N'FSKJGJWTDFDXGO6ERQPEXFT4QCK4I6UC', 0, N'feedback+211103-barracuda-ant-11@app.local', CAST(N'2021-11-03T16:29:53.3829928' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'9b5a5e4a-dac6-4f0d-a3bb-cf89def33581', 0, N'd4477f8e-631f-49b3-8f6d-09eaf10aeb04', N'feedback+211029-antelope-ant-332@app.local', 0, 1, NULL, N'FEEDBACK+211029-ANTELOPE-ANT-332@app.local', N'FEEDBACK+211029-ANTELOPE-ANT-332@app.local', N'AQAAAAEAACcQAAAAENN2kRTzP+3MfJVg77wBXuqix1chpAigSYrxcFNr3Z1hgxiV0c/CPQUZ+wDKzW7wNw==', NULL, 0, N'X3BGIPOUNY2KV757R37ZF6SAZHFK6ZIC', 0, N'feedback+211029-antelope-ant-332@app.local', CAST(N'2021-10-29T15:31:21.5830450' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'9bebb02e-5e57-4476-8b1e-9a71781d14fb', 0, N'84de6c41-f63f-4309-a4e6-47a546ab0d1a', N'feedback+211029-bobcat-barnacle-716@app.local', 0, 1, NULL, N'FEEDBACK+211029-BOBCAT-BARNACLE-716@app.local', N'FEEDBACK+211029-BOBCAT-BARNACLE-716@app.local', N'AQAAAAEAACcQAAAAEESFrL+lkGQ5RkKaTBknL1a6O6TR/2U6dWEd6xU7hUGS8tMKNsSQ+mr3EwCwvCSe0A==', NULL, 0, N'A63FW3G5UMNQ5MVZYYOWWF37DEAZSUV2', 0, N'feedback+211029-bobcat-barnacle-716@app.local', CAST(N'2021-10-29T15:31:21.4953844' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'9deae8d6-fbf0-4186-8418-4e17f8ff5c9b', 0, N'e2d2d141-eae6-447d-9c19-9bd666d28528', N'feedback+200917-armadillo-bee464@app.local', 0, 1, NULL, N'FEEDBACK+200917-ARMADILLO-BEE464@app.local', N'FEEDBACK+200917-ARMADILLO-BEE464@app.local', N'AQAAAAEAACcQAAAAEID0eUuWBINols1UckUWsW83qNDz4fR0MzHDKqJF7XlH58ujIlXtSkhPXc3mpBslvg==', NULL, 0, N'POQXNBPJIVFPB2TGLYRCLKHII7C6H5GA', 0, N'feedback+200917-armadillo-bee464@app.local', CAST(N'2020-09-17T08:43:44.2489211' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'9f117803-dfaf-4a0a-bc67-e5300bacc9e0', 0, N'b50f1d8d-cacd-40a5-ba07-8a63be915989', N'feedback+211029-bass-alpaca-266@app.local', 0, 1, NULL, N'FEEDBACK+211029-BASS-ALPACA-266@app.local', N'FEEDBACK+211029-BASS-ALPACA-266@app.local', N'AQAAAAEAACcQAAAAEEFdgDyDPWuCNh0aXamwWD4VYorSZaMlXToEkTWADnckhjuwhqwHCKp9rFs+5yjCww==', NULL, 0, N'VLMNWFR3S47IKNWNMKQE3FKJBWMSTL4X', 0, N'feedback+211029-bass-alpaca-266@app.local', CAST(N'2021-10-29T15:31:20.4805267' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a127b899-acb7-41c0-a093-bb9318149962', 0, N'b66a9270-0979-4d8e-8cec-8c62aa12e286', N'feedback+201021-ape-beaver-906@app.local', 0, 1, NULL, N'FEEDBACK+201021-APE-BEAVER-906@app.local', N'FEEDBACK+201021-APE-BEAVER-906@app.local', N'AQAAAAEAACcQAAAAEC0FIJHTrRXIWvhZDiUZ4Yzvkl0mkCjQv0uUotQYiQ4gchFRN2YB/7VeR1ZvZhSxhg==', NULL, 0, N'PHCGXRFMTPHC3IANZ6OGSBKFPEIXKBW2', 0, N'feedback+201021-ape-beaver-906@app.local', CAST(N'2020-10-21T15:16:11.4094559' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a142f1a0-7897-47bf-9781-a7aabeed889a', 0, N'4eee3841-725f-492d-813d-306699b6deae', N'feedback+210714-beaver-anglerfish-467@app.local', 0, 1, NULL, N'FEEDBACK+210714-BEAVER-ANGLERFISH-467@app.local', N'FEEDBACK+210714-BEAVER-ANGLERFISH-467@app.local', N'AQAAAAEAACcQAAAAELDPrL4+eRMRRslyTSPMVpkynk1c7bEZ4FOMOByfzuVNxmsyuHMoaN5oMQYXjoLcnQ==', NULL, 0, N'BFXEJ3QQEGDUIAG54HL6CIMHCPNTRPJV', 0, N'feedback+210714-beaver-anglerfish-467@app.local', CAST(N'2021-07-14T18:21:57.5179898' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a1e4ff1a-4649-4197-adcb-c4d694b955d8', 0, N'7707ab1c-c6d0-460c-8c0b-3fac15c6471d', N'feedback+201023-aardvark-badger-901@app.local', 0, 1, NULL, N'FEEDBACK+201023-AARDVARK-BADGER-901@app.local', N'FEEDBACK+201023-AARDVARK-BADGER-901@app.local', N'AQAAAAEAACcQAAAAEL1O7me3god6WAnXcALTnA/sA5UX3lUTAgRmyn8ae0ms6dB9IMFaj3WGSksL7wH7Hg==', NULL, 0, N'5LAFBTNNKU2CZIWI2WQG4GSL7RCXIUWV', 0, N'feedback+201023-aardvark-badger-901@app.local', CAST(N'2020-10-23T15:54:25.5788681' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a31406e5-ea27-4400-9dee-e068d8cac3e6', 0, N'c2683b82-1419-4821-b11b-a7e3be0636fd', N'feedback+201021-aardvark-ant-651@app.local', 0, 1, NULL, N'FEEDBACK+201021-AARDVARK-ANT-651@app.local', N'FEEDBACK+201021-AARDVARK-ANT-651@app.local', N'AQAAAAEAACcQAAAAEOte65xCRHxK2erGgeXKJjAduGDdWY9/i92o+OCfKdcktg/Vr9jWFtMPmASqNwaAIQ==', NULL, 0, N'NYRKSR4JDDO3J6WHKSOUT5TIPMUFX3V5', 0, N'feedback+201021-aardvark-ant-651@app.local', CAST(N'2020-10-21T15:16:11.4834116' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a318758a-9f1d-4577-96ff-c71d1d7cf50b', 0, N'e17c67c6-6189-4e54-af2a-a6f300dbb219', N'feedback+211029-bobcat-barracuda-829@app.local', 0, 1, NULL, N'FEEDBACK+211029-BOBCAT-BARRACUDA-829@app.local', N'FEEDBACK+211029-BOBCAT-BARRACUDA-829@app.local', N'AQAAAAEAACcQAAAAEJsPdpDGuTJoQRXvdnsv1n1/+V8WTVGkdSRW8XVbc7O5rGUmwNNevPACD0JuQypV8w==', NULL, 0, N'4C7UD2DP7L77WN6WSKA6Z7EC6QW5CY73', 0, N'feedback+211029-bobcat-barracuda-829@app.local', CAST(N'2021-10-29T15:31:21.8200720' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a3666b18-6ace-4938-b5ff-e579fb393f3f', 0, N'4763d84b-1a5d-41a0-ac68-1c5ae629922d', N'feedback+211103-alpaca-baboon-157@app.local', 0, 1, NULL, N'FEEDBACK+211103-ALPACA-BABOON-157@app.local', N'FEEDBACK+211103-ALPACA-BABOON-157@app.local', N'AQAAAAEAACcQAAAAEP7cn3w4StIE3lRo5yogvVnjWKeRc088ZjdQjNEgOL8ftalt/YHIZYcKq9XIqQnkKA==', NULL, 0, N'FEAWUF5GO5XCM22DWSETBA3HKP2XHV7X', 0, N'feedback+211103-alpaca-baboon-157@app.local', CAST(N'2021-11-03T16:29:53.5328921' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a3f81bad-c889-45b4-9fa6-531dc33462aa', 0, N'9c573fb4-a4b7-4e46-b3c8-246c316c5961', N'feedback+201020-ant-barnacle-480@app.local', 0, 1, NULL, N'FEEDBACK+201020-ANT-BARNACLE-480@app.local', N'FEEDBACK+201020-ANT-BARNACLE-480@app.local', N'AQAAAAEAACcQAAAAELXzVXtCGSzDJg1nxnub1Qgahu26pm88fFKzpjneLZnqX8vmp4yP1riNYK19wUondw==', NULL, 0, N'NM3BQDOT3FUWFNGI3BOUV3VWCQW6J4B4', 0, N'feedback+201020-ant-barnacle-480@app.local', CAST(N'2020-10-20T19:17:01.4151949' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a4d325dd-da09-4f2a-a51c-9af37671e117', 0, N'913f0283-89f6-4ba7-82a4-b127d5e8c090', N'feedback+211029-alpaca-bee-643@app.local', 0, 1, NULL, N'FEEDBACK+211029-ALPACA-BEE-643@app.local', N'FEEDBACK+211029-ALPACA-BEE-643@app.local', N'AQAAAAEAACcQAAAAEPSdxfLPvhn+kT+sabFtox1Rnxgsj0SA903Bjy0EVm1+pXZibpIoA/wUDMH1KjHT0A==', NULL, 0, N'RUOAGUKVRK6RRDIBK7U6VU3KG6543TBE', 0, N'feedback+211029-alpaca-bee-643@app.local', CAST(N'2021-10-29T15:31:20.8329578' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a781d81b-713b-4a99-a714-d6929b6ace49', 0, N'5c97b975-6d61-4b32-b46a-52db67a73c9e', N'feedback+211029-buffalo-baboon-516@app.local', 0, 1, NULL, N'FEEDBACK+211029-BUFFALO-BABOON-516@app.local', N'FEEDBACK+211029-BUFFALO-BABOON-516@app.local', N'AQAAAAEAACcQAAAAEOk9//A86V1D6FUBANE5pbLQjlZfO86H3YuBCr+aS+yqSQYdGjs9YfiMpftbCpBjiA==', NULL, 0, N'POY556MNWSORIVJYHZNQTDUYMZZXXM5F', 0, N'feedback+211029-buffalo-baboon-516@app.local', CAST(N'2021-10-29T15:31:20.4415983' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a7bde187-d082-40b2-b2e0-aff58c7a2256', 0, N'8467b5b0-9ef9-45bf-8f10-461d9e071604', N'feedback+210901-anemone-anemone-503@app.local', 0, 1, NULL, N'FEEDBACK+210901-ANEMONE-ANEMONE-503@app.local', N'FEEDBACK+210901-ANEMONE-ANEMONE-503@app.local', N'AQAAAAEAACcQAAAAEPt0pBsvrUPk00Lo0ozOhXNF+T/St9cGV0ZTFULB7mZij0ehnt91JPzzAtXjgzTPLA==', NULL, 0, N'LMJ6CVVO6VSPMDPON4DWNN3N5QNRG55J', 0, N'feedback+210901-anemone-anemone-503@app.local', CAST(N'2021-09-01T14:48:48.2064662' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'a8176f56-5907-4562-93bb-0941753a708b', 0, N'00dc529b-1293-43bc-8c09-05ce079baf91', N'feedback+211103-ape-aardwolf-181@app.local', 0, 1, NULL, N'FEEDBACK+211103-APE-AARDWOLF-181@app.local', N'FEEDBACK+211103-APE-AARDWOLF-181@app.local', N'AQAAAAEAACcQAAAAEBojs8NPU7Puh/5NwwmRuNj6ya5tO85k2WhOmL24sXyMMQI8z7gr32Xm8K40Ugithw==', NULL, 0, N'T733G3AQV72QSPKCZLDM57R7W6N3LBRQ', 0, N'feedback+211103-ape-aardwolf-181@app.local', CAST(N'2021-11-03T16:29:52.6461690' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'ab83ad3f-cc4c-4497-bd0d-8639624fcc15', 0, N'f9eb3584-acdd-4fb2-8783-dcb27df976d3', N'feedback+211103-armadillo-antelope-221@app.local', 0, 1, NULL, N'FEEDBACK+211103-ARMADILLO-ANTELOPE-221@app.local', N'FEEDBACK+211103-ARMADILLO-ANTELOPE-221@app.local', N'AQAAAAEAACcQAAAAENYCiYi/yDlD+WB+oFc8ptiBmcYjj6XX44ex0L7qw84HB597MPxlkWBXQI/mUFBGAQ==', NULL, 0, N'SVMDYNZ5PRZOBUQSV6X7QAPVHOVFMH3A', 0, N'feedback+211103-armadillo-antelope-221@app.local', CAST(N'2021-11-03T16:29:52.1730223' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'ada8d2a8-3d30-4332-9c6f-2efdf38adc37', 0, N'8ae348d0-8c6b-431a-8d87-5d5f3eb4bad9', N'feedback+201023-alligator-bat-468@app.local', 0, 1, NULL, N'FEEDBACK+201023-ALLIGATOR-BAT-468@app.local', N'FEEDBACK+201023-ALLIGATOR-BAT-468@app.local', N'AQAAAAEAACcQAAAAEJPfnw2qEFKJKkyfLBrWc/7gXlFXcXZDEdTkx40s7Is/fgrT7Q2h8zefHiXP4CnrwA==', NULL, 0, N'R4732TIMJL4XHEA6O5S4DFNBKZA55LLF', 0, N'feedback+201023-alligator-bat-468@app.local', CAST(N'2020-10-23T13:33:43.1637519' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'ae6f55e7-db48-4c35-981a-8cbec93c9b78', 0, N'604c17f9-a470-4905-8bb5-30f0d7580d1c', N'feedback+201021-armadillo-aardvark-998@app.local', 0, 1, NULL, N'FEEDBACK+201021-ARMADILLO-AARDVARK-998@app.local', N'FEEDBACK+201021-ARMADILLO-AARDVARK-998@app.local', N'AQAAAAEAACcQAAAAEKu8wAn1Qg8TdVSVDdJY7QxX4WykKJmlbvL69KvxBdd7p3x/rsKyeaqlIuM9C6KV9Q==', NULL, 0, N'XVIMMECZQ6FB57L7XTM34NI5I2G64TEA', 0, N'feedback+201021-armadillo-aardvark-998@app.local', CAST(N'2020-10-21T15:16:12.0278643' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'aeb1f07b-19b3-4d34-90e9-7822c7a3a0ca', 0, N'db5f3a35-a4ad-44fa-9071-bebec2cf84ac', N'feedback+201021-bear-badger-651@app.local', 0, 1, NULL, N'FEEDBACK+201021-BEAR-BADGER-651@app.local', N'FEEDBACK+201021-BEAR-BADGER-651@app.local', N'AQAAAAEAACcQAAAAEJLteE6av4VKMp+06lJS2SWizWI/VmC96rdIVOI6rRjVXoeEYbT1FG7AL61UJ916Hg==', NULL, 0, N'KVVO7GEQZXITXHDAUMUY3L4DB5QICCL2', 0, N'feedback+201021-bear-badger-651@app.local', CAST(N'2020-10-21T15:16:11.8655059' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'aee119af-a4b3-4b29-913a-b22e7b58c540', 0, N'642c1a77-c666-430a-9a22-3b7fe133c0c2', N'feedback+201023-antelope-bobcat-300@app.local', 0, 1, NULL, N'FEEDBACK+201023-ANTELOPE-BOBCAT-300@app.local', N'FEEDBACK+201023-ANTELOPE-BOBCAT-300@app.local', N'AQAAAAEAACcQAAAAEH3VAgv0uiRULAQJtpfcvnBkmCZQ2uabCw/Dvs1Ym12enHNI2TGSGEvnT7t0B2Ie4g==', NULL, 0, N'R7GKC6I3FGZVZMK35NWLHFGOBRK73D4X', 0, N'feedback+201023-antelope-bobcat-300@app.local', CAST(N'2020-10-23T15:54:25.9139172' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'af71f453-c6b8-42f0-b0b4-6dce3b5847ec', 0, N'503db66e-ca06-4777-a2b0-fe2736bec821', N'feedback+201021-armadillo-ant-53@app.local', 0, 1, NULL, N'FEEDBACK+201021-ARMADILLO-ANT-53@app.local', N'FEEDBACK+201021-ARMADILLO-ANT-53@app.local', N'AQAAAAEAACcQAAAAEDOIo+wWX+zeZ33FtWtwb7ArVR+eFX8/ZbI305xEdt5E3Iksqk0luRDl54YL4WyojA==', NULL, 0, N'XQCKOXAYBBY2NPRGFVBQTQEV4DMZANDT', 0, N'feedback+201021-armadillo-ant-53@app.local', CAST(N'2020-10-21T15:16:12.5842451' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'b2dfcacb-7cf2-4133-9fb7-902dff07c3de', 0, N'c5f3e482-835b-4aaf-8226-b314c26a12b5', N'feedback+211103-anemone-bird-242@app.local', 0, 1, NULL, N'FEEDBACK+211103-ANEMONE-BIRD-242@app.local', N'FEEDBACK+211103-ANEMONE-BIRD-242@app.local', N'AQAAAAEAACcQAAAAEG5fHR2d03mLLDLWHmGxYkCkNwqm6jdDiVUgJqQ9SmU2EFAjqDrjO7TNns3wvhDf3w==', NULL, 0, N'JI3FOMMLMELXZAY7MAZ4QE6LHERHY6QZ', 0, N'feedback+211103-anemone-bird-242@app.local', CAST(N'2021-11-03T16:29:53.3329206' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'b3af3176-eff0-4d3a-a77b-82c123428b9a', 0, N'8a928a88-9928-4387-b505-7d9f79d78cd1', N'feedback+201020-armadillo-boar-47@app.local', 0, 1, NULL, N'FEEDBACK+201020-ARMADILLO-BOAR-47@app.local', N'FEEDBACK+201020-ARMADILLO-BOAR-47@app.local', N'AQAAAAEAACcQAAAAEFJ0Fzpa7hRPVwMmfyKzPHE3Syuh21K7ypwa0ZVcCrRRmhaLBXnJBPTxdMUXXg6JEA==', NULL, 0, N'25BMDX6TZFWN3OYNPVCV2L6NE63VZMRM', 0, N'feedback+201020-armadillo-boar-47@app.local', CAST(N'2020-10-20T19:17:01.3749782' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'b3d2df1c-6287-4e47-9db2-b3ebc01df6e9', 0, N'e1931428-817f-4ef8-8449-b8b333b81e33', N'feedback+211103-bear-barracuda-208@app.local', 0, 1, NULL, N'FEEDBACK+211103-BEAR-BARRACUDA-208@app.local', N'FEEDBACK+211103-BEAR-BARRACUDA-208@app.local', N'AQAAAAEAACcQAAAAEGsIOaIUJlUuPDAu7FdHvPdw5zQ/lzvuh4aI8o/9aNqBXmUtymJUVQ8qPQQ/jaiuZA==', NULL, 0, N'ONMV2S77VD5FYT37Z7535J4L5LXXD2KK', 0, N'feedback+211103-bear-barracuda-208@app.local', CAST(N'2021-11-03T16:29:52.6954487' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'b44839ce-8bad-4bb3-b375-c28c415446f2', 0, N'1b758ae2-9527-45c4-b23c-a2b0f4e2f244', N'feedback+201016-albatross-bison541@app.local', 0, 1, NULL, N'FEEDBACK+201016-ALBATROSS-BISON541@app.local', N'FEEDBACK+201016-ALBATROSS-BISON541@app.local', N'AQAAAAEAACcQAAAAEHcg/PYxUqKMajDO1Jur+aq0v9rfuwW7AJwSqBIuRFi03eQsfL9T8NqSLRiLZn+aHg==', NULL, 0, N'OBWYBCZ6V2LSLOU2C22QTH3M7SLZNTWJ', 0, N'feedback+201016-albatross-bison541@app.local', CAST(N'2020-10-16T12:35:28.3054442' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'b5826b78-f518-46e6-988d-adcd9330ae10', 0, N'520996cd-1d15-4bda-8ef6-e50fc5400fe4', N'feedback+211029-alpaca-bison-855@app.local', 0, 1, NULL, N'FEEDBACK+211029-ALPACA-BISON-855@app.local', N'FEEDBACK+211029-ALPACA-BISON-855@app.local', N'AQAAAAEAACcQAAAAEI7yhmSfG934Ps+XDF+CDAsSpLL9r9sIV/2SqyYGSiY99eoIrFRw0gF7gls049+pOA==', NULL, 0, N'EMQ4DTS464OZBTSHVHGZBEZ252LU3G3A', 0, N'feedback+211029-alpaca-bison-855@app.local', CAST(N'2021-10-29T15:31:20.2408324' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'b71d8e70-eb1c-4b77-866e-fd53b8d64d02', 0, N'831246ea-cbe8-4603-99dd-29bfa41ae6ca', N'feedback+201021-bobcat-antelope-342@app.local', 0, 1, NULL, N'FEEDBACK+201021-BOBCAT-ANTELOPE-342@app.local', N'FEEDBACK+201021-BOBCAT-ANTELOPE-342@app.local', N'AQAAAAEAACcQAAAAEGiH7+3P+ec+KNOUu/KE0Rl99LcXoriaKVPtqWOKseS+yJcjbMSJzYly3HboOaSTYA==', NULL, 0, N'ZKN5ZP42IJWR4YRVO3TRV2QTYDCWSNYV', 0, N'feedback+201021-bobcat-antelope-342@app.local', CAST(N'2020-10-21T15:16:11.9468918' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'b9f79062-28b9-4bde-8f80-9b9d15b328f9', 0, N'af856783-2ab6-4226-b5f0-aea6adc6847f', N'feedback+211029-bass-aardwolf-31@app.local', 0, 1, NULL, N'FEEDBACK+211029-BASS-AARDWOLF-31@app.local', N'FEEDBACK+211029-BASS-AARDWOLF-31@app.local', N'AQAAAAEAACcQAAAAEOU/aO2O26BIT9aAO+uMZzzWKrtjnwB67qSvw1AFbAzOUhBaVX58g1h42mYMfzOhJA==', NULL, 0, N'P6ADKVTZ4OELGNCT4BB5HUFJZYSTGIRL', 0, N'feedback+211029-bass-aardwolf-31@app.local', CAST(N'2021-10-29T15:31:20.2842783' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'bbeec8da-da0e-43bc-a724-ec023a27cbd5', 0, N'4c636ace-1f73-46fe-8bc1-46a78976a896', N'feedback+201023-armadillo-ant-965@app.local', 0, 1, NULL, N'FEEDBACK+201023-ARMADILLO-ANT-965@app.local', N'FEEDBACK+201023-ARMADILLO-ANT-965@app.local', N'AQAAAAEAACcQAAAAEGmrlvr1o8EMb/8Oz2tteIyVF3NUdGavKsHgURHp1lD6bXSToM1MwCzpgsrE32D06Q==', NULL, 0, N'DZIZLQ5E2PZ35O3QCXEJMMOY2MARROST', 0, N'feedback+201023-armadillo-ant-965@app.local', CAST(N'2020-10-23T15:54:25.7617567' AS DateTime2)) +GO +INSERT [dbo].[Users] ([Id], [AccessFailedCount], [ConcurrencyStamp], [Email], [EmailConfirmed], [LockoutEnabled], [LockoutEnd], [NormalizedEmail], [NormalizedUserName], [PasswordHash], [PhoneNumber], [PhoneNumberConfirmed], [SecurityStamp], [TwoFactorEnabled], [UserName], [TimeCreatedUtc]) VALUES (N'bc6bc98b-edf1-406a-829c-4f96ad4edfb7', 0, N'3a475d3e-68da-4fa5-b42d-69e25931c781', N'feedback+211104-antelope-anemone-187@app.local', 0, 1, NULL, N'FEEDBACK+211104-ANTELOPE-ANEMONE-187@app.local', N'FEEDBACK+211104-ANTELOPE-ANEMONE-187@app.local', N'AQAAAAEAACcQAAAAEBjLNqGmYPCLxZG6WCofLa+xFAyCfexMngAswiYFi0SK3p4CGZOKJSydxqYkL5mVxA==', NULL, 0, N'NUVTSPPIULQF7A33VD3KFAXKUHU5LUV7', 0, N'feedback+211104-antelope-anemone-187@app.local', CAST(N'2021-11-04T15:56:10.3880564' AS DateTime2)) +GO + +CREATE TABLE [dbo].[DailyDigests]( + [Id] [int] IDENTITY(1,1) NOT NULL, + [TimeCreatedUtc] [datetime2](7) NOT NULL, + [UserId] [nvarchar](450) NULL, + CONSTRAINT [PK_DailyDigests] PRIMARY KEY CLUSTERED ([Id] ASC) + WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[DailyDigests] ADD DEFAULT (getutcdate()) FOR [TimeCreatedUtc] +GO + +ALTER TABLE [dbo].[DailyDigests] WITH CHECK ADD CONSTRAINT [FK_DailyDigests_Users_UserId] FOREIGN KEY([UserId]) REFERENCES [dbo].[Users] ([Id]) +GO diff --git a/test/EFCore.LibRed.FunctionalTests/Update/LibRedUpdateSqlGeneratorTest.cs b/test/EFCore.LibRed.FunctionalTests/Update/LibRedUpdateSqlGeneratorTest.cs new file mode 100644 index 00000000..47abf276 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Update/LibRedUpdateSqlGeneratorTest.cs @@ -0,0 +1,270 @@ +using EntityFrameworkCore.Jet.Internal; +using EntityFrameworkCore.Jet.Storage.Internal; +using EntityFrameworkCore.Jet.Update.Internal; +using System; +using System.Text; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.Update; +using Xunit; + +// ReSharper disable InconsistentNaming +namespace EntityFrameworkCore.LibRed.FunctionalTests.Update; + +public class LibRedUpdateSqlGeneratorTest : UpdateSqlGeneratorTestBase +{ + protected override IUpdateSqlGenerator CreateSqlGenerator() + => new JetUpdateSqlGenerator( + new UpdateSqlGeneratorDependencies( + new JetSqlGenerationHelper( + new RelationalSqlGenerationHelperDependencies()), + new JetTypeMappingSource( + TestServiceFactory.Instance.Create(), + TestServiceFactory.Instance.Create(), new JetOptions()))); + + protected override TestHelpers TestHelpers + => LibRedTestHelpers.Instance; + + [ConditionalFact] + public void AppendBatchHeader_should_append_SET_NOCOUNT_ON() + { + var sb = new StringBuilder(); + + CreateSqlGenerator().AppendBatchHeader(sb); + + Assert.Equal("", sb.ToString()); + } + + protected override void AppendInsertOperation_for_store_generated_columns_but_no_identity_verification( + StringBuilder stringBuilder) + => AssertBaseline( +""" +INSERT INTO `Ducks` (`Id`, `Name`, `Quacks`, `ConcurrencyToken`) +VALUES (@p0, @p1, @p2, @p3); +SELECT `Computed` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @p0; +""", + stringBuilder.ToString()); + + protected override void AppendInsertOperation_insert_if_store_generated_columns_exist_verification(StringBuilder stringBuilder) + => AssertBaseline( +""" +INSERT INTO `Ducks` (`Name`, `Quacks`, `ConcurrencyToken`) +VALUES (@p0, @p1, @p2); +SELECT `Id`, `Computed` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + stringBuilder.ToString()); + + protected override void AppendInsertOperation_for_only_single_identity_columns_verification( + StringBuilder stringBuilder) + => AssertBaseline( +""" +INSERT INTO `Ducks` +DEFAULT VALUES; +SELECT `Id` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + stringBuilder.ToString()); + + protected override void AppendInsertOperation_for_only_identity_verification(StringBuilder stringBuilder) + => AssertBaseline( +""" +INSERT INTO `Ducks` (`Name`, `Quacks`, `ConcurrencyToken`) +VALUES (@p0, @p1, @p2); +SELECT `Id` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + stringBuilder.ToString()); + + protected override void AppendInsertOperation_for_all_store_generated_columns_verification(StringBuilder stringBuilder) + => AssertBaseline( +""" +INSERT INTO `Ducks` +DEFAULT VALUES; +SELECT `Id`, `Computed` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + stringBuilder.ToString()); + + [ConditionalFact] + public void AppendBulkInsertOperation_appends_merge_if_store_generated_columns_exist() + { + var stringBuilder = new StringBuilder(); + var command = CreateInsertCommand(); + + var sqlGenerator = (IJetUpdateSqlGenerator)CreateSqlGenerator(); + var grouping = sqlGenerator.AppendBulkInsertOperation(stringBuilder, [command, command], 0); + + AssertBaseline( +""" +INSERT INTO `Ducks` (`Name`, `Quacks`, `ConcurrencyToken`) +VALUES (@p0, @p1, @p2); +SELECT `Id`, `Computed` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + +INSERT INTO `Ducks` (`Name`, `Quacks`, `ConcurrencyToken`) +VALUES (@p0, @p1, @p2); +SELECT `Id`, `Computed` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + stringBuilder.ToString()); + // Not IsPositionalResultMappingEnabled: Jet emits an INSERT + SELECT per command rather than a set-based + // MERGE ... OUTPUT, so the result rows carry no position column to correlate back to commands. + Assert.Equal(ResultSetMapping.NotLastInResultSet, grouping); + } + + [ConditionalFact] + public void AppendBulkInsertOperation_appends_insert_if_no_store_generated_columns_exist() + { + var stringBuilder = new StringBuilder(); + var command = CreateInsertCommand(identityKey: false, isComputed: false); + + var sqlGenerator = (IJetUpdateSqlGenerator)CreateSqlGenerator(); + var grouping = sqlGenerator.AppendBulkInsertOperation(stringBuilder, [command, command], 0); + + AssertBaseline( +""" +INSERT INTO `Ducks` (`Id`, `Name`, `Quacks`, `ConcurrencyToken`) +VALUES (@p0, @p1, @p2, @p3); +INSERT INTO `Ducks` (`Id`, `Name`, `Quacks`, `ConcurrencyToken`) +VALUES (@p0, @p1, @p2, @p3); +""", + stringBuilder.ToString()); + Assert.Equal(ResultSetMapping.NoResults, grouping); + } + + [ConditionalFact] + public void AppendBulkInsertOperation_appends_insert_if_store_generated_columns_exist_default_values_only() + { + var stringBuilder = new StringBuilder(); + var command = CreateInsertCommand(identityKey: true, isComputed: true, defaultsOnly: true); + + var sqlGenerator = (IJetUpdateSqlGenerator)CreateSqlGenerator(); + var grouping = sqlGenerator.AppendBulkInsertOperation(stringBuilder, [command, command], 0); + + AssertBaseline( +""" +INSERT INTO `Ducks` +DEFAULT VALUES; +SELECT `Id`, `Computed` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + +INSERT INTO `Ducks` +DEFAULT VALUES; +SELECT `Id`, `Computed` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + stringBuilder.ToString()); + Assert.Equal(ResultSetMapping.NotLastInResultSet, grouping); + } + + [ConditionalFact] + public void AppendBulkInsertOperation_appends_insert_if_no_store_generated_columns_exist_default_values_only() + { + var stringBuilder = new StringBuilder(); + var command = CreateInsertCommand(identityKey: false, isComputed: false, defaultsOnly: true); + + var sqlGenerator = (IJetUpdateSqlGenerator)CreateSqlGenerator(); + var grouping = sqlGenerator.AppendBulkInsertOperation(stringBuilder, [command, command], 0); + + var expectedText = +""" +INSERT INTO `Ducks` +DEFAULT VALUES; +INSERT INTO `Ducks` +DEFAULT VALUES; +"""; + AssertBaseline(expectedText, stringBuilder.ToString()); + Assert.Equal(ResultSetMapping.NoResults, grouping); + } + + protected override void AppendUpdateOperation_for_computed_property_verification(StringBuilder stringBuilder) + => AssertBaseline( +""" +UPDATE `Ducks` SET `Name` = @p0, `Quacks` = @p1, `ConcurrencyToken` = @p2 +WHERE `Id` = @p3; +SELECT `Computed` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @p3; +""", + stringBuilder.ToString()); + + protected override void AppendUpdateOperation_if_store_generated_columns_exist_verification( + StringBuilder stringBuilder) + => AssertBaseline( +""" +UPDATE `Ducks` SET `Name` = @p0, `Quacks` = @p1, `ConcurrencyToken` = @p2 +WHERE `Id` = @p3 AND `ConcurrencyToken` IS NULL; +SELECT `Computed` +FROM `Ducks` +WHERE @@ROWCOUNT = 1 AND `Id` = @p3; +""", + stringBuilder.ToString()); + + protected override void AppendUpdateOperation_if_store_generated_columns_dont_exist_verification( + StringBuilder stringBuilder) + => AssertBaseline( +""" +UPDATE `Ducks` SET `Name` = @p0, `Quacks` = @p1, `ConcurrencyToken` = @p2 +WHERE `Id` = @p3; +SELECT @@ROWCOUNT; +""", + stringBuilder.ToString()); + + protected override void AppendUpdateOperation_appends_where_for_concurrency_token_verification(StringBuilder stringBuilder) + => AssertBaseline( +""" +UPDATE `Ducks` SET `Name` = @p0, `Quacks` = @p1, `ConcurrencyToken` = @p2 +WHERE `Id` = @p3 AND `ConcurrencyToken` IS NULL; +SELECT @@ROWCOUNT; +""", + stringBuilder.ToString()); + + protected override void AppendDeleteOperation_creates_full_delete_command_text_verification(StringBuilder stringBuilder) + => AssertBaseline( +""" +DELETE FROM `Ducks` +WHERE `Id` = @p0; +SELECT @@ROWCOUNT; +""", + stringBuilder.ToString()); + + protected override void AppendDeleteOperation_creates_full_delete_command_text_with_concurrency_check_verification( + StringBuilder stringBuilder) + => AssertBaseline( +""" +DELETE FROM `Ducks` +WHERE `Id` = @p0 AND `ConcurrencyToken` IS NULL; +SELECT @@ROWCOUNT; +""", + stringBuilder.ToString()); + + protected override string RowsAffected + => "@@ROWCOUNT"; + + protected override string Identity + => throw new NotImplementedException(); + + protected override string OpenDelimiter + => "`"; + + protected override string CloseDelimiter + => "`"; + + protected override string Schema + => null!; + + private void AssertBaseline(string expected, string actual) + => Assert.Equal(expected, actual.TrimEnd(), ignoreLineEndingDifferences: true); +} diff --git a/test/EFCore.LibRed.FunctionalTests/Update/MismatchedKeyTypesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Update/MismatchedKeyTypesLibRedTest.cs new file mode 100644 index 00000000..0e415135 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Update/MismatchedKeyTypesLibRedTest.cs @@ -0,0 +1,676 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.ValueGeneration; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Update; + +public class MismatchedKeyTypesLibRedTest(MismatchedKeyTypesLibRedTest.MismatchedKeyTypesLibRedFixture fixture) + : IClassFixture +{ + public MismatchedKeyTypesLibRedFixture Fixture { get; } = fixture; + + [ConditionalFact] // Issue #28392 + public virtual void Can_update_and_delete_with_tinyint_FK_and_smallint_PK() + { + using var context = new MismatchedKeyTypesContext(Fixture); + context.Database.BeginTransaction(); + + var principalEmpty = LoadAndValidateEmpty(); + var principalPopulated = LoadAndValidatePopulated(2); + + Assert.Equal(8, context.ChangeTracker.Entries().Count()); + + principalEmpty.OptionalSingle = new OptionalSingleShortByte(); + principalEmpty.RequiredSingle = new RequiredSingleShortByte(); + principalEmpty.OptionalMany.Add(new OptionalManyShortByte()); + principalEmpty.RequiredMany.Add(new RequiredManyShortByte()); + + principalPopulated.OptionalSingle = null; + principalPopulated.RequiredSingle = null; + principalPopulated.OptionalMany.Clear(); + principalPopulated.RequiredMany.Clear(); + + Assert.Equal(12, context.ChangeTracker.Entries().Count()); + + context.SaveChanges(); + + Assert.Equal(9, context.ChangeTracker.Entries().Count()); + + context.ChangeTracker.Clear(); + + LoadAndValidateEmpty(); + LoadAndValidatePopulated(1); + + Assert.Equal(6, context.ChangeTracker.Entries().Count()); + + Assert.Equal(2, context.Set().ToList().Count); + Assert.Equal(1, context.Set().ToList().Count); + Assert.Equal(3, context.Set().ToList().Count); + Assert.Equal(1, context.Set().ToList().Count); + + Assert.Equal(9, context.ChangeTracker.Entries().Count()); + + PrincipalShortByte LoadAndValidateEmpty() + { + var loaded = Load().Single(e => e.OptionalSingle == null); + + Assert.Null(loaded.OptionalSingle); + Assert.Null(loaded.RequiredSingle); + Assert.Empty(loaded.OptionalMany); + Assert.Empty(loaded.RequiredMany); + + return loaded; + } + + PrincipalShortByte LoadAndValidatePopulated(int expected) + { + var loaded = Load().Single(e => e.OptionalSingle != null); + + Assert.NotNull(loaded.OptionalSingle); + Assert.NotNull(loaded.RequiredSingle); + Assert.Equal(expected, loaded.OptionalMany.Count); + Assert.Equal(expected, loaded.RequiredMany.Count); + + return loaded; + } + + IQueryable Load() + => context.ShortBytes + .Include(e => e.OptionalMany) + .Include(e => e.OptionalSingle) + .Include(e => e.RequiredMany) + .Include(e => e.RequiredSingle); + } + + [ConditionalFact] // Issue #28392 + public virtual void Can_update_and_delete_with_string_FK_and_GUID_PK() + { + using var context = new MismatchedKeyTypesContext(Fixture); + context.Database.BeginTransaction(); + + var principalEmpty = LoadAndValidateEmpty(); + var principalPopulated = LoadAndValidatePopulated(2); + + Assert.Equal(8, context.ChangeTracker.Entries().Count()); + + principalEmpty.OptionalSingle = new OptionalSingleStringGuid(); + principalEmpty.RequiredSingle = new RequiredSingleStringGuid(); + principalEmpty.OptionalMany.Add(new OptionalManyStringGuid()); + principalEmpty.RequiredMany.Add(new RequiredManyStringGuid()); + + principalPopulated.OptionalSingle = null; + principalPopulated.RequiredSingle = null; + principalPopulated.OptionalMany.Clear(); + principalPopulated.RequiredMany.Clear(); + + Assert.Equal(12, context.ChangeTracker.Entries().Count()); + + context.SaveChanges(); + + Assert.Equal(9, context.ChangeTracker.Entries().Count()); + + context.ChangeTracker.Clear(); + + LoadAndValidateEmpty(); + LoadAndValidatePopulated(1); + + Assert.Equal(6, context.ChangeTracker.Entries().Count()); + + Assert.Equal(2, context.Set().ToList().Count); + Assert.Equal(1, context.Set().ToList().Count); + Assert.Equal(3, context.Set().ToList().Count); + Assert.Equal(1, context.Set().ToList().Count); + + Assert.Equal(9, context.ChangeTracker.Entries().Count()); + + PrincipalStringGuid LoadAndValidateEmpty() + { + var loaded = Load().Single(e => e.OptionalSingle == null); + + Assert.Null(loaded.OptionalSingle); + Assert.Null(loaded.RequiredSingle); + Assert.Empty(loaded.OptionalMany); + Assert.Empty(loaded.RequiredMany); + + return loaded; + } + + PrincipalStringGuid LoadAndValidatePopulated(int expected) + { + var loaded = Load().Single(e => e.OptionalSingle != null); + + Assert.NotNull(loaded.OptionalSingle); + Assert.NotNull(loaded.RequiredSingle); + Assert.Equal(expected, loaded.OptionalMany.Count); + Assert.Equal(expected, loaded.RequiredMany.Count); + + return loaded; + } + + IQueryable Load() + => context.StringGuids + .Include(e => e.OptionalMany) + .Include(e => e.OptionalSingle) + .Include(e => e.RequiredMany) + .Include(e => e.RequiredSingle); + } + + [ConditionalFact] // Issue #28392 + public virtual void Can_update_and_delete_composite_keys_mismatched_in_store() + { + using var context = new MismatchedKeyTypesContext(Fixture); + context.Database.BeginTransaction(); + + var principalEmpty = LoadAndValidateEmpty(); + var principalPopulated = LoadAndValidatePopulated(2); + + Assert.Equal(8, context.ChangeTracker.Entries().Count()); + + principalEmpty.OptionalSingle = new OptionalSingleComposite(); + principalEmpty.RequiredSingle = new RequiredSingleComposite(); + principalEmpty.OptionalMany.Add(new OptionalManyComposite()); + principalEmpty.RequiredMany.Add(new RequiredManyComposite()); + + principalPopulated.OptionalSingle = null; + principalPopulated.RequiredSingle = null; + principalPopulated.OptionalMany.Clear(); + principalPopulated.RequiredMany.Clear(); + + Assert.Equal(12, context.ChangeTracker.Entries().Count()); + + context.SaveChanges(); + + Assert.Equal(9, context.ChangeTracker.Entries().Count()); + + context.ChangeTracker.Clear(); + + LoadAndValidateEmpty(); + LoadAndValidatePopulated(1); + + Assert.Equal(6, context.ChangeTracker.Entries().Count()); + + Assert.Equal(2, context.Set().ToList().Count); + Assert.Equal(1, context.Set().ToList().Count); + Assert.Equal(3, context.Set().ToList().Count); + Assert.Equal(1, context.Set().ToList().Count); + + Assert.Equal(9, context.ChangeTracker.Entries().Count()); + + PrincipalComposite LoadAndValidateEmpty() + { + var loaded = Load().Single(e => e.OptionalSingle == null); + + Assert.Null(loaded.OptionalSingle); + Assert.Null(loaded.RequiredSingle); + Assert.Empty(loaded.OptionalMany); + Assert.Empty(loaded.RequiredMany); + + return loaded; + } + + PrincipalComposite LoadAndValidatePopulated(int expected) + { + var loaded = Load().Single(e => e.OptionalSingle != null); + + Assert.NotNull(loaded.OptionalSingle); + Assert.NotNull(loaded.RequiredSingle); + Assert.Equal(expected, loaded.OptionalMany.Count); + Assert.Equal(expected, loaded.RequiredMany.Count); + + return loaded; + } + + IQueryable Load() + => context.Composites + .Include(e => e.OptionalMany) + .Include(e => e.OptionalSingle) + .Include(e => e.RequiredMany) + .Include(e => e.RequiredSingle); + } + + [ConditionalFact] + public virtual void Queries_work_but_SaveChanges_fails_when_composite_keys_incompatible_in_store() + { + using var context = new MismatchedKeyTypesContext(Fixture); + context.Database.BeginTransaction(); + + context.Database.ExecuteSqlRaw( + @"INSERT INTO PrincipalBadComposite (Id1, Id2, Id3) + VALUES (1, '833e6739-6ffb-4901-835c-b46d3f440c47', 1)"); + + context.Database.ExecuteSqlRaw( + @"INSERT INTO OptionalSingleBadComposite (Id, PrincipalId1, PrincipalId2, PrincipalId3) + VALUES (1, 1, '833e6739-6ffb-4901-835c-b46d3f440c47', '4161c5b5-0b6c-4907-8534-2263737843a4')"); + + var principal = context.Set().Single(); + var dependent = context.Set().Single(); + + Assert.Same(dependent, principal.OptionalSingle); + Assert.Same(principal, dependent.Principal); + + context.Entry(dependent).State = EntityState.Modified; + + Assert.Equal( + RelationalStrings.StoredKeyTypesNotConvertable( + nameof(OptionalSingleBadComposite.PrincipalId3), "uniqueidentifier", "integer", nameof(PrincipalBadComposite.Id3)), + Assert.Throws(() => context.SaveChanges()).Message); + } + + [ConditionalFact] + public virtual void Queries_work_but_SaveChanges_fails_when_keys_incompatible_in_store() + { + using var context = new MismatchedKeyTypesContext(Fixture); + context.Database.BeginTransaction(); + + context.Database.ExecuteSqlRaw( + @"INSERT INTO PrincipalBad (Id) + VALUES (1)"); + + context.Database.ExecuteSqlRaw( + @"INSERT INTO OptionalSingleBad (Id, PrincipalId) + VALUES (1, '4161c5b5-0b6c-4907-8534-2263737843a4')"); + + var principal = context.Set().Single(); + var dependent = context.Set().Single(); + + Assert.Same(dependent, principal.OptionalSingle); + Assert.Same(principal, dependent.Principal); + + context.Entry(dependent).State = EntityState.Modified; + + Assert.Equal( + RelationalStrings.StoredKeyTypesNotConvertable( + nameof(OptionalSingleBad.PrincipalId), "uniqueidentifier", "decimal(20,0)", nameof(PrincipalBad.Id)), + Assert.Throws(() => context.SaveChanges()).Message); + } + + protected class MismatchedKeyTypesContextNoFks(MismatchedKeyTypesLibRedFixture fixture) : MismatchedKeyTypesContext(fixture) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(b => + { + b.Ignore(e => e.OptionalSingle); + b.Ignore(e => e.RequiredSingle); + b.Ignore(e => e.OptionalMany); + b.Ignore(e => e.RequiredMany); + }); + + modelBuilder.Entity().Ignore(e => e.Principal); + modelBuilder.Entity().Ignore(e => e.Principal); + modelBuilder.Entity().Ignore(e => e.Principal); + modelBuilder.Entity().Ignore(e => e.Principal); + + modelBuilder.Entity(b => + { + b.Ignore(e => e.OptionalSingle); + b.Ignore(e => e.RequiredSingle); + b.Ignore(e => e.OptionalMany); + b.Ignore(e => e.RequiredMany); + }); + + modelBuilder.Entity().Ignore(e => e.Principal); + modelBuilder.Entity().Ignore(e => e.Principal); + modelBuilder.Entity().Ignore(e => e.Principal); + modelBuilder.Entity().Ignore(e => e.Principal); + + modelBuilder.Entity(b => + { + b.Ignore(e => e.OptionalSingle); + b.Ignore(e => e.RequiredSingle); + b.Ignore(e => e.OptionalMany); + b.Ignore(e => e.RequiredMany); + }); + + modelBuilder.Entity().Ignore(e => e.Principal); + modelBuilder.Entity().Ignore(e => e.Principal); + modelBuilder.Entity().Ignore(e => e.Principal); + modelBuilder.Entity().Ignore(e => e.Principal); + + modelBuilder.Entity(b => + { + b.Ignore(e => e.OptionalSingle); + }); + + modelBuilder.Entity().Ignore(e => e.Principal); + + modelBuilder.Entity(b => + { + b.Ignore(e => e.OptionalSingle); + }); + + modelBuilder.Entity().Ignore(e => e.Principal); + + base.OnModelCreating(modelBuilder); + } + } + + protected class MismatchedKeyTypesContext(MismatchedKeyTypesLibRedFixture fixture) : DbContext + { + public MismatchedKeyTypesLibRedFixture Fixture { get; } = fixture; + + public DbSet ShortBytes + => Set(); + + public DbSet StringGuids + => Set(); + + public DbSet Composites + => Set(); + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseLibRed(Fixture.Store.ConnectionString); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity() + .Property(e => e.Id) + .HasColumnType("smallint") + .HasValueGenerator(); + + modelBuilder.Entity() + .HasKey(e => new + { + e.Id1, + e.Id2, + e.Id3 + }); + + modelBuilder.Entity() + .HasKey(e => new + { + e.Id1, + e.Id2, + e.Id3 + }); + + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedNever(); + + modelBuilder.Entity().Property(e => e.PrincipalId).HasColumnType("tinyint"); + modelBuilder.Entity().Property(e => e.PrincipalId).HasColumnType("tinyint"); + modelBuilder.Entity().Property(e => e.PrincipalId).HasColumnType("tinyint"); + modelBuilder.Entity().Property(e => e.PrincipalId).HasColumnType("tinyint"); + modelBuilder.Entity().Property(e => e.PrincipalId).HasColumnType("nvarchar(64)"); + modelBuilder.Entity().Property(e => e.PrincipalId).HasColumnType("nvarchar(64)"); + modelBuilder.Entity().Property(e => e.PrincipalId).HasColumnType("nvarchar(64)"); + modelBuilder.Entity().Property(e => e.PrincipalId).HasColumnType("nvarchar(64)"); + modelBuilder.Entity().Property(e => e.PrincipalId1).HasColumnType("int"); + modelBuilder.Entity().Property(e => e.PrincipalId1).HasColumnType("int"); + modelBuilder.Entity().Property(e => e.PrincipalId1).HasColumnType("int"); + modelBuilder.Entity().Property(e => e.PrincipalId1).HasColumnType("int"); + modelBuilder.Entity().Property(e => e.PrincipalId2).HasColumnType("nvarchar(64)"); + modelBuilder.Entity().Property(e => e.PrincipalId2).HasColumnType("nvarchar(64)"); + modelBuilder.Entity().Property(e => e.PrincipalId2).HasColumnType("nvarchar(64)"); + modelBuilder.Entity().Property(e => e.PrincipalId2).HasColumnType("nvarchar(64)"); + + modelBuilder.Entity(b => + { + b.Property(e => e.Id).ValueGeneratedNever(); + b.Property(e => e.PrincipalId).HasConversion(v => new Guid(), v => 1); + }); + + modelBuilder.Entity(b => + { + b.Property(e => e.Id).ValueGeneratedNever(); + b.Property(e => e.PrincipalId3).HasConversion(v => new Guid(), v => 1); + }); + } + } + + protected class PrincipalShortByte + { + public int Id { get; set; } + + public OptionalSingleShortByte? OptionalSingle { get; set; } + public RequiredSingleShortByte? RequiredSingle { get; set; } + public List OptionalMany { get; } = []; + public List RequiredMany { get; } = []; + } + + protected class OptionalSingleShortByte + { + public int Id { get; set; } + + public PrincipalShortByte? Principal { get; set; } + public int? PrincipalId { get; set; } + } + + protected class RequiredSingleShortByte + { + public Guid Id { get; set; } + + public PrincipalShortByte Principal { get; set; } = null!; + public int PrincipalId { get; set; } + } + + protected class OptionalManyShortByte + { + public int Id { get; set; } + + public PrincipalShortByte? Principal { get; set; } + public int? PrincipalId { get; set; } + } + + protected class RequiredManyShortByte + { + public Guid Id { get; set; } + + public PrincipalShortByte Principal { get; set; } = null!; + public int PrincipalId { get; set; } + } + + protected class PrincipalStringGuid + { + public Guid Id { get; set; } + + public OptionalSingleStringGuid? OptionalSingle { get; set; } + public RequiredSingleStringGuid? RequiredSingle { get; set; } + public List OptionalMany { get; } = []; + public List RequiredMany { get; } = []; + } + + protected class OptionalSingleStringGuid + { + public short Id { get; set; } + + public PrincipalStringGuid? Principal { get; set; } + public Guid? PrincipalId { get; set; } + } + + protected class RequiredSingleStringGuid + { + public short Id { get; set; } + + public PrincipalStringGuid Principal { get; set; } = null!; + public Guid PrincipalId { get; set; } + } + + protected class OptionalManyStringGuid + { + public short Id { get; set; } + + public PrincipalStringGuid? Principal { get; set; } + public Guid? PrincipalId { get; set; } + } + + protected class RequiredManyStringGuid + { + public short Id { get; set; } + + public PrincipalStringGuid Principal { get; set; } = null!; + public Guid PrincipalId { get; set; } + } + + protected class PrincipalComposite + { + public long Id1 { get; set; } + public Guid Id2 { get; set; } + public int Id3 { get; set; } + + public OptionalSingleComposite? OptionalSingle { get; set; } + public RequiredSingleComposite? RequiredSingle { get; set; } + public List OptionalMany { get; } = []; + public List RequiredMany { get; } = []; + } + + protected class OptionalSingleComposite + { + public int Id { get; set; } + + public PrincipalComposite? Principal { get; set; } + public long? PrincipalId1 { get; set; } + public Guid? PrincipalId2 { get; set; } + public int? PrincipalId3 { get; set; } + } + + protected class RequiredSingleComposite + { + public int Id { get; set; } + + public PrincipalComposite Principal { get; set; } = null!; + public long PrincipalId1 { get; set; } + public Guid PrincipalId2 { get; set; } + public int PrincipalId3 { get; set; } + } + + protected class OptionalManyComposite + { + public int Id { get; set; } + + public PrincipalComposite? Principal { get; set; } + public long? PrincipalId1 { get; set; } + public Guid? PrincipalId2 { get; set; } + public int? PrincipalId3 { get; set; } + } + + protected class RequiredManyComposite + { + public int Id { get; set; } + + public PrincipalComposite Principal { get; set; } = null!; + public long PrincipalId1 { get; set; } + public Guid PrincipalId2 { get; set; } + public int PrincipalId3 { get; set; } + } + + protected class PrincipalBad + { + public long Id { get; set; } + + public OptionalSingleBad? OptionalSingle { get; set; } + } + + protected class OptionalSingleBad + { + public int Id { get; set; } + + public PrincipalBad? Principal { get; set; } + public long? PrincipalId { get; set; } + } + + protected class PrincipalBadComposite + { + public long Id1 { get; set; } + public Guid Id2 { get; set; } + public int Id3 { get; set; } + + public OptionalSingleBadComposite? OptionalSingle { get; set; } + } + + protected class OptionalSingleBadComposite + { + public int Id { get; set; } + + public PrincipalBadComposite? Principal { get; set; } + public long? PrincipalId1 { get; set; } + public Guid? PrincipalId2 { get; set; } + public int? PrincipalId3 { get; set; } + } + + public class MismatchedKeyTypesLibRedFixture : IAsyncLifetime + { + public async Task SeedAsync() + { + using var context = new MismatchedKeyTypesContext(this); + + context.AddRange( + new PrincipalShortByte + { + OptionalSingle = new OptionalSingleShortByte(), + RequiredSingle = new RequiredSingleShortByte(), + OptionalMany = { new OptionalManyShortByte(), new OptionalManyShortByte() }, + RequiredMany = { new RequiredManyShortByte(), new RequiredManyShortByte() } + }, + new PrincipalShortByte(), + new PrincipalStringGuid + { + OptionalSingle = new OptionalSingleStringGuid(), + RequiredSingle = new RequiredSingleStringGuid(), + OptionalMany = { new OptionalManyStringGuid(), new OptionalManyStringGuid() }, + RequiredMany = { new RequiredManyStringGuid(), new RequiredManyStringGuid() } + }, + new PrincipalStringGuid(), + new PrincipalComposite + { + Id1 = 1, + Id2 = Guid.NewGuid(), + Id3 = -1, + OptionalSingle = new OptionalSingleComposite(), + RequiredSingle = new RequiredSingleComposite(), + OptionalMany = { new OptionalManyComposite(), new OptionalManyComposite() }, + RequiredMany = { new RequiredManyComposite(), new RequiredManyComposite() } + }, + new PrincipalComposite + { + Id1 = 1, + Id2 = Guid.NewGuid(), + Id3 = -1 + }); + + await context.SaveChangesAsync(); + } + + public LibRedTestStore Store { get; set; } = null!; + + public async Task InitializeAsync() + { + Store = await LibRedTestStore.CreateInitializedAsync("MismatchedKeyTypes"); + + using (var context = new MismatchedKeyTypesContextNoFks(this)) + { + context.Database.EnsureClean(); + } + + await SeedAsync(); + } + + public async Task DisposeAsync() + { + if (Store != null) + { + await Store.DisposeAsync(); + } + } + } + + private class TemporaryByteValueGenerator : ValueGenerator + { + private int _current; + + public override int Next(EntityEntry entry) + => (byte)Interlocked.Decrement(ref _current); + + public override bool GeneratesTemporaryValues + => true; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Update/NonSharedModelUpdatesLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Update/NonSharedModelUpdatesLibRedTest.cs new file mode 100644 index 00000000..e709ece5 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Update/NonSharedModelUpdatesLibRedTest.cs @@ -0,0 +1,151 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.Update; +using Xunit; +#nullable disable +namespace EntityFrameworkCore.LibRed.FunctionalTests.Update; + +public class NonSharedModelUpdatesLibRedTest(NonSharedFixture fixture) : NonSharedModelUpdatesTestBase(fixture) +{ + public override async Task Principal_and_dependent_roundtrips_with_cycle_breaking(bool async) + { + await base.Principal_and_dependent_roundtrips_with_cycle_breaking(async); + + AssertSql( + """ +@p0='AC South' (Size = 255) + +INSERT INTO `AuthorsClub` (`Name`) +VALUES (@p0); +SELECT `Id` +FROM `AuthorsClub` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +@p1='1' +@p2='Alice' (Size = 255) + +INSERT INTO `Author` (`AuthorsClubId`, `Name`) +VALUES (@p1, @p2); +SELECT `Id` +FROM `Author` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +@p3='1' +@p4=NULL (Size = 255) + +INSERT INTO `Book` (`AuthorId`, `Title`) +VALUES (@p3, @p4); +SELECT `Id` +FROM `Book` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`AuthorId`, `b`.`Title`, `a`.`Id`, `a`.`AuthorsClubId`, `a`.`Name` +FROM `Book` AS `b` +INNER JOIN `Author` AS `a` ON `b`.`AuthorId` = `a`.`Id` +""", + // + """ +@p0='AC North' (Size = 255) + +INSERT INTO `AuthorsClub` (`Name`) +VALUES (@p0); +SELECT `Id` +FROM `AuthorsClub` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +@p1='2' +@p2='Author of the year 2023' (Size = 255) + +INSERT INTO `Author` (`AuthorsClubId`, `Name`) +VALUES (@p1, @p2); +SELECT `Id` +FROM `Author` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +@p4='1' +@p3='2' + +UPDATE `Book` SET `AuthorId` = @p3 +WHERE `Id` = @p4; +SELECT @@ROWCOUNT; +""", + // + """ +@p0='1' + +DELETE FROM `Author` +WHERE `Id` = @p0; +SELECT @@ROWCOUNT; +"""); + } + + /*[ConditionalFact] // Issue #29502 + public virtual async Task Bulk_insert_result_set_mapping() + { + var contextFactory = await InitializeAsync( + onModelCreating: mb => + { + mb.Entity().ToTable("Users"); + mb.Entity().ToTable("DailyDigests"); + }, + createTestStore: () => LibRedTestStore.GetOrCreateWithScriptPath( + "Issue29502", + Path.Combine("Update", "Issue29502.sql"), + shared: false)); + + await ExecuteWithStrategyInTransactionAsync( + contextFactory, + async context => + { + var digests = await context.Set() + .OrderBy(u => u.TimeCreatedUtc) + .Take(23) + .Select(u => new DailyDigest { User = u }) + .ToListAsync(); + + foreach (var digest in digests) + { + context.Set().Add(digest); + } + + await context.SaveChangesAsync(); + }); + }*/ + + public class User + { + public string Id { get; set; } = null!; + public DateTime TimeCreatedUtc { get; set; } + public ICollection DailyDigests { get; set; } = null!; + } + + public class DailyDigest + { + public int Id { get; set; } + public User User { get; set; } + } + + private void AssertSql(params string[] expected) + => TestSqlLoggerFactory.AssertBaseline(expected); + + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; +} diff --git a/test/EFCore.LibRed.FunctionalTests/Update/StoreValueGenerationIdentityLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/Update/StoreValueGenerationIdentityLibRedTest.cs new file mode 100644 index 00000000..2f1a9567 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Update/StoreValueGenerationIdentityLibRedTest.cs @@ -0,0 +1,721 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Linq; +using System; +using System.Threading.Tasks; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestModels.StoreValueGenerationModel; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.Update; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Update; + +#nullable enable + +public class StoreValueGenerationIdentityLibRedTest : StoreValueGenerationTestBase< + StoreValueGenerationIdentityLibRedTest.StoreValueGenerationIdentityLibRedFixture> +{ + public StoreValueGenerationIdentityLibRedTest( + StoreValueGenerationIdentityLibRedFixture fixture, + ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + protected override bool ShouldCreateImplicitTransaction( + EntityState firstOperationType, + EntityState? secondOperationType, + GeneratedValues generatedValues, + bool withSameEntityType) + { + if (generatedValues is GeneratedValues.Some or GeneratedValues.All + && firstOperationType is EntityState.Added or EntityState.Modified) + { + //The GeneratedValues.Some table used to use a complex computed column (Data1 = Data2 + 1). This required getting the output when add or modify. + //Since we have overridden it so that we specifiy both Data1 and Data2, the only output is the Id which is only with Add. + //Modify does not require an output and will not have an implicit transaction as long as it is the only operation + //If there is a second operation, then it will require an implicit transaction + return firstOperationType is not EntityState.Modified || generatedValues is not GeneratedValues.Some || secondOperationType is not null; + } + + return secondOperationType is not null; + } + + protected override int ShouldExecuteInNumberOfCommands( + EntityState firstOperationType, + EntityState? secondOperationType, + GeneratedValues generatedValues, + bool withDatabaseGenerated) + => secondOperationType is null ? 1 : 2; + + #region Single operation + + public override async Task Add_with_generated_values(bool async) + { + await base.Add_with_generated_values(async); + + AssertSql( +$""" +@p0='1001' +@p1='1000' + +INSERT INTO `WithSomeDatabaseGenerated` (`Data1`, `Data2`) +VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}); +SELECT `Id` +FROM `WithSomeDatabaseGenerated` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Add_with_no_generated_values(bool async) + { + await base.Add_with_no_generated_values(async); + + AssertSql( +$""" +@p0='100' +@p1='1000' +@p2='1000' + +INSERT INTO `WithNoDatabaseGenerated` (`Id`, `Data1`, `Data2`) +VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}); +"""); + } + + public override async Task Add_with_all_generated_values(bool async) + { + await base.Add_with_all_generated_values(async); + + AssertSql( +""" +INSERT INTO `WithAllDatabaseGenerated` +DEFAULT VALUES; +SELECT `Id`, `Data1`, `Data2` +FROM `WithAllDatabaseGenerated` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Modify_with_generated_values(bool async) + { + await base.Modify_with_generated_values(async); + + AssertSql( + """ +@p2='1' +@p0='1001' +@p1='1000' + +UPDATE `WithSomeDatabaseGenerated` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Modify_with_no_generated_values(bool async) + { + await base.Modify_with_no_generated_values(async); + + AssertSql( + """ +@p2='1' +@p0='1000' +@p1='1000' + +UPDATE `WithNoDatabaseGenerated` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Delete(bool async) + { + await base.Delete(async); + + AssertSql( +$""" +@p0='1' + +DELETE FROM `WithSomeDatabaseGenerated` +WHERE `Id` = {AssertSqlHelper.Parameter("@p0")}; +SELECT @@ROWCOUNT; +"""); + } + + #endregion Single operation + + #region Same two operations with same entity type + + public override async Task Add_Add_with_same_entity_type_and_generated_values(bool async) + { + await base.Add_Add_with_same_entity_type_and_generated_values(async); + + AssertSql( + $""" + @p0='1001' + @p1='1000' + + INSERT INTO `WithSomeDatabaseGenerated` (`Data1`, `Data2`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}); + SELECT `Id` + FROM `WithSomeDatabaseGenerated` + WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + """, + // + $""" + @p0='1002' + @p1='1001' + + INSERT INTO `WithSomeDatabaseGenerated` (`Data1`, `Data2`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}); + SELECT `Id` + FROM `WithSomeDatabaseGenerated` + WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + """); + } + + public override async Task Add_Add_with_same_entity_type_and_no_generated_values(bool async) + { + await base.Add_Add_with_same_entity_type_and_no_generated_values(async); + + AssertSql( +$""" +@p0='100' +@p1='1000' +@p2='1000' + +INSERT INTO `WithNoDatabaseGenerated` (`Id`, `Data1`, `Data2`) +VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}); +""", + // +$""" +@p0='101' +@p1='1001' +@p2='1001' + +INSERT INTO `WithNoDatabaseGenerated` (`Id`, `Data1`, `Data2`) +VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}); +"""); + } + + public override async Task Add_Add_with_same_entity_type_and_all_generated_values(bool async) + { + await base.Add_Add_with_same_entity_type_and_all_generated_values(async); + + AssertSql( +""" +INSERT INTO `WithAllDatabaseGenerated` +DEFAULT VALUES; +SELECT `Id`, `Data1`, `Data2` +FROM `WithAllDatabaseGenerated` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // +""" +INSERT INTO `WithAllDatabaseGenerated` +DEFAULT VALUES; +SELECT `Id`, `Data1`, `Data2` +FROM `WithAllDatabaseGenerated` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Modify_Modify_with_same_entity_type_and_generated_values(bool async) + { + await base.Modify_Modify_with_same_entity_type_and_generated_values(async); + + AssertSql( + """ +@p2='1' +@p0='1001' +@p1='1000' + +UPDATE `WithSomeDatabaseGenerated` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +""", + // + """ +@p2='2' +@p0='1002' +@p1='1001' + +UPDATE `WithSomeDatabaseGenerated` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Modify_Modify_with_same_entity_type_and_no_generated_values(bool async) + { + await base.Modify_Modify_with_same_entity_type_and_no_generated_values(async); + + AssertSql( + """ +@p2='1' +@p0='1000' +@p1='1000' + +UPDATE `WithNoDatabaseGenerated` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +""", + // + """ +@p2='2' +@p0='1001' +@p1='1001' + +UPDATE `WithNoDatabaseGenerated` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Delete_Delete_with_same_entity_type(bool async) + { + await base.Delete_Delete_with_same_entity_type(async); + + AssertSql( +$""" +@p0='1' + +DELETE FROM `WithSomeDatabaseGenerated` +WHERE `Id` = {AssertSqlHelper.Parameter("@p0")}; +SELECT @@ROWCOUNT; +""", + // +$""" +@p0='2' + +DELETE FROM `WithSomeDatabaseGenerated` +WHERE `Id` = {AssertSqlHelper.Parameter("@p0")}; +SELECT @@ROWCOUNT; +"""); + } + + #endregion Same two operations with same entity type + + #region Same two operations with different entity types + + public override async Task Add_Add_with_different_entity_types_and_generated_values(bool async) + { + await base.Add_Add_with_different_entity_types_and_generated_values(async); + + AssertSql( + $""" + @p0='1001' + @p1='1000' + + INSERT INTO `WithSomeDatabaseGenerated` (`Data1`, `Data2`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}); + SELECT `Id` + FROM `WithSomeDatabaseGenerated` + WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + """, + // + $""" + @p0='1002' + @p1='1001' + + INSERT INTO `WithSomeDatabaseGenerated2` (`Data1`, `Data2`) + VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}); + SELECT `Id` + FROM `WithSomeDatabaseGenerated2` + WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; + """); + } + + public override async Task Add_Add_with_different_entity_types_and_no_generated_values(bool async) + { + await base.Add_Add_with_different_entity_types_and_no_generated_values(async); + + AssertSql( +$""" +@p0='100' +@p1='1000' +@p2='1000' + +INSERT INTO `WithNoDatabaseGenerated` (`Id`, `Data1`, `Data2`) +VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}); +""", + // +$""" +@p0='101' +@p1='1001' +@p2='1001' + +INSERT INTO `WithNoDatabaseGenerated2` (`Id`, `Data1`, `Data2`) +VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}, {AssertSqlHelper.Parameter("@p2")}); +"""); + } + + public override async Task Add_Add_with_different_entity_types_and_all_generated_values(bool async) + { + await base.Add_Add_with_different_entity_types_and_all_generated_values(async); + + AssertSql( +""" +INSERT INTO `WithAllDatabaseGenerated` +DEFAULT VALUES; +SELECT `Id`, `Data1`, `Data2` +FROM `WithAllDatabaseGenerated` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // +""" +INSERT INTO `WithAllDatabaseGenerated2` +DEFAULT VALUES; +SELECT `Id`, `Data1`, `Data2` +FROM `WithAllDatabaseGenerated2` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Modify_Modify_with_different_entity_types_and_generated_values(bool async) + { + await base.Modify_Modify_with_different_entity_types_and_generated_values(async); + + AssertSql( + """ +@p2='1' +@p0='1001' +@p1='1000' + +UPDATE `WithSomeDatabaseGenerated` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +""", + // + """ +@p2='2' +@p0='1002' +@p1='1001' + +UPDATE `WithSomeDatabaseGenerated2` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Modify_Modify_with_different_entity_types_and_no_generated_values(bool async) + { + await base.Modify_Modify_with_different_entity_types_and_no_generated_values(async); + + AssertSql( + """ +@p2='1' +@p0='1000' +@p1='1000' + +UPDATE `WithNoDatabaseGenerated` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +""", + // + """ +@p2='2' +@p0='1001' +@p1='1001' + +UPDATE `WithNoDatabaseGenerated2` SET `Data1` = @p0, `Data2` = @p1 +WHERE `Id` = @p2; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Delete_Delete_with_different_entity_types(bool async) + { + await base.Delete_Delete_with_different_entity_types(async); + + AssertSql( +$""" +@p0='1' + +DELETE FROM `WithSomeDatabaseGenerated` +WHERE `Id` = {AssertSqlHelper.Parameter("@p0")}; +SELECT @@ROWCOUNT; +""", + // +$""" +@p0='2' + +DELETE FROM `WithSomeDatabaseGenerated2` +WHERE `Id` = {AssertSqlHelper.Parameter("@p0")}; +SELECT @@ROWCOUNT; +"""); + } + + #endregion Same two operations with different entity types + + #region Different two operations + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public override async Task Delete_Add_with_same_entity_types(bool async) + { + await Test(EntityState.Deleted, EntityState.Added, GeneratedValues.Some, async, withSameEntityType: true); + + AssertSql( +$""" +@p0='1' + +DELETE FROM `WithSomeDatabaseGenerated` +WHERE `Id` = {AssertSqlHelper.Parameter("@p0")}; +SELECT @@ROWCOUNT; +""", + // +$""" +@p0='1002' +@p1='1001' + +INSERT INTO `WithSomeDatabaseGenerated` (`Data1`, `Data2`) +VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}); +SELECT `Id` +FROM `WithSomeDatabaseGenerated` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + #endregion Different two operations + + protected override async Task Test( + EntityState firstOperationType, + EntityState? secondOperationType, + GeneratedValues generatedValues, + bool async, + bool withSameEntityType = true) + { + await using var context = CreateContext(); + + var firstDbSet = generatedValues switch + { + GeneratedValues.Some => context.WithSomeDatabaseGenerated, + GeneratedValues.None => context.WithNoDatabaseGenerated, + GeneratedValues.All => context.WithAllDatabaseGenerated, + _ => throw new ArgumentOutOfRangeException(nameof(generatedValues)) + }; + + var secondDbSet = secondOperationType is null + ? null + : (generatedValues, withSameEntityType) switch + { + (GeneratedValues.Some, true) => context.WithSomeDatabaseGenerated, + (GeneratedValues.Some, false) => context.WithSomeDatabaseGenerated2, + (GeneratedValues.None, true) => context.WithNoDatabaseGenerated, + (GeneratedValues.None, false) => context.WithNoDatabaseGenerated2, + (GeneratedValues.All, true) => context.WithAllDatabaseGenerated, + (GeneratedValues.All, false) => context.WithAllDatabaseGenerated2, + _ => throw new ArgumentOutOfRangeException(nameof(generatedValues)) + }; + + StoreValueGenerationData first; + StoreValueGenerationData? second; + + switch (firstOperationType) + { + case EntityState.Added: + switch (generatedValues) + { + case GeneratedValues.Some: + first = new StoreValueGenerationData { Data2 = 1000 }; + first.Data1 = first.Data2 + 1; + firstDbSet.Add(first); + break; + case GeneratedValues.None: + first = new StoreValueGenerationData + { + Id = 100, + Data1 = 1000, + Data2 = 1000 + }; + firstDbSet.Add(first); + break; + case GeneratedValues.All: + first = new StoreValueGenerationData(); + firstDbSet.Add(first); + break; + default: + throw new ArgumentOutOfRangeException(nameof(generatedValues)); + } + + break; + + case EntityState.Modified: + switch (generatedValues) + { + case GeneratedValues.Some: + first = firstDbSet.OrderBy(w => w.Id).First(); + first.Data2 = 1000; + first.Data1 = first.Data2 + 1; + break; + case GeneratedValues.None: + first = firstDbSet.OrderBy(w => w.Id).First(); + (first.Data1, first.Data2) = (1000, 1000); + break; + default: + throw new ArgumentOutOfRangeException(nameof(generatedValues)); + } + + break; + + case EntityState.Deleted: + switch (generatedValues) + { + case GeneratedValues.Some: + first = firstDbSet.OrderBy(w => w.Id).First(); + context.Remove(first); + break; + case GeneratedValues.None: + first = firstDbSet.OrderBy(w => w.Id).First(); + context.Remove(first); + break; + default: + throw new ArgumentOutOfRangeException(nameof(generatedValues)); + } + + break; + + default: + throw new ArgumentOutOfRangeException(nameof(firstOperationType)); + } + + switch (secondOperationType) + { + case EntityState.Added: + switch (generatedValues) + { + case GeneratedValues.Some: + second = new StoreValueGenerationData { Data2 = 1001 }; + second.Data1 = second.Data2 + 1; + secondDbSet!.Add(second); + break; + case GeneratedValues.None: + second = new StoreValueGenerationData + { + Id = 101, + Data1 = 1001, + Data2 = 1001 + }; + secondDbSet!.Add(second); + break; + case GeneratedValues.All: + second = new StoreValueGenerationData(); + secondDbSet!.Add(second); + break; + default: + throw new ArgumentOutOfRangeException(nameof(generatedValues)); + } + + break; + + case EntityState.Modified: + switch (generatedValues) + { + case GeneratedValues.Some: + second = secondDbSet!.OrderBy(w => w.Id).Skip(1).First(); + second.Data2 = 1001; + second.Data1 = second.Data2 + 1; + break; + case GeneratedValues.None: + second = secondDbSet!.OrderBy(w => w.Id).Skip(1).First(); + (second.Data1, second.Data2) = (1001, 1001); + break; + default: + throw new ArgumentOutOfRangeException(nameof(generatedValues)); + } + + break; + + case EntityState.Deleted: + switch (generatedValues) + { + case GeneratedValues.Some: + second = secondDbSet!.OrderBy(w => w.Id).Skip(1).First(); + context.Remove(second); + break; + case GeneratedValues.None: + second = secondDbSet!.OrderBy(w => w.Id).Skip(1).First(); + context.Remove(second); + break; + default: + throw new ArgumentOutOfRangeException(nameof(generatedValues)); + } + + break; + + case null: + second = null; + break; + + default: + throw new ArgumentOutOfRangeException(nameof(firstOperationType)); + } + + // Execute + Fixture.ListLoggerFactory.Clear(); + + if (async) + { + await context.SaveChangesAsync(); + } + else + { + context.SaveChanges(); + } + + // Make sure a transaction was created (or not) + if (ShouldCreateImplicitTransaction(firstOperationType, secondOperationType, generatedValues, withSameEntityType)) + { + Assert.Contains(Fixture.ListLoggerFactory.Log, l => l.Id == RelationalEventId.TransactionStarted); + Assert.Contains(Fixture.ListLoggerFactory.Log, l => l.Id == RelationalEventId.TransactionCommitted); + } + else + { + Assert.DoesNotContain(Fixture.ListLoggerFactory.Log, l => l.Id == RelationalEventId.TransactionStarted); + Assert.DoesNotContain(Fixture.ListLoggerFactory.Log, l => l.Id == RelationalEventId.TransactionCommitted); + } + + // Make sure the updates executed in the expected number of commands + Assert.Equal( + ShouldExecuteInNumberOfCommands(firstOperationType, secondOperationType, generatedValues, withSameEntityType), + Fixture.ListLoggerFactory.Log.Count(l => l.Id == RelationalEventId.CommandExecuted)); + + // To make sure generated values have been propagated, re-load the rows from the database and compare + context.ChangeTracker.Clear(); + + using (Fixture.TestSqlLoggerFactory.SuspendRecordingEvents()) + { + if (firstOperationType != EntityState.Deleted) + { + Assert.Equal(await firstDbSet.FindAsync(first.Id), first); + } + + if (second is not null && secondOperationType != EntityState.Deleted) + { + Assert.Equal(await secondDbSet!.FindAsync(second.Id), second); + } + } + + if (!ShouldCreateImplicitTransaction(firstOperationType, secondOperationType, generatedValues, withSameEntityType)) + { + //Assert.Contains("SET IMPLICIT_TRANSACTIONS OFF", Fixture.TestSqlLoggerFactory.SqlStatements[0]); + } + } + + public class StoreValueGenerationIdentityLibRedFixture : StoreValueGenerationLibRedFixtureBase + { + protected override string StoreName + => "StoreValueGenerationIdentityTest"; + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/Update/StoreValueGenerationLibRedFixtureBase.cs b/test/EFCore.LibRed.FunctionalTests/Update/StoreValueGenerationLibRedFixtureBase.cs new file mode 100644 index 00000000..08849231 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/Update/StoreValueGenerationLibRedFixtureBase.cs @@ -0,0 +1,62 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Linq; +using System.Text; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestModels.StoreValueGenerationModel; +using Microsoft.EntityFrameworkCore.Update; + +namespace EntityFrameworkCore.LibRed.FunctionalTests.Update; + +#nullable enable + +public abstract class StoreValueGenerationLibRedFixtureBase : StoreValueGenerationFixtureBase +{ + private string? _cleanDataSql; + + public override void CleanData() + { + using var context = CreateContext(); + context.Database.ExecuteSqlRaw(_cleanDataSql ??= GetCleanDataSql()); + } + + private string GetCleanDataSql() + { + var context = CreateContext(); + var builder = new StringBuilder(); + + var helper = context.GetService(); + var tables = context.Model.GetEntityTypes() + .SelectMany(e => e.GetTableMappings().Select(m => helper.DelimitIdentifier(m.Table.Name, m.Table.Schema))); + + foreach (var table in tables) + { + builder.AppendLine($"DELETE * FROM {table};"); + if (!table.Contains("WithNoDatabaseGenerated")) + { + builder.AppendLine($"ALTER TABLE {table} ALTER COLUMN `Id` COUNTER(1,1);"); + } + } + + return builder.ToString(); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + foreach (var name in new[] + { + nameof(StoreValueGenerationContext.WithSomeDatabaseGenerated), + nameof(StoreValueGenerationContext.WithSomeDatabaseGenerated2) + }) + { + modelBuilder + .SharedTypeEntity(name) + .Property(w => w.Data1) + .HasComputedColumnSql(null); + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/ValueConvertersEndToEndLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/ValueConvertersEndToEndLibRedTest.cs new file mode 100644 index 00000000..d1ead771 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/ValueConvertersEndToEndLibRedTest.cs @@ -0,0 +1,234 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#nullable enable + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.NetworkInformation; +using System.Net; +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests; + +public class ValueConvertersEndToEndLibRedTest(ValueConvertersEndToEndLibRedTest.ValueConvertersEndToEndLibRedFixture fixture) + : ValueConvertersEndToEndTestBase(fixture) +{ + [ConditionalTheory] + [InlineData(nameof(ConvertingEntity.BoolAsChar), "varchar(1)", false)] + [InlineData(nameof(ConvertingEntity.BoolAsNullableChar), "varchar(1)", false)] + [InlineData(nameof(ConvertingEntity.BoolAsString), "varchar(3)", false)] + [InlineData(nameof(ConvertingEntity.BoolAsInt), "integer", false)] + [InlineData(nameof(ConvertingEntity.BoolAsNullableString), "varchar(3)", false)] + [InlineData(nameof(ConvertingEntity.BoolAsNullableInt), "integer", false)] + [InlineData(nameof(ConvertingEntity.IntAsLong), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.IntAsNullableLong), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.BytesAsString), "varchar(255)", false)] + [InlineData(nameof(ConvertingEntity.BytesAsNullableString), "varchar(255)", false)] + [InlineData(nameof(ConvertingEntity.CharAsString), "varchar(1)", false)] + [InlineData(nameof(ConvertingEntity.CharAsNullableString), "varchar(1)", false)] + [InlineData(nameof(ConvertingEntity.DateTimeOffsetToBinary), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.DateTimeOffsetToNullableBinary), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.DateTimeOffsetToString), "varchar(48)", false)] + [InlineData(nameof(ConvertingEntity.DateTimeOffsetToNullableString), "varchar(48)", false)] + [InlineData(nameof(ConvertingEntity.DateTimeToBinary), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.DateTimeToNullableBinary), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.DateTimeToString), "varchar(48)", false)] + [InlineData(nameof(ConvertingEntity.DateTimeToNullableString), "varchar(48)", false)] + [InlineData(nameof(ConvertingEntity.EnumToString), "varchar(255)", false)] + [InlineData(nameof(ConvertingEntity.EnumToNullableString), "varchar(255)", false)] + [InlineData(nameof(ConvertingEntity.EnumToNumber), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.EnumToNullableNumber), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.GuidToString), "varchar(36)", false)] + [InlineData(nameof(ConvertingEntity.GuidToNullableString), "varchar(36)", false)] + [InlineData(nameof(ConvertingEntity.GuidToBytes), "varbinary(16)", false)] + [InlineData(nameof(ConvertingEntity.GuidToNullableBytes), "varbinary(16)", false)] + [InlineData(nameof(ConvertingEntity.IPAddressToString), "varchar(45)", false)] + [InlineData(nameof(ConvertingEntity.IPAddressToNullableString), "varchar(45)", false)] + [InlineData(nameof(ConvertingEntity.IPAddressToBytes), "varbinary(16)", false)] + [InlineData(nameof(ConvertingEntity.IPAddressToNullableBytes), "varbinary(16)", false)] + [InlineData(nameof(ConvertingEntity.PhysicalAddressToString), "varchar(20)", false)] + [InlineData(nameof(ConvertingEntity.PhysicalAddressToNullableString), "varchar(20)", false)] + [InlineData(nameof(ConvertingEntity.PhysicalAddressToBytes), "varbinary(8)", false)] + [InlineData(nameof(ConvertingEntity.PhysicalAddressToNullableBytes), "varbinary(8)", false)] + [InlineData(nameof(ConvertingEntity.NumberToString), "varchar(64)", false)] + [InlineData(nameof(ConvertingEntity.NumberToNullableString), "varchar(64)", false)] + [InlineData(nameof(ConvertingEntity.NumberToBytes), "varbinary(1)", false)] + [InlineData(nameof(ConvertingEntity.NumberToNullableBytes), "varbinary(1)", false)] + [InlineData(nameof(ConvertingEntity.StringToBool), "smallint", false)] + [InlineData(nameof(ConvertingEntity.StringToNullableBool), "smallint", false)] + [InlineData(nameof(ConvertingEntity.StringToBytes), "longbinary", false)] + [InlineData(nameof(ConvertingEntity.StringToNullableBytes), "longbinary", false)] + [InlineData(nameof(ConvertingEntity.StringToChar), "varchar(1)", false)] + [InlineData(nameof(ConvertingEntity.StringToNullableChar), "varchar(1)", false)] + [InlineData(nameof(ConvertingEntity.StringToDateTime), "datetime", false)] + [InlineData(nameof(ConvertingEntity.StringToNullableDateTime), "datetime", false)] + //[InlineData(nameof(ConvertingEntity.StringToDateTimeOffset), "datetime", false)] + //[InlineData(nameof(ConvertingEntity.StringToNullableDateTimeOffset), "datetime", false)] + [InlineData(nameof(ConvertingEntity.StringToEnum), "integer", false)] + [InlineData(nameof(ConvertingEntity.StringToNullableEnum), "integer", false)] + [InlineData(nameof(ConvertingEntity.StringToGuid), "uniqueidentifier", false)] + [InlineData(nameof(ConvertingEntity.StringToNullableGuid), "uniqueidentifier", false)] + [InlineData(nameof(ConvertingEntity.StringToNumber), "byte", false)] + [InlineData(nameof(ConvertingEntity.StringToNullableNumber), "byte", false)] + [InlineData(nameof(ConvertingEntity.StringToTimeSpan), "datetime", false)] + [InlineData(nameof(ConvertingEntity.StringToNullableTimeSpan), "datetime", false)] + [InlineData(nameof(ConvertingEntity.TimeSpanToTicks), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.TimeSpanToNullableTicks), "decimal(20,0)", false)] + [InlineData(nameof(ConvertingEntity.TimeSpanToString), "varchar(48)", false)] + [InlineData(nameof(ConvertingEntity.TimeSpanToNullableString), "varchar(48)", false)] + [InlineData(nameof(ConvertingEntity.UriToString), "varchar(255)", false)] + [InlineData(nameof(ConvertingEntity.UriToNullableString), "varchar(255)", false)] + [InlineData(nameof(ConvertingEntity.NullableCharAsString), "varchar(1)", true)] + [InlineData(nameof(ConvertingEntity.NullableCharAsNullableString), "varchar(1)", true)] + [InlineData(nameof(ConvertingEntity.NullableBoolAsChar), "varchar(1)", true)] + [InlineData(nameof(ConvertingEntity.NullableBoolAsNullableChar), "varchar(1)", true)] + [InlineData(nameof(ConvertingEntity.NullableBoolAsString), "varchar(3)", true)] + [InlineData(nameof(ConvertingEntity.NullableBoolAsNullableString), "varchar(3)", true)] + [InlineData(nameof(ConvertingEntity.NullableBoolAsInt), "integer", true)] + [InlineData(nameof(ConvertingEntity.NullableBoolAsNullableInt), "integer", true)] + [InlineData(nameof(ConvertingEntity.NullableIntAsLong), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableIntAsNullableLong), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableBytesAsString), "varchar(255)", true)] + [InlineData(nameof(ConvertingEntity.NullableBytesAsNullableString), "varchar(255)", true)] + [InlineData(nameof(ConvertingEntity.NullableDateTimeOffsetToBinary), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableDateTimeOffsetToNullableBinary), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableDateTimeOffsetToString), "varchar(48)", true)] + [InlineData(nameof(ConvertingEntity.NullableDateTimeOffsetToNullableString), "varchar(48)", true)] + [InlineData(nameof(ConvertingEntity.NullableDateTimeToBinary), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableDateTimeToNullableBinary), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableDateTimeToString), "varchar(48)", true)] + [InlineData(nameof(ConvertingEntity.NullableDateTimeToNullableString), "varchar(48)", true)] + [InlineData(nameof(ConvertingEntity.NullableEnumToString), "varchar(255)", true)] + [InlineData(nameof(ConvertingEntity.NullableEnumToNullableString), "varchar(255)", true)] + [InlineData(nameof(ConvertingEntity.NullableEnumToNumber), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableEnumToNullableNumber), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableGuidToString), "varchar(36)", true)] + [InlineData(nameof(ConvertingEntity.NullableGuidToNullableString), "varchar(36)", true)] + [InlineData(nameof(ConvertingEntity.NullableGuidToBytes), "varbinary(16)", true)] + [InlineData(nameof(ConvertingEntity.NullableGuidToNullableBytes), "varbinary(16)", true)] + [InlineData(nameof(ConvertingEntity.NullableIPAddressToString), "varchar(45)", true)] + [InlineData(nameof(ConvertingEntity.NullableIPAddressToNullableString), "varchar(45)", true)] + [InlineData(nameof(ConvertingEntity.NullableIPAddressToBytes), "varbinary(16)", true)] + [InlineData(nameof(ConvertingEntity.NullableIPAddressToNullableBytes), "varbinary(16)", true)] + [InlineData(nameof(ConvertingEntity.NullablePhysicalAddressToString), "varchar(20)", true)] + [InlineData(nameof(ConvertingEntity.NullablePhysicalAddressToNullableString), "varchar(20)", true)] + [InlineData(nameof(ConvertingEntity.NullablePhysicalAddressToBytes), "varbinary(8)", true)] + [InlineData(nameof(ConvertingEntity.NullablePhysicalAddressToNullableBytes), "varbinary(8)", true)] + [InlineData(nameof(ConvertingEntity.NullableNumberToString), "varchar(64)", true)] + [InlineData(nameof(ConvertingEntity.NullableNumberToNullableString), "varchar(64)", true)] + [InlineData(nameof(ConvertingEntity.NullableNumberToBytes), "varbinary(1)", true)] + [InlineData(nameof(ConvertingEntity.NullableNumberToNullableBytes), "varbinary(1)", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToBool), "smallint", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToNullableBool), "smallint", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToBytes), "longbinary", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToNullableBytes), "longbinary", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToChar), "varchar(1)", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToNullableChar), "varchar(1)", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToDateTime), "datetime", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToNullableDateTime), "datetime", true)] + //[InlineData(nameof(ConvertingEntity.NullableStringToDateTimeOffset), "datetime", true)] + //[InlineData(nameof(ConvertingEntity.NullableStringToNullableDateTimeOffset), "datetime", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToEnum), "integer", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToNullableEnum), "integer", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToGuid), "uniqueidentifier", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToNullableGuid), "uniqueidentifier", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToNumber), "byte", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToNullableNumber), "byte", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToTimeSpan), "datetime", true)] + [InlineData(nameof(ConvertingEntity.NullableStringToNullableTimeSpan), "datetime", true)] + [InlineData(nameof(ConvertingEntity.NullableTimeSpanToTicks), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableTimeSpanToNullableTicks), "decimal(20,0)", true)] + [InlineData(nameof(ConvertingEntity.NullableTimeSpanToString), "varchar(48)", true)] + [InlineData(nameof(ConvertingEntity.NullableTimeSpanToNullableString), "varchar(48)", true)] + [InlineData(nameof(ConvertingEntity.NullableUriToString), "varchar(255)", true)] + [InlineData(nameof(ConvertingEntity.NullableUriToNullableString), "varchar(255)", true)] + [InlineData(nameof(ConvertingEntity.NullStringToNonNullString), "varchar(255)", false)] + [InlineData(nameof(ConvertingEntity.NonNullStringToNullString), "varchar(255)", true)] + [InlineData(nameof(ConvertingEntity.NullableListOfInt), "varchar(255)", true)] + [InlineData(nameof(ConvertingEntity.ListOfInt), "varchar(255)", false)] + public virtual void Properties_with_conversions_map_to_appropriately_null_columns( + string propertyName, + string databaseType, + bool isNullable) + { + using var context = CreateContext(); + + var property = context.Model.FindEntityType(typeof(ConvertingEntity))!.FindProperty(propertyName); + + Assert.Equal(databaseType, property!.GetColumnType()); + Assert.Equal(isNullable, property!.IsNullable); + } + + /*[ConditionalFact] + public virtual void Can_use_custom_converters_without_property() + { + Fixture.TestSqlLoggerFactory.Clear(); + + using (var context = CreateContext()) + { + Assert.Empty( + context.Set() + .Where(e => EF.Functions.DataLength((string)(object)new WrappedString { Value = "" }) == 1).ToList()); + } + + Assert.Equal( +""" +SELECT [c].[Id], [c].[BoolAsChar], [c].[BoolAsInt], [c].[BoolAsNullableChar], [c].[BoolAsNullableInt], [c].[BoolAsNullableString], [c].[BoolAsString], [c].[BytesAsNullableString], [c].[BytesAsString], [c].[CharAsNullableString], [c].[CharAsString], [c].[DateTimeOffsetToBinary], [c].[DateTimeOffsetToNullableBinary], [c].[DateTimeOffsetToNullableString], [c].[DateTimeOffsetToString], [c].[DateTimeToBinary], [c].[DateTimeToNullableBinary], [c].[DateTimeToNullableString], [c].[DateTimeToString], [c].[EnumToNullableNumber], [c].[EnumToNullableString], [c].[EnumToNumber], [c].[EnumToString], [c].[EnumerableOfInt], [c].[GuidToBytes], [c].[GuidToNullableBytes], [c].[GuidToNullableString], [c].[GuidToString], [c].[IPAddressToBytes], [c].[IPAddressToNullableBytes], [c].[IPAddressToNullableString], [c].[IPAddressToString], [c].[IntAsLong], [c].[IntAsNullableLong], [c].[ListOfInt], [c].[NonNullIntToNonNullString], [c].[NonNullIntToNullString], [c].[NonNullStringToNullString], [c].[NullIntToNonNullString], [c].[NullIntToNullString], [c].[NullStringToNonNullString], [c].[NullableBoolAsChar], [c].[NullableBoolAsInt], [c].[NullableBoolAsNullableChar], [c].[NullableBoolAsNullableInt], [c].[NullableBoolAsNullableString], [c].[NullableBoolAsString], [c].[NullableBytesAsNullableString], [c].[NullableBytesAsString], [c].[NullableCharAsNullableString], [c].[NullableCharAsString], [c].[NullableDateTimeOffsetToBinary], [c].[NullableDateTimeOffsetToNullableBinary], [c].[NullableDateTimeOffsetToNullableString], [c].[NullableDateTimeOffsetToString], [c].[NullableDateTimeToBinary], [c].[NullableDateTimeToNullableBinary], [c].[NullableDateTimeToNullableString], [c].[NullableDateTimeToString], [c].[NullableEnumToNullableNumber], [c].[NullableEnumToNullableString], [c].[NullableEnumToNumber], [c].[NullableEnumToString], [c].[NullableEnumerableOfInt], [c].[NullableGuidToBytes], [c].[NullableGuidToNullableBytes], [c].[NullableGuidToNullableString], [c].[NullableGuidToString], [c].[NullableIPAddressToBytes], [c].[NullableIPAddressToNullableBytes], [c].[NullableIPAddressToNullableString], [c].[NullableIPAddressToString], [c].[NullableIntAsLong], [c].[NullableIntAsNullableLong], [c].[NullableListOfInt], [c].[NullableNumberToBytes], [c].[NullableNumberToNullableBytes], [c].[NullableNumberToNullableString], [c].[NullableNumberToString], [c].[NullablePhysicalAddressToBytes], [c].[NullablePhysicalAddressToNullableBytes], [c].[NullablePhysicalAddressToNullableString], [c].[NullablePhysicalAddressToString], [c].[NullableStringToBool], [c].[NullableStringToBytes], [c].[NullableStringToChar], [c].[NullableStringToDateTime], [c].[NullableStringToDateTimeOffset], [c].[NullableStringToEnum], [c].[NullableStringToGuid], [c].[NullableStringToNullableBool], [c].[NullableStringToNullableBytes], [c].[NullableStringToNullableChar], [c].[NullableStringToNullableDateTime], [c].[NullableStringToNullableDateTimeOffset], [c].[NullableStringToNullableEnum], [c].[NullableStringToNullableGuid], [c].[NullableStringToNullableNumber], [c].[NullableStringToNullableTimeSpan], [c].[NullableStringToNumber], [c].[NullableStringToTimeSpan], [c].[NullableTimeSpanToNullableString], [c].[NullableTimeSpanToNullableTicks], [c].[NullableTimeSpanToString], [c].[NullableTimeSpanToTicks], [c].[NullableUriToNullableString], [c].[NullableUriToString], [c].[NumberToBytes], [c].[NumberToNullableBytes], [c].[NumberToNullableString], [c].[NumberToString], [c].[PhysicalAddressToBytes], [c].[PhysicalAddressToNullableBytes], [c].[PhysicalAddressToNullableString], [c].[PhysicalAddressToString], [c].[StringToBool], [c].[StringToBytes], [c].[StringToChar], [c].[StringToDateTime], [c].[StringToDateTimeOffset], [c].[StringToEnum], [c].[StringToGuid], [c].[StringToNullableBool], [c].[StringToNullableBytes], [c].[StringToNullableChar], [c].[StringToNullableDateTime], [c].[StringToNullableDateTimeOffset], [c].[StringToNullableEnum], [c].[StringToNullableGuid], [c].[StringToNullableNumber], [c].[StringToNullableTimeSpan], [c].[StringToNumber], [c].[StringToTimeSpan], [c].[TimeSpanToNullableString], [c].[TimeSpanToNullableTicks], [c].[TimeSpanToString], [c].[TimeSpanToTicks], [c].[UriToNullableString], [c].[UriToString] +FROM [ConvertingEntity] AS [c] +WHERE CAST(DATALENGTH(CAST(N'' AS nvarchar(max))) AS int) = 1 +""", + Fixture.TestSqlLoggerFactory.SqlStatements[0], + ignoreLineEndingDifferences: true); + }*/ + + private struct WrappedString + { + public string Value { get; init; } + } + + private class WrappedStringToStringConverter() + : ValueConverter(v => v.Value, v => new WrappedString { Value = v }); + + public class ValueConvertersEndToEndLibRedFixture : ValueConvertersEndToEndFixtureBase + { + protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) + { + base.ConfigureConventions(configurationBuilder); + + configurationBuilder.DefaultTypeMapping().HasConversion(); + } + + protected override ITestStoreFactory TestStoreFactory + => LibRedTestStoreFactory.Instance; + + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity( + b => + { + b.Property(e => e.NullableListOfInt).HasDefaultValue(new List()); + b.Property(e => e.ListOfInt).HasDefaultValue(new List()); + b.Property(e => e.NullableEnumerableOfInt).HasDefaultValue(Enumerable.Empty()); + b.Property(e => e.EnumerableOfInt).HasDefaultValue(Enumerable.Empty()); + + b.Ignore(e => e.StringToDateTimeOffset); + b.Ignore(e => e.StringToNullableDateTimeOffset); + b.Ignore(e => e.NullableStringToDateTimeOffset); + b.Ignore(e => e.NullableStringToNullableDateTimeOffset); + }); + } + } +} + +#nullable restore diff --git a/test/EFCore.LibRed.FunctionalTests/WithConstructorsLibRedTest.cs b/test/EFCore.LibRed.FunctionalTests/WithConstructorsLibRedTest.cs new file mode 100644 index 00000000..07f420bc --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/WithConstructorsLibRedTest.cs @@ -0,0 +1,30 @@ +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using EntityFrameworkCore.LibRed.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.LibRed.FunctionalTests +{ + public class WithConstructorsLibRedTest(WithConstructorsLibRedTest.WithConstructorsLibRedFixture fixture) + : WithConstructorsTestBase(fixture) + { + protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) + => facade.UseTransaction(transaction.GetDbTransaction()); + + public class WithConstructorsLibRedFixture : WithConstructorsFixtureBase + { + protected override ITestStoreFactory TestStoreFactory => LibRedTestStoreFactory.Instance; + + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) + { + base.OnModelCreating(modelBuilder, context); + + modelBuilder.Entity().HasNoKey().ToSqlQuery("SELECT * FROM Blog"); + } + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/config.json b/test/EFCore.LibRed.FunctionalTests/config.json new file mode 100644 index 00000000..472022fb --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/config.json @@ -0,0 +1,7 @@ +{ + "Test": { + "LibRed": { + "DefaultConnection": "Data Source=LibRed.accdb" + } + } +} diff --git a/test/EFCore.LibRed.FunctionalTests/test.runsettings b/test/EFCore.LibRed.FunctionalTests/test.runsettings new file mode 100644 index 00000000..e5200813 --- /dev/null +++ b/test/EFCore.LibRed.FunctionalTests/test.runsettings @@ -0,0 +1,10 @@ + + + + + + + 1 + + + \ No newline at end of file diff --git a/test/LibRed.Ado.Tests/CreateDatabaseDualTableTests.cs b/test/LibRed.Ado.Tests/CreateDatabaseDualTableTests.cs new file mode 100644 index 00000000..0c7362ec --- /dev/null +++ b/test/LibRed.Ado.Tests/CreateDatabaseDualTableTests.cs @@ -0,0 +1,48 @@ +using LibRed.Data; +using Xunit; + +namespace LibRed.Ado.Tests; + +/// +/// A LibRed-created database must contain the single-row #Dual helper table. EFCore.Jet's query generator +/// renders FROM-less scalar queries (All/Any/Count/constant projections) as FROM (SELECT COUNT(*) FROM `#Dual`), +/// so without it those queries fail to bind. The DAO/ADOX creation path created it via EnsureDualTable; native +/// creation (DatabaseCreator.CreateEmpty) must do the same — this guards that it does. +/// +public class CreateDatabaseDualTableTests +{ + [Fact] + public void Native_create_produces_a_queryable_single_row_dual_table() + { + string path = Path.Combine(Path.GetTempPath(), $"libred_dual_{Guid.NewGuid():N}.accdb"); + string cs = $"Data Source={path}"; + try + { + LibRedConnection.CreateDatabase(cs); + + using var conn = new LibRedConnection(cs); + conn.Open(); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM `#Dual`"; + Assert.Equal(1, Convert.ToInt32(cmd.ExecuteScalar())); + } + finally { if (File.Exists(path)) File.Delete(path); } + } + + [Fact] + public void Dual_table_is_hidden_from_user_tables() + { + // The leading '#' keeps #Dual out of the user-table catalog, so EnsureCreated's HasTables() check + // doesn't treat a fresh (schema-less) database as already populated. + string path = Path.Combine(Path.GetTempPath(), $"libred_dual_{Guid.NewGuid():N}.accdb"); + string cs = $"Data Source={path}"; + try + { + LibRedConnection.CreateDatabase(cs); + using var conn = new LibRedConnection(cs); + conn.Open(); + Assert.False(((LibRedConnection)conn).HasUserTables()); + } + finally { if (File.Exists(path)) File.Delete(path); } + } +} diff --git a/test/LibRed.Ado.Tests/LargeUnionAllTests.cs b/test/LibRed.Ado.Tests/LargeUnionAllTests.cs new file mode 100644 index 00000000..7bede3bc --- /dev/null +++ b/test/LibRed.Ado.Tests/LargeUnionAllTests.cs @@ -0,0 +1,45 @@ +using System.Linq; +using LibRed.Data; +using Xunit; + +namespace LibRed.Ado.Tests; + +/// +/// EF's "huge parameter collection" primitive-collection queries render as a UNION ALL with one branch per +/// element (up to 5000). A left-nested set-op tree recurses O(n) deep through the binder/planner/executor and +/// the runtime nested Concat, overflowing the stack (an uncatchable crash that kills the test host). The AST is +/// now built as a balanced tree (O(log n) depth); this guards that a large UNION ALL runs correctly. +/// +public class LargeUnionAllTests +{ + [Theory] + [InlineData(2)] + [InlineData(5000)] + public void Large_union_all_does_not_overflow_and_returns_every_branch(int n) + { + // The query is FROM-less, so isolate it from the suite's shared Northwind fixture. Otherwise parallel + // test deployment/copying can transiently hold that file exclusively before this connection opens. + string path = Path.Combine(Path.GetTempPath(), $"libred-union-{Guid.NewGuid():N}.accdb"); + try + { + LibRedConnection.CreateDatabase($"Data Source={path}"); + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + using var cmd = conn.CreateCommand(); + cmd.CommandText = string.Join(" UNION ALL ", Enumerable.Range(1, n).Select(i => $"SELECT {i} AS V")); + + int count = 0; + long sum = 0; + using var reader = cmd.ExecuteReader(); + while (reader.Read()) + { + count++; + sum += Convert.ToInt64(reader.GetValue(0)); + } + + Assert.Equal(n, count); + Assert.Equal((long)n * (n + 1) / 2, sum); // order-preserving concat of 1..n + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Ado.Tests/LibRed.Ado.Tests.csproj b/test/LibRed.Ado.Tests/LibRed.Ado.Tests.csproj new file mode 100644 index 00000000..84a0ac1f --- /dev/null +++ b/test/LibRed.Ado.Tests/LibRed.Ado.Tests.csproj @@ -0,0 +1,38 @@ + + + + $(JetTargetFramework) + LibRed.Ado.Tests + enable + enable + false + true + AnyCPU;x86;x64 + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + Data\Northwind.accdb + PreserveNewest + + + + diff --git a/test/LibRed.Ado.Tests/LibRedCommandTests.cs b/test/LibRed.Ado.Tests/LibRedCommandTests.cs new file mode 100644 index 00000000..b635fe8d --- /dev/null +++ b/test/LibRed.Ado.Tests/LibRedCommandTests.cs @@ -0,0 +1,567 @@ +using System.Data; +using LibRed.Data; +using Xunit; + +namespace LibRed.Ado.Tests; + +public class LibRedCommandTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + private static LibRedConnection OpenConnection() + { + var conn = new LibRedConnection($"Data Source={Northwind}"); + conn.Open(); + return conn; + } + + [Fact] + public void ExecuteReader_projects_rows_and_columns() + { + using var conn = OpenConnection(); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT CustomerID, City FROM Customers WHERE City = 'Berlin'"; + + using var reader = cmd.ExecuteReader(); + Assert.Equal(2, reader.FieldCount); + Assert.Equal("CustomerID", reader.GetName(0)); + + Assert.True(reader.Read()); + Assert.Equal("ALFKI", reader.GetString(0)); + Assert.Equal("Berlin", reader["City"]); + Assert.False(reader.Read()); // only one Berlin customer + } + + [Fact] + public void Named_parameter_flows_from_command_to_engine() + { + using var conn = OpenConnection(); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT CustomerID FROM Customers WHERE City = @city"; + var p = cmd.CreateParameter(); + p.ParameterName = "@city"; + p.Value = "London"; + cmd.Parameters.Add(p); + + int count = 0; + using var reader = cmd.ExecuteReader(); + while (reader.Read()) count++; + Assert.Equal(6, count); + } + + [Fact] + public void Column_metadata_is_available_before_the_first_read() + { + // EF Core's BufferedDataReader reads GetFieldType/GetDataTypeName before any Read(). + using var conn = OpenConnection(); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT ProductID, ProductName FROM Products"; + + using var reader = cmd.ExecuteReader(); + Assert.True(reader.HasRows); + Assert.Equal(2, reader.FieldCount); + Assert.Equal("ProductID", reader.GetName(0)); + Assert.Equal(typeof(int), reader.GetFieldType(0)); // must not throw before Read() + Assert.NotEmpty(reader.GetDataTypeName(1)); + } + + [Fact] + public void DateTime_parameter_is_truncated_to_whole_seconds() + { + // Jet/ACE stores a DateTime only to 1-second resolution. A parameter carrying milliseconds must be + // stripped as early as the command, so the stored value AND a `WHERE d = @p` comparison agree. + string path = Path.Combine(Path.GetTempPath(), $"libred-dt-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + + using (var create = conn.CreateCommand()) + { create.CommandText = "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `D` DATETIME)"; create.ExecuteNonQuery(); } + + var withMs = new DateTime(2020, 1, 2, 3, 4, 5, 678); + var seconds = new DateTime(2020, 1, 2, 3, 4, 5); + + using (var ins = conn.CreateCommand()) + { + ins.CommandText = "INSERT INTO `T` (`Id`, `D`) VALUES (1, @d)"; + var p = ins.CreateParameter(); p.ParameterName = "@d"; p.Value = withMs; ins.Parameters.Add(p); + Assert.Equal(1, ins.ExecuteNonQuery()); + } + + // Stored value has no milliseconds. + using (var sel = conn.CreateCommand()) + { sel.CommandText = "SELECT `D` FROM `T` WHERE `Id` = 1"; Assert.Equal(seconds, (DateTime)sel.ExecuteScalar()!); } + + // A WHERE that reuses the millisecond-bearing parameter still matches the seconds-only row. + using (var q = conn.CreateCommand()) + { + q.CommandText = "SELECT `Id` FROM `T` WHERE `D` = @d"; + var p = q.CreateParameter(); p.ParameterName = "@d"; p.Value = withMs; q.Parameters.Add(p); + Assert.Equal(1, Convert.ToInt32(q.ExecuteScalar())); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void CreateDatabase_creates_a_native_usable_file() + { + // Native, DAO/ADOX-free creation through the ADO surface: create the file, then CREATE/INSERT/SELECT. + string path = Path.Combine(Path.GetTempPath(), $"libred-create-{Guid.NewGuid():N}.accdb"); + try + { + LibRedConnection.CreateDatabase($"Data Source={path}"); + Assert.True(File.Exists(path)); + + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + using (var create = conn.CreateCommand()) + { create.CommandText = "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `Name` TEXT)"; create.ExecuteNonQuery(); } + using (var ins = conn.CreateCommand()) + { ins.CommandText = "INSERT INTO `T` (`Id`, `Name`) VALUES (1, 'Ada')"; Assert.Equal(1, ins.ExecuteNonQuery()); } + using (var sel = conn.CreateCommand()) + { sel.CommandText = "SELECT `Name` FROM `T` WHERE `Id` = 1"; Assert.Equal("Ada", sel.ExecuteScalar()); } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void CreateDatabase_does_not_overwrite_an_existing_file() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-create-existing-{Guid.NewGuid():N}.accdb"); + byte[] original = [0x4C, 0x69, 0x62, 0x52, 0x65, 0x64]; + File.WriteAllBytes(path, original); + try + { + Assert.Throws(() => + LibRedConnection.CreateDatabase($"Data Source={path}")); + Assert.Equal(original, File.ReadAllBytes(path)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void TimeSpan_parameter_round_trips_through_a_datetime_column() + { + // Jet has no TimeSpan type; EF stores it in a datetime column as an offset from 1899-12-30. + // The command must accept a TimeSpan value and the reader must give it back as a TimeSpan. + string path = Path.Combine(Path.GetTempPath(), $"libred-ts-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + + using (var create = conn.CreateCommand()) + { + create.CommandText = "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `Dur` DATETIME)"; + create.ExecuteNonQuery(); + } + using (var insert = conn.CreateCommand()) + { + insert.CommandText = "INSERT INTO `T` (`Id`, `Dur`) VALUES (1, @d)"; + var p = insert.CreateParameter(); + p.ParameterName = "@d"; + p.Value = new TimeSpan(0, 5, 30, 0, 678); // 5h30m0.678s — the milliseconds must be stripped + insert.Parameters.Add(p); + Assert.Equal(1, insert.ExecuteNonQuery()); + } + using (var read = conn.CreateCommand()) + { + read.CommandText = "SELECT `Dur` FROM `T` WHERE `Id` = 1"; + using var reader = read.ExecuteReader(); + Assert.True(reader.Read()); + Assert.Equal(new TimeSpan(5, 30, 0), reader.GetFieldValue(0)); // seconds only + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Table_created_on_one_connection_is_visible_to_a_new_connection() + { + // EF creates the schema and then (after closing) inserts on a fresh connection. A table + // created + committed via one connection must be visible when another opens the same file. + string path = Path.Combine(Path.GetTempPath(), $"libred-xconn-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using (var c1 = new LibRedConnection($"Data Source={path}")) + { + c1.Open(); + using var create = c1.CreateCommand(); + create.CommandText = "CREATE TABLE `Foo` (`Id` INTEGER PRIMARY KEY, `N` TEXT(10))"; + create.ExecuteNonQuery(); + } // c1 disposed → must flush + + using (var c2 = new LibRedConnection($"Data Source={path}")) + { + c2.Open(); + using var insert = c2.CreateCommand(); + insert.CommandText = "INSERT INTO `Foo` (`Id`, `N`) VALUES (1, 'x')"; + Assert.Equal(1, insert.ExecuteNonQuery()); // throws "table not found" if not visible + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void ExecuteReader_runs_an_insert_and_reports_records_affected() + { + // EF Core executes inserts through ExecuteReader and inspects RecordsAffected — so the reader + // path must handle DML, not just queries. + string path = Path.Combine(Path.GetTempPath(), $"libred-ado-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using (var conn = new LibRedConnection($"Data Source={path}")) + { + conn.Open(); + + using (var create = conn.CreateCommand()) + { + create.CommandText = "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `N` TEXT(10))"; + using var cr = create.ExecuteReader(); // DDL via the reader path + Assert.Equal(0, cr.RecordsAffected); + } + using (var insert = conn.CreateCommand()) + { + insert.CommandText = "INSERT INTO `T` (`Id`, `N`) VALUES (@id, @n)"; + var pid = insert.CreateParameter(); pid.ParameterName = "@id"; pid.Value = 1; insert.Parameters.Add(pid); + var pn = insert.CreateParameter(); pn.ParameterName = "@n"; pn.Value = "x"; insert.Parameters.Add(pn); + + using var ir = insert.ExecuteReader(); // the EF path + Assert.Equal(1, ir.RecordsAffected); + Assert.False(ir.Read()); // an insert yields no rows + } + using (var sel = conn.CreateCommand()) + { + sel.CommandText = "SELECT `N` FROM `T` WHERE `Id` = 1"; + Assert.Equal("x", sel.ExecuteScalar()); + } + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Getordinal_getvalues_and_typed_accessors_work_after_read() + { + using var conn = OpenConnection(); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID = @id"; + var p = cmd.CreateParameter(); + p.ParameterName = "@id"; + p.Value = 1; + cmd.Parameters.Add(p); + + using var reader = cmd.ExecuteReader(); + Assert.True(reader.HasRows); + Assert.True(reader.Read()); + + Assert.Equal(0, reader.GetOrdinal("productid")); // case-insensitive lookup + Assert.Equal(1, reader.GetInt32(0)); + Assert.Equal("Chai", reader.GetString(reader.GetOrdinal("ProductName"))); + Assert.Equal(18.0m, reader.GetDecimal(2)); + + object[] values = new object[5]; + Assert.Equal(3, reader.GetValues(values)); + Assert.Equal(1, values[0]); + Assert.Equal("Chai", values[1]); + Assert.Equal(18.0m, Convert.ToDecimal(values[2])); + } + + [Fact] + public void Null_parameter_value_maps_to_sql_null() + { + using var conn = OpenConnection(); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT CustomerID FROM Customers WHERE City = @city"; + var p = cmd.CreateParameter(); + p.ParameterName = "@city"; + p.Value = DBNull.Value; + cmd.Parameters.Add(p); + + using var reader = cmd.ExecuteReader(); + Assert.False(reader.Read()); // City = NULL matches nothing + } + + [Fact] + public void ExecuteScalar_returns_first_column_of_first_row() + { + using var conn = OpenConnection(); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM Orders"; + Assert.Equal(830L, Convert.ToInt64(cmd.ExecuteScalar())); + } + + [Fact] + public void Create_table_and_insert_via_ado_commands() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-ado-ddl-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + + using (var ddl = conn.CreateCommand()) + { + ddl.CommandText = "CREATE TABLE `Thing` (`Id` INTEGER PRIMARY KEY, `Label` TEXT(50))"; + ddl.ExecuteNonQuery(); + } + using (var insert = conn.CreateCommand()) + { + insert.CommandText = "INSERT INTO `Thing` (`Id`, `Label`) VALUES (@id, @label)"; + Add(insert, "@id", 99); + Add(insert, "@label", "widget"); + Assert.Equal(1, insert.ExecuteNonQuery()); + } + using (var select = conn.CreateCommand()) + { + select.CommandText = "SELECT `Label` FROM `Thing` WHERE `Id` = 99"; + Assert.Equal("widget", select.ExecuteScalar()); + } + } + finally { File.Delete(path); } + + static void Add(System.Data.Common.DbCommand cmd, string name, object value) + { + var p = cmd.CreateParameter(); + p.ParameterName = name; + p.Value = value; + cmd.Parameters.Add(p); + } + } + + [Fact] + public void Insert_then_select_batch_reads_the_generated_key_back() + { + // The exact shape EF Core emits to fetch a store-generated key: an INSERT followed, in the SAME + // command, by a guarded SELECT that reads the AutoNumber back via @@ROWCOUNT / @@IDENTITY. The ADO + // layer splits the batch and runs both through one engine so the session variables carry across. + string path = Path.Combine(Path.GetTempPath(), $"libred-ident-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + + using (var ddl = conn.CreateCommand()) + { + ddl.CommandText = "CREATE TABLE `Person` (`Id` counter PRIMARY KEY, `Name` text(50))"; + ddl.ExecuteNonQuery(); + } + + long FirstInsert() + { + using var cmd = conn.CreateCommand(); + cmd.CommandText = + "INSERT INTO `Person` (`Name`)\nVALUES (@p0);\n" + + "SELECT `Id`\nFROM `Person`\nWHERE @@ROWCOUNT = 1 AND `Id` = @@identity;"; + var p = cmd.CreateParameter(); p.ParameterName = "@p0"; p.Value = "Ann"; cmd.Parameters.Add(p); + + using var reader = cmd.ExecuteReader(); + Assert.True(reader.Read()); + long id = Convert.ToInt64(reader.GetValue(0)); + Assert.False(reader.Read()); // exactly one row (Id = @@identity) + return id; + } + + long first = FirstInsert(); + long second = FirstInsert(); + Assert.Equal(1, first); // first AutoNumber + Assert.Equal(2, second); // @@identity advanced with the next insert + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Identity_is_connection_scoped_and_survives_an_insert_into_a_keyless_table() + { + // Unlike SQL Server's table-scoped @@IDENTITY, Jet's is connection-scoped and only changes when an + // insert actually generates an AutoNumber. An intervening insert into a table WITHOUT one must leave + // @@IDENTITY untouched — so the guarded read-back still sees the earlier key. + string path = Path.Combine(Path.GetTempPath(), $"libred-ident2-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + + Exec(conn, "CREATE TABLE `P` (`Id` counter PRIMARY KEY, `Name` text(50))"); + Exec(conn, "CREATE TABLE `Log` (`K` INTEGER PRIMARY KEY, `Msg` text(20))"); + Exec(conn, "INSERT INTO `P` (`Name`) VALUES ('first')"); // @@IDENTITY -> 1 + Exec(conn, "INSERT INTO `Log` (`K`, `Msg`) VALUES (5, 'note')"); // no AutoNumber -> unchanged + + using var q = conn.CreateCommand(); + q.CommandText = "SELECT @@identity"; // bare, FROM-less — still the P insert's id (1) + Assert.Equal(1, Convert.ToInt32(q.ExecuteScalar())); + + static void Exec(LibRedConnection c, string sql) + { using var cmd = c.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Bare_system_variable_select_needs_no_from_clause() + { + // ACE allows `SELECT @@IDENTITY` / `SELECT @@ROWCOUNT` with no FROM; LibRed supports the same + // narrow form (system variables only) without loosening the FROM requirement for ordinary SELECTs. + string path = Path.Combine(Path.GetTempPath(), $"libred-sv-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + + using (var ddl = conn.CreateCommand()) + { ddl.CommandText = "CREATE TABLE `Q` (`Id` counter PRIMARY KEY, `V` INTEGER)"; ddl.ExecuteNonQuery(); } + using (var ins = conn.CreateCommand()) + { ins.CommandText = "INSERT INTO `Q` (`V`) VALUES (7)"; Assert.Equal(1, ins.ExecuteNonQuery()); } + + using (var q = conn.CreateCommand()) + { q.CommandText = "SELECT @@IDENTITY"; Assert.Equal(1, Convert.ToInt32(q.ExecuteScalar())); } + using (var q = conn.CreateCommand()) + { q.CommandText = "SELECT @@ROWCOUNT"; Assert.Equal(1, Convert.ToInt32(q.ExecuteScalar())); } + + // A comma list of both, with aliases, yields one row of two columns. + using (var q = conn.CreateCommand()) + { + q.CommandText = "SELECT @@IDENTITY AS `Id`, @@ROWCOUNT AS `Rows`"; + using var reader = q.ExecuteReader(); + Assert.True(reader.Read()); + Assert.Equal("Id", reader.GetName(0)); + Assert.Equal("Rows", reader.GetName(1)); + Assert.Equal(1, Convert.ToInt32(reader.GetValue(0))); + Assert.Equal(1, Convert.ToInt32(reader.GetValue(1))); + Assert.False(reader.Read()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Theory] + [InlineData("SELECT 1", 1)] + [InlineData("SELECT 1;", 1)] + [InlineData("INSERT INTO T VALUES (1); SELECT Id FROM T", 2)] + [InlineData("SELECT ';'", 1)] // semicolon inside a string literal + [InlineData("SELECT `a;b` FROM T; SELECT 2", 2)] // semicolon inside a backtick identifier + [InlineData("SELECT [a;b] FROM T", 1)] // semicolon inside a bracket identifier + public void SplitStatements_splits_only_on_top_level_semicolons(string sql, int expected) => + Assert.Equal(expected, LibRedCommand.SplitStatements(sql).Count()); + + [Fact] + public void Rolled_back_transaction_undoes_its_writes() + { + // This is what gives EF Core's shared-database tests their isolation: each test runs inside a + // transaction that is rolled back, so its inserts/updates/deletes must vanish. A no-op rollback + // (the old behaviour) leaked rows between tests → "Sequence contains more than one element". + string path = Path.Combine(Path.GetTempPath(), $"libred-txn-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + + using (var ddl = conn.CreateCommand()) + { ddl.CommandText = "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `N` TEXT(10))"; ddl.ExecuteNonQuery(); } + + using (var seed = conn.CreateCommand()) + { seed.CommandText = "INSERT INTO `T` (`Id`, `N`) VALUES (1, 'keep')"; seed.ExecuteNonQuery(); } + + using (var txn = conn.BeginTransaction()) + { + using (var ins = conn.CreateCommand()) + { + ins.Transaction = txn; + ins.CommandText = "INSERT INTO `T` (`Id`, `N`) VALUES (2, 'gone')"; + Assert.Equal(1, ins.ExecuteNonQuery()); + } + Assert.Equal(2L, Count(conn)); // visible inside the transaction (read-your-writes) + txn.Rollback(); + } + + Assert.Equal(1L, Count(conn)); // the uncommitted insert is gone + } + finally { try { File.Delete(path); } catch (IOException) { } } + + static long Count(LibRedConnection c) + { + using var cmd = c.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM `T`"; + return Convert.ToInt64(cmd.ExecuteScalar()); + } + } + + [Fact] + public void Committed_transaction_keeps_its_writes() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-txn-commit-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + + using (var ddl = conn.CreateCommand()) + { ddl.CommandText = "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY)"; ddl.ExecuteNonQuery(); } + + using (var txn = conn.BeginTransaction()) + { + using (var ins = conn.CreateCommand()) + { ins.Transaction = txn; ins.CommandText = "INSERT INTO `T` (`Id`) VALUES (1)"; ins.ExecuteNonQuery(); } + txn.Commit(); + } + + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM `T`"; + Assert.Equal(1L, Convert.ToInt64(cmd.ExecuteScalar())); // survived the commit + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Disposing_an_uncommitted_transaction_rolls_it_back() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-txn-dispose-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + + using (var ddl = conn.CreateCommand()) + { ddl.CommandText = "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY)"; ddl.ExecuteNonQuery(); } + + using (var txn = conn.BeginTransaction()) // no Commit — leaving the block disposes it + { + using var ins = conn.CreateCommand(); + ins.Transaction = txn; + ins.CommandText = "INSERT INTO `T` (`Id`) VALUES (1)"; + ins.ExecuteNonQuery(); + } + + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM `T`"; + Assert.Equal(0L, Convert.ToInt64(cmd.ExecuteScalar())); // implicit rollback on dispose + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Reader_reports_dbnull_for_missing_values() + { + using var conn = OpenConnection(); + using var cmd = conn.CreateCommand(); + // FISSA has no orders; Region is null for plenty of customers. + cmd.CommandText = "SELECT CustomerID, Region FROM Customers WHERE CustomerID = 'ALFKI'"; + using var reader = cmd.ExecuteReader(); + Assert.True(reader.Read()); + Assert.True(reader.IsDBNull(1)); // ALFKI has no Region + Assert.Equal(DBNull.Value, reader.GetValue(1)); + } +} diff --git a/test/LibRed.Ado.Tests/LibRedConnectionTests.cs b/test/LibRed.Ado.Tests/LibRedConnectionTests.cs new file mode 100644 index 00000000..2ef2a281 --- /dev/null +++ b/test/LibRed.Ado.Tests/LibRedConnectionTests.cs @@ -0,0 +1,28 @@ +using LibRed.Data; +using Xunit; + +namespace LibRed.Ado.Tests; + +public class LibRedConnectionTests +{ + [Fact] + public void Quoted_semicolon_in_data_source_is_not_treated_as_a_separator() + { + string path = Path.Combine(Path.GetTempPath(), "libred;quoted.accdb"); + + using var connection = new LibRedConnection($"Data Source=\"{path}\";Mode=Read"); + + Assert.Equal(Path.GetFullPath(path), connection.DataSource); + } + + [Fact] + public void Canonical_data_source_wins_when_aliases_are_mixed() + { + string canonical = Path.Combine(Path.GetTempPath(), "canonical.accdb"); + string alias = Path.Combine(Path.GetTempPath(), "alias.accdb"); + + using var connection = new LibRedConnection($"DBQ={alias};Data Source={canonical}"); + + Assert.Equal(Path.GetFullPath(canonical), connection.DataSource); + } +} diff --git a/test/LibRed.Ado.Tests/LibRedDataReaderMetadataTests.cs b/test/LibRed.Ado.Tests/LibRedDataReaderMetadataTests.cs new file mode 100644 index 00000000..a5d2aa75 --- /dev/null +++ b/test/LibRed.Ado.Tests/LibRedDataReaderMetadataTests.cs @@ -0,0 +1,96 @@ +using LibRed.Data; +using Xunit; + +namespace LibRed.Ado.Tests; + +public class LibRedDataReaderMetadataTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + [Fact] + public void Empty_result_preserves_declared_column_types() + { + using var connection = new LibRedConnection($"Data Source={Northwind}"); + connection.Open(); + using var command = connection.CreateCommand(); + command.CommandText = "SELECT ProductID, ProductName FROM Products WHERE ProductID < 0"; + + using var reader = command.ExecuteReader(); + + Assert.False(reader.HasRows); + Assert.Equal(typeof(int), reader.GetFieldType(0)); + Assert.Equal(typeof(string), reader.GetFieldType(1)); + Assert.Equal(nameof(Int32), reader.GetDataTypeName(0)); + Assert.Equal(nameof(String), reader.GetDataTypeName(1)); + } + + [Fact] + public void First_null_result_preserves_the_declared_column_type() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-metadata-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using var connection = new LibRedConnection($"Data Source={path}"); + connection.Open(); + + using (var command = connection.CreateCommand()) + { + command.CommandText = "CREATE TABLE T (Id LONG PRIMARY KEY, V TEXT(20))"; + command.ExecuteNonQuery(); + command.CommandText = "INSERT INTO T (Id, V) VALUES (1, NULL)"; + command.ExecuteNonQuery(); + command.CommandText = "INSERT INTO T (Id, V) VALUES (2, 'later')"; + command.ExecuteNonQuery(); + command.CommandText = "SELECT V FROM T ORDER BY Id"; + + using var reader = command.ExecuteReader(); + Assert.True(reader.HasRows); + Assert.Equal(typeof(string), reader.GetFieldType(0)); + Assert.Equal(nameof(String), reader.GetDataTypeName(0)); + Assert.True(reader.Read()); + Assert.True(reader.IsDBNull(0)); + Assert.True(reader.Read()); + Assert.Equal("later", reader.GetString(0)); + } + } + finally + { + if (File.Exists(path)) File.Delete(path); + } + } + + [Fact] + public void Empty_computed_projection_reports_known_expression_types() + { + using var connection = new LibRedConnection($"Data Source={Northwind}"); + connection.Open(); + using var command = connection.CreateCommand(); + command.CommandText = "SELECT ProductID + 1 AS NextId, ProductName & '!' AS Label, " + + "ProductID > 0 AS Positive FROM Products WHERE ProductID < 0"; + + using var reader = command.ExecuteReader(); + + Assert.False(reader.HasRows); + Assert.Equal(typeof(int), reader.GetFieldType(0)); + Assert.Equal(typeof(string), reader.GetFieldType(1)); + Assert.Equal(typeof(bool), reader.GetFieldType(2)); + } + + [Fact] + public void Null_aggregate_result_preserves_its_argument_type() + { + using var connection = new LibRedConnection($"Data Source={Northwind}"); + connection.Open(); + using var command = connection.CreateCommand(); + command.CommandText = "SELECT COUNT(*) AS C, SUM(ProductID) AS S FROM Products WHERE ProductID < 0"; + + using var reader = command.ExecuteReader(); + + Assert.Equal(typeof(int), reader.GetFieldType(0)); + Assert.Equal(typeof(int), reader.GetFieldType(1)); + Assert.True(reader.Read()); + Assert.Equal(0, reader.GetInt32(0)); + Assert.True(reader.IsDBNull(1)); + } +} diff --git a/test/LibRed.Ado.Tests/LibRedTransactionTests.cs b/test/LibRed.Ado.Tests/LibRedTransactionTests.cs new file mode 100644 index 00000000..12b8f3bf --- /dev/null +++ b/test/LibRed.Ado.Tests/LibRedTransactionTests.cs @@ -0,0 +1,163 @@ +using System.Data.Common; +using LibRed.Data; +using Xunit; + +namespace LibRed.Ado.Tests; + +public class LibRedTransactionTests +{ + private static string FreshDb() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-txn-{Guid.NewGuid():N}.accdb"); + LibRedConnection.CreateDatabase($"Data Source={path}"); + return path; + } + + private static LibRedConnection OpenWithTable(string path) + { + var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + using var create = conn.CreateCommand(); + create.CommandText = "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY)"; + create.ExecuteNonQuery(); + return conn; + } + + private static void Insert(LibRedConnection conn, DbTransaction? txn, int id) + { + using var c = conn.CreateCommand(); + c.Transaction = txn; + c.CommandText = $"INSERT INTO `T` (`Id`) VALUES ({id})"; + c.ExecuteNonQuery(); + } + + private static int Count(LibRedConnection conn) + { + using var c = conn.CreateCommand(); + c.CommandText = "SELECT COUNT(*) FROM `T`"; + return Convert.ToInt32(c.ExecuteScalar()); + } + + [Fact] + public void Rolling_back_to_a_savepoint_undoes_only_work_after_it() + { + string path = FreshDb(); + try + { + using LibRedConnection conn = OpenWithTable(path); + using DbTransaction txn = conn.BeginTransaction(); + Assert.True(txn.SupportsSavepoints); + + Insert(conn, txn, 1); + txn.Save("sp1"); + Insert(conn, txn, 2); + txn.Rollback("sp1"); // undoes id=2 only + txn.Commit(); + + Assert.Equal(1, Count(conn)); // id=1 kept, id=2 gone + } + finally { File.Delete(path); } + } + + [Fact] + public void Releasing_a_savepoint_leaves_its_work_under_the_transaction() + { + string path = FreshDb(); + try + { + using LibRedConnection conn = OpenWithTable(path); + using DbTransaction txn = conn.BeginTransaction(); + + Insert(conn, txn, 1); + txn.Save("sp1"); + Insert(conn, txn, 2); + txn.Release("sp1"); // sp1's work merges into the transaction, not committed independently + txn.Rollback(); // rolls the whole transaction back → both inserts undone + + Assert.Equal(0, Count(conn)); + } + finally { File.Delete(path); } + } + + [Fact] + public void A_command_bound_to_another_connections_transaction_is_rejected() + { + string path = FreshDb(); + try + { + using LibRedConnection connA = OpenWithTable(path); + using var connB = new LibRedConnection($"Data Source={path}"); + connB.Open(); + using DbTransaction txnB = connB.BeginTransaction(); + + using DbCommand cmd = connA.CreateCommand(); + cmd.Transaction = txnB; // foreign transaction + cmd.CommandText = "INSERT INTO `T` (`Id`) VALUES (1)"; + + Assert.Throws(() => cmd.ExecuteNonQuery()); + } + finally { File.Delete(path); } + } + + private static void Exec(LibRedConnection conn, string sql) + { + using DbCommand c = conn.CreateCommand(); + c.CommandText = sql; + c.ExecuteNonQuery(); + } + + [Fact] + public void A_sql_begin_and_commit_through_commands_persist_the_work() + { + string path = FreshDb(); + try + { + using LibRedConnection conn = OpenWithTable(path); + Exec(conn, "BEGIN TRANSACTION"); + Exec(conn, "INSERT INTO `T` (`Id`) VALUES (1)"); + Exec(conn, "COMMIT"); + Assert.Equal(1, Count(conn)); + } + finally { File.Delete(path); } + } + + [Fact] + public void Closing_a_connection_with_a_sql_opened_transaction_rolls_it_back() + { + string path = FreshDb(); + try + { + using (LibRedConnection conn = OpenWithTable(path)) + { + Exec(conn, "BEGIN TRANSACTION"); + Exec(conn, "INSERT INTO `T` (`Id`) VALUES (1)"); + // No commit; the connection is disposed here — Close must roll the SQL-opened transaction back + // (there is no ADO transaction handle for it), so the write never reaches disk. + } + + using var check = new LibRedConnection($"Data Source={path}"); + check.Open(); + Assert.Equal(0, Count(check)); + } + finally { File.Delete(path); } + } + + [Fact] + public void A_command_bound_to_a_completed_transaction_is_rejected() + { + string path = FreshDb(); + try + { + using LibRedConnection conn = OpenWithTable(path); + DbTransaction txn = conn.BeginTransaction(); + txn.Commit(); // now completed; the connection no longer holds it + + using DbCommand cmd = conn.CreateCommand(); + cmd.Transaction = txn; + cmd.CommandText = "INSERT INTO `T` (`Id`) VALUES (1)"; + + Assert.Throws(() => cmd.ExecuteNonQuery()); + } + finally { File.Delete(path); } + } +} diff --git a/test/LibRed.Ado.Tests/TemporalParameterTests.cs b/test/LibRed.Ado.Tests/TemporalParameterTests.cs new file mode 100644 index 00000000..a35974cd --- /dev/null +++ b/test/LibRed.Ado.Tests/TemporalParameterTests.cs @@ -0,0 +1,80 @@ +using LibRed.Data; +using Xunit; + +namespace LibRed.Ado.Tests; + +// Jet has no native TimeSpan/TimeOnly/DateOnly/DateTimeOffset — LibRedCommand.Normalize converts each parameter +// to the DateTime the engine stores and compares against (a time on the 1899-12-30 epoch, a date at midnight), +// exactly as the literal path does. So the engine stays DateTime-only and `WHERE timeCol = @timeSpanParam` +// matches. Regression for BuiltInDataTypes Can_query_using_any_data_type / Can_query_using_DateDiffHour. +public class TemporalParameterTests +{ + private static LibRedConnection OpenTemp() + { + string path = Path.Combine(Path.GetTempPath(), $"tpar-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var conn = new LibRedConnection($"Data Source={path}"); + conn.Open(); + return conn; + } + + private static void Exec(LibRedConnection c, string sql, string? name = null, object? value = null) + { + using var cmd = c.CreateCommand(); + cmd.CommandText = sql; + if (name is not null) + { + var p = cmd.CreateParameter(); + p.ParameterName = name; + p.Value = value; + cmd.Parameters.Add(p); + } + cmd.ExecuteNonQuery(); + } + + [Theory] + [MemberData(nameof(TemporalCases))] + public void A_temporal_parameter_matches_the_stored_value(object stored, object queried) + { + using var conn = OpenTemp(); + Exec(conn, "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `V` DATETIME)"); + Exec(conn, "INSERT INTO `T` (`Id`, `V`) VALUES (1, @v)", "@v", stored); + + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT `Id` FROM `T` WHERE `V` = @p"; + var p = cmd.CreateParameter(); + p.ParameterName = "@p"; + p.Value = queried; + cmd.Parameters.Add(p); + + using var reader = cmd.ExecuteReader(); + Assert.True(reader.Read()); // stored temporal (as an epoch DateTime) equals the queried temporal + Assert.Equal(1, reader.GetInt32(0)); + } + + // default(DateTime) (Ticks 0 / 0001-01-01) is below Jet's OLE date floor, so the write path collapses it + // onto the epoch (OA 0); the reader reverses that so the epoch reads back as default, not 1899-12-30. This + // is the read half of EFCore.Jet's symmetric mapping. Here we store the epoch directly and read it back. + [Fact] + public void The_stored_epoch_reads_back_as_default_datetime() + { + using var conn = OpenTemp(); + Exec(conn, "CREATE TABLE `D` (`Id` INTEGER PRIMARY KEY, `V` DATETIME)"); + Exec(conn, "INSERT INTO `D` (`Id`, `V`) VALUES (1, #12/30/1899#)"); // OA 0 / the epoch + + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT `V` FROM `D`"; + using var reader = cmd.ExecuteReader(); + Assert.True(reader.Read()); + Assert.Equal(default, reader.GetDateTime(0)); + Assert.Equal(default, reader.GetFieldValue(0)); + } + + public static IEnumerable TemporalCases() => + [ + [new TimeSpan(10, 9, 8), new TimeSpan(10, 9, 8)], + [new TimeSpan(0, 10, 9, 8, 7), new TimeSpan(10, 9, 8)], // sub-second stripped both ways + [new TimeOnly(12, 30, 45), new TimeOnly(12, 30, 45)], + [new DateOnly(2020, 3, 1), new DateOnly(2020, 3, 1)], + ]; +} diff --git a/test/LibRed.Ado.Tests/TestAssembly.cs b/test/LibRed.Ado.Tests/TestAssembly.cs new file mode 100644 index 00000000..9f4b4e02 --- /dev/null +++ b/test/LibRed.Ado.Tests/TestAssembly.cs @@ -0,0 +1,6 @@ +using Xunit; + +// Several tests copy the shared Northwind fixture while other tests open it read/write. File.Copy's source +// handle does not share writes, so cross-class parallelism makes otherwise unrelated tests race at startup. +// Explicit multi-connection behavior is covered by dedicated tests; keep this fixture-based project ordered. +[assembly: CollectionBehavior(DisableTestParallelization = true)] diff --git a/test/LibRed.Benchmarks/LibRed.Benchmarks.csproj b/test/LibRed.Benchmarks/LibRed.Benchmarks.csproj new file mode 100644 index 00000000..0109dcbf --- /dev/null +++ b/test/LibRed.Benchmarks/LibRed.Benchmarks.csproj @@ -0,0 +1,27 @@ + + + + Exe + $(JetTargetFramework) + LibRed.Benchmarks + enable + enable + false + + $(NoWarn);CA1416 + + + + + + + + + + + Data\Northwind.accdb + PreserveNewest + + + + diff --git a/test/LibRed.Benchmarks/Program.cs b/test/LibRed.Benchmarks/Program.cs new file mode 100644 index 00000000..7626c21a --- /dev/null +++ b/test/LibRed.Benchmarks/Program.cs @@ -0,0 +1,133 @@ +using System.Data.OleDb; +using System.Diagnostics; +using LibRed; +using LibRed.Engine; + +// Lightweight head-to-head benchmark: LibRed's managed engine vs Microsoft ACE OLE DB, on the same .accdb +// and the same SQL. Reports the median wall-clock per operation and the LibRed/ACE ratio (goal: < 1). +// +// dotnet run -c Release LibRed only (fast, reliable — the iterate-optimize loop) +// dotnet run -c Release -- --ace add the ACE comparison (slower, needs the ACE driver; may crash) +// dotnet run -c Release -- --rows 100000 synthetic-table size (default 10000) + +bool withAce = args.Contains("--ace"); +int synRows = ReadInt(args, "--rows", 10_000); + +string source = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); +string db = Path.Combine(Path.GetTempPath(), $"bench-{Guid.NewGuid():N}.accdb"); +File.Copy(source, db); + +Console.WriteLine($"LibRed benchmarks — synthetic rows = {synRows:N0}, ACE comparison = {withAce}"); +Console.WriteLine($"file: {db}"); + +// --- Setup: a synthetic indexed table alongside the real Northwind schema. ------------------------------- +using (var setupDb = JetDatabase.Open(db, readOnly: false)) +{ + var setup = new QueryEngine(setupDb); + setup.ExecuteNonQuery("CREATE TABLE Bench (Id LONG PRIMARY KEY, K LONG, V TEXT(50))"); + setup.ExecuteNonQuery("CREATE INDEX IX_K ON Bench (K)"); // index built on the empty table, before the load + var sw = Stopwatch.StartNew(); + for (int i = 0; i < synRows; i++) + setup.ExecuteNonQuery($"INSERT INTO Bench (Id, K, V) VALUES ({i}, {i % 1000}, 'row{i}')"); + Console.WriteLine($"seeded {synRows:N0} rows in {sw.ElapsedMilliseconds:N0} ms ({synRows * 1000.0 / Math.Max(1, sw.ElapsedMilliseconds):N0} rows/s)\n"); +} + +// --- Read operations (identical SQL for both engines; a random PK per iteration where noted). ------------- +var rnd = new Random(42); +int[] randomIds = Enumerable.Range(0, 256).Select(_ => rnd.Next(synRows)).ToArray(); + +var ops = new Op[] +{ + new("PK point lookup", i => $"SELECT Id, K, V FROM Bench WHERE Id = {randomIds[i % randomIds.Length]}", Warmup: 20, Iters: 200), + new("Repeated PK lookup", _ => "SELECT Id, K, V FROM Bench WHERE Id = 500", Warmup: 20, Iters: 200), + new("Indexed range (K)", _ => "SELECT Id FROM Bench WHERE K BETWEEN 100 AND 110", Warmup: 10, Iters: 100), + new("2-table join", _ => "SELECT o.OrderID, d.ProductID FROM Orders o INNER JOIN `Order Details` d ON o.OrderID = d.OrderID", Warmup: 3, Iters: 20), + new("Unindexed join (hash)", _ => "SELECT o.OrderID, c.CompanyName FROM Orders o INNER JOIN Customers c ON o.ShipCity = c.City", Warmup: 3, Iters: 20), + new("GROUP BY aggregate", _ => "SELECT CustomerID, COUNT(*) AS N FROM Orders GROUP BY CustomerID", Warmup: 3, Iters: 30), + new("Full table scan", _ => "SELECT Id, K, V FROM Bench", Warmup: 3, Iters: 20), +}; + +var libredDb = JetDatabase.Open(db, readOnly: false); +var libred = new QueryEngine(libredDb); +var results = new List<(string Label, double LibRed, double? Ace, long Rows)>(); + +foreach (Op op in ops) +{ + long rows = 0; + double lr = Median(op, i => rows = DrainLibRed(libred, op.Sql(i))); + results.Add((op.Label, lr, (double?)null, rows)); +} + +if (withAce) +{ + using var conn = OpenAce(db); + for (int idx = 0; idx < ops.Length; idx++) + { + Op op = ops[idx]; + double a = Median(op, i => DrainAce(conn, op.Sql(i))); + results[idx] = results[idx] with { Ace = a }; + } +} + +// --- Report -------------------------------------------------------------------------------------------- +Console.WriteLine($"{"operation",-22}{"LibRed ms",12}{"ACE ms",12}{"ratio",10}{"rows",10}"); +Console.WriteLine(new string('-', 66)); +foreach (var (label, lr, ace, rows) in results) +{ + string aceCol = ace is { } a ? a.ToString("F3") : "-"; + string ratio = ace is { } av && av > 0 ? (lr / av).ToString("F2") + "x" : "-"; + Console.WriteLine($"{label,-22}{lr,12:F3}{aceCol,12}{ratio,10}{rows,10:N0}"); +} + +libredDb.Dispose(); +try { File.Delete(db); } catch (IOException) { } +return; + +// --- Helpers ------------------------------------------------------------------------------------------- +static long DrainLibRed(QueryEngine e, string sql) +{ + long n = 0; + foreach (object?[] row in e.ExecuteQuery(sql).Rows) { _ = row.Length; n++; } + return n; +} + +static void DrainAce(OleDbConnection conn, string sql) +{ + using var cmd = conn.CreateCommand(); + cmd.CommandText = sql; + using OleDbDataReader reader = cmd.ExecuteReader(); + while (reader.Read()) { } +} + +// Median wall-clock over `iters` runs after `warmup` untimed runs. +static double Median(Op op, Action run) +{ + for (int i = 0; i < op.Warmup; i++) run(i); + var times = new double[op.Iters]; + for (int i = 0; i < op.Iters; i++) + { + var sw = Stopwatch.StartNew(); + run(i); + times[i] = sw.Elapsed.TotalMilliseconds; + } + Array.Sort(times); + return times[op.Iters / 2]; +} + +static OleDbConnection OpenAce(string path) +{ + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider available for the --ace comparison."); +} + +static int ReadInt(string[] args, string flag, int fallback) +{ + int i = Array.IndexOf(args, flag); + return i >= 0 && i + 1 < args.Length && int.TryParse(args[i + 1], out int v) ? v : fallback; +} + +internal sealed record Op(string Label, Func Sql, int Warmup, int Iters); diff --git a/test/LibRed.Core.Tests/AccentCollationAccessTests.cs b/test/LibRed.Core.Tests/AccentCollationAccessTests.cs new file mode 100644 index 00000000..f26680c8 --- /dev/null +++ b/test/LibRed.Core.Tests/AccentCollationAccessTests.cs @@ -0,0 +1,66 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A text index key containing accented Latin-1 characters (é in "México D.F."). The General collation +/// sorts the accented letter with its base letter's primary weight and records the accent in a secondary +/// section. Verified by inserting through LibRed and having Access find the row through the City index. +/// +public class AccentCollationAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Access_finds_an_accented_city_through_the_index() + { + string path = Path.Combine(Path.GetTempPath(), $"accent-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var t = db.OpenTable("Customers"); + var values = new object?[t.Definition.Columns.Count]; + void Set(string col, object? v) => values[t.Definition.FindColumn(col)!.Index] = v; + Set("CustomerID", "ZZZ01"); + Set("CompanyName", "Los Accentos"); + Set("City", "México D.F."); + Set("Country", "Mexico"); + t.Insert(values); + } + + using var conn = OpenOleDb(path); + + // Access uses the City index to seek by equality; it must find both the existing México + // customers and the LibRed-inserted one. + using var byCity = conn.CreateCommand(); + byCity.CommandText = "SELECT CustomerID FROM Customers WHERE City = 'México D.F.' ORDER BY CustomerID"; + var found = new List(); + using (var r = byCity.ExecuteReader()) + while (r.Read()) found.Add((string)r[0]); + Assert.Contains("ZZZ01", found); + Assert.Contains("ANATR", found); // an existing México customer + + // The index remains well-ordered (no corruption): ORDER BY City runs and México sorts among the M's. + using var ordered = conn.CreateCommand(); + ordered.CommandText = "SELECT DISTINCT City FROM Customers ORDER BY City"; + using (var r = ordered.ExecuteReader()) + while (r.Read()) { _ = r[0]; } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/Ace16TypeTests.cs b/test/LibRed.Core.Tests/Ace16TypeTests.cs new file mode 100644 index 00000000..46a99c83 --- /dev/null +++ b/test/LibRed.Core.Tests/Ace16TypeTests.cs @@ -0,0 +1,53 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.Formats; +using Xunit; + +namespace LibRed.Core.Tests; + +public class Ace16TypeTests +{ + [Fact] + public void Database_is_the_newer_ace_format() + { + using var db = JetDatabase.Open(TestDatabases.Ace16TypesAccdb); + + // The ACE 16 provider creates the newer format (version byte 0x06). + Assert.Equal(JetVersion.Version17_2019, db.Format.Version); + Assert.True(db.Format.IsAccdb); + } + + [Fact] + public void Decodes_bigint_columns() + { + using var db = JetDatabase.Open(TestDatabases.Ace16TypesAccdb); + + var table = db.OpenTable("T"); + var big = table.Definition.Columns.First(c => c.Name == "Big"); + Assert.Equal(JetDataType.Int64, big.Type); + + var values = table.Rows().Select(r => r[big.Index]).ToList(); + Assert.All(values, v => Assert.IsType(v)); + Assert.Equal([9223372036854775807L, -42L, 0L, 1234567890123456789L], values.Cast()); + } + + [Fact] + public void Decodes_datetime2_columns_with_subsecond_precision() + { + using var db = JetDatabase.Open(TestDatabases.Ace16TypesAccdb); + + var table = db.OpenTable("T"); + var dt = table.Definition.Columns.First(c => c.Name == "Dt"); + Assert.Equal(JetDataType.DateTimeExtended, dt.Type); + + var values = table.Rows().Select(r => (DateTime)r[dt.Index]!).ToList(); + Assert.Equal( + [ + new DateTime(2020, 6, 15, 13, 45, 30), + new DateTime(1899, 12, 30, 0, 0, 0), // the Jet epoch + new DateTime(2000, 1, 1, 12, 0, 0), + new DateTime(2021, 3, 4, 9, 8, 7).AddTicks(1234567), // 100-ns precision + ], + values); + } +} diff --git a/test/LibRed.Core.Tests/AceAlterColumnTests.cs b/test/LibRed.Core.Tests/AceAlterColumnTests.cs new file mode 100644 index 00000000..b9c7af35 --- /dev/null +++ b/test/LibRed.Core.Tests/AceAlterColumnTests.cs @@ -0,0 +1,289 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful: after LibRed widens a text column (ALTER COLUMN path, via AlterColumn), ACE reads the new max +// length and enforces it — a value that fits the new max is accepted, one past it is rejected. +public class AceAlterColumnTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Access_reads_and_enforces_a_libred_widened_text_column() + { + string path = Path.Combine(Path.GetTempPath(), $"alc-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("V", JetDataType.Text, 40, IsFixedLength: false)], // TEXT(20) + primaryKey: ["K"]); + db.AlterColumn("T", "V", new ColumnSpec("V", JetDataType.Text, 80, IsFixedLength: false)); // → TEXT(40) + } + + using var conn = OpenOleDb(path); + // 40 chars fits the new max + using (var c = conn.CreateCommand()) { c.CommandText = $"INSERT INTO T (K, V) VALUES (1, '{new string('a', 40)}')"; c.ExecuteNonQuery(); } + // 41 chars exceeds it → ACE rejects + using var bad = conn.CreateCommand(); + bad.CommandText = $"INSERT INTO T (K, V) VALUES (2, '{new string('b', 41)}')"; + Assert.ThrowsAny(() => bad.ExecuteNonQuery()); + + string? v; using (var c = conn.CreateCommand()) { c.CommandText = "SELECT V FROM T WHERE K = 1"; v = (string?)c.ExecuteScalar(); } + Assert.Equal(40, v!.Length); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_applies_a_libred_alter_column_default() + { + string path = Path.Combine(Path.GetTempPath(), $"acd-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("V", JetDataType.Text, 40, IsFixedLength: false)], + primaryKey: ["K"]); + db.SetColumnDefault("T", "V", "'unknown'"); // the ALTER COLUMN ... DEFAULT write path + } + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (K) VALUES (1)"; c.ExecuteNonQuery(); } + string? v; using (var c = conn.CreateCommand()) { c.CommandText = "SELECT V FROM T WHERE K = 1"; v = (string?)c.ExecuteScalar(); } + Assert.Equal("unknown", v); // ACE applied the LibRed-written default + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_sees_a_libred_dropped_default_gone_but_keeps_not_null() + { + string path = Path.Combine(Path.GetTempPath(), $"add-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("N", JetDataType.Int32, 4, IsFixedLength: true, IsNullable: false)], // NOT NULL + primaryKey: ["K"]); + db.SetColumnDefault("T", "N", "5"); + db.DropColumnDefault("T", "N"); // ALTER COLUMN ... DROP DEFAULT — removes only the default + } + + using var conn = OpenOleDb(path); + // Default is gone, so an omit-insert no longer supplies 5 — and N is still NOT NULL, so ACE rejects it. + using var omit = conn.CreateCommand(); + omit.CommandText = "INSERT INTO T (K) VALUES (1)"; + Assert.ThrowsAny(() => omit.ExecuteNonQuery()); + // Supplying a value still works (type intact). + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (K, N) VALUES (2, 8)"; c.ExecuteNonQuery(); } + int n; using (var c = conn.CreateCommand()) { c.CommandText = "SELECT N FROM T WHERE K = 2"; n = Convert.ToInt32(c.ExecuteScalar()); } + Assert.Equal(8, n); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Byte-faithful: ACE recognises a LibRed-written GenGUID() default on a GUID column and applies it on its + // own insert, generating a fresh Guid per row. (GenGUID() is default-only — ACE rejects it in a SELECT.) + [Fact] + public void Access_applies_a_libred_written_genguid_default() + { + string path = Path.Combine(Path.GetTempPath(), $"gg-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("G", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("U", JetDataType.Guid, 16, IsFixedLength: true)], + primaryKey: ["Id"]); + db.SetColumnDefault("G", "U", "GenGUID()"); + } + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO G (Id) VALUES (1)"; c.ExecuteNonQuery(); } + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO G (Id) VALUES (2)"; c.ExecuteNonQuery(); } + + var guids = new List(); + using (var q = conn.CreateCommand()) + { + q.CommandText = "SELECT U FROM G ORDER BY Id"; + using var r = q.ExecuteReader(); + while (r.Read()) guids.Add((Guid)r.GetValue(0)); + } + Assert.Equal(2, guids.Count); + Assert.All(guids, g => Assert.NotEqual(Guid.Empty, g)); + Assert.NotEqual(guids[0], guids[1]); // ACE generated a fresh Guid per row + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_enforces_a_libred_alter_column_made_required() + { + string path = Path.Combine(Path.GetTempPath(), $"areq-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("V", JetDataType.Text, 40, IsFixedLength: false)], // V nullable + primaryKey: ["K"]); + db.SetColumnRequired("T", "V", true); // ALTER COLUMN ... NOT NULL + } + + using (var conn = OpenOleDb(path)) + { + using var bad = conn.CreateCommand(); + bad.CommandText = "INSERT INTO T (K) VALUES (1)"; // omit V → ACE rejects (now required) + Assert.ThrowsAny(() => bad.ExecuteNonQuery()); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (K, V) VALUES (2, 'x')"; c.ExecuteNonQuery(); } + } + + // LibRed clears it again; ACE then accepts an omitted V (structurally nullable — no Required property). + using (var db = JetDatabase.Open(path, readOnly: false)) + db.SetColumnRequired("T", "V", false); + using (var conn = OpenOleDb(path)) + { + using var c = conn.CreateCommand(); + c.CommandText = "INSERT INTO T (K) VALUES (3)"; + c.ExecuteNonQuery(); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_enforces_the_relationship_after_a_libred_parent_side_rewrite() + { + string path = Path.Combine(Path.GetTempPath(), $"prw-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + void Exec(string s) { using var c = conn.CreateCommand(); c.CommandText = s; c.ExecuteNonQuery(); } + Exec("CREATE TABLE P ( PID LONG PRIMARY KEY, PData LONG )"); + Exec("CREATE TABLE C ( CID LONG PRIMARY KEY, PID LONG, CONSTRAINT FK FOREIGN KEY (PID) REFERENCES P (PID) )"); + Exec("INSERT INTO P (PID, PData) VALUES (1, 100)"); + Exec("INSERT INTO C (CID, PID) VALUES (10, 1)"); + } + + // LibRed rewrites the PARENT's non-relationship column (drops+recreates P, re-adds the child's FK). + using (var db = JetDatabase.Open(path, readOnly: false)) + db.AlterColumn("P", "PData", new ColumnSpec("PData", JetDataType.Double, 8, IsFixedLength: true)); + + using (var conn = OpenOleDb(path)) + { + // parent data converted + double pdata; using (var c = conn.CreateCommand()) { c.CommandText = "SELECT PData FROM P WHERE PID = 1"; pdata = Convert.ToDouble(c.ExecuteScalar()); } + Assert.Equal(100.0, pdata); + // ACE still enforces the relationship: orphan rejected, valid parent accepted + using (var bad = conn.CreateCommand()) { bad.CommandText = "INSERT INTO C (CID, PID) VALUES (20, 77)"; Assert.ThrowsAny(() => bad.ExecuteNonQuery()); } + using (var ok = conn.CreateCommand()) { ok.CommandText = "INSERT INTO C (CID, PID) VALUES (21, 1)"; ok.ExecuteNonQuery(); } + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Faithful round-trip: changing ONE column's type must not disturb another column's on-disk descriptor. + // ACE authors the table (so the untouched column's bytes are ACE's, not LibRed's defaults); LibRed retypes a + // different, same-width column (no layout shift), then the untouched column's 25 descriptor bytes must be + // byte-identical — the RawDescriptor passthrough, not a rebuild-from-model that would stamp defaults. + [Fact] + public void Libred_type_change_preserves_an_untouched_columns_descriptor_bytes() + { + string path = Path.Combine(Path.GetTempPath(), $"pre-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + void Exec(string s) { using var c = conn.CreateCommand(); c.CommandText = s; c.ExecuteNonQuery(); } + Exec("CREATE TABLE T ( A LONG, B LONG, C TEXT(20) )"); + Exec("INSERT INTO T (A, B, C) VALUES (1, 2, 'hi')"); + } + + byte[] before; + using (var db = JetDatabase.Open(path, readOnly: true)) + before = (byte[])db.Catalog.FindTable("T")!.FindColumn("C")!.RawDescriptor!.Clone(); + + // Retype A: LONG -> SINGLE (both 4-byte fixed → no row-layout shift, so C is wholly untouched). + using (var db = JetDatabase.Open(path, readOnly: false)) + db.AlterColumn("T", "A", new ColumnSpec("A", JetDataType.Single, 4, IsFixedLength: true)); + + byte[] after; + using (var db = JetDatabase.Open(path, readOnly: true)) + after = db.Catalog.FindTable("T")!.FindColumn("C")!.RawDescriptor!; + + Assert.Equal(before, after); // C's descriptor bytes preserved verbatim + + // And ACE still reads the table (A converted, C intact). + using var conn2 = OpenOleDb(path); + using var q = conn2.CreateCommand(); + q.CommandText = "SELECT C FROM T"; + Assert.Equal("hi", (string?)q.ExecuteScalar()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_reads_a_libred_full_rewrite_with_converted_values() + { + string path = Path.Combine(Path.GetTempPath(), $"rw-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + // ACE creates + populates a LONG column. + using (var conn = OpenOleDb(path)) + { + void Exec(string s) { using var c = conn.CreateCommand(); c.CommandText = s; c.ExecuteNonQuery(); } + Exec("CREATE TABLE T ( K LONG PRIMARY KEY, N LONG )"); + Exec("INSERT INTO T (K, N) VALUES (1, 42)"); + Exec("INSERT INTO T (K, N) VALUES (2, 7)"); + } + + // LibRed rewrites N: LONG -> DOUBLE (full column rewrite, converting values). + using (var db = JetDatabase.Open(path, readOnly: false)) + db.AlterColumn("T", "N", new ColumnSpec("N", JetDataType.Double, 8, IsFixedLength: true)); + + // ACE reads the converted data and treats N as a real Double (a fractional insert round-trips). + using (var conn = OpenOleDb(path)) + { + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (K, N) VALUES (3, 3.5)"; c.ExecuteNonQuery(); } + var vals = new List(); + using var q = conn.CreateCommand(); + q.CommandText = "SELECT N FROM T ORDER BY K"; + using var r = q.ExecuteReader(); + while (r.Read()) vals.Add(Convert.ToDouble(r[0])); + Assert.Equal(new[] { 42.0, 7.0, 3.5 }, vals); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AceAlterConstraintTests.cs b/test/LibRed.Core.Tests/AceAlterConstraintTests.cs new file mode 100644 index 00000000..b0dfc7c3 --- /dev/null +++ b/test/LibRed.Core.Tests/AceAlterConstraintTests.cs @@ -0,0 +1,108 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful: ACE reads and ENFORCES a LibRed-written CHECK (via AddCheckConstraint, the ALTER path) and a +// LibRed-written UNIQUE index (via CreateIndex, the ADD CONSTRAINT UNIQUE path). Confirms both write byte-faithful +// structures — answering "does AddUnique write it the way ACE does": ACE accepts and enforces it. +public class AceAlterConstraintTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Access_enforces_a_libred_added_check() + { + string path = Path.Combine(Path.GetTempPath(), $"chk-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("tblInvoices", + [new ColumnSpec("ID", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Amount", JetDataType.Double, 8, IsFixedLength: true)], + primaryKey: ["ID"]); + db.AddCheckConstraint("tblInvoices", "CheckAmount", "Amount > 0"); + } + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO tblInvoices (ID, Amount) VALUES (1, 50)"; c.ExecuteNonQuery(); } + using var bad = conn.CreateCommand(); + bad.CommandText = "INSERT INTO tblInvoices (ID, Amount) VALUES (2, -5)"; + Assert.ThrowsAny(() => bad.ExecuteNonQuery()); // ACE rejects the check violation + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_stops_enforcing_a_check_libred_dropped() + { + string path = Path.Combine(Path.GetTempPath(), $"dchk-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("tblInvoices", + [new ColumnSpec("ID", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Amount", JetDataType.Double, 8, IsFixedLength: true)], + primaryKey: ["ID"]); + db.AddCheckConstraint("tblInvoices", "CheckAmount", "Amount > 0"); + Assert.True(db.DropCheckConstraint("tblInvoices", "CheckAmount")); // ALTER TABLE … DROP CONSTRAINT + Assert.False(db.DropCheckConstraint("tblInvoices", "CheckAmount")); // already gone → false + } + + // The check is gone, so ACE now accepts the value it previously rejected. + using var conn = OpenOleDb(path); + using var c = conn.CreateCommand(); + c.CommandText = "INSERT INTO tblInvoices (ID, Amount) VALUES (1, -5)"; + c.ExecuteNonQuery(); + using var read = conn.CreateCommand(); + read.CommandText = "SELECT Amount FROM tblInvoices WHERE ID = 1"; + Assert.Equal(-5.0, Convert.ToDouble(read.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_enforces_a_libred_added_unique_constraint() + { + string path = Path.Combine(Path.GetTempPath(), $"uq-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("tblCustomers", + [new ColumnSpec("CustomerID", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("LastName", JetDataType.Text, 60, IsFixedLength: false), + new ColumnSpec("FirstName", JetDataType.Text, 60, IsFixedLength: false)], + primaryKey: ["CustomerID"]); + db.CreateIndex("tblCustomers", "UQ_Name", + [("LastName", false), ("FirstName", false)], isUnique: true, isPrimary: false); + } + + using var conn = OpenOleDb(path); + void Insert(int id, string ln, string fn) { using var c = conn.CreateCommand(); c.CommandText = $"INSERT INTO tblCustomers (CustomerID, LastName, FirstName) VALUES ({id}, '{ln}', '{fn}')"; c.ExecuteNonQuery(); } + Insert(1, "Smith", "John"); + Insert(2, "Smith", "Jane"); // different first name — ok + using var dup = conn.CreateCommand(); + dup.CommandText = "INSERT INTO tblCustomers (CustomerID, LastName, FirstName) VALUES (3, 'Smith', 'John')"; + Assert.ThrowsAny(() => dup.ExecuteNonQuery()); // ACE rejects the duplicate composite + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AceChooseDefaultTests.cs b/test/LibRed.Core.Tests/AceChooseDefaultTests.cs new file mode 100644 index 00000000..e767d39a --- /dev/null +++ b/test/LibRed.Core.Tests/AceChooseDefaultTests.cs @@ -0,0 +1,49 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful: a LibRed-written Choose()/CBool(Choose()) default is read and applied by ACE. Confirms LibRed's +// Choose support matches ACE (which has the VBA Choose function), incl. the nested CBool(Choose(...)) form that +// ACE's OLE DB DDL parser rejects at CREATE but its expression service applies at insert. +public class AceChooseDefaultTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Theory] + [InlineData("Choose(1, 0, 1, 2)", false)] // 1st choice = 0 = False + [InlineData("Choose(2, 0, 1, 2)", true)] // 2nd choice = 1 = True + [InlineData("CBool(Choose(1, 0, 1, 2))", false)] // nested — DDL-parser-rejected, expression-service-applied + public void Access_reads_and_applies_a_libred_written_choose_default(string def, bool expected) + { + string path = Path.Combine(Path.GetTempPath(), $"ch-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("V", JetDataType.Boolean, 1, IsFixedLength: true)], + primaryKey: ["K"], columnDefaults: [("V", def)]); + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (K) VALUES (1)"; c.ExecuteNonQuery(); } + object? v; using (var c = conn.CreateCommand()) { c.CommandText = "SELECT V FROM T"; v = c.ExecuteScalar(); } + + Assert.Equal(expected, Convert.ToBoolean(v)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AceCompoundDefaultTests.cs b/test/LibRed.Core.Tests/AceCompoundDefaultTests.cs new file mode 100644 index 00000000..fc619cbb --- /dev/null +++ b/test/LibRed.Core.Tests/AceCompoundDefaultTests.cs @@ -0,0 +1,59 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// A Jet/ACE column default is a per-row EXPRESSION, not a static value. ACE's OLE DB *DDL parser* only accepts a +// narrow subset in CREATE TABLE ... DEFAULT (a literal, or a simple function call like NOW()) — it rejects +// concatenation, literal arithmetic and nested calls with "Syntax error in CREATE TABLE statement". But that is +// a front-end limitation only: ACE's expression *service*, used when reading a stored default, evaluates the +// full expression. So a compound default that LibRed writes straight to LvProp (bypassing ACE's DDL parser) is +// read and applied by ACE on insert. Verifies LibRed's SQL surface is a superset of ACE's DDL here. +public class AceCompoundDefaultTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Theory] + [InlineData("TEXT", "\"INV-\" & Year(Now())", "INV-2026")] // double-quoted string, & concat, nested call + [InlineData("LONG", "1 + 2", "3")] // literal arithmetic (ACE's DDL parser rejects) + [InlineData("LONG", "Year(Now())", "2026")] // nested function call (ACE's DDL parser rejects) + public void Access_reads_and_applies_a_libred_written_compound_default(string type, string def, string expected) + { + string path = Path.Combine(Path.GetTempPath(), $"cx-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + ColumnSpec v = type == "TEXT" + ? new ColumnSpec("V", JetDataType.Text, 20, IsFixedLength: false) + : new ColumnSpec("V", JetDataType.Int32, 4, IsFixedLength: true); + + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), v], + primaryKey: ["K"], + columnDefaults: [("V", def)]); + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (K) VALUES (1)"; c.ExecuteNonQuery(); } + object? value; + using (var c = conn.CreateCommand()) { c.CommandText = "SELECT V FROM T"; value = c.ExecuteScalar(); } + + // The expected value is stable except the year — pin the year cases to the current year at run time. + string want = expected.Replace("2026", DateTime.Now.Year.ToString()); + Assert.Equal(want, Convert.ToString(value, System.Globalization.CultureInfo.InvariantCulture)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AceCreatedDatabaseTests.cs b/test/LibRed.Core.Tests/AceCreatedDatabaseTests.cs new file mode 100644 index 00000000..7b69f745 --- /dev/null +++ b/test/LibRed.Core.Tests/AceCreatedDatabaseTests.cs @@ -0,0 +1,57 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// A database LibRed creates from scratch (no DAO/ADOX) is opened, queried, and written by real Access. +public class AceCreatedDatabaseTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no ACE OLE DB provider available", last); + } + + [Fact] + public void Real_Access_opens_and_reads_a_libred_created_database() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-created-{Guid.NewGuid():N}.accdb"); + try + { + // Create the database, a user table, and a row entirely through LibRed — no Access, no DAO/ADOX. + DatabaseCreator.CreateEmpty(path); + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("People", new[] + { + new ColumnSpec("Id", JetDataType.Int32, 4, true), + new ColumnSpec("Name", JetDataType.Text, 100, false), + }, primaryKey: new[] { "Id" }); + db.OpenTable("People").Insert([1, "Ada"]); + } + + // Real Access (ACE OLE DB) opens the from-scratch file and reads LibRed's structure and data. + using var conn = OpenOleDb(path); + using (var count = conn.CreateCommand()) + { count.CommandText = "SELECT COUNT(*) FROM [People]"; Assert.Equal(1, Convert.ToInt32(count.ExecuteScalar())); } + using (var sel = conn.CreateCommand()) + { sel.CommandText = "SELECT [Name] FROM [People] WHERE [Id]=1"; Assert.Equal("Ada", sel.ExecuteScalar()); } + + // And Access can WRITE into the file (needs a valid page-1 free map to allocate pages). + using (var ins = conn.CreateCommand()) + { ins.CommandText = "INSERT INTO [People] ([Id],[Name]) VALUES (2,'Alan')"; Assert.Equal(1, ins.ExecuteNonQuery()); } + using (var sel = conn.CreateCommand()) + { sel.CommandText = "SELECT [Name] FROM [People] WHERE [Id]=2"; Assert.Equal("Alan", sel.ExecuteScalar()); } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AceDefaultExpressionLimitsTests.cs b/test/LibRed.Core.Tests/AceDefaultExpressionLimitsTests.cs new file mode 100644 index 00000000..75b4ce04 --- /dev/null +++ b/test/LibRed.Core.Tests/AceDefaultExpressionLimitsTests.cs @@ -0,0 +1,76 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// The DAO Field2.DefaultValue doc says a default expression may not contain SQL aggregate functions and the +// property text maxes at 255 chars. Probing ACE refines both: +// - Defaults share a RESTRICTED expression service with field validation rules ("... in validation expression +// or default value ...") whose function whitelist excludes not just SQL aggregates (Sum/Count) but DOMAIN +// aggregates (DCount) too — all rejected as "Unknown function". +// - The 255-char cap is a DAO-API limit, NOT an engine/file-format limit: ACE accepts and applies a 300+ char +// default expression. LibRed writes such defaults to LvProp and they round-trip. +public class AceDefaultExpressionLimitsTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + // SQL aggregates (Sum, Count) AND the domain aggregate DCount are all rejected in a default — the default + // expression evaluator has a restricted function whitelist. Smuggled via LibRed so the expression reaches + // ACE's evaluator at insert (ACE's DDL parser would reject DCount's syntax earlier for a different reason). + [Theory] + [InlineData("Sum(1)")] + [InlineData("Count(*)")] + [InlineData("DCount('*','MSysObjects')")] + public void Access_rejects_an_aggregate_function_in_a_default(string def) + { + string path = Path.Combine(Path.GetTempPath(), $"agg-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("V", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["K"], columnDefaults: [("V", def)]); + + using var conn = OpenOleDb(path); + using var insert = conn.CreateCommand(); + insert.CommandText = "INSERT INTO T (K) VALUES (1)"; + var ex = Assert.ThrowsAny(() => insert.ExecuteNonQuery()); + Assert.Contains("Unknown function", ex.Message); + Assert.Contains("default value", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // The DAO 255-char DefaultValue cap is an API limit, not an engine one: a 300-char string-literal default is + // accepted and applied by ACE (proplen ~302). A single literal has no operators, isolating length from the + // separate "Expression too complex" operator-count limit. + [Fact] + public void Access_accepts_a_default_expression_longer_than_255_chars() + { + string path = Path.Combine(Path.GetTempPath(), $"len-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "CREATE TABLE T ( K LONG PRIMARY KEY, V MEMO DEFAULT \"" + new string('a', 300) + "\" )"; c.ExecuteNonQuery(); } + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (K) VALUES (1)"; c.ExecuteNonQuery(); } + object? v; using (var c = conn.CreateCommand()) { c.CommandText = "SELECT V FROM T"; v = c.ExecuteScalar(); } + Assert.Equal(300, (v as string)?.Length); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AceRenameTests.cs b/test/LibRed.Core.Tests/AceRenameTests.cs new file mode 100644 index 00000000..7fe4d40a --- /dev/null +++ b/test/LibRed.Core.Tests/AceRenameTests.cs @@ -0,0 +1,125 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful renames: ACE — not just LibRed — has to accept a file whose table/column names LibRed rewrote. +// This matters because a column rename relays out the TDEF's variable-length name pool and re-owns the column's +// LvProp property block; a byte-level mistake there is invisible to LibRed's own read-back (it would read its +// own malformed bytes back consistently) but fatal to Access. So the checks below are deliberately made +// *through ACE*: it resolves the new names, honours the carried-over DEFAULT, and still enforces the +// relationship whose by-name references were repointed. +public class AceRenameTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + private static void Exec(OleDbConnection conn, string sql) + { + using var c = conn.CreateCommand(); + c.CommandText = sql; + c.ExecuteNonQuery(); + } + + private static object? Scalar(OleDbConnection conn, string sql) + { + using var c = conn.CreateCommand(); + c.CommandText = sql; + return c.ExecuteScalar(); + } + + [Fact] + public void Access_reads_a_libred_renamed_table_and_column_and_still_applies_the_default() + { + string path = Path.Combine(Path.GetTempPath(), $"acerename-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Doc", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Title", JetDataType.Text, 100, IsFixedLength: false)], + primaryKey: ["Id"], + columnDefaults: [("Title", "'untitled'")]); + db.CreateIndex("Doc", "IX_Doc_Title", [("Title", false)]); + + // A longer table name and a shorter column name, so both directions of the variable-length + // name relayout are exercised. + db.RenameTable("Doc", "DocumentArchive"); + db.RenameColumn("DocumentArchive", "Title", "Head"); + } + + using var conn = OpenOleDb(path); + + // ACE resolves both new names and round-trips a value through them. + Exec(conn, "INSERT INTO DocumentArchive (Id, Head) VALUES (1, 'hello')"); + Assert.Equal("hello", Scalar(conn, "SELECT Head FROM DocumentArchive WHERE Id = 1")); + + // The DEFAULT survived in a form ACE honours — proof the LvProp owner rewrite is byte-correct, + // not merely self-consistent. + Exec(conn, "INSERT INTO DocumentArchive (Id) VALUES (2)"); + Assert.Equal("untitled", Scalar(conn, "SELECT Head FROM DocumentArchive WHERE Id = 2")); + + // The old column name is genuinely gone as far as ACE is concerned. + using var stale = conn.CreateCommand(); + stale.CommandText = "SELECT Title FROM DocumentArchive"; + Assert.ThrowsAny(() => stale.ExecuteScalar()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_still_enforces_a_relationship_after_libred_renames_both_sides() + { + string path = Path.Combine(Path.GetTempPath(), $"acerenamefk-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("P", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"]); + db.CreateTable("C", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("PId", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec( + "FK_C_P", "P", [("PId", "Id")], + IsEnforced: true, CascadeUpdate: false, CascadeDelete: false)]); + + // Rename the parent table, the referenced key column, and the child's FK column — every + // by-name reference in MSysRelationships moves. + db.RenameTable("P", "ParentTable"); + db.RenameColumn("ParentTable", "Id", "ParentKey"); + db.RenameColumn("C", "PId", "OwnerId"); + } + + using var conn = OpenOleDb(path); + + Exec(conn, "INSERT INTO ParentTable (ParentKey) VALUES (1)"); + + // ACE still enforces referential integrity through the renamed names: the orphan is rejected… + using var orphan = conn.CreateCommand(); + orphan.CommandText = "INSERT INTO C (Id, OwnerId) VALUES (1, 99)"; + Assert.ThrowsAny(() => orphan.ExecuteNonQuery()); + + // …and the valid child is accepted. + Exec(conn, "INSERT INTO C (Id, OwnerId) VALUES (1, 1)"); + Assert.Equal(1, Scalar(conn, "SELECT OwnerId FROM C WHERE Id = 1")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AceSingleDoubleCompareProbeTest.cs b/test/LibRed.Core.Tests/AceSingleDoubleCompareProbeTest.cs new file mode 100644 index 00000000..9576d0fa --- /dev/null +++ b/test/LibRed.Core.Tests/AceSingleDoubleCompareProbeTest.cs @@ -0,0 +1,63 @@ +using System.Data.OleDb; +using System.Globalization; +using Xunit; +using Xunit.Abstractions; + +namespace LibRed.Core.Tests; + +// PROBE (not an assertion of LibRed behaviour): what precision does ACE use to compare a SINGLE column against +// a DOUBLE column, versus a SINGLE column against a literal? This decides whether LibRed's value-level +// "compare in single precision when a float is involved" rule matches ACE for the column-vs-column case, or +// whether a column-type-aware fix is needed. Reports counts; the assertions just pin what we observed so a +// future ACE change is noticed. +public class AceSingleDoubleCompareProbeTest(ITestOutputHelper output) +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + private static void Exec(OleDbConnection c, string sql) { using var cmd = c.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); } + private static int Count(OleDbConnection c, string sql) { using var cmd = c.CreateCommand(); cmd.CommandText = sql; return Convert.ToInt32(cmd.ExecuteScalar()); } + + [Fact] + public void Probe_single_vs_double_compare_precision() + { + // 0.1 has different 4-byte (single) and 8-byte (double) approximations, so a SINGLE column and a DOUBLE + // column both set to 0.1 hold genuinely different numbers — equal only if compared in single precision. + string s = (0.1).ToString("R", CultureInfo.InvariantCulture); + + string path = Path.Combine(Path.GetTempPath(), $"acesd-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var conn = OpenOleDb(path); + Exec(conn, "CREATE TABLE SD (Id INT, S SINGLE, D DOUBLE)"); + Exec(conn, $"INSERT INTO SD (Id, S, D) VALUES (1, {s}, {s})"); + + int colVsCol = Count(conn, "SELECT COUNT(*) FROM SD WHERE S = D"); // single col vs double col + int singleVsLit = Count(conn, $"SELECT COUNT(*) FROM SD WHERE S = {s}"); // control: single col vs literal + int doubleVsLit = Count(conn, $"SELECT COUNT(*) FROM SD WHERE D = {s}"); // control: double col vs literal + + output.WriteLine($"ACE S=D (col vs col): {colVsCol} S={s} (col vs lit): {singleVsLit} D={s} (col vs lit): {doubleVsLit}"); + + // The controls confirm ACE matches a column against its own-precision literal. + Assert.Equal(1, singleVsLit); + Assert.Equal(1, doubleVsLit); + // The verdict (confirmed 2026-07-25): ACE compares a SINGLE column against a DOUBLE column in + // SINGLE precision too — not double as SQL type-precedence would suggest. So ACE's rule is simply + // "if a Single is involved, compare in single precision", which is exactly what LibRed's evaluator + // now does (ExpressionEvaluator.Compare). This pins that parity: a regression here (0) would mean + // ACE changed, or that LibRed should stop narrowing. See [[libred-single-precision-compare]]. + Assert.Equal(1, colVsCol); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AceSmuggledColRefDefaultTests.cs b/test/LibRed.Core.Tests/AceSmuggledColRefDefaultTests.cs new file mode 100644 index 00000000..474413f3 --- /dev/null +++ b/test/LibRed.Core.Tests/AceSmuggledColRefDefaultTests.cs @@ -0,0 +1,65 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// LibRed writes a column-reference default ([A] + 2) straight to LvProp — a default ACE's own DDL parser refuses +// to CREATE. The point: this does NOT produce a corrupt file. ACE opens it fine and reads the stored default; +// the column-reference prohibition is enforced by ACE's expression service at INSERT (evaluation) time, not by +// its DDL parser. So ACE inserts nothing — it rejects the row with the same "field in a default" error it gives +// at create time. There is no way to smuggle a working column-ref default past the engine. +public class AceSmuggledColRefDefaultTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Theory] + [InlineData("[A] + 2", "does not recognize")] // engine names the field reference in the default + [InlineData("A + 2", "Type mismatch")] // bare A parses as something else → type mismatch + public void Access_opens_the_file_but_rejects_an_insert_using_a_smuggled_column_ref_default(string def, string expectedError) + { + string path = Path.Combine(Path.GetTempPath(), $"smug-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", + [ + new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("A", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("B", JetDataType.Int32, 4, IsFixedLength: true), + ], + primaryKey: ["K"], + columnDefaults: [("B", def)]); + + // LibRed persisted the column-ref default text verbatim, and re-reads it — the file is well-formed. + using (var reopened = JetDatabase.Open(path)) + Assert.Equal(def, reopened.Catalog.UserTables.Single(t => t.Name == "T") + .Columns.Single(c => c.Name == "B").DefaultValue); + + // ACE opens the file (no repair/corruption) but rejects the insert when it evaluates the default. + using var conn = OpenOleDb(path); + using var insert = conn.CreateCommand(); + insert.CommandText = "INSERT INTO T (K, A) VALUES (1, 5)"; + var ex = Assert.ThrowsAny(() => insert.ExecuteNonQuery()); + Assert.Contains(expectedError, ex.Message); + + // No row was written. + using var count = conn.CreateCommand(); + count.CommandText = "SELECT COUNT(*) FROM T"; + Assert.Equal(0, Convert.ToInt32(count.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AceSwitchDefaultTests.cs b/test/LibRed.Core.Tests/AceSwitchDefaultTests.cs new file mode 100644 index 00000000..c1dde5ba --- /dev/null +++ b/test/LibRed.Core.Tests/AceSwitchDefaultTests.cs @@ -0,0 +1,47 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful: a LibRed-written Switch() default is read and applied by ACE (which has the VBA Switch +// function), confirming LibRed's Switch matches ACE. +public class AceSwitchDefaultTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Theory] + [InlineData("Switch(1=1, 10, 1=2, 20)", 10)] + [InlineData("Switch(1=2, 10, 1=1, 20)", 20)] + public void Access_reads_and_applies_a_libred_written_switch_default(string def, int expected) + { + string path = Path.Combine(Path.GetTempPath(), $"sw-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("V", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["K"], columnDefaults: [("V", def)]); + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (K) VALUES (1)"; c.ExecuteNonQuery(); } + object? v; using (var c = conn.CreateCommand()) { c.CommandText = "SELECT V FROM T"; v = c.ExecuteScalar(); } + + Assert.Equal(expected, Convert.ToInt32(v)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/ActionQueryProcedureAccessTests.cs b/test/LibRed.Core.Tests/ActionQueryProcedureAccessTests.cs new file mode 100644 index 00000000..02d9366d --- /dev/null +++ b/test/LibRed.Core.Tests/ActionQueryProcedureAccessTests.cs @@ -0,0 +1,117 @@ +using System.Data; +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Stored action queries (a CREATE PROCEDURE body that is not a SELECT) written by LibRed and then executed +/// by Access. A data-definition query (CREATE TABLE) stores the whole SQL in an Attribute=1/Flag 7 +/// row; an append (INSERT … VALUES) query stores the target table (Attribute=1/Flag 3) plus one +/// Attribute=6/Flag 0x8000 row per column. Access recognises and runs both. +/// +public class ActionQueryProcedureAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + private static void Exec(OleDbConnection conn, string procName) + { + using var cmd = conn.CreateCommand(); + cmd.CommandText = procName; + cmd.CommandType = CommandType.StoredProcedure; + cmd.ExecuteNonQuery(); + } + + [Fact] + public void Access_runs_a_libred_written_make_table_and_append_procedure() + { + string path = Path.Combine(Path.GetTempPath(), $"action-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateActionQuery("MakeZ", new ActionQuerySpec( + ActionQueryKind.DataDefinition, DdlSql: "CREATE TABLE ZZLib (Id LONG, Nm TEXT(50))")); + db.CreateActionQuery("AddShipper", new ActionQuerySpec( + ActionQueryKind.Append, TargetTable: "Shippers", + Values: + [ + new AppendColumnSpec("CompanyName", "'LibRed Co'"), + new AppendColumnSpec("Phone", "'555-0100'"), + ])); + } + + using var conn = OpenOleDb(path); + + // Data-definition query: running it creates the table. + Exec(conn, "MakeZ"); + using (var c = conn.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM ZZLib"; + Assert.Equal(0, Convert.ToInt32(c.ExecuteScalar())); // table exists, empty + } + + // Append query: running it inserts the row. + int before; + using (var c = conn.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM Shippers"; + before = Convert.ToInt32(c.ExecuteScalar()); + } + Exec(conn, "AddShipper"); + using (var c = conn.CreateCommand()) + { + c.CommandText = "SELECT Phone FROM Shippers WHERE CompanyName = 'LibRed Co'"; + Assert.Equal("555-0100", c.ExecuteScalar()); + } + using (var c = conn.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM Shippers"; + Assert.Equal(before + 1, Convert.ToInt32(c.ExecuteScalar())); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // An INSERT ... SELECT stored query (written by ACE) is read back but classified unsupported: LibRed + // reconstructs no executable SQL for it, only a reason ("throw on the rest"). + [Fact] + public void Insert_select_stored_query_is_read_back_as_unsupported() + { + string path = Path.Combine(Path.GetTempPath(), $"action-sel-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + using var cmd = conn.CreateCommand(); + cmd.CommandText = + "CREATE PROCEDURE CopyUkShippers AS " + + "INSERT INTO Shippers (CompanyName) SELECT ContactName FROM Customers WHERE Country = 'UK'"; + cmd.ExecuteNonQuery(); + } + + using var db = JetDatabase.Open(path); + StoredActionQuery q = db.Catalog.ActionQueries["CopyUkShippers"]; + Assert.Null(q.Sql); + Assert.NotNull(q.UnsupportedReason); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AddColumnAccessTests.cs b/test/LibRed.Core.Tests/AddColumnAccessTests.cs new file mode 100644 index 00000000..0c53449d --- /dev/null +++ b/test/LibRed.Core.Tests/AddColumnAccessTests.cs @@ -0,0 +1,239 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// ADD COLUMN is a metadata TDEF edit (inverse of DROP COLUMN): the descriptor/name are appended, the new id +// comes from the 0x29 high-water, counts bump, rows are untouched (read NULL). Verify ACE opens a +// LibRed-column-added file, reads existing rows with the new column NULL, and can insert using it. +public class AddColumnAccessTests +{ + private static OleDbConnection Open(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + throw new InvalidOperationException("no ace"); + } + private static void Ace(string path, params string[] sqls) + { using var c = Open(path); foreach (var s in sqls) { using var m = c.CreateCommand(); m.CommandText = s; m.ExecuteNonQuery(); } } + + [Fact] + public void Access_reads_and_extends_a_libred_column_added_table() + { + string path = Path.Combine(Path.GetTempPath(), $"addcol-lr-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + // ACE creates the table + rows so the TDEF/rows are authentic. + Ace(path, + "CREATE TABLE T (Id LONG PRIMARY KEY, A LONG)", + "INSERT INTO T (Id, A) VALUES (1, 10)", + "INSERT INTO T (Id, A) VALUES (2, 20)"); + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + Assert.True(db.AddColumn("T", new ColumnSpec("B", JetDataType.Text, 40, IsFixedLength: false))); + Assert.True(db.AddColumn("T", new ColumnSpec("C", JetDataType.Int32, 4, IsFixedLength: true))); + Assert.False(db.AddColumn("T", new ColumnSpec("A", JetDataType.Int32, 4, IsFixedLength: true))); // dup → false + Assert.Equal(["Id", "A", "B", "C"], db.Catalog.FindTable("T")!.Columns.Select(c => c.Name)); + } + + using var conn = Open(path); + // Existing rows read the new columns as NULL. + using (var c = conn.CreateCommand()) + { + c.CommandText = "SELECT A, B, C FROM T WHERE Id = 1"; + using var r = c.ExecuteReader(); + Assert.True(r.Read()); + Assert.Equal(10, r.GetInt32(0)); + Assert.True(r.IsDBNull(1)); + Assert.True(r.IsDBNull(2)); + } + // ACE can insert a row using the added columns and read it back. + using (var c = conn.CreateCommand()) + { c.CommandText = "INSERT INTO T (Id, A, B, C) VALUES (3, 30, 'new', 99)"; Assert.Equal(1, c.ExecuteNonQuery()); } + using (var c = conn.CreateCommand()) + { + c.CommandText = "SELECT B, C FROM T WHERE Id = 3"; + using var r = c.ExecuteReader(); + Assert.True(r.Read()); + Assert.Equal("new", r.GetString(0)); + Assert.Equal(99, r.GetInt32(1)); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_reads_a_libred_row_inserted_after_adding_a_fixed_column_to_a_populated_table() + { + string path = Path.Combine(Path.GetTempPath(), $"addcol-fx-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + Ace(path, + "CREATE TABLE T (Id LONG PRIMARY KEY, A LONG)", + "INSERT INTO T (Id, A) VALUES (1, 10)", + "INSERT INTO T (Id, A) VALUES (2, 20)"); + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + Assert.True(db.AddColumn("T", new ColumnSpec("C", JetDataType.Int32, 4, IsFixedLength: true))); + db.OpenTable("T").Insert([3, 30, 99]); // LibRed writes a row with the newly-added fixed column + } + + // ACE reads all three rows: the pre-existing ones with C NULL, the LibRed-written one with C = 99. + using var conn = Open(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT Id, A, C FROM T ORDER BY Id"; + using var r = cmd.ExecuteReader(); + Assert.True(r.Read()); Assert.Equal(1, r.GetInt32(0)); Assert.Equal(10, r.GetInt32(1)); Assert.True(r.IsDBNull(2)); + Assert.True(r.Read()); Assert.Equal(2, r.GetInt32(0)); Assert.Equal(20, r.GetInt32(1)); Assert.True(r.IsDBNull(2)); + Assert.True(r.Read()); Assert.Equal(3, r.GetInt32(0)); Assert.Equal(30, r.GetInt32(1)); Assert.Equal(99, r.GetInt32(2)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Add_a_memo_column_falls_back_to_a_dedicated_usage_map_page_when_the_primary_is_full() + { + string path = Path.Combine(Path.GetTempPath(), $"addmemo-ded-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + string memo = new string('z', 200); + using (var db = JetDatabase.Open(path, readOnly: false)) + { + // 30 memo columns fill the table's primary usage-map page (~27 fit). + var cols = new List { new("Id", JetDataType.Int32, 4, IsFixedLength: true) }; + for (int i = 0; i < 30; i++) cols.Add(new($"M{i}", JetDataType.Memo, 0, IsFixedLength: false)); + db.CreateTable("W", cols, primaryKey: ["Id"]); + + // Adding another memo column must fall back to its own usage-map page (the primary is full). + Assert.True(db.AddColumn("W", new ColumnSpec("Extra", JetDataType.Memo, 0, IsFixedLength: false))); + + var t = db.Catalog.FindTable("W")!; + var tdef = db.ReadTableDefinition(t.DefinitionPage); + int m0Page = tdef.LongValueOwnedMaps[t.Columns.Single(c => c.Name == "M0").ColumnId].Page; + int extraPage = tdef.LongValueOwnedMaps[t.Columns.Single(c => c.Name == "Extra").ColumnId].Page; + Assert.NotEqual(m0Page, extraPage); // Extra's maps are on a dedicated page, not the (full) primary + + var row = new object?[t.Columns.Count]; + row[0] = 1; row[t.Columns.Single(c => c.Name == "Extra").Index] = memo; + db.OpenTable("W").Insert(row); + Assert.Equal(memo, db.OpenTable("W").Rows().Single()[t.Columns.Single(c => c.Name == "Extra").Index]); + } + + using var conn = Open(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT Extra FROM W WHERE Id = 1"; + Assert.Equal(memo, cmd.ExecuteScalar()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Add_and_drop_column_work_on_a_multi_page_tdef() + { + string path = Path.Combine(Path.GetTempPath(), $"multipage-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + // A wide table whose TDEF spans continuation pages. + var cols = new List { new("Id", JetDataType.Int32, 4, IsFixedLength: true) }; + for (int i = 0; i < 150; i++) cols.Add(new($"C{i}", JetDataType.Int32, 4, IsFixedLength: true)); + db.CreateTable("Wide", cols, primaryKey: ["Id"]); + Assert.NotEqual(0, db.ReadTableDefinition(db.Catalog.FindTable("Wide")!.DefinitionPage).NextDefinitionPage); // multi-page + + var row = new object?[cols.Count]; + row[0] = 1; row[1] = 42; // Id + C0 + db.OpenTable("Wide").Insert(row); + + Assert.True(db.AddColumn("Wide", new ColumnSpec("Extra", JetDataType.Int32, 4, IsFixedLength: true))); + Assert.Contains("Extra", db.Catalog.FindTable("Wide")!.Columns.Select(c => c.Name)); + + Assert.True(db.DropColumn("Wide", "C5")); + Assert.DoesNotContain("C5", db.Catalog.FindTable("Wide")!.Columns.Select(c => c.Name)); + + // The surviving row still reads (C0 = 42, Extra = NULL). + var read = db.OpenTable("Wide").Rows().Single(); + Assert.Equal(1, Convert.ToInt32(read[db.Catalog.FindTable("Wide")!.Columns.Single(c => c.Name == "Id").Index])); + } + + // ACE opens the multi-page-TDEF-edited file and counts the row. + using var conn = Open(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM Wide"; + Assert.Equal(1, Convert.ToInt32(cmd.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_reads_a_libred_memo_column_added_to_a_populated_table() + { + string path = Path.Combine(Path.GetTempPath(), $"addcol-memo-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + Ace(path, + "CREATE TABLE T (Id LONG PRIMARY KEY, A LONG)", + "INSERT INTO T (Id, A) VALUES (1, 10)"); + + string memo = new string('y', 300); // > 64 bytes → an LVAL page, exercising the added usage maps + using (var db = JetDatabase.Open(path, readOnly: false)) + { + Assert.True(db.AddColumn("T", new ColumnSpec("M", JetDataType.Memo, 0, IsFixedLength: false))); + db.OpenTable("T").Insert([2, 20, memo]); + } + + // ACE opens the LibRed-edited file and reads the memo (old row NULL, new row the long value). + using var conn = Open(path); + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT M FROM T WHERE Id = 1"; Assert.Equal(DBNull.Value, c.ExecuteScalar()); } + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT M FROM T WHERE Id = 2"; Assert.Equal(memo, c.ExecuteScalar()); } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Adding_columns_with_default_and_required_preserves_existing_props_and_access_applies_them() + { + string path = Path.Combine(Path.GetTempPath(), $"addcol-lv-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + // ACE creates a table that already has a column DEFAULT (A DEFAULT 5) in its LvProp blob. + Ace(path, "CREATE TABLE T (Id LONG PRIMARY KEY, A LONG DEFAULT 5)"); + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + Assert.True(db.AddColumn("T", new ColumnSpec("Qty", JetDataType.Int32, 4, IsFixedLength: true), defaultValue: "1")); + Assert.True(db.AddColumn("T", new ColumnSpec("Nm", JetDataType.Text, 40, IsFixedLength: false, IsNullable: false))); + } + + // LibRed reads the pre-existing default AND the appended ones (the append didn't disturb A's block). + using (var db2 = JetDatabase.Open(path)) + { + var t = db2.Catalog.FindTable("T")!; + Assert.Equal("5", t.Columns.Single(c => c.Name == "A").DefaultValue); + Assert.Equal("1", t.Columns.Single(c => c.Name == "Qty").DefaultValue); + Assert.False(t.Columns.Single(c => c.Name == "Nm").IsNullable); + } + + // ACE opens the file and applies the LibRed-added Qty default on an omit-insert. + using var conn = Open(path); + using (var c = conn.CreateCommand()) + { c.CommandText = "INSERT INTO T (Id, A, Nm) VALUES (1, 10, 'x')"; c.ExecuteNonQuery(); } + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT Qty FROM T WHERE Id = 1"; Assert.Equal(1, Convert.ToInt32(c.ExecuteScalar())); } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AddIndexToPopulatedTableAccessTests.cs b/test/LibRed.Core.Tests/AddIndexToPopulatedTableAccessTests.cs new file mode 100644 index 00000000..2520a0f9 --- /dev/null +++ b/test/LibRed.Core.Tests/AddIndexToPopulatedTableAccessTests.cs @@ -0,0 +1,119 @@ +using System.Data.OleDb; +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Adding an index / primary key to a table that already has rows (Northwind seeds data, then adds the +/// key). LibRed back-fills the new index B-tree from the existing rows and appends its usage-map row +/// without disturbing the data/other-index maps; Access reads every row and enforces the key. +/// +public class AddIndexToPopulatedTableAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Access_reads_and_enforces_a_primary_key_added_after_data() + { + string path = Path.Combine(Path.GetTempPath(), $"populated-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE TABLE Region2 (RegionID LONG, RegionDescription TEXT(50))"; c.ExecuteNonQuery(); } + + // LibRed seeds rows, THEN adds the primary key (the order Northwind uses). + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var t = db.OpenTable("Region2"); + t.Insert([1, "Eastern"]); + t.Insert([2, "Western"]); + t.Insert([3, "Northern"]); + t.Insert([4, "Southern"]); + db.CreateIndex("Region2", "PK_Region2", [("RegionID", false)], isUnique: true, isPrimary: true); + } + + // LibRed still reads all rows after the index was added (usage maps intact). + using (var db = JetDatabase.Open(path)) + Assert.Equal(4, db.OpenTable("Region2").Rows().Count()); + + using var conn2 = OpenOleDb(path); + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM Region2"; + Assert.Equal(4, Convert.ToInt32(c.ExecuteScalar())); + } + // Access seeks via the new PK. + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT RegionDescription FROM Region2 WHERE RegionID = 3"; + Assert.Equal("Northern", c.ExecuteScalar()); + } + // The PK is enforced: a duplicate id is rejected, a new one is accepted. + using (var dup = conn2.CreateCommand()) + { + dup.CommandText = "INSERT INTO Region2 (RegionID, RegionDescription) VALUES (2, 'Dup')"; + Assert.ThrowsAny(() => dup.ExecuteNonQuery()); + } + using (var ok = conn2.CreateCommand()) + { + ok.CommandText = "INSERT INTO Region2 (RegionID, RegionDescription) VALUES (5, 'Central')"; + ok.ExecuteNonQuery(); + } + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM Region2"; + Assert.Equal(5, Convert.ToInt32(c.ExecuteScalar())); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A large back-fill forces the index B-tree to split into multiple levels; Access must read every row + // and the whole index (COUNT + a deep seek). + [Fact] + public void Access_reads_a_large_backfilled_index() + { + const int n = 2000; + string path = Path.Combine(Path.GetTempPath(), $"populated-big-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE TABLE Big (Id LONG, Payload TEXT(20))"; c.ExecuteNonQuery(); } + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var t = db.OpenTable("Big"); + for (int i = 1; i <= n; i++) t.Insert([i, $"row{i}"]); + db.CreateIndex("Big", "PK_Big", [("Id", false)], isUnique: true, isPrimary: true); + } + + using var conn2 = OpenOleDb(path); + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM Big"; + Assert.Equal(n, Convert.ToInt32(c.ExecuteScalar())); + } + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT Payload FROM Big WHERE Id = 1777"; + Assert.Equal("row1777", c.ExecuteScalar()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AgileEncryptionTests.cs b/test/LibRed.Core.Tests/AgileEncryptionTests.cs new file mode 100644 index 00000000..0cba8d8b --- /dev/null +++ b/test/LibRed.Core.Tests/AgileEncryptionTests.cs @@ -0,0 +1,89 @@ +using LibRed; +using LibRed.Crypto; +using System.Buffers.Binary; +using System.Text; +using Xunit; + +namespace LibRed.Core.Tests; + +/// Reading a password-encrypted ACCDB (Office Agile encryption) end-to-end. +public class AgileEncryptionTests +{ + [Fact] + public void Opens_and_reads_encrypted_database_with_password() + { + using var db = JetDatabase.Open(TestDatabases.EncryptedAccdb, password: TestDatabases.EncryptedPassword); + + // Page 0 header decodes even without the password; here it confirms the file is encrypted. + Assert.NotEqual(0, db.DefinitionPage.DatabaseKey); + + // Reading the catalog forces data-page decryption. A correctly decrypted database yields the + // usual Access system objects. + var msys = db.OpenTable("MSysObjects"); + int nameIdx = msys.Definition.FindColumn("Name")!.Index; + var names = msys.Rows().Select(r => r[nameIdx]?.ToString()).ToList(); + + Assert.NotEmpty(names); + Assert.Contains("Relationships", names); + Assert.Contains("MSysObjects", names); + } + + [Fact] + public void Wrong_password_is_rejected() + { + Assert.Throws(() => + JetDatabase.Open(TestDatabases.EncryptedAccdb, password: "not the password")); + } + + [Fact] + public void Missing_password_on_encrypted_database_throws() + { + Assert.Throws(() => + JetDatabase.Open(TestDatabases.EncryptedAccdb)); + } + + [Theory] + [InlineData("spinCount=\"100000\"", "spinCount=\"100001\"")] + [InlineData("keyBits=\"256\"", "keyBits=\"257\"")] + [InlineData("blockSize=\"16\"", "blockSize=\"15\"")] + public void Unsupported_agile_profile_dimensions_are_rejected_before_kdf_or_crypto( + string original, string replacement) + { + byte[] page0 = MutatePage0(original, replacement); + Assert.Throws(() => + AgileEncryption.TryCreate(page0, databaseKey: 1, TestDatabases.EncryptedPassword)); + } + + [Fact] + public void Xml_outside_the_declared_encryption_info_frame_is_not_claimed() + { + byte[] original = File.ReadAllBytes(TestDatabases.EncryptedAccdb)[..4096]; + int length = BinaryPrimitives.ReadUInt16LittleEndian(original.AsSpan(0x299, 2)); + byte[] descriptor = original.AsSpan(0x29B, length).ToArray(); + var page0 = new byte[4096]; + descriptor.CopyTo(page0, 0x100); + BinaryPrimitives.WriteUInt16LittleEndian(page0.AsSpan(0x299, 2), 0); + + Assert.Null(AgileEncryption.TryCreate(page0, databaseKey: 1, TestDatabases.EncryptedPassword)); + } + + private static byte[] MutatePage0(string original, string replacement) + { + Assert.Equal(original.Length, replacement.Length); + byte[] page0 = File.ReadAllBytes(TestDatabases.EncryptedAccdb)[..4096]; + ReadOnlySpan find = Encoding.ASCII.GetBytes(original); + ReadOnlySpan replace = Encoding.ASCII.GetBytes(replacement); + int changes = 0; + for (int offset = 0; offset <= page0.Length - find.Length;) + { + int relative = page0.AsSpan(offset).IndexOf(find); + if (relative < 0) break; + int at = offset + relative; + replace.CopyTo(page0.AsSpan(at, replace.Length)); + changes++; + offset = at + replace.Length; + } + Assert.True(changes > 0); + return page0; + } +} diff --git a/test/LibRed.Core.Tests/AllocatorAndLvalOwnershipTests.cs b/test/LibRed.Core.Tests/AllocatorAndLvalOwnershipTests.cs new file mode 100644 index 00000000..9a37f9f1 --- /dev/null +++ b/test/LibRed.Core.Tests/AllocatorAndLvalOwnershipTests.cs @@ -0,0 +1,154 @@ +using System.Buffers.Binary; +using LibRed; +using LibRed.Catalog; +using LibRed.IO; +using LibRed.Pages; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class AllocatorAndLvalOwnershipTests +{ + [Theory] + [InlineData("reserved")] + [InlineData("outside-file")] + public void Allocator_rejects_invalid_pages_marked_free(string corruption) + { + using var fixture = new Fixture(); + (byte[] page, RowSlot slot) = GlobalMap(fixture.Table); + Span map = page.AsSpan(slot.Offset, slot.Length); + Assert.Equal(0, map[0]); + map[5..].Clear(); + + int start = BinaryPrimitives.ReadInt32LittleEndian(map.Slice(1, 4)); + int target = corruption == "reserved" ? 1 : fixture.Table.Channel.PageCount + 1; + int bit = target - start; + Assert.InRange(bit, 0, (map.Length - 5) * 8 - 1); + map[5 + bit / 8] |= (byte)(1 << (bit % 8)); + fixture.Table.Channel.WritePage(1, page); + + Assert.Throws(() => new PageAllocator(fixture.Table.Channel).Allocate()); + } + + [Fact] + public void Allocator_rejects_an_out_of_file_reference_bitmap_pointer() + { + using var fixture = new Fixture(); + (byte[] page, RowSlot slot) = GlobalMap(fixture.Table); + Span map = page.AsSpan(slot.Offset, slot.Length); + Assert.True(map.Length >= 69); + map.Clear(); + map[0] = 1; + BinaryPrimitives.WriteInt32LittleEndian(map.Slice(1, 4), fixture.Table.Channel.PageCount + 1); + fixture.Table.Channel.WritePage(1, page); + + Assert.Throws(() => new PageAllocator(fixture.Table.Channel).Allocate()); + } + + [Fact] + public void Lval_append_rejects_a_non_lval_data_page() + { + using var fixture = new Fixture(); + int tablePage = fixture.Table.UsageMap.DataPages().First(); + + Assert.Throws(() => + new LongValueWriter(fixture.Table.Channel).TryAppend(tablePage, [1])); + } + + [Fact] + public void Lval_append_rejects_inconsistent_free_space_before_mutation() + { + using var fixture = new Fixture(); + var writer = new LongValueWriter(fixture.Table.Channel); + int pageNumber = writer.WriteNewPage([1]); + byte[] page = fixture.Table.Channel.ReadPage(pageNumber).Span.ToArray(); + BinaryPrimitives.WriteUInt16LittleEndian( + page.AsSpan(fixture.Table.Channel.Format.DataFreeSpaceOffset, 2), ushort.MaxValue); + fixture.Table.Channel.WritePage(pageNumber, page); + + Assert.Throws(() => writer.TryAppend(pageNumber, [2])); + } + + [Fact] + public void Lval_write_rejects_a_usage_map_pointer_to_an_owned_data_page_shape() + { + using var fixture = new Fixture(); + ColumnDef column = fixture.Table.Definition.Columns.First(c => c.Type == JetDataType.Ole); + var definition = new TableDefinitionPage(); + definition.Read(fixture.Table.Channel, fixture.Table.Definition.DefinitionPage); + (_, int mapPage) = definition.LongValueOwnedMaps[column.ColumnId]; + + byte[] page = fixture.Table.Channel.ReadPage(mapPage).Span.ToArray(); + BinaryPrimitives.WriteInt32LittleEndian( + page.AsSpan(fixture.Table.Channel.Format.DataOwnerOffset, 4), + fixture.Table.Definition.DefinitionPage); + fixture.Table.Channel.WritePage(mapPage, page); + + Assert.Throws(() => + new RowInserter(fixture.Table.Channel, fixture.Table.Definition) + .StorePackedLongValue(column.ColumnId, new byte[100])); + } + + [Fact] + public void Lval_reclamation_validates_the_complete_chain_and_owned_map_before_freeing() + { + using var fixture = new Fixture(); + fixture.Database.CreateTable("LvalOwned", + [new("Id", JetDataType.Int32, 4, IsFixedLength: true), + new("M", JetDataType.Memo, 0, IsFixedLength: false)], + primaryKey: ["Id"]); + Table table = fixture.Database.OpenTable("LvalOwned"); + string original = new('a', 5000); + table.Insert([1, original]); + + (RowId id, object?[] values) = table.Rows().WithIds().Single(); + PageBuffer page = table.Channel.ReadPage(id.Page); + Assert.True(DataPage.TryReadRow(page, table.Channel.Format, id.Row, out _, out ReadOnlySpan row)); + ColumnDef memo = table.Definition.FindColumn("M")!; + byte[] descriptor = new RowDecoder(table.Definition.Columns, table.Channel.Format) + .LongValueRaw(row)[memo.Index]; + int firstPage = descriptor[5] | descriptor[6] << 8 | descriptor[7] << 16; + + var definition = new TableDefinitionPage(); + definition.Read(table.Channel, table.Definition.DefinitionPage); + (int mapRow, int mapPage) = definition.LongValueOwnedMaps[memo.ColumnId]; + new UsageMapWriter(table.Channel).SetBit(mapRow, mapPage, firstPage, set: false); + + object?[] updated = (object?[])values.Clone(); + updated[memo.Index] = new string('b', 5000); + Assert.Throws(() => + table.Update(id, updated, new HashSet { memo.Index })); + Assert.Equal(original, table.Rows().Single()[memo.Index]); + } + + private static (byte[] Page, RowSlot Slot) GlobalMap(Table table) + { + byte[] page = table.Channel.ReadPage(1).Span.ToArray(); + var parsed = new DataPage(); + parsed.Read(table.Channel.ReadPage(1), table.Channel.Format); + return (page, parsed.Rows[0]); + } + + private sealed class Fixture : IDisposable + { + private readonly string _path = Path.Combine(Path.GetTempPath(), $"alloc-lval-{Guid.NewGuid():N}.accdb"); + private readonly JetDatabase _database; + + public Fixture() + { + File.Copy(TestDatabases.NorthwindAccdb, _path); + _database = JetDatabase.Open(_path, readOnly: false); + Table = _database.OpenTable("Categories"); + } + + public Table Table { get; } + public JetDatabase Database => _database; + + public void Dispose() + { + _database.Dispose(); + File.Delete(_path); + } + } +} diff --git a/test/LibRed.Core.Tests/AlterForeignKeyAccessTests.cs b/test/LibRed.Core.Tests/AlterForeignKeyAccessTests.cs new file mode 100644 index 00000000..5eca99ec --- /dev/null +++ b/test/LibRed.Core.Tests/AlterForeignKeyAccessTests.cs @@ -0,0 +1,69 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A foreign key added to an existing table (ALTER TABLE ADD CONSTRAINT … FOREIGN KEY). LibRed writes the +/// child backing index, the parent's incoming relationship block and the MSysRelationships rows; Access +/// reads the relationship and enforces referential integrity. +/// +public class AlterForeignKeyAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Access_reads_and_enforces_a_libred_added_foreign_key() + { + string path = Path.Combine(Path.GetTempPath(), $"fk-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + using var c1 = conn.CreateCommand(); + c1.CommandText = "CREATE TABLE CustDemo (CustomerTypeID TEXT(10) CONSTRAINT PK PRIMARY KEY, Descr TEXT(50))"; + c1.ExecuteNonQuery(); + using var c2 = conn.CreateCommand(); + c2.CommandText = "CREATE TABLE CustCustDemo (CustomerID TEXT(10), CustomerTypeID TEXT(10))"; + c2.ExecuteNonQuery(); + } + + using (var db = JetDatabase.Open(path, readOnly: false)) + db.AddForeignKey("CustCustDemo", new RelationshipSpec( + "FK_CustCustDemo", "CustDemo", + [("CustomerTypeID", "CustomerTypeID")], + IsEnforced: true, CascadeUpdate: false, CascadeDelete: false)); + + // LibRed's own read side sees the relationship. + using (var db = JetDatabase.Open(path)) + Assert.Single(db.Catalog.ForeignKeysOf("CustCustDemo")); + + using var conn2 = OpenOleDb(path); + void Exec(string sql) { using var c = conn2.CreateCommand(); c.CommandText = sql; c.ExecuteNonQuery(); } + + Exec("INSERT INTO CustDemo (CustomerTypeID, Descr) VALUES ('T1', 'Type one')"); + Exec("INSERT INTO CustCustDemo (CustomerID, CustomerTypeID) VALUES ('ALFKI', 'T1')"); // valid parent + // Referencing a non-existent parent must be rejected by the enforced relationship. + Assert.ThrowsAny(() => + Exec("INSERT INTO CustCustDemo (CustomerID, CustomerTypeID) VALUES ('ANATR', 'ZZ')")); + + using var count = conn2.CreateCommand(); + count.CommandText = "SELECT COUNT(*) FROM CustCustDemo"; + Assert.Equal(1, Convert.ToInt32(count.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AlterPrimaryKeyAccessTests.cs b/test/LibRed.Core.Tests/AlterPrimaryKeyAccessTests.cs new file mode 100644 index 00000000..75710d79 --- /dev/null +++ b/test/LibRed.Core.Tests/AlterPrimaryKeyAccessTests.cs @@ -0,0 +1,60 @@ +using System.Data.OleDb; +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A multi-column primary key added to an (empty) table — the write path ALTER TABLE ADD CONSTRAINT +/// PRIMARY KEY reuses (CreateIndex with isPrimary/isUnique). Access accepts it and enforces uniqueness. +/// +public class AlterPrimaryKeyAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Access_enforces_a_libred_written_multi_column_primary_key() + { + string path = Path.Combine(Path.GetTempPath(), $"pk-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE TABLE CCDemo (CustomerID TEXT(10), CustomerTypeID TEXT(10))"; c.ExecuteNonQuery(); } + + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateIndex("CCDemo", "PK_CCDemo", + [("CustomerID", false), ("CustomerTypeID", false)], isUnique: true, isPrimary: true); + + using var conn2 = OpenOleDb(path); + void Insert(string a, string b) + { + using var c = conn2.CreateCommand(); + c.CommandText = $"INSERT INTO CCDemo (CustomerID, CustomerTypeID) VALUES ('{a}', '{b}')"; + c.ExecuteNonQuery(); + } + + Insert("ALFKI", "T1"); + Insert("ALFKI", "T2"); // same CustomerID, different type — allowed + Insert("ANATR", "T1"); // different CustomerID — allowed + // Duplicate composite key must be rejected by the primary key. + Assert.ThrowsAny(() => Insert("ALFKI", "T1")); + + using var count = conn2.CreateCommand(); + count.CommandText = "SELECT COUNT(*) FROM CCDemo"; + Assert.Equal(3, Convert.ToInt32(count.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/AutoNumberSeedTests.cs b/test/LibRed.Core.Tests/AutoNumberSeedTests.cs new file mode 100644 index 00000000..03eea3e4 --- /dev/null +++ b/test/LibRed.Core.Tests/AutoNumberSeedTests.cs @@ -0,0 +1,192 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// KB 884185 ground truth: after an explicit INSERT of a LOWER value into an AutoNumber column, Access sets the +// 0x14 high-water to the *last inserted value* (not the max), so the next auto id re-derives from it and +// collides with an existing row — the "duplicate values in the index/primary key" error. LibRed diverges (it +// advances 0x14 monotonically and is immune — see AutoNumberSeedImmunityTests in LibRed.Engine.Tests). +public class AutoNumberSeedTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + private static int HighWater(JetDatabase db, string table) + { + var col = db.Catalog.FindTable(table)!.Columns.First(c => c.IsAutoNumber); + return col.Seed - col.Increment; // Seed = lastAuto (0x14) + increment + } + + [Fact] + public void Ace_seeds_the_high_water_from_the_last_inserted_value() + { + string path = Path.Combine(Path.GetTempPath(), $"anb-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + void Exec(string sql) { using var c = conn.CreateCommand(); c.CommandText = sql; c.ExecuteNonQuery(); } + Exec("CREATE TABLE Table1 (Field1 COUNTER CONSTRAINT PK_T1 PRIMARY KEY, Field2 TEXT(10))"); + for (char ch = 'A'; ch <= 'F'; ch++) Exec($"INSERT INTO Table1 (Field2) VALUES ('{ch}')"); // Field1 → 1..6 + Exec("DELETE FROM Table1 WHERE Field1 = 3"); + Exec("INSERT INTO Table1 (Field1, Field2) VALUES (3, 'C')"); // explicit lower value + } + + using (var db = JetDatabase.Open(path, readOnly: true)) + Assert.Equal(3, HighWater(db, "Table1")); // ACE took the last-inserted value, not the max (6) + + // The next auto insert re-derives 3+1=4 → collides with the existing row 4. + using var conn2 = OpenOleDb(path); + using var bad = conn2.CreateCommand(); + bad.CommandText = "INSERT INTO Table1 (Field2) VALUES ('G')"; + Assert.ThrowsAny(() => bad.ExecuteNonQuery()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Byte-faithful: LibRed's in-place counter reseed (metadata-only 0x14/0x18 edit, no rebuild) is read + // correctly by ACE — ACE's next auto id is the LibRed-written seed. + [Fact] + public void Ace_reads_a_libred_in_place_counter_reseed() + { + string path = Path.Combine(Path.GetTempPath(), $"lrr-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new ColumnSpec("V", JetDataType.Text, 10, IsFixedLength: false)], + primaryKey: ["Id"]); + db.OpenTable("T"); + // Reseed in place to 100 (routes through the metadata-only path, not RewriteColumn). + db.AlterColumn("T", "Id", + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true, Seed: 100, Increment: 1)); + } + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (V) VALUES ('a')"; c.ExecuteNonQuery(); } + using var q = conn.CreateCommand(); + q.CommandText = "SELECT Id FROM T WHERE V = 'a'"; + Assert.Equal(100, Convert.ToInt32(q.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Symmetric to promotion but NOT a divergence: ACE allows demoting a counter to a plain integer. LibRed + // does it in place (clears the 0x04 flag); ACE reads the result as a plain int and accepts explicit ids. + [Fact] + public void Ace_reads_a_libred_counter_demoted_to_int() + { + string path = Path.Combine(Path.GetTempPath(), $"c2i-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new ColumnSpec("V", JetDataType.Text, 5, IsFixedLength: false)], + primaryKey: ["Id"]); + var t = db.OpenTable("T"); t.Insert([null, "a"]); t.Insert([null, "b"]); // auto → 1, 2 + db.AlterColumn("T", "Id", new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: false)); + } + + using var conn = OpenOleDb(path); + // No longer auto-assigning: ACE requires an explicit Id (a plain int PK), and takes it. + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (Id, V) VALUES (50, 'c')"; c.ExecuteNonQuery(); } + using var q = conn.CreateCommand(); + q.CommandText = "SELECT COUNT(*) FROM T"; + Assert.Equal(3, Convert.ToInt32(q.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Divergence (deliberate): ACE refuses to promote an existing plain integer column to AutoNumber via + // ALTER COLUMN … COUNTER(...) ("Invalid field data type"), like SQL Server. LibRed allows it (like + // PostgreSQL's ADD GENERATED AS IDENTITY and MySQL's MODIFY … AUTO_INCREMENT), rebuilding the column and + // preserving the data — and the result is a valid counter ACE reads and uses (next id = seed). Both facts + // pinned here. + [Fact] + public void Ace_refuses_but_libred_allows_promoting_an_int_column_to_a_counter() + { + // ACE: reject. + string acePath = Path.Combine(Path.GetTempPath(), $"i2c-ace-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, acePath); + try + { + using var conn = OpenOleDb(acePath); + void Exec(string s) { using var c = conn.CreateCommand(); c.CommandText = s; c.ExecuteNonQuery(); } + Exec("CREATE TABLE T (Id LONG CONSTRAINT PK PRIMARY KEY, V TEXT(5))"); + Exec("INSERT INTO T (Id, V) VALUES (1, 'a')"); + using var bad = conn.CreateCommand(); + bad.CommandText = "ALTER TABLE T ALTER COLUMN Id COUNTER(100, 1)"; + var ex = Assert.ThrowsAny(() => bad.ExecuteNonQuery()); + Assert.Contains("Invalid field data type", ex.Message); + } + finally { try { File.Delete(acePath); } catch (IOException) { } } + + // LibRed: allow, and the converted counter round-trips through ACE (next auto id = seed). + string libPath = Path.Combine(Path.GetTempPath(), $"i2c-lib-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, libPath); + try + { + using (var db = JetDatabase.Open(libPath, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), // plain int, not a counter + new ColumnSpec("V", JetDataType.Text, 5, IsFixedLength: false)], + primaryKey: ["Id"]); + var t = db.OpenTable("T"); t.Insert([1, "a"]); t.Insert([2, "b"]); t.Insert([3, "c"]); + db.AlterColumn("T", "Id", + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true, Seed: 100, Increment: 1)); + } + + using var conn = OpenOleDb(libPath); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (V) VALUES ('d')"; c.ExecuteNonQuery(); } + using var q = conn.CreateCommand(); + q.CommandText = "SELECT Id FROM T WHERE V = 'd'"; + Assert.Equal(100, Convert.ToInt32(q.ExecuteScalar())); // data preserved (1,2,3), next auto = seed + using var q2 = conn.CreateCommand(); + q2.CommandText = "SELECT COUNT(*) FROM T"; + Assert.Equal(4, Convert.ToInt32(q2.ExecuteScalar())); + } + finally { try { File.Delete(libPath); } catch (IOException) { } } + } + + // Ground truth for the reseed fix (KB 884185 resolution): ALTER COLUMN c COUNTER(seed, 1) sets the next id + // to `seed`. LibRed matches this (see AutoNumberReseedTests in LibRed.Engine.Tests). + [Fact] + public void Ace_reseeds_the_next_id_via_alter_column_counter() + { + string path = Path.Combine(Path.GetTempPath(), $"anr-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var conn = OpenOleDb(path); + void Exec(string sql) { using var c = conn.CreateCommand(); c.CommandText = sql; c.ExecuteNonQuery(); } + Exec("CREATE TABLE Table1 (Field1 COUNTER CONSTRAINT PK_T1 PRIMARY KEY, Field2 TEXT(10))"); + for (char ch = 'A'; ch <= 'F'; ch++) Exec($"INSERT INTO Table1 (Field2) VALUES ('{ch}')"); // 1..6 + Exec("ALTER TABLE Table1 ALTER COLUMN Field1 COUNTER(100, 1)"); + Exec("INSERT INTO Table1 (Field2) VALUES ('G')"); + using var q = conn.CreateCommand(); + q.CommandText = "SELECT Field1 FROM Table1 WHERE Field2 = 'G'"; + Assert.Equal(100, Convert.ToInt32(q.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/BinaryIndexKeyAccessTests.cs b/test/LibRed.Core.Tests/BinaryIndexKeyAccessTests.cs new file mode 100644 index 00000000..d25a4ec5 --- /dev/null +++ b/test/LibRed.Core.Tests/BinaryIndexKeyAccessTests.cs @@ -0,0 +1,93 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithfulness of the binary index-key encoding, checked against ACE's own stored keys in the +// EverythingIsBytes fixture (every entity has a byte[] primary key; some are 3/4/5/8/16-byte values, +// covering the single-chunk, full-chunk, and multi-chunk cases). For each stored index entry we fetch +// the row's actual key-column value and re-encode it — it must reproduce ACE's bytes exactly. +public class BinaryIndexKeyAccessTests +{ + [Fact] + public void Reencoding_binary_keys_reproduces_ace_bytes() + { + using var db = JetDatabase.Open(TestDatabases.EverythingIsBytesAccdb); + + int checkedEntries = 0; + foreach (TableDef tdef in db.Catalog.Tables) + { + var table = db.OpenTable(tdef.Name); + if (!table.Definition.Indexes.Any(i => i.Columns.Any(c => c.Column.Type == JetDataType.Binary))) + continue; + + // Map every live row to its column values, keyed by RowId, so a stored index entry's row + // can be resolved back to the value that produced its key. + var rows = table.Rows().WithIds().ToDictionary(r => r.Id, r => r.Values); + + foreach (IndexDef idx in table.Definition.Indexes) + { + if (idx.RootPage <= 0 || !idx.Columns.Any(c => c.Column.Type == JetDataType.Binary)) + continue; + + var cursor = new IndexCursor(table.Channel, idx.RootPage); + foreach ((byte[] stored, RowId row) in cursor.RawEntries()) + { + if (!rows.TryGetValue(row, out object?[]? values)) + continue; // entry points at a row we didn't scan (shouldn't happen); skip defensively + + byte[] reEncoded = IndexKeyEncoder.Encode(idx.Columns, values); + Assert.Equal(stored, reEncoded); + checkedEntries++; + } + } + } + + Assert.True(checkedEntries > 20, $"expected to check many binary keys, only saw {checkedEntries}"); + } + + [Theory] + [InlineData(new byte[] { }, "7F 00 00 00 00 00 00 00 00 00")] // empty → one padded chunk, len 0 + [InlineData(new byte[] { 0x01, 0x02, 0x03 }, "7F 01 02 03 00 00 00 00 00 03")] // 3 bytes, single chunk + [InlineData(new byte[] { 0x47, 0x75, 0x6D, 0x62, 0x61, 0x6C, 0x6C, 0x21 }, "7F 47 75 6D 62 61 6C 6C 21 08")] // full 8-byte chunk + [InlineData(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, "7F 01 02 03 04 05 06 07 08 09 09 00 00 00 00 00 00 00 01")] // 9 bytes → two chunks + public void Ascending_binary_key_matches_the_chunked_layout(byte[] data, string expectedHex) + { + var column = new ColumnDef { Name = "b", Type = JetDataType.Binary, Index = 0 }; + byte[] key = IndexKeyEncoder.Encode([(column, true)], [data]); + Assert.Equal(expectedHex, string.Join(" ", key.Select(x => x.ToString("X2")))); + } + + [Fact] + public void Encoded_binary_keys_sort_in_value_order_both_directions() + { + // Lexicographic byte order of the encoded keys must match value order ascending, and reverse it + // descending. (Descending mirrors the ACE-verified GUID descending: invert every byte except the + // 0x09 continuation markers.) + var col = new ColumnDef { Name = "b", Type = JetDataType.Binary, Index = 0 }; + byte[][] values = + [ + [], [0x00], [0x00, 0x00], [0x01], [0x01, 0x02, 0x03], [0x01, 0x02, 0x03, 0x04], + [0x02], [.. Enumerable.Repeat((byte)0xAB, 9)], [0xFF], [0xFF, 0x00], + ]; + + var asc = values.Select(v => IndexKeyEncoder.Encode([(col, true)], [v])).ToList(); + var desc = values.Select(v => IndexKeyEncoder.Encode([(col, false)], [v])).ToList(); + + for (int i = 0; i + 1 < values.Length; i++) + { + Assert.True(Compare(asc[i], asc[i + 1]) < 0, $"ascending: {Show(values[i])} should sort before {Show(values[i + 1])}"); + Assert.True(Compare(desc[i], desc[i + 1]) > 0, $"descending: {Show(values[i])} should sort after {Show(values[i + 1])}"); + } + + static int Compare(byte[] a, byte[] b) + { + int n = Math.Min(a.Length, b.Length); + for (int i = 0; i < n; i++) if (a[i] != b[i]) return a[i].CompareTo(b[i]); + return a.Length.CompareTo(b.Length); + } + static string Show(byte[] b) => "[" + string.Join(",", b.Select(x => x.ToString("X2"))) + "]"; + } +} diff --git a/test/LibRed.Core.Tests/BitwiseOperatorAccessTests.cs b/test/LibRed.Core.Tests/BitwiseOperatorAccessTests.cs new file mode 100644 index 00000000..bfeade3c --- /dev/null +++ b/test/LibRed.Core.Tests/BitwiseOperatorAccessTests.cs @@ -0,0 +1,51 @@ +using System.Data.OleDb; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Access bitwise operators (BAND / BOR / BXOR infix, BNOT prefix) — the same operator syntax runs in both +/// LibRed's engine and ACE and yields the same results. +/// +public class BitwiseOperatorAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + // ACE evaluates the same bitwise operator syntax, giving the values the LibRed engine tests assert. + [Fact] + public void Access_evaluates_bitwise_operators() + { + string path = Path.Combine(Path.GetTempPath(), $"bitop-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "CREATE TABLE B (Id LONG)"; c.ExecuteNonQuery(); } + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO B (Id) VALUES (1)"; c.ExecuteNonQuery(); } + + int Ace(string expr) + { + using var c = conn.CreateCommand(); + c.CommandText = $"SELECT ({expr}) FROM B"; + return Convert.ToInt32(c.ExecuteScalar()); + } + + Assert.Equal(2, Ace("6 BAND 3")); + Assert.Equal(7, Ace("6 BOR 3")); + Assert.Equal(5, Ace("6 BXOR 3")); + Assert.Equal(-6, Ace("BNOT 5")); + Assert.Equal(10, Ace("6 BAND 3 BOR 8")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/BooleanWriteAccessTests.cs b/test/LibRed.Core.Tests/BooleanWriteAccessTests.cs new file mode 100644 index 00000000..3e7906fa --- /dev/null +++ b/test/LibRed.Core.Tests/BooleanWriteAccessTests.cs @@ -0,0 +1,66 @@ +using System.Data.OleDb; +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A native BIT (YesNo) column written by LibRed. The boolean value is stored in the row's null-bitmap bit +/// (set = true); LibRed coerces the inserted value (1/-1/0/TRUE/FALSE) with Access truthiness. Access reads +/// the bits back correctly and a bare-boolean predicate returns the right rows. +/// +public class BooleanWriteAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Access_reads_libred_written_bit_values() + { + string path = Path.Combine(Path.GetTempPath(), $"bit-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE TABLE Bits (Id LONG, Flag BIT NOT NULL)"; c.ExecuteNonQuery(); } + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var t = db.OpenTable("Bits"); + t.Insert([1, 1]); // integer 1 → true + t.Insert([2, 0]); // integer 0 → false + t.Insert([3, true]); // bool true + t.Insert([4, false]); // bool false + t.Insert([5, -1]); // -1 → true + } + + using var conn2 = OpenOleDb(path); + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM Bits WHERE Flag = TRUE"; + Assert.Equal(3, Convert.ToInt32(c.ExecuteScalar())); // ids 1, 3, 5 + } + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT Flag FROM Bits WHERE Id = 1"; + Assert.Equal(true, c.ExecuteScalar()); + } + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT Flag FROM Bits WHERE Id = 2"; + Assert.Equal(false, c.ExecuteScalar()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/CatalogDumpTests.cs b/test/LibRed.Core.Tests/CatalogDumpTests.cs new file mode 100644 index 00000000..304f0ca7 --- /dev/null +++ b/test/LibRed.Core.Tests/CatalogDumpTests.cs @@ -0,0 +1,88 @@ +using System.Text; +using LibRed; +using LibRed.Catalog; +using Xunit; +using Xunit.Abstractions; + +namespace LibRed.Core.Tests; + +/// +/// Dumps every object in a database (user and system, in page order) with its properties, +/// columns/data types, and indexes (name, key columns, unique/primary, root page), then +/// asserts the whole rendering against a golden file. Pins the schema decode end to end; +/// regenerate the golden files if the decode intentionally changes. +/// Run with: dotnet test -l "console;verbosity=detailed" to see the dump. +/// +public class CatalogDumpTests(ITestOutputHelper output) +{ + private readonly ITestOutputHelper _output = output; + + [Fact] + public void Dump_northwind() => VerifyDump(TestDatabases.NorthwindAccdb, "catalog-dump.txt"); + + [Fact] + public void Dump_widetable() => VerifyDump(TestDatabases.WideTableAccdb, "widetable-dump.txt"); + + private void VerifyDump(string databasePath, string goldenFile) + { + string actual = BuildDump(databasePath); + _output.WriteLine(actual); + + string expected = Normalize(File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "Expected", goldenFile))); + Assert.Equal(expected, actual); + } + + private static string BuildDump(string path) + { + using var db = JetDatabase.Open(path); + + var sb = new StringBuilder(); + sb.Append($"Database: {db.DefinitionPage.FormatIdentifier} ({db.Format.Version}, page size {db.Format.PageSize})\n"); + + foreach (TableDef table in db.Catalog.Tables.OrderBy(t => t.DefinitionPage)) + { + var tdef = db.ReadTableDefinition(table.DefinitionPage); + + sb.Append('\n'); + sb.Append($"{(table.IsSystem ? "[SYS] " : " ")}{table.Name}\n"); + sb.Append($" tdefPage={table.DefinitionPage} type={tdef.TableType} rows={tdef.RowCount} columns={tdef.ColumnCount} indexes={table.Indexes.Count}\n"); + + foreach (ColumnDef c in table.Columns) + { + string store = c.IsFixedLength ? $"fixed@{c.FixedOffset}" : $"var#{c.VariableIndex}"; + string extra = c.IsAutoNumber ? " auto" : ""; + sb.Append($" {c.Index,2}. {c.Name,-26} {c.Type,-9} len={c.Length,3} {store}{extra}\n"); + } + + if (table.Indexes.Count > 0) + { + sb.Append(" --- indexes ---\n"); + foreach (IndexDef ix in table.Indexes) + { + string kind = ix.IsPrimaryKey ? "PK " : ix.IsUnique ? "U " : " "; + string cols = string.Join(", ", ix.Columns.Select(c => c.Column.Name + (c.Ascending ? "" : " DESC"))); + sb.Append($" {kind}{("\"" + ix.Name + "\""),-26} [{cols}] root={ix.RootPage} uniqueEntries={ix.UniqueEntryCount}\n"); + } + } + + var fks = db.Catalog.ForeignKeysOf(table.Name).OrderBy(f => f.Name).ToList(); + if (fks.Count > 0) + { + sb.Append(" --- foreign keys ---\n"); + foreach (ForeignKey fk in fks) + { + string cols = string.Join(", ", fk.Columns.Select(c => c.Column)); + string refcols = string.Join(", ", fk.Columns.Select(c => c.ReferencedColumn)); + string extra = (fk.IsEnforced ? "" : " (not enforced)") + + (fk.CascadeUpdate ? " cascadeUpdate" : "") + + (fk.CascadeDelete ? " cascadeDelete" : ""); + sb.Append($" {("\"" + fk.Name + "\""),-44} [{cols}] -> {fk.ReferencedTable} [{refcols}]{extra}\n"); + } + } + } + + return Normalize(sb.ToString()); + } + + private static string Normalize(string s) => s.Replace("\r\n", "\n").TrimEnd() + "\n"; +} diff --git a/test/LibRed.Core.Tests/CatalogTests.cs b/test/LibRed.Core.Tests/CatalogTests.cs new file mode 100644 index 00000000..fa85ce02 --- /dev/null +++ b/test/LibRed.Core.Tests/CatalogTests.cs @@ -0,0 +1,43 @@ +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +public class CatalogTests +{ + [Fact] + public void Enumerates_user_tables() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var names = db.Catalog.UserTables.Select(t => t.Name).ToList(); + + // The 12 Northwind user tables. + string[] expected = + [ + "Categories", "CustomerCustomerDemo", "CustomerDemographics", "Customers", + "Employees", "Order Details", "Orders", "Products", "Region", "Shippers", + "Suppliers", "Territories", + ]; + Assert.All(expected, e => Assert.Contains(e, names)); + + // System tables are excluded from UserTables but present overall. + Assert.DoesNotContain("MSysObjects", names); + Assert.Contains(db.Catalog.Tables, t => t.Name == "MSysObjects" && t.IsSystem); + } + + [Fact] + public void Resolves_full_column_lists() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var customers = db.Catalog.FindTable("Customers"); + Assert.NotNull(customers); + Assert.Equal( + ["CustomerID", "CompanyName", "ContactName", "ContactTitle", "Address", "City", + "Region", "PostalCode", "Country", "Phone", "Fax"], + customers!.Columns.Select(c => c.Name)); + + Assert.Equal(14, db.Catalog.FindTable("Orders")!.Columns.Count); + } +} diff --git a/test/LibRed.Core.Tests/ChainedLongValueAccessTests.cs b/test/LibRed.Core.Tests/ChainedLongValueAccessTests.cs new file mode 100644 index 00000000..60e65996 --- /dev/null +++ b/test/LibRed.Core.Tests/ChainedLongValueAccessTests.cs @@ -0,0 +1,71 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A memo value larger than one LVAL page (> 4076 bytes) is written as a chain of LVAL pages, +/// each chunk row beginning with a 4-byte pointer to the next. This checks a large value round-trips +/// through LibRed and that Access reads it back intact. +/// +public class ChainedLongValueAccessTests +{ + // 20 000 chars = 40 000 bytes → several chained LVAL pages (chunk data is 4072 bytes/page). + private static readonly string Big = + string.Concat(Enumerable.Range(0, 20_000).Select(i => (char)('A' + i % 26))); + + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try + { + var conn = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); + conn.Open(); + return conn; + } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + [Fact] + public void A_large_memo_chains_across_lval_pages_and_round_trips() + { + string path = Path.Combine(Path.GetTempPath(), $"chained-lval-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Big", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("M", JetDataType.Memo, 0, IsFixedLength: false)], + primaryKey: ["Id"]); + db.OpenTable("Big").Insert([1, Big]); + } + + // LibRed reads the chain back exactly. + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("Big"); + int m = table.Definition.Columns.First(c => c.Name == "M").Index; + Assert.Equal(Big, (string)table.Rows().First()[m]!); + } + + // Access reads the same value through its own long-value chain resolution. + using var conn = OpenOleDb(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT M FROM Big WHERE Id = 1"; + Assert.Equal(Big, (string)cmd.ExecuteScalar()!); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/CollationTests.cs b/test/LibRed.Core.Tests/CollationTests.cs new file mode 100644 index 00000000..8307cc5d --- /dev/null +++ b/test/LibRed.Core.Tests/CollationTests.cs @@ -0,0 +1,110 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Text collation is threaded from the database object into new column descriptors instead of being a +/// hardcoded constant. LibRed currently handles only General legacy (LCID 1033, version 0) — the order +/// every file it opens uses — so this verifies the plumbing is byte-faithful and that the index-key path +/// refuses any other collation rather than emitting wrong bytes. +/// +public class CollationTests +{ + private static List Columns() => + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true), + new("Name", JetDataType.Text, 50, IsFixedLength: false), + new("Note", JetDataType.Memo, 0, IsFixedLength: false), + new("Price", JetDataType.FixedPoint, 17, IsFixedLength: true, Precision: 18, Scale: 2), + ]; + + [Fact] + public void A_new_database_defaults_to_general_legacy() + { + string path = Path.Combine(Path.GetTempPath(), $"coll-def-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path); + Assert.Equal(Collation.GeneralLegacy, db.Collation); + Assert.Equal(CollatingOrder.General, db.Collation.Order); + Assert.Equal(0, db.Collation.Version); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Non_numeric_columns_carry_the_database_collation_and_round_trip() + { + string path = Path.Combine(Path.GetTempPath(), $"coll-rt-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", Columns(), primaryKey: ["Id"]); + + using var db2 = JetDatabase.Open(path); + var cols = db2.OpenTable("T").Definition.Columns; + + // Text and Memo columns read back the database collation. + Assert.Equal(Collation.GeneralLegacy, cols.First(c => c.Name == "Name").Collation); + Assert.Equal(Collation.GeneralLegacy, cols.First(c => c.Name == "Note").Collation); + + // A numeric column reuses the locale bytes for precision/scale — those must survive intact, + // and its (irrelevant) collation defaults to General legacy. + var price = cols.First(c => c.Name == "Price"); + Assert.Equal(18, price.Precision); + Assert.Equal(2, price.Scale); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void The_written_locale_bytes_are_byte_identical_to_the_old_hardcoded_constant() + { + string path = Path.Combine(Path.GetTempPath(), $"coll-bytes-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable("T", Columns(), primaryKey: ["Id"]); + var table = db.OpenTable("T"); + var format = db.Format; + + var tdef = table.Channel.ReadPage(table.Definition.DefinitionPage); + int dataCount = tdef.ReadInt32(format.TdefIndexCountOffset); + int columnBlock = format.TdefRealIndexBlockOffset + dataCount * format.RealIndexEntrySize; + int nameIndex = table.Definition.Columns.First(c => c.Name == "Name").Index; + var descriptor = tdef.Span.Slice(columnBlock + nameIndex * format.ColumnDescriptorSize, format.ColumnDescriptorSize); + + // 0x0409 (little-endian) locale, version 0 — exactly what the LocaleLow/LocaleHigh constants wrote. + Assert.Equal(0x09, descriptor[0x0B]); + Assert.Equal(0x04, descriptor[0x0C]); + Assert.Equal(0x00, descriptor[0x0D]); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Index_key_encoding_refuses_an_unsupported_collation() + { + // A column whose collation isn't General legacy (e.g. a 2010+ General v1, or a non-English locale) + // must be rejected, not encoded with the wrong (General-v0) weight table. + var v1 = new ColumnDef + { + Name = "C", + Type = JetDataType.Text, + Collation = new Collation(CollatingOrder.General, 1), + }; + var ex = Assert.Throws(() => + IndexKeyEncoder.Encode([(v1, true)], ["abc"])); + Assert.Contains("not implemented", ex.Message); + + // The same column at General legacy encodes fine. + var v0 = new ColumnDef { Name = "C", Type = JetDataType.Text, Collation = Collation.GeneralLegacy }; + Assert.NotEmpty(IndexKeyEncoder.Encode([(v0, true)], ["abc"])); + } +} diff --git a/test/LibRed.Core.Tests/ColumnAliasViewAccessTests.cs b/test/LibRed.Core.Tests/ColumnAliasViewAccessTests.cs new file mode 100644 index 00000000..c50897b3 --- /dev/null +++ b/test/LibRed.Core.Tests/ColumnAliasViewAccessTests.cs @@ -0,0 +1,70 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A view column can carry an alias, stored in the MSysQueries column row's Name1 (as Access does, e.g. +/// Invoices' Customers.CompanyName AS CustomerName). Access resolves the aliased output column. +/// +public class ColumnAliasViewAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + [Fact] + public void Access_runs_a_multi_join_view_with_a_column_alias() + { + string path = Path.Combine(Path.GetTempPath(), $"colalias-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateView("CustLines", new ViewSpec( + Distinct: false, + Columns: + [ + new ViewColumnSpec("Customers.CompanyName", "CustomerName"), // aliased + new ViewColumnSpec("Orders.OrderID", null), + new ViewColumnSpec("[Order Details].Quantity", null), + ], + Tables: + [ + new ViewTableSpec("Customers", null), + new ViewTableSpec("Orders", null), + new ViewTableSpec("Order Details", null), + ], + Joins: + [ + new ViewJoinSpec(ViewJoinType.Inner, "Customers.CustomerID = Orders.CustomerID", "Customers", "Orders"), + new ViewJoinSpec(ViewJoinType.Inner, "Orders.OrderID = [Order Details].OrderID", "Orders", "Order Details"), + ], + Where: null)); + + using var conn = OpenOleDb(path); + using var count = conn.CreateCommand(); + count.CommandText = "SELECT COUNT(*) FROM CustLines"; + Assert.Equal(2155, Convert.ToInt32(count.ExecuteScalar())); + + // The output column is exposed under its alias. + using var aliased = conn.CreateCommand(); + aliased.CommandText = "SELECT COUNT(CustomerName) FROM CustLines"; + Assert.Equal(2155, Convert.ToInt32(aliased.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/ColumnDescriptorFlagTests.cs b/test/LibRed.Core.Tests/ColumnDescriptorFlagTests.cs new file mode 100644 index 00000000..79bf5f3b --- /dev/null +++ b/test/LibRed.Core.Tests/ColumnDescriptorFlagTests.cs @@ -0,0 +1,66 @@ +using LibRed.Catalog; +using LibRed.Formats; +using Xunit; + +namespace LibRed.Core.Tests; + +// Every DOCUMENTED column-descriptor field is modelled and round-trips explicitly (read into ColumnDef, +// written from it). Only the genuinely reserved/unknown bytes ride through RawDescriptor: the reserved words +// at 0x03/0x11 and the undocumented bits of the two flag bytes (0x0F/0x10). This pins that the documented +// flag bits — GUID-autonumber (0x40), hyperlink (0x80), compressed-Unicode (0x10/0x01) and calculated +// (0x10/0xC0) — survive a rebuild rather than being dropped when composed from the model. +public class ColumnDescriptorFlagTests +{ + [Fact] + public void BuildColumnDescriptor_round_trips_documented_flags_and_reserved_bytes() + { + JetFormatBase format = JetFormatBase.FromVersionByte(0x02); // ACE 12 + int size = format.ColumnDescriptorSize; + + // A crafted original: updatable + GUID-autonumber + hyperlink, plus an UNDOCUMENTED bit (0x08) in 0x0F; + // compressed-Unicode + calculated in 0x10; and non-zero RESERVED words at 0x03 and 0x11. + var raw = new byte[size]; + raw[format.ColumnFlagsOffset] = (byte)(ColumnFlags(updatable: true, guid: true, hyperlink: true) | 0x08); + raw[format.ColumnExtendedFlagsOffset] = + JetFormatBase.ColumnExtFlagCompressedUnicode | JetFormatBase.ColumnExtFlagCalculated; + raw[0x03] = 0xAB; raw[0x04] = 0xCD; // reserved word + raw[0x11] = 0xDE; raw[0x12] = 0xAD; raw[0x13] = 0xBE; raw[0x14] = 0xEF; // reserved word + + var col = new ColumnDef + { + Name = "H", Type = JetDataType.Memo, Index = 0, ColumnId = 3, Length = 4, + IsUpdatable = true, IsGuidAutoNumber = true, IsHyperlink = true, + SupportsCompressedUnicode = true, IsCalculated = true, + RawDescriptor = raw, + }; + + byte[] d = TdefBuilder.BuildColumnDescriptor(col, format); + + // Both flag bytes reproduce the original exactly — documented bits composed from the model, the + // undocumented 0x08 bit preserved from raw. + Assert.Equal(raw[format.ColumnFlagsOffset], d[format.ColumnFlagsOffset]); + Assert.Equal(raw[format.ColumnExtendedFlagsOffset], d[format.ColumnExtendedFlagsOffset]); + + // Reserved/unknown words survive verbatim. + Assert.Equal(raw[0x03], d[0x03]); Assert.Equal(raw[0x04], d[0x04]); + Assert.Equal(raw[0x11], d[0x11]); Assert.Equal(raw[0x12], d[0x12]); + Assert.Equal(raw[0x13], d[0x13]); Assert.Equal(raw[0x14], d[0x14]); + } + + [Fact] + public void A_fresh_column_is_updatable_with_no_other_documented_flags() + { + JetFormatBase format = JetFormatBase.FromVersionByte(0x02); + var col = new ColumnDef { Name = "C", Type = JetDataType.Int32, Index = 0, ColumnId = 0, Length = 4, IsFixedLength = true }; + + byte[] d = TdefBuilder.BuildColumnDescriptor(col, format); + + Assert.Equal(JetFormatBase.ColumnFlagUpdatable | JetFormatBase.ColumnFlagFixedLength, d[format.ColumnFlagsOffset]); + Assert.Equal(0, d[format.ColumnExtendedFlagsOffset]); + } + + private static byte ColumnFlags(bool updatable, bool guid, bool hyperlink) => (byte)( + (updatable ? JetFormatBase.ColumnFlagUpdatable : 0) + | (guid ? JetFormatBase.ColumnFlagGuidAutoNumber : 0) + | (hyperlink ? JetFormatBase.ColumnFlagHyperlink : 0)); +} diff --git a/test/LibRed.Core.Tests/ColumnIdHighWaterTests.cs b/test/LibRed.Core.Tests/ColumnIdHighWaterTests.cs new file mode 100644 index 00000000..ee192bb2 --- /dev/null +++ b/test/LibRed.Core.Tests/ColumnIdHighWaterTests.cs @@ -0,0 +1,74 @@ +using System.Data.OleDb; +using System.Text; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// The column-id high-water (TDEF 0x29) never decrements on DROP COLUMN, so once 255 ids have been handed out +// no further column can be added — even when the *live* count is lower — until the database is compacted. +// ACE enforces this ("Too many fields defined"); LibRed must too, rather than write a 256th id ACE can't read. +public class ColumnIdHighWaterTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Ace_rejects_add_column_after_255_ids_used_even_with_dropped_columns() + { + string path = Path.Combine(Path.GetTempPath(), $"c255a-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var conn = OpenOleDb(path); + void Exec(string sql) { using var c = conn.CreateCommand(); c.CommandText = sql; c.ExecuteNonQuery(); } + + var sb = new StringBuilder("CREATE TABLE C255 ("); + for (int i = 1; i <= 255; i++) sb.Append($"c{i} SHORT{(i < 255 ? ", " : "")}"); + Exec(sb.Append(')').ToString()); + for (int i = 1; i <= 10; i++) Exec($"ALTER TABLE C255 DROP COLUMN c{i}"); // live 245, high-water still 255 + + using var add = conn.CreateCommand(); + add.CommandText = "ALTER TABLE C255 ADD COLUMN cNew SHORT"; + var ex = Assert.ThrowsAny(() => add.ExecuteNonQuery()); + Assert.Contains("Too many fields", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Libred_rejects_add_column_once_the_id_high_water_reaches_255() + { + string path = Path.Combine(Path.GetTempPath(), $"c255l-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + ColumnSpec Short(string n) => new(n, JetDataType.Int16, 2, IsFixedLength: true); + + // 254 columns → high-water 254; one more is still allowed (→ 255). + db.CreateTable("C", Enumerable.Range(1, 254).Select(i => Short($"c{i}")).ToList()); + Assert.True(db.AddColumn("C", Short("c255"))); // 255th id — OK + Assert.Equal(255, db.Catalog.FindTable("C")!.Columns.Count); + + // Now the high-water is 255: dropping columns frees the live count but NOT the id space. + for (int i = 1; i <= 10; i++) db.DropColumn("C", $"c{i}"); + Assert.Equal(245, db.Catalog.FindTable("C")!.Columns.Count); + + var ex = Assert.Throws(() => db.AddColumn("C", Short("cNew"))); + Assert.Contains("too many fields", ex.Message); + Assert.Equal(245, db.Catalog.FindTable("C")!.Columns.Count); // unchanged — nothing written + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/ComplexAutoNumberRoundTripTests.cs b/test/LibRed.Core.Tests/ComplexAutoNumberRoundTripTests.cs new file mode 100644 index 00000000..e8cd12de --- /dev/null +++ b/test/LibRed.Core.Tests/ComplexAutoNumberRoundTripTests.cs @@ -0,0 +1,43 @@ +using System.Buffers.Binary; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; +using Xunit; + +namespace LibRed.Core.Tests; + +// The TDEF header's complex-type AutoNumber high-water (0x1C) is a documented, meaningful field (the next id +// for a complex multi-value/attachment column). LibRed now reads it into the model and writes it explicitly +// through TdefBuilder, rather than leaving it to the raw surgery path. It is 0 for every table LibRed creates +// (no complex columns), so this pins the read/write path with a non-zero value directly. +public class ComplexAutoNumberRoundTripTests +{ + [Fact] + public void Complex_autonumber_high_water_is_written_and_read_back() + { + JetFormatBase format = JetFormatBase.FromVersionByte(0x02); // ACE 12 + var specs = new[] { new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true) }; + + byte[] page = TdefBuilder.Build(format, TableType.User, specs, complexAutoNumber: 42).Page; + + // Written explicitly at 0x1C… + Assert.Equal(42, BinaryPrimitives.ReadInt32LittleEndian(page.AsSpan(format.TdefComplexAutoNumberOffset, 4))); + + // …and read back into the model. + var tdef = new TableDefinitionPage(); + tdef.Read(new PageBuffer(page, 0), format); + Assert.Equal(42, tdef.ComplexAutoNumber); + } + + [Fact] + public void Complex_autonumber_defaults_to_zero_for_an_ordinary_table() + { + JetFormatBase format = JetFormatBase.FromVersionByte(0x02); + var specs = new[] { new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true) }; + + byte[] page = TdefBuilder.Build(format, TableType.User, specs).Page; + + Assert.Equal(0, BinaryPrimitives.ReadInt32LittleEndian(page.AsSpan(format.TdefComplexAutoNumberOffset, 4))); + } +} diff --git a/test/LibRed.Core.Tests/CompositeFkNullAccessTests.cs b/test/LibRed.Core.Tests/CompositeFkNullAccessTests.cs new file mode 100644 index 00000000..15ba0fc0 --- /dev/null +++ b/test/LibRed.Core.Tests/CompositeFkNullAccessTests.cs @@ -0,0 +1,43 @@ +using System.Data.OleDb; +using Xunit; + +namespace LibRed.Core.Tests; + +// Ground truth for LibRed's composite-FK enforcement: ACE applies MATCH FULL — a partial null in a composite +// foreign key (one column null, the other not) is rejected, only all-null or a fully-matching key is allowed. +// (SQL Server's MATCH SIMPLE would skip the check when any column is null; ACE does not.) +public class CompositeFkNullAccessTests +{ + private static OleDbConnection Open(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + throw new InvalidOperationException("no ace"); + } + private static void Ok(OleDbConnection c, string sql) { using var m = c.CreateCommand(); m.CommandText = sql; m.ExecuteNonQuery(); } + private static void Rejects(OleDbConnection c, string sql) => + Assert.ThrowsAny(() => { using var m = c.CreateCommand(); m.CommandText = sql; m.ExecuteNonQuery(); }); + + [Fact] + public void Access_applies_match_full_to_a_composite_foreign_key() + { + string path = Path.Combine(Path.GetTempPath(), $"cfk-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var c = Open(path); + Ok(c, "CREATE TABLE P (A LONG, B LONG, CONSTRAINT PK_P PRIMARY KEY (A, B))"); + Ok(c, "CREATE TABLE C (Id LONG PRIMARY KEY, X LONG, Y LONG, " + + "CONSTRAINT FK_C FOREIGN KEY (X, Y) REFERENCES P (A, B))"); + Ok(c, "INSERT INTO P (A, B) VALUES (1, 2)"); + + Ok(c, "INSERT INTO C (Id, X, Y) VALUES (1, 1, 2)"); // full match → allowed + Ok(c, "INSERT INTO C (Id, X, Y) VALUES (2, NULL, NULL)"); // all null → allowed + Rejects(c, "INSERT INTO C (Id, X, Y) VALUES (3, 1, NULL)"); // partial null → rejected (MATCH FULL) + Rejects(c, "INSERT INTO C (Id, X, Y) VALUES (4, NULL, 2)"); // partial null → rejected + Rejects(c, "INSERT INTO C (Id, X, Y) VALUES (5, 1, 99)"); // no matching parent → rejected + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/CounterSeedIncrementAccessTests.cs b/test/LibRed.Core.Tests/CounterSeedIncrementAccessTests.cs new file mode 100644 index 00000000..80bb7557 --- /dev/null +++ b/test/LibRed.Core.Tests/CounterSeedIncrementAccessTests.cs @@ -0,0 +1,57 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful check: a LibRed-written COUNTER(seed, increment) is read by Access — it opens the file without +// repair, and continues the AutoNumber sequence from the seed with the custom increment. +public class CounterSeedIncrementAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Theory] + [InlineData(1000, 7, new[] { 1000, 1007 })] // ascending custom counter + [InlineData(100, -5, new[] { 95, 100 })] // descending counter (negative int32 increment), sorted asc + public void Access_continues_a_libred_written_custom_counter(int seed, int increment, int[] expectedSortedIds) + { + string path = Path.Combine(Path.GetTempPath(), $"cnt-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("C1", + [ + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true, Seed: seed, Increment: increment), + new ColumnSpec("Name", JetDataType.Text, 20, IsFixedLength: false), + ]); + + using var conn = OpenOleDb(path); + void Insert(string n) { using var c = conn.CreateCommand(); c.CommandText = $"INSERT INTO C1 (Name) VALUES ('{n}')"; c.ExecuteNonQuery(); } + Insert("a"); + Insert("b"); + + using var q = conn.CreateCommand(); + q.CommandText = "SELECT Id FROM C1 ORDER BY Id"; + using var r = q.ExecuteReader(); + var ids = new List(); + while (r.Read()) ids.Add(Convert.ToInt32(r[0])); + + // ACE picks up the LibRed-written seed/increment and continues the sequence in its direction. + Assert.Equal(expectedSortedIds, ids); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/CreateTableAccessTests.cs b/test/LibRed.Core.Tests/CreateTableAccessTests.cs new file mode 100644 index 00000000..8abf8597 --- /dev/null +++ b/test/LibRed.Core.Tests/CreateTableAccessTests.cs @@ -0,0 +1,582 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +public class CreateTableAccessTests +{ + private static string CopyToTemp() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-createaccess-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + return path; + } + + private static OleDbConnection OpenOleDb(string path) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try + { + // "OLE DB Services=-4" disables connection pooling so the file is released on + // Dispose and the temp copy can be deleted. + var conn = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); + conn.Open(); + return conn; + } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider (12.0/16.0) is available."); + } + + private static void TryDelete(string path) + { + try { File.Delete(path); } catch (IOException) { /* lock lingered; temp file, ignore */ } + } + + [Fact] + public void Access_lists_a_libred_created_table() + { + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("Widgets", [ + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Name", JetDataType.Text, 510, IsFixedLength: false), + ]); + + using var conn = OpenOleDb(path); + var tables = conn.GetSchema("Tables"); + var names = tables.Rows.Cast() + .Select(r => r["TABLE_NAME"]?.ToString()) + .ToList(); + + Assert.Contains("Widgets", names); + } + finally { TryDelete(path); } + } + + [Fact] + public void Msysobjects_index_update_does_not_corrupt_the_database() + { + // Maintaining MSysObjects' indexes when creating a table must not break the file: + // Access still resolves and queries the pre-existing tables. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("Widgets", [ + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Name", JetDataType.Text, 510, IsFixedLength: false), + ]); + + using var conn = OpenOleDb(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM Shippers"; + Assert.Equal(3, Convert.ToInt32(cmd.ExecuteScalar())); // existing table still queryable + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_reads_rows_that_libred_inserted_into_a_created_table() + { + // End to end through LibRed's own write path: create the table, then insert rows with + // LibRed (which allocates the table's first data page on demand and records it in the + // owned/free usage maps). Access must then read those rows back. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Widgets", [ + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + ], primaryKey: ["Id"]); + var table = db.OpenTable("Widgets"); + table.Insert([7]); + table.Insert([11]); + } + + using var conn = OpenOleDb(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT SUM(Id) FROM Widgets"; + Assert.Equal(18, Convert.ToInt32(cmd.ExecuteScalar())); + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_reads_a_libred_created_memo_column() + { + // A memo (long-text) column with a short value stored inline: LibRed creates the column and + // writes the inline long-value descriptor, and Access reads the text back. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Memos", [ + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Note", JetDataType.Memo, 0, IsFixedLength: false), + ], primaryKey: ["Id"]); + var table = db.OpenTable("Memos"); + table.Insert([1, "hello memo"]); + table.Insert([2, null]); + } + + using var conn = OpenOleDb(path); + using (var read = conn.CreateCommand()) + { + read.CommandText = "SELECT Note FROM Memos WHERE Id = 1"; + Assert.Equal("hello memo", read.ExecuteScalar()); + } + using (var readNull = conn.CreateCommand()) + { + readNull.CommandText = "SELECT COUNT(*) FROM Memos WHERE Note IS NULL"; + Assert.Equal(1, Convert.ToInt32(readNull.ExecuteScalar())); + } + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_reads_a_multi_page_libred_table_and_can_insert_after() + { + // LibRed inserts enough rows to spill across many data pages (allocate-on-overflow). Access + // must read the whole table (all pages, via the owned-pages map) and still be able to insert. + string path = CopyToTemp(); + const int n = 200; + string pad = new string('x', 180); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Big", [ + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("T", JetDataType.Text, 400, IsFixedLength: false), + ], primaryKey: ["Id"]); + var table = db.OpenTable("Big"); + for (int i = 1; i <= n; i++) table.Insert([i, $"{i:D4}-{pad}"]); + } + + using var conn = OpenOleDb(path); + using (var read = conn.CreateCommand()) + { + read.CommandText = "SELECT COUNT(*), SUM(Id) FROM Big"; + using var r = read.ExecuteReader(); + Assert.True(r.Read()); + Assert.Equal(n, Convert.ToInt32(r.GetValue(0))); + Assert.Equal((long)n * (n + 1) / 2, Convert.ToInt64(r.GetValue(1))); + } + using (var ins = conn.CreateCommand()) + { + ins.CommandText = "INSERT INTO Big (Id, T) VALUES (99999, 'ace')"; + Assert.Equal(1, ins.ExecuteNonQuery()); + } + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_continues_autonumber_after_libred_populates_the_table() + { + // When LibRed writes rows into an AutoNumber table it must advance the TDEF high-water mark + // (0x14) so Access issues the *next* id, not one that already exists. Without it Access + // reuses id 1 and rejects the insert as a duplicate primary key. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Auto", [ + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new ColumnSpec("V", JetDataType.Text, 20, IsFixedLength: false), + ], primaryKey: ["Id"]); + var table = db.OpenTable("Auto"); + table.Insert([1, "a"]); + table.Insert([2, "b"]); + table.Insert([3, "c"]); + } + + using var conn = OpenOleDb(path); + using (var insert = conn.CreateCommand()) + { + insert.CommandText = "INSERT INTO Auto (V) VALUES ('d')"; // Access assigns the Id + Assert.Equal(1, insert.ExecuteNonQuery()); + } + using (var read = conn.CreateCommand()) + { + read.CommandText = "SELECT Id FROM Auto WHERE V = 'd'"; + Assert.Equal(4, Convert.ToInt32(read.ExecuteScalar())); // continued from 3, not reused 1 + } + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_reads_a_libred_created_relationship() + { + // LibRed creates a parent + child with an enforced foreign key (rows in MSysRelationships plus + // a child-side index on the FK column). Access must open the file without repair, see the + // relationship, and — if it recognises it as enforced — reject an orphan child row. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Parent", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"]); + db.CreateTable("Child", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("ParentId", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec("FK_Child_Parent", "Parent", + [("ParentId", "Id")], IsEnforced: true, CascadeUpdate: false, CascadeDelete: false)]); + db.OpenTable("Parent").Insert([1]); + db.OpenTable("Child").Insert([1, 1]); + } + + using var conn = OpenOleDb(path); + + // Existing data is intact (the file opened without corruption). + using (var count = conn.CreateCommand()) + { + count.CommandText = "SELECT COUNT(*) FROM Shippers"; + Assert.Equal(3, Convert.ToInt32(count.ExecuteScalar())); + } + + // Access enumerates the relationship LibRed wrote. + var fks = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Foreign_Keys, null!); + var names = fks!.Rows.Cast() + .Select(r => r["FK_NAME"]?.ToString()) + .ToList(); + Assert.Contains("FK_Child_Parent", names); + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_opens_a_table_with_a_unique_index_and_a_no_index_relationship() + { + // A unique (non-primary) index and a NO INDEX foreign key are new on-disk shapes; Access must + // still open the file without repair and enumerate the relationship. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Par", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true)], primaryKey: ["Id"]); + db.CreateTable("Chi", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Code", JetDataType.Text, 40, IsFixedLength: false), + new ColumnSpec("Pid", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec("FK_Chi_Par", "Par", [("Pid", "Id")], true, false, false, NoIndex: true)], + uniqueConstraints: [new UniqueIndexSpec("UQ_Code", ["Code"])]); + } + + using var conn = OpenOleDb(path); + using (var count = conn.CreateCommand()) + { + count.CommandText = "SELECT COUNT(*) FROM Shippers"; + Assert.Equal(3, Convert.ToInt32(count.ExecuteScalar())); // opened without corruption + } + var fks = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Foreign_Keys, null!); + Assert.Contains(fks!.Rows.Cast().Select(r => r["FK_NAME"]?.ToString()), n => n == "FK_Chi_Par"); + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_reads_a_libred_created_composite_relationship() + { + // A composite primary key on the parent and a two-column foreign key on the child: Access must + // open the file and enumerate the relationship (both column pairs). + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Par", + [new ColumnSpec("A", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("B", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["A", "B"]); + db.CreateTable("Chi", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("A", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("B", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec("FK_Chi_Par", "Par", [("A", "A"), ("B", "B")], true, false, false)]); + } + + using var conn = OpenOleDb(path); + using (var count = conn.CreateCommand()) + { + count.CommandText = "SELECT COUNT(*) FROM Shippers"; + Assert.Equal(3, Convert.ToInt32(count.ExecuteScalar())); + } + var fks = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Foreign_Keys, null!); + var rows = fks!.Rows.Cast().Where(r => r["FK_NAME"]?.ToString() == "FK_Chi_Par").ToList(); + Assert.Equal(2, rows.Count); // one row per column pair + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_reads_an_index_libred_added_with_create_index() + { + // LibRed creates a table then adds indexes (CREATE INDEX surgery on the TDEF). Access must open + // the file without repair, enumerate the added indexes, and still read/insert. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Name", JetDataType.Text, 100, IsFixedLength: false), + new ColumnSpec("Age", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"]); + db.CreateIndex("T", "IX_Name", [("Name", false)]); + db.CreateIndex("T", "UX_Age", [("Age", false)], isUnique: true); + } + + using var conn = OpenOleDb(path); + using (var count = conn.CreateCommand()) + { + count.CommandText = "SELECT COUNT(*) FROM Shippers"; + Assert.Equal(3, Convert.ToInt32(count.ExecuteScalar())); // opened without corruption + } + var indexes = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Indexes, + [null!, null!, null!, null!, "T"]); + var names = indexes!.Rows.Cast().Select(r => r["INDEX_NAME"]?.ToString()).ToList(); + Assert.Contains("IX_Name", names); + Assert.Contains("UX_Age", names); + using (var insert = conn.CreateCommand()) + { + insert.CommandText = "INSERT INTO T (Id, Name, Age) VALUES (1, 'x', 5)"; + Assert.Equal(1, insert.ExecuteNonQuery()); + } + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_reads_a_libred_descending_index() + { + // A descending index: the slot flag is 0x00 and inserts encode reversed key bytes. Access must + // open the file, report the column as DESCENDING (COLLATION = 2), and read the rows back. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Age", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"]); + db.CreateIndex("T", "IX_AgeDesc", [("Age", true)]); // descending + var t = db.OpenTable("T"); + t.Insert([1, 30]); + t.Insert([2, 40]); + t.Insert([3, 10]); + } + + using var conn = OpenOleDb(path); + using (var sum = conn.CreateCommand()) + { + sum.CommandText = "SELECT COUNT(*), SUM(Age) FROM T"; + using var r = sum.ExecuteReader(); + Assert.True(r.Read()); + Assert.Equal(3, Convert.ToInt32(r.GetValue(0))); // all rows readable + Assert.Equal(80, Convert.ToInt32(r.GetValue(1))); + } + var indexes = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Indexes, + [null!, null!, null!, null!, "T"]); + var row = indexes!.Rows.Cast().First(x => x["INDEX_NAME"]?.ToString() == "IX_AgeDesc"); + Assert.Equal(2, Convert.ToInt32(row["COLLATION"])); // 2 = DESCENDING + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_reads_a_libred_ignore_null_index() + { + // WITH IGNORE NULL: flag 0x02 and null-keyed rows excluded from the B-tree. Access must open the + // file, read every row, report the index's null handling as IGNORE NULL, and return correct + // results when the index would be used. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Age", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"]); + db.CreateIndex("T", "IX_Age", [("Age", false)], ignoreNulls: true); + var t = db.OpenTable("T"); + t.Insert([1, 30]); + t.Insert([2, null]); // excluded from the index + t.Insert([3, 40]); + } + + using var conn = OpenOleDb(path); + using (var count = conn.CreateCommand()) + { + count.CommandText = "SELECT COUNT(*) FROM T"; + Assert.Equal(3, Convert.ToInt32(count.ExecuteScalar())); // all rows present in the table + } + using (var q = conn.CreateCommand()) + { + q.CommandText = "SELECT COUNT(*) FROM T WHERE Age = 30"; // an index-eligible predicate + Assert.Equal(1, Convert.ToInt32(q.ExecuteScalar())); + } + var indexes = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Indexes, + [null!, null!, null!, null!, "T"]); + var row = indexes!.Rows.Cast().First(x => x["INDEX_NAME"]?.ToString() == "IX_Age"); + Assert.Equal(2, Convert.ToInt32(row["NULLS"])); // 2 = DBPROPVAL_IN_IGNORENULL + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_honors_a_libred_written_column_default() + { + // LibRed writes column DEFAULT values into the table's LvProp property blob, stored on an LVAL + // page (the form Access's property loader reads). Access must open the file without repair and + // APPLY the default on its own insert that omits the column. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Age", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Nm", JetDataType.Text, 40, IsFixedLength: false)], + primaryKey: ["Id"], + columnDefaults: [("Age", "42"), ("Nm", "'hi'")]); + + using var conn = OpenOleDb(path); + using (var count = conn.CreateCommand()) + { + count.CommandText = "SELECT COUNT(*) FROM Shippers"; + Assert.Equal(3, Convert.ToInt32(count.ExecuteScalar())); // opened without corruption + } + using (var insert = conn.CreateCommand()) + { + insert.CommandText = "INSERT INTO T (Id) VALUES (1)"; // omit Age/Nm — Access applies defaults + Assert.Equal(1, insert.ExecuteNonQuery()); + } + using (var read = conn.CreateCommand()) + { + read.CommandText = "SELECT Age, Nm FROM T WHERE Id = 1"; + using var r = read.ExecuteReader(); + Assert.True(r.Read()); + Assert.Equal(42, Convert.ToInt32(r.GetValue(0))); + Assert.Equal("hi", r.GetValue(1)); + } + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_enforces_a_libred_written_check_constraint() + { + // LibRed writes a CHECK into the table's LvProp (CheckConstraints property) on an LVAL page. + // Access must open the file and ENFORCE it — accept a valid row, reject a violating one. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Age", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + checkConstraints: [("CK_Age", "[Age] > 0")]); + + using var conn = OpenOleDb(path); + using (var ok = conn.CreateCommand()) + { + ok.CommandText = "INSERT INTO T (Id, Age) VALUES (1, 5)"; // satisfies the CHECK + Assert.Equal(1, ok.ExecuteNonQuery()); + } + using (var bad = conn.CreateCommand()) + { + bad.CommandText = "INSERT INTO T (Id, Age) VALUES (2, -1)"; // violates [Age] > 0 + Assert.ThrowsAny(() => bad.ExecuteNonQuery()); + } + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_opens_a_libred_table_whose_definition_spans_a_continuation_page() + { + // Enough indexes to overflow the single TDEF page: LibRed writes a continuation page. Access must + // open the file without repair and enumerate every index. + const int n = 30; + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Wide", + Enumerable.Range(0, n) + .Select(i => new ColumnSpec($"C{i:D2}", JetDataType.Int32, 4, IsFixedLength: true)) + .ToList()); + for (int i = 0; i < n; i++) + db.CreateIndex("Wide", $"IX{i:D2}", [($"C{i:D2}", false)]); + } + + using var conn = OpenOleDb(path); + using (var count = conn.CreateCommand()) + { + count.CommandText = "SELECT COUNT(*) FROM Shippers"; + Assert.Equal(3, Convert.ToInt32(count.ExecuteScalar())); // opened without corruption + } + var indexes = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Indexes, + [null!, null!, null!, null!, "Wide"]); + Assert.Equal(n, indexes!.Rows.Count); + } + finally { TryDelete(path); } + } + + [Fact] + public void Access_opens_and_round_trips_a_created_table_with_primary_key() + { + // The created table's TDEF and per-table pages are now fully ACE-valid: Access resolves it + // by name, opens it (empty COUNT = 0), accepts an INSERT into it, and reads the value back. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("Widgets", [ + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + ], primaryKey: ["Id"]); + + using var conn = OpenOleDb(path); + using (var count = conn.CreateCommand()) + { + count.CommandText = "SELECT COUNT(*) FROM Widgets"; + Assert.Equal(0, Convert.ToInt32(count.ExecuteScalar())); + } + using (var insert = conn.CreateCommand()) + { + insert.CommandText = "INSERT INTO Widgets (Id) VALUES (42)"; + Assert.Equal(1, insert.ExecuteNonQuery()); + } + using (var read = conn.CreateCommand()) + { + read.CommandText = "SELECT Id FROM Widgets"; + Assert.Equal(42, Convert.ToInt32(read.ExecuteScalar())); + } + } + finally { TryDelete(path); } + } +} diff --git a/test/LibRed.Core.Tests/CreateViewAccessTests.cs b/test/LibRed.Core.Tests/CreateViewAccessTests.cs new file mode 100644 index 00000000..b4480c1b --- /dev/null +++ b/test/LibRed.Core.Tests/CreateViewAccessTests.cs @@ -0,0 +1,64 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +public class CreateViewAccessTests +{ + private static string CopyToTemp() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-view-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + return path; + } + + private static OleDbConnection OpenOleDb(string path) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + try { var c = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider is available."); + } + + [Fact] + public void Access_executes_a_libred_created_view() + { + // LibRed writes a view the way Access does (MSysObjects type-5 row + MSysQueries rows, with the + // MSysQueries composite index maintained). Access must open the file and run the stored query. + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateView("LondonCustomers", new ViewSpec( + Distinct: false, [new ViewColumnSpec("CustomerID", null), new ViewColumnSpec("CompanyName", null)], + [new ViewTableSpec("Customers", null)], [], "City = 'London'")); + db.CreateView("CustOrders", new ViewSpec( + Distinct: false, [new ViewColumnSpec("c.CustomerID", null), new ViewColumnSpec("o.OrderID", null)], + [new ViewTableSpec("Customers", "c"), new ViewTableSpec("Orders", "o")], + [new ViewJoinSpec(ViewJoinType.Inner, "c.CustomerID = o.CustomerID", "c", "o")], null)); + } + + using var conn = OpenOleDb(path); + using (var count = conn.CreateCommand()) + { + count.CommandText = "SELECT COUNT(*) FROM Shippers"; + Assert.Equal(3, Convert.ToInt32(count.ExecuteScalar())); // opened without corruption + } + // The single-table view returns the same rows as the equivalent query on the base table. + int viaView, viaTable; + using (var v = conn.CreateCommand()) { v.CommandText = "SELECT COUNT(*) FROM LondonCustomers"; viaView = Convert.ToInt32(v.ExecuteScalar()); } + using (var t = conn.CreateCommand()) { t.CommandText = "SELECT COUNT(*) FROM Customers WHERE City = 'London'"; viaTable = Convert.ToInt32(t.ExecuteScalar()); } + Assert.Equal(viaTable, viaView); + Assert.True(viaView > 0); + + // The join view runs and returns rows. + using var j = conn.CreateCommand(); + j.CommandText = "SELECT COUNT(*) FROM CustOrders"; + Assert.True(Convert.ToInt32(j.ExecuteScalar()) > 0); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/Data/.gitignore b/test/LibRed.Core.Tests/Data/.gitignore new file mode 100644 index 00000000..72486a72 --- /dev/null +++ b/test/LibRed.Core.Tests/Data/.gitignore @@ -0,0 +1,2 @@ +# Large generated DB for reference-usage-map verification — regenerate with BigTable.generate.ps1. +BigTable.accdb diff --git a/test/LibRed.Core.Tests/Data/Ace16Types.accdb b/test/LibRed.Core.Tests/Data/Ace16Types.accdb new file mode 100644 index 00000000..8f2b2eeb Binary files /dev/null and b/test/LibRed.Core.Tests/Data/Ace16Types.accdb differ diff --git a/test/LibRed.Core.Tests/Data/Ace16Types.generate.ps1 b/test/LibRed.Core.Tests/Data/Ace16Types.generate.ps1 new file mode 100644 index 00000000..32e74f87 --- /dev/null +++ b/test/LibRed.Core.Tests/Data/Ace16Types.generate.ps1 @@ -0,0 +1,18 @@ +# Generates Ace16Types.accdb: an ACE 16 (version-byte 0x06) database exercising the +# Office 2016 types BIGINT (Large Number) and DATETIME2. Requires the ACE 16 OLE DB +# provider (Microsoft.ACE.OLEDB.16.0), which creates the newer format by default. +$path = "$PSScriptRoot\Ace16Types.accdb" +if (Test-Path $path) { Remove-Item $path -Force } +$cat = New-Object -ComObject ADOX.Catalog +$cat.Create("Provider=Microsoft.ACE.OLEDB.16.0;Data Source=$path") | Out-Null +$cn = $cat.ActiveConnection +$cn.Execute("CREATE TABLE T (Id LONG, Big BIGINT, Dt DATETIME2)") | Out-Null +$cn.Execute("INSERT INTO T (Id,Big,Dt) VALUES (1, 9223372036854775807, #2020-06-15 13:45:30#)") | Out-Null +$cn.Execute("INSERT INTO T (Id,Big,Dt) VALUES (2, -42, #1899-12-30 00:00:00#)") | Out-Null +$cn.Execute("INSERT INTO T (Id,Big,Dt) VALUES (3, 0, #2000-01-01 12:00:00#)") | Out-Null +# fractional-second probe (DATETIME2's reason for existing) +try { $cn.Execute("INSERT INTO T (Id,Big,Dt) VALUES (4, 1234567890123456789, '2021-03-04 09:08:07.1234567')") | Out-Null; Write-Output "frac insert ok" } +catch { Write-Output "frac insert failed: $($_.Exception.Message.Split([char]10)[0])" } +$cn.Close(); [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($cat) +[GC]::Collect(); [GC]::WaitForPendingFinalizers() +Write-Output "size=$((Get-Item $path).Length)" diff --git a/test/LibRed.Core.Tests/Data/BigTable.generate.ps1 b/test/LibRed.Core.Tests/Data/BigTable.generate.ps1 new file mode 100644 index 00000000..5b720ce5 --- /dev/null +++ b/test/LibRed.Core.Tests/Data/BigTable.generate.ps1 @@ -0,0 +1,21 @@ +# Generates BigTable.accdb: a table large enough (~115k rows, ~38k pages, ~150 MB) +# that its owned-pages usage map is a REFERENCE map (type 0x01) pointing at dedicated +# bitmap pages, rather than an inline bitmap. Northwind only exercises inline maps, and +# a file big enough for a reference map is too large to commit — so this regenerates it +# locally for verifying UsageMap's reference-map path. Requires the ACE OLE DB provider. +# +# The generated file is gitignored. Run, then point a local check at it. +$path = "$PSScriptRoot\BigTable.accdb" +if (Test-Path $path) { Remove-Item $path -Force } +$conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$path" +$cat = New-Object -ComObject ADOX.Catalog +$cat.Create($conn) | Out-Null +$cn = $cat.ActiveConnection +$cn.Execute("CREATE TABLE Seed (n LONG)") | Out-Null +for ($i = 0; $i -lt 340; $i++) { $cn.Execute("INSERT INTO Seed (n) VALUES ($i)") | Out-Null } +$cn.Execute("CREATE TABLE Big (Id COUNTER PRIMARY KEY, F1 TEXT(255), F2 TEXT(255), F3 TEXT(255))") | Out-Null +$f = ('a' * 210) +$cn.Execute("INSERT INTO Big (F1,F2,F3) SELECT '$f','$f','$f' FROM Seed a, Seed b") | Out-Null +$rows = $cn.Execute("SELECT COUNT(*) AS c FROM Big").Fields.Item("c").Value +$cn.Close() +Write-Output "rows=$rows size=$((Get-Item $path).Length)" diff --git a/test/LibRed.Core.Tests/Data/BuiltInDataTypes.accdb b/test/LibRed.Core.Tests/Data/BuiltInDataTypes.accdb new file mode 100644 index 00000000..5e8c90c6 Binary files /dev/null and b/test/LibRed.Core.Tests/Data/BuiltInDataTypes.accdb differ diff --git a/test/LibRed.Core.Tests/Data/Database4.accdb b/test/LibRed.Core.Tests/Data/Database4.accdb new file mode 100644 index 00000000..91d0ac8e Binary files /dev/null and b/test/LibRed.Core.Tests/Data/Database4.accdb differ diff --git a/test/LibRed.Core.Tests/Data/Decimals.accdb b/test/LibRed.Core.Tests/Data/Decimals.accdb new file mode 100644 index 00000000..bfb80737 Binary files /dev/null and b/test/LibRed.Core.Tests/Data/Decimals.accdb differ diff --git a/test/LibRed.Core.Tests/Data/Decimals.generate.ps1 b/test/LibRed.Core.Tests/Data/Decimals.generate.ps1 new file mode 100644 index 00000000..674b9990 --- /dev/null +++ b/test/LibRed.Core.Tests/Data/Decimals.generate.ps1 @@ -0,0 +1,14 @@ +# Generates Decimals.accdb: a table with Decimal/Numeric columns and known values that +# exercise the 17-byte numeric encoding (small, mid-word, and hi-word magnitudes; signs). +# Requires the ACE OLE DB provider. Committed as a test asset (small file). +$path = "$PSScriptRoot\Decimals.accdb" +if (Test-Path $path) { Remove-Item $path -Force } +$cat = New-Object -ComObject ADOX.Catalog +$cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$path") | Out-Null +$cn = $cat.ActiveConnection +$cn.Execute("CREATE TABLE Nums (Id COUNTER PRIMARY KEY, Price DECIMAL(12,3), Big DECIMAL(28,4))") | Out-Null +$cn.Execute("INSERT INTO Nums (Price, Big) VALUES (12.345, 123456789012.3456)") | Out-Null +$cn.Execute("INSERT INTO Nums (Price, Big) VALUES (-9.999, -9876543210987654.3210)") | Out-Null +$cn.Execute("INSERT INTO Nums (Price, Big) VALUES (0, 0)") | Out-Null +$cn.Close() +Write-Output "size=$((Get-Item $path).Length)" diff --git a/test/LibRed.Core.Tests/Data/EncryptedTest.accdb b/test/LibRed.Core.Tests/Data/EncryptedTest.accdb new file mode 100644 index 00000000..ea844aac Binary files /dev/null and b/test/LibRed.Core.Tests/Data/EncryptedTest.accdb differ diff --git a/test/LibRed.Core.Tests/Data/EverythingIsBytes.accdb b/test/LibRed.Core.Tests/Data/EverythingIsBytes.accdb new file mode 100644 index 00000000..f7c24fba Binary files /dev/null and b/test/LibRed.Core.Tests/Data/EverythingIsBytes.accdb differ diff --git a/test/LibRed.Core.Tests/Data/WideTable.accdb b/test/LibRed.Core.Tests/Data/WideTable.accdb new file mode 100644 index 00000000..1af250ee Binary files /dev/null and b/test/LibRed.Core.Tests/Data/WideTable.accdb differ diff --git a/test/LibRed.Core.Tests/Data/WideTable.generate.ps1 b/test/LibRed.Core.Tests/Data/WideTable.generate.ps1 new file mode 100644 index 00000000..b66e8d06 --- /dev/null +++ b/test/LibRed.Core.Tests/Data/WideTable.generate.ps1 @@ -0,0 +1,12 @@ +$path = "$PSScriptRoot\WideTable.accdb" +if (Test-Path $path) { Remove-Item $path -Force } +$conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$path" +$cat = New-Object -ComObject ADOX.Catalog +$cat.Create($conn) | Out-Null +$cn = $cat.ActiveConnection +$cols = (0..199 | ForEach-Object { "C{0:D3} LONG" -f $_ }) -join ", " +$cn.Execute("CREATE TABLE WideTable ($cols)") | Out-Null +# insert one row: C000=1000, C199=1199, rest null +$cn.Execute("INSERT INTO WideTable (C000, C100, C199) VALUES (1000, 1100, 1199)") | Out-Null +$cn.Close() +Write-Output "created $path ($((Get-Item $path).Length) bytes)" diff --git a/test/LibRed.Core.Tests/DataPageTests.cs b/test/LibRed.Core.Tests/DataPageTests.cs new file mode 100644 index 00000000..7f9bbef0 --- /dev/null +++ b/test/LibRed.Core.Tests/DataPageTests.cs @@ -0,0 +1,50 @@ +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +public class DataPageTests +{ + [Fact] + public void Reads_MSysObjects_data_page() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + // Page 17 holds MSysObjects rows (owner = its TDEF page 2). + var page = db.ReadDataPage(17); + + Assert.False(page.IsLongValuePage); + Assert.Equal(2, page.OwningTablePage); + Assert.Equal(41, page.RowCount); + Assert.Equal(page.RowCount, page.Rows.Count); + } + + [Fact] + public void Row_slots_are_within_page_and_packed_from_the_end() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + var page = db.ReadDataPage(17); + + int pageSize = db.Format.PageSize; + int prevEnd = pageSize; + foreach (var slot in page.Rows) + { + Assert.InRange(slot.Offset, 0, pageSize); + Assert.True(slot.Length > 0); + Assert.Equal(prevEnd, slot.Offset + slot.Length); // contiguous, end-packed + prevEnd = slot.Offset; + } + } + + [Fact] + public void Detects_long_value_page() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + // Page 42 carries the "LVAL" owner marker. + var page = db.ReadDataPage(42); + + Assert.True(page.IsLongValuePage); + Assert.Equal(0, page.OwningTablePage); + } +} diff --git a/test/LibRed.Core.Tests/DatabaseCreatorTests.cs b/test/LibRed.Core.Tests/DatabaseCreatorTests.cs new file mode 100644 index 00000000..46b2b3a2 --- /dev/null +++ b/test/LibRed.Core.Tests/DatabaseCreatorTests.cs @@ -0,0 +1,90 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// Synthesising a new database's pages from scratch (native, DAO/ADOX-free creation). +public class DatabaseCreatorTests +{ + [Theory] + [InlineData(nameof(TestDatabases.NorthwindAccdb))] + [InlineData(nameof(TestDatabases.BuiltInDataTypesAccdb))] + public void Synthesized_page0_header_matches_a_real_file(string fixture) + { + string path = (string)typeof(TestDatabases).GetProperty(fixture)!.GetValue(null)!; + byte[] real = File.ReadAllBytes(path); + using var db = JetDatabase.Open(path); + var dp = db.DefinitionPage; + + byte[] synth = DatabaseCreator.BuildDefinitionPage( + dp.JetVersion, isAccdb: true, dp.CodePage, dp.DefaultCollationLcid, + dp.DefaultCollationVersion, (dp.DatabaseCreationDate - new DateTime(1899, 12, 30)).TotalDays); + + // The whole page-0 header (0x00–0x9F: identifier, version, the masked field block, and the + // cleartext "4.0" tail) is reproduced byte-for-byte. (0xA0–0xDFF is zero; 0xE00+ is an + // undecoded usage structure LibRed doesn't need — not asserted here.) + Assert.Equal(real[0x00..0xA0], synth[0x00..0xA0]); + } + + [Fact] + public void Creates_an_empty_database_that_round_trips_a_user_table() + { + string path = Path.Combine(Path.GetTempPath(), $"libred_create_{Guid.NewGuid():N}.accdb"); + try + { + DatabaseCreator.CreateEmpty(path); + + // Freshly created: opens, and the two bootstrap system tables are in the catalog. + using (var db = JetDatabase.Open(path, readOnly: false)) + { + Assert.Equal(2, db.DefinitionPage.CatalogRootPage); + Assert.NotNull(db.OpenTable("MSysObjects")); + Assert.NotNull(db.OpenTable("MSysACEs")); + + // Create a user table, insert, and read back — through the ordinary writers. + db.CreateTable("People", new[] + { + new ColumnSpec("Id", LibRed.Catalog.JetDataType.Int32, 4, true), + new ColumnSpec("Name", LibRed.Catalog.JetDataType.Text, 100, false), + }); + db.Catalog.Invalidate(); + var people = db.OpenTable("People"); + people.Insert([1, "Ada"]); + people.Insert([2, "Alan"]); + } + + // Reopen from scratch and verify the data survived. + using (var db = JetDatabase.Open(path)) + { + Assert.Contains("People", db.Catalog.UserTables.Select(t => t.Name)); + var rows = db.OpenTable("People").Rows().ToList(); + Assert.Equal(2, rows.Count); + var names = rows.Select(r => r[db.OpenTable("People").Definition.FindColumn("Name")!.Index]).ToList(); + Assert.Contains("Ada", names); + Assert.Contains("Alan", names); + } + } + finally { if (File.Exists(path)) File.Delete(path); } + } + + [Fact] + public void Synthesized_page0_round_trips_through_the_reader() + { + var created = new DateTime(2026, 7, 14, 12, 0, 0); + byte[] page = DatabaseCreator.BuildDefinitionPage(0x02, isAccdb: true, 1252, 1033, 0, (created - new DateTime(1899, 12, 30)).TotalDays); + + var dp = new LibRed.Pages.DatabaseDefinitionPage(); + dp.Read(new LibRed.IO.PageBuffer(page, 0), LibRed.Formats.JetFormatBase.FromVersionByte(0x02)); + + Assert.Equal("Standard ACE DB", dp.FormatIdentifier); + Assert.Equal(0x02, dp.JetVersion); + Assert.Equal(1252, dp.CodePage); + Assert.Equal(1033, dp.DefaultCollationLcid); + Assert.Equal(0, dp.DefaultCollationVersion); + Assert.Equal(0, dp.DatabaseKey); + Assert.Equal(2, dp.CatalogRootPage); + Assert.Equal(created, dp.DatabaseCreationDate, TimeSpan.FromSeconds(1)); + } +} diff --git a/test/LibRed.Core.Tests/DatabaseDefinitionPageTests.cs b/test/LibRed.Core.Tests/DatabaseDefinitionPageTests.cs new file mode 100644 index 00000000..6792772e --- /dev/null +++ b/test/LibRed.Core.Tests/DatabaseDefinitionPageTests.cs @@ -0,0 +1,75 @@ +using LibRed; +using LibRed.Formats; +using Xunit; + +namespace LibRed.Core.Tests; + +public class DatabaseDefinitionPageTests +{ + [Fact] + public void Opens_accdb_and_detects_format() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + Assert.Equal(JetFormatBase.AceIdentifier, db.DefinitionPage.FormatIdentifier); + Assert.Equal(0x02, db.DefinitionPage.JetVersion); + Assert.Equal(JetVersion.Version12_2007, db.Format.Version); + Assert.True(db.Format.IsAccdb); + Assert.Equal(4096, db.Format.PageSize); + } + + [Theory] + [InlineData(nameof(TestDatabases.Ace16TypesAccdb))] // ACE 17 (0x06) + [InlineData(nameof(TestDatabases.BuiltInDataTypesAccdb))] // ACE 12 (0x02) + [InlineData(nameof(TestDatabases.WideTableAccdb))] // ACE 12 (0x02) + public void Decodes_creation_date_matching_catalog(string fixture) + { + string path = (string)typeof(TestDatabases).GetProperty(fixture)!.GetValue(null)!; + using var db = JetDatabase.Open(path); + + // The page-0 creation timestamp (obfuscated OLE double at 0x72) is decoded correctly when + // it matches the earliest MSysObjects.DateCreate — the catalog's own unobfuscated record of + // when the file's objects were first created. Verified across ACE 12–17. + var msys = db.OpenTable("MSysObjects"); + int dcIdx = msys.Definition.FindColumn("DateCreate")!.Index; + DateTime earliest = msys.Rows().Select(r => r[dcIdx] as DateTime?) + .Where(d => d.HasValue).Min()!.Value; + + Assert.Equal(earliest, db.CreationDate, TimeSpan.FromSeconds(1)); + } + + [Theory] + [InlineData(nameof(TestDatabases.NorthwindAccdb))] + [InlineData(nameof(TestDatabases.Ace16TypesAccdb))] + [InlineData(nameof(TestDatabases.BuiltInDataTypesAccdb))] + public void Decodes_code_page_and_default_collation(string fixture) + { + string path = (string)typeof(TestDatabases).GetProperty(fixture)!.GetValue(null)!; + using var db = JetDatabase.Open(path); + + // These fixtures are en-US General Legacy: code page 1252, LCID 1033, sort version 0, + // no password (db key 0). Decoded from the obfuscated page-0 header via the fixed mask. + Assert.Equal(1252, db.CodePage); + Assert.Equal(1033, db.DefaultCollationLcid); + Assert.Equal(0, db.DefaultCollationVersion); + Assert.Equal(0, db.DefinitionPage.DatabaseKey); + + // The page-0 catalog-root pointer (0x20) names the MSysObjects TDEF — page 2 in every file. + Assert.Equal(2, db.DefinitionPage.CatalogRootPage); + } + + [Fact] + public void Rejects_non_jet_file() + { + string bogus = Path.Combine(Path.GetTempPath(), $"libred_{Guid.NewGuid():N}.bin"); + File.WriteAllBytes(bogus, new byte[4096]); + try + { + Assert.Throws(() => JetDatabase.Open(bogus)); + } + finally + { + File.Delete(bogus); + } + } +} diff --git a/test/LibRed.Core.Tests/DatabaseEncryptionTests.cs b/test/LibRed.Core.Tests/DatabaseEncryptionTests.cs new file mode 100644 index 00000000..39ce3d96 --- /dev/null +++ b/test/LibRed.Core.Tests/DatabaseEncryptionTests.cs @@ -0,0 +1,133 @@ +using LibRed; +using LibRed.Crypto; +using Xunit; + +namespace LibRed.Core.Tests; + +public class DatabaseEncryptionTests +{ + // Resolve against the test assembly's output (where the csproj copies Data\*.accdb), not a hardcoded + // machine path — the latter only exists on one dev box and breaks in CI (checkout is under D:\a\...). + private static readonly string Plain = TestDatabases.WideTableAccdb; + + private static string Copy() + { + string p = Path.Combine(Path.GetTempPath(), $"libred_enc_{Guid.NewGuid():N}.accdb"); + File.Copy(Plain, p, overwrite: true); + return p; + } + + private static int TableRows(string path, string? password) + { + using var db = JetDatabase.Open(path, readOnly: true, password: password); + return db.OpenTable("WideTable").Rows().Count(); + } + + [Theory] + [InlineData(AccessEncryption.OfficeStandardAes)] + [InlineData(AccessEncryption.OfficeStandardRc4)] + [InlineData(AccessEncryption.Agile)] + public void Set_then_read_with_password_then_remove(AccessEncryption scheme) + { + string path = Copy(); + try + { + int rows = TableRows(path, null); // readable plaintext to start + + DatabaseEncryption.SetPassword(path, "S3cret!", scheme); + + Assert.Equal(rows, TableRows(path, "S3cret!")); // opens with password + Assert.ThrowsAny(() => TableRows(path, null)); // requires it + Assert.Throws(() => TableRows(path, "wrong")); // rejects wrong one + + DatabaseEncryption.RemovePassword(path, "S3cret!"); + Assert.Equal(rows, TableRows(path, null)); // plaintext again + } + finally { File.Delete(path); } + } + + [Theory] + [InlineData(40, StandardHash.Sha1)] // the Access 2007 default + [InlineData(40, StandardHash.Md5)] + [InlineData(56, StandardHash.Sha1)] + [InlineData(128, StandardHash.Sha1)] // enhanced key length + [InlineData(128, StandardHash.Sha256)] // enhanced hash + [InlineData(120, StandardHash.Sha512)] + public void SetPasswordRc4_with_options_roundtrips(int keyBits, StandardHash hash) + { + string path = Copy(); + try + { + int rows = TableRows(path, null); + DatabaseEncryption.SetPasswordRc4(path, "S3cret!", keyBits, hash); + + Assert.Equal(rows, TableRows(path, "S3cret!")); // opens with password + Assert.ThrowsAny(() => TableRows(path, null)); // requires it + + DatabaseEncryption.RemovePassword(path, "S3cret!"); + Assert.Equal(rows, TableRows(path, null)); // plaintext again + } + finally { File.Delete(path); } + } + + [Theory] + [InlineData(33)] // not a multiple of 8 + [InlineData(160)] // above 128 + [InlineData(32)] // below 40 + public void SetPasswordRc4_rejects_invalid_key_length(int keyBits) + { + string path = Copy(); + try { Assert.Throws(() => DatabaseEncryption.SetPasswordRc4(path, "pw", keyBits)); } + finally { File.Delete(path); } + } + + [Fact] + public void Change_password_re_encrypts() + { + string path = Copy(); + try + { + int rows = TableRows(path, null); + DatabaseEncryption.SetPassword(path, "old-pass", AccessEncryption.OfficeStandardAes); + DatabaseEncryption.ChangePassword(path, "old-pass", "new-pass", AccessEncryption.OfficeStandardRc4); + + Assert.Equal(rows, TableRows(path, "new-pass")); // new password works + Assert.Throws(() => TableRows(path, "old-pass")); // old one doesn't + } + finally { File.Delete(path); } + } + + [Fact] + public void Set_on_already_encrypted_throws() + { + string path = Copy(); + try + { + DatabaseEncryption.SetPassword(path, "pw", AccessEncryption.OfficeStandardAes); + Assert.Throws(() => + DatabaseEncryption.SetPassword(path, "pw2", AccessEncryption.OfficeStandardAes)); + } + finally { File.Delete(path); } + } + + [Fact] + public void Remove_on_plaintext_throws() + { + string path = Copy(); + try { Assert.Throws(() => DatabaseEncryption.RemovePassword(path, "pw")); } + finally { File.Delete(path); } + } + + [Fact] + public void Invalid_schemes_are_rejected() + { + string path = Copy(); + try + { + // LegacyJet on an .accdb is a format mismatch; None is not a set-scheme. + Assert.Throws(() => DatabaseEncryption.SetPassword(path, "pw", AccessEncryption.LegacyJet)); + Assert.Throws(() => DatabaseEncryption.SetPassword(path, "pw", AccessEncryption.None)); + } + finally { File.Delete(path); } + } +} diff --git a/test/LibRed.Core.Tests/DateTimeDefaultAccessTests.cs b/test/LibRed.Core.Tests/DateTimeDefaultAccessTests.cs new file mode 100644 index 00000000..727a1ef9 --- /dev/null +++ b/test/LibRed.Core.Tests/DateTimeDefaultAccessTests.cs @@ -0,0 +1,61 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful check: a LibRed-written DATETIME column with a NOW() default is read by Access, which opens the +// file without repair and applies the default itself on a bare insert (a current timestamp). +public class DateTimeDefaultAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Access_reads_and_applies_a_libred_written_now_default() + { + string path = Path.Combine(Path.GetTempPath(), $"nowdef-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", + [ + new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("V", JetDataType.DateTime, 8, IsFixedLength: true), + ], + primaryKey: ["K"], + columnDefaults: [("V", "NOW()")]); + + // Round-trips through LibRed with the default preserved. + using (var reopened = JetDatabase.Open(path)) + { + var col = reopened.Catalog.UserTables.Single(t => t.Name == "T").Columns.Single(c => c.Name == "V"); + Assert.Equal("NOW()", col.DefaultValue); + } + + DateTime before = DateTime.Now.AddMinutes(-2); + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) { c.CommandText = "INSERT INTO T (K) VALUES (1)"; c.ExecuteNonQuery(); } + + DateTime v; + using (var c = conn.CreateCommand()) { c.CommandText = "SELECT V FROM T"; v = Convert.ToDateTime(c.ExecuteScalar()); } + DateTime after = DateTime.Now.AddMinutes(2); + + // ACE applied its own NOW() into LibRed's table — a current timestamp with a time component. + Assert.InRange(v, before, after); + Assert.True(v.TimeOfDay > TimeSpan.Zero); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/DecimalKeyEncodingTests.cs b/test/LibRed.Core.Tests/DecimalKeyEncodingTests.cs new file mode 100644 index 00000000..0d5cf45b --- /dev/null +++ b/test/LibRed.Core.Tests/DecimalKeyEncodingTests.cs @@ -0,0 +1,90 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful: a FixedPoint (Numeric/Decimal) index key is a sign byte plus the 16-byte big-endian unscaled +// magnitude (|value| * 10^scale). Non-negative uses sign 0xFF; a negative value is the bitwise complement of +// the whole 17-byte positive form. Verified against keys Access itself wrote. +public class DecimalKeyEncodingTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider available."); + } + + private static readonly decimal[] Values = + [ + 0m, 1m, -1m, 2m, -2m, 2.5m, -2.5m, 100m, -100m, 12345.6789m, -12345.6789m, 0.0001m, -0.0001m, + ]; + + private static void AssertKeysMatchAccess(string ddl, string indexPredicate) + { + string path = Path.Combine(Path.GetTempPath(), $"libred-deckey-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + using (var c = conn.CreateCommand()) { c.CommandText = ddl; c.ExecuteNonQuery(); } + if (indexPredicate.Length > 0) + { + using var ci = conn.CreateCommand(); + ci.CommandText = indexPredicate; + ci.ExecuteNonQuery(); + } + + for (int i = 0; i < Values.Length; i++) + { + using var c = conn.CreateCommand(); + c.CommandText = "INSERT INTO DKey (K, V) VALUES (?, ?)"; + c.Parameters.Add(new OleDbParameter("k", OleDbType.Numeric) { Value = Values[i], Precision = 18, Scale = 4 }); + c.Parameters.AddWithValue("v", i); + c.ExecuteNonQuery(); + } + } + + using var db = JetDatabase.Open(path); + var table = db.OpenTable("DKey"); + var def = table.Definition; + IndexDef index = def.Indexes.Single(i => i.Columns.Any(c => c.Column.Name == "K")); + int kIdx = def.FindColumn("K")!.Index; + var decoder = new RowDecoder(def.Columns, db.Format); + + int checkedKeys = 0; + foreach (var (accessKey, rowId) in new IndexCursor(table.Channel, index.RootPage).RawEntries()) + { + var d = (decimal)decoder.Decode(db.ReadDataPage(rowId.Page).GetRow(rowId.Row))[kIdx]!; + + var values = new object?[def.Columns.Count]; + values[kIdx] = d; + byte[] ours = IndexKeyEncoder.Encode(index.Columns, values); + + Assert.True(accessKey.AsSpan().SequenceEqual(ours), + $"{d}: access={Convert.ToHexString(accessKey)} ours={Convert.ToHexString(ours)}"); + checkedKeys++; + } + + Assert.Equal(Values.Length, checkedKeys); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Encoded_decimal_keys_match_access_byte_for_byte_ascending() + => AssertKeysMatchAccess("CREATE TABLE DKey (K DECIMAL(18,4) CONSTRAINT PK PRIMARY KEY, V int)", ""); + + [Fact] + public void Encoded_decimal_keys_match_access_byte_for_byte_descending() + => AssertKeysMatchAccess( + "CREATE TABLE DKey (K DECIMAL(18,4), V int)", + "CREATE UNIQUE INDEX IX_DKey_K ON DKey (K DESC)"); +} diff --git a/test/LibRed.Core.Tests/DecimalTests.cs b/test/LibRed.Core.Tests/DecimalTests.cs new file mode 100644 index 00000000..a52f3564 --- /dev/null +++ b/test/LibRed.Core.Tests/DecimalTests.cs @@ -0,0 +1,44 @@ +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +public class DecimalTests +{ + [Fact] + public void Reads_precision_and_scale() + { + using var db = JetDatabase.Open(TestDatabases.DecimalsAccdb); + + var cols = db.Catalog.FindTable("Nums")!.Columns; + var price = cols.First(c => c.Name == "Price"); + var big = cols.First(c => c.Name == "Big"); + + Assert.Equal(JetDataType.FixedPoint, price.Type); + Assert.Equal((12, 3), (price.Precision, price.Scale)); + Assert.Equal((28, 4), (big.Precision, big.Scale)); + } + + [Fact] + public void Decodes_decimal_values() + { + using var db = JetDatabase.Open(TestDatabases.DecimalsAccdb); + + var table = db.OpenTable("Nums"); + int price = table.Definition.Columns.First(c => c.Name == "Price").Index; + int big = table.Definition.Columns.First(c => c.Name == "Big").Index; + + var rows = table.Rows().ToList(); + + // Every value is a System.Decimal. + Assert.All(rows, r => { Assert.IsType(r[price]); Assert.IsType(r[big]); }); + + var prices = rows.Select(r => (decimal)r[price]!).ToList(); + var bigs = rows.Select(r => (decimal)r[big]!).ToList(); + + Assert.Equal([12.345m, -9.999m, 0.000m], prices); + // Includes a negative 20-digit value that spans the high 32-bit word. + Assert.Equal([123456789012.3456m, -9876543210987654.3210m, 0.0000m], bigs); + } +} diff --git a/test/LibRed.Core.Tests/DeleteAccessTests.cs b/test/LibRed.Core.Tests/DeleteAccessTests.cs new file mode 100644 index 00000000..78efba69 --- /dev/null +++ b/test/LibRed.Core.Tests/DeleteAccessTests.cs @@ -0,0 +1,58 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// LibRed soft-deletes a row (slot flagged, index entries removed, TDEF row count decremented) and Access +/// reads the table without it — the deleted row is gone from scans, seeks, and COUNT. +/// +public class DeleteAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No provider"); + } + + [Fact] + public void Access_reads_a_libred_deleted_row_as_gone() + { + string path = Path.Combine(Path.GetTempPath(), $"del-ace-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new("Id", JetDataType.Int32, 4, IsFixedLength: true), new("N", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"]); + var table = db.OpenTable("T"); + for (int i = 1; i <= 5; i++) table.Insert([i, i * 10]); + + int idIdx = table.Definition.FindColumn("Id")!.Index; + var pk = table.Definition.Indexes.First(i => i.IsPrimaryKey); + (RowId id, object?[] values) = table.Rows().WithIds().First(x => Convert.ToInt32(x.Values[idIdx]) == 3); + + table.RemoveIndexEntry(pk, values, id); + table.Delete(id); + } + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT COUNT(*) FROM T"; Assert.Equal(4, Convert.ToInt32(c.ExecuteScalar())); } + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT COUNT(*) FROM T WHERE Id = 3"; Assert.Equal(0, Convert.ToInt32(c.ExecuteScalar())); } + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT SUM(N) FROM T"; Assert.Equal(120, Convert.ToInt32(c.ExecuteScalar())); } // 10+20+40+50 (30 gone) + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/DerivedTableViewAccessTests.cs b/test/LibRed.Core.Tests/DerivedTableViewAccessTests.cs new file mode 100644 index 00000000..7e2175e9 --- /dev/null +++ b/test/LibRed.Core.Tests/DerivedTableViewAccessTests.cs @@ -0,0 +1,126 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.IO; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A view whose FROM is a derived table (subquery), including a UNION — the shape of Northwind's +/// "Customer and Suppliers by City". Access stores such a source as an Attribute=5 row with the +/// inner subquery SQL in Expression and the alias in Name2 (no Name1). This checks +/// LibRed writes it that way and that Access opens the file and runs the view. +/// +public class DerivedTableViewAccessTests +{ + private const string Subquery = + "SELECT City, CompanyName, ContactName, 'Customers' AS Relationship FROM Customers " + + "UNION SELECT City, CompanyName, ContactName, 'Suppliers' FROM Suppliers"; + + // The ACE OLE DB provider is intermittently unstable on x64 (a spurious "Cannot open database … + // may be corrupt"; see the ace-provider-crash-flakiness note), so retry the open a few times. + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try + { + var conn = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); + conn.Open(); + return conn; + } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + private static void CreateView(string path, string name) + { + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateView(name, new ViewSpec( + Distinct: false, + Columns: [new ViewColumnSpec("u.City", null), new ViewColumnSpec("u.CompanyName", null), new ViewColumnSpec("u.ContactName", null), new ViewColumnSpec("u.Relationship", null)], + Tables: [new ViewTableSpec(Table: null, Alias: "u", SubquerySql: Subquery)], + Joins: [], + Where: null)); + } + + [Fact] + public void Stores_the_derived_table_source_the_access_way() + { + string path = Path.Combine(Path.GetTempPath(), $"derived-view-store-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + CreateView(path, "CSbyCity2"); + + // One Attribute=5 table row with Expression (subquery) + Name2 (alias), no Name1; 4 column rows. + using var ch = PageChannel.Open(path, readOnly: true); + var (attr, expr, n1, n2) = QueryRowsFor(ch, "CSbyCity2"); + var tableRows = attr.Select((a, i) => (a, i)).Where(x => x.a == 5).ToList(); + Assert.Single(tableRows); + int t = tableRows[0].i; + Assert.Equal(Subquery, expr[t]); + Assert.Null(n1[t]); + Assert.Equal("u", n2[t]); + Assert.Equal(4, attr.Count(a => a == 6)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // The long subquery Expression (> 64 bytes) is written to an LVAL page, so Access can run the view. + [Fact] + public void Access_runs_a_derived_table_union_view() + { + string path = Path.Combine(Path.GetTempPath(), $"derived-view-run-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + CreateView(path, "CSbyCity2"); + + using var conn = OpenOleDb(path); + using var count = conn.CreateCommand(); + count.CommandText = "SELECT COUNT(*) FROM CSbyCity2"; + Assert.True(Convert.ToInt32(count.ExecuteScalar()) > 0); + + using var seek = conn.CreateCommand(); + seek.CommandText = "SELECT Relationship FROM CSbyCity2 WHERE City = 'London'"; + Assert.NotNull(seek.ExecuteScalar()); // the view resolves and returns rows + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + private static (List Attr, List Expr, List Name1, List Name2) + QueryRowsFor(PageChannel ch, string viewName) + { + var cat = new JetCatalog(ch); + var obj = cat.FindTable("MSysObjects")!; + var mq = cat.FindTable("MSysQueries")!; + int oId = Col(obj, "Id"), oName = Col(obj, "Name"); + int id = new Table(ch, obj).Rows() + .First(r => string.Equals(r[oName] as string, viewName, StringComparison.OrdinalIgnoreCase))[oId] is int i ? i : 0; + + int qObj = Col(mq, "ObjectId"), qAttr = Col(mq, "Attribute"), + qExpr = Col(mq, "Expression"), qN1 = Col(mq, "Name1"), qN2 = Col(mq, "Name2"); + (List, List, List, List) acc = ([], [], [], []); + foreach (var r in new Table(ch, mq).Rows()) + { + if (Convert.ToInt32(r[qObj]) != id) continue; + acc.Item1.Add(Convert.ToByte(r[qAttr])); + acc.Item2.Add(r[qExpr] as string); + acc.Item3.Add(r[qN1] as string); + acc.Item4.Add(r[qN2] as string); + } + return acc; + } + + private static int Col(TableDef t, string name) => + t.Columns.First(c => string.Equals(c.Name, name, StringComparison.OrdinalIgnoreCase)).Index; +} diff --git a/test/LibRed.Core.Tests/DistinctViewAccessTests.cs b/test/LibRed.Core.Tests/DistinctViewAccessTests.cs new file mode 100644 index 00000000..a5aaa690 --- /dev/null +++ b/test/LibRed.Core.Tests/DistinctViewAccessTests.cs @@ -0,0 +1,51 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Access runs a LibRed-created DISTINCT view with a RIGHT JOIN and a BETWEEN/date WHERE — Northwind's +/// "Quarterly Orders". DISTINCT is the MSysQueries flag row; the WHERE is stored verbatim. +/// +public class DistinctViewAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + [Fact] + public void Access_runs_a_distinct_right_join_between_view() + { + string path = Path.Combine(Path.GetTempPath(), $"distinct-view-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateView("QO2", new ViewSpec( + Distinct: true, + Columns: [new ViewColumnSpec("Customers.CustomerID", null), new ViewColumnSpec("Customers.CompanyName", null), new ViewColumnSpec("Customers.City", null), new ViewColumnSpec("Customers.Country", null)], + Tables: [new ViewTableSpec("Customers", null), new ViewTableSpec("Orders", null)], + Joins: [new ViewJoinSpec(ViewJoinType.Right, "Customers.CustomerID = Orders.CustomerID", "Customers", "Orders")], + Where: "Orders.OrderDate BETWEEN #1/1/1997# And #12/31/1997#")); + + using var conn = OpenOleDb(path); + using var count = conn.CreateCommand(); + count.CommandText = "SELECT COUNT(*) FROM QO2"; + Assert.Equal(86, Convert.ToInt32(count.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/DropColumnAccessTests.cs b/test/LibRed.Core.Tests/DropColumnAccessTests.cs new file mode 100644 index 00000000..686bed57 --- /dev/null +++ b/test/LibRed.Core.Tests/DropColumnAccessTests.cs @@ -0,0 +1,138 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// ACE's ALTER TABLE DROP COLUMN is a metadata-only TDEF edit: it removes the column descriptor + name and +// decrements the counts, but does NOT renumber the surviving columns or rewrite existing rows. Survivors +// keep their original column ids (a gap appears) and their original variable-table index. So a correct +// reader must read the STORED variable index (descriptor 0x07), not derive it by ranking column ids — +// otherwise a survivor after a dropped variable column decodes the wrong slot. +public class DropColumnAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No ACE provider"); + } + + private static void Ace(string path, params string[] sqls) + { + using var c = OpenOleDb(path); + foreach (string sql in sqls) { using var cmd = c.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); } + } + + private static string[][] ReadT(string path) + { + using var db = JetDatabase.Open(path); + return db.OpenTable("T").Rows().Select(r => r.Select(v => v?.ToString() ?? "").ToArray()).ToArray(); + } + + private static string[] ColsOfT(string path) + { + using var db = JetDatabase.Open(path); + return db.Catalog.FindTable("T")!.Columns.Select(c => c.Name).ToArray(); + } + + [Fact] + public void Reads_rows_correctly_after_ace_drops_a_column() + { + string path = Path.Combine(Path.GetTempPath(), $"dropcol-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + Ace(path, + "CREATE TABLE T (A LONG, B TEXT(20), C LONG, D TEXT(20))", + "INSERT INTO T (A, B, C, D) VALUES (1, 'bee', 10, 'dee')", + "INSERT INTO T (A, B, C, D) VALUES (2, 'buzz', 20, 'doo')"); + + Ace(path, "ALTER TABLE T DROP COLUMN B"); // variable column in the middle + Assert.Equal(["A", "C", "D"], ColsOfT(path)); + Assert.Equal([["1", "10", "dee"], ["2", "20", "doo"]], ReadT(path)); // D still decodes to "dee" + + Ace(path, "ALTER TABLE T DROP COLUMN C"); // fixed column + Assert.Equal(["A", "D"], ColsOfT(path)); + Assert.Equal([["1", "dee"], ["2", "doo"]], ReadT(path)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_reads_a_libred_dropped_column_table() + { + string path = Path.Combine(Path.GetTempPath(), $"dropcol-lr-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T2", + [ + new("A", JetDataType.Int32, 4, IsFixedLength: true), + new("B", JetDataType.Text, 40, IsFixedLength: false), + new("C", JetDataType.Int32, 4, IsFixedLength: true), + new("D", JetDataType.Text, 40, IsFixedLength: false), + ]); + db.OpenTable("T2").Insert([1, "bee", 10, "dee"]); + db.OpenTable("T2").Insert([2, "buzz", 20, "doo"]); + + Assert.True(db.DropColumn("T2", "B")); // variable column in the middle + Assert.True(db.DropColumn("T2", "C")); // fixed column + } + + // ACE opens the LibRed-edited file without repair and reads the surviving columns correctly. + using var conn = OpenOleDb(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT A, D FROM T2 ORDER BY A"; + using var reader = cmd.ExecuteReader(); + Assert.True(reader.Read()); Assert.Equal(1, reader.GetInt32(0)); Assert.Equal("dee", reader.GetString(1)); + Assert.True(reader.Read()); Assert.Equal(2, reader.GetInt32(0)); Assert.Equal("doo", reader.GetString(1)); + Assert.False(reader.Read()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_adds_a_column_after_a_libred_drop_byte_faithfully() + { + // Our DROP COLUMN must leave the TDEF in exactly ACE's post-drop state — including the next-column-id + // and next-variable-index high-water marks — so a subsequent ADD lands identically. Verified equal to + // the pure-ACE (drop+add) path: after dropping B (colId 1, leaving a gap), ACE's added columns get the + // NEXT ids (4, 5), not the gap; a new variable column appends (varIdx 2) and a fixed one appends + // (fixedOff 8); old rows read the new columns as NULL. + string path = Path.Combine(Path.GetTempPath(), $"dropadd-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + Ace(path, + "CREATE TABLE T (A LONG, B TEXT(20), C LONG, D TEXT(20))", + "INSERT INTO T (A,B,C,D) VALUES (1,'bee',10,'dee')"); + + using (var db = JetDatabase.Open(path, readOnly: false)) + Assert.True(db.DropColumn("T", "B")); // middle variable column, via LibRed + + Ace(path, "ALTER TABLE T ADD COLUMN E TEXT(20)", "ALTER TABLE T ADD COLUMN F LONG", + "INSERT INTO T (A, C, D, E, F) VALUES (2, 20, 'new', 'eee', 99)"); + + using var db2 = JetDatabase.Open(path); + var cols = db2.Catalog.FindTable("T")!.Columns; + Assert.Equal(["A", "C", "D", "E", "F"], cols.Select(c => c.Name)); + Assert.Equal([0, 2, 3, 4, 5], cols.Select(c => c.ColumnId)); // gap id 1 not reused; new ids continue + var e = cols.Single(c => c.Name == "E"); + var f = cols.Single(c => c.Name == "F"); + Assert.Equal(2, e.VariableIndex); // appended after D (varIdx 1), not reusing B's slot 0 + Assert.Equal(8, f.FixedOffset); // appended after A (0) and C (4) + + var rows = db2.OpenTable("T").Rows().Select(r => r.Select(v => v?.ToString() ?? "").ToArray()).ToArray(); + Assert.Equal(["1", "10", "dee", "", ""], rows[0]); // old row: new columns NULL + Assert.Equal(["2", "20", "new", "eee", "99"], rows[1]); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/DropColumnConstraintAccessTests.cs b/test/LibRed.Core.Tests/DropColumnConstraintAccessTests.cs new file mode 100644 index 00000000..dfccafd6 --- /dev/null +++ b/test/LibRed.Core.Tests/DropColumnConstraintAccessTests.cs @@ -0,0 +1,47 @@ +using System.Data.OleDb; +using Xunit; + +namespace LibRed.Core.Tests; + +// Ground truth for our DROP COLUMN guard: ACE REJECTS dropping a column that is part of an index/key or a +// relationship — it never cascades, you must drop the dependent first. (Our TableCreator.DropColumn mirrors +// this: it throws for an indexed/keyed column and for a column participating in a relationship.) +public class DropColumnConstraintAccessTests +{ + private static OleDbConnection Open(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + throw new InvalidOperationException("no ace"); + } + + private static void Ok(OleDbConnection c, string sql) + { using var m = c.CreateCommand(); m.CommandText = sql; m.ExecuteNonQuery(); } + + private static string Error(OleDbConnection c, string sql) + { + var ex = Assert.ThrowsAny(() => { using var m = c.CreateCommand(); m.CommandText = sql; m.ExecuteNonQuery(); }); + return ex.Message; + } + + [Fact] + public void Access_rejects_dropping_an_indexed_or_related_column() + { + string path = Path.Combine(Path.GetTempPath(), $"dcc-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var c = Open(path); + Ok(c, "CREATE TABLE P (Id LONG PRIMARY KEY, Name TEXT(20))"); + Ok(c, "CREATE INDEX IX_P_Name ON P (Name)"); + Assert.Contains("index", Error(c, "ALTER TABLE P DROP COLUMN Name"), StringComparison.OrdinalIgnoreCase); // secondary index + Assert.Contains("index", Error(c, "ALTER TABLE P DROP COLUMN Id"), StringComparison.OrdinalIgnoreCase); // primary key + + Ok(c, "CREATE TABLE C (Id LONG PRIMARY KEY, Pid LONG, CONSTRAINT FK_C FOREIGN KEY (Pid) REFERENCES P (Id))"); + Assert.Contains("relationship", Error(c, "ALTER TABLE C DROP COLUMN Pid"), StringComparison.OrdinalIgnoreCase); // FK child + Assert.Contains("relationship", Error(c, "ALTER TABLE P DROP COLUMN Id"), StringComparison.OrdinalIgnoreCase); // FK parent + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/DropColumnLvPropAccessTests.cs b/test/LibRed.Core.Tests/DropColumnLvPropAccessTests.cs new file mode 100644 index 00000000..dcd11b93 --- /dev/null +++ b/test/LibRed.Core.Tests/DropColumnLvPropAccessTests.cs @@ -0,0 +1,63 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// DROP COLUMN must remove the dropped column's DefaultValue/Required entries from the table's +// MSysObjects.LvProp blob — verified this is what ACE does. LibRed's drop does the same (surgical removal +// of the column's property block), and ACE still opens/reads the result. +public class DropColumnLvPropAccessTests +{ + private static OleDbConnection Open(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + throw new InvalidOperationException("no ace"); + } + private static void Ace(string path, params string[] sqls) + { using var c = Open(path); foreach (var s in sqls) { using var m = c.CreateCommand(); m.CommandText = s; m.ExecuteNonQuery(); } } + + private static (IReadOnlyDictionary Defaults, IReadOnlySet Required) Props(string path, string table) + { + using var db = JetDatabase.Open(path); + int tid = db.Catalog.FindTable(table)!.DefinitionPage; + var mo = db.OpenTable("MSysObjects"); + int idIdx = mo.Definition.FindColumn("Id")!.Index, lvIdx = mo.Definition.FindColumn("LvProp")!.Index; + byte[] blob = mo.Rows().Where(r => r[idIdx] is not null && Convert.ToInt32(r[idIdx]) == tid) + .Select(r => r[lvIdx] as byte[] ?? []).FirstOrDefault() ?? []; + return (PropertyBlob.ReadColumnDefaults(blob), PropertyBlob.ReadRequiredColumns(blob)); + } + + [Fact] + public void Libred_drop_removes_the_columns_lvprop_entries_and_access_still_reads() + { + string path = Path.Combine(Path.GetTempPath(), $"dclv-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + // ACE creates the table so the LvProp blob is authentic (B defaulted, N required, K also defaulted). + Ace(path, "CREATE TABLE T (A LONG, B LONG DEFAULT 5, N TEXT(20) NOT NULL, K LONG DEFAULT 7)"); + var before = Props(path, "T"); + Assert.Equal("5", before.Defaults["B"]); + Assert.Contains("N", before.Required); + + using (var db = JetDatabase.Open(path, readOnly: false)) + Assert.True(db.DropColumn("T", "B")); // drop the defaulted column via LibRed + + var after = Props(path, "T"); + Assert.False(after.Defaults.ContainsKey("B")); // B's DefaultValue is gone + Assert.Equal("7", after.Defaults["K"]); // K's default preserved + Assert.Contains("N", after.Required); // N's Required preserved + + // ACE opens the LibRed-edited file without repair and still reads it. + using var conn = Open(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM T"; + Assert.Equal(0, Convert.ToInt32(cmd.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/DropConstraintAccessTests.cs b/test/LibRed.Core.Tests/DropConstraintAccessTests.cs new file mode 100644 index 00000000..d29ff76d --- /dev/null +++ b/test/LibRed.Core.Tests/DropConstraintAccessTests.cs @@ -0,0 +1,61 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// After LibRed drops a foreign key (soft-deleting its MSysRelationships rows), Access still opens the +/// file and reads the tables — the soft delete is a normal Jet delete, not corruption. +/// +public class DropConstraintAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No provider"); + } + + [Fact] + public void Access_opens_a_libred_file_after_dropping_a_foreign_key() + { + string path = Path.Combine(Path.GetTempPath(), $"dropc-ace-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Parent", [new("Id", JetDataType.Int32, 4, IsFixedLength: true)], primaryKey: ["Id"]); + db.CreateTable("Child", + [new("Id", JetDataType.Int32, 4, IsFixedLength: true), new("ParentId", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec("FK_Child_Parent", "Parent", [("ParentId", "Id")], IsEnforced: true, CascadeUpdate: false, CascadeDelete: false)]); + + db.OpenTable("Parent").Insert([1]); + db.OpenTable("Child").Insert([1, 1]); + + Assert.Single(db.Catalog.ForeignKeysOf("Child")); + Assert.True(db.DropConstraint("Child", "FK_Child_Parent")); + Assert.Empty(db.Catalog.ForeignKeysOf("Child")); + } + + // Access opens the post-drop file and reads both tables without complaint. + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT COUNT(*) FROM Parent"; Assert.Equal(1, Convert.ToInt32(c.ExecuteScalar())); } + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT COUNT(*) FROM Child"; Assert.Equal(1, Convert.ToInt32(c.ExecuteScalar())); } + + // Because LibRed removed the TDEF relationship blocks byte-faithfully, ACE no longer enforces + // the FK either: a child row pointing at a non-existent parent is accepted. + using (var c = conn.CreateCommand()) + { c.CommandText = "INSERT INTO Child (Id, ParentId) VALUES (2, 99)"; Assert.Equal(1, c.ExecuteNonQuery()); } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/DropIndexAccessTests.cs b/test/LibRed.Core.Tests/DropIndexAccessTests.cs new file mode 100644 index 00000000..2a6101cb --- /dev/null +++ b/test/LibRed.Core.Tests/DropIndexAccessTests.cs @@ -0,0 +1,58 @@ +using System.Data.OleDb; +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +// ACE's DROP INDEX removes the index's TDEF blocks and frees its B-tree root; it allows dropping plain, +// unique and even the primary-key index, but REJECTS an FK-backing index ("used in a relationship"). +// LibRed mirrors this, and ACE opens+reads a LibRed-index-dropped file. +public class DropIndexAccessTests +{ + private static OleDbConnection Open(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + throw new InvalidOperationException("no ace"); + } + private static void Ace(string path, params string[] sqls) + { using var c = Open(path); foreach (var s in sqls) { using var m = c.CreateCommand(); m.CommandText = s; m.ExecuteNonQuery(); } } + + [Fact] + public void Access_reads_a_libred_index_dropped_table() + { + string path = Path.Combine(Path.GetTempPath(), $"dropix-lr-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + // ACE creates the table + indexes + rows so the TDEF is authentic. + Ace(path, + "CREATE TABLE T (Id LONG PRIMARY KEY, Name TEXT(20), Code LONG)", + "CREATE INDEX IX_Name ON T (Name)", + "CREATE UNIQUE INDEX UX_Code ON T (Code)", + "INSERT INTO T (Id, Name, Code) VALUES (1, 'a', 10)", + "INSERT INTO T (Id, Name, Code) VALUES (2, 'b', 20)"); + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + Assert.True(db.DropIndex("T", "IX_Name")); // plain + Assert.True(db.DropIndex("T", "UX_Code")); // unique + Assert.False(db.DropIndex("T", "Nope")); // missing → false + var pkName = db.Catalog.FindTable("T")!.Indexes.Single(i => i.IsPrimaryKey).Name; + Assert.True(db.DropIndex("T", pkName)); // even the primary key is droppable + Assert.Empty(db.Catalog.FindTable("T")!.Indexes); + } + + // ACE opens the file without repair and reads the rows (indexes gone, data intact). + using var conn = Open(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM T"; + Assert.Equal(2, Convert.ToInt32(cmd.ExecuteScalar())); + using var cmd2 = conn.CreateCommand(); + cmd2.CommandText = "SELECT Name FROM T WHERE Id = 2"; + Assert.Equal("b", cmd2.ExecuteScalar()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/DropTableAccessTests.cs b/test/LibRed.Core.Tests/DropTableAccessTests.cs new file mode 100644 index 00000000..2ce9ddab --- /dev/null +++ b/test/LibRed.Core.Tests/DropTableAccessTests.cs @@ -0,0 +1,65 @@ +using System.Data.OleDb; +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +// ACE's DROP TABLE removes the object's MSysObjects + MSysACEs rows and frees its pages (a later create +// reuses them). LibRed mirrors this: after a LibRed DROP TABLE, ACE opens the file, no longer sees the +// table, reads the other tables, and reuses the freed pages when creating a new table. +public class DropTableAccessTests +{ + private static OleDbConnection Open(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + throw new InvalidOperationException("no ace"); + } + private static void Ace(string path, params string[] sqls) + { using var c = Open(path); foreach (var s in sqls) { using var m = c.CreateCommand(); m.CommandText = s; m.ExecuteNonQuery(); } } + + [Fact] + public void Access_reads_a_libred_table_dropped_file_and_reuses_the_pages() + { + string path = Path.Combine(Path.GetTempPath(), $"droptab-lr-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + // ACE creates the tables + rows so the catalog/pages are authentic. + Ace(path, + "CREATE TABLE Doomed (Id LONG PRIMARY KEY, Name TEXT(20))", + "CREATE INDEX IX_Name ON Doomed (Name)", + "CREATE TABLE Keep (Id LONG PRIMARY KEY)", + "INSERT INTO Doomed (Id, Name) VALUES (1, 'x')", + "INSERT INTO Keep (Id) VALUES (42)"); + + long pagesBeforeDrop = new FileInfo(path).Length; + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + Assert.True(db.DropTable("Doomed")); + Assert.False(db.DropTable("Nope")); // missing → false + Assert.Null(db.Catalog.FindTable("Doomed")); // gone from the catalog + } + + using (var conn = Open(path)) + { + // ACE no longer sees the table, still reads the other one. + using var c1 = conn.CreateCommand(); + c1.CommandText = "SELECT COUNT(*) FROM Keep"; + Assert.Equal(1, Convert.ToInt32(c1.ExecuteScalar())); + Assert.ThrowsAny(() => + { using var c = conn.CreateCommand(); c.CommandText = "SELECT * FROM Doomed"; c.ExecuteReader(); }); + + // ACE reuses the freed pages: creating a similar table doesn't grow the file past its pre-drop size. + using var c2 = conn.CreateCommand(); + c2.CommandText = "CREATE TABLE Fresh (Id LONG PRIMARY KEY, Name TEXT(20))"; + c2.ExecuteNonQuery(); + } + Assert.True(new FileInfo(path).Length <= pagesBeforeDrop, + $"file grew ({new FileInfo(path).Length} > {pagesBeforeDrop}) — freed pages were not reused"); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/DropViewAccessTests.cs b/test/LibRed.Core.Tests/DropViewAccessTests.cs new file mode 100644 index 00000000..f6d12fe7 --- /dev/null +++ b/test/LibRed.Core.Tests/DropViewAccessTests.cs @@ -0,0 +1,52 @@ +using System.Data.OleDb; +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +// DROP VIEW / DROP PROCEDURE removes a type-5 query object's MSysObjects + MSysQueries + MSysACEs rows +// (verified vs ACE, which also treats the two statements interchangeably). After a LibRed drop, ACE opens +// the file, no longer sees the object, and still runs the surviving views. +public class DropViewAccessTests +{ + private static OleDbConnection Open(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + throw new InvalidOperationException("no ace"); + } + private static void Ace(string path, params string[] sqls) + { using var c = Open(path); foreach (var s in sqls) { using var m = c.CreateCommand(); m.CommandText = s; m.ExecuteNonQuery(); } } + + [Fact] + public void Access_reads_a_libred_view_dropped_file() + { + string path = Path.Combine(Path.GetTempPath(), $"dropview-lr-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + // ACE creates the views so the MSysObjects/MSysQueries/MSysACEs rows are authentic. + Ace(path, + "CREATE VIEW Doomed AS SELECT ProductID FROM Products", + "CREATE VIEW Keep AS SELECT CategoryID FROM Categories"); + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + Assert.True(db.DropQueryObject("Doomed")); + Assert.False(db.DropQueryObject("Nope")); // missing → false + Assert.False(db.Catalog.Views.ContainsKey("Doomed")); // gone + Assert.True(db.Catalog.Views.ContainsKey("Keep")); // survivor intact + } + + using var conn = Open(path); + // ACE no longer sees the dropped view but still runs the surviving one. + Assert.ThrowsAny(() => + { using var c = conn.CreateCommand(); c.CommandText = "SELECT * FROM Doomed"; c.ExecuteReader(); }); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM Keep"; + Assert.True(Convert.ToInt32(cmd.ExecuteScalar()) > 0); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/Expected/catalog-dump.txt b/test/LibRed.Core.Tests/Expected/catalog-dump.txt new file mode 100644 index 00000000..8164752d --- /dev/null +++ b/test/LibRed.Core.Tests/Expected/catalog-dump.txt @@ -0,0 +1,401 @@ +Database: Standard ACE DB (Version12_2007, page size 4096) + +[SYS] MSysObjects + tdefPage=2 type=System rows=82 columns=17 indexes=2 + 0. Connect Memo len= 0 var#3 + 1. Database Memo len= 0 var#2 + 2. DateCreate DateTime len= 8 fixed@10 + 3. DateUpdate DateTime len= 8 fixed@18 + 4. Flags Int32 len= 4 fixed@26 + 5. ForeignName Text len=510 var#4 + 6. Id Int32 len= 4 fixed@0 + 7. Lv Ole len= 0 var#7 + 8. LvExtra Ole len= 0 var#10 + 9. LvModule Ole len= 0 var#9 + 10. LvProp Ole len= 0 var#8 + 11. Name Text len=510 var#0 + 12. Owner Binary len=510 var#1 + 13. ParentId Int32 len= 4 fixed@4 + 14. RmtInfoLong Ole len= 0 var#6 + 15. RmtInfoShort Binary len=510 var#5 + 16. Type Int16 len= 2 fixed@8 + --- indexes --- + U "ParentIdName" [ParentId, Name] root=7 uniqueEntries=82 + PK "Id" [Id] root=8 uniqueEntries=82 + +[SYS] MSysACEs + tdefPage=3 type=System rows=183 columns=4 indexes=1 + 0. ACM Int32 len= 4 fixed@4 + 1. FInheritable Boolean len= 1 fixed@0 + 2. ObjectId Int32 len= 4 fixed@0 + 3. SID Binary len=510 var#0 + --- indexes --- + "ObjectId" [ObjectId] root=10 uniqueEntries=82 + +[SYS] MSysQueries + tdefPage=4 type=System rows=279 columns=8 indexes=1 + 0. Attribute Byte len= 1 fixed@4 + 1. Expression Memo len= 0 var#3 + 2. Flag Int16 len= 2 fixed@5 + 3. LvExtra Int32 len= 4 fixed@7 + 4. Name1 Text len=510 var#1 + 5. Name2 Text len=510 var#2 + 6. ObjectId Int32 len= 4 fixed@0 + 7. Order Binary len=510 var#0 + --- indexes --- + PK "ObjectIdAttribute" [ObjectId, Attribute, Order] root=12 uniqueEntries=279 + +[SYS] MSysRelationships + tdefPage=5 type=System rows=15 columns=8 indexes=3 + 0. ccolumn Int32 len= 4 fixed@4 + 1. grbit Int32 len= 4 fixed@0 + 2. icolumn Int32 len= 4 fixed@8 + 3. szColumn Text len=510 var#2 + 4. szObject Text len=510 var#1 + 5. szReferencedColumn Text len=510 var#4 + 6. szReferencedObject Text len=510 var#3 + 7. szRelationship Text len=510 var#0 + --- indexes --- + "szRelationship" [szRelationship] root=14 uniqueEntries=15 + "szObject" [szObject] root=15 uniqueEntries=9 + "szReferencedObject" [szReferencedObject] root=16 uniqueEntries=12 + +[SYS] MSysComplexColumns + tdefPage=18 type=User rows=1 columns=5 indexes=3 + 0. ColumnName Text len=510 var#0 + 1. ComplexID Int32 len= 4 fixed@12 auto + 2. ComplexTypeObjectID Int32 len= 4 fixed@0 + 3. ConceptualTableID Int32 len= 4 fixed@8 + 4. FlatTableID Int32 len= 4 fixed@4 + --- indexes --- + PK "IdxID" [ComplexID] root=20 uniqueEntries=1 + "IdxConceptualTableID" [ConceptualTableID] root=21 uniqueEntries=1 + "IdxFlatTableID" [FlatTableID] root=22 uniqueEntries=1 + +[SYS] MSysComplexType_UnsignedByte + tdefPage=23 type=User rows=0 columns=1 indexes=0 + 0. Value Byte len= 1 fixed@0 + +[SYS] MSysComplexType_Short + tdefPage=25 type=User rows=0 columns=1 indexes=0 + 0. Value Int16 len= 2 fixed@0 + +[SYS] MSysComplexType_Long + tdefPage=27 type=User rows=0 columns=1 indexes=0 + 0. Value Int32 len= 4 fixed@0 + +[SYS] MSysComplexType_IEEESingle + tdefPage=29 type=User rows=0 columns=1 indexes=0 + 0. Value Single len= 4 fixed@0 + +[SYS] MSysComplexType_IEEEDouble + tdefPage=31 type=User rows=0 columns=1 indexes=0 + 0. Value Double len= 8 fixed@0 + +[SYS] MSysComplexType_GUID + tdefPage=33 type=User rows=0 columns=1 indexes=0 + 0. Value Guid len= 16 fixed@0 + +[SYS] MSysComplexType_Decimal + tdefPage=35 type=User rows=0 columns=1 indexes=0 + 0. Value FixedPoint len= 9 var#0 + +[SYS] MSysComplexType_Text + tdefPage=37 type=User rows=0 columns=1 indexes=0 + 0. Value Text len=510 var#0 + +[SYS] MSysComplexType_Attachment + tdefPage=39 type=User rows=0 columns=6 indexes=0 + 0. FileData Ole len= 0 var#3 + 1. FileFlags Int32 len= 4 fixed@8 + 2. FileName Text len=510 var#1 + 3. FileTimeStamp DateTime len= 8 fixed@0 + 4. FileType Text len=510 var#2 + 5. FileURL Memo len= 0 var#0 + + Categories + tdefPage=43 type=User rows=8 columns=4 indexes=2 + 0. CategoryID Int32 len= 4 fixed@0 auto + 1. CategoryName Text len= 30 var#0 + 2. Description Memo len= 0 var#1 + 3. Picture Ole len= 0 var#2 + --- indexes --- + "CategoryName" [CategoryName] root=71 uniqueEntries=8 + PK "PK_Categories" [CategoryID] root=72 uniqueEntries=8 + + CustomerCustomerDemo + tdefPage=73 type=User rows=0 columns=2 indexes=3 + 0. CustomerID Text len= 10 fixed@0 + 1. CustomerTypeID Text len= 20 fixed@10 + --- indexes --- + PK "PK_CustomerCustomerDemo" [CustomerID, CustomerTypeID] root=75 uniqueEntries=0 + "FK_CustomerCustomerDemo" [CustomerTypeID] root=303 uniqueEntries=0 + "FK_CustomerCustomerDemo_Customers" [CustomerID] root=304 uniqueEntries=0 + --- foreign keys --- + "FK_CustomerCustomerDemo" [CustomerTypeID] -> CustomerDemographics [CustomerTypeID] + "FK_CustomerCustomerDemo_Customers" [CustomerID] -> Customers [CustomerID] + + CustomerDemographics + tdefPage=76 type=User rows=0 columns=2 indexes=1 + 0. CustomerTypeID Text len= 20 fixed@0 + 1. CustomerDesc Memo len= 0 var#0 + --- indexes --- + PK "PK_CustomerDemographics" [CustomerTypeID] root=78 uniqueEntries=0 + + Customers + tdefPage=79 type=User rows=91 columns=11 indexes=5 + 0. CustomerID Text len= 10 fixed@0 + 1. CompanyName Text len= 80 var#0 + 2. ContactName Text len= 60 var#1 + 3. ContactTitle Text len= 60 var#2 + 4. Address Text len=120 var#3 + 5. City Text len= 30 var#4 + 6. Region Text len= 30 var#5 + 7. PostalCode Text len= 20 var#6 + 8. Country Text len= 30 var#7 + 9. Phone Text len= 48 var#8 + 10. Fax Text len= 48 var#9 + --- indexes --- + "City" [City] root=87 uniqueEntries=69 + "CompanyName" [CompanyName] root=88 uniqueEntries=91 + PK "PK_Customers" [CustomerID] root=89 uniqueEntries=91 + "PostalCode" [PostalCode] root=90 uniqueEntries=87 + "Region" [Region] root=91 uniqueEntries=19 + + Employees + tdefPage=92 type=User rows=9 columns=18 indexes=4 + 0. EmployeeID Int32 len= 4 fixed@0 auto + 1. LastName Text len= 40 var#0 + 2. FirstName Text len= 20 var#1 + 3. Title Text len= 60 var#2 + 4. TitleOfCourtesy Text len= 50 var#3 + 5. BirthDate DateTime len= 8 fixed@4 + 6. HireDate DateTime len= 8 fixed@12 + 7. Address Text len=120 var#4 + 8. City Text len= 30 var#5 + 9. Region Text len= 30 var#6 + 10. PostalCode Text len= 20 var#7 + 11. Country Text len= 30 var#8 + 12. HomePhone Text len= 48 var#9 + 13. Extension Text len= 8 var#10 + 14. Photo Ole len= 0 var#11 + 15. Notes Memo len= 0 var#12 + 16. ReportsTo Int32 len= 4 fixed@20 + 17. PhotoPath Text len=510 var#13 + --- indexes --- + "LastName" [LastName] root=151 uniqueEntries=9 + PK "PK_Employees" [EmployeeID] root=152 uniqueEntries=9 + "PostalCode" [PostalCode] root=153 uniqueEntries=9 + "FK_Employees_Employees" [ReportsTo] root=305 uniqueEntries=3 + --- foreign keys --- + "FK_Employees_Employees" [ReportsTo] -> Employees [EmployeeID] + + EmployeeTerritories + tdefPage=154 type=User rows=49 columns=2 indexes=3 + 0. EmployeeID Int32 len= 4 fixed@0 + 1. TerritoryID Text len= 40 var#0 + --- indexes --- + PK "PK_EmployeeTerritories" [EmployeeID, TerritoryID] root=157 uniqueEntries=49 + "FK_EmployeeTerritories_Employees" [EmployeeID] root=306 uniqueEntries=9 + "FK_EmployeeTerritories_Territories" [TerritoryID] root=307 uniqueEntries=49 + --- foreign keys --- + "FK_EmployeeTerritories_Employees" [EmployeeID] -> Employees [EmployeeID] + "FK_EmployeeTerritories_Territories" [TerritoryID] -> Territories [TerritoryID] + +[SYS] MSysAccessStorage + tdefPage=159 type=User rows=23 columns=7 indexes=3 + 0. DateCreate DateTime len= 8 fixed@0 + 1. DateUpdate DateTime len= 8 fixed@8 + 2. Id Int32 len= 4 fixed@16 auto + 3. Lv Ole len= 0 var#0 + 4. Name Text len=256 var#1 + 5. ParentId Int32 len= 4 fixed@20 + 6. Type Int32 len= 4 fixed@24 + --- indexes --- + PK "Id" [Id] root=161 uniqueEntries=24 + U "ParentIdId" [ParentId, Id] root=162 uniqueEntries=24 + U "ParentIdName" [ParentId, Name] root=163 uniqueEntries=24 + + Order Details + tdefPage=164 type=User rows=2155 columns=5 indexes=3 + 0. OrderID Int32 len= 4 fixed@0 + 1. ProductID Int32 len= 4 fixed@4 + 2. UnitPrice Currency len= 8 fixed@8 + 3. Quantity Int16 len= 2 fixed@16 + 4. Discount Single len= 4 fixed@18 + --- indexes --- + "OrderID" [OrderID] root=181 uniqueEntries=830 + PK "PK_Order_Details" [OrderID, ProductID] root=186 uniqueEntries=2155 + "ProductID" [ProductID] root=194 uniqueEntries=77 + --- foreign keys --- + "FK_Order_Details_Orders" [OrderID] -> Orders [OrderID] + "FK_Order_Details_Products" [ProductID] -> Products [ProductID] + + Orders + tdefPage=198 type=User rows=830 columns=14 indexes=7 + 0. OrderID Int32 len= 4 fixed@0 auto + 1. CustomerID Text len= 10 fixed@4 + 2. EmployeeID Int32 len= 4 fixed@14 + 3. OrderDate DateTime len= 8 fixed@18 + 4. RequiredDate DateTime len= 8 fixed@26 + 5. ShippedDate DateTime len= 8 fixed@34 + 6. ShipVia Int32 len= 4 fixed@42 + 7. Freight Currency len= 8 fixed@46 + 8. ShipName Text len= 80 var#0 + 9. ShipAddress Text len=120 var#1 + 10. ShipCity Text len= 30 var#2 + 11. ShipRegion Text len= 30 var#3 + 12. ShipPostalCode Text len= 20 var#4 + 13. ShipCountry Text len= 30 var#5 + --- indexes --- + "CustomerID" [CustomerID] root=240 uniqueEntries=89 + "EmployeeID" [EmployeeID] root=244 uniqueEntries=9 + "OrderDate" [OrderDate] root=247 uniqueEntries=480 + PK "PK_Orders" [OrderID] root=251 uniqueEntries=830 + "ShippedDate" [ShippedDate] root=254 uniqueEntries=388 + "ShippersOrders" [ShipVia] root=258 uniqueEntries=3 + "ShipPostalCode" [ShipPostalCode] root=261 uniqueEntries=85 + --- foreign keys --- + "FK_Orders_Customers" [CustomerID] -> Customers [CustomerID] + "FK_Orders_Employees" [EmployeeID] -> Employees [EmployeeID] + "FK_Orders_Shippers" [ShipVia] -> Shippers [ShipperID] + + Products + tdefPage=266 type=User rows=77 columns=10 indexes=4 + 0. ProductID Int32 len= 4 fixed@0 auto + 1. ProductName Text len= 80 var#0 + 2. SupplierID Int32 len= 4 fixed@4 + 3. CategoryID Int32 len= 4 fixed@8 + 4. QuantityPerUnit Text len= 40 var#1 + 5. UnitPrice Currency len= 8 fixed@12 + 6. UnitsInStock Int16 len= 2 fixed@20 + 7. UnitsOnOrder Int16 len= 2 fixed@22 + 8. ReorderLevel Int16 len= 2 fixed@24 + 9. Discontinued Boolean len= 1 fixed@0 + --- indexes --- + "CategoriesProducts" [CategoryID] root=270 uniqueEntries=8 + PK "PK_Products" [ProductID] root=271 uniqueEntries=77 + "ProductName" [ProductName] root=272 uniqueEntries=77 + "SupplierID" [SupplierID] root=273 uniqueEntries=29 + --- foreign keys --- + "FK_Products_Categories" [CategoryID] -> Categories [CategoryID] + "FK_Products_Suppliers" [SupplierID] -> Suppliers [SupplierID] + + Region + tdefPage=275 type=User rows=4 columns=2 indexes=1 + 0. RegionID Int32 len= 4 fixed@0 + 1. RegionDescription Text len=100 fixed@4 + --- indexes --- + PK "PK_Region" [RegionID] root=278 uniqueEntries=4 + + Shippers + tdefPage=283 type=User rows=3 columns=3 indexes=1 + 0. ShipperID Int32 len= 4 fixed@0 auto + 1. CompanyName Text len= 80 var#0 + 2. Phone Text len= 48 var#1 + --- indexes --- + PK "PK_Shippers" [ShipperID] root=286 uniqueEntries=3 + + Suppliers + tdefPage=287 type=User rows=29 columns=12 indexes=3 + 0. SupplierID Int32 len= 4 fixed@0 auto + 1. CompanyName Text len= 80 var#0 + 2. ContactName Text len= 60 var#1 + 3. ContactTitle Text len= 60 var#2 + 4. Address Text len=120 var#3 + 5. City Text len= 30 var#4 + 6. Region Text len= 30 var#5 + 7. PostalCode Text len= 20 var#6 + 8. Country Text len= 30 var#7 + 9. Phone Text len= 48 var#8 + 10. Fax Text len= 48 var#9 + 11. HomePage Memo len= 0 var#10 + --- indexes --- + "CompanyName" [CompanyName] root=292 uniqueEntries=29 + PK "PK_Suppliers" [SupplierID] root=293 uniqueEntries=29 + "PostalCode" [PostalCode] root=294 uniqueEntries=29 + + Territories + tdefPage=295 type=User rows=53 columns=3 indexes=2 + 0. TerritoryID Text len= 40 var#0 + 1. TerritoryDescription Text len=100 fixed@0 + 2. RegionID Int32 len= 4 fixed@100 + --- indexes --- + PK "PK_Territories" [TerritoryID] root=299 uniqueEntries=53 + "FK_Territories_Region" [RegionID] root=308 uniqueEntries=4 + --- foreign keys --- + "FK_Territories_Region" [RegionID] -> Region [RegionID] + +[SYS] MSysNavPaneGroupCategories + tdefPage=312 type=User rows=3 columns=7 indexes=1 + 0. Filter Text len=510 var#4 + 1. Flags Int32 len= 4 var#6 + 2. Id Int32 len= 4 var#0 auto + 3. Name Text len=510 var#1 + 4. Position Int32 len= 4 var#5 + 5. SelectedObjectID Int32 len= 4 var#3 + 6. Type Int32 len= 4 var#2 + --- indexes --- + PK "Id" [Id] root=314 uniqueEntries=3 + +[SYS] MSysNavPaneGroups + tdefPage=315 type=User rows=10 columns=7 indexes=2 + 0. Flags Int32 len= 4 var#6 + 1. GroupCategoryID Int32 len= 4 var#2 + 2. Id Int32 len= 4 var#0 auto + 3. Name Text len=510 var#1 + 4. Object Type Group Int32 len= 4 var#5 + 5. ObjectID Int32 len= 4 var#3 + 6. Position Int32 len= 4 var#4 + --- indexes --- + PK "Id" [Id] root=317 uniqueEntries=10 + "GroupCategoryID" [GroupCategoryID] root=318 uniqueEntries=3 + --- foreign keys --- + "MSysNavPaneGroupCategoriesMSysNavPaneGroups" [GroupCategoryID] -> MSysNavPaneGroupCategories [Id] cascadeUpdate cascadeDelete + +[SYS] MSysNavPaneGroupToObjects + tdefPage=319 type=User rows=47 columns=7 indexes=2 + 0. Flags Int32 len= 4 var#6 + 1. GroupID Int32 len= 4 var#2 + 2. Icon Int32 len= 4 var#5 + 3. Id Int32 len= 4 var#0 auto + 4. Name Text len=510 var#3 + 5. ObjectID Int32 len= 4 var#1 + 6. Position Int32 len= 4 var#4 + --- indexes --- + PK "Id" [Id] root=321 uniqueEntries=47 + "GroupID" [GroupID] root=322 uniqueEntries=2 + --- foreign keys --- + "MSysNavPaneGroupsMSysNavPaneGroupToObjects" [GroupID] -> MSysNavPaneGroups [Id] cascadeUpdate cascadeDelete + +[SYS] MSysNavPaneObjectIDs + tdefPage=327 type=User rows=57 columns=3 indexes=0 + 0. Id Int32 len= 4 var#0 + 1. Name Text len=130 var#1 + 2. Type Int32 len= 4 var#2 + +[SYS] MSysResources + tdefPage=332 type=User rows=1 columns=5 indexes=2 + 0. Data Complex len= 4 fixed@0 auto + 1. Extension Text len=510 var#3 + 2. Id Int32 len= 4 var#0 auto + 3. Name Text len=510 var#1 + 4. Type Text len=510 var#2 + --- indexes --- + U "Data_BF92175BD03C433695464F95CDF97589" [Data] root=340 uniqueEntries=1 + PK "Id" [Id] root=341 uniqueEntries=1 + +[SYS] f_3B3D4E1F479C4CCCA9CB8E549B05D3B7_Data + tdefPage=334 type=User rows=1 columns=8 indexes=3 + 0. _Data Int32 len= 4 var#5 + 1. FileData Ole len= 0 var#0 + 2. FileFlags Int32 len= 4 fixed@0 + 3. FileName Text len=510 var#1 + 4. FileTimeStamp DateTime len= 8 fixed@4 + 5. FileType Text len=510 var#2 + 6. FileURL Memo len= 0 var#3 + 7. MSysResources_Data Int32 len= 4 var#4 auto + --- indexes --- + PK "MSysComplexPKIndex" [MSysResources_Data] root=336 uniqueEntries=1 + "_Data" [_Data] root=337 uniqueEntries=1 + U "IdxFKPrimaryScalar" [_Data, FileName] root=338 uniqueEntries=1 diff --git a/test/LibRed.Core.Tests/Expected/widetable-dump.txt b/test/LibRed.Core.Tests/Expected/widetable-dump.txt new file mode 100644 index 00000000..26600f05 --- /dev/null +++ b/test/LibRed.Core.Tests/Expected/widetable-dump.txt @@ -0,0 +1,317 @@ +Database: Standard ACE DB (Version12_2007, page size 4096) + +[SYS] MSysObjects + tdefPage=2 type=System rows=19 columns=17 indexes=2 + 0. Connect Memo len= 0 var#3 + 1. Database Memo len= 0 var#2 + 2. DateCreate DateTime len= 8 fixed@10 + 3. DateUpdate DateTime len= 8 fixed@18 + 4. Flags Int32 len= 4 fixed@26 + 5. ForeignName Text len=510 var#4 + 6. Id Int32 len= 4 fixed@0 + 7. Lv Ole len= 0 var#7 + 8. LvExtra Ole len= 0 var#10 + 9. LvModule Ole len= 0 var#9 + 10. LvProp Ole len= 0 var#8 + 11. Name Text len=510 var#0 + 12. Owner Binary len=510 var#1 + 13. ParentId Int32 len= 4 fixed@4 + 14. RmtInfoLong Ole len= 0 var#6 + 15. RmtInfoShort Binary len=510 var#5 + 16. Type Int16 len= 2 fixed@8 + --- indexes --- + U "ParentIdName" [ParentId, Name] root=7 uniqueEntries=19 + PK "Id" [Id] root=8 uniqueEntries=19 + +[SYS] MSysACEs + tdefPage=3 type=System rows=38 columns=4 indexes=1 + 0. ACM Int32 len= 4 fixed@4 + 1. FInheritable Boolean len= 1 fixed@0 + 2. ObjectId Int32 len= 4 fixed@0 + 3. SID Binary len=510 var#0 + --- indexes --- + "ObjectId" [ObjectId] root=10 uniqueEntries=19 + +[SYS] MSysQueries + tdefPage=4 type=System rows=0 columns=8 indexes=1 + 0. Attribute Byte len= 1 fixed@4 + 1. Expression Memo len= 0 var#3 + 2. Flag Int16 len= 2 fixed@5 + 3. LvExtra Int32 len= 4 fixed@7 + 4. Name1 Text len=510 var#1 + 5. Name2 Text len=510 var#2 + 6. ObjectId Int32 len= 4 fixed@0 + 7. Order Binary len=510 var#0 + --- indexes --- + PK "ObjectIdAttribute" [ObjectId, Attribute, Order] root=12 uniqueEntries=0 + +[SYS] MSysRelationships + tdefPage=5 type=System rows=0 columns=8 indexes=3 + 0. ccolumn Int32 len= 4 fixed@4 + 1. grbit Int32 len= 4 fixed@0 + 2. icolumn Int32 len= 4 fixed@8 + 3. szColumn Text len=510 var#2 + 4. szObject Text len=510 var#1 + 5. szReferencedColumn Text len=510 var#4 + 6. szReferencedObject Text len=510 var#3 + 7. szRelationship Text len=510 var#0 + --- indexes --- + "szRelationship" [szRelationship] root=14 uniqueEntries=0 + "szObject" [szObject] root=15 uniqueEntries=0 + "szReferencedObject" [szReferencedObject] root=16 uniqueEntries=0 + +[SYS] MSysComplexColumns + tdefPage=18 type=User rows=0 columns=5 indexes=3 + 0. ColumnName Text len=510 var#0 + 1. ComplexID Int32 len= 4 fixed@12 auto + 2. ComplexTypeObjectID Int32 len= 4 fixed@0 + 3. ConceptualTableID Int32 len= 4 fixed@8 + 4. FlatTableID Int32 len= 4 fixed@4 + --- indexes --- + PK "IdxID" [ComplexID] root=20 uniqueEntries=0 + "IdxConceptualTableID" [ConceptualTableID] root=21 uniqueEntries=0 + "IdxFlatTableID" [FlatTableID] root=22 uniqueEntries=0 + +[SYS] MSysComplexType_UnsignedByte + tdefPage=23 type=User rows=0 columns=1 indexes=0 + 0. Value Byte len= 1 fixed@0 + +[SYS] MSysComplexType_Short + tdefPage=25 type=User rows=0 columns=1 indexes=0 + 0. Value Int16 len= 2 fixed@0 + +[SYS] MSysComplexType_Long + tdefPage=27 type=User rows=0 columns=1 indexes=0 + 0. Value Int32 len= 4 fixed@0 + +[SYS] MSysComplexType_IEEESingle + tdefPage=29 type=User rows=0 columns=1 indexes=0 + 0. Value Single len= 4 fixed@0 + +[SYS] MSysComplexType_IEEEDouble + tdefPage=31 type=User rows=0 columns=1 indexes=0 + 0. Value Double len= 8 fixed@0 + +[SYS] MSysComplexType_GUID + tdefPage=33 type=User rows=0 columns=1 indexes=0 + 0. Value Guid len= 16 fixed@0 + +[SYS] MSysComplexType_Decimal + tdefPage=35 type=User rows=0 columns=1 indexes=0 + 0. Value FixedPoint len= 9 var#0 + +[SYS] MSysComplexType_Text + tdefPage=37 type=User rows=0 columns=1 indexes=0 + 0. Value Text len=510 var#0 + +[SYS] MSysComplexType_Attachment + tdefPage=39 type=User rows=0 columns=6 indexes=0 + 0. FileData Ole len= 0 var#3 + 1. FileFlags Int32 len= 4 fixed@8 + 2. FileName Text len=510 var#1 + 3. FileTimeStamp DateTime len= 8 fixed@0 + 4. FileType Text len=510 var#2 + 5. FileURL Memo len= 0 var#0 + + WideTable + tdefPage=42 type=User rows=1 columns=200 indexes=0 + 0. C000 Int32 len= 4 fixed@0 + 1. C001 Int32 len= 4 fixed@4 + 2. C002 Int32 len= 4 fixed@8 + 3. C003 Int32 len= 4 fixed@12 + 4. C004 Int32 len= 4 fixed@16 + 5. C005 Int32 len= 4 fixed@20 + 6. C006 Int32 len= 4 fixed@24 + 7. C007 Int32 len= 4 fixed@28 + 8. C008 Int32 len= 4 fixed@32 + 9. C009 Int32 len= 4 fixed@36 + 10. C010 Int32 len= 4 fixed@40 + 11. C011 Int32 len= 4 fixed@44 + 12. C012 Int32 len= 4 fixed@48 + 13. C013 Int32 len= 4 fixed@52 + 14. C014 Int32 len= 4 fixed@56 + 15. C015 Int32 len= 4 fixed@60 + 16. C016 Int32 len= 4 fixed@64 + 17. C017 Int32 len= 4 fixed@68 + 18. C018 Int32 len= 4 fixed@72 + 19. C019 Int32 len= 4 fixed@76 + 20. C020 Int32 len= 4 fixed@80 + 21. C021 Int32 len= 4 fixed@84 + 22. C022 Int32 len= 4 fixed@88 + 23. C023 Int32 len= 4 fixed@92 + 24. C024 Int32 len= 4 fixed@96 + 25. C025 Int32 len= 4 fixed@100 + 26. C026 Int32 len= 4 fixed@104 + 27. C027 Int32 len= 4 fixed@108 + 28. C028 Int32 len= 4 fixed@112 + 29. C029 Int32 len= 4 fixed@116 + 30. C030 Int32 len= 4 fixed@120 + 31. C031 Int32 len= 4 fixed@124 + 32. C032 Int32 len= 4 fixed@128 + 33. C033 Int32 len= 4 fixed@132 + 34. C034 Int32 len= 4 fixed@136 + 35. C035 Int32 len= 4 fixed@140 + 36. C036 Int32 len= 4 fixed@144 + 37. C037 Int32 len= 4 fixed@148 + 38. C038 Int32 len= 4 fixed@152 + 39. C039 Int32 len= 4 fixed@156 + 40. C040 Int32 len= 4 fixed@160 + 41. C041 Int32 len= 4 fixed@164 + 42. C042 Int32 len= 4 fixed@168 + 43. C043 Int32 len= 4 fixed@172 + 44. C044 Int32 len= 4 fixed@176 + 45. C045 Int32 len= 4 fixed@180 + 46. C046 Int32 len= 4 fixed@184 + 47. C047 Int32 len= 4 fixed@188 + 48. C048 Int32 len= 4 fixed@192 + 49. C049 Int32 len= 4 fixed@196 + 50. C050 Int32 len= 4 fixed@200 + 51. C051 Int32 len= 4 fixed@204 + 52. C052 Int32 len= 4 fixed@208 + 53. C053 Int32 len= 4 fixed@212 + 54. C054 Int32 len= 4 fixed@216 + 55. C055 Int32 len= 4 fixed@220 + 56. C056 Int32 len= 4 fixed@224 + 57. C057 Int32 len= 4 fixed@228 + 58. C058 Int32 len= 4 fixed@232 + 59. C059 Int32 len= 4 fixed@236 + 60. C060 Int32 len= 4 fixed@240 + 61. C061 Int32 len= 4 fixed@244 + 62. C062 Int32 len= 4 fixed@248 + 63. C063 Int32 len= 4 fixed@252 + 64. C064 Int32 len= 4 fixed@256 + 65. C065 Int32 len= 4 fixed@260 + 66. C066 Int32 len= 4 fixed@264 + 67. C067 Int32 len= 4 fixed@268 + 68. C068 Int32 len= 4 fixed@272 + 69. C069 Int32 len= 4 fixed@276 + 70. C070 Int32 len= 4 fixed@280 + 71. C071 Int32 len= 4 fixed@284 + 72. C072 Int32 len= 4 fixed@288 + 73. C073 Int32 len= 4 fixed@292 + 74. C074 Int32 len= 4 fixed@296 + 75. C075 Int32 len= 4 fixed@300 + 76. C076 Int32 len= 4 fixed@304 + 77. C077 Int32 len= 4 fixed@308 + 78. C078 Int32 len= 4 fixed@312 + 79. C079 Int32 len= 4 fixed@316 + 80. C080 Int32 len= 4 fixed@320 + 81. C081 Int32 len= 4 fixed@324 + 82. C082 Int32 len= 4 fixed@328 + 83. C083 Int32 len= 4 fixed@332 + 84. C084 Int32 len= 4 fixed@336 + 85. C085 Int32 len= 4 fixed@340 + 86. C086 Int32 len= 4 fixed@344 + 87. C087 Int32 len= 4 fixed@348 + 88. C088 Int32 len= 4 fixed@352 + 89. C089 Int32 len= 4 fixed@356 + 90. C090 Int32 len= 4 fixed@360 + 91. C091 Int32 len= 4 fixed@364 + 92. C092 Int32 len= 4 fixed@368 + 93. C093 Int32 len= 4 fixed@372 + 94. C094 Int32 len= 4 fixed@376 + 95. C095 Int32 len= 4 fixed@380 + 96. C096 Int32 len= 4 fixed@384 + 97. C097 Int32 len= 4 fixed@388 + 98. C098 Int32 len= 4 fixed@392 + 99. C099 Int32 len= 4 fixed@396 + 100. C100 Int32 len= 4 fixed@400 + 101. C101 Int32 len= 4 fixed@404 + 102. C102 Int32 len= 4 fixed@408 + 103. C103 Int32 len= 4 fixed@412 + 104. C104 Int32 len= 4 fixed@416 + 105. C105 Int32 len= 4 fixed@420 + 106. C106 Int32 len= 4 fixed@424 + 107. C107 Int32 len= 4 fixed@428 + 108. C108 Int32 len= 4 fixed@432 + 109. C109 Int32 len= 4 fixed@436 + 110. C110 Int32 len= 4 fixed@440 + 111. C111 Int32 len= 4 fixed@444 + 112. C112 Int32 len= 4 fixed@448 + 113. C113 Int32 len= 4 fixed@452 + 114. C114 Int32 len= 4 fixed@456 + 115. C115 Int32 len= 4 fixed@460 + 116. C116 Int32 len= 4 fixed@464 + 117. C117 Int32 len= 4 fixed@468 + 118. C118 Int32 len= 4 fixed@472 + 119. C119 Int32 len= 4 fixed@476 + 120. C120 Int32 len= 4 fixed@480 + 121. C121 Int32 len= 4 fixed@484 + 122. C122 Int32 len= 4 fixed@488 + 123. C123 Int32 len= 4 fixed@492 + 124. C124 Int32 len= 4 fixed@496 + 125. C125 Int32 len= 4 fixed@500 + 126. C126 Int32 len= 4 fixed@504 + 127. C127 Int32 len= 4 fixed@508 + 128. C128 Int32 len= 4 fixed@512 + 129. C129 Int32 len= 4 fixed@516 + 130. C130 Int32 len= 4 fixed@520 + 131. C131 Int32 len= 4 fixed@524 + 132. C132 Int32 len= 4 fixed@528 + 133. C133 Int32 len= 4 fixed@532 + 134. C134 Int32 len= 4 fixed@536 + 135. C135 Int32 len= 4 fixed@540 + 136. C136 Int32 len= 4 fixed@544 + 137. C137 Int32 len= 4 fixed@548 + 138. C138 Int32 len= 4 fixed@552 + 139. C139 Int32 len= 4 fixed@556 + 140. C140 Int32 len= 4 fixed@560 + 141. C141 Int32 len= 4 fixed@564 + 142. C142 Int32 len= 4 fixed@568 + 143. C143 Int32 len= 4 fixed@572 + 144. C144 Int32 len= 4 fixed@576 + 145. C145 Int32 len= 4 fixed@580 + 146. C146 Int32 len= 4 fixed@584 + 147. C147 Int32 len= 4 fixed@588 + 148. C148 Int32 len= 4 fixed@592 + 149. C149 Int32 len= 4 fixed@596 + 150. C150 Int32 len= 4 fixed@600 + 151. C151 Int32 len= 4 fixed@604 + 152. C152 Int32 len= 4 fixed@608 + 153. C153 Int32 len= 4 fixed@612 + 154. C154 Int32 len= 4 fixed@616 + 155. C155 Int32 len= 4 fixed@620 + 156. C156 Int32 len= 4 fixed@624 + 157. C157 Int32 len= 4 fixed@628 + 158. C158 Int32 len= 4 fixed@632 + 159. C159 Int32 len= 4 fixed@636 + 160. C160 Int32 len= 4 fixed@640 + 161. C161 Int32 len= 4 fixed@644 + 162. C162 Int32 len= 4 fixed@648 + 163. C163 Int32 len= 4 fixed@652 + 164. C164 Int32 len= 4 fixed@656 + 165. C165 Int32 len= 4 fixed@660 + 166. C166 Int32 len= 4 fixed@664 + 167. C167 Int32 len= 4 fixed@668 + 168. C168 Int32 len= 4 fixed@672 + 169. C169 Int32 len= 4 fixed@676 + 170. C170 Int32 len= 4 fixed@680 + 171. C171 Int32 len= 4 fixed@684 + 172. C172 Int32 len= 4 fixed@688 + 173. C173 Int32 len= 4 fixed@692 + 174. C174 Int32 len= 4 fixed@696 + 175. C175 Int32 len= 4 fixed@700 + 176. C176 Int32 len= 4 fixed@704 + 177. C177 Int32 len= 4 fixed@708 + 178. C178 Int32 len= 4 fixed@712 + 179. C179 Int32 len= 4 fixed@716 + 180. C180 Int32 len= 4 fixed@720 + 181. C181 Int32 len= 4 fixed@724 + 182. C182 Int32 len= 4 fixed@728 + 183. C183 Int32 len= 4 fixed@732 + 184. C184 Int32 len= 4 fixed@736 + 185. C185 Int32 len= 4 fixed@740 + 186. C186 Int32 len= 4 fixed@744 + 187. C187 Int32 len= 4 fixed@748 + 188. C188 Int32 len= 4 fixed@752 + 189. C189 Int32 len= 4 fixed@756 + 190. C190 Int32 len= 4 fixed@760 + 191. C191 Int32 len= 4 fixed@764 + 192. C192 Int32 len= 4 fixed@768 + 193. C193 Int32 len= 4 fixed@772 + 194. C194 Int32 len= 4 fixed@776 + 195. C195 Int32 len= 4 fixed@780 + 196. C196 Int32 len= 4 fixed@784 + 197. C197 Int32 len= 4 fixed@788 + 198. C198 Int32 len= 4 fixed@792 + 199. C199 Int32 len= 4 fixed@796 diff --git a/test/LibRed.Core.Tests/FixedCharEncodingTests.cs b/test/LibRed.Core.Tests/FixedCharEncodingTests.cs new file mode 100644 index 00000000..1f3ca1d0 --- /dev/null +++ b/test/LibRed.Core.Tests/FixedCharEncodingTests.cs @@ -0,0 +1,69 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// A fixed-length text (CHAR/NCHAR) column stores space-padded to its full width — matching ACE. Previously +// LibRed's encoder didn't pad, so inserting a short value into a fixed CHAR threw +// "Column ... encoded to N bytes, expected M". This covers the round-trip and the ACE read-back. +public class FixedCharEncodingTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Libred_inserts_and_reads_a_fixed_char_column() + { + string path = Path.Combine(Path.GetTempPath(), $"fc-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("V", JetDataType.Text, 100, IsFixedLength: true)], // CHAR(50) → 100 bytes fixed + primaryKey: ["K"]); + db.OpenTable("T").Insert([1, "Eastern"]); + + object? v = db.OpenTable("T").Rows().First()[1]; + Assert.Equal("Eastern".PadRight(50), v); // fixed CHAR reads back space-padded (like ACE) + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_reads_a_libred_inserted_fixed_char() + { + string path = Path.Combine(Path.GetTempPath(), $"fca-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("RegionX", + [new ColumnSpec("RegionID", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("RegionDescription", JetDataType.Text, 100, IsFixedLength: true)], + primaryKey: ["RegionID"]); + db.OpenTable("RegionX").Insert([1, "Eastern"]); + } + + using var conn = OpenOleDb(path); + using var c = conn.CreateCommand(); + c.CommandText = "SELECT RegionDescription FROM RegionX WHERE RegionID = 1"; + string v = (string)c.ExecuteScalar()!; + Assert.Equal("Eastern", v.TrimEnd()); // ACE reads it (space-padded); trimmed content matches + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/ForeignKeyLinkageTests.cs b/test/LibRed.Core.Tests/ForeignKeyLinkageTests.cs new file mode 100644 index 00000000..d9c8465b --- /dev/null +++ b/test/LibRed.Core.Tests/ForeignKeyLinkageTests.cs @@ -0,0 +1,179 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.IO; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Verifies the byte-faithful relationship logical-index linkage LibRed writes into both tables' TDEFs +/// (§3.6), matching what ACE writes for a minimal parent/child pair: the child's FK-column index carries +/// an outgoing (fkType 0x02) block pointing at the parent page, and the parent gains an incoming +/// (fkType 0x01) block pointing back — the two cross-referenced by index_num. +/// +public class ForeignKeyLinkageTests +{ + private readonly record struct Block(int Num, int Num2, byte FkType, uint FkNum, int FkPage, byte Upd, byte Del, byte Type, string Name); + + private static List ReadLogicalBlocks(PageChannel ch, int page) + { + var fmt = ch.Format; + var buf = ch.ReadPage(page); + int dataCount = buf.ReadInt32(fmt.TdefIndexCountOffset); + int logicalCount = buf.ReadInt32(fmt.TdefRealIndexCountOffset); + int cols = buf.ReadUInt16(fmt.TdefColumnCountOffset); + int pos = fmt.TdefRealIndexBlockOffset + dataCount * fmt.RealIndexEntrySize + cols * fmt.ColumnDescriptorSize; + for (int i = 0; i < cols; i++) pos += 2 + buf.ReadUInt16(pos); + int infoStart = pos + dataCount * 52; + int namePos = infoStart + logicalCount * 28; + var names = new string[logicalCount]; + for (int i = 0; i < logicalCount; i++) { int len = buf.ReadUInt16(namePos); namePos += 2; names[i] = System.Text.Encoding.Unicode.GetString(buf.Slice(namePos, len)); namePos += len; } + var blocks = new List(logicalCount); + for (int i = 0; i < logicalCount; i++) + { + int b = infoStart + i * 28; + blocks.Add(new Block(buf.ReadInt32(b + 4), buf.ReadInt32(b + 8), buf.ReadByte(b + 0x0C), + (uint)buf.ReadInt32(b + 0x0D), buf.ReadInt32(b + 0x11), buf.ReadByte(b + 0x15), + buf.ReadByte(b + 0x16), buf.ReadByte(b + 0x17), names[i])); + } + return blocks; + } + + [Fact] + public void Child_and_parent_carry_cross_linked_relationship_blocks() + { + string path = Path.Combine(Path.GetTempPath(), $"fklink-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + int parentPage, childPage; + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("P1", [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true)], primaryKey: ["Id"]); + db.CreateTable("C1", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Pid", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec("FKrel", "P1", [("Pid", "Id")], true, false, false)]); + parentPage = db.Catalog.FindTable("P1")!.DefinitionPage; + childPage = db.Catalog.FindTable("C1")!.DefinitionPage; + } + + using var ch = PageChannel.Open(path, readOnly: true); + var child = ReadLogicalBlocks(ch, childPage); + var parent = ReadLogicalBlocks(ch, parentPage); + + // Child: an outgoing relationship block named FKrel, pointing at the parent page, type foreign. + Block outgoing = child.Single(b => b.Name == "FKrel"); + Assert.Equal(0x02, outgoing.FkType); + Assert.Equal(0x02, outgoing.Type); + Assert.Equal(parentPage, outgoing.FkPage); + + // Parent: an incoming relationship block (hidden ".r" name), pointing back at the child page. + Block incoming = parent.Single(b => b.FkType == 0x01); + Assert.Equal(0x02, incoming.Type); + Assert.Equal(childPage, incoming.FkPage); + Assert.StartsWith(".r", incoming.Name); + + // The two ends cross-reference by index_num (each block's fkNum is the other's num). + Assert.Equal((uint)incoming.Num, outgoing.FkNum); + Assert.Equal((uint)outgoing.Num, incoming.FkNum); + + // The parent's own primary key is untouched (still present, not a relationship). + Assert.Contains(parent, b => b.Type == 0x01 && b.FkType == 0x00); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // FOREIGN KEY NO INDEX: ACE flags the child's outgoing block 0x03 instead of 0x02; the parent + // incoming block is unchanged (0x01). + [Fact] + public void No_index_relationship_flags_the_child_block_0x03() + { + string path = Path.Combine(Path.GetTempPath(), $"fknoidx-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("P3", [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true)], primaryKey: ["Id"]); + db.CreateTable("C3", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Pid", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec("FKni", "P3", [("Pid", "Id")], true, false, false, NoIndex: true)]); + } + using var ch = PageChannel.Open(path, readOnly: true); + var child = ReadLogicalBlocks(ch, new JetCatalog(ch).FindTable("C3")!.DefinitionPage); + var parent = ReadLogicalBlocks(ch, new JetCatalog(ch).FindTable("P3")!.DefinitionPage); + Assert.Equal(0x03, child.Single(b => b.Name == "FKni").FkType); + Assert.Equal(0x01, parent.Single(b => b.FkType == 0x01).FkType); // parent side unchanged + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A self-referencing foreign key (the table is its own parent) hosts BOTH ends in its one TDEF — + // an outgoing 0x02 block and an incoming 0x01 block, each with fkPage = the table's own page, + // cross-referenced by index_num. (Verified byte-for-byte against an ACE-created self-reference.) + [Fact] + public void Self_referencing_relationship_hosts_both_ends_in_one_table() + { + string path = Path.Combine(Path.GetTempPath(), $"fkself-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + int page; + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("S", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Mgr", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec("fk", "S", [("Mgr", "Id")], true, false, false)]); + page = db.Catalog.FindTable("S")!.DefinitionPage; + } + using var ch = PageChannel.Open(path, readOnly: true); + var blocks = ReadLogicalBlocks(ch, page); + + Block outgoing = blocks.Single(b => b.Name == "fk"); + Block incoming = blocks.Single(b => b.FkType == 0x01); + Assert.Equal(0x02, outgoing.FkType); + Assert.Equal(page, outgoing.FkPage); // references its own table + Assert.Equal(page, incoming.FkPage); + Assert.StartsWith(".r", incoming.Name); + Assert.Equal((uint)incoming.Num, outgoing.FkNum); // cross-linked within the one table + Assert.Equal((uint)outgoing.Num, incoming.FkNum); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Cascade_actions_are_written_on_both_ends() + { + string path = Path.Combine(Path.GetTempPath(), $"fkcasc-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("P2", [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true)], primaryKey: ["Id"]); + db.CreateTable("C2", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("Pid", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec("FKcas", "P2", [("Pid", "Id")], true, CascadeUpdate: true, CascadeDelete: true)]); + } + using var ch = PageChannel.Open(path, readOnly: true); + var child = ReadLogicalBlocks(ch, new JetCatalog(ch).FindTable("C2")!.DefinitionPage); + var parent = ReadLogicalBlocks(ch, new JetCatalog(ch).FindTable("P2")!.DefinitionPage); + + Block outgoing = child.Single(b => b.Name == "FKcas"); + Assert.Equal(0x01, outgoing.Upd); // cascade update + Assert.Equal(0x01, outgoing.Del); // cascade delete + Block incoming = parent.Single(b => b.FkType == 0x01); + Assert.Equal(0x01, incoming.Upd); + Assert.Equal(0x01, incoming.Del); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/ForeignKeyTests.cs b/test/LibRed.Core.Tests/ForeignKeyTests.cs new file mode 100644 index 00000000..97282c42 --- /dev/null +++ b/test/LibRed.Core.Tests/ForeignKeyTests.cs @@ -0,0 +1,52 @@ +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +public class ForeignKeyTests +{ + [Fact] + public void Reads_relationships_from_the_catalog() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var fk = Assert.Single(db.Catalog.Relationships, r => r.Name == "FK_Orders_Customers"); + Assert.Equal("Orders", fk.Table); + Assert.Equal("Customers", fk.ReferencedTable); + Assert.Equal([("CustomerID", "CustomerID")], fk.Columns); + Assert.True(fk.IsEnforced); + Assert.False(fk.CascadeUpdate); + Assert.False(fk.CascadeDelete); + + // A foreign key whose column name differs from the referenced column. + var shippers = Assert.Single(db.Catalog.Relationships, r => r.Name == "FK_Orders_Shippers"); + Assert.Equal([("ShipVia", "ShipperID")], shippers.Columns); + + // A self-referencing relationship. + var selfRef = Assert.Single(db.Catalog.Relationships, r => r.Name == "FK_Employees_Employees"); + Assert.Equal("Employees", selfRef.Table); + Assert.Equal("Employees", selfRef.ReferencedTable); + Assert.Equal([("ReportsTo", "EmployeeID")], selfRef.Columns); + } + + [Fact] + public void Lists_a_tables_outgoing_foreign_keys() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var names = db.Catalog.ForeignKeysOf("Orders").Select(f => f.Name).OrderBy(n => n).ToList(); + + Assert.Equal(["FK_Orders_Customers", "FK_Orders_Employees", "FK_Orders_Shippers"], names); + } + + [Fact] + public void Reads_cascade_flags() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + // The MSysNavPane relationships cascade on update and delete (grbit 0x1100). + var cascading = db.Catalog.Relationships.First(r => r.CascadeDelete); + Assert.True(cascading.CascadeUpdate); + Assert.True(cascading.CascadeDelete); + } +} diff --git a/test/LibRed.Core.Tests/FunctionalTestsData/.gitignore b/test/LibRed.Core.Tests/FunctionalTestsData/.gitignore new file mode 100644 index 00000000..96721b7d --- /dev/null +++ b/test/LibRed.Core.Tests/FunctionalTestsData/.gitignore @@ -0,0 +1,2 @@ +# EF Core functional-test databases — large local-only corpus for the smoke test. +*.accdb diff --git a/test/LibRed.Core.Tests/FunctionalTestsSmokeTest.cs b/test/LibRed.Core.Tests/FunctionalTestsSmokeTest.cs new file mode 100644 index 00000000..baa94a6a --- /dev/null +++ b/test/LibRed.Core.Tests/FunctionalTestsSmokeTest.cs @@ -0,0 +1,88 @@ +using System.Runtime.CompilerServices; +using LibRed; +using LibRed.Catalog; +using Xunit; +using Xunit.Abstractions; + +namespace LibRed.Core.Tests; + +/// +/// Smoke test: open a database, enumerate every user table, and full-scan every row, +/// asserting nothing throws and every column has a recognised data type. Run against +/// EF Core's own functional-test databases — broad, adversarial schema coverage. +/// +public class FunctionalTestsSmokeTest(ITestOutputHelper output) +{ + private readonly ITestOutputHelper _output = output; + + [Fact] + public void Reads_the_builtin_datatypes_database() + { + var (tables, rows, failures) = Scan(TestDatabases.BuiltInDataTypesAccdb); + + _output.WriteLine($"tables={tables} rows={rows}"); + Assert.Empty(failures); + Assert.True(tables > 0); + } + + [Fact] + public void Reads_the_full_functional_test_corpus_when_present() + { + // A ~70 MB local-only corpus (gitignored); present on a dev box that has run the + // EFCore.Jet functional tests, absent on CI. + string dir = Path.Combine(SourceDirectory(), "FunctionalTestsData"); + var files = Directory.Exists(dir) ? Directory.GetFiles(dir, "*.accdb") : []; + if (files.Length == 0) + { + _output.WriteLine("corpus not present — skipping"); + return; + } + + long totalTables = 0, totalRows = 0; + var allFailures = new List(); + foreach (string file in files) + { + var (tables, rows, failures) = Scan(file); + totalTables += tables; + totalRows += rows; + allFailures.AddRange(failures); + } + + _output.WriteLine($"files={files.Length} tables={totalTables} rows={totalRows}"); + foreach (string failure in allFailures) + _output.WriteLine(failure); + Assert.Empty(allFailures); + } + + private static (int Tables, long Rows, List Failures) Scan(string path) + { + var failures = new List(); + int tables = 0; + long rows = 0; + string name = Path.GetFileNameWithoutExtension(path); + + using var db = JetDatabase.Open(path); + foreach (TableDef table in db.Catalog.UserTables) + { + tables++; + + foreach (ColumnDef column in table.Columns) + if (!Enum.IsDefined(column.Type)) + failures.Add($"{name}.{table.Name}.{column.Name}: unknown type 0x{(byte)column.Type:X2}"); + + try + { + foreach (var _ in db.OpenTable(table.Name).Rows()) + rows++; + } + catch (Exception ex) + { + failures.Add($"{name}.{table.Name}: {ex.GetType().Name} {ex.Message.Split('\n')[0]}"); + } + } + + return (tables, rows, failures); + } + + private static string SourceDirectory([CallerFilePath] string path = "") => Path.GetDirectoryName(path)!; +} diff --git a/test/LibRed.Core.Tests/GlobalReferenceFreeMapTests.cs b/test/LibRed.Core.Tests/GlobalReferenceFreeMapTests.cs new file mode 100644 index 00000000..5c8e4370 --- /dev/null +++ b/test/LibRed.Core.Tests/GlobalReferenceFreeMapTests.cs @@ -0,0 +1,74 @@ +using System.Buffers.Binary; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +// PageAllocator handles the reference-type (0x01) global free-pages map on page 1: it finds a free page by +// scanning the dedicated bitmap pages (type 0x05), clears its bit, and returns it — and Free() sets the bit +// back. A SET bit is a FREE page (the global map's sense, opposite of a per-table owned map). Verified here +// against a hand-crafted two-slot reference map: a real reference-type global map only appears in a large +// (>~130 MB) pre-existing ACE file, impractical to grow in a unit test, and the bit↔page math is the same +// one the per-table reference map is byte-verified against (WideTableUsageMapTests). +public class GlobalReferenceFreeMapTests +{ + [Fact] + public void Allocate_and_free_through_a_reference_type_global_map() + { + const int pageSize = 4096; + var format = JetFormatBase.FromVersionByte(0x02); // ACE 12 + + var file = new byte[6 * pageSize]; + + // Page 0 — use a valid unencrypted header. A bare identifier/version leaves the masked database-key + // field invalid and makes PageChannel correctly treat this synthetic file as encrypted. + DatabaseCreator.BuildDefinitionPage( + 0x02, isAccdb: true, codePage: 1252, collationLcid: 1033, + collationVersion: 0, creationDays: 45000).CopyTo(file, 0); + + // Page 1 — a data page whose row 0 is a reference-type global free map: slot 0 → bitmap page 2, + // slot 1 → bitmap page 3. (The 69-byte record is packed at the page end, as ACE packs rows.) + int p1 = pageSize; + file[p1] = 0x01; // page type: data page + BinaryPrimitives.WriteUInt16LittleEndian(file.AsSpan(p1 + format.DataRowCountOffset, 2), 1); + int mapOffset = pageSize - 69; + BinaryPrimitives.WriteUInt16LittleEndian(file.AsSpan(p1 + format.DataRowDirectoryOffset, 2), (ushort)mapOffset); + file[p1 + mapOffset] = 0x01; // reference map type + BinaryPrimitives.WriteInt32LittleEndian(file.AsSpan(p1 + mapOffset + 1 + 0 * 4, 4), 2); // slot 0 → page 2 + BinaryPrimitives.WriteInt32LittleEndian(file.AsSpan(p1 + mapOffset + 1 + 1 * 4, 4), 3); // slot 1 → page 3 + + // Page 2 — bitmap page for slot 0; physical free page 5. Page 3 is an empty slot-1 bitmap. + WriteBitmapPage(file, 2 * pageSize, inRangeBit: 5); + WriteBitmapPage(file, 3 * pageSize, inRangeBit: null); + + string path = Path.Combine(Path.GetTempPath(), $"libred-globalref-{Guid.NewGuid():N}.accdb"); + File.WriteAllBytes(path, file); + try + { + using var channel = PageChannel.Open(path, readOnly: false); + var alloc = new PageAllocator(channel); + + Assert.Equal(5, alloc.Allocate()); // slot 0's physical free page + Assert.Equal(6, alloc.Allocate()); // nothing free left → grows contiguously + + alloc.Free(5); + Assert.Equal(5, alloc.Allocate()); // page 5 is free again + } + finally + { + File.Delete(path); + } + } + + /// Writes a type-0x05 usage-bitmap page at with one free bit set (the + /// bitmap starts 4 bytes past the page header; a set bit marks a free page). + private static void WriteBitmapPage(byte[] file, int offset, int? inRangeBit) + { + file[offset] = 0x05; + file[offset + 1] = 0x01; + if (inRangeBit is int bit) + file[offset + 4 + bit / 8] |= (byte)(1 << (bit % 8)); + } +} diff --git a/test/LibRed.Core.Tests/GroupByViewAccessTests.cs b/test/LibRed.Core.Tests/GroupByViewAccessTests.cs new file mode 100644 index 00000000..ba6fe9aa --- /dev/null +++ b/test/LibRed.Core.Tests/GroupByViewAccessTests.cs @@ -0,0 +1,60 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A "totals" (GROUP BY) view — Northwind's "Order Subtotals". Access stores each GROUP BY column as an +/// Attribute=9 row; aggregate output columns are ordinary Attribute=6 rows. Access runs it. +/// +public class GroupByViewAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + [Fact] + public void Access_runs_a_group_by_totals_view() + { + string path = Path.Combine(Path.GetTempPath(), $"groupby-view-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateView("Subtotals", new ViewSpec( + Distinct: false, + Columns: + [ + new ViewColumnSpec("[Order Details].OrderID", null), + new ViewColumnSpec("Sum(CCur([Order Details].UnitPrice*Quantity*(1-Discount)/100)*100)", "Subtotal"), + ], + Tables: [new ViewTableSpec("Order Details", null)], + Joins: [], + Where: null, + GroupBy: ["[Order Details].OrderID"])); + + using var conn = OpenOleDb(path); + using var count = conn.CreateCommand(); + count.CommandText = "SELECT COUNT(*) FROM Subtotals"; + Assert.Equal(830, Convert.ToInt32(count.ExecuteScalar())); // one grouped row per order + + using var sub = conn.CreateCommand(); + sub.CommandText = "SELECT Subtotal FROM Subtotals WHERE OrderID = 10248"; + Assert.Equal(440m, Convert.ToDecimal(sub.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/GuidKeyEncodingTests.cs b/test/LibRed.Core.Tests/GuidKeyEncodingTests.cs new file mode 100644 index 00000000..bb9fcfdb --- /dev/null +++ b/test/LibRed.Core.Tests/GuidKeyEncodingTests.cs @@ -0,0 +1,168 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class GuidKeyEncodingTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider available."); + } + + private static readonly Guid[] Guids = + [ + new("00000000-0000-0000-0000-000000000000"), + new("00000000-0000-0000-0000-000000000001"), + new("01020304-0506-0708-090a-0b0c0d0e0f10"), + new("ffffffff-ffff-ffff-ffff-ffffffffffff"), + new("12345678-9abc-def0-1234-56789abcdef0"), + Guid.NewGuid(), + ]; + + [Fact] + public void Encoded_guid_keys_match_access_byte_for_byte() + { + // Build a real GUID-PK table via Access, then check our encoder reproduces each stored key. + string path = Path.Combine(Path.GetTempPath(), $"libred-guidkey-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE TABLE GKey (K GUID PRIMARY KEY, V int)"; c.ExecuteNonQuery(); } + for (int i = 0; i < Guids.Length; i++) + { + using var c = conn.CreateCommand(); + c.CommandText = "INSERT INTO GKey (K, V) VALUES (?, ?)"; + c.Parameters.AddWithValue("k", Guids[i]); + c.Parameters.AddWithValue("v", i); + c.ExecuteNonQuery(); + } + } + + using var db = JetDatabase.Open(path); + var table = db.OpenTable("GKey"); + var def = table.Definition; + IndexDef pk = def.Indexes.Single(i => i.IsPrimaryKey); + int kIdx = def.FindColumn("K")!.Index; + var decoder = new RowDecoder(def.Columns, db.Format); + + int checkd = 0; + foreach (var (accessKey, rowId) in new IndexCursor(table.Channel, pk.RootPage).RawEntries()) + { + var g = (Guid)decoder.Decode(db.ReadDataPage(rowId.Page).GetRow(rowId.Row))[kIdx]!; + + var values = new object?[def.Columns.Count]; + values[kIdx] = g; + byte[] ours = IndexKeyEncoder.Encode(pk.Columns, values); + + Assert.True(accessKey.AsSpan().SequenceEqual(ours), + $"'{g}': access={Convert.ToHexString(accessKey)} ours={Convert.ToHexString(ours)}"); + + // The decoder is the inverse. + Assert.Equal(g, (Guid)IndexKeyDecoder.Decode(pk.Columns, accessKey)[0]!); + checkd++; + } + Assert.Equal(Guids.Length, checkd); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Encoded_descending_guid_keys_match_access_byte_for_byte() + { + // A DESCENDING GUID index: ACE inverts every byte of the ascending key except the 0x09 field + // marker. Build it via Access, then confirm our encoder reproduces each stored key (and decodes). + string path = Path.Combine(Path.GetTempPath(), $"libred-guiddesc-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE TABLE GKey (K GUID, V int)"; c.ExecuteNonQuery(); } + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE INDEX ixd ON GKey (K DESC)"; c.ExecuteNonQuery(); } + for (int i = 0; i < Guids.Length; i++) + { + using var c = conn.CreateCommand(); + c.CommandText = "INSERT INTO GKey (K, V) VALUES (?, ?)"; + c.Parameters.AddWithValue("k", Guids[i]); + c.Parameters.AddWithValue("v", i); + c.ExecuteNonQuery(); + } + } + + using var db = JetDatabase.Open(path); + var table = db.OpenTable("GKey"); + var def = table.Definition; + IndexDef ixd = def.Indexes.First(i => !i.IsPrimaryKey); + Assert.False(ixd.Columns[0].Ascending); // it really is descending + int kIdx = def.FindColumn("K")!.Index; + var decoder = new RowDecoder(def.Columns, db.Format); + + int checkd = 0; + foreach (var (accessKey, rowId) in new IndexCursor(table.Channel, ixd.RootPage).RawEntries()) + { + var g = (Guid)decoder.Decode(db.ReadDataPage(rowId.Page).GetRow(rowId.Row))[kIdx]!; + + var values = new object?[def.Columns.Count]; + values[kIdx] = g; + byte[] ours = IndexKeyEncoder.Encode(ixd.Columns, values); + + Assert.True(accessKey.AsSpan().SequenceEqual(ours), + $"'{g}': access={Convert.ToHexString(accessKey)} ours={Convert.ToHexString(ours)}"); + Assert.Equal(g, (Guid)IndexKeyDecoder.Decode(ixd.Columns, accessKey)[0]!); + checkd++; + } + Assert.Equal(Guids.Length, checkd); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_reads_a_libred_created_guid_key_table() + { + // The mirror direction: LibRed writes the GUID-PK table + rows, and ACE opens it, seeks by the + // key, and returns every row in key order — proving the index keys we wrote are well-ordered. + string path = Path.Combine(Path.GetTempPath(), $"libred-guidwr-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + var target = Guids[4]; // 12345678-... + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("GKey", + [new("K", JetDataType.Guid, 16, IsFixedLength: true), new("V", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["K"]); + var table = db.OpenTable("GKey"); + for (int i = 0; i < Guids.Length; i++) + table.Insert([Guids[i], i]); + } + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM GKey"; + Assert.Equal(Guids.Length, Convert.ToInt32(c.ExecuteScalar())); + } + using (var c = conn.CreateCommand()) + { + c.CommandText = "SELECT V FROM GKey WHERE K = ?"; + c.Parameters.AddWithValue("k", target); + Assert.Equal(4, Convert.ToInt32(c.ExecuteScalar())); // seek by the GUID key finds the row + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/IndexColumnLimitTests.cs b/test/LibRed.Core.Tests/IndexColumnLimitTests.cs new file mode 100644 index 00000000..57521fa9 --- /dev/null +++ b/test/LibRed.Core.Tests/IndexColumnLimitTests.cs @@ -0,0 +1,53 @@ +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +public class IndexColumnLimitTests +{ + // A Jet/ACE index-data block has exactly 10 column slots (§3.5), so an index — and any key built + // on one — cannot exceed 10 columns. Creating one must fail loudly, not silently truncate. + [Fact] + public void Primary_key_over_more_than_ten_columns_throws() + { + string path = Path.Combine(Path.GetTempPath(), $"idxlimit-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + var columns = Enumerable.Range(0, 11) + .Select(i => new ColumnSpec($"C{i}", JetDataType.Int32, 4, IsFixedLength: true)) + .ToList(); + var keyColumns = columns.Select(c => c.Name).ToList(); + + using var db = JetDatabase.Open(path, readOnly: false); + var ex = Assert.Throws(() => db.CreateTable("Wide", columns, primaryKey: keyColumns)); + Assert.Contains("10", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Jet/ACE caps a table at 32 indexes (keys + relationships included). A primary key plus 32 unique + // constraints is 33 indexes and must be rejected. + [Fact] + public void More_than_thirty_two_indexes_throws() + { + string path = Path.Combine(Path.GetTempPath(), $"idxcount-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + var columns = Enumerable.Range(0, 33) + .Select(i => new ColumnSpec($"C{i}", JetDataType.Int32, 4, IsFixedLength: true)) + .ToList(); + var uniques = Enumerable.Range(1, 32) // C1..C32; C0 is the primary key + .Select(i => new UniqueIndexSpec($"UQ_{i}", [$"C{i}"])) + .ToList(); + + using var db = JetDatabase.Open(path, readOnly: false); + var ex = Assert.Throws(() => + db.CreateTable("Many", columns, primaryKey: ["C0"], relationships: null, uniqueConstraints: uniques)); + Assert.Contains("32", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/IndexKeyEncoderTests.cs b/test/LibRed.Core.Tests/IndexKeyEncoderTests.cs new file mode 100644 index 00000000..8d1c1c72 --- /dev/null +++ b/test/LibRed.Core.Tests/IndexKeyEncoderTests.cs @@ -0,0 +1,94 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class IndexKeyEncoderTests +{ + [Theory] + [InlineData("Shippers")] + [InlineData("Categories")] + [InlineData("Orders")] + [InlineData("Products")] + public void Encodes_integer_keys_byte_for_byte_like_access(string tableName) + { + // The strongest check: re-encoding the value decoded from Access's own stored key bytes + // must reproduce those exact bytes. Uses each table's integer primary key. + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + var table = db.OpenTable(tableName); + IndexDef pk = table.Definition.Indexes.Single(i => i.IsPrimaryKey); + + var cursor = new IndexCursor(table.Channel, pk.RootPage); + int checkd = 0; + foreach ((byte[] stored, _) in cursor.RawEntries()) + { + object?[] values = AlignToColumns(table.Definition, pk, IndexKeyDecoder.Decode(pk.Columns, stored)); + byte[] reEncoded = IndexKeyEncoder.Encode(pk.Columns, values); + Assert.Equal(stored, reEncoded); + checkd++; + } + Assert.True(checkd > 0); + } + + [Theory] + [InlineData(true)] + [InlineData(false)] + public void Round_trips_integers_including_negatives_and_zero(bool ascending) + { + var column = new ColumnDef { Name = "n", Type = JetDataType.Int32, Index = 0 }; + var columns = new[] { (column, ascending) }; + + foreach (int n in new[] { int.MinValue, -1000, -1, 0, 1, 42, 1000, int.MaxValue }) + { + byte[] key = IndexKeyEncoder.Encode(columns, [n]); + object?[] back = IndexKeyDecoder.Decode(columns, key); + Assert.Equal(n, back[0]); + } + } + + [Fact] + public void Encoded_integer_keys_sort_in_value_order() + { + var column = new ColumnDef { Name = "n", Type = JetDataType.Int32, Index = 0 }; + var columns = new[] { (column, true) }; + + int[] sorted = [-5, -1, 0, 1, 5, 100]; + var keys = sorted.Select(n => IndexKeyEncoder.Encode(columns, [n])).ToList(); + + // Lexicographic byte order must match ascending value order. + for (int i = 1; i < keys.Count; i++) + Assert.True(Compare(keys[i - 1], keys[i]) < 0, $"{sorted[i - 1]} should encode below {sorted[i]}"); + } + + [Fact] + public void Round_trips_double_keys() + { + var column = new ColumnDef { Name = "d", Type = JetDataType.Double, Index = 0 }; + var columns = new[] { (column, true) }; + + foreach (double d in new[] { -1e9, -3.5, -0.0, 0.0, 2.5, 1e9 }) + { + byte[] key = IndexKeyEncoder.Encode(columns, [d]); + Assert.Equal(d, (double)IndexKeyDecoder.Decode(columns, key)[0]!); + } + } + + private static object?[] AlignToColumns(TableDef table, IndexDef index, object?[] keyValues) + { + // IndexKeyDecoder returns values in index-column order; the encoder reads values[column.Index]. + var values = new object?[table.Columns.Count]; + for (int i = 0; i < index.Columns.Count; i++) + values[index.Columns[i].Column.Index] = keyValues[i]; + return values; + } + + private static int Compare(byte[] a, byte[] b) + { + int n = Math.Min(a.Length, b.Length); + for (int i = 0; i < n; i++) + if (a[i] != b[i]) return a[i] - b[i]; + return a.Length - b.Length; + } +} diff --git a/test/LibRed.Core.Tests/IndexSplitAccessTests.cs b/test/LibRed.Core.Tests/IndexSplitAccessTests.cs new file mode 100644 index 00000000..fc0cbc1a --- /dev/null +++ b/test/LibRed.Core.Tests/IndexSplitAccessTests.cs @@ -0,0 +1,79 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Byte-faithful check that a LibRed index which has undergone B-tree leaf/node splitting is readable +/// by the real Access engine: after inserting enough rows to force splits (root grows from a leaf to a +/// node), Access opens the file and resolves indexed point seeks, an indexed range, a full table scan, +/// and a leaf-chain COUNT(*)/SUM — all reaching every row. +/// +public class IndexSplitAccessTests +{ + private const int N = 1200; // well past one leaf, so the PK B-tree splits and the root grows a level + + private static OleDbConnection OpenOleDb(string path) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try + { + var conn = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); + conn.Open(); + return conn; + } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider (12.0/16.0) is available."); + } + + [Fact] + public void Access_reads_a_split_index_by_seek_and_range() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-splitaccess-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Big", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("T", JetDataType.Text, 20, IsFixedLength: false)], + primaryKey: ["Id"]); + var t = db.OpenTable("Big"); + for (int i = 1; i <= N; i++) t.Insert([i, $"r{i}"]); + } + + using var conn = OpenOleDb(path); + + // Indexed point seeks at spread-out keys exercise different leaves/subtrees of the split B-tree. + foreach (int id in new[] { 1, 400, 512, 1000, N }) + { + using var seek = conn.CreateCommand(); + seek.CommandText = $"SELECT T FROM Big WHERE Id = {id}"; + Assert.Equal($"r{id}", seek.ExecuteScalar()); + } + + // A full table scan and index leaf-chain walk must both reach every row: COUNT(*) (leaf-chain), + // a non-indexed scan, an indexed range, and SUM all account for all N rows. This catches a wrong + // leaf next/prev pointer, where Access stops after the first leaf and silently loses the rest. + long triangular = (long)N * (N + 1) / 2; + foreach ((string sql, object expected) in new (string, object)[] + { + ("SELECT COUNT(*) FROM Big", N), + ("SELECT COUNT(*) FROM Big WHERE T LIKE 'r%'", N), + ("SELECT COUNT(*) FROM Big WHERE Id BETWEEN 300 AND 309", 10), + ("SELECT SUM(Id) FROM Big", triangular), + }) + { + using var cmd = conn.CreateCommand(); + cmd.CommandText = sql; + Assert.Equal(Convert.ToInt64(expected), Convert.ToInt64(cmd.ExecuteScalar())); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/IndexStatisticsTests.cs b/test/LibRed.Core.Tests/IndexStatisticsTests.cs new file mode 100644 index 00000000..4114aa7c --- /dev/null +++ b/test/LibRed.Core.Tests/IndexStatisticsTests.cs @@ -0,0 +1,50 @@ +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +public class IndexStatisticsTests +{ + // Note: UniqueEntryCount is cumulative and never decremented by Access, so these + // assertions rely on Northwind having no deleted rows (uniqueEntryCount == current + // distinct count). They would not hold on a database that has had deletions. + + [Fact] + public void Unique_indexes_have_entry_count_equal_to_row_count() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + foreach (var table in db.Catalog.UserTables) + { + int rows = db.ReadTableDefinition(table.DefinitionPage).RowCount; + foreach (var ix in table.Indexes) + { + Assert.InRange(ix.UniqueEntryCount, 0, rows); + if (ix.IsUnique) + Assert.Equal(rows, ix.UniqueEntryCount); // a unique index cannot have duplicates + } + } + } + + [Theory] + [InlineData("EmployeeID", 9)] // 9 employees + [InlineData("ShippersOrders", 3)] // 3 shippers (ShipVia) + [InlineData("PK_Orders", 830)] // unique = row count + public void Unique_entry_count_matches_actual_distinct_values(string indexName, int expected) + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var table = db.OpenTable("Orders"); + var index = table.Definition.Indexes.First(i => i.Name == indexName); + int columnIndex = index.Columns[0].Column.Index; + + int actualDistinct = table.Rows() + .Select(r => r[columnIndex]) + .Where(v => v is not null) // index entries exclude nulls + .Distinct() + .Count(); + + Assert.Equal(expected, index.UniqueEntryCount); + Assert.Equal(expected, actualDistinct); + } +} diff --git a/test/LibRed.Core.Tests/IndexTests.cs b/test/LibRed.Core.Tests/IndexTests.cs new file mode 100644 index 00000000..dd20d9c6 --- /dev/null +++ b/test/LibRed.Core.Tests/IndexTests.cs @@ -0,0 +1,166 @@ +using LibRed; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class IndexTests +{ + [Fact] + public void Parses_index_definitions() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var categories = db.Catalog.FindTable("Categories")!; + Assert.Equal(2, categories.Indexes.Count); + + var pk = Assert.Single(categories.Indexes, i => i.IsPrimaryKey); + Assert.Equal("PK_Categories", pk.Name); + Assert.True(pk.IsUnique); + Assert.Equal(["CategoryID"], pk.Columns.Select(c => c.Column.Name)); + Assert.True(pk.RootPage > 0); + + var byName = Assert.Single(categories.Indexes, i => !i.IsPrimaryKey); + Assert.Equal("CategoryName", byName.Name); + Assert.False(byName.IsUnique); + Assert.Equal(["CategoryName"], byName.Columns.Select(c => c.Column.Name)); + } + + [Fact] + public void Resolves_index_names_including_relationships() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + string[] Names(string table) => + db.Catalog.FindTable(table)!.Indexes.Select(i => i.Name).OrderBy(n => n).ToArray(); + + // Composite primary key. + var orderDetails = db.Catalog.FindTable("Order Details")!; + var pk = Assert.Single(orderDetails.Indexes, i => i.IsPrimaryKey); + Assert.Equal("PK_Order_Details", pk.Name); + Assert.Equal(["OrderID", "ProductID"], pk.Columns.Select(c => c.Column.Name)); + + // Real-index names win over the relationship sharing the same data block, and + // relationship/FK indexes keep their own names. + Assert.Contains("PK_Orders", Names("Orders")); + Assert.Contains("ShippersOrders", Names("Orders")); // relationship to Shippers + Assert.Contains("FK_Employees_Employees", Names("Employees")); // self-referencing FK + Assert.All(db.Catalog.FindTable("Customers")!.Indexes, i => Assert.NotEqual("", i.Name)); + } + + [Fact] + public void Traverses_leaf_index_in_key_order() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var table = db.OpenTable("Categories"); + var pk = table.Definition.Indexes.First(i => i.IsPrimaryKey); + int idIdx = table.Definition.Columns.First(c => c.Name == "CategoryID").Index; + var decoder = NewDecoder(db, table); + + var ids = new IndexCursor(table.Channel, pk.RootPage) + .RowIds() + .Select(r => (int)decoder.Decode(db.ReadDataPage(r.Page).GetRow(r.Row))[idIdx]!) + .ToList(); + + Assert.Equal(Enumerable.Range(1, 8), ids); + } + + [Fact] + public void Traverses_multilevel_index_in_key_order() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + // Orders' primary key is large enough that its B-tree root is a node page, + // exercising recursion into child entries and the child-tail page. + var table = db.OpenTable("Orders"); + var pk = table.Definition.Indexes.First(i => i.IsPrimaryKey && i.Columns.Count == 1 + && i.Columns[0].Column.Name == "OrderID"); + int idIdx = table.Definition.Columns.First(c => c.Name == "OrderID").Index; + var decoder = NewDecoder(db, table); + + var ids = new IndexCursor(table.Channel, pk.RootPage) + .RowIds() + .Select(r => (int)decoder.Decode(db.ReadDataPage(r.Page).GetRow(r.Row))[idIdx]!) + .ToList(); + + Assert.Equal(830, ids.Count); + Assert.Equal(ids.OrderBy(x => x), ids); // strictly ascending OrderID + } + + [Theory] + [InlineData("Categories")] + [InlineData("Order Details")] // node-rooted indexes + [InlineData("Orders")] + public void Every_index_has_one_entry_per_row(string tableName) + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var table = db.OpenTable(tableName); + int rowCount = table.Rows().Count(); + + Assert.NotEmpty(table.Definition.Indexes); + Assert.All(table.Definition.Indexes, ix => + Assert.Equal(rowCount, new IndexCursor(table.Channel, ix.RootPage).RowIds().Count())); + } + + [Fact] + public void Decodes_numeric_index_keys() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var table = db.OpenTable("Categories"); + var pk = table.Definition.Indexes.First(i => i.IsPrimaryKey); + + var keys = new IndexCursor(table.Channel, pk.RootPage) + .Entries(pk.Columns) + .Select(e => (int)e.Key[0]!) + .ToList(); + + Assert.Equal(Enumerable.Range(1, 8), keys); + } + + [Fact] + public void Decodes_composite_index_keys() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var table = db.OpenTable("Order Details"); + var pk = table.Definition.Indexes.First(i => i.IsPrimaryKey); // [OrderID, ProductID] + + var first = new IndexCursor(table.Channel, pk.RootPage).Entries(pk.Columns).First(); + + Assert.Equal(2, first.Key.Length); + Assert.Equal(10248, first.Key[0]); + Assert.Equal(11, first.Key[1]); + } + + [Theory] + [InlineData("Categories")] + [InlineData("Orders")] // includes a DateTime index and node-rooted (prefix-compressed) pages + [InlineData("Order Details")] + public void Decoded_keys_match_the_row_they_point_at(string tableName) + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var table = db.OpenTable(tableName); + var decoder = NewDecoder(db, table); + + foreach (var index in table.Definition.Indexes) + { + foreach (var entry in new IndexCursor(table.Channel, index.RootPage).Entries(index.Columns)) + { + var row = decoder.Decode(db.ReadDataPage(entry.Row.Page).GetRow(entry.Row.Row)); + for (int c = 0; c < index.Columns.Count; c++) + { + object? keyValue = entry.Key[c]; + if (keyValue is null) break; // lossy (text) key column — not decoded + Assert.Equal(row[index.Columns[c].Column.Index], keyValue); + } + } + } + } + + private static RowDecoder NewDecoder(JetDatabase db, Table table) => + new(table.Definition.Columns, db.Format, new LongValueReader(table.Channel)); +} diff --git a/test/LibRed.Core.Tests/IndexTraversalCorruptionTests.cs b/test/LibRed.Core.Tests/IndexTraversalCorruptionTests.cs new file mode 100644 index 00000000..7843c398 --- /dev/null +++ b/test/LibRed.Core.Tests/IndexTraversalCorruptionTests.cs @@ -0,0 +1,157 @@ +using System.Buffers.Binary; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class IndexTraversalCorruptionTests +{ + private const int PageSize = 4096; + private const int OwnerOffset = 0x04; + private const int NextPageOffset = 0x10; + private const int ChildTailOffset = 0x14; + private const int EntryMaskOffset = 0x1B; + private const int EntryDataOffset = 0x1E0; + + [Theory] + [InlineData("wrong-owner")] + [InlineData("child-outside-file")] + [InlineData("leaf-next-outside-file")] + [InlineData("entry-shorter-than-trailer")] + [InlineData("wrong-page-type")] + [InlineData("descent-cycle")] + [InlineData("leaf-cycle")] + [InlineData("child-wrong-owner")] + [InlineData("leaf-next-nonleaf")] + [InlineData("compressed-prefix-too-long")] + public void Malformed_index_traversal_is_rejected_as_corruption(string corruption) + { + string path = Path.Combine(Path.GetTempPath(), $"index-corrupt-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + (int root, int owner) = IndexIdentity(path); + byte[] file = File.ReadAllBytes(path); + int pageCount = file.Length / PageSize; + Span rootPage = Page(file, root); + switch (corruption) + { + case "wrong-owner": + BinaryPrimitives.WriteInt32LittleEndian(rootPage[OwnerOffset..], owner + 1); + break; + case "child-outside-file": + BinaryPrimitives.WriteInt32LittleEndian(rootPage[ChildTailOffset..], pageCount + 1); + break; + case "leaf-next-outside-file": + int leaf = LeftmostLeaf(file, root); + BinaryPrimitives.WriteInt32LittleEndian(Page(file, leaf)[NextPageOffset..], pageCount + 1); + break; + case "entry-shorter-than-trailer": + rootPage[EntryMaskOffset..EntryDataOffset].Clear(); + rootPage[EntryMaskOffset] = 0x02; // first entry ends after one byte, before its 4-byte trailer + break; + case "wrong-page-type": + rootPage[0] = 0x01; + break; + case "descent-cycle": + BinaryPrimitives.WriteInt32LittleEndian(rootPage[ChildTailOffset..], root); + break; + case "leaf-cycle": + int cycleLeaf = LeftmostLeaf(file, root); + BinaryPrimitives.WriteInt32LittleEndian(Page(file, cycleLeaf)[NextPageOffset..], cycleLeaf); + break; + case "child-wrong-owner": + int foreignLeaf = LeftmostLeaf(file, root); + BinaryPrimitives.WriteInt32LittleEndian(Page(file, foreignLeaf)[OwnerOffset..], owner + 1); + break; + case "leaf-next-nonleaf": + int linkedLeaf = LeftmostLeaf(file, root); + BinaryPrimitives.WriteInt32LittleEndian(Page(file, linkedLeaf)[NextPageOffset..], root); + break; + case "compressed-prefix-too-long": + BinaryPrimitives.WriteUInt16LittleEndian(rootPage[0x18..], ushort.MaxValue); + break; + } + File.WriteAllBytes(path, file); + + using var db = JetDatabase.Open(path); + Table table = db.OpenTable("Orders"); + IndexDef index = table.Definition.Indexes.Single(i => i.IsPrimaryKey); + Assert.Throws(() => + corruption is "leaf-next-outside-file" or "leaf-cycle" or "child-wrong-owner" or "leaf-next-nonleaf" + ? table.SeekRangeRows(index, null, null).ToList() + : table.SeekRows(index, [int.MaxValue]).ToList()); + } + finally { File.Delete(path); } + } + + [Fact] + public void Full_index_cursor_rejects_a_child_owned_by_another_table() + { + string path = Path.Combine(Path.GetTempPath(), $"index-cursor-corrupt-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + (int root, int owner) = IndexIdentity(path); + byte[] file = File.ReadAllBytes(path); + int leaf = LeftmostLeaf(file, root); + BinaryPrimitives.WriteInt32LittleEndian(Page(file, leaf)[OwnerOffset..], owner + 1); + File.WriteAllBytes(path, file); + + using var db = JetDatabase.Open(path); + Table table = db.OpenTable("Orders"); + Assert.Throws(() => new IndexCursor(table.Channel, root).RowIds().ToList()); + } + finally { File.Delete(path); } + } + + [Fact] + public void Full_index_cursor_rejects_a_cycle_without_recursive_descent() + { + string path = Path.Combine(Path.GetTempPath(), $"index-cursor-cycle-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + (int root, _) = IndexIdentity(path); + byte[] file = File.ReadAllBytes(path); + BinaryPrimitives.WriteInt32LittleEndian(Page(file, root)[ChildTailOffset..], root); + File.WriteAllBytes(path, file); + + using var db = JetDatabase.Open(path); + Table table = db.OpenTable("Orders"); + Assert.Throws(() => new IndexCursor(table.Channel, root).RowIds().ToList()); + } + finally { File.Delete(path); } + } + + private static (int Root, int Owner) IndexIdentity(string path) + { + using var db = JetDatabase.Open(path); + Table table = db.OpenTable("Orders"); + return (table.Definition.Indexes.Single(i => i.IsPrimaryKey).RootPage, table.Definition.DefinitionPage); + } + + private static int LeftmostLeaf(byte[] file, int pageNumber) + { + while (Page(file, pageNumber)[0] == 0x03) + { + ReadOnlySpan page = Page(file, pageNumber); + int end = FirstEntryEnd(page); + pageNumber = BinaryPrimitives.ReadInt32BigEndian(page.Slice(EntryDataOffset + end - 4, 4)); + } + return pageNumber; + } + + private static int FirstEntryEnd(ReadOnlySpan page) + { + for (int i = EntryMaskOffset; i < EntryDataOffset; i++) + for (int bit = 0; bit < 8; bit++) + if ((page[i] & (1 << bit)) != 0) + return (i - EntryMaskOffset) * 8 + bit; + throw new InvalidDataException("Expected a nonempty index node."); + } + + private static Span Page(byte[] file, int pageNumber) => file.AsSpan(pageNumber * PageSize, PageSize); +} diff --git a/test/LibRed.Core.Tests/IndexUsageMapTests.cs b/test/LibRed.Core.Tests/IndexUsageMapTests.cs new file mode 100644 index 00000000..f2ab0f21 --- /dev/null +++ b/test/LibRed.Core.Tests/IndexUsageMapTests.cs @@ -0,0 +1,144 @@ +using System.Buffers.Binary; +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.Pages; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Each index carries its own usage map (index-data block +0x22) recording the pages of its B-tree. +/// Access marks the root at CREATE and adds every page a split allocates, so the map covers the whole tree. +/// Verified against ACE: the union of a table's index maps equals exactly the set of index pages ACE itself +/// marks, and LibRed reproduces that. +/// +public class IndexUsageMapTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try + { + var connection = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); + connection.Open(); + return connection; + } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider available."); + } + + /// Every index page (types 0x03/0x04) in the file owned by the table's TDEF, by owner stamp. + private static SortedSet IndexPagesOwnedByTable(string path, Table table, JetFormatBase format) + { + long pageCount = new FileInfo(path).Length / format.PageSize; + var pages = new SortedSet(); + for (int p = 1; p < pageCount; p++) + { + ReadOnlySpan span = table.Channel.ReadPage(p).Span; + if (span[0] is not (0x03 or 0x04)) continue; + if (BinaryPrimitives.ReadInt32LittleEndian(span.Slice(0x04, 4)) == table.Definition.DefinitionPage) + pages.Add(p); + } + return pages; + } + + /// The union of every index's own usage map, walking the TDEF to each 52-byte index block. + private static SortedSet UnionOfIndexMaps(Table table, JetFormatBase format) + { + var tdef = table.Channel.ReadPage(table.Definition.DefinitionPage); + int dataCount = tdef.ReadInt32(format.TdefIndexCountOffset); + int colCount = tdef.ReadUInt16(format.TdefColumnCountOffset); + + int pos = format.TdefRealIndexBlockOffset + dataCount * format.RealIndexEntrySize + + colCount * format.ColumnDescriptorSize; + for (int i = 0; i < colCount; i++) pos += 2 + tdef.ReadUInt16(pos); + + var union = new SortedSet(); + for (int i = 0; i < dataCount; i++) + { + int block = pos + i * 52; + int mapRow = tdef.ReadByte(block + 0x22); + int mapPage = tdef.ReadInt24(block + 0x23); + var holder = new DataPage(); + holder.Read(table.Channel.ReadPage(mapPage), format); + union.UnionWith(BitsOf(holder.GetRow(mapRow))); + } + return union; + } + + private static IEnumerable BitsOf(ReadOnlySpan record) + { + // Only inline maps arise here (an index B-tree well under 2 GB); a reference map would need expanding. + if (record[0] != 0x00) throw new InvalidOperationException($"Unexpected usage-map type 0x{record[0]:X2}."); + int start = BinaryPrimitives.ReadInt32LittleEndian(record.Slice(1, 4)); + var pages = new List(); + for (int k = 5; k < record.Length; k++) + for (int b = 0; b < 8; b++) + if ((record[k] & (1 << b)) != 0) + pages.Add(start + (k - 5) * 8 + b); + return pages; + } + + [Fact] + public void An_index_usage_map_covers_every_btree_page_after_splits() + { + string path = Path.Combine(Path.GetTempPath(), $"idxmap-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable("T", + [new("Id", JetDataType.Int32, 4, IsFixedLength: true), new("V", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"]); + db.CreateIndex("T", "IX_V", [("V", false)]); + var table = db.OpenTable("T"); + + var row = new object?[2]; + for (int i = 0; i < 4000; i++) // enough to split both B-trees several levels + { + row[0] = i; + row[1] = i * 7 % 4000; // scatter V so its index isn't a degenerate append + table.Insert(row); + } + + SortedSet actual = IndexPagesOwnedByTable(path, table, db.Format); + SortedSet mapped = UnionOfIndexMaps(table, db.Format); + + Assert.True(actual.Count > 2, "expected the B-trees to have split beyond their creation roots"); + Assert.Equal(actual, mapped); // no page missing, none spurious + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Index_map_coverage_matches_what_access_itself_marks() + { + string path = Path.Combine(Path.GetTempPath(), $"idxmap-ace-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var connection = OpenOleDb(path)) + { + using (var c = connection.CreateCommand()) { c.CommandText = "CREATE TABLE T (Id LONG CONSTRAINT PK PRIMARY KEY, V LONG)"; c.ExecuteNonQuery(); } + using (var c = connection.CreateCommand()) { c.CommandText = "CREATE INDEX IX_V ON T (V)"; c.ExecuteNonQuery(); } + using var ins = connection.CreateCommand(); + ins.CommandText = "INSERT INTO T (Id, V) VALUES (?, ?)"; + var id = ins.CreateParameter(); ins.Parameters.Add(id); + var v = ins.CreateParameter(); ins.Parameters.Add(v); + for (int i = 0; i < 4000; i++) { id.Value = i; v.Value = i * 7 % 4000; ins.ExecuteNonQuery(); } + } + + using var db = JetDatabase.Open(path); + var table = db.OpenTable("T"); + + // Access's own map must cover exactly the index pages it wrote — the invariant LibRed reproduces. + Assert.Equal(IndexPagesOwnedByTable(path, table, db.Format), UnionOfIndexMaps(table, db.Format)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/JetDatabaseLifetimeTests.cs b/test/LibRed.Core.Tests/JetDatabaseLifetimeTests.cs new file mode 100644 index 00000000..aab44433 --- /dev/null +++ b/test/LibRed.Core.Tests/JetDatabaseLifetimeTests.cs @@ -0,0 +1,50 @@ +using Xunit; +using LibRed.Formats; + +namespace LibRed.Core.Tests; + +public class JetDatabaseLifetimeTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + [Fact] + public void Failed_catalog_initialization_releases_the_file() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-invalid-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + + try + { + // Preserve a valid format header so PageChannel.Open succeeds, but make the decoded + // creation date invalid so JetDatabase's page-0 initialization subsequently fails. + byte[] page0 = new byte[4096]; + using (var stream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + { + stream.ReadExactly(page0); + byte[] invalidDate = BitConverter.GetBytes(double.MaxValue); + for (int i = 0; i < invalidDate.Length; i++) + { + int offset = JetFormatBase.CreationDateOffset + i; + page0[offset] = (byte)(invalidDate[i] + ^ JetFormatBase.PageZeroHeaderMask[offset - JetFormatBase.PageZeroHeaderMaskStart]); + } + + stream.Position = 0; + stream.Write(page0); + } + + JetDatabase? database = null; + Exception? error = Record.Exception(() => database = JetDatabase.Open(path)); + database?.Dispose(); + Assert.NotNull(error); + + // On Windows this fails if the unsuccessful Open leaked its FileStream. + File.Delete(path); + Assert.False(File.Exists(path)); + } + finally + { + if (File.Exists(path)) File.Delete(path); + } + } +} diff --git a/test/LibRed.Core.Tests/JetLegacyEncryptionTests.cs b/test/LibRed.Core.Tests/JetLegacyEncryptionTests.cs new file mode 100644 index 00000000..ad9232cb --- /dev/null +++ b/test/LibRed.Core.Tests/JetLegacyEncryptionTests.cs @@ -0,0 +1,106 @@ +using LibRed.Crypto; +using Xunit; + +namespace LibRed.Core.Tests; + +public class JetLegacyEncryptionTests +{ + // The published RC4 test vector (key "Key", plaintext "Plaintext") — validates the reference RC4 below, + // which we then use as an independent oracle for the codec. + [Fact] + public void Reference_rc4_matches_published_vector() + { + byte[] data = System.Text.Encoding.ASCII.GetBytes("Plaintext"); + Rc4Reference(System.Text.Encoding.ASCII.GetBytes("Key"), data); + Assert.Equal("BBF316E8D940AF0AD3", Convert.ToHexString(data)); + } + + [Fact] + public void Page0_is_never_decrypted() + { + var codec = new JetLegacyEncryption(unchecked((int)0xABBB315C)); + var page = RandomPage(0xDEADBEEF); + var copy = (byte[])page.Clone(); + codec.DecryptPage(0, page); + Assert.Equal(copy, page); + } + + [Theory] + [InlineData(unchecked((int)0xABBB315C), 1)] + [InlineData(unchecked((int)0xABBB315C), 2)] + [InlineData(0x0000_0001, 63)] + [InlineData(0x1234_5678, 100)] + public void DecryptPage_is_rc4_keyed_by_page_xor_dbkey(int dbKey, int pageNumber) + { + var page = RandomPage((uint)(dbKey ^ pageNumber)); + var expected = (byte[])page.Clone(); + // Independent oracle: RC4 with key = little-endian(pageNumber XOR dbKey). + Rc4Reference(BitConverter.GetBytes(pageNumber ^ dbKey), expected); + + new JetLegacyEncryption(dbKey).DecryptPage(pageNumber, page); + Assert.Equal(expected, page); + } + + [Fact] + public void DecryptPage_is_symmetric() + { + var codec = new JetLegacyEncryption(0x1234_5678); + var page = RandomPage(42); + var original = (byte[])page.Clone(); + codec.DecryptPage(7, page); + Assert.NotEqual(original, page); // it did something + codec.DecryptPage(7, page); // applying the XOR keystream twice restores the input + Assert.Equal(original, page); + } + + [Fact] + public void TryCreate_returns_null_for_unencrypted() => Assert.Null(JetLegacyEncryption.TryCreate(0)); + + [Fact] + public void Encrypt_then_decrypt_round_trips() + { + var codec = new JetLegacyEncryption(0x0BADF00D); + var page = RandomPage(99); + var original = (byte[])page.Clone(); + codec.EncryptPage(5, page); + Assert.NotEqual(original, page); + codec.DecryptPage(5, page); + Assert.Equal(original, page); + } + + [Fact] + public void Encrypt_equals_decrypt_for_rc4() + { + var codec = new JetLegacyEncryption(0x0BADF00D); + var a = RandomPage(7); + var b = (byte[])a.Clone(); + codec.EncryptPage(3, a); + codec.DecryptPage(3, b); // RC4 is symmetric — same keystream both directions + Assert.Equal(a, b); + } + + private static byte[] RandomPage(uint seed) + { + var page = new byte[4096]; + for (int i = 0; i < page.Length; i++) { seed = seed * 1664525 + 1013904223; page[i] = (byte)(seed >> 24); } + return page; + } + + private static void Rc4Reference(byte[] key, byte[] data) + { + var s = new byte[256]; + for (int i = 0; i < 256; i++) s[i] = (byte)i; + for (int i = 0, j = 0; i < 256; i++) + { + j = (j + s[i] + key[i % key.Length]) & 0xFF; + (s[i], s[j]) = (s[j], s[i]); + } + for (int n = 0, a = 0, b = 0; n < data.Length; n++) + { + a = (a + 1) & 0xFF; + b = (b + s[a]) & 0xFF; + (s[a], s[b]) = (s[b], s[a]); + data[n] ^= s[(s[a] + s[b]) & 0xFF]; + } + } +} diff --git a/test/LibRed.Core.Tests/JetNameValidationTests.cs b/test/LibRed.Core.Tests/JetNameValidationTests.cs new file mode 100644 index 00000000..566a8169 --- /dev/null +++ b/test/LibRed.Core.Tests/JetNameValidationTests.cs @@ -0,0 +1,88 @@ +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// LibRed enforces Jet/ACE object-name rules (verified vs ACE 2026-07-12): max 64 chars — a longer name makes ACE +/// reject the whole file — and no . ! ` [ ], which make a name unreferenceable in ACE SQL. +/// +public class JetNameValidationTests +{ + [Theory] + [InlineData("")] // empty + [InlineData("Co.l")] // period + [InlineData("Co!l")] // exclamation + [InlineData("Co`l")] // grave accent + [InlineData("Co[l")] // left bracket + [InlineData("Co]l")] // right bracket + public void Rejects_forbidden_characters(string name) => + Assert.Throws(() => JetName.Validate(name, "column name")); + + [Fact] + public void Rejects_over_64_chars() => + Assert.Throws(() => JetName.Validate(new string('c', 65))); + + [Theory] + [InlineData("Col")] + [InlineData("Co l")] // interior space — ACE allows it + [InlineData("Co#l")] // # / % / & / quotes all round-trip on ACE + [InlineData("Cölé")] // unicode + public void Accepts_valid_names(string name) + { + JetName.Validate(name); // no throw + JetName.Validate(new string('c', 64)); // exactly the max is allowed + } + + [Fact] + public void CreateTable_rejects_a_too_long_column_name() + { + string path = Path.Combine(Path.GetTempPath(), $"nv-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var ex = Assert.Throws(() => db.CreateTable("T", + [new ColumnSpec(new string('c', 100), JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: null)); + Assert.Contains("64", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void CreateTable_rejects_a_forbidden_table_name() + { + string path = Path.Combine(Path.GetTempPath(), $"nv-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + Assert.Throws(() => db.CreateTable("My.Table", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true)], primaryKey: ["K"])); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Constraint names (PK/unique/check) go to disk too and carry the same limits — a 100-char one corrupts + // (FK name overruns, index enumeration breaks). Verified vs ACE. + [Fact] + public void CreateTable_rejects_over_long_constraint_names() + { + string path = Path.Combine(Path.GetTempPath(), $"nv-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var K = new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true); + string L100 = new('x', 100); + Assert.Throws(() => db.CreateTable("T1", [K], primaryKey: ["K"], primaryKeyName: L100)); + Assert.Throws(() => db.CreateTable("T2", [K], primaryKey: ["K"], + checkConstraints: [(L100, "K > 0")])); + Assert.Throws(() => db.CreateTable("T3", [K, new("U", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["K"], uniqueConstraints: [new UniqueIndexSpec(L100, ["U"])])); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/LegacyJetPasswordTests.cs b/test/LibRed.Core.Tests/LegacyJetPasswordTests.cs new file mode 100644 index 00000000..82a65a46 --- /dev/null +++ b/test/LibRed.Core.Tests/LegacyJetPasswordTests.cs @@ -0,0 +1,157 @@ +using LibRed.Crypto; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Legacy Jet 4 (.mdb) "Set Database Password" (password-only obfuscation): the 40-byte field at 0x42 is +/// UTF-16LE(password) XOR (int)creationDateDouble, inside the header-masked region (recipe from jackcess, the +/// inverse of its read path). Verified byte-identical to Access's own output: each fixture below is +/// 2002plain.mdb with the named password set in Access, so re-encoding on a copy must reproduce it exactly. +/// Fixtures under enctest/ are NOT committed (user preference); tests skip when absent. +/// +public class LegacyJetPasswordTests +{ + private const string Dir = @"D:\toolkits\efcorejetlibred\test\LibRed.Core.Tests\enctest"; + private const string Plain = "2002plain.mdb"; + + public static IEnumerable Cases => + [ + ["2002plainpw.mdb", "Test1"], + ["2002plainTest2.mdb", "Test2"], + ["2002plain -aaaa.mdb", "AAAA"], + ["2002plain - z.mdb", "z"], + ]; + + [Theory] + [MemberData(nameof(Cases))] + public void SetJetPassword_matches_access_output(string accessFile, string password) + { + string plain = Path.Combine(Dir, Plain); + string reference = Path.Combine(Dir, accessFile); + if (!File.Exists(plain) || !File.Exists(reference)) return; + + string tmp = Path.Combine(Path.GetTempPath(), $"libred_jetpw_{Guid.NewGuid():N}.mdb"); + File.Copy(plain, tmp, overwrite: true); + try + { + DatabaseEncryption.SetJetPassword(tmp, password); + + byte[] ours = File.ReadAllBytes(tmp); + byte[] access = File.ReadAllBytes(reference); + // The 40-byte password field at 0x42 must match Access byte-for-byte. + Assert.Equal(access[0x42..(0x42 + 40)], ours[0x42..(0x42 + 40)]); + } + finally { File.Delete(tmp); } + } + + [Fact] + public void RemoveJetPassword_matches_plain() + { + string plain = Path.Combine(Dir, Plain); + if (!File.Exists(plain)) return; + + string tmp = Path.Combine(Path.GetTempPath(), $"libred_jetpw_{Guid.NewGuid():N}.mdb"); + File.Copy(plain, tmp, overwrite: true); + try + { + DatabaseEncryption.SetJetPassword(tmp, "Test1"); + DatabaseEncryption.RemoveJetPassword(tmp); + + byte[] ours = File.ReadAllBytes(tmp); + byte[] original = File.ReadAllBytes(plain); + Assert.Equal(original[0x42..(0x42 + 40)], ours[0x42..(0x42 + 40)]); // back to the unpassworded field + } + finally { File.Delete(tmp); } + } + + [Fact] + public void SetJetEncoding_roundtrips_and_stays_readable() + { + string plain = Path.Combine(Dir, Plain); + if (!File.Exists(plain)) return; + + string tmp = Path.Combine(Path.GetTempPath(), $"libred_jetenc_{Guid.NewGuid():N}.mdb"); + File.Copy(plain, tmp, overwrite: true); + try + { + byte[] before = File.ReadAllBytes(tmp); + DatabaseEncryption.SetJetEncoding(tmp); + byte[] encoded = File.ReadAllBytes(tmp); + + Assert.NotEqual(before, encoded); // pages actually changed + Assert.NotEqual(0u, BitConverter.ToUInt32(encoded, 0x3E)); // dbKey masked-nonzero on disk + using (var db = LibRed.JetDatabase.Open(tmp, readOnly: true)) // encoded output opens via the codec + Assert.Contains("Table1", db.Catalog.UserTables.Select(t => t.Name)); + + DatabaseEncryption.RemoveJetEncoding(tmp); + Assert.Equal(before, File.ReadAllBytes(tmp)); // decode → byte-identical to original + } + finally { File.Delete(tmp); } + } + + [Fact] + public void Encode_and_password_are_independent() + { + string plain = Path.Combine(Dir, Plain); + string pwRef = Path.Combine(Dir, "2002plainpw.mdb"); // 2002plain + Access-set "Test1" + if (!File.Exists(plain) || !File.Exists(pwRef)) return; + + string tmp = Path.Combine(Path.GetTempPath(), $"libred_jetboth_{Guid.NewGuid():N}.mdb"); + File.Copy(plain, tmp, overwrite: true); + try + { + DatabaseEncryption.SetJetPassword(tmp, "Test1"); + DatabaseEncryption.SetJetEncoding(tmp); + + // The password field (0x42, page 0, never page-encrypted) still matches Access's password-only output. + byte[] both = File.ReadAllBytes(tmp); + byte[] pwOnly = File.ReadAllBytes(pwRef); + Assert.Equal(pwOnly[0x42..(0x42 + 40)], both[0x42..(0x42 + 40)]); + + // Removing the encoding leaves the password field intact. + DatabaseEncryption.RemoveJetEncoding(tmp); + Assert.Equal(pwOnly[0x42..(0x42 + 40)], File.ReadAllBytes(tmp)[0x42..(0x42 + 40)]); + } + finally { File.Delete(tmp); } + } + + [Fact] + public void Reads_access_encoded_plus_password_file() + { + // 2002encodedpw.mdb is a real Access file that is BOTH page-encoded (nonzero 0x3E key) AND password-set. + string enc = Path.Combine(Dir, "2002encodedpw.mdb"); + string plainpw = Path.Combine(Dir, "2002plainpw.mdb"); + if (!File.Exists(enc)) return; + + // LibRed reads Access's combined file via the stored encoding key — proves our RC4 decode matches Access. + using (var db = LibRed.JetDatabase.Open(enc, readOnly: true)) + Assert.Contains("Table1", db.Catalog.UserTables.Select(t => t.Name)); + + // The password field (page 0, never page-encrypted) is byte-identical to the password-only file. + if (File.Exists(plainpw)) + Assert.Equal(File.ReadAllBytes(plainpw)[0x42..(0x42 + 40)], File.ReadAllBytes(enc)[0x42..(0x42 + 40)]); + + // Decoding it in place yields a valid plaintext database that still opens. + string tmp = Path.Combine(Path.GetTempPath(), $"libred_decenc_{Guid.NewGuid():N}.mdb"); + File.Copy(enc, tmp, overwrite: true); + try + { + DatabaseEncryption.RemoveJetEncoding(tmp); + using var db = LibRed.JetDatabase.Open(tmp, readOnly: true); + Assert.Contains("Table1", db.Catalog.UserTables.Select(t => t.Name)); + } + finally { File.Delete(tmp); } + } + + [Fact] + public void SetJetPassword_rejects_accdb() + { + string accdb = Path.Combine(Dir, "..", "Data", "WideTable.accdb"); + if (!File.Exists(accdb)) return; + string tmp = Path.Combine(Path.GetTempPath(), $"libred_jetpw_{Guid.NewGuid():N}.accdb"); + File.Copy(accdb, tmp, overwrite: true); + try { Assert.Throws(() => DatabaseEncryption.SetJetPassword(tmp, "x")); } + finally { File.Delete(tmp); } + } +} diff --git a/test/LibRed.Core.Tests/LibRed.Core.Tests.csproj b/test/LibRed.Core.Tests/LibRed.Core.Tests.csproj new file mode 100644 index 00000000..b9693714 --- /dev/null +++ b/test/LibRed.Core.Tests/LibRed.Core.Tests.csproj @@ -0,0 +1,73 @@ + + + + $(JetTargetFramework) + LibRed.Core.Tests + enable + enable + false + true + + $(NoWarn);CA1416 + AnyCPU;x86;x64 + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + PreserveNewest + + + + + + + Data\Northwind.accdb + PreserveNewest + + + PreserveNewest + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + PreserveNewest + + + + diff --git a/test/LibRed.Core.Tests/LockManagerTests.cs b/test/LibRed.Core.Tests/LockManagerTests.cs new file mode 100644 index 00000000..e694b258 --- /dev/null +++ b/test/LibRed.Core.Tests/LockManagerTests.cs @@ -0,0 +1,85 @@ +using LibRed.IO; +using Xunit; + +namespace LibRed.Core.Tests; + +public class LockManagerTests +{ + [Fact] + public void Multiple_readers_hold_the_same_page_concurrently() + { + // A second reader on another thread enters while the first still holds the page (readers don't exclude + // readers). The locks are operation-scoped, so a single thread never nests two acquisitions on one page. + var m = new MonitorLockManager(); + m.EnterShared(5); + try + { + var secondEntered = new ManualResetEventSlim(); + var t = Task.Run(() => { m.EnterShared(5); m.ExitShared(5); secondEntered.Set(); }); + Assert.True(secondEntered.Wait(2000)); // not blocked by the first reader + t.Wait(2000); + } + finally { m.ExitShared(5); } + } + + [Fact] + public void A_writer_blocks_a_reader_of_the_same_page_until_released() + { + var m = new MonitorLockManager(); + m.EnterExclusive(5); + + var readerEntered = new ManualResetEventSlim(); + var reader = Task.Run(() => { m.EnterShared(5); m.ExitShared(5); readerEntered.Set(); }); + + Assert.False(readerEntered.Wait(250)); // the writer holds the page, so the reader can't enter + m.ExitExclusive(5); + Assert.True(readerEntered.Wait(2000)); // released — the reader proceeds + reader.Wait(2000); + } + + [Fact] + public void Locks_on_different_pages_do_not_block_each_other() + { + var m = new MonitorLockManager(); + m.EnterExclusive(1); + m.EnterExclusive(2); // different page → independent, does not block + m.ExitExclusive(2); + m.ExitExclusive(1); + } + + [Fact] + public void Acquire_returns_one_shared_manager_per_path_and_frees_it_on_last_release() + { + MonitorLockManager a = MonitorLockManager.Acquire(@"C:\dir\db.accdb"); + MonitorLockManager b = MonitorLockManager.Acquire(@"C:\dir\DB.accdb"); // same file (case-insensitive) + Assert.Same(a, b); + + // Two acquisitions → two releases; a fresh acquire after that is a new manager (the old was disposed). + MonitorLockManager.Release(@"C:\dir\db.accdb"); + MonitorLockManager.Release(@"C:\dir\db.accdb"); + Assert.NotSame(a, MonitorLockManager.Acquire(@"C:\dir\db.accdb")); + MonitorLockManager.Release(@"C:\dir\db.accdb"); + } + + [Fact] + public void PageChannel_reads_and_writes_correctly_under_a_lock_manager() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-locked-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var channel = PageChannel.Open(path, readOnly: false, locks: new MonitorLockManager()); + + var page = channel.ReadPage(1).Span.ToArray(); + page[10] ^= 0xFF; + + channel.BeginTransaction(); + channel.WritePage(1, page); + Assert.Equal(page[10], channel.ReadPage(1).Span[10]); // read-your-write under the lock seams + channel.RollbackTransaction(); + + Assert.NotEqual(page[10], channel.ReadPage(1).Span[10]); // rollback restored the original + } + finally { File.Delete(path); } + } +} diff --git a/test/LibRed.Core.Tests/LongValueCorruptionTests.cs b/test/LibRed.Core.Tests/LongValueCorruptionTests.cs new file mode 100644 index 00000000..18230914 --- /dev/null +++ b/test/LibRed.Core.Tests/LongValueCorruptionTests.cs @@ -0,0 +1,128 @@ +using System.Buffers.Binary; +using LibRed; +using LibRed.Pages; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class LongValueCorruptionTests +{ + [Fact] + public void Rejects_a_short_descriptor() + { + using var fixture = new Fixture(); + Assert.Throws(() => fixture.Reader.Resolve(new byte[11])); + } + + [Fact] + public void Rejects_a_truncated_inline_value() + { + using var fixture = new Fixture(); + var descriptor = new byte[12]; + descriptor[0] = 1; + descriptor[3] = 0x80; + Assert.Throws(() => fixture.Reader.Resolve(descriptor)); + } + + [Theory] + [InlineData("outside-file")] + [InlineData("wrong-owner")] + [InlineData("short-chunk")] + [InlineData("early-end")] + [InlineData("cycle")] + public void Rejects_a_malformed_chained_value(string corruption) + { + using var fixture = new Fixture(); + LongValueResult value = fixture.Writer.Write(new byte[5000]); + byte[] descriptor = value.Descriptor.ToArray(); + int first = value.OwnedPages[0]; + + switch (corruption) + { + case "outside-file": + WritePagePointer(descriptor.AsSpan(4, 4), fixture.Table.Channel.PageCount + 1); + break; + case "wrong-owner": + byte[] wrongOwner = fixture.Table.Channel.ReadPage(first).Span.ToArray(); + BinaryPrimitives.WriteInt32LittleEndian( + wrongOwner.AsSpan(fixture.Table.Channel.Format.DataOwnerOffset, 4), + fixture.Table.Definition.DefinitionPage); + fixture.Table.Channel.WritePage(first, wrongOwner); + break; + case "short-chunk": + byte[] shortChunk = fixture.Table.Channel.ReadPage(first).Span.ToArray(); + BinaryPrimitives.WriteUInt16LittleEndian( + shortChunk.AsSpan(fixture.Table.Channel.Format.DataRowDirectoryOffset, 2), + (ushort)(fixture.Table.Channel.PageSize - 3)); + fixture.Table.Channel.WritePage(first, shortChunk); + break; + case "early-end": + RewriteNextPointer(fixture, first, 0); + break; + case "cycle": + RewriteNextPointer(fixture, first, first); + break; + } + + Assert.Throws(() => fixture.Reader.Resolve(descriptor)); + } + + [Fact] + public void Valid_inline_single_and_chained_values_round_trip() + { + using var fixture = new Fixture(); + byte[] inline = [3, 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3]; + Assert.Equal(new byte[] { 1, 2, 3 }, fixture.Reader.Resolve(inline)); + + foreach (int size in new[] { 100, 5000 }) + { + byte[] payload = Enumerable.Range(0, size).Select(i => (byte)i).ToArray(); + LongValueResult stored = fixture.Writer.Write(payload); + Assert.Equal(payload, fixture.Reader.Resolve(stored.Descriptor)); + } + } + + private static void RewriteNextPointer(Fixture fixture, int pageNumber, int nextPage) + { + byte[] page = fixture.Table.Channel.ReadPage(pageNumber).Span.ToArray(); + var parsed = new DataPage(); + parsed.Read(fixture.Table.Channel.ReadPage(pageNumber), fixture.Table.Channel.Format); + RowSlot slot = parsed.Rows[0]; + WritePagePointer(page.AsSpan(slot.Offset, 4), nextPage); + fixture.Table.Channel.WritePage(pageNumber, page); + } + + private static void WritePagePointer(Span pointer, int page) + { + pointer[0] = 0; + pointer[1] = (byte)page; + pointer[2] = (byte)(page >> 8); + pointer[3] = (byte)(page >> 16); + } + + private sealed class Fixture : IDisposable + { + private readonly string _path = Path.Combine(Path.GetTempPath(), $"lval-corrupt-{Guid.NewGuid():N}.accdb"); + private readonly JetDatabase _database; + + public Fixture() + { + File.Copy(TestDatabases.NorthwindAccdb, _path); + _database = JetDatabase.Open(_path, readOnly: false); + Table = _database.OpenTable("Categories"); + Writer = new LongValueWriter(Table.Channel); + Reader = new LongValueReader(Table.Channel); + } + + public Table Table { get; } + public LongValueWriter Writer { get; } + public LongValueReader Reader { get; } + + public void Dispose() + { + _database.Dispose(); + File.Delete(_path); + } + } +} diff --git a/test/LibRed.Core.Tests/LongValuePackingAccessTests.cs b/test/LibRed.Core.Tests/LongValuePackingAccessTests.cs new file mode 100644 index 00000000..e93797cb --- /dev/null +++ b/test/LibRed.Core.Tests/LongValuePackingAccessTests.cs @@ -0,0 +1,103 @@ +using System.Buffers.Binary; +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.IO; +using LibRed.Pages; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Several small long values share LVAL pages (Access packs many per page as separate rows) instead of +/// each taking a whole page. This inserts many medium memos and checks they land on far fewer pages than +/// values, that a full page leaves the free map while the current one stays free, and that both LibRed +/// and Access read every value back. +/// +public class LongValuePackingAccessTests +{ + private const int N = 20; // each ~310 bytes → LVAL, but ~10 fit per page + private static readonly string[] Values = + Enumerable.Range(0, N).Select(i => $"row{i}:" + new string((char)('A' + i % 26), 150)).ToArray(); + + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + private static List MapPages(PageChannel ch, (int Row, int Page) ptr) + { + var holder = new DataPage(); + holder.Read(ch.ReadPage(ptr.Page), ch.Format); + byte[] map = holder.GetRow(ptr.Row).ToArray(); + int start = BinaryPrimitives.ReadInt32LittleEndian(map.AsSpan(1, 4)); + var pages = new List(); + for (int i = 5; i < map.Length; i++) + for (int bit = 0; bit < 8; bit++) + if ((map[i] & (1 << bit)) != 0) pages.Add(start + (i - 5) * 8 + bit); + return pages; + } + + [Fact] + public void Small_long_values_share_lval_pages_and_round_trip() + { + string path = Path.Combine(Path.GetTempPath(), $"lval-pack-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Big", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("M", JetDataType.Memo, 0, IsFixedLength: false)], + primaryKey: ["Id"]); + var t = db.OpenTable("Big"); + for (int i = 0; i < N; i++) t.Insert([i + 1, Values[i]]); + } + + using (var ch = PageChannel.Open(path, readOnly: true)) + { + var t = new JetCatalog(ch).FindTable("Big")!; + var def = new TableDefinitionPage(); + def.Read(ch, t.DefinitionPage); + int m = t.Columns.First(c => c.Name == "M").ColumnId; + var owned = MapPages(ch, def.LongValueOwnedMaps[m]); + var free = MapPages(ch, def.LongValueFreeMaps[m]); + + Assert.True(owned.Count < N / 3, $"{N} values packed onto {owned.Count} pages"); // ~2, not 20 + Assert.Single(free); // only the current append page is free + Assert.Contains(free[0], owned); // and it is an owned page + Assert.Equal(owned.Max(), free[0]); // the last-allocated page is the free one + } + + using (var db = JetDatabase.Open(path)) + { + var t = db.OpenTable("Big"); + int id = t.Definition.Columns.First(c => c.Name == "Id").Index; + int m = t.Definition.Columns.First(c => c.Name == "M").Index; + foreach (object?[] row in t.Rows()) + Assert.Equal(Values[(int)row[id]! - 1], (string)row[m]!); + } + + using var conn = OpenOleDb(path); + for (int i = 1; i <= N; i++) + { + using var cmd = conn.CreateCommand(); + cmd.CommandText = $"SELECT M FROM Big WHERE Id = {i}"; + Assert.Equal(Values[i - 1], (string)cmd.ExecuteScalar()!); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/MemoKeyEncodingTests.cs b/test/LibRed.Core.Tests/MemoKeyEncodingTests.cs new file mode 100644 index 00000000..3938766b --- /dev/null +++ b/test/LibRed.Core.Tests/MemoKeyEncodingTests.cs @@ -0,0 +1,89 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful: a Memo (Long Text) column IS indexable in Access, and its index key is the ordinary text +// collation key over only the value's first 255 characters. Verified against keys Access itself wrote, +// ascending and descending, including truncation and an "ignorable" character (apostrophe). +public class MemoKeyEncodingTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider available."); + } + + private static readonly string[] Values = + [ + "", + "a", + "hello", + "O'Brien", // ignorable apostrophe + new string('x', 100), + new string('y', 255), // exactly the limit + new string('z', 256), // one past → key equals the 255-char prefix + new string('w', 300), // well past + ]; + + private static void AssertKeysMatchAccess(string indexDdl) + { + string path = Path.Combine(Path.GetTempPath(), $"libred-memokey-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + using (var c = conn.CreateCommand()) { c.CommandText = "CREATE TABLE MK (Id LONG CONSTRAINT PK PRIMARY KEY, M MEMO)"; c.ExecuteNonQuery(); } + using (var c = conn.CreateCommand()) { c.CommandText = indexDdl; c.ExecuteNonQuery(); } + for (int i = 0; i < Values.Length; i++) + { + using var c = conn.CreateCommand(); + c.CommandText = "INSERT INTO MK (Id, M) VALUES (?, ?)"; + c.Parameters.AddWithValue("i", i); + c.Parameters.AddWithValue("m", Values[i]); + c.ExecuteNonQuery(); + } + } + + using var db = JetDatabase.Open(path); + var table = db.OpenTable("MK"); + var def = table.Definition; + var mcol = def.FindColumn("M")!; + IndexDef index = def.Indexes.Single(i => !i.IsPrimaryKey && i.Columns.Any(c => c.Column.Name == "M")); + var decoder = new RowDecoder(def.Columns, db.Format, new LongValueReader(table.Channel)); + + int checkedKeys = 0; + foreach (var (accessKey, rowId) in new IndexCursor(table.Channel, index.RootPage).RawEntries()) + { + var s = (string?)decoder.Decode(db.ReadDataPage(rowId.Page).GetRow(rowId.Row))[mcol.Index] ?? ""; + + var values = new object?[def.Columns.Count]; + values[mcol.Index] = s; + byte[] ours = IndexKeyEncoder.Encode(index.Columns, values); + + Assert.True(accessKey.AsSpan().SequenceEqual(ours), + $"len {s.Length}: access={Convert.ToHexString(accessKey)} ours={Convert.ToHexString(ours)}"); + checkedKeys++; + } + + Assert.Equal(Values.Length, checkedKeys); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Encoded_memo_keys_match_access_byte_for_byte_ascending() + => AssertKeysMatchAccess("CREATE INDEX IX_M ON MK (M)"); + + [Fact] + public void Encoded_memo_keys_match_access_byte_for_byte_descending() + => AssertKeysMatchAccess("CREATE INDEX IX_M ON MK (M DESC)"); +} diff --git a/test/LibRed.Core.Tests/MultiPageDefinitionTests.cs b/test/LibRed.Core.Tests/MultiPageDefinitionTests.cs new file mode 100644 index 00000000..c4727ec3 --- /dev/null +++ b/test/LibRed.Core.Tests/MultiPageDefinitionTests.cs @@ -0,0 +1,49 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.IO; +using Xunit; + +namespace LibRed.Core.Tests; + +public class MultiPageDefinitionTests +{ + // Adding enough indexes overflows a single TDEF page, so the definition spills onto a continuation + // page. The definition must still read back correctly (the reader stitches continuation pages). + [Fact] + public void Index_that_overflows_the_tdef_page_spills_to_a_continuation_and_round_trips() + { + const int n = 30; + string path = Path.Combine(Path.GetTempPath(), $"cont-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Wide", + Enumerable.Range(0, n) + .Select(i => new ColumnSpec($"C{i:D2}", JetDataType.Int32, 4, IsFixedLength: true)) + .ToList()); + for (int i = 0; i < n; i++) + db.CreateIndex("Wide", $"IX{i:D2}", [($"C{i:D2}", false)]); + } + + using (var ch = PageChannel.Open(path, readOnly: true)) + { + var def = new JetCatalog(ch).FindTable("Wide")!; + var buf = ch.ReadPage(def.DefinitionPage); + Assert.True(buf.ReadInt32(0x08) > ch.Format.PageSize); // definition exceeds one page + Assert.NotEqual(0, buf.ReadInt32(ch.Format.TdefNextPageOffset)); // a continuation page exists + } + + using (var db = JetDatabase.Open(path)) + { + var t = db.Catalog.FindTable("Wide")!; + Assert.Equal(n, t.Indexes.Count); + for (int i = 0; i < n; i++) + Assert.Contains(t.Indexes, ix => ix.Name == $"IX{i:D2}" + && ix.Columns.Select(c => c.Column.Name).SequenceEqual([$"C{i:D2}"])); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/MultiPageTableDefinitionTests.cs b/test/LibRed.Core.Tests/MultiPageTableDefinitionTests.cs new file mode 100644 index 00000000..8817fc1a --- /dev/null +++ b/test/LibRed.Core.Tests/MultiPageTableDefinitionTests.cs @@ -0,0 +1,112 @@ +using LibRed; +using LibRed.Pages; +using System.Buffers.Binary; +using Xunit; + +namespace LibRed.Core.Tests; + +public class MultiPageTableDefinitionTests +{ + [Fact] + public void Parses_definition_that_spans_multiple_pages() + { + using var db = JetDatabase.Open(TestDatabases.WideTableAccdb); + + var def = db.Catalog.FindTable("WideTable"); + Assert.NotNull(def); + + var tdef = db.ReadTableDefinition(def!.DefinitionPage); + + // The definition continues onto another page. + Assert.NotEqual(0, tdef.NextDefinitionPage); + Assert.Equal(200, tdef.ColumnCount); + Assert.Equal(200, tdef.Columns.Count); + + // Column names continue seamlessly across the page boundary (C000..C199). + Assert.Equal( + Enumerable.Range(0, 200).Select(i => $"C{i:D3}"), + tdef.Columns.Select(c => c.Name)); + } + + [Fact] + public void Reads_rows_from_a_wide_table() + { + using var db = JetDatabase.Open(TestDatabases.WideTableAccdb); + + var table = db.OpenTable("WideTable"); + int Idx(string n) => table.Definition.Columns.First(c => c.Name == n).Index; + + var row = Assert.Single(table.Rows()); + Assert.Equal(1000, row[Idx("C000")]); + Assert.Equal(1100, row[Idx("C100")]); + Assert.Equal(1199, row[Idx("C199")]); + Assert.Null(row[Idx("C001")]); // not inserted + } + + [Theory] + [InlineData("wrong-type")] + [InlineData("outside-file")] + [InlineData("declared-single-page")] + [InlineData("cycle")] + [InlineData("missing-continuation")] + [InlineData("oversized-length")] + [InlineData("wrong-root-header")] + public void Rejects_an_invalid_continuation_chain_before_assembly(string corruption) + { + string path = Path.Combine(Path.GetTempPath(), $"bad-tdef-chain-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.WideTableAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var table = db.OpenTable("WideTable"); + var channel = table.Channel; + int firstPage = table.Definition.DefinitionPage; + byte[] first = channel.ReadPage(firstPage).Span.ToArray(); + int continuation = BinaryPrimitives.ReadInt32LittleEndian( + first.AsSpan(db.Format.TdefNextPageOffset, 4)); + Assert.True(continuation > 0); + + switch (corruption) + { + case "wrong-type": + byte[] wrongType = channel.ReadPage(continuation).Span.ToArray(); + wrongType[0] = (byte)PageType.DataPage; + channel.WritePage(continuation, wrongType); + break; + case "outside-file": + BinaryPrimitives.WriteInt32LittleEndian( + first.AsSpan(db.Format.TdefNextPageOffset, 4), channel.PageCount + 1); + channel.WritePage(firstPage, first); + break; + case "declared-single-page": + BinaryPrimitives.WriteInt32LittleEndian( + first.AsSpan(db.Format.TdefLengthOffset, 4), db.Format.PageSize); + channel.WritePage(firstPage, first); + break; + case "cycle": + byte[] cyclic = channel.ReadPage(continuation).Span.ToArray(); + BinaryPrimitives.WriteInt32LittleEndian( + cyclic.AsSpan(db.Format.TdefNextPageOffset, 4), continuation); + channel.WritePage(continuation, cyclic); + break; + case "missing-continuation": + BinaryPrimitives.WriteInt32LittleEndian( + first.AsSpan(db.Format.TdefNextPageOffset, 4), 0); + channel.WritePage(firstPage, first); + break; + case "oversized-length": + BinaryPrimitives.WriteInt32LittleEndian( + first.AsSpan(db.Format.TdefLengthOffset, 4), 1024 * 1024 + 1); + channel.WritePage(firstPage, first); + break; + case "wrong-root-header": + first[1] = 0; + channel.WritePage(firstPage, first); + break; + } + + Assert.Throws(() => db.ReadTableDefinition(firstPage)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/OfficeStandardEncryptionTests.cs b/test/LibRed.Core.Tests/OfficeStandardEncryptionTests.cs new file mode 100644 index 00000000..defa2e2a --- /dev/null +++ b/test/LibRed.Core.Tests/OfficeStandardEncryptionTests.cs @@ -0,0 +1,126 @@ +using System.Buffers.Binary; +using LibRed.Crypto; +using Xunit; + +namespace LibRed.Core.Tests; + +// Fixture-free known-answer tests for the Office Standard/CryptoAPI codec. The salt + EncryptionVerifier blocks +// below are constants extracted from the jackcess-encrypt fixtures (db2007-oldenc = RC4-40, db-nonstandard = +// AES-256 non-standard); the password verifier depends only on salt+password, so a synthetic page-0 carrying +// just the binary EncryptionInfo descriptor exercises the whole key-derivation + verifier path without the DB. +public class OfficeStandardEncryptionTests +{ + // db2007-oldenc.accdb — RC4-40, password "Test123" + private const uint AlgRc4 = 0x6801; + private static readonly byte[] Rc4Salt = Convert.FromHexString("78da7d5196c71492eed3b4471a479449"); + private static readonly byte[] Rc4EncVerifier = Convert.FromHexString("27f28425cc153a8f0c296d467fc6fb30"); + private static readonly byte[] Rc4EncVerifierHash = Convert.FromHexString("4dc1ea9024bbc3bf372ef0d987974c85fa729d62"); // 20 + + // db-nonstandard.accdb — AES-256 (non-standard, 0 iterations), password "password" + private const uint AlgAes256 = 0x6610; + private static readonly byte[] AesSalt = Convert.FromHexString("7413eec1b30f2d38a62d1160e1b00ce7"); + private static readonly byte[] AesEncVerifier = Convert.FromHexString("cad9594b612a162f52b00350e54537f8"); + private static readonly byte[] AesEncVerifierHash = Convert.FromHexString("19f94c8655326a58a04a82d61699a884acf288030d14442371fdce77c9e63bca"); // 32 + + [Fact] + public void Rc4_authenticates_correct_password() => + Assert.NotNull(OfficeStandardEncryption.TryCreate(BuildPage0(AlgRc4, 0x04, 40, Rc4Salt, Rc4EncVerifier, Rc4EncVerifierHash), 0x12345678, "Test123")); + + [Fact] + public void Aes_authenticates_correct_password() => + Assert.NotNull(OfficeStandardEncryption.TryCreate(BuildPage0(AlgAes256, 0x0C, 256, AesSalt, AesEncVerifier, AesEncVerifierHash), 0x12345678, "password")); + + [Fact] + public void Wrong_password_throws() => + Assert.Throws(() => + OfficeStandardEncryption.TryCreate(BuildPage0(AlgAes256, 0x0C, 256, AesSalt, AesEncVerifier, AesEncVerifierHash), 0x12345678, "wrong")); + + [Fact] + public void Missing_password_throws() => + Assert.Throws(() => + OfficeStandardEncryption.TryCreate(BuildPage0(AlgRc4, 0x04, 40, Rc4Salt, Rc4EncVerifier, Rc4EncVerifierHash), 0x12345678, null)); + + [Fact] + public void Unencrypted_returns_null() => + Assert.Null(OfficeStandardEncryption.TryCreate(new byte[4096], databaseKey: 0, password: "x")); + + [Theory] + [InlineData(0)] + [InlineData(19)] + [InlineData(21)] + public void Verifier_hash_size_must_exactly_match_the_declared_hash(int verifierHashSize) + { + Assert.Throws(() => OfficeStandardEncryption.TryCreate( + BuildPage0(AlgRc4, 0x04, 40, Rc4Salt, Rc4EncVerifier, Rc4EncVerifierHash, verifierHashSize), + 0x12345678, "Test123")); + } + + [Theory] + [InlineData(1)] + [InlineData(39)] + [InlineData(41)] + [InlineData(127)] + [InlineData(129)] + public void Rc4_key_size_must_be_a_supported_whole_byte_count(int keyBits) + { + Assert.Throws(() => OfficeStandardEncryption.TryCreate( + BuildPage0(AlgRc4, 0x04, keyBits, Rc4Salt, Rc4EncVerifier, Rc4EncVerifierHash), + 0x12345678, "Test123")); + } + + [Fact] + public void Aes_key_size_must_be_a_supported_exact_size() + { + Assert.Throws(() => OfficeStandardEncryption.TryCreate( + BuildPage0(AlgAes256, 0x0C, 257, AesSalt, AesEncVerifier, AesEncVerifierHash), + 0x12345678, "password")); + } + + [Theory] + [InlineData(true)] // RC4-40 (symmetric stream) + [InlineData(false)] // AES-256 (ECB, distinct encrypt/decrypt directions) + public void Encrypt_then_decrypt_round_trips(bool rc4) + { + var codec = rc4 + ? OfficeStandardEncryption.TryCreate(BuildPage0(AlgRc4, 0x04, 40, Rc4Salt, Rc4EncVerifier, Rc4EncVerifierHash), 0x12345678, "Test123")! + : OfficeStandardEncryption.TryCreate(BuildPage0(AlgAes256, 0x0C, 256, AesSalt, AesEncVerifier, AesEncVerifierHash), 0x12345678, "password")!; + + var page = new byte[4096]; + new Random(5).NextBytes(page); + var original = (byte[])page.Clone(); + codec.EncryptPage(4, page); + Assert.NotEqual(original, page); + codec.DecryptPage(4, page); + Assert.Equal(original, page); + } + + // Lays a binary EncryptionInfo (version 4.2) into a synthetic 4 KB page 0: [ver major/minor][flags] + // [headerSize][EncryptionHeader: Flags,SizeExtra,AlgID,AlgIDHash,KeySize,ProviderType,Reserved1,Reserved2] + // [EncryptionVerifier: SaltSize,Salt(16),EncryptedVerifier(16),VerifierHashSize,EncryptedVerifierHash]. + private static byte[] BuildPage0( + uint algId, uint flags, int keyBits, byte[] salt, byte[] encVerifier, byte[] encVerifierHash, + int verifierHashSize = 20) + { + var page = new byte[4096]; + int ei = 0x100; + const int headerSize = 32; + void U16(int o, ushort v) => BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(o), v); + void U32(int o, uint v) => BinaryPrimitives.WriteUInt32LittleEndian(page.AsSpan(o), v); + + U16(ei, 4); U16(ei + 2, 2); // version 4.2 + U32(ei + 4, flags); + U32(ei + 8, headerSize); + int h = ei + 12; + U32(h, flags); // header Flags + U32(h + 8, algId); // AlgID + U32(h + 12, 0x8004); // AlgIDHash = SHA1 + U32(h + 16, (uint)keyBits); // KeySize + int v = h + headerSize; + U32(v, (uint)salt.Length); + salt.CopyTo(page, v + 4); + encVerifier.CopyTo(page, v + 4 + salt.Length); + U32(v + 4 + salt.Length + 16, (uint)verifierHashSize); // VerifierHashSize (SHA1 normally 20) + encVerifierHash.CopyTo(page, v + 4 + salt.Length + 16 + 4); + return page; + } +} diff --git a/test/LibRed.Core.Tests/OfficeStandardVariantReadTests.cs b/test/LibRed.Core.Tests/OfficeStandardVariantReadTests.cs new file mode 100644 index 00000000..10b3efc4 --- /dev/null +++ b/test/LibRed.Core.Tests/OfficeStandardVariantReadTests.cs @@ -0,0 +1,64 @@ +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Reads real Office-"Standard"/CryptoAPI encrypted .accdb fixtures re-encrypted with the +/// "Encryption Manager for Access 2007" (EverythingAccess.com) tool, sweeping the AlgID / AlgIDHash / KeySize +/// combinations it exposes. Verifies LibRed honours the hashing algorithm (MD5/SHA-1/…/SHA-512), resolves +/// KeySize == 0 to the algorithm default, and rejects genuinely-unsupported ciphers (3DES) cleanly. +/// Fixtures live under enctest/ and are NOT committed (user preference); the test skips when absent. +/// +public class OfficeStandardVariantReadTests +{ + private const string Dir = @"D:\toolkits\efcorejetlibred\test\LibRed.Core.Tests\enctest"; + private const string Password = "Test123"; + + public static IEnumerable Readable => + [ + ["db2007-oldenc.accdb"], // RC4-40, SHA-1 + ["db2007-oldenc - Copy.accdb"], // RC4-56, SHA-1 + ["db2007-oldenc - Copy (2).accdb"], // RC4, MD5, KeySize=0 (default) + ["db2007-oldenc - Copy (3).accdb"], // RC4, MD5, KeySize=0, Enhanced provider + ["db2007-oldenc - Copy (4).accdb"], // RC4-120, SHA-512 + ["db2007-oldenc - Copy (5).accdb"], // AES-256, MD5, KeySize=0 (Access won't open; LibRed can) + ["db2007-oldenc - Copy (6).accdb"], // AES-128, MD5, KeySize=0 (Access won't open; LibRed can) + ["db2007-oldenc - Copy (8).accdb"], // AES-256, SHA-512, KeySize=0 (key < hash ⇒ truncate, no expansion) + ["db2007-oldenc - Copy (12).accdb"],// AES-256, SHA-256, KeySize=0 (key == hash 32 ⇒ 0x36/0x5C expansion) + ["db2007-oldenc - Copy (13).accdb"],// AES-256, SHA-384, KeySize=0 (key 32 < hash 48 ⇒ truncate) + ["db2007-oldenc - Copy (14).accdb"],// AES-192, SHA-256, KeySize=0 (24-byte key path) + ["db2007-oldenc - Copy (15).accdb"],// AES-128, SHA-512, KeySize=0 (key 16 < hash 64 ⇒ truncate) + ]; + + [Theory] + [MemberData(nameof(Readable))] + public void Reads_office_standard_variant(string file) + { + string path = Path.Combine(Dir, file); + if (!File.Exists(path)) return; // fixtures not committed (user preference) + + using var db = JetDatabase.Open(path, readOnly: true, password: Password); + Assert.Equal(1, db.OpenTable("Table1").Rows().Count()); + } + + [Theory] + [InlineData("db2007-oldenc - Copy (7).accdb")] // 3DES-168 cipher + [InlineData("db2007-oldenc - Copy (9).accdb")] // MD2 hashing (no managed implementation) + [InlineData("db2007-oldenc - Copy (10).accdb")] // 3DES-112 cipher + [InlineData("db2007-oldenc - Copy (11).accdb")] // DES cipher + public void Rejects_unsupported_cleanly(string file) + { + string path = Path.Combine(Dir, file); // all also refused by Access itself + if (!File.Exists(path)) return; + + // A clear NotSupportedException, never a DivideByZero/EndOfStream from mis-reading ciphertext as plaintext. + try + { + JetDatabase.Open(path, readOnly: true, password: Password); + Assert.Fail($"expected NotSupportedException for {file}"); + } + catch (NotSupportedException) { /* expected */ } + catch (IOException) { /* fixture locked by another process (an environment condition); skip */ } + } +} diff --git a/test/LibRed.Core.Tests/OrderByProcedureAccessTests.cs b/test/LibRed.Core.Tests/OrderByProcedureAccessTests.cs new file mode 100644 index 00000000..5c0a204e --- /dev/null +++ b/test/LibRed.Core.Tests/OrderByProcedureAccessTests.cs @@ -0,0 +1,66 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A TOP + ORDER BY stored query — Northwind's "Ten Most Expensive Products". Access stores TOP as an +/// Attribute=3 flag row (Flag bit 0x10, Name1 = the count) and each ORDER BY key as an +/// Attribute=0x0B row (Expression = the column, Name1 = "d" for descending). Access runs it. +/// +public class OrderByProcedureAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + [Fact] + public void Access_runs_a_top_order_by_query() + { + string path = Path.Combine(Path.GetTempPath(), $"orderby-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateView("Priciest Ten", new ViewSpec( + Distinct: false, + Columns: + [ + new ViewColumnSpec("Products.ProductName", "TenMostExpensiveProducts"), + new ViewColumnSpec("Products.UnitPrice", null), + ], + Tables: [new ViewTableSpec("Products", null)], + Joins: [], + Where: null, + GroupBy: null, + Parameters: null, + OrderBy: [new ViewOrderBySpec("Products.UnitPrice", Descending: true)], + Top: 10)); + + using var conn = OpenOleDb(path); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT UnitPrice FROM [Priciest Ten]"; + var prices = new List(); + using (var reader = cmd.ExecuteReader()) + while (reader.Read()) prices.Add(Convert.ToDecimal(reader[0])); + + Assert.Equal(10, prices.Count); // TOP 10 + Assert.Equal(prices.OrderByDescending(p => p).ToList(), prices); // ORDER BY DESC + Assert.Equal(263.50m, prices[0]); // Côte de Blaye + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/PageAndRowCorruptionTests.cs b/test/LibRed.Core.Tests/PageAndRowCorruptionTests.cs new file mode 100644 index 00000000..1bfe4924 --- /dev/null +++ b/test/LibRed.Core.Tests/PageAndRowCorruptionTests.cs @@ -0,0 +1,167 @@ +using System.Buffers.Binary; +using LibRed; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class PageAndRowCorruptionTests +{ + private static readonly JetFormatBase Format = OpenFormat(); + + [Theory] + [InlineData("wrong-page-type")] + [InlineData("short-page")] + [InlineData("directory-past-page")] + [InlineData("row-overlaps-directory")] + [InlineData("row-offset-past-page")] + [InlineData("ascending-row-offsets")] + public void Malformed_data_page_slots_are_rejected_as_corruption(string corruption) + { + byte[] page = NewDataPage(rowCount: 2, firstOffset: 4000, secondOffset: 3900); + switch (corruption) + { + case "wrong-page-type": + page[0] = (byte)PageType.TableDefinition; + break; + case "short-page": + page = page[..100]; + break; + case "directory-past-page": + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(Format.DataRowCountOffset, 2), ushort.MaxValue); + break; + case "row-overlaps-directory": + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(Format.DataRowDirectoryOffset, 2), + (ushort)(Format.DataRowDirectoryOffset + 2)); + break; + case "row-offset-past-page": + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(Format.DataRowDirectoryOffset, 2), 5000); + break; + case "ascending-row-offsets": + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(Format.DataRowDirectoryOffset + 2, 2), 4050); + break; + } + + Assert.Throws(() => new DataPage().Read(new PageBuffer(page, 7), Format)); + } + + [Fact] + public void Direct_row_seek_applies_the_same_slot_validation() + { + byte[] page = NewDataPage(rowCount: 2, firstOffset: 4000, secondOffset: 4050); + + Assert.Throws(() => + DataPage.TryReadRow(new PageBuffer(page, 7), Format, 1, out _, out _)); + } + + [Fact] + public void Zero_length_deleted_overflow_tombstone_remains_a_valid_slot_shape() + { + byte[] page = NewDataPage(rowCount: 2, firstOffset: 4000, secondOffset: 4000); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(Format.DataRowDirectoryOffset + 2, 2), + (ushort)(4000 | 0x8000 | 0x4000)); + + var dataPage = new DataPage(); + dataPage.Read(new PageBuffer(page, 7), Format); + + Assert.Equal(new RowSlot(4000, 0, IsDeleted: true, HasOverflow: true), dataPage.Rows[1]); + } + + [Fact] + public void All_fixed_row_does_not_parse_fixed_bytes_as_a_variable_trailer() + { + ColumnDef column = FixedColumn(JetDataType.Int32, length: 4); + byte[] row = [1, 0, 0xFF, 0xFF, 0xFF, 0x7F, 1]; + + object?[] values = new RowDecoder([column], Format).Decode(row); + + Assert.Equal(int.MaxValue, values[0]); + } + + [Theory] + [InlineData("truncated-trailer")] + [InlineData("offset-table-before-row")] + [InlineData("nonmonotonic-offsets")] + [InlineData("short-fixed-scalar")] + [InlineData("missing-variable-slot")] + public void Malformed_rows_are_rejected_as_corruption(string corruption) + { + ColumnDef column; + byte[] row; + if (corruption == "short-fixed-scalar") + { + column = FixedColumn(JetDataType.Int32, length: 2); + row = [1, 0, 1, 2, 1]; + } + else + { + column = new ColumnDef + { + Name = "V", Type = JetDataType.Text, Index = 0, ColumnId = 0, + Length = 100, VariableIndex = 0, IsFixedLength = false, + }; + row = corruption switch + { + "truncated-trailer" => [1, 0, 1], + "offset-table-before-row" => [1, 0, 0, 0, 0, 0, 1, 0, 1], + "missing-variable-slot" => [1, 0, 2, 0, 0, 0, 1], + _ => [1, 0, 0x41, 0, 2, 0, 4, 0, 1, 0, 1], + }; + } + + Assert.Throws(() => new RowDecoder([column], Format).Decode(row)); + } + + [Fact] + public void Column_added_after_an_old_row_decodes_as_null_when_its_bitmap_bit_does_not_exist() + { + ColumnDef column = FixedColumn(JetDataType.Int32, length: 4, columnId: 8); + byte[] oldRow = [1, 0, 0]; + + object?[] values = new RowDecoder([column], Format).Decode(oldRow); + + Assert.Null(values[0]); + } + + [Fact] + public void First_variable_column_added_after_an_old_all_fixed_row_decodes_as_null() + { + var column = new ColumnDef + { + Name = "V", Type = JetDataType.Text, Index = 0, ColumnId = 8, + Length = 100, VariableIndex = 0, IsFixedLength = false, + }; + byte[] oldRow = [1, 0, 0]; + + object?[] values = new RowDecoder([column], Format).Decode(oldRow); + + Assert.Null(values[0]); + } + + private static byte[] NewDataPage(int rowCount, int firstOffset, int secondOffset) + { + var page = new byte[Format.PageSize]; + page[0] = (byte)PageType.DataPage; + page[1] = 1; + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(Format.DataRowCountOffset, 2), (ushort)rowCount); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(Format.DataRowDirectoryOffset, 2), (ushort)firstOffset); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(Format.DataRowDirectoryOffset + 2, 2), (ushort)secondOffset); + return page; + } + + private static ColumnDef FixedColumn(JetDataType type, int length, int columnId = 0) => new() + { + Name = "F", Type = type, Index = 0, ColumnId = columnId, + Length = length, FixedOffset = 0, IsFixedLength = true, + }; + + private static JetFormatBase OpenFormat() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + return db.Format; + } +} diff --git a/test/LibRed.Core.Tests/PageCacheTests.cs b/test/LibRed.Core.Tests/PageCacheTests.cs new file mode 100644 index 00000000..229cac00 --- /dev/null +++ b/test/LibRed.Core.Tests/PageCacheTests.cs @@ -0,0 +1,90 @@ +using LibRed.IO; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// The page cache is a single shared, write-through pool per physical file. These pin the property that +/// makes that design safe under the shared-file model (multiple channels open on one .accdb): a page one +/// channel has already cached must still reflect another channel's write. A naive per-channel cache would fail +/// the coherence test — the second channel would serve its own stale copy. +/// +public class PageCacheTests +{ + private static string CopyNorthwind(string tag) + { + string path = Path.Combine(Path.GetTempPath(), $"pagecache-{tag}-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + return path; + } + + [Fact] + public void A_second_channels_cached_page_reflects_the_first_channels_write() + { + string path = CopyNorthwind("coherence"); + try + { + using var writer = PageChannel.Open(path, readOnly: false); + using var reader = PageChannel.Open(path, readOnly: false); + + const int page = 1; // any existing non-page-0 page; we only compare raw bytes + byte[] original = reader.ReadPage(page).Span.ToArray(); // reader caches the current image + + byte[] mutated = original.ToArray(); + mutated[0x40] ^= 0xFF; // flip a byte well past the page header so nothing rejects the write + writer.WritePage(page, mutated); + + // The reader had this page cached from its earlier read. With a shared pool it now sees the write; + // with independent caches it would still return the stale `original`. + byte[] seen = reader.ReadPage(page).Span.ToArray(); + Assert.Equal(mutated, seen); + } + finally { File.Delete(path); } + } + + [Fact] + public void Rollback_restores_the_cached_image_not_just_the_disk() + { + string path = CopyNorthwind("rollback"); + try + { + using var ch = PageChannel.Open(path, readOnly: false); + const int page = 1; + byte[] original = ch.ReadPage(page).Span.ToArray(); + + ch.BeginTransaction(); + byte[] mutated = original.ToArray(); + mutated[0x40] ^= 0xFF; + ch.WritePage(page, mutated); + Assert.Equal(mutated, ch.ReadPage(page).Span.ToArray()); // read-your-writes within the txn + ch.RollbackTransaction(); + + // After rollback the pool must serve the pre-transaction bytes, not the rolled-back write. + Assert.Equal(original, ch.ReadPage(page).Span.ToArray()); + } + finally { File.Delete(path); } + } + + [Fact] + public void Reopening_after_the_last_channel_closes_reads_committed_bytes_from_disk() + { + string path = CopyNorthwind("reopen"); + try + { + const int page = 1; + byte[] mutated; + using (var ch = PageChannel.Open(path, readOnly: false)) + { + byte[] original = ch.ReadPage(page).Span.ToArray(); + mutated = original.ToArray(); + mutated[0x40] ^= 0xFF; + ch.WritePage(page, mutated); // write-through to disk; flushed on dispose + } + + // The pool was dropped when the last channel closed; a fresh open must re-read the committed image. + using var reopened = PageChannel.Open(path, readOnly: true); + Assert.Equal(mutated, reopened.ReadPage(page).Span.ToArray()); + } + finally { File.Delete(path); } + } +} diff --git a/test/LibRed.Core.Tests/PageChannelTests.cs b/test/LibRed.Core.Tests/PageChannelTests.cs new file mode 100644 index 00000000..d48bc71a --- /dev/null +++ b/test/LibRed.Core.Tests/PageChannelTests.cs @@ -0,0 +1,187 @@ +using LibRed.IO; +using Xunit; + +namespace LibRed.Core.Tests; + +public class PageChannelTests +{ + [Fact] + public void WritePage_beyond_the_end_grows_the_file_and_zero_fills_the_gap() + { + // A page allocated from the global free-pages map can lie past the physical end of a small + // file (allocation defers the write); writing it must grow the file rather than throw. + string path = Path.Combine(Path.GetTempPath(), $"libred-grow-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var channel = PageChannel.Open(path, readOnly: false); + int before = channel.PageCount; + + var page = new byte[channel.PageSize]; + page[0] = 0xAB; + channel.WritePage(before + 2, page); // two pages past the end + + Assert.Equal(before + 3, channel.PageCount); + Assert.Equal(0xAB, channel.ReadPage(before + 2).Span[0]); + Assert.Equal(0, channel.ReadPage(before + 1).Span[0]); // the skipped page is zero-filled + } + finally { File.Delete(path); } + } + + [Fact] + public void RollbackTransaction_restores_modified_pages_and_drops_allocated_ones() + { + // The undo log is what gives EF Core's shared-database tests their per-test isolation: a + // rolled-back transaction must leave the file byte-for-byte as it was before it began. + string path = Path.Combine(Path.GetTempPath(), $"libred-rollback-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + byte[] before = File.ReadAllBytes(path); // baseline captured before opening (channel takes an exclusive lock) + int pagesBefore; + using (var channel = PageChannel.Open(path, readOnly: false)) + { + pagesBefore = channel.PageCount; + + channel.BeginTransaction(); + + // Modify an existing page... + var page = channel.ReadPage(1).Span.ToArray(); + page[10] ^= 0xFF; + channel.WritePage(1, page); + + // ...and allocate a couple of new ones. + channel.AllocatePage(); + channel.WritePage(channel.PageCount, new byte[channel.PageSize]); + Assert.True(channel.PageCount > pagesBefore); + Assert.True(channel.InTransaction); + + channel.RollbackTransaction(); + + Assert.False(channel.InTransaction); + Assert.Equal(pagesBefore, channel.PageCount); + } + + Assert.Equal(before, File.ReadAllBytes(path)); // byte-for-byte identical to pre-transaction + } + finally { File.Delete(path); } + } + + [Fact] + public void CommitTransaction_keeps_the_writes() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-commit-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var channel = PageChannel.Open(path, readOnly: false); + var page = channel.ReadPage(1).Span.ToArray(); + page[10] ^= 0xFF; + + channel.BeginTransaction(); + channel.WritePage(1, page); + channel.CommitTransaction(); + + Assert.False(channel.InTransaction); + Assert.Equal(page[10], channel.ReadPage(1).Span[10]); // change survived the commit + } + finally { File.Delete(path); } + } + + [Fact] + public void RollbackToSavepoint_keeps_pre_savepoint_writes_undoes_later_ones_and_drops_allocations() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-sp-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var channel = PageChannel.Open(path, readOnly: false); + byte original2 = channel.ReadPage(2).Span[10]; + + channel.BeginTransaction(); + + // Before the savepoint: change page 1. + var p1 = channel.ReadPage(1).Span.ToArray(); + p1[10] = 0x11; + channel.WritePage(1, p1); + + Savepoint sp = channel.CreateSavepoint(); + int pagesAtSavepoint = channel.PageCount; + + // After the savepoint: change page 2 and allocate a page. + var p2 = channel.ReadPage(2).Span.ToArray(); + p2[10] = 0x22; + channel.WritePage(2, p2); + channel.WritePage(channel.PageCount, new byte[channel.PageSize]); + Assert.True(channel.PageCount > pagesAtSavepoint); + + channel.RollbackToSavepoint(sp); + + Assert.True(channel.InTransaction); // savepoint rollback leaves the txn open + Assert.Equal(0x11, channel.ReadPage(1).Span[10]); // pre-savepoint write kept + Assert.Equal(original2, channel.ReadPage(2).Span[10]); // post-savepoint write undone + Assert.Equal(pagesAtSavepoint, channel.PageCount); // page allocated after the savepoint dropped + + channel.CommitTransaction(); + Assert.Equal(0x11, channel.ReadPage(1).Span[10]); // and the kept write survives commit + } + finally { File.Delete(path); } + } + + [Fact] + public void RollbackToSavepoint_restores_a_page_to_its_savepoint_state_not_transaction_start() + { + // A page written both before and after the savepoint must come back to its at-savepoint bytes, which + // is what the per-frame (not per-transaction) before-image snapshot guarantees. + string path = Path.Combine(Path.GetTempPath(), $"libred-sp2-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var channel = PageChannel.Open(path, readOnly: false); + channel.BeginTransaction(); + + var page = channel.ReadPage(1).Span.ToArray(); + page[10] = 0x11; + channel.WritePage(1, page); + + Savepoint sp = channel.CreateSavepoint(); + + page[10] = 0x22; + channel.WritePage(1, page); + + channel.RollbackToSavepoint(sp); + + Assert.Equal(0x11, channel.ReadPage(1).Span[10]); // restored to the savepoint state, not the original + } + finally { File.Delete(path); } + } + + [Fact] + public void ReleaseSavepoint_merges_into_the_parent_so_an_outer_rollback_still_undoes_it() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-sp3-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var channel = PageChannel.Open(path, readOnly: false); + byte original = channel.ReadPage(1).Span[10]; + + channel.BeginTransaction(); + Savepoint outer = channel.CreateSavepoint(); + + var page = channel.ReadPage(1).Span.ToArray(); + page[10] = 0x11; + channel.WritePage(1, page); + + Savepoint inner = channel.CreateSavepoint(); + page[10] = 0x22; + channel.WritePage(1, page); + channel.ReleaseSavepoint(inner); // inner's change folds into the outer frame + + channel.RollbackToSavepoint(outer); // undoes both the outer and the released-inner writes + + Assert.Equal(original, channel.ReadPage(1).Span[10]); + } + finally { File.Delete(path); } + } +} diff --git a/test/LibRed.Core.Tests/PageChannelWriteTests.cs b/test/LibRed.Core.Tests/PageChannelWriteTests.cs new file mode 100644 index 00000000..a262eba0 --- /dev/null +++ b/test/LibRed.Core.Tests/PageChannelWriteTests.cs @@ -0,0 +1,116 @@ +using LibRed.IO; +using Xunit; + +namespace LibRed.Core.Tests; + +public class PageChannelWriteTests +{ + private static string CopyToTemp() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-write-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + return path; + } + + // A Jet/ACE file is a shared-file database, so more than one channel must be able to hold it open at + // once (EF's test infrastructure keeps a long-lived store connection AND opens per-context connections + // to the same .accdb). An exclusive open used to throw IOException the moment the second one appeared. + [Fact] + public void Multiple_channels_can_open_the_same_file_at_once() + { + string path = CopyToTemp(); + try + { + using var writer = PageChannel.Open(path, readOnly: false); + using var reader = PageChannel.Open(path, readOnly: true); // used to throw here (FileShare.None) + + // A committed write from one handle is visible to the other (no stale page cache). + byte[] page = writer.ReadPage(5).Span.ToArray(); + page[10] ^= 0xFF; + writer.WritePage(5, page); + Assert.Equal(page, reader.ReadPage(5).Span.ToArray()); + } + finally { File.Delete(path); } + } + + [Fact] + public void Rewriting_a_page_unchanged_is_a_no_op_byte_for_byte() + { + string path = CopyToTemp(); + try + { + byte[] original; + using (var channel = PageChannel.Open(path, readOnly: false)) + { + var page = channel.ReadPage(5); + original = page.Span.ToArray(); + channel.WritePage(5, original); // identity write + } + + using (var channel = PageChannel.Open(path, readOnly: true)) + Assert.Equal(original, channel.ReadPage(5).Span.ToArray()); + } + finally { File.Delete(path); } + } + + [Fact] + public void Written_bytes_survive_a_reopen() + { + string path = CopyToTemp(); + try + { + using (var channel = PageChannel.Open(path, readOnly: false)) + { + var buffer = channel.ReadPage(5).Span.ToArray(); + buffer[100] = 0xAB; + buffer[101] = 0xCD; + channel.WritePage(5, buffer); + } + + using (var channel = PageChannel.Open(path, readOnly: true)) + { + var reread = channel.ReadPage(5).Span; + Assert.Equal(0xAB, reread[100]); + Assert.Equal(0xCD, reread[101]); + } + } + finally { File.Delete(path); } + } + + [Fact] + public void AllocatePage_grows_the_file_by_one_zeroed_page() + { + string path = CopyToTemp(); + try + { + int allocated; + int countBefore; + using (var channel = PageChannel.Open(path, readOnly: false)) + { + countBefore = channel.PageCount; + allocated = channel.AllocatePage(); + Assert.Equal(countBefore, allocated); + Assert.Equal(countBefore + 1, channel.PageCount); + } + + using (var channel = PageChannel.Open(path, readOnly: true)) + { + Assert.Equal(countBefore + 1, channel.PageCount); + Assert.All(channel.ReadPage(allocated).Span.ToArray(), b => Assert.Equal(0, b)); + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Read_only_channel_refuses_writes() + { + string path = CopyToTemp(); + try + { + using var channel = PageChannel.Open(path, readOnly: true); + Assert.Throws(() => channel.WritePage(5, new byte[channel.PageSize])); + } + finally { File.Delete(path); } + } +} diff --git a/test/LibRed.Core.Tests/PrimaryKeyNameAccessTests.cs b/test/LibRed.Core.Tests/PrimaryKeyNameAccessTests.cs new file mode 100644 index 00000000..0bc8ab0e --- /dev/null +++ b/test/LibRed.Core.Tests/PrimaryKeyNameAccessTests.cs @@ -0,0 +1,56 @@ +using System.Data; +using System.Data.OleDb; +using LibRed; +using LibRed.Storage; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Ground truth: when LibRed creates a table whose primary key carries a name, Access names the primary-key +/// index after it and reports it through the Primary_Keys schema — so the name round-trips (this is what the +/// EF Core scaffolder reads). When unnamed, LibRed writes its stable "PrimaryKey" fallback, which Access reads +/// back unchanged (ACE creating an unnamed PK via SQL would instead generate a random "Index_"). +/// +public class PrimaryKeyNameAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + private static string AcePrimaryKeyName(OleDbConnection conn, string table) + { + DataTable pk = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, [null, null, table])!; + return (string)pk.Rows[0]["PK_NAME"]; + } + + [Theory] + [InlineData("PK__T", "PK__T")] + [InlineData(null, "PrimaryKey")] + public void Access_reports_the_libred_primary_key_name(string? pkName, string expectedName) + { + string path = Path.Combine(Path.GetTempPath(), $"pkname-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("T", + [new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + primaryKeyName: pkName); + + using var conn = OpenOleDb(path); + Assert.Equal(expectedName, AcePrimaryKeyName(conn, "T")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/ProcedureParameterAccessTests.cs b/test/LibRed.Core.Tests/ProcedureParameterAccessTests.cs new file mode 100644 index 00000000..4ac6a50e --- /dev/null +++ b/test/LibRed.Core.Tests/ProcedureParameterAccessTests.cs @@ -0,0 +1,125 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A parameterized stored query (CREATE PROCEDURE) — Northwind's "Sales by Year". Access stores each +/// declared parameter as an Attribute=2 MSysQueries row (Name1 = name, Flag = Jet type code, e.g. +/// 8 = DateTime). Access runs it and honours the supplied parameter values. +/// +public class ProcedureParameterAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + [Fact] + public void Access_runs_a_parameterized_procedure() + { + string path = Path.Combine(Path.GetTempPath(), $"proc-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateView("Orders in range", new ViewSpec( + Distinct: false, + Columns: [new ViewColumnSpec("Orders.OrderID", null)], + Tables: [new ViewTableSpec("Orders", null)], + Joins: [], + Where: "Orders.OrderDate Between [Beginning Date] And [Ending Date]", + GroupBy: null, + Parameters: + [ + new ViewParameterSpec("Beginning Date", (byte)JetDataType.DateTime), + new ViewParameterSpec("Ending Date", (byte)JetDataType.DateTime), + ])); + + using var conn = OpenOleDb(path); + + // Ground truth: the same date filter run directly against Orders. + using var direct = conn.CreateCommand(); + direct.CommandText = "SELECT COUNT(*) FROM Orders WHERE OrderDate Between #1/1/1997# And #12/31/1997#"; + int expected = Convert.ToInt32(direct.ExecuteScalar()); + Assert.True(expected > 0); + + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM [Orders in range]"; + cmd.Parameters.Add(new OleDbParameter("Beginning Date", new DateTime(1997, 1, 1))); + cmd.Parameters.Add(new OleDbParameter("Ending Date", new DateTime(1997, 12, 31))); + int count = Convert.ToInt32(cmd.ExecuteScalar()); + Assert.Equal(expected, count); // the procedure honours the supplied parameter values + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // "Employee Sales by Country" shape: @-parameters + a nested join onto the "Order Subtotals" view. + // The params are stored bare (no @); the WHERE keeps @refs. Access runs it honouring supplied values. + [Fact] + public void Access_runs_a_nested_join_at_parameter_procedure() + { + string path = Path.Combine(Path.GetTempPath(), $"empsales-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateView("Emp Sales By Country Test", new ViewSpec( + Distinct: false, + Columns: + [ + new ViewColumnSpec("Employees.Country", null), + new ViewColumnSpec("Orders.OrderID", null), + new ViewColumnSpec("[Order Subtotals].Subtotal", "SaleAmount"), + ], + Tables: + [ + new ViewTableSpec("Employees", null), + new ViewTableSpec("Orders", null), + new ViewTableSpec("Order Subtotals", null), + ], + Joins: + [ + new ViewJoinSpec(ViewJoinType.Inner, "Orders.OrderID = [Order Subtotals].OrderID", "Orders", "Order Subtotals"), + new ViewJoinSpec(ViewJoinType.Inner, "Employees.EmployeeID = Orders.EmployeeID", "Employees", "Orders"), + ], + Where: "Orders.ShippedDate Between @Beginning_Date And @Ending_Date", + GroupBy: null, + Parameters: + [ + new ViewParameterSpec("Beginning_Date", (byte)JetDataType.DateTime), + new ViewParameterSpec("Ending_Date", (byte)JetDataType.DateTime), + ])); + + using var conn = OpenOleDb(path); + + using var direct = conn.CreateCommand(); + direct.CommandText = + "SELECT COUNT(*) FROM Employees INNER JOIN " + + "(Orders INNER JOIN [Order Subtotals] ON Orders.OrderID = [Order Subtotals].OrderID) " + + "ON Employees.EmployeeID = Orders.EmployeeID " + + "WHERE Orders.ShippedDate Between #1/1/1997# And #12/31/1997#"; + int expected = Convert.ToInt32(direct.ExecuteScalar()); + Assert.True(expected > 0); + + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT COUNT(*) FROM [Emp Sales By Country Test]"; + cmd.Parameters.Add(new OleDbParameter("Beginning_Date", new DateTime(1997, 1, 1))); + cmd.Parameters.Add(new OleDbParameter("Ending_Date", new DateTime(1997, 12, 31))); + Assert.Equal(expected, Convert.ToInt32(cmd.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/PropertyBlobCorruptionTests.cs b/test/LibRed.Core.Tests/PropertyBlobCorruptionTests.cs new file mode 100644 index 00000000..580ae907 --- /dev/null +++ b/test/LibRed.Core.Tests/PropertyBlobCorruptionTests.cs @@ -0,0 +1,84 @@ +using System.Buffers.Binary; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +public class PropertyBlobCorruptionTests +{ + [Theory] + [InlineData("short-block")] + [InlineData("block-past-end")] + [InlineData("odd-name-length")] + [InlineData("short-owner-record")] + [InlineData("owner-name-past-record")] + [InlineData("short-entry")] + [InlineData("value-past-entry")] + [InlineData("bad-name-index")] + [InlineData("trailing-byte")] + public void Malformed_property_blob_is_rejected(string corruption) + { + byte[] blob = PropertyBlob.Write([new("A", "N", "V")]); + int ownerBlock = 4 + BinaryPrimitives.ReadInt32LittleEndian(blob.AsSpan(4, 4)); + int ownerBody = ownerBlock + 6; + int entry = ownerBody + BinaryPrimitives.ReadUInt16LittleEndian(blob.AsSpan(ownerBody, 2)); + + switch (corruption) + { + case "short-block": + BinaryPrimitives.WriteInt32LittleEndian(blob.AsSpan(4, 4), 5); + break; + case "block-past-end": + BinaryPrimitives.WriteInt32LittleEndian(blob.AsSpan(4, 4), blob.Length); + break; + case "odd-name-length": + BinaryPrimitives.WriteUInt16LittleEndian(blob.AsSpan(10, 2), 1); + break; + case "short-owner-record": + BinaryPrimitives.WriteUInt16LittleEndian(blob.AsSpan(ownerBody, 2), 5); + break; + case "owner-name-past-record": + BinaryPrimitives.WriteUInt16LittleEndian(blob.AsSpan(ownerBody + 4, 2), 100); + break; + case "short-entry": + BinaryPrimitives.WriteUInt16LittleEndian(blob.AsSpan(entry, 2), 7); + break; + case "value-past-entry": + BinaryPrimitives.WriteUInt16LittleEndian(blob.AsSpan(entry + 6, 2), 100); + break; + case "bad-name-index": + BinaryPrimitives.WriteUInt16LittleEndian(blob.AsSpan(entry + 4, 2), 1); + break; + case "trailing-byte": + blob = [.. blob, 0xFF]; + break; + } + + Assert.Throws(() => PropertyBlob.Read(blob)); + } + + [Fact] + public void Serializer_rejects_values_that_do_not_fit_16_bit_fields() + { + Assert.Throws(() => + PropertyBlob.Write([new("A", new string('n', 32768), "V")])); + Assert.Throws(() => + PropertyBlob.Write([new(new string('o', 32768), "N", "V")])); + Assert.Throws(() => + PropertyBlob.Write([new("A", "N", "", JetDataType.Ole, new byte[65528])])); + } + + [Fact] + public void Checked_parser_preserves_valid_add_remove_and_round_trip_behavior() + { + byte[] blob = PropertyBlob.Write([new("A", "N", "V")]); + blob = PropertyBlob.AddColumnProperties(blob, "B", [PropertyBlob.Bool("B", PropertyBlob.RequiredProperty, true)]); + Assert.Equal(2, PropertyBlob.Read(blob).Count); + + blob = PropertyBlob.RemoveOwner(blob, "A"); + PropertyBlob.Property property = Assert.Single(PropertyBlob.Read(blob)); + Assert.Equal("B", property.Owner); + Assert.Equal(PropertyBlob.RequiredProperty, property.Name); + Assert.Equal("1", property.Value); + } +} diff --git a/test/LibRed.Core.Tests/PropertyBlobRoundTripTests.cs b/test/LibRed.Core.Tests/PropertyBlobRoundTripTests.cs new file mode 100644 index 00000000..cdc254fe --- /dev/null +++ b/test/LibRed.Core.Tests/PropertyBlobRoundTripTests.cs @@ -0,0 +1,51 @@ +using System.Text; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// The LvProp property blob must round-trip EVERY property faithfully — including ones LibRed does not model +// (a numeric DecimalPlaces, a designer ValidationRule/Format) — because an ALTER that edits a table's defaults +// or nullability rewrites the whole blob (TableCreator.MutateLvPropForColumn does Read -> Write). Property.RawValue +// and IsDdl preserve each entry's exact stored value bytes and DDL classification, so an unmodelled property +// survives rather than being mangled or silently converted into a definition-protected property. +public class PropertyBlobRoundTripTests +{ + [Fact] + public void Read_write_preserves_an_unmodelled_numeric_property_and_survives_an_edit() + { + var original = new List + { + new("Price", PropertyBlob.DefaultValueProperty, "0", JetDataType.Memo), // modelled + new("Price", "DecimalPlaces", "", JetDataType.Byte, [2]), // unmodelled, numeric + new("Price", "Format", "Currency", JetDataType.Text, Encoding.Unicode.GetBytes("Currency")), // unmodelled, text + new("Price", "Caption", "Retail price", JetDataType.Memo, + Encoding.Unicode.GetBytes("Retail price")) { IsDdl = false }, // ordinary designer property + PropertyBlob.Bool("Price", PropertyBlob.RequiredProperty, true), // modelled + }; + byte[] blob = PropertyBlob.Write(original); + + // Read -> Write is a byte-faithful identity (nothing is corrupted or dropped). + byte[] roundTripped = PropertyBlob.Write([.. PropertyBlob.Read(blob)]); + Assert.Equal(blob, roundTripped); + + // Editing the modelled DefaultValue (as ALTER COLUMN SET DEFAULT does) must not disturb the others. + var props = PropertyBlob.Read(blob).ToList(); + props.RemoveAll(p => p.Owner == "Price" && p.Name == PropertyBlob.DefaultValueProperty); + props.Add(new PropertyBlob.Property("Price", PropertyBlob.DefaultValueProperty, "42")); + var after = PropertyBlob.Read(PropertyBlob.Write(props)); + + PropertyBlob.Property decimalPlaces = Assert.Single(after, p => p.Name == "DecimalPlaces"); + Assert.Equal(JetDataType.Byte, decimalPlaces.Type); + Assert.Equal(new byte[] { 2 }, decimalPlaces.RawValue); // the exact numeric byte, not UTF-16 junk + + PropertyBlob.Property format = Assert.Single(after, p => p.Name == "Format"); + Assert.Equal("Currency", format.Value); + + PropertyBlob.Property caption = Assert.Single(after, p => p.Name == "Caption"); + Assert.False(caption.IsDdl); + Assert.Equal(Encoding.Unicode.GetBytes("Retail price"), caption.RawValue); + + Assert.Equal("42", Assert.Single(after, p => p.Name == PropertyBlob.DefaultValueProperty).Value); + } +} diff --git a/test/LibRed.Core.Tests/PropertyBlobTests.cs b/test/LibRed.Core.Tests/PropertyBlobTests.cs new file mode 100644 index 00000000..49d00dc5 --- /dev/null +++ b/test/LibRed.Core.Tests/PropertyBlobTests.cs @@ -0,0 +1,87 @@ +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +public class PropertyBlobTests +{ + // The exact LvProp blob ACE writes for CREATE TABLE T (Id INTEGER, Age INTEGER DEFAULT 42, + // Nm TEXT(50) DEFAULT 'hi') — captured by dumping the MSysObjects row. + private static readonly byte[] AceBlob = + [ + 0x4D, 0x52, 0x32, 0x00, 0x20, 0x00, 0x00, 0x00, 0x80, 0x00, 0x18, 0x00, 0x44, 0x00, 0x65, 0x00, + 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, + 0x75, 0x00, 0x65, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x41, 0x00, 0x67, 0x00, 0x65, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x04, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x4E, 0x00, + 0x6D, 0x00, 0x10, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x08, 0x00, 0x27, 0x00, 0x68, 0x00, 0x69, 0x00, + 0x27, 0x00, + ]; + + [Fact] + public void Write_reproduces_the_ace_blob_byte_for_byte() + { + byte[] blob = PropertyBlob.Write( + [ + new("Age", PropertyBlob.DefaultValueProperty, "42"), + new("Nm", PropertyBlob.DefaultValueProperty, "'hi'"), + ]); + Assert.Equal(AceBlob, blob); + } + + [Fact] + public void ReadColumnDefaults_parses_the_ace_blob() + { + var defaults = PropertyBlob.ReadColumnDefaults(AceBlob); + Assert.Equal("42", defaults["Age"]); + Assert.Equal("'hi'", defaults["Nm"]); + Assert.False(defaults.ContainsKey("Id")); + } + + // The exact LvProp blob ACE writes for a table-level CHECK constraint: + // CREATE TABLE T (Id INTEGER, BirthDate DATETIME, CONSTRAINT CK_BD CHECK ([BirthDate] < NOW())). + private static readonly byte[] AceCheckBlob = + [ + 0x4D, 0x52, 0x32, 0x00, 0x28, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x43, 0x00, 0x68, 0x00, + 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, + 0x72, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x4A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x36, 0x00, + 0x43, 0x00, 0x4B, 0x00, 0x5F, 0x00, 0x42, 0x00, 0x44, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x42, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x68, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x5D, 0x00, 0x20, 0x00, 0x3C, 0x00, 0x20, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x57, 0x00, 0x28, 0x00, + 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, + ]; + + [Fact] + public void Write_reproduces_the_ace_check_blob_byte_for_byte() + { + byte[] blob = PropertyBlob.Write( + [ + new("", PropertyBlob.CheckConstraintsProperty, + PropertyBlob.WriteCheckList([("CK_BD", "[BirthDate] < NOW()")])), + ]); + Assert.Equal(AceCheckBlob, blob); + } + + [Fact] + public void ReadCheckConstraints_parses_the_ace_check_blob() + { + var checks = PropertyBlob.ReadCheckConstraints(AceCheckBlob); + var (name, expr) = Assert.Single(checks); + Assert.Equal("CK_BD", name); + Assert.Equal("[BirthDate] < NOW()", expr); + } + + [Fact] + public void ReadColumnDefaults_round_trips_written_blob() + { + byte[] blob = PropertyBlob.Write( + [ + new("A", PropertyBlob.DefaultValueProperty, "0"), + new("B", PropertyBlob.DefaultValueProperty, "-1"), + ]); + var defaults = PropertyBlob.ReadColumnDefaults(blob); + Assert.Equal("0", defaults["A"]); + Assert.Equal("-1", defaults["B"]); + } +} diff --git a/test/LibRed.Core.Tests/PropertyNamePoolOrderTests.cs b/test/LibRed.Core.Tests/PropertyNamePoolOrderTests.cs new file mode 100644 index 00000000..2184c603 --- /dev/null +++ b/test/LibRed.Core.Tests/PropertyNamePoolOrderTests.cs @@ -0,0 +1,95 @@ +using System.Buffers.Binary; +using System.Data.OleDb; +using System.Text; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful: the LvProp property-name pool is stored in FIRST-APPEARANCE order, not alphabetical. +// Proven against ACE with three names whose first-appearance order (Required, DefaultValue, CheckConstraints) +// is deliberately not alphabetical (which would be CheckConstraints, DefaultValue, Required). Guards against a +// future "tidy-up" that sorts the pool in PropertyBlob.Write (which uses Distinct() = first appearance). +public class PropertyNamePoolOrderTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + private static List ReadNamePool(byte[] blob) + { + var names = new List(); + int pos = 4; // 4-byte signature + while (pos + 6 <= blob.Length) + { + int len = BinaryPrimitives.ReadInt32LittleEndian(blob.AsSpan(pos, 4)); + ushort type = BinaryPrimitives.ReadUInt16LittleEndian(blob.AsSpan(pos + 4, 2)); + if (len < 6 || pos + len > blob.Length) break; + if (type == 0x0080) + { + int q = pos + 6, end = pos + len; + while (q + 2 <= end) + { + int nl = BinaryPrimitives.ReadUInt16LittleEndian(blob.AsSpan(q, 2)); q += 2; + if (q + nl > end) break; + names.Add(Encoding.Unicode.GetString(blob.AsSpan(q, nl))); q += nl; + } + } + pos += len; + } + return names; + } + + [Fact] + public void Ace_stores_the_name_pool_in_first_appearance_order_not_alphabetical() + { + string path = Path.Combine(Path.GetTempPath(), $"pnp-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + void Run(string sql) { using var c = conn.CreateCommand(); c.CommandText = sql; c.ExecuteNonQuery(); } + // R (NOT NULL) → Required first; D (DEFAULT) → DefaultValue; then a CHECK → CheckConstraints last. + Run("CREATE TABLE PN (R INT NOT NULL, D INT DEFAULT 7, CONSTRAINT PK_PN PRIMARY KEY (R))"); + Run("ALTER TABLE PN ADD CONSTRAINT CK_PN CHECK (R > 0)"); + } + + List pool; + using (var db = JetDatabase.Open(path, readOnly: true)) + { + int page = db.Catalog.FindTable("PN")!.DefinitionPage; + var msys = db.Catalog.FindTable("MSysObjects")!; + int idIdx = msys.FindColumn("Id")!.Index; + int lvIdx = msys.FindColumn("LvProp")!.Index; + pool = db.OpenTable("MSysObjects").Rows() + .Where(r => r[idIdx] is not null && Convert.ToInt32(r[idIdx]) == page) + .Select(r => ReadNamePool((byte[])r[lvIdx]!)) + .First(); + } + + // First-appearance order (what ACE wrote), NOT alphabetical. + Assert.Equal(["Required", "DefaultValue", "CheckConstraints"], pool); + Assert.NotEqual(pool.OrderBy(n => n, StringComparer.Ordinal).ToList(), pool); + + // LibRed's writer reproduces that same order from properties supplied in first-appearance order. + var libred = ReadNamePool(PropertyBlob.Write( + [ + PropertyBlob.Bool("R", PropertyBlob.RequiredProperty, true), + new PropertyBlob.Property("D", PropertyBlob.DefaultValueProperty, "7"), + new PropertyBlob.Property("", PropertyBlob.CheckConstraintsProperty, PropertyBlob.WriteCheckList([("CK_PN", "R > 0")])), + ])); + Assert.Equal(pool, libred); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/QualifiedStarViewAccessTests.cs b/test/LibRed.Core.Tests/QualifiedStarViewAccessTests.cs new file mode 100644 index 00000000..88acbdb6 --- /dev/null +++ b/test/LibRed.Core.Tests/QualifiedStarViewAccessTests.cs @@ -0,0 +1,58 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// Access runs a LibRed-created view whose projection uses a table-qualified star (Products.*), +/// stored as the column's verbatim Expression — the shape of Northwind's "Alphabetical list of products". +/// +public class QualifiedStarViewAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; } + } + Thread.Sleep(50); + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider opened the database.", last); + } + + [Fact] + public void Access_runs_a_qualified_star_view() + { + string path = Path.Combine(Path.GetTempPath(), $"qstar-view-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateView("MyAlph", new ViewSpec( + Distinct: false, + Columns: [new ViewColumnSpec("Products.*", null), new ViewColumnSpec("Categories.CategoryName", null)], + Tables: [new ViewTableSpec("Categories", null), new ViewTableSpec("Products", null)], + Joins: [new ViewJoinSpec(ViewJoinType.Inner, "Categories.CategoryID = Products.CategoryID", "Categories", "Products")], + Where: "(((Products.Discontinued)=0))")); + + using var conn = OpenOleDb(path); + using var count = conn.CreateCommand(); + count.CommandText = "SELECT COUNT(*) FROM MyAlph"; + Assert.Equal(69, Convert.ToInt32(count.ExecuteScalar())); // the not-discontinued products + + using var star = conn.CreateCommand(); + star.CommandText = "SELECT ProductName, CategoryName FROM MyAlph WHERE ProductID = 1"; + using var reader = star.ExecuteReader(); + Assert.True(reader.Read()); + Assert.False(reader.IsDBNull(0)); // Products.* projected ProductName + Assert.False(reader.IsDBNull(1)); // and the joined CategoryName + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/RandomAutoNumberAccessTests.cs b/test/LibRed.Core.Tests/RandomAutoNumberAccessTests.cs new file mode 100644 index 00000000..883de8bd --- /dev/null +++ b/test/LibRed.Core.Tests/RandomAutoNumberAccessTests.cs @@ -0,0 +1,125 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +// Byte-faithful check: a LibRed-written "Random" AutoNumber (COUNTER DEFAULT GenUniqueID()) is read by Access. +// ACE opens the file without repair, sees it as a proper AutoNumber (rejects a supplied Id, auto-assigns on +// insert), and continues issuing random-looking (non-sequential) ids of its own. +public class RandomAutoNumberAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + // A "Random" AutoNumber: an AutoNumber column carrying DefaultValue = GenUniqueID() (byte-identical to the + // UI-authored fixture database4.accdb). Created here via the Core CreateTable API with a column default. + private static void CreateRandomAutoNumberTable(string path) + { + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable("R", + [ + new ColumnSpec("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new ColumnSpec("Name", JetDataType.Text, 40, IsFixedLength: false), + ], + columnDefaults: [("Id", "GenUniqueID()")]); + } + + [Fact] + public void Access_reads_a_libred_written_random_autonumber_and_continues_it() + { + string path = Path.Combine(Path.GetTempPath(), $"rand-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + CreateRandomAutoNumberTable(path); + + using var conn = OpenOleDb(path); + + // ACE treats it as an AutoNumber: on a bare INSERT it assigns the Id itself. + void Insert(string n) { using var c = conn.CreateCommand(); c.CommandText = $"INSERT INTO R (Name) VALUES ('{n}')"; c.ExecuteNonQuery(); } + Insert("a"); Insert("b"); Insert("c"); + + var ids = new List(); + using (var q = conn.CreateCommand()) + { + q.CommandText = "SELECT Id FROM R"; + using var r = q.ExecuteReader(); + while (r.Read()) ids.Add(Convert.ToInt32(r[0])); + } + + // ACE issues its own random (non-sequential, non-zero, distinct) ids into LibRed's table. + Assert.Equal(3, ids.Count); + Assert.Equal(3, ids.Distinct().Count()); + Assert.DoesNotContain(0, ids); + Assert.False(ids.Zip(ids.Skip(1)).All(p => p.Second - p.First == 1), "ids should not be sequential"); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_reads_a_libred_written_plain_long_genuniqueid_default_and_applies_it() + { + string path = Path.Combine(Path.GetTempPath(), $"plain-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("R", + [ + new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("V", JetDataType.Int32, 4, IsFixedLength: true), + ], + primaryKey: ["K"], + columnDefaults: [("V", "GenUniqueID()")]); + + using var conn = OpenOleDb(path); + void Insert(int k) { using var c = conn.CreateCommand(); c.CommandText = $"INSERT INTO R (K) VALUES ({k})"; c.ExecuteNonQuery(); } + Insert(1); Insert(2); Insert(3); + + var vs = new List(); + using (var q = conn.CreateCommand()) + { + q.CommandText = "SELECT V FROM R"; + using var r = q.ExecuteReader(); + while (r.Read()) vs.Add(Convert.ToInt32(r[0])); + } + + // ACE opened the LibRed-written file and applied the GenUniqueID() default itself: random, distinct. + Assert.Equal(3, vs.Count); + Assert.Equal(3, vs.Distinct().Count()); + Assert.DoesNotContain(0, vs); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Random_autonumber_descriptor_round_trips_through_libred() + { + string path = Path.Combine(Path.GetTempPath(), $"rand-desc-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + CreateRandomAutoNumberTable(path); + + // Read back through LibRed — same shape as the UI-authored fixture (database4.accdb): + // an AutoNumber column carrying DefaultValue = GenUniqueID(). + using var reopened = JetDatabase.Open(path); + var col = reopened.Catalog.UserTables.Single(t => t.Name == "R").Columns.Single(c => c.Name == "Id"); + Assert.True(col.IsAutoNumber); + Assert.True(col.IsRandomAutoNumber); + Assert.Equal("GenUniqueID()", col.DefaultValue); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/RefActionAccessTests.cs b/test/LibRed.Core.Tests/RefActionAccessTests.cs new file mode 100644 index 00000000..29856a8f --- /dev/null +++ b/test/LibRed.Core.Tests/RefActionAccessTests.cs @@ -0,0 +1,54 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A LibRed-written ON DELETE SET NULL relationship (grbit 0x2000) is byte-faithful: Access reads it and +/// applies the SET NULL itself when it deletes the parent. +/// +public class RefActionAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No provider"); + } + + [Fact] + public void Access_applies_a_libred_written_on_delete_set_null() + { + string path = Path.Combine(Path.GetTempPath(), $"ri-ace-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("P", [new("Id", JetDataType.Int32, 4, IsFixedLength: true)], primaryKey: ["Id"]); + db.CreateTable("C", + [new("Id", JetDataType.Int32, 4, IsFixedLength: true), new("ParentId", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"], + relationships: [new RelationshipSpec("FK_C", "P", [("ParentId", "Id")], + IsEnforced: true, CascadeUpdate: false, CascadeDelete: false, DeleteSetNull: true)]); + + var p = db.OpenTable("P"); p.Insert([1]); + var c = db.OpenTable("C"); c.Insert([100, 1]); c.Insert([101, 1]); + } + + using var conn = OpenOleDb(path); + using (var cmd = conn.CreateCommand()) + { cmd.CommandText = "DELETE FROM P WHERE Id = 1"; Assert.Equal(1, cmd.ExecuteNonQuery()); } // ACE applies SET NULL + using (var cmd = conn.CreateCommand()) + { cmd.CommandText = "SELECT COUNT(*) FROM C"; Assert.Equal(2, Convert.ToInt32(cmd.ExecuteScalar())); } // children kept + using (var cmd = conn.CreateCommand()) + { cmd.CommandText = "SELECT COUNT(*) FROM C WHERE ParentId IS NULL"; Assert.Equal(2, Convert.ToInt32(cmd.ExecuteScalar())); } // both nulled + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/RequiredColumnTests.cs b/test/LibRed.Core.Tests/RequiredColumnTests.cs new file mode 100644 index 00000000..8409cdb2 --- /dev/null +++ b/test/LibRed.Core.Tests/RequiredColumnTests.cs @@ -0,0 +1,117 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// NOT NULL (Required) columns: Access stores a boolean Required property per column in the LvProp +/// blob (absent for a nullable column). LibRed writes it byte-faithfully, reads it back onto +/// , and ACE enforces it on a LibRed-created table. +/// +public class RequiredColumnTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No provider"); + } + + private const string Ddl = "CREATE TABLE T (Id counter PRIMARY KEY, Req int NOT NULL, Opt int, Def int DEFAULT 7 NOT NULL)"; + + // The LibRed CreateTable equivalent of Ddl. + private static void CreateViaLibRed(string path) + { + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable("T", + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new("Req", JetDataType.Int32, 4, IsFixedLength: true, IsNullable: false), + new("Opt", JetDataType.Int32, 4, IsFixedLength: true), + new("Def", JetDataType.Int32, 4, IsFixedLength: true, IsNullable: false), + ], + primaryKey: ["Id"], + columnDefaults: [("Def", "7")]); + } + + private static byte[] ReadLvProp(string path, string table) + { + using var db = JetDatabase.Open(path); + var msys = db.OpenTable("MSysObjects"); + int nameI = msys.Definition.FindColumn("Name")!.Index; + int lvpI = msys.Definition.FindColumn("LvProp")!.Index; + foreach (var row in msys.Rows()) + if (row[nameI] as string == table && row[lvpI] is byte[] blob) + return blob; + return []; + } + + [Fact] + public void Required_property_blob_matches_access_byte_for_byte() + { + string acePath = Path.Combine(Path.GetTempPath(), $"req-ace-{Guid.NewGuid():N}.accdb"); + string libPath = Path.Combine(Path.GetTempPath(), $"req-lib-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, acePath); + File.Copy(TestDatabases.NorthwindAccdb, libPath); + try + { + using (var conn = OpenOleDb(acePath)) + { using var c = conn.CreateCommand(); c.CommandText = Ddl; c.ExecuteNonQuery(); } + CreateViaLibRed(libPath); + + byte[] ace = ReadLvProp(acePath, "T"); + byte[] lib = ReadLvProp(libPath, "T"); + Assert.True(ace.AsSpan().SequenceEqual(lib), + $"ace={Convert.ToHexString(ace)}\nlib={Convert.ToHexString(lib)}"); + } + finally { foreach (var p in new[] { acePath, libPath }) try { File.Delete(p); } catch (IOException) { } } + } + + [Fact] + public void Libred_reads_required_back_as_not_nullable() + { + string path = Path.Combine(Path.GetTempPath(), $"req-read-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { using var c = conn.CreateCommand(); c.CommandText = Ddl; c.ExecuteNonQuery(); } + + using var db = JetDatabase.Open(path); + var def = db.OpenTable("T").Definition; + Assert.False(def.FindColumn("Req")!.IsNullable); + Assert.False(def.FindColumn("Def")!.IsNullable); + Assert.True(def.FindColumn("Opt")!.IsNullable); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_enforces_required_on_a_libred_created_table() + { + string path = Path.Combine(Path.GetTempPath(), $"req-enf-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + CreateViaLibRed(path); + using var conn = OpenOleDb(path); + + // Omitting the required Req column: Access rejects it (proving our Required property "took"). + using (var c = conn.CreateCommand()) + { + c.CommandText = "INSERT INTO T (Opt) VALUES (5)"; + var ex = Assert.Throws(() => c.ExecuteNonQuery()); + Assert.Contains("Req", ex.Message); + } + // Providing it succeeds (Def takes its default). + using (var c = conn.CreateCommand()) + { c.CommandText = "INSERT INTO T (Req) VALUES (5)"; Assert.Equal(1, c.ExecuteNonQuery()); } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/RowCodecGappedIdTests.cs b/test/LibRed.Core.Tests/RowCodecGappedIdTests.cs new file mode 100644 index 00000000..e819cc02 --- /dev/null +++ b/test/LibRed.Core.Tests/RowCodecGappedIdTests.cs @@ -0,0 +1,52 @@ +using System.Buffers.Binary; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +// The row's leading count and null-bitmap width are (max column id + 1), NOT the live column count — they +// diverge once ids have a gap (a burned type-change id, or a DROP COLUMN gap). Verified vs ACE (spec §5, +// AceModifyByteDiffProbe). These exercise that gapped-id case directly, which no contiguous-id table can. +public class RowCodecGappedIdTests +{ + private static List Int32Cols(params (string Name, int Id, int FixedOffset)[] cols) => + cols.Select((c, i) => new ColumnDef + { + Name = c.Name, Type = JetDataType.Int32, Index = i, ColumnId = c.Id, + Length = 4, FixedOffset = c.FixedOffset, IsFixedLength = true, + }).ToList(); + + [Fact] + public void Count_and_null_bitmap_use_max_id_plus_one_with_dead_id_bits_set() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb, readOnly: true); + + // Three live columns, id 1 is a DEAD gap (as a burned type-change would leave: ids 0, 2, 3). + var cols = Int32Cols(("A", 0, 0), ("B", 2, 4), ("C", 3, 8)); + byte[] row = new RowEncoder(cols, db.Format).Encode([10, 20, 30]); + + // Leading count = max id + 1 = 4 (NOT the live count 3). + Assert.Equal(4, BinaryPrimitives.ReadUInt16LittleEndian(row)); + // 1-byte null bitmap: live ids 0,2,3 present AND the dead id 1 present too → 0x0F. + Assert.Equal(0x0F, row[^1]); + // Round-trips (the decoder sizes the bitmap from the stored count, not the live count). + Assert.Equal(new object?[] { 10, 20, 30 }, new RowDecoder(cols, db.Format).Decode(row)); + } + + [Fact] + public void A_null_column_past_the_live_count_still_reads_null() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb, readOnly: true); + + // Two live columns with ids 0 and 3 (ids 1,2 dead); B (id 3) is null — its bit is beyond the live + // count of 2, which is exactly the case that read back null before the fix. + var cols = Int32Cols(("A", 0, 0), ("B", 3, 4)); + byte[] row = new RowEncoder(cols, db.Format).Encode([7, null]); + + Assert.Equal(4, BinaryPrimitives.ReadUInt16LittleEndian(row)); // count = max id + 1 + Assert.Equal(0x07, row[^1]); // A(0)+dead1+dead2 present, B(3) null + Assert.Equal(new object?[] { 7, null }, new RowDecoder(cols, db.Format).Decode(row)); + } +} diff --git a/test/LibRed.Core.Tests/RowDecoderTests.cs b/test/LibRed.Core.Tests/RowDecoderTests.cs new file mode 100644 index 00000000..080ca0fe --- /dev/null +++ b/test/LibRed.Core.Tests/RowDecoderTests.cs @@ -0,0 +1,59 @@ +using LibRed; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class RowDecoderTests +{ + private static List DecodeInlineRows(JetDatabase db, int dataPage, out IReadOnlyList columns) + { + var tdef = db.ReadTableDefinition(2); // MSysObjects schema + columns = tdef.Columns; + var decoder = new RowDecoder(columns, db.Format); + var page = db.ReadDataPage(dataPage); + + var rows = new List(); + for (int i = 0; i < page.RowCount; i++) + { + var slot = page.Rows[i]; + if (slot.IsDeleted || slot.HasOverflow) continue; + rows.Add(decoder.Decode(page.GetRow(i))); + } + return rows; + } + + [Fact] + public void Decodes_MSysObjects_rows_into_clr_values() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + var rows = DecodeInlineRows(db, 17, out var columns); + + int idIdx = columns.First(c => c.Name == "Id").Index; + int typeIdx = columns.First(c => c.Name == "Type").Index; + int nameIdx = columns.First(c => c.Name == "Name").Index; + + Assert.NotEmpty(rows); + Assert.All(rows, r => + { + Assert.IsType(r[idIdx]); // Id is Long (Int32) + Assert.IsType(r[typeIdx]); // Type is Integer (Int16) + Assert.IsType(r[nameIdx]); + }); + + var names = rows.Select(r => (string)r[nameIdx]!).ToList(); + Assert.Contains("MSysObjects", names); + Assert.Contains("Categories", names); // a real Northwind object + } + + [Fact] + public void Null_columns_decode_as_null() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + var rows = DecodeInlineRows(db, 17, out var columns); + + // For a plain table/query object, the Connect/Database memo fields are null. + int connectIdx = columns.First(c => c.Name == "Connect").Index; + Assert.Contains(rows, r => r[connectIdx] is null); + } +} diff --git a/test/LibRed.Core.Tests/RowEncoderTests.cs b/test/LibRed.Core.Tests/RowEncoderTests.cs new file mode 100644 index 00000000..93a25f9b --- /dev/null +++ b/test/LibRed.Core.Tests/RowEncoderTests.cs @@ -0,0 +1,55 @@ +using LibRed; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class RowEncoderTests +{ + [Theory] + [InlineData("Shippers")] // int autonumber + two text columns + [InlineData("Customers")] // all-text, several nullable columns (Region often null) + [InlineData("Orders")] // ints, DateTime, text, nullable foreign keys + public void Encode_then_decode_round_trips_real_rows(string tableName) + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + var table = db.OpenTable(tableName); + var columns = table.Definition.Columns; + + var encoder = new RowEncoder(columns, db.Format); + var decoder = new RowDecoder(columns, db.Format); + + int rows = 0; + foreach (object?[] original in table.Rows()) + { + // Memo/OLE long values aren't encodable yet; skip tables that have them via this guard. + byte[] encoded = encoder.Encode(original); + object?[] roundTripped = decoder.Decode(encoded); + Assert.Equal(original, roundTripped); + rows++; + } + + Assert.True(rows > 0, $"expected to read some rows from {tableName}"); + } + + [Fact] + public void Null_variable_columns_round_trip() + { + // Customers.Region is null for many rows — make sure null var columns survive. + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + var table = db.OpenTable("Customers"); + var columns = table.Definition.Columns; + int region = columns.Single(c => c.Name == "Region").Index; + + var encoder = new RowEncoder(columns, db.Format); + var decoder = new RowDecoder(columns, db.Format); + + bool sawNull = false; + foreach (object?[] original in table.Rows()) + { + if (original[region] is null) sawNull = true; + Assert.Equal(original, decoder.Decode(encoder.Encode(original))); + } + Assert.True(sawNull, "expected at least one null Region"); + } +} diff --git a/test/LibRed.Core.Tests/RowInserterTests.cs b/test/LibRed.Core.Tests/RowInserterTests.cs new file mode 100644 index 00000000..b8ea265f --- /dev/null +++ b/test/LibRed.Core.Tests/RowInserterTests.cs @@ -0,0 +1,165 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class RowInserterTests +{ + private static string CopyToTemp() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-insert-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + return path; + } + + private static object?[] BuildValues(TableDef table, IReadOnlyDictionary byName) + { + var values = new object?[table.Columns.Count]; + foreach (ColumnDef column in table.Columns) + values[column.Index] = byName.TryGetValue(column.Name, out object? v) ? v : null; + return values; + } + + private static List<(int Id, string Name, string Phone)> ReadShippers(string path) + { + using var db = JetDatabase.Open(path); + var table = db.OpenTable("Shippers"); + int id = table.Definition.FindColumn("ShipperID")!.Index; + int name = table.Definition.FindColumn("CompanyName")!.Index; + int phone = table.Definition.FindColumn("Phone")!.Index; + return table.Rows() + .Select(r => (Convert.ToInt32(r[id]), (string)r[name]!, (string)r[phone]!)) + .OrderBy(r => r.Item1) + .ToList(); + } + + [Fact] + public void Inserted_row_round_trips_through_our_reader() + { + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var table = db.OpenTable("Shippers"); + table.Insert(BuildValues(table.Definition, new Dictionary + { + ["ShipperID"] = 4, + ["CompanyName"] = "Speedy Express 2", + ["Phone"] = "(503) 555-0000", + })); + } + + var rows = ReadShippers(path); + Assert.Equal(4, rows.Count); // 3 original + 1 + Assert.Contains((4, "Speedy Express 2", "(503) 555-0000"), rows); + // Original rows are intact. + Assert.Contains((1, "Speedy Express", "(503) 555-9831"), rows); + } + finally { File.Delete(path); } + } + + [Fact] + public void Index_stays_sorted_across_inserts_including_a_middle_key() + { + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var table = db.OpenTable("Shippers"); + // Insert 5 (appends), then 4 (must slot between 3 and 5). + foreach (int id in new[] { 5, 4 }) + table.Insert(BuildValues(table.Definition, new Dictionary + { + ["ShipperID"] = id, + ["CompanyName"] = $"Shipper {id}", + ["Phone"] = "(000) 000-0000", + })); + } + + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("Shippers"); + var pk = table.Definition.Indexes.Single(i => i.IsPrimaryKey); + var ids = new IndexCursor(table.Channel, pk.RootPage) + .Entries(pk.Columns) + .Select(e => (int)e.Key[0]!) + .ToList(); + Assert.Equal([1, 2, 3, 4, 5], ids); // index order, with 4 inserted in the middle + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Insert_matches_access_own_engine_and_is_readable_by_access() + { + string ours = CopyToTemp(); + string access = CopyToTemp(); + try + { + // Our insert. + using (var db = JetDatabase.Open(ours, readOnly: false)) + { + var table = db.OpenTable("Shippers"); + table.Insert(BuildValues(table.Definition, new Dictionary + { + ["ShipperID"] = 4, + ["CompanyName"] = "Speedy Express 2", + ["Phone"] = "(503) 555-0000", + })); + } + + // Access's own insert via OLE DB (the ground truth). + using (var conn = OpenOleDb(access)) + { + using var cmd = conn.CreateCommand(); + cmd.CommandText = + "INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES (4, 'Speedy Express 2', '(503) 555-0000')"; + cmd.ExecuteNonQuery(); + } + + // Both databases, read through our reader, must contain the same Shippers rows. + Assert.Equal(ReadShippers(access), ReadShippers(ours)); + + // Access must find the row we wrote via an indexed primary-key seek — which only + // works because we maintained the PK B-tree, not just the heap. + using (var conn = OpenOleDb(ours)) + { + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT CompanyName, Phone FROM Shippers WHERE ShipperID = 4"; + using var reader = cmd.ExecuteReader(); + Assert.True(reader.Read()); + Assert.Equal("Speedy Express 2", reader.GetString(0)); + Assert.Equal("(503) 555-0000", reader.GetString(1)); + } + } + finally + { + File.Delete(ours); + File.Delete(access); + } + } + + private static OleDbConnection OpenOleDb(string path) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try + { + var conn = new OleDbConnection($"Provider={provider};Data Source={path}"); + conn.Open(); + return conn; + } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) + { + // Try the next provider version. + } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider (12.0/16.0) is available."); + } +} diff --git a/test/LibRed.Core.Tests/RowRelocationCorruptionTests.cs b/test/LibRed.Core.Tests/RowRelocationCorruptionTests.cs new file mode 100644 index 00000000..dba32824 --- /dev/null +++ b/test/LibRed.Core.Tests/RowRelocationCorruptionTests.cs @@ -0,0 +1,144 @@ +using System.Buffers.Binary; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class RowRelocationCorruptionTests +{ + private const int PageSize = 4096; + private const int RowDirectoryOffset = 0x0E; + private const int OffsetMask = 0x1FFF; + private const int DeletedFlag = 0x8000; + private const int OverflowFlag = 0x4000; + + [Theory] + [InlineData("short-source")] + [InlineData("page-outside-file")] + [InlineData("row-outside-page")] + [InlineData("target-not-hidden")] + [InlineData("target-is-overflow")] + [InlineData("target-wrong-owner")] + public void Corrupt_relocation_is_rejected_during_table_scan(string corruption) + { + (string path, RowId source) = CreateRelocatedRow(); + try + { + Corrupt(path, source, corruption); + + using var db = JetDatabase.Open(path); + Table table = db.OpenTable("T"); + Assert.Throws(() => table.Rows().ToList()); + } + finally { File.Delete(path); } + } + + [Fact] + public void Corrupt_relocation_is_rejected_during_index_seek() + { + (string path, RowId source) = CreateRelocatedRow(); + try + { + Corrupt(path, source, "target-not-hidden"); + + using var db = JetDatabase.Open(path); + Table table = db.OpenTable("T"); + IndexDef primaryKey = table.Definition.Indexes.Single(i => i.IsPrimaryKey); + Assert.Throws(() => table.SeekRows(primaryKey, [3]).ToList()); + } + finally { File.Delete(path); } + } + + [Fact] + public void Corrupt_relocation_is_rejected_before_raw_rewrite() + { + (string path, RowId source) = CreateRelocatedRow(); + try + { + Corrupt(path, source, "target-not-hidden"); + + using var db = JetDatabase.Open(path, readOnly: false); + Table table = db.OpenTable("T"); + Assert.Throws(() => + new RowInserter(table.Channel, table.Definition).RewriteRowRaw(source, [1, 0, 0])); + } + finally { File.Delete(path); } + } + + private static (string Path, RowId Source) CreateRelocatedRow() + { + string path = Path.Combine(Path.GetTempPath(), $"reloc-corrupt-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + string mid = new('m', 80), big = new('X', 255); + + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable("T", + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new("A", JetDataType.Text, 510, IsFixedLength: false), + new("B", JetDataType.Text, 510, IsFixedLength: false), + new("C", JetDataType.Text, 510, IsFixedLength: false), + ], primaryKey: ["Id"]); + Table table = db.OpenTable("T"); + for (int i = 0; i < 7; i++) table.Insert([null, mid, mid, mid]); + + int idIndex = table.Definition.FindColumn("Id")!.Index; + (RowId source, object?[] old) = table.Rows().WithIds() + .First(x => Convert.ToInt32(x.Values[idIndex]) == 3); + var updated = (object?[])old.Clone(); + foreach (string name in new[] { "A", "B", "C" }) + updated[table.Definition.FindColumn(name)!.Index] = big; + table.Update(source, updated); + return (path, source); + } + + private static void Corrupt(string path, RowId source, string corruption) + { + byte[] file = File.ReadAllBytes(path); + Span sourcePage = file.AsSpan(source.Page * PageSize, PageSize); + int sourceEntryPos = RowDirectoryOffset + source.Row * 2; + int raw = BinaryPrimitives.ReadUInt16LittleEndian(sourcePage[sourceEntryPos..]); + int sourceOffset = raw & OffsetMask; + int sourceEnd = source.Row == 0 + ? PageSize + : BinaryPrimitives.ReadUInt16LittleEndian(sourcePage[(sourceEntryPos - 2)..]) & OffsetMask; + int pointer = BinaryPrimitives.ReadInt32LittleEndian(sourcePage[sourceOffset..]); + int targetPageNumber = pointer >> 8; + int targetRow = pointer & 0xFF; + + switch (corruption) + { + case "short-source": + BinaryPrimitives.WriteUInt16LittleEndian(sourcePage[sourceEntryPos..], + (ushort)((raw & ~OffsetMask) | (sourceEnd - 3))); + break; + case "page-outside-file": + BinaryPrimitives.WriteInt32LittleEndian(sourcePage[sourceOffset..], + ((file.Length / PageSize) + 1) << 8); + break; + case "row-outside-page": + BinaryPrimitives.WriteInt32LittleEndian(sourcePage[sourceOffset..], (targetPageNumber << 8) | 0xFF); + break; + case "target-not-hidden": + case "target-is-overflow": + case "target-wrong-owner": + Span targetPage = file.AsSpan(targetPageNumber * PageSize, PageSize); + if (corruption == "target-wrong-owner") + { + BinaryPrimitives.WriteUInt32LittleEndian(targetPage[4..], 2); + break; + } + int targetEntryPos = RowDirectoryOffset + targetRow * 2; + int targetRaw = BinaryPrimitives.ReadUInt16LittleEndian(targetPage[targetEntryPos..]); + targetRaw = corruption == "target-not-hidden" + ? targetRaw & ~DeletedFlag + : targetRaw | DeletedFlag | OverflowFlag; + BinaryPrimitives.WriteUInt16LittleEndian(targetPage[targetEntryPos..], (ushort)targetRaw); + break; + } + + File.WriteAllBytes(path, file); + } +} diff --git a/test/LibRed.Core.Tests/SelfReferencingForeignKeyAccessTests.cs b/test/LibRed.Core.Tests/SelfReferencingForeignKeyAccessTests.cs new file mode 100644 index 00000000..876bebc3 --- /dev/null +++ b/test/LibRed.Core.Tests/SelfReferencingForeignKeyAccessTests.cs @@ -0,0 +1,76 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A self-referencing foreign key added via ALTER TABLE (Northwind's Employees.ReportsTo → +/// Employees.EmployeeID). Both relationship ends live in the one table's TDEF; the backing index over the +/// FK column is back-filled from the existing rows. Access reads and enforces the relationship. +/// +public class SelfReferencingForeignKeyAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + [Fact] + public void Access_reads_and_enforces_a_self_referencing_foreign_key() + { + string path = Path.Combine(Path.GetTempPath(), $"selffk-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE TABLE Emp (EmployeeID LONG CONSTRAINT PK PRIMARY KEY, ReportsTo LONG)"; c.ExecuteNonQuery(); } + + // Seed a small hierarchy via LibRed, then add the self-reference (back-filling the ReportsTo index). + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var t = db.OpenTable("Emp"); + t.Insert([1, null]); // top of the tree + t.Insert([2, 1]); + t.Insert([3, 1]); + t.Insert([4, 2]); + db.AddForeignKey("Emp", new RelationshipSpec( + "FK_Emp_Emp", "Emp", [("ReportsTo", "EmployeeID")], + IsEnforced: true, CascadeUpdate: false, CascadeDelete: false)); + } + + using (var db = JetDatabase.Open(path)) + Assert.Single(db.Catalog.ForeignKeysOf("Emp")); // LibRed sees the relationship + + using var conn2 = OpenOleDb(path); + void Exec(string sql) { using var c = conn2.CreateCommand(); c.CommandText = sql; c.ExecuteNonQuery(); } + + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM Emp"; + Assert.Equal(4, Convert.ToInt32(c.ExecuteScalar())); + } + + Exec("INSERT INTO Emp (EmployeeID, ReportsTo) VALUES (5, 2)"); // valid manager + Exec("INSERT INTO Emp (EmployeeID, ReportsTo) VALUES (6, NULL)"); // no manager — allowed + Assert.ThrowsAny(() => // manager 99 doesn't exist + Exec("INSERT INTO Emp (EmployeeID, ReportsTo) VALUES (7, 99)")); + + using (var c = conn2.CreateCommand()) + { + c.CommandText = "SELECT COUNT(*) FROM Emp"; + Assert.Equal(6, Convert.ToInt32(c.ExecuteScalar())); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/SystemTableClassificationTests.cs b/test/LibRed.Core.Tests/SystemTableClassificationTests.cs new file mode 100644 index 00000000..7b783ab3 --- /dev/null +++ b/test/LibRed.Core.Tests/SystemTableClassificationTests.cs @@ -0,0 +1,25 @@ +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +public class SystemTableClassificationTests +{ + [Fact] + public void Hidden_and_dual_tables_are_excluded_from_user_tables() + { + // BuiltInDataTypes.accdb was created by EFCore.Jet, so it carries the hidden #Dual helper + // (flags 0x08, '#' prefix). If #Dual counts as a user table, HasTables() reports an otherwise + // schema-less DB as "already populated", and EnsureCreated skips creating the model's tables. + using var db = JetDatabase.Open(TestDatabases.BuiltInDataTypesAccdb, readOnly: true); + var userTables = db.Catalog.UserTables.Select(t => t.Name).ToList(); + + Assert.DoesNotContain("#Dual", userTables); + Assert.DoesNotContain(userTables, n => n.StartsWith("MSys", StringComparison.Ordinal)); + Assert.DoesNotContain(userTables, n => n.StartsWith('#') || n.StartsWith('~')); + + // Real model tables are still user tables. + Assert.Contains("BuiltInDataTypes", userTables); + Assert.Contains("Animal", userTables); + } +} diff --git a/test/LibRed.Core.Tests/TableCreatorTests.cs b/test/LibRed.Core.Tests/TableCreatorTests.cs new file mode 100644 index 00000000..444c483a --- /dev/null +++ b/test/LibRed.Core.Tests/TableCreatorTests.cs @@ -0,0 +1,365 @@ +using System.Buffers.Binary; +using LibRed; +using LibRed.Catalog; +using LibRed.IO; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class TableCreatorTests +{ + // Reads the table's inline free-pages map (TDEF 0x3B) -> the set of pages marked as having room. + private static List ReadFreePagesMap(PageChannel ch, int tdefPage) + { + const int FreePtr = 0x3B; + var tdef = ch.ReadPage(tdefPage).Span; + int row = tdef[FreePtr]; + int mapPage = tdef[FreePtr + 1] | tdef[FreePtr + 2] << 8 | tdef[FreePtr + 3] << 16; + var dp = new LibRed.Pages.DataPage(); + dp.Read(ch.ReadPage(mapPage), ch.Format); + ReadOnlySpan m = dp.GetRow(row); + int start = BinaryPrimitives.ReadInt32LittleEndian(m.Slice(1, 4)); + var pages = new List(); + for (int i = 5; i < m.Length; i++) + for (int b = 0; b < 8; b++) + if ((m[i] & (1 << b)) != 0) pages.Add(start + (i - 5) * 8 + b); + return pages; + } + + [Fact] + public void Multi_page_insert_marks_only_the_tail_page_free() + { + string path = CopyToTemp(); + ColumnSpec[] schema = + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true), + new("T", JetDataType.Text, 400, IsFixedLength: false), + ]; + string pad = new string('y', 180); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("FM", schema, primaryKey: ["Id"]); + var table = db.OpenTable("FM"); + for (int i = 1; i <= 200; i++) table.Insert([i, $"{i:D4}-{pad}"]); + } + + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("FM"); + var owned = new UsageMap(table.Channel, table.Definition).DataPages().ToList(); + Assert.True(owned.Count > 1, "expected multiple owned data pages"); + + // Access keeps only the current append tail (highest owned page) in the free-pages + // map — earlier full pages are cleared as it moves past them. LibRed must match. + var free = ReadFreePagesMap(table.Channel, table.Definition.DefinitionPage); + Assert.Equal([owned.Max()], free); + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Insert_maintains_the_unique_index_stat_and_leaves_total_at_zero() + { + string path = CopyToTemp(); + ColumnSpec[] schema = [new("Id", JetDataType.Int32, 4, IsFixedLength: true)]; + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Stats", schema, primaryKey: ["Id"]); + var table = db.OpenTable("Stats"); + table.Insert([10]); + table.Insert([20]); + table.Insert([30]); + } + + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("Stats"); + var span = table.Channel.ReadPage(table.Definition.DefinitionPage).Span; + var format = table.Channel.Format; + int total = BinaryPrimitives.ReadInt32LittleEndian(span.Slice(format.TdefRealIndexBlockOffset, 4)); + int unique = BinaryPrimitives.ReadInt32LittleEndian(span.Slice(format.TdefRealIndexBlockOffset + 4, 4)); + + // Access maintains the cumulative unique-entry count live (one distinct key per row + // for a unique index) but leaves the total-entry count at 0 until compact. + Assert.Equal(3, unique); + Assert.Equal(0, total); + Assert.Equal(3, table.Definition.Indexes.Single(i => i.IsPrimaryKey).UniqueEntryCount); + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Insert_spanning_multiple_data_pages_round_trips() + { + string path = CopyToTemp(); + ColumnSpec[] schema = + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true), + new("T", JetDataType.Text, 400, IsFixedLength: false), + ]; + const int n = 200; // ~180-byte rows → tens of rows per 4 KB page + string pad = new string('x', 180); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Big", schema, primaryKey: ["Id"]); + var table = db.OpenTable("Big"); + for (int i = 1; i <= n; i++) table.Insert([i, $"{i:D4}-{pad}"]); + } + + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("Big"); + var rows = table.Rows().OrderBy(r => (int)r[0]!).ToList(); + Assert.Equal(n, rows.Count); + Assert.Equal(Enumerable.Range(1, n), rows.Select(r => (int)r[0]!)); + Assert.Equal($"0001-{pad}", rows[0][1]); + + // The rows must have spilled onto more than one owned data page (allocate-on-overflow). + int ownedPages = new Storage.UsageMap(table.Channel, table.Definition).DataPages().Count(); + Assert.True(ownedPages > 1, $"expected multiple data pages, got {ownedPages}"); + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Autonumber_is_generated_when_the_column_is_omitted() + { + string path = CopyToTemp(); + ColumnSpec[] schema = + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new("V", JetDataType.Text, 40, IsFixedLength: false), + ]; + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Auto", schema, primaryKey: ["Id"]); + var table = db.OpenTable("Auto"); + table.Insert([null, "a"]); // Id omitted -> generated 1 + table.Insert([null, "b"]); // -> 2 + table.Insert([7, "seven"]); // explicit value jumps the high-water to 7 (Jet allows it) + table.Insert([null, "c"]); // -> 8 (continues from 7) + } + + using (var db = JetDatabase.Open(path)) + { + var byV = db.OpenTable("Auto").Rows() + .ToDictionary(r => (string)r[1]!, r => Convert.ToInt32(r[0])); + Assert.Equal(1, byV["a"]); + Assert.Equal(2, byV["b"]); + Assert.Equal(7, byV["seven"]); + Assert.Equal(8, byV["c"]); + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Autonumber_insert_tracks_the_tdef_high_water_mark() + { + string path = CopyToTemp(); + ColumnSpec[] schema = + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new("V", JetDataType.Text, 40, IsFixedLength: false), + ]; + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Auto", schema, primaryKey: ["Id"]); + var table = db.OpenTable("Auto"); + table.Insert([5, "five"]); // out of order on purpose: the field is a high-water + table.Insert([2, "two"]); // mark (max assigned), not the last value written + } + + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("Auto"); + int highWater = BinaryPrimitives.ReadInt32LittleEndian( + table.Channel.ReadPage(table.Definition.DefinitionPage) + .Span.Slice(table.Channel.Format.TdefLastAutoNumberOffset, 4)); + Assert.Equal(5, highWater); // Access reads this to pick the next id (= 6) + } + } + finally { File.Delete(path); } + } + + private static string CopyToTemp() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-create-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + return path; + } + + private static readonly ColumnSpec[] Schema = + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true), + new("Name", JetDataType.Text, 510, IsFixedLength: false), + new("When", JetDataType.DateTime, 8, IsFixedLength: true), + ]; + + [Fact] + public void Created_table_appears_in_the_catalog_with_its_columns() + { + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("Widgets", Schema); + + using (var db = JetDatabase.Open(path)) + { + var def = db.Catalog.FindTable("Widgets"); + Assert.NotNull(def); + Assert.False(def!.IsSystem); + Assert.Equal(["Id", "Name", "When"], def.Columns.Select(c => c.Name)); + Assert.Equal( + [JetDataType.Int32, JetDataType.Text, JetDataType.DateTime], + def.Columns.Select(c => c.Type)); + Assert.Empty(db.OpenTable("Widgets").Rows()); // starts empty + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Created_table_round_trips_inserted_rows() + { + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Widgets", Schema); + var table = db.OpenTable("Widgets"); + table.Insert([1, "first", new DateTime(2020, 1, 2)]); + table.Insert([2, "second", new DateTime(2021, 3, 4)]); + } + + using (var db = JetDatabase.Open(path)) + { + var rows = db.OpenTable("Widgets").Rows() + .OrderBy(r => (int)r[0]!) + .ToList(); + + Assert.Equal(2, rows.Count); + Assert.Equal([1, "first", new DateTime(2020, 1, 2)], rows[0]); + Assert.Equal([2, "second", new DateTime(2021, 3, 4)], rows[1]); + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Created_table_round_trips_nulls_and_numeric_edges() + { + string path = CopyToTemp(); + ColumnSpec[] schema = + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true), + new("Small", JetDataType.Int16, 2, IsFixedLength: true), + new("Tiny", JetDataType.Byte, 1, IsFixedLength: true), + new("Money", JetDataType.Currency, 8, IsFixedLength: true), + new("Flag", JetDataType.Boolean, 1, IsFixedLength: true), + new("Label", JetDataType.Text, 40, IsFixedLength: false), + ]; + + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Edges", schema, primaryKey: ["Id"]); + var table = db.OpenTable("Edges"); + table.Insert([int.MinValue, short.MinValue, byte.MinValue, -1234.5678m, false, "min"]); + table.Insert([0, null, null, null, null, null]); + table.Insert([int.MaxValue, short.MaxValue, byte.MaxValue, 999999.9999m, true, "max"]); + } + + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("Edges"); + var rows = table.Rows().OrderBy(r => Convert.ToInt32(r[0])).ToList(); + + Assert.Equal(3, rows.Count); + Assert.Equal([int.MinValue, short.MinValue, byte.MinValue, -1234.5678m, false, "min"], rows[0]); + Assert.Equal([0, null, null, null, false, null], rows[1]); // Jet has no nullable BIT. + Assert.Equal([int.MaxValue, short.MaxValue, byte.MaxValue, 999999.9999m, true, "max"], rows[2]); + + var pk = Assert.Single(table.Definition.Indexes, i => i.IsPrimaryKey); + var ids = new IndexCursor(table.Channel, pk.RootPage) + .Entries(pk.Columns) + .Select(e => (int)e.Key[0]!) + .ToList(); + Assert.Equal([int.MinValue, 0, int.MaxValue], ids); + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Created_table_with_primary_key_has_a_working_index() + { + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Widgets", Schema, primaryKey: ["Id"]); + var table = db.OpenTable("Widgets"); + // Insert out of order; the index must keep key order. + table.Insert([3, "c", new DateTime(2022, 1, 1)]); + table.Insert([1, "a", new DateTime(2020, 1, 1)]); + table.Insert([2, "b", new DateTime(2021, 1, 1)]); + } + + using (var db = JetDatabase.Open(path)) + { + var def = db.Catalog.FindTable("Widgets")!; + var pk = Assert.Single(def.Indexes, i => i.IsPrimaryKey); + Assert.Equal("PrimaryKey", pk.Name); + Assert.True(pk.IsUnique); + Assert.Equal(["Id"], pk.Columns.Select(c => c.Column.Name)); + + // The index B-tree returns the rows in key order, even though they were inserted out of order. + var table = db.OpenTable("Widgets"); + var ids = new IndexCursor(table.Channel, pk.RootPage) + .Entries(pk.Columns) + .Select(e => (int)e.Key[0]!) + .ToList(); + Assert.Equal([1, 2, 3], ids); + } + } + finally { File.Delete(path); } + } + + [Fact] + public void Creating_a_table_leaves_existing_tables_readable() + { + string path = CopyToTemp(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("Widgets", Schema); + + using (var db = JetDatabase.Open(path)) + { + // The pre-existing Northwind data is untouched. + Assert.Equal(3, db.OpenTable("Shippers").Rows().Count()); + Assert.Equal(830, db.OpenTable("Orders").Rows().Count()); + } + } + finally { File.Delete(path); } + } +} diff --git a/test/LibRed.Core.Tests/TableDefinitionPageTests.cs b/test/LibRed.Core.Tests/TableDefinitionPageTests.cs new file mode 100644 index 00000000..a7e81638 --- /dev/null +++ b/test/LibRed.Core.Tests/TableDefinitionPageTests.cs @@ -0,0 +1,84 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; +using System.Buffers.Binary; +using Xunit; + +namespace LibRed.Core.Tests; + +public class TableDefinitionPageTests +{ + // In Jet 4 / ACE the system catalog table MSysObjects has its TDEF on page 2. + private const int MSysObjectsPage = 2; + + [Fact] + public void Reads_MSysObjects_table_definition() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var tdef = db.ReadTableDefinition(MSysObjectsPage); + + Assert.Equal(TableType.System, tdef.TableType); + Assert.Equal(17, tdef.ColumnCount); + Assert.Equal(17, tdef.Columns.Count); + Assert.Equal(2, tdef.IndexCount); + Assert.True(tdef.RowCount > 0); + Assert.Equal(0, tdef.NextDefinitionPage); // fits in a single page + } + + [Fact] + public void Decodes_MSysObjects_column_names() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var tdef = db.ReadTableDefinition(MSysObjectsPage); + var names = tdef.Columns.Select(c => c.Name).ToList(); + + // Known MSysObjects columns (a few stable ones, observed in the file). + Assert.Contains("Name", names); + Assert.Contains("Type", names); + Assert.Contains("Id", names); + Assert.Contains("Flags", names); + + // Every column has a non-empty name and a recognised data type. + Assert.All(tdef.Columns, c => + { + Assert.False(string.IsNullOrEmpty(c.Name)); + Assert.True(Enum.IsDefined(c.Type)); + }); + } + + [Theory] + [InlineData("columns")] + [InlineData("variable-columns")] + [InlineData("real-indexes")] + [InlineData("logical-indexes")] + public void Rejects_counts_outside_jet_ace_table_geometry_before_parsing(string field) + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + JetFormatBase format = db.Format; + byte[] page = TdefBuilder.Build(format, TableType.User, + [new ColumnSpec("C", JetDataType.Int32, 4, IsFixedLength: true)]).Page; + + switch (field) + { + case "columns": + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.TdefColumnCountOffset, 2), 256); + break; + case "variable-columns": + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(format.TdefVariableColumnsOffset, 2), 256); + break; + case "real-indexes": + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefIndexCountOffset, 4), 33); + break; + case "logical-indexes": + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(format.TdefRealIndexCountOffset, 4), -1); + break; + } + + var definition = new TableDefinitionPage(); + Assert.Throws(() => definition.Read(new PageBuffer(page, 99), format)); + } +} diff --git a/test/LibRed.Core.Tests/TableScanTests.cs b/test/LibRed.Core.Tests/TableScanTests.cs new file mode 100644 index 00000000..2a1c6a17 --- /dev/null +++ b/test/LibRed.Core.Tests/TableScanTests.cs @@ -0,0 +1,105 @@ +using LibRed; +using Xunit; + +namespace LibRed.Core.Tests; + +public class TableScanTests +{ + [Fact] + public void Scans_categories_rows_by_name() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var categories = db.OpenTable("Categories"); + int nameIdx = categories.Definition.Columns.First(c => c.Name == "CategoryName").Index; + int idIdx = categories.Definition.Columns.First(c => c.Name == "CategoryID").Index; + + var rows = categories.Rows().ToList(); + + Assert.Equal(8, rows.Count); + var names = rows.Select(r => (string)r[nameIdx]!).ToList(); + Assert.Equal( + ["Beverages", "Condiments", "Confections", "Dairy Products", + "Grains/Cereals", "Meat/Poultry", "Produce", "Seafood"], + names); + + // CategoryID is an AutoNumber Long. + Assert.All(rows, r => Assert.IsType(r[idIdx])); + } + + [Theory] + [InlineData("Customers", 91)] // 43 rows are >= 256 bytes + [InlineData("Employees", 9)] // every row is >= 256 bytes + [InlineData("Orders", 830)] + [InlineData("Order Details", 2155)] + public void Scans_all_rows_including_large_ones(string table, int expectedRows) + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + Assert.Equal(expectedRows, db.OpenTable(table).Rows().Count()); + } + + [Fact] + public void Decodes_boolean_columns_from_the_null_bitmap() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var products = db.OpenTable("Products"); + int discontinued = products.Definition.Columns.First(c => c.Name == "Discontinued").Index; + + var rows = products.Rows().ToList(); + + Assert.All(rows, r => Assert.IsType(r[discontinued])); + // Northwind has exactly 8 discontinued products. + Assert.Equal(8, rows.Count(r => (bool)r[discontinued]!)); + } + + [Fact] + public void Resolves_memo_long_values_including_compressed_unicode() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var categories = db.OpenTable("Categories"); + int nameIdx = categories.Definition.Columns.First(c => c.Name == "CategoryName").Index; + int descIdx = categories.Definition.Columns.First(c => c.Name == "Description").Index; + + var byName = categories.Rows().ToDictionary(r => (string)r[nameIdx]!, r => (string)r[descIdx]!); + + // UTF-16 stored memo: + Assert.Equal("Soft drinks, coffees, teas, beers, and ales", byName["Beverages"]); + // Compressed-Unicode (0xFF 0xFE marker, 1 byte/char) memos: + Assert.Equal("Cheeses", byName["Dairy Products"]); + Assert.Equal("Prepared meats", byName["Meat/Poultry"]); + } + + [Fact] + public void Resolves_ole_long_values_across_chained_pages() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var categories = db.OpenTable("Categories"); + int picIdx = categories.Definition.Columns.First(c => c.Name == "Picture").Index; + + // Each Picture is a ~10 KB OLE blob chained across multiple LVAL pages. + Assert.All(categories.Rows(), r => + { + var blob = Assert.IsType(r[picIdx]); + Assert.Equal(10746, blob.Length); + }); + } + + [Fact] + public void Scans_a_small_lookup_table() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var shippers = db.OpenTable("Shippers"); + int company = shippers.Definition.Columns.First(c => c.Name == "CompanyName").Index; + + var names = shippers.Rows().Select(r => (string)r[company]!).ToList(); + + Assert.Equal(3, names.Count); + Assert.Contains("Speedy Express", names); + Assert.Contains("United Package", names); + Assert.Contains("Federal Shipping", names); + } +} diff --git a/test/LibRed.Core.Tests/TdefBuilderTests.cs b/test/LibRed.Core.Tests/TdefBuilderTests.cs new file mode 100644 index 00000000..0b03e012 --- /dev/null +++ b/test/LibRed.Core.Tests/TdefBuilderTests.cs @@ -0,0 +1,208 @@ +using System.Buffers.Binary; +using LibRed; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; +using Xunit; + +namespace LibRed.Core.Tests; + +public class TdefBuilderTests +{ + // The ACE 12 (ACCDB) format, taken from a real database. + private static readonly JetFormatBase Format = OpenFormat(); + + private static JetFormatBase OpenFormat() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + return db.Format; + } + + [Fact] + public void Built_tdef_round_trips_through_the_reader() + { + var specs = new ColumnSpec[] + { + new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new("Count", JetDataType.Int16, 2, IsFixedLength: true), + new("When", JetDataType.DateTime, 8, IsFixedLength: true), + new("Name", JetDataType.Text, 510, IsFixedLength: false), + new("Notes", JetDataType.Text, 510, IsFixedLength: false), + }; + + var result = TdefBuilder.Build(Format, TableType.User, specs); + + var page = new TableDefinitionPage(); + page.Read(new PageBuffer(result.Page, 99), Format); + + Assert.Equal(TableType.User, page.TableType); + Assert.Equal(0, page.RowCount); + Assert.Equal(5, page.ColumnCount); + Assert.Equal(2, page.VariableColumnCount); + Assert.Empty(page.Indexes); + + Assert.Equal( + specs.Select(s => s.Name), + page.Columns.Select(c => c.Name)); + Assert.Equal( + specs.Select(s => s.Type), + page.Columns.Select(c => c.Type)); + + var id = page.Columns.Single(c => c.Name == "Id"); + Assert.True(id.IsFixedLength); + Assert.True(id.IsAutoNumber); + + // Variable columns keep their ascending-column-id rank. + Assert.Equal(0, page.Columns.Single(c => c.Name == "Name").VariableIndex); + Assert.Equal(1, page.Columns.Single(c => c.Name == "Notes").VariableIndex); + + // Fixed columns are packed in declaration order. + Assert.Equal(0, page.Columns.Single(c => c.Name == "Id").FixedOffset); + Assert.Equal(4, page.Columns.Single(c => c.Name == "Count").FixedOffset); + Assert.Equal(6, page.Columns.Single(c => c.Name == "When").FixedOffset); + } + + [Fact] + public void Built_tdef_with_primary_key_index_round_trips() + { + var specs = new ColumnSpec[] + { + new("Id", JetDataType.Int32, 4, IsFixedLength: true), + new("Name", JetDataType.Text, 510, IsFixedLength: false), + }; + var indexes = new[] { new IndexSpec("PrimaryKey", ["Id"], IsPrimaryKey: true, IsUnique: true, RootPage: 42) }; + + var result = TdefBuilder.Build(Format, TableType.User, specs, indexes); + + var page = new TableDefinitionPage(); + page.Read(new PageBuffer(result.Page, 7), Format); + + var pk = Assert.Single(page.Indexes); + Assert.Equal("PrimaryKey", pk.Name); + Assert.True(pk.IsPrimaryKey); + Assert.True(pk.IsUnique); + Assert.Equal(42, pk.RootPage); + Assert.Equal(["Id"], pk.Columns.Select(c => c.Column.Name)); + Assert.True(pk.Columns[0].Ascending); + + // Columns still parse correctly after the index blocks shifted them. + Assert.Equal(["Id", "Name"], page.Columns.Select(c => c.Name)); + } + + [Fact] + public void Built_tdef_columns_can_encode_and_decode_a_row() + { + // The resolved column layout must round-trip an actual row through the row codec. + var specs = new ColumnSpec[] + { + new("Id", JetDataType.Int32, 4, IsFixedLength: true), + new("Name", JetDataType.Text, 510, IsFixedLength: false), + }; + var result = TdefBuilder.Build(Format, TableType.User, specs); + + var encoder = new LibRed.Storage.RowEncoder(result.Columns, Format); + var decoder = new LibRed.Storage.RowDecoder(result.Columns, Format); + + object?[] row = [42, "hello"]; + Assert.Equal(row, decoder.Decode(encoder.Encode(row))); + } + + [Fact] + public void Builder_rejects_more_than_255_columns_before_narrowing_the_count() + { + ColumnSpec[] specs = Enumerable.Range(0, 256) + .Select(i => new ColumnSpec($"C{i}", JetDataType.Int32, 4, IsFixedLength: true)) + .ToArray(); + + Assert.Throws(() => TdefBuilder.Build(Format, TableType.User, specs)); + } + + [Theory] + [InlineData(65536, null)] + [InlineData(4, 256)] + public void Builder_rejects_column_fields_that_do_not_fit_the_verified_domain(int length, int? columnId) + { + ColumnSpec[] specs = [new("C", JetDataType.Int32, length, IsFixedLength: true, ColumnId: columnId)]; + + Assert.Throws(() => TdefBuilder.Build(Format, TableType.User, specs)); + } + + [Fact] + public void Builder_rejects_duplicate_column_ids() + { + ColumnSpec[] specs = + [ + new("A", JetDataType.Int32, 4, IsFixedLength: true, ColumnId: 3), + new("B", JetDataType.Int32, 4, IsFixedLength: true, ColumnId: 3), + ]; + + Assert.Throws(() => TdefBuilder.Build(Format, TableType.User, specs)); + } + + [Fact] + public void Builder_rejects_a_fixed_region_that_cannot_fit_its_offsets() + { + ColumnSpec[] specs = + [ + new("A", JetDataType.Binary, 40000, IsFixedLength: true), + new("B", JetDataType.Binary, 40000, IsFixedLength: true), + ]; + + Assert.Throws(() => TdefBuilder.Build(Format, TableType.User, specs)); + } + + [Fact] + public void Builder_sizes_the_definition_from_the_actual_encoded_names() + { + ColumnSpec[] columns = Enumerable.Range(0, 255) + .Select(i => new ColumnSpec($"C{i:D3}" + new string('N', 60), JetDataType.Boolean, 0, IsFixedLength: true)) + .ToArray(); + var result = TdefBuilder.Build(Format, TableType.User, columns); + int declared = BinaryPrimitives.ReadInt32LittleEndian(result.Page.AsSpan(Format.TdefLengthOffset, 4)); + + var definition = new TableDefinitionPage(); + definition.Read(new PageBuffer(result.Page, 99), Format); + Assert.Equal(255, definition.Columns.Count); + Assert.Equal(declared, result.Page.Length); + } + + [Fact] + public void Builder_rejects_names_that_do_not_fit_their_16_bit_byte_lengths() + { + string tooLong = new('N', 65); + Assert.Throws(() => TdefBuilder.Build(Format, TableType.User, + [new(tooLong, JetDataType.Int32, 4, IsFixedLength: true)])); + + ColumnSpec[] columns = [new("Id", JetDataType.Int32, 4, IsFixedLength: true)]; + IndexSpec[] indexes = [new(tooLong, ["Id"], true, true, RootPage: 2)]; + Assert.Throws(() => TdefBuilder.Build(Format, TableType.User, columns, indexes)); + } + + [Theory] + [InlineData(2, 0, 0, 5)] + [InlineData(0, 256, 0, 5)] + [InlineData(0, 0, 256, 5)] + [InlineData(0, 0, 0, 16777216)] + public void Builder_rejects_invalid_long_value_usage_map_fields( + int columnId, int usedRow, int freeRow, int mapPage) + { + ColumnSpec[] columns = [new("M", JetDataType.Memo, 0, IsFixedLength: false, ColumnId: 0)]; + LongValueColumnSpec[] longValues = [new(columnId, usedRow, freeRow, mapPage)]; + + Assert.Throws(() => + TdefBuilder.Build(Format, TableType.User, columns, longValueColumns: longValues)); + } + + [Fact] + public void Builder_rejects_duplicate_long_value_entries_and_unknown_index_columns() + { + ColumnSpec[] columns = [new("M", JetDataType.Memo, 0, IsFixedLength: false)]; + LongValueColumnSpec[] duplicate = [new(0, 1, 2, 5), new(0, 1, 2, 5)]; + Assert.Throws(() => + TdefBuilder.Build(Format, TableType.User, columns, longValueColumns: duplicate)); + + IndexSpec[] indexes = [new("IX", ["Missing"], false, false, RootPage: 2)]; + Assert.Throws(() => TdefBuilder.Build(Format, TableType.User, columns, indexes)); + } +} diff --git a/test/LibRed.Core.Tests/TdefVariableRegionTests.cs b/test/LibRed.Core.Tests/TdefVariableRegionTests.cs new file mode 100644 index 00000000..6497d4b1 --- /dev/null +++ b/test/LibRed.Core.Tests/TdefVariableRegionTests.cs @@ -0,0 +1,166 @@ +using System.Buffers.Binary; +using LibRed; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.IO; +using LibRed.Pages; +using Xunit; + +namespace LibRed.Core.Tests; + +public class TdefVariableRegionTests +{ + private static readonly JetFormatBase Format = OpenFormat(); + + private static JetFormatBase OpenFormat() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + return db.Format; + } + + [Theory] + [InlineData("column-name-too-long")] + [InlineData("column-name-out-of-bounds")] + [InlineData("duplicate-column-id")] + [InlineData("column-id-255")] + [InlineData("unknown-column-type")] + [InlineData("missing-lval-terminator")] + [InlineData("lval-for-non-lval-column")] + [InlineData("duplicate-lval-column")] + [InlineData("odd-name-length")] + [InlineData("invalid-name-utf16")] + [InlineData("trailing-after-lval")] + [InlineData("variable-index-out-of-range")] + public void Malformed_variable_regions_are_rejected_with_a_corruption_error(string corruption) + { + ColumnSpec[] specs = corruption is "duplicate-column-id" + ? + [ + new("A", JetDataType.Int32, 4, IsFixedLength: true), + new("B", JetDataType.Int32, 4, IsFixedLength: true), + ] + : corruption is "duplicate-lval-column" + ? [new("M", JetDataType.Memo, 0, IsFixedLength: false)] + : [new("C", JetDataType.Int32, 4, IsFixedLength: true)]; + + byte[] page = TdefBuilder.Build(Format, TableType.User, specs).Page; + int columnBlock = Format.TdefRealIndexBlockOffset; + int namePos = columnBlock + specs.Length * Format.ColumnDescriptorSize; + int lvalPos = SkipNames(page, namePos, specs.Length); + int declaredLength = BinaryPrimitives.ReadInt32LittleEndian(page.AsSpan(Format.TdefLengthOffset, 4)); + + switch (corruption) + { + case "column-name-too-long": + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(namePos, 2), 130); + page.AsSpan(namePos + 2, 130).Fill((byte)'A'); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(namePos + 132, 2), 0xFFFF); + declaredLength = namePos + 134; + break; + case "column-name-out-of-bounds": + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(namePos, 2), 128); + break; + case "duplicate-column-id": + BinaryPrimitives.WriteUInt16LittleEndian( + page.AsSpan(columnBlock + Format.ColumnDescriptorSize + Format.ColumnNumberOffset, 2), 0); + break; + case "column-id-255": + BinaryPrimitives.WriteUInt16LittleEndian( + page.AsSpan(columnBlock + Format.ColumnNumberOffset, 2), 255); + break; + case "unknown-column-type": + page[columnBlock + Format.ColumnTypeOffset] = 0xFF; + break; + case "missing-lval-terminator": + declaredLength -= 2; + break; + case "lval-for-non-lval-column": + WriteLvalEntry(page, lvalPos, 0); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(lvalPos + 10, 2), 0xFFFF); + declaredLength += 10; + break; + case "duplicate-lval-column": + WriteLvalEntry(page, lvalPos, 0); + WriteLvalEntry(page, lvalPos + 10, 0); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(lvalPos + 20, 2), 0xFFFF); + declaredLength += 20; + break; + case "odd-name-length": + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(namePos, 2), 1); + break; + case "invalid-name-utf16": + page[namePos + 2] = 0x00; + page[namePos + 3] = 0xD8; // unpaired UTF-16 high surrogate + break; + case "trailing-after-lval": + page[declaredLength] = 0; + declaredLength++; + break; + case "variable-index-out-of-range": + BinaryPrimitives.WriteUInt16LittleEndian( + page.AsSpan(columnBlock + Format.ColumnVariableIndexOffset, 2), 1); + break; + } + + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(Format.TdefLengthOffset, 4), declaredLength); + var definition = new TableDefinitionPage(); + Assert.Throws(() => + definition.Read(new PageBuffer(page.AsMemory(0, declaredLength), 99), Format)); + } + + [Fact] + public void Overlong_index_name_is_rejected_before_decoding() + { + ColumnSpec[] specs = [new("C", JetDataType.Int32, 4, IsFixedLength: true)]; + IndexSpec[] indexes = [new("I", ["C"], IsPrimaryKey: false, IsUnique: false, RootPage: 42)]; + byte[] page = TdefBuilder.Build(Format, TableType.User, specs, indexes).Page; + + int pos = Format.TdefRealIndexBlockOffset + Format.RealIndexEntrySize + + Format.ColumnDescriptorSize; + pos = SkipNames(page, pos, 1); + int indexNamePos = pos + 52 + 28; // §3.5 data block + §3.6 logical-info block + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(indexNamePos, 2), 130); + page.AsSpan(indexNamePos + 2, 130).Fill((byte)'I'); + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(indexNamePos + 132, 2), 0xFFFF); + int declaredLength = indexNamePos + 134; + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(Format.TdefLengthOffset, 4), declaredLength); + + var definition = new TableDefinitionPage(); + Assert.Throws(() => + definition.Read(new PageBuffer(page.AsMemory(0, declaredLength), 99), Format)); + } + + [Fact] + public void Valid_memo_usage_map_entry_remains_available() + { + ColumnSpec[] specs = [new("M", JetDataType.Memo, 0, IsFixedLength: false)]; + LongValueColumnSpec[] maps = [new(ColumnId: 0, UsedRow: 2, FreeRow: 3, MapPage: 17)]; + byte[] page = TdefBuilder.Build(Format, TableType.User, specs, longValueColumns: maps).Page; + int declaredLength = BinaryPrimitives.ReadInt32LittleEndian(page.AsSpan(Format.TdefLengthOffset, 4)); + + var definition = new TableDefinitionPage(); + definition.Read(new PageBuffer(page.AsMemory(0, declaredLength), 99), Format); + + Assert.Equal((2, 17), definition.LongValueOwnedMaps[0]); + Assert.Equal((3, 17), definition.LongValueFreeMaps[0]); + } + + private static int SkipNames(byte[] page, int pos, int count) + { + for (int i = 0; i < count; i++) + { + int length = BinaryPrimitives.ReadUInt16LittleEndian(page.AsSpan(pos, 2)); + pos += 2 + length; + } + return pos; + } + + private static void WriteLvalEntry(byte[] page, int pos, ushort columnId) + { + BinaryPrimitives.WriteUInt16LittleEndian(page.AsSpan(pos, 2), columnId); + page[pos + 2] = 2; + page[pos + 3] = 17; + page[pos + 6] = 3; + page[pos + 7] = 17; + } +} diff --git a/test/LibRed.Core.Tests/TestDatabases.cs b/test/LibRed.Core.Tests/TestDatabases.cs new file mode 100644 index 00000000..525cc8fc --- /dev/null +++ b/test/LibRed.Core.Tests/TestDatabases.cs @@ -0,0 +1,37 @@ +namespace LibRed.Core.Tests; + +/// Paths to the real database files copied alongside the test assembly. +internal static class TestDatabases +{ + /// An Access 2007 (ACE 12 / ACCDB) Northwind sample. + public static string NorthwindAccdb { get; } = + Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + /// A 200-column ACCDB whose table definition spans multiple TDEF pages. + public static string WideTableAccdb { get; } = + Path.Combine(AppContext.BaseDirectory, "Data", "WideTable.accdb"); + + /// An ACCDB with Decimal/Numeric columns and known values. + public static string DecimalsAccdb { get; } = + Path.Combine(AppContext.BaseDirectory, "Data", "Decimals.accdb"); + + /// An ACE 16 (version 0x06) ACCDB using the Office 2016 BIGINT and DATETIME2 types. + public static string Ace16TypesAccdb { get; } = + Path.Combine(AppContext.BaseDirectory, "Data", "Ace16Types.accdb"); + + /// EF Core's BuiltInDataTypes database — broad coverage of every mapped column type. + public static string BuiltInDataTypesAccdb { get; } = + Path.Combine(AppContext.BaseDirectory, "Data", "BuiltInDataTypes.accdb"); + + /// EF Core's EverythingIsBytes database — every entity has a byte[] primary key (3/4/5/8/16-byte + /// values), for byte-faithful binary index-key checks. + public static string EverythingIsBytesAccdb { get; } = + Path.Combine(AppContext.BaseDirectory, "Data", "EverythingIsBytes.accdb"); + + /// A password-encrypted ACCDB (Office Agile encryption; the password is "Test"). + public static string EncryptedAccdb { get; } = + Path.Combine(AppContext.BaseDirectory, "Data", "EncryptedTest.accdb"); + + /// The password for . + public const string EncryptedPassword = "Test"; +} diff --git a/test/LibRed.Core.Tests/TextKeyEncodingTests.cs b/test/LibRed.Core.Tests/TextKeyEncodingTests.cs new file mode 100644 index 00000000..7ade9fe9 --- /dev/null +++ b/test/LibRed.Core.Tests/TextKeyEncodingTests.cs @@ -0,0 +1,131 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +public class TextKeyEncodingTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider available."); + } + + [Fact] + public void Encoded_text_keys_match_access_byte_for_byte() + { + // Build a real text-PK table via Access, then check our encoder reproduces each stored key. + string[] values = + [ + "A", "B", "C", "M", "Z", "AA", "AB", "ABC", "BA", + "Apple", "Banana", "Cherry", "A B", " A", + "0", "1", "9", "Order123", "Customer", "Z9", + "(paren)", "a.b", "x/y", "p+q", "k=v", + // Ignorable apostrophe/hyphen in various positions. + "'", "-", "A'", "'A", "A-B", "O'Brien", "IT'S", "ANNE-MARIE", "A''B", "x-y-z", + // Accented Latin-1: the accent sorts with its base letter and adds a secondary weight. + "México D.F.", "Montréal", "München", "São Paulo", "Résumé", "Café", + "Niño", "Zürich", "Åre", "Ça", "É", "Ø", "Ñ", "Ç", "Ü", "Ã", "Æ", + // Multi-letter expansions (ß=SS, Þ=TH), incl. a ligature followed by ignorable hyphens. + "ß", "Straße", "Þor", "NuNuCa Nuß-Nougat-Creme", "Aß-B", + ]; + + string path = Path.Combine(Path.GetTempPath(), $"libred-textkey-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE TABLE TKey (K varchar(30) PRIMARY KEY, V int)"; c.ExecuteNonQuery(); } + for (int i = 0; i < values.Length; i++) + { + using var c = conn.CreateCommand(); + c.CommandText = "INSERT INTO TKey (K, V) VALUES (?, ?)"; + c.Parameters.AddWithValue("k", values[i]); + c.Parameters.AddWithValue("v", i); + c.ExecuteNonQuery(); + } + } + + using var db = JetDatabase.Open(path); + var table = db.OpenTable("TKey"); + var def = table.Definition; + IndexDef pk = def.Indexes.Single(i => i.IsPrimaryKey); + int kIdx = def.FindColumn("K")!.Index; + var decoder = new RowDecoder(def.Columns, db.Format); + + int checkd = 0; + foreach (var (accessKey, rowId) in new IndexCursor(table.Channel, pk.RootPage).RawEntries()) + { + string k = (string)decoder.Decode(db.ReadDataPage(rowId.Page).GetRow(rowId.Row))[kIdx]!; + + var values2 = new object?[def.Columns.Count]; + values2[kIdx] = k; + byte[] ours = IndexKeyEncoder.Encode(pk.Columns, values2); + + Assert.True(accessKey.AsSpan().SequenceEqual(ours), + $"'{k}': access={Convert.ToHexString(accessKey)} ours={Convert.ToHexString(ours)}"); + checkd++; + } + Assert.Equal(values.Length, checkd); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Encoded_descending_text_keys_match_access_byte_for_byte() + { + string[] values = ["A", "B", "AB", "Z", "Apple", "A-B", "O'Brien", "0", "Order9"]; + + string path = Path.Combine(Path.GetTempPath(), $"libred-textdesc-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var conn = OpenOleDb(path)) + { + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE TABLE TD (Id int PRIMARY KEY, K varchar(30))"; c.ExecuteNonQuery(); } + using (var c = conn.CreateCommand()) + { c.CommandText = "CREATE INDEX ixK ON TD (K DESC)"; c.ExecuteNonQuery(); } + for (int i = 0; i < values.Length; i++) + { + using var c = conn.CreateCommand(); + c.CommandText = "INSERT INTO TD (Id, K) VALUES (?, ?)"; + c.Parameters.AddWithValue("id", i); + c.Parameters.AddWithValue("k", values[i]); + c.ExecuteNonQuery(); + } + } + + using var db = JetDatabase.Open(path); + var table = db.OpenTable("TD"); + var def = table.Definition; + IndexDef ixK = def.Indexes.First(i => i.Columns.Any(c => c.Column.Name == "K")); + Assert.False(ixK.Columns.First(c => c.Column.Name == "K").Ascending); // descending + int kIdx = def.FindColumn("K")!.Index; + var decoder = new RowDecoder(def.Columns, db.Format); + + int checkd = 0; + foreach (var (accessKey, rowId) in new IndexCursor(table.Channel, ixK.RootPage).RawEntries()) + { + string k = (string)decoder.Decode(db.ReadDataPage(rowId.Page).GetRow(rowId.Row))[kIdx]!; + var vals = new object?[def.Columns.Count]; + vals[kIdx] = k; + byte[] ours = IndexKeyEncoder.Encode(ixK.Columns, vals); + Assert.True(accessKey.AsSpan().SequenceEqual(ours), + $"'{k}': access={Convert.ToHexString(accessKey)} ours={Convert.ToHexString(ours)}"); + checkd++; + } + Assert.Equal(values.Length, checkd); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/TextPrimaryKeyInsertTests.cs b/test/LibRed.Core.Tests/TextPrimaryKeyInsertTests.cs new file mode 100644 index 00000000..03c4d5b3 --- /dev/null +++ b/test/LibRed.Core.Tests/TextPrimaryKeyInsertTests.cs @@ -0,0 +1,58 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +public class TextPrimaryKeyInsertTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider available."); + } + + [Fact] + public void Insert_into_text_primary_key_table_is_seekable_by_access() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-textpk-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + // Insert a new Customers row (text PK 'CustomerID') through LibRed. + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var table = db.OpenTable("Customers"); + var values = new object?[table.Definition.Columns.Count]; + values[table.Definition.FindColumn("CustomerID")!.Index] = "ZZZZZ"; + values[table.Definition.FindColumn("CompanyName")!.Index] = "ZZ Top Trading"; + table.Insert(values); + } + + // LibRed reads the new row back via a table scan. + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("Customers"); + int idIdx = table.Definition.FindColumn("CustomerID")!.Index; + int nameIdx = table.Definition.FindColumn("CompanyName")!.Index; + var row = table.Rows().Single(r => (string?)r[idIdx] == "ZZZZZ"); + Assert.Equal("ZZ Top Trading", row[nameIdx]); + } + + // Access finds the row via an indexed text primary-key seek — only possible because + // the collation-encoded entry we wrote is in the PK B-tree and sorts correctly. + using (var conn = OpenOleDb(path)) + { + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT CompanyName FROM Customers WHERE CustomerID = 'ZZZZZ'"; + Assert.Equal("ZZ Top Trading", cmd.ExecuteScalar()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/UpdateAccessTests.cs b/test/LibRed.Core.Tests/UpdateAccessTests.cs new file mode 100644 index 00000000..fb23d989 --- /dev/null +++ b/test/LibRed.Core.Tests/UpdateAccessTests.cs @@ -0,0 +1,214 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// LibRed rewrites a row in place (row id preserved) and Access reads the updated values back — including a +/// memo that grew onto an LVAL page and a variable-text column that grew the row (page repacked in place). +/// +public class UpdateAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No provider"); + } + + [Fact] + public void Access_reads_a_libred_in_place_update_including_memo_growth() + { + string path = Path.Combine(Path.GetTempPath(), $"upd-ace-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + string big = new('x', 5000); + try + { + RowId before, after; + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new("N", JetDataType.Int32, 4, IsFixedLength: true), + new("S", JetDataType.Text, 200 * 2, IsFixedLength: false), + new("M", JetDataType.Memo, 0, IsFixedLength: false), + ], primaryKey: ["Id"]); + + var table = db.OpenTable("T"); + for (int i = 0; i < 3; i++) table.Insert([null, i, $"short{i}", $"m{i}"]); + + var def = table.Definition; + int idIdx = def.FindColumn("Id")!.Index; + (before, var values) = table.Rows().WithIds().First(r => Convert.ToInt32(r.Values[idIdx]) == 2); + + var updated = (object?[])values.Clone(); + updated[def.FindColumn("N")!.Index] = 101; + updated[def.FindColumn("S")!.Index] = "a considerably longer string value that grows the row well past its original size"; + updated[def.FindColumn("M")!.Index] = big; + table.Update(before, updated); + + // Re-read: the row id (page + slot) is unchanged — an in-place rewrite. + after = table.Rows().WithIds().First(r => Convert.ToInt32(r.Values[idIdx]) == 2).Id; + } + Assert.Equal(before, after); + + // Access opens the file and reads the updated values, memo included. + using var conn = OpenOleDb(path); + using var c = conn.CreateCommand(); + c.CommandText = "SELECT N, S, M FROM T WHERE Id = 2"; + using var r = c.ExecuteReader(); + Assert.True(r.Read()); + Assert.Equal(101, Convert.ToInt32(r[0])); + Assert.StartsWith("a considerably longer", (string)r[1]); + Assert.Equal(big, (string)r[2]); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_reads_a_libred_relocated_row() + { + string path = Path.Combine(Path.GetTempPath(), $"reloc-lr-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + string mid = new('m', 80), big = new('X', 255); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [ + new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), + new("A", JetDataType.Text, 255 * 2, IsFixedLength: false), + new("B", JetDataType.Text, 255 * 2, IsFixedLength: false), + new("C", JetDataType.Text, 255 * 2, IsFixedLength: false), + ], primaryKey: ["Id"]); + var table = db.OpenTable("T"); + for (int i = 0; i < 7; i++) table.Insert([null, mid, mid, mid]); // ~fill a page + + int idIdx = table.Definition.FindColumn("Id")!.Index; + (RowId id, object?[] old) = table.Rows().WithIds().First(x => Convert.ToInt32(x.Values[idIdx]) == 3); + var updated = (object?[])old.Clone(); + foreach (var col in new[] { "A", "B", "C" }) updated[table.Definition.FindColumn(col)!.Index] = big; + table.Update(id, updated); // grows past the page → relocates + } + + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT COUNT(*) FROM T"; Assert.Equal(7, Convert.ToInt32(c.ExecuteScalar())); } + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT A FROM T WHERE Id = 3"; Assert.Equal(big, c.ExecuteScalar()); } // the relocated row + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT A FROM T WHERE Id = 4"; Assert.Equal(mid, c.ExecuteScalar()); } // a neighbour + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Libred_reads_an_access_relocated_row() + { + string path = Path.Combine(Path.GetTempPath(), $"reloc-ace-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + string mid = new('m', 80), big = new('X', 255); + try + { + using (var conn = OpenOleDb(path)) + { + Exec(conn, "CREATE TABLE T (Id counter PRIMARY KEY, A text(255), B text(255), C text(255))"); + for (int i = 0; i < 7; i++) Exec(conn, $"INSERT INTO T (A,B,C) VALUES ('{mid}','{mid}','{mid}')"); + Exec(conn, $"UPDATE T SET A='{big}', B='{big}', C='{big}' WHERE Id = 3"); // ACE relocates it + } + + // LibRed follows ACE's forward pointer and reads every row, including the relocated one. + using var db = JetDatabase.Open(path); + var table = db.OpenTable("T"); + int idIdx = table.Definition.FindColumn("Id")!.Index, aIdx = table.Definition.FindColumn("A")!.Index; + var rows = table.Rows().WithIds().ToList(); + Assert.Equal(7, rows.Count); + Assert.Equal(big, rows.Single(r => Convert.ToInt32(r.Values[idIdx]) == 3).Values[aIdx]); + Assert.Equal(mid, rows.Single(r => Convert.ToInt32(r.Values[idIdx]) == 4).Values[aIdx]); + + static void Exec(OleDbConnection c, string sql) { using var cmd = c.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_reads_a_memo_after_libred_reclaims_and_reuses_lval_pages() + { + string path = Path.Combine(Path.GetTempPath(), $"upd-reclaim-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + string Big(char c) => new(c, 20000); // chained (dedicated pages), so each update frees + reuses pages + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true), new("M", JetDataType.Memo, 0, IsFixedLength: false)], + primaryKey: ["Id"]); + var table = db.OpenTable("T"); + int mIdx = table.Definition.FindColumn("M")!.Index; + table.Insert([null, Big('a')]); + + for (int i = 0; i < 6; i++) + { + (RowId id, object?[] values) = table.Rows().WithIds().First(); + var updated = (object?[])values.Clone(); + updated[mIdx] = Big((char)('b' + i)); + table.Update(id, updated, new HashSet { mIdx }); // frees the old chained pages, reuses them + } + } + + // The pages were freed and reused across updates; Access must still open the file and read the + // final memo intact (a dangling reference or double-used page would corrupt it). + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT COUNT(*) FROM T"; Assert.Equal(1, Convert.ToInt32(c.ExecuteScalar())); } + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT M FROM T"; Assert.Equal(Big('g'), c.ExecuteScalar()); } // 'b'+5 = 'g' + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_seeks_a_libred_updated_primary_key() + { + string path = Path.Combine(Path.GetTempPath(), $"upd-key-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("T", + [new("Id", JetDataType.Int32, 4, IsFixedLength: true), new("N", JetDataType.Int32, 4, IsFixedLength: true)], + primaryKey: ["Id"]); + var table = db.OpenTable("T"); + for (int i = 1; i <= 5; i++) table.Insert([i, i * 10]); + + var def = table.Definition; + int idIdx = def.FindColumn("Id")!.Index; + var pk = def.Indexes.First(i => i.IsPrimaryKey); + (RowId id, object?[] old) = table.Rows().WithIds().First(x => Convert.ToInt32(x.Values[idIdx]) == 2); + + var updated = (object?[])old.Clone(); + updated[idIdx] = 20; + table.Update(id, updated); + table.MoveIndexEntry(pk, old, updated, id); + } + + // Access seeks the row by its NEW primary key (using the index we moved) and no longer by the old. + using var conn = OpenOleDb(path); + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT N FROM T WHERE Id = 20"; Assert.Equal(20, Convert.ToInt32(c.ExecuteScalar())); } + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT COUNT(*) FROM T WHERE Id = 2"; Assert.Equal(0, Convert.ToInt32(c.ExecuteScalar())); } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/UsageMapGrowthTests.cs b/test/LibRed.Core.Tests/UsageMapGrowthTests.cs new file mode 100644 index 00000000..04fd715b --- /dev/null +++ b/test/LibRed.Core.Tests/UsageMapGrowthTests.cs @@ -0,0 +1,78 @@ +using System.Buffers.Binary; +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.IO; +using LibRed.Pages; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A table that grows past the inline usage-map window (page 512): Access enlarges the owned/free bitmap +/// record in place (256-bit chunks) rather than switching to a reference map. LibRed does the same, so +/// large tables keep working and Access still reads them. +/// +public class UsageMapGrowthTests +{ + private static OleDbConnection OpenOleDb(string path) + { + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No provider"); + } + + [Fact] + public void Table_growing_past_the_inline_window_round_trips_through_libred_and_access() + { + const int rows = 400; // ~1 row/page on top of Northwind → owned pages cross page 512 + string path = Path.Combine(Path.GetTempPath(), $"umgrow-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + string big = new('x', 255); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var cols = new List { new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true) }; + for (int c = 0; c < 7; c++) cols.Add(new ColumnSpec($"C{c}", JetDataType.Text, 255 * 2, IsFixedLength: false)); + db.CreateTable("Big", cols, primaryKey: ["Id"]); + + var table = db.OpenTable("Big"); + for (int i = 0; i < rows; i++) + table.Insert([null, big, big, big, big, big, big, big]); + } + + // LibRed reads every owned page back, past the old 512 window, and the owned map really grew. + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("Big"); + var pages = new UsageMap(table.Channel, table.Definition).DataPages().ToList(); + Assert.True(pages.Max() > 511, $"expected owned pages past 511, max={pages.Max()}"); + + PageBuffer tdef = table.Channel.ReadPage(table.Definition.DefinitionPage); + int mapRow = tdef.ReadByte(db.Format.TdefOwnedPagesOffset); + int mapPage = tdef.ReadInt24(db.Format.TdefOwnedPagesOffset + 1); + var holder = new DataPage(); + holder.Read(table.Channel.ReadPage(mapPage), db.Format); + int recLen = holder.GetRow(mapRow).Length; + Assert.True(recLen > 69, $"owned map should have grown past the 64-byte bitmap, recLen={recLen}"); + // The grown bitmap must cover the highest owned page. + Assert.True((recLen - 5) * 8 > pages.Max()); + } + + // Access opens the file, counts every row, and reads one that lives past page 512. + using (var conn = OpenOleDb(path)) + { + using (var c = conn.CreateCommand()) + { c.CommandText = "SELECT COUNT(*) FROM Big"; Assert.Equal(rows, Convert.ToInt32(c.ExecuteScalar())); } + using (var c = conn.CreateCommand()) + { c.CommandText = $"SELECT C0 FROM Big WHERE Id = {rows}"; Assert.Equal(big, c.ExecuteScalar()); } + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/UsageMapTests.cs b/test/LibRed.Core.Tests/UsageMapTests.cs new file mode 100644 index 00000000..d3ccbc79 --- /dev/null +++ b/test/LibRed.Core.Tests/UsageMapTests.cs @@ -0,0 +1,111 @@ +using LibRed; +using LibRed.IO; +using LibRed.Pages; +using System.Buffers.Binary; +using Xunit; + +namespace LibRed.Core.Tests; + +public class UsageMapTests +{ + [Fact] + public void Inline_usage_map_lists_owned_data_pages() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + var pages = db.OpenTable("MSysObjects").UsageMap.DataPages().ToList(); + + Assert.Equal([17, 274, 323], pages); + } + + [Fact] + public void Usage_map_excludes_stale_orphan_pages() + { + using var db = JetDatabase.Open(TestDatabases.NorthwindAccdb); + + // MSysNavPaneObjectIDs has an orphan page (stale owner stamp) that a naive + // owner-scan would double-count. The real usage map excludes it, so the decoded + // row count matches the TDEF's own count exactly. + var table = db.OpenTable("MSysNavPaneObjectIDs"); + int tdefRows = db.ReadTableDefinition(table.Definition.DefinitionPage).RowCount; + + Assert.Equal(tdefRows, table.Rows().Count()); + } + + [Fact] + public void Reference_usage_map_rejects_a_record_larger_than_the_format_shape() + { + string path = Path.Combine(Path.GetTempPath(), $"bad-usage-map-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var table = db.OpenTable("MSysObjects"); + PageBuffer tdef = table.Channel.ReadPage(table.Definition.DefinitionPage); + int mapRow = tdef.ReadByte(db.Format.TdefOwnedPagesOffset); + int mapPage = tdef.ReadInt24(db.Format.TdefOwnedPagesOffset + 1); + Assert.Equal(0, mapRow); // row 0 ends at the page boundary, making its length deterministic + + byte[] page = table.Channel.ReadPage(mapPage).Span.ToArray(); + int originalOffset = BinaryPrimitives.ReadUInt16LittleEndian( + page.AsSpan(db.Format.DataRowDirectoryOffset, 2)) & 0x1FFF; + int oversizedOffset = originalOffset - 4; + BinaryPrimitives.WriteUInt16LittleEndian( + page.AsSpan(db.Format.DataRowDirectoryOffset, 2), (ushort)oversizedOffset); + page.AsSpan(oversizedOffset, db.Format.PageSize - oversizedOffset).Clear(); + page[oversizedOffset] = 0x01; + table.Channel.WritePage(mapPage, page); + + Assert.Throws(() => table.UsageMap.DataPages().ToList()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Exact_empty_reference_usage_map_remains_valid() + { + string path = Path.Combine(Path.GetTempPath(), $"empty-reference-map-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var table = db.OpenTable("MSysObjects"); + PageBuffer tdef = table.Channel.ReadPage(table.Definition.DefinitionPage); + int mapPage = tdef.ReadInt24(db.Format.TdefOwnedPagesOffset + 1); + byte[] page = table.Channel.ReadPage(mapPage).Span.ToArray(); + int offset = BinaryPrimitives.ReadUInt16LittleEndian( + page.AsSpan(db.Format.DataRowDirectoryOffset, 2)) & 0x1FFF; + Assert.Equal(69, db.Format.PageSize - offset); + page.AsSpan(offset, 69).Clear(); + page[offset] = 0x01; + table.Channel.WritePage(mapPage, page); + + Assert.Empty(table.UsageMap.DataPages()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Reference_usage_map_rejects_a_pointer_to_a_non_bitmap_page() + { + string path = Path.Combine(Path.GetTempPath(), $"bad-bitmap-pointer-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var table = db.OpenTable("MSysObjects"); + PageBuffer tdef = table.Channel.ReadPage(table.Definition.DefinitionPage); + int mapPage = tdef.ReadInt24(db.Format.TdefOwnedPagesOffset + 1); + byte[] page = table.Channel.ReadPage(mapPage).Span.ToArray(); + int offset = BinaryPrimitives.ReadUInt16LittleEndian( + page.AsSpan(db.Format.DataRowDirectoryOffset, 2)) & 0x1FFF; + page.AsSpan(offset, 69).Clear(); + page[offset] = 0x01; + BinaryPrimitives.WriteInt32LittleEndian(page.AsSpan(offset + 1, 4), mapPage); // data page, not 0x05 + table.Channel.WritePage(mapPage, page); + + Assert.Throws(() => table.UsageMap.DataPages().ToList()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/VersionByteDetectTests.cs b/test/LibRed.Core.Tests/VersionByteDetectTests.cs new file mode 100644 index 00000000..42bc9fab --- /dev/null +++ b/test/LibRed.Core.Tests/VersionByteDetectTests.cs @@ -0,0 +1,80 @@ +using System.Text; +using LibRed.Formats; +using Xunit; + +namespace LibRed.Core.Tests; + +public class VersionByteDetectTests +{ + // A minimal page-0 header: ACE identifier at 0x04, a given version byte at 0x14, and an engine-version + // string at 0x9C. Enough for JetFormatBase.Detect (which reads through 0x9C). + private static MemoryStream Header(byte versionByte, string engine = "4.0", string identifier = "Standard ACE DB") + { + byte[] page = new byte[4096]; + Encoding.ASCII.GetBytes(identifier).CopyTo(page, JetFormatBase.FormatIdentifierOffset); + page[JetFormatBase.VersionOffset] = versionByte; + Encoding.ASCII.GetBytes(engine).CopyTo(page, JetFormatBase.EngineVersionOffset); + return new MemoryStream(page, writable: false); + } + + [Fact] + public void Byte_0x04_maps_to_the_2010_format() + { + // ACE 15 (Access 2013) is byte-identical to 0x03 / ACE 14; no clone class. + var f = JetFormatBase.FromVersionByte(0x04); + Assert.Equal(JetVersion.Version14_2010, f.Version); + Assert.True(f.IsAccdb); + Assert.Equal(4096, f.PageSize); + } + + [Fact] + public void Unknown_byte_on_a_4_0_accdb_falls_back_to_latest_ACE() + { + // A future ACE byte (0x07) on a file still carrying the "4.0" engine string reads as the latest known ACE. + var f = JetFormatBase.Detect(Header(0x07, engine: "4.0")); + Assert.Equal(JetVersion.Version17_2019, f.Version); + Assert.True(f.IsAccdb); + } + + [Fact] + public void Unknown_byte_without_the_4_0_engine_string_is_rejected() + { + // A different engine string ("5.0") must NOT be mistaken for ACE — the 4.0 guard rejects it. + Assert.Throws(() => JetFormatBase.Detect(Header(0x07, engine: "5.0"))); + } + + [Fact] + public void Known_bytes_still_detect_normally() + { + Assert.Equal(JetVersion.Version12_2007, JetFormatBase.Detect(Header(0x02)).Version); + Assert.Equal(JetVersion.Version16_2016, JetFormatBase.Detect(Header(0x05)).Version); + Assert.Equal(JetVersion.Version17_2019, JetFormatBase.Detect(Header(0x06)).Version); + } + + [Theory] + [InlineData(0x02, "Standard Jet DB")] + [InlineData(0x01, "Standard ACE DB")] + [InlineData(0x02, "Jet System DB")] + public void Mismatched_identifier_and_version_are_rejected(byte version, string identifier) + { + Assert.Throws(() => JetFormatBase.Detect(Header(version, identifier: identifier))); + } + + [Fact] + public void Jet3_is_rejected_until_its_distinct_layout_is_implemented() + { + Assert.Throws(() => + JetFormatBase.Detect(Header(0x00, identifier: "Standard Jet DB"))); + Assert.Throws(() => JetFormatBase.FromVersionByte(0x00)); + } + + [Theory] + [InlineData("Standard Jet DB")] + [InlineData("Jet System DB")] + public void Supported_jet4_identifiers_still_detect(string identifier) + { + var format = JetFormatBase.Detect(Header(0x01, identifier: identifier)); + Assert.Equal(JetVersion.Version4, format.Version); + Assert.False(format.IsAccdb); + } +} diff --git a/test/LibRed.Core.Tests/WideTableAccessTests.cs b/test/LibRed.Core.Tests/WideTableAccessTests.cs new file mode 100644 index 00000000..1dd71ab5 --- /dev/null +++ b/test/LibRed.Core.Tests/WideTableAccessTests.cs @@ -0,0 +1,95 @@ +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A table wide enough that its TDEF spans continuation pages (the owned-types / proxy shape). LibRed writes +/// the definition split across pages; Access opens it, reports every column, and round-trips a row. +/// +public class WideTableAccessTests +{ + private static OleDbConnection OpenOleDb(string path) + { + Exception? last = null; + for (int attempt = 0; attempt < 12; attempt++) + foreach (string p in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try { var c = new OleDbConnection($"Provider={p};Data Source={path};OLE DB Services=-4;"); c.Open(); return c; } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { last = ex; Thread.Sleep(40); } + } + throw new InvalidOperationException("no provider", last); + } + + // A wide table of TEXT columns (inline — no long-value usage maps) whose TDEF spans continuation pages: + // Access opens it, enumerates every column, and a row round-trips including the far-end column. + [Fact] + public void Access_opens_a_wide_multi_page_table() + { + const int n = 120; + string path = Path.Combine(Path.GetTempPath(), $"wide-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + var cols = new List { new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true) }; + for (int i = 0; i < n; i++) + cols.Add(new ColumnSpec($"Col{i}", JetDataType.Text, 50 * 2, IsFixedLength: false)); + + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("Wide", cols, primaryKey: ["Id"]); + + using var conn = OpenOleDb(path); + var schema = conn.GetSchema("Columns", [null, null, "Wide", null]); + Assert.Equal(n + 1, schema.Rows.Count); // Access read the whole multi-page definition + + using (var c = conn.CreateCommand()) + { c.CommandText = $"INSERT INTO Wide (Col0, Col{n - 1}) VALUES ('a', 'z')"; c.ExecuteNonQuery(); } + using (var c = conn.CreateCommand()) + { + c.CommandText = $"SELECT Col{n - 1} FROM Wide"; + Assert.Equal("z", c.ExecuteScalar()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A table with more memo columns than one usage-map page holds (each memo needs a used + a free map, + // ~57 records per page). LibRed fills the primary usage-map page, then gives each overflowing column its + // own page (matching ACE). Access opens it, and a long value in an overflow column round-trips — proving + // the per-column usage map on its dedicated page is wired up. LibRed reads it back too. + [Fact] + public void Access_opens_a_wide_memo_table_and_round_trips_a_long_value() + { + const int n = 80; // 160 long-value maps: far more than fit on one usage-map page + string path = Path.Combine(Path.GetTempPath(), $"widemem-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + string big = new('x', 8000); // forces an LVAL page — exercises the column's used-pages usage map + try + { + var cols = new List { new("Id", JetDataType.Int32, 4, IsFixedLength: true, IsAutoNumber: true) }; + for (int i = 0; i < n; i++) + cols.Add(new ColumnSpec($"M{i}", JetDataType.Memo, 0, IsFixedLength: false)); + + using (var db = JetDatabase.Open(path, readOnly: false)) + db.CreateTable("WideMemo", cols, primaryKey: ["Id"]); + + using (var conn = OpenOleDb(path)) + { + var schema = conn.GetSchema("Columns", [null, null, "WideMemo", null]); + Assert.Equal(n + 1, schema.Rows.Count); + + // Write a long value into the last (overflow) memo column, then read it back through Access. + using (var c = conn.CreateCommand()) + { c.CommandText = $"INSERT INTO WideMemo (M0, M{n - 1}) VALUES ('a', @v)"; c.Parameters.AddWithValue("@v", big); c.ExecuteNonQuery(); } + using (var c = conn.CreateCommand()) + { + c.CommandText = $"SELECT M{n - 1} FROM WideMemo"; + Assert.Equal(big, c.ExecuteScalar()); + } + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/WideTableUsageMapTests.cs b/test/LibRed.Core.Tests/WideTableUsageMapTests.cs new file mode 100644 index 00000000..05db6918 --- /dev/null +++ b/test/LibRed.Core.Tests/WideTableUsageMapTests.cs @@ -0,0 +1,186 @@ +using System.Buffers.Binary; +using System.Data.OleDb; +using LibRed; +using LibRed.Catalog; +using LibRed.Formats; +using LibRed.Pages; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Core.Tests; + +/// +/// A table at Jet's limits: the full 255 columns, and enough data pages that its owned-pages usage map +/// outgrows the inline (0x00) bitmap and must become a reference (0x01) map pointing at dedicated +/// bitmap pages. Each row here fills a whole 4 KB page, so one row is one page. +/// +/// +/// This pins three things a wide, large table needs and nothing else exercises: +/// +/// a 255-column definition spans TDEF continuation pages, so repointing an index's B-tree root +/// after a root split has to address the stitched definition, not just its first page; +/// the free-pages map slides a fixed 512-page window instead of growing, so it stays 69 bytes +/// and leaves the usage-map page's room to the owned map (as Access does); +/// the reference-type usage map write path, including the inline→reference conversion. +/// +/// Access must be able to read the result — that is what makes the layout byte-faithful rather than +/// merely self-consistent. +/// +public class WideTableUsageMapTests +{ + private const int Columns = 255; + + /// Enough full-page rows to push the owned map past what an inline record can hold. The + /// owned bitmap reaches ~3,800 bytes at 30,000 pages and no longer fits soon after. + private const int Rows = 32_000; + + private static OleDbConnection OpenOleDb(string path) + { + foreach (string provider in new[] { "Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0" }) + { + try + { + var connection = new OleDbConnection($"Provider={provider};Data Source={path};OLE DB Services=-4;"); + connection.Open(); + return connection; + } + catch (Exception ex) when (ex is OleDbException or InvalidOperationException) { } + } + throw new InvalidOperationException("No Microsoft.ACE.OLEDB provider available."); + } + + /// The type, record length and (inline only) start page of a table's usage map. + private static (byte Type, int Length, int StartPage) ReadMap(Table table, JetFormatBase format, int tdefPointerOffset) + { + var tdef = table.Channel.ReadPage(table.Definition.DefinitionPage); + var holder = new DataPage(); + holder.Read(table.Channel.ReadPage(tdef.ReadInt24(tdefPointerOffset + 1)), format); + byte[] record = holder.GetRow(tdef.ReadByte(tdefPointerOffset)).ToArray(); + + int startPage = record[0] == 0x00 ? BinaryPrimitives.ReadInt32LittleEndian(record.AsSpan(1, 4)) : -1; + return (record[0], record.Length, startPage); + } + + private static List FullPageRowColumns() + { + // 1 LONG primary key + 254 CURRENCY = a ~2,070-byte fixed row, so one row per 4 KB page. + var columns = new List { new("Id", JetDataType.Int32, 4, IsFixedLength: true) }; + for (int i = 1; i < Columns; i++) + columns.Add(new ColumnSpec($"c{i}", JetDataType.Currency, 8, IsFixedLength: true)); + return columns; + } + + private static void Fill(Table table, int rows) + { + var row = new object?[Columns]; + for (int r = 0; r < rows; r++) + { + row[0] = r; + for (int i = 1; i < Columns; i++) row[i] = (decimal)i; + table.Insert(row); + } + } + + /// + /// The free-pages map tracks only the current append tail, so rather than growing a bitmap out from + /// page 0 it slides a 64-byte window aligned to a 512-page boundary — verified against ACE, whose free + /// map for a table whose tail sat on page 852 / 1227 / 1852 started at 512 / 1024 / 1536. + /// + [Fact] + public void The_free_pages_map_slides_a_512_page_window_instead_of_growing() + { + string path = Path.Combine(Path.GetTempPath(), $"freewin-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable("W", FullPageRowColumns(), primaryKey: ["Id"]); + var table = db.OpenTable("W"); + + Fill(table, 2_000); // one row per page, so the tail is ~2,300 pages in + + (byte type, int length, int startPage) = ReadMap(table, db.Format, db.Format.TdefFreePagesOffset); + Assert.Equal(0x00, type); + Assert.Equal(69, length); // 5-byte header + a fixed 64-byte bitmap, never grown + Assert.Equal(0, startPage % 512); // window aligned to a 512-page boundary + + // The window covers the tail: exactly one page has room, and it is the highest owned page. + var usage = new UsageMap(table.Channel, table.Definition); + int tail = Assert.Single(usage.FreeDataPages()); + Assert.Equal(usage.MaxDataPage(), tail); + Assert.InRange(tail, startPage, startPage + 511); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + /// + /// An owned-pages map keeps startPage = 0 and grows its bitmap in 4-byte (32-bit) steps, so its + /// record length is exactly 5 + roundUp(ceil((maxPage + 1) / 8), 4). Verified against ACE record + /// lengths for the same table shape: 8,000 rows → 1053, 12,000 → 1553, 30,000 → 3801, 31,000 → 3925. + /// Overshooting (we once rounded to 32 bytes) wastes the usage-map page's room and converts the map to + /// reference type earlier than Access would. + /// + [Fact] + public void The_owned_pages_bitmap_grows_in_4_byte_steps() + { + string path = Path.Combine(Path.GetTempPath(), $"grow4-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable("W", FullPageRowColumns(), primaryKey: ["Id"]); + var table = db.OpenTable("W"); + + Fill(table, 2_000); + + (byte type, int length, int startPage) = ReadMap(table, db.Format, db.Format.TdefOwnedPagesOffset); + Assert.Equal(0x00, type); + Assert.Equal(0, startPage); // an owned map never moves: it must retain every page ever taken + + int maxPage = new UsageMap(table.Channel, table.Definition).MaxDataPage(); + int bitmapBytes = (maxPage + 1 + 7) / 8; + int expected = 5 + (bitmapBytes + 3) / 4 * 4; + Assert.Equal(expected, length); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void A_255_column_table_spanning_a_reference_usage_map_round_trips_through_access() + { + string path = Path.Combine(Path.GetTempPath(), $"wide255-{Guid.NewGuid():N}.accdb"); + File.Copy(TestDatabases.NorthwindAccdb, path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + db.CreateTable("Wide255", FullPageRowColumns(), primaryKey: ["Id"]); + var table = db.OpenTable("Wide255"); + + Assert.Equal(0x00, ReadMap(table, db.Format, db.Format.TdefOwnedPagesOffset).Type); // starts inline + Fill(table, Rows); + } + + using (var db = JetDatabase.Open(path)) + { + var table = db.OpenTable("Wide255"); + + Assert.Equal(0x01, ReadMap(table, db.Format, db.Format.TdefOwnedPagesOffset).Type); // grew past inline + + // The free map never grows, which is precisely what leaves the owned map room to reach + // ~3,800 bytes before converting. + (byte freeType, int freeLength, _) = ReadMap(table, db.Format, db.Format.TdefFreePagesOffset); + Assert.Equal(0x00, freeType); + Assert.Equal(69, freeLength); + + Assert.Equal(Rows, table.Rows().Count()); + } + + using var connection = OpenOleDb(path); + using var command = connection.CreateCommand(); + command.CommandText = "SELECT COUNT(*) FROM Wide255"; + Assert.Equal(Rows, Convert.ToInt32(command.ExecuteScalar())); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Core.Tests/xunit.runner.json b/test/LibRed.Core.Tests/xunit.runner.json new file mode 100644 index 00000000..08c512b3 --- /dev/null +++ b/test/LibRed.Core.Tests/xunit.runner.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "parallelizeTestCollections": false +} diff --git a/test/LibRed.EFCore.Tests/LibRed.EFCore.Tests.csproj b/test/LibRed.EFCore.Tests/LibRed.EFCore.Tests.csproj new file mode 100644 index 00000000..224f159b --- /dev/null +++ b/test/LibRed.EFCore.Tests/LibRed.EFCore.Tests.csproj @@ -0,0 +1,39 @@ + + + + $(JetTargetFramework) + LibRed.EFCore.Tests + enable + enable + false + true + $(NoWarn);CA1416 + AnyCPU;x86;x64 + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + Data\Northwind.accdb + PreserveNewest + + + + diff --git a/test/LibRed.EFCore.Tests/RoundTripTests.cs b/test/LibRed.EFCore.Tests/RoundTripTests.cs new file mode 100644 index 00000000..4a4035e7 --- /dev/null +++ b/test/LibRed.EFCore.Tests/RoundTripTests.cs @@ -0,0 +1,200 @@ +using LibRed.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Xunit; + +namespace LibRed.EFCore.Tests; + +public class Customer +{ + public string CustomerID { get; set; } = ""; + public string? CompanyName { get; set; } + public string? City { get; set; } +} + +public class NorthwindContext(DbContextOptions options) : DbContext(options) +{ + public DbSet Customers => Set(); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(b => + { + b.ToTable("Customers"); + b.HasKey(c => c.CustomerID); + }); + } +} + +public class RoundTripTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + private static NorthwindContext CreateContext() + { + var options = new DbContextOptionsBuilder() + .UseLibRed($"Data Source={Northwind}") + .Options; + return new NorthwindContext(options); + } + + [Fact] + public void SaveChanges_inserts_a_new_entity() + { + // The path the user hit: EF Core executes the INSERT through ExecuteReader and inspects + // RecordsAffected. Insert on a copy so the shared Northwind isn't mutated. + string path = Path.Combine(Path.GetTempPath(), $"libred-save-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + var options = new DbContextOptionsBuilder() + .UseLibRed($"Data Source={path}").Options; + + using (var context = new NorthwindContext(options)) + { + context.Customers.Add(new Customer { CustomerID = "ZZTOP", CompanyName = "LibRed Co", City = "Testville" }); + Assert.Equal(1, context.SaveChanges()); + } + using (var context = new NorthwindContext(options)) + { + var c = context.Customers.Single(x => x.CustomerID == "ZZTOP"); + Assert.Equal("LibRed Co", c.CompanyName); + Assert.Equal("Testville", c.City); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Provider_uses_the_libred_connection_not_oledb() + { + using var context = CreateContext(); + + // The DbConnection EF actually uses must be ours, not the OLE DB/ODBC JetConnection. + var dbConnection = context.Database.GetDbConnection(); + Assert.IsType(dbConnection); + + // And the relational connection service resolved to the LibRed override. + var relational = context.GetService(); + Assert.Equal("LibRedRelationalConnection", relational.GetType().Name); + + // Force the query to execute and confirm the same LibRed connection opened. + _ = context.Customers.Where(c => c.City == "Berlin").ToList(); + Assert.IsType(context.Database.GetDbConnection()); + } + + [Fact] + public void EnsureCreated_uses_the_catalog_not_information_schema() + { + // Copy Northwind so the file exists and already has tables. EnsureCreated must consult + // LibRed's catalog (Exists + HasTables) and return without issuing an INFORMATION_SCHEMA + // query (which LibRed doesn't implement and which would otherwise route to DAO/ADOX). + string path = Path.Combine(Path.GetTempPath(), $"libred-ensure-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + var options = new DbContextOptionsBuilder() + .UseLibRed($"Data Source={path}") + .Options; + using var context = new NorthwindContext(options); + + // The creator service is ours. + Assert.Equal("LibRedDatabaseCreator", context.GetService().GetType().Name); + + // Existing file with tables -> EnsureCreated reports "already created" (false), no throw. + Assert.False(context.Database.EnsureCreated()); + } + finally { File.Delete(path); } + } + + [Fact] + public async Task HasTablesAsync_honors_pre_cancellation() + { + using var context = CreateContext(); + var creator = Assert.IsAssignableFrom( + context.GetService()); + using var cancellation = new CancellationTokenSource(); + cancellation.Cancel(); + + await Assert.ThrowsAsync( + () => creator.HasTablesAsync(cancellation.Token)); + } + + [Fact] + public void EnsureCreated_creates_a_new_database_natively_and_round_trips() + { + // A brand-new file (no copy): EnsureCreated must create the .accdb natively (DatabaseCreator), + // then create the model's schema, then the context is usable for insert + query. + string path = Path.Combine(Path.GetTempPath(), $"libred-newdb-{Guid.NewGuid():N}.accdb"); + var options = new DbContextOptionsBuilder() + .UseLibRed($"Data Source={path}").Options; + try + { + using (var context = new NorthwindContext(options)) + { + Assert.True(context.Database.EnsureCreated()); // created from scratch + context.Customers.Add(new Customer { CustomerID = "ADA01", CompanyName = "Analytical Engines", City = "London" }); + Assert.Equal(1, context.SaveChanges()); + } + using (var context = new NorthwindContext(options)) + { + var c = context.Customers.Single(); + Assert.Equal("ADA01", c.CustomerID); + Assert.Equal("Analytical Engines", c.CompanyName); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Where_query_round_trips_through_the_provider() + { + using var context = CreateContext(); + + var berlin = context.Customers + .Where(c => c.City == "Berlin") + .ToList(); + + var only = Assert.Single(berlin); + Assert.Equal("ALFKI", only.CustomerID); + Assert.Equal("Berlin", only.City); + } + + [Fact] + public void Parameterized_where_round_trips() + { + using var context = CreateContext(); + string city = "London"; + + var customers = context.Customers + .Where(c => c.City == city) // EF parameterizes the captured variable + .ToList(); + + Assert.Equal(6, customers.Count); + Assert.All(customers, c => Assert.Equal("London", c.City)); + } + + [Fact] + public void Ordered_projection_materializes_multiple_rows() + { + using var context = CreateContext(); + + var customers = context.Customers + .Where(c => c.City == "London") + .OrderBy(c => c.CustomerID) + .Select(c => new { c.CustomerID, c.CompanyName }) + .ToList(); + + Assert.Equal(["AROUT", "BSBEV", "CONSH", "EASTC", "NORTS", "SEVES"], customers.Select(c => c.CustomerID)); + Assert.Equal("Around the Horn", customers[0].CompanyName); + } + + [Fact] + public void Find_by_key_round_trips() + { + using var context = CreateContext(); + var c = context.Customers.Single(x => x.CustomerID == "AROUT"); + Assert.Equal("Around the Horn", c.CompanyName); + } +} diff --git a/test/LibRed.EFCore.Tests/ScaffoldingTests.cs b/test/LibRed.EFCore.Tests/ScaffoldingTests.cs new file mode 100644 index 00000000..27d4a46a --- /dev/null +++ b/test/LibRed.EFCore.Tests/ScaffoldingTests.cs @@ -0,0 +1,130 @@ +using EntityFrameworkCore.LibRed.Design.Internal; +using EntityFrameworkCore.LibRed.Scaffolding.Internal; +using LibRed.Data; +using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace LibRed.EFCore.Tests; + +public class ScaffoldingTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + // Resolve the factory through the design-time container so the scaffolding logger is injected. + private static IDatabaseModelFactory Factory() + { + var services = new ServiceCollection(); + new LibRedDesignTimeServices().ConfigureDesignTimeServices(services); + return services.BuildServiceProvider().GetRequiredService(); + } + + [Fact] + public void Model_factory_reads_tables_columns_keys_from_the_catalog() + { + var model = Factory().Create($"Data Source={Northwind}", new DatabaseModelFactoryOptions()); + + // User tables are present; system (MSys*) tables are excluded. + var tableNames = model.Tables.Select(t => t.Name).ToList(); + Assert.Contains("Customers", tableNames); + Assert.Contains("Orders", tableNames); + Assert.DoesNotContain(tableNames, n => n.StartsWith("MSys", StringComparison.OrdinalIgnoreCase)); + + var orders = model.Tables.Single(t => t.Name == "Orders"); + + // Columns with store types. + var orderId = orders.Columns.Single(c => c.Name == "OrderID"); + Assert.Equal("counter", orderId.StoreType); // autonumber PK + Assert.Equal("datetime", orders.Columns.Single(c => c.Name == "OrderDate").StoreType); + // CustomerID is a fixed-length 5-char text column in Northwind (the EFCore.Jet fixture maps it + // nchar(5)), so it scaffolds as char(5); ShipName is an ordinary variable-length text → varchar. + Assert.Equal("char(5)", orders.Columns.Single(c => c.Name == "CustomerID").StoreType); + Assert.StartsWith("varchar(", orders.Columns.Single(c => c.Name == "ShipName").StoreType); + + // Primary key. + Assert.NotNull(orders.PrimaryKey); + Assert.Equal(["OrderID"], orders.PrimaryKey!.Columns.Select(c => c.Name)); + + // Foreign keys: Orders references Customers and Employees. + var principals = orders.ForeignKeys.Select(f => f.PrincipalTable.Name).ToList(); + Assert.Contains("Customers", principals); + Assert.Contains("Employees", principals); + } + + [Fact] + public void Composite_primary_key_is_read() + { + var model = Factory() + .Create($"Data Source={Northwind}", new DatabaseModelFactoryOptions()); + + var orderDetails = model.Tables.Single(t => t.Name == "Order Details"); + Assert.Equal(["OrderID", "ProductID"], orderDetails.PrimaryKey!.Columns.Select(c => c.Name)); + } + + [Fact] + public void Nullability_and_defaults_are_read_from_the_catalog() + { + var model = Factory().Create($"Data Source={Northwind}", new DatabaseModelFactoryOptions()); + + var customers = model.Tables.Single(t => t.Name == "Customers"); + // A Required (NOT NULL) non-counter column reads as non-nullable; an optional one as nullable. + Assert.False(customers.Columns.Single(c => c.Name == "CompanyName").IsNullable); + Assert.True(customers.Columns.Single(c => c.Name == "ContactName").IsNullable); + + // A counter is never nullable — even though it carries no Required property. + var orders = model.Tables.Single(t => t.Name == "Orders"); + Assert.False(orders.Columns.Single(c => c.Name == "OrderID").IsNullable); + + // Column DefaultValue (expression source text) is surfaced as DefaultValueSql. + var od = model.Tables.Single(t => t.Name == "Order Details"); + Assert.Equal("1", od.Columns.Single(c => c.Name == "Quantity").DefaultValueSql); + Assert.Equal("0", od.Columns.Single(c => c.Name == "UnitPrice").DefaultValueSql); + Assert.Null(customers.Columns.Single(c => c.Name == "ContactName").DefaultValueSql); + } + + [Fact] + public void On_delete_set_null_foreign_key_scaffolds_as_set_null() + { + string path = Path.Combine(Path.GetTempPath(), $"scaffold-fk-{Guid.NewGuid():N}.accdb"); + File.Copy(Northwind, path); + try + { + using (var conn = new LibRedConnection($"Data Source={path}")) + { + conn.Open(); + Exec(conn, "CREATE TABLE P (Id long PRIMARY KEY, N long)"); + Exec(conn, "CREATE TABLE C (Id long PRIMARY KEY, ParentId long, " + + "CONSTRAINT FK_C FOREIGN KEY (ParentId) REFERENCES P (Id) ON DELETE SET NULL)"); + } + + var model = Factory().Create($"Data Source={path}", new DatabaseModelFactoryOptions()); + var fk = model.Tables.Single(t => t.Name == "C").ForeignKeys.Single(); + Assert.Equal("P", fk.PrincipalTable.Name); + Assert.Equal("SetNull", fk.OnDelete?.ToString()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + + static void Exec(LibRedConnection c, string sql) + { using var cmd = c.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); } + } + + [Fact] + public void Table_filter_is_honoured() + { + var model = Factory() + .Create($"Data Source={Northwind}", + new DatabaseModelFactoryOptions(tables: ["Shippers"], schemas: [])); + + Assert.Equal(["Shippers"], model.Tables.Select(t => t.Name)); + } + + [Fact] + public void Design_time_services_resolve_the_libred_model_factory() + { + var services = new ServiceCollection(); + new LibRedDesignTimeServices().ConfigureDesignTimeServices(services); + using var provider = services.BuildServiceProvider(); + + Assert.IsType(provider.GetRequiredService()); + } +} diff --git a/test/LibRed.Engine.Tests/AddColumnTests.cs b/test/LibRed.Engine.Tests/AddColumnTests.cs new file mode 100644 index 00000000..536e5189 --- /dev/null +++ b/test/LibRed.Engine.Tests/AddColumnTests.cs @@ -0,0 +1,103 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ALTER TABLE ... ADD COLUMN through LibRed's engine. Metadata TDEF edit: the column is appended, existing +// rows read it as NULL, and (on an empty table) subsequent inserts include it. +public class AddColumnTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"addcol-eng-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY, A long)"); + return e; + } + + [Fact] + public void Add_columns_to_an_empty_table_then_insert_and_read() + { + var e = Fresh(); + e.ExecuteNonQuery("ALTER TABLE T ADD COLUMN B text(20)"); // variable + e.ExecuteNonQuery("ALTER TABLE T ADD COLUMN C long"); // fixed + + Assert.Equal(["Id", "A", "B", "C"], e.ExecuteQuery("SELECT * FROM T").ColumnNames); + e.ExecuteNonQuery("INSERT INTO T (Id, A, B, C) VALUES (1, 10, 'bee', 30)"); + var r = e.ExecuteQuery("SELECT A, B, C FROM T WHERE Id = 1").Rows.Single(); + Assert.Equal(10, Convert.ToInt32(r[0])); + Assert.Equal("bee", r[1]); + Assert.Equal(30, Convert.ToInt32(r[2])); + } + + [Fact] + public void Added_column_reads_null_for_existing_rows() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO T (Id, A) VALUES (1, 10)"); + e.ExecuteNonQuery("INSERT INTO T (Id, A) VALUES (2, 20)"); + e.ExecuteNonQuery("ALTER TABLE T ADD COLUMN Note text(20)"); + + var rows = e.ExecuteQuery("SELECT Id, A, Note FROM T ORDER BY Id").Rows.ToList(); + Assert.Equal(new object?[] { 1, 10, null }, [rows[0][0], rows[0][1], rows[0][2]]); + Assert.Equal(new object?[] { 2, 20, null }, [rows[1][0], rows[1][1], rows[1][2]]); + } + + [Fact] + public void Adding_a_duplicate_column_is_rejected() + { + var e = Fresh(); + Assert.Throws(() => e.ExecuteNonQuery("ALTER TABLE T ADD COLUMN A long")); // exists + } + + [Fact] + public void Add_a_fixed_column_to_a_populated_table_then_insert_and_read() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO T (Id, A) VALUES (1, 10)"); + e.ExecuteNonQuery("INSERT INTO T (Id, A) VALUES (2, 20)"); + e.ExecuteNonQuery("ALTER TABLE T ADD COLUMN C long"); // fixed column added while rows exist + + // A new insert must include the added fixed column (the fixed region grew). + e.ExecuteNonQuery("INSERT INTO T (Id, A, C) VALUES (3, 30, 99)"); + + var rows = e.ExecuteQuery("SELECT Id, A, C FROM T ORDER BY Id").Rows.ToList(); + Assert.Equal(new object?[] { 1, 10, null }, [rows[0][0], rows[0][1], rows[0][2]]); // old row: C NULL + Assert.Equal(new object?[] { 2, 20, null }, [rows[1][0], rows[1][1], rows[1][2]]); + Assert.Equal(99, Convert.ToInt32(rows[2][2])); // new row: C = 99 + Assert.Equal(30, Convert.ToInt32(rows[2][1])); + } + + [Fact] + public void Add_a_memo_column_then_store_and_read_a_long_value() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO T (Id, A) VALUES (1, 10)"); // populated before the add + e.ExecuteNonQuery("ALTER TABLE T ADD COLUMN M LONGCHAR"); + + // A value > 64 bytes goes to an LVAL page, exercising the column's newly-added usage maps. + string memo = new string('x', 200); + e.ExecuteNonQuery("INSERT INTO T (Id, A, M) VALUES (2, 20, @m)", + new Dictionary { ["m"] = memo }); + + Assert.Null(e.ExecuteQuery("SELECT M FROM T WHERE Id = 1").Rows.Single()[0]); // old row: memo NULL + Assert.Equal(memo, e.ExecuteQuery("SELECT M FROM T WHERE Id = 2").Rows.Single()[0]); + } + + [Fact] + public void Added_column_default_is_applied_and_required_is_enforced() + { + var e = Fresh(); + e.ExecuteNonQuery("ALTER TABLE T ADD COLUMN Qty long DEFAULT 1"); + e.ExecuteNonQuery("ALTER TABLE T ADD COLUMN Name text(20) NOT NULL"); + + // DEFAULT applied when the column is omitted on insert. + e.ExecuteNonQuery("INSERT INTO T (Id, A, Name) VALUES (1, 10, 'x')"); + Assert.Equal(1, Convert.ToInt32(e.ExecuteQuery("SELECT Qty FROM T WHERE Id = 1").Rows.Single()[0])); + + // NOT NULL enforced: omitting the required column (no default) is rejected. + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO T (Id, A) VALUES (2, 20)")); + } +} diff --git a/test/LibRed.Engine.Tests/AddedFunctionsTests.cs b/test/LibRed.Engine.Tests/AddedFunctionsTests.cs new file mode 100644 index 00000000..d56a6fd9 --- /dev/null +++ b/test/LibRed.Engine.Tests/AddedFunctionsTests.cs @@ -0,0 +1,60 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Functions added after the LibRed-vs-ACE function-whitelist cross-check. Each expected value is what ACE +// returned for the same call in the sweep. +public class AddedFunctionsTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"af-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static object? Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]; + + [Theory] + [InlineData("Chr(65)", "A")] + [InlineData("Space(3)", " ")] + [InlineData("String(3, 'x')", "xxx")] + [InlineData("StrReverse('abc')", "cba")] + [InlineData("Str(5)", " 5")] + [InlineData("Hex(255)", "FF")] + [InlineData("Oct(8)", "10")] + [InlineData("MonthName(1)", "January")] + [InlineData("TypeName(5)", "Long")] + public void String_returning(string expr, string expected) + => Assert.Equal(expected, Convert.ToString(Eval(expr))); + + [Theory] + [InlineData("StrComp('a', 'b')", -1)] + [InlineData("InStrRev('abc', 'b')", 2)] + [InlineData("Val('12abc')", 12)] + [InlineData("VarType(5)", 3)] + public void Numeric_returning(string expr, int expected) + => Assert.Equal(expected, Convert.ToInt32(Eval(expr))); + + [Theory] + [InlineData("IsNull(Null)", true)] + [InlineData("IsNumeric('12')", true)] + [InlineData("IsNumeric('abc')", false)] + [InlineData("IsError(1)", false)] + public void Boolean_returning(string expr, bool expected) + => Assert.Equal(expected, Convert.ToBoolean(Eval(expr))); + + [Fact] + public void Rnd_and_Timer_are_in_range() + { + double rnd = Convert.ToDouble(Eval("Rnd(1)")); + Assert.InRange(rnd, 0.0, 1.0); + double timer = Convert.ToDouble(Eval("Timer()")); + Assert.InRange(timer, 0.0, 86400.0); + } +} diff --git a/test/LibRed.Engine.Tests/AggregateTests.cs b/test/LibRed.Engine.Tests/AggregateTests.cs new file mode 100644 index 00000000..e151245f --- /dev/null +++ b/test/LibRed.Engine.Tests/AggregateTests.cs @@ -0,0 +1,196 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class AggregateTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + private static List Query(string sql, out IReadOnlyList columns) + { + using var db = JetDatabase.Open(Northwind); + var rs = new QueryEngine(db).ExecuteQuery(sql); + columns = rs.ColumnNames; + return rs.Rows.ToList(); + } + + [Fact] + public void Count_star_with_no_group_by_is_a_single_group() + { + var rows = Query("SELECT COUNT(*) AS n FROM Orders", out var columns); + Assert.Equal(["n"], columns); + var only = Assert.Single(rows); + Assert.Equal(830, only[0]); + } + + [Fact] + public void Group_by_with_count_partitions_and_totals() + { + var rows = Query("SELECT EmployeeID, COUNT(*) AS n FROM Orders GROUP BY EmployeeID", out _); + Assert.Equal(9, rows.Count); // 9 employees + Assert.Equal(830, rows.Sum(r => (int)r[1]!)); // counts sum to all orders + } + + [Fact] + public void Iif_function() + { + var rows = Query("SELECT IIF(Discontinued, 1, 0) AS d FROM Products WHERE ProductID = 5", out _); + Assert.Equal(1, Assert.Single(rows)[0]); // product 5 is discontinued (int literal stays int) + } + + [Fact] + public void Fix_and_int_differ_on_negatives() + { + // Northwind has no negative values, so this guards the FIX-vs-INT distinction + // directly: FIX truncates toward zero, INT floors toward -infinity. + var rows = Query( + "SELECT FIX(-2.7) AS f, INT(-2.7) AS i, FIX(2.7) AS fp, INT(2.7) AS ip, ABS(-3.5) AS a " + + "FROM Products WHERE ProductID = 1", out _); + var r = Assert.Single(rows); + Assert.Equal(-2m, Convert.ToDecimal(r[0])); // FIX(-2.7) -> -2 (toward zero) + Assert.Equal(-3m, Convert.ToDecimal(r[1])); // INT(-2.7) -> -3 (toward -inf) + Assert.Equal(2m, Convert.ToDecimal(r[2])); // FIX(2.7) -> 2 + Assert.Equal(2m, Convert.ToDecimal(r[3])); // INT(2.7) -> 2 (equal for positives) + Assert.Equal(3.5m, Convert.ToDecimal(r[4])); // ABS(-3.5) -> 3.5 + } + + [Fact] + public void Unary_minus_negates_and_binds_tightly() + { + var rows = Query( + "SELECT -3 AS a, 10 - -3 AS b, -2 * 3 AS c, -(2 + 3) AS d " + + "FROM Products WHERE ProductID = 1", out _); + var r = Assert.Single(rows); + Assert.Equal(-3m, Convert.ToDecimal(r[0])); + Assert.Equal(13m, Convert.ToDecimal(r[1])); // 10 - (-3) + Assert.Equal(-6m, Convert.ToDecimal(r[2])); // (-2) * 3, binds tighter than * + Assert.Equal(-5m, Convert.ToDecimal(r[3])); // -(2 + 3) + } + + [Fact] + public void Min_aggregate_with_comma_cross_join() + { + // Each customer's earliest order: MIN(OrderID) per customer, comma-joined back to Orders. + const string sql = """ + SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + FROM ( + SELECT MIN(`o`.`OrderID`) AS `c` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + ) AS `o1`, + `Orders` AS `o0` + WHERE `o0`.`OrderID` = `o1`.`c` + """; + + var rows = Query(sql, out var columns); + Assert.Equal(["OrderID", "CustomerID", "EmployeeID", "OrderDate"], columns); + + using var db = JetDatabase.Open(Northwind); + var orders = db.OpenTable("Orders"); + int id = orders.Definition.Columns.Single(c => c.Name == "OrderID").Index; + int cust = orders.Definition.Columns.Single(c => c.Name == "CustomerID").Index; + var expectedMinIds = orders.Rows() + .Where(r => r[cust] is not null) + .GroupBy(r => r[cust]!.ToString()!) + .Select(g => g.Min(r => (int)r[id]!)) + .OrderBy(x => x) + .ToList(); + + Assert.Equal(expectedMinIds.Count, rows.Count); // 89 customers with orders + Assert.Equal(expectedMinIds, rows.Select(r => (int)r[0]!).OrderBy(x => x).ToList()); + } + + [Fact] + public void Datepart_extracts_year() + { + var rows = Query("SELECT DATEPART('yyyy', OrderDate) AS y FROM Orders WHERE OrderID = 10248", out _); + Assert.Equal(1996, Assert.Single(rows)[0]); // first Northwind order is 1996-07-04 + } + + [Fact] + public void Group_by_multiple_keys_with_datepart_then_count() + { + // Per customer, how many distinct years did they place orders in. + const string sql = """ + SELECT `o1`.`CustomerID` AS `Key`, COUNT(*) AS `Count` + FROM ( + SELECT `o0`.`CustomerID` + FROM ( + SELECT `o`.`CustomerID`, DATEPART('yyyy', `o`.`OrderDate`) AS `Year` + FROM `Orders` AS `o` + ) AS `o0` + GROUP BY `o0`.`CustomerID`, `o0`.`Year` + ) AS `o1` + GROUP BY `o1`.`CustomerID` + """; + + var rows = Query(sql, out var columns); + Assert.Equal(["Key", "Count"], columns); + + var got = rows.ToDictionary(r => r[0]!.ToString()!, r => (int)r[1]!); + Assert.Equal(89, got.Count); // 89 of 91 customers have orders + + using var db = JetDatabase.Open(Northwind); + var orders = db.OpenTable("Orders"); + int cust = orders.Definition.Columns.Single(c => c.Name == "CustomerID").Index; + int odate = orders.Definition.Columns.Single(c => c.Name == "OrderDate").Index; + var expected = orders.Rows() + .Where(r => r[cust] is not null) + .GroupBy(r => r[cust]!.ToString()!) + .ToDictionary(g => g.Key, g => g.Select(r => ((DateTime)r[odate]!).Year).Distinct().Count()); + + Assert.Equal(expected.Count, got.Count); + foreach (var (k, v) in expected) Assert.Equal(v, got[k]); + } + + [Fact] + public void Nested_aggregate_with_sum_iif_and_constant_group_key() + { + const string sql = """ + SELECT `o1`.`Key0` AS `Key`, IIF(SUM(`o1`.`Count`) IS NULL, 0, SUM(`o1`.`Count`)) AS `Count` + FROM ( + SELECT `o0`.`Count`, 1 AS `Key0` + FROM ( + SELECT COUNT(*) AS `Count` + FROM `Orders` AS `o` + GROUP BY `o`.`CustomerID` + ) AS `o0` + ) AS `o1` + GROUP BY `o1`.`Key0` + """; + + var rows = Query(sql, out var columns); + Assert.Equal(["Key", "Count"], columns); + var only = Assert.Single(rows); + Assert.Equal(1, only[0]); // constant `1 AS Key0` stays int + Assert.Equal(830, only[1]); // SUM preserves the integer (COUNT) input type + } + + // ORDER BY a grouping expression that was projected away (the failing GroupBy_anonymous_key... shape). + // The ORDER BY key must resolve in the group scope, not over the projected output columns. + [Fact] + public void Group_by_derived_key_order_by_that_key() + { + const string sql = """ + SELECT COUNT(*) AS I0, `o0`.`I0` AS I1 + FROM (SELECT DATEPART('yyyy', `o`.`OrderDate`) AS I0 FROM `Orders` AS `o`) AS `o0` + GROUP BY `o0`.`I0` + ORDER BY `o0`.`I0` + """; + var rows = Query(sql, out _); + var years = rows.Select(r => Convert.ToInt32(r[1])).ToList(); + Assert.Equal(years.OrderBy(y => y).ToList(), years); // ascending by year + Assert.Equal(new[] { 1996, 1997, 1998 }, years); // Northwind orders span three years + } + + // ORDER BY an aggregate (not a grouping key). + [Fact] + public void Group_by_order_by_the_aggregate() + { + var rows = Query("SELECT EmployeeID, COUNT(*) AS n FROM Orders GROUP BY EmployeeID ORDER BY COUNT(*) DESC", out _); + var counts = rows.Select(r => Convert.ToInt32(r[1])).ToList(); + Assert.Equal(counts.OrderByDescending(c => c).ToList(), counts); // most orders first + } +} diff --git a/test/LibRed.Engine.Tests/AggregateTypeTests.cs b/test/LibRed.Engine.Tests/AggregateTypeTests.cs new file mode 100644 index 00000000..aa7c8ce7 --- /dev/null +++ b/test/LibRed.Engine.Tests/AggregateTypeTests.cs @@ -0,0 +1,58 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Aggregate result CLR types must match Access (verified vs ACE), so EF reads them with the expected +// GetInt32/GetDouble/GetDecimal without a cast error. +public class AggregateTypeTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"agg-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static object? Scalar(string sql) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + return new QueryEngine(db).ExecuteQuery(sql).Rows.First()[0]; + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Count_is_int32() + { + Assert.IsType(Scalar("SELECT COUNT(*) FROM Products")); + Assert.Equal(77, Scalar("SELECT COUNT(*) FROM Products")); + } + + [Fact] + public void Sum_preserves_the_input_type() + { + // Integer columns sum to Int32 (the EF provider emits a bare SUM and reads by the operand type). + Assert.IsType(Scalar("SELECT SUM(UnitsInStock) FROM Products")); // smallint + Assert.IsType(Scalar("SELECT SUM(OrderID) FROM Orders")); // long/int + Assert.IsType(Scalar("SELECT SUM(UnitPrice) FROM Products")); // currency + } + + [Fact] + public void Avg_is_double_for_integers_and_decimal_for_currency() + { + Assert.IsType(Scalar("SELECT AVG(UnitsInStock) FROM Products")); + Assert.IsType(Scalar("SELECT AVG(UnitPrice) FROM Products")); + } + + [Fact] + public void Min_max_preserve_the_column_type() + { + Assert.IsType(Scalar("SELECT MAX(UnitsInStock) FROM Products")); // smallint + Assert.IsType(Scalar("SELECT MIN(UnitPrice) FROM Products")); // currency + } +} diff --git a/test/LibRed.Engine.Tests/AliaslessDerivedTableTests.cs b/test/LibRed.Engine.Tests/AliaslessDerivedTableTests.cs new file mode 100644 index 00000000..f7a9328a --- /dev/null +++ b/test/LibRed.Engine.Tests/AliaslessDerivedTableTests.cs @@ -0,0 +1,48 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class AliaslessDerivedTableTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"aliasless-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // Access permits a derived table with no alias; EF emits one for `.Any()`: + // SELECT EXISTS (SELECT 1 FROM Customers) FROM (SELECT COUNT(*) FROM ) + [Fact] + public void Aliasless_derived_table_in_from() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + var rows = e.ExecuteQuery( + "SELECT EXISTS (SELECT 1 FROM Customers) AS c FROM (SELECT COUNT(*) FROM Orders)").Rows.ToList(); + var only = Assert.Single(rows); + Assert.Equal(true, only[0]); // Customers is non-empty → EXISTS true + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Aliasless_derived_table_projecting_its_column() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + // The unaliased derived table's column is reachable unqualified. + var rows = new QueryEngine(db).ExecuteQuery( + "SELECT n FROM (SELECT COUNT(*) AS n FROM Orders)").Rows.ToList(); + Assert.Equal(830, Assert.Single(rows)[0]); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/AlterAddCheckTests.cs b/test/LibRed.Engine.Tests/AlterAddCheckTests.cs new file mode 100644 index 00000000..91c9b29d --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterAddCheckTests.cs @@ -0,0 +1,85 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ALTER TABLE ... ADD CONSTRAINT name CHECK (expr): persists the check to LvProp; the engine then enforces it +// on insert/update (like a CREATE TABLE check). Merges with any existing checks. +public class AlterAddCheckTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"aac-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Fact] + public void Alter_add_check_is_persisted_and_enforced() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE tblInvoices ( ID LONG PRIMARY KEY, Amount DOUBLE )"); + e.ExecuteNonQuery("ALTER TABLE tblInvoices ADD CONSTRAINT CheckAmount CHECK (Amount > 0)"); + + e.ExecuteNonQuery("INSERT INTO tblInvoices (ID, Amount) VALUES (1, 50)"); // passes + var ex = Assert.Throws(() => + e.ExecuteNonQuery("INSERT INTO tblInvoices (ID, Amount) VALUES (2, -5)")); + Assert.Contains("CheckAmount", ex.Message); + } + + [Fact] + public void Alter_add_check_merges_with_an_existing_check() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( ID LONG PRIMARY KEY, A DOUBLE, B DOUBLE, CONSTRAINT CkA CHECK (A > 0) )"); + e.ExecuteNonQuery("ALTER TABLE T ADD CONSTRAINT CkB CHECK (B < 100)"); + + // both checks now enforced + e.ExecuteNonQuery("INSERT INTO T (ID, A, B) VALUES (1, 5, 50)"); // both pass + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (ID, A, B) VALUES (2, -1, 50)")); // CkA + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (ID, A, B) VALUES (3, 5, 200)")); // CkB + } + + [Fact] + public void Drop_check_constraint_stops_enforcement() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( ID LONG PRIMARY KEY, Amount LONG )"); + e.ExecuteNonQuery("ALTER TABLE T ADD CONSTRAINT CK_T_Amount CHECK (Amount > 0)"); + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (ID, Amount) VALUES (1, -5)")); // enforced + + e.ExecuteNonQuery("ALTER TABLE T DROP CONSTRAINT CK_T_Amount"); + e.ExecuteNonQuery("INSERT INTO T (ID, Amount) VALUES (2, -5)"); // no longer enforced + Assert.Equal(-5, Convert.ToInt32(e.ExecuteQuery("SELECT Amount FROM T WHERE ID = 2").Rows.Single()[0])); + } + + [Fact] + public void Drop_check_constraint_leaves_a_sibling_check_intact() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( ID LONG PRIMARY KEY, A LONG, B LONG, CONSTRAINT CkA CHECK (A > 0) )"); + e.ExecuteNonQuery("ALTER TABLE T ADD CONSTRAINT CkB CHECK (B < 100)"); + e.ExecuteNonQuery("ALTER TABLE T DROP CONSTRAINT CkA"); + + e.ExecuteNonQuery("INSERT INTO T (ID, A, B) VALUES (1, -1, 50)"); // CkA gone → A=-1 allowed + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (ID, A, B) VALUES (2, 5, 200)")); // CkB still enforced + } + + [Fact] + public void Docs_credit_limit_scenario_via_alter() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE tblCreditLimit ( Lmt DOUBLE )"); + e.ExecuteNonQuery("INSERT INTO tblCreditLimit VALUES (100)"); + e.ExecuteNonQuery("CREATE TABLE tblCustomers ( CustomerID LONG PRIMARY KEY )"); + e.ExecuteNonQuery("ALTER TABLE tblCustomers ADD COLUMN CustomerLimit DOUBLE"); + e.ExecuteNonQuery("ALTER TABLE tblCustomers ADD CONSTRAINT LimitRule CHECK (CustomerLimit <= (SELECT Lmt FROM tblCreditLimit))"); + e.ExecuteNonQuery("INSERT INTO tblCustomers (CustomerID, CustomerLimit) VALUES (1, 50)"); + + // Update above the limit fails; at/below the limit succeeds. + Assert.ThrowsAny(() => e.ExecuteNonQuery("UPDATE tblCustomers SET CustomerLimit = 200 WHERE CustomerID = 1")); + e.ExecuteNonQuery("UPDATE tblCustomers SET CustomerLimit = 100 WHERE CustomerID = 1"); + Assert.Equal(100.0, Convert.ToDouble(e.ExecuteQuery("SELECT CustomerLimit FROM tblCustomers WHERE CustomerID = 1").Rows.Single()[0])); + } +} diff --git a/test/LibRed.Engine.Tests/AlterAddUniqueTests.cs b/test/LibRed.Engine.Tests/AlterAddUniqueTests.cs new file mode 100644 index 00000000..0386f085 --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterAddUniqueTests.cs @@ -0,0 +1,45 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ALTER TABLE ... ADD CONSTRAINT name UNIQUE (cols): adds a unique (non-primary) index, which LibRed then +// enforces on insert (a duplicate composite key is rejected; NULLs are distinct). +public class AlterAddUniqueTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"auq-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Fact] + public void Add_unique_constraint_is_enforced() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE tblCustomers ( CustomerID LONG PRIMARY KEY, [Last Name] TEXT(30), [First Name] TEXT(30) )"); + e.ExecuteNonQuery("ALTER TABLE tblCustomers ADD CONSTRAINT UQ_Name UNIQUE ([Last Name], [First Name])"); + + e.ExecuteNonQuery("INSERT INTO tblCustomers (CustomerID, [Last Name], [First Name]) VALUES (1, 'Smith', 'John')"); + // different name → fine + e.ExecuteNonQuery("INSERT INTO tblCustomers (CustomerID, [Last Name], [First Name]) VALUES (2, 'Smith', 'Jane')"); + // duplicate composite → rejected + Assert.ThrowsAny(() => + e.ExecuteNonQuery("INSERT INTO tblCustomers (CustomerID, [Last Name], [First Name]) VALUES (3, 'Smith', 'John')")); + } + + [Fact] + public void Add_unique_on_a_populated_table_backfills() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, C TEXT(20) )"); + e.ExecuteNonQuery("INSERT INTO T (K, C) VALUES (1, 'a')"); + e.ExecuteNonQuery("INSERT INTO T (K, C) VALUES (2, 'b')"); + e.ExecuteNonQuery("ALTER TABLE T ADD CONSTRAINT UQ_C UNIQUE (C)"); + // the back-filled index enforces new inserts + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (K, C) VALUES (3, 'a')")); + e.ExecuteNonQuery("INSERT INTO T (K, C) VALUES (4, 'c')"); + } +} diff --git a/test/LibRed.Engine.Tests/AlterColumnDefaultTests.cs b/test/LibRed.Engine.Tests/AlterColumnDefaultTests.cs new file mode 100644 index 00000000..3e6e9c1e --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterColumnDefaultTests.cs @@ -0,0 +1,50 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ALTER TABLE ... ALTER COLUMN ... SET/DROP DEFAULT through LibRed's engine. An LvProp edit only (no retype): +// the default is applied on an omit-insert, DROP DEFAULT removes it (a later omit-insert reads NULL), and +// SET DEFAULT replaces it. EF Core emits `ALTER COLUMN c DROP DEFAULT` in migrations. +public class AlterColumnDefaultTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"altdef-eng-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY, V long)"); + return e; + } + + private static object? ReadV(QueryEngine e, int id) => + e.ExecuteQuery($"SELECT V FROM T WHERE Id = {id}").Rows.Single()[0]; + + [Fact] + public void Set_then_drop_then_set_default() + { + var e = Fresh(); + + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V SET DEFAULT 7"); + e.ExecuteNonQuery("INSERT INTO T (Id) VALUES (1)"); + Assert.Equal(7, Convert.ToInt32(ReadV(e, 1))); // default applied on omit-insert + + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V DROP DEFAULT"); + e.ExecuteNonQuery("INSERT INTO T (Id) VALUES (2)"); + Assert.Null(ReadV(e, 2)); // default gone → NULL + + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V SET DEFAULT 9"); + e.ExecuteNonQuery("INSERT INTO T (Id) VALUES (3)"); + Assert.Equal(9, Convert.ToInt32(ReadV(e, 3))); // replacement default applied + } + + [Fact] + public void Drop_default_on_a_column_without_one_is_a_noop() + { + var e = Fresh(); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V DROP DEFAULT"); // no default set — must not throw + e.ExecuteNonQuery("INSERT INTO T (Id, V) VALUES (1, 42)"); + Assert.Equal(42, Convert.ToInt32(ReadV(e, 1))); + } +} diff --git a/test/LibRed.Engine.Tests/AlterColumnRequiredTests.cs b/test/LibRed.Engine.Tests/AlterColumnRequiredTests.cs new file mode 100644 index 00000000..d4b79def --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterColumnRequiredTests.cs @@ -0,0 +1,54 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ALTER TABLE ... ALTER COLUMN ... NOT NULL / NULL through LibRed's engine. Sets (or clears) the column's +// Required LvProp property — the ALTER-side of what CREATE writes — and the engine enforces it on insert. +// EF emits this to "make a column required" (with a prior UPDATE to null-fill and a DEFAULT). +public class AlterColumnRequiredTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"altreq-eng-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY, V text(255))"); // V nullable + return e; + } + + [Fact] + public void Make_column_required_then_nullable() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO T (Id, V) VALUES (1, 'a')"); + + // Make required: an insert omitting V is now rejected. + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V text(255) NOT NULL"); + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (Id) VALUES (2)")); + e.ExecuteNonQuery("INSERT INTO T (Id, V) VALUES (3, 'c')"); // supplying a value still works + + // Make nullable again: omitting V is accepted (LibRed clears Required, unlike ACE's DDL). + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V text(255) NULL"); + e.ExecuteNonQuery("INSERT INTO T (Id) VALUES (4)"); + Assert.Null(e.ExecuteQuery("SELECT V FROM T WHERE Id = 4").Rows.Single()[0]); + } + + [Fact] + public void Make_required_with_default_matches_the_ef_migration_shape() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO T (Id) VALUES (1)"); // V is null + + // The EF "make required" sequence: drop default, null-fill, retype NOT NULL DEFAULT ''. + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V DROP DEFAULT"); + e.ExecuteNonQuery("UPDATE T SET V = '' WHERE V IS NULL"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V text(255) NOT NULL DEFAULT ''"); + + Assert.Equal("", e.ExecuteQuery("SELECT V FROM T WHERE Id = 1").Rows.Single()[0]); // null-filled row + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (Id, V) VALUES (2, NULL)")); // explicit NULL rejected + e.ExecuteNonQuery("INSERT INTO T (Id) VALUES (3)"); // omit → default '' applies + Assert.Equal("", e.ExecuteQuery("SELECT V FROM T WHERE Id = 3").Rows.Single()[0]); + } +} diff --git a/test/LibRed.Engine.Tests/AlterColumnTests.cs b/test/LibRed.Engine.Tests/AlterColumnTests.cs new file mode 100644 index 00000000..83ff6985 --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterColumnTests.cs @@ -0,0 +1,206 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ALTER TABLE ... ALTER COLUMN field type: changes a variable text/binary column's max length (a descriptor +// edit; existing rows are untouched, since variable columns store their own length). Changing the storage type +// throws NotSupported (would need a full column rewrite). +public class AlterColumnTests +{ + private static (QueryEngine Engine, JetDatabase Db) Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"alc-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var db = JetDatabase.Open(path, readOnly: false); + return (new QueryEngine(db), db); + } + + private static int Len(JetDatabase db, string table, string col) + => db.Catalog.UserTables.Single(t => t.Name == table).Columns.Single(c => c.Name == col).Length; + + [Fact] + public void Widen_a_text_column_keeps_existing_data() + { + var (e, db) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, V TEXT(20) )"); + e.ExecuteNonQuery("INSERT INTO T (K, V) VALUES (1, 'short')"); + Assert.Equal(40, Len(db, "T", "V")); // 20 chars * 2 bytes + + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V TEXT(40)"); + Assert.Equal(80, Len(db, "T", "V")); // 40 chars * 2 + + Assert.Equal("short", e.ExecuteQuery("SELECT V FROM T").Rows.Single()[0]); // data survives + // and a longer value now fits + e.ExecuteNonQuery("INSERT INTO T (K, V) VALUES (2, 'a much longer value than twenty chars')"); + } + + [Fact] + public void Narrow_a_text_column_is_a_metadata_change() + { + var (e, db) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, V TEXT(40) )"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V TEXT(10)"); + Assert.Equal(20, Len(db, "T", "V")); + } + + [Fact] + public void Change_numeric_type_converts_values() + { + var (e, db) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, N LONG )"); + e.ExecuteNonQuery("INSERT INTO T (K, N) VALUES (1, 42)"); + e.ExecuteNonQuery("INSERT INTO T (K, N) VALUES (2, 7)"); + + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN N DOUBLE"); // LONG -> DOUBLE, full rewrite + + var col = db.Catalog.UserTables.Single(t => t.Name == "T").Columns.Single(c => c.Name == "N"); + Assert.Equal(LibRed.Catalog.JetDataType.Double, col.Type); + var rows = e.ExecuteQuery("SELECT K, N FROM T ORDER BY K").Rows + .Select(r => (Convert.ToInt32(r[0]), Convert.ToDouble(r[1]))).ToArray(); + Assert.Equal([(1, 42.0), (2, 7.0)], rows); + } + + [Fact] + public void Change_text_to_number_converts_and_keeps_other_columns() + { + var (e, db) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, Label TEXT(20), V TEXT(20) )"); + e.ExecuteNonQuery("INSERT INTO T (K, Label, V) VALUES (1, 'one', '42')"); + e.ExecuteNonQuery("INSERT INTO T (K, Label, V) VALUES (2, 'two', '100')"); + + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V LONG"); // TEXT -> LONG + + Assert.Equal(LibRed.Catalog.JetDataType.Int32, + db.Catalog.UserTables.Single(t => t.Name == "T").Columns.Single(c => c.Name == "V").Type); + var rows = e.ExecuteQuery("SELECT K, Label, V FROM T ORDER BY K").Rows + .Select(r => ($"{r[0]}", $"{r[1]}", Convert.ToInt32(r[2]))).ToArray(); + Assert.Equal([("1", "one", 42), ("2", "two", 100)], rows); + } + + [Fact] + public void Rewrite_preserves_primary_key_uniqueness() + { + var (e, _) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, N SHORT )"); + e.ExecuteNonQuery("INSERT INTO T (K, N) VALUES (1, 5)"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN N LONG"); // SHORT -> LONG + // PK still enforced after the rebuild + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (K, N) VALUES (1, 9)")); + e.ExecuteNonQuery("INSERT INTO T (K, N) VALUES (2, 9)"); + } + + [Fact] + public void Rewrite_preserves_a_secondary_unique_index() + { + var (e, _) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, N SHORT, C TEXT(20) )"); + e.ExecuteNonQuery("CREATE UNIQUE INDEX UQ_C ON T (C)"); + e.ExecuteNonQuery("INSERT INTO T (K, N, C) VALUES (1, 5, 'a')"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN N LONG"); + // the unique index on C survives the rebuild + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (K, N, C) VALUES (2, 9, 'a')")); + e.ExecuteNonQuery("INSERT INTO T (K, N, C) VALUES (3, 9, 'b')"); + } + + private static QueryEngine Related() + { + var (e, _) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE P ( PID LONG PRIMARY KEY, PData LONG )"); + e.ExecuteNonQuery("CREATE TABLE C ( CID LONG PRIMARY KEY, PID LONG, CData LONG, CONSTRAINT FK FOREIGN KEY (PID) REFERENCES P (PID) )"); + e.ExecuteNonQuery("INSERT INTO P (PID, PData) VALUES (1, 100)"); + e.ExecuteNonQuery("INSERT INTO C (CID, PID, CData) VALUES (10, 1, 5)"); + return e; + } + + [Fact] + public void Alter_non_relationship_column_on_a_child_preserves_the_foreign_key() + { + var e = Related(); + e.ExecuteNonQuery("ALTER TABLE C ALTER COLUMN CData DOUBLE"); // non-rel column on a child in a relationship + + // data survived and the FK is still enforced after the rebuild + Assert.Equal(5.0, Convert.ToDouble(e.ExecuteQuery("SELECT CData FROM C WHERE CID = 10").Rows.Single()[0])); + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO C (CID, PID, CData) VALUES (11, 99, 1)")); // orphan rejected + e.ExecuteNonQuery("INSERT INTO C (CID, PID, CData) VALUES (12, 1, 2)"); // valid parent ok + } + + [Theory] + [InlineData("ALTER TABLE C ALTER COLUMN PID DOUBLE")] // the FK column + [InlineData("ALTER TABLE P ALTER COLUMN PID DOUBLE")] // the referenced PK column + public void Alter_a_relationship_column_is_rejected(string sql) + { + var e = Related(); + var ex = Assert.Throws(() => e.ExecuteNonQuery(sql)); + Assert.Contains("part of one or more relationships", ex.Message); + } + + [Theory] + [InlineData("ALTER TABLE C ALTER COLUMN Code TEXT(20)")] + [InlineData("ALTER TABLE P ALTER COLUMN Code TEXT(20)")] + public void Alter_a_text_relationship_column_length_is_rejected(string sql) + { + var (e, _) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE P (Code TEXT(10) PRIMARY KEY)"); + e.ExecuteNonQuery("CREATE TABLE C (Id LONG PRIMARY KEY, Code TEXT(10), " + + "CONSTRAINT FK FOREIGN KEY (Code) REFERENCES P (Code))"); + + var ex = Assert.Throws(() => e.ExecuteNonQuery(sql)); + Assert.Contains("part of one or more relationships", ex.Message); + } + + [Fact] + public void Alter_column_with_default_sets_and_applies_it() + { + var (e, _) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, V TEXT(20) )"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V TEXT(40) DEFAULT 'unknown'"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); // V omitted → default applies + Assert.Equal("unknown", e.ExecuteQuery("SELECT V FROM T WHERE K = 1").Rows.Single()[0]); + } + + [Fact] + public void Alter_column_default_replaces_an_existing_one() + { + var (e, _) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, V TEXT(20) DEFAULT 'old' )"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN V TEXT(20) DEFAULT 'new'"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + Assert.Equal("new", e.ExecuteQuery("SELECT V FROM T WHERE K = 1").Rows.Single()[0]); + } + + [Fact] + public void Alter_column_default_with_a_function() + { + var (e, _) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, N LONG )"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN N LONG DEFAULT (1 + 2)"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + Assert.Equal(3, Convert.ToInt32(e.ExecuteQuery("SELECT N FROM T WHERE K = 1").Rows.Single()[0])); + } + + [Fact] + public void Alter_a_parent_side_non_relationship_column_preserves_the_relationship() + { + var e = Related(); + e.ExecuteNonQuery("ALTER TABLE P ALTER COLUMN PData DOUBLE"); // parent's non-rel column + + // parent data converted, and the relationship still enforced (child orphan rejected, valid parent ok) + Assert.Equal(100.0, Convert.ToDouble(e.ExecuteQuery("SELECT PData FROM P WHERE PID = 1").Rows.Single()[0])); + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO C (CID, PID, CData) VALUES (20, 77, 1)")); // orphan + e.ExecuteNonQuery("INSERT INTO C (CID, PID, CData) VALUES (21, 1, 1)"); // valid parent + // the existing child row still resolves to its parent + Assert.Equal(5, Convert.ToInt32(e.ExecuteQuery("SELECT CData FROM C WHERE CID = 10").Rows.Single()[0])); + } + + [Fact] + public void Alter_parent_and_child_both_work_across_the_relationship() + { + var e = Related(); + e.ExecuteNonQuery("ALTER TABLE C ALTER COLUMN CData DOUBLE"); // child rebuild + e.ExecuteNonQuery("ALTER TABLE P ALTER COLUMN PData DOUBLE"); // then parent rebuild + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO C (CID, PID, CData) VALUES (30, 88, 1)")); + e.ExecuteNonQuery("INSERT INTO C (CID, PID, CData) VALUES (31, 1, 1)"); + } +} diff --git a/test/LibRed.Engine.Tests/AlterTableAddForeignKeyTests.cs b/test/LibRed.Engine.Tests/AlterTableAddForeignKeyTests.cs new file mode 100644 index 00000000..c32a862a --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterTableAddForeignKeyTests.cs @@ -0,0 +1,67 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class AlterTableAddForeignKeyTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"alterfk-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // ALTER TABLE … ADD CONSTRAINT … FOREIGN KEY (col) REFERENCES parent (col) — the Northwind + // CustomerCustomerDemo → CustomerDemographics shape. It executes and reads back as a relationship. + [Fact] + public void Add_foreign_key_to_existing_table() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Demographics (CustomerTypeID TEXT(10) CONSTRAINT PK_Demo PRIMARY KEY)"); + e.ExecuteNonQuery("CREATE TABLE CustDemoLink (CustomerID TEXT(10), CustomerTypeID TEXT(10))"); + e.ExecuteNonQuery( + "ALTER TABLE CustDemoLink ADD CONSTRAINT `FK_CustDemoLink` FOREIGN KEY (`CustomerTypeID`) " + + "REFERENCES `Demographics` (`CustomerTypeID`)"); + } + + using (var db = JetDatabase.Open(path)) // fresh open: read from the file + { + var fk = Assert.Single(db.Catalog.ForeignKeysOf("CustDemoLink")); + Assert.Equal("Demographics", fk.ReferencedTable, ignoreCase: true); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A self-referencing foreign key (Northwind's Employees.ReportsTo → Employees.EmployeeID). + [Fact] + public void Add_self_referencing_foreign_key() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Staff (EmployeeID LONG CONSTRAINT PK_Staff PRIMARY KEY, ReportsTo LONG)"); + e.ExecuteNonQuery( + "ALTER TABLE Staff ADD CONSTRAINT `FK_Staff_Staff` FOREIGN KEY (`ReportsTo`) " + + "REFERENCES `Staff` (`EmployeeID`)"); + } + + using (var db = JetDatabase.Open(path)) + { + var fk = Assert.Single(db.Catalog.ForeignKeysOf("Staff")); + Assert.Equal("Staff", fk.ReferencedTable, ignoreCase: true); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/AlterTableAddPrimaryKeyTests.cs b/test/LibRed.Engine.Tests/AlterTableAddPrimaryKeyTests.cs new file mode 100644 index 00000000..cd255dd6 --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterTableAddPrimaryKeyTests.cs @@ -0,0 +1,44 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class AlterTableAddPrimaryKeyTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"alterpk-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // ALTER TABLE … ADD CONSTRAINT … PRIMARY KEY (a, b) adds a named, primary, unique index; it persists + // and reads back with the right name and columns (Northwind's CcdTest shape). + [Fact] + public void Add_multi_column_primary_key() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE CcdTest (CustomerID TEXT(10), CustomerTypeID TEXT(10))"); + e.ExecuteNonQuery( + "ALTER TABLE CcdTest ADD CONSTRAINT `PK_CcdTest` " + + "PRIMARY KEY (`CustomerID`, `CustomerTypeID`)"); + } + + using (var db = JetDatabase.Open(path)) // fresh open: read from the file + { + var t = db.Catalog.Tables.First(x => x.Name == "CcdTest"); + var pk = Assert.Single(t.Indexes, ix => ix.IsPrimaryKey); + Assert.Equal("PK_CcdTest", pk.Name); + Assert.True(pk.IsUnique); + Assert.Equal(["CustomerID", "CustomerTypeID"], pk.Columns.Select(c => c.Column.Name)); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/AlterTableDropConstraintTests.cs b/test/LibRed.Engine.Tests/AlterTableDropConstraintTests.cs new file mode 100644 index 00000000..22ea403f --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterTableDropConstraintTests.cs @@ -0,0 +1,125 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class AlterTableDropConstraintTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"dropc-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // ALTER TABLE … DROP CONSTRAINT : LibRed enforces FKs from MSysRelationships, so dropping the + // relationship there stops enforcement. Verified: a row that violated the FK is rejected before the + // drop and accepted after, the relationship is gone from the catalog, and it stays gone on reopen. + [Fact] + public void Drop_foreign_key_constraint_stops_enforcement_and_persists() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Parent (Id LONG CONSTRAINT PK_Parent PRIMARY KEY)"); + e.ExecuteNonQuery( + "CREATE TABLE Child (Id LONG CONSTRAINT PK_Child PRIMARY KEY, ParentId LONG, " + + "CONSTRAINT FK_Child_Parent FOREIGN KEY (ParentId) REFERENCES Parent (Id))"); + e.ExecuteNonQuery("INSERT INTO Parent (Id) VALUES (1)"); + + // The FK is enforced: a child pointing at a non-existent parent is rejected. + Assert.Throws( + () => e.ExecuteNonQuery("INSERT INTO Child (Id, ParentId) VALUES (1, 99)")); + + e.ExecuteNonQuery("ALTER TABLE Child DROP CONSTRAINT FK_Child_Parent"); + + // Now the same insert is accepted; the relationship AND its backing index are gone. + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO Child (Id, ParentId) VALUES (1, 99)")); + Assert.Empty(db.Catalog.ForeignKeysOf("Child")); + Assert.DoesNotContain(db.Catalog.FindTable("Child")!.Indexes, i => i.Name == "FK_Child_Parent"); + } + + // Reopen: the drop persisted (soft-deleted MSysRelationships row + removed TDEF blocks). + using (var db = JetDatabase.Open(path)) + { + Assert.Empty(db.Catalog.ForeignKeysOf("Child")); + var child = db.Catalog.FindTable("Child")!; + Assert.Single(child.Indexes); // only the primary key remains + Assert.True(child.Indexes[0].IsPrimaryKey); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Drop then re-add the same FK: because the drop fully removes the old backing index + TDEF blocks, + // the re-add doesn't collide with an orphan — enforcement is back afterward. + [Fact] + public void Drop_then_re_add_same_foreign_key_works() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Parent (Id LONG CONSTRAINT PK_Parent PRIMARY KEY)"); + e.ExecuteNonQuery("CREATE TABLE Child (Id LONG CONSTRAINT PK_Child PRIMARY KEY, ParentId LONG, " + + "CONSTRAINT FK_Child_Parent FOREIGN KEY (ParentId) REFERENCES Parent (Id))"); + e.ExecuteNonQuery("INSERT INTO Parent (Id) VALUES (1)"); + + e.ExecuteNonQuery("ALTER TABLE Child DROP CONSTRAINT FK_Child_Parent"); + e.ExecuteNonQuery("ALTER TABLE Child ADD CONSTRAINT FK_Child_Parent FOREIGN KEY (ParentId) REFERENCES Parent (Id)"); + + // The re-added FK is a single, enforced relationship again. + Assert.Single(db.Catalog.ForeignKeysOf("Child")); + Assert.Single(db.Catalog.FindTable("Child")!.Indexes.Where(i => i.Name == "FK_Child_Parent")); + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO Child (Id, ParentId) VALUES (1, 99)")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A self-referencing FK hosts both ends (outgoing + incoming block) in one TDEF; dropping it removes + // both and the backing index. + [Fact] + public void Drop_self_referencing_foreign_key() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Emp (Id LONG CONSTRAINT PK_Emp PRIMARY KEY, MgrId LONG, " + + "CONSTRAINT FK_Emp_Emp FOREIGN KEY (MgrId) REFERENCES Emp (Id))"); + e.ExecuteNonQuery("INSERT INTO Emp (Id, MgrId) VALUES (1, NULL)"); + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO Emp (Id, MgrId) VALUES (2, 99)")); + + e.ExecuteNonQuery("ALTER TABLE Emp DROP CONSTRAINT FK_Emp_Emp"); + + Assert.Empty(db.Catalog.ForeignKeysOf("Emp")); + Assert.Single(db.Catalog.FindTable("Emp")!.Indexes); // only PK_Emp + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO Emp (Id, MgrId) VALUES (2, 99)")); // now allowed + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Dropping a name that is neither a relationship nor an index throws a clear error. (A real FK/PK/unique + // name would be dropped — DROP CONSTRAINT falls through to the index-drop path; see DropConstraintIndexTests.) + [Fact] + public void Drop_unknown_constraint_throws() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE T (Id LONG CONSTRAINT PK_T PRIMARY KEY)"); + var ex = Assert.Throws( + () => e.ExecuteNonQuery("ALTER TABLE T DROP CONSTRAINT NoSuchThing")); + Assert.Contains("NoSuchThing", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/AlterTableParsingTests.cs b/test/LibRed.Engine.Tests/AlterTableParsingTests.cs new file mode 100644 index 00000000..01c321e1 --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterTableParsingTests.cs @@ -0,0 +1,106 @@ +using LibRed.Sql.Ast; +using LibRed.Sql.Parsing; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Step 1 of ALTER TABLE: parsing only. Each Access ALTER TABLE form maps to the right AST action; execution +// of each action follows in its own step. +public class AlterTableParsingTests +{ + private static AlterTableStatement Parse(string sql) + => Assert.IsType(new AntlrSqlParser().ParseStatement(sql)); + + [Fact] + public void Add_column_with_and_without_the_column_keyword() + { + var a = Assert.IsType(Parse("ALTER TABLE Employees ADD COLUMN Notes TEXT(25)").Action); + Assert.Equal("Notes", a.Column.Name); + Assert.Equal("TEXT", a.Column.TypeName, ignoreCase: true); + Assert.Equal(25, a.Column.Size); + + // EF omits the COLUMN keyword. + var b = Assert.IsType(Parse("ALTER TABLE `People` ADD `Alias` LONGCHAR NOT NULL").Action); + Assert.Equal("Alias", b.Column.Name); + Assert.True(b.Column.NotNull); + } + + [Fact] + public void Add_foreign_key_constraint() + { + var a = Assert.IsType(Parse( + "ALTER TABLE `Products` ADD CONSTRAINT `FK_Products_Categories` " + + "FOREIGN KEY (`CategoryID`) REFERENCES `Categories` (`CategoryID`)").Action); + Assert.Equal("FK_Products_Categories", a.ForeignKey.Name); + Assert.Equal(["CategoryID"], a.ForeignKey.Columns); + Assert.Equal("Categories", a.ForeignKey.ReferencedTable); + Assert.Equal(["CategoryID"], a.ForeignKey.ReferencedColumns); + } + + [Fact] + public void Add_primary_key_and_unique_constraints() + { + var pk = Assert.IsType(Parse( + "ALTER TABLE `Orders` ADD CONSTRAINT `PK_Orders` PRIMARY KEY (`OrderID`)").Action); + Assert.Equal("PK_Orders", pk.Name); + Assert.Equal(["OrderID"], pk.Columns); + + var uq = Assert.IsType(Parse( + "ALTER TABLE `Customers` ADD CONSTRAINT `UQ_Email` UNIQUE (`Email`)").Action); + Assert.Equal("UQ_Email", uq.Unique.Name); + Assert.Equal(["Email"], uq.Unique.Columns); + } + + [Fact] + public void Alter_column_changes_type() + { + var a = Assert.IsType(Parse("ALTER TABLE Employees ALTER COLUMN ZipCode TEXT(10)").Action); + Assert.Equal("ZipCode", a.Field); + Assert.Equal("TEXT", a.TypeName, ignoreCase: true); + Assert.Equal(10, a.Size); + } + + [Fact] + public void Drop_column_and_drop_constraint() + { + var dc = Assert.IsType(Parse("ALTER TABLE Employees DROP COLUMN Notes").Action); + Assert.Equal("Notes", dc.Field); + + var dk = Assert.IsType(Parse("ALTER TABLE `Products` DROP CONSTRAINT `FK_Products_Categories`").Action); + Assert.Equal("FK_Products_Categories", dk.Name); + } + + // The three renames are one ALTER TABLE family, so the table is always the statement's subject. These are + // the exact forms JetMigrationsSqlGenerator emits for Rename{Table,Column,Index}Operation. + [Fact] + public void Rename_table_column_and_index() + { + var t = Parse("ALTER TABLE `People` RENAME TO `Person`"); + Assert.Equal("People", t.Table); + Assert.Equal("Person", Assert.IsType(t.Action).NewName); + + var c = Parse("ALTER TABLE `Table1` RENAME COLUMN `Foo` TO `Bar`"); + Assert.Equal("Table1", c.Table); + var rc = Assert.IsType(c.Action); + Assert.Equal("Foo", rc.Field); + Assert.Equal("Bar", rc.NewName); + + var i = Parse("ALTER TABLE `Orders` RENAME INDEX `IX_Old` TO `IX_New`"); + Assert.Equal("Orders", i.Table); + var ri = Assert.IsType(i.Action); + Assert.Equal("IX_Old", ri.Index); + Assert.Equal("IX_New", ri.NewName); + } + + // Undelimited and bracket-delimited identifiers parse the same way (EF always backticks, but hand-written + // and ADOX-style SQL uses these), and the keywords are case-insensitive like the rest of the grammar. + [Fact] + public void Rename_accepts_bare_and_bracketed_identifiers_and_is_case_insensitive() + { + Assert.Equal("Person", Assert.IsType(Parse("alter table People rename to Person").Action).NewName); + + var rc = Assert.IsType(Parse("ALTER TABLE [Table1] Rename Column [Foo] To [Bar]").Action); + Assert.Equal("Foo", rc.Field); + Assert.Equal("Bar", rc.NewName); + } +} diff --git a/test/LibRed.Engine.Tests/AlterTableRenameTests.cs b/test/LibRed.Engine.Tests/AlterTableRenameTests.cs new file mode 100644 index 00000000..d79ceecb --- /dev/null +++ b/test/LibRed.Engine.Tests/AlterTableRenameTests.cs @@ -0,0 +1,314 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ALTER TABLE … RENAME TO, executed natively. Jet/ACE has no rename SQL — Access renames through DAO/ADOX — +// so EFCore.Jet emits this as pseudo-SQL and intercepts it out-of-engine. LibRed has no COM to delegate to and +// does the catalog surgery itself, reproducing exactly what ACE does (measured in the Jet suite's +// RenameFanOutProbeTest): the object's MSysObjects.Name moves and MSysRelationships is repointed — and nothing +// else, because ACE touches nothing else. +public class AlterTableRenameTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"rename-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static void CreateParentChild(QueryEngine e) + { + e.ExecuteNonQuery("CREATE TABLE Parent (Id LONG CONSTRAINT PK_Parent PRIMARY KEY, Name TEXT(50))"); + e.ExecuteNonQuery( + "CREATE TABLE Child (Id LONG CONSTRAINT PK_Child PRIMARY KEY, ParentId LONG, " + + "CONSTRAINT FK_Child_Parent FOREIGN KEY (ParentId) REFERENCES Parent (Id))"); + e.ExecuteNonQuery("CREATE INDEX IX_Parent_Name ON Parent (Name)"); + e.ExecuteNonQuery("INSERT INTO Parent (Id, Name) VALUES (1, 'one')"); + e.ExecuteNonQuery("INSERT INTO Child (Id, ParentId) VALUES (1, 1)"); + } + + [Fact] + public void Rename_moves_the_catalog_name_and_repoints_the_relationship() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + CreateParentChild(e); + + e.ExecuteNonQuery("ALTER TABLE Parent RENAME TO ParentRenamed"); + + // The object moved: the new name resolves, the old one no longer does. + Assert.NotNull(db.Catalog.FindTable("ParentRenamed")); + Assert.Null(db.Catalog.FindTable("Parent")); + + // The relationship follows the new name, keeping its own name — exactly as ACE does. + Assert.Collection( + db.Catalog.ForeignKeysOf("Child"), + fk => + { + Assert.Equal("FK_Child_Parent", fk.Name); + Assert.Equal("ParentRenamed", fk.ReferencedTable); + Assert.True(fk.IsEnforced); + }); + + // Indexes ride along and keep their own names (they reference the table by id, not name). + var renamed = db.Catalog.FindTable("ParentRenamed")!; + Assert.Contains(renamed.Indexes, i => i.Name == "PK_Parent"); + Assert.Contains(renamed.Indexes, i => i.Name == "IX_Parent_Name"); + + // The rows are still there and readable under the new name. + Assert.Equal("one", e.ExecuteQuery("SELECT Name FROM ParentRenamed WHERE Id = 1").Rows.Single()[0]); + } + + // …and it all survives a reopen (the catalog edit really is on disk). + using (var db = JetDatabase.Open(path, readOnly: false)) + { + Assert.NotNull(db.Catalog.FindTable("ParentRenamed")); + Assert.Null(db.Catalog.FindTable("Parent")); + Assert.Equal("ParentRenamed", Assert.Single(db.Catalog.ForeignKeysOf("Child")).ReferencedTable); + } + } + finally + { + File.Delete(path); + } + } + + // The repointed relationship must still be a working FK, not just a tidy catalog row. + [Fact] + public void Renamed_table_still_enforces_its_foreign_key() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + CreateParentChild(e); + + e.ExecuteNonQuery("ALTER TABLE Parent RENAME TO ParentRenamed"); + + // Still rejected: the child has no such parent. + Assert.Throws( + () => e.ExecuteNonQuery("INSERT INTO Child (Id, ParentId) VALUES (2, 99)")); + + // Still accepted through the renamed parent. + e.ExecuteNonQuery("INSERT INTO ParentRenamed (Id, Name) VALUES (2, 'two')"); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO Child (Id, ParentId) VALUES (2, 2)")); + } + finally + { + File.Delete(path); + } + } + + // A self-reference names the table on both sides of the same relationship row, so both must be repointed. + [Fact] + public void Rename_repoints_both_sides_of_a_self_reference() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery( + "CREATE TABLE Node (Id LONG CONSTRAINT PK_Node PRIMARY KEY, ParentId LONG, " + + "CONSTRAINT FK_Node_Node FOREIGN KEY (ParentId) REFERENCES Node (Id))"); + + e.ExecuteNonQuery("ALTER TABLE Node RENAME TO Tree"); + + var fk = Assert.Single(db.Catalog.ForeignKeysOf("Tree")); + Assert.Equal("Tree", fk.Table); + Assert.Equal("Tree", fk.ReferencedTable); + Assert.Empty(db.Catalog.ForeignKeysOf("Node")); + } + finally + { + File.Delete(path); + } + } + + // A table is not a collision with itself. EF's "move table to another schema" degrades to a self-rename on + // a schema-less engine (the generator emits RENAME TO the same name), and a case-only change is the same + // object too — ACE allows both (verified in the Jet suite's RenameFanOutProbeTest). + [Fact] + public void Rename_allows_renaming_a_table_to_its_own_name_or_a_different_case() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + CreateParentChild(e); + + // Self-rename: a no-op, but it must not throw — this is what EF's Move_table emits. + e.ExecuteNonQuery("ALTER TABLE Parent RENAME TO Parent"); + Assert.Equal("Parent", db.Catalog.FindTable("Parent")!.Name); + + // Case-only: allowed, and the stored name really does take the new casing. + e.ExecuteNonQuery("ALTER TABLE Parent RENAME TO PARENT"); + Assert.Equal("PARENT", db.Catalog.FindTable("parent")!.Name); + + // The relationship survives both. + Assert.Equal("PARENT", Assert.Single(db.Catalog.ForeignKeysOf("Child")).ReferencedTable); + } + finally + { + File.Delete(path); + } + } + + private static void CreateDocSchema(QueryEngine e) + { + e.ExecuteNonQuery( + "CREATE TABLE Doc (Id LONG CONSTRAINT PK_Doc PRIMARY KEY, Title TEXT(50) DEFAULT 'untitled')"); + e.ExecuteNonQuery("CREATE INDEX IX_Doc_Title ON Doc (Title)"); + e.ExecuteNonQuery( + "CREATE TABLE DocChild (Id LONG CONSTRAINT PK_DocChild PRIMARY KEY, DocId LONG, " + + "CONSTRAINT FK_DocChild_Doc FOREIGN KEY (DocId) REFERENCES Doc (Id))"); + e.ExecuteNonQuery("INSERT INTO Doc (Id, Title) VALUES (1, 'hello')"); + } + + // The measured ACE contract for a column rename: the name moves, the column keeps its DEFAULT (its LvProp + // block is re-owned), the index over it survives keeping its own name, and the data is untouched. + [Fact] + public void Rename_column_moves_the_name_keeps_the_default_and_the_index() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + CreateDocSchema(e); + + e.ExecuteNonQuery("ALTER TABLE Doc RENAME COLUMN Title TO Heading"); + + var doc = db.Catalog.FindTable("Doc")!; + Assert.Contains(doc.Columns, c => c.Name == "Heading"); + Assert.DoesNotContain(doc.Columns, c => c.Name == "Title"); + + // The DEFAULT rides along — this is the LvProp owner rewrite. + Assert.Equal("'untitled'", doc.Columns.Single(c => c.Name == "Heading").DefaultValue); + + // The index keeps its own (now descriptively stale) name and needs no fixup. + Assert.Contains(doc.Indexes, i => i.Name == "IX_Doc_Title"); + + // Existing row data is unaffected and readable under the new name. + Assert.Equal("hello", e.ExecuteQuery("SELECT Heading FROM Doc WHERE Id = 1").Rows.Single()[0]); + + // The default still applies to new rows. + e.ExecuteNonQuery("INSERT INTO Doc (Id) VALUES (2)"); + Assert.Equal("untitled", e.ExecuteQuery("SELECT Heading FROM Doc WHERE Id = 2").Rows.Single()[0]); + } + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var doc = db.Catalog.FindTable("Doc")!; + Assert.Contains(doc.Columns, c => c.Name == "Heading"); + Assert.Equal("'untitled'", doc.Columns.Single(c => c.Name == "Heading").DefaultValue); + } + } + finally + { + File.Delete(path); + } + } + + // MSysRelationships names the FK's columns, so renaming either side's column must repoint it — and the FK + // has to keep working afterwards, not merely look right in the catalog. + [Fact] + public void Rename_column_repoints_the_relationship_on_either_side() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + CreateDocSchema(e); + + // Child side (the FK column). + e.ExecuteNonQuery("ALTER TABLE DocChild RENAME COLUMN DocId TO OwnerId"); + var fk = Assert.Single(db.Catalog.ForeignKeysOf("DocChild")); + Assert.Equal("OwnerId", fk.Columns.Single().Column); + Assert.Equal("Id", fk.Columns.Single().ReferencedColumn); + + // Parent side (the referenced key column). + e.ExecuteNonQuery("ALTER TABLE Doc RENAME COLUMN Id TO DocKey"); + fk = Assert.Single(db.Catalog.ForeignKeysOf("DocChild")); + Assert.Equal("OwnerId", fk.Columns.Single().Column); + Assert.Equal("DocKey", fk.Columns.Single().ReferencedColumn); + + // Still a working foreign key, through both renamed names. + Assert.Throws( + () => e.ExecuteNonQuery("INSERT INTO DocChild (Id, OwnerId) VALUES (1, 99)")); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO DocChild (Id, OwnerId) VALUES (1, 1)")); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void Rename_column_rejects_a_name_already_on_the_table_and_a_column_that_does_not_exist() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + CreateDocSchema(e); + + Assert.Throws( + () => e.ExecuteNonQuery("ALTER TABLE Doc RENAME COLUMN Title TO Id")); + Assert.Throws( + () => e.ExecuteNonQuery("ALTER TABLE Doc RENAME COLUMN NoSuchColumn TO Whatever")); + + // A column name only has to be unique within its own table, so this is fine. + e.ExecuteNonQuery("ALTER TABLE DocChild RENAME COLUMN DocId TO Title"); + Assert.Contains(db.Catalog.FindTable("DocChild")!.Columns, c => c.Name == "Title"); + Assert.Contains(db.Catalog.FindTable("Doc")!.Columns, c => c.Name == "Title"); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void Rename_rejects_a_name_that_is_already_taken_and_a_table_that_does_not_exist() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + CreateParentChild(e); + + Assert.Throws( + () => e.ExecuteNonQuery("ALTER TABLE Parent RENAME TO Child")); + Assert.Throws( + () => e.ExecuteNonQuery("ALTER TABLE NoSuchTable RENAME TO Whatever")); + + // Access keeps tables and saved queries in ONE namespace, so a query's name is taken too — ACE + // rejects this (verified in the Jet suite's RenameFanOutProbeTest), and so must LibRed. The unique + // (ParentId, Name) index alone would not catch it: queries sit in a different container. + e.ExecuteNonQuery("CREATE VIEW vwParent AS SELECT Id, Name FROM Parent"); + Assert.Throws( + () => e.ExecuteNonQuery("ALTER TABLE Child RENAME TO vwParent")); + + // The failed renames changed nothing. + Assert.NotNull(db.Catalog.FindTable("Parent")); + Assert.NotNull(db.Catalog.FindTable("Child")); + } + finally + { + File.Delete(path); + } + } +} diff --git a/test/LibRed.Engine.Tests/ArithmeticTypeTests.cs b/test/LibRed.Engine.Tests/ArithmeticTypeTests.cs new file mode 100644 index 00000000..810d4d3a --- /dev/null +++ b/test/LibRed.Engine.Tests/ArithmeticTypeTests.cs @@ -0,0 +1,112 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Arithmetic result CLR types follow C# promotion (input type = output type), matching the EF contract — +// int+int is Int32, not Decimal. (Access '/' is floating division → Double/Decimal.) +public class ArithmeticTypeTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"arith-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static object? Scalar(string expr) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE One (Id LONG)"); + e.ExecuteNonQuery("INSERT INTO One (Id) VALUES (1)"); + return e.ExecuteQuery($"SELECT {expr} FROM One").Rows.First()[0]; + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Integer_arithmetic_stays_int() + { + Assert.IsType(Scalar("1 + 2")); + Assert.Equal(3, Scalar("1 + 2")); + Assert.IsType(Scalar("10 - 3")); + Assert.IsType(Scalar("4 * 5")); + } + + [Fact] + public void Order_id_plus_one_is_int() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + object? v = new QueryEngine(db).ExecuteQuery("SELECT OrderID + 1 AS c FROM Orders").Rows.First()[0]; + Assert.IsType(v); // the failing Union_over_binary_binary shape + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Unary_negate_preserves_type() + { + Assert.IsType(Scalar("-Id")); // int → int + Assert.Equal(-1, Scalar("-Id")); + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + Assert.IsType(e.ExecuteQuery("SELECT -OrderID AS c FROM Orders").Rows.First()[0]); // int + Assert.IsType(e.ExecuteQuery("SELECT -UnitPrice AS c FROM Products").Rows.First()[0]); // currency + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Promotion_to_wider_types() + { + Assert.IsType(Scalar("1 + 2.5")); // int + double → double + Assert.IsType(Scalar("5 / 2")); // '/' is floating division + Assert.Equal(2.5d, Scalar("5 / 2")); + } + + [Fact] + public void Integer_division_and_mod_stay_int() + { + Assert.IsType(Scalar("7 \\ 2")); // integer division + Assert.Equal(3, Scalar("7 \\ 2")); + Assert.IsType(Scalar("7 MOD 3")); + Assert.Equal(1, Scalar("7 MOD 3")); + + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + // The failing shape: o.OrderID \ o.OrderID \ 2 (left-assoc integer division). + object? v = new QueryEngine(db).ExecuteQuery( + "SELECT (OrderID \\ OrderID) \\ 2 AS A FROM Orders").Rows.First()[0]; + Assert.IsType(v); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Currency_arithmetic_stays_decimal() + { + // UnitPrice is Currency (decimal); a decimal operand promotes the whole expression to decimal. + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + Assert.IsType(e.ExecuteQuery("SELECT UnitPrice + 1 AS c FROM Products").Rows.First()[0]); + Assert.IsType(e.ExecuteQuery("SELECT UnitPrice / 2 AS c FROM Products").Rows.First()[0]); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/AutoNumberReseedTests.cs b/test/LibRed.Engine.Tests/AutoNumberReseedTests.cs new file mode 100644 index 00000000..97fc4e24 --- /dev/null +++ b/test/LibRed.Engine.Tests/AutoNumberReseedTests.cs @@ -0,0 +1,225 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ALTER TABLE t ALTER COLUMN c COUNTER(seed, increment) reseeds an AutoNumber column (the KB 884185 fix +// syntax). LibRed accepts it and sets the next id to `seed`, including negative seeds and a negative +// (descending) increment. Also guards the counter against being reset from a stale cached seed on a rebuild. +public class AutoNumberReseedTests +{ + private static QueryEngine Fresh(out JetDatabase db) + { + string path = Path.Combine(Path.GetTempPath(), $"reseed-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + db = JetDatabase.Open(path, readOnly: false); + return new QueryEngine(db); + } + + private static int NextId(QueryEngine e, string v) + { + e.ExecuteNonQuery($"INSERT INTO T (V) VALUES ('{v}')"); + return Convert.ToInt32(e.ExecuteQuery($"SELECT Id FROM T WHERE V = '{v}'").Rows.Single()[0]); + } + + [Fact] + public void Reseed_sets_the_next_id_to_the_seed() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE T (Id COUNTER CONSTRAINT PK PRIMARY KEY, V TEXT(10))"); + for (int i = 0; i < 6; i++) e.ExecuteNonQuery($"INSERT INTO T (V) VALUES ('r{i}')"); // 1..6 + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN Id COUNTER(100, 1)"); + Assert.Equal(100, NextId(e, "a")); + Assert.Equal(101, NextId(e, "b")); + } + finally { db.Dispose(); } + } + + [Fact] + public void Reseed_supports_a_negative_seed_and_descending_increment() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE T (Id COUNTER CONSTRAINT PK PRIMARY KEY, V TEXT(10))"); + e.ExecuteNonQuery("INSERT INTO T (V) VALUES ('x')"); // Id 1 + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN Id COUNTER(-5, -1)"); // descending from -5 + Assert.Equal(-5, NextId(e, "a")); + Assert.Equal(-6, NextId(e, "b")); + Assert.Equal(-7, NextId(e, "c")); + } + finally { db.Dispose(); } + } + + // Promoting a plain integer column to a counter is an in-place metadata edit (0x04 flag + seed), not a + // rebuild: existing values stay and the next id is the seed. + [Fact] + public void Promote_plain_int_to_counter_preserves_data_and_seeds() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE T (Id LONG CONSTRAINT PK PRIMARY KEY, V TEXT(10))"); // plain int PK + e.ExecuteNonQuery("INSERT INTO T (Id, V) VALUES (1, 'a')"); + e.ExecuteNonQuery("INSERT INTO T (Id, V) VALUES (2, 'b')"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN Id COUNTER(100, 1)"); // promote + + var col = db.Catalog.FindTable("T")!.Columns.First(c => c.Name == "Id"); + Assert.True(col.IsAutoNumber); + Assert.Equal(2, e.ExecuteQuery("SELECT COUNT(*) FROM T").Rows.Single()[0]); // data preserved + Assert.Equal(100, NextId(e, "c")); // next auto = seed + } + finally { db.Dispose(); } + } + + // Demoting a counter back to a plain integer is an in-place metadata edit (clear the flag): existing values + // stay, and the column stops auto-assigning so explicit ids can be inserted. ACE allows this too. + [Fact] + public void Demote_counter_to_int_keeps_data_and_stops_auto_assigning() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE T (Id COUNTER CONSTRAINT PK PRIMARY KEY, V TEXT(10))"); + e.ExecuteNonQuery("INSERT INTO T (V) VALUES ('a')"); // Id 1 + e.ExecuteNonQuery("INSERT INTO T (V) VALUES ('b')"); // Id 2 + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN Id LONG"); // demote + + var col = db.Catalog.FindTable("T")!.Columns.First(c => c.Name == "Id"); + Assert.False(col.IsAutoNumber); + Assert.Equal(2, e.ExecuteQuery("SELECT COUNT(*) FROM T").Rows.Single()[0]); // data preserved + e.ExecuteNonQuery("INSERT INTO T (Id, V) VALUES (50, 'c')"); // explicit id now allowed + Assert.Equal(50, Convert.ToInt32(e.ExecuteQuery("SELECT Id FROM T WHERE V = 'c'").Rows.Single()[0])); + } + finally { db.Dispose(); } + } + + // Promoting an int that carried a GenUniqueID() default to a sequential COUNTER(seed) must clear that + // default — otherwise it would be read as a "Random" AutoNumber and ignore the seed. + [Fact] + public void Promote_clears_a_genuniqueid_default_so_the_counter_is_sequential() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE T (Id LONG CONSTRAINT PK PRIMARY KEY DEFAULT GenUniqueID(), V TEXT(10))"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN Id COUNTER(100, 1)"); + Assert.False(db.Catalog.FindTable("T")!.Columns.First(c => c.Name == "Id").IsRandomAutoNumber); + Assert.Equal(100, NextId(e, "a")); // sequential from the seed, not random + Assert.Equal(101, NextId(e, "b")); + } + finally { db.Dispose(); } + } + + // Conversely, an explicit DEFAULT GenUniqueID() on the ALTER promotes the int straight to a *Random* + // AutoNumber — the promotion runs first, then the default is applied (replacing any prior one). Same result + // whether or not the column already had a default. This mirrors CREATE TABLE (... COUNTER DEFAULT GenUniqueID()). + [Theory] + [InlineData("")] + [InlineData(" DEFAULT 5")] + public void Promote_with_explicit_genuniqueid_default_makes_a_random_autonumber(string priorDefault) + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery($"CREATE TABLE T (Id LONG CONSTRAINT PK PRIMARY KEY{priorDefault}, V TEXT(10))"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN Id COUNTER DEFAULT GenUniqueID()"); + + var col = db.Catalog.FindTable("T")!.Columns.First(c => c.Name == "Id"); + Assert.True(col.IsRandomAutoNumber); // counter + GenUniqueID() (any prior default replaced) + + e.ExecuteNonQuery("INSERT INTO T (V) VALUES ('a')"); + e.ExecuteNonQuery("INSERT INTO T (V) VALUES ('b')"); + var ids = e.ExecuteQuery("SELECT Id FROM T").Rows.Select(r => Convert.ToInt64(r[0])).ToList(); + Assert.All(ids, id => Assert.NotEqual(0, id)); // random, non-zero + Assert.DoesNotContain(5L, ids); // not the replaced literal default + Assert.NotEqual(new List { 1, 2 }, ids); // not a sequential counter + } + finally { db.Dispose(); } + } + + // A literal default is inert on a counter (the insert path skips defaults for AutoNumber columns), so + // promotion leaves it and the counter still runs sequentially from the seed. + [Fact] + public void Promote_leaves_a_literal_default_dormant() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE T (Id LONG CONSTRAINT PK PRIMARY KEY DEFAULT 5, V TEXT(10))"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN Id COUNTER(100, 1)"); + Assert.Equal(100, NextId(e, "a")); // sequential from the seed, the '5' default ignored + } + finally { db.Dispose(); } + } + + // Demotion preserves the default (matches ACE — ALTER type keeps the default): a random AutoNumber demoted + // to a plain int keeps generating random values via its surviving GenUniqueID() default. + [Fact] + public void Demote_preserves_a_genuniqueid_default_so_it_stays_random() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE T (Id COUNTER CONSTRAINT PK PRIMARY KEY DEFAULT GenUniqueID(), V TEXT(10))"); + e.ExecuteNonQuery("INSERT INTO T (V) VALUES ('seed')"); + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN Id LONG"); + e.ExecuteNonQuery("INSERT INTO T (V) VALUES ('a')"); // no Id → default GenUniqueID() still fires + var id = Convert.ToInt64(e.ExecuteQuery("SELECT Id FROM T WHERE V = 'a'").Rows.Single()[0]); + Assert.NotEqual(0, id); // a random non-zero id was generated by the surviving default + } + finally { db.Dispose(); } + } + + // Jet allows only one AutoNumber per table — promoting a second column is rejected. + [Fact] + public void Promote_rejects_a_second_counter() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE T (Id COUNTER CONSTRAINT PK PRIMARY KEY, N LONG)"); + var ex = Assert.ThrowsAny(() => e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN N COUNTER(1, 1)")); + Assert.Contains("already has one", ex.Message); + } + finally { db.Dispose(); } + } + + // Matches ACE: reseeding a counter that participates in a relationship is rejected ("Cannot change field + // 'X'. It is part of one or more relationships.") — ACE-verified it throws the same way. + [Fact] + public void Reseed_rejects_a_counter_in_a_relationship() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE P (Id COUNTER CONSTRAINT PK PRIMARY KEY, V TEXT(5))"); + e.ExecuteNonQuery("CREATE TABLE C (Cid COUNTER PRIMARY KEY, Pid LONG, CONSTRAINT FK FOREIGN KEY (Pid) REFERENCES P(Id))"); + e.ExecuteNonQuery("INSERT INTO P (V) VALUES ('a')"); + var ex = Assert.ThrowsAny(() => e.ExecuteNonQuery("ALTER TABLE P ALTER COLUMN Id COUNTER(100, 1)")); + Assert.Contains("part of one or more relationships", ex.Message); + } + finally { db.Dispose(); } + } + + // Regression: altering a column rebuilds the table; the AutoNumber counter must keep the on-disk + // high-water, not reset to its create-time seed. Exposed only when the high rows are deleted (a populated + // rebuild re-advances the counter as it re-inserts). + [Fact] + public void Rebuild_after_deleting_high_rows_keeps_the_counter() + { + var e = Fresh(out var db); + try + { + e.ExecuteNonQuery("CREATE TABLE T (Id COUNTER CONSTRAINT PK PRIMARY KEY, N LONG, V TEXT(10))"); + for (int i = 0; i < 6; i++) e.ExecuteNonQuery($"INSERT INTO T (N, V) VALUES ({i}, 'r{i}')"); // 1..6 + e.ExecuteNonQuery("DELETE FROM T"); // rows gone, disk 0x14 stays 6 + e.ExecuteNonQuery("ALTER TABLE T ALTER COLUMN N SHORT"); // rebuild — no rows to re-advance + Assert.Equal(7, NextId(e, "g")); // continues at 7, not reset to 1 + } + finally { db.Dispose(); } + } +} diff --git a/test/LibRed.Engine.Tests/AutoNumberSeedImmunityTests.cs b/test/LibRed.Engine.Tests/AutoNumberSeedImmunityTests.cs new file mode 100644 index 00000000..029be6b0 --- /dev/null +++ b/test/LibRed.Engine.Tests/AutoNumberSeedImmunityTests.cs @@ -0,0 +1,35 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// LibRed is immune to the KB 884185 AutoNumber-reseed bug: the 0x14 high-water only advances (max for an +// ascending counter), so an explicit INSERT of a LOWER value never lowers the counter, and the next auto id +// stays collision-free. (ACE takes the last-inserted value instead — see AutoNumberSeedTests in +// LibRed.Core.Tests.) +public class AutoNumberSeedImmunityTests +{ + [Fact] + public void Explicit_lower_value_does_not_lower_the_counter_or_cause_a_collision() + { + string path = Path.Combine(Path.GetTempPath(), $"anl-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Table1 (Field1 COUNTER CONSTRAINT PK_T1 PRIMARY KEY, Field2 TEXT(10))"); + for (char ch = 'A'; ch <= 'F'; ch++) e.ExecuteNonQuery($"INSERT INTO Table1 (Field2) VALUES ('{ch}')"); // 1..6 + e.ExecuteNonQuery("DELETE FROM Table1 WHERE Field1 = 3"); + e.ExecuteNonQuery("INSERT INTO Table1 (Field1, Field2) VALUES (3, 'C')"); // explicit lower value + + // Immunity: unlike ACE (which would re-derive 3+1=4 and collide), LibRed's counter stayed at 6, so + // the next auto row gets 7 and inserts cleanly. + e.ExecuteNonQuery("INSERT INTO Table1 (Field2) VALUES ('G')"); + var got = e.ExecuteQuery("SELECT Field1 FROM Table1 WHERE Field2 = 'G'").Rows.Single()[0]; + Assert.Equal(7, Convert.ToInt32(got)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/BinaryComparisonTests.cs b/test/LibRed.Engine.Tests/BinaryComparisonTests.cs new file mode 100644 index 00000000..62e97079 --- /dev/null +++ b/test/LibRed.Engine.Tests/BinaryComparisonTests.cs @@ -0,0 +1,69 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// byte[] (Binary) column comparison in WHERE/ORDER BY. The regression: byte[] has no IComparable and +// isn't numeric/string, so it fell through to ToString() — "System.Byte[]" for every array — making all +// binaries compare equal, so `WHERE k = @p` matched every row ("Sequence contains more than one element" +// in EF's EverythingIsBytes suite). Fixed with a structural, length-sensitive byte compare. +public class BinaryComparisonTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"bin-cmp-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static void Run(Action act) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + // VARBINARY (variable length) — the test stores byte arrays of differing lengths and checks + // length-sensitive ordering/equality. (A fixed BINARY(50) would pad every value to 50 bytes.) + e.ExecuteNonQuery("CREATE TABLE B (Id long PRIMARY KEY, K VARBINARY(50))"); + Ins(e, 1, [1, 2, 3]); + Ins(e, 2, [1, 2, 3, 4]); + Ins(e, 3, [2]); + Ins(e, 4, [1, 2, 3, 4, 5]); + act(e); + } + finally { try { File.Delete(path); } catch (IOException) { } } + + static void Ins(QueryEngine e, int id, byte[] k) => + e.ExecuteNonQuery("INSERT INTO B (Id, K) VALUES (@id, @k)", + new Dictionary { ["id"] = id, ["k"] = k }); + } + + [Fact] + public void Equality_matches_only_the_exact_binary_value() + { + Run(e => + { + int[] Match(byte[] p) => e.ExecuteQuery("SELECT Id FROM B WHERE K = @p", + new Dictionary { ["p"] = p }).Rows.Select(r => Convert.ToInt32(r[0])).ToArray(); + + Assert.Equal([2], Match([1, 2, 3, 4])); // exact 4-byte value → one row (not every row) + Assert.Equal([1], Match([1, 2, 3])); // a prefix of others matches only itself + Assert.Equal([3], Match([2])); + Assert.Empty(Match([9, 9])); // no match + }); + } + + [Fact] + public void Order_by_binary_sorts_lexicographically_then_by_length() + { + Run(e => + { + // {1,2,3} < {1,2,3,4} < {1,2,3,4,5} < {2} → Ids 1, 2, 4, 3 + int[] ordered = e.ExecuteQuery("SELECT Id FROM B ORDER BY K") + .Rows.Select(r => Convert.ToInt32(r[0])).ToArray(); + Assert.Equal([1, 2, 4, 3], ordered); + }); + } +} diff --git a/test/LibRed.Engine.Tests/BinaryLiteralTests.cs b/test/LibRed.Engine.Tests/BinaryLiteralTests.cs new file mode 100644 index 00000000..05f09602 --- /dev/null +++ b/test/LibRed.Engine.Tests/BinaryLiteralTests.cs @@ -0,0 +1,54 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class BinaryLiteralTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"binlit-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // A raw 0x… binary literal (as Access emits for an OLE / Long Binary column, e.g. Categories.Picture) + // parses and round-trips: a short value stays inline, a multi-KB one goes to LVAL pages. + [Fact] + public void Hex_binary_literal_round_trips() + { + string path = Fresh(); + try + { + byte[] small = [0x01, 0x02, 0x03, 0x04, 0x05]; + byte[] big = new byte[5000]; + new Random(42).NextBytes(big); + + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Pics (Id LONG, Pic OLEOBJECT)"); + e.ExecuteNonQuery($"INSERT INTO Pics (Id, Pic) VALUES (1, 0x{Convert.ToHexString(small)})"); + e.ExecuteNonQuery($"INSERT INTO Pics (Id, Pic) VALUES (2, 0x{Convert.ToHexString(big)})"); + + Assert.Equal(small, (byte[])e.ExecuteQuery("SELECT Pic FROM Pics WHERE Id = 1").Rows.First()[0]!); + Assert.Equal(big, (byte[])e.ExecuteQuery("SELECT Pic FROM Pics WHERE Id = 2").Rows.First()[0]!); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Odd_length_hex_literal_is_rejected() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Pics2 (Id LONG, Pic OLEOBJECT)"); + Assert.ThrowsAny(() => + e.ExecuteNonQuery("INSERT INTO Pics2 (Id, Pic) VALUES (1, 0x010)")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/BitwiseAndDateFunctionTests.cs b/test/LibRed.Engine.Tests/BitwiseAndDateFunctionTests.cs new file mode 100644 index 00000000..8932fde1 --- /dev/null +++ b/test/LibRed.Engine.Tests/BitwiseAndDateFunctionTests.cs @@ -0,0 +1,119 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class BitwiseAndDateFunctionTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"bitdate-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static object? Scalar(string expr) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE One (Id LONG)"); + e.ExecuteNonQuery("INSERT INTO One (Id) VALUES (1)"); + return e.ExecuteQuery($"SELECT {expr} FROM One").Rows.First()[0]; + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // DateValue / TimeValue / IsDate (VBA/Access), semantics verified against ACE. + [Fact] + public void DateValue_TimeValue_IsDate() + { + // DateValue keeps the date at midnight; TimeValue puts the time on the Jet epoch (1899-12-30). + Assert.Equal(new DateTime(2020, 3, 15), Scalar("DateValue('2020-03-15 13:45:30')")); + Assert.Equal(new DateTime(1899, 12, 30, 13, 45, 30), Scalar("TimeValue('2020-03-15 13:45:30')")); + Assert.Null(Scalar("DateValue(NULL)")); // NULL-propagating + Assert.Null(Scalar("TimeValue(NULL)")); + + // IsDate: true for a date value or a date/time-parseable string; false for a number, NULL, or junk. + Assert.Equal(true, Scalar("IsDate('2020-03-15')")); + Assert.Equal(true, Scalar("IsDate('13:45:30')")); + Assert.Equal(true, Scalar("IsDate(DateValue('2020-03-15'))")); // a real DateTime + Assert.Equal(false, Scalar("IsDate('not a date')")); + Assert.Equal(false, Scalar("IsDate(38718)")); // a bare number is NOT a date + Assert.Equal(false, Scalar("IsDate(NULL)")); + } + + // Access bitwise operators (infix BAND/BOR/BXOR, prefix BNOT) — verified vs ACE. + [Fact] + public void Bitwise_operators() + { + Assert.Equal(2, Scalar("6 BAND 3")); + Assert.Equal(7, Scalar("6 BOR 3")); + Assert.Equal(5, Scalar("6 BXOR 3")); + Assert.Equal(-6, Scalar("BNOT 5")); + Assert.Equal(10, Scalar("6 BAND 3 BOR 8")); // BAND binds tighter, left-assoc + Assert.IsType(Scalar("6 BAND 3")); // result keeps int type + Assert.Null(Scalar("NULL BAND 3")); // NULL-propagating + } + + // Bitwise on a byte/short operand promotes to Int32 (as C# does — matching the EF/LINQ contract, not + // ACE's inconsistent narrowing); the value is still correct. + [Fact] + public void Bitwise_on_byte_or_short_promotes_to_int() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Bits (B BYTE, B2 BYTE, S SMALLINT, S2 SMALLINT)"); + e.ExecuteNonQuery("INSERT INTO Bits (B, B2, S, S2) VALUES (5, 3, 6, 3)"); + + // Mixed narrow+int, and both-operands-narrow (byte&byte, short&short) — all promote to Int32. + var r = e.ExecuteQuery("SELECT B BAND 3, BNOT B, S BAND 3, BNOT S, B BAND B2, S BAND S2 FROM Bits").Rows.First(); + Assert.Equal(1, r[0]); Assert.IsType(r[0]); // 5 & 3 + Assert.Equal(-6, r[1]); Assert.IsType(r[1]); // ~5 (promoted, not 250) + Assert.Equal(2, r[2]); Assert.IsType(r[2]); // 6 & 3 + Assert.Equal(-7, r[3]); Assert.IsType(r[3]); // ~6 + Assert.Equal(1, r[4]); Assert.IsType(r[4]); // byte 5 & byte 3 + Assert.Equal(2, r[5]); Assert.IsType(r[5]); // short 6 & short 3 + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void DateAdd_and_DateDiff() + { + Assert.Equal(new DateTime(2020, 1, 6), Scalar("DateAdd('d', 5, #1/1/2020#)")); + Assert.Equal(new DateTime(2020, 2, 29), Scalar("DateAdd('m', 1, #1/31/2020#)")); // rolls to Feb 29 + Assert.Equal(new DateTime(2019, 3, 15), Scalar("DateAdd('yyyy', -1, #3/15/2020#)")); + Assert.Equal(10, Scalar("DateDiff('d', #1/1/2020#, #1/11/2020#)")); + Assert.Equal(1, Scalar("DateDiff('yyyy', #12/31/2019#, #1/1/2020#)")); // boundary count + Assert.Equal(2, Scalar("DateDiff('m', #1/15/2020#, #3/10/2020#)")); + Assert.Equal(3, Scalar("DateDiff('q', #1/1/2020#, #12/31/2020#)")); + Assert.Null(Scalar("DateDiff('d', NULL, #1/1/2020#)")); + } + + [Fact] + public void DateSerial_and_TimeSerial() + { + Assert.Equal(new DateTime(2020, 2, 29), Scalar("DateSerial(2020, 2, 29)")); + Assert.Equal(new DateTime(2021, 1, 1), Scalar("DateSerial(2020, 13, 1)")); // month rolls over + var t = Assert.IsType(Scalar("TimeSerial(14, 30, 15)")); + Assert.Equal(new TimeSpan(14, 30, 15), t.TimeOfDay); + } + + [Fact] + public void Date_part_functions_return_int() + { + Assert.Equal(2020, Scalar("Year(#3/15/2020#)")); + Assert.Equal(3, Scalar("Month(#3/15/2020#)")); + Assert.Equal(15, Scalar("Day(#3/15/2020#)")); + Assert.Equal(4, Scalar("Weekday(#1/1/2020#)")); // Wed, with Sunday = 1 + Assert.IsType(Scalar("Year(#3/15/2020#)")); // int, matching EF's DateTime.Year + Assert.Null(Scalar("Year(NULL)")); + } +} diff --git a/test/LibRed.Engine.Tests/BooleanComparisonTests.cs b/test/LibRed.Engine.Tests/BooleanComparisonTests.cs new file mode 100644 index 00000000..0497a006 --- /dev/null +++ b/test/LibRed.Engine.Tests/BooleanComparisonTests.cs @@ -0,0 +1,36 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class BooleanComparisonTests +{ + // EF Core maps a CLR bool to a numeric (smallint) column, so a boolean predicate must compare + // equal to the stored numeric value: `BoolA = (NullableBoolB IS NOT NULL)` (from the EF + // NullSemantics suite) requires bool ↔ numeric equality. + [Fact] + public void Numeric_bool_column_compares_equal_to_a_boolean_predicate() + { + string path = Path.Combine(Path.GetTempPath(), $"boolcmp-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + engine.ExecuteNonQuery("CREATE TABLE `Ent` (`Id` INTEGER PRIMARY KEY, `BoolA` SMALLINT, `NullableBoolB` SMALLINT NULL)"); + engine.ExecuteNonQuery("INSERT INTO `Ent` (`Id`, `BoolA`, `NullableBoolB`) VALUES (1, TRUE, TRUE)"); // true == not-null + engine.ExecuteNonQuery("INSERT INTO `Ent` (`Id`, `BoolA`, `NullableBoolB`) VALUES (2, FALSE, NULL)"); // false == null + engine.ExecuteNonQuery("INSERT INTO `Ent` (`Id`, `BoolA`, `NullableBoolB`) VALUES (3, TRUE, NULL)"); + engine.ExecuteNonQuery("INSERT INTO `Ent` (`Id`, `BoolA`, `NullableBoolB`) VALUES (4, FALSE, TRUE)"); + + var ids = engine.ExecuteQuery( + "SELECT `Id` FROM `Ent` WHERE `BoolA` = (`NullableBoolB` IS NOT NULL) ORDER BY `Id`") + .Rows.Select(r => Convert.ToInt32(r[0])).ToList(); + + Assert.Equal([1, 2], ids); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/BooleanPredicateTests.cs b/test/LibRed.Engine.Tests/BooleanPredicateTests.cs new file mode 100644 index 00000000..b582823d --- /dev/null +++ b/test/LibRed.Engine.Tests/BooleanPredicateTests.cs @@ -0,0 +1,85 @@ +using LibRed; +using LibRed.Engine; +using LibRed.Engine.Execution; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class BooleanPredicateTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"boolpred-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // Access truthiness (confirmed against ACE): ANY non-zero number is true (int or double), 0 is false, + // NULL is not-true; NOT flips 0↔non-zero and leaves NULL not-selected. Covers the nullable-bool -1/0 + // convention plus arbitrary numeric predicates. + [Fact] + public void Any_nonzero_number_is_truthy_as_a_predicate() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE Tvals (Id LONG, N LONG, D DOUBLE)"); + foreach (var (id, n, d) in new (int, string, string)[] + { (1, "-1", "-1"), (2, "0", "0"), (3, "1", "1"), (4, "2", "0.5"), (5, "-5", "0"), (6, "NULL", "NULL") }) + e.ExecuteNonQuery($"INSERT INTO Tvals (Id, N, D) VALUES ({id}, {n}, {d})"); + + static IEnumerable Ids(ResultSet r) => r.Rows.Select(row => Convert.ToInt32(row[0])).OrderBy(x => x); + + Assert.Equal([1, 3, 4, 5], Ids(e.ExecuteQuery("SELECT Id FROM Tvals WHERE N"))); // every non-zero int + Assert.Equal([2], Ids(e.ExecuteQuery("SELECT Id FROM Tvals WHERE NOT N"))); // only 0 (NULL not selected) + Assert.Equal([1, 3, 4], Ids(e.ExecuteQuery("SELECT Id FROM Tvals WHERE D"))); // non-zero doubles incl. 0.5 + Assert.Equal(1, e.ExecuteQuery("SELECT Id FROM Tvals WHERE N AND Id = 3").Rows.Count()); // combined + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A native BIT column written by LibRed: the value may be inserted as 1/-1/0 or TRUE/FALSE (Northwind's + // seed uses integer literals). The bit must be set for any truthy value, and read back / filtered right. + [Fact] + public void Bit_column_written_by_libred_round_trips_all_value_forms() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE B (Id LONG, Flag BIT NOT NULL DEFAULT 0)"); + e.ExecuteNonQuery("INSERT INTO B (Id, Flag) VALUES (1, 1)"); + e.ExecuteNonQuery("INSERT INTO B (Id, Flag) VALUES (2, 0)"); + e.ExecuteNonQuery("INSERT INTO B (Id, Flag) VALUES (3, -1)"); + e.ExecuteNonQuery("INSERT INTO B (Id, Flag) VALUES (4, TRUE)"); + e.ExecuteNonQuery("INSERT INTO B (Id, Flag) VALUES (5, FALSE)"); + + var trueIds = e.ExecuteQuery("SELECT Id FROM B WHERE Flag").Rows.Select(r => Convert.ToInt32(r[0])).OrderBy(x => x); + Assert.Equal([1, 3, 4], trueIds); // 1, -1, TRUE are true + Assert.Equal(2, e.ExecuteQuery("SELECT Id FROM B WHERE NOT Flag").Rows.Count()); // 0, FALSE + + // The decoded value is a real bool. + Assert.Equal(true, e.ExecuteQuery("SELECT Flag FROM B WHERE Id = 1").Rows.First()[0]); + Assert.Equal(false, e.ExecuteQuery("SELECT Flag FROM B WHERE Id = 2").Rows.First()[0]); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A native Jet YesNo (bool) column still works as a bare predicate (Northwind Products.Discontinued = 8). + [Fact] + public void Native_yesno_boolean_is_truthy_as_a_predicate() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + Assert.Equal(8, e.ExecuteQuery("SELECT ProductID FROM Products WHERE Discontinued").Rows.Count()); + Assert.Equal(69, e.ExecuteQuery("SELECT ProductID FROM Products WHERE NOT Discontinued").Rows.Count()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/ByteArrayStringFunctionTests.cs b/test/LibRed.Engine.Tests/ByteArrayStringFunctionTests.cs new file mode 100644 index 00000000..4b9b9049 --- /dev/null +++ b/test/LibRed.Engine.Tests/ByteArrayStringFunctionTests.cs @@ -0,0 +1,48 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// A byte[] value reaching a string function must coerce one char per byte (Jet's binary→string), not via +/// .ToString() (which yields "System.Byte[]"). EF emits this for byte[].Contains(x) as +/// INSTR(1, STRCONV(arr, 64), 0xXX, 0) > 0. +/// +public class ByteArrayStringFunctionTests +{ + private static QueryEngine Engine() + { + string path = Path.Combine(Path.GetTempPath(), $"bstr-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE B (Id LONG PRIMARY KEY, Arr VARBINARY(10))"); + e.ExecuteNonQuery("INSERT INTO B (Id, Arr) VALUES (1, 0x414201)"); // A B 0x01 + e.ExecuteNonQuery("INSERT INTO B (Id, Arr) VALUES (2, 0x4142)"); // A B + return e; + } + + private static object? Scalar(QueryEngine e, string sql) => e.ExecuteQuery(sql).Rows.First()[0]; + + [Fact] + public void Strconv_64_widens_each_byte_to_a_char() + { + var s = (string)Scalar(Engine(), "SELECT STRCONV(Arr, 64) FROM B WHERE Id = 1")!; + Assert.Equal(new string(new[] { 'A', 'B', (char)1 }), s); // not "System.Byte[]" + } + + [Fact] + public void Instr_finds_a_hex_literal_needle_in_a_converted_binary() + { + var e = Engine(); + Assert.Equal(3, Convert.ToInt32(Scalar(e, "SELECT INSTR(1, STRCONV(Arr, 64), 0x01, 0) FROM B WHERE Id = 1"))); + Assert.Equal(0, Convert.ToInt32(Scalar(e, "SELECT INSTR(1, STRCONV(Arr, 64), 0x01, 0) FROM B WHERE Id = 2"))); + } + + [Fact] + public void Byte_array_contains_predicate_matches_only_rows_holding_the_byte() + // The exact shape EF emits for `ByteArray.Contains((byte)1)`. + => Assert.Equal(1, Convert.ToInt32( + Scalar(Engine(), "SELECT COUNT(*) FROM B WHERE INSTR(1, STRCONV(Arr, 64), 0x01, 0) > 0"))); +} diff --git a/test/LibRed.Engine.Tests/ByteFunctionsBinaryTests.cs b/test/LibRed.Engine.Tests/ByteFunctionsBinaryTests.cs new file mode 100644 index 00000000..d68ed5bc --- /dev/null +++ b/test/LibRed.Engine.Tests/ByteFunctionsBinaryTests.cs @@ -0,0 +1,63 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.Engine; +using Xunit; + +// The byte functions (LenB/AscB/LeftB/RightB/MidB) on a RAW BINARY column — matching ACE, which reinterprets the +// binary as a UTF-16LE string (an odd trailing byte zero-padded) before applying them. Expected values are what +// ACE returned for the same data. Covers odd (3-byte) and even (4-byte) values. +public class ByteFunctionsBinaryTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"bfb-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var db = JetDatabase.Open(path, readOnly: false); + db.CreateTable("T", + [new ColumnSpec("K", JetDataType.Int32, 4, IsFixedLength: true), + new ColumnSpec("B", JetDataType.Binary, 50, IsFixedLength: false)], + primaryKey: ["K"]); + db.OpenTable("T").Insert([1, new byte[] { 0x41, 0x42, 0x43 }]); // 3 bytes (odd) -> "ABC" + db.OpenTable("T").Insert([2, new byte[] { 0x41, 0x42, 0x43, 0x44 }]); // 4 bytes (even) -> "ABCD" + return new QueryEngine(db); + } + + private static object? Eval(QueryEngine e, string expr, int k) + => e.ExecuteQuery($"SELECT {expr} FROM T WHERE K = {k}").Rows.Single()[0]; + + [Theory] + // reinterpreted as UTF-16LE: 3 bytes -> 2 chars (odd byte zero-padded) so LenB = 4, not 3. + [InlineData("LenB(B)", 1, 4)] + [InlineData("LenB(B)", 2, 4)] + [InlineData("AscB(B)", 1, 65)] // low byte of the first char = 0x41 + [InlineData("AscB(B)", 2, 65)] + public void Numeric_byte_functions_on_binary(string expr, int k, int expected) + => Assert.Equal(expected, Convert.ToInt32(Eval(Seeded(), expr, k))); + + // On binary input the slice functions return the raw byte[] (so a further byte function can read the bytes — + // e.g. ASCB(RightB(x,1))). Values are the actual byte slices ACE operates on (odd input zero-padded to even). + [Theory] + [InlineData("LeftB(B, 2)", 1, "4142")] + [InlineData("RightB(B, 2)", 1, "4300")] // padded [41,42,43,00] → last 2 bytes + [InlineData("MidB(B, 2, 2)", 1, "4243")] + [InlineData("MidB(B, 1, 3)", 1, "414243")] + [InlineData("LeftB(B, 2)", 2, "4142")] + [InlineData("RightB(B, 2)", 2, "4344")] + [InlineData("MidB(B, 2, 2)", 2, "4243")] + public void Substring_byte_functions_on_binary(string expr, int k, string expectedHex) + => Assert.Equal(expectedHex, Convert.ToHexString((byte[])Eval(Seeded(), expr, k)!)); + + // The EFCore.Jet ByteArrayLength translation runs against LibRed's byte functions (LibRed.EFCore inherits it): + // CASE WHEN ASCB(RightB(x,1)) = 0 THEN LenB(x)-1 ELSE LenB(x) END + // Verified to reproduce ACE's results — including the documented failure (even data ending in 0x00 → -1). + [Theory] + [InlineData(1, 3)] // [41,42,43] odd → 3 + [InlineData(2, 4)] // [41,42,43,44] even → 4 + public void ByteArrayLength_translation_matches_ace(int k, int expected) + { + var e = Seeded(); + int asc = Convert.ToInt32(Eval(e, "ASCB(RightB(B, 1))", k)); // must not crash — reads the last byte + int lenB = Convert.ToInt32(Eval(e, "LenB(B)", k)); + Assert.Equal(expected, asc == 0 ? lenB - 1 : lenB); + } +} diff --git a/test/LibRed.Engine.Tests/CascadeDeleteWorklistTests.cs b/test/LibRed.Engine.Tests/CascadeDeleteWorklistTests.cs new file mode 100644 index 00000000..c916a609 --- /dev/null +++ b/test/LibRed.Engine.Tests/CascadeDeleteWorklistTests.cs @@ -0,0 +1,74 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ON DELETE CASCADE is evaluated with an explicit worklist, not recursion: a cyclic FK graph terminates, a +// shared child in a diamond is deleted exactly once, and a deep chain does not overflow the call stack. +public class CascadeDeleteWorklistTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"cascade-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Fact] + public void Cyclic_cascade_terminates_and_deletes_the_cycle() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE node ( id LONG PRIMARY KEY, parent LONG, " + + "CONSTRAINT fk FOREIGN KEY (parent) REFERENCES node (id) ON DELETE CASCADE )"); + e.ExecuteNonQuery("INSERT INTO node (id, parent) VALUES (1, NULL)"); + e.ExecuteNonQuery("INSERT INTO node (id, parent) VALUES (2, 1)"); + e.ExecuteNonQuery("UPDATE node SET parent = 2 WHERE id = 1"); // 1 -> 2 -> 1 cycle + + // Recursion would follow 1 -> 2 -> 1 -> 2 … forever; the worklist visits each row once and stops. + e.ExecuteNonQuery("DELETE FROM node WHERE id = 1"); + + Assert.Equal(0, e.ExecuteQuery("SELECT COUNT(*) FROM node").Rows.Single()[0]); + } + + [Fact] + public void Diamond_cascade_deletes_the_shared_child_exactly_once() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE p ( id LONG PRIMARY KEY )"); + e.ExecuteNonQuery("CREATE TABLE bc ( id LONG PRIMARY KEY, pid LONG, " + + "CONSTRAINT fkp FOREIGN KEY (pid) REFERENCES p (id) ON DELETE CASCADE )"); + e.ExecuteNonQuery("CREATE TABLE d ( id LONG PRIMARY KEY, b LONG, c LONG, " + + "CONSTRAINT fkb FOREIGN KEY (b) REFERENCES bc (id) ON DELETE CASCADE, " + + "CONSTRAINT fkc FOREIGN KEY (c) REFERENCES bc (id) ON DELETE CASCADE )"); + e.ExecuteNonQuery("INSERT INTO p (id) VALUES (1)"); + e.ExecuteNonQuery("INSERT INTO bc (id, pid) VALUES (10, 1)"); // B + e.ExecuteNonQuery("INSERT INTO bc (id, pid) VALUES (11, 1)"); // C + e.ExecuteNonQuery("INSERT INTO d (id, b, c) VALUES (100, 10, 11)"); // reachable from P via B and via C + + // Deleting P reaches D through both B and C; a naive recursion would delete D twice. + e.ExecuteNonQuery("DELETE FROM p WHERE id = 1"); + + Assert.Equal(0, e.ExecuteQuery("SELECT COUNT(*) FROM p").Rows.Single()[0]); + Assert.Equal(0, e.ExecuteQuery("SELECT COUNT(*) FROM bc").Rows.Single()[0]); + Assert.Equal(0, e.ExecuteQuery("SELECT COUNT(*) FROM d").Rows.Single()[0]); + } + + [Fact] + public void Deep_cascade_chain_does_not_overflow_the_stack() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE node ( id LONG PRIMARY KEY, parent LONG, " + + "CONSTRAINT fk FOREIGN KEY (parent) REFERENCES node (id) ON DELETE CASCADE )"); + e.ExecuteNonQuery("INSERT INTO node (id, parent) VALUES (1, NULL)"); + // A chain far deeper than the call stack tolerated. The cyclic test above is the definitive proof that + // recursion is gone; this one confirms the worklist scales to a long chain in one delete. + const int depth = 2000; + for (int i = 2; i <= depth; i++) + e.ExecuteNonQuery($"INSERT INTO node (id, parent) VALUES ({i}, {i - 1})"); + + e.ExecuteNonQuery("DELETE FROM node WHERE id = 1"); // cascades the whole chain + + Assert.Equal(0, e.ExecuteQuery("SELECT COUNT(*) FROM node").Rows.Single()[0]); + } +} diff --git a/test/LibRed.Engine.Tests/CheckConstraintEnforcementTests.cs b/test/LibRed.Engine.Tests/CheckConstraintEnforcementTests.cs new file mode 100644 index 00000000..9ac71de1 --- /dev/null +++ b/test/LibRed.Engine.Tests/CheckConstraintEnforcementTests.cs @@ -0,0 +1,79 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// LibRed enforces CHECK constraints on INSERT and UPDATE: a row is rejected only when a check evaluates to +// explicitly FALSE (NULL/unknown passes). Checks may reference the row's columns and use subqueries. +public class CheckConstraintEnforcementTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"chk-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Fact] + public void Simple_check_is_enforced_on_insert() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE tblInvoices ( ID LONG PRIMARY KEY, Amount DOUBLE, CONSTRAINT CheckAmount CHECK (Amount > 0) )"); + e.ExecuteNonQuery("INSERT INTO tblInvoices (ID, Amount) VALUES (1, 50)"); // passes + var ex = Assert.Throws(() => + e.ExecuteNonQuery("INSERT INTO tblInvoices (ID, Amount) VALUES (2, -5)")); // violates + Assert.Contains("CheckAmount", ex.Message); + } + + [Fact] + public void Check_is_enforced_on_update() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE tblInvoices ( ID LONG PRIMARY KEY, Amount DOUBLE, CONSTRAINT CheckAmount CHECK (Amount > 0) )"); + e.ExecuteNonQuery("INSERT INTO tblInvoices (ID, Amount) VALUES (1, 50)"); + Assert.ThrowsAny(() => e.ExecuteNonQuery("UPDATE tblInvoices SET Amount = -1 WHERE ID = 1")); + e.ExecuteNonQuery("UPDATE tblInvoices SET Amount = 75 WHERE ID = 1"); // valid update succeeds + Assert.Equal(75.0, Convert.ToDouble(e.ExecuteQuery("SELECT Amount FROM tblInvoices WHERE ID = 1").Rows.Single()[0])); + } + + [Fact] + public void Null_value_passes_the_check() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE tblInvoices ( ID LONG PRIMARY KEY, Amount DOUBLE, CONSTRAINT CheckAmount CHECK (Amount > 0) )"); + // Amount omitted → NULL; (NULL > 0) is unknown, which passes. + e.ExecuteNonQuery("INSERT INTO tblInvoices (ID) VALUES (1)"); + Assert.Null(e.ExecuteQuery("SELECT Amount FROM tblInvoices WHERE ID = 1").Rows.Single()[0]); + } + + [Fact] + public void Subquery_check_is_enforced() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE tblCreditLimit ( Lmt DOUBLE )"); + e.ExecuteNonQuery("INSERT INTO tblCreditLimit VALUES (100)"); + e.ExecuteNonQuery("CREATE TABLE tblCustomers ( CustomerID LONG PRIMARY KEY, CustomerLimit DOUBLE, " + + "CONSTRAINT LimitRule CHECK (CustomerLimit <= (SELECT Lmt FROM tblCreditLimit)) )"); + + e.ExecuteNonQuery("INSERT INTO tblCustomers (CustomerID, CustomerLimit) VALUES (1, 80)"); // 80 <= 100 → ok + var ex = Assert.Throws(() => + e.ExecuteNonQuery("INSERT INTO tblCustomers (CustomerID, CustomerLimit) VALUES (2, 200)")); // 200 <= 100 → false + Assert.Contains("LimitRule", ex.Message); + + // The docs scenario: updating above the limit fails, at/below succeeds. + Assert.ThrowsAny(() => e.ExecuteNonQuery("UPDATE tblCustomers SET CustomerLimit = 200 WHERE CustomerID = 1")); + e.ExecuteNonQuery("UPDATE tblCustomers SET CustomerLimit = 100 WHERE CustomerID = 1"); + } + + [Fact] + public void Check_with_trailing_unparsed_tokens_is_rejected_during_enforcement() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T (ID LONG PRIMARY KEY, Amount DOUBLE, " + + "CONSTRAINT CheckAmount CHECK (Amount > 0 unexpected))"); + + Assert.Throws(() => + e.ExecuteNonQuery("INSERT INTO T (ID, Amount) VALUES (1, 50)")); + } +} diff --git a/test/LibRed.Engine.Tests/CheckConstraintTests.cs b/test/LibRed.Engine.Tests/CheckConstraintTests.cs new file mode 100644 index 00000000..58eca362 --- /dev/null +++ b/test/LibRed.Engine.Tests/CheckConstraintTests.cs @@ -0,0 +1,67 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class CheckConstraintTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"chk-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // CHECK constraints (table- and column-level) parse and are ignored (not enforced yet), so a + // CREATE TABLE that has them still creates the table and its other constraints. + [Fact] + public void Table_level_check_constraint_is_accepted_and_table_is_created() + { + // The shape from NorthwindGroupByQueryLibRedTest that used to fail to parse. (Table renamed from + // "Employees" to avoid colliding with Northwind's own Employees in this copied-fixture test.) + const string sql = """ + CREATE TABLE `EmpCheck` ( + `EmployeeID` counter NOT NULL, + `LastName` varchar(20) NOT NULL, + `BirthDate` datetime NULL, + `ReportsTo` int NULL, + CONSTRAINT `PK_EmpCheck` PRIMARY KEY (`EmployeeID`), + CONSTRAINT `CK_BirthDate` CHECK ([BirthDate] < NOW()) + ) + """; + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery(sql); + using (var db = JetDatabase.Open(path)) + { + var t = db.Catalog.FindTable("EmpCheck")!; + Assert.NotNull(t); + Assert.Contains(t.Indexes, ix => ix.IsPrimaryKey + && ix.Columns.Select(c => c.Column.Name).SequenceEqual(["EmployeeID"])); + // The CHECK persists and reads back with its name and verbatim expression. + var (name, expr) = Assert.Single(t.CheckConstraints); + Assert.Equal("CK_BirthDate", name); + Assert.Equal("[BirthDate] < NOW()", expr); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Column_level_check_constraint_is_accepted() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery( + "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `Age` INTEGER CONSTRAINT `CK_Age` CHECK (`Age` > 0 AND `Age` < 200))"); + using (var db = JetDatabase.Open(path)) + Assert.NotNull(db.Catalog.FindTable("T")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/ChooseFunctionTests.cs b/test/LibRed.Engine.Tests/ChooseFunctionTests.cs new file mode 100644 index 00000000..98fdd695 --- /dev/null +++ b/test/LibRed.Engine.Tests/ChooseFunctionTests.cs @@ -0,0 +1,60 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Access Choose(index, choice-1, choice-2, …) — 1-based selection. Verified against ACE: out-of-range index → NULL, +// NULL index → error, any value type allowed. Exercised through DEFAULT expressions (LibRed's FROM-less SELECT is +// a separate limitation). Motivated by translating SQL Server CHOOSE/CONVERT to Jet/ACE-native Choose/CBool. +public class ChooseFunctionTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"choose-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + private static object? DefaultOf(string type, string def) + { + var e = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE T ( K LONG PRIMARY KEY, V {type} DEFAULT {def} )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e.ExecuteQuery("SELECT V FROM T").Rows.Single()[0]; + } + + [Theory] + [InlineData("Choose(1, 0, 1, 2)", 0)] // 1-based: first choice + [InlineData("Choose(2, 0, 1, 2)", 1)] + [InlineData("Choose(3, 0, 1, 2)", 2)] + public void Choose_selects_the_one_based_choice(string def, int expected) + => Assert.Equal(expected, Convert.ToInt32(DefaultOf("LONG", def))); + + [Theory] + [InlineData("Choose(0, 0, 1, 2)")] // below range + [InlineData("Choose(5, 0, 1, 2)")] // above range + public void Choose_out_of_range_index_is_null(string def) + => Assert.Null(DefaultOf("LONG", def)); + + [Fact] + public void Choose_works_with_string_choices() + => Assert.Equal("b", DefaultOf("TEXT(10)", "Choose(2, 'a', 'b', 'c')")); + + // The SQL Server table's Jet/ACE-native translation: + // A bit DEFAULT (CHOOSE(1, 0, 1, 2)) -> A YESNO DEFAULT Choose(1, 0, 1, 2) + // B bit DEFAULT ((CONVERT([bit],(CHOOSE(1,0,1,2)))) -> B YESNO DEFAULT CBool(Choose(1, 0, 1, 2)) + // Both pick the 1st choice (0), so both default to False. + [Fact] + public void Translated_sqlserver_choose_convert_table_defaults_to_false() + { + var e = Fresh(); + e.ExecuteNonQuery( + "CREATE TABLE MyTable ( Id LONG, A YESNO DEFAULT Choose(1, 0, 1, 2), " + + "B YESNO DEFAULT CBool(Choose(1, 0, 1, 2)) )"); + e.ExecuteNonQuery("INSERT INTO MyTable (Id) VALUES (1)"); + var row = e.ExecuteQuery("SELECT A, B FROM MyTable").Rows.Single(); + Assert.Equal(false, row[0]); + Assert.Equal(false, row[1]); + } +} diff --git a/test/LibRed.Engine.Tests/ColumnSizeLimitTests.cs b/test/LibRed.Engine.Tests/ColumnSizeLimitTests.cs new file mode 100644 index 00000000..70583627 --- /dev/null +++ b/test/LibRed.Engine.Tests/ColumnSizeLimitTests.cs @@ -0,0 +1,76 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Jet/ACE caps a char/varchar column at 255 characters and a binary/varbinary column at 510 bytes (verified +// vs ACE: char(255)/binary(510) accepted, char(256)/binary(511) rejected "Size of field is too long"). LibRed +// enforces the same caps at CREATE so it never writes a fixed column Access can't open. +public class ColumnSizeLimitTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"sizelim-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Theory] + [InlineData("char(255)")] + [InlineData("varchar(255)")] + [InlineData("nchar(255)")] + [InlineData("binary(510)")] + [InlineData("varbinary(510)")] + public void Sizes_at_the_limit_are_accepted(string type) + { + var e = Fresh(); + Assert.Equal(0, e.ExecuteNonQuery($"CREATE TABLE T ( col {type} )")); + } + + [Theory] + [InlineData("char(256)")] + [InlineData("varchar(256)")] + [InlineData("national character varying(256)")] + [InlineData("binary(511)")] + [InlineData("varbinary(511)")] + [InlineData("binary(8000)")] + public void Sizes_over_the_limit_are_rejected(string type) + { + var e = Fresh(); + var ex = Assert.Throws( + () => e.ExecuteNonQuery($"CREATE TABLE T ( col {type} )")); + Assert.Contains("too long", ex.Message); + } + + [Theory] + [InlineData("char(0)")] + [InlineData("varchar(-1)")] + [InlineData("binary(0)")] + [InlineData("varbinary(-1)")] + [InlineData("decimal(0,0)")] + [InlineData("decimal(-1,0)")] + [InlineData("decimal(29,0)")] + [InlineData("decimal(10,-1)")] + [InlineData("decimal(10,11)")] + [InlineData("decimal(300,1)")] + public void Invalid_dimensions_are_rejected_before_creating_the_table(string type) + { + var e = Fresh(); + Assert.Throws(() => + e.ExecuteNonQuery($"CREATE TABLE T ( col {type} )")); + Assert.DoesNotContain(e.Database.Catalog.UserTables, t => t.Name == "T"); + } + + [Theory] + [InlineData("decimal(1,0)", 1, 0)] + [InlineData("decimal(28,28)", 28, 28)] + public void Decimal_boundary_dimensions_are_preserved(string type, byte precision, byte scale) + { + var e = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE T ( col {type} )"); + var column = e.Database.Catalog.UserTables.Single(t => t.Name == "T").Columns.Single(); + Assert.Equal(precision, column.Precision); + Assert.Equal(scale, column.Scale); + } +} diff --git a/test/LibRed.Engine.Tests/CompositeFkMatchFullTests.cs b/test/LibRed.Engine.Tests/CompositeFkMatchFullTests.cs new file mode 100644 index 00000000..afd597cb --- /dev/null +++ b/test/LibRed.Engine.Tests/CompositeFkMatchFullTests.cs @@ -0,0 +1,49 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// A composite foreign key follows ACE's MATCH FULL rule (verified vs ACE): the FK is skipped only when EVERY +// column is null; a partial null (some null, some not) is rejected — unlike SQL Server's MATCH SIMPLE, which +// would skip the check when any column is null. +public class CompositeFkMatchFullTests +{ + private static QueryEngine Setup() + { + string path = Path.Combine(Path.GetTempPath(), $"cfk-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE P (A long, B long, CONSTRAINT PK_P PRIMARY KEY (A, B))"); + e.ExecuteNonQuery("CREATE TABLE C (Id long PRIMARY KEY, X long, Y long, " + + "CONSTRAINT FK_C FOREIGN KEY (X, Y) REFERENCES P (A, B))"); + e.ExecuteNonQuery("INSERT INTO P (A, B) VALUES (1, 2)"); + return e; + } + + [Fact] + public void All_null_is_allowed_full_match_required_partial_null_rejected() + { + var e = Setup(); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO C (Id, X, Y) VALUES (1, 1, 2)")); // full match → ok + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO C (Id, X, Y) VALUES (2, NULL, NULL)")); // all null → ok + + // Partial nulls are rejected (MATCH FULL), as is a non-matching full key. + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO C (Id, X, Y) VALUES (3, 1, NULL)")); + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO C (Id, X, Y) VALUES (4, NULL, 2)")); + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO C (Id, X, Y) VALUES (5, 1, 99)")); + + Assert.Equal(2, e.ExecuteQuery("SELECT Id FROM C").Rows.Count()); // only the two valid rows were written + } + + [Fact] + public void Update_to_a_partial_null_is_also_rejected() + { + var e = Setup(); + e.ExecuteNonQuery("INSERT INTO C (Id, X, Y) VALUES (1, 1, 2)"); + // Nulling only one of the two FK columns is a partial null → rejected. + Assert.Throws(() => e.ExecuteNonQuery("UPDATE C SET Y = NULL WHERE Id = 1")); + // Nulling both is fine. + Assert.Equal(1, e.ExecuteNonQuery("UPDATE C SET X = NULL, Y = NULL WHERE Id = 1")); + } +} diff --git a/test/LibRed.Engine.Tests/ConditionalsInSelectTests.cs b/test/LibRed.Engine.Tests/ConditionalsInSelectTests.cs new file mode 100644 index 00000000..c0329dc5 --- /dev/null +++ b/test/LibRed.Engine.Tests/ConditionalsInSelectTests.cs @@ -0,0 +1,51 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// IIF/Choose/Switch are ordinary scalar functions — they work anywhere an expression is allowed: SELECT +// projections, WHERE, ORDER BY. Unlike in a DEFAULT (row-blind), here they can reference the row's own columns, +// because a query evaluates against a row scope. Same functions, different scope. +public class ConditionalsInSelectTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"cis-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, N LONG )"); + e.ExecuteNonQuery("INSERT INTO T (K, N) VALUES (1, 5)"); + e.ExecuteNonQuery("INSERT INTO T (K, N) VALUES (2, 15)"); + e.ExecuteNonQuery("INSERT INTO T (K, N) VALUES (3, 25)"); + return e; + } + + private static string[] Col(QueryEngine e, string sql) + => e.ExecuteQuery(sql).Rows.Select(r => r[0]?.ToString()).ToArray()!; + + [Fact] + public void Iif_in_a_projection_reads_the_row_column() + => Assert.Equal(new[] { "small", "big", "big" }, + Col(Fresh(), "SELECT IIF(N > 10, 'big', 'small') FROM T ORDER BY K")); + + [Fact] + public void Choose_in_a_projection_reads_the_row_column() + => Assert.Equal(new[] { "one", "two", "three" }, + Col(Fresh(), "SELECT Choose(K, 'one', 'two', 'three') FROM T ORDER BY K")); + + [Fact] + public void Switch_in_a_projection_reads_the_row_column() + => Assert.Equal(new[] { "lo", "mid", "hi" }, + Col(Fresh(), "SELECT Switch(N < 10, 'lo', N < 20, 'mid', True, 'hi') FROM T ORDER BY K")); + + [Fact] + public void Iif_in_a_where_clause_filters() + => Assert.Equal(new[] { "2", "3" }, + Col(Fresh(), "SELECT K FROM T WHERE IIF(N > 10, 1, 0) = 1 ORDER BY K")); + + [Fact] + public void Switch_in_an_order_by_sorts() + => Assert.Equal(new[] { "2", "3", "1" }, + Col(Fresh(), "SELECT K FROM T ORDER BY Switch(N < 10, 2, True, 1)")); +} diff --git a/test/LibRed.Engine.Tests/ConversionFunctionTests.cs b/test/LibRed.Engine.Tests/ConversionFunctionTests.cs new file mode 100644 index 00000000..c0b1254e --- /dev/null +++ b/test/LibRed.Engine.Tests/ConversionFunctionTests.cs @@ -0,0 +1,69 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class ConversionFunctionTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"conv-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static object? Scalar(string expr) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE One (Id LONG)"); + e.ExecuteNonQuery("INSERT INTO One (Id) VALUES (1)"); + return e.ExecuteQuery($"SELECT {expr} FROM One").Rows.First()[0]; + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Integer_conversions_round_half_to_even() + { + Assert.Equal((short)2, Scalar("CInt(2.5)")); // banker's rounding + Assert.Equal((short)4, Scalar("CInt(3.5)")); + Assert.Equal(-2, Scalar("CLng(-2.5)")); + Assert.Equal((byte)2, Scalar("CByte(2.5)")); + Assert.Equal((byte)255, Scalar("CByte(255)")); + } + + [Fact] + public void Float_and_decimal_conversions() + { + Assert.Equal(1.5f, Scalar("CSng(1.5)")); + Assert.Equal(3.0d, Scalar("CDbl(3)")); + Assert.Equal(1.25m, Scalar("CDec(1.25)")); + Assert.Equal(1.5m.ToString(), Scalar("CCur(1.5)")!.ToString()); // currency (existing) + } + + [Fact] + public void String_bool_date_var_conversions() + { + Assert.Equal("1.5", Scalar("CStr(1.5)")); + Assert.Equal("True", Scalar("CStr(True)")); + Assert.Equal(false, Scalar("CBool(0)")); + Assert.Equal(true, Scalar("CBool(5)")); + Assert.Equal(new DateTime(2020, 1, 15), Scalar("CDate('2020-01-15')")); + Assert.Equal(42, Scalar("CVar(42)")); // passthrough + } + + [Fact] + public void Conversions_propagate_null() + { + Assert.Null(Scalar("CInt(NULL)")); + Assert.Null(Scalar("CDbl(NULL)")); + Assert.Null(Scalar("CStr(NULL)")); + Assert.Null(Scalar("CDate(NULL)")); + Assert.Null(Scalar("CVar(NULL)")); + } +} diff --git a/test/LibRed.Engine.Tests/CorrelatedExistsSemiJoinTests.cs b/test/LibRed.Engine.Tests/CorrelatedExistsSemiJoinTests.cs new file mode 100644 index 00000000..65edf5ac --- /dev/null +++ b/test/LibRed.Engine.Tests/CorrelatedExistsSemiJoinTests.cs @@ -0,0 +1,495 @@ +using LibRed; +using LibRed.Engine; +using LibRed.Engine.Execution; +using LibRed.Sql.Ast; +using LibRed.Sql.Parsing; +using Xunit; + +namespace LibRed.Engine.Tests; + +// A correlated EXISTS is decorrelated into a hash semi-join: the body runs once and its correlation values are +// hashed, rather than re-running the body per outer row. These pin the SEMANTICS of that rewrite — every case +// here must give the same answer whether or not the optimisation engages, so they are written to fail if the +// rewrite ever changes meaning. (The speedup itself is measured separately; correctness is what needs guarding.) +public class CorrelatedExistsSemiJoinTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"exsemi-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + // Outer: 1..5, with a NULL key to exercise the null side of the correlation. + e.ExecuteNonQuery("CREATE TABLE O ( Id LONG PRIMARY KEY, K LONG, Tag TEXT(10) )"); + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (1, 10, 'a')"); + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (2, 20, 'b')"); + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (3, 30, 'c')"); + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (4, NULL, 'd')"); + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (5, 50, 'e')"); + + // Inner: matches 10 and 30, plus a NULL key of its own, plus a duplicate of 10. + e.ExecuteNonQuery("CREATE TABLE I ( Id LONG PRIMARY KEY, K LONG, Keep LONG )"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, Keep) VALUES (1, 10, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, Keep) VALUES (2, 30, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, Keep) VALUES (3, 10, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, Keep) VALUES (4, NULL, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, Keep) VALUES (5, 50, 0)"); + return e; + } + + private static long[] Ids(QueryEngine e, string sql) + => e.ExecuteQuery(sql).Rows.Select(r => Convert.ToInt64(r[0])).OrderBy(x => x).ToArray(); + + // Whether the rewrite engages, asked of the analysis directly. Every semantics test here passes either way, + // since falling back gives the same answer — so this is the only thing that can tell a decorrelated shape + // from a declined one. (The timing guards below do the same job for the shape EF actually emits, but at the + // cost of running a 92 s query when they fail.) The outer scope is O aliased `o`, as in the queries above. + private static bool Decorrelates(QueryEngine e, string sql) + { + var select = (SelectStatement)new AntlrSqlParser().ParseStatement(sql); + Expression predicate = select.Where is UnaryExpression u ? u.Operand : select.Where!; + var exists = (ExistsExpression)predicate; + + OutputColumn[] outer = + [ + new("o", "Id", typeof(long)), new("o", "K", typeof(long)), new("o", "Tag", typeof(string)), + ]; + + return ExistsSemiJoin.TryBuild( + (SelectStatement)exists.Query, outer, new(StringComparer.OrdinalIgnoreCase) { "o" }, + e.Database.Catalog) is not null; + } + + [Fact] + public void Matches_only_rows_with_a_correlated_partner() + => Assert.Equal([1, 3, 5], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_null_outer_key_never_matches() + // Row 4 has K = NULL. NULL = anything is never true, so it must not appear — including against the + // inner row that also has K = NULL. + => Assert.DoesNotContain(4L, + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_residual_predicate_still_applies() + // Keep = 0 on the inner row holding K = 50, so outer row 5 must not match even though the keys line up. + => Assert.Equal([1, 3], + Ids(Fresh(), + "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K AND i.Keep = 1)")); + + [Fact] + public void Duplicate_inner_matches_yield_the_outer_row_once() + // Two inner rows have K = 10; EXISTS is existence, not a join, so row 1 appears exactly once. + => Assert.Single( + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K)") + .Where(id => id == 1)); + + [Fact] + public void Not_exists_is_the_complement() + => Assert.Equal([2, 4], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE NOT EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_multi_column_correlation_key_works() + => Assert.Equal([1, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K AND i.Id = o.Id) + """)); + + [Fact] + public void An_inner_left_join_is_preserved() + // The shape ExecuteDelete generates for a predicate over a navigation: the EXISTS body is itself a join, + // and the LEFT JOIN must keep inner rows whose right side is absent. + => Assert.Equal([1, 3, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + LEFT JOIN O AS o2 ON i.Id = o2.Id + WHERE i.K = o.K) + """)); + + [Fact] + public void A_top_of_at_least_one_does_not_change_existence() + // TOP n for n >= 1 cannot affect whether ANY row exists, so it is dropped and the body decorrelates. + // EF emits this shape for Any(). + => Assert.Equal([1, 3, 5], + Ids(Fresh(), + "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT TOP 1 1 FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_top_of_zero_makes_exists_always_false() + // TOP 0 DOES change existence: the body returns nothing whatever the correlation, so no outer row + // qualifies. Dropping this TOP would wrongly admit rows 1, 3 and 5. + => Assert.Empty( + Ids(Fresh(), + "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT TOP 0 1 FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_top_percent_falls_back() + // Refused rather than reasoned about — see TopCannotChangeExistence. Falling back keeps it correct. + => Assert.Equal([1, 3, 5], + Ids(Fresh(), + "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT TOP 50 PERCENT 1 FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_residual_referencing_the_outer_scope_falls_back() + // o.Tag is an OUTER reference in a residual conjunct, so removing the key equalities would not leave an + // outer-independent body. The rewrite must decline rather than drop the residual. + => Assert.Equal([1, 3, 5], + Ids(Fresh(), + "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K AND o.Tag <> 'zz')")); + + [Fact] + public void An_aggregate_body_with_no_group_by_is_always_true() + // A bare aggregate over zero rows still yields one row (COUNT(*) = 0), so this EXISTS is true for EVERY + // outer row — including 2 and 4, which have no partner at all. A key-existence test would say false for + // them, so this body cannot be decorrelated. + => Assert.Equal([1, 2, 3, 4, 5], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT COUNT(*) FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_having_with_no_group_by_is_not_decorrelated() + // The lone group again: for outer rows 2 and 4 nothing matches, COUNT(*) is 0, and `HAVING COUNT(*) < 1` + // admits that empty group — so those rows DO qualify, while a key test would drop them. Rows 1/3/5 have + // partners, so their count is >= 1 and they don't qualify. + => Assert.Equal([2, 4], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K HAVING COUNT(*) < 1) + """)); + + [Fact] + public void A_group_by_body_is_decorrelated_by_grouping_on_the_key_too() + // Grouping on i.Keep as well as the correlation column: every matching inner row has Keep = 1 except the + // one holding K = 50, so rows 1, 3 and 5 each have a group and qualify. + => Assert.Equal([1, 3, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K GROUP BY i.Keep) + """)); + + [Fact] + public void A_having_over_a_group_by_is_applied_per_key() + // K = 10 has two inner rows (both Keep = 1) so its group passes COUNT(*) > 1; K = 30 and K = 50 have one + // row each and fail. Grouping by the key as well is what keeps those counts per-key rather than global — + // grouping on i.Keep alone would count all four Keep = 1 rows and wrongly admit every matching outer row. + => Assert.Equal([1], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K GROUP BY i.Keep HAVING COUNT(*) > 1) + """)); + + [Fact] + public void A_group_by_body_with_a_residual_still_applies_it() + => Assert.Equal([1, 3], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i WHERE i.K = o.K AND i.Keep = 1 GROUP BY i.Id HAVING COUNT(*) > 0) + """)); + + [Fact] + public void A_group_by_key_referencing_the_outer_scope_falls_back() + // Grouping on an outer column makes the body vary per outer row, so it must decline. Per row the group is + // whatever matched, and `COUNT(*) > 0` then admits exactly the rows with a partner. + => Assert.Equal([1, 3, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K GROUP BY o.Tag HAVING COUNT(*) > 0) + """)); + + [Fact] + public void A_having_referencing_the_outer_scope_falls_back() + => Assert.Equal([1], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K GROUP BY i.Keep HAVING COUNT(*) > o.Id) + """)); + + [Theory] + // Which shapes the analysis actually accepts, stated outright rather than inferred from a runtime. The + // grouped rows are the point of this change; the rest pin the boundaries the semantics tests above cover. + [InlineData(true, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K)")] + [InlineData(true, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K GROUP BY i.Keep)")] + [InlineData(true, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K GROUP BY i.Keep HAVING COUNT(*) > 1)")] + // An aggregate or HAVING with no GROUP BY: one group even over no rows, so a key test can't stand in for it. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT COUNT(*) FROM I AS i WHERE i.K = o.K)")] + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K HAVING COUNT(*) < 1)")] + // An outer reference left anywhere the correlation split didn't consume. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K GROUP BY o.Tag HAVING COUNT(*) > 0)")] + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K GROUP BY i.Keep HAVING COUNT(*) > o.Id)")] + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K AND o.Tag <> 'zz')")] + // EF's null-safe equality is a correlation key too, in any operand arrangement. + [InlineData(true, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K OR (i.K IS NULL AND o.K IS NULL))")] + [InlineData(true, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE (i.K IS NULL AND o.K IS NULL) OR i.K = o.K)")] + // But only when BOTH sides' nulls are tested — otherwise it isn't null-safe equality at all. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K OR i.K IS NULL)")] + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K OR (i.K IS NULL AND o.Id IS NULL))")] + // A correlation in HAVING is lifted only when its subquery side is a grouping key. + [InlineData(true, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i GROUP BY i.K HAVING COUNT(*) > 1 AND i.K = o.K)")] + [InlineData(true, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i GROUP BY i.K HAVING COUNT(*) > 1 AND (i.K = o.K OR (i.K IS NULL AND o.K IS NULL)))")] + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i GROUP BY i.K HAVING COUNT(*) >= 1 AND i.Id = o.Id)")] + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K HAVING COUNT(*) > 0 AND MAX(i.Keep) = 1)")] + // No correlation to hash at all, and the shapes TOP rules out. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.Keep = 1)")] + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT TOP 0 1 FROM I AS i WHERE i.K = o.K)")] + [InlineData(false, "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT TOP 50 PERCENT 1 FROM I AS i WHERE i.K = o.K)")] + public void The_analysis_accepts_exactly_these_shapes(bool expected, string sql) + => Assert.Equal(expected, Decorrelates(Fresh(), sql)); + + [Fact] + public void A_null_safe_correlation_matches_null_to_null() + // EF's null-safe equality, which it emits for any correlation on a nullable column. Unlike plain `=`, row 4 + // (K NULL) DOES match — against inner row 4, whose K is also NULL. Contrast A_null_outer_key_never_matches: + // same data, same rows, different answer, and the only difference is the null handling of the correlation. + => Assert.Equal([1, 3, 4, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + WHERE i.K = o.K OR (i.K IS NULL AND o.K IS NULL)) + """)); + + [Fact] + public void A_null_safe_correlation_gives_the_same_answer_per_row() + // The same predicate in a shape that DECLINES (the residual references the outer row), so this runs the + // per-row path. It must reach the identical answer — that is what makes the rewrite above a rewrite and + // not a change of meaning. + => Assert.Equal([1, 3, 4, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + WHERE (i.K = o.K OR (i.K IS NULL AND o.K IS NULL)) AND o.Tag <> 'zz') + """)); + + [Theory] + // The operand order of neither connective is depended on: EF writes the equality first and the inner column + // first, but all four arrangements mean the same thing and must all be recognised. + [InlineData("i.K = o.K OR (i.K IS NULL AND o.K IS NULL)")] + [InlineData("i.K = o.K OR (o.K IS NULL AND i.K IS NULL)")] + [InlineData("(i.K IS NULL AND o.K IS NULL) OR i.K = o.K")] + [InlineData("o.K = i.K OR (o.K IS NULL AND i.K IS NULL)")] + public void The_null_safe_form_is_recognised_whichever_way_it_is_written(string predicate) + => Assert.Equal([1, 3, 4, 5], + Ids(Fresh(), $"SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE {predicate})")); + + [Fact] + public void A_half_null_safe_pattern_is_not_treated_as_null_safe() + // Only ONE side's null is tested, so this is not null-safe equality: it is true when the keys are equal, or + // whenever i.K is null (regardless of o.K). Row 4 (K NULL) matches because inner row 4 has K NULL, but so + // would every other row — which is why treating it as a correlation key would be wrong. It must decline and + // evaluate per row: for every outer row inner row 4 satisfies `i.K IS NULL`, so ALL rows qualify. + => Assert.Equal([1, 2, 3, 4, 5], + Ids(Fresh(), + "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K OR i.K IS NULL)")); + + [Fact] + public void A_null_safe_correlation_works_alongside_a_plain_one() + // Two keys of different kinds in one correlation: Id plain, K null-safe. Each outer row meets the single I + // row with its Id, then the K pair decides — row 1 (10 = 10) and row 5 (50 = 50) match on equality, rows 2 + // and 3 mismatch, and row 4 matches ONLY because the K pair is null-safe (both null). Written with a plain + // `=` for K, row 4 would drop out, so the per-key flag is doing exactly what it claims. + => Assert.Equal([1, 4, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + WHERE i.Id = o.Id AND (i.K = o.K OR (i.K IS NULL AND o.K IS NULL))) + """)); + + [Fact] + public void A_correlation_in_having_on_a_grouping_key_is_decorrelated() + // EF's Contains-over-a-GroupBy shape: the correlation sits in HAVING beside an aggregate condition, and + // its subquery side is the grouping key. K = 10 has two inner rows so it passes COUNT(*) > 1; K = 30 and + // K = 50 have one each and fail. Only outer row 1 qualifies. + => Assert.Equal([1], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + GROUP BY i.K + HAVING COUNT(*) > 1 AND i.K = o.K) + """)); + + [Fact] + public void A_having_correlation_leaves_the_aggregate_over_the_same_rows() + // The soundness point. Lifting the correlation out must not change which rows the aggregate sees: the + // count per group is over ALL of that key's rows either way, because a grouping key is constant within + // its group. With `>= 1` every matching key qualifies, so this is the plain existence answer. + => Assert.Equal([1, 3, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + GROUP BY i.K + HAVING COUNT(*) >= 1 AND i.K = o.K) + """)); + + [Fact] + public void A_having_correlation_can_be_null_safe_too() + // Both extensions at once: correlation in HAVING, written in EF's null-safe form. Row 4's key is NULL and + // matches the inner NULL group, which has one row. + => Assert.Equal([1, 3, 4, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + GROUP BY i.K + HAVING COUNT(*) >= 1 AND (i.K = o.K OR (i.K IS NULL AND o.K IS NULL))) + """)); + + [Fact] + public void A_having_correlation_on_a_non_grouping_column_falls_back() + // i.Id is not a grouping key, so the predicate does NOT select whole groups: grouping by K and then + // testing `i.Id = o.Id` reads Id from each group's FIRST row. It must decline, and the answer it falls + // back to shows why lifting it would have been wrong. The four groups by K are 10 → rows (Id 1, Id 3), + // 30 → (Id 2), NULL → (Id 4), 50 → (Id 5), so the Ids on offer are {1, 2, 4, 5} — note 3 is absent, being + // the second row of its group. Every outer row whose own Id is in that set qualifies. + => Assert.Equal([1, 2, 4, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + GROUP BY i.K + HAVING COUNT(*) >= 1 AND i.Id = o.Id) + """)); + + [Fact] + public void A_having_correlation_with_no_group_by_falls_back() + // No grouping key at all, so nothing in HAVING can be lifted: the lone group's COUNT depends on the + // correlation, which is precisely what a key test cannot express. Declines. + => Assert.Equal([1, 3], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K HAVING COUNT(*) > 0 AND MAX(i.Keep) = 1) + """)); + + [Fact] + public void An_uncorrelated_exists_is_unaffected() + => Assert.Equal([1, 2, 3, 4, 5], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.Keep = 1)")); + + [Fact] + public void Delete_with_a_correlated_exists_removes_exactly_the_matching_rows() + { + QueryEngine e = Fresh(); + int deleted = e.ExecuteNonQuery("DELETE FROM O WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = O.K)"); + Assert.Equal(3, deleted); + Assert.Equal([2, 4], Ids(e, "SELECT Id FROM O")); + } + + [Fact] + public void A_residual_holding_an_outer_independent_subquery_is_decorrelated() + // MAX(i2.Keep) over I is 1 regardless of the outer row, so the residual `i.Keep = (…)` doesn't vary and the + // rewrite is sound. The residual test has to descend INTO the subquery to see that: treating a nested + // subquery as opaque declined this shape, which is why GroupBy_aggregate_2 stayed slow. + => Assert.Equal([1, 3], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + WHERE i.K = o.K AND i.Keep = (SELECT MAX(i2.Keep) FROM I AS i2)) + """)); + + [Fact] + public void A_residual_holding_a_correlated_subquery_falls_back() + // Here the residual's subquery DOES reference the outer row, so the body varies and the rewrite must + // decline. Per outer row the MAX is taken over that row's own K, which admits row 5 as well. + => Assert.Equal([1, 3, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE EXISTS ( + SELECT 1 FROM I AS i + WHERE i.K = o.K AND i.Keep = (SELECT MAX(i2.Keep) FROM I AS i2 WHERE i2.K = o.K)) + """)); + + [Fact] + public void An_unqualified_column_in_the_residual_falls_back() + // Bare `Keep` binds to I.Keep here, but only the evaluator's resolver could establish that, and this + // rewrite commits before the body ever runs — so it declines and stays correct. + => Assert.Equal([1, 3], + Ids(Fresh(), + "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM I AS i WHERE i.K = o.K AND Keep = 1)")); + + // Every test above passes whether or not the rewrite engages, because falling back gives the same answer — + // which is precisely how an earlier version of this optimisation appeared "correct" while never firing at + // all (SubtreeAliases returned no aliases for a projected plan, so every subquery was declined). This guard + // fails if that happens again: the real shape EF generates for a predicate over a navigation takes ~92 s + // per-row and ~0.4 s decorrelated, so the threshold is ~30x clear of the fast path and ~6x clear of the slow + // one. It is a performance guard, not a correctness test. + [Fact] + public void The_rewrite_actually_engages_on_the_shape_ExecuteDelete_generates() + { + string path = Path.Combine(Path.GetTempPath(), $"exsemiperf-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + var sw = System.Diagnostics.Stopwatch.StartNew(); + int deleted = e.ExecuteNonQuery( + """ + DELETE FROM `Order Details` AS `o` + WHERE EXISTS ( + SELECT 1 + FROM (`Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o1`.`CustomerID` = `c`.`CustomerID` + WHERE (`c`.`CustomerID` LIKE 'F%') AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) + """); + sw.Stop(); + + Assert.Equal(164, deleted); + Assert.True(sw.Elapsed < TimeSpan.FromSeconds(15), + $"correlated EXISTS took {sw.Elapsed.TotalSeconds:F1}s — the decorrelation is no longer engaging"); + } + + // Same guard for the TOP form, because A_top_of_at_least_one_does_not_change_existence gives the right answer + // whether the TOP is dropped or the whole rewrite is declined — so only timing distinguishes them. EF emits + // TOP 1 inside EXISTS for Any(), so this is the shape that matters most in practice. + [Fact] + public void The_rewrite_engages_even_when_the_body_has_a_top() + { + string path = Path.Combine(Path.GetTempPath(), $"exsemitop-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + var sw = System.Diagnostics.Stopwatch.StartNew(); + int deleted = e.ExecuteNonQuery( + """ + DELETE FROM `Order Details` AS `o` + WHERE EXISTS ( + SELECT TOP 1 1 + FROM (`Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID`) + LEFT JOIN `Customers` AS `c` ON `o1`.`CustomerID` = `c`.`CustomerID` + WHERE (`c`.`CustomerID` LIKE 'F%') AND `o0`.`OrderID` = `o`.`OrderID` AND `o0`.`ProductID` = `o`.`ProductID`) + """); + sw.Stop(); + + Assert.Equal(164, deleted); + Assert.True(sw.Elapsed < TimeSpan.FromSeconds(15), + $"TOP-bodied correlated EXISTS took {sw.Elapsed.TotalSeconds:F1}s — the TOP is no longer being dropped"); + } +} diff --git a/test/LibRed.Engine.Tests/CorrelatedInSemiJoinTests.cs b/test/LibRed.Engine.Tests/CorrelatedInSemiJoinTests.cs new file mode 100644 index 00000000..2dddbb8f --- /dev/null +++ b/test/LibRed.Engine.Tests/CorrelatedInSemiJoinTests.cs @@ -0,0 +1,195 @@ +using LibRed; +using LibRed.Engine; +using LibRed.Engine.Execution; +using LibRed.Sql.Ast; +using LibRed.Sql.Parsing; +using Xunit; + +namespace LibRed.Engine.Tests; + +// A correlated `x IN (subquery)` is decorrelated into a hash semi-join, like EXISTS: the body runs once and its +// values are hashed, rather than the body being re-run per outer row. IN is the harder case because it is +// three-valued — "no match" and "no match but the column held a NULL" are FALSE and UNKNOWN, and they differ once +// NOT IN is in play — so these tests are mostly about that, not about the speed. +public class CorrelatedInSemiJoinTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"insemi-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + e.ExecuteNonQuery("CREATE TABLE O ( Id LONG PRIMARY KEY, K LONG, Tag TEXT(10) )"); + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (1, 10, 'a')"); + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (2, 20, 'b')"); // no partner at all + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (3, 30, 'c')"); // partner projects NULL + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (4, NULL, 'd')"); + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (5, 50, 'e')"); + + // V is the projected column and is nullable — that is what makes the UNKNOWN cases reachable. + e.ExecuteNonQuery("CREATE TABLE I ( Id LONG PRIMARY KEY, K LONG, V LONG, Keep LONG )"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (1, 10, 1, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (2, 30, NULL, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (3, 10, 3, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (4, NULL, 4, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (5, 50, 5, 0)"); + return e; + } + + private static long[] Ids(QueryEngine e, string sql) + => e.ExecuteQuery(sql).Rows.Select(r => Convert.ToInt64(r[0])).OrderBy(x => x).ToArray(); + + // Whether the rewrite engages, asked of the analysis directly: every semantics test here passes either way, + // since falling back to the per-row loop gives the same answer. + private static bool Decorrelates(QueryEngine e, string sql) + { + var select = (SelectStatement)new AntlrSqlParser().ParseStatement(sql); + var inq = (InSubqueryExpression)select.Where!; + + OutputColumn[] outer = + [ + new("o", "Id", typeof(long)), new("o", "K", typeof(long)), new("o", "Tag", typeof(string)), + ]; + + return ExistsSemiJoin.TryBuildForIn( + (SelectStatement)inq.Query, inq.Value, outer, new(StringComparer.OrdinalIgnoreCase) { "o" }, + e.Database.Catalog) is not null; + } + + [Fact] + public void In_matches_the_correlated_values() + // Per outer row the body yields the V values of its partners: row 1 sees {1, 3} and its Id is in it; + // row 5 sees {5}; row 3 sees {NULL} (UNKNOWN, not a match); rows 2 and 4 see nothing. + => Assert.Equal([1, 5], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE o.Id IN (SELECT i.V FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_null_safe_correlation_widens_which_partners_are_seen() + // EF's null-safe equality on the CORRELATION, which is independent of the three-valued logic of IN itself: + // row 4's key is NULL, so with a plain `=` it has no partners at all, while here it sees inner row 4 — + // whose V is 4, matching its own Id. So row 4 joins the result, and the rest are unchanged. + => Assert.Equal([1, 4, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE o.Id IN ( + SELECT i.V FROM I AS i WHERE i.K = o.K OR (i.K IS NULL AND o.K IS NULL)) + """)); + + [Fact] + public void Not_in_is_not_the_complement_when_the_column_holds_a_null() + { + // The three-valued trap. Row 3's body yields {NULL}: `3 IN (NULL)` is UNKNOWN, so row 3 satisfies NEITHER + // IN nor NOT IN and must be absent from both results. Rows 2 and 4 have an EMPTY body, which is FALSE + // rather than UNKNOWN, so NOT IN admits them. + QueryEngine e = Fresh(); + const string body = "(SELECT i.V FROM I AS i WHERE i.K = o.K)"; + long[] inRows = Ids(e, $"SELECT o.Id FROM O AS o WHERE o.Id IN {body}"); + long[] notInRows = Ids(e, $"SELECT o.Id FROM O AS o WHERE o.Id NOT IN {body}"); + + Assert.Equal([1, 5], inRows); + Assert.Equal([2, 4], notInRows); + Assert.DoesNotContain(3L, inRows); + Assert.DoesNotContain(3L, notInRows); + } + + [Fact] + public void Not_in_is_the_complement_when_no_null_is_seen() + // Same shape without a null in play: the body projects Id, which is a primary key. Every row's value is + // simply absent from its own body's set, so NOT IN holds for all of them — except row 4, whose left side + // is NULL (see below). + => Assert.Equal([1, 2, 3, 5], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE o.K NOT IN (SELECT i.Id FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_null_left_side_satisfies_neither_form() + { + // `NULL IN (…)` is UNKNOWN whatever the set holds, so row 4 appears in neither result. + QueryEngine e = Fresh(); + const string body = "(SELECT i.Id FROM I AS i WHERE i.K = o.K)"; + Assert.DoesNotContain(4L, Ids(e, $"SELECT o.Id FROM O AS o WHERE o.K IN {body}")); + Assert.DoesNotContain(4L, Ids(e, $"SELECT o.Id FROM O AS o WHERE o.K NOT IN {body}")); + } + + [Fact] + public void An_empty_body_is_false_not_unknown() + // Row 2 has no partner, so its body is empty. `x IN ()` is FALSE — so NOT IN is TRUE and the row survives. + // Getting this wrong by treating "no correlation match" as UNKNOWN would drop it. + => Assert.Contains(2L, + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE o.Id NOT IN (SELECT i.V FROM I AS i WHERE i.K = o.K)")); + + [Fact] + public void A_residual_predicate_still_applies() + // Keep = 0 on the row holding K = 50, so row 5's body is empty and only row 1 matches. + => Assert.Equal([1], + Ids(Fresh(), + "SELECT o.Id FROM O AS o WHERE o.Id IN (SELECT i.V FROM I AS i WHERE i.K = o.K AND i.Keep = 1)")); + + [Fact] + public void A_multi_column_correlation_key_works() + // Rows 1 and 5 are the ones whose inner partner agrees on BOTH Id and K, and whose V then equals their Id. + // Row 3's partner is I row 2, which agrees on neither. + => Assert.Equal([1, 5], + Ids(Fresh(), + """ + SELECT o.Id FROM O AS o + WHERE o.Id IN (SELECT i.V FROM I AS i WHERE i.K = o.K AND i.Id = o.Id) + """)); + + [Fact] + public void Delete_with_a_correlated_in_removes_exactly_the_matching_rows() + { + QueryEngine e = Fresh(); + int deleted = e.ExecuteNonQuery("DELETE FROM O WHERE O.Id IN (SELECT i.V FROM I AS i WHERE i.K = O.K)"); + Assert.Equal(2, deleted); + Assert.Equal([2, 3, 4], Ids(e, "SELECT Id FROM O")); + } + + [Theory] + [InlineData(true, "SELECT o.Id FROM O AS o WHERE o.Id IN (SELECT i.V FROM I AS i WHERE i.K = o.K)")] + [InlineData(true, "SELECT o.Id FROM O AS o WHERE o.Id NOT IN (SELECT i.V FROM I AS i WHERE i.K = o.K)")] + // Any TOP declines: unlike EXISTS, where TOP n >= 1 cannot change whether a row exists, TOP absolutely + // changes WHICH values are in the set, so the key query cannot drop it. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE o.Id IN (SELECT TOP 1 i.V FROM I AS i WHERE i.K = o.K)")] + // GROUP BY/HAVING decline — see TryBuildForIn. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE o.Id IN (SELECT i.V FROM I AS i WHERE i.K = o.K GROUP BY i.V)")] + // The output must be a plain column: a computed one can't be resolved to a type kind, and the hash has to + // agree with the evaluator's comparison. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE o.Id IN (SELECT i.V + 1 FROM I AS i WHERE i.K = o.K)")] + // Uncorrelated: nothing to hash, and ExecuteColumn already hoists the body to once per statement. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE o.Id IN (SELECT i.V FROM I AS i WHERE i.Keep = 1)")] + // An outer reference the correlation split didn't consume. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE o.Id IN (SELECT i.V FROM I AS i WHERE i.K = o.K AND o.Tag <> 'zz')")] + // A cross-kind comparison: Tag is text, V numeric. `5 = '5'` is true for the evaluator but no hash agrees + // with that across kinds, so it stays a per-row comparison. + [InlineData(false, "SELECT o.Id FROM O AS o WHERE o.Tag IN (SELECT i.V FROM I AS i WHERE i.K = o.K)")] + public void The_analysis_accepts_exactly_these_shapes(bool expected, string sql) + => Assert.Equal(expected, Decorrelates(Fresh(), sql)); + + // As with EXISTS, correctness tests pass whether or not the rewrite fires, so this pins that it DOES — the + // per-row form re-runs a two-table join for every candidate row. Northwind: 2155 Order Details rows against + // the orders of customers whose ID starts with F. Measured ~26 s per-row against ~0.2 s decorrelated, so the + // threshold sits well clear of both. + [Fact] + public void The_rewrite_engages_on_a_correlated_in_over_a_join() + { + string path = Path.Combine(Path.GetTempPath(), $"insemiperf-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + var sw = System.Diagnostics.Stopwatch.StartNew(); + int deleted = e.ExecuteNonQuery( + """ + DELETE FROM `Order Details` AS `o` + WHERE `o`.`OrderID` IN ( + SELECT `o1`.`OrderID` + FROM `Orders` AS `o1` + INNER JOIN `Customers` AS `c` ON `o1`.`CustomerID` = `c`.`CustomerID` + WHERE (`c`.`CustomerID` LIKE 'F%') AND `o1`.`OrderID` = `o`.`OrderID`) + """); + sw.Stop(); + + Assert.Equal(164, deleted); + Assert.True(sw.ElapsedMilliseconds < 5000, $"took {sw.ElapsedMilliseconds} ms — the IN was not decorrelated"); + } +} diff --git a/test/LibRed.Engine.Tests/CorrelatedOuterAggregateTests.cs b/test/LibRed.Engine.Tests/CorrelatedOuterAggregateTests.cs new file mode 100644 index 00000000..61666484 --- /dev/null +++ b/test/LibRed.Engine.Tests/CorrelatedOuterAggregateTests.cs @@ -0,0 +1,66 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// An outer-query aggregate referenced inside a correlated subquery (e.g. Northwind's +// GroupBy_with_aggregate_containing_complex_where). MAX(o.OrderID) is the outer group's max; it must be +// precomputed per group and reachable from the subquery's scope. +public class CorrelatedOuterAggregateTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"corragg-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + [Fact] + public void Subquery_references_outer_group_aggregate() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + // Per employee: the group's MAX(OrderID), and a subquery that finds the max OrderID that is + // <= the outer group's max (which is just the group's own max again) — exercises an outer + // aggregate inside a correlated subquery predicate. + var rows = e.ExecuteQuery( + "SELECT o.EmployeeID AS K, " + + "(SELECT MAX(o0.OrderID) FROM Orders AS o0 " + + " WHERE o0.EmployeeID = o.EmployeeID AND o0.OrderID <= MAX(o.OrderID)) AS M " + + "FROM Orders AS o GROUP BY o.EmployeeID").Rows.ToList(); + + // Ground truth: the plain per-employee MAX(OrderID). + var expected = e.ExecuteQuery("SELECT EmployeeID, MAX(OrderID) FROM Orders GROUP BY EmployeeID") + .Rows.ToDictionary(r => Convert.ToInt32(r[0]), r => Convert.ToInt32(r[1])); + + Assert.Equal(expected.Count, rows.Count); + foreach (var r in rows) + Assert.Equal(expected[Convert.ToInt32(r[0])], Convert.ToInt32(r[1])); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // The exact Northwind shape: MAX(o.OrderID) inside the subquery WHERE, wrapped in IIF/CLNG. + [Fact] + public void Northwind_complex_where_shape_parses_and_runs() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var rows = new QueryEngine(db).ExecuteQuery( + "SELECT o.EmployeeID AS `Key`, (" + + " SELECT MAX(o0.OrderID) FROM Orders AS o0 " + + " WHERE IIF(o0.EmployeeID IS NULL, NULL, CLNG(o0.EmployeeID)) = " + + " IIF((MAX(o.OrderID) * 6) IS NULL, NULL, CLNG(MAX(o.OrderID) * 6)) " + + " OR (o0.EmployeeID IS NULL AND MAX(o.OrderID) IS NULL)) AS `Max` " + + "FROM Orders AS o GROUP BY o.EmployeeID").Rows.ToList(); + Assert.NotEmpty(rows); // it runs without "Function MAX is not supported" + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/CorrelatedScalarAggregateTests.cs b/test/LibRed.Engine.Tests/CorrelatedScalarAggregateTests.cs new file mode 100644 index 00000000..71ff98c7 --- /dev/null +++ b/test/LibRed.Engine.Tests/CorrelatedScalarAggregateTests.cs @@ -0,0 +1,203 @@ +using LibRed; +using LibRed.Engine; +using LibRed.Engine.Execution; +using LibRed.Sql.Ast; +using LibRed.Sql.Parsing; +using Xunit; + +namespace LibRed.Engine.Tests; + +// A correlated scalar aggregate — `(SELECT COUNT(*) FROM I WHERE I.K = o.K)` — is computed by one pass grouped by +// the correlation column instead of once per outer row. The semantics that need pinning are all about the outer +// row with NO partner: the correlated body still returns a row there, so absence from the grouped result is not +// null but the aggregate's own empty-input value, which differs per aggregate (COUNT 0, SUM/MIN/MAX null). +public class CorrelatedScalarAggregateTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"scagg-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + e.ExecuteNonQuery("CREATE TABLE O ( Id LONG PRIMARY KEY, K LONG, Tag TEXT(10) )"); + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (1, 10, 'a')"); // two partners + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (2, 20, 'b')"); // none + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (3, 30, 'c')"); // one, with V NULL + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (4, NULL, 'd')"); // null key ⇒ none + e.ExecuteNonQuery("INSERT INTO O (Id, K, Tag) VALUES (5, 50, 'e')"); // one + + e.ExecuteNonQuery("CREATE TABLE I ( Id LONG PRIMARY KEY, K LONG, V LONG, Keep LONG )"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (1, 10, 1, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (2, 30, NULL, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (3, 10, 3, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (4, NULL, 4, 1)"); + e.ExecuteNonQuery("INSERT INTO I (Id, K, V, Keep) VALUES (5, 50, 5, 0)"); + return e; + } + + private static long[] Ids(QueryEngine e, string sql) + => e.ExecuteQuery(sql).Rows.Select(r => Convert.ToInt64(r[0])).OrderBy(x => x).ToArray(); + + /// The scalar's value per outer row, keyed by O.Id, so the values themselves can be asserted. + private static Dictionary Values(QueryEngine e, string scalar) + => e.ExecuteQuery($"SELECT o.Id, {scalar} FROM O AS o") + .Rows.ToDictionary(r => Convert.ToInt64(r[0]), r => r[1]); + + private static bool Decorrelates(QueryEngine e, string sql) + { + var select = (SelectStatement)new AntlrSqlParser().ParseStatement(sql); + var scalar = (ScalarSubquery)select.Projection[1].Value; + + OutputColumn[] outer = + [ + new("o", "Id", typeof(long)), new("o", "K", typeof(long)), new("o", "Tag", typeof(string)), + ]; + + return ScalarAggregateSemiJoin.TryBuild( + (SelectStatement)scalar.Query, outer, new(StringComparer.OrdinalIgnoreCase) { "o" }, + e.Database.Catalog) is not null; + } + + [Fact] + public void Count_over_no_partners_is_zero_not_null() + { + // The whole point. Rows 2 and 4 have no partner, and their key is simply absent from the grouped pass — + // but COUNT(*) over nothing is 0, so treating absence as null would report the wrong value AND make the + // `= 0` predicate select nothing. + Dictionary counts = Values(Fresh(), "(SELECT COUNT(*) FROM I AS i WHERE i.K = o.K)"); + Assert.Equal(2, Convert.ToInt32(counts[1])); + Assert.Equal(0, Convert.ToInt32(counts[2])); + Assert.Equal(1, Convert.ToInt32(counts[3])); + Assert.Equal(0, Convert.ToInt32(counts[4])); // null correlation value ⇒ empty body ⇒ 0 + Assert.Equal(1, Convert.ToInt32(counts[5])); + + Assert.Equal([2, 4], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE (SELECT COUNT(*) FROM I AS i WHERE i.K = o.K) = 0")); + } + + [Fact] + public void Sum_over_no_partners_is_null() + { + // Same absence, opposite value: SUM of nothing is NULL. Row 3 is null for a different reason — it HAS a + // partner, whose V is null — and the two must agree, since the correlated form can't tell them apart. + Dictionary sums = Values(Fresh(), "(SELECT SUM(i.V) FROM I AS i WHERE i.K = o.K)"); + Assert.Equal(4L, Convert.ToInt64(sums[1])); + Assert.Null(sums[2]); + Assert.Null(sums[3]); + Assert.Null(sums[4]); + Assert.Equal(5L, Convert.ToInt64(sums[5])); + } + + [Fact] + public void Max_over_no_partners_is_null() + { + Dictionary maxes = Values(Fresh(), "(SELECT MAX(i.V) FROM I AS i WHERE i.K = o.K)"); + Assert.Equal(3L, Convert.ToInt64(maxes[1])); + Assert.Null(maxes[2]); + Assert.Equal(5L, Convert.ToInt64(maxes[5])); + } + + [Fact] + public void A_predicate_over_the_aggregate_selects_the_right_rows() + => Assert.Equal([1], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE (SELECT COUNT(*) FROM I AS i WHERE i.K = o.K) > 1")); + + [Fact] + public void A_residual_predicate_still_applies() + { + // Keep = 0 on the partner of row 5, so its count drops to 0 while row 1's stays at 2. + Dictionary counts = + Values(Fresh(), "(SELECT COUNT(*) FROM I AS i WHERE i.K = o.K AND i.Keep = 1)"); + Assert.Equal(2, Convert.ToInt32(counts[1])); + Assert.Equal(0, Convert.ToInt32(counts[5])); + } + + [Fact] + public void A_multi_column_correlation_key_works() + { + Dictionary counts = + Values(Fresh(), "(SELECT COUNT(*) FROM I AS i WHERE i.K = o.K AND i.Id = o.Id)"); + Assert.Equal(1, Convert.ToInt32(counts[1])); // I row 1: Id 1, K 10 + Assert.Equal(0, Convert.ToInt32(counts[3])); // I row 2 has K 30 but Id 2 + Assert.Equal(1, Convert.ToInt32(counts[5])); // I row 5: Id 5, K 50 + } + + [Fact] + public void Count_distinct_is_per_key() + { + // Both of row 1's partners are counted distinctly by V (1 and 3); a DISTINCT inside the aggregate is + // unaffected by the grouping, since the group holds exactly the rows the correlation admitted. + Dictionary counts = + Values(Fresh(), "(SELECT COUNT(DISTINCT i.V) FROM I AS i WHERE i.K = o.K)"); + Assert.Equal(2, Convert.ToInt32(counts[1])); + Assert.Equal(0, Convert.ToInt32(counts[3])); // its only partner's V is null, which COUNT(col) skips + } + + [Fact] + public void A_non_aggregate_scalar_body_falls_back_and_keeps_first_row_semantics() + { + // TOP 1 with an ORDER BY is "the first row", which depends on an ordering this rewrite would discard, so + // it declines. Row 1's partners are I rows 1 and 3; ordered by Id descending the first is 3, whose V is 3. + Dictionary values = + Values(Fresh(), "(SELECT TOP 1 i.V FROM I AS i WHERE i.K = o.K ORDER BY i.Id DESC)"); + Assert.Equal(3L, Convert.ToInt64(values[1])); + Assert.Null(values[2]); // no rows ⇒ a scalar subquery is NULL + } + + [Fact] + public void A_null_safe_correlation_counts_the_null_partners() + { + // EF's null-safe equality. Row 4's key is NULL, which under a plain `=` matches nothing (count 0) but here + // matches the one inner row whose K is also NULL. Every other row is unaffected. + Dictionary counts = Values( + Fresh(), "(SELECT COUNT(*) FROM I AS i WHERE i.K = o.K OR (i.K IS NULL AND o.K IS NULL))"); + Assert.Equal(2, Convert.ToInt32(counts[1])); + Assert.Equal(0, Convert.ToInt32(counts[2])); + Assert.Equal(1, Convert.ToInt32(counts[4])); + Assert.Equal(1, Convert.ToInt32(counts[5])); + } + + [Theory] + [InlineData(true, "SELECT o.Id, (SELECT COUNT(*) FROM I AS i WHERE i.K = o.K) FROM O AS o")] + [InlineData(true, "SELECT o.Id, (SELECT COUNT(*) FROM I AS i WHERE i.K = o.K OR (i.K IS NULL AND o.K IS NULL)) FROM O AS o")] + [InlineData(true, "SELECT o.Id, (SELECT SUM(i.V) FROM I AS i WHERE i.K = o.K) FROM O AS o")] + [InlineData(true, "SELECT o.Id, (SELECT COUNT(DISTINCT i.V) FROM I AS i WHERE i.K = o.K) FROM O AS o")] + // First-row semantics, not an aggregate: the answer depends on an ordering the rewrite discards. + [InlineData(false, "SELECT o.Id, (SELECT TOP 1 i.V FROM I AS i WHERE i.K = o.K ORDER BY i.Id) FROM O AS o")] + [InlineData(false, "SELECT o.Id, (SELECT i.V FROM I AS i WHERE i.K = o.K) FROM O AS o")] + // An expression around the aggregate would need its own empty-input evaluation, so only a lone call is taken. + [InlineData(false, "SELECT o.Id, (SELECT COUNT(*) + 1 FROM I AS i WHERE i.K = o.K) FROM O AS o")] + // A GROUP BY body yields several rows for the outer row to take the first of. + [InlineData(false, "SELECT o.Id, (SELECT COUNT(*) FROM I AS i WHERE i.K = o.K GROUP BY i.V) FROM O AS o")] + // Uncorrelated: already hoisted to once per statement. + [InlineData(false, "SELECT o.Id, (SELECT COUNT(*) FROM I AS i WHERE i.Keep = 1) FROM O AS o")] + // An outer reference the correlation split didn't consume. + [InlineData(false, "SELECT o.Id, (SELECT COUNT(*) FROM I AS i WHERE i.K = o.K AND o.Tag <> 'zz') FROM O AS o")] + public void The_analysis_accepts_exactly_these_shapes(bool expected, string sql) + => Assert.Equal(expected, Decorrelates(Fresh(), sql)); + + // As elsewhere, the correctness tests pass whether or not the rewrite fires, so this pins that it DOES. + [Fact] + public void The_rewrite_engages_on_a_correlated_count_over_northwind() + { + string path = Path.Combine(Path.GetTempPath(), $"scaggperf-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + var sw = System.Diagnostics.Stopwatch.StartNew(); + int rows = e.ExecuteQuery( + """ + SELECT `o`.`OrderID` + FROM `Order Details` AS `o` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o1` + INNER JOIN `Customers` AS `c` ON `o1`.`CustomerID` = `c`.`CustomerID` + WHERE `o1`.`OrderID` = `o`.`OrderID`) > 0 + """).Rows.Count(); + sw.Stop(); + + Assert.Equal(2155, rows); + Assert.True(sw.ElapsedMilliseconds < 5000, $"took {sw.ElapsedMilliseconds} ms — the aggregate was not decorrelated"); + } +} diff --git a/test/LibRed.Engine.Tests/CorrelatedSeekTests.cs b/test/LibRed.Engine.Tests/CorrelatedSeekTests.cs new file mode 100644 index 00000000..954e61cb --- /dev/null +++ b/test/LibRed.Engine.Tests/CorrelatedSeekTests.cs @@ -0,0 +1,90 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// A correlated subquery whose predicate equates an indexed column to an outer column is served by an +/// index seek keyed off the outer row (not a full scan re-run per outer row). These verify the results are +/// identical to the unoptimised form — the seek must be a pure speedup — including a composite-key correlation. +/// +public class CorrelatedSeekTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"corr-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE P (Id LONG PRIMARY KEY, Nm TEXT(20))"); + e.ExecuteNonQuery("CREATE TABLE C (Id LONG PRIMARY KEY, Pid LONG, Amt LONG)"); + e.ExecuteNonQuery("CREATE INDEX IX_Pid ON C (Pid)"); + // Composite-key table: PK (K1, K2). + e.ExecuteNonQuery("CREATE TABLE D (K1 LONG, K2 LONG, V LONG, CONSTRAINT PK_D PRIMARY KEY (K1, K2))"); + for (int i = 0; i < 40; i++) e.ExecuteNonQuery($"INSERT INTO P (Id, Nm) VALUES ({i}, 'p{i}')"); + for (int i = 0; i < 200; i++) e.ExecuteNonQuery($"INSERT INTO C (Id, Pid, Amt) VALUES ({i}, {i % 40}, {i})"); + for (int i = 0; i < 40; i++) e.ExecuteNonQuery($"INSERT INTO D (K1, K2, V) VALUES ({i}, {i * 2}, {i})"); + return e; + } + + private static int Count(QueryEngine e, string sql) => e.ExecuteQuery(sql).Rows.Count(); + private static object? Scalar(QueryEngine e, string sql) => e.ExecuteQuery(sql).Rows.First()[0]; + + [Fact] + public void Correlated_exists_returns_the_same_rows_as_a_scan() + { + var e = Seeded(); + // Every P (0..39) has children (Pid = i%40 covers 0..39), so all 40 satisfy EXISTS. + Assert.Equal(40, Count(e, "SELECT Nm FROM P WHERE EXISTS (SELECT 1 FROM C WHERE C.Pid = P.Id)")); + // A P with no child fails EXISTS. + e.ExecuteNonQuery("INSERT INTO P (Id, Nm) VALUES (999, 'lonely')"); + Assert.Equal(40, Count(e, "SELECT Nm FROM P WHERE EXISTS (SELECT 1 FROM C WHERE C.Pid = P.Id)")); + Assert.Equal(41, Count(e, "SELECT Nm FROM P")); + } + + [Fact] + public void Correlated_exists_with_an_extra_residual_predicate() + { + var e = Seeded(); + // Only children with Amt > 150 qualify; Amt = i∈0..199, i%40 gives the Pid. Amt>150 → i∈151..199 (49 + // rows), whose Pids (151..199 mod 40) = {31..39, 0..19} = 29 distinct parents. + int viaExists = Count(e, "SELECT Nm FROM P WHERE EXISTS (SELECT 1 FROM C WHERE C.Pid = P.Id AND C.Amt > 150)"); + int distinctParents = Count(e, "SELECT DISTINCT Pid FROM C WHERE Amt > 150"); + Assert.Equal(distinctParents, viaExists); + } + + [Fact] + public void Correlated_scalar_subquery_seeks() + { + var e = Seeded(); + // Sum of a parent's children's Amt via a correlated scalar subquery, for one parent. + object? viaSub = Scalar(e, "SELECT (SELECT SUM(C.Amt) FROM C WHERE C.Pid = 7) FROM P WHERE P.Id = 7"); + object? viaDirect = Scalar(e, "SELECT SUM(Amt) FROM C WHERE Pid = 7"); + Assert.Equal(Convert.ToInt64(viaDirect), Convert.ToInt64(viaSub)); + } + + [Fact] + public void Composite_key_correlated_seek_matches_a_scan() + { + var e = Seeded(); + // D has PK (K1, K2). A correlated EXISTS equating BOTH key columns to outer values is an exact + // composite point seek — must return the same as the unindexed equivalent. + int viaExists = Count(e, + "SELECT V FROM D AS d1 WHERE EXISTS (SELECT 1 FROM D AS d2 WHERE d2.K1 = d1.K1 AND d2.K2 = d1.K2 AND d2.V > 20)"); + int direct = Count(e, "SELECT V FROM D WHERE V > 20"); + Assert.Equal(direct, viaExists); + } + + [Fact] + public void Correlated_subquery_as_a_range_bound_is_not_turned_into_a_seek() + { + // `P.Id > (correlated aggregate subquery)` must NOT be rewritten to an index range-seek with the + // subquery as the bound: the bound is evaluated once with no row scope, but the subquery correlates to + // P.Id (the row being sought) — that would throw "Column 'P.Id' was not found". It must stay a filter. + var e = Seeded(); + // Every P (Id 0..39) has exactly 5 children (200 C rows, Pid = i%40), so the correlated COUNT is 5 for + // each → P.Id > 5 keeps Ids 6..39 = 34 rows. The seek-rewrite bug would instead throw before returning. + Assert.Equal(34, Count(e, "SELECT P.Id FROM P WHERE P.Id > (SELECT COUNT(*) FROM C WHERE C.Pid = P.Id)")); + } +} diff --git a/test/LibRed.Engine.Tests/CorrelatedSubqueryTests.cs b/test/LibRed.Engine.Tests/CorrelatedSubqueryTests.cs new file mode 100644 index 00000000..64ffcbef --- /dev/null +++ b/test/LibRed.Engine.Tests/CorrelatedSubqueryTests.cs @@ -0,0 +1,192 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class CorrelatedSubqueryTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + private static List Query(string sql, out IReadOnlyList columns) + { + using var db = JetDatabase.Open(Northwind); + var rs = new QueryEngine(db).ExecuteQuery(sql); + columns = rs.ColumnNames; + return rs.Rows.ToList(); + } + + [Fact] + public void Like_filter() + { + var rows = Query("SELECT CustomerID FROM Customers WHERE CustomerID LIKE 'W%'", out _); + Assert.Equal( + ["WANDK", "WARTH", "WELLI", "WHITC", "WILMK", "WOLZA"], + rows.Select(r => (string)r[0]!).OrderBy(s => s)); + } + + [Fact] + public void Correlated_scalar_subquery_in_select_list() + { + var rows = Query( + "SELECT c.CustomerID, (SELECT TOP 1 o.OrderDate FROM Orders AS o " + + "WHERE c.CustomerID = o.CustomerID ORDER BY o.OrderDate DESC) AS Latest " + + "FROM Customers AS c WHERE c.CustomerID = 'WILMK'", + out var columns); + + Assert.Equal(["CustomerID", "Latest"], columns); + var only = Assert.Single(rows); + Assert.Equal("WILMK", only[0]); + Assert.Equal(new DateTime(1998, 10, 2), only[1]); // Wilman Kala's most recent order + } + + [Fact] + public void Correlated_aggregate_subquery_with_round_and_iif() + { + // Per order (< 10300), SUM of ROUND(UnitPrice^2, 2) over its details; 0.0 when none. + const string sql = """ + SELECT `o`.`OrderID`, ( + SELECT IIF(SUM(ROUND(`o0`.`UnitPrice` * `o0`.`UnitPrice`, 2)) IS NULL, 0.0, SUM(ROUND(`o0`.`UnitPrice` * `o0`.`UnitPrice`, 2))) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `Sum` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + """; + + var rows = Query(sql, out var columns); + Assert.Equal(["OrderID", "Sum"], columns); + Assert.Equal(52, rows.Count); // orders 10248..10299 + + // Independent cross-check straight from Order Details. + using var db = JetDatabase.Open(Northwind); + var details = db.OpenTable("Order Details"); + int oid = details.Definition.Columns.Single(c => c.Name == "OrderID").Index; + int price = details.Definition.Columns.Single(c => c.Name == "UnitPrice").Index; + var expected = details.Rows() + .GroupBy(r => Convert.ToInt32(r[oid])) + .ToDictionary( + g => g.Key, + g => g.Sum(r => Math.Round(Convert.ToDecimal(r[price]) * Convert.ToDecimal(r[price]), 2, MidpointRounding.ToEven))); + + foreach (var row in rows) + { + int id = Convert.ToInt32(row[0]); + decimal got = Convert.ToDecimal(row[1]); + Assert.Equal(expected.TryGetValue(id, out var sum) ? sum : 0m, got); + } + Assert.Equal(1503.08m, Convert.ToDecimal(rows.Single(r => Convert.ToInt32(r[0]) == 10248)[1])); + } + + [Fact] + public void Correlated_aggregate_subquery_with_fix_truncation() + { + // Like the ROUND test, but FIX truncates each term toward zero before summing. + const string sql = """ + SELECT `o`.`OrderID`, ( + SELECT IIF(SUM(FIX(`o0`.`UnitPrice` * `o0`.`UnitPrice`)) IS NULL, 0.0, SUM(FIX(`o0`.`UnitPrice` * `o0`.`UnitPrice`))) + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `Sum` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` < 10300 + """; + + var rows = Query(sql, out _); + Assert.Equal(52, rows.Count); + + using var db = JetDatabase.Open(Northwind); + var details = db.OpenTable("Order Details"); + int oid = details.Definition.Columns.Single(c => c.Name == "OrderID").Index; + int price = details.Definition.Columns.Single(c => c.Name == "UnitPrice").Index; + var expected = details.Rows() + .GroupBy(r => Convert.ToInt32(r[oid])) + .ToDictionary( + g => g.Key, + g => g.Sum(r => Math.Truncate(Convert.ToDecimal(r[price]) * Convert.ToDecimal(r[price])))); + + foreach (var row in rows) + Assert.Equal(expected.TryGetValue(Convert.ToInt32(row[0]), out var sum) ? sum : 0m, Convert.ToDecimal(row[1])); + Assert.Equal(1503m, Convert.ToDecimal(rows.Single(r => Convert.ToInt32(r[0]) == 10248)[1])); + } + + [Fact] + public void Exists_with_having_count_threshold() + { + // Orders whose customer has more than 30 orders, via a correlated EXISTS over a + // GROUP BY ... HAVING COUNT(*) > 30 subquery. + const string sql = """ + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE EXISTS ( + SELECT 1 + FROM `Orders` AS `o0` + GROUP BY `o0`.`CustomerID` + HAVING COUNT(*) > 30 AND (`o0`.`CustomerID` = `o`.`CustomerID` OR (`o0`.`CustomerID` IS NULL AND `o`.`CustomerID` IS NULL))) + """; + + var rows = Query(sql, out var columns); + Assert.Equal(["OrderID", "CustomerID"], columns); + + // Independent check: which customers have > 30 orders, and how many orders total. + using var db = JetDatabase.Open(Northwind); + var orders = db.OpenTable("Orders"); + int cust = orders.Definition.Columns.Single(c => c.Name == "CustomerID").Index; + var bigCustomers = orders.Rows() + .GroupBy(r => r[cust]?.ToString()) + .Where(g => g.Count() > 30) + .Select(g => g.Key) + .ToHashSet(); + + Assert.Equal(["SAVEA"], bigCustomers.OrderBy(x => x)); // only Save-a-lot Markets has > 30 + Assert.All(rows, r => Assert.Contains((string)r[1]!, bigCustomers!)); + Assert.Equal(31, rows.Count); // SAVEA's 31 orders + } + + [Fact] + public void Not_exists_finds_customers_without_orders() + { + // NOT EXISTS composes from NOT over the boolean EXISTS — the complement of the + // EXISTS case: customers with no orders at all. + const string sql = """ + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE NOT EXISTS ( + SELECT 1 FROM `Orders` AS `o` + WHERE `o`.`CustomerID` = `c`.`CustomerID`) + """; + + var rows = Query(sql, out _); + Assert.Equal(["FISSA", "PARIS"], rows.Select(r => (string)r[0]!).OrderBy(s => s)); + } + + [Fact] + public void Nested_derived_tables_with_correlation_and_like_and_left_join() + { + const string sql = """ + SELECT `c0`.`CustomerID`, `c0`.`CompanyName`, `o0`.`OrderID`, `o0`.`OrderDate` + FROM ( + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`CompanyName`, `c1`.`c` + FROM ( + SELECT `c`.`CustomerID`, `c`.`CompanyName`, ( + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'W%' + ) AS `c1` + ORDER BY `c1`.`c` DESC + ) AS `c0` + LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` + ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` + """; + + var rows = Query(sql, out var columns); + + Assert.Equal(["CustomerID", "CompanyName", "OrderID", "OrderDate"], columns); + // The W% customer with the most-recent latest order is Wilman Kala; all rows are its orders. + Assert.All(rows, r => Assert.Equal("WILMK", r[0])); + Assert.All(rows, r => Assert.Equal("Wilman Kala", r[1])); + Assert.Equal(7, rows.Count); + Assert.Contains(rows, r => (DateTime)r[3]! == new DateTime(1998, 10, 2)); + } +} diff --git a/test/LibRed.Engine.Tests/CounterSeedIncrementTests.cs b/test/LibRed.Engine.Tests/CounterSeedIncrementTests.cs new file mode 100644 index 00000000..5fe75288 --- /dev/null +++ b/test/LibRed.Engine.Tests/CounterSeedIncrementTests.cs @@ -0,0 +1,64 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// COUNTER(seed, increment): the first generated AutoNumber id is the seed, then +increment per row (verified +// vs ACE, which stores increment at TDEF 0x18 and last-value = seed-increment at 0x14). A plain COUNTER is 1/1. +public class CounterSeedIncrementTests +{ + private static (QueryEngine Engine, JetDatabase Db) Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"counter-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var db = JetDatabase.Open(path, readOnly: false); + return (new QueryEngine(db), db); + } + + [Theory] + [InlineData("COUNTER(5, 3)", 5, 8, 11)] + [InlineData("AUTOINCREMENT(100, 10)", 100, 110, 120)] + [InlineData("INTEGER IDENTITY(1000, 7)", 1000, 1007, 1014)] + [InlineData("COUNTER", 1, 2, 3)] + public void Generates_seeded_ids(string type, int a, int b, int c) + { + var (e, _) = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE C ( Id {type}, Name text(10) )"); + e.ExecuteNonQuery("INSERT INTO C (Name) VALUES ('a')"); + e.ExecuteNonQuery("INSERT INTO C (Name) VALUES ('b')"); + e.ExecuteNonQuery("INSERT INTO C (Name) VALUES ('c')"); + + int[] ids = e.ExecuteQuery("SELECT Id FROM C ORDER BY Id").Rows + .Select(r => Convert.ToInt32(r[0])).ToArray(); + Assert.Equal(new[] { a, b, c }, ids); + } + + [Fact] + public void Negative_increment_counts_down_from_the_seed() + { + var (e, db) = Fresh(); + // A signed 32-bit increment (0x18) — a negative one is a descending counter (verified vs ACE). + e.ExecuteNonQuery("CREATE TABLE C ( Id COUNTER(100, -5), Name text(10) )"); + e.ExecuteNonQuery("INSERT INTO C (Name) VALUES ('a')"); + e.ExecuteNonQuery("INSERT INTO C (Name) VALUES ('b')"); + e.ExecuteNonQuery("INSERT INTO C (Name) VALUES ('c')"); + + int[] ids = e.ExecuteQuery("SELECT Id FROM C ORDER BY Name").Rows + .Select(r => Convert.ToInt32(r[0])).ToArray(); + Assert.Equal(new[] { 100, 95, 90 }, ids); + Assert.Equal(-5, db.Catalog.UserTables.Single(t => t.Name == "C").Columns.Single(c => c.Name == "Id").Increment); + } + + [Fact] + public void Seed_and_increment_round_trip_through_the_catalog() + { + var (e, db) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE C ( Id COUNTER(42, 5), Name text(10) )"); + + var col = db.Catalog.UserTables.Single(t => t.Name == "C").Columns.Single(c => c.Name == "Id"); + Assert.True(col.IsAutoNumber); + Assert.Equal(42, col.Seed); + Assert.Equal(5, col.Increment); + } +} diff --git a/test/LibRed.Engine.Tests/CreateIndexTests.cs b/test/LibRed.Engine.Tests/CreateIndexTests.cs new file mode 100644 index 00000000..8ac7c07c --- /dev/null +++ b/test/LibRed.Engine.Tests/CreateIndexTests.cs @@ -0,0 +1,151 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class CreateIndexTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"cidx-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static void Table(QueryEngine e) => + e.ExecuteNonQuery("CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `Name` VARCHAR(50), `Age` INTEGER)"); + + [Fact] + public void Create_index_round_trips_and_inserts_maintain_it() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + Table(e); + e.ExecuteNonQuery("CREATE INDEX `IX_Name` ON `T` (`Name`)"); + e.ExecuteNonQuery("CREATE UNIQUE INDEX `UX_Age` ON `T` (`Age`)"); + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Name`, `Age`) VALUES (1, 'a', 30)"); + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Name`, `Age`) VALUES (2, 'b', 40)"); + } + using (var db = JetDatabase.Open(path)) + { + var t = db.Catalog.FindTable("T")!; + Assert.Contains(t.Indexes, ix => ix.Name == "IX_Name" && !ix.IsUnique && !ix.IsPrimaryKey + && ix.Columns.Select(c => c.Column.Name).SequenceEqual(["Name"])); + Assert.Contains(t.Indexes, ix => ix.Name == "UX_Age" && ix.IsUnique && !ix.IsPrimaryKey + && ix.Columns.Select(c => c.Column.Name).SequenceEqual(["Age"])); + Assert.Equal(2, new QueryEngine(db).ExecuteQuery("SELECT `Id` FROM `T`").Rows.Count()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Create_index_multi_column_and_with_primary() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE `T` (`A` INTEGER, `B` INTEGER, `C` INTEGER)"); + e.ExecuteNonQuery("CREATE INDEX `IX_AB` ON `T` (`A`, `B`)"); + e.ExecuteNonQuery("CREATE INDEX `PK_T` ON `T` (`C`) WITH PRIMARY"); + } + using (var db = JetDatabase.Open(path)) + { + var t = db.Catalog.FindTable("T")!; + Assert.Contains(t.Indexes, ix => ix.Name == "IX_AB" + && ix.Columns.Select(c => c.Column.Name).SequenceEqual(["A", "B"])); + Assert.Contains(t.Indexes, ix => ix.Name == "PK_T" && ix.IsPrimaryKey && ix.IsUnique); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // WITH IGNORE NULL: the index is created (flag 0x02, reader exposes IgnoreNulls), and a row whose + // indexed column is null is excluded from the index — the insert still succeeds. + [Fact] + public void With_ignore_null_creates_sparse_index_and_skips_null_rows() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + Table(e); + e.ExecuteNonQuery("CREATE INDEX `IX_Age` ON `T` (`Age`) WITH IGNORE NULL"); + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Name`, `Age`) VALUES (1, 'a', 30)"); // indexed + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Name`, `Age`) VALUES (2, 'b', NULL)"); // excluded + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Name`, `Age`) VALUES (3, 'c', 40)"); // indexed + } + using (var db = JetDatabase.Open(path)) + { + var ix = db.Catalog.FindTable("T")!.Indexes.Single(x => x.Name == "IX_Age"); + Assert.True(ix.IgnoreNulls); + // All rows are still in the table (the null one is just absent from the index). + Assert.Equal(3, new QueryEngine(db).ExecuteQuery("SELECT `Id` FROM `T`").Rows.Count()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A descending index: the index-data block records the column as descending (Ascending = false), + // and inserts encode reversed key bytes (IndexKeyEncoder handles the inversion). + [Fact] + public void Descending_index_records_direction_and_inserts() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + Table(e); + e.ExecuteNonQuery("CREATE INDEX `IX_AgeDesc` ON `T` (`Age` DESC)"); + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Name`, `Age`) VALUES (1, 'a', 30)"); + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Name`, `Age`) VALUES (2, 'b', 40)"); + } + using (var db = JetDatabase.Open(path)) + { + var ix = db.Catalog.FindTable("T")!.Indexes.Single(x => x.Name == "IX_AgeDesc"); + var (col, ascending) = ix.Columns.Single(); + Assert.Equal("Age", col.Name); + Assert.False(ascending); // recorded as descending + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // CREATE INDEX on a populated table back-fills the new index over the existing rows. + [Fact] + public void Create_index_on_non_empty_table_backfills() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + Table(e); + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Name`, `Age`) VALUES (1, 'a', 30)"); + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Name`, `Age`) VALUES (2, 'b', 40)"); + e.ExecuteNonQuery("CREATE INDEX `IX_Name` ON `T` (`Name`)"); // no throw + } + + using (var db = JetDatabase.Open(path)) + { + var e = new QueryEngine(db); + Assert.Equal(2, e.ExecuteQuery("SELECT * FROM `T`").Rows.Count()); // rows intact + Assert.Equal(1, e.ExecuteQuery("SELECT `Id` FROM `T` WHERE `Name` = 'b'").Rows.Count()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/CreateProcedureTests.cs b/test/LibRed.Engine.Tests/CreateProcedureTests.cs new file mode 100644 index 00000000..d756b36d --- /dev/null +++ b/test/LibRed.Engine.Tests/CreateProcedureTests.cs @@ -0,0 +1,232 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class CreateProcedureTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"proc-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // A CREATE PROCEDURE with declared parameters (no parens; Access syntax) parses and executes, storing a + // parameterized query the same way a view is stored plus a parameter row per declared parameter. + [Fact] + public void Create_procedure_with_parameters_executes() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + new QueryEngine(db).ExecuteNonQuery( + "CREATE PROCEDURE `Orders in range` " + + "`Beginning Date` DateTime, `Ending Date` DateTime AS " + + "SELECT Orders.OrderID FROM Orders " + + "WHERE Orders.OrderDate BETWEEN `Beginning Date` AND `Ending Date`"); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A stored parameterized query is read back (PARAMETERS clause + body) and executed through LibRed's + // own engine when parameter values are supplied — matching the same date filter run directly on Orders. + [Fact] + public void Parameterized_procedure_reads_back_and_executes() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery( + "CREATE PROCEDURE `Orders in range` " + + "`Beginning Date` DateTime, `Ending Date` DateTime AS " + + "SELECT Orders.OrderID FROM Orders " + + "WHERE Orders.OrderDate BETWEEN `Beginning Date` AND `Ending Date`"); + + using (var db = JetDatabase.Open(path)) // fresh open: the procedure is read from the file + { + var e = new QueryEngine(db); + var args = new Dictionary + { + ["Beginning Date"] = new DateTime(1997, 1, 1), + ["Ending Date"] = new DateTime(1997, 12, 31), + }; + int viaProc = e.ExecuteQuery("SELECT OrderID FROM `Orders in range`", args).Rows.Count(); + int direct = e.ExecuteQuery( + "SELECT OrderID FROM Orders WHERE OrderDate BETWEEN #1/1/1997# AND #12/31/1997#").Rows.Count(); + Assert.True(direct > 0); + Assert.Equal(direct, viaProc); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Read back ACE's OWN stored "Ten Most Expensive Products" (TOP 10 + ORDER BY DESC, shipped in Northwind) + // and execute it through LibRed's engine — 10 rows, price-descending. Exercises TOP (an AttrFlag row) and + // ORDER BY (AttrOrderBy rows) reconstruction against a real Access-written query. + [Fact] + public void Read_back_northwinds_top_order_by_procedure() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var rows = new QueryEngine(db) + .ExecuteQuery("SELECT * FROM `Ten Most Expensive Products`").Rows.ToList(); + Assert.Equal(10, rows.Count); + var prices = rows.Select(r => Convert.ToDecimal(r[1])).ToList(); + Assert.Equal(prices.OrderByDescending(p => p).ToList(), prices); // descending + Assert.Equal(263.50m, prices[0]); // Côte de Blaye, Northwind's priciest + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Round-trip a LibRed-created TOP + ORDER BY procedure (under a non-colliding name). + [Fact] + public void Top_and_order_by_procedure_round_trips() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery( + "CREATE PROCEDURE `Priciest Ten` AS " + + "SELECT TOP 10 Products.ProductName, Products.UnitPrice " + + "FROM Products ORDER BY Products.UnitPrice DESC"); + + using (var db = JetDatabase.Open(path)) + { + var prices = new QueryEngine(db) + .ExecuteQuery("SELECT * FROM `Priciest Ten`").Rows.Select(r => Convert.ToDecimal(r[1])).ToList(); + Assert.Equal(10, prices.Count); + Assert.Equal(prices.OrderByDescending(p => p).ToList(), prices); + Assert.Equal(263.50m, prices[0]); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Parenthesised @-parameter list + a nested paren-join onto a view ("Employee Sales by Country" shape). + // The @-params are stored bare (no @), the body keeps @refs, and it reads back and executes with values. + [Fact] + public void Parenthesised_at_parameter_procedure_reads_back_and_executes() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery( + "CREATE PROCEDURE `Emp Sales Test` " + + "(@Beginning_Date DateTime, @Ending_Date DateTime) AS " + + "SELECT Employees.Country, Orders.OrderID, `Order Subtotals`.Subtotal AS SaleAmount " + + "FROM Employees INNER JOIN " + + "(Orders INNER JOIN `Order Subtotals` ON Orders.OrderID = `Order Subtotals`.OrderID) " + + "ON Employees.EmployeeID = Orders.EmployeeID " + + "WHERE Orders.ShippedDate BETWEEN @Beginning_Date AND @Ending_Date"); + + using (var db = JetDatabase.Open(path)) // fresh open: read from the file + { + var e = new QueryEngine(db); + var args = new Dictionary + { + ["Beginning_Date"] = new DateTime(1997, 1, 1), + ["Ending_Date"] = new DateTime(1997, 12, 31), + }; + int viaProc = e.ExecuteQuery("SELECT * FROM `Emp Sales Test`", args).Rows.Count(); + int direct = e.ExecuteQuery( + "SELECT Orders.OrderID FROM Employees INNER JOIN " + + "(Orders INNER JOIN `Order Subtotals` ON Orders.OrderID = `Order Subtotals`.OrderID) " + + "ON Employees.EmployeeID = Orders.EmployeeID " + + "WHERE Orders.ShippedDate BETWEEN #1/1/1997# AND #12/31/1997#").Rows.Count(); + Assert.True(direct > 0); + Assert.Equal(direct, viaProc); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Action-query procedure bodies we support (CREATE TABLE, INSERT ... VALUES) parse and store. + [Theory] + [InlineData("CREATE PROCEDURE `MakeT` AS CREATE TABLE ZZT (Id LONG, Nm TEXT(50))")] + [InlineData("CREATE PROCEDURE `AddShip` AS INSERT INTO Shippers (CompanyName) VALUES ('ZZ Co')")] + public void Action_query_procedure_body_is_stored(string sql) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + new QueryEngine(db).ExecuteNonQuery(sql); // no throw + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Stored action queries are read back from the file and executed through LibRed's own engine by name: + // the make-table creates the table, the append inserts the row. + [Fact] + public void Action_queries_read_back_and_execute_through_libred() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE PROCEDURE MakeZ AS CREATE TABLE ZZLib (Id LONG, Nm TEXT(50))"); + e.ExecuteNonQuery( + "CREATE PROCEDURE AddShip AS " + + "INSERT INTO Shippers (CompanyName, Phone) VALUES ('LibRed Co', '555-0100')"); + } + + using (var db = JetDatabase.Open(path, readOnly: false)) // fresh open: read from the file + { + var e = new QueryEngine(db); + + e.ExecuteStoredActionQuery("MakeZ"); // reconstructed CREATE TABLE + Assert.Equal(0, e.ExecuteQuery("SELECT * FROM ZZLib").Rows.Count()); // table now exists, empty + + int before = e.ExecuteQuery("SELECT * FROM Shippers").Rows.Count(); + e.ExecuteStoredActionQuery("AddShip"); // reconstructed INSERT ... VALUES + Assert.Equal(before + 1, e.ExecuteQuery("SELECT * FROM Shippers").Rows.Count()); + Assert.Equal("555-0100", e.ExecuteQuery( + "SELECT Phone FROM Shippers WHERE CompanyName = 'LibRed Co'").Rows.First()[0]); + + Assert.Throws(() => e.ExecuteStoredActionQuery("NoSuchQuery")); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Bodies we don't support: UPDATE/DELETE/DROP have no grammar; an INSERT without a column list can't be + // stored as an append query. Each is rejected. + [Theory] + [InlineData("CREATE PROCEDURE `DelCust` AS DELETE FROM Customers")] + [InlineData("CREATE PROCEDURE `UpdCust` AS UPDATE Customers SET City = 'X'")] + [InlineData("CREATE PROCEDURE `AddNoCols` AS INSERT INTO Shippers VALUES ('ZZ Co')")] + public void Unsupported_procedure_body_is_rejected(string sql) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + Assert.ThrowsAny(() => new QueryEngine(db).ExecuteNonQuery(sql)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A procedure name, like a view, cannot collide with an existing table. + [Fact] + public void Procedure_name_colliding_with_an_object_throws() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + Assert.Throws(() => + new QueryEngine(db).ExecuteNonQuery("CREATE PROCEDURE `Customers` AS SELECT `CustomerID` FROM `Customers`")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/CreateTableDefaultTests.cs b/test/LibRed.Engine.Tests/CreateTableDefaultTests.cs new file mode 100644 index 00000000..3432e34f --- /dev/null +++ b/test/LibRed.Engine.Tests/CreateTableDefaultTests.cs @@ -0,0 +1,218 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class CreateTableDefaultTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"def-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // EF Core emits column DEFAULT values (which the ACE CREATE TABLE grammar accepts as a field + // attribute). We parse every common form so the statement no longer fails; the table is created and + // usable (defaults are captured but not yet persisted — EF supplies values on its own inserts). + [Theory] + [InlineData("`N` INTEGER DEFAULT 0")] + [InlineData("`N` INTEGER DEFAULT -1")] + [InlineData("`N` INTEGER DEFAULT 0 NOT NULL")] // DEFAULT before NOT NULL + [InlineData("`N` INTEGER NOT NULL DEFAULT 5")] // and after + [InlineData("`S` VARCHAR(20) DEFAULT 'hi'")] + [InlineData("`B` SMALLINT DEFAULT TRUE")] + [InlineData("`D` DOUBLE DEFAULT 3.14")] + public void Column_default_parses_and_table_is_created(string columnDdl) + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery($"CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, {columnDdl})"); + using (var db = JetDatabase.Open(path)) + Assert.NotNull(db.Catalog.FindTable("T")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A DEFAULT is persisted to the table's LvProp property blob, read back onto the column, and applied + // when an insert omits the column (EF Core relies on the store default rather than supplying a value). + [Fact] + public void Default_persists_reads_back_and_applies_on_insert() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery( + "CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `Age` INTEGER DEFAULT 42, `Nm` VARCHAR(20) DEFAULT 'hi')"); + + // Reopen: the defaults are read back onto the columns. + using (var db = JetDatabase.Open(path)) + { + var t = db.Catalog.FindTable("T")!; + Assert.Equal("42", t.FindColumn("Age")!.DefaultValue); + Assert.Equal("'hi'", t.FindColumn("Nm")!.DefaultValue); + Assert.Null(t.FindColumn("Id")!.DefaultValue); + } + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("INSERT INTO `T` (`Id`) VALUES (1)"); // omits Age, Nm → defaults + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Age`) VALUES (2, 99)"); // Age explicit, Nm default + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Nm`) VALUES (3, NULL)"); // explicit NULL stays NULL + + var r1 = e.ExecuteQuery("SELECT `Age`, `Nm` FROM `T` WHERE `Id` = 1").Rows.Single(); + Assert.Equal(42, Convert.ToInt32(r1[0])); + Assert.Equal("hi", r1[1]); + + var r2 = e.ExecuteQuery("SELECT `Age`, `Nm` FROM `T` WHERE `Id` = 2").Rows.Single(); + Assert.Equal(99, Convert.ToInt32(r2[0])); + Assert.Equal("hi", r2[1]); + + var r3 = e.ExecuteQuery("SELECT `Nm` FROM `T` WHERE `Id` = 3").Rows.Single(); + Assert.Null(r3[0]); // explicit NULL, not the default + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // `INSERT INTO t DEFAULT VALUES` (EF emits it for an all-store-generated/all-default row): one row is + // inserted where the AutoNumber is assigned, DEFAULT columns take their default, and the rest are NULL. + [Fact] + public void Insert_default_values_inserts_one_all_defaults_row() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery( + "CREATE TABLE `Offers` (`Id` counter PRIMARY KEY, `Kind` VARCHAR(20) DEFAULT 'std', `Note` VARCHAR(20))"); + + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO `Offers` DEFAULT VALUES")); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO `Offers` DEFAULT VALUES")); // second row → next AutoNumber + + var rows = e.ExecuteQuery("SELECT `Id`, `Kind`, `Note` FROM `Offers`").Rows.ToList(); + Assert.Equal(2, rows.Count); + Assert.Equal([1, 2], rows.Select(r => Convert.ToInt32(r[0])).OrderBy(x => x).ToArray()); + Assert.All(rows, r => Assert.Equal("std", r[1])); // DEFAULT applied + Assert.All(rows, r => Assert.Null(r[2])); // no default → NULL + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A NOT NULL column with no default that an insert leaves unset is rejected — matching Access + // ("You must enter a value in the 'T.Req' field."), for both an explicit insert and DEFAULT VALUES. + [Fact] + public void Insert_leaving_a_required_column_null_throws() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE `T` (`Id` counter PRIMARY KEY, `Req` int NOT NULL, `Opt` int)"); + + // Omit the required column. + var ex = Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO `T` (`Opt`) VALUES (5)")); + Assert.Contains("T.Req", ex.Message); + // Explicit NULL into the required column is likewise rejected. + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO `T` (`Req`) VALUES (NULL)")); + // DEFAULT VALUES can't satisfy a required, default-less column either. + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO `T` DEFAULT VALUES")); + + // Providing the value succeeds. + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO `T` (`Req`) VALUES (7)")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Update_setting_a_required_column_null_throws_without_mutating_the_row() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE `T` (`Id` int PRIMARY KEY, `Req` varchar(20) NOT NULL)"); + e.ExecuteNonQuery("INSERT INTO `T` (`Id`, `Req`) VALUES (1, 'kept')"); + + var ex = Assert.Throws(() => + e.ExecuteNonQuery("UPDATE `T` SET `Req` = NULL WHERE `Id` = 1")); + + Assert.Contains("T.Req", ex.Message); + Assert.Equal("kept", e.ExecuteQuery("SELECT `Req` FROM `T` WHERE `Id` = 1").Rows.Single()[0]); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // DEFAULT VALUES succeeds when every required column is covered by a DEFAULT (or is the AutoNumber). + [Fact] + public void Insert_default_values_succeeds_when_required_columns_have_defaults() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE `T` (`Id` counter PRIMARY KEY, `Kind` int DEFAULT 3 NOT NULL)"); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO `T` DEFAULT VALUES")); + Assert.Equal(3, Convert.ToInt32(e.ExecuteQuery("SELECT `Kind` FROM `T`").Rows.Single()[0])); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Creating a table whose name already exists (case-insensitively) is rejected, rather than writing a + // second MSysObjects row that shadows the existing table. + [Fact] + public void Duplicate_table_name_throws() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE `Widget` (`Id` INTEGER PRIMARY KEY)"); + var ex = Assert.Throws(() => + e.ExecuteNonQuery("CREATE TABLE `widget` (`Id` INTEGER PRIMARY KEY)")); // different case + Assert.Contains("already exists", ex.Message); + // An existing Northwind table is also protected. + Assert.Throws(() => + e.ExecuteNonQuery("CREATE TABLE `Shippers` (`Id` INTEGER PRIMARY KEY)")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Temporary_table_throws_not_supported() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var ex = Assert.Throws(() => + new QueryEngine(db).ExecuteNonQuery("CREATE TEMPORARY TABLE `T` (`Id` INTEGER)")); + Assert.Contains("TEMPORARY", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void With_compression_throws_not_supported() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var ex = Assert.Throws(() => + new QueryEngine(db).ExecuteNonQuery("CREATE TABLE `T` (`S` VARCHAR(20) WITH COMPRESSION)")); + Assert.Contains("COMPRESSION", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/CreateViewTests.cs b/test/LibRed.Engine.Tests/CreateViewTests.cs new file mode 100644 index 00000000..ba14ac1a --- /dev/null +++ b/test/LibRed.Engine.Tests/CreateViewTests.cs @@ -0,0 +1,116 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class CreateViewTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"view-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + [Fact] + public void Create_view_executes() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE VIEW `LondonCust` AS SELECT `CustomerID`, `CompanyName` FROM `Customers` WHERE `City` = 'London'"); + e.ExecuteNonQuery("CREATE VIEW `CustOrders` AS SELECT `c`.`CustomerID`, `o`.`OrderID` FROM `Customers` AS `c` INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`"); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A view is read back from the file (its MSysQueries rows), reconstructed to SQL, and resolved as a + // derived table when queried through LibRed's own engine. + [Fact] + public void View_is_queryable_through_libred() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE VIEW `LondonCust` AS SELECT `CustomerID`, `CompanyName` FROM `Customers` WHERE `City` = 'London'"); + e.ExecuteNonQuery("CREATE VIEW `CustOrders` AS SELECT `c`.`CustomerID`, `o`.`OrderID` FROM `Customers` AS `c` INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`"); + } + using (var db = JetDatabase.Open(path)) // fresh open: the view is read from the file + { + var e = new QueryEngine(db); + + var viaView = e.ExecuteQuery("SELECT `CustomerID` FROM `LondonCust`").Rows.Select(r => r[0]).OrderBy(x => x).ToList(); + var viaTable = e.ExecuteQuery("SELECT `CustomerID` FROM `Customers` WHERE `City` = 'London'").Rows.Select(r => r[0]).OrderBy(x => x).ToList(); + Assert.NotEmpty(viaView); + Assert.Equal(viaTable, viaView); + + // A predicate applied on top of the view. + int filtered = e.ExecuteQuery("SELECT `CustomerID` FROM `LondonCust` WHERE `CustomerID` = 'AROUT'").Rows.Count(); + Assert.Equal(1, filtered); + + // The join view runs and returns the same count as the underlying join. + int viaJoinView = e.ExecuteQuery("SELECT `CustomerID` FROM `CustOrders`").Rows.Count(); + int viaJoin = e.ExecuteQuery("SELECT `c`.`CustomerID` FROM `Customers` AS `c` INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`").Rows.Count(); + Assert.Equal(viaJoin, viaJoinView); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Theory] + [InlineData("CREATE VIEW `V` AS SELECT `Country`, COUNT(*) FROM `Customers` GROUP BY `Country` HAVING COUNT(*) > 1", "HAVING")] + public void Non_simple_view_throws(string sql, string expected) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var ex = Assert.Throws(() => new QueryEngine(db).ExecuteNonQuery(sql)); + Assert.Contains(expected, ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void A_group_by_totals_view_round_trips() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery( + "CREATE VIEW `Subtotals` AS SELECT `Order Details`.OrderID, " + + "Sum(CCur(`Order Details`.UnitPrice*Quantity*(1-Discount)/100)*100) AS Subtotal " + + "FROM `Order Details` GROUP BY `Order Details`.OrderID"); + + using (var db = JetDatabase.Open(path)) + { + var e = new QueryEngine(db); + Assert.Equal(830, e.ExecuteQuery("SELECT * FROM `Subtotals`").Rows.Count()); // one row per order + Assert.Equal(440.00m, Convert.ToDecimal( + e.ExecuteQuery("SELECT Subtotal FROM `Subtotals` WHERE OrderID = 10248").Rows.First()[0])); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void View_name_colliding_with_an_object_throws() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + // Northwind already has a Customers table. + Assert.Throws(() => + new QueryEngine(db).ExecuteNonQuery("CREATE VIEW `Customers` AS SELECT `CustomerID` FROM `Customers`")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/DateArithmeticTests.cs b/test/LibRed.Engine.Tests/DateArithmeticTests.cs new file mode 100644 index 00000000..88562922 --- /dev/null +++ b/test/LibRed.Engine.Tests/DateArithmeticTests.cs @@ -0,0 +1,41 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Date/time arithmetic on the OLE Automation serial (days since 1899-12-30, fractional part = time), verified +// vs ACE: date+time and date±N days yield a DateTime; date−date yields a plain day count. +public class DateArithmeticTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"datearith-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + private static object? Scalar(string expr) => + Fresh().ExecuteQuery($"SELECT TOP 1 ({expr}) AS V FROM Shippers").Rows.First()[0]; + + [Fact] + public void Date_plus_time_combines_into_a_datetime() + => Assert.Equal(new DateTime(2020, 1, 1, 21, 5, 19), + Scalar("DateSerial(2020, 1, 1) + TimeSerial(21, 5, 19)")); + + [Fact] + public void Date_minus_date_is_a_day_count() + => Assert.Equal(1.0, Convert.ToDouble(Scalar("#2020-01-02# - #2020-01-01#"))); + + [Fact] + public void Date_plus_and_minus_whole_days_shifts_the_date() + { + Assert.Equal(new DateTime(2020, 1, 2), Scalar("#2020-01-01# + 1")); + Assert.Equal(new DateTime(2019, 12, 31), Scalar("#2020-01-01# - 1")); + } + + [Fact] + public void Time_plus_time_adds_on_the_epoch_date() + => Assert.Equal(new DateTime(1899, 12, 30, 3, 0, 0), + Scalar("TimeSerial(1, 0, 0) + TimeSerial(2, 0, 0)")); +} diff --git a/test/LibRed.Engine.Tests/DateTimeDefaultTests.cs b/test/LibRed.Engine.Tests/DateTimeDefaultTests.cs new file mode 100644 index 00000000..6497594e --- /dev/null +++ b/test/LibRed.Engine.Tests/DateTimeDefaultTests.cs @@ -0,0 +1,161 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// DATETIME column defaults that call Access's date/time functions. Semantics verified against ACE: +// NOW() / bare Now → current timestamp (date + time) +// Date() → today at midnight (date only) +// Time() → current time on the Jet epoch 1899-12-30 (time only) +// Bare Date / Time are NOT niladic in Jet SQL (they are reserved type keywords — ACE rejects them; they need +// parentheses), so only Now is recognised without parentheses. +public class DateTimeDefaultTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"dtdef-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + private static DateTime InsertAndRead(string def) + { + var e = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE T ( K LONG PRIMARY KEY, V DATETIME DEFAULT {def} )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return Convert.ToDateTime(e.ExecuteQuery("SELECT V FROM T").Rows.Single()[0]); + } + + [Theory] + [InlineData("NOW()")] + [InlineData("Now")] // niladic, no parentheses — the one bare form ACE accepts + public void Now_default_is_the_current_timestamp(string def) + { + DateTime before = DateTime.Now.AddSeconds(-5); + DateTime v = InsertAndRead(def); + DateTime after = DateTime.Now.AddSeconds(5); + Assert.InRange(v, before, after); + Assert.NotEqual(v.Date, default); + Assert.True(v.TimeOfDay > TimeSpan.Zero, "NOW() should carry a time component"); + } + + [Fact] + public void Date_default_is_today_at_midnight() + { + DateTime v = InsertAndRead("Date()"); + Assert.Equal(DateTime.Today, v); + Assert.Equal(TimeSpan.Zero, v.TimeOfDay); + } + + [Fact] + public void Time_default_is_the_current_time_on_the_jet_epoch() + { + DateTime v = InsertAndRead("Time()"); + Assert.Equal(new DateTime(1899, 12, 30), v.Date); // time-only → the Jet epoch date + // Within 2 minutes of now, tolerant of the midnight wrap (23:59 + 2min → 00:01). + double minutesApart = Math.Abs((v.TimeOfDay - DateTime.Now.TimeOfDay).TotalMinutes); + Assert.True(minutesApart < 2 || minutesApart > 24 * 60 - 2, $"Time() was {v.TimeOfDay}, now {DateTime.Now.TimeOfDay}"); + } + + // A Jet default is a per-row expression, so a compound one works too — LibRed's SQL front-end + evaluator + // handle string concat (&), literal arithmetic and nested calls, which ACE's OLE DB DDL parser (but not its + // read-time expression service) rejects. These are the same expressions AceCompoundDefaultTests round-trips + // through ACE. + [Theory] + [InlineData("TEXT(20)", "\"INV-\" & Year(Now())", "INV-2026")] + [InlineData("TEXT(20)", "'INV-' & Year(Now())", "INV-2026")] + [InlineData("TEXT(20)", "UCase('hi')", "HI")] + [InlineData("LONG", "1 + 2", "3")] + [InlineData("LONG", "Year(Now())", "2026")] + // Parenthesised forms too — ACE's DDL parser does NOT treat parentheses as an "expression escape" the way + // SQL Server does (it still rejects (1+2), (Year(Now())), etc.), but LibRed's general expression grammar + // accepts them uniformly. + [InlineData("LONG", "(1 + 2)", "3")] + [InlineData("TEXT(20)", "(\"INV-\" & Year(Now()))", "INV-2026")] + public void Compound_expression_defaults_are_evaluated(string type, string def, string expected) + { + var e = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE T ( K LONG PRIMARY KEY, V {type} DEFAULT {def} )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + object? v = e.ExecuteQuery("SELECT V FROM T").Rows.Single()[0]; + + string want = expected.Replace("2026", DateTime.Now.Year.ToString()); + Assert.Equal(want, Convert.ToString(v, System.Globalization.CultureInfo.InvariantCulture)); + } + + // A default cannot reference another column — but only a BRACKETED [A] is a column reference (rejected). A + // bare word is a literal string (see the bare-word tests), so it never resolves to a column. Verified vs ACE: + // DEFAULT [A] → "does not recognize the field 'A' ... or the default value". + [Fact] + public void A_bracketed_default_cannot_reference_another_column() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, A LONG, B LONG DEFAULT [A] )"); + var ex = Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO T (K, A) VALUES (1, 5)")); + Assert.Contains("'A' was not found", ex.Message); + } + + // An unquoted single word in a DEFAULT is a LITERAL STRING (verified vs ACE), never a column reference — + // DEFAULT Unknown → "Unknown", and DEFAULT K → "K" even when K is a column. The niladic Now is the exception. + [Theory] + [InlineData("Unknown", "Unknown")] + [InlineData("K", "K")] // a bare word matching a column is still the literal word + [InlineData("hello", "hello")] + public void A_bare_word_default_is_a_literal_string(string bareDefault, string expected) + { + var e = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE T ( K LONG PRIMARY KEY, V TEXT(50) DEFAULT {bareDefault} )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + Assert.Equal(expected, e.ExecuteQuery("SELECT V FROM T WHERE K = 1").Rows.Single()[0]); + } + + // A multi-word bare default is a syntax error (matching ACE), rejected at CREATE. + [Fact] + public void A_multi_word_bare_default_is_a_syntax_error() + { + var e = Fresh(); + Assert.ThrowsAny(() => + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, V TEXT(50) DEFAULT this is the default string )")); + } + + // Aggregate functions (SQL Sum/Count or domain DCount) are not allowed in a default — ACE rejects them as + // "Unknown function ... in ... default value" (the default evaluator has a restricted function whitelist). + // LibRed matches by rejecting them: it has no aggregate/DCount case for a scalar (non-grouped) evaluation. + [Theory] + [InlineData("Sum(1)")] + [InlineData("Count(1)")] + [InlineData("DCount('*', 'MSysObjects')")] + public void An_aggregate_function_in_a_default_is_rejected(string def) + { + var e = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE T ( K LONG PRIMARY KEY, V LONG DEFAULT {def} )"); + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)")); + } + + // A default cannot reference a table/query (subquery) — ACE forbids "references to queries". LibRed rejects + // it too: the default-expression sub-parser doesn't accept a full SELECT. + [Theory] + [InlineData("(SELECT MAX(X) FROM Other)")] + [InlineData("(SELECT COUNT(*) FROM Other)")] + public void A_default_cannot_reference_a_table_or_query(string def) + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE Other ( X LONG PRIMARY KEY )"); + e.ExecuteNonQuery($"CREATE TABLE T ( K LONG PRIMARY KEY, V LONG DEFAULT {def} )"); + // Rejected when the default is applied (its text is parsed lazily at insert) — a subquery is never a + // valid default expression. + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)")); + } + + [Fact] + public void A_real_column_named_Now_still_wins_over_the_function() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, [Now] LONG )"); + e.ExecuteNonQuery("INSERT INTO T (K, [Now]) VALUES (1, 42)"); + // The identifier resolves to the column, not the niladic Now function. + int now = e.ExecuteQuery("SELECT [Now] FROM T").Rows.Single()[0] is { } v ? Convert.ToInt32(v) : -1; + Assert.Equal(42, now); + } +} diff --git a/test/LibRed.Engine.Tests/DdlDmlTests.cs b/test/LibRed.Engine.Tests/DdlDmlTests.cs new file mode 100644 index 00000000..c0b01579 --- /dev/null +++ b/test/LibRed.Engine.Tests/DdlDmlTests.cs @@ -0,0 +1,310 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class DdlDmlTests +{ + private static string CopyToTemp() + { + string path = Path.Combine(Path.GetTempPath(), $"libred-ddl-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // BIGINT (Large Number) and DATETIME2 (Date/Time Extended) were added in DIFFERENT format versions: + // BIGINT needs Access 2016 (ACE 16, version 0x05), DATETIME2 needs Access 2019+ (ACE 17, 0x06) — verified + // against files authored with each feature. On an older format (Northwind is ACE 12 / Access 2007) LibRed + // must refuse to create a column to either, rather than write a file the real Access engine couldn't open. + [Theory] + [InlineData("CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `V` BIGINT)", "Access 2016")] + [InlineData("CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `V` DATETIME2)", "Access 2019")] + public void Bigint_and_datetime2_are_rejected_when_creating_on_a_pre_2016_format(string sql, string expectedVersionInMessage) + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var ex = Assert.Throws(() => new QueryEngine(db).ExecuteNonQuery(sql)); + Assert.Contains(expectedVersionInMessage, ex.Message); + } + finally { File.Delete(path); } + } + + [Fact] + public void Altering_a_column_to_bigint_is_rejected_on_a_pre_2016_format() + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE `T` (`Id` INTEGER PRIMARY KEY, `V` INTEGER)"); + var ex = Assert.Throws(() => e.ExecuteNonQuery("ALTER TABLE `T` ALTER COLUMN `V` BIGINT")); + Assert.Contains("Access 2016", ex.Message); + } + finally { File.Delete(path); } + } + + [Fact] + public void Memo_column_round_trips_including_null_and_a_long_value() + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + engine.ExecuteNonQuery("CREATE TABLE `M` (`Id` INTEGER PRIMARY KEY, `Note` LONGCHAR NULL)"); + engine.ExecuteNonQuery("INSERT INTO `M` (`Id`, `Note`) VALUES (1, 'hello memo world')"); + engine.ExecuteNonQuery("INSERT INTO `M` (`Id`, `Note`) VALUES (2, NULL)"); + string longText = new string('x', 500); // still inline (fits the page), exercises >255 + engine.ExecuteNonQuery($"INSERT INTO `M` (`Id`, `Note`) VALUES (3, '{longText}')"); + + var rows = engine.ExecuteQuery("SELECT `Id`, `Note` FROM `M` ORDER BY `Id`").Rows.ToList(); + Assert.Equal("hello memo world", rows[0][1]); + Assert.Null(rows[1][1]); + Assert.Equal(longText, rows[2][1]); + } + finally { File.Delete(path); } + } + + [Fact] + public void Ef_generated_create_table_shape_parses_and_round_trips() + { + // The exact shape EF Core's Jet migrations generator emits: backtick identifiers, an explicit + // NULL / NOT NULL nullability marker per column, and a named table-level PRIMARY KEY. + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + engine.ExecuteNonQuery( + "CREATE TABLE `Widgets` (\n" + + " `Id` integer NOT NULL,\n" + + " `Name` varchar(255) NULL,\n" + + " CONSTRAINT `PK_Widgets` PRIMARY KEY (`Id`)\n" + + ")"); + Assert.Equal(1, engine.ExecuteNonQuery("INSERT INTO `Widgets` (`Id`, `Name`) VALUES (1, 'a')")); + + var rows = engine.ExecuteQuery("SELECT `Id`, `Name` FROM `Widgets`").Rows.ToList(); + Assert.Single(rows); + Assert.Equal(1, Convert.ToInt32(rows[0][0])); + Assert.Equal("a", rows[0][1]); + + var pk = Assert.Single(db.Catalog.FindTable("Widgets")!.Indexes, i => i.IsPrimaryKey); + Assert.Equal(["Id"], pk.Columns.Select(c => c.Column.Name)); + } + finally { File.Delete(path); } + } + + [Fact] + public void Statements_with_a_trailing_semicolon_parse() + { + // EF Core terminates each statement with ';'. The grammar accepts an optional trailing one. + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + engine.ExecuteNonQuery("CREATE TABLE `S` (`Id` INTEGER PRIMARY KEY, `N` TEXT(10));"); + Assert.Equal(1, engine.ExecuteNonQuery("INSERT INTO `S` (`Id`, `N`) VALUES (1, 'a');")); + + var rows = engine.ExecuteQuery("SELECT `Id`, `N` FROM `S`;").Rows.ToList(); + Assert.Single(rows); + Assert.Equal(1, Convert.ToInt32(rows[0][0])); + Assert.Equal("a", rows[0][1]); + } + finally { File.Delete(path); } + } + + [Fact] + public void Autonumber_is_generated_for_inserts_that_omit_the_column() + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + engine.ExecuteNonQuery("CREATE TABLE `Auto` (`Id` COUNTER PRIMARY KEY, `V` TEXT(20))"); + Assert.Equal(1, engine.ExecuteNonQuery("INSERT INTO `Auto` (`V`) VALUES ('a')")); // -> Id 1 + engine.ExecuteNonQuery("INSERT INTO `Auto` (`V`) VALUES ('b')"); // -> 2 + engine.ExecuteNonQuery("INSERT INTO `Auto` (`Id`, `V`) VALUES (10, 'ten')"); // explicit, jumps + engine.ExecuteNonQuery("INSERT INTO `Auto` (`V`) VALUES ('after')"); // -> 11 (continues) + + var ids = engine.ExecuteQuery("SELECT `Id` FROM `Auto` ORDER BY `Id`") + .Rows.Select(r => Convert.ToInt32(r[0])).ToList(); + Assert.Equal([1, 2, 10, 11], ids); + } + finally { File.Delete(path); } + } + + [Fact] + public void Create_insert_select_round_trips_through_sql() + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + engine.ExecuteNonQuery( + "CREATE TABLE `Widget` (`Id` INTEGER PRIMARY KEY, `Name` TEXT(100), `Price` CURRENCY)"); + + Assert.Equal(1, engine.ExecuteNonQuery( + "INSERT INTO `Widget` (`Id`, `Name`, `Price`) VALUES (1, 'Gizmo', 9.99)")); + Assert.Equal(1, engine.ExecuteNonQuery( + "INSERT INTO `Widget` (`Id`, `Name`, `Price`) VALUES (2, 'Sprocket', 14.5)")); + + var rs = engine.ExecuteQuery("SELECT `Id`, `Name`, `Price` FROM `Widget` ORDER BY `Id`"); + var rows = rs.Rows.ToList(); + + Assert.Equal(["Id", "Name", "Price"], rs.ColumnNames); + Assert.Equal(2, rows.Count); + Assert.Equal(1, Convert.ToInt32(rows[0][0])); + Assert.Equal("Gizmo", rows[0][1]); + Assert.Equal(9.99m, Convert.ToDecimal(rows[0][2])); + Assert.Equal("Sprocket", rows[1][1]); + } + finally { File.Delete(path); } + } + + [Fact] + public void Insert_with_parameters_round_trips() + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + engine.ExecuteNonQuery("CREATE TABLE `P` (`Id` INTEGER PRIMARY KEY, `Name` TEXT(50))"); + engine.ExecuteNonQuery("INSERT INTO `P` (`Id`, `Name`) VALUES (@id, @name)", + new Dictionary { ["@id"] = 7, ["@name"] = "param" }); + + var only = Assert.Single(engine.ExecuteQuery("SELECT `Name` FROM `P` WHERE `Id` = 7").Rows); + Assert.Equal("param", only[0]); + } + finally { File.Delete(path); } + } + + [Fact] + public void Insert_round_trips_nulls_booleans_negative_numbers_and_double_quoted_text() + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + engine.ExecuteNonQuery( + "CREATE TABLE `Mixed` (`Id` INTEGER PRIMARY KEY, `Name` TEXT(80), `Qty` INTEGER2, `Price` CURRENCY, `Flag` YESNO)"); + Assert.Equal(1, engine.ExecuteNonQuery( + "INSERT INTO `Mixed` (`Id`, `Name`, `Qty`, `Price`, `Flag`) VALUES (1, \"O'Brien & Sons\", -12, -42.75, true)")); + Assert.Equal(1, engine.ExecuteNonQuery( + "INSERT INTO `Mixed` (`Id`, `Name`, `Flag`) VALUES (2, NULL, false)")); + + var rows = engine.ExecuteQuery( + "SELECT `Id`, `Name`, `Qty`, `Price`, `Flag`, `Name` & '-checked' AS `Label` FROM `Mixed` ORDER BY `Id`") + .Rows.ToList(); + + Assert.Equal(2, rows.Count); + Assert.Equal("O'Brien & Sons", rows[0][1]); + Assert.Equal(-12, Convert.ToInt32(rows[0][2])); + Assert.Equal(-42.75m, Convert.ToDecimal(rows[0][3])); + Assert.True((bool)rows[0][4]!); + Assert.Equal("O'Brien & Sons-checked", rows[0][5]); + + Assert.Null(rows[1][1]); + Assert.Null(rows[1][2]); + Assert.Null(rows[1][3]); + Assert.False((bool)rows[1][4]!); + Assert.Equal("-checked", rows[1][5]); + } + finally { File.Delete(path); } + } + + [Fact] + public void Width_suffixed_and_two_word_type_aliases_work() + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + // integer4 = Int32, integer2 = Int16, integer1 = Byte, and the two-word CHARACTER VARYING. + engine.ExecuteNonQuery( + "CREATE TABLE `Aliased` (`Id` INTEGER4 PRIMARY KEY, `Small` INTEGER2, `Tiny` INTEGER1, `Label` CHARACTER VARYING(40))"); + engine.ExecuteNonQuery( + "INSERT INTO `Aliased` (`Id`, `Small`, `Tiny`, `Label`) VALUES (1, 200, 7, 'hi')"); + + var only = Assert.Single(engine.ExecuteQuery("SELECT `Id`, `Small`, `Tiny`, `Label` FROM `Aliased`").Rows); + Assert.Equal(1, Convert.ToInt32(only[0])); + Assert.Equal(200, Convert.ToInt32(only[1])); + Assert.Equal(7, Convert.ToInt32(only[2])); + Assert.Equal("hi", only[3]); + + var def = db.Catalog.FindTable("Aliased")!; + Assert.Equal(LibRed.Catalog.JetDataType.Int16, def.FindColumn("Small")!.Type); + Assert.Equal(LibRed.Catalog.JetDataType.Byte, def.FindColumn("Tiny")!.Type); + } + finally { File.Delete(path); } + } + + [Fact] + public void Boolean_alias_logical1_maps_to_boolean() + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + new QueryEngine(db).ExecuteNonQuery("CREATE TABLE `B` (`Id` INTEGER, `Flag` LOGICAL1)"); + Assert.Equal(LibRed.Catalog.JetDataType.Boolean, db.Catalog.FindTable("B")!.FindColumn("Flag")!.Type); + } + finally { File.Delete(path); } + } + + // ANSI/SQL-Server type-name aliases EF Core's relational defaults emit that weren't handled: + // DOUBLE PRECISION → Double (two-word ANSI spelling), NTEXT → Memo (Unicode long text), + // DEC → FixedPoint (ANSI decimal), GENERAL → Ole (Access long-binary alias). + [Theory] + [InlineData("DOUBLE PRECISION", LibRed.Catalog.JetDataType.Double)] + [InlineData("NTEXT", LibRed.Catalog.JetDataType.Memo)] + [InlineData("DEC", LibRed.Catalog.JetDataType.FixedPoint)] + [InlineData("GENERAL", LibRed.Catalog.JetDataType.Ole)] + public void Ansi_type_aliases_map_to_the_right_storage_type(string typeName, LibRed.Catalog.JetDataType expected) + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + new QueryEngine(db).ExecuteNonQuery($"CREATE TABLE `D` (`Id` INTEGER, `V` {typeName})"); + Assert.Equal(expected, db.Catalog.FindTable("D")!.FindColumn("V")!.Type); + } + finally { File.Delete(path); } + } + + [Fact] + public void Create_without_primary_key_is_allowed() + { + string path = CopyToTemp(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + + engine.ExecuteNonQuery("CREATE TABLE `NoPk` (`A` INTEGER, `B` TEXT(20))"); + engine.ExecuteNonQuery("INSERT INTO `NoPk` (`A`, `B`) VALUES (1, 'x')"); + + var only = Assert.Single(engine.ExecuteQuery("SELECT `A`, `B` FROM `NoPk`").Rows); + Assert.Equal(1, Convert.ToInt32(only[0])); + Assert.Equal("x", only[1]); + } + finally { File.Delete(path); } + } +} diff --git a/test/LibRed.Engine.Tests/DecorrelationCostTests.cs b/test/LibRed.Engine.Tests/DecorrelationCostTests.cs new file mode 100644 index 00000000..21803730 --- /dev/null +++ b/test/LibRed.Engine.Tests/DecorrelationCostTests.cs @@ -0,0 +1,79 @@ +using System.Diagnostics; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Decorrelating a correlated subquery is sound from the first probe but not always cheaper: it runs the body once +// WITHOUT the correlation, so a body that per-row would have been one index seek pays a full pass instead. These +// pin both directions of that trade — a tiny outer over a big indexed inner must stay per-row, while a genuinely +// slow correlation must still switch. They are timing tests, so the thresholds are set an order of magnitude clear +// of the measured figures rather than close to them. +public class DecorrelationCostTests +{ + private const int InnerRows = 20_000; + + /// A small outer table and a large indexed inner one, the shape decorrelation must NOT take over. + private static QueryEngine SmallOuterLargeInner() + { + string path = Path.Combine(Path.GetTempPath(), $"cost-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + e.ExecuteNonQuery("CREATE TABLE Small ( Id LONG PRIMARY KEY )"); + for (var i = 1; i <= 3; i++) + { + e.ExecuteNonQuery($"INSERT INTO Small (Id) VALUES ({i})"); + } + + e.ExecuteNonQuery("CREATE TABLE Big ( Id LONG PRIMARY KEY, K LONG )"); + e.ExecuteNonQuery("BEGIN TRANSACTION"); + for (var i = 1; i <= InnerRows; i++) + { + e.ExecuteNonQuery($"INSERT INTO Big (Id, K) VALUES ({i}, {i})"); + } + + e.ExecuteNonQuery("COMMIT"); + e.ExecuteNonQuery("CREATE INDEX IX_Big_K ON Big (K)"); + return e; + } + + private static long Time(QueryEngine e, string sql) + { + e.ExecuteQuery(sql).Rows.Count(); // warm the plan and the pages + var sw = Stopwatch.StartNew(); + e.ExecuteQuery(sql).Rows.Count(); + return sw.ElapsedMilliseconds; + } + + [Theory] + // Three outer rows, each answered by an index seek into 20,000 rows. Decorrelating would hash all 20,000 to + // answer three questions: measured 0.2 ms per-row against 32.8 ms decorrelated for EXISTS, 0.1 against 34.5 + // for IN, and 0.2 against 117.7 for the COUNT. The gate keeps all three per-row, since three seeks never + // reach its budget. + [InlineData("SELECT s.Id FROM Small AS s WHERE EXISTS (SELECT 1 FROM Big AS b WHERE b.K = s.Id)")] + [InlineData("SELECT s.Id FROM Small AS s WHERE s.Id IN (SELECT b.K FROM Big AS b WHERE b.K = s.Id)")] + [InlineData("SELECT s.Id FROM Small AS s WHERE (SELECT COUNT(*) FROM Big AS b WHERE b.K = s.Id) > 0")] + public void A_tiny_outer_over_a_large_indexed_inner_stays_per_row(string sql) + { + QueryEngine e = SmallOuterLargeInner(); + Assert.Equal(3, e.ExecuteQuery(sql).Rows.Count()); // and still answers correctly + long ms = Time(e, sql); + Assert.True(ms < 15, $"took {ms} ms — the body was decorrelated when per-row was ~0.2 ms"); + } + + [Fact] + public void The_same_body_does_switch_once_the_outer_is_large() + { + // Same tables, outer and inner swapped: now every one of the 20,000 outer rows asks the question, so the + // per-row form pays 20,000 seeks and the gate switches after the first few. This is the guard that the + // cost check didn't simply disable decorrelation — without the switch this shape is far slower. + QueryEngine e = SmallOuterLargeInner(); + const string sql = "SELECT b.Id FROM Big AS b WHERE EXISTS (SELECT 1 FROM Small AS s WHERE s.Id = b.K)"; + + Assert.Equal(3, e.ExecuteQuery(sql).Rows.Count()); + long ms = Time(e, sql); + Assert.True(ms < 2000, $"took {ms} ms"); + } +} diff --git a/test/LibRed.Engine.Tests/DeferredFunctionsTests.cs b/test/LibRed.Engine.Tests/DeferredFunctionsTests.cs new file mode 100644 index 00000000..7c4db6df --- /dev/null +++ b/test/LibRed.Engine.Tests/DeferredFunctionsTests.cs @@ -0,0 +1,66 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Partition / StrConv / WeekdayName — implemented after probing their exact ACE semantics. Expected values are +// what ACE returned, except WeekdayName's omitted first-day (OS-locale-dependent) which is asserted only with an +// explicit first-day argument. +public class DeferredFunctionsTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"dff-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static string Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]?.ToString()!; + + [Theory] + [InlineData("Partition(5, 1, 100, 10)", " 1: 10")] + [InlineData("Partition(11, 1, 100, 10)", " 11: 20")] + [InlineData("Partition(100, 1, 100, 10)", " 91:100")] + [InlineData("Partition(0, 1, 100, 10)", " : 0")] + [InlineData("Partition(-5, 1, 100, 10)", " : 0")] + [InlineData("Partition(150, 1, 100, 10)", "101: ")] + [InlineData("Partition(50, 0, 99, 25)", " 50: 74")] + public void Partition_matches_ace(string expr, string expected) + => Assert.Equal(expected, Eval(expr)); + + [Theory] + [InlineData("StrConv('hello world', 1)", "HELLO WORLD")] + [InlineData("StrConv('HELLO WORLD', 2)", "hello world")] + [InlineData("StrConv('hello world', 3)", "Hello World")] + [InlineData("StrConv('mixed CASE text', 3)", "Mixed Case Text")] + public void StrConv_case_modes_match_ace(string expr, string expected) + => Assert.Equal(expected, Eval(expr)); + + [Fact] + public void StrConv_unsupported_mode_is_rejected() + { + var ex = Assert.Throws(() => Eval("StrConv('hello', 4)")); + Assert.Contains("Invalid procedure call", ex.Message); + } + + [Theory] + // explicit firstDayOfWeek → deterministic, matches ACE + [InlineData("WeekdayName(1, False, 1)", "Sunday")] + [InlineData("WeekdayName(2, False, 1)", "Monday")] + [InlineData("WeekdayName(7, False, 1)", "Saturday")] + [InlineData("WeekdayName(1, False, 2)", "Monday")] + [InlineData("WeekdayName(7, False, 2)", "Sunday")] + [InlineData("WeekdayName(1, True, 1)", "Sun")] + [InlineData("WeekdayName(3, True, 2)", "Wed")] + public void WeekdayName_with_explicit_first_day_matches_ace(string expr, string expected) + => Assert.Equal(expected, Eval(expr)); + + [Fact] + public void WeekdayName_omitted_first_day_defaults_to_sunday() + // ACE's omitted default follows the OS regional first day; LibRed fixes it to vbSunday for determinism. + => Assert.Equal("Sunday", Eval("WeekdayName(1)")); +} diff --git a/test/LibRed.Engine.Tests/DeleteTests.cs b/test/LibRed.Engine.Tests/DeleteTests.cs new file mode 100644 index 00000000..2f4ad27d --- /dev/null +++ b/test/LibRed.Engine.Tests/DeleteTests.cs @@ -0,0 +1,48 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class DeleteTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"delete-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + [Fact] + public void Delete_removes_matching_rows_and_their_index_entries() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE T (Id counter PRIMARY KEY, N long)"); + for (int i = 1; i <= 5; i++) e.ExecuteNonQuery($"INSERT INTO T (N) VALUES ({i * 10})"); + + // Standard form. + Assert.Equal(1, e.ExecuteNonQuery("DELETE FROM T WHERE Id = 3")); + Assert.Empty(e.ExecuteQuery("SELECT N FROM T WHERE Id = 3").Rows); // gone (seek by the PK index) + Assert.Equal(4, e.ExecuteQuery("SELECT Id FROM T").Rows.Count()); + + // Access-specific `table.*` form, with a criteria over a non-key column. + Assert.Equal(2, e.ExecuteNonQuery("DELETE T.* FROM T WHERE N > 30")); // deletes N=40, N=50 + Assert.Equal(new[] { 1, 2 }, e.ExecuteQuery("SELECT Id FROM T").Rows.Select(r => Convert.ToInt32(r[0])).OrderBy(x => x)); + + // WHERE-less DELETE empties the table; @@ROWCOUNT reflects it. + Assert.Equal(2, e.ExecuteNonQuery("DELETE FROM T")); + Assert.Equal(2, Convert.ToInt32(e.ExecuteQuery("SELECT @@ROWCOUNT").Rows.Single()[0])); + Assert.Empty(e.ExecuteQuery("SELECT Id FROM T").Rows); + Assert.Equal(0, Convert.ToInt32(e.ExecuteQuery("SELECT COUNT(*) FROM T").Rows.Single()[0])); + + // The freed keys can be reused (index entries were removed): a new row inserts and reads back. + e.ExecuteNonQuery("INSERT INTO T (N) VALUES (99)"); + Assert.Equal(99, Convert.ToInt32(e.ExecuteQuery("SELECT N FROM T").Rows.Single()[0])); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/DistinctAggregateTests.cs b/test/LibRed.Engine.Tests/DistinctAggregateTests.cs new file mode 100644 index 00000000..5ed260d5 --- /dev/null +++ b/test/LibRed.Engine.Tests/DistinctAggregateTests.cs @@ -0,0 +1,53 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// The ANSI intra-aggregate DISTINCT (COUNT(DISTINCT col), SUM(DISTINCT col), …) aggregates over +/// the distinct set of the argument's VALUES — distinct on the column values, NOT distinct rows (see DISTINCTROW). +/// +public class DistinctAggregateTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"da-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id LONG PRIMARY KEY, Grp TEXT(5), V LONG)"); + // Group 'a': V = 10, 10, 20, 20, 20 → distinct {10,20}; all {10,10,20,20,20} + int id = 0; + foreach (int v in new[] { 10, 10, 20, 20, 20 }) e.ExecuteNonQuery($"INSERT INTO T (Id, Grp, V) VALUES ({id++}, 'a', {v})"); + return e; + } + + private static object? Scalar(QueryEngine e, string sql) => e.ExecuteQuery(sql).Rows.First()[0]; + + [Fact] + public void Count_distinct_counts_distinct_values() + { + var e = Seeded(); + Assert.Equal(5, Convert.ToInt32(Scalar(e, "SELECT COUNT(V) FROM T"))); // all non-null values + Assert.Equal(2, Convert.ToInt32(Scalar(e, "SELECT COUNT(DISTINCT V) FROM T"))); // {10, 20} + } + + [Fact] + public void Sum_and_avg_distinct_use_the_distinct_value_set() + { + var e = Seeded(); + Assert.Equal(80, Convert.ToInt32(Scalar(e, "SELECT SUM(V) FROM T"))); // 10+10+20+20+20 + Assert.Equal(30, Convert.ToInt32(Scalar(e, "SELECT SUM(DISTINCT V) FROM T"))); // 10+20 + Assert.Equal(15.0, Convert.ToDouble(Scalar(e, "SELECT AVG(DISTINCT V) FROM T"))); // (10+20)/2 + } + + [Fact] + public void Distinct_in_grouped_aggregate_projection() + { + var e = Seeded(); + var row = e.ExecuteQuery("SELECT Grp, COUNT(DISTINCT V) AS C, SUM(DISTINCT V) AS S FROM T GROUP BY Grp").Rows.Single(); + Assert.Equal("a", row[0]); + Assert.Equal(2, Convert.ToInt32(row[1])); + Assert.Equal(30, Convert.ToInt32(row[2])); + } +} diff --git a/test/LibRed.Engine.Tests/DistinctBetweenDateTests.cs b/test/LibRed.Engine.Tests/DistinctBetweenDateTests.cs new file mode 100644 index 00000000..b8c7fc74 --- /dev/null +++ b/test/LibRed.Engine.Tests/DistinctBetweenDateTests.cs @@ -0,0 +1,70 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// SELECT DISTINCT, a BETWEEN predicate, and #…# date literals — the features in Northwind's +/// "Quarterly Orders" view (SELECT DISTINCT … FROM Customers RIGHT JOIN Orders … WHERE +/// Orders.OrderDate BETWEEN #1/1/1997# And #12/31/1997#). +/// +public class DistinctBetweenDateTests +{ + private const string Query = + "SELECT DISTINCT Customers.CustomerID, Customers.CompanyName, Customers.City, Customers.Country " + + "FROM Customers RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID " + + "WHERE Orders.OrderDate BETWEEN #1/1/1997# And #12/31/1997#"; + + private static string Fresh() + { + string p = Path.Combine(Path.GetTempPath(), $"qorders-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), p); + return p; + } + + [Fact] + public void Distinct_between_and_date_literals_execute() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var rs = new QueryEngine(db).ExecuteQuery(Query); + Assert.Equal(4, rs.ColumnNames.Count); + Assert.Equal(86, rs.Rows.Count()); // distinct customers with a 1997 order + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Distinct_dedupes_rows() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + long all = Convert.ToInt64(e.ExecuteQuery("SELECT Country FROM Customers").Rows.Count()); + long distinct = Convert.ToInt64(e.ExecuteQuery("SELECT DISTINCT Country FROM Customers").Rows.Count()); + Assert.True(distinct < all); // Customers has many rows but few distinct countries + Assert.Equal(21, distinct); // Northwind customer countries + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_own_quarterly_orders_view_reads_back() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + int direct = e.ExecuteQuery(Query).Rows.Count(); + var view = e.ExecuteQuery("SELECT * FROM `Quarterly Orders`"); + Assert.Equal(direct, view.Rows.Count()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/DoubleExtremeLiteralTests.cs b/test/LibRed.Engine.Tests/DoubleExtremeLiteralTests.cs new file mode 100644 index 00000000..eb97efab --- /dev/null +++ b/test/LibRed.Engine.Tests/DoubleExtremeLiteralTests.cs @@ -0,0 +1,51 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// EF Core renders a double literal with 15 significant digits, so double.MinValue becomes +// "-1.79769313486232E+308" — whose magnitude EXCEEDS double.MaxValue (1.7976931348623157E+308), i.e. it is not +// a representable double. .NET's double.Parse clamps such a literal to ±Infinity, and LibRed follows suit, so +// EF's `Math.Xxx(col) > double.MinValue` comparisons (used throughout its math-translation tests) evaluate as +// intended. ACE instead rejects the literal outright ("Syntax error in number"), which is why those tests fail +// on the OLE DB path — NOT because ACE mishandles E+308: ACE round-trips MaxValue/MinValue/Epsilon exactly when +// given a correctly-rounded (17-digit) literal or a parameter. +public class DoubleExtremeLiteralTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"dxl-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE D (Id LONG PRIMARY KEY, V DOUBLE)"); + e.ExecuteNonQuery("INSERT INTO D (Id, V) VALUES (1, 0.5)"); + return e; + } + + [Fact] + public void An_out_of_range_double_literal_clamps_to_infinity() + { + var e = Fresh(); + Assert.Equal(double.NegativeInfinity, e.ExecuteQuery("SELECT -1.79769313486232E+308 FROM D WHERE Id = 1").Rows.Single()[0]); + Assert.Equal(double.PositiveInfinity, e.ExecuteQuery("SELECT 1.79769313486232E+308 FROM D WHERE Id = 1").Rows.Single()[0]); + } + + [Fact] + public void Comparing_against_efs_min_value_literal_matches_every_finite_row() + { + var e = Fresh(); + // EF's `Math.Xxx(col) > double.MinValue` shape: the literal clamps to -Infinity, so every finite row matches. + Assert.Equal(1, Convert.ToInt32(e.ExecuteQuery("SELECT COUNT(*) FROM D WHERE V > -1.79769313486232E+308").Rows.Single()[0])); + } + + [Fact] + public void A_correctly_rounded_double_extreme_round_trips_exactly() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO D (Id, V) VALUES (2, -1.7976931348623157E+308)"); + e.ExecuteNonQuery("INSERT INTO D (Id, V) VALUES (3, 1.7976931348623157E+308)"); + Assert.Equal(double.MinValue, e.ExecuteQuery("SELECT V FROM D WHERE Id = 2").Rows.Single()[0]); + Assert.Equal(double.MaxValue, e.ExecuteQuery("SELECT V FROM D WHERE Id = 3").Rows.Single()[0]); + } +} diff --git a/test/LibRed.Engine.Tests/DropColumnTests.cs b/test/LibRed.Engine.Tests/DropColumnTests.cs new file mode 100644 index 00000000..65c2e14f --- /dev/null +++ b/test/LibRed.Engine.Tests/DropColumnTests.cs @@ -0,0 +1,67 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ALTER TABLE ... DROP COLUMN through LibRed's engine: a metadata-only TDEF edit. Existing rows are not +// rewritten, so the surviving columns must still read back correctly. +public class DropColumnTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"dropcol-eng-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY, A long, B text(20), C text(20))"); + e.ExecuteNonQuery("INSERT INTO T (Id, A, B, C) VALUES (1, 10, 'bee', 'see')"); + e.ExecuteNonQuery("INSERT INTO T (Id, A, B, C) VALUES (2, 20, 'buzz', 'sizz')"); + return e; + } + + [Fact] + public void Drops_a_variable_column_and_survivors_still_read() + { + var e = Fresh(); + e.ExecuteNonQuery("ALTER TABLE T DROP COLUMN B"); // middle variable column + + var rows = e.ExecuteQuery("SELECT Id, A, C FROM T ORDER BY Id").Rows + .Select(r => (Convert.ToInt32(r[0]), Convert.ToInt32(r[1]), (string)r[2]!)).ToArray(); + Assert.Equal([(1, 10, "see"), (2, 20, "sizz")], rows); // C still decodes correctly + Assert.Equal(["Id", "A", "C"], e.ExecuteQuery("SELECT * FROM T").ColumnNames); // B is gone from the catalog + } + + [Fact] + public void Drops_a_fixed_column() + { + var e = Fresh(); + e.ExecuteNonQuery("ALTER TABLE T DROP COLUMN A"); // fixed column + + var rows = e.ExecuteQuery("SELECT Id, B, C FROM T ORDER BY Id").Rows + .Select(r => (Convert.ToInt32(r[0]), (string)r[1]!, (string)r[2]!)).ToArray(); + Assert.Equal([(1, "bee", "see"), (2, "buzz", "sizz")], rows); + } + + [Fact] + public void Dropping_a_keyed_or_missing_column_is_rejected() + { + var e = Fresh(); + // ACE rejects dropping an indexed/keyed column (drop the index first) — we mirror that. + var ex = Assert.Throws(() => e.ExecuteNonQuery("ALTER TABLE T DROP COLUMN Id")); + Assert.Contains("index", ex.Message); + Assert.Throws(() => e.ExecuteNonQuery("ALTER TABLE T DROP COLUMN Nope")); // no such column + } + + [Fact] + public void Dropping_a_column_in_a_relationship_is_rejected() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE Ch (Id long PRIMARY KEY, Tid long, " + + "CONSTRAINT FK FOREIGN KEY (Tid) REFERENCES T (Id))"); + // ACE rejects dropping either end of a relationship: "part of one or more relationships". + Assert.Contains("relationship", Assert.Throws( + () => e.ExecuteNonQuery("ALTER TABLE Ch DROP COLUMN Tid")).Message); // child FK column + Assert.Contains("relationship", Assert.Throws( + () => e.ExecuteNonQuery("ALTER TABLE T DROP COLUMN Id")).Message); // referenced parent key + } +} diff --git a/test/LibRed.Engine.Tests/DropConstraintIndexTests.cs b/test/LibRed.Engine.Tests/DropConstraintIndexTests.cs new file mode 100644 index 00000000..e4102e9b --- /dev/null +++ b/test/LibRed.Engine.Tests/DropConstraintIndexTests.cs @@ -0,0 +1,68 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// In Jet/ACE a UNIQUE constraint IS a unique index, so DROP CONSTRAINT and DROP INDEX are interchangeable. +// LibRed's DROP CONSTRAINT now drops a same-named unique/PK index (falling through from the FK path), matching +// ACE — while still dropping FK relationships and rejecting an FK-backing index. +public class DropConstraintIndexTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"dci-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Fact] + public void Drop_constraint_removes_a_unique_index() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, A LONG )"); + e.ExecuteNonQuery("CREATE UNIQUE INDEX ix_a ON T (A)"); + // dup rejected while the unique index exists + e.ExecuteNonQuery("INSERT INTO T (K, A) VALUES (1, 10)"); + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (K, A) VALUES (2, 10)")); + + e.ExecuteNonQuery("ALTER TABLE T DROP CONSTRAINT ix_a"); // DROP CONSTRAINT on an index + // now the duplicate is allowed + e.ExecuteNonQuery("INSERT INTO T (K, A) VALUES (3, 10)"); + } + + [Fact] + public void Drop_constraint_removes_a_unique_constraint_added_via_alter() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, A LONG )"); + e.ExecuteNonQuery("ALTER TABLE T ADD CONSTRAINT UQ_A UNIQUE (A)"); + e.ExecuteNonQuery("INSERT INTO T (K, A) VALUES (1, 10)"); + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO T (K, A) VALUES (2, 10)")); + + e.ExecuteNonQuery("ALTER TABLE T DROP CONSTRAINT UQ_A"); + e.ExecuteNonQuery("INSERT INTO T (K, A) VALUES (3, 10)"); // duplicate now fine + } + + [Fact] + public void Drop_constraint_still_drops_a_foreign_key() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE P ( PID LONG PRIMARY KEY )"); + e.ExecuteNonQuery("CREATE TABLE C ( CID LONG PRIMARY KEY, PID LONG, CONSTRAINT FK_C FOREIGN KEY (PID) REFERENCES P (PID) )"); + e.ExecuteNonQuery("INSERT INTO P (PID) VALUES (1)"); + // orphan rejected while FK enforced + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO C (CID, PID) VALUES (10, 99)")); + + e.ExecuteNonQuery("ALTER TABLE C DROP CONSTRAINT FK_C"); + e.ExecuteNonQuery("INSERT INTO C (CID, PID) VALUES (11, 99)"); // orphan now allowed + } + + [Fact] + public void Drop_constraint_on_a_nonexistent_name_throws() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + Assert.ThrowsAny(() => e.ExecuteNonQuery("ALTER TABLE T DROP CONSTRAINT Nope")); + } +} diff --git a/test/LibRed.Engine.Tests/DropIndexTests.cs b/test/LibRed.Engine.Tests/DropIndexTests.cs new file mode 100644 index 00000000..940228a7 --- /dev/null +++ b/test/LibRed.Engine.Tests/DropIndexTests.cs @@ -0,0 +1,63 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// DROP INDEX index ON table through LibRed's engine. +public class DropIndexTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"dropix-eng-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY, Name text(20), Code long)"); + e.ExecuteNonQuery("CREATE INDEX IX_Name ON T (Name)"); + e.ExecuteNonQuery("CREATE UNIQUE INDEX UX_Code ON T (Code)"); + e.ExecuteNonQuery("INSERT INTO T (Id, Name, Code) VALUES (1, 'a', 10)"); + e.ExecuteNonQuery("INSERT INTO T (Id, Name, Code) VALUES (2, 'b', 20)"); + return e; + } + + private static string[] IndexNames(QueryEngine e, string table) => + e.Database.Catalog.FindTable(table)!.Indexes.Select(i => i.Name).ToArray(); + + [Fact] + public void Drops_a_secondary_index_leaving_the_others() + { + var e = Fresh(); + e.ExecuteNonQuery("DROP INDEX IX_Name ON T"); + + Assert.DoesNotContain("IX_Name", IndexNames(e, "T")); + Assert.Contains("UX_Code", IndexNames(e, "T")); + // Data still intact and queryable after the index is gone. + Assert.Equal(2, e.ExecuteQuery("SELECT Id FROM T").Rows.Count()); + Assert.Equal("b", e.ExecuteQuery("SELECT Name FROM T WHERE Id = 2").Rows.Single()[0]); + } + + [Fact] + public void Unique_and_primary_key_indexes_can_be_dropped() + { + var e = Fresh(); + e.ExecuteNonQuery("DROP INDEX UX_Code ON T"); // unique + Assert.DoesNotContain("UX_Code", IndexNames(e, "T")); + + string pk = e.Database.Catalog.FindTable("T")!.Indexes.Single(i => i.IsPrimaryKey).Name; + e.ExecuteNonQuery($"DROP INDEX `{pk}` ON T"); // even the primary key + Assert.DoesNotContain(pk, IndexNames(e, "T")); + Assert.Equal(2, e.ExecuteQuery("SELECT Id FROM T").Rows.Count()); // data intact + } + + [Fact] + public void Dropping_a_missing_index_or_a_relationship_index_is_rejected() + { + var e = Fresh(); + Assert.Throws(() => e.ExecuteNonQuery("DROP INDEX Nope ON T")); + + e.ExecuteNonQuery("CREATE TABLE C (Id long PRIMARY KEY, Tid long, " + + "CONSTRAINT FK FOREIGN KEY (Tid) REFERENCES T (Id))"); + var ex = Assert.Throws(() => e.ExecuteNonQuery("DROP INDEX FK ON C")); + Assert.Contains("relationship", ex.Message); + } +} diff --git a/test/LibRed.Engine.Tests/DropStatementParsingTests.cs b/test/LibRed.Engine.Tests/DropStatementParsingTests.cs new file mode 100644 index 00000000..6917fb71 --- /dev/null +++ b/test/LibRed.Engine.Tests/DropStatementParsingTests.cs @@ -0,0 +1,41 @@ +using LibRed.Sql.Ast; +using LibRed.Sql.Parsing; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Grammar wiring for the standalone DROP statement: +// DROP { TABLE table | INDEX index ON table | PROCEDURE procedure | VIEW view } +// Parsing only — the executors follow in their own steps (DROP INDEX, then DROP TABLE, then VIEW/PROC). +public class DropStatementParsingTests +{ + private static SqlStatement Parse(string sql) => new AntlrSqlParser().ParseStatement(sql); + + [Fact] + public void Drop_table() + { + Assert.Equal("Employees", Assert.IsType(Parse("DROP TABLE Employees")).Table); + Assert.Equal("Order Details", Assert.IsType(Parse("DROP TABLE `Order Details`")).Table); + } + + [Fact] + public void Drop_index_on_table() + { + var d = Assert.IsType(Parse("DROP INDEX IX_Name ON `Customers`")); + Assert.Equal("IX_Name", d.Index); + Assert.Equal("Customers", d.Table); + } + + [Fact] + public void Drop_view_and_procedure() + { + Assert.Equal("Invoices", Assert.IsType(Parse("DROP VIEW Invoices")).View); + Assert.Equal("Ten Most Expensive", Assert.IsType(Parse("DROP PROCEDURE `Ten Most Expensive`")).Procedure); + } + + [Fact] + public void Trailing_semicolon_is_accepted() + { + Assert.IsType(Parse("DROP TABLE T;")); + } +} diff --git a/test/LibRed.Engine.Tests/DropTableRelationshipTests.cs b/test/LibRed.Engine.Tests/DropTableRelationshipTests.cs new file mode 100644 index 00000000..24de622c --- /dev/null +++ b/test/LibRed.Engine.Tests/DropTableRelationshipTests.cs @@ -0,0 +1,50 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// DROP TABLE on a table that participates in a relationship: dropping the CHILD (referencing) table is +// allowed and removes the relationship (ACE lets you drop the referencing table while the parent stays); +// dropping a table still REFERENCED as a parent by a surviving child is rejected. Mirrors the order the +// scaffolding cleanup uses (child first, then parent). +public class DropTableRelationshipTests +{ + private static QueryEngine Setup() + { + string path = Path.Combine(Path.GetTempPath(), $"drop-rel-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE K2 ( Id int, A varchar, UNIQUE (A) )"); + e.ExecuteNonQuery("CREATE TABLE Kilimanjaro ( Id int, B varchar, UNIQUE (B), FOREIGN KEY (B) REFERENCES K2 (A) )"); + return e; + } + + [Fact] + public void Dropping_the_child_table_first_then_the_parent_succeeds() + { + var e = Setup(); + + // Child (referencing) table drops directly — the relationship goes with it. + e.ExecuteNonQuery("DROP TABLE Kilimanjaro"); + // Parent now has no surviving child, so it drops too. + e.ExecuteNonQuery("DROP TABLE K2"); + + // Both names are free again (a re-create with the same name is the strongest proof they're gone). + e.ExecuteNonQuery("CREATE TABLE K2 ( Id int )"); + e.ExecuteNonQuery("CREATE TABLE Kilimanjaro ( Id int )"); + } + + [Fact] + public void Dropping_the_parent_while_a_child_still_references_it_is_rejected() + { + var e = Setup(); + + var ex = Assert.Throws(() => e.ExecuteNonQuery("DROP TABLE K2")); + Assert.Contains("referenced by a relationship", ex.Message); + + // The parent is untouched: dropping the child first still works afterwards. + e.ExecuteNonQuery("DROP TABLE Kilimanjaro"); + e.ExecuteNonQuery("DROP TABLE K2"); + } +} diff --git a/test/LibRed.Engine.Tests/DropTableTests.cs b/test/LibRed.Engine.Tests/DropTableTests.cs new file mode 100644 index 00000000..f70ed202 --- /dev/null +++ b/test/LibRed.Engine.Tests/DropTableTests.cs @@ -0,0 +1,59 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// DROP TABLE table through LibRed's engine. +public class DropTableTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"droptab-eng-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY, Name text(20))"); + e.ExecuteNonQuery("CREATE INDEX IX_Name ON T (Name)"); + e.ExecuteNonQuery("INSERT INTO T (Id, Name) VALUES (1, 'a')"); + e.ExecuteNonQuery("CREATE TABLE Other (Id long PRIMARY KEY)"); + e.ExecuteNonQuery("INSERT INTO Other (Id) VALUES (7)"); + return e; + } + + [Fact] + public void Drops_the_table_leaving_others_intact() + { + var e = Fresh(); + e.ExecuteNonQuery("DROP TABLE T"); + + Assert.Null(e.Database.Catalog.FindTable("T")); // gone from the catalog + Assert.Throws(() => e.ExecuteQuery("SELECT * FROM T")); + // A same-named table can be created again. + Assert.Equal(0, e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY)")); + // The other table is untouched. + Assert.Equal(7, Convert.ToInt32(e.ExecuteQuery("SELECT Id FROM Other").Rows.Single()[0])); + } + + [Fact] + public void Dropping_a_missing_table_is_rejected() + { + var e = Fresh(); + Assert.Throws(() => e.ExecuteNonQuery("DROP TABLE Nope")); + } + + [Fact] + public void Dropping_a_referenced_parent_is_rejected_but_the_child_can_be_dropped() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE P (Id long PRIMARY KEY)"); + e.ExecuteNonQuery("CREATE TABLE C (Id long PRIMARY KEY, Pid long, " + + "CONSTRAINT FK FOREIGN KEY (Pid) REFERENCES P (Id))"); + // The parent is referenced by a surviving child → rejected. + Assert.Contains("relationship", Assert.Throws( + () => e.ExecuteNonQuery("DROP TABLE P")).Message); + // The child (referencing) table drops directly — the relationship goes with it (ACE allows this). + e.ExecuteNonQuery("DROP TABLE C"); + // With the child gone, the parent is no longer referenced and drops too. + e.ExecuteNonQuery("DROP TABLE P"); + } +} diff --git a/test/LibRed.Engine.Tests/DropViewProcedureTests.cs b/test/LibRed.Engine.Tests/DropViewProcedureTests.cs new file mode 100644 index 00000000..bbe19ee2 --- /dev/null +++ b/test/LibRed.Engine.Tests/DropViewProcedureTests.cs @@ -0,0 +1,51 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// DROP VIEW / DROP PROCEDURE through LibRed's engine — both remove a type-5 query object. +public class DropViewProcedureTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"dropview-eng-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Fact] + public void Drop_view_removes_it_and_frees_the_name() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE VIEW V AS SELECT ProductID FROM Products"); + Assert.True(e.Database.Catalog.Views.ContainsKey("V")); + + e.ExecuteNonQuery("DROP VIEW V"); + Assert.False(e.Database.Catalog.Views.ContainsKey("V")); // gone + Assert.Throws(() => e.ExecuteQuery("SELECT * FROM V")); + Assert.Equal(0, e.ExecuteNonQuery("CREATE VIEW V AS SELECT ProductID FROM Products")); // name reusable + } + + [Fact] + public void Drop_procedure_removes_it() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE PROCEDURE Pr n LONG AS SELECT ProductID FROM Products WHERE ProductID = n"); + e.ExecuteNonQuery("DROP PROCEDURE Pr"); + Assert.False(e.Database.Catalog.ActionQueries.ContainsKey("Pr")); + Assert.False(e.Database.Catalog.Views.ContainsKey("Pr")); + } + + [Fact] + public void Drop_view_and_procedure_are_interchangeable_and_missing_is_rejected() + { + var e = Fresh(); + // ACE lets either statement drop either object; LibRed matches. + e.ExecuteNonQuery("CREATE VIEW V2 AS SELECT ProductID FROM Products"); + e.ExecuteNonQuery("DROP PROCEDURE V2"); // drop a view via DROP PROCEDURE + Assert.False(e.Database.Catalog.Views.ContainsKey("V2")); + + Assert.Throws(() => e.ExecuteNonQuery("DROP VIEW Nope")); + } +} diff --git a/test/LibRed.Engine.Tests/ExecuteStatementTests.cs b/test/LibRed.Engine.Tests/ExecuteStatementTests.cs new file mode 100644 index 00000000..d4b902c7 --- /dev/null +++ b/test/LibRed.Engine.Tests/ExecuteStatementTests.cs @@ -0,0 +1,111 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using LibRed.Engine.Execution; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// The Access EXECUTE|EXEC procedure arg, … statement: invokes a stored procedure/query by name, +/// binding positional argument values to its declared parameters. A stored SELECT returns rows; a stored +/// action query returns its rows-affected count. +/// +public class ExecuteStatementTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"exec-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id LONG PRIMARY KEY, Nm TEXT(50), Amt LONG)"); + foreach (var (id, nm, amt) in new[] { (1, "a", 10), (2, "b", 20), (3, "c", 30) }) + e.ExecuteNonQuery($"INSERT INTO T (Id, Nm, Amt) VALUES ({id}, '{nm}', {amt})"); + return e; + } + + private static string[] Names(ResultSet r) => r.Rows.Select(row => (string)row[0]!).ToArray(); + + [Fact] + public void Execute_a_parameterized_select_procedure() + { + var e = Seeded(); + e.ExecuteNonQuery("CREATE PROCEDURE pByMin threshold LONG AS SELECT Nm FROM T WHERE Amt >= threshold"); + + Assert.Equal(["b", "c"], Names(e.ExecuteQuery("EXECUTE pByMin 20"))); + Assert.Empty(Names(e.ExecuteQuery("EXECUTE pByMin 100"))); + } + + [Fact] + public void Exec_is_the_accepted_short_form() + { + var e = Seeded(); + e.ExecuteNonQuery("CREATE PROCEDURE pByMin threshold LONG AS SELECT Nm FROM T WHERE Amt >= threshold"); + Assert.Equal(["a", "b", "c"], Names(e.ExecuteQuery("EXEC pByMin 0"))); + } + + [Fact] + public void Execute_binds_a_caller_parameter_as_an_argument() + { + var e = Seeded(); + e.ExecuteNonQuery("CREATE PROCEDURE pByMin threshold LONG AS SELECT Nm FROM T WHERE Amt >= threshold"); + var r = e.ExecuteQuery("EXECUTE pByMin @p0", new Dictionary { ["@p0"] = 25 }); + Assert.Equal(["c"], Names(r)); + } + + [Fact] + public void Execute_a_plain_view_with_no_parameters() + { + var e = Seeded(); + e.ExecuteNonQuery("CREATE VIEW vAll AS SELECT Nm FROM T"); + Assert.Equal(["a", "b", "c"], Names(e.ExecuteQuery("EXECUTE vAll"))); + } + + [Fact] + public void Execute_an_action_query_returns_rows_affected() + { + var e = Seeded(); + e.ExecuteNonQuery("CREATE PROCEDURE pAdd AS INSERT INTO T (Id, Nm, Amt) VALUES (4, 'd', 40)"); + Assert.Equal(1, e.ExecuteNonQuery("EXEC pAdd")); + Assert.Equal(4, Convert.ToInt32(e.ExecuteQuery("SELECT COUNT(*) FROM T").Rows.First()[0])); + } + + [Fact] + public void Execute_rejects_a_wrong_argument_count() + { + var e = Seeded(); + e.ExecuteNonQuery("CREATE PROCEDURE pByMin threshold LONG AS SELECT Nm FROM T WHERE Amt >= threshold"); + Assert.Throws(() => e.ExecuteQuery("EXECUTE pByMin")); + Assert.Throws(() => e.ExecuteQuery("EXECUTE pByMin 1, 2")); + } + + [Fact] + public void Execute_an_unknown_procedure_throws() + => Assert.Throws(() => Seeded().ExecuteQuery("EXECUTE nope 1")); + + // Access EXEC argument forms EF emits for stored procedures (verified vs the SqlExecutor test SQL): + // `EXEC proc Name` — a bare identifier references a supplied command parameter of that name; + // `EXEC proc Param = @v` — a named argument binding the procedure's parameter. + private static QueryEngine WithLookupProc() + { + var e = Seeded(); + e.ExecuteNonQuery("CREATE PROCEDURE pByName pNm TEXT AS SELECT Amt FROM T WHERE Nm = pNm"); + return e; + } + + [Fact] + public void A_bare_identifier_argument_references_a_supplied_command_parameter() + { + var r = WithLookupProc().ExecuteQuery("EXEC pByName pNm", + new Dictionary { ["@pNm"] = "b" }); + Assert.Equal(20, Convert.ToInt32(r.Rows.Single()[0])); + } + + [Fact] + public void A_named_argument_binds_the_named_parameter() + { + var r = WithLookupProc().ExecuteQuery("EXEC pByName pNm = @p0", + new Dictionary { ["@p0"] = "c" }); + Assert.Equal(30, Convert.ToInt32(r.Rows.Single()[0])); + } +} diff --git a/test/LibRed.Engine.Tests/ExistsUpdateDeleteTests.cs b/test/LibRed.Engine.Tests/ExistsUpdateDeleteTests.cs new file mode 100644 index 00000000..2deadfc5 --- /dev/null +++ b/test/LibRed.Engine.Tests/ExistsUpdateDeleteTests.cs @@ -0,0 +1,45 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Verifies single-target UPDATE/DELETE with a correlated WHERE EXISTS(SELECT 1 ...) — the shape EF Core's +// bulk ExecuteUpdate/ExecuteDelete emits. (If this passes, EXISTS-based bulk ops already work.) +public class ExistsUpdateDeleteTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"exists-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + [Fact] + public void Exists_correlated_where_on_update_and_delete() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE P (Id long PRIMARY KEY, N long)"); + e.ExecuteNonQuery("CREATE TABLE C (Id long PRIMARY KEY, ParentId long)"); + e.ExecuteNonQuery("INSERT INTO P (Id, N) VALUES (1, 0)"); + e.ExecuteNonQuery("INSERT INTO P (Id, N) VALUES (2, 0)"); + e.ExecuteNonQuery("INSERT INTO C (Id, ParentId) VALUES (10, 1)"); // only P#1 has a child + + // UPDATE only the parents that have a child. + int updated = e.ExecuteNonQuery("UPDATE P SET N = 99 WHERE EXISTS (SELECT 1 FROM C WHERE C.ParentId = P.Id)"); + + // DELETE the parents with no child. + int deleted = e.ExecuteNonQuery("DELETE FROM P WHERE NOT EXISTS (SELECT 1 FROM C WHERE C.ParentId = P.Id)"); + + Assert.Equal(1, updated); + Assert.Equal(99, System.Convert.ToInt32(e.ExecuteQuery("SELECT N FROM P WHERE Id = 1").Rows.Single()[0])); + Assert.Equal(1, deleted); + Assert.Equal(new object?[] { 1 }, e.ExecuteQuery("SELECT Id FROM P").Rows.Select(r => System.Convert.ToInt32(r[0])).Cast()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/ExpressionSubqueryViewTests.cs b/test/LibRed.Engine.Tests/ExpressionSubqueryViewTests.cs new file mode 100644 index 00000000..7e96aaf6 --- /dev/null +++ b/test/LibRed.Engine.Tests/ExpressionSubqueryViewTests.cs @@ -0,0 +1,53 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// A view referenced inside a scalar or EXISTS subquery (not just a FROM clause) is expanded, so the +/// query resolves the view the same as its base-table equivalent. Before this, only FROM-clause view +/// references were rewritten and a view named inside an expression subquery failed to resolve. +/// +public class ExpressionSubqueryViewTests +{ + private static string Fresh() + { + string p = Path.Combine(Path.GetTempPath(), $"expr-view-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), p); + return p; + } + + private static long Scalar(QueryEngine e, string sql) => + Convert.ToInt64(e.ExecuteQuery(sql).Rows.First()[0]); + + [Fact] + public void View_inside_exists_and_scalar_subqueries_is_expanded() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery( + "CREATE VIEW `LondonCust` AS SELECT CustomerID FROM Customers WHERE City = 'London'"); + + using (var db = JetDatabase.Open(path)) + { + var e = new QueryEngine(db); + + // EXISTS over the view === EXISTS over the base table. + Assert.Equal( + Scalar(e, "SELECT COUNT(*) FROM Customers c WHERE EXISTS " + + "(SELECT 1 FROM Customers v WHERE v.City = 'London' AND v.CustomerID = c.CustomerID)"), + Scalar(e, "SELECT COUNT(*) FROM Customers c WHERE EXISTS " + + "(SELECT 1 FROM `LondonCust` v WHERE v.CustomerID = c.CustomerID)")); + + // Scalar subquery over the view === over the base table. + Assert.Equal( + Scalar(e, "SELECT COUNT(*) FROM Shippers WHERE (SELECT COUNT(*) FROM Customers WHERE City = 'London') > 0"), + Scalar(e, "SELECT COUNT(*) FROM Shippers WHERE (SELECT COUNT(*) FROM `LondonCust`) > 0")); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/FinancialFunctionsTests.cs b/test/LibRed.Engine.Tests/FinancialFunctionsTests.cs new file mode 100644 index 00000000..11ea075f --- /dev/null +++ b/test/LibRed.Engine.Tests/FinancialFunctionsTests.cs @@ -0,0 +1,62 @@ +using System.Globalization; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Financial, FormatX, and colour functions — all exposed by the ACE JES and now implemented in LibRed. Expected +// values are exactly what ACE returned. Culture pinned to en-US for the locale-sensitive FormatX cases. +public class FinancialFunctionsTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"fin-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static object? Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]; + + private static object? EvalEnUs(string expr) + { + var prev = CultureInfo.CurrentCulture; + CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); + try { return Eval(expr); } finally { CultureInfo.CurrentCulture = prev; } + } + + [Theory] + [InlineData("Pmt(0.05/12, 60, 10000)", -188.7123364401099)] + [InlineData("FV(0.05/12, 60, -100)", 6800.608284084284)] + [InlineData("PV(0.05/12, 60, -100)", 5299.070632392715)] + [InlineData("IPmt(0.05/12, 1, 60, 10000)", -41.666666666666664)] + [InlineData("PPmt(0.05/12, 1, 60, 10000)", -147.04566977344325)] + [InlineData("NPer(0.05/12, -200, 10000)", 56.18429076143198)] + [InlineData("Rate(60, -200, 10000)", 0.006183413161266263)] + [InlineData("DDB(10000, 1000, 5, 1)", 4000)] + [InlineData("SLN(10000, 1000, 5)", 1800)] + [InlineData("SYD(10000, 1000, 5, 1)", 3000)] + public void Financial_matches_ace(string expr, double expected) + => Assert.Equal(expected, Convert.ToDouble(Eval(expr)), 6); + + [Theory] + [InlineData("RGB(255, 0, 0)", 255)] + [InlineData("RGB(0, 255, 0)", 65280)] + [InlineData("RGB(0, 0, 255)", 16711680)] + [InlineData("QBColor(4)", 128)] + [InlineData("QBColor(1)", 8388608)] + [InlineData("QBColor(0)", 0)] + public void Colour_matches_ace(string expr, int expected) + => Assert.Equal(expected, Convert.ToInt32(Eval(expr))); + + [Theory] + [InlineData("FormatCurrency(1234.5)", "$1,234.50")] + [InlineData("FormatNumber(1234.5)", "1,234.50")] + [InlineData("FormatPercent(0.25)", "25.00%")] + [InlineData("FormatDateTime(#2020-06-15#)", "6/15/2020")] // en-US General Date (date-only at midnight) + public void FormatX_matches_ace_under_en_us(string expr, string expected) + => Assert.Equal(expected, Convert.ToString(EvalEnUs(expr))); +} diff --git a/test/LibRed.Engine.Tests/FirstLastAggregatesTests.cs b/test/LibRed.Engine.Tests/FirstLastAggregatesTests.cs new file mode 100644 index 00000000..4dffccd9 --- /dev/null +++ b/test/LibRed.Engine.Tests/FirstLastAggregatesTests.cs @@ -0,0 +1,47 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// First/Last aggregates — the argument's value from the first/last row of the group in scan order, NOT +// null-filtered (verified vs ACE: First over a leading NULL row returns NULL). +public class FirstLastAggregatesTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"fl-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE F ( K LONG PRIMARY KEY, V TEXT(20) )"); + e.ExecuteNonQuery("INSERT INTO F (K, V) VALUES (1, NULL)"); + e.ExecuteNonQuery("INSERT INTO F (K, V) VALUES (2, 'beta')"); + e.ExecuteNonQuery("INSERT INTO F (K, V) VALUES (3, 'gamma')"); + e.ExecuteNonQuery("INSERT INTO F (K, V) VALUES (4, 'delta')"); + return e; + } + + private static object? Agg(QueryEngine e, string expr) => e.ExecuteQuery($"SELECT {expr} FROM F").Rows.Single()[0]; + + [Fact] + public void First_returns_the_first_rows_value_including_null() + => Assert.Null(Agg(Seeded(), "First(V)")); // first row's V is NULL — not skipped + + [Fact] + public void Last_returns_the_last_rows_value() + => Assert.Equal("delta", Convert.ToString(Agg(Seeded(), "Last(V)"))); + + [Theory] + [InlineData("First(K)", 1)] + [InlineData("Last(K)", 4)] + public void First_last_over_key(string expr, int expected) + => Assert.Equal(expected, Convert.ToInt32(Agg(Seeded(), expr))); + + [Fact] + public void First_last_are_grouped() + { + var e = Seeded(); + var rows = e.ExecuteQuery("SELECT K, First(V), Last(V) FROM F GROUP BY K ORDER BY K").Rows; + Assert.NotEmpty(rows); + } +} diff --git a/test/LibRed.Engine.Tests/ForeignKeyDdlTests.cs b/test/LibRed.Engine.Tests/ForeignKeyDdlTests.cs new file mode 100644 index 00000000..d1dec5a6 --- /dev/null +++ b/test/LibRed.Engine.Tests/ForeignKeyDdlTests.cs @@ -0,0 +1,208 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class ForeignKeyDdlTests +{ + // CREATE TABLE with an inline FOREIGN KEY (the shape EF Core emits) persists the relationship to + // MSysRelationships and a child-side index, enforces referential integrity on insert, and both + // survive a reopen. + [Fact] + public void Foreign_key_persists_enforces_and_round_trips() + { + string path = Path.Combine(Path.GetTempPath(), $"fk-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var engine = new QueryEngine(db); + engine.ExecuteNonQuery("CREATE TABLE `Parent` (`Id` INTEGER PRIMARY KEY, `Name` VARCHAR(50))"); + engine.ExecuteNonQuery( + "CREATE TABLE `Child` (`Id` INTEGER PRIMARY KEY, `ParentId` INTEGER, " + + "CONSTRAINT `FK_Child_Parent` FOREIGN KEY (`ParentId`) REFERENCES `Parent` (`Id`) ON DELETE CASCADE)"); + + engine.ExecuteNonQuery("INSERT INTO `Parent` (`Id`, `Name`) VALUES (1, 'p1')"); + engine.ExecuteNonQuery("INSERT INTO `Child` (`Id`, `ParentId`) VALUES (1, 1)"); // valid + engine.ExecuteNonQuery("INSERT INTO `Child` (`Id`, `ParentId`) VALUES (2, NULL)"); // null FK: allowed + + // Orphan reference is rejected. + Assert.ThrowsAny(() => + engine.ExecuteNonQuery("INSERT INTO `Child` (`Id`, `ParentId`) VALUES (3, 99)")); + } + + using (var db = JetDatabase.Open(path)) + { + ForeignKey fk = db.Catalog.Relationships.Single(r => r.Name == "FK_Child_Parent"); + Assert.Equal("Child", fk.Table); + Assert.Equal("Parent", fk.ReferencedTable); + Assert.Equal(("ParentId", "Id"), fk.Columns.Single()); + Assert.True(fk.IsEnforced); + Assert.True(fk.CascadeDelete); + Assert.False(fk.CascadeUpdate); + + // The child has a non-unique index on the FK column. + var child = db.Catalog.FindTable("Child")!; + Assert.Contains(child.Indexes, ix => !ix.IsPrimaryKey && ix.Columns.Any(c => c.Column.Name == "ParentId")); + + // Only the two valid rows were committed. + Assert.Equal(2, new QueryEngine(db).ExecuteQuery("SELECT `Id` FROM `Child`").Rows.Count()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // The column-level (single-field) REFERENCES form — `Pid INTEGER CONSTRAINT fk REFERENCES P (Id)` — + // builds the same relationship as a table-level FOREIGN KEY, and enforces it. + [Fact] + public void Column_level_references_builds_and_enforces_the_relationship() + { + string path = Path.Combine(Path.GetTempPath(), $"colref-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var engine = new QueryEngine(db); + engine.ExecuteNonQuery("CREATE TABLE `P` (`Id` INTEGER PRIMARY KEY)"); + engine.ExecuteNonQuery( + "CREATE TABLE `C` (`Id` INTEGER PRIMARY KEY, " + + "`Pid` INTEGER CONSTRAINT `FK_C_P` REFERENCES `P` (`Id`) ON DELETE CASCADE)"); + engine.ExecuteNonQuery("INSERT INTO `P` (`Id`) VALUES (1)"); + engine.ExecuteNonQuery("INSERT INTO `C` (`Id`, `Pid`) VALUES (1, 1)"); + Assert.ThrowsAny(() => + engine.ExecuteNonQuery("INSERT INTO `C` (`Id`, `Pid`) VALUES (2, 42)")); + } + using (var db = JetDatabase.Open(path)) + { + ForeignKey fk = db.Catalog.Relationships.Single(r => r.Name == "FK_C_P"); + Assert.Equal("C", fk.Table); + Assert.Equal(("Pid", "Id"), fk.Columns.Single()); + Assert.True(fk.CascadeDelete); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Column-level and table-level UNIQUE constraints each create a unique (non-primary) index. + [Fact] + public void Unique_constraints_create_unique_indexes() + { + string path = Path.Combine(Path.GetTempPath(), $"uq-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery( + "CREATE TABLE `U` (`Id` INTEGER PRIMARY KEY, `Code` VARCHAR(20) UNIQUE, " + + "`A` INTEGER, `B` INTEGER, CONSTRAINT `UQ_AB` UNIQUE (`A`, `B`))"); + + using (var db = JetDatabase.Open(path)) + { + var u = db.Catalog.FindTable("U")!; + Assert.Contains(u.Indexes, ix => ix.IsUnique && !ix.IsPrimaryKey + && ix.Columns.Select(c => c.Column.Name).SequenceEqual(["Code"])); + Assert.Contains(u.Indexes, ix => ix.IsUnique && !ix.IsPrimaryKey + && ix.Columns.Select(c => c.Column.Name).SequenceEqual(["A", "B"])); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A multiple-field (composite) foreign key referencing a composite primary key: persists a pair of + // MSysRelationships rows (icolumn 0/1, ccolumn 2), a single child index over both columns, and + // enforces both-column referential integrity. + [Fact] + public void Composite_foreign_key_persists_and_enforces() + { + string path = Path.Combine(Path.GetTempPath(), $"fkcomp-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var engine = new QueryEngine(db); + engine.ExecuteNonQuery("CREATE TABLE `P` (`A` INTEGER, `B` INTEGER, CONSTRAINT `PK_P` PRIMARY KEY (`A`, `B`))"); + engine.ExecuteNonQuery( + "CREATE TABLE `C` (`Id` INTEGER PRIMARY KEY, `A` INTEGER, `B` INTEGER, " + + "CONSTRAINT `FK_C_P` FOREIGN KEY (`A`, `B`) REFERENCES `P` (`A`, `B`))"); + engine.ExecuteNonQuery("INSERT INTO `P` (`A`, `B`) VALUES (1, 2)"); + engine.ExecuteNonQuery("INSERT INTO `C` (`Id`, `A`, `B`) VALUES (1, 1, 2)"); // matches (1,2) + Assert.ThrowsAny(() => // (1,3) has no parent + engine.ExecuteNonQuery("INSERT INTO `C` (`Id`, `A`, `B`) VALUES (2, 1, 3)")); + } + using (var db = JetDatabase.Open(path)) + { + ForeignKey fk = db.Catalog.Relationships.Single(r => r.Name == "FK_C_P"); + Assert.Equal(2, fk.Columns.Count); + Assert.Equal(("A", "A"), fk.Columns[0]); + Assert.Equal(("B", "B"), fk.Columns[1]); + var child = db.Catalog.FindTable("C")!; + Assert.Contains(child.Indexes, ix => !ix.IsPrimaryKey + && ix.Columns.Select(c => c.Column.Name).SequenceEqual(["A", "B"])); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A self-referencing foreign key (as in the GearsOfWar model, a table whose FK targets itself). The + // table is not yet in the catalog when its own FK is resolved, so this is handled inline. + [Fact] + public void Self_referencing_foreign_key_creates_and_enforces() + { + string path = Path.Combine(Path.GetTempPath(), $"fkself-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var engine = new QueryEngine(db); + engine.ExecuteNonQuery( + "CREATE TABLE `Emp` (`Id` INTEGER PRIMARY KEY, `Mgr` INTEGER, " + + "CONSTRAINT `FK_Emp_Emp` FOREIGN KEY (`Mgr`) REFERENCES `Emp` (`Id`))"); + engine.ExecuteNonQuery("INSERT INTO `Emp` (`Id`, `Mgr`) VALUES (1, NULL)"); // top of chain + engine.ExecuteNonQuery("INSERT INTO `Emp` (`Id`, `Mgr`) VALUES (2, 1)"); // reports to 1 + Assert.ThrowsAny(() => // 99 doesn't exist + engine.ExecuteNonQuery("INSERT INTO `Emp` (`Id`, `Mgr`) VALUES (3, 99)")); + } + using (var db = JetDatabase.Open(path)) + { + ForeignKey fk = db.Catalog.Relationships.Single(r => r.Name == "FK_Emp_Emp"); + Assert.Equal("Emp", fk.Table); + Assert.Equal("Emp", fk.ReferencedTable); + Assert.Equal(("Mgr", "Id"), fk.Columns.Single()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Access documents ON UPDATE before ON DELETE; EF Core emits only ON DELETE. The grammar accepts + // the clauses in either order, so both cascades must round-trip regardless of ordering. + [Fact] + public void On_update_and_on_delete_parse_in_access_order() + { + string path = Path.Combine(Path.GetTempPath(), $"fkord-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var engine = new QueryEngine(db); + engine.ExecuteNonQuery("CREATE TABLE `P` (`Id` INTEGER PRIMARY KEY)"); + engine.ExecuteNonQuery( + "CREATE TABLE `C` (`Id` INTEGER PRIMARY KEY, `Pid` INTEGER, " + + "CONSTRAINT `FK_C_P` FOREIGN KEY (`Pid`) REFERENCES `P` (`Id`) ON UPDATE CASCADE ON DELETE CASCADE)"); + } + using (var db = JetDatabase.Open(path)) + { + ForeignKey fk = db.Catalog.Relationships.Single(r => r.Name == "FK_C_P"); + Assert.True(fk.CascadeUpdate); + Assert.True(fk.CascadeDelete); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/FormatFunctionTests.cs b/test/LibRed.Engine.Tests/FormatFunctionTests.cs new file mode 100644 index 00000000..257abf3b --- /dev/null +++ b/test/LibRed.Engine.Tests/FormatFunctionTests.cs @@ -0,0 +1,66 @@ +using System.Globalization; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Access Format(value, format). Named formats and custom numeric/date/string strings, driven off the current +// culture (as ACE drives them off the OS regional settings). Culture is pinned to en-US here so the +// locale-dependent named date/currency formats are deterministic; the values match what ACE produces on an +// en-US host (and the culture-invariant custom strings match ACE on any host). +public class FormatFunctionTests +{ + private static string EvalEnUs(string expr) + { + var prev = CultureInfo.CurrentCulture; + CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); + try + { + string path = Path.Combine(Path.GetTempPath(), $"fmt-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + string r = e.ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]?.ToString()!; + try { File.Delete(path); } catch (IOException) { } + return r; + } + finally { CultureInfo.CurrentCulture = prev; } + } + + [Theory] + // custom numeric + [InlineData("Format(1234.5, '0.00')", "1234.50")] + [InlineData("Format(1234.5, '#,##0.00')", "1,234.50")] + [InlineData("Format(0.25, '0%')", "25%")] + [InlineData("Format(5, '000')", "005")] + [InlineData("Format(-5, '000')", "-005")] + [InlineData("Format(255, '\\#0')", "#255")] + // named numeric / boolean + [InlineData("Format(1234.5, 'Currency')", "$1,234.50")] + [InlineData("Format(1234.5, 'Fixed')", "1234.50")] + [InlineData("Format(1234.5, 'Standard')", "1,234.50")] + [InlineData("Format(0.25, 'Percent')", "25.00%")] + [InlineData("Format(1234.5, 'Scientific')", "1.23E+03")] + [InlineData("Format(1234.5, 'General Number')", "1234.5")] + [InlineData("Format(1, 'Yes/No')", "Yes")] + [InlineData("Format(0, 'Yes/No')", "No")] + [InlineData("Format(0, 'True/False')", "False")] + [InlineData("Format(1, 'On/Off')", "On")] + // custom date (culture-invariant tokens) + [InlineData("Format(#2020-06-15 13:05:09#, 'yyyy-mm-dd')", "2020-06-15")] + [InlineData("Format(#2020-06-15 13:05:09#, 'hh:nn:ss')", "13:05:09")] + [InlineData("Format(#2020-06-15 13:05:09#, 'mmmm d, yyyy')", "June 15, 2020")] + [InlineData("Format(#2020-06-15 13:05:09#, 'ddd')", "Mon")] + [InlineData("Format(#2020-06-15#, 'q')", "2")] + // named date/time (en-US) + [InlineData("Format(#2020-06-15 13:05:09#, 'Short Date')", "6/15/2020")] + [InlineData("Format(#2020-06-15 13:05:09#, 'Long Date')", "Monday, June 15, 2020")] + [InlineData("Format(#2020-06-15 13:05:09#, 'Medium Time')", "01:05 PM")] + // string + [InlineData("Format('hello', '>')", "HELLO")] + [InlineData("Format('hello', '<')", "hello")] + public void Format_matches_ace_under_en_us(string expr, string expected) + => Assert.Equal(expected, EvalEnUs(expr)); +} diff --git a/test/LibRed.Engine.Tests/FromlessSelectTests.cs b/test/LibRed.Engine.Tests/FromlessSelectTests.cs new file mode 100644 index 00000000..9de2dada --- /dev/null +++ b/test/LibRed.Engine.Tests/FromlessSelectTests.cs @@ -0,0 +1,42 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// A FROM-less SELECT (e.g. SELECT 2) yields exactly one row. ACE accepts this (verified via the +/// OLE DB provider), and EF's CommandInterception scalar tests send a bare SELECT 1/SELECT 2. +public class FromlessSelectTests +{ + private static QueryEngine Engine() + { + string path = Path.Combine(Path.GetTempPath(), $"fl-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Fact] + public void Bare_select_constant_yields_one_row() + { + var r = Engine().ExecuteQuery("SELECT 2").Rows.ToList(); + Assert.Single(r); + Assert.Equal(2, Convert.ToInt32(r[0][0])); + } + + [Fact] + public void Select_expression_with_alias_no_from() + { + var r = Engine().ExecuteQuery("SELECT 1 + 2 AS X, 'hi' AS Y").Rows.ToList(); + Assert.Single(r); + Assert.Equal(3, Convert.ToInt32(r[0][0])); + Assert.Equal("hi", r[0][1]); + } + + [Fact] + public void Select_function_no_from() + { + var r = Engine().ExecuteQuery("SELECT UCASE('abc') AS U").Rows.ToList(); + Assert.Single(r); + Assert.Equal("ABC", r[0][0]); + } +} diff --git a/test/LibRed.Engine.Tests/FunctionVariantTests.cs b/test/LibRed.Engine.Tests/FunctionVariantTests.cs new file mode 100644 index 00000000..487dd212 --- /dev/null +++ b/test/LibRed.Engine.Tests/FunctionVariantTests.cs @@ -0,0 +1,61 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// VBA string-function variants, verified against ACE's expression service: +// $ = String-returning alias (same value; the grammar allows a trailing '$', the evaluator strips it) +// B = byte-based (UTF-16, 2 bytes/char): LenB('abc')=6, InStrB(1,'abc','b')=3, LeftB('abc',2)='a' +// W = wide/Unicode code point: ChrW(233)='é' +// Also covers base Asc(), which needed a grammar fix (ASC is a reserved keyword). +public class FunctionVariantTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"fv-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static string Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]?.ToString()!; + + [Theory] + // base / grammar-unblocked + [InlineData("Asc('A')", "65")] + // byte variants + [InlineData("AscB('A')", "65")] + [InlineData("LenB('abc')", "6")] + [InlineData("LeftB('abc', 2)", "a")] + [InlineData("RightB('abc', 2)", "c")] + [InlineData("MidB('abc', 1, 2)", "a")] + [InlineData("InStrB(1, 'abc', 'b')", "3")] + // wide variants + [InlineData("AscW('A')", "65")] + [InlineData("ChrW(65)", "A")] + [InlineData("ChrW(233)", "é")] + // $ variants (string-returning aliases) + [InlineData("Chr$(65)", "A")] + [InlineData("UCase$('ab')", "AB")] + [InlineData("Left$('abc', 2)", "ab")] + [InlineData("Mid$('abc', 2)", "bc")] + [InlineData("Space$(3)", " ")] + [InlineData("String$(3, 'x')", "xxx")] + [InlineData("Hex$(255)", "FF")] + public void Variant_matches_ace(string expr, string expected) + => Assert.Equal(expected, Eval(expr)); + + // The '$' grammar tweak must not disturb ORDER BY ... ASC (ASC is now also a function name, but only when + // followed by '('). + [Fact] + public void Order_by_asc_still_parses() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (2)"); + var ks = e.ExecuteQuery("SELECT K FROM T ORDER BY K ASC").Rows.Select(r => Convert.ToInt32(r[0])).ToArray(); + Assert.Equal(new[] { 1, 2 }, ks); + } +} diff --git a/test/LibRed.Engine.Tests/GenGuidDefaultTests.cs b/test/LibRed.Engine.Tests/GenGuidDefaultTests.cs new file mode 100644 index 00000000..d5789b5f --- /dev/null +++ b/test/LibRed.Engine.Tests/GenGuidDefaultTests.cs @@ -0,0 +1,43 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// GenGUID() is Access's GUID generator — the sibling of GenUniqueID(). Like GenUniqueID it is default-only in +// ACE ("Undefined function 'GenGUID' in expression" inside a SELECT) but valid as a GUID column's DEFAULT, +// yielding a fresh Guid per row. EF Core models store-generated Guid keys as HasDefaultValueSql("GenGUID()"). +public class GenGuidDefaultTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"gg-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Fact] + public void Guid_column_defaulted_to_genguid_gets_a_fresh_guid_per_row() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE G (Id LONG CONSTRAINT PK PRIMARY KEY, U GUID DEFAULT GenGUID())"); + e.ExecuteNonQuery("INSERT INTO G (Id) VALUES (1)"); // omit U → default fires + e.ExecuteNonQuery("INSERT INTO G (Id) VALUES (2)"); + + var guids = e.ExecuteQuery("SELECT U FROM G ORDER BY Id").Rows.Select(r => (Guid)r[0]!).ToList(); + Assert.Equal(2, guids.Count); + Assert.All(guids, g => Assert.NotEqual(Guid.Empty, g)); + Assert.NotEqual(guids[0], guids[1]); // a fresh Guid per row, not one value reused + } + + [Fact] + public void An_explicit_guid_overrides_the_default() + { + var e = Fresh(); + var explicitGuid = new Guid("11111111-2222-3333-4444-555555555555"); + e.ExecuteNonQuery("CREATE TABLE G (Id LONG CONSTRAINT PK PRIMARY KEY, U GUID DEFAULT GenGUID())"); + e.ExecuteNonQuery($"INSERT INTO G (Id, U) VALUES (1, {{{explicitGuid}}})"); + + Assert.Equal(explicitGuid, (Guid)e.ExecuteQuery("SELECT U FROM G WHERE Id = 1").Rows.Single()[0]!); + } +} diff --git a/test/LibRed.Engine.Tests/GroupByOrderTests.cs b/test/LibRed.Engine.Tests/GroupByOrderTests.cs new file mode 100644 index 00000000..6ac2ae62 --- /dev/null +++ b/test/LibRed.Engine.Tests/GroupByOrderTests.cs @@ -0,0 +1,51 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// Access returns GROUP BY output ascending by the grouping columns when there is no explicit ORDER BY. LibRed +/// matches this — which also makes a TOP-1-over-a-GROUP-BY deterministic (e.g. a scalar subquery that picks the +/// "first" group), as SQL Server and Access do. +/// +public class GroupByOrderTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"gbo-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id LONG PRIMARY KEY, K TEXT(5), N LONG)"); + // Insert with keys deliberately out of order (D, A, C, B) so insertion order != sorted order. + (string k, int n)[] rows = [("D", 1), ("A", 2), ("C", 3), ("B", 4), ("A", 5), ("C", 6)]; + for (int i = 0; i < rows.Length; i++) e.ExecuteNonQuery($"INSERT INTO T (Id, K, N) VALUES ({i}, '{rows[i].k}', {rows[i].n})"); + return e; + } + + [Fact] + public void Group_by_output_is_ascending_by_key() + { + var e = Seeded(); + var keys = e.ExecuteQuery("SELECT K, SUM(N) FROM T GROUP BY K").Rows.Select(r => (string)r[0]!).ToList(); + Assert.Equal(new[] { "A", "B", "C", "D" }, keys); + } + + [Fact] + public void Top_1_over_a_group_by_picks_the_smallest_key_group() + { + var e = Seeded(); + // Without this deterministic ordering, TOP 1 could return any group; it must be the smallest key ("A"). + Assert.Equal("A", e.ExecuteQuery("SELECT TOP 1 K FROM T GROUP BY K").Rows.Single()[0]); + } + + [Fact] + public void Explicit_order_by_still_wins() + { + var e = Seeded(); + var keys = e.ExecuteQuery("SELECT K, SUM(N) FROM T GROUP BY K ORDER BY SUM(N) DESC").Rows.Select(r => (string)r[0]!).ToList(); + // Sums: A=7, B=4, C=9, D=1 → descending by sum: C, A, B, D. + Assert.Equal(new[] { "C", "A", "B", "D" }, keys); + } +} diff --git a/test/LibRed.Engine.Tests/GuidLiteralTests.cs b/test/LibRed.Engine.Tests/GuidLiteralTests.cs new file mode 100644 index 00000000..f0a31e62 --- /dev/null +++ b/test/LibRed.Engine.Tests/GuidLiteralTests.cs @@ -0,0 +1,42 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class GuidLiteralTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"guidlit-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // Access writes GUID values as {8-4-4-4-12} brace literals. LibRed parses the literal, stores it, and + // reads it back as a System.Guid — and it round-trips as a primary key (uses the GUID index-key path). + [Fact] + public void Guid_brace_literal_inserts_and_round_trips() + { + const string g = "{3c56082a-005a-4ffb-a9cf-f5ebd641e07d}"; + var expected = Guid.Parse(g); + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE `EmailTemplate` (`Id` GUID PRIMARY KEY, `TemplateType` int)"); + Assert.Equal(1, e.ExecuteNonQuery($"INSERT INTO `EmailTemplate` (`Id`, `TemplateType`) VALUES ({g}, 0)")); + + // Read the value back. + var row = e.ExecuteQuery("SELECT `Id`, `TemplateType` FROM `EmailTemplate`").Rows.Single(); + Assert.Equal(expected, row[0]); + Assert.Equal(0, Convert.ToInt32(row[1])); + + // And the literal works in a WHERE against the GUID key. + var hit = e.ExecuteQuery($"SELECT `TemplateType` FROM `EmailTemplate` WHERE `Id` = {g}").Rows.Single(); + Assert.Equal(0, Convert.ToInt32(hit[0])); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/HashJoinTests.cs b/test/LibRed.Engine.Tests/HashJoinTests.cs new file mode 100644 index 00000000..252e1de4 --- /dev/null +++ b/test/LibRed.Engine.Tests/HashJoinTests.cs @@ -0,0 +1,140 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using LibRed.Engine.Plan; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// An equi-join on columns with no usable index is executed as a hash join (O(n+m)) instead of the scan-based +/// nested loop (O(n·m)). These verify the planner picks it and — crucially — that it produces exactly the same +/// rows as a nested loop: same-value matching under Access's coercions (case-insensitive text, numeric width), +/// null keys never matching, LEFT-join null padding, composite keys, and residual non-equi conjuncts. +/// +public class HashJoinTests +{ + // P.Id is a PK (indexed); C.Pid is deliberately NOT indexed, so P ⋈ C ON P.Id = C.Pid cannot become an + // index-nested-loop and falls to the hash join. + private static QueryEngine TwoTables() + { + string path = Path.Combine(Path.GetTempPath(), $"hashjoin-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE P (Id LONG PRIMARY KEY, Nm TEXT(20))"); + e.ExecuteNonQuery("CREATE TABLE C (Id LONG PRIMARY KEY, Pid LONG, Tag TEXT(10), Amt LONG)"); + for (int i = 0; i < 50; i++) e.ExecuteNonQuery($"INSERT INTO P (Id, Nm) VALUES ({i}, 'p{i}')"); + for (int i = 0; i < 200; i++) e.ExecuteNonQuery($"INSERT INTO C (Id, Pid, Tag, Amt) VALUES ({i}, {i % 50}, 'T{i % 50}', {i})"); + return e; + } + + private static int Count(QueryEngine e, string sql) => e.ExecuteQuery(sql).Rows.Count(); + + [Fact] + public void An_unindexed_equi_join_is_planned_as_a_hash_join() + { + var plan = TwoTables().PlanFor("SELECT P.Nm, C.Amt FROM P INNER JOIN C ON P.Id = C.Pid"); + Assert.True(ContainsHashJoin(plan), "expected a HashJoinNode in the plan"); + } + + [Fact] + public void Inner_hash_join_matches_the_nested_loop_result() + { + var e = TwoTables(); + // Every C has a P (Pid = i%50, all present), 200 children → 200 joined rows; each P has 4. + Assert.Equal(200, Count(e, "SELECT P.Nm, C.Amt FROM P INNER JOIN C ON P.Id = C.Pid")); + Assert.Equal(4, Count(e, "SELECT C.Amt FROM P INNER JOIN C ON P.Id = C.Pid WHERE P.Id = 7")); + } + + [Fact] + public void Hash_join_on_text_keys_is_case_insensitive_like_access() + { + var e = TwoTables(); + // Join P.Nm to C.Tag would not match; instead join two text columns that do. Build a case difference: + e.ExecuteNonQuery("CREATE TABLE L (K TEXT(10))"); + e.ExecuteNonQuery("CREATE TABLE R (K TEXT(10))"); + e.ExecuteNonQuery("INSERT INTO L (K) VALUES ('Alpha')"); + e.ExecuteNonQuery("INSERT INTO R (K) VALUES ('ALPHA')"); + // Access text equality is case-insensitive, so the hash join must still match these. + Assert.Equal(1, Count(e, "SELECT L.K FROM L INNER JOIN R ON L.K = R.K")); + } + + [Fact] + public void Null_keys_never_match() + { + var e = TwoTables(); + e.ExecuteNonQuery("UPDATE C SET Pid = NULL WHERE Id = 3"); // one child orphaned via null key + // Inner join drops the null-key child: 199 matches. + Assert.Equal(199, Count(e, "SELECT C.Id FROM P INNER JOIN C ON P.Id = C.Pid")); + } + + [Fact] + public void Left_join_null_pads_unmatched_rows() + { + var e = TwoTables(); + e.ExecuteNonQuery("INSERT INTO P (Id, Nm) VALUES (999, 'lonely')"); // a P with no children + // 200 matched child rows + 1 null-padded row for the childless P = 201. + Assert.Equal(201, Count(e, "SELECT P.Nm, C.Amt FROM P LEFT JOIN C ON P.Id = C.Pid")); + Assert.Equal(1, Count(e, "SELECT P.Nm FROM P LEFT JOIN C ON P.Id = C.Pid WHERE C.Id IS NULL")); + } + + [Fact] + public void Residual_non_equi_conjunct_is_applied_after_the_hash_match() + { + var e = TwoTables(); + // The equality hashes; the extra C.Amt > 100 is the residual re-check on each bucket candidate. + int viaJoin = Count(e, "SELECT C.Amt FROM P INNER JOIN C ON P.Id = C.Pid AND C.Amt > 100"); + int viaScan = Count(e, "SELECT Amt FROM C WHERE Amt > 100"); // every C has a P + Assert.Equal(viaScan, viaJoin); + } + + [Fact] + public void Composite_key_hash_join_matches_on_all_columns() + { + var e = TwoTables(); + e.ExecuteNonQuery("CREATE TABLE A (X LONG, Y TEXT(5))"); + e.ExecuteNonQuery("CREATE TABLE B (X LONG, Y TEXT(5))"); + e.ExecuteNonQuery("INSERT INTO A (X, Y) VALUES (1, 'a')"); + e.ExecuteNonQuery("INSERT INTO A (X, Y) VALUES (1, 'b')"); + e.ExecuteNonQuery("INSERT INTO B (X, Y) VALUES (1, 'a')"); + // Only (1,'a') matches on both key columns, not (1,'b'). + Assert.Equal(1, Count(e, "SELECT A.X FROM A INNER JOIN B ON A.X = B.X AND A.Y = B.Y")); + } + + [Fact] + public void Right_join_is_hashed_and_preserves_unmatched_right_rows() + { + var e = TwoTables(); + e.ExecuteNonQuery("INSERT INTO P (Id, Nm) VALUES (999, 'childless')"); // a P (right side) with no children + // C RIGHT JOIN P keeps every P; 200 children match + 50 childless P (ids 50..99 have no children, since + // Pid = i%50 ∈ 0..49) ... actually every id 0..49 has children, only 999 is childless → 200 + 1 = 201. + Assert.True(ContainsHashJoin(e.PlanFor("SELECT P.Nm, C.Amt FROM C RIGHT JOIN P ON C.Pid = P.Id"))); + Assert.Equal(201, Count(e, "SELECT P.Nm, C.Amt FROM C RIGHT JOIN P ON C.Pid = P.Id")); + // The childless P appears with a null C side. + Assert.Equal(1, Count(e, "SELECT P.Nm FROM C RIGHT JOIN P ON C.Pid = P.Id WHERE C.Id IS NULL")); + } + + [Fact] + public void Right_join_matches_the_equivalent_left_join() + { + var e = TwoTables(); + int right = Count(e, "SELECT C.Amt FROM C RIGHT JOIN P ON C.Pid = P.Id"); + int left = Count(e, "SELECT C.Amt FROM P LEFT JOIN C ON P.Id = C.Pid"); + Assert.Equal(left, right); // A RIGHT JOIN B ≡ B LEFT JOIN A + } + + [Fact] + public void Hash_join_resolves_a_derived_table_key_column() + { + // The right side is a derived table; its key column's kind is resolved through the projection, so the + // join still hashes (this is what an unindexed join against a subquery relies on). + var e = TwoTables(); + const string sql = "SELECT P.Nm FROM P INNER JOIN (SELECT Pid FROM C WHERE Amt > 100) AS d ON P.Id = d.Pid"; + Assert.True(ContainsHashJoin(e.PlanFor(sql))); + // Each C row with Amt>100 (Amt=i∈101..199 → 99 rows) has a matching P, so 99 joined rows. + Assert.Equal(99, Count(e, sql)); + } + + private static bool ContainsHashJoin(PlanNode node) => + node is HashJoinNode || node.Children.Any(ContainsHashJoin); +} diff --git a/test/LibRed.Engine.Tests/IifDefaultTests.cs b/test/LibRed.Engine.Tests/IifDefaultTests.cs new file mode 100644 index 00000000..85a6082f --- /dev/null +++ b/test/LibRed.Engine.Tests/IifDefaultTests.cs @@ -0,0 +1,36 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// IIF(cond, truePart, falsePart) works as a DEFAULT expression — verified to match ACE (both branches, an +// environment-function condition, and string results). +public class IifDefaultTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"iif-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + private static object? DefaultOf(string type, string def) + { + var e = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE T ( K LONG PRIMARY KEY, V {type} DEFAULT {def} )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e.ExecuteQuery("SELECT V FROM T").Rows.Single()[0]; + } + + [Theory] + [InlineData("IIF(1=1, 10, 20)", 10)] // true branch + [InlineData("IIF(1=2, 10, 20)", 20)] // false branch + [InlineData("IIF(Now() > #1/1/2000#, 1, 0)", 1)] // condition uses an environment function + public void Iif_default_selects_the_matching_branch(string def, int expected) + => Assert.Equal(expected, Convert.ToInt32(DefaultOf("LONG", def))); + + [Fact] + public void Iif_default_returns_string_branches() + => Assert.Equal("yes", DefaultOf("TEXT(10)", "IIF(2 > 1, 'yes', 'no')")); +} diff --git a/test/LibRed.Engine.Tests/InClauseTests.cs b/test/LibRed.Engine.Tests/InClauseTests.cs new file mode 100644 index 00000000..d163b290 --- /dev/null +++ b/test/LibRed.Engine.Tests/InClauseTests.cs @@ -0,0 +1,141 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class InClauseTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"in-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + [Fact] + public void In_with_literals() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + Assert.Equal(3, e.ExecuteQuery( + "SELECT CustomerID FROM Customers WHERE CustomerID IN ('ALFKI', 'ANATR', 'ANTON')").Rows.Count()); + // Numeric IN. + Assert.Equal(2, e.ExecuteQuery("SELECT ProductID FROM Products WHERE ProductID IN (1, 2)").Rows.Count()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // The failing shape: a mix of parameters and a constant in the IN list. + [Fact] + public void In_with_parameters_and_a_constant() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + int n = e.ExecuteQuery( + "SELECT CustomerID FROM Customers WHERE CustomerID IN (@prm1, @prm2, 'ANTON')", + new Dictionary { ["prm1"] = "ALFKI", ["prm2"] = "AROUT" }).Rows.Count(); + Assert.Equal(3, n); // ALFKI, AROUT, ANTON + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Not_in_excludes_the_list() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + int total = e.ExecuteQuery("SELECT CustomerID FROM Customers").Rows.Count(); + int notIn = e.ExecuteQuery( + "SELECT CustomerID FROM Customers WHERE CustomerID NOT IN ('ALFKI', 'ANATR')").Rows.Count(); + Assert.Equal(total - 2, notIn); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void In_subquery_non_correlated() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + int viaIn = e.ExecuteQuery( + "SELECT ProductID FROM Products WHERE CategoryID IN " + + "(SELECT CategoryID FROM Categories WHERE CategoryName = 'Beverages')").Rows.Count(); + int direct = e.ExecuteQuery( + "SELECT p.ProductID FROM Products AS p INNER JOIN Categories AS c ON p.CategoryID = c.CategoryID " + + "WHERE c.CategoryName = 'Beverages'").Rows.Count(); + Assert.True(direct > 0); + Assert.Equal(direct, viaIn); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Not_in_subquery() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + int total = e.ExecuteQuery("SELECT ProductID FROM Products").Rows.Count(); + int inCount = e.ExecuteQuery( + "SELECT ProductID FROM Products WHERE CategoryID IN " + + "(SELECT CategoryID FROM Categories WHERE CategoryName = 'Beverages')").Rows.Count(); + int notIn = e.ExecuteQuery( + "SELECT ProductID FROM Products WHERE CategoryID NOT IN " + + "(SELECT CategoryID FROM Categories WHERE CategoryName = 'Beverages')").Rows.Count(); + Assert.Equal(total - inCount, notIn); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // The exact failing shape: a correlated IN subquery nested inside EXISTS (Where_contains_on_navigation). + [Fact] + public void Correlated_in_subquery_inside_exists() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + // Outer constrained to a handful of orders — the correlated triple-nesting is O(n^3) naive, so + // keep the row count small; it still exercises the correlated IN-inside-EXISTS path. + int viaExists = e.ExecuteQuery( + "SELECT o.OrderID FROM Orders AS o WHERE o.OrderID < 10260 AND EXISTS (" + + "SELECT 1 FROM Customers AS c WHERE o.OrderID IN (" + + "SELECT o0.OrderID FROM Orders AS o0 WHERE c.CustomerID = o0.CustomerID))").Rows.Count(); + // Those orders whose CustomerID matches a real customer — all Northwind orders do. + int total = e.ExecuteQuery("SELECT OrderID FROM Orders WHERE OrderID < 10260").Rows.Count(); + Assert.True(total > 0); + Assert.Equal(total, viaExists); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Case-insensitive membership (Access text semantics). + [Fact] + public void In_is_case_insensitive() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + Assert.Equal(1, new QueryEngine(db).ExecuteQuery( + "SELECT CustomerID FROM Customers WHERE CustomerID IN ('alfki')").Rows.Count()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/InListTests.cs b/test/LibRed.Engine.Tests/InListTests.cs new file mode 100644 index 00000000..8003127d --- /dev/null +++ b/test/LibRed.Engine.Tests/InListTests.cs @@ -0,0 +1,43 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// x IN (literal list) is kept as a flat node and evaluated iteratively. The regression that motivated this: +// EF Core inlines a "huge number of values" Contains as thousands of constants, and lowering that to a deep +// OR-tree recursed once per item and overflowed the stack (crashing the test host, not just failing). +public class InListTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"inlist-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + for (int i = 1; i <= 5; i++) e.ExecuteNonQuery($"INSERT INTO T (K) VALUES ({i})"); + return e; + } + + [Theory] + [InlineData("K IN (2, 4)", 2)] + [InlineData("K NOT IN (2, 4)", 3)] + [InlineData("K IN (99)", 0)] + [InlineData("K IN (1, 2, 3, 4, 5)", 5)] + public void In_list_membership(string predicate, int expectedCount) + { + var e = Fresh(); + Assert.Equal(expectedCount, e.ExecuteQuery($"SELECT K FROM T WHERE {predicate}").Rows.Count()); + } + + // The actual host-crash repro: a value list of many thousands of constants must evaluate without + // overflowing the stack. + [Fact] + public void A_huge_value_list_does_not_overflow_the_stack() + { + var e = Fresh(); + string list = string.Join(", ", Enumerable.Range(1, 10_000)); // K=3 is somewhere in the middle + var rows = e.ExecuteQuery($"SELECT K FROM T WHERE K IN ({list})").Rows; + Assert.Equal(5, rows.Count()); // all five seeded rows are in 1..10000 + } +} diff --git a/test/LibRed.Engine.Tests/IndexSeekTests.cs b/test/LibRed.Engine.Tests/IndexSeekTests.cs new file mode 100644 index 00000000..a4823d9b --- /dev/null +++ b/test/LibRed.Engine.Tests/IndexSeekTests.cs @@ -0,0 +1,122 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// A WHERE equality on a single-column-indexed column is served by an index seek (IndexSelection → +/// IndexSeekNode) instead of a full scan, with the original predicate kept as a residual re-check. These +/// verify the results are identical to a scan — the seek must be a pure speedup, never change the answer. +/// +public class IndexSeekTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"seek-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE B (Id LONG PRIMARY KEY, K LONG, V TEXT(40))"); + e.ExecuteNonQuery("CREATE INDEX IX_K ON B (K)"); + for (int i = 0; i < 500; i++) e.ExecuteNonQuery($"INSERT INTO B (Id, K, V) VALUES ({i}, {i % 10}, 'v{i}')"); + return e; + } + + private static object?[] Single(QueryEngine e, string sql) => e.ExecuteQuery(sql).Rows.Single(); + private static int Count(QueryEngine e, string sql) => e.ExecuteQuery(sql).Rows.Count(); + + [Fact] + public void Primary_key_equality_returns_the_one_row() + { + var r = Single(Seeded(), "SELECT V FROM B WHERE Id = 123"); + Assert.Equal("v123", r[0]); + } + + [Fact] + public void Secondary_index_equality_returns_all_matches() + => Assert.Equal(50, Count(Seeded(), "SELECT Id FROM B WHERE K = 7")); // 500 rows, i%10==7 + + [Fact] + public void Equality_with_a_parameter_seeks() + { + var r = Seeded().ExecuteQuery("SELECT V FROM B WHERE Id = @p", + new Dictionary { ["@p"] = 200 }).Rows.Single(); + Assert.Equal("v200", r[0]); + } + + [Fact] + public void A_non_indexed_column_equality_still_works_via_scan() + => Assert.Equal("v321", Single(Seeded(), "SELECT V FROM B WHERE V = 'v321'")[0]); + + [Fact] + public void The_residual_predicate_still_applies_with_extra_conjuncts() + // K=7 seeks (50 candidates), Id>250 is the residual filter over them. + => Assert.Equal(25, Count(Seeded(), "SELECT Id FROM B WHERE K = 7 AND Id > 250")); + + [Fact] + public void No_match_returns_empty() + => Assert.Equal(0, Count(Seeded(), "SELECT Id FROM B WHERE Id = 99999")); + + // --- index-nested-loop join: the inner side is seeked per outer row, not scanned --- + private static QueryEngine TwoTables() + { + string path = Path.Combine(Path.GetTempPath(), $"nlj-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE P (Id LONG PRIMARY KEY, Nm TEXT(20))"); + e.ExecuteNonQuery("CREATE TABLE C (Id LONG PRIMARY KEY, Pid LONG, Amt LONG)"); + e.ExecuteNonQuery("CREATE INDEX IX_Pid ON C (Pid)"); + for (int i = 0; i < 100; i++) e.ExecuteNonQuery($"INSERT INTO P (Id, Nm) VALUES ({i}, 'p{i}')"); + for (int i = 0; i < 500; i++) e.ExecuteNonQuery($"INSERT INTO C (Id, Pid, Amt) VALUES ({i}, {i % 100}, {i})"); + return e; + } + + [Fact] + public void Index_nested_loop_join_matches_a_scan_join() + { + // C.Pid is indexed → the inner (C) is seeked per P row. Each P has 5 children (500/100). + var e = TwoTables(); + Assert.Equal(500, Count(e, "SELECT P.Nm, C.Amt FROM P INNER JOIN C ON P.Id = C.Pid")); + Assert.Equal(5, Count(e, "SELECT C.Amt FROM P INNER JOIN C ON P.Id = C.Pid WHERE P.Id = 7")); + } + + [Fact] + public void Index_nested_loop_join_honours_a_residual_on_condition() + { + // The join seeks C by Pid, then the extra ON conjunct (C.Amt > 200) is the residual check. + var e = TwoTables(); + int viaJoin = Count(e, "SELECT C.Amt FROM P INNER JOIN C ON P.Id = C.Pid AND C.Amt > 200"); + int viaScan = Count(e, "SELECT Amt FROM C WHERE Amt > 200"); // every C has a P, so equivalent + Assert.Equal(viaScan, viaJoin); + } + + [Fact] + public void Join_on_an_unindexed_inner_column_still_works() + { + // Joining on C.Amt (no index) falls back to the scan-based nested loop — must still be correct. + var e = TwoTables(); + Assert.Equal(1, Count(e, "SELECT P.Nm FROM P INNER JOIN C ON P.Id = C.Amt WHERE C.Amt = 50")); + } + + // --- index range scan: comparison predicates on an indexed column --- + [Theory] + [InlineData("SELECT Id FROM B WHERE Id BETWEEN 100 AND 149", 50)] // lowered to >= AND <= + [InlineData("SELECT Id FROM B WHERE Id >= 480", 20)] // open high + [InlineData("SELECT Id FROM B WHERE Id > 480", 19)] // strict lower (residual exactifies) + [InlineData("SELECT Id FROM B WHERE Id < 5", 5)] // open low + [InlineData("SELECT Id FROM B WHERE Id <= 5", 6)] + [InlineData("SELECT Id FROM B WHERE 100 <= Id AND Id < 110", 10)] // value-on-left orientation + public void Range_scan_matches_a_scan(string sql, int expected) + => Assert.Equal(expected, Count(Seeded(), sql)); + + [Fact] + public void Range_on_a_secondary_index_with_a_residual() + { + // K in [3,6] seeks the IX_K range (i%10 ∈ {3,4,5,6} → 200 rows), then V LIKE-style residual narrows. + var e = Seeded(); + Assert.Equal(200, Count(e, "SELECT Id FROM B WHERE K >= 3 AND K <= 6")); + // residual Id<100: for i in [0,100), i%10 in {3,4,5,6} → 4 residues × 10 = 40. + Assert.Equal(40, Count(e, "SELECT Id FROM B WHERE K >= 3 AND K <= 6 AND Id < 100")); + } +} diff --git a/test/LibRed.Engine.Tests/IndexSplitTests.cs b/test/LibRed.Engine.Tests/IndexSplitTests.cs new file mode 100644 index 00000000..e8c1d675 --- /dev/null +++ b/test/LibRed.Engine.Tests/IndexSplitTests.cs @@ -0,0 +1,67 @@ +using LibRed; +using LibRed.Engine; +using LibRed.IO; +using LibRed.Pages; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// Inserting more keys than a single index leaf can hold forces B-tree leaf/node splitting: the +/// leaf splits, a separator is promoted, and — the first time — a new root node grows (the PK root page +/// changes from a leaf 0x04 to a node 0x03). These verify, through LibRed's own reader and query engine, +/// that every key survives, stays in sorted order, and is still findable after the tree grows several +/// levels. (The byte-faithful ACE cross-check — Access opens the split file and indexed seek/range +/// return the right rows — lives in LibRed.Core.Tests' IndexSplitAccessTests.) +/// +public class IndexSplitTests +{ + private const int N = 1500; // well past one leaf of 4-byte-int keys, so the root grows a level + + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"split-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + [Fact] + public void Leaf_splitting_keeps_every_key_in_order_and_findable() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + new QueryEngine(db).ExecuteNonQuery("CREATE TABLE `Big` (`Id` INTEGER PRIMARY KEY, `T` VARCHAR(20))"); + var t = db.OpenTable("Big"); + for (int i = 1; i <= N; i++) t.Insert([i, $"r{i}"]); + } + + using (var ch = PageChannel.Open(path, readOnly: true)) + { + var pk = new LibRed.Catalog.JetCatalog(ch).FindTable("Big")!.Indexes.Single(x => x.IsPrimaryKey); + + // The root grew into a node — the tree is genuinely multi-level, not a single fat leaf. + Assert.Equal(PageType.IntermediateIndexPage, (PageType)ch.ReadPage(pk.RootPage).ReadByte(0)); + + var cursor = new IndexCursor(ch, pk.RootPage); + Assert.Equal(N, cursor.RowIds().Count()); + + // A full ordered walk must yield exactly 1..N with no gaps, dupes, or misorderings. + int expected = 1; + foreach (var entry in cursor.Entries(pk.Columns)) + Assert.Equal(expected++, Convert.ToInt32(entry.Key[0])); + Assert.Equal(N + 1, expected); + } + + using (var db = JetDatabase.Open(path)) + { + var rs = new QueryEngine(db).ExecuteQuery("SELECT `T` FROM `Big` WHERE `Id` = 1234"); + Assert.Equal("r1234", rs.Rows.Single()[0]); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/InformationSchemaTests.cs b/test/LibRed.Engine.Tests/InformationSchemaTests.cs new file mode 100644 index 00000000..d9b4a3f8 --- /dev/null +++ b/test/LibRed.Engine.Tests/InformationSchemaTests.cs @@ -0,0 +1,86 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// The Jet-flavoured INFORMATION_SCHEMA views are engine-native virtual tables over the catalog, so EF's +/// migration existence checks (SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = '…') work. +public class InformationSchemaTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"is-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE Widget (Id LONG PRIMARY KEY, Name TEXT(50))"); + return e; + } + + [Fact] + public void Tables_view_lists_user_tables_and_filters_by_name() + { + var e = Seeded(); + int hit = e.ExecuteQuery("SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = 'Widget'").Rows.Count(); + Assert.Equal(1, hit); + int miss = e.ExecuteQuery("SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = 'Nope'").Rows.Count(); + Assert.Equal(0, miss); + } + + [Fact] + public void Columns_view_lists_columns() + { + var e = Seeded(); + var rows = e.ExecuteQuery("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA.COLUMNS` WHERE `TABLE_NAME` = 'Widget'").Rows.ToList(); + Assert.Equal(2, rows.Count); + } + + [Fact] + public void All_seven_views_bind_and_execute() + { + var e = Seeded(); + foreach (string v in new[] { "TABLES", "COLUMNS", "INDEXES", "INDEX_COLUMNS", "RELATIONS", "RELATION_COLUMNS", "CHECK_CONSTRAINTS" }) + _ = e.ExecuteQuery($"SELECT * FROM `INFORMATION_SCHEMA.{v}`").Rows.ToList(); // must not throw + } +} + +// -- IF [NOT] EXISTS (...) THEN -- +public class IfThenStatementTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"if-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE Existing (Id LONG PRIMARY KEY)"); + return e; + } + + private static bool TableExists(QueryEngine e, string t) => + e.ExecuteQuery($"SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = '{t}'").Rows.Any(); + + [Fact] + public void If_not_exists_creates_when_absent() + { + var e = Seeded(); + e.ExecuteNonQuery("IF NOT EXISTS (SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = 'Fresh') THEN CREATE TABLE `Fresh` (`Id` LONG PRIMARY KEY)"); + Assert.True(TableExists(e, "Fresh")); + } + + [Fact] + public void If_not_exists_skips_when_present() + { + var e = Seeded(); + // Existing already has a table; the guarded CREATE must be skipped (no "already exists" throw). + e.ExecuteNonQuery("IF NOT EXISTS (SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = 'Existing') THEN CREATE TABLE `Existing` (`Id` LONG PRIMARY KEY)"); + Assert.True(TableExists(e, "Existing")); + } + + [Fact] + public void If_exists_runs_body_when_present() + { + var e = Seeded(); + e.ExecuteNonQuery("IF EXISTS (SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = 'Existing') THEN CREATE TABLE `Made` (`Id` LONG PRIMARY KEY)"); + Assert.True(TableExists(e, "Made")); + } +} diff --git a/test/LibRed.Engine.Tests/InstrEdgeCasesTests.cs b/test/LibRed.Engine.Tests/InstrEdgeCasesTests.cs new file mode 100644 index 00000000..2ab48d6d --- /dev/null +++ b/test/LibRed.Engine.Tests/InstrEdgeCasesTests.cs @@ -0,0 +1,42 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// InStr([start,] string1, string2 [, compare]) — the documented edge cases, each verified byte-identical to ACE: +// case-insensitive default, not-found → 0, empty/null args, start beyond length, and the compare modes. +public class InstrEdgeCasesTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"instr-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static object? Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]; + + [Theory] + [InlineData("InStr('abc', 'b')", 2)] + [InlineData("InStr('ABC', 'b')", 2)] // case-insensitive by default + [InlineData("InStr('abc', 'x')", 0)] // not found + [InlineData("InStr('', 'a')", 0)] // string1 zero-length + [InlineData("InStr('abc', '')", 1)] // string2 zero-length → start (default 1) + [InlineData("InStr(2, 'abc', '')", 2)] // string2 zero-length → start + [InlineData("InStr(10, 'abc', 'a')", 0)] // start > len(string1) + [InlineData("InStr(2, 'abcabc', 'a')", 4)] // from a start position + [InlineData("InStr(1, 'aXbXc', 'x', 0)", 0)] // binary (case-sensitive) + [InlineData("InStr(1, 'aXbXc', 'x', 1)", 2)] // textual (case-insensitive) + public void Instr_matches_ace(string expr, int expected) + => Assert.Equal(expected, Convert.ToInt32(Eval(expr))); + + [Theory] + [InlineData("InStr(Null, 'a')")] // string1 null → null + [InlineData("InStr('abc', Null)")] // string2 null → null + public void Instr_propagates_null(string expr) + => Assert.Null(Eval(expr)); +} diff --git a/test/LibRed.Engine.Tests/InstrRevEdgeCasesTests.cs b/test/LibRed.Engine.Tests/InstrRevEdgeCasesTests.cs new file mode 100644 index 00000000..ee7a00f9 --- /dev/null +++ b/test/LibRed.Engine.Tests/InstrRevEdgeCasesTests.cs @@ -0,0 +1,48 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// InStrRev(string1, string2, [start=-1], [compare]) — note the argument order differs from InStr (start is 3rd, +// default -1 = end) and start bounds the search to Left(string1, start). All values verified byte-identical to +// ACE, including its quirks (empty needle → start position; NULL → error, not NULL; start=0 → error). +public class InstrRevEdgeCasesTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"irev-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static object? Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]; + + [Theory] + [InlineData("InStrRev('abcabc', 'a')", 4)] // last occurrence + [InlineData("InStrRev('abcabc', 'a', -1)", 4)] // explicit end + [InlineData("InStrRev('abcabc', 'a', 6)", 4)] + [InlineData("InStrRev('abcabc', 'a', 4)", 4)] // window = first 4 chars + [InlineData("InStrRev('abcabc', 'a', 3)", 1)] // window = first 3 chars + [InlineData("InStrRev('abcabc', 'bc', 5)", 2)] // 'bc' at 5-6 ends past 5 → excluded + [InlineData("InStrRev('abcabc', 'bc', 4)", 2)] + [InlineData("InStrRev('ABCABC', 'a')", 4)] // case-insensitive default + [InlineData("InStrRev('abc', 'x')", 0)] // not found + [InlineData("InStrRev('', 'a')", 0)] // string1 empty + [InlineData("InStrRev('abc', '')", 3)] // empty needle → effective start (len) + [InlineData("InStrRev('aXbXc', 'x', -1, 0)", 0)] // binary (case-sensitive) + [InlineData("InStrRev('aXbXc', 'x', -1, 1)", 4)] // textual (case-insensitive) + public void InstrRev_matches_ace(string expr, int expected) + => Assert.Equal(expected, Convert.ToInt32(Eval(expr))); + + // ACE raises errors here rather than propagating NULL (unlike InStr) or returning a position. + [Theory] + [InlineData("InStrRev(Null, 'a')")] // Data type mismatch + [InlineData("InStrRev('abc', Null)")] // Data type mismatch + [InlineData("InStrRev('abcabc', 'a', 0)")] // Invalid procedure call (start must be -1 or >= 1) + public void InstrRev_error_cases(string expr) + => Assert.Throws(() => Eval(expr)); +} diff --git a/test/LibRed.Engine.Tests/JoinQueryTests.cs b/test/LibRed.Engine.Tests/JoinQueryTests.cs new file mode 100644 index 00000000..6bbfe366 --- /dev/null +++ b/test/LibRed.Engine.Tests/JoinQueryTests.cs @@ -0,0 +1,82 @@ +using LibRed; +using LibRed.Engine; +using LibRed.Engine.Execution; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class JoinQueryTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + private static List Query(string sql, out IReadOnlyList columns) + { + using var db = JetDatabase.Open(Northwind); + var rs = new QueryEngine(db).ExecuteQuery(sql); + columns = rs.ColumnNames; + return rs.Rows.ToList(); + } + + [Fact] + public void Order_by_descending() + { + var rows = Query("SELECT CategoryName FROM Categories ORDER BY CategoryName DESC", out _); + Assert.Equal("Seafood", rows[0][0]); + Assert.Equal("Beverages", rows[^1][0]); + } + + [Fact] + public void Mod_operator_in_where() + { + var rows = Query("SELECT ProductID FROM Products WHERE ProductID MOD 17 = 5", out _); + Assert.Equal([5, 22, 39, 56, 73], rows.Select(r => (int)r[0]!).OrderBy(x => x)); + } + + [Fact] + public void Inner_join_with_aliases_and_qualified_columns() + { + var rows = Query( + "SELECT p.ProductName, c.CategoryName FROM Products AS p " + + "INNER JOIN Categories AS c ON p.CategoryID = c.CategoryID WHERE p.ProductID = 1", + out var columns); + + Assert.Equal(["ProductName", "CategoryName"], columns); + var only = Assert.Single(rows); + Assert.Equal("Chai", only[0]); + Assert.Equal("Beverages", only[1]); + } + + [Fact] + public void Left_join_over_a_derived_table() + { + // The full EF-generated query: LEFT JOIN to a subquery (Order Details INNER JOIN Orders), + // with backtick identifiers, MOD, a projection alias, and a multi-key ORDER BY. + const string sql = """ + SELECT `p`.`ProductID`, `p`.`ProductName`, `p`.`UnitPrice`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Quantity`, `s`.`OrderID0`, `s`.`OrderDate` + FROM `Products` AS `p` + LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Quantity`, `o0`.`OrderID` AS `OrderID0`, `o0`.`OrderDate` + FROM `Order Details` AS `o` + INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` + ) AS `s` ON `p`.`ProductID` = `s`.`ProductID` + WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 + ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` + """; + + var rows = Query(sql, out var columns); + + // Duplicate output names (p.ProductID and s.ProductID) are preserved. + Assert.Equal(["ProductID", "ProductName", "UnitPrice", "OrderID", "ProductID", "Quantity", "OrderID0", "OrderDate"], columns); + + // Only products 39 and 73 satisfy (id MOD 17 = 5) AND (price < 20). + Assert.Equal([39, 73], rows.Select(r => (int)r[0]!).Distinct().OrderBy(x => x)); + Assert.All(rows, r => Assert.Equal(r[0], r[4])); // join key: p.ProductID == s.ProductID + + // Ordered by p.ProductID then s.OrderID. + var keys = rows.Select(r => ((int)r[0]!, (int)r[3]!)).ToList(); + Assert.Equal(keys.OrderBy(k => k.Item1).ThenBy(k => k.Item2), keys); + + // OrderID0 (the alias from the inner Orders join) equals OrderID for every matched row. + Assert.All(rows, r => Assert.Equal(r[3], r[6])); + } +} diff --git a/test/LibRed.Engine.Tests/JoinedUpdateDeleteTests.cs b/test/LibRed.Engine.Tests/JoinedUpdateDeleteTests.cs new file mode 100644 index 00000000..576f38f4 --- /dev/null +++ b/test/LibRed.Engine.Tests/JoinedUpdateDeleteTests.cs @@ -0,0 +1,126 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// Multi-table UPDATE/DELETE (Access's joined-source form) must find its target rows via an index-nested-loop +/// over the ON equi-conditions, not a full cartesian product, and must correctly rewrite/remove exactly the +/// matched rows. Includes the all-fixed-column-table case that previously overflowed on re-encode. +/// +public class JoinedUpdateDeleteTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"jud-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + // Parent P and child C, plus an ALL-FIXED-COLUMN table F (no variable columns) to cover the re-encode path. + e.ExecuteNonQuery("CREATE TABLE P (Id LONG PRIMARY KEY, Flag LONG)"); + e.ExecuteNonQuery("CREATE TABLE C (Id LONG PRIMARY KEY, Pid LONG, Amt LONG)"); + e.ExecuteNonQuery("CREATE INDEX IX_Pid ON C (Pid)"); + for (int i = 0; i < 40; i++) e.ExecuteNonQuery($"INSERT INTO P (Id, Flag) VALUES ({i}, {i % 2})"); + for (int i = 0; i < 200; i++) e.ExecuteNonQuery($"INSERT INTO C (Id, Pid, Amt) VALUES ({i}, {i % 40}, {i})"); + return e; + } + + private static int Count(QueryEngine e, string sql) => (int)Convert.ToInt64(e.ExecuteQuery(sql).Rows.Single()[0]!); + + [Fact] + public void Joined_update_sets_only_matched_rows() + { + var e = Seeded(); + // Update C.Amt to 0 for children whose parent has Flag = 1 (odd parents). Pid = i%40; odd parents are + // the 20 odd ids, each with 5 children (200/40) → 100 rows. + int expected = Count(e, "SELECT COUNT(*) FROM C INNER JOIN P ON C.Pid = P.Id WHERE P.Flag = 1"); + // Use a sentinel (-1) that no seeded row has, so the count is unambiguous. + int affected = e.ExecuteNonQuery("UPDATE C INNER JOIN P ON C.Pid = P.Id SET C.Amt = -1 WHERE P.Flag = 1"); + Assert.Equal(expected, affected); + Assert.Equal(expected, Count(e, "SELECT COUNT(*) FROM C WHERE Amt = -1")); + // Exactly the matched rows changed; the rest are untouched. + Assert.Equal(200 - expected, Count(e, "SELECT COUNT(*) FROM C WHERE Amt <> -1")); + } + + [Fact] + public void Joined_delete_removes_only_matched_target_rows() + { + var e = Seeded(); + int expected = Count(e, "SELECT COUNT(*) FROM C INNER JOIN P ON C.Pid = P.Id WHERE P.Flag = 1"); + int affected = e.ExecuteNonQuery("DELETE C.* FROM C INNER JOIN P ON C.Pid = P.Id WHERE P.Flag = 1"); + Assert.Equal(expected, affected); + Assert.Equal(200 - expected, Count(e, "SELECT COUNT(*) FROM C")); + } + + [Fact] + public void Left_join_update_keeps_unmatched_outer_rows() + { + var e = Seeded(); + e.ExecuteNonQuery("INSERT INTO P (Id, Flag) VALUES (999, 0)"); // a parent with no children + // LEFT JOIN so the childless parent survives as a null-padded row; C.Id IS NULL selects ONLY it — an + // INNER join (dropping unmatched rows) could never match this, so it exercises true LEFT semantics. + int affected = e.ExecuteNonQuery( + "UPDATE P LEFT JOIN C ON P.Id = C.Pid SET P.Flag = -1 WHERE C.Id IS NULL"); + Assert.Equal(1, affected); + Assert.Equal(-1L, Convert.ToInt64(e.ExecuteQuery("SELECT Flag FROM P WHERE Id = 999").Rows.Single()[0]!)); + Assert.Equal(0, Count(e, "SELECT COUNT(*) FROM P WHERE Flag = -1 AND Id <> 999")); // no matched parent touched + } + + [Fact] + public void Left_join_update_via_navigation_matches_inner_when_where_is_on_the_inner_side() + { + var e = Seeded(); + // The EF "set navigation null" shape: UPDATE outer LEFT JOIN inner … WHERE inner.col = v. Because the + // WHERE rejects the null-padded rows, the result equals the INNER-join equivalent. + int expected = Count(e, "SELECT COUNT(*) FROM P INNER JOIN C ON P.Id = C.Pid WHERE C.Amt = 0"); + int affected = e.ExecuteNonQuery("UPDATE P LEFT JOIN C ON P.Id = C.Pid SET P.Flag = 7 WHERE C.Amt = 0"); + Assert.Equal(expected, affected); + } + + [Fact] + public void Right_join_with_a_derived_table_update() + { + // EF's Update_with_RightJoin shape: UPDATE target RIGHT JOIN (subquery) ON … SET … WHERE target.col < v. + // The right (preserved) side is a derived table; the left (target) is modelled as LEFT-joined onto it, + // and the WHERE on the target drops the unmatched (null-target) rows — so the result equals the inner join. + var e = Seeded(); + int expected = Count(e, + "SELECT COUNT(*) FROM C INNER JOIN (SELECT Id FROM P WHERE Flag = 1) d ON C.Pid = d.Id WHERE C.Id < 50"); + Assert.True(expected > 0); + int affected = e.ExecuteNonQuery( + "UPDATE C RIGHT JOIN (SELECT Id FROM P WHERE Flag = 1) d ON C.Pid = d.Id SET C.Amt = -1 WHERE C.Id < 50"); + Assert.Equal(expected, affected); + Assert.Equal(expected, Count(e, "SELECT COUNT(*) FROM C WHERE Amt = -1")); + } + + [Fact] + public void Update_of_an_ace_authored_all_fixed_column_table_does_not_overflow() + { + // Regression: updating a row of an ACE-AUTHORED all-fixed-column table used to throw OverflowException. + // The trigger is specific to rows written by Access/ACE (some decode to a 0 variable-data offset → + // negative inferred fixed length); rows LibRed writes itself don't hit it, so this must update the real + // Order Details table (OrderID, ProductID, UnitPrice, Quantity, Discount — all fixed) from the copied, + // ACE-created Northwind, NOT a LibRed-created table. + var e = Seeded(); + int affected = e.ExecuteNonQuery("UPDATE `Order Details` SET Quantity = 99 WHERE OrderID = 10248"); + Assert.True(affected > 0); + Assert.Equal(affected, (int)Convert.ToInt64( + e.ExecuteQuery("SELECT COUNT(*) FROM `Order Details` WHERE OrderID = 10248 AND Quantity = 99").Rows.Single()[0]!)); + } + + [Fact] + public void Three_table_joined_update_matches_the_select() + { + var e = Seeded(); + // Third table via a second join; still an index-nested-loop, not a cartesian product. + e.ExecuteNonQuery("CREATE TABLE G (Cid LONG PRIMARY KEY, Extra LONG)"); + for (int i = 0; i < 200; i++) e.ExecuteNonQuery($"INSERT INTO G (Cid, Extra) VALUES ({i}, {i})"); + int expected = Count(e, + "SELECT COUNT(*) FROM C INNER JOIN P ON C.Pid = P.Id INNER JOIN G ON C.Id = G.Cid WHERE P.Flag = 1 AND G.Extra > 50"); + int affected = e.ExecuteNonQuery( + "UPDATE C INNER JOIN P ON C.Pid = P.Id INNER JOIN G ON C.Id = G.Cid SET C.Amt = -1 WHERE P.Flag = 1 AND G.Extra > 50"); + Assert.Equal(expected, affected); + Assert.Equal(expected, Count(e, "SELECT COUNT(*) FROM C WHERE Amt = -1")); + } +} diff --git a/test/LibRed.Engine.Tests/LeftRightEdgeCasesTests.cs b/test/LibRed.Engine.Tests/LeftRightEdgeCasesTests.cs new file mode 100644 index 00000000..60bfb830 --- /dev/null +++ b/test/LibRed.Engine.Tests/LeftRightEdgeCasesTests.cs @@ -0,0 +1,51 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Left/Right edge cases, verified byte-identical to ACE — including where ACE errors (negative length → Invalid +// procedure call; null length → Data type mismatch) rather than clamping. A null string propagates. Also: Split() +// is not a scalar SQL function in ACE ("Undefined function", it returns an array), so LibRed rejects it too. +public class LeftRightEdgeCasesTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"lr-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static object? Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]; + + [Theory] + [InlineData("Left('abcdef', 3)", "abc")] + [InlineData("Left('abcdef', 0)", "")] + [InlineData("Left('abcdef', 10)", "abcdef")] // over-length → whole string + [InlineData("Right('abcdef', 3)", "def")] + [InlineData("Right('abcdef', 0)", "")] + [InlineData("Right('abcdef', 10)", "abcdef")] + public void Matches_ace(string expr, string expected) + => Assert.Equal(expected, Convert.ToString(Eval(expr))); + + [Theory] + [InlineData("Left(Null, 2)")] + [InlineData("Right(Null, 2)")] + public void Null_string_propagates(string expr) + => Assert.Null(Eval(expr)); + + [Theory] + [InlineData("Left('abcdef', -1)")] // negative → Invalid procedure call + [InlineData("Right('abcdef', -1)")] + [InlineData("Left('abc', Null)")] // null length → Data type mismatch + [InlineData("Right('abc', Null)")] + public void Error_cases(string expr) + => Assert.Throws(() => Eval(expr)); + + [Fact] + public void Split_is_not_a_scalar_function() // matches ACE ("Undefined function 'Split'") + => Assert.ThrowsAny(() => Eval("Split('a,b,c', ',')")); +} diff --git a/test/LibRed.Engine.Tests/LibRed.Engine.Tests.csproj b/test/LibRed.Engine.Tests/LibRed.Engine.Tests.csproj new file mode 100644 index 00000000..38d067f4 --- /dev/null +++ b/test/LibRed.Engine.Tests/LibRed.Engine.Tests.csproj @@ -0,0 +1,42 @@ + + + + $(JetTargetFramework) + LibRed.Engine.Tests + enable + enable + false + true + + true + $(MSBuildThisFileDirectory)..\..\Key.snk + AnyCPU;x86;x64 + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + Data\Northwind.accdb + PreserveNewest + + + + diff --git a/test/LibRed.Engine.Tests/LikeTests.cs b/test/LibRed.Engine.Tests/LikeTests.cs new file mode 100644 index 00000000..a3c9392d --- /dev/null +++ b/test/LibRed.Engine.Tests/LikeTests.cs @@ -0,0 +1,51 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Access/Jet LIKE wildcards, including the bracket char class [ ... ] / [! ... ] and the # digit wildcard. +// EF escapes literal special chars by bracketing them (Contains("C#") -> LIKE '%C[#]%'), so [#] must match +// a literal '#', not the three characters "[#]". +public class LikeTests +{ + private static QueryEngine Fresh(params string[] values) + { + string path = Path.Combine(Path.GetTempPath(), $"like-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY, V text(50))"); + for (int i = 0; i < values.Length; i++) + e.ExecuteNonQuery("INSERT INTO T (Id, V) VALUES (@id, @v)", + new Dictionary { ["id"] = i + 1, ["v"] = values[i] }); + return e; + } + + private static string[] Match(QueryEngine e, string pattern) => + e.ExecuteQuery("SELECT V FROM T WHERE V LIKE @p ORDER BY Id", + new Dictionary { ["p"] = pattern }).Rows.Select(r => (string)r[0]!).ToArray(); + + [Fact] + public void Bracketed_hash_matches_a_literal_hash() + { + // The ConferencePlanner "C#" search: Contains("C#") -> LIKE '%C[#]%'. + var e = Fresh("Intro to C#", "C++ basics", "C# advanced", "Csharp"); + Assert.Equal(["Intro to C#", "C# advanced"], Match(e, "%C[#]%")); + } + + [Fact] + public void Hash_is_a_digit_wildcard_when_not_bracketed() + { + var e = Fresh("A5", "AB", "A0", "A"); + Assert.Equal(["A5", "A0"], Match(e, "A#")); + } + + [Fact] + public void Bracket_class_and_negation_and_ranges() + { + var e = Fresh("cat", "bat", "hat", "rat"); + Assert.Equal(["cat", "bat"], Match(e, "[bc]at")); // char list + Assert.Equal(["hat", "rat"], Match(e, "[!bc]at")); // negated list + Assert.Equal(["cat", "bat"], Match(e, "[a-c]at")); // range + } +} diff --git a/test/LibRed.Engine.Tests/LvalReclamationTests.cs b/test/LibRed.Engine.Tests/LvalReclamationTests.cs new file mode 100644 index 00000000..7460d142 --- /dev/null +++ b/test/LibRed.Engine.Tests/LvalReclamationTests.cs @@ -0,0 +1,118 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// UPDATE/DELETE reclaim a memo's old chained LVAL pages (freed to the global map and reused), so repeated +// memo churn keeps the file compact — matching ACE, which also reclaims. An unchanged memo is not +// re-materialised at all when another column is updated. +public class LvalReclamationTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"lval-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static string Big(char c) => new(c, 20000); // > one LVAL page → chained (dedicated pages) + + [Fact] + public void Repeated_memo_updates_reclaim_old_chained_pages() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE T (Id counter PRIMARY KEY, M memo)"); + e.ExecuteNonQuery($"INSERT INTO T (M) VALUES ('{Big('a')}')"); + } + long afterInsert = new FileInfo(path).Length; + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + for (int i = 0; i < 30; i++) + e.ExecuteNonQuery($"UPDATE T SET M = '{Big((char)('b' + i % 20))}' WHERE Id = 1"); + } + long afterUpdates = new FileInfo(path).Length; + + // If old pages leaked, 30 × ~20 KB ≈ 600 KB of growth. Reclaimed, it stays tiny. + Assert.True(afterUpdates - afterInsert < 150_000, + $"file grew {afterUpdates - afterInsert} bytes over 30 memo updates — old LVAL pages not reclaimed?"); + + using (var db = JetDatabase.Open(path)) + Assert.Equal(Big((char)('b' + 29 % 20)), new QueryEngine(db).ExecuteQuery("SELECT M FROM T").Rows.Single()[0]); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Updating_another_column_does_not_re_materialise_the_memo() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE T (Id counter PRIMARY KEY, N long, M memo)"); + e.ExecuteNonQuery($"INSERT INTO T (N, M) VALUES (0, '{Big('a')}')"); + } + long afterInsert = new FileInfo(path).Length; + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + for (int i = 1; i <= 20; i++) e.ExecuteNonQuery($"UPDATE T SET N = {i} WHERE Id = 1"); // memo untouched + } + long afterUpdates = new FileInfo(path).Length; + + Assert.True(afterUpdates - afterInsert < 20_000, + $"file grew {afterUpdates - afterInsert} bytes updating a non-memo column — the memo was re-materialised?"); + + using (var db = JetDatabase.Open(path)) + { + var e = new QueryEngine(db); + Assert.Equal(20, Convert.ToInt32(e.ExecuteQuery("SELECT N FROM T").Rows.Single()[0])); + Assert.Equal(Big('a'), e.ExecuteQuery("SELECT M FROM T").Rows.Single()[0]); // memo intact + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Deleting_a_row_reclaims_its_memo_pages() + { + string path = Fresh(); + try + { + long afterInserts; + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE T (Id counter PRIMARY KEY, M memo)"); + e.ExecuteNonQuery($"INSERT INTO T (M) VALUES ('{Big('a')}')"); // will be deleted + re-added repeatedly + } + afterInserts = new FileInfo(path).Length; + + using (var db = JetDatabase.Open(path, readOnly: false)) + { + var e = new QueryEngine(db); + for (int i = 0; i < 20; i++) + { + e.ExecuteNonQuery("DELETE FROM T"); // frees the memo pages + e.ExecuteNonQuery($"INSERT INTO T (M) VALUES ('{Big((char)('b' + i % 20))}')"); // reuses them + } + } + long afterChurn = new FileInfo(path).Length; + + Assert.True(afterChurn - afterInserts < 150_000, + $"file grew {afterChurn - afterInserts} bytes over 20 delete+insert cycles — deleted memo pages not reclaimed?"); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/MSysAcesViewTests.cs b/test/LibRed.Engine.Tests/MSysAcesViewTests.cs new file mode 100644 index 00000000..df4c9029 --- /dev/null +++ b/test/LibRed.Engine.Tests/MSysAcesViewTests.cs @@ -0,0 +1,52 @@ +using LibRed; +using LibRed.Catalog; +using LibRed.Engine; +using LibRed.Storage; +using Xunit; + +namespace LibRed.Engine.Tests; + +// A LibRed-created view must get the same MSysACEs permission rows Access writes for a query object, or +// Access warns about permissions when opening it (verified against Northwind: owner 0x690C = ACM 0xF00FE, +// admin/users 0x680C = ACM 0xFFEFF — distinct from a table's, where both SIDs get full 0xFFEFF). +public class MSysAcesViewTests +{ + [Fact] + public void Created_view_gets_the_query_permission_rows_access_writes() + { + string northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + string path = Path.Combine(Path.GetTempPath(), $"aces-{Guid.NewGuid():N}.accdb"); + File.Copy(northwind, path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + new QueryEngine(db).ExecuteNonQuery("CREATE VIEW VAces AS SELECT ProductID FROM Products"); + + // Find the new query object's id. + var mo = db.OpenTable("MSysObjects"); + int idIdx = Col(mo, "Id"), typeIdx = Col(mo, "Type"), nameIdx = Col(mo, "Name"); + int viewId = mo.Rows() + .Where(r => r[nameIdx] as string == "VAces" && Convert.ToInt16(r[typeIdx] ?? (short)0) == 5) + .Select(r => Convert.ToInt32(r[idIdx])) + .Single(); + + // Collect its MSysACEs rows as (SID-hex, ACM). + var aces = db.OpenTable("MSysACEs"); + int aObj = Col(aces, "ObjectId"), aSid = Col(aces, "SID"), aAcm = Col(aces, "ACM"), aInh = Col(aces, "FInheritable"); + var rows = aces.Rows() + .Where(r => r[aObj] is not null && Convert.ToInt32(r[aObj]) == viewId) + .Select(r => (Sid: Hex(r[aSid] as byte[] ?? []), Acm: Convert.ToInt32(r[aAcm]), Inh: r[aInh])) + .OrderBy(x => x.Sid) + .ToList(); + + Assert.Equal(2, rows.Count); + Assert.Equal(("680C", 0xFFEFF), (rows[0].Sid, rows[0].Acm)); // admin/users → full + Assert.Equal(("690C", 0xF00FE), (rows[1].Sid, rows[1].Acm)); // owner → query mask + Assert.All(rows, r => Assert.Equal(false, r.Inh)); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + private static int Col(Table t, string name) => t.Definition.FindColumn(name)!.Index; + private static string Hex(byte[] b) => string.Join("", b.Select(x => x.ToString("X2"))); +} diff --git a/test/LibRed.Engine.Tests/MathFunctionTests.cs b/test/LibRed.Engine.Tests/MathFunctionTests.cs new file mode 100644 index 00000000..b5bba1d2 --- /dev/null +++ b/test/LibRed.Engine.Tests/MathFunctionTests.cs @@ -0,0 +1,37 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class MathFunctionTests +{ + private static double Eval(string expr) + { + string path = Path.Combine(Path.GetTempPath(), $"math-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var engine = new QueryEngine(db); + // Shippers has 3 rows; take the first — the expression is constant. + object? v = engine.ExecuteQuery($"SELECT {expr} AS X FROM Shippers").Rows.First()[0]; + return Convert.ToDouble(v); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Theory] + [InlineData("SIN(0)", 0)] + [InlineData("COS(0)", 1)] + [InlineData("TAN(0)", 0)] + [InlineData("ATN(0)", 0)] + [InlineData("EXP(0)", 1)] + [InlineData("LOG(1)", 0)] // natural log + [InlineData("SQR(9)", 3)] // Jet SQR = square root + [InlineData("SGN(-5)", -1)] + [InlineData("ABS(-3)", 3)] + [InlineData("2 ^ 10", 1024)] // POW is rendered as the ^ operator + public void Jet_math_functions_evaluate(string expr, double expected) + => Assert.Equal(expected, Eval(expr), 6); +} diff --git a/test/LibRed.Engine.Tests/MathFunctionTypeTests.cs b/test/LibRed.Engine.Tests/MathFunctionTypeTests.cs new file mode 100644 index 00000000..aa91921f --- /dev/null +++ b/test/LibRed.Engine.Tests/MathFunctionTypeTests.cs @@ -0,0 +1,54 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ROUND / FIX (truncate) / INT / ABS preserve the operand's type (double->double, decimal->decimal), so EF +// reads them with the type its Math.* call expects (the failing Truncate_double/Round_double shapes). +public class MathFunctionTypeTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"mathfn-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static object? Scalar(string expr) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE M (D DOUBLE, C CURRENCY)"); + e.ExecuteNonQuery("INSERT INTO M (D, C) VALUES (3.7, 3.7)"); + return e.ExecuteQuery($"SELECT {expr} FROM M").Rows.First()[0]; + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Round_preserves_type() + { + Assert.IsType(Scalar("ROUND(D, 1)")); + Assert.Equal(3.7d, Scalar("ROUND(D, 1)")); + Assert.IsType(Scalar("ROUND(C, 1)")); + Assert.Equal(3.7m, Scalar("ROUND(C, 1)")); + Assert.IsType(Scalar("ROUND(2.5, 0)")); // 2.5 literal is a double + Assert.Equal(2d, Scalar("ROUND(2.5, 0)")); // banker's rounding + } + + [Fact] + public void Fix_int_abs_preserve_type() + { + Assert.IsType(Scalar("FIX(D)")); + Assert.Equal(3d, Scalar("FIX(D)")); // toward zero + Assert.IsType(Scalar("FIX(C)")); + Assert.IsType(Scalar("INT(D)")); + Assert.IsType(Scalar("ABS(D)")); + Assert.IsType(Scalar("ABS(-5)")); // integer stays int + Assert.Equal(5, Scalar("ABS(-5)")); + } +} diff --git a/test/LibRed.Engine.Tests/MemoIndexTests.cs b/test/LibRed.Engine.Tests/MemoIndexTests.cs new file mode 100644 index 00000000..00303d96 --- /dev/null +++ b/test/LibRed.Engine.Tests/MemoIndexTests.cs @@ -0,0 +1,44 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// A Memo (Long Text) column is indexable in Access; its index key is the text collation key over the first +// 255 characters. Exercise the insert path (RowInserter → IndexKeyEncoder) end-to-end through the engine. +public class MemoIndexTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"memoidx-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE MK (Id long PRIMARY KEY, M memo)"); + e.ExecuteNonQuery("CREATE INDEX IX_M ON MK (M)"); + return e; + } + + [Fact] + public void Rows_insert_into_a_memo_indexed_table_and_read_back() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO MK (Id, M) VALUES (1, 'hello')"); + e.ExecuteNonQuery("INSERT INTO MK (Id, M) VALUES (2, 'O''Brien')"); // ignorable apostrophe + e.ExecuteNonQuery($"INSERT INTO MK (Id, M) VALUES (3, '{new string('z', 300)}')"); // past the 255-char key limit + + Assert.Equal(3, Convert.ToInt32(e.ExecuteQuery("SELECT COUNT(*) FROM MK").Rows.Single()[0])); + Assert.Equal("hello", e.ExecuteQuery("SELECT M FROM MK WHERE Id = 1").Rows.Single()[0]); + Assert.Equal("O'Brien", e.ExecuteQuery("SELECT M FROM MK WHERE Id = 2").Rows.Single()[0]); + Assert.Equal(300, ((string)e.ExecuteQuery("SELECT M FROM MK WHERE Id = 3").Rows.Single()[0]!).Length); + } + + [Fact] + public void Two_memos_differing_only_past_255_chars_share_a_key_but_both_insert() + { + var e = Fresh(); + // Keys are equal (both truncate to 255 'z'), but a non-unique index must accept both rows. + e.ExecuteNonQuery($"INSERT INTO MK (Id, M) VALUES (1, '{new string('z', 255)}A')"); + e.ExecuteNonQuery($"INSERT INTO MK (Id, M) VALUES (2, '{new string('z', 255)}B')"); + Assert.Equal(2, Convert.ToInt32(e.ExecuteQuery("SELECT COUNT(*) FROM MK").Rows.Single()[0])); + } +} diff --git a/test/LibRed.Engine.Tests/MidReplaceEdgeCasesTests.cs b/test/LibRed.Engine.Tests/MidReplaceEdgeCasesTests.cs new file mode 100644 index 00000000..d71ac815 --- /dev/null +++ b/test/LibRed.Engine.Tests/MidReplaceEdgeCasesTests.cs @@ -0,0 +1,55 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Mid(string, start, [length]) and Replace(string1, find, replacement, [start], [count], [compare]) edge cases, +// all verified byte-identical to ACE — including where ACE ERRORS rather than clamping/propagating: start < 1, +// negative length, start=0, and a null Replace argument. (Mid propagates null on the string; Replace does not.) +public class MidReplaceEdgeCasesTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"mr-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static object? Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]; + + [Theory] + [InlineData("Mid('abcdef', 2, 3)", "bcd")] + [InlineData("Mid('abcdef', 2)", "bcdef")] // length omitted → to end + [InlineData("Mid('abcdef', 4, 10)", "def")] // length past end → clamped + [InlineData("Mid('abcdef', 10)", "")] // start past end → empty + [InlineData("Mid('abcdef', 1, 0)", "")] // zero length + [InlineData("Replace('abcabc', 'b', 'X')", "aXcaXc")] + [InlineData("Replace('abcabc', 'b', 'X', 1, 1)", "aXcabc")] // count = 1 + [InlineData("Replace('abcabc', 'b', 'X', 3)", "caXc")] // start=3 truncates the prefix + [InlineData("Replace('ABCabc', 'b', 'X')", "AXCaXc")] // case-insensitive default + [InlineData("Replace('abcabc', '', 'X')", "abcabc")] // empty find → unchanged + [InlineData("Replace('abcabc', 'b', '')", "acac")] // empty replacement + [InlineData("Replace('abcabc', 'b', 'X', 10)", "")] // start past end + [InlineData("Replace('abcabc', 'B', 'X', 1, -1, 0)", "abcabc")] // binary (case-sensitive) + [InlineData("Replace('abcabc', 'B', 'X', 1, -1, 1)", "aXcaXc")] // textual (case-insensitive) + [InlineData("Replace('abcabc', 'b', 'X', 1, 0)", "abcabc")] // count = 0 + public void Matches_ace(string expr, string expected) + => Assert.Equal(expected, Convert.ToString(Eval(expr))); + + [Fact] + public void Mid_null_string_propagates() + => Assert.Null(Eval("Mid(Null, 2)")); + + // Where ACE raises an error instead of clamping/propagating. + [Theory] + [InlineData("Mid('abcdef', 0, 2)")] // start < 1 → Invalid procedure call + [InlineData("Mid('abcdef', 3, -1)")] // negative length → Invalid procedure call + [InlineData("Replace(Null, 'b', 'X')")] // null arg → Data type mismatch + [InlineData("Replace('abcabc', 'b', 'X', 0)")] // start < 1 → Invalid procedure call + public void Error_cases(string expr) + => Assert.Throws(() => Eval(expr)); +} diff --git a/test/LibRed.Engine.Tests/MultiTableUpdateDeleteTests.cs b/test/LibRed.Engine.Tests/MultiTableUpdateDeleteTests.cs new file mode 100644 index 00000000..846c2e9e --- /dev/null +++ b/test/LibRed.Engine.Tests/MultiTableUpdateDeleteTests.cs @@ -0,0 +1,98 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Jet/ACE multi-table UPDATE/DELETE over a join: SET may touch columns in more than one joined table, and +// DELETE target.* names which table to remove rows from. Semantics verified against ACE (see the probe): +// a "one"-side row is updated once per matched join row, so a self-referencing SET accumulates. +public class MultiTableUpdateDeleteTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"mtud-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static QueryEngine Seed(JetDatabase db) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE P (Id long PRIMARY KEY, PName text(20), Hits long)"); + e.ExecuteNonQuery("CREATE TABLE C (Id long PRIMARY KEY, ParentId long, CName text(20))"); + e.ExecuteNonQuery("INSERT INTO P (Id, PName, Hits) VALUES (1, 'p1', 0)"); + e.ExecuteNonQuery("INSERT INTO P (Id, PName, Hits) VALUES (2, 'p2', 0)"); + e.ExecuteNonQuery("INSERT INTO C (Id, ParentId, CName) VALUES (10, 1, 'c10')"); + e.ExecuteNonQuery("INSERT INTO C (Id, ParentId, CName) VALUES (11, 1, 'c11')"); // P#1 has TWO children + e.ExecuteNonQuery("INSERT INTO C (Id, ParentId, CName) VALUES (12, 2, 'c12')"); + return e; + } + + [Fact] + public void Multi_table_update_touches_both_tables_and_accumulates_on_the_one_side() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = Seed(db); + + int affected = e.ExecuteNonQuery( + "UPDATE P INNER JOIN C ON P.Id = C.ParentId " + + "SET P.PName = 'hit', P.Hits = P.Hits + 1, C.CName = 'child' WHERE P.Id = 1"); + Assert.Equal(2, affected); // one join row per child of P#1 + + var p1 = e.ExecuteQuery("SELECT PName, Hits FROM P WHERE Id = 1").Rows.Single(); + Assert.Equal("hit", p1[0]); + Assert.Equal(2, Convert.ToInt32(p1[1])); // P#1 incremented once per matched child → 2 + Assert.Equal(0, Convert.ToInt32(e.ExecuteQuery("SELECT Hits FROM P WHERE Id = 2").Rows.Single()[0])); // untouched + Assert.All(e.ExecuteQuery("SELECT CName FROM C WHERE ParentId = 1").Rows, r => Assert.Equal("child", r[0])); + Assert.Equal("c12", e.ExecuteQuery("SELECT CName FROM C WHERE Id = 12").Rows.Single()[0]); // untouched + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Multi_table_delete_removes_only_the_targeted_table() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = Seed(db); + + // Delete the children of parents named 'p1' — only C rows go, P stays. + int affected = e.ExecuteNonQuery("DELETE C.* FROM C INNER JOIN P ON C.ParentId = P.Id WHERE P.PName = 'p1'"); + Assert.Equal(2, affected); + + Assert.Equal(new[] { 12 }, e.ExecuteQuery("SELECT Id FROM C").Rows.Select(r => Convert.ToInt32(r[0])).OrderBy(x => x)); + Assert.Equal(2, e.ExecuteQuery("SELECT Id FROM P").Rows.Count()); // both parents remain + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // `DELETE *` (bare star) is fine for a single table, but a join DELETE without a `table.*` target is + // ambiguous — Access rejects it ("specify the table"), and so does LibRed. + [Fact] + public void Delete_star_needs_a_table_target_on_a_join() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = Seed(db); + + // Single table: bare `*` deletes matching rows. + Assert.Equal(2, e.ExecuteNonQuery("DELETE * FROM C WHERE ParentId = 1")); + Assert.Equal(new[] { 12 }, e.ExecuteQuery("SELECT Id FROM C").Rows.Select(r => Convert.ToInt32(r[0]))); + + // Join with a bare `*` (or no target) is ambiguous → rejected. + Assert.Throws(() => + e.ExecuteNonQuery("DELETE * FROM C INNER JOIN P ON C.ParentId = P.Id WHERE P.PName = 'p2'")); + Assert.Throws(() => + e.ExecuteNonQuery("DELETE FROM C INNER JOIN P ON C.ParentId = P.Id WHERE P.PName = 'p2'")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/NestedJoinViewTests.cs b/test/LibRed.Engine.Tests/NestedJoinViewTests.cs new file mode 100644 index 00000000..56e3c337 --- /dev/null +++ b/test/LibRed.Engine.Tests/NestedJoinViewTests.cs @@ -0,0 +1,69 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// A view over a deeply nested, parenthesized join with column aliases and computed columns — Northwind's +/// "Invoices" — is decomposed (joins flattened, each recorded by the two tables in its condition, aliases +/// captured) and created. (Its ON conditions and CCur() are stored verbatim; Access runs the result.) +/// +public class NestedJoinViewTests +{ + private const string InvoicesView = @" +CREATE VIEW Invoices2 AS +SELECT Orders.ShipName, Orders.CustomerID, Customers.CompanyName AS CustomerName, + (FirstName + ' ' + LastName) AS Salesperson, Orders.OrderID, Shippers.CompanyName AS ShipperName, + `Order Details`.ProductID, Products.ProductName, `Order Details`.Quantity, + (CCur(`Order Details`.UnitPrice*Quantity*(1-Discount)/100)*100) AS ExtendedPrice, Orders.Freight +FROM Shippers INNER JOIN + (Products INNER JOIN + ((Employees INNER JOIN + (Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID) + ON Employees.EmployeeID = Orders.EmployeeID) + INNER JOIN `Order Details` ON Orders.OrderID = `Order Details`.OrderID) + ON Products.ProductID = `Order Details`.ProductID) + ON Shippers.ShipperID = Orders.ShipVia"; + + private static string Fresh() + { + string p = Path.Combine(Path.GetTempPath(), $"nested-view-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), p); + return p; + } + + [Fact] + public void Nested_join_view_with_aliases_is_created() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + new QueryEngine(db).ExecuteNonQuery(InvoicesView); // parses, flattens the joins, stores it + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Access_multi_join_views_read_back_through_libred() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + + // The reconstruction re-orders the flat joins into a valid chain (topological over the + // conditions), so LibRed executes Access's own complex multi-join views. + Assert.Equal(2155, Convert.ToInt32(e.ExecuteQuery("SELECT COUNT(*) FROM Invoices").Rows.First()[0])); + Assert.Equal(2155, Convert.ToInt32(e.ExecuteQuery("SELECT COUNT(*) FROM `Order Details Extended`").Rows.First()[0])); + + // Its computed columns evaluate: '+'-concat of text, and CCur(). + var row = e.ExecuteQuery("SELECT Salesperson, ExtendedPrice FROM Invoices WHERE OrderID = 10248").Rows.First(); + Assert.Equal("Steven Buchanan", row[0]); // FirstName + ' ' + LastName + Assert.Equal(168.00m, Convert.ToDecimal(row[1])); // CCur(14*12*(1-0)/100)*100 + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/NotLikeTests.cs b/test/LibRed.Engine.Tests/NotLikeTests.cs new file mode 100644 index 00000000..f34bb2ce --- /dev/null +++ b/test/LibRed.Engine.Tests/NotLikeTests.cs @@ -0,0 +1,51 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class NotLikeTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"notlike-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + [Fact] + public void Not_like_is_the_complement_of_like() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + int total = e.ExecuteQuery("SELECT CustomerID FROM Customers WHERE ContactName IS NOT NULL").Rows.Count(); + int like = e.ExecuteQuery("SELECT CustomerID FROM Customers WHERE ContactName LIKE 'A%'").Rows.Count(); + int notLike = e.ExecuteQuery("SELECT CustomerID FROM Customers WHERE ContactName NOT LIKE 'A%'").Rows.Count(); + Assert.True(like > 0); + Assert.Equal(total - like, notLike); // NOT LIKE = the rest (non-null names) + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // The .All() shape: NOT EXISTS (… WHERE ContactName NOT LIKE 'A%' OR ContactName IS NULL). + [Fact] + public void All_top_level_shape_with_not_like() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + object? all = e.ExecuteQuery( + "SELECT NOT EXISTS (SELECT 1 FROM Customers AS c " + + "WHERE c.ContactName NOT LIKE 'A%' OR c.ContactName IS NULL) AS r " + + "FROM (SELECT COUNT(*) FROM Orders)").Rows.First()[0]; + // Not all contact names start with 'A' → All(...) is false. + Assert.Equal(false, all); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/ParameterTests.cs b/test/LibRed.Engine.Tests/ParameterTests.cs new file mode 100644 index 00000000..3ab420c1 --- /dev/null +++ b/test/LibRed.Engine.Tests/ParameterTests.cs @@ -0,0 +1,69 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class ParameterTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + private static List Query(string sql, IReadOnlyDictionary parameters, out IReadOnlyList columns) + { + using var db = JetDatabase.Open(Northwind); + var rs = new QueryEngine(db).ExecuteQuery(sql, parameters); + columns = rs.ColumnNames; + return rs.Rows.ToList(); + } + + [Fact] + public void Named_string_parameter_in_where() + { + var rows = Query( + "SELECT CustomerID FROM Customers WHERE City = @city", + new Dictionary { ["@city"] = "London" }, out _); + Assert.Equal(6, rows.Count); + } + + [Fact] + public void Parameter_key_without_leading_at_still_matches() + { + var rows = Query( + "SELECT CustomerID FROM Customers WHERE City = @city", + new Dictionary { ["city"] = "Berlin" }, out _); + Assert.Equal("ALFKI", Assert.Single(rows)[0]); + } + + [Fact] + public void Numeric_parameter_and_reuse_across_clauses() + { + // The same parameter referenced twice, in projection and WHERE. + var rows = Query( + "SELECT OrderID, @limit AS Threshold FROM Orders WHERE OrderID < @limit", + new Dictionary { ["@limit"] = 10250 }, out var columns); + Assert.Equal(["OrderID", "Threshold"], columns); + Assert.Equal(2, rows.Count); // 10248, 10249 + Assert.All(rows, r => Assert.Equal(10250, Convert.ToInt32(r[1]))); + } + + [Fact] + public void Null_valued_parameter_is_supported() + { + // A supplied NULL is a real value (not "missing"); City = NULL matches nothing. + var rows = Query( + "SELECT CustomerID FROM Customers WHERE City = @city", + new Dictionary { ["@city"] = null }, out _); + Assert.Empty(rows); + } + + [Fact] + public void Missing_parameter_value_throws() + { + using var db = JetDatabase.Open(Northwind); + var engine = new QueryEngine(db); + var ex = Assert.Throws(() => + engine.ExecuteQuery("SELECT CustomerID FROM Customers WHERE City = @city", + new Dictionary()).Rows.ToList()); + Assert.Contains("@city", ex.Message); + } +} diff --git a/test/LibRed.Engine.Tests/ParenthesizedJoinTests.cs b/test/LibRed.Engine.Tests/ParenthesizedJoinTests.cs new file mode 100644 index 00000000..279fd032 --- /dev/null +++ b/test/LibRed.Engine.Tests/ParenthesizedJoinTests.cs @@ -0,0 +1,45 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// A parenthesized join group in FROM, A INNER JOIN (B INNER JOIN C ON …) ON …, parses (as a +/// nested join, not a subquery) and executes — the join shape Access's query designer emits (e.g. the +/// "Invoices" view). A bare (Table) is also accepted. +/// +public class ParenthesizedJoinTests +{ + private static string Fresh() + { + string p = Path.Combine(Path.GetTempPath(), $"parenjoin-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), p); + return p; + } + + [Fact] + public void Parenthesized_join_group_matches_the_flat_join() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + + int flat = e.ExecuteQuery( + "SELECT Customers.CompanyName, Orders.OrderID FROM Customers " + + "INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID " + + "INNER JOIN `Order Details` ON Orders.OrderID = `Order Details`.OrderID").Rows.Count(); + + int nested = e.ExecuteQuery( + "SELECT Customers.CompanyName, Orders.OrderID FROM Customers " + + "INNER JOIN (Orders INNER JOIN `Order Details` ON Orders.OrderID = `Order Details`.OrderID) " + + "ON Customers.CustomerID = Orders.CustomerID").Rows.Count(); + + Assert.Equal(2155, flat); // Customers ⋈ Orders ⋈ Order Details + Assert.Equal(flat, nested); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/PredicatePushdownTests.cs b/test/LibRed.Engine.Tests/PredicatePushdownTests.cs new file mode 100644 index 00000000..30385c5f --- /dev/null +++ b/test/LibRed.Engine.Tests/PredicatePushdownTests.cs @@ -0,0 +1,52 @@ +using System.Diagnostics; +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// The planner pushes WHERE conjuncts into the join tree so an Access comma-join (planned as CROSS joins) +/// filters inside the nested loop instead of materializing the full cross product. Without this a 4-table +/// comma-join is O(product of table sizes) — catastrophic for real queries like Northwind's CustOrderHist. +/// +public class PredicatePushdownTests +{ + private static QueryEngine FourTables(int rowsEach) + { + string path = Path.Combine(Path.GetTempPath(), $"pd-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + foreach (string t in new[] { "A", "B", "C", "D" }) + { + e.ExecuteNonQuery($"CREATE TABLE {t} (k LONG PRIMARY KEY, v LONG)"); + for (int i = 0; i < rowsEach; i++) e.ExecuteNonQuery($"INSERT INTO {t} (k, v) VALUES ({i}, {i * 10})"); + } + return e; + } + + [Fact] + public void Comma_join_equi_chain_is_correct_and_does_not_materialize_the_cross_product() + { + // 60^4 = 12.96M cross product; a pushed equi-join returns 60. If pushdown regressed this test would + // still finish (bounded) but take orders of magnitude longer — the 2s cap guards against that. + var e = FourTables(60); + var sw = Stopwatch.StartNew(); + var rows = e.ExecuteQuery( + "SELECT A.v, D.v FROM A, B, C, D WHERE A.k = B.k AND B.k = C.k AND C.k = D.k").Rows.ToList(); + sw.Stop(); + + Assert.Equal(60, rows.Count); + Assert.True(sw.ElapsedMilliseconds < 2000, $"comma-join took {sw.ElapsedMilliseconds} ms — cross product not pushed down?"); + } + + [Fact] + public void A_single_table_predicate_is_pushed_onto_its_scan() + { + var e = FourTables(60); + var rows = e.ExecuteQuery( + "SELECT A.v FROM A, B, C, D WHERE A.k = B.k AND B.k = C.k AND C.k = D.k AND A.k = 5").Rows.ToList(); + Assert.Equal([50L], rows.Single().Select(Convert.ToInt64).ToArray()); + } +} diff --git a/test/LibRed.Engine.Tests/PrimaryKeyNameTests.cs b/test/LibRed.Engine.Tests/PrimaryKeyNameTests.cs new file mode 100644 index 00000000..a24d4ea0 --- /dev/null +++ b/test/LibRed.Engine.Tests/PrimaryKeyNameTests.cs @@ -0,0 +1,47 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// The PRIMARY KEY's CONSTRAINT name is stored as the primary-key index's name (ACE names the PK index after +// the constraint), so it round-trips back through the catalog — this is what the scaffolder reports. When no +// name is given, LibRed picks the stable "PrimaryKey" as its own engine fallback (ACE-via-SQL instead +// generates a random "Index_" — no fixed value to reproduce, and nothing downstream depends on it). +public class PrimaryKeyNameTests +{ + private static (QueryEngine Engine, JetDatabase Db) Setup() + { + string path = Path.Combine(Path.GetTempPath(), $"pkname-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var db = JetDatabase.Open(path, readOnly: false); + return (new QueryEngine(db), db); + } + + private static string PkIndexName(JetDatabase db, string table) => + db.Catalog.UserTables.Single(t => t.Name == table).Indexes.Single(i => i.IsPrimaryKey).Name; + + [Fact] + public void Column_level_named_primary_key_keeps_its_constraint_name() + { + var (e, db) = Setup(); + e.ExecuteNonQuery("CREATE TABLE T ( Id int CONSTRAINT PK__T PRIMARY KEY )"); + Assert.Equal("PK__T", PkIndexName(db, "T")); + } + + [Fact] + public void Table_level_named_primary_key_keeps_its_constraint_name() + { + var (e, db) = Setup(); + e.ExecuteNonQuery("CREATE TABLE T ( Id1 int, Id2 int, CONSTRAINT MyPK PRIMARY KEY ( Id2 ) )"); + Assert.Equal("MyPK", PkIndexName(db, "T")); + } + + [Fact] + public void Unnamed_primary_key_uses_the_engine_fallback_name() + { + var (e, db) = Setup(); + e.ExecuteNonQuery("CREATE TABLE T ( Id int PRIMARY KEY )"); + Assert.Equal("PrimaryKey", PkIndexName(db, "T")); + } +} diff --git a/test/LibRed.Engine.Tests/QualifiedStarTests.cs b/test/LibRed.Engine.Tests/QualifiedStarTests.cs new file mode 100644 index 00000000..3f844366 --- /dev/null +++ b/test/LibRed.Engine.Tests/QualifiedStarTests.cs @@ -0,0 +1,72 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// A table-qualified star, Table.*, in a projection (e.g. Northwind's "Alphabetical list of +/// products": SELECT Products.*, Categories.CategoryName FROM …) expands to that source's columns. +/// This checks the direct query, a LibRed-created view over it, and reading back Access's own such view. +/// +public class QualifiedStarTests +{ + private const string Query = + "SELECT Products.*, Categories.CategoryName FROM Categories " + + "INNER JOIN Products ON Categories.CategoryID = Products.CategoryID WHERE Products.Discontinued = 0"; + + private static string Fresh() + { + string p = Path.Combine(Path.GetTempPath(), $"qstar-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), p); + return p; + } + + [Fact] + public void Qualified_star_expands_to_the_sources_columns() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var rs = new QueryEngine(db).ExecuteQuery(Query); + + // Products' 10 columns, then Categories.CategoryName. + Assert.Equal(11, rs.ColumnNames.Count); + Assert.Equal("ProductID", rs.ColumnNames[0]); + Assert.Equal("CategoryName", rs.ColumnNames[^1]); + Assert.Equal(69, rs.Rows.Count()); // the not-discontinued products + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void A_qualified_star_view_round_trips_and_matches_access_own_view() + { + string path = Fresh(); + try + { + // Northwind already ships "Alphabetical list of products" (an Access-created qualified-star view); + // reading it back through LibRed must resolve the Table.* the same as running the query directly. + using (var db = JetDatabase.Open(path)) + { + var e = new QueryEngine(db); + int direct = e.ExecuteQuery(Query).Rows.Count(); + var view = e.ExecuteQuery("SELECT * FROM `Alphabetical list of products`"); + Assert.Equal(11, view.ColumnNames.Count); + Assert.Equal(direct, view.Rows.Count()); + } + + // And a LibRed-created qualified-star view round-trips the same. + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery("CREATE VIEW `MyAlph` AS " + Query.Replace("Products.Discontinued = 0", "(((Products.Discontinued)=0))")); + using (var db = JetDatabase.Open(path)) + { + var rs = new QueryEngine(db).ExecuteQuery("SELECT * FROM `MyAlph`"); + Assert.Equal(11, rs.ColumnNames.Count); + Assert.Equal(69, rs.Rows.Count()); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/RandomAutoNumberTests.cs b/test/LibRed.Engine.Tests/RandomAutoNumberTests.cs new file mode 100644 index 00000000..d2162cd1 --- /dev/null +++ b/test/LibRed.Engine.Tests/RandomAutoNumberTests.cs @@ -0,0 +1,102 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// A "Random" AutoNumber — an AutoNumber column with DEFAULT GenUniqueID() (Access's "New Values = Random"). +// LibRed persists the GenUniqueID() default to the column's LvProp (byte-identical to a UI-authored one) and, +// on insert, assigns a random Int32 per row instead of the sequential seed/increment counter. +public class RandomAutoNumberTests +{ + private static (QueryEngine Engine, JetDatabase Db) Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"rand-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var db = JetDatabase.Open(path, readOnly: false); + return (new QueryEngine(db), db); + } + + [Theory] + [InlineData("COUNTER DEFAULT GenUniqueID()")] + [InlineData("AUTOINCREMENT DEFAULT GenUniqueID()")] + public void Assigns_random_ids_not_the_sequential_counter(string type) + { + var (e, _) = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE R ( Id {type}, Name text(10) )"); + foreach (var n in new[] { "a", "b", "c", "d", "e" }) + e.ExecuteNonQuery($"INSERT INTO R (Name) VALUES ('{n}')"); + + int[] ids = e.ExecuteQuery("SELECT Id FROM R").Rows.Select(r => Convert.ToInt32(r[0])).ToArray(); + + Assert.Equal(5, ids.Length); + Assert.Equal(5, ids.Distinct().Count()); // unique per row + Assert.DoesNotContain(0, ids); // GenUniqueID() never yields 0 + // Not the 1,2,3,4,5 sequential counter — random ids won't be a contiguous ascending run. + Assert.False(ids.Zip(ids.Skip(1)).All(p => p.Second - p.First == 1), "ids should not be sequential"); + } + + [Fact] + public void GenUniqueID_default_round_trips_as_a_random_autonumber() + { + var (e, db) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE R ( Id COUNTER DEFAULT GenUniqueID(), Name text(10) )"); + + var col = db.Catalog.UserTables.Single(t => t.Name == "R").Columns.Single(c => c.Name == "Id"); + Assert.True(col.IsAutoNumber); + Assert.True(col.IsRandomAutoNumber); + Assert.Equal("GenUniqueID()", col.DefaultValue); + } + + // GenUniqueID() is also valid as a plain (non-AutoNumber) LONG column default (ACE accepts it only on LONG). + // Unlike an AutoNumber, the column is user-writable: an omitted value gets a random Long, a supplied one is + // kept verbatim. + [Fact] + public void Plain_long_default_generates_random_values_but_stays_user_writable() + { + var (e, _) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE R ( K LONG PRIMARY KEY, V LONG DEFAULT GenUniqueID() )"); + e.ExecuteNonQuery("INSERT INTO R (K) VALUES (1)"); // V defaulted → random + e.ExecuteNonQuery("INSERT INTO R (K) VALUES (2)"); // V defaulted → random + e.ExecuteNonQuery("INSERT INTO R (K, V) VALUES (3, 777)"); // V supplied → kept + + var rows = e.ExecuteQuery("SELECT K, V FROM R ORDER BY K").Rows + .Select(r => (K: Convert.ToInt32(r[0]), V: Convert.ToInt32(r[1]))).ToArray(); + + Assert.Equal(777, rows.Single(r => r.K == 3).V); // supplied value preserved + var defaulted = rows.Where(r => r.K != 3).Select(r => r.V).ToArray(); + Assert.All(defaulted, v => Assert.NotEqual(0, v)); + Assert.Equal(2, defaulted.Distinct().Count()); // random, not a constant + } + + // ACE accepts GenUniqueID() as a DEFAULT only on a LONG (Int32) column; every other type is rejected at + // CREATE time ("Cannot place this validation expression on this field"). LibRed matches that validation. + [Theory] + [InlineData("BYTE")] + [InlineData("SHORT")] + [InlineData("DOUBLE")] + [InlineData("CURRENCY")] + [InlineData("GUID")] + [InlineData("DATETIME")] + [InlineData("BIT")] + [InlineData("TEXT(20)")] + public void GenUniqueID_default_is_rejected_on_a_non_long_column(string type) + { + var (e, _) = Fresh(); + var ex = Assert.Throws(() => + e.ExecuteNonQuery($"CREATE TABLE R ( K LONG PRIMARY KEY, V {type} DEFAULT GenUniqueID() )")); + Assert.Contains("Cannot place this validation expression on this field", ex.Message); + } + + [Fact] + public void Retrieves_the_generated_random_id_as_identity() + { + var (e, _) = Fresh(); + e.ExecuteNonQuery("CREATE TABLE R ( Id COUNTER DEFAULT GenUniqueID(), Name text(10) )"); + e.ExecuteNonQuery("INSERT INTO R (Name) VALUES ('a')"); + + object identity = e.ExecuteQuery("SELECT @@IDENTITY").Rows.Single()[0]!; + int stored = e.ExecuteQuery("SELECT Id FROM R").Rows.Select(r => Convert.ToInt32(r[0])).Single(); + Assert.Equal(stored, Convert.ToInt32(identity)); + } +} diff --git a/test/LibRed.Engine.Tests/ReferentialActionTests.cs b/test/LibRed.Engine.Tests/ReferentialActionTests.cs new file mode 100644 index 00000000..7ef10bc0 --- /dev/null +++ b/test/LibRed.Engine.Tests/ReferentialActionTests.cs @@ -0,0 +1,131 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Referential integrity on UPDATE/DELETE + the ON UPDATE/ON DELETE actions, all verified against ACE: +// NO ACTION rejects, CASCADE propagates, ON DELETE SET NULL nulls the child FK (Jet has no ON UPDATE SET NULL). +public class ReferentialActionTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"ri-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static QueryEngine SetUp(JetDatabase db, string fkClause) + { + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE P (Id long PRIMARY KEY, N long)"); + e.ExecuteNonQuery($"CREATE TABLE C (Id long PRIMARY KEY, ParentId long, CONSTRAINT FK_C FOREIGN KEY (ParentId) REFERENCES P (Id){fkClause})"); + e.ExecuteNonQuery("INSERT INTO P (Id, N) VALUES (1, 10)"); + e.ExecuteNonQuery("INSERT INTO P (Id, N) VALUES (2, 20)"); + e.ExecuteNonQuery("INSERT INTO C (Id, ParentId) VALUES (100, 1)"); // two children of P#1 + e.ExecuteNonQuery("INSERT INTO C (Id, ParentId) VALUES (101, 1)"); + return e; + } + + private static void Run(string fkClause, Action act) + { + string path = Fresh(); + try { using var db = JetDatabase.Open(path, readOnly: false); act(SetUp(db, fkClause)); } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + private static int[] ChildParents(QueryEngine e) => + e.ExecuteQuery("SELECT ParentId FROM C ORDER BY Id").Rows.Select(r => r[0] is null ? -1 : Convert.ToInt32(r[0])).ToArray(); + + [Fact] + public void No_action_rejects_deleting_or_key_updating_a_parent_with_children() + { + Run("", e => + { + Assert.Throws(() => e.ExecuteNonQuery("DELETE FROM P WHERE Id = 1")); + Assert.Throws(() => e.ExecuteNonQuery("UPDATE P SET Id = 9 WHERE Id = 1")); + Assert.Equal(2, e.ExecuteQuery("SELECT Id FROM P").Rows.Count()); // nothing changed + Assert.Equal(new[] { 1, 1 }, ChildParents(e)); + + // A parent with NO children can be deleted / key-updated freely. + Assert.Equal(1, e.ExecuteNonQuery("DELETE FROM P WHERE Id = 2")); + }); + } + + [Fact] + public void Child_fk_update_must_reference_an_existing_parent() + { + Run("", e => + { + Assert.Throws(() => e.ExecuteNonQuery("UPDATE C SET ParentId = 99 WHERE Id = 100")); + Assert.Equal(1, e.ExecuteNonQuery("UPDATE C SET ParentId = 2 WHERE Id = 100")); // 2 exists → allowed + Assert.Equal(new[] { 2, 1 }, ChildParents(e)); + }); + } + + [Fact] + public void Cascade_delete_removes_the_children() + { + Run(" ON DELETE CASCADE", e => + { + Assert.Equal(1, e.ExecuteNonQuery("DELETE FROM P WHERE Id = 1")); + Assert.Empty(e.ExecuteQuery("SELECT Id FROM C").Rows); // both children gone + Assert.Equal(new[] { 2 }, e.ExecuteQuery("SELECT Id FROM P").Rows.Select(r => Convert.ToInt32(r[0]))); + }); + } + + [Fact] + public void Cascade_update_rewrites_the_children_fk() + { + Run(" ON UPDATE CASCADE", e => + { + Assert.Equal(1, e.ExecuteNonQuery("UPDATE P SET Id = 9 WHERE Id = 1")); + Assert.Equal(new[] { 9, 9 }, ChildParents(e)); // children followed the new key + Assert.Equal(9, Convert.ToInt32(e.ExecuteQuery("SELECT Id FROM P WHERE N = 10").Rows.Single()[0])); + }); + } + + [Fact] + public void Set_null_delete_nulls_the_children_fk() + { + Run(" ON DELETE SET NULL", e => + { + Assert.Equal(1, e.ExecuteNonQuery("DELETE FROM P WHERE Id = 1")); + Assert.Equal(new[] { -1, -1 }, ChildParents(e)); // children's ParentId set to NULL + Assert.Equal(2, e.ExecuteQuery("SELECT Id FROM C").Rows.Count()); // children still there + }); + } + + // ON UPDATE SET NULL is a pathway only — its Jet storage bytes are unverified (ACE's OLE DB provider + // rejects the DDL), so creating one throws NotImplemented rather than guessing the bytes. + [Fact] + public void On_update_set_null_throws_not_implemented() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE P (Id long PRIMARY KEY)"); + var ex = Assert.Throws(() => e.ExecuteNonQuery( + "CREATE TABLE C (Id long PRIMARY KEY, ParentId long, CONSTRAINT FK_C FOREIGN KEY (ParentId) REFERENCES P (Id) ON UPDATE SET NULL ON DELETE SET NULL)")); + Assert.Contains("ON UPDATE SET NULL", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Set_null_action_persists_and_reads_back() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) SetUp(db, " ON DELETE SET NULL"); + using var db2 = JetDatabase.Open(path); + var fk = Assert.Single(db2.Catalog.ForeignKeysOf("C")); + Assert.True(fk.DeleteSetNull); + Assert.False(fk.CascadeDelete); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/RndValFunctionTests.cs b/test/LibRed.Engine.Tests/RndValFunctionTests.cs new file mode 100644 index 00000000..fe3efb35 --- /dev/null +++ b/test/LibRed.Engine.Tests/RndValFunctionTests.cs @@ -0,0 +1,58 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Val (whitespace-stripping + &H/&O prefixes) and Rnd (VBA 24-bit LCG) — verified byte-identical to ACE. +public class RndValFunctionTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"rv-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static object? Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]; + + [Theory] + [InlineData("Val('12abc')", 12)] + [InlineData("Val(' 12 34 ')", 1234)] // internal whitespace stripped + [InlineData("Val('&HFF')", 255)] // hex prefix + [InlineData("Val('&O10')", 8)] // octal prefix + [InlineData("Val('1E2')", 100)] // exponent + [InlineData("Val(' ')", 0)] + [InlineData("Val('abc')", 0)] + [InlineData("Val('3 .1 4')", 3.14)] // spaces inside the number + [InlineData("Val(' - 5')", -5)] // spaces around the sign + [InlineData("Val('12.3.4')", 12.3)] // stops at the second dot + [InlineData("Val('-3.14')", -3.14)] + public void Val_matches_ace(string expr, double expected) + => Assert.Equal(expected, Convert.ToDouble(Eval(expr)), 10); + + [Fact] + public void Rnd_negative_reseeds_to_aces_exact_value() + // VBA's LCG: Rnd(-1) reseeds deterministically to the same value ACE produces. + => Assert.Equal(0.2240070104598999, Convert.ToDouble(Eval("Rnd(-1)")), 15); + + [Fact] + public void Rnd_negative_is_deterministic_within_a_query() + { + var e = Fresh(); + var row = e.ExecuteQuery("SELECT Rnd(-1) AS a, Rnd(-1) AS b FROM T").Rows.Single(); + Assert.Equal(Convert.ToDouble(row[0]), Convert.ToDouble(row[1])); + } + + [Theory] + [InlineData("Rnd()")] + [InlineData("Rnd(1)")] + public void Rnd_is_in_the_unit_interval(string expr) + { + double r = Convert.ToDouble(Eval(expr)); + Assert.InRange(r, 0.0, 1.0); + } +} diff --git a/test/LibRed.Engine.Tests/SelectPredicateTests.cs b/test/LibRed.Engine.Tests/SelectPredicateTests.cs new file mode 100644 index 00000000..35e2b1a6 --- /dev/null +++ b/test/LibRed.Engine.Tests/SelectPredicateTests.cs @@ -0,0 +1,109 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// The Access SELECT predicates — ALL, DISTINCT, DISTINCTROW, and TOP n [PERCENT]. +/// Row counts are the ones the ACE engine itself returns for the same queries (probed against Northwind and, +/// for the DISTINCTROW edge case, a purpose-built table). +/// +public class SelectPredicateTests +{ + private static QueryEngine Northwind() + { + string path = Path.Combine(Path.GetTempPath(), $"pred-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + private static int Count(QueryEngine e, string sql) => e.ExecuteQuery(sql).Rows.Count(); + + [Theory] + // ceil(rows × n / 100): Orders has 830 rows, Employees 9. Verified against ACE. + [InlineData("SELECT TOP 10 PERCENT * FROM Orders ORDER BY OrderID", 83)] + [InlineData("SELECT TOP 1 PERCENT * FROM Orders ORDER BY OrderID", 9)] // 8.3 → 9 + [InlineData("SELECT TOP 10 PERCENT * FROM Employees ORDER BY EmployeeID", 1)] // 0.9 → 1 + [InlineData("SELECT TOP 25 PERCENT * FROM Employees ORDER BY EmployeeID", 3)] // 2.25 → 3 + [InlineData("SELECT TOP 33 PERCENT * FROM Employees ORDER BY EmployeeID", 3)] // 2.97 → 3 + public void Top_percent_takes_the_ceiling(string sql, int expected) + => Assert.Equal(expected, Count(Northwind(), sql)); + + [Fact] + public void Top_n_still_takes_an_absolute_count() + => Assert.Equal(5, Count(Northwind(), "SELECT TOP 5 * FROM Orders ORDER BY OrderID")); + + [Theory] + // A zero limit returns nothing and, more to the point, reads nothing: the PERCENT path has to materialise its + // input before it can work out the take, so without an early exit `TOP 0 PERCENT` buffered all 830 rows only + // to discard every one — and did so per outer row when it sat inside a correlated subquery. + [InlineData("SELECT TOP 0 * FROM Orders ORDER BY OrderID")] + [InlineData("SELECT TOP 0 PERCENT * FROM Orders ORDER BY OrderID")] + public void A_zero_limit_returns_no_rows(string sql) + => Assert.Equal(0, Count(Northwind(), sql)); + + [Fact] + public void All_is_the_default_and_returns_every_row() + { + var e = Northwind(); + Assert.Equal(9, Count(e, "SELECT ALL City FROM Employees")); // explicit ALL + Assert.Equal(9, Count(e, "SELECT City FROM Employees")); // omitted ⇒ same + } + + [Fact] + public void Distinct_dedupes_on_the_output_columns() + => Assert.Equal(5, Count(Northwind(), "SELECT DISTINCT City FROM Employees")); // 9 rows, 5 cities + + [Fact] + public void Distinctrow_is_ignored_for_a_single_table() + // Access ignores DISTINCTROW when there is one source table — it returns all rows, unlike DISTINCT. + => Assert.Equal(9, Count(Northwind(), "SELECT DISTINCTROW City FROM Employees")); + + [Fact] + public void Distinctrow_is_ignored_when_output_covers_every_table() + { + var e = Northwind(); + const string join = "FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID"; + // Output columns from both tables ⇒ DISTINCTROW is a no-op, same as plain. + Assert.Equal(830, Count(e, $"SELECT DISTINCTROW c.CompanyName, o.OrderID {join}")); + Assert.Equal(830, Count(e, $"SELECT c.CompanyName, o.OrderID {join}")); + } + + [Fact] + public void Distinctrow_dedupes_on_the_contributing_tables_rows() + { + // Output only from Customers ⇒ one row per distinct customer that has ≥1 order. + var e = Northwind(); + const string join = "FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID"; + Assert.Equal(89, Count(e, $"SELECT DISTINCTROW c.CompanyName {join}")); + Assert.Equal(830, Count(e, $"SELECT c.CompanyName {join}")); // without the predicate: one per order + } + + [Fact] + public void Distinctrow_dedupes_on_underlying_rows_not_output_values() + { + // Two parents share a name but are distinct rows; DISTINCTROW keeps both (it dedupes on the whole + // Parent row), where DISTINCT on the name collapses them. A third parent appears twice in the join + // but is one row, so it dedupes to one. ACE returns DISTINCTROW = 3, DISTINCT = 2 (verified). + var e = Northwind(); + foreach (string sql in new[] + { + "CREATE TABLE P (Id LONG PRIMARY KEY, Nm TEXT(50))", + "CREATE TABLE Ch (Id LONG PRIMARY KEY, Pid LONG)", + "INSERT INTO P (Id, Nm) VALUES (1, 'Acme')", + "INSERT INTO P (Id, Nm) VALUES (2, 'Acme')", + "INSERT INTO P (Id, Nm) VALUES (3, 'Beta')", + "INSERT INTO Ch (Id, Pid) VALUES (10, 1)", + "INSERT INTO Ch (Id, Pid) VALUES (11, 2)", + "INSERT INTO Ch (Id, Pid) VALUES (12, 3)", + "INSERT INTO Ch (Id, Pid) VALUES (13, 3)", + }) + e.ExecuteNonQuery(sql); + + const string join = "FROM P AS p INNER JOIN Ch AS c ON p.Id = c.Pid"; + Assert.Equal(3, Count(e, $"SELECT DISTINCTROW p.Nm {join}")); + Assert.Equal(2, Count(e, $"SELECT DISTINCT p.Nm {join}")); + } +} diff --git a/test/LibRed.Engine.Tests/SelfRefInsertTests.cs b/test/LibRed.Engine.Tests/SelfRefInsertTests.cs new file mode 100644 index 00000000..20434000 --- /dev/null +++ b/test/LibRed.Engine.Tests/SelfRefInsertTests.cs @@ -0,0 +1,48 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Repro for the ComplexNavigations seed failure: a REQUIRED self-referencing FK (LevelOne.Inverse1Id -> +// LevelOne.Id). EF inserts parent rows before children, so immediate FK enforcement should pass. Probing +// which order/shape our RI enforcement wrongly rejects. +public class SelfRefInsertTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"selfref-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE L1 (Id long PRIMARY KEY, Pid long, " + + "CONSTRAINT FK_Self FOREIGN KEY (Pid) REFERENCES L1 (Id))"); + return e; + } + + [Fact] + public void Parent_before_child_is_accepted() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO L1 (Id, Pid) VALUES (1, 1)"); // root points to itself + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO L1 (Id, Pid) VALUES (2, 1)")); // child of 1 + Assert.Equal(2, e.ExecuteQuery("SELECT Id FROM L1").Rows.Count()); + } + + [Fact] + public void Self_pointing_root_is_accepted() + { + var e = Fresh(); + // The root of a required self-ref must point at an existing row; EF/Access allow it to point at + // itself. The row being inserted must count as a candidate parent for its own FK. + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO L1 (Id, Pid) VALUES (1, 1)")); + } + + [Fact] + public void Child_referencing_missing_parent_is_rejected() + { + var e = Fresh(); + Assert.Throws(() => + e.ExecuteNonQuery("INSERT INTO L1 (Id, Pid) VALUES (2, 99)")); // 99 does not exist + } +} diff --git a/test/LibRed.Engine.Tests/SortBoundTests.cs b/test/LibRed.Engine.Tests/SortBoundTests.cs new file mode 100644 index 00000000..e183e58d --- /dev/null +++ b/test/LibRed.Engine.Tests/SortBoundTests.cs @@ -0,0 +1,92 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// ORDER BY keys are evaluated once per row rather than inside the comparer, and a `TOP n` above a sort bounds it so +// it keeps only the n smallest instead of ordering everything. Both change HOW rows are ordered internally — the +// second replaced a stable sort with a total order over (keys, input position) — so these pin that the observable +// order is unchanged, in particular that ties still come out in input order. +public class SortBoundTests +{ + private const int Rows = 500; + + private static QueryEngine Ties() + { + string path = Path.Combine(Path.GetTempPath(), $"sortb-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + // Grp deliberately coarse (5 values over 500 rows) so every ORDER BY on it is 100-way tied, and Id + // ascending is the insertion order — so "ties in input order" is checkable. + e.ExecuteNonQuery("CREATE TABLE T ( Id LONG PRIMARY KEY, Grp LONG, Val LONG )"); + e.ExecuteNonQuery("BEGIN TRANSACTION"); + for (var i = 1; i <= Rows; i++) + { + e.ExecuteNonQuery($"INSERT INTO T (Id, Grp, Val) VALUES ({i}, {i % 5}, {(i * 37) % 101})"); + } + + e.ExecuteNonQuery("COMMIT"); + return e; + } + + private static long[] Ids(QueryEngine e, string sql) + => e.ExecuteQuery(sql).Rows.Select(r => Convert.ToInt64(r[0])).ToArray(); + + [Fact] + public void Ties_keep_input_order() + { + // All 100 rows sharing Grp = 1 must appear in ascending Id — the order they were inserted. A sort that + // reordered ties (an unstable algorithm without the position tiebreak) would scramble these. + long[] ids = Ids(Ties(), "SELECT t.Id FROM T AS t WHERE t.Grp = 1 ORDER BY t.Grp"); + Assert.Equal(ids.OrderBy(x => x).ToArray(), ids); + } + + [Theory] + // A bounded sort must return exactly what ordering everything and taking n returns — including which of the + // tied rows survive, which is the part a non-total order would get wrong. + [InlineData(1)] + [InlineData(2)] + [InlineData(7)] + [InlineData(150)] // spans several trim cycles (the buffer is trimmed at 2n) + [InlineData(499)] + [InlineData(Rows)] // exactly the row count + [InlineData(Rows + 50)] // more than exists: the bound must not invent or drop rows + public void A_bounded_sort_agrees_with_the_full_sort(int take) + { + QueryEngine e = Ties(); + long[] full = Ids(e, "SELECT t.Id FROM T AS t ORDER BY t.Grp"); + long[] bounded = Ids(e, $"SELECT TOP {take} t.Id FROM T AS t ORDER BY t.Grp"); + + Assert.Equal(full.Take(take).ToArray(), bounded); + } + + [Fact] + public void A_bounded_sort_honours_descending_and_multiple_keys() + { + QueryEngine e = Ties(); + const string order = "ORDER BY t.Grp DESC, t.Val, t.Id DESC"; + long[] full = Ids(e, $"SELECT t.Id FROM T AS t {order}"); + long[] bounded = Ids(e, $"SELECT TOP 10 t.Id FROM T AS t {order}"); + + Assert.Equal(full.Take(10).ToArray(), bounded); + } + + [Fact] + public void A_top_over_a_distinct_is_not_bounded_below_it() + { + // DISTINCT collapses rows, so the n rows reaching the TOP are not the n the sort would have kept — the + // planner must leave the sort unbounded here. With 5 distinct Grp values, TOP 3 DISTINCT gives 3 rows; + // bounding the sort to 3 first would have left only rows sharing the smallest Grp, collapsing to 1. + QueryEngine e = Ties(); + Assert.Equal(3, e.ExecuteQuery("SELECT DISTINCT TOP 3 t.Grp FROM T AS t ORDER BY t.Grp").Rows.Count()); + } + + [Fact] + public void A_bounded_sort_still_applies_the_projection_and_filter() + { + QueryEngine e = Ties(); + Assert.Equal([1, 6, 11], Ids(e, "SELECT TOP 3 t.Id FROM T AS t WHERE t.Grp = 1 ORDER BY t.Id")); + } +} diff --git a/test/LibRed.Engine.Tests/SortPushdownTests.cs b/test/LibRed.Engine.Tests/SortPushdownTests.cs new file mode 100644 index 00000000..a646636e --- /dev/null +++ b/test/LibRed.Engine.Tests/SortPushdownTests.cs @@ -0,0 +1,126 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// An ORDER BY whose keys all come from one side of a join is applied to that side, so the join streams in order +// instead of its product being built and sorted. These pin that the observable order is identical — including the +// tie behaviour, which is the whole reason the rewrite is sound — and that the shapes it must not touch decline. +public class SortPushdownTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"sortpd-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + // Grp deliberately ties in pairs, and is anti-correlated with Id, so an ORDER BY Grp genuinely reorders + // and the tie order is observable. + e.ExecuteNonQuery("CREATE TABLE L ( Id LONG PRIMARY KEY, Grp LONG )"); + foreach ((int id, int grp) in new[] { (1, 2), (2, 1), (3, 2), (4, 1) }) + { + e.ExecuteNonQuery($"INSERT INTO L (Id, Grp) VALUES ({id}, {grp})"); + } + + // Rk matches L1 twice and L3 once; L2 and L4 have no partner. + e.ExecuteNonQuery("CREATE TABLE R ( Id LONG PRIMARY KEY, Rk LONG )"); + foreach ((int id, int rk) in new[] { (10, 1), (20, 1), (30, 3) }) + { + e.ExecuteNonQuery($"INSERT INTO R (Id, Rk) VALUES ({id}, {rk})"); + } + + return e; + } + + private static long[] Col(QueryEngine e, string sql, int ordinal = 0) + => e.ExecuteQuery(sql).Rows.Select(r => Convert.ToInt64(r[ordinal])).ToArray(); + + [Fact] + public void A_cross_join_keeps_the_order_sorting_the_product_would_give() + { + // L sorted by Grp is 2, 4 (Grp 1, ties in input order), then 1, 3 (Grp 2). Each contributes 3 rows. + // + // This is exactly what sorting the 12-row product would produce, and the reason is the tie handling: the + // product is enumerated left-major, so tied L rows already appear in L order there — which is the order a + // stable sort of the product preserves, and the order sorting L alone produces. + Assert.Equal([2, 2, 2, 4, 4, 4, 1, 1, 1, 3, 3, 3], + Col(Fresh(), "SELECT l.Id FROM L AS l, R AS r ORDER BY l.Grp")); + } + + [Fact] + public void A_left_join_keeps_its_unmatched_rows_in_order() + // Sorted L is 2, 4, 1, 3; L2 and L4 have no partner (one null-padded row each), L1 has two, L3 has one. + => Assert.Equal([2, 4, 1, 1, 3], + Col(Fresh(), "SELECT l.Id FROM L AS l LEFT JOIN R AS r ON l.Id = r.Rk ORDER BY l.Grp")); + + [Fact] + public void An_inner_join_keeps_only_matches_in_order() + => Assert.Equal([1, 1, 3], + Col(Fresh(), "SELECT l.Id FROM L AS l INNER JOIN R AS r ON l.Id = r.Rk ORDER BY l.Grp")); + + [Fact] + public void A_three_way_join_sinks_the_sort_past_both_joins() + // The shape that motivated this: keys on the leftmost table of a left-deep chain. 4 × 3 × 3 = 36 rows. + => Assert.Equal( + Enumerable.Repeat(2L, 9).Concat(Enumerable.Repeat(4L, 9)) + .Concat(Enumerable.Repeat(1L, 9)).Concat(Enumerable.Repeat(3L, 9)).ToArray(), + Col(Fresh(), "SELECT l.Id FROM L AS l, R AS r, R AS r2 ORDER BY l.Grp")); + + [Fact] + public void A_key_from_both_sides_stays_above_the_join() + // Cannot be pushed to either side, so it sorts the product — and must still order it correctly: + // by Grp, then by r.Id descending within each L row's group. + => Assert.Equal([2, 2, 2, 4, 4, 4, 1, 1, 1, 3, 3, 3], + Col(Fresh(), "SELECT l.Id FROM L AS l, R AS r ORDER BY l.Grp, l.Id, r.Id DESC")); + + [Fact] + public void A_key_from_the_right_side_only_stays_above_the_join() + // Sorting the RIGHT side would not drive the output order (the left does), so this must not be pushed. + // Ordering by r.Rk descending puts R 30 (Rk 3) first, then the two Rk 1 rows, for each L row in scan order. + => Assert.Equal([30, 10, 20], + Col(Fresh(), "SELECT r.Id FROM L AS l, R AS r WHERE l.Id = 1 ORDER BY r.Rk DESC, r.Id")); + + [Fact] + public void An_unqualified_key_stays_above_the_join() + // A bare name could bind to either side, and only the evaluator's resolver knows which — so it declines. + // `Grp` exists only on L, so the answer matches the qualified form; what is pinned is that it is correct. + => Assert.Equal([2, 2, 2, 4, 4, 4, 1, 1, 1, 3, 3, 3], + Col(Fresh(), "SELECT l.Id FROM L AS l, R AS r ORDER BY Grp")); + + [Fact] + public void A_top_over_a_pushed_sort_returns_the_same_rows() + { + QueryEngine e = Fresh(); + long[] full = Col(e, "SELECT l.Id FROM L AS l, R AS r ORDER BY l.Grp"); + Assert.Equal(full.Take(4).ToArray(), Col(e, "SELECT TOP 4 l.Id FROM L AS l, R AS r ORDER BY l.Grp")); + } + + [Fact] + public void A_descending_pushed_sort_reverses_correctly() + => Assert.Equal([1, 1, 1, 3, 3, 3, 2, 2, 2, 4, 4, 4], + Col(Fresh(), "SELECT l.Id FROM L AS l, R AS r ORDER BY l.Grp DESC")); + + // The correctness tests above pass whether or not the sort is pushed, so this pins that it IS: ordering the + // 679,770-row cross product to return one row took 1,363 ms, against 172 ms sorting the 91 customers and + // letting the TOP stop the join early. + [Fact] + public void The_pushdown_engages_on_a_three_way_cross_join_over_northwind() + { + string path = Path.Combine(Path.GetTempPath(), $"sortpdperf-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + var sw = System.Diagnostics.Stopwatch.StartNew(); + int rows = e.ExecuteQuery( + """ + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName` + FROM `Customers` AS `c`, `Orders` AS `o`, `Employees` AS `e` + ORDER BY `c`.`CustomerID` + """).Rows.Count(); + sw.Stop(); + + Assert.Equal(1, rows); + Assert.True(sw.ElapsedMilliseconds < 600, $"took {sw.ElapsedMilliseconds} ms — the sort was not pushed below the join"); + } +} diff --git a/test/LibRed.Engine.Tests/SqlCommentTests.cs b/test/LibRed.Engine.Tests/SqlCommentTests.cs new file mode 100644 index 00000000..eb1c9f8e --- /dev/null +++ b/test/LibRed.Engine.Tests/SqlCommentTests.cs @@ -0,0 +1,29 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// SQL comments are skipped by the lexer — EF Core query tags prepend a -- tag line comment +/// to the statement (and block comments can appear too). +public class SqlCommentTests +{ + private static QueryEngine Engine() + { + string path = Path.Combine(Path.GetTempPath(), $"cmt-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id LONG PRIMARY KEY)"); + e.ExecuteNonQuery("INSERT INTO T (Id) VALUES (1)"); + return e; + } + + [Theory] + [InlineData("-- my query tag\nSELECT Id FROM T")] + [InlineData("-- tag one\n-- tag two\nSELECT Id FROM T")] + [InlineData("/* block */ SELECT Id FROM T")] + [InlineData("SELECT Id FROM T -- trailing")] + public void A_comment_is_skipped(string sql) + => Assert.Equal(1, Convert.ToInt32(Engine().ExecuteQuery(sql).Rows.Single()[0])); +} diff --git a/test/LibRed.Engine.Tests/SqlQueryTests.cs b/test/LibRed.Engine.Tests/SqlQueryTests.cs new file mode 100644 index 00000000..0e192a4d --- /dev/null +++ b/test/LibRed.Engine.Tests/SqlQueryTests.cs @@ -0,0 +1,114 @@ +using LibRed; +using LibRed.Engine; +using LibRed.Engine.Execution; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class SqlQueryTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + private static ResultSet Query(string sql) + { + using var db = JetDatabase.Open(Northwind); + var rs = new QueryEngine(db).ExecuteQuery(sql); + // Materialize while the database is open. + return new ResultSet(rs.ColumnNames, rs.Rows.ToList()); + } + + [Fact] + public void Select_star_returns_all_columns_and_rows() + { + var rs = Query("SELECT * FROM Categories"); + + Assert.Equal(["CategoryID", "CategoryName", "Description", "Picture"], rs.ColumnNames); + Assert.Equal(8, rs.Rows.Count()); + } + + [Fact] + public void Projection_and_where_equality() + { + var rs = Query("SELECT CategoryName FROM Categories WHERE CategoryID = 4"); + + Assert.Equal(["CategoryName"], rs.ColumnNames); + var only = Assert.Single(rs.Rows); + Assert.Equal("Dairy Products", only[0]); + } + + [Fact] + public void Where_with_string_literal() + { + var rs = Query("SELECT CompanyName, City FROM Customers WHERE Country = 'Germany'"); + + Assert.Equal(11, rs.Rows.Count()); // Northwind has 11 German customers + Assert.All(rs.Rows, r => Assert.IsType(r[0])); + } + + [Fact] + public void Bracket_quoted_identifiers_handle_spaces_and_aliases() + { + var rs = Query( + "SELECT [od].[OrderID], [od].[ProductID], [od].[Quantity] " + + "FROM [Order Details] AS [od] " + + "WHERE [od].[OrderID] = 10248 " + + "ORDER BY [od].[ProductID]"); + + Assert.Equal(["OrderID", "ProductID", "Quantity"], rs.ColumnNames); + Assert.Equal( + [(10248, 11, 12), (10248, 42, 10), (10248, 72, 5)], + rs.Rows.Select(r => (Convert.ToInt32(r[0]), Convert.ToInt32(r[1]), Convert.ToInt32(r[2])))); + } + + [Fact] + public void Top_limits_rows() + { + var rs = Query("SELECT TOP 3 CustomerID FROM Customers WHERE Country = 'Germany'"); + Assert.Equal(3, rs.Rows.Count()); + } + + [Fact] + public void Boolean_column_and_numeric_comparison_combined() + { + var rs = Query("SELECT ProductName, UnitPrice FROM Products WHERE Discontinued = true AND UnitPrice > 30"); + + var names = rs.Rows.Select(r => (string)r[0]!).ToList(); + Assert.Contains("Mishi Kobe Niku", names); + Assert.All(rs.Rows, r => Assert.True(Convert.ToDecimal(r[1]) > 30)); + } + + [Fact] + public void Or_and_alias() + { + var rs = Query("SELECT CategoryName AS Name FROM Categories WHERE CategoryID = 1 OR CategoryID = 8"); + + Assert.Equal(["Name"], rs.ColumnNames); + var names = rs.Rows.Select(r => (string)r[0]!).OrderBy(n => n).ToList(); + Assert.Equal(["Beverages", "Seafood"], names); + } + + [Fact] + public void Null_concat_and_like_wildcards_follow_access_style() + { + var rs = Query( + "SELECT CustomerID, Region & '-' & City AS RegionCity " + + "FROM Customers " + + "WHERE CustomerID LIKE 'A????' OR CustomerID LIKE 'B*' OR CustomerID = 'QUEDE' " + + "ORDER BY CustomerID"); + + Assert.Equal(["CustomerID", "RegionCity"], rs.ColumnNames); + Assert.Equal(["ALFKI", "ANATR", "ANTON", "AROUT", "BERGS", "BLAUS", "BLONP", "BOLID", "BONAP", "BOTTM", "BSBEV", "QUEDE"], + rs.Rows.Select(r => (string)r[0]!)); + Assert.Equal("-Berlin", rs.Rows.Single(r => (string)r[0]! == "ALFKI")[1]); // NULL Region concatenates as empty string + Assert.Equal("RJ-Rio de Janeiro", rs.Rows.Single(r => (string)r[0]! == "QUEDE")[1]); + } + + [Fact] + public void Unknown_table_throws_bind_error() + { + using var db = JetDatabase.Open(Northwind); + var engine = new QueryEngine(db); + var ex = Assert.Throws(() => engine.ExecuteQuery("SELECT * FROM Nope").Rows.ToList()); + Assert.Contains("Nope", ex.Message); + } +} diff --git a/test/LibRed.Engine.Tests/SqlTransactionControlTests.cs b/test/LibRed.Engine.Tests/SqlTransactionControlTests.cs new file mode 100644 index 00000000..a69ae48e --- /dev/null +++ b/test/LibRed.Engine.Tests/SqlTransactionControlTests.cs @@ -0,0 +1,76 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// SQL BEGIN/COMMIT/ROLLBACK [TRANSACTION|WORK] drive the same transaction as the ADO API, and nest onto the +// savepoint stack (Jet/DAO semantics: commit/rollback act on the innermost level). +public class SqlTransactionControlTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"txnctl-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE t ( id LONG PRIMARY KEY )"); // autocommit, before any BEGIN + return e; + } + + private static int[] Ids(QueryEngine e) => + e.ExecuteQuery("SELECT id FROM t").Rows.Select(r => Convert.ToInt32(r[0])).OrderBy(x => x).ToArray(); + + [Fact] + public void Begin_then_rollback_undoes_the_work() + { + var e = Fresh(); + e.ExecuteNonQuery("BEGIN TRANSACTION"); + e.ExecuteNonQuery("INSERT INTO t (id) VALUES (1)"); + e.ExecuteNonQuery("ROLLBACK"); + Assert.Empty(Ids(e)); + } + + [Fact] + public void Begin_then_commit_keeps_the_work() + { + var e = Fresh(); + e.ExecuteNonQuery("BEGIN WORK"); // the WORK object keyword + e.ExecuteNonQuery("INSERT INTO t (id) VALUES (1)"); + e.ExecuteNonQuery("COMMIT WORK"); + Assert.Equal([1], Ids(e)); + } + + [Fact] + public void A_nested_rollback_undoes_only_the_inner_level() + { + var e = Fresh(); + e.ExecuteNonQuery("BEGIN TRANSACTION"); + e.ExecuteNonQuery("INSERT INTO t (id) VALUES (1)"); + e.ExecuteNonQuery("BEGIN TRANSACTION"); // nested (depth 2 → savepoint) + e.ExecuteNonQuery("INSERT INTO t (id) VALUES (2)"); + e.ExecuteNonQuery("ROLLBACK"); // inner: undo id=2 only + e.ExecuteNonQuery("COMMIT"); // outer: keep id=1 + Assert.Equal([1], Ids(e)); + } + + [Fact] + public void A_nested_commit_leaves_its_work_under_the_outer_which_can_still_roll_back() + { + var e = Fresh(); + e.ExecuteNonQuery("BEGIN TRANSACTION"); + e.ExecuteNonQuery("INSERT INTO t (id) VALUES (1)"); + e.ExecuteNonQuery("BEGIN TRANSACTION"); + e.ExecuteNonQuery("INSERT INTO t (id) VALUES (2)"); + e.ExecuteNonQuery("COMMIT"); // inner: release savepoint, work stays under the outer + e.ExecuteNonQuery("ROLLBACK"); // outer: undo everything + Assert.Empty(Ids(e)); + } + + [Fact] + public void Commit_with_no_transaction_open_throws() + { + var e = Fresh(); + Assert.Throws(() => e.ExecuteNonQuery("COMMIT")); + } +} diff --git a/test/LibRed.Engine.Tests/StableSortTests.cs b/test/LibRed.Engine.Tests/StableSortTests.cs new file mode 100644 index 00000000..0a200245 --- /dev/null +++ b/test/LibRed.Engine.Tests/StableSortTests.cs @@ -0,0 +1,36 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// ORDER BY is a STABLE sort: rows whose ORDER BY keys are equal keep their input order. EF's reference and SQL +/// Server behave this way, so an ORDER BY that does not fully disambiguate (e.g. several orders per customer, +/// ordered only by customer) must return the tied rows in scan/insertion order — a List.Sort would not. +/// +public class StableSortTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"stable-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id LONG PRIMARY KEY, K TEXT(5), Seq LONG)"); + // Same key K='A' for several rows, inserted in a known Seq order; a stable ORDER BY K keeps that order. + (int id, string k, int seq)[] rows = + [(1, "A", 10), (2, "B", 20), (3, "A", 11), (4, "B", 21), (5, "A", 12), (6, "C", 30)]; + foreach (var (id, k, seq) in rows) e.ExecuteNonQuery($"INSERT INTO T (Id, K, Seq) VALUES ({id}, '{k}', {seq})"); + return e; + } + + [Fact] + public void Order_by_a_tied_key_preserves_input_order() + { + var e = Seeded(); + var seqs = e.ExecuteQuery("SELECT Seq FROM T ORDER BY K").Rows.Select(r => Convert.ToInt64(r[0])).ToList(); + // K ascending: A,A,A,B,B,C — and within each key, insertion (Id/Seq) order. + Assert.Equal(new long[] { 10, 11, 12, 20, 21, 30 }, seqs); + } +} diff --git a/test/LibRed.Engine.Tests/StandaloneExpressionParsingTests.cs b/test/LibRed.Engine.Tests/StandaloneExpressionParsingTests.cs new file mode 100644 index 00000000..c66c0b27 --- /dev/null +++ b/test/LibRed.Engine.Tests/StandaloneExpressionParsingTests.cs @@ -0,0 +1,25 @@ +using LibRed.Sql.Parsing; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class StandaloneExpressionParsingTests +{ + private readonly AntlrSqlParser _parser = new(); + + [Theory] + [InlineData("Amount > 0; DROP TABLE Products")] + [InlineData("Amount > 0 unexpected")] + public void ParseExpression_rejects_trailing_tokens(string sql) + { + Assert.Throws(() => _parser.ParseExpression(sql)); + } + + [Theory] + [InlineData("Amount > 0 AND Amount < 100")] + [InlineData("Amount > 0 -- trailing comment")] + public void ParseExpression_accepts_a_complete_expression(string sql) + { + _parser.ParseExpression(sql); + } +} diff --git a/test/LibRed.Engine.Tests/StatementAtomicityTests.cs b/test/LibRed.Engine.Tests/StatementAtomicityTests.cs new file mode 100644 index 00000000..91cb2592 --- /dev/null +++ b/test/LibRed.Engine.Tests/StatementAtomicityTests.cs @@ -0,0 +1,64 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Every DML/DDL statement is atomic on its own, even with no user transaction open: a failure partway +// through must leave the database exactly as it was before the statement ran (no half-written rows, index +// entries, or catalog metadata). The engine wraps each writing statement in an implicit transaction. +public class StatementAtomicityTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"atomic-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + [Fact] + public void Failed_update_rolls_back_rows_it_already_changed() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE t ( id LONG PRIMARY KEY, amt DOUBLE, CONSTRAINT ck CHECK (amt > 0) )"); + e.ExecuteNonQuery("INSERT INTO t (id, amt) VALUES (1, 100)"); + e.ExecuteNonQuery("INSERT INTO t (id, amt) VALUES (2, 5)"); + + // Row id=1 is updated to 90 first (valid, written); id=2 would become -5, which violates the check and + // throws mid-statement. Without atomicity id=1 would be left at the partially-applied 90. + Assert.ThrowsAny(() => e.ExecuteNonQuery("UPDATE t SET amt = amt - 10")); + + Assert.Equal(100.0, Convert.ToDouble(e.ExecuteQuery("SELECT amt FROM t WHERE id = 1").Rows.Single()[0])); + Assert.Equal(5.0, Convert.ToDouble(e.ExecuteQuery("SELECT amt FROM t WHERE id = 2").Rows.Single()[0])); + } + + [Fact] + public void Failed_insert_leaves_no_row_visible_to_a_scan() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE t ( id LONG PRIMARY KEY, name TEXT(50) )"); + e.ExecuteNonQuery("CREATE UNIQUE INDEX ux_name ON t (name)"); + e.ExecuteNonQuery("INSERT INTO t (id, name) VALUES (1, 'x')"); + + // Passes the primary key (id=2 is new) but duplicates the unique index on name — the row heap may be + // written before the index insert rejects it, so a leaked partial row would show up in a full scan. + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO t (id, name) VALUES (2, 'x')")); + + Assert.Equal(1, e.ExecuteQuery("SELECT COUNT(*) FROM t").Rows.Single()[0]); + Assert.Single(e.ExecuteQuery("SELECT id FROM t").Rows); + } + + [Fact] + public void A_committed_statement_persists_across_a_later_failure() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE t ( id LONG PRIMARY KEY, amt DOUBLE, CONSTRAINT ck CHECK (amt > 0) )"); + e.ExecuteNonQuery("INSERT INTO t (id, amt) VALUES (1, 50)"); // its own implicit transaction, committed + + Assert.ThrowsAny(() => e.ExecuteNonQuery("INSERT INTO t (id, amt) VALUES (2, -5)")); // rolled back + + // The first insert's autocommit is independent of the second's rollback. + Assert.Equal(1, e.ExecuteQuery("SELECT COUNT(*) FROM t").Rows.Single()[0]); + Assert.Equal(50.0, Convert.ToDouble(e.ExecuteQuery("SELECT amt FROM t WHERE id = 1").Rows.Single()[0])); + } +} diff --git a/test/LibRed.Engine.Tests/StatisticalAggregatesTests.cs b/test/LibRed.Engine.Tests/StatisticalAggregatesTests.cs new file mode 100644 index 00000000..15d52128 --- /dev/null +++ b/test/LibRed.Engine.Tests/StatisticalAggregatesTests.cs @@ -0,0 +1,62 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Access statistical aggregates StDev/StDevP/Var/VarP — verified byte-identical to ACE over the dataset +// {2,4,4,4,5,5,7,9} (mean 5). Sample forms divide by n-1 (NULL for a single value); population forms by n. +public class StatisticalAggregatesTests +{ + private static QueryEngine Seeded() + { + string path = Path.Combine(Path.GetTempPath(), $"stat-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE S ( K LONG PRIMARY KEY, V DOUBLE )"); + int k = 1; + foreach (var v in new[] { 2, 4, 4, 4, 5, 5, 7, 9 }) + e.ExecuteNonQuery($"INSERT INTO S (K, V) VALUES ({k++}, {v})"); + return e; + } + + private static object? Agg(QueryEngine e, string expr) => e.ExecuteQuery($"SELECT {expr} FROM S").Rows.Single()[0]; + + [Theory] + [InlineData("StDev(V)", 2.138089935299395)] // sample stddev + [InlineData("StDevP(V)", 2.0)] // population stddev + [InlineData("Var(V)", 4.571428571428571)] // sample variance (32/7) + [InlineData("VarP(V)", 4.0)] // population variance + public void Statistical_aggregates_match_ace(string expr, double expected) + => Assert.Equal(expected, Convert.ToDouble(Agg(Seeded(), expr)), 10); + + [Theory] + [InlineData("StdDev(V)", 2.138089935299395)] // "StdDev" alias of StDev (sample stddev) + [InlineData("StdDevP(V)", 2.0)] // "StdDevP" alias of StDevP + public void Alias_spellings_work(string expr, double expected) + => Assert.Equal(expected, Convert.ToDouble(Agg(Seeded(), expr)), 10); + + [Fact] + public void Sample_forms_are_null_for_a_single_value() + { + var e = Seeded(); + Assert.Null(e.ExecuteQuery("SELECT Var(V) FROM S WHERE K = 1").Rows.Single()[0]); + Assert.Null(e.ExecuteQuery("SELECT StDev(V) FROM S WHERE K = 1").Rows.Single()[0]); + } + + [Fact] + public void Population_forms_are_zero_for_a_single_value() + { + var e = Seeded(); + Assert.Equal(0.0, Convert.ToDouble(e.ExecuteQuery("SELECT VarP(V) FROM S WHERE K = 1").Rows.Single()[0]), 10); + } + + [Fact] + public void Grouped_statistical_aggregate() + { + var e = Seeded(); + // two groups by parity of V; just assert it runs and returns a row per group with a numeric StDevP. + var rows = e.ExecuteQuery("SELECT V, StDevP(V) FROM S GROUP BY V ORDER BY V").Rows; + Assert.NotEmpty(rows); + } +} diff --git a/test/LibRed.Engine.Tests/StrCompStrConvTests.cs b/test/LibRed.Engine.Tests/StrCompStrConvTests.cs new file mode 100644 index 00000000..139bfa89 --- /dev/null +++ b/test/LibRed.Engine.Tests/StrCompStrConvTests.cs @@ -0,0 +1,55 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// StrComp(a, b, [compare]) and the byte-reinterpretation StrConv modes (64/128) — verified byte-identical to ACE. +public class StrCompStrConvTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"scv-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static object? Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]; + + [Theory] + [InlineData("StrComp('a', 'a')", 0)] + [InlineData("StrComp('a', 'b')", -1)] + [InlineData("StrComp('b', 'a')", 1)] + [InlineData("StrComp('a', 'A')", 0)] // default = textual (case-insensitive) + [InlineData("StrComp('a', 'A', 0)", 1)] // binary: 'a'(97) > 'A'(65) + [InlineData("StrComp('a', 'A', 1)", 0)] // textual + [InlineData("StrComp('A', 'a', 0)", -1)] // binary + [InlineData("StrComp('Apple', 'apple', 0)", -1)] + [InlineData("StrComp('Apple', 'apple', 1)", 0)] + [InlineData("StrComp('abc', 'abd')", -1)] + public void StrComp_matches_ace(string expr, int expected) + => Assert.Equal(expected, Convert.ToInt32(Eval(expr))); + + [Theory] + [InlineData("StrComp(Null, 'a')")] + [InlineData("StrComp('a', Null)")] + public void StrComp_propagates_null(string expr) + => Assert.Null(Eval(expr)); + + [Fact] + public void StrConv_vbUnicode_64_reinterprets_utf16_bytes() + // each ANSI byte of 'hello' becomes one char, doubling the length with null chars + => Assert.Equal("h\0e\0l\0l\0o\0", Convert.ToString(Eval("StrConv('hello', 64)"))); + + [Fact] + public void StrConv_vbFromUnicode_128_combines_char_pairs() + // (h,e)->U+6568, (l,l)->U+6C6C, trailing 'o' dropped + => Assert.Equal("敨汬", Convert.ToString(Eval("StrConv('hello', 128)"))); + + [Fact] + public void StrConv_mode_4_is_rejected() // narrow->wide errors in the JES + => Assert.Throws(() => Eval("StrConv('hello', 4)")); +} diff --git a/test/LibRed.Engine.Tests/StringComparisonTests.cs b/test/LibRed.Engine.Tests/StringComparisonTests.cs new file mode 100644 index 00000000..364bcce6 --- /dev/null +++ b/test/LibRed.Engine.Tests/StringComparisonTests.cs @@ -0,0 +1,98 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class StringComparisonTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"strcmp-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static object? Scalar(string expr) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE One (Id LONG)"); + e.ExecuteNonQuery("INSERT INTO One (Id) VALUES (1)"); + return e.ExecuteQuery($"SELECT IIF({expr}, 1, 0) FROM One").Rows.First()[0]; + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Access text comparison is case-insensitive and ignores trailing spaces (verified vs ACE). + [Fact] + public void Equality_is_case_insensitive_and_trailing_space_insensitive() + { + Assert.Equal(1, Scalar("'London' = 'LONDON'")); + Assert.Equal(1, Scalar("'abc' = 'abc '")); + Assert.Equal(1, Scalar("'abc ' = 'abc'")); + Assert.Equal(1, Scalar("'' = ' '")); + Assert.Equal(0, Scalar("'London' = 'Paris'")); + } + + [Fact] + public void Ordering_is_case_insensitive() + { + Assert.Equal(0, Scalar("'London' < 'london'")); // equal → not less + Assert.Equal(1, Scalar("'A' < 'b'")); + Assert.Equal(1, Scalar("'a' < 'B'")); + } + + // Accented letters sort next to their base letter (invariant-culture collation), matching ACE — an + // accented letter is not shoved past 'z' the way an ordinal (code-point) compare would. + [Fact] + public void Ordering_is_accent_aware() + { + Assert.Equal(1, Scalar("'é' < 'f'")); // é sorts near e, before f + Assert.Equal(1, Scalar("'é' < 'z'")); + Assert.Equal(1, Scalar("'café' < 'cafz'")); + Assert.Equal(1, Scalar("'e' < 'é'")); // but the accent still orders after the bare letter + Assert.Equal(0, Scalar("'café' = 'cafe'")); // and stays significant for equality + } + + // DISTINCT and GROUP BY treat strings case-insensitively (and ignore trailing spaces), like Access. + [Fact] + public void Distinct_and_group_by_are_case_insensitive() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE C (Id LONG, City VARCHAR(20))"); + e.ExecuteNonQuery("INSERT INTO C (Id, City) VALUES (1, 'London')"); + e.ExecuteNonQuery("INSERT INTO C (Id, City) VALUES (2, 'LONDON')"); + e.ExecuteNonQuery("INSERT INTO C (Id, City) VALUES (3, 'london ')"); + e.ExecuteNonQuery("INSERT INTO C (Id, City) VALUES (4, 'Paris')"); + + Assert.Equal(2, e.ExecuteQuery("SELECT DISTINCT City FROM C").Rows.Count()); // London*, Paris + Assert.Equal(2, e.ExecuteQuery("SELECT City, COUNT(*) FROM C GROUP BY City").Rows.Count()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // A real column filter is case-insensitive: matching 'london' finds the 'London' customers. + [Fact] + public void Column_filter_matches_regardless_of_case() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + int lower = e.ExecuteQuery("SELECT CustomerID FROM Customers WHERE City = 'london'").Rows.Count(); + int exact = e.ExecuteQuery("SELECT CustomerID FROM Customers WHERE City = 'London'").Rows.Count(); + Assert.True(exact > 0); + Assert.Equal(exact, lower); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/StringFunctionTests.cs b/test/LibRed.Engine.Tests/StringFunctionTests.cs new file mode 100644 index 00000000..82bb243c --- /dev/null +++ b/test/LibRed.Engine.Tests/StringFunctionTests.cs @@ -0,0 +1,97 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class StringFunctionTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"strfn-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static object? Scalar(string expr) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE One (Id LONG)"); + e.ExecuteNonQuery("INSERT INTO One (Id) VALUES (1)"); + return e.ExecuteQuery($"SELECT {expr} FROM One").Rows.First()[0]; + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Length_case_and_trim() + { + Assert.Equal(5, Scalar("LEN('hello')")); + Assert.Equal("hello", Scalar("LCASE('HeLLo')")); + Assert.Equal("HELLO", Scalar("UCASE('HeLLo')")); + Assert.Equal("hi", Scalar("TRIM(' hi ')")); + Assert.Equal("hi ", Scalar("LTRIM(' hi ')")); + Assert.Equal(" hi", Scalar("RTRIM(' hi ')")); + } + + [Fact] + public void Left_right_mid_are_one_based() + { + Assert.Equal("he", Scalar("LEFT('hello', 2)")); + Assert.Equal("hi", Scalar("LEFT('hi', 5)")); // n > length → whole + Assert.Equal("", Scalar("LEFT('hi', 0)")); + Assert.Equal("lo", Scalar("RIGHT('hello', 2)")); + Assert.Equal("ello", Scalar("MID('hello', 2)")); // 1-based, to end + Assert.Equal("ell", Scalar("MID('hello', 2, 3)")); + Assert.Equal("", Scalar("MID('hello', 10)")); // start past end + } + + [Fact] + public void Instr_is_one_based_with_optional_start_and_compare() + { + Assert.Equal(3, Scalar("INSTR('hello', 'l')")); + Assert.Equal(0, Scalar("INSTR('hello', 'z')")); + Assert.Equal(4, Scalar("INSTR(4, 'hello', 'l')")); // optional leading start + Assert.Equal(1, Scalar("INSTR('Hello', 'h')")); // case-insensitive by default + Assert.Equal(0, Scalar("INSTR(1, 'Hello', 'h', 0)")); // compare 0 = binary/case-sensitive + } + + [Fact] + public void Replace_with_optional_start_and_count() + { + Assert.Equal("aXcaXc", Scalar("REPLACE('abcabc', 'b', 'X')")); + Assert.Equal("Jello", Scalar("REPLACE('Hello', 'h', 'J')")); // case-insensitive + Assert.Equal("bba", Scalar("REPLACE('aaa', 'a', 'b', 1, 2)")); // at most 2 + } + + [Fact] + public void String_functions_propagate_null() + { + Assert.Null(Scalar("LEN(NULL)")); + Assert.Null(Scalar("LEFT(NULL, 2)")); + Assert.Null(Scalar("MID(NULL, 1)")); + Assert.Null(Scalar("INSTR('a', NULL)")); + // Note: REPLACE does NOT propagate null — ACE raises "Data type mismatch" (see InstrRevEdgeCasesTests / + // MidReplaceEdgeCasesTests for the functions that error on null instead of propagating). + } + + // The Left()/Right() functions coexist with LEFT/RIGHT JOIN in the same query. + [Fact] + public void Left_function_and_left_join_coexist() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + int rows = new QueryEngine(db).ExecuteQuery( + "SELECT LEFT(c.CompanyName, 3) FROM Customers AS c " + + "LEFT JOIN Orders AS o ON c.CustomerID = o.CustomerID").Rows.Count(); + Assert.True(rows > 0); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/StringLiteralEscapeTests.cs b/test/LibRed.Engine.Tests/StringLiteralEscapeTests.cs new file mode 100644 index 00000000..3b170c7e --- /dev/null +++ b/test/LibRed.Engine.Tests/StringLiteralEscapeTests.cs @@ -0,0 +1,37 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class StringLiteralEscapeTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"strlit-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // A doubled apostrophe inside a single-quoted string is an escaped apostrophe (SQL standard) — e.g. + // Northwind's 'Bon app''' → "Bon app'". Verify it parses and stores the un-doubled value. + [Theory] + [InlineData("'Bon app'''", "Bon app'")] + [InlineData("'O''Brien'", "O'Brien")] + [InlineData("''''", "'")] + [InlineData("'a''b''c'", "a'b'c")] + [InlineData("'plain'", "plain")] + public void Doubled_quote_is_an_escaped_quote(string literal, string expected) + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE S (Id LONG, V TEXT(50))"); + e.ExecuteNonQuery($"INSERT INTO S (Id, V) VALUES (1, {literal})"); + Assert.Equal(expected, e.ExecuteQuery("SELECT V FROM S").Rows.First()[0]); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/SwitchFunctionTests.cs b/test/LibRed.Engine.Tests/SwitchFunctionTests.cs new file mode 100644 index 00000000..5136b74f --- /dev/null +++ b/test/LibRed.Engine.Tests/SwitchFunctionTests.cs @@ -0,0 +1,49 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Access Switch(cond-1, value-1, cond-2, value-2, …): returns the value of the first true condition, NULL if none +// match, and requires an even argument count. Semantics verified against ACE. Exercised via DEFAULT expressions. +public class SwitchFunctionTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"switch-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return new QueryEngine(JetDatabase.Open(path, readOnly: false)); + } + + private static object? DefaultOf(string type, string def) + { + var e = Fresh(); + e.ExecuteNonQuery($"CREATE TABLE T ( K LONG PRIMARY KEY, V {type} DEFAULT {def} )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e.ExecuteQuery("SELECT V FROM T").Rows.Single()[0]; + } + + [Theory] + [InlineData("Switch(1=1, 10, 1=2, 20)", 10)] // first condition true + [InlineData("Switch(1=2, 10, 1=1, 20)", 20)] // second condition true + [InlineData("Switch(Now() > #1/1/2000#, 111, True, 222)", 111)] // first true wins (env-function condition) + public void Switch_returns_the_first_true_conditions_value(string def, int expected) + => Assert.Equal(expected, Convert.ToInt32(DefaultOf("LONG", def))); + + [Fact] + public void Switch_returns_null_when_no_condition_matches() + => Assert.Null(DefaultOf("LONG", "Switch(1=2, 10, 2=3, 20)")); + + [Fact] + public void Switch_returns_string_values() + => Assert.Equal("b", DefaultOf("TEXT(10)", "Switch(1=2, 'a', 1=1, 'b')")); + + [Fact] + public void Switch_with_an_odd_argument_count_is_rejected() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY, V LONG DEFAULT Switch(1=1, 10, 1=2) )"); + var ex = Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)")); + Assert.Contains("Wrong number of arguments", ex.Message); + } +} diff --git a/test/LibRed.Engine.Tests/TopParameterTests.cs b/test/LibRed.Engine.Tests/TopParameterTests.cs new file mode 100644 index 00000000..98a3e99f --- /dev/null +++ b/test/LibRed.Engine.Tests/TopParameterTests.cs @@ -0,0 +1,70 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class TopParameterTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"top-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + [Fact] + public void Top_accepts_a_parameter() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + int rows = e.ExecuteQuery("SELECT TOP @n CustomerID FROM Customers", + new Dictionary { ["n"] = 3 }).Rows.Count(); + Assert.Equal(3, rows); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Top_accepts_a_parameter_expression() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var e = new QueryEngine(db); + int rows = e.ExecuteQuery("SELECT TOP @a + @b * FROM Customers", + new Dictionary { ["a"] = 2, ["b"] = 3 }).Rows.Count(); + Assert.Equal(5, rows); // @a + @b, and the SELECT star is not swallowed by the TOP expression + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Top_literal_with_star_still_parses() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + Assert.Equal(4, new QueryEngine(db).ExecuteQuery("SELECT TOP 4 * FROM Customers").Rows.Count()); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void View_with_a_parameterized_top_is_rejected() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + Assert.Throws(() => new QueryEngine(db).ExecuteNonQuery( + "CREATE VIEW `V` AS SELECT TOP @n `CustomerID` FROM `Customers`")); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/TransactionIsolationTests.cs b/test/LibRed.Engine.Tests/TransactionIsolationTests.cs new file mode 100644 index 00000000..ff1ebc9f --- /dev/null +++ b/test/LibRed.Engine.Tests/TransactionIsolationTests.cs @@ -0,0 +1,104 @@ +using System.Linq; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Two connections on one physical file must not see each other's UNCOMMITTED writes. A transactional write is +// buffered in the writer's private overlay and only published on commit (read-committed isolation), so a +// concurrent reader sees committed data — never a dirty page. This is exactly what keeps EF's parallel +// shared-store tests, each mutating inside a rolled-back transaction, from leaking into concurrent readers. +// Before the deferred-write overlay, the shared write-through page cache exposed the uncommitted page and a +// rolled-back "Updated" was dirty-read by other tests (see the 2026-07-24 cross-platform CI investigation). +public class TransactionIsolationTests +{ + private static string FreshDb() + { + string path = Path.Combine(Path.GetTempPath(), $"txniso-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + private static string Contact(QueryEngine e, string id) => + (string)e.ExecuteQuery($"SELECT ContactName FROM Customers WHERE CustomerID = '{id}'").Rows.Single()[0]!; + + [Fact] + public void A_second_connection_does_not_see_an_uncommitted_update_and_rollback_leaks_nothing() + { + string path = FreshDb(); + var writerDb = JetDatabase.Open(path, readOnly: false); + var readerDb = JetDatabase.Open(path, readOnly: false); + try + { + var writer = new QueryEngine(writerDb); + var reader = new QueryEngine(readerDb); + + string original = Contact(reader, "ALFKI"); + Assert.NotEqual("Updated", original); + + writer.ExecuteNonQuery("BEGIN TRANSACTION"); + writer.ExecuteNonQuery("UPDATE Customers SET ContactName = 'Updated' WHERE CustomerID = 'ALFKI'"); + + // The writer sees its own write (read-your-writes)… + Assert.Equal("Updated", Contact(writer, "ALFKI")); + // …but the concurrent reader still sees the committed value — no dirty read. + Assert.Equal(original, Contact(reader, "ALFKI")); + + writer.ExecuteNonQuery("ROLLBACK"); + + // After rollback both see the original; nothing the transaction wrote survived anywhere. + Assert.Equal(original, Contact(writer, "ALFKI")); + Assert.Equal(original, Contact(reader, "ALFKI")); + } + finally { writerDb.Dispose(); readerDb.Dispose(); File.Delete(path); } + } + + [Fact] + public void A_committed_update_becomes_visible_to_the_other_connection() + { + string path = FreshDb(); + var writerDb = JetDatabase.Open(path, readOnly: false); + var readerDb = JetDatabase.Open(path, readOnly: false); + try + { + var writer = new QueryEngine(writerDb); + var reader = new QueryEngine(readerDb); + + writer.ExecuteNonQuery("BEGIN TRANSACTION"); + writer.ExecuteNonQuery("UPDATE Customers SET ContactName = 'Committed' WHERE CustomerID = 'ALFKI'"); + Assert.NotEqual("Committed", Contact(reader, "ALFKI")); // not yet + writer.ExecuteNonQuery("COMMIT"); + Assert.Equal("Committed", Contact(reader, "ALFKI")); // now visible + } + finally { writerDb.Dispose(); readerDb.Dispose(); File.Delete(path); } + } + + [Fact] + public void An_uncommitted_insert_is_invisible_until_commit() + { + string path = FreshDb(); + var writerDb = JetDatabase.Open(path, readOnly: false); + var readerDb = JetDatabase.Open(path, readOnly: false); + try + { + var writer = new QueryEngine(writerDb); + var reader = new QueryEngine(readerDb); + + int Count(QueryEngine e) => + Convert.ToInt32(e.ExecuteQuery("SELECT COUNT(*) FROM Customers").Rows.Single()[0]); + int before = Count(reader); + + writer.ExecuteNonQuery("BEGIN TRANSACTION"); + writer.ExecuteNonQuery( + "INSERT INTO Customers (CustomerID, CompanyName) VALUES ('ZZZZZ', 'Ghost Co')"); + Assert.Equal(before + 1, Count(writer)); // writer sees its own insert + Assert.Equal(before, Count(reader)); // reader does not + + writer.ExecuteNonQuery("ROLLBACK"); + Assert.Equal(before, Count(writer)); + Assert.Equal(before, Count(reader)); + } + finally { writerDb.Dispose(); readerDb.Dispose(); File.Delete(path); } + } +} diff --git a/test/LibRed.Engine.Tests/TrimFunctionsTests.cs b/test/LibRed.Engine.Tests/TrimFunctionsTests.cs new file mode 100644 index 00000000..a320864d --- /dev/null +++ b/test/LibRed.Engine.Tests/TrimFunctionsTests.cs @@ -0,0 +1,41 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// Trim/LTrim/RTrim are single-argument and remove ONLY spaces (not tabs or other whitespace, and no trim-char +// parameter) — verified vs ACE. NULL-propagating. +public class TrimFunctionsTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"trim-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T ( K LONG PRIMARY KEY )"); + e.ExecuteNonQuery("INSERT INTO T (K) VALUES (1)"); + return e; + } + + private static object? Eval(string expr) => Fresh().ExecuteQuery($"SELECT {expr} FROM T").Rows.Single()[0]; + + [Theory] + [InlineData("Trim(' hi ')", "hi")] + [InlineData("LTrim(' hi ')", "hi ")] + [InlineData("RTrim(' hi ')", " hi")] + public void Trims_spaces(string expr, string expected) + => Assert.Equal(expected, Convert.ToString(Eval(expr))); + + [Fact] + public void Trim_removes_only_spaces_not_tabs() + // a tab (Chr(9)) either side is preserved — ACE Trim removes spaces only. + => Assert.Equal("\thi\t", Convert.ToString(Eval("Trim(Chr(9) & 'hi' & Chr(9))"))); + + [Theory] + [InlineData("Trim(Null)")] + [InlineData("LTrim(Null)")] + [InlineData("RTrim(Null)")] + public void Trim_propagates_null(string expr) + => Assert.Null(Eval(expr)); +} diff --git a/test/LibRed.Engine.Tests/TypeAliasTests.cs b/test/LibRed.Engine.Tests/TypeAliasTests.cs new file mode 100644 index 00000000..69461b09 --- /dev/null +++ b/test/LibRed.Engine.Tests/TypeAliasTests.cs @@ -0,0 +1,49 @@ +using System.Linq; +using LibRed; +using LibRed.Catalog; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// CREATE TABLE type-name aliases, mapped to the on-disk storage ACE itself produces (audited against the +/// ACE engine: it accepts these names and folds them onto Jet's base types, without a file-format upgrade). +/// +public class TypeAliasTests +{ + private static ColumnDef Column(string sqlType) + { + string path = Path.Combine(Path.GetTempPath(), $"alias-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery($"CREATE TABLE T (C {sqlType})"); + return e.Database.OpenTable("T").Definition.Columns.First(c => c.Name == "C"); + } + + [Theory] + // SQL-Server aliases ACE folds onto the one 8-byte date / currency type — no narrower storage exists. + [InlineData("SMALLDATETIME", JetDataType.DateTime, 8)] + [InlineData("SMALLMONEY", JetDataType.Currency, 8)] + // Size-less char/varchar/binary default to the MAXIMUM (255 chars = 510 bytes / 510 bytes), not 1. + [InlineData("CHAR", JetDataType.Text, 510)] + [InlineData("VARCHAR", JetDataType.Text, 510)] + [InlineData("BINARY", JetDataType.Binary, 510)] + // Bare TEXT is Memo (long text); TEXT(n) is a sized varchar. + [InlineData("TEXT", JetDataType.Memo, 0)] + [InlineData("TEXT(50)", JetDataType.Text, 100)] + public void Alias_maps_to_ace_storage(string sqlType, JetDataType expectedType, int expectedLength) + { + ColumnDef c = Column(sqlType); + Assert.Equal(expectedType, c.Type); + Assert.Equal(expectedLength, c.Length); + } + + [Fact] + public void Bare_text_is_memo_but_sized_text_is_varchar() + { + Assert.False(Column("TEXT").IsFixedLength); + Assert.Equal(JetDataType.Memo, Column("TEXT").Type); + Assert.Equal(JetDataType.Text, Column("TEXT(50)").Type); + } +} diff --git a/test/LibRed.Engine.Tests/UncorrelatedSubqueryHoistingTests.cs b/test/LibRed.Engine.Tests/UncorrelatedSubqueryHoistingTests.cs new file mode 100644 index 00000000..645b4c28 --- /dev/null +++ b/test/LibRed.Engine.Tests/UncorrelatedSubqueryHoistingTests.cs @@ -0,0 +1,91 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// A subquery whose result doesn't depend on the outer row is evaluated once per statement instead of once per +// row. These pin the semantics: hoisting must never change an answer, and must NOT engage where the result does +// depend on the outer row — including when the dependence is written as a BARE column name, which only the +// evaluator's own resolver can settle. +public class UncorrelatedSubqueryHoistingTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"hoist-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + + // Extra exists ONLY on O, so a bare `Extra` inside a subquery over P must resolve outward. + e.ExecuteNonQuery("CREATE TABLE O ( Id LONG PRIMARY KEY, K LONG, Extra LONG )"); + foreach (int i in new[] { 1, 2, 3, 4 }) + e.ExecuteNonQuery($"INSERT INTO O (Id, K, Extra) VALUES ({i}, {i * 10}, {i * 10})"); + + // P also has a K, so a bare `K` inside a subquery over P binds INWARD to P.K — the mirror of Extra. + e.ExecuteNonQuery("CREATE TABLE P ( Id LONG PRIMARY KEY, K LONG )"); + e.ExecuteNonQuery("INSERT INTO P (Id, K) VALUES (1, 20)"); + e.ExecuteNonQuery("INSERT INTO P (Id, K) VALUES (2, 30)"); + return e; + } + + private static long[] Ids(QueryEngine e, string sql) + => e.ExecuteQuery(sql).Rows.Select(r => Convert.ToInt64(r[0])).OrderBy(x => x).ToArray(); + + [Fact] + public void An_uncorrelated_scalar_subquery_gives_the_same_answer() + // (SELECT MAX(K) FROM P) is 30 for every row of O, so rows with K < 30 are 1 and 2. + => Assert.Equal([1, 2], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE o.K < (SELECT MAX(p.K) FROM P AS p)")); + + [Fact] + public void An_uncorrelated_in_subquery_gives_the_same_answer() + => Assert.Equal([2, 3], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE o.K IN (SELECT p.K FROM P AS p)")); + + [Fact] + public void An_uncorrelated_exists_gives_the_same_answer() + => Assert.Equal([1, 2, 3, 4], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM P AS p WHERE p.K = 20)")); + + [Fact] + public void An_uncorrelated_exists_that_is_empty_excludes_everything() + => Assert.Empty( + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM P AS p WHERE p.K = 999)")); + + [Fact] + public void A_qualified_correlation_still_varies_per_row() + // Must NOT hoist: the subquery's value depends on o.K. + => Assert.Equal([1, 2], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE EXISTS (SELECT 1 FROM P AS p WHERE p.K > o.K)")); + + [Fact] + public void A_correlation_hidden_in_a_conditional_still_varies_per_row() + // The static check exists for this: IIF may not evaluate o.K on the row a trial run happens to see, so a + // trial alone could wrongly conclude the subquery is outer-independent. + => Assert.Equal([1, 2], + Ids(Fresh(), + "SELECT o.Id FROM O AS o WHERE (SELECT MAX(IIF(p.Id > 0, o.K, 0)) FROM P AS p) < 30")); + + [Fact] + public void An_unqualified_column_that_binds_inward_is_hoisted() + // Bare `K` inside a subquery over P binds to P.K, so the subquery is outer-independent: MAX is 30. + => Assert.Equal([1, 2], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE o.K < (SELECT MAX(K) FROM P AS p)")); + + [Fact] + public void An_unqualified_column_that_binds_outward_is_not_hoisted() + // `Extra` exists only on O, so the bare name resolves OUTWARD and the subquery is correlated: its value + // is the current row's Extra (10, 20, 30, 40). Only the evaluator's resolver can tell the difference + // between this and the inward-binding case above; the two are textually identical in shape. + => Assert.Equal([1, 2], + Ids(Fresh(), "SELECT o.Id FROM O AS o WHERE (SELECT MAX(Extra) FROM P AS p) < 25")); + + [Fact] + public void Delete_with_an_uncorrelated_subquery_removes_the_right_rows() + { + QueryEngine e = Fresh(); + int deleted = e.ExecuteNonQuery("DELETE FROM O WHERE O.K < (SELECT MAX(p.K) FROM P AS p)"); + Assert.Equal(2, deleted); + Assert.Equal([3, 4], Ids(e, "SELECT Id FROM O")); + } +} diff --git a/test/LibRed.Engine.Tests/UnionDerivedTableTests.cs b/test/LibRed.Engine.Tests/UnionDerivedTableTests.cs new file mode 100644 index 00000000..8f32fd68 --- /dev/null +++ b/test/LibRed.Engine.Tests/UnionDerivedTableTests.cs @@ -0,0 +1,63 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +/// +/// A parenthesized derived table in FROM may be a set operation (UNION), not just a single SELECT — +/// e.g. Northwind's "Customer and Suppliers by City" view. The grammar/planner handle it as a query, +/// and a CREATE VIEW over it round-trips: it is stored, reconstructed from MSysQueries, and executed. +/// +public class UnionDerivedTableTests +{ + private const string ViewSql = + "CREATE VIEW `CSbyCity` AS SELECT u.City, u.CompanyName, u.ContactName, u.Relationship FROM " + + "(SELECT City, CompanyName, ContactName, 'Customers' AS Relationship FROM Customers " + + "UNION SELECT City, CompanyName, ContactName, 'Suppliers' FROM Suppliers) AS u"; + + private static string Fresh() + { + string p = Path.Combine(Path.GetTempPath(), $"union-derived-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), p); + return p; + } + + [Fact] + public void Union_in_a_derived_table_is_queryable() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path); + var rs = new QueryEngine(db).ExecuteQuery( + "SELECT u.City FROM (SELECT City FROM Customers UNION SELECT City FROM Suppliers) AS u"); + Assert.True(rs.Rows.Count() > 0); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + [Fact] + public void Create_view_over_a_union_derived_table_round_trips() + { + string path = Fresh(); + try + { + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery(ViewSql); + + // Reopen so the view is read back from MSysQueries (reconstructed) and expanded on query. + using (var db = JetDatabase.Open(path)) + { + int viaView = new QueryEngine(db) + .ExecuteQuery("SELECT City, Relationship FROM `CSbyCity`").Rows.Count(); + int viaBase = new QueryEngine(db).ExecuteQuery( + "SELECT u.City FROM (SELECT City, CompanyName, ContactName, 'Customers' AS Relationship FROM Customers " + + "UNION SELECT City, CompanyName, ContactName, 'Suppliers' FROM Suppliers) AS u").Rows.Count(); + Assert.True(viaView > 0); + Assert.Equal(viaBase, viaView); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/UnionTests.cs b/test/LibRed.Engine.Tests/UnionTests.cs new file mode 100644 index 00000000..ca8db7c9 --- /dev/null +++ b/test/LibRed.Engine.Tests/UnionTests.cs @@ -0,0 +1,124 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class UnionTests +{ + private static readonly string Northwind = Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"); + + private static List Query(string sql, out IReadOnlyList columns) + { + using var db = JetDatabase.Open(Northwind); + var rs = new QueryEngine(db).ExecuteQuery(sql); + columns = rs.ColumnNames; + return rs.Rows.ToList(); + } + + [Fact] + public void Union_of_two_cities() + { + const string sql = """ + SELECT `c`.`CustomerID`, `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`City` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + """; + + var rows = Query(sql, out var columns); + Assert.Equal(["CustomerID", "City"], columns); // names from the leading query + Assert.Equal(7, rows.Count); // 1 Berlin + 6 London, all distinct + Assert.Contains(rows, r => (string)r[0]! == "ALFKI" && (string)r[1]! == "Berlin"); + Assert.Equal(6, rows.Count(r => (string)r[1]! == "London")); + } + + [Fact] + public void Union_removes_duplicate_rows() + { + // Same query on both sides (6 distinct London customers): UNION dedupes the two + // identical sets back to 6, UNION ALL keeps all 12. + const string one = "SELECT CustomerID FROM Customers WHERE City = 'London'"; + var distinct = Query($"{one} UNION {one}", out _); + var all = Query($"{one} UNION ALL {one}", out _); + + Assert.Equal(6, distinct.Count); // duplicates removed + Assert.Equal(12, all.Count); // UNION ALL keeps both copies + } + + [Fact] + public void Intersect_keeps_rows_in_both() + { + // Customers in (London or Berlin) INTERSECT customers in (London or Madrid) = London only. + var rows = Query( + "SELECT CustomerID, City FROM Customers WHERE City = 'London' OR City = 'Berlin' " + + "INTERSECT " + + "SELECT CustomerID, City FROM Customers WHERE City = 'London' OR City = 'Madrid'", out _); + + Assert.NotEmpty(rows); + Assert.All(rows, r => Assert.Equal("London", r[1])); // only the shared London rows survive + Assert.Equal(6, rows.Count); + } + + [Fact] + public void Except_keeps_left_rows_not_in_right() + { + // (London or Berlin) EXCEPT (London) = Berlin only. + var rows = Query( + "SELECT CustomerID, City FROM Customers WHERE City = 'London' OR City = 'Berlin' " + + "EXCEPT " + + "SELECT CustomerID, City FROM Customers WHERE City = 'London'", out _); + + Assert.All(rows, r => Assert.Equal("Berlin", r[1])); + Assert.Equal("ALFKI", Assert.Single(rows)[0]); // Berlin has a single customer + } + + [Fact] + public void Union_with_correlated_count_subquery_per_customer() + { + // Correlated COUNT(*) of each customer's orders, unioned with the same query. + // Exercises the empty-group case: customers with zero orders must yield COUNT 0, + // not crash (an aggregate with no GROUP BY over zero rows forms an empty group). + const string side = """ + SELECT `c`.`CustomerID`, ( + SELECT COUNT(*) FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Orders` + FROM `Customers` AS `c` + """; + + var rows = Query($"{side} UNION {side.Replace("`c`", "`c0`").Replace("`o`", "`o0`")}", out var columns); + Assert.Equal(["CustomerID", "Orders"], columns); + Assert.Equal(91, rows.Count); // all customers; UNION dedupes the identical sides + Assert.Equal(830, rows.Sum(r => (int)r[1]!)); // total Northwind orders + Assert.Equal(2, rows.Count(r => (int)r[1]! == 0)); // FISSA and PARIS have no orders + } + + [Fact] + public void Union_collapses_identical_values_to_one() + { + // Selecting only City, all 6 London rows are the same value 'London'. + var rows = Query("SELECT City FROM Customers WHERE City = 'London' UNION " + + "SELECT City FROM Customers WHERE City = 'London'", out _); + Assert.Equal("London", Assert.Single(rows)[0]); + } + + // A parenthesised query expression as the right operand of a set op (EF's Concat-of-Union shape): + // A UNION ALL (B UNION C). The right side is grouped and evaluated as one term. + [Fact] + public void Union_all_with_a_parenthesised_union_operand() + { + var rows = Query( + "SELECT City FROM Customers WHERE City = 'Berlin' " + + "UNION ALL (" + + " SELECT City FROM Customers WHERE City = 'London' " + + " UNION " + + " SELECT City FROM Customers WHERE City = 'Berlin')", out _); + + int berlinLeft = Query("SELECT City FROM Customers WHERE City = 'Berlin'", out _).Count; + Assert.Equal(berlinLeft + 2, rows.Count); // left Berlins (kept) + right {London, Berlin} + Assert.Contains(rows, r => (string?)r[0] == "London"); + } +} diff --git a/test/LibRed.Engine.Tests/UniqueIndexEnforcementTests.cs b/test/LibRed.Engine.Tests/UniqueIndexEnforcementTests.cs new file mode 100644 index 00000000..55d6f328 --- /dev/null +++ b/test/LibRed.Engine.Tests/UniqueIndexEnforcementTests.cs @@ -0,0 +1,108 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +// UNIQUE / PRIMARY index uniqueness is enforced on insert: a duplicate non-null key is rejected, but Jet +// treats NULLs as distinct so a unique index allows multiple nulls (both verified vs ACE). Dropping the +// index lifts the constraint. +public class UniqueIndexEnforcementTests +{ + private static QueryEngine Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"uq-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + var e = new QueryEngine(JetDatabase.Open(path, readOnly: false)); + e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY, Code long)"); + e.ExecuteNonQuery("CREATE UNIQUE INDEX UX_Code ON T (Code)"); + return e; + } + + [Fact] + public void Duplicate_unique_value_is_rejected_but_nulls_are_allowed() + { + var e = Fresh(); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (1, 10)")); + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (2, 10)")); + // NULLs are distinct — two are fine. + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (3, NULL)")); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (4, NULL)")); + // The row that violated uniqueness was not written. + Assert.Equal(3, e.ExecuteQuery("SELECT Id FROM T").Rows.Count()); + } + + [Fact] + public void Duplicate_primary_key_is_rejected() + { + var e = Fresh(); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (1, 100)")); + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (1, 200)")); + } + + [Fact] + public void Update_to_a_duplicate_unique_value_is_rejected() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (1, 10)"); + e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (2, 20)"); + + // Updating row 2's Code to 10 collides with row 1 → rejected, row unchanged. + Assert.Throws(() => e.ExecuteNonQuery("UPDATE T SET Code = 10 WHERE Id = 2")); + Assert.Equal(20, Convert.ToInt32(e.ExecuteQuery("SELECT Code FROM T WHERE Id = 2").Rows.Single()[0])); + + // Updating a row's unique column to its OWN current value is fine (no self-collision), as is a free value. + Assert.Equal(1, e.ExecuteNonQuery("UPDATE T SET Code = 20 WHERE Id = 2")); + Assert.Equal(1, e.ExecuteNonQuery("UPDATE T SET Code = 30 WHERE Id = 2")); + Assert.Equal(30, Convert.ToInt32(e.ExecuteQuery("SELECT Code FROM T WHERE Id = 2").Rows.Single()[0])); + } + + // Creating a unique index over rows that are already duplicated must fail — and must fail cleanly. The + // check runs before the TDEF is touched, so the rejected statement leaves no half-built index behind: + // the table keeps working, and the same CREATE succeeds once the duplicate is gone. + [Fact] + public void Creating_a_unique_index_over_existing_duplicates_is_rejected_and_changes_nothing() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE U (Id long PRIMARY KEY, Code long)"); + e.ExecuteNonQuery("INSERT INTO U (Id, Code) VALUES (1, 10)"); + e.ExecuteNonQuery("INSERT INTO U (Id, Code) VALUES (2, 10)"); + e.ExecuteNonQuery("INSERT INTO U (Id, Code) VALUES (3, 20)"); + + Assert.Throws(() => e.ExecuteNonQuery("CREATE UNIQUE INDEX UX_U ON U (Code)")); + + // No index was created, and nothing about the table moved. + Assert.Throws(() => e.ExecuteNonQuery("DROP INDEX UX_U ON U")); + Assert.Equal(3, e.ExecuteQuery("SELECT Id FROM U").Rows.Count()); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO U (Id, Code) VALUES (4, 10)")); // still unconstrained + + // Once the duplicates go, the very same statement works and then enforces. + e.ExecuteNonQuery("DELETE FROM U WHERE Id IN (2, 4)"); + e.ExecuteNonQuery("CREATE UNIQUE INDEX UX_U ON U (Code)"); + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO U (Id, Code) VALUES (5, 10)")); + } + + // Nulls are exempt from the back-fill check too, just as they are on insert. + [Fact] + public void Creating_a_unique_index_over_existing_nulls_is_allowed() + { + var e = Fresh(); + e.ExecuteNonQuery("CREATE TABLE V (Id long PRIMARY KEY, Code long)"); + e.ExecuteNonQuery("INSERT INTO V (Id, Code) VALUES (1, NULL)"); + e.ExecuteNonQuery("INSERT INTO V (Id, Code) VALUES (2, NULL)"); + e.ExecuteNonQuery("INSERT INTO V (Id, Code) VALUES (3, 30)"); + + e.ExecuteNonQuery("CREATE UNIQUE INDEX UX_V ON V (Code)"); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO V (Id, Code) VALUES (4, NULL)")); + Assert.Throws(() => e.ExecuteNonQuery("INSERT INTO V (Id, Code) VALUES (5, 30)")); + } + + [Fact] + public void Dropping_the_unique_index_lifts_enforcement() + { + var e = Fresh(); + e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (1, 10)"); + e.ExecuteNonQuery("DROP INDEX UX_Code ON T"); + Assert.Equal(1, e.ExecuteNonQuery("INSERT INTO T (Id, Code) VALUES (2, 10)")); // dup now allowed + } +} diff --git a/test/LibRed.Engine.Tests/UpdateTests.cs b/test/LibRed.Engine.Tests/UpdateTests.cs new file mode 100644 index 00000000..81498bbd --- /dev/null +++ b/test/LibRed.Engine.Tests/UpdateTests.cs @@ -0,0 +1,103 @@ +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class UpdateTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"update-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + [Fact] + public void Update_sets_values_with_where_and_current_value_expressions() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE T (Id counter PRIMARY KEY, N long, S text(200), M memo)"); + for (int i = 0; i < 3; i++) e.ExecuteNonQuery($"INSERT INTO T (N, S, M) VALUES ({i}, 'short{i}', 'm{i}')"); + + // SET value referencing the current value; WHERE targets one row. @@ROWCOUNT = 1. + Assert.Equal(1, e.ExecuteNonQuery("UPDATE T SET N = N + 100 WHERE Id = 2")); + Assert.Equal(101, Convert.ToInt32(e.ExecuteQuery("SELECT N FROM T WHERE Id = 2").Rows.Single()[0])); + Assert.Equal(0, Convert.ToInt32(e.ExecuteQuery("SELECT N FROM T WHERE Id = 1").Rows.Single()[0])); // untouched + + // Multi-column SET, and a variable-length grow (row repacks in place). + e.ExecuteNonQuery("UPDATE T SET S = 'a considerably longer string value that grows the row', N = 5 WHERE Id = 2"); + var r = e.ExecuteQuery("SELECT N, S FROM T WHERE Id = 2").Rows.Single(); + Assert.Equal(5, Convert.ToInt32(r[0])); + Assert.Equal("a considerably longer string value that grows the row", r[1]); + + // Memo grows to an LVAL page. + string big = new('x', 5000); + e.ExecuteNonQuery($"UPDATE T SET M = '{big}' WHERE Id = 2"); + Assert.Equal(big, e.ExecuteQuery("SELECT M FROM T WHERE Id = 2").Rows.Single()[0]); + + // WHERE-less UPDATE hits every row; @@ROWCOUNT reflects it. + Assert.Equal(3, e.ExecuteNonQuery("UPDATE T SET N = 0")); + Assert.Equal(3, Convert.ToInt32(e.ExecuteQuery("SELECT @@ROWCOUNT").Rows.Single()[0])); + Assert.All(e.ExecuteQuery("SELECT N FROM T").Rows, row => Assert.Equal(0, Convert.ToInt32(row[0]))); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Growing a row so it no longer fits its page relocates it (Access's overflow-forwarding: the slot + // becomes a pointer to the row on another page; the row id is preserved). All rows stay readable. + [Fact] + public void Update_that_grows_a_row_past_its_page_relocates_it() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE T (Id counter PRIMARY KEY, A text(255), B text(255), C text(255))"); + string mid = new('m', 80), big = new('X', 255); + for (int i = 0; i < 7; i++) e.ExecuteNonQuery($"INSERT INTO T (A,B,C) VALUES ('{mid}','{mid}','{mid}')"); // ~fill a page + + Assert.Equal(1, e.ExecuteNonQuery($"UPDATE T SET A='{big}', B='{big}', C='{big}' WHERE Id = 3")); + + // Every row is still readable (the relocated one is followed through its forward pointer). + var rows = e.ExecuteQuery("SELECT Id, A FROM T").Rows.ToList(); + Assert.Equal(7, rows.Count); + Assert.Equal(Enumerable.Range(1, 7), rows.Select(r => Convert.ToInt32(r[0])).OrderBy(x => x)); + Assert.Equal(big, e.ExecuteQuery("SELECT A FROM T WHERE Id = 3").Rows.Single()[0]); // the grown row + Assert.Equal(mid, e.ExecuteQuery("SELECT A FROM T WHERE Id = 4").Rows.Single()[0]); // a neighbour, untouched + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Updating an indexed column moves its index entry (old key removed, new key added), so a seek by the + // new key finds the row and a seek by the old key doesn't. + [Fact] + public void Update_of_an_indexed_column_moves_the_index_entry() + { + string path = Fresh(); + try + { + using var db = JetDatabase.Open(path, readOnly: false); + var e = new QueryEngine(db); + e.ExecuteNonQuery("CREATE TABLE T (Id long PRIMARY KEY, N long)"); + for (int i = 1; i <= 5; i++) e.ExecuteNonQuery($"INSERT INTO T (Id, N) VALUES ({i}, {i * 10})"); + + Assert.Equal(1, e.ExecuteNonQuery("UPDATE T SET Id = 20 WHERE Id = 2")); + + // The row is now found under the new key, not the old one; N came along unchanged. + Assert.Empty(e.ExecuteQuery("SELECT N FROM T WHERE Id = 2").Rows); + Assert.Equal(20, Convert.ToInt32(e.ExecuteQuery("SELECT N FROM T WHERE Id = 20").Rows.Single()[0])); + Assert.Equal(5, e.ExecuteQuery("SELECT Id FROM T").Rows.Count()); // still five rows + + // A composite move: change both the key and a non-key column together. + Assert.Equal(1, e.ExecuteNonQuery("UPDATE T SET Id = 99, N = 990 WHERE Id = 20")); + Assert.Equal(990, Convert.ToInt32(e.ExecuteQuery("SELECT N FROM T WHERE Id = 99").Rows.Single()[0])); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/LibRed.Engine.Tests/WideTableTests.cs b/test/LibRed.Engine.Tests/WideTableTests.cs new file mode 100644 index 00000000..db9e400b --- /dev/null +++ b/test/LibRed.Engine.Tests/WideTableTests.cs @@ -0,0 +1,69 @@ +using System.Text; +using LibRed; +using LibRed.Engine; +using Xunit; + +namespace LibRed.Engine.Tests; + +public class WideTableTests +{ + private static string Fresh() + { + string path = Path.Combine(Path.GetTempPath(), $"wide-{Guid.NewGuid():N}.accdb"); + File.Copy(Path.Combine(AppContext.BaseDirectory, "Data", "Northwind.accdb"), path); + return path; + } + + // A table with enough columns that its TDEF exceeds one page (the owned-types/proxy shape) must build + // and read back — previously threw "Destination is too short". + [Fact] + public void Create_table_with_a_multi_page_definition() + { + const int n = 110; + string path = Fresh(); + try + { + var ddl = new StringBuilder("CREATE TABLE Wide (Id counter NOT NULL"); + for (int i = 0; i < n; i++) ddl.Append($", Col{i} longchar NULL"); + ddl.Append(", CONSTRAINT PK_Wide PRIMARY KEY (Id))"); + + using (var db = JetDatabase.Open(path, readOnly: false)) + new QueryEngine(db).ExecuteNonQuery(ddl.ToString()); + + using (var db = JetDatabase.Open(path, readOnly: false)) // fresh open: read the (multi-page) definition back + { + var e = new QueryEngine(db); + var t = db.Catalog.Tables.First(x => x.Name == "Wide"); + Assert.Equal(n + 1, t.Columns.Count); // Id + n columns + Assert.Equal("Col50", t.Columns.Single(c => c.Name == "Col50").Name); // names intact + Assert.Contains(t.Indexes, ix => ix.IsPrimaryKey); + + // Data round-trips, including the far-end column. + e.ExecuteNonQuery($"INSERT INTO Wide (Col0, Col{n - 1}) VALUES ('a', 'z')"); + var row = e.ExecuteQuery($"SELECT Col0, Col{n - 1} FROM Wide").Rows.First(); + Assert.Equal("a", row[0]); + Assert.Equal("z", row[1]); + } + } + finally { try { File.Delete(path); } catch (IOException) { } } + } + + // Jet/ACE caps a table at 255 columns. LibRed rejects a 256-column table up front rather than writing + // a definition Access would refuse to open. + [Fact] + public void Create_table_beyond_255_columns_is_rejected() + { + string path = Fresh(); + try + { + var ddl = new StringBuilder("CREATE TABLE TooWide (Id counter NOT NULL"); + for (int i = 0; i < 255; i++) ddl.Append($", Col{i} integer NULL"); // Id + 255 = 256 columns + ddl.Append(")"); + + using var db = JetDatabase.Open(path, readOnly: false); + var ex = Assert.Throws(() => new QueryEngine(db).ExecuteNonQuery(ddl.ToString())); + Assert.Contains("255", ex.Message); + } + finally { try { File.Delete(path); } catch (IOException) { } } + } +} diff --git a/test/Shared/TestUtilities/Xunit/JetXunitTestRunner.cs b/test/Shared/TestUtilities/Xunit/JetXunitTestRunner.cs index 94e4fa2a..34bad103 100644 --- a/test/Shared/TestUtilities/Xunit/JetXunitTestRunner.cs +++ b/test/Shared/TestUtilities/Xunit/JetXunitTestRunner.cs @@ -2,10 +2,8 @@ using System.Collections.Generic; using System.Data.Odbc; using System.Data.OleDb; -using System.IO; using System.Linq; using System.Reflection; -using System.Text; using System.Threading; using System.Threading.Tasks; using Xunit.Abstractions; @@ -166,7 +164,6 @@ private static bool ContainsSystemResourceExceeded(Exception exception) protected virtual bool SkipFailedTest(Exception exception) { var skip = false; - var unexpectedUnsupportedTranslation = false; var aggregateException = exception as AggregateException ?? new AggregateException(exception); @@ -183,7 +180,6 @@ protected virtual bool SkipFailedTest(Exception exception) message.Contains("skipping rows") || message.Contains("sequences"); skip = expectedUnsupportedTranslation; - unexpectedUnsupportedTranslation = !expectedUnsupportedTranslation; } else if (message.StartsWith("Unsupported Jet expression")) { @@ -200,23 +196,8 @@ protected virtual bool SkipFailedTest(Exception exception) if (skip) { - var sb = new StringBuilder(); - sb.AppendLine(message.ReplaceLineEndings(" ")); - sb.AppendLine("-----"); - - File.AppendAllText("ExpectedUnsupportedTranslations.txt", sb.ToString()); - break; } - - if (unexpectedUnsupportedTranslation) - { - var sb = new StringBuilder(); - sb.AppendLine(message.ReplaceLineEndings(" ")); - sb.AppendLine("-----"); - - File.AppendAllText("UnexpectedUnsupportedTranslations.txt", sb.ToString()); - } } } diff --git a/tools/JetLockTrace/JetLockTrace.csproj b/tools/JetLockTrace/JetLockTrace.csproj new file mode 100644 index 00000000..fd3c7c4b --- /dev/null +++ b/tools/JetLockTrace/JetLockTrace.csproj @@ -0,0 +1,12 @@ + + + + Exe + net10.0 + JetLockTrace + jetlocktrace + enable + true + + + diff --git a/tools/JetLockTrace/LockDecoder.cs b/tools/JetLockTrace/LockDecoder.cs new file mode 100644 index 00000000..bfdbe315 --- /dev/null +++ b/tools/JetLockTrace/LockDecoder.cs @@ -0,0 +1,171 @@ +namespace JetLockTrace; + +/// +/// Decodes the extended byte-range lock offsets Jet/ACE places on the lock file, and the page/field targets of +/// reads and writes against the database file. +/// +/// +/// +/// Lock offsets pack three things: +/// +/// +/// offset = (region << 28) | (page << 9) | userNumber +/// +/// +/// The << 9 spacing gives every page a 512-byte window in lock space, because an exclusive lock +/// spans 256-512 bytes and must not reach into the next page's window. It is not the page size — Jet +/// 3.5 used 2 KB pages and the same shift, and ACE uses 4 KB. +/// +/// +/// The locks are placed beyond end-of-file, so nothing in the database is ever actually locked; the ranges are +/// pure semaphores. Region names come from the Microsoft Jet locking white paper +/// (docs/JetWhitePapers_UPDATE1/Jetlock.docx) and are the Jet development team's own. +/// +/// +public static class LockDecoder +{ + /// + /// Bytes of lock space reserved per page: 256 for the rows plus 256 for the users. See the remarks on + /// . + /// + private const int LockBytesPerPage = 512; + + /// + /// The first half of a page's lock window: one byte per row, at rowId + 1, so byte 0 is unused and + /// locks always begin at +1. The user array occupies the bytes above this. + /// + private const int RowBytesPerPage = 256; + + /// Offset of the user commit-byte table within page 0. + private const int CommitByteTableOffset = 0xE00; + + /// Bytes per user in the commit-byte table (Jet 3.0 and later; Jet 2.x used one). + private const int CommitByteWidth = 2; + + /// Bytes per entry in the lock file: 32 for the computer name, 32 for the security name. + private const int UserRecordWidth = 64; + + private static string RegionName(long region) + => region switch + { + 0x1 => "user-lock", + // Jet 3.0 moved read locks into the write-lock range; they differ only by being shared and 1 byte wide. + 0x2 => "write/read", + 0x3 => "read/commit", + 0x4 => "table-read", + 0x5 => "table-write", + 0x6 => "deny-write", + _ => $"region-{region:X}", + }; + + /// Describes a lock or unlock at spanning bytes. + public static string DescribeLock(long offset, long? length) + { + long region = (offset >> 28) & 0xF; + string kind = RegionName(region); + string width = DescribeWidth(length); + + long withinRegion = offset & 0x0FFFFFFF; + + // Region 1 is not page-based, and its stride is 256 rather than the 512 of regions 2-6: it holds groups of + // one shared byte per user, so 256 bytes is enough and an exclusive lock over a whole group is exactly 256 + // wide. Group 0 is the user-slot array the white paper documents (0x10000001..0x100000FF); observed traces + // also use groups 1 and 5, which the paper does not mention. + if (region == 0x1) + { + long group = withinRegion >> 8; + long slot = withinRegion & 0xFF; + string note = group == 0 ? "" : " <-- undocumented group"; + + return length is > 1 + ? $"{kind,-11} group {group,-2} users {slot}..{slot + length.Value - 1,-4} {width} [0x{withinRegion:X}]{note}" + : $"{kind,-11} group {group,-2} user {slot,-9} {width} [0x{withinRegion:X}]{note}"; + } + + long page = withinRegion / LockBytesPerPage; + long offsetInWindow = withinRegion % LockBytesPerPage; + + // A shared lock is one byte, and that byte names a row: byte = rowId + 1, so byte 0 is unused and locks + // always start at +1. Verified against the fixture — a page holding 53 rows is locked at bytes up to 53, + // and pages holding a single row are only ever locked at byte 1. + if (length == 1) + { + return $"{kind,-11} page {page,-6} row {offsetInWindow - 1,-4} {width} [0x{withinRegion:X}]"; + } + + // An exclusive lock blankets all 256 row bytes and then extends far enough to touch the holder's own byte in + // the user array that follows, so the USER is identified by where the range ends, not where it starts — + // which is what the white paper means by "the last two digits of the ending lock range". That also explains + // the 512-byte window: 256 row bytes + 256 user bytes. + if (length is >= RowBytesPerPage and <= LockBytesPerPage && offsetInWindow is 0 or 1) + { + long user = offsetInWindow + length.Value - 1 - RowBytesPerPage; + return $"{kind,-11} page {page,-6} all rows, user {user,-3} {width} [0x{withinRegion:X}]"; + } + + return $"{kind,-11} page {page,-6} +{offsetInWindow,-5} {width} [0x{withinRegion:X}]"; + } + + private static string DescribeWidth(long? length) + => length switch + { + null => "?", + 1 => "SHARED(1)", + // The white paper: an exclusive lock takes the first 256 bytes to block and detect shared locks, plus + // enough beyond that to identify which user holds it. + >= 256 and <= 512 => $"EXCL({length})", + _ => $"RANGE({length})", + }; + + /// Describes a read or write against the database file. + public static string DescribeDatabaseIo(long offset, long? length, int pageSize) + { + long page = offset / pageSize; + long inPage = offset % pageSize; + + if (page == 0 && inPage >= CommitByteTableOffset) + { + long slot = (inPage - CommitByteTableOffset) / CommitByteWidth; + return $"commit-byte user {slot} (page 0 +0x{inPage:X3}, {length} bytes)"; + } + + if (inPage == 0 && length == pageSize) + { + return $"page {page,-6} (full)"; + } + + // A single read can span many pages — Access pulls 64 KB at once when opening a database. + if (inPage == 0 && length > pageSize) + { + long lastPage = page + ((length.Value + pageSize - 1) / pageSize) - 1; + return $"pages {page}..{lastPage} ({length} bytes)"; + } + + return $"page {page,-6} +{inPage,-5} ({length} bytes)"; + } + + /// Describes a read or write against the lock file. + /// + /// Reports the record index rather than a user slot, because the mapping between the two is not settled: + /// the white paper says slot 1 writes "the first 64 bytes" (implying (slot - 1) * 64) but also that a + /// lock at 0x10000040 writes "starting at 4096 bytes" (implying slot * 64), and those disagree. + /// An observed trace has slot 1 writing at offset 0. Left as an index until an experiment settles it. + /// + public static string DescribeLockFileIo(long offset, long? length) + => length == UserRecordWidth && offset % UserRecordWidth == 0 + ? $"user record #{offset / UserRecordWidth} (computer + security name)" + : $"offset {offset} ({length} bytes)"; + + /// Whether names a lock file rather than a database. + public static bool IsLockFile(string path) + => path.EndsWith(".laccdb", StringComparison.OrdinalIgnoreCase) + || path.EndsWith(".ldb", StringComparison.OrdinalIgnoreCase); + + /// Whether names a database or its lock file. + public static bool IsDatabaseOrLockFile(string path) + => IsLockFile(path) + || path.EndsWith(".accdb", StringComparison.OrdinalIgnoreCase) + || path.EndsWith(".mdb", StringComparison.OrdinalIgnoreCase) + || path.EndsWith(".accde", StringComparison.OrdinalIgnoreCase) + || path.EndsWith(".mdw", StringComparison.OrdinalIgnoreCase); +} diff --git a/tools/JetLockTrace/ProcMonCsv.cs b/tools/JetLockTrace/ProcMonCsv.cs new file mode 100644 index 00000000..cb64fbdb --- /dev/null +++ b/tools/JetLockTrace/ProcMonCsv.cs @@ -0,0 +1,182 @@ +using System.Globalization; + +namespace JetLockTrace; + +/// One row of a Process Monitor CSV export, reduced to the fields that matter here. +/// e.g. LockFile, ReadFile. +/// The file the operation was against. +/// Byte offset from the Detail column, if it had one. +/// Byte length from the Detail column, if it had one. +/// For a lock, whether Detail said Exclusive: True. +public sealed record TraceEvent(string Operation, string Path, long? Offset, long? Length, bool? Exclusive); + +/// Reads a Process Monitor CSV export. +/// +/// ProcMon quotes every field, and the Detail column contains commas inside those quotes +/// ("Offset: 536,905,217, Length: 257"), so the fields have to be split with a real CSV reader rather +/// than by splitting on commas. Numbers carry thousands separators for the same reason. +/// +public static class ProcMonCsv +{ + /// The operations worth decoding; everything else in a trace is noise for this purpose. + private static readonly HashSet InterestingOperations = new(StringComparer.OrdinalIgnoreCase) + { + "LockFile", "UnlockFile", "UnlockFileSingle", "ReadFile", "WriteFile", + }; + + /// Parses , keeping only lock/unlock/read/write rows. + public static IEnumerable Read(string path) + { + using var reader = new StreamReader(path); + + string[]? header = ReadRecord(reader); + if (header is null) + { + yield break; + } + + int operationColumn = IndexOf(header, "Operation"); + int pathColumn = IndexOf(header, "Path"); + int detailColumn = IndexOf(header, "Detail"); + + if (operationColumn < 0 || pathColumn < 0 || detailColumn < 0) + { + throw new InvalidDataException( + "The CSV has no Operation/Path/Detail columns. Export from Process Monitor with " + + "File > Save > Comma-Separated Values, leaving the default columns in place."); + } + + while (ReadRecord(reader) is { } fields) + { + if (fields.Length <= detailColumn) + { + continue; + } + + string operation = fields[operationColumn]; + if (!InterestingOperations.Contains(operation)) + { + continue; + } + + string detail = fields[detailColumn]; + + yield return new TraceEvent( + operation, + fields[pathColumn], + FindNumber(detail, "Offset:"), + FindNumber(detail, "Length:"), + detail.Contains("Exclusive: True", StringComparison.OrdinalIgnoreCase) + ? true + : detail.Contains("Exclusive: False", StringComparison.OrdinalIgnoreCase) + ? false + : null); + } + } + + private static int IndexOf(string[] header, string name) + => Array.FindIndex(header, h => h.Trim().Equals(name, StringComparison.OrdinalIgnoreCase)); + + /// Pulls the number following , e.g. Offset: 536,905,217 → 536905217. + private static long? FindNumber(string detail, string label) + { + int start = detail.IndexOf(label, StringComparison.OrdinalIgnoreCase); + if (start < 0) + { + return null; + } + + start += label.Length; + + // Skip to the first digit, then take digits and thousands separators. + while (start < detail.Length && !char.IsDigit(detail[start])) + { + // A non-digit, non-space before the number means we are looking at a different field. + if (detail[start] is not (' ' or '\t')) + { + return null; + } + + start++; + } + + int end = start; + while (end < detail.Length && (char.IsDigit(detail[end]) || detail[end] == ',')) + { + end++; + } + + return end > start + && long.TryParse( + detail.AsSpan(start, end - start), + NumberStyles.AllowThousands, + CultureInfo.InvariantCulture, + out long value) + ? value + : null; + } + + /// Reads one CSV record, honouring quotes and embedded newlines. + private static string[]? ReadRecord(StreamReader reader) + { + if (reader.EndOfStream) + { + return null; + } + + var fields = new List(); + var field = new System.Text.StringBuilder(); + var quoted = false; + + while (true) + { + int next = reader.Read(); + + if (next < 0) + { + fields.Add(field.ToString()); + return fields.Count == 1 && fields[0].Length == 0 ? null : fields.ToArray(); + } + + var c = (char)next; + + if (quoted) + { + if (c != '"') + { + field.Append(c); + } + else if (reader.Peek() == '"') + { + reader.Read(); + field.Append('"'); + } + else + { + quoted = false; + } + + continue; + } + + switch (c) + { + case '"': + quoted = true; + break; + case ',': + fields.Add(field.ToString()); + field.Clear(); + break; + case '\r': + break; + case '\n': + fields.Add(field.ToString()); + return fields.ToArray(); + default: + field.Append(c); + break; + } + } + } +} diff --git a/tools/JetLockTrace/Program.cs b/tools/JetLockTrace/Program.cs new file mode 100644 index 00000000..e7f6e68a --- /dev/null +++ b/tools/JetLockTrace/Program.cs @@ -0,0 +1,172 @@ +using JetLockTrace; + +if (args.Length == 0 || args[0] is "-h" or "--help") +{ + Console.WriteLine( + """ + jetlocktrace — decode Jet/ACE byte-range locks in a Process Monitor trace. + + jetlocktrace [options] + + Options + --page-size Database page size. Default 4096 (Jet 4 / ACE); use 2048 for Jet 3. + --canonical Emit only the decoded operations, with no file column, so two traces of + different scenarios can be diffed directly. + --file Only rows whose path contains , for tracing one database at a time. + --out [path] Write to a file instead of stdout. With no path, writes alongside the CSV as + .locks.txt (or .canonical.txt with --canonical). + + Capture a trace with Process Monitor, filtered to Process Name is MSACCESS.EXE and Path contains + your database name, then File > Save > Comma-Separated Values with the default columns. + + To compare two scenarios: + jetlocktrace open.CSV --canonical --out + jetlocktrace update.CSV --canonical --out + diff open.canonical.txt update.canonical.txt + """); + return 0; +} + +string? csvPath = null; +var pageSize = 4096; +var canonical = false; +string? fileFilter = null; +var toFile = false; +string? outPath = null; + +for (var i = 0; i < args.Length; i++) +{ + switch (args[i]) + { + case "--page-size" when i + 1 < args.Length: + if (!int.TryParse(args[++i], out pageSize) || pageSize <= 0) + { + Console.Error.WriteLine("--page-size needs a positive number."); + return 1; + } + + break; + case "--canonical": + canonical = true; + break; + case "--file" when i + 1 < args.Length: + fileFilter = args[++i]; + break; + case "--out": + toFile = true; + + // The path is optional. Don't swallow the trace itself when it is written after --out, which is the + // one realistic way to get this wrong. + if (i + 1 < args.Length + && !args[i + 1].StartsWith('-') + && !args[i + 1].EndsWith(".csv", StringComparison.OrdinalIgnoreCase)) + { + outPath = args[++i]; + } + + break; + default: + if (args[i].StartsWith('-')) + { + Console.Error.WriteLine($"Unknown option '{args[i]}'. Try --help."); + return 1; + } + + csvPath = args[i]; + break; + } +} + +if (csvPath is null) +{ + Console.Error.WriteLine("No CSV given. Try --help."); + return 1; +} + +if (!File.Exists(csvPath)) +{ + Console.Error.WriteLine($"'{csvPath}' does not exist."); + return 1; +} + +// Auto-name alongside the trace, keeping the suffix distinct per mode so a canonical run never silently +// overwrites a full one. +if (toFile) +{ + outPath ??= Path.Combine( + Path.GetDirectoryName(Path.GetFullPath(csvPath)) ?? ".", + Path.GetFileNameWithoutExtension(csvPath) + (canonical ? ".canonical.txt" : ".locks.txt")); +} + +// The confirmation goes to stderr so it never lands in a redirected stdout. +if (outPath is not null) +{ + Console.Error.WriteLine($"Writing to {outPath}"); +} + +try +{ + using TextWriter output = outPath is null ? Console.Out : new StreamWriter(outPath, append: false); + var decodedCount = 0; + + foreach (TraceEvent e in ProcMonCsv.Read(csvPath)) + { + if (!LockDecoder.IsDatabaseOrLockFile(e.Path)) + { + continue; + } + + if (fileFilter is not null && !e.Path.Contains(fileFilter, StringComparison.OrdinalIgnoreCase)) + { + continue; + } + + if (e.Offset is not { } offset) + { + continue; + } + + bool isLockFile = LockDecoder.IsLockFile(e.Path); + + string decoded = e.Operation switch + { + "LockFile" or "UnlockFile" or "UnlockFileSingle" => LockDecoder.DescribeLock(offset, e.Length), + _ when isLockFile => LockDecoder.DescribeLockFileIo(offset, e.Length), + _ => LockDecoder.DescribeDatabaseIo(offset, e.Length, pageSize), + }; + + // The lock/unlock pairing is the interesting rhythm, so keep the verb but drop ProcMon's noise. + string verb = e.Operation switch + { + "UnlockFileSingle" or "UnlockFile" => "unlock", + "LockFile" => "lock", + "ReadFile" => "read", + "WriteFile" => "write", + _ => e.Operation.ToLowerInvariant(), + }; + + output.WriteLine( + canonical + ? $"{verb,-6} {decoded}" + : $"{verb,-6} {(isLockFile ? "lck" : "db "),-3} {decoded}"); + + decodedCount++; + } + + if (outPath is not null) + { + Console.Error.WriteLine($"{decodedCount} operations decoded."); + } +} +catch (InvalidDataException ex) +{ + Console.Error.WriteLine(ex.Message); + return 1; +} +catch (IOException ex) +{ + Console.Error.WriteLine($"Could not write '{outPath}': {ex.Message}"); + return 1; +} + +return 0; diff --git a/tools/JetLockTrace/README.md b/tools/JetLockTrace/README.md new file mode 100644 index 00000000..ebc5f860 --- /dev/null +++ b/tools/JetLockTrace/README.md @@ -0,0 +1,103 @@ +# jetlocktrace + +Decodes the extended byte-range locks Jet/ACE places while working with a database, from a Process Monitor +trace. Turns raw offsets into pages, users and lock kinds so a trace can be read (and diffed) directly. + +``` +dotnet run --project tools/JetLockTrace -- trace.csv +``` + +| Option | | +|---|---| +| `--page-size ` | Database page size. Default 4096 (Jet 4 / ACE); 2048 for Jet 3. | +| `--canonical` | Omit the file column, so traces of two scenarios diff cleanly. | +| `--file ` | Only rows whose path contains ``. | +| `--out [path]` | Write to a file rather than stdout. With no path, writes next to the CSV as `.locks.txt`, or `.canonical.txt` under `--canonical`. | + +Output goes to stdout by default. `--out` avoids shell redirection — worth using, because `dotnet run` +can emit build output onto stdout and contaminate a redirected file (pass `--no-build` if you do redirect). +The "writing to…" confirmation goes to stderr, so it never ends up in the output. + +Comparing two scenarios: + +``` +jetlocktrace open.CSV --canonical --out +jetlocktrace update.CSV --canonical --out +diff open.canonical.txt update.canonical.txt +``` + +## Capturing a trace + +In Process Monitor, filter to `Process Name is MSACCESS.EXE` and `Path contains `, enable +**Filter > Drop Filtered Events**, then **File > Save > Comma-Separated Values** with the default columns. + +For traces to be comparable across experiments, always start from an *identical copy* of one fixture file — +page numbers must mean the same thing in every run. + +## What it decodes + +Lock offsets pack three fields: + +``` +offset = (region << 28) | (page << 9) | userNumber +``` + +The `<< 9` gives each page a 512-byte window in lock space. It is **not** the page size — Jet 3.5 used 2 KB pages +with the same shift, and ACE uses 4 KB. The window is dimensioned by what it has to address: + +``` +byte 0 unused — locks always start at +1 +bytes 1..256 one byte per row (byte = rowId + 1) +bytes 257..512 one byte per user +``` + +- A **shared** lock is 1 byte and names a **single row**. +- An **exclusive** lock covers all 256 row bytes and then extends far enough to touch the holder's byte in the + user array, so the **user is identified by where the range ends**, not where it starts — which is what the white + paper means by "take the last two digits of the ending lock range". `length 257` = 256 rows + user 1. + +That is also why the paper says exclusive locks "span between 256 and 512 bytes": 256 row bytes plus up to 256 +user bytes, which is the window. + +Verified against `complexDataTestV2010.accdb`: a data page holding 53 rows (`0x0C` row count) is read-locked at +bytes 1–53 — i.e. rowIds 0–52, exactly its range — while pages holding one row are only ever locked at byte 1. + +The locks sit beyond end-of-file, so no database bytes are ever really locked; the ranges are pure semaphores. + +| Region | Lock kind | Target | +|---|---|---| +| `0x1` | User | one byte per connected user, `0x10000001`–`0x100000FF` | +| `0x2` | Write (exclusive) / Read (shared, 1 byte) | data, index and long-value pages | +| `0x3` | Read / Commit — Jet 2.x only | index and long-value pages | +| `0x4` | Table-read | table header page (TBH) | +| `0x5` | Table-write | table header page | +| `0x6` | Table deny-write | table header page | + +Width tells you the mode: `1` byte is shared, `256`–`512` is exclusive (256 to block and detect shared locks, +plus enough beyond that to identify the holder). + +It also decodes I/O against the database file — page numbers, sub-page field writes, and the **commit-byte +table** at page 0 `0xE00`–`0xFFF` (256 users × 2 bytes), which Access writes immediately before and after a +batch of page writes. A nonzero commit byte with no matching user lock is what makes Access declare a file +suspect and demand a repair. + +Region names are the Jet development team's own, from `docs/JetWhitePapers_UPDATE1/Jetlock.docx`. + +## Open questions + +Things the tool deliberately reports rather than explains, pending experiments: + +- **Undocumented groups in region 1.** The white paper describes only the user-slot array + (`0x10000001`–`0x100000FF`), which is group 0 here. Observed ACE 2010 traces also use groups 1 and 5, each + following the same handshake as group 0: take the whole 256-byte group exclusively to test whether anyone else + is present, release, then claim one's own byte within it. What groups 1 and 5 *mean* is unknown. +- **Whether the row array is really 256 wide.** The row/user split above is verified at the low end (a 53-row page, + single-row pages), but no observed trace locks a row above 52 or a user above 1, so the 256/256 boundary is + inferred from the 512-byte window and the paper's "256 to 512 bytes" rather than seen. A page with more than 256 + rows, or a second concurrent session, would confirm it. +- **Which file a lock lands on.** The paper states locks are only ever placed on the lock file, never the + database. One screenshot showed a region `0x6` lock on the `.accdb`; a later CSV export of the same scenario + had it on the `.laccdb`. Unresolved — the `lck`/`db ` column exists to settle it. +- **Record index vs user slot** in the lock file. The paper says slot 1 writes "the first 64 bytes" (implying + `(slot - 1) * 64`) but also that a lock at `0x10000040` writes "starting at 4096 bytes" (implying `slot * 64`). + Reported as a record index until an experiment settles it.